{"version":3,"file":"main.023ed01a90b4ce75f644.bundle.js","mappings":"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","sources":["/webpack/runtime/chunk loaded","/webpack/runtime/create fake namespace object","/webpack/runtime/load script","/webpack/runtime/css loading","/./src/common/ActionMenu.js","/./src/permissions.js","/./src/common/Authorize.js","/./src/common/DividerWithText.js","/./src/common/EventChanges.js","/./src/common/FieldDependency.js","/./src/common/InformationTooltip.js","/./src/common/LazyBoundary.js","/./src/common/LazyDialog.js","/./src/common/LoadingAlert.js","/./src/common/NoResults.js","/./src/common/SquareAlert.js","/./src/common/Wizard.js","/./src/common/calendar/CalendarContext.js","/./src/common/calendar/DragAndDropGrid.js","/./src/common/calendar/DragContext.js","/./src/common/calendar/EventDetails.js","/./src/common/calendar/EventDetailsPopover.js","/./src/common/calendar/Events.js","/./src/common/calendar/SchedulingContext.js","/./src/resources/schedules/dialogs/generator/index.js","/./src/resources/draftgames/dialogs/index.js","/./src/common/calendar/scheduler/AddMenu.js","/./src/common/dialogs/SelectableListView.js","/./src/resources/draftgames/DraftGameShareModal.js","/./src/resources/draftgames/DraftGamesPublishModal.js","/./src/common/calendar/scheduler/GameListFilters.js","/./src/common/calendar/scheduler/SchedulerView.js","/./src/common/cards/Card.js","/./src/common/cards/InfoCard.js","/./src/common/cards/ListCard.js","/./src/common/cards/TableRow.js","/./src/common/dialogs/AlertDialog.js","/./src/common/dialogs/ConfirmDialog.js","/./src/common/dialogs/DialogDatagrid.js","/./src/common/dialogs/DialogForm.js","/./src/common/dialogs/ResourceDialog.js","/./src/common/fields/DateField.js","/./src/common/fields/DateRangeField.js","/./src/common/fields/DifferenceField.js","/./src/common/fields/FunctionField.js","/./src/common/fields/TextArrayField.js","/./src/common/fields/TextLocaleField.js","/./src/common/fields/TimeRangeField.js","/./src/common/fields/UpdatedAtField.js","/./src/common/fields/UserTextField.js","webpack://@hisports/admin/./src/common/fileViewer/FileViewer.module.scss?3e24","/./src/common/fileViewer/PDFFile.js","/./src/common/fileViewer/ImageFile.js","/./src/common/fileViewer/TextFiles.js","/./src/common/fileViewer/AudioFile.js","/./src/common/fileViewer/VideoFile.js","/./src/common/fileViewer/FileViewerPicker.js","/./src/common/fileViewer/PortalLifeCycle.js","/./src/common/fileViewer/FileViewer.js","/./src/common/hooks/hooks.js","/./src/common/icons/StatusIcon.js","/./src/common/icons/UnsanctionedIcon.js","/./src/common/importers/ImportStepper.js","/./src/common/inputs/AutocompleteInput.js","/./src/common/inputs/AutocompleteSuggestion.js","/./src/common/inputs/BasicTimeInput.js","/./src/common/inputs/CheckboxInput.js","/./src/common/inputs/ChipInput.js","/./src/common/inputs/ChipSelectInput.js","/./src/common/inputs/DateInput.js","/./src/common/inputs/EndTimeInput.js","/./src/common/inputs/EnumInputs.js","/./src/common/inputs/MaskedTextInput.js","/./src/common/inputs/SeasonSelector.js","/./src/common/inputs/SignatureInput.js","/./src/common/inputs/SwitchInput.js","/./src/common/ra/ExportButton.js","/./src/common/ra/HorizontalFormIterator.js","/./src/common/ra/SingleFieldList.js","/./src/common/ra/SortedFormIterator.js","/./src/common/ra/Toolbar.js","/./src/common/ra/useList.js","/./src/common/useElementSize.js","/./src/common/usePreferences.js","/./src/common/useRichTranslate.js","/./src/common/useSyncedPreferences.js","/./src/flags.js","/./src/http/AuthContext.js","/./src/http/apiClient/index.js","/./src/http/deviceService.js","/./src/http/useHttpClient.js","/./src/http/index.js","/./src/http/restClient/filters.js","/./src/http/restClient/response.js","/./src/theme.js","/./src/layout/LanguageMenu.js","/./src/routes/BaseLayout.js","/./src/routes/Unauthorized.js","/./src/routes/Volunteer.js","/./src/layout/Sidebar.js","/./src/layout/IdentityMenu.js","/./src/layout/HelpMenu.js","/../lib/common/src/scope-descriptions.js","/./src/layout/internalTools/RolesAndPermissionsDialog.js","/../lib/common/feature-flags-categories.js","/./src/layout/internalTools/FeatureFlagDialog.js","/./src/layout/InternalToolMenu.js","/./src/layout/AppBar.js","/./src/layout/Menu.js","/./src/layout/Error.js","/./src/layout/Layout.js","/./src/common/dialogs/OfficeSelectorDialog.js","/./src/common/inputs/OfficeSelector.js","/./src/common/ResetFiltersButton.js","/./src/common/ra/ListActions.js","/./src/common/ra/List.js","/./src/common/ra/ResourceActions.js","/./src/common/ra/Show.js","/./src/common/ra/Create.js","/./src/common/ra/Edit.js","/./src/common/ResourceTitle.js","/./src/common/chips/StatusChip.js","/./src/common/chips/NotPublicChip.js","/./src/common/SyncAlert.js","/./src/common/chips/UnsanctionedChip.js","/./src/common/ShowHeader.js","/./src/common/icons/NotPublicIcon.js","/./src/common/fields/NameWithStatusesField.js","/./src/resources/schedules/ScheduleGrid.js","/./src/resources/schedules/ScheduleFilters.js","/./src/common/cards/FilterCard.js","/./src/common/useAccountPreferences.js","/./src/common/useSavedSearches.js","/./src/common/SavedSearches.js","/./src/resources/schedules/ScheduleFilterList.js","/./src/common/ra/TabbedShowLayout.js","/./src/resources/schedules/cards/ScheduleCard.js","/./src/common/cards/LinksCard.js","/./src/resources/schedules/cards/ScheduleLinksCard.js","/./src/resources/pools/PoolField.js","/./src/resources/scheduleteams/ScheduleTeamModal.js","/./src/common/ra/SimpleFormIterator.js","/./src/resources/scheduleteams/AddTeamsModal.js","/./src/resources/scheduleteams/TeamImportModal.js","/./src/resources/scheduleteams/EditOrderModal.js","/./src/resources/schedules/cards/TeamsCard.js","/./src/resources/drafts/DraftGrid.js","/./src/resources/drafts/dialogs/DraftDialog.js","/./src/resources/schedules/cards/DraftsCard.js","/./src/resources/draftgames/DraftGameBulkActions.js","/./src/resources/schedules/cards/DraftGamesCard.js","/./src/resources/schedules/cards/GamesCard.js","/./src/resources/contacts/ScheduleTeamContactGrid.js","/./src/resources/schedules/cards/TeamContactsCard.js","/./src/resources/contacts/ScheduleManagerContactGrid.js","/./src/resources/schedules/cards/ScheduleContactsCard.js","/./src/resources/scheduleSettings/ScheduleSettingsField.js","/./src/resources/schemas/SchemaInput.js","/./src/resources/categories/DivisionInput.js","/./src/resources/officeSettings/OfficeSettingsForm.js","/./src/resources/scheduleSettings/RankingInput.js","/./src/resources/scheduleSettings/ScheduleSettingsForm.js","/./src/resources/scheduleSettings/ScheduleSettingsModal.js","/./src/resources/schedules/cards/ScheduleSettingsCard.js","/./src/resources/contacts/ContactInput.js","/./src/resources/venues/VenueInput.js","/./src/resources/targets/TargetInput.js","/./src/resources/targets/TargetGroupInput.js","/./src/resources/notifications/NotificationForm.js","/./src/resources/notifications/NotificationModal.js","/./src/resources/notifications/NotificationGrid.js","/./src/resources/schedules/cards/NotificationsCard.js","/./src/resources/assignTargets/AssignTargetForm.js","/./src/resources/assignTargets/AssignTargetModal.js","/./src/resources/assignTargets/AssignTargetGrid.js","/./src/resources/schedules/cards/AssignTargetsCard.js","/./src/resources/accounts/AccountField.js","/./src/resources/roles/RoleField.js","/./src/resources/roles/RoleInput.js","/./src/resources/accounts/AccountInput.js","/./src/resources/roles/RoleForm.js","/./src/resources/roles/RoleModal.js","/./src/resources/roles/RoleGrid.js","/./src/resources/schedules/cards/RolesCard.js","/./src/resources/schedules/cards/SuspensionsCard.js","/./src/resources/infractions/InfractionTypeField.js","/./src/resources/infractions/RuleField.js","/./src/resources/infractions/InfractionField.js","/./src/resources/gamepenalties/GamePenaltyGrid.js","/./src/common/Exporter.js","/./src/resources/gamepenalties/reports/summary.js","/./src/resources/gamepenalties/PenaltiesExporter.js","/./src/resources/schedules/cards/GamePenaltiesCard.js","/./src/resources/schedulesequences/ScheduleSequencesGrid.js","/./src/resources/schedules/cards/ScheduleSequencesCard.js","/./src/resources/gameBrackets/BracketViewer.js","/./src/resources/schedules/dialogs/BracketReseedDialog.js","/./src/resources/gameBrackets/cards/BracketsCard.js","/./src/resources/schedules/ScheduleStatsTable.js","/./src/resources/schedules/ScheduleStatsTableFilters.js","/./src/resources/schedules/cards/PlayerScheduleStatsCard.js","/./src/resources/schedules/cards/TeamScheduleStandingsCard.js","/./src/resources/pools/PoolForm.js","/./src/resources/pools/PoolModal.js","/./src/resources/pools/PoolGrid.js","/./src/resources/schedules/PoolsCard.js","/./src/resources/schedules/ScheduleShow.js","/./src/resources/schedules/ScheduleWizard/WizardContext.js","/./src/resources/schedules/ScheduleWizard/StepperToolbar.js","/./src/resources/schedules/ScheduleForm.js","/./src/resources/schedules/ScheduleWizard/InfoStep.js","/./src/resources/schedules/ScheduleWizard/TeamsStep.js","/./src/resources/schedules/ScheduleWizard/SequencesStep.js","/./src/resources/schedules/ScheduleWizard/SettingsStep.js","/./src/resources/schedules/ScheduleWizard/ScheduleWizard.js","/./src/resources/schedules/ScheduleWizard/index.js","/./src/resources/schedules/ScheduleExporter.js","/./src/resources/schedules/AnalyzeDialog.js","/./src/resources/schedules/ScheduleInternalActions.js","/./src/resources/schedules/ScheduleActions.js","/./src/resources/schedules/index.js","/./src/resources/games/GameFilters.js","/./src/common/ra/Filter.js","/./src/resources/lists/QuickAssignListInput.js","/./src/resources/games/GameFilterList.js","/./src/resources/games/cards/ChangesCard.js","/./src/resources/games/ResetAssignRulesModal.js","/./src/resources/games/ResetScoresheetModal.js","/./src/resources/scoresheet/actions/InternalScoresheetActions.js","/./src/resources/games/GameActions.js","/./src/resources/games/cards/GameLinksCard.js","/./src/resources/games/cards/ConflictsCard.js","/./src/resources/games/cards/MessagesCard.js","/./src/resources/gameEvents/GameEventGrid.js","/./src/resources/events/EventBulkActions.js","/./src/resources/games/cards/EventsCard.js","/./src/common/inputs/CurrencyInput.js","/./src/resources/payPeriods/PayPeriodInput.js","/./src/resources/officialTransactions/TransactionForm.js","/./src/resources/officialTransactions/TransactionModal.js","/./src/common/Popover.js","/./src/common/fields/PopoverTextField.js","/./src/common/fields/CurrencyField.js","/./src/resources/payPeriods/PayPeriodField.js","/./src/resources/officialTransactions/TransactionsGrid.js","/./src/resources/officialTransactions/reports/details.js","/./src/resources/officialTransactions/reports/summary.js","/./src/resources/officialTransactions/TransactionsExporter.js","/./src/resources/games/cards/TransactionsCard.js","/./src/resources/officialClaimsDocuments/OfficialClaimDocumentGrid.js","/./src/resources/officialClaimsDocuments/OfficialClaimDocumentInput.js","/./src/resources/officialClaimsDocuments/OfficialClaimDocumentForm.js","/./src/resources/officialClaimsDocuments/OfficialClaimDocumentModal.js","/./src/resources/games/cards/OfficialClaimDocumentsCard.js","/./src/resources/addresses/AddressAutoCompleteInput.js","/./src/resources/officialClaims/ClaimForm.js","/./src/resources/officialClaims/ClaimModal.js","/./src/resources/officialClaims/ClaimsGrid.js","/./src/resources/officialClaims/ClaimBulkActions.js","/./src/resources/games/cards/ClaimsCard.js","/./src/resources/games/cards/DraftGamesCard.js","/./src/resources/externalProviders/ExternalProviderForm.js","/./src/resources/externalProviders/ExternalProviderModal.js","/./src/resources/externalProviders/ExternalProvidersCard.js","/./src/resources/games/GameShow.js","/./src/resources/gameStatus/useGameStatus.js","/./src/common/inputs/CheckboxRowInput.js","/./src/resources/games/GameBulkActions.js","/./src/resources/games/GamesExporter.js","/./src/resources/practices/PracticeFilters.js","/./src/resources/practices/PracticeFilterList.js","/./src/common/fields/EnumField.js","/./src/resources/practices/PracticeStatusModal.js","/./src/resources/practices/cards/PracticeCard.js","/./src/resources/practices/PracticeShow.js","/./src/common/fields/RecurrenceSchedule.js","/./src/common/fields/RecurrenceField.js","/./src/resources/practices/PracticeForm.js","/./src/resources/practices/PracticesExporter.js","/./src/resources/practices/PracticeBulkActions.js","/./src/resources/activities/ActivityFilters.js","/./src/resources/activities/ActivityFilterList.js","/./src/resources/activities/cards/ActivityCard.js","/./src/resources/activities/ActivityShow.js","/./src/resources/activities/ActivityForm.js","/./src/resources/activities/ActivitiesExporter.js","/./src/resources/activities/index.js","/./src/resources/teams/TeamGrid.js","/./src/resources/teams/TeamFilters.js","/./src/resources/teams/TeamFilterList.js","/./src/resources/availabilities/AvailabilityCard/util.js","/./src/resources/availabilities/AvailabilityCard/SlotModal.js","/./src/resources/availabilities/AvailabilityCard/AvailabilityPanel.js","/./src/resources/availabilities/AvailabilityCard/AvailabilityCalendar.js","/./src/resources/availabilities/AvailabilityCard/AvailabilityToolbar.js","/./src/resources/availabilities/AvailabilityCard/index.js","/./src/common/RegistryLink.js","/./src/resources/teams/cards/TeamCard.js","/./src/resources/members/MemberForm.js","/./src/resources/members/MemberModal.js","/./src/resources/members/MemberFields.js","/./src/common/SelectedItems.js","/./src/resources/memberTypes/AffiliationField.js","/./src/resources/officialOffices/OfficialForm.js","/./src/resources/officialOffices/OfficialModal.js","/./src/resources/officialOffices/OfficialGrid.js","/./src/resources/officials/SelectOfficialsDialog.js","/./src/resources/members/SelectMembersDialog.js","/./src/resources/teams/dialogs/upload/index.js","/./src/resources/profiles/dialogs/import/index.js","/./src/resources/teams/cards/RosterCard.js","/./src/resources/teamSettings/index.js","/./src/resources/scheduleteams/ScheduleTeamsGrid.js","/./src/resources/teams/cards/SchedulesCard.js","/./src/resources/practices/PracticeModal.js","/./src/resources/activities/ActivityModal.js","/./src/resources/teams/cards/EventsCard.js","/./src/resources/teamArenas/TeamArenaGrid.js","/./src/resources/teamArenas/TeamArenaForm.js","/./src/resources/teamArenas/TeamArenaModal.js","/./src/resources/teams/cards/TeamArenasCard.js","/./src/resources/teams/cards/RolesCard.js","/./src/resources/teams/cards/NotificationsCard.js","/./src/resources/teams/cards/SuspensionsCard.js","/./src/resources/teams/cards/GamePenaltiesCard.js","/./src/resources/teams/cards/AssignTargetsCard.js","/./src/routes/Reports/ReportFilters.js","/./src/routes/Reports/ReportFrame.js","/./src/resources/reports/ReportsCard.js","/./src/resources/teams/TeamShow.js","/./src/common/inputs/LogoInput.js","/./src/resources/teams/TeamForm.js","/./src/resources/teams/TeamActions.js","/./src/resources/teams/index.js","/./src/common/chips/SMAChip.js","/./src/resources/participants/ParticipantGrid.js","/./src/resources/participants/ParticipantFilters.js","/./src/resources/officials/AvailabilitySettings/offices.js","/./src/resources/officials/useQualificationsWithSettings.js","/./src/resources/officials/AvailabilitySettings/OfficeList.js","/./src/resources/officials/AvailabilitySettings/OfficialAssignersDialog.js","/./src/resources/officials/AvailabilitySettings/VenueList.js","/./src/resources/officials/AvailabilitySettings/venues.js","/./src/resources/officials/AvailabilitySettings/OfficialVenuesDialog.js","/./src/resources/categories/SelectableCategoriesInput.js","/./src/resources/officials/AvailabilitySettings/OfficialCategoriesDialog.js","/./src/resources/officials/cards/OfficiatingActionsCard.js","/./src/resources/participants/ParticipantStatusContext.js","/./src/resources/participants/SsoInviteDialog.js","/./src/resources/participants/ParticipantAccountContext.js","/./src/resources/participants/cards/ParticipantCard.js","/./src/resources/profiles/ProfileField.js","/./src/resources/profiles/ProfileForm.js","/./src/resources/profiles/ProfileModal.js","/./src/resources/participants/cards/ProfileCard.js","/./src/resources/participants/cards/ContactsCard.js","/./src/resources/addresses/AddressForm.js","/./src/resources/addresses/AddressModal.js","/./src/resources/addresses/AddressGrid.js","/./src/resources/participants/cards/AddressesCard.js","/./src/resources/participants/cards/NotificationsCard.js","/./src/resources/participants/cards/TeamsCard.js","/./src/resources/participants/cards/EventsCard.js","/./src/resources/qualifications/QualificationForm.js","/./src/resources/qualifications/QualificationModal.js","/./src/resources/qualifications/QualificationCategoryField.js","/./src/resources/qualifications/QualificationGrid.js","/./src/resources/participants/cards/QualificationsCard.js","/./src/resources/listMembers/ListMemberGrid.js","/./src/resources/participants/cards/ListsCard.js","/./src/resources/officialConflicts/OfficialConflictForm.js","/./src/resources/officialConflicts/OfficialConflictModal.js","/./src/resources/officialConflicts/OfficialConflictGrid.js","/./src/resources/participants/cards/ConflictsCard.js","/./src/resources/categories/DivisionField.js","/./src/resources/registrations/RegistrationForm.js","/./src/resources/registrations/RegistrationModal.js","/./src/resources/registrations/RegistrationGrid.js","/./src/resources/participants/cards/RegistrationsCard.js","/./src/resources/participants/cards/RolesCard.js","/./src/resources/identities/IdentityForm.js","/./src/resources/identities/IdentityModal.js","/./src/resources/identities/IdentityGrid.js","/./src/resources/participants/cards/AccountsCard.js","/./src/resources/attributeValues/AttributeValuesForm.js","/./src/resources/attributeValues/AttributeValuesModal.js","/./src/resources/attributeValues/AttributeValuesGrid.js","/./src/resources/participants/cards/AttributeValuesCard.js","/./src/resources/participants/cards/SuspensionsCard.js","/./src/resources/participants/cards/TransactionsCard.js","/./src/resources/participants/cards/GamePenaltiesCard.js","/./src/resources/participants/cards/ClaimsCard.js","/./src/resources/memberTypes/MemberTypeField.js","/./src/resources/memberTypes/ParticipantMemberTypeGrid.js","/./src/resources/participants/cards/MemberTypesCard.js","/./src/resources/participants/ParticipantShow.js","/./src/resources/participants/ParticipantForm.js","/./src/resources/participants/index.js","/./src/resources/offices/OfficeGrid.js","/./src/resources/arenaslots/ArenaSlotContext.js","/./src/resources/arenaoffices/ArenaOfficeInput.js","/./src/resources/arenaslots/SlotSplits.js","/./src/resources/arenaslots/ArenaSlotForm.js","/./src/resources/arenaslots/ArenaSlotModal.js","/./src/resources/arenaslots/ArenaSlotsGrid.js","/./src/resources/arenaslots/ArenaSlotBulkActions.js","/./src/resources/offices/cards/ArenaSlotsCard.js","/./src/resources/schedules/ScheduleModal.js","/./src/resources/offices/cards/SchedulesCard.js","/./src/resources/teams/TeamModal.js","/./src/resources/offices/cards/TeamsCard.js","/./src/resources/categories/DivisionsField.js","/./src/resources/arenaoffices/ArenaOfficeForm.js","/./src/resources/arenaoffices/ArenaOfficeModal.js","/./src/resources/arenaoffices/ArenaOfficesGrid.js","/./src/resources/offices/cards/ArenasCard.js","/./src/resources/offices/dialogs/registrations/index.js","/./src/resources/offices/cards/RegistrationsCard.js","/./src/resources/offices/dialogs/grades/index.js","/./src/resources/offices/dialogs/qualifications/index.js","/./src/resources/offices/cards/QualificationsCard.js","/./src/resources/officeAssignSettings/index.js","/./src/resources/officeAssignSettings/OfficeAssignSettingsField.js","/./src/resources/officeAssignSettings/OfficeAssignSettingsForm.js","/./src/resources/officeAssignSettings/OfficeAssignSettingsModal.js","/./src/resources/offices/cards/OfficeAssignSettingsCard.js","/./src/resources/groups/GroupForm.js","/./src/resources/groups/GroupModal.js","/./src/resources/groups/GroupGrid.js","/./src/resources/groups/index.js","/./src/resources/offices/cards/GroupsCard.js","/./src/resources/offices/cards/RolesCard.js","/./src/resources/offices/cards/NotificationsCard.js","/./src/resources/sections/SectionForm.js","/./src/resources/sections/SectionModal.js","/./src/resources/sections/SectionGrid.js","/./src/resources/offices/cards/SectionsCard.js","/./src/resources/offices/OfficeForm.js","/./src/resources/offices/OfficeModal.js","/./src/resources/offices/cards/OfficesCard.js","/./src/resources/offices/dialogs/officials/index.js","/./src/resources/qualifications/OfficialQualificationsGrid.js","/./src/resources/officials/OfficialParticipantInput.js","/./src/resources/offices/cards/OfficialsCard.js","/./src/resources/lists/dialogs/officials/index.js","/./src/resources/lists/ListForm.js","/./src/resources/lists/ListModal.js","/./src/resources/lists/ListGrid.js","/./src/resources/offices/cards/ListsCard.js","/./src/resources/assignSystems/AssignSystemGrid.js","/./src/resources/assignRules/AssignRuleList.js","/./src/resources/offices/cards/AssignSystemsCard.js","/./src/resources/assignFees/AssignFeesForm.js","/./src/resources/assignFees/AssignFeesModal.js","/./src/resources/assignFees/AssignFeesGrid.js","/./src/resources/offices/cards/AssignFeesCard.js","/./src/resources/offices/cards/AssignRulesCard.js","/./src/resources/offices/cards/AssignTargetsCard.js","/./src/resources/rulebooks/RulebookGrid.js","/./src/resources/rulebooks/durations/DurationForm.js","/./src/resources/rulebooks/durations/DurationModal.js","/./src/resources/rulebooks/durations/DurationGrid.js","/./src/resources/rulebooks/ArrayGrid.js","/./src/resources/rulebooks/durations/index.js","/./src/resources/rulebooks/infractions/InfractionModal.js","/./src/resources/rulebooks/infractions/InfractionGrid.js","/./src/resources/rulebooks/infractions/index.js","/./src/resources/rulebooks/LimitsInput.js","/./src/resources/rulebooks/pitcherLimits/PitcherLimitsInput.js","/./src/resources/rulebooks/pitcherLimits/PitcherLimitsForm.js","/./src/resources/rulebooks/pitcherLimits/PitcherLimitsModal.js","/./src/resources/rulebooks/pitcherLimits/PitcherLimitsGrid.js","/./src/resources/rulebooks/pitcherLimits/index.js","/./src/resources/rulebooks/variances/VarianceForm.js","/./src/resources/rulebooks/variances/VarianceModal.js","/./src/resources/rulebooks/variances/VarianceGrid.js","/./src/resources/rulebooks/variances/index.js","/./src/resources/rulebooks/RulebookForm.js","/./src/resources/rulebooks/RulebookModal.js","/./src/resources/offices/cards/RulebooksCard.js","/./src/resources/attributeTypes/AttributeTypeForm.js","/./src/resources/attributeTypes/AttributeTypeModal.js","/./src/resources/attributeTypes/AttributeTypeGrid.js","/./src/resources/offices/dialogs/attributes/index.js","/./src/resources/offices/cards/AttributeTypesCard.js","/./src/resources/schedulingConstraints/ConstraintsForm.js","/./src/resources/schedulingConstraints/ConstraintsModal.js","/./src/resources/schedulingConstraints/ConstraintsGrid.js","/./src/resources/offices/cards/SchedulingConstraintsCard.js","/./src/resources/payPeriods/PayPeriodForm.js","/./src/resources/payPeriods/PayPeriodModal.js","/./src/resources/payPeriods/PayPeriodGrid.js","/./src/resources/offices/cards/PayPeriodsCard.js","/./src/resources/offices/cards/SuspensionsCard.js","/./src/resources/offices/cards/ClaimsCard.js","/./src/resources/offices/cards/GamePenaltiesCard.js","/./src/common/inputs/I18nInput.js","/./src/resources/infractions/InfractionTypeForm.js","/./src/resources/infractions/InfractionTypeModal.js","/./src/resources/infractions/InfractionTypeGrid.js","/./src/resources/offices/cards/InfractionTypesCard.js","/./src/resources/infractions/RuleSectionForm.js","/./src/resources/infractions/RuleSectionModal.js","/./src/resources/infractions/RuleSectionInput.js","/./src/resources/infractions/RuleForm.js","/./src/resources/infractions/RuleModal.js","/./src/resources/infractions/RuleSectionField.js","/./src/resources/infractions/RuleInput.js","/./src/resources/infractions/InfractionInput.js","/./src/resources/infractions/RuleOptionForm.js","/./src/resources/infractions/RuleOptionModal.js","/./src/resources/infractions/InfractionTypeInput.js","/./src/resources/infractions/InfractionForm.js","/./src/resources/infractions/InfractionModal.js","/./src/resources/infractions/InfractionGrid.js","/./src/resources/offices/cards/RulesCard.js","/./src/resources/infractions/InfractionAccumulationForm.js","/./src/resources/infractions/InfractionAccumulationModal.js","/./src/resources/infractions/InfractionAccumulationGrid.js","/./src/resources/offices/cards/InfractionAccumulationsCard.js","/./src/resources/sanctions/SanctionInput.js","/./src/resources/sanctions/SanctionForm.js","/./src/resources/sanctions/SanctionModal.js","/./src/resources/sanctions/SanctionMemberForm.js","/./src/resources/sanctions/SanctionMemberModal.js","/./src/resources/sanctions/SanctionOffenseForm.js","/./src/resources/sanctions/SanctionOffenseModal.js","/./src/resources/sanctions/SanctionOffenseGrid.js","/./src/resources/offices/cards/SanctionsCard.js","/./src/resources/officeSettings/OfficeSettingsModal.js","/./src/resources/officeSettings/OfficeSettingsField.js","/./src/resources/offices/cards/OfficeSettingsCard.js","/./src/resources/branchOfficeSettings/BranchOfficeSettingsForm.js","/./src/resources/branchOfficeSettings/BranchOfficeSettingsModal.js","/./src/resources/branchOfficeSettings/BranchOfficeSettingsField.js","/./src/resources/offices/cards/BranchOfficeSettingsCard.js","/./src/resources/officialClaims/ClaimSettingsForm.js","/./src/resources/officialClaims/ClaimSettingsModal.js","/./src/resources/officialClaims/ClaimsSettingsGrid.js","/./src/resources/offices/cards/ClaimsSettingsCard.js","/./src/resources/assignRules/AssignRuleApplyModal.js","/./src/resources/officemembers/OfficeMembersModal.js","/./src/resources/offices/cards/OfficeActionsCard.js","/./src/resources/offices/OfficeShow.js","/./src/resources/offices/OfficeInternalActions.js","/./src/resources/offices/OfficeActions.js","/./src/resources/offices/index.js","/./src/resources/leagues/LeagueFilters.js","/./src/common/GroupedView.js","/./src/resources/leagues/LeagueView.js","/./src/resources/leagues/cards/SuspensionsCard.js","/./src/resources/leagues/cards/GamePenaltiesCard.js","/./src/resources/leagues/LeagueShow.js","/./src/resources/leagues/LeagueForm.js","/./src/resources/tournaments/TournamentFilters.js","/./src/resources/tournaments/TournamentView.js","/./src/resources/tournaments/TournamentShow.js","/./src/resources/tournaments/TournamentForm.js","/./src/resources/cups/CupFilters.js","/./src/resources/cups/CupView.js","/./src/resources/cups/CupShow.js","/./src/resources/cups/CupForm.js","/./src/resources/cups/index.js","/./src/resources/venues/VenueView.js","/./src/resources/venues/VenueFilters.js","/./src/resources/venues/cards/VenueCard.js","/./src/resources/surfaces/SurfaceGrid.js","/./src/resources/surfaces/SurfaceForm.js","/./src/resources/surfaces/SurfaceModal.js","/./src/resources/venues/cards/SurfacesCard.js","/./src/resources/venues/cards/EventsCard.js","/./src/resources/venues/VenueShow.js","/./src/resources/venues/VenueForm.js","/./src/resources/venues/index.js","/./src/resources/surfaces/SurfaceView.js","/./src/resources/surfaces/SurfaceFilters.js","/./src/resources/surfaces/cards/SurfaceCard.js","/./src/resources/surfaces/cards/OfficesCard.js","/./src/resources/surfaces/cards/EventsCard.js","/./src/resources/surfaces/cards/SurfacesCard.js","/./src/resources/arenaslots/dialogs/arenaslots/index.js","/./src/resources/surfaces/cards/ArenaSlotsCard.js","/./src/resources/surfaces/SurfaceShow.js","/./src/resources/surfaces/index.js","/./src/resources/accounts/AccountGrid.js","/./src/resources/accounts/AccountFilters.js","/./src/resources/accounts/cards/ParticipantCard.js","/./src/resources/accounts/AccountShow.js","/./src/common/inputs/PasswordInput.js","/./src/resources/accounts/AccountForm.js","/./src/resources/accounts/SMAResetPassword.js","/../lib/common/src/passwords.js","/./src/resources/accounts/AccountActions.js","/./src/resources/accounts/index.js","/./src/resources/announcements/AnnouncementGrid.js","/./src/resources/announcements/AnnouncementFilters.js","/./src/common/fields/ContentField.js","/./src/resources/announcements/AnnouncementShow.js","/./src/common/inputs/EditorInput/index.js","/./src/resources/announcements/AnnouncementForm.js","/./src/resources/sections/SectionField.js","/./src/resources/pages/PageGrid.js","/./src/resources/pages/PageFilters.js","/./src/resources/pages/PageShow.js","/./src/common/inputs/ImageInput.js","/./src/resources/sections/SectionInput.js","/./src/resources/pages/PageForm.js","/./src/resources/posts/PostGrid.js","/./src/resources/posts/PostFilters.js","/./src/resources/posts/PostShow.js","/./src/resources/posts/PostForm.js","/./src/resources/posts/index.js","/./src/resources/webevents/EventDateField.js","/./src/resources/webevents/WebEventGrid.js","/./src/resources/webevents/WebEventFilters.js","/./src/resources/webevents/WebEventShow.js","/./src/resources/webevents/WebEventForm.js","/./src/resources/webevents/index.js","/./src/resources/articles/ArticleView.js","/./src/resources/articles/ArticleFilters.js","/./src/resources/articles/ArticleShow.js","/./src/resources/articles/ArticleForm.js","/./src/resources/officialTransactions/TransactionViewSettings.js","/./src/resources/payPeriods/cards/PayPeriodCard.js","/./src/resources/officialTransactions/TransactionBulkActions.js","/./src/resources/officialTransactions/TransactionView.js","/./src/resources/payPeriods/AddTransactionsModal.js","/./src/resources/payPeriods/cards/TransactionsCard.js","/./src/resources/payPeriods/ClosePeriodModal.js","/./src/resources/payPeriods/PayPeriodShow.js","/./src/resources/payPeriods/index.js","/./src/resources/suspensions/ParticipantSuspensionsCard.js","/./src/resources/suspensionDiscipline/SuspensionDisciplineForm.js","/./src/resources/suspensionDiscipline/SuspensionDisciplineModal.js","/./src/resources/suspensionDiscipline/SuspensionDisciplineCard.js","/./src/resources/suspensionDiscipline/DisciplineCommitteeCard.js","/./src/resources/suspensions/SuspensionCard.js","/./src/resources/suspensions/SuspensionShow.js","/./src/resources/games/useGame.js","/./src/resources/suspensions/SuspensionFilterList.js","/./src/resources/suspensions/SuspensionFilters.js","/./src/resources/suspensions/index.js","/./src/resources/index.js","/./src/resources/games/index.js","/./src/resources/practices/index.js","/./src/resources/pages/index.js","/./src/resources/leagues/index.js","/./src/resources/tournaments/index.js","/./src/resources/announcements/index.js","/./src/resources/articles/index.js","/./src/resources/rulebooks/index.js","/./src/resources/drafts/index.js","/./src/routes/MyProfile/dialogs/ChangePasswordModal.js","/./src/routes/MyProfile/cards/AccountCard.js","/./src/routes/Register.js","/./src/routes/MyProfile/cards/ContactsCard.js","/./src/routes/MyProfile/cards/AddressesCard.js","/./src/routes/MyProfile/cards/ProfileCard.js","/./src/resources/announcements/AnnouncementModal.js","/./src/routes/MyProfile/cards/AnnouncementsCard.js","/./src/routes/MyProfile/dialogs/CalendarDialog.js","/./src/routes/MyProfile/cards/EventsCard.js","/./src/routes/MyProfile/cards/QualificationsCard.js","/./src/routes/MyProfile/reminders/SsoLinkAccount.js","/./src/routes/MyProfile/reminders/ContactsReminder.js","/./src/routes/MyProfile/cards/SuspensionsCard.js","/./src/routes/MyProfile/cards/GamePenaltiesCard.js","/./src/routes/MyProfile/cards/TransactionsCard.js","/./src/routes/MyProfile/cards/ClaimsCard.js","/./src/routes/MyProfile/MyProfile.js","/./src/routes/MyProfile/index.js","/./src/routes/MyProfile/Verify.js","/./src/routes/ResetPassword.js","/./src/routes/Reports/index.js","/./src/routes/index.js","/./src/routes/Login.js","/./src/common/has-bypass-login.constant.jsx","/./src/App.js","/./src/common/useOffline.js","/./src/index.js","/./src/layout/foreThought/ForeThought.js","/./src/locale/LocaleProvider.js","/./src/locale/messages/en.js","/./src/locale/messages/fr.js","/./src/locale/messages/sports/en.js","/./src/locale/messages/sports/fr.js","/./src/locale/index.js","/./src/resources/arenaslots/useSlotsInUse.js","/./src/resources/assignFees/index.js","/./src/resources/assignRules/AssignRuleGrid.js","/./src/resources/assignRules/AssignRuleForm.js","/./src/resources/assignRules/AssignRuleModal.js","/./src/resources/assignSystems/index.js","/./src/resources/attributeTypes/AttributeTypeField.js","/./src/resources/branchOfficeSettings/index.js","/./src/resources/categories/CategoriesField.js","/./src/resources/categories/CategoryField.js","/./src/resources/categories/CategoryInput.js","/./src/resources/contacts/ContactVerifyDialog.js","/./src/resources/contacts/ContactGrid.js","/./src/resources/contacts/ContactForm.js","/./src/resources/contacts/ContactModal.js","/./src/resources/draftgames/DraftGamePublishModal.js","/./src/resources/draftgames/DraftGameActions.js","/./src/resources/draftgames/DraftGameApprovalModal.js","/./src/resources/draftgames/DraftGameForm.js","/./src/resources/draftgames/DraftGameModal.js","/./src/resources/drafts/common/CardHeader.js","/./src/resources/drafts/common/GameToolbar.js","/./src/resources/drafts/common/PastGamesAlert.js","/./src/resources/drafts/common/GamesView.js","/./src/resources/drafts/dialogs/AnalyzeDialog.js","/./src/resources/drafts/dialogs/GameDialog.js","/./src/resources/drafts/draggables/DraggableEvent.js","/./src/resources/drafts/draggables/DraggableGameList.js","/./src/resources/drafts/DraftInput.js","/./src/resources/drafts/generator/InfoStep.js","/./src/resources/drafts/manual/TeamsStep.js","/./src/common/calendar/grid/DayGrid.js","/./src/common/calendar/grid/MonthGrid.js","/./src/common/calendar/grid/SeasonGrid.js","/./src/common/calendar/CalendarNavigation.js","/./src/common/inputs/MuiInputs/DatePicker.js","/./src/common/calendar/grid/index.js","/./src/common/calendar/index.js","/./src/resources/events/EventCalendar.js","/./src/resources/events/EventGrid.js","/./src/resources/games/cards/OfficialsCard/Assignment/OfficialsContext.js","/./src/resources/events/EventAssignment.js","/./src/resources/events/EventGroupedGrid.js","/./src/resources/events/EventReferenceField.js","/./src/resources/events/EventList.js","/./src/resources/events/EventView.js","/./src/resources/drafts/dialogs/RenumberDialog.js","/./src/resources/draftgames/DraftGameExporter.js","/./src/resources/events/EventViewSettings.js","/./src/resources/gameBrackets/useSeeds.js","/./src/resources/gameStatus/AssignmentsDialog.js","/./src/resources/gameStatus/LineupDialog.js","/./src/resources/gameStatus/CertifyDialog.js","/./src/resources/gameStatus/GameContext.js","/./src/resources/gameStatus/index.js","/./src/resources/games/GameAvailabilityContext.js","/./src/resources/games/GameAvailabilityInfo.js","/./src/resources/games/GameField.js","/./src/resources/games/GameForm.js","/./src/resources/games/GameInput.js","/./src/resources/games/GameModal.js","/./src/resources/games/GameNumberField.js","/./src/resources/games/GameForfeitModal.js","/./src/resources/games/GameStatusModel.js","/./src/resources/games/DraftUpdateModal.js","/./src/resources/games/DuplicateGameModal.js","/./src/resources/gameBrackets/SeedsForm.js","/./src/resources/gameBrackets/SeedsModal.js","/./src/resources/games/cards/GameCard.js","/./src/resources/games/cards/OfficialsCard/Assignment/AssignToolbar/AssignButton.js","/./src/resources/games/cards/OfficialsCard/Assignment/AssignToolbar/RemoveButton.js","/./src/resources/games/cards/OfficialsCard/Assignment/AssignToolbar/SwapButton.js","/./src/resources/games/cards/OfficialsCard/Assignment/AssignToolbar/RequestButton.js","/./src/resources/games/GameDetailsField.js","/./src/resources/games/cards/OfficialsCard/Assignment/AssignToolbar/AcceptButton.js","/./src/resources/games/cards/OfficialsCard/Assignment/AssignToolbar/DeclineButton.js","/./src/resources/games/cards/OfficialsCard/Assignment/AssignToolbar/index.js","/./src/resources/games/cards/OfficialsCard/Assignment/AssignmentContext.js","/./src/resources/games/cards/OfficialsCard/Assignment/AssignmentStatus.js","/./src/resources/games/cards/OfficialsCard/Assignment/AssignToolbar/DelegateButton.js","/./src/resources/games/cards/OfficialsCard/Assignment/AssignToolbar/UndoButton.js","/./src/resources/games/cards/OfficialsCard/Assignment/OfficialDetails/SummaryTab.js","/./src/resources/games/cards/OfficialsCard/Assignment/OfficialDetails/ScheduleTab.js","/./src/resources/games/cards/OfficialsCard/Assignment/OfficialDetails/HistoryTab.js","/./src/resources/games/cards/OfficialsCard/Assignment/OfficialDetails/ContactsTab.js","/./src/resources/games/cards/OfficialsCard/Assignment/OfficialDetails/Suggestions.js","/./src/resources/games/cards/OfficialsCard/Assignment/OfficialDetails/index.js","/./src/resources/games/cards/OfficialsCard/Assignment/OfficialList/OfficialList.js","/./src/resources/games/cards/OfficialsCard/Assignment/OfficialList/OfficialFilters.js","/./src/resources/games/cards/OfficialsCard/Assignment/OfficialList/index.js","/./src/resources/games/cards/OfficialsCard/Assignment/index.js","/./src/resources/games/cards/OfficialsCard/Assignment/util.js","/./src/resources/games/cards/OfficialsCard/AssignmentsContext.js","/./src/resources/assignSettings/AssignSettingsForm.js","/./src/resources/games/cards/OfficialsCard/AssignSettings.js","/./src/resources/games/cards/OfficialsCard/GameMessages.js","/./src/resources/games/cards/OfficialsCard/GameChips.js","/./src/resources/games/cards/OfficialsCard/index.js","/./src/resources/groups/GroupField.js","/./src/resources/groups/GroupInput.js","/./src/resources/groups/GroupsField.js","/./src/resources/lists/ListField.js","/./src/resources/lists/ListInput.js","/./src/resources/messages/MessageForm.js","/./src/resources/messages/MessageGrid.js","/./src/resources/officeSettings/index.js","/./src/resources/offices/OfficeField.js","/./src/resources/offices/OfficeInput.js","/./src/resources/offices/OfficesField.js","/./src/resources/offices/useOffice.js","/./src/resources/participants/InviteDialog.js","/./src/resources/participants/ParticipantField.js","/./src/resources/participants/ParticipantInput.js","/./src/resources/pools/PoolInput.js","/./src/resources/practices/PracticeAvailabilityContext.js","/./src/resources/practices/PracticeAvailabilityInfo.js","/./src/resources/scheduleSettings/index.js","/./src/resources/schedules/ScheduleField.js","/./src/resources/schedules/ScheduleInput.js","/./src/resources/schedules/dialogs/BracketDialog.js","/./src/resources/schedules/dialogs/TeamImportDialog.js","/./src/resources/schedules/dialogs/generator/Preview.js","/./src/resources/schedules/dialogs/generator/Scheduling.js","/./src/resources/schedules/dialogs/generator/Matchups.js","/./src/resources/schedules/dialogs/generator/CrossTeamDialog.js","/./src/resources/schedules/dialogs/generator/Matrix.js","/./src/resources/schedules/dialogs/generator/Generator.js","/./src/resources/schedules/dialogs/generator/GeneratorContext.js","/./src/resources/schedules/useSchedule.js","/./src/resources/schedulesequences/ScheduleSequenceAlert.js","/./src/resources/schedulesequences/ScheduleSequenceError.js","/./src/resources/schedulesequences/ScheduleSequenceForm.js","/./src/resources/schedulesequences/ScheduleSequenceModal.js","/./src/resources/scoresheet/store/requests.js","/./src/resources/scoresheet/store/addMeta.js","/./src/resources/scoresheet/store/index.js","/./src/resources/scoresheet/store/validate.js","/../lib/scoresheet/src/store.js","/./src/resources/scoresheet/ScoresheetContext.js","/./src/resources/scoresheet/actions/alerts/CompletedAlert.js","/./src/resources/scoresheet/certification/CertificationModal.js","/./src/resources/scoresheet/certification/Flag.js","/./src/resources/scoresheet/lineup/GameMembersValidationContext.js","/./src/resources/scoresheet/certification/FlagList.js","/./src/resources/scoresheet/components/GameTimeInput.js","/./src/resources/scoresheet/gameIncidents/IncidentReportCard.js","/./src/common/fields/CreatedAtField.js","/./src/resources/scoresheet/gameIncidents/IncidentReportGrid.js","/./src/resources/scoresheet/gameIncidents/IncidentReportForm.js","/./src/resources/scoresheet/gameIncidents/IncidentReportModal.js","/./src/resources/scoresheet/gameIncidents/useIncidentReports.js","/./src/resources/gameDocuments/GameDocumentInput.js","/./src/resources/gameDocuments/GameDocumentForm.js","/./src/resources/gameDocuments/GameDocumentModal.js","/./src/resources/gameDocuments/GameDocumentGrid.js","/./src/resources/games/cards/GameDocumentsCard.js","/./src/resources/scoresheet/components/Scoreboard.js","/./src/resources/scoresheet/components/ScoreEditModal.js","/./src/resources/scoresheet/summary/SummaryList.js","/./src/resources/scoresheet/summary/alerts/IncidentAlert.js","/./src/resources/scoresheet/summary/alerts/index.js","/./src/resources/scoresheet/summary/alerts/NotesAlert.js","/./src/resources/scoresheet/summary/NotesModal.js","/./src/resources/scoresheet/summary/SummaryFlags.js","/./src/resources/scoresheet/summary/SummaryCard.js","/./src/resources/scoresheet/shots/GameShotsModal.js","/./src/resources/scoresheet/shots/GoalieShotsCard.js","/./src/resources/scoresheet/baseball/ThrowsInningsModal.js","/./src/resources/scoresheet/baseball/ThrowsInningsCard.js","/./src/resources/scoresheet/suspension/SuspensionsCard.js","/./src/resources/scoresheet/certification/alerts/CertifiedAlert.js","/./src/resources/scoresheet/certification/alerts/CertifyAlert.js","/./src/resources/scoresheet/certification/alerts/index.js","/./src/resources/scoresheet/actions/ApprovalModal.js","/./src/resources/scoresheet/actions/alerts/ApproveAlert.js","/./src/resources/scoresheet/actions/StartModal.js","/./src/resources/scoresheet/actions/alerts/StartAlert.js","/./src/resources/scoresheet/actions/alerts/index.js","/./src/resources/scoresheet/index.js","/./src/resources/scoresheet/lineup/LineupList.js","/./src/resources/scoresheet/lineup/LineupSignatoryField.js","/./src/resources/scoresheet/lineup/SignLineup.js","/./src/resources/scoresheet/lineup/SaveLineup.js","/./src/resources/scoresheet/lineup/LineupRequirements.js","/./src/resources/scoresheet/lineup/LineupSignature.js","/./src/common/ResponsiveButton.js","/./src/resources/scoresheet/lineup/AddExtra.js","/./src/resources/scoresheet/lineup/Photos.js","/./src/resources/scoresheet/lineup/PrintLineup.js","/./src/resources/scoresheet/lineup/LineupFlags.js","/./src/resources/scoresheet/lineup/LineupCard.js","/./src/resources/scoresheet/lineup/SuspensionInfo.js","/./src/resources/scoresheet/lineup/MemberFlags.js","/./src/resources/scoresheet/lineup/EditMember.js","/./src/resources/scoresheet/lineup/MemberItem.js","/./src/resources/scoresheet/lineup/MemberItemContext.js","/./src/resources/scoresheet/lineup/MemberValidationContext.js","/./src/resources/scoresheet/summary/PeriodsModal.js","/./src/resources/scoresheet/lineup/LineupInput.js","/./src/resources/scoresheet/summary/SummaryBulkAddModal.js","/./src/resources/scoresheet/summary/SummaryEditModal.js","/./src/resources/scoresheet/summary/SummaryItem.js","/./src/resources/scoresheet/suspension/GamePurgeGrid.js","/./src/resources/scoresheet/suspension/GamePurgeList.js","/./src/resources/scoresheet/suspension/SuspensionForm.js","/./src/resources/suspensions/useSuspensions.js","/./src/resources/scoresheet/suspension/SuspensionGrid.js","/./src/resources/scoresheet/suspension/SuspensionModal.js","/./src/resources/seasons/SeasonField.js","/./src/resources/surfaces/SurfaceField.js","/./src/resources/surfaces/SurfaceInput.js","/./src/resources/surfaces/util.js","/./src/resources/targets/TargetField.js","/./src/resources/targets/TargetTypeField.js","/./src/resources/teams/TeamField.js","/./src/resources/teams/TeamInput.js","/./src/resources/teams/TeamsField.js","/./src/resources/venues/VenueField.js","/./src/resources/venues/util.js","/../lib/assigning/src/assignment.js","/../lib/assigning/src/responses.js","/../lib/common/featureFlags.js","/../lib/common/src/constants.js","/../lib/common/src/dates.js","/../lib/common/src/lodash.js","/../lib/common/src/seasons.js","/../lib/parsers/src/common.js","/../lib/parsers/src/dateTime.js","/../lib/parsers/src/importers.js","/../lib/parsers/src/profiles.js","/../lib/parsers/src/rosters.js","/../lib/parsers/src/officials.js","/../lib/scheduler/src/matchups/analyze.js","/../lib/scheduler/src/sequences/sequences.js","/../lib/scheduler/src/util/matrix.js","/../lib/scoresheet/src/actions/events.js","/../lib/scoresheet/src/actions/lineups.js","/../lib/scoresheet/src/constants.js","/../lib/scoresheet/src/reducers/flags.js","/../lib/scoresheet/src/reducers/gameTime.js","/../lib/scoresheet/src/reducers/goalies.js","/../lib/scoresheet/src/reducers/goals.js","/../lib/scoresheet/src/reducers/keepers.js","/../lib/scoresheet/src/reducers/lineups.js","/../lib/scoresheet/src/reducers/meta.js","/../lib/scoresheet/src/reducers/officials.js","/../lib/scoresheet/src/reducers/penalties.js","/../lib/scoresheet/src/reducers/purges.js","/../lib/scoresheet/src/reducers/score.js","/../lib/scoresheet/src/selectors/baseball.js","/../lib/scoresheet/src/selectors/penalties.js","/../lib/scoresheet/src/selectors/goalies.js","/../lib/scoresheet/src/selectors/suspensions.js","/../lib/scoresheet/src/selectors/index.js","/../lib/scoresheet/src/selectors/lineups.js","/../lib/scoresheet/src/selectors/meta.js","/../lib/scoresheet/src/selectors/pregame.js","/../lib/scoresheet/src/util/boxScore.js","/../lib/scoresheet/src/util/gameTime.js","/../lib/scoresheet/src/util/legacyPenalties.js","/../lib/scoresheet/src/util/penalties.js","/../lib/scoresheet/src/util/gameFlags.js","/../lib/scoresheet/src/util/officials.js","/../lib/scoresheet/src/util/teams.js","/../lib/scoresheet/src/util/summaryEvents.js","/../lib/scoresheet/src/util/index.js","/../lib/scoresheet/src/util/members.js","/webpack/bootstrap","/webpack/runtime/amd options","/webpack/runtime/compat get default export","/webpack/runtime/define property getters","/webpack/runtime/ensure chunk","/webpack/runtime/get javascript chunk filename","/webpack/runtime/get mini-css chunk filename","/webpack/runtime/global","/webpack/runtime/harmony module decorator","/webpack/runtime/hasOwnProperty shorthand","/webpack/runtime/make namespace object","/webpack/runtime/node module decorator","/webpack/runtime/publicPath","/webpack/runtime/jsonp chunk loading","/webpack/runtime/nonce","/webpack/startup"],"sourcesContent":["var deferred = [];\n__webpack_require__.O = function(result, chunkIds, fn, priority) {\n\tif(chunkIds) {\n\t\tpriority = priority || 0;\n\t\tfor(var i = deferred.length; i > 0 && deferred[i - 1][2] > priority; i--) deferred[i] = deferred[i - 1];\n\t\tdeferred[i] = [chunkIds, fn, priority];\n\t\treturn;\n\t}\n\tvar notFulfilled = Infinity;\n\tfor (var i = 0; i < deferred.length; i++) {\n\t\tvar chunkIds = deferred[i][0];\n\t\tvar fn = deferred[i][1];\n\t\tvar priority = deferred[i][2];\n\t\tvar fulfilled = true;\n\t\tfor (var j = 0; j < chunkIds.length; j++) {\n\t\t\tif ((priority & 1 === 0 || notFulfilled >= priority) && Object.keys(__webpack_require__.O).every(function(key) { return __webpack_require__.O[key](chunkIds[j]); })) {\n\t\t\t\tchunkIds.splice(j--, 1);\n\t\t\t} else {\n\t\t\t\tfulfilled = false;\n\t\t\t\tif(priority < notFulfilled) notFulfilled = priority;\n\t\t\t}\n\t\t}\n\t\tif(fulfilled) {\n\t\t\tdeferred.splice(i--, 1)\n\t\t\tvar r = fn();\n\t\t\tif (r !== undefined) result = r;\n\t\t}\n\t}\n\treturn result;\n};","var getProto = Object.getPrototypeOf ? function(obj) { return Object.getPrototypeOf(obj); } : function(obj) { return obj.__proto__; };\nvar leafPrototypes;\n// create a fake namespace object\n// mode & 1: value is a module id, require it\n// mode & 2: merge all properties of value into the ns\n// mode & 4: return value when already ns object\n// mode & 16: return value when it's Promise-like\n// mode & 8|1: behave like require\n__webpack_require__.t = function(value, mode) {\n\tif(mode & 1) value = this(value);\n\tif(mode & 8) return value;\n\tif(typeof value === 'object' && value) {\n\t\tif((mode & 4) && value.__esModule) return value;\n\t\tif((mode & 16) && typeof value.then === 'function') return value;\n\t}\n\tvar ns = Object.create(null);\n\t__webpack_require__.r(ns);\n\tvar def = {};\n\tleafPrototypes = leafPrototypes || [null, getProto({}), getProto([]), getProto(getProto)];\n\tfor(var current = mode & 2 && value; typeof current == 'object' && !~leafPrototypes.indexOf(current); current = getProto(current)) {\n\t\tObject.getOwnPropertyNames(current).forEach(function(key) { def[key] = function() { return value[key]; }; });\n\t}\n\tdef['default'] = function() { return value; };\n\t__webpack_require__.d(ns, def);\n\treturn ns;\n};","var inProgress = {};\nvar dataWebpackPrefix = \"@hisports/admin:\";\n// loadScript function to load a script via script tag\n__webpack_require__.l = function(url, done, key, chunkId) {\n\tif(inProgress[url]) { inProgress[url].push(done); return; }\n\tvar script, needAttach;\n\tif(key !== undefined) {\n\t\tvar scripts = document.getElementsByTagName(\"script\");\n\t\tfor(var i = 0; i < scripts.length; i++) {\n\t\t\tvar s = scripts[i];\n\t\t\tif(s.getAttribute(\"src\") == url || s.getAttribute(\"data-webpack\") == dataWebpackPrefix + key) { script = s; break; }\n\t\t}\n\t}\n\tif(!script) {\n\t\tneedAttach = true;\n\t\tscript = document.createElement('script');\n\n\t\tscript.charset = 'utf-8';\n\t\tscript.timeout = 120;\n\t\tif (__webpack_require__.nc) {\n\t\t\tscript.setAttribute(\"nonce\", __webpack_require__.nc);\n\t\t}\n\t\tscript.setAttribute(\"data-webpack\", dataWebpackPrefix + key);\n\t\tscript.src = url;\n\t}\n\tinProgress[url] = [done];\n\tvar onScriptComplete = function(prev, event) {\n\t\t// avoid mem leaks in IE.\n\t\tscript.onerror = script.onload = null;\n\t\tclearTimeout(timeout);\n\t\tvar doneFns = inProgress[url];\n\t\tdelete inProgress[url];\n\t\tscript.parentNode && script.parentNode.removeChild(script);\n\t\tdoneFns && doneFns.forEach(function(fn) { return fn(event); });\n\t\tif(prev) return prev(event);\n\t}\n\t;\n\tvar timeout = setTimeout(onScriptComplete.bind(null, undefined, { type: 'timeout', target: script }), 120000);\n\tscript.onerror = onScriptComplete.bind(null, script.onerror);\n\tscript.onload = onScriptComplete.bind(null, script.onload);\n\tneedAttach && document.head.appendChild(script);\n};","var createStylesheet = function(chunkId, fullhref, resolve, reject) {\n\tvar linkTag = document.createElement(\"link\");\n\n\tlinkTag.rel = \"stylesheet\";\n\tlinkTag.type = \"text/css\";\n\tvar onLinkComplete = function(event) {\n\t\t// avoid mem leaks.\n\t\tlinkTag.onerror = linkTag.onload = null;\n\t\tif (event.type === 'load') {\n\t\t\tresolve();\n\t\t} else {\n\t\t\tvar errorType = event && (event.type === 'load' ? 'missing' : event.type);\n\t\t\tvar realHref = event && event.target && event.target.href || fullhref;\n\t\t\tvar err = new Error(\"Loading CSS chunk \" + chunkId + \" failed.\\n(\" + realHref + \")\");\n\t\t\terr.code = \"CSS_CHUNK_LOAD_FAILED\";\n\t\t\terr.type = errorType;\n\t\t\terr.request = realHref;\n\t\t\tlinkTag.parentNode.removeChild(linkTag)\n\t\t\treject(err);\n\t\t}\n\t}\n\tlinkTag.onerror = linkTag.onload = onLinkComplete;\n\tlinkTag.href = fullhref;\n\n\tdocument.head.appendChild(linkTag);\n\treturn linkTag;\n};\nvar findStylesheet = function(href, fullhref) {\n\tvar existingLinkTags = document.getElementsByTagName(\"link\");\n\tfor(var i = 0; i < existingLinkTags.length; i++) {\n\t\tvar tag = existingLinkTags[i];\n\t\tvar dataHref = tag.getAttribute(\"data-href\") || tag.getAttribute(\"href\");\n\t\tif(tag.rel === \"stylesheet\" && (dataHref === href || dataHref === fullhref)) return tag;\n\t}\n\tvar existingStyleTags = document.getElementsByTagName(\"style\");\n\tfor(var i = 0; i < existingStyleTags.length; i++) {\n\t\tvar tag = existingStyleTags[i];\n\t\tvar dataHref = tag.getAttribute(\"data-href\");\n\t\tif(dataHref === href || dataHref === fullhref) return tag;\n\t}\n};\nvar loadStylesheet = function(chunkId) {\n\treturn new Promise(function(resolve, reject) {\n\t\tvar href = __webpack_require__.miniCssF(chunkId);\n\t\tvar fullhref = __webpack_require__.p + href;\n\t\tif(findStylesheet(href, fullhref)) return resolve();\n\t\tcreateStylesheet(chunkId, fullhref, resolve, reject);\n\t});\n}\n// object to store loaded CSS chunks\nvar installedCssChunks = {\n\t179: 0\n};\n\n__webpack_require__.f.miniCss = function(chunkId, promises) {\n\tvar cssChunks = {\"6\":1,\"926\":1};\n\tif(installedCssChunks[chunkId]) promises.push(installedCssChunks[chunkId]);\n\telse if(installedCssChunks[chunkId] !== 0 && cssChunks[chunkId]) {\n\t\tpromises.push(installedCssChunks[chunkId] = loadStylesheet(chunkId).then(function() {\n\t\t\tinstalledCssChunks[chunkId] = 0;\n\t\t}, function(e) {\n\t\t\tdelete installedCssChunks[chunkId];\n\t\t\tthrow e;\n\t\t}));\n\t}\n};\n\n// no hmr","import React, { Children, cloneElement, useState } from 'react';\nimport { Menu, MenuItem as MuiMenuItem, IconButton, styled } from '@material-ui/core';\nimport { MoreVert } from '@material-ui/icons';\n\nexport const ActionMenuItem = styled(MuiMenuItem)(({ theme }) => ({\n minWidth: theme.spacing(28),\n}))\n\nexport const ActionMenu = ({ children }) => {\n const [ anchor, setAnchor ] = useState(null);\n\n const handleOpen = e => {\n setAnchor(e.currentTarget);\n }\n const handleClose = () => {\n setAnchor(null);\n }\n\n if (Children.map(children, child => React.isValidElement(child)).filter(Boolean).length <= 0) return null\n return <>\n \n \n {Children.map(children, action => action && cloneElement(action, { handleClose, onClick: handleClose, ...action.props }))}\n \n \n}\n","const INTERNAL = 'internal'\n\nconst LEAGUES = {\n MANAGE: 'leagues:manage',\n VIEW: 'leagues:view',\n PUBLIC: 'leagues:public',\n}\n\nconst PARTICIPANTS = {\n MANAGE: 'participants:manage',\n ACCOUNTS: 'participants:accounts',\n PERMISSIONS: 'participants:permissions',\n INVITE: 'participants:invite',\n VIEW: 'participants:view',\n}\n\nconst PROFILES = {\n MANAGE: 'profiles:manage',\n ADDRESSES: 'profiles:addresses',\n NOTIFICATIONS: 'profiles:notifications',\n VIEW: 'profiles:view',\n PUBLIC: 'profiles:public',\n}\n\nconst TEAMS = {\n MANAGE: 'teams:manage',\n ROSTER: 'teams:roster',\n ACTIVITIES: 'teams:activities',\n SETTINGS: 'teams:settings',\n VIEW: 'teams:view',\n PUBLIC: 'teams:public',\n}\n\nconst SCHEDULING = {\n MANAGE: 'scheduling:manage',\n GAMES: 'scheduling:games',\n STATUS: 'scheduling:status',\n DRAFTS: 'scheduling:drafts',\n PRACTICES: 'scheduling:practices',\n AVAILABILITY: 'scheduling:availability',\n VIEW: 'scheduling:view',\n PUBLIC: 'scheduling:public',\n APPROVE: 'scheduling:approve',\n}\n\nconst ASSIGNING = {\n MANAGE: 'assigning:manage',\n QUALIFICATIONS: 'assigning:qualifications',\n AVAILABILITY: 'assigning:availability',\n LISTS: 'assigning:lists',\n ASSIGN: 'assigning:assign',\n OFFICIAL: 'assigning:official',\n VIEW: 'assigning:view',\n}\n\nconst SCORESHEETS = {\n MANAGE: 'scoresheets:manage',\n LINEUPS: 'scoresheets:lineups',\n EVENTS: 'scoresheets:events',\n VIEW: 'scoresheets:view',\n}\n\nconst SUSPENSIONS = {\n MANAGE: 'suspensions:manage',\n VIEW: 'suspensions:view',\n}\n\nconst DISCIPLINE = {\n MANAGE: 'discipline:manage',\n VIEW: 'discipline:view',\n TRIGGER: 'discipline:trigger',\n}\n\nconst STATS = {\n VIEW: 'stats:view',\n WRITE: 'stats:write',\n REPORTS: 'stats:reports',\n PUBLIC: 'stats:public',\n SCHEMAS: 'stats:schemas',\n}\n\nconst CMS = {\n MANAGE: 'cms:manage',\n PUBLIC: 'cms:public',\n}\n\nconst every = group => Object.keys(group).map(key => group[key])\nconst ALL = [\n INTERNAL,\n ...every(LEAGUES),\n ...every(PARTICIPANTS),\n ...every(PROFILES),\n ...every(TEAMS),\n ...every(SCHEDULING),\n ...every(ASSIGNING),\n ...every(SCORESHEETS),\n ...every(STATS),\n ...every(CMS),\n]\n\n/* eslint-disable key-spacing */\nexport default {\n profile: {\n official: [ASSIGNING.OFFICIAL],\n league: [SCORESHEETS.VIEW],\n games: [ASSIGNING.OFFICIAL, SCHEDULING.VIEW],\n feed: [ASSIGNING.OFFICIAL],\n },\n reports: {\n list: [STATS.REPORTS],\n show: [STATS.REPORTS],\n create: [STATS.REPORTS],\n edit: [STATS.REPORTS],\n remove: [STATS.REPORTS],\n },\n\n venues: {\n list: [LEAGUES.MANAGE, SCHEDULING.MANAGE, SCHEDULING.GAMES, SCHEDULING.DRAFTS, SCHEDULING.VIEW, ASSIGNING.ASSIGN, ASSIGNING.OFFICIAL],\n show: [LEAGUES.MANAGE, SCHEDULING.MANAGE, SCHEDULING.GAMES, SCHEDULING.DRAFTS, SCHEDULING.VIEW, ASSIGNING.ASSIGN, ASSIGNING.OFFICIAL],\n create: [INTERNAL],\n edit: [INTERNAL],\n remove: [/* INTERNAL */],\n },\n surfaces: {\n list: [LEAGUES.MANAGE, SCHEDULING.MANAGE, SCHEDULING.GAMES, SCHEDULING.DRAFTS, SCHEDULING.VIEW, ASSIGNING.ASSIGN, ASSIGNING.OFFICIAL],\n show: [LEAGUES.MANAGE, SCHEDULING.MANAGE, SCHEDULING.GAMES, SCHEDULING.DRAFTS, SCHEDULING.VIEW, ASSIGNING.ASSIGN, ASSIGNING.OFFICIAL],\n create: [INTERNAL],\n edit: [INTERNAL],\n remove: [/* INTERNAL */],\n },\n leagues: {\n list: [LEAGUES.MANAGE, PARTICIPANTS.MANAGE, TEAMS.MANAGE, SCHEDULING.MANAGE, SCHEDULING.GAMES, SCHEDULING.VIEW, SCHEDULING.DRAFTS, ASSIGNING.MANAGE, CMS.MANAGE],\n show: [LEAGUES.MANAGE, PARTICIPANTS.MANAGE, TEAMS.MANAGE, SCHEDULING.MANAGE, SCHEDULING.GAMES, SCHEDULING.VIEW, SCHEDULING.DRAFTS, ASSIGNING.MANAGE, CMS.MANAGE],\n create: [INTERNAL],\n edit: [INTERNAL],\n remove: [/* INTERNAL */],\n\n createProviders: [LEAGUES.MANAGE],\n editProviders: [LEAGUES.MANAGE],\n },\n tournaments: {\n list: [LEAGUES.MANAGE, PARTICIPANTS.MANAGE, TEAMS.MANAGE, SCHEDULING.MANAGE, SCHEDULING.GAMES, SCHEDULING.VIEW, SCHEDULING.DRAFTS, ASSIGNING.MANAGE, CMS.MANAGE],\n show: [LEAGUES.MANAGE, PARTICIPANTS.MANAGE, TEAMS.MANAGE, SCHEDULING.MANAGE, SCHEDULING.GAMES, SCHEDULING.VIEW, SCHEDULING.DRAFTS, ASSIGNING.MANAGE, CMS.MANAGE],\n create: [INTERNAL],\n edit: [INTERNAL],\n remove: [/* INTERNAL */],\n\n createProviders: [LEAGUES.MANAGE],\n editProviders: [LEAGUES.MANAGE],\n },\n cups: {\n list: [LEAGUES.MANAGE, PARTICIPANTS.MANAGE, TEAMS.MANAGE, SCHEDULING.MANAGE, SCHEDULING.GAMES, SCHEDULING.VIEW, SCHEDULING.DRAFTS, ASSIGNING.MANAGE, CMS.MANAGE],\n show: [LEAGUES.MANAGE, PARTICIPANTS.MANAGE, TEAMS.MANAGE, SCHEDULING.MANAGE, SCHEDULING.GAMES, SCHEDULING.VIEW, SCHEDULING.DRAFTS, ASSIGNING.MANAGE, CMS.MANAGE],\n create: [INTERNAL],\n edit: [INTERNAL],\n remove: [/* INTERNAL */],\n\n createProviders: [LEAGUES.MANAGE],\n editProviders: [LEAGUES.MANAGE],\n },\n offices: {\n list: [LEAGUES.MANAGE, PARTICIPANTS.MANAGE, TEAMS.MANAGE, SCHEDULING.MANAGE, SCHEDULING.GAMES, SCHEDULING.VIEW, SCHEDULING.DRAFTS, ASSIGNING.MANAGE, ASSIGNING.LISTS, CMS.MANAGE],\n show: [LEAGUES.MANAGE, PARTICIPANTS.MANAGE, TEAMS.MANAGE, SCHEDULING.MANAGE, SCHEDULING.GAMES, SCHEDULING.VIEW, SCHEDULING.DRAFTS, ASSIGNING.MANAGE, ASSIGNING.LISTS, ASSIGNING.AVAILABILITY, CMS.MANAGE],\n create: [INTERNAL],\n edit: [INTERNAL],\n remove: [/* INTERNAL */],\n\n editHCR: [INTERNAL],\n peopleTab: [PARTICIPANTS.MANAGE, ASSIGNING.MANAGE, ASSIGNING.ASSIGN],\n assigningTab: [ASSIGNING.MANAGE, ASSIGNING.LISTS, ASSIGNING.ASSIGN],\n rulebookTab: [INTERNAL /* LEAGUES.MANAGE */],\n settingsTab: [LEAGUES.MANAGE],\n schedulerTab: [SCHEDULING.MANAGE, SCHEDULING.GAMES, SCHEDULING.DRAFTS],\n publish: [SCHEDULING.MANAGE],\n share: [SCHEDULING.MANAGE],\n internal: [INTERNAL],\n },\n officemembers: {\n list: [LEAGUES.MANAGE],\n show: [LEAGUES.MANAGE],\n create: [LEAGUES.MANAGE],\n edit: [LEAGUES.MANAGE],\n remove: [LEAGUES.MANAGE],\n },\n officeSettings: {\n list: [LEAGUES.MANAGE],\n show: [LEAGUES.MANAGE],\n create: [LEAGUES.MANAGE],\n edit: [LEAGUES.MANAGE],\n remove: [],\n },\n branchOfficeSettings: {\n list: [LEAGUES.MANAGE],\n show: [LEAGUES.MANAGE],\n create: [LEAGUES.MANAGE],\n edit: [LEAGUES.MANAGE],\n internalTab: [INTERNAL],\n remove: [],\n },\n officeAssignSettings: {\n list: [ASSIGNING.MANAGE, ASSIGNING.ASSIGN],\n show: [ASSIGNING.MANAGE, ASSIGNING.ASSIGN],\n create: [ASSIGNING.MANAGE],\n edit: [ASSIGNING.MANAGE],\n remove: [],\n },\n rulebooks: {\n list: [INTERNAL],\n show: [INTERNAL],\n create: [INTERNAL],\n edit: [INTERNAL],\n remove: [],\n },\n infractions: {\n list: [INTERNAL, SCORESHEETS.MANAGE],\n show: [INTERNAL, SCORESHEETS.MANAGE],\n create: [INTERNAL],\n edit: [INTERNAL],\n remove: [INTERNAL],\n },\n infractionTypes: {\n list: [INTERNAL, SCORESHEETS.MANAGE],\n show: [INTERNAL, SCORESHEETS.MANAGE],\n create: [INTERNAL],\n edit: [INTERNAL],\n remove: [INTERNAL],\n },\n ruleSections: {\n list: [INTERNAL, SCORESHEETS.MANAGE],\n show: [INTERNAL, SCORESHEETS.MANAGE],\n create: [INTERNAL],\n edit: [INTERNAL],\n remove: [INTERNAL],\n },\n rules: {\n list: [INTERNAL, SCORESHEETS.MANAGE],\n show: [INTERNAL, SCORESHEETS.MANAGE],\n create: [INTERNAL],\n edit: [INTERNAL],\n remove: [INTERNAL],\n },\n ruleOptions: {\n list: [INTERNAL, SCORESHEETS.MANAGE],\n show: [INTERNAL, SCORESHEETS.MANAGE],\n create: [INTERNAL],\n edit: [INTERNAL],\n remove: [INTERNAL],\n },\n ruleOptionMembers: {\n list: [INTERNAL, SCORESHEETS.MANAGE],\n show: [INTERNAL, SCORESHEETS.MANAGE],\n create: [INTERNAL],\n edit: [INTERNAL],\n remove: [INTERNAL],\n },\n infractionAccumulations: {\n list: [INTERNAL, SCORESHEETS.MANAGE],\n show: [INTERNAL, SCORESHEETS.MANAGE],\n create: [INTERNAL],\n edit: [INTERNAL],\n remove: [INTERNAL],\n },\n infractionAccumulationMembers: {\n list: [INTERNAL, SCORESHEETS.MANAGE],\n show: [INTERNAL, SCORESHEETS.MANAGE],\n create: [INTERNAL],\n edit: [INTERNAL],\n remove: [INTERNAL],\n },\n groups: {\n list: [LEAGUES.MANAGE, LEAGUES.VIEW],\n show: [],\n create: [LEAGUES.MANAGE],\n edit: [LEAGUES.MANAGE],\n remove: [LEAGUES.MANAGE],\n },\n pools: {\n list: [SCHEDULING.MANAGE, SCHEDULING.GAMES, SCHEDULING.DRAFTS, SCHEDULING.VIEW],\n show: [SCHEDULING.MANAGE, SCHEDULING.GAMES, SCHEDULING.DRAFTS, SCHEDULING.VIEW],\n create: [SCHEDULING.MANAGE, SCHEDULING.GAMES],\n edit: [SCHEDULING.MANAGE, SCHEDULING.GAMES],\n remove: [SCHEDULING.MANAGE, SCHEDULING.GAMES],\n },\n arenaoffices: {\n list: [LEAGUES.MANAGE, SCHEDULING.AVAILABILITY],\n show: [LEAGUES.MANAGE, SCHEDULING.AVAILABILITY],\n create: [LEAGUES.MANAGE, SCHEDULING.AVAILABILITY],\n edit: [LEAGUES.MANAGE, SCHEDULING.AVAILABILITY],\n remove: [LEAGUES.MANAGE, SCHEDULING.AVAILABILITY],\n },\n arenaslots: {\n list: [LEAGUES.MANAGE, SCHEDULING.MANAGE, SCHEDULING.GAMES, SCHEDULING.DRAFTS, SCHEDULING.AVAILABILITY, SCHEDULING.VIEW],\n show: [LEAGUES.MANAGE, SCHEDULING.MANAGE, SCHEDULING.GAMES, SCHEDULING.DRAFTS, SCHEDULING.AVAILABILITY, SCHEDULING.VIEW],\n create: [SCHEDULING.AVAILABILITY],\n edit: [SCHEDULING.AVAILABILITY],\n remove: [SCHEDULING.AVAILABILITY],\n import: [SCHEDULING.AVAILABILITY],\n bulkActions: [SCHEDULING.AVAILABILITY],\n },\n availabilities: {\n list: [SCHEDULING.GAMES, SCHEDULING.VIEW, SCHEDULING.AVAILABILITY],\n show: [SCHEDULING.GAMES, SCHEDULING.VIEW, SCHEDULING.AVAILABILITY],\n create: [SCHEDULING.AVAILABILITY],\n edit: [SCHEDULING.AVAILABILITY],\n remove: [SCHEDULING.AVAILABILITY],\n import: [SCHEDULING.AVAILABILITY],\n },\n officialAvailabilities: {\n list: [ASSIGNING.AVAILABILITY, ASSIGNING.VIEW],\n edit: [ASSIGNING.AVAILABILITY],\n categories: [ASSIGNING.MANAGE, INTERNAL],\n assigners: [ASSIGNING.MANAGE, INTERNAL],\n },\n accounts: {\n list: [PARTICIPANTS.ACCOUNTS],\n show: [PARTICIPANTS.ACCOUNTS],\n create: [],\n edit: [PARTICIPANTS.ACCOUNTS],\n remove: [],\n },\n identities: {\n list: [PARTICIPANTS.ACCOUNTS],\n show: [PARTICIPANTS.ACCOUNTS],\n create: [PARTICIPANTS.ACCOUNTS],\n edit: [PARTICIPANTS.ACCOUNTS],\n remove: [PARTICIPANTS.ACCOUNTS],\n },\n permissions: {\n list: [PARTICIPANTS.PERMISSIONS],\n show: [],\n create: [PARTICIPANTS.PERMISSIONS],\n edit: [PARTICIPANTS.PERMISSIONS],\n remove: [PARTICIPANTS.PERMISSIONS],\n },\n roles: {\n list: [PARTICIPANTS.PERMISSIONS],\n show: [],\n create: [PARTICIPANTS.PERMISSIONS],\n edit: [PARTICIPANTS.PERMISSIONS],\n remove: [PARTICIPANTS.PERMISSIONS],\n },\n\n participants: {\n list: [PARTICIPANTS.MANAGE, PARTICIPANTS.ACCOUNTS, PARTICIPANTS.PERMISSIONS, PARTICIPANTS.VIEW],\n show: [PARTICIPANTS.MANAGE, PARTICIPANTS.ACCOUNTS, PARTICIPANTS.PERMISSIONS, PARTICIPANTS.INVITE, PARTICIPANTS.VIEW, PROFILES.MANAGE, PROFILES.ADDRESSES, PROFILES.ADDRESSES, PROFILES.VIEW, TEAMS.MANAGE, TEAMS.ROSTER, TEAMS.VIEW, SCORESHEETS.MANAGE, ASSIGNING.MANAGE, ASSIGNING.ASSIGN, ASSIGNING.AVAILABILITY, ASSIGNING.LISTS, SUSPENSIONS.VIEW, SUSPENSIONS.MANAGE],\n create: [PARTICIPANTS.MANAGE],\n edit: [PARTICIPANTS.MANAGE],\n remove: [/* INTERNAL */],\n\n invite: [PARTICIPANTS.INVITE],\n contacts: [PROFILES.MANAGE, PROFILES.NOTIFICATIONS],\n profile: [PROFILES.MANAGE],\n\n profileTab: [PROFILES.MANAGE, PROFILES.ADDRESSES, PROFILES.NOTIFICATIONS, PROFILES.VIEW],\n registrationsTab: [PARTICIPANTS.MANAGE, TEAMS.MANAGE, TEAMS.ROSTER, TEAMS.VIEW],\n officiatingTab: [ASSIGNING.QUALIFICATIONS, ASSIGNING.AVAILABILITY],\n settingsTab: [PARTICIPANTS.NOTIFICATIONS, PARTICIPANTS.PERMISSIONS, PARTICIPANTS.ACCOUNTS],\n },\n registrations: {\n list: [PARTICIPANTS.MANAGE],\n show: [PARTICIPANTS.MANAGE],\n create: [PARTICIPANTS.MANAGE],\n edit: [PARTICIPANTS.MANAGE],\n remove: [PARTICIPANTS.MANAGE],\n },\n qualifications: {\n list: [PARTICIPANTS.MANAGE, ASSIGNING.QUALIFICATIONS, ASSIGNING.ASSIGN],\n show: [PARTICIPANTS.MANAGE, ASSIGNING.QUALIFICATIONS, ASSIGNING.ASSIGN],\n create: [PARTICIPANTS.MANAGE, ASSIGNING.QUALIFICATIONS],\n edit: [PARTICIPANTS.MANAGE, ASSIGNING.QUALIFICATIONS],\n remove: [PARTICIPANTS.MANAGE, ASSIGNING.QUALIFICATIONS],\n\n importGrades: [PARTICIPANTS.MANAGE, ASSIGNING.QUALIFICATIONS],\n importQualifications: [PARTICIPANTS.MANAGE, ASSIGNING.QUALIFICATIONS],\n },\n officialOffices: {\n list: [ASSIGNING.AVAILABILITY],\n show: [ASSIGNING.AVAILABILITY],\n create: [ASSIGNING.AVAILABILITY],\n edit: [ASSIGNING.AVAILABILITY],\n remove: [ASSIGNING.AVAILABILITY],\n\n importOfficials: [ASSIGNING.AVAILABILITY],\n },\n officialClaims: {\n list: [ASSIGNING.MANAGE, ASSIGNING.ASSIGN, ASSIGNING.OFFICIAL],\n show: [ASSIGNING.MANAGE, ASSIGNING.ASSIGN, ASSIGNING.OFFICIAL],\n create: [ASSIGNING.MANAGE, ASSIGNING.ASSIGN, ASSIGNING.OFFICIAL],\n edit: [ASSIGNING.MANAGE, ASSIGNING.ASSIGN, ASSIGNING.OFFICIAL],\n remove: [ASSIGNING.MANAGE, ASSIGNING.ASSIGN, ASSIGNING.OFFICIAL],\n\n changeStatus: [ASSIGNING.MANAGE, ASSIGNING.ASSIGN]\n },\n officialClaimDocuments: {\n list: [ASSIGNING.MANAGE, ASSIGNING.ASSIGN, ASSIGNING.OFFICIAL],\n show: [ASSIGNING.MANAGE, ASSIGNING.ASSIGN, ASSIGNING.OFFICIAL],\n create: [ASSIGNING.MANAGE, ASSIGNING.ASSIGN, ASSIGNING.OFFICIAL],\n edit: [ASSIGNING.MANAGE, ASSIGNING.ASSIGN, ASSIGNING.OFFICIAL],\n remove: [ASSIGNING.MANAGE, ASSIGNING.ASSIGN, ASSIGNING.OFFICIAL],\n\n changeStatus: [ASSIGNING.MANAGE, ASSIGNING.ASSIGN]\n },\n officialTransactions: {\n list: [ASSIGNING.MANAGE, ASSIGNING.ASSIGN, ASSIGNING.OFFICIAL],\n show: [ASSIGNING.MANAGE, ASSIGNING.ASSIGN, ASSIGNING.OFFICIAL],\n create: [ASSIGNING.MANAGE, ASSIGNING.ASSIGN],\n edit: [ASSIGNING.MANAGE, ASSIGNING.ASSIGN],\n remove: [ASSIGNING.MANAGE, ASSIGNING.ASSIGN],\n },\n payPeriods: {\n list: [ASSIGNING.MANAGE, ASSIGNING.ASSIGN],\n show: [ASSIGNING.MANAGE, ASSIGNING.ASSIGN],\n create: [ASSIGNING.MANAGE, ASSIGNING.ASSIGN],\n edit: [ASSIGNING.MANAGE, ASSIGNING.ASSIGN],\n remove: [ASSIGNING.MANAGE, ASSIGNING.ASSIGN],\n },\n officeClaimsSettings: {\n list: [ASSIGNING.MANAGE, ASSIGNING.ASSIGN, ASSIGNING.OFFICIAL],\n show: [ASSIGNING.MANAGE, ASSIGNING.ASSIGN, ASSIGNING.OFFICIAL],\n create: [ASSIGNING.MANAGE, ASSIGNING.ASSIGN],\n edit: [ASSIGNING.MANAGE, ASSIGNING.ASSIGN],\n remove: [ASSIGNING.MANAGE, ASSIGNING.ASSIGN],\n },\n\n\n contacts: {\n list: [PROFILES.MANAGE, PROFILES.NOTIFICATIONS],\n show: [PROFILES.MANAGE, PROFILES.NOTIFICATIONS],\n create: [PROFILES.MANAGE, PROFILES.NOTIFICATIONS],\n edit: [PROFILES.MANAGE, PROFILES.NOTIFICATIONS],\n remove: [PROFILES.MANAGE, PROFILES.NOTIFICATIONS],\n\n verify: [PROFILES.MANAGE, PROFILES.NOTIFICATIONS],\n },\n addresses: {\n list: [PROFILES.ADDRESSES],\n show: [PROFILES.ADDRESSES],\n create: [PROFILES.ADDRESSES],\n edit: [PROFILES.ADDRESSES],\n remove: [PROFILES.ADDRESSES],\n },\n notifications: {\n list: [PROFILES.NOTIFICATIONS],\n show: [],\n create: [PROFILES.NOTIFICATIONS],\n edit: [PROFILES.NOTIFICATIONS],\n remove: [PROFILES.NOTIFICATIONS],\n },\n profiles: {\n list: [PROFILES.MANAGE],\n show: [PROFILES.MANAGE],\n create: [],\n edit: [PROFILES.MANAGE],\n remove: [],\n\n import: [PROFILES.MANAGE],\n },\n\n\n officialConflicts: {\n list: [ASSIGNING.QUALIFICATIONS],\n show: [ASSIGNING.QUALIFICATIONS],\n create: [ASSIGNING.QUALIFICATIONS],\n edit: [ASSIGNING.QUALIFICATIONS],\n remove: [ASSIGNING.QUALIFICATIONS],\n },\n attributeTypes: {\n list: [ASSIGNING.MANAGE, ASSIGNING.ASSIGN],\n show: [ASSIGNING.MANAGE, ASSIGNING.ASSIGN],\n create: [ASSIGNING.MANAGE, ASSIGNING.ASSIGN],\n edit: [ASSIGNING.MANAGE, ASSIGNING.ASSIGN],\n remove: [ASSIGNING.MANAGE, ASSIGNING.ASSIGN],\n },\n attributeValues: {\n list: [ASSIGNING.MANAGE, ASSIGNING.ASSIGN],\n show: [ASSIGNING.MANAGE, ASSIGNING.ASSIGN],\n create: [ASSIGNING.MANAGE, ASSIGNING.ASSIGN],\n edit: [ASSIGNING.MANAGE, ASSIGNING.ASSIGN],\n remove: [ASSIGNING.MANAGE, ASSIGNING.ASSIGN],\n import: [ASSIGNING.MANAGE, ASSIGNING.ASSIGN],\n },\n\n\n teams: {\n list: [TEAMS.MANAGE, TEAMS.ROSTER, TEAMS.ACTIVITIES, TEAMS.SETTINGS, TEAMS.VIEW],\n show: [TEAMS.MANAGE, TEAMS.ROSTER, TEAMS.ACTIVITIES, TEAMS.SETTINGS, TEAMS.VIEW, SCHEDULING.MANAGE, SCHEDULING.GAMES, SCHEDULING.VIEW, SCORESHEETS.MANAGE, SUSPENSIONS.VIEW, SUSPENSIONS.MANAGE],\n create: [TEAMS.MANAGE],\n edit: [TEAMS.MANAGE],\n remove: [/* INTERNAL */],\n\n contacts: [TEAMS.MANAGE, TEAMS.ROSTER, PROFILES.NOTIFICATIONS],\n gameTeams: [TEAMS.MANAGE, TEAMS.ROSTER, TEAMS.SETTINGS, TEAMS.VIEW, SCHEDULING.MANAGE, SCHEDULING.GAMES, SCHEDULING.VIEW],\n schedules: [SCHEDULING.MANAGE, SCHEDULING.GAMES, SCHEDULING.VIEW, TEAMS.ACTIVITIES],\n settingsTab: [TEAMS.MANAGE, TEAMS.SETTINGS],\n internal: [INTERNAL],\n },\n activities: {\n list: [TEAMS.ACTIVITIES, TEAMS.VIEW],\n show: [TEAMS.ACTIVITIES, TEAMS.VIEW],\n create: [TEAMS.ACTIVITIES],\n edit: [TEAMS.ACTIVITIES],\n remove: [TEAMS.ACTIVITIES],\n },\n practices: {\n list: [SCHEDULING.MANAGE, SCHEDULING.GAMES, SCHEDULING.VIEW, SCHEDULING.PRACTICES],\n show: [SCHEDULING.MANAGE, SCHEDULING.GAMES, SCHEDULING.VIEW, SCHEDULING.PRACTICES],\n create: [SCHEDULING.MANAGE, SCHEDULING.GAMES, SCHEDULING.PRACTICES],\n edit: [SCHEDULING.MANAGE, SCHEDULING.GAMES, SCHEDULING.PRACTICES],\n remove: [SCHEDULING.MANAGE, SCHEDULING.GAMES, SCHEDULING.PRACTICES],\n\n bulkActions: [SCHEDULING.STATUS],\n changeStatus: [SCHEDULING.STATUS],\n },\n teamArenas: {\n list: [TEAMS.MANAGE, TEAMS.SETTINGS],\n show: [TEAMS.MANAGE, TEAMS.SETTINGS],\n create: [TEAMS.MANAGE, TEAMS.SETTINGS],\n edit: [TEAMS.MANAGE, TEAMS.SETTINGS],\n remove: [],\n },\n members: {\n list: [TEAMS.MANAGE, TEAMS.ROSTER, TEAMS.VIEW],\n show: [TEAMS.MANAGE, TEAMS.ROSTER, TEAMS.VIEW],\n create: [TEAMS.MANAGE],\n edit: [TEAMS.MANAGE, TEAMS.ROSTER],\n remove: [TEAMS.MANAGE],\n\n import: [TEAMS.MANAGE],\n status: [TEAMS.MANAGE],\n },\n\n\n schedules: {\n list: [SCHEDULING.MANAGE, SCHEDULING.GAMES, SCHEDULING.DRAFTS, SCHEDULING.VIEW, ASSIGNING.ASSIGN],\n show: [SCHEDULING.MANAGE, SCHEDULING.GAMES, SCHEDULING.DRAFTS, SCHEDULING.VIEW, ASSIGNING.ASSIGN, SUSPENSIONS.VIEW, SUSPENSIONS.MANAGE],\n create: [SCHEDULING.MANAGE],\n edit: [SCHEDULING.MANAGE],\n remove: [SCHEDULING.MANAGE],\n\n teams: [SCHEDULING.MANAGE, SCHEDULING.GAMES],\n scheduler: [SCHEDULING.MANAGE, SCHEDULING.GAMES],\n settings: [SCHEDULING.MANAGE],\n targets: [ASSIGNING.MANAGE],\n publish: [SCHEDULING.MANAGE],\n share: [SCHEDULING.MANAGE],\n standings: [SCHEDULING.MANAGE],\n stats: [SCHEDULING.MANAGE],\n internal: [INTERNAL],\n },\n scheduleteams: {\n list: [SCHEDULING.MANAGE, SCHEDULING.GAMES, SCHEDULING.DRAFTS, SCHEDULING.VIEW],\n show: [SCHEDULING.MANAGE, SCHEDULING.GAMES, SCHEDULING.DRAFTS, SCHEDULING.VIEW],\n create: [SCHEDULING.MANAGE, SCHEDULING.GAMES],\n edit: [SCHEDULING.MANAGE, SCHEDULING.GAMES],\n remove: [SCHEDULING.MANAGE, SCHEDULING.GAMES],\n },\n schedulesequences: {\n list: [SCHEDULING.MANAGE],\n show: [SCHEDULING.MANAGE],\n create: [SCHEDULING.MANAGE],\n edit: [SCHEDULING.MANAGE],\n remove: [SCHEDULING.MANAGE],\n },\n schedulingConstraints: {\n list: [SCHEDULING.MANAGE, SCHEDULING.GAMES, SCHEDULING.VIEW],\n show: [SCHEDULING.MANAGE, SCHEDULING.GAMES, SCHEDULING.VIEW],\n create: [SCHEDULING.MANAGE, SCHEDULING.GAMES],\n edit: [SCHEDULING.MANAGE, SCHEDULING.GAMES],\n remove: [SCHEDULING.MANAGE, SCHEDULING.GAMES],\n },\n drafts: {\n list: [SCHEDULING.MANAGE, SCHEDULING.GAMES, SCHEDULING.DRAFTS],\n show: [SCHEDULING.MANAGE, SCHEDULING.GAMES, SCHEDULING.DRAFTS],\n create: [SCHEDULING.MANAGE],\n edit: [SCHEDULING.MANAGE, SCHEDULING.DRAFTS],\n remove: [SCHEDULING.MANAGE],\n\n shared: [SCHEDULING.DRAFTS],\n },\n draftGames: {\n list: [SCHEDULING.MANAGE, SCHEDULING.GAMES, SCHEDULING.DRAFTS],\n show: [SCHEDULING.MANAGE, SCHEDULING.GAMES, SCHEDULING.DRAFTS],\n create: [SCHEDULING.MANAGE],\n edit: [SCHEDULING.MANAGE, SCHEDULING.DRAFTS],\n remove: [SCHEDULING.MANAGE],\n\n publish: [SCHEDULING.MANAGE],\n approve: [SCHEDULING.APPROVE],\n bulkActions: [SCHEDULING.MANAGE, SCHEDULING.DRAFTS],\n },\n games: {\n list: [SCHEDULING.MANAGE, SCHEDULING.GAMES, SCHEDULING.VIEW, ASSIGNING.ASSIGN, ASSIGNING.OFFICIAL, ASSIGNING.VIEW, SCORESHEETS.MANAGE],\n show: [SCHEDULING.MANAGE, SCHEDULING.GAMES, SCHEDULING.VIEW, ASSIGNING.ASSIGN, ASSIGNING.OFFICIAL, ASSIGNING.VIEW, SCORESHEETS.MANAGE, SUSPENSIONS.VIEW, SUSPENSIONS.MANAGE],\n create: [SCHEDULING.MANAGE, SCHEDULING.GAMES],\n edit: [SCHEDULING.MANAGE, SCHEDULING.GAMES],\n remove: [SCHEDULING.MANAGE],\n bulkActions: [SCHEDULING.STATUS, ASSIGNING.MANAGE, ASSIGNING.ASSIGN],\n\n assignSettings: [ASSIGNING.ASSIGN],\n assign: [ASSIGNING.ASSIGN],\n request: [ASSIGNING.OFFICIAL],\n approve: [SCHEDULING.APPROVE],\n\n officials: [ASSIGNING.ASSIGN, ASSIGNING.OFFICIAL, ASSIGNING.VIEW],\n affiliates: [],\n changeStatus: [SCHEDULING.STATUS],\n forfeit: [SCORESHEETS.MANAGE],\n shots: [SCORESHEETS.MANAGE, SCORESHEETS.LINEUPS],\n throwsInnings: [SCORESHEETS.MANAGE, SCORESHEETS.LINEUPS],\n resetAssignRules: [ASSIGNING.ASSIGN],\n resetScoresheet: [SCORESHEETS.MANAGE],\n internal: [INTERNAL],\n },\n gameBrackets: {\n edit: [LEAGUES.MANAGE],\n },\n scheduleSettings: {\n list: [SCHEDULING.MANAGE],\n show: [SCHEDULING.MANAGE],\n create: [SCHEDULING.MANAGE],\n edit: [SCHEDULING.MANAGE],\n remove: [],\n },\n gameDocuments: {\n list: [SCORESHEETS.MANAGE, SCORESHEETS.LINEUPS, SCHEDULING.MANAGE, SCHEDULING.GAMES, SCHEDULING.VIEW, ASSIGNING.MANAGE, ASSIGNING.ASSIGN, ASSIGNING.OFFICIAL, ASSIGNING.VIEW],\n show: [],\n create: [SCORESHEETS.MANAGE, SCORESHEETS.LINEUPS, SCHEDULING.MANAGE, SCHEDULING.GAMES, ASSIGNING.MANAGE, ASSIGNING.OFFICIAL],\n edit: [],\n remove: [SCORESHEETS.MANAGE, SCORESHEETS.LINEUPS, SCHEDULING.MANAGE, SCHEDULING.GAMES, ASSIGNING.MANAGE, ASSIGNING.OFFICIAL],\n },\n\n\n announcements: {\n list: [ASSIGNING.MANAGE, ASSIGNING.ASSIGN, ASSIGNING.OFFICIAL],\n show: [ASSIGNING.MANAGE, ASSIGNING.ASSIGN, ASSIGNING.OFFICIAL],\n create: [ASSIGNING.MANAGE, ASSIGNING.ASSIGN],\n edit: [ASSIGNING.MANAGE, ASSIGNING.ASSIGN],\n remove: [ASSIGNING.MANAGE, ASSIGNING.ASSIGN],\n },\n gameMessagesLeague: {\n list: [SCHEDULING.MANAGE, SCHEDULING.GAMES, SCHEDULING.VIEW, ASSIGNING.MANAGE, ASSIGNING.ASSIGN, ASSIGNING.OFFICIAL, ASSIGNING.VIEW],\n show: [],\n create: [SCHEDULING.MANAGE, SCHEDULING.GAMES],\n edit: [],\n remove: [SCHEDULING.MANAGE, SCHEDULING.GAMES],\n },\n gameMessagesOfficiating: {\n list: [ASSIGNING.MANAGE, ASSIGNING.ASSIGN],\n show: [],\n create: [ASSIGNING.MANAGE, ASSIGNING.ASSIGN],\n edit: [],\n remove: [ASSIGNING.MANAGE, ASSIGNING.ASSIGN],\n },\n\n\n assignSystems: {\n list: [ASSIGNING.MANAGE],\n show: [ASSIGNING.MANAGE],\n create: [INTERNAL],\n edit: [INTERNAL],\n remove: [INTERNAL],\n },\n assignFees: {\n list: [ASSIGNING.MANAGE],\n show: [ASSIGNING.MANAGE],\n create: [ASSIGNING.MANAGE],\n edit: [ASSIGNING.MANAGE],\n remove: [ASSIGNING.MANAGE],\n },\n assignRules: {\n list: [ASSIGNING.MANAGE],\n show: [ASSIGNING.MANAGE],\n create: [ASSIGNING.MANAGE],\n edit: [ASSIGNING.MANAGE],\n remove: [ASSIGNING.MANAGE],\n },\n assignTargets: {\n list: [ASSIGNING.MANAGE],\n show: [ASSIGNING.MANAGE],\n create: [ASSIGNING.MANAGE],\n edit: [ASSIGNING.MANAGE],\n remove: [ASSIGNING.MANAGE],\n },\n gameAssignSettings: {\n list: [ASSIGNING.ASSIGN],\n show: [ASSIGNING.ASSIGN],\n create: [ASSIGNING.ASSIGN],\n edit: [ASSIGNING.ASSIGN],\n remove: [],\n },\n lists: {\n list: [ASSIGNING.LISTS],\n show: [ASSIGNING.LISTS],\n create: [ASSIGNING.LISTS],\n edit: [ASSIGNING.LISTS],\n remove: [ASSIGNING.LISTS],\n import: [ASSIGNING.LISTS],\n },\n listMembers: {\n list: [ASSIGNING.LISTS],\n show: [ASSIGNING.LISTS],\n create: [ASSIGNING.LISTS],\n edit: [ASSIGNING.LISTS],\n remove: [ASSIGNING.LISTS],\n },\n\n\n scoresheets: {\n full: [SCORESHEETS.MANAGE],\n lineup: [SCORESHEETS.MANAGE, SCORESHEETS.LINEUPS],\n adminNotes: [SCORESHEETS.MANAGE, ASSIGNING.OFFICIAL],\n },\n gameAffiliates: {\n list: [SCORESHEETS.MANAGE],\n show: [SCORESHEETS.MANAGE],\n create: [SCORESHEETS.MANAGE],\n edit: [SCORESHEETS.MANAGE],\n remove: [SCORESHEETS.MANAGE],\n },\n gameEvents: {\n list: [SCORESHEETS.EVENTS],\n remove: [INTERNAL],\n },\n suspensions: {\n list: [SUSPENSIONS.MANAGE, DISCIPLINE.MANAGE, DISCIPLINE.VIEW],\n show: [SUSPENSIONS.MANAGE, SUSPENSIONS.VIEW, DISCIPLINE.MANAGE, DISCIPLINE.VIEW],\n create: [SUSPENSIONS.MANAGE],\n edit: [SUSPENSIONS.MANAGE],\n remove: [SUSPENSIONS.MANAGE],\n },\n suspensionDisciplines: {\n list: [DISCIPLINE.MANAGE, DISCIPLINE.VIEW],\n show: [DISCIPLINE.MANAGE, DISCIPLINE.VIEW],\n create: [DISCIPLINE.MANAGE],\n edit: [DISCIPLINE.MANAGE],\n remove: [DISCIPLINE.MANAGE],\n trigger: [DISCIPLINE.TRIGGER],\n committee: [DISCIPLINE.MANAGE, DISCIPLINE.VIEW],\n },\n gamePurges: {\n list: [SCORESHEETS.MANAGE, SCORESHEETS.VIEW],\n show: [SCORESHEETS.MANAGE, SCORESHEETS.VIEW],\n edit: [],\n },\n gameIncidents: {\n list: [SCORESHEETS.MANAGE, ASSIGNING.OFFICIAL],\n show: [SCORESHEETS.MANAGE, ASSIGNING.OFFICIAL],\n create: [SCORESHEETS.MANAGE, ASSIGNING.OFFICIAL],\n edit: [SCORESHEETS.MANAGE, ASSIGNING.OFFICIAL],\n remove: [SCORESHEETS.MANAGE, ASSIGNING.OFFICIAL],\n },\n gamepenalties: {\n list: [SCORESHEETS.MANAGE, SCORESHEETS.VIEW],\n show: [SCORESHEETS.MANAGE, SCORESHEETS.VIEW],\n create: [SCORESHEETS.MANAGE],\n edit: [SCORESHEETS.MANAGE],\n remove: [SCORESHEETS.MANAGE],\n },\n sanctions: {\n list: [INTERNAL, SCORESHEETS.MANAGE],\n show: [INTERNAL, SCORESHEETS.MANAGE],\n create: [INTERNAL],\n edit: [INTERNAL],\n remove: [INTERNAL],\n },\n sanctionMembers: {\n list: [INTERNAL, SCORESHEETS.MANAGE],\n show: [INTERNAL, SCORESHEETS.MANAGE],\n create: [INTERNAL],\n edit: [INTERNAL],\n remove: [INTERNAL],\n },\n sanctionOffenses: {\n list: [INTERNAL, SCORESHEETS.MANAGE],\n show: [INTERNAL, SCORESHEETS.MANAGE],\n create: [INTERNAL],\n edit: [INTERNAL],\n remove: [INTERNAL],\n },\n\n sections: {\n list: [CMS.MANAGE],\n show: [CMS.MANAGE],\n create: [CMS.MANAGE],\n edit: [CMS.MANAGE],\n remove: [CMS.MANAGE],\n },\n pages: {\n list: [CMS.MANAGE],\n show: [CMS.MANAGE],\n create: [CMS.MANAGE],\n edit: [CMS.MANAGE],\n remove: [CMS.MANAGE],\n },\n posts: {\n list: [CMS.MANAGE],\n show: [CMS.MANAGE],\n create: [CMS.MANAGE],\n edit: [CMS.MANAGE],\n remove: [CMS.MANAGE],\n },\n webevents: {\n list: [CMS.MANAGE],\n show: [CMS.MANAGE],\n create: [CMS.MANAGE],\n edit: [CMS.MANAGE],\n remove: [CMS.MANAGE],\n },\n\n\n help: {\n list: ALL,\n show: ALL,\n create: [INTERNAL],\n edit: [INTERNAL],\n remove: [INTERNAL],\n },\n\n divisions: {\n list: ALL,\n show: ALL,\n create: [INTERNAL],\n edit: [INTERNAL],\n remove: [INTERNAL],\n },\n classes: {\n list: ALL,\n show: ALL,\n create: [INTERNAL],\n edit: [INTERNAL],\n remove: [INTERNAL],\n },\n categories: {\n list: ALL,\n show: ALL,\n create: [INTERNAL],\n edit: [INTERNAL],\n remove: [INTERNAL],\n },\n}\n","import { authService } from '../http';\nimport requirements from '../permissions';\n\nexport const hasAnyScope = (scopes = [], requiredScopes = []) => {\n if (!scopes || !requiredScopes) return false;\n return requiredScopes.some(scope => scopes.includes(scope))\n}\n\nexport const isAuthorized = (recordOrScopes, resource, method, includeAll, filteredScopes = true) => {\n if (!resource || !method) {\n console.error('isAuthorized: resource/method missing') /* eslint-disable-line no-console */\n return false;\n }\n if (requirements?.[resource]?.[method] == null) {\n console.log(`isAuthorized: Requirements missing for resource ${resource} / method ${method}`) /* eslint-disable-line no-console */\n return false;\n }\n if (!recordOrScopes) return false;\n\n let scopes = [];\n if (Array.isArray(recordOrScopes)) {\n scopes = recordOrScopes;\n } else if (filteredScopes && recordOrScopes?._filteredScopes != null) {\n scopes = recordOrScopes._filteredScopes;\n } else if (recordOrScopes?._scopes != null) {\n scopes = recordOrScopes._scopes;\n } else {\n scopes = authService.getScopes();\n }\n\n if (includeAll) {\n scopes = [...scopes, ...authService.getScopes()]\n }\n\n const requiredScopes = requirements[resource][method];\n return requiredScopes && hasAnyScope(scopes, requiredScopes);\n}\n","import React from \"react\";\nimport { useTranslate } from \"react-admin\";\nimport { makeStyles } from \"@material-ui/core\";\n\nconst useDividerStyles = makeStyles(theme => ({\n container: {\n display: \"flex\",\n alignItems: \"center\",\n paddingTop: theme.spacing(1),\n paddingBottom: theme.spacing(0.5),\n width: '100%'\n },\n border: {\n borderBottom: `1px solid ${theme.palette.divider}`,\n width: \"100%\"\n },\n content: {\n paddingInline: theme.spacing(2),\n fontWeight: 500,\n fontSize: 14,\n flexGrow: 1,\n whiteSpace: \"nowrap\",\n }\n}));\n\nexport const DividerWithText = ({ label, className }) => {\n const translate = useTranslate();\n const classes = useDividerStyles();\n\n return (\n
\n
\n {label && {translate(label)}}\n
\n
\n );\n};\n","\nimport React from 'react'\nimport { Table, TableBody, makeStyles } from \"@material-ui/core\";\nimport { TextField, useRecordContext } from \"react-admin\";\n\nimport { UpdateGameAlert } from \"../resources/draftgames/DraftGameForm\";\nimport { TeamField } from '../resources/teams/TeamField';\nimport { GroupField } from '../resources/groups/GroupField';\nimport { ScheduleField } from '../resources/schedules/ScheduleField';\nimport { SurfaceField } from '../resources/surfaces/SurfaceField';\nimport Row from './cards/TableRow';\nimport DifferenceField from './fields/DifferenceField';\nimport DateField from './fields/DateField';\nimport TimeRangeField from './fields/TimeRangeField';\n\nconst useStyles = makeStyles(theme => ({\n time: {\n display: 'flex',\n justifyContent: 'space-between',\n alignItems: 'center',\n },\n alert: {\n marginBottom: theme.spacing(2),\n }\n}))\n\nexport const EventChanges = ({ previousEvent, hideAlert = false, indicateChangeRemoval = false, alertLabel }) => {\n const classes = useStyles();\n const event = useRecordContext();\n const showGameAlert = event?.updatedGameId && !hideAlert;\n\n const hideRow = property => event?.[property] == null && previousEvent?.[property] == null;\n\n const handleTimeHasChanged = (previousEvent, currentEvent) => {\n const startTimeChanged = previousEvent?.startTime !== currentEvent?.startTime;\n const endTimeChanged = previousEvent?.endTime !== currentEvent?.endTime;\n return startTimeChanged || endTimeChanged\n };\n\n return <>\n {showGameAlert &&
\n \n
}\n \n \n {!hideRow('date') && \n \n \n \n }\n {!hideRow('startTime') && \n
\n \n \n \n \n \n
\n
}\n {!hideRow('homeTeamId') && \n \n \n \n }\n {!hideRow('awayTeamId') && \n \n \n \n }\n {!hideRow('groupId') && \n \n \n \n }\n {!hideRow('crossScheduleId') && \n \n \n \n }\n {!hideRow('crossGroupId') && \n \n \n \n }\n {\n previousEvent?.location ?\n !hideRow('location') && \n \n \n :\n (!hideRow('arenaId') || event?.startTime) && \n \n \n \n \n }\n {!hideRow('comments') && \n \n \n \n }\n {!hideRow('status') && }\n
\n
\n \n}\n","import React from 'react';\nimport { useFormState } from \"react-final-form\";\nimport { isArray } from 'lodash';\n\nexport const FieldDependency = ({ fieldSource, disabled, children, test = value => value != null }) => {\n const { values } = useFormState();\n\n if (isArray(fieldSource)) {\n if (fieldSource.every(source => test(values[source]))) {\n if (disabled) return React.cloneElement(children, { ...children.props, disabled });\n return null;\n }\n } else if (!test(values[fieldSource])) {\n if (disabled) return React.cloneElement(children, { ...children.props, disabled });\n return null;\n }\n\n return children;\n}\n","import React from \"react\"\nimport { Tooltip, Typography } from \"@material-ui/core\"\nimport { InfoOutlined } from \"@material-ui/icons\"\nimport { makeStyles } from \"@material-ui/styles\";\n\nconst useStyles = makeStyles((theme) => ({\n tooltip: {\n maxWidth: props => props.width,\n },\n}));\n\nexport const InformationTooltip = ({ text, fontSize = 'small', placement, width }) => {\n const classes = useStyles({ width });\n\n return {text}} placement={placement} classes={{ tooltip: classes.tooltip }}>\n \n \n}\n","import React, { Component, useState } from 'react';\nimport { useTranslate } from 'react-admin';\nimport { Dialog } from '@material-ui/core'\nimport { Alert, AlertTitle } from '@material-ui/lab'\nimport { SyncProblem } from '@material-ui/icons';\n\nconst LazyBoundaryAlert = props => {\n const translate = useTranslate();\n return }>\n {translate('ra.page.error')}\n {translate('ra.message.version_error')}\n \n}\n\nconst LazyBoundaryDialog = props => {\n const [ open, setOpen ] = useState(true);\n const handleClose = () => setOpen(false);\n return \n \n \n}\n\nexport class LazyBoundary extends Component {\n state = { error: false };\n\n static getDerivedStateFromError(error) {\n // eslint-disable-next-line no-console\n console.error('error', error);\n return {\n error,\n };\n }\n\n render() {\n const { error } = this.state;\n if (!error) return this.props.children;\n if (error.name !== 'ChunkLoadError') throw error;\n if (this.props.dialog) return \n return \n }\n}\n","import React, { Suspense } from 'react';\nimport { Dialog, DialogContent, DialogContentText, DialogTitle, LinearProgress } from '@material-ui/core';\nimport { useTranslate } from 'react-admin';\n\nimport { LazyBoundary } from './LazyBoundary';\n\nconst LazyFallbackDialog = () => {\n const translate = useTranslate();\n return \n {translate('ra.page.loading')}\n \n \n \n \n \n \n}\n\nexport const LazyDialog = ({ children }) => {\n return }>\n \n {children}\n \n \n}\n","import React from 'react';\nimport { CircularProgress } from '@material-ui/core';\nimport { Alert as MuiAlert } from '@material-ui/lab';\n\nimport { SquareAlert } from './SquareAlert';\n\nexport default ({ children = 'Loading', severity = 'info', square = false }) => {\n const Alert = square ? SquareAlert : MuiAlert;\n\n return }>\n {children}\n \n}\n","import React from \"react\";\nimport { useTranslate } from \"react-admin\";\nimport { Typography } from \"@material-ui/core\";\n\nconst NoResults = ({ addButton, noResultsText }) => {\n const translate = useTranslate();\n if (noResultsText === false) return null;\n\n if (noResultsText && typeof noResultsText === 'string') {\n noResultsText = translate(noResultsText, { _: noResultsText })\n } else {\n noResultsText = translate('ra.navigation.no_results')\n }\n\n return
\n {noResultsText}\n {addButton && React.cloneElement(addButton, { ...addButton.props, size: 'large' })}\n
\n}\n\nexport default NoResults;\n","import { styled } from '@material-ui/core';\nimport { Alert } from '@material-ui/lab';\n\nexport const SquareAlert = styled(Alert)({\n borderRadius: 0,\n})\n","import React, { createContext, useContext, useState, useEffect } from 'react';\nimport { useTranslate } from 'react-admin';\n\nconst noop = () => {}\nexport const WizardContext = createContext({\n validate: null,\n onSubmit: null,\n setValidate: noop,\n setSubmit: noop,\n options: {}\n})\n\nexport const WizardProvider = props => {\n const translate = useTranslate();\n const [ wizard, setWizard ] = useState({});\n const { validate, handleSubmit, options = {} } = wizard;\n\n const onValidate = (...props) => {\n if (typeof validate !== 'function') return {};\n return validate(...props, translate);\n }\n\n const onSubmit = (...props) => {\n if (typeof handleSubmit !== 'function') return;\n return handleSubmit(...props);\n }\n\n return \n}\n\nexport const useWizard = (validate, handleSubmit, options = {}) => {\n const context = useContext(WizardContext);\n useEffect(() => {\n if (!validate && !handleSubmit) return;\n context.setWizard({ validate, handleSubmit, options })\n }, []) // eslint-disable-line react-hooks/exhaustive-deps\n return context;\n}\n\nexport const withWizard = Component => props =>\n \n \n \n","import React, { memo, useContext, useEffect, useMemo, useState } from 'react';\nimport { GET_ONE, useListContext, useLocale, useQuery, useRecordContext, useTranslate } from 'react-admin';\nimport { Typography, Link as MuiLink, LinearProgress, styled } from '@material-ui/core';\nimport { Link } from 'react-router-dom';\nimport moment from 'moment-timezone';\n\nimport { dedupe, dedupeBy } from '@hisports/parsers';\n\nimport { SquareAlert as Alert } from '../SquareAlert';\n\nimport { usePermissions } from '../../http';\nimport { getSurfaceAttributes, getSurfaceName } from '../../resources/surfaces/util';\nimport { CALENDAR_VIEWS, useCalendarView, useShowCondensedView, useSurfaceSizes } from '../../resources/events/EventViewSettings';\n\nimport { SNAP_MINUTES, getEventId, getEventResource } from './DragAndDropGrid';\nimport { useSchedulingContext } from './SchedulingContext';\nimport { getDateRange } from '../fields/DateRangeField';\n\nconst CalendarContext = React.createContext(null);\n\nconst Loader = styled(LinearProgress)({\n position: 'absolute',\n inset: '0 0 auto 0'\n})\n\nconst filterDates = (dates, weekdays = []) => {\n if (!dates?.length) return [];\n if (!weekdays?.length) return dates.sort((a, b) => a.localeCompare(b));\n\n return dates\n .filter(date => weekdays.includes(moment(date).locale('en').format('ddd')))\n .sort((a, b) => a.localeCompare(b));\n}\n\nconst getDatesBeforeEnd = (dates, endDate) => {\n const endDateIndex = dates.findIndex(date => moment(date).isAfter(endDate, 'day'));\n return endDateIndex >= 0 ? dates.slice(0, endDateIndex) : dates;\n}\n\nconst getMonthDates = (startDate, timezone) => {\n const dates = [];\n const date = moment.tz(startDate, timezone);\n const calendarEnd = moment.tz(startDate, timezone).endOf('week').endOf('month').endOf('week').endOf('day')\n\n do {\n dates.push(date.format('YYYY-MM-DD'))\n date.add(1, 'day');\n } while (date.isBefore(calendarEnd));\n\n return dates;\n}\n\nconst getDays = (filterValues, timezone = moment.tz.guess()) => {\n if (!filterValues?.startTime) return {\n start: moment().tz(timezone).startOf('week').format('YYYY-MM-DD'),\n days: 7,\n }\n\n const start = moment.utc(filterValues.startTime);\n if (!filterValues.endTime) return {\n start: start.format('YYYY-MM-DD'),\n days: 1,\n }\n\n const end = moment.utc(filterValues.endTime);\n return {\n start: start.format('YYYY-MM-DD'),\n days: end.diff(start, 'days') + 1,\n type: CALENDAR_VIEWS.MONTH,\n }\n}\n\nconst getTimezones = (office, surfaces = [], record) => {\n const timezones = [\n record?.timezone,\n office?.timezone,\n ...surfaces.filter(s => !['TBA', 'NDA'].includes(s?.alias)).map(s => s.timezone),\n moment.tz.guess(),\n ].filter(Boolean);\n\n return dedupe(timezones);\n}\n\nconst getAllScheduleDates = (schedule, filterStartDate) => {\n if (!schedule?.startDate || !schedule?.endDate) return [];\n const start = moment(filterStartDate || schedule?.startDate);\n const end = moment(schedule?.endDate);\n const allDates = [];\n do {\n allDates.push(start.format('YYYY-MM-DD'))\n start.add(1, 'day');\n } while (start.isSameOrBefore(end));\n return allDates;\n}\n\nconst hasOfficeAccess = (permissions, officeId) => permissions.some(p => p.roleType === 'System' || p.officeIds?.includes(officeId));\n\nconst useOffice = (officeId, hasAccess = true) => useQuery({\n type: GET_ONE,\n resource: 'offices',\n payload: {\n id: officeId,\n }\n}, {\n enabled: officeId != null && hasAccess,\n})\n\nexport const useCalendarContext = () => useContext(CalendarContext) || {};\n\nexport const CalendarProvider = memo(({\n includeVenue,\n popoverActions,\n hideArena,\n disableAuth = false,\n maxColumns: defaultMaxColumns = 5,\n initialStart,\n strictView,\n ...props\n}) => {\n const { filterValues } = useListContext();\n const [ view, setView ] = useCalendarView();\n const [ surfaceSizes ] = useSurfaceSizes()\n const { selectedGame, availability, gameLength, loading, schedule, scheduleTeams, dateFilter, setDateFilter } = useSchedulingContext() || {};\n const locale = useLocale();\n const translate = useTranslate()\n const record = useRecordContext()\n const permissions = usePermissions();\n\n const officeId = schedule?.officeId || record?.officeId;\n const { data: scheduleOffice } = useOffice(officeId, hasOfficeAccess(permissions, officeId));\n const [ showCondensedView ] = useShowCondensedView();\n\n const [ colOffset, setColOffset ] = useState(0);\n const [ navigateToDate, setNavigateToDate ] = useState(null);\n\n const maxColumns = useMemo(() => {\n if (view === CALENDAR_VIEWS.SEASON) return 7;\n return defaultMaxColumns;\n }, [defaultMaxColumns, view])\n\n const filteredSurfaces = useMemo(() => (availability?.surfaces || []).filter(surface => {\n if (!surfaceSizes?.length) return true;\n return surfaceSizes.includes(surface.size)\n }), [availability, surfaceSizes])\n\n const timezones = useMemo(() => {\n if (view === CALENDAR_VIEWS.MONTH) return [];\n return getTimezones(scheduleOffice, filteredSurfaces, record);\n }, [ filteredSurfaces, record, scheduleOffice, view ])\n\n const timezone = useMemo(() => {\n if (view !== CALENDAR_VIEWS.MONTH && timezones?.length) {\n return timezones[0];\n } else {\n return moment.tz.guess()\n }\n }, [ timezones, view ])\n\n useEffect(() => {\n // on mount\n if (strictView) {\n return setView(strictView)\n }\n\n if (selectedGame) return;\n setView(CALENDAR_VIEWS.WEEK)\n }, []) // eslint-disable-line react-hooks/exhaustive-deps\n\n useEffect(() => {\n if (!selectedGame || strictView || view === CALENDAR_VIEWS.SEASON) return;\n if (!selectedGame.date) {\n setView(CALENDAR_VIEWS.MONTH)\n } else {\n setView(CALENDAR_VIEWS.DAY)\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [strictView, selectedGame, setView])\n\n useEffect(() => {\n if (!selectedGame) return;\n if (filteredSurfaces.length && selectedGame?.arenaId) {\n const index = filteredSurfaces?.findIndex(surface => surface.id === selectedGame.arenaId)\n if (index < 0) return\n const offset = index + 1 - maxColumns < 0 ? 0 : index + 1 - maxColumns\n setColOffset(offset)\n } else {\n setColOffset(0);\n }\n }, [ filteredSurfaces, maxColumns, selectedGame ])\n\n const columns = useMemo(() => {\n const getAlert = (values) => {\n if (view === CALENDAR_VIEWS.SEASON) {\n if (loading) return \n if (!values?.length) return \n {translate('components.calendar.messages.no_schedule_teams')}\n \n\n return null\n }\n\n\n if (selectedGame == null) return <>\n \n {translate('components.calendar.messages.select_game')}\n \n {loading && }\n \n\n if (selectedGame.date == null) return <>\n \n {translate('components.calendar.messages.schedule_game')}\n \n {loading && }\n \n\n if (loading) return \n\n if (!availability?.surfaces?.length && view !== CALENDAR_VIEWS.MONTH) return \n {translate('components.calendar.messages.no_home_surface')}\n \n\n if (!values.length) return \n {translate('components.calendar.messages.no_result')}\n \n\n return null;\n }\n\n if (view === CALENDAR_VIEWS.SEASON) {\n const header = getDateRange(dateFilter?.startDate, dateFilter?.endDate, locale, timezone);\n const slots = availability?.slots || [];\n const games = availability?.games || [];\n const practices = availability?.practices || [];\n const activities = availability?.activities || [];\n const availabilities = availability?.availabilities || [];\n\n const eventDates = dedupe([...slots, ...games, ...practices, ...activities, ...availabilities].map(event => event.date));\n const dates = filterDates(eventDates, dateFilter?.weekdays);\n\n const scheduleDates = getAllScheduleDates(schedule, dateFilter?.startDate);\n const allDates = filterDates(scheduleDates, dateFilter?.weekdays);\n\n const selectedDates = showCondensedView ? dates : allDates;\n\n const teams = dedupeBy('id', (scheduleTeams || []).map(scheduleTeam => scheduleTeam.team));\n let orderedTeams = teams;\n\n if (selectedGame) {\n const selectedGameTeams = [selectedGame?.homeTeamId, selectedGame?.awayTeamId];\n orderedTeams = teams.filter(team => selectedGameTeams.includes(team?.id))\n .concat(teams.filter(team => !selectedGameTeams.includes(team?.id)));\n }\n\n return {\n type: CALENDAR_VIEWS.SEASON,\n header: header,\n disabled: false,\n alert: getAlert(teams),\n columns: orderedTeams.slice(colOffset, colOffset + maxColumns),\n totalColumns: teams.length,\n rows: getDatesBeforeEnd(dates, dateFilter?.endDate),\n allrows: getDatesBeforeEnd(allDates, dateFilter?.endDate),\n filterEvents: events => [],\n toEventDetails: (item, eventResource, eventId, gridDateIndex) => {\n const resource = eventResource || getEventResource(item)\n const id = eventId || getEventId(item);\n const date = selectedDates?.[gridDateIndex];\n\n return {\n id,\n resource,\n date,\n startTime: null,\n endTime: null,\n };\n },\n onNext: () => {\n setColOffset(colOffset + 1);\n },\n onBack: () => {\n setColOffset(colOffset - 1);\n }\n };\n }\n\n if (view === CALENDAR_VIEWS.MONTH) {\n const { start, type } = getDays(filterValues);\n const header = moment(start).endOf('week').format('MMMM YYYY');\n\n const dates = type === CALENDAR_VIEWS.MONTH ? getMonthDates(start, timezone) : [];\n\n const rows = [];\n const totalWeeks = dates.length / 7;\n for (let i = 0; i < totalWeeks; i++) {\n const daysOfWeek = dates.slice(i * 7, (i + 1) * 7);\n rows.push(daysOfWeek);\n }\n const values = dates.slice(0, 7).map(date => moment.tz(date, timezone).format('ddd'));\n\n return {\n type: CALENDAR_VIEWS.MONTH,\n header,\n disabled: false,\n alert: getAlert(values),\n columns: values,\n totalColumns: 7,\n rows,\n dates,\n start: selectedGame?.date,\n toEventDetails: (item, eventResource, eventId) => {\n const { i: itemId, x: itemColumn, y: itemRow, h: itemHeight } = item;\n const resource = eventResource || getEventResource(item)\n const id = eventId || getEventId(item);\n const date = rows?.[itemRow]?.[itemColumn];\n\n return {\n id,\n resource,\n date,\n startTime: null,\n endTime: null,\n };\n },\n filterEvents: events => {\n if (!selectedGame) return [];\n const teamIds = [selectedGame.homeTeamId, selectedGame.awayTeamId].filter(Boolean);\n if (!teamIds.length) return [];\n return events.filter(event => {\n if (event.homeTeamId && teamIds.includes(event.homeTeamId)) return true;\n if (event.awayTeamId && teamIds.includes(event.awayTeamId)) return true;\n if (event.teamIds && teamIds.some(teamId => teamIds.includes(teamId))) return true;\n return false\n })\n },\n getColumnKey: () => {},\n getColumnIndex: () => {},\n getColumnHeading: () => \"Heading\",\n onNext: () => {},\n onBack: () => {}\n };\n }\n\n if (view === CALENDAR_VIEWS.DAY) {\n const hasDate = selectedGame?.date != null;\n const values = hasDate ? filteredSurfaces.slice(colOffset, colOffset + maxColumns) : []\n const header = hasDate ? moment.utc(selectedGame?.date).format('LL') : ' - ';\n const effectiveIds = dedupe(filteredSurfaces?.map(surface => surface.effectiveSurfaceIds).flat()) || [];\n\n return {\n type: CALENDAR_VIEWS.DAY,\n header,\n disabled: !hasDate || !values.length,\n alert: getAlert(values),\n columns: values,\n totalColumns: filteredSurfaces.length,\n start: selectedGame?.date || initialStart,\n getColumnKey: surface => surface.id,\n getColumnIndex: event => values.findIndex(surface => (event.positionArenaId || event.arenaId) == surface.id || (event.targetType === 'Surface' && (event.positionArenaId || event.targetId) == surface.id)),\n getColumnHeading: surface => {\n const attributes = getSurfaceAttributes(surface, translate);\n return <>\n \n {getSurfaceName(surface)}\n \n {attributes}\n \n },\n filterEvents: events => {\n const date = selectedGame?.date && moment(selectedGame.date);\n const dateEvents = events.filter(event => {\n if ((event.targetType === 'Surface' ? !event.targetId : !event.arenaId) || !event.startTime || !event.endTime) return false;\n if (date && !date.isSame(event.date, 'day')) return false;\n return !event.targetType ? effectiveIds.includes(event.arenaId) : event.targetType === 'Surface' && effectiveIds.includes(event.targetId)\n });\n return values.map(surface => {\n return dateEvents.filter(event => !event.targetType ? (event.positionArenaId || event.arenaId) === surface.id : event.targetType === 'Surface' && (event.positionArenaId || event.targetId) === surface.id);\n });\n },\n pushSplitSurfaceEvents: events => {\n const newEvents = []\n\n events.forEach(event => {\n const eventSurface = (availability?.surfaces || []).find(({ id }) => id === (event.arenaId || event.targetId));\n if (!eventSurface?.effectiveSurfaceIds) return;\n const newEventSurfaces = eventSurface.effectiveSurfaceIds.filter(surfaceId => surfaceId !== (event.arenaId || event.targetId) && filteredSurfaces.find(({ id }) => id === surfaceId));\n newEventSurfaces.forEach(surfaceId => {\n newEvents.push({ ...event, positionArenaId: surfaceId, isEditable: false, isSplitSurfaceEvent: true });\n })\n });\n\n return [...events, ...newEvents];\n },\n toEventDetails: (item, eventResource, eventId) => {\n const { i: itemId, x: itemColumn, y: itemRow, h: itemHeight } = item;\n const resource = eventResource || getEventResource(item)\n const id = eventId || getEventId(item);\n\n const date = selectedGame?.date;\n const startOfDay = { hours: 6, minutes: 0, seconds: 0 };\n const startTime = moment.tz(date, timezone).set(startOfDay).add(itemRow * SNAP_MINUTES, 'minutes').toISOString();\n // for draft games, we reset endTime based on the gameLength because the current endTime might be updated by a timeSlot's endTime\n const endTime = resource === 'games' ?\n moment.tz(date, timezone).set(startOfDay).add((itemRow + itemHeight) * SNAP_MINUTES, 'minutes').toISOString() :\n moment.tz(startTime, timezone).add(gameLength || 60, 'minutes').toISOString();\n const arena = values?.[itemColumn];\n\n return {\n id,\n resource,\n date,\n startTime,\n endTime,\n arenaId: arena?.id,\n };\n },\n onNext: () => {\n setColOffset(colOffset + 1);\n },\n onBack: () => {\n setColOffset(colOffset - 1);\n }\n };\n }\n\n const { start, days } = getDays(filterValues);\n const startDate = moment(start);\n const values = days > 0 ? Array(days).fill(null).map((_, day) => moment(startDate).add(day, 'days')) : []\n const nextMonth = values.find(date => date.format('M') !== startDate.format('M'));\n const header = nextMonth ? `${startDate.format('MMMM')} - ${nextMonth.format('MMMM YYYY')}` : startDate.format('MMMM YYYY');\n const dates = values.map(date => date.format('YYYY-MM-DD'))\n\n return {\n type: CALENDAR_VIEWS.WEEK,\n header,\n disabled: false,\n alert: null,\n columns: values,\n totalColumns: values.length,\n dates,\n start,\n getColumnKey: date => date.toISOString(),\n getColumnIndex: (event) => {\n const { startTime, layout } = event;\n const date = moment.tz(layout?.startTime || startTime, timezone);\n return date.diff(startDate, 'days');\n },\n getColumnHeading: date => <>\n {date.format('ddd')}\n {date.format('D')}\n ,\n filterEvents: events => {\n return events.filter(event => event.date && event.startTime && event.endTime);\n },\n pushSplitSurfaceEvents: events => events,\n toEventDetails: (item, eventResource, eventId) => {\n const { i: itemId, x: itemColumn, y: itemRow, h: itemHeight } = item;\n const resource = eventResource || getEventResource(item);\n const id = eventId || getEventId(item);\n\n const date = moment.tz(filterValues.startTime, timezone).add('days', itemColumn).format('YYYY-MM-DD');\n const startOfDay = { hours: 6, minutes: 0, seconds: 0 };\n const startTime = moment.tz(date, timezone).set(startOfDay).add(itemRow * SNAP_MINUTES, 'minutes').toISOString();\n const endTime = moment.tz(date, timezone).set(startOfDay).add((itemRow + itemHeight) * SNAP_MINUTES, 'minutes').toISOString();\n\n return {\n id,\n resource,\n date,\n startTime,\n endTime,\n };\n }\n };\n }, [view, filterValues, selectedGame, translate, locale, loading, availability?.surfaces, availability?.slots, availability?.games, availability?.practices, availability?.activities, availability?.availabilities, scheduleTeams, colOffset, maxColumns, schedule, timezone, filteredSurfaces, initialStart, gameLength, dateFilter, showCondensedView])\n\n useEffect(() => {\n // handle dateFilter for month view\n if (columns?.type !== CALENDAR_VIEWS.MONTH || !columns?.dates?.length || !timezone) return;\n\n const startDate = moment.tz(columns.dates[0], timezone).startOf('day').toISOString();\n const endDate = moment.tz(columns.dates.pop(), timezone).endOf('day').toISOString();\n\n if (startDate != dateFilter?.startDate || endDate != dateFilter?.endDate) {\n setDateFilter({\n startDate,\n endDate,\n type: CALENDAR_VIEWS.MONTH,\n });\n }\n }, [columns.dates, columns?.type, dateFilter?.endDate, dateFilter?.startDate, setDateFilter, timezone])\n\n useEffect(() => {\n // init dateFilter for season view\n if (columns?.type !== CALENDAR_VIEWS.SEASON || dateFilter?.type === CALENDAR_VIEWS.SEASON || !schedule?.startDate) return;\n\n const scheduleStartDate = moment.utc(schedule.startDate);\n const scheduleEndDate = moment.utc(schedule.endDate);\n const oneMonthFromStartDate = scheduleStartDate.clone().add(1, 'month');\n\n return setDateFilter({\n startDate: scheduleStartDate.format('YYYY-MM-DD'),\n endDate: oneMonthFromStartDate.isAfter(scheduleEndDate, 'day') ? scheduleEndDate?.format('YYYY-MM-DD') : oneMonthFromStartDate.format('YYYY-MM-DD'),\n type: CALENDAR_VIEWS.SEASON,\n });\n }, [columns?.type, dateFilter?.type, schedule?.endDate, schedule?.startDate, setDateFilter])\n\n const value = useMemo(() => ({\n ...columns,\n colOffset,\n maxColumns,\n includeVenue,\n popoverActions,\n hideArena,\n disableAuth,\n initialStart,\n timezone,\n timezones,\n navigateToDate,\n setNavigateToDate,\n }), [ columns, colOffset, maxColumns, includeVenue, popoverActions, hideArena, disableAuth, initialStart, timezone, timezones, navigateToDate ]);\n\n return \n})\n","import React, { Children, Fragment, useEffect, useMemo, useRef, useState } from 'react';\nimport { RecordContextProvider, TextField, useDataProvider, useGetOne, useListContext, useNotify, useRecordContext, useResourceContext, useTranslate } from 'react-admin';\nimport { Form, useForm, useFormState } from 'react-final-form';\nimport createCalculator from 'final-form-calculate';\nimport { Button, ButtonGroup, Dialog, DialogActions, DialogContent, DialogTitle, Grid, makeStyles, Table, TableBody } from '@material-ui/core';\nimport { Alert } from '@material-ui/lab';\nimport moment from 'moment-timezone';\nimport { isEqual } from 'lodash';\nimport GridLayout from 'react-grid-layout';\nimport 'react-grid-layout/css/styles.css';\nimport 'react-resizable/css/styles.css';\n\nimport { createRange } from '@hisports/common';\n\nimport { CALENDAR_VIEWS, useShowCondensedView } from '../../resources/events/EventViewSettings';\nimport { SurfaceField } from '../../resources/surfaces/SurfaceField';\nimport { GameAvailabilityContextProvider } from '../../resources/games/GameAvailabilityContext';\nimport { GameAvailabilityInfo, useAvailabilities as useGameAvailabilities } from '../../resources/games/GameAvailabilityInfo';\nimport { hasConflicts, validateStatus } from '../../resources/games/GameForm';\nimport { PracticeAvailabilityInfo, useAvailabilities as usePracticeAvailabilities } from '../../resources/practices/PracticeAvailabilityInfo';\nimport { PracticeAvailabilityContextProvider } from '../../resources/practices/PracticeAvailabilityContext';\nimport { UpdateGameAlert } from '../../resources/draftgames/DraftGameForm';\n\nimport Row from '../cards/TableRow';\nimport { isAuthorized } from '../Authorize';\nimport TimeRangeField from '../fields/TimeRangeField';\nimport DateField from '../fields/DateField';\nimport DifferenceField from '../fields/DifferenceField';\nimport { GameStatusEnumInput } from '../inputs/EnumInputs';\n\nimport { useCalendarContext } from './CalendarContext';\nimport { useDragContext } from './DragContext';\nimport { useSchedulingContext } from './SchedulingContext';\nimport { isDraft, isGame, isPractice } from './EventDetails';\nimport { SurfaceInput } from \"../../resources/surfaces/SurfaceInput\";\nimport { useLimitDateChange } from '../../resources/events/EventGroupedGrid';\n\nexport const SNAP_MINUTES = 15;\n\nconst useStyles = makeStyles(theme => ({\n availabilityInfo: {\n padding: theme.spacing(2, 0),\n },\n time: {\n display: 'flex',\n justifyContent: 'space-between',\n alignItems: 'center',\n },\n increment: {\n marginLeft: theme.spacing(1),\n },\n alert: {\n marginBottom: theme.spacing(1),\n }\n}))\n\nconst getRowHeight = (view, cellSize) => {\n if ([CALENDAR_VIEWS.SEASON, CALENDAR_VIEWS.MONTH].includes(view)) return cellSize.height;\n return (cellSize.height / 60) * SNAP_MINUTES\n}\n\nconst getMaxRows = (view, rows, offsetHours) => {\n if (view === CALENDAR_VIEWS.SEASON) return 1;\n if (view === CALENDAR_VIEWS.MONTH) return rows?.length;\n return (24 - offsetHours) * (60 / SNAP_MINUTES) // total rows in a calendar day\n}\n\nconst getGridWidth = (view, cellSize, columns) => {\n if (view === CALENDAR_VIEWS.SEASON) return cellSize.width;\n return cellSize.width * columns.length;\n}\n\nconst getCols = (view, columns) => {\n if (view === CALENDAR_VIEWS.SEASON) return 1;\n return columns.length\n}\n\nconst getGridDimensions = (view, cellSize, rows, columns, offsetHours) => ({\n rowHeight: getRowHeight(view, cellSize),\n maxRows: getMaxRows(view, rows, offsetHours),\n gridWidth: getGridWidth(view, cellSize, columns),\n cols: getCols(view, columns)\n})\n\nconst gridStyles = (top, left, width, height, dragging) => ({\n position: 'absolute',\n top,\n left,\n width,\n height,\n zIndex: !dragging ? null : 2147483647 // max\n})\n\nconst getDndItem = (layout, event, offsetHours) => {\n if (!layout || !event) return;\n const { duration, colIndex, hours, minutes, offset } = layout;\n let itemId = `${event?.resource}-${event.id}`;\n if (event?.positionArenaId) {\n itemId += `-${event.positionArenaId}`;\n }\n\n const isEditable = event?.isEditable !== false;\n\n return {\n // these are styles that overrides the default GridLayout's child styling\n styleOverrides: {\n left: offset,\n zIndexProps: { event, hours, minutes }, // we send zindexProps because we dont know the state of the element (default, hover, dragged)\n },\n key: itemId,\n grid: {\n i: itemId,\n x: colIndex,\n y: ((hours - offsetHours) * (60 / SNAP_MINUTES)) + Math.floor(minutes / SNAP_MINUTES),\n w: 1,\n h: duration / SNAP_MINUTES,\n isDraggable: isEditable && !event.multiday,\n }\n }\n}\n\nconst sanitizeItemId = (itemId) => {\n // small bug in react-grid-layout that appends \"/.0\" to the item id\n if (!itemId) return;\n if (!itemId.includes('/')) return itemId;\n return itemId.substring(0, itemId.indexOf('/'))\n}\n\nexport const getEventId = item => {\n if (!item?.i) return;\n const sanitizedId = sanitizeItemId(item?.i);\n const id = sanitizedId.substring((item.i.indexOf('-') + 1));\n return isNaN(id) ? id : Number(id)\n}\n\nexport const getEventResource = item => {\n if (!item?.i) return;\n const sanitizedId = sanitizeItemId(item?.i);\n return sanitizedId.substring(0, sanitizedId.indexOf('-'))\n}\n\nexport const validateEvent = (event, schedule, translate) => {\n let error = false;\n\n const { startDate, endDate } = schedule || {};\n if ((isGame(event) || isDraft(event)) && event.date && startDate && moment.utc(startDate).isAfter(event.date)) {\n error = translate('resources.schedules.notifications.before_schedule_date', { startDate: moment.utc(startDate).format('MMM D') })\n } else if (event.date && endDate && moment.utc(endDate).add(1, 'day').isBefore(event.date)) {\n error = translate('resources.schedules.notifications.after_schedule_date', { endDate: moment.utc(endDate).format('MMM D') })\n }\n\n return error\n}\n\nconst validate = values => {\n const errors = {};\n\n if (!values.status) errors.status = 'ra.validation.required';\n if (values.startTime && !values.arenaId) errors.arenaId = 'ra.validation.required';\n\n return errors;\n}\n\nconst AvailabilityInfo = props => {\n const { draftId } = useSchedulingContext();\n const record = useRecordContext()\n const classes = useStyles();\n\n return \n {isPractice(record) ? : }\n \n}\n\nconst TimeIncrementInput = props => {\n const classes = useStyles();\n const form = useForm();\n\n const increment = (amount, unitOfTime = 'minutes') => {\n const { values = {} } = form.getState()\n const { startTime, endTime, timezone } = values\n\n if (!timezone || !amount) return;\n\n form.batch(() => {\n if (startTime) {\n const newStartTime = moment.tz(startTime, timezone).add(amount, unitOfTime)\n if (newStartTime.isValid) {\n form.change('startTime', newStartTime.toISOString());\n }\n }\n if (endTime) {\n const newEndTime = moment.tz(endTime, timezone).add(amount, unitOfTime)\n if (newEndTime.isValid) {\n form.change('endTime', newEndTime.toISOString());\n }\n }\n })\n }\n\n return \n \n \n \n}\n\nconst GameStatusInput = props => {\n const { blur, change } = useForm()\n const { values: record } = useFormState();\n const availabilities = useGameAvailabilities(record);\n const { deferDraftConflict } = useSchedulingContext();\n\n const conflicted = hasConflicts(availabilities, record.status, ['Conflict', 'Validation'])\n useEffect(() => {\n blur('status')\n }, [ conflicted, record.status, blur, change, availabilities ])\n\n const helperText = conflicted && !deferDraftConflict ? 'resources.games.helpers.conflicts' : '';\n return \n}\n\nconst PracticeStatusInput = props => {\n const { blur, change } = useForm()\n const { values: practice } = useFormState();\n const availabilities = usePracticeAvailabilities(practice);\n\n const conflicted = hasConflicts(availabilities, practice.status, ['Conflict']);\n\n useEffect(() => {\n blur('status')\n }, [ conflicted, practice.status, blur, change, availabilities ])\n\n const helperText = conflicted ? 'resources.practices.helpers.conflicts' : '';\n return \n}\n\nconst StatusInput = props => {\n const { values: record } = useFormState();\n\n if (isPractice(record)) {\n return \n }\n\n return \n}\n\nconst RecordForm = ({ children, ...props }) =>\n
\n {props => \n \n {children}\n \n
}\n \n\nexport const EventChangesForm = ({ previousEvent, handleCancel, handleConfirm, canEditEvent, ...props }) => {\n const record = useRecordContext();\n const { availability } = useSchedulingContext();\n const { type } = useCalendarContext();\n\n\n // to expand to a timeslot when a game is dropped on top\n const overlappingTimeSlot = useMemo(() => {\n if (type !== CALENDAR_VIEWS.DAY) return;\n return (availability?.slots || []).find(slot => {\n if (slot.arenaId !== record.arenaId) return false;\n\n const recordRange = createRange(moment.tz(record.startTime, record.timezone), moment.tz(record.endTime, record.timezone));\n const slotRange = createRange(moment.tz(slot.startTime, slot.timezone), moment.tz(slot.endTime, slot.timezone));\n return slotRange.overlaps(recordRange)\n });\n }, [availability?.slots, record.arenaId, record.endTime, record.startTime, record.timezone, type])\n\n const updatedRecord = {\n ...record,\n startTime: overlappingTimeSlot?.startTime || record.startTime,\n endTime: overlappingTimeSlot?.endTime || record.endTime,\n arenaId: overlappingTimeSlot?.arenaId || record.arenaId,\n }\n\n const decorators = useRef([createCalculator({\n field: 'startTime',\n updates: {\n date: (startTime, values) => {\n if (!startTime || !values.timezone) return values?.date;\n return moment.tz(startTime, values.timezone).format('YYYY-MM-DD');\n }\n }\n }, {\n field: 'arenaId',\n updates: {\n timezone: (arenaId, values, prevValues) => {\n const surface = availability?.surfaces?.find(surface => surface.id === arenaId);\n if (['TBA', 'NDA'].includes(surface?.alias)) {\n return values?.timezone || prevValues?.timezone;\n }\n return surface?.timezone;\n }\n }\n })])\n\n return \n \n \n}\n\nconst EventChangesFormBody = ({ previousEvent, handleCancel, overlappingTimeSlot, canEditEvent, ...props }) => {\n const record = useRecordContext();\n const classes = useStyles();\n const translate = useTranslate();\n const { type } = useCalendarContext();\n\n const handleTimeHasChanged = (previousEvent, currentEvent) => {\n const startTimeChanged = previousEvent?.startTime !== currentEvent?.startTime;\n const endTimeChanged = previousEvent?.endTime !== currentEvent?.endTime;\n return startTimeChanged || endTimeChanged\n };\n\n const hideRow = property => record?.[property] == null && previousEvent?.[property] == null;\n\n const canShowTimeIncrement = [CALENDAR_VIEWS.DAY, CALENDAR_VIEWS.WEEK].includes(type) && !overlappingTimeSlot && (!!record?.startTime || !!record?.endTime);\n\n return <>\n {record?.updatedGameId &&
\n \n
}\n \n \n {!hideRow('date') && \n \n \n \n }\n {!hideRow('startTime') && \n
\n \n \n \n \n \n {canShowTimeIncrement && }\n
\n
}\n {\n previousEvent?.location ?\n !hideRow('location') && \n \n \n :\n (!hideRow('arenaId') || record?.startTime) && \n {record?.arenaId\n ? \n \n \n : record?.startTime ? : null\n }\n \n }\n {!hideRow('status') && }\n
\n
\n \n {canEditEvent && \n \n \n }\n \n}\n\nconst ConfirmDialog = ({ open = false, handleCancel, handleConfirm, previousEvent }) => {\n const { disableAuth } = useCalendarContext();\n const { resource: schedulingResource } = useSchedulingContext();\n const { draggingEvent } = useDragContext();\n const translate = useTranslate();\n const resource = useResourceContext();\n const disableDateChange = useLimitDateChange(draggingEvent);\n\n const eventResource = draggingEvent?.resource || schedulingResource || resource;\n const { data: event, loaded } = useGetOne(eventResource, draggingEvent?.id, {\n enabled: !disableAuth && open,\n });\n\n const hasDateChanged = previousEvent?.date !== draggingEvent?.date;\n const cantChangeDate = disableDateChange && hasDateChanged;\n\n if (!loaded && !disableAuth) return null;\n\n const canEditEvent = event?.id ? !cantChangeDate && isAuthorized(event, eventResource, 'edit') : !cantChangeDate;\n\n const AvailabilityContextProvider = isPractice(event) ? PracticeAvailabilityContextProvider : GameAvailabilityContextProvider;\n\n return \n {translate('resources.games.labels.confirm_changes')}\n \n {!canEditEvent && \n {translate(`resources.games.alerts.${cantChangeDate ? 'no_change_date_permission' : 'no_edit_permission'}`)}\n }\n \n \n \n \n \n \n \n}\n\nexport const SeasonDndGrid = ({ cellSize, offset, rowHeights, ...props }) => {\n const { rows, allrows } = useCalendarContext()\n const [ showCondensedView ] = useShowCondensedView();\n\n const selectedRows = showCondensedView ? rows : allrows;\n\n // dynamically set cellSize/offset to create a dnd grid per row\n const sizes = useMemo(() => {\n if (!selectedRows?.length) return;\n\n let totalHeight = 0;\n\n return selectedRows.map((row, i) => {\n const rowHeight = rowHeights?.[i];\n\n if (i === 0) {\n // set initial offset from header\n totalHeight += offset.height\n }\n\n const size = {\n offsetHeight: totalHeight,\n cellHeight: rowHeight,\n }\n totalHeight += rowHeight;\n\n return size;\n })\n }, [offset.height, rowHeights, selectedRows])\n\n if (!selectedRows?.length || !sizes) return null;\n return <>\n {selectedRows.map((row, i) => {\n const size = sizes?.[i];\n return \n })}\n \n}\n\nexport const DragAndDropGrid = ({ children, cellSize, offset, offsetHours, gridDateIndex }) => {\n const notify = useNotify();\n const translate = useTranslate();\n const { data: events } = useListContext();\n const { gameLength, schedule, resource: schedulingResource, setSelectedGame, onSave, disableScheduling, setRefreshAvailability } = useSchedulingContext();\n const { dragging, setDragging, setDraggingEvent, droppingEvent } = useDragContext();\n const { timezone, columns, toEventDetails, type, rows } = useCalendarContext();\n const disableDateChange = useLimitDateChange(droppingEvent);\n const dataProvider = useDataProvider();\n const [ dragPosition, setDragPosition ] = useState({ x: 0, y: 0 });\n const [ initialPosition, setInitialPosition ] = useState({ x: 0, y: 0 });\n const [ showConfirm, setShowConfirm ] = useState(false);\n // Keep a current state of the layout\n const [ gridLayout, setGridLayout ] = useState();\n // Keep the previous layout for undo\n const [ previousLayout, setPreviousLayout ] = useState([]);\n const [ undo, setUndo ] = useState(false);\n const [ previousEvent, setPreviousEvent ] = useState({});\n // To trigger a manual rerender of the grid, 'data-grid' AND 'layout' must be updated simultaneously with matching keys\n // Use the 'setUpdateLayout' with your item changes to update 'layout'\n // https://github.com/react-grid-layout/react-grid-layout/issues/382\n const [ updateLayout, setUpdateLayout ] = useState([])\n\n const resource = useResourceContext();\n const isDroppable = type === CALENDAR_VIEWS.MONTH ? !disableDateChange : true; // disable drop in month view if no permissions\n\n const { rowHeight, maxRows, gridWidth, cols } = getGridDimensions(type, cellSize, rows, columns, offsetHours)\n\n const gridStyle = useMemo(() => {\n return gridStyles(offset?.height, offset?.width, gridWidth, rowHeight * maxRows, dragging);\n }, [ dragging, gridWidth, maxRows, offset, rowHeight ])\n\n useEffect(() => {\n // Update 'layout' when children change (data-grid items)\n if (!gridLayout || showConfirm || type === CALENDAR_VIEWS.MONTH) return;\n\n const oldGridLayout = JSON.parse(JSON.stringify(gridLayout));\n const newGridLayout = JSON.parse(JSON.stringify(gridLayout));\n Children.map(children, (child, index) => {\n const childItem = getDndItem(child, offsetHours, events);\n if (!childItem) return;\n const layoutIndex = newGridLayout.findIndex(item => item.i === childItem.key);\n if (layoutIndex === -1) return;\n\n newGridLayout[layoutIndex] = { ...newGridLayout[layoutIndex], ...childItem.grid };\n });\n\n if ((!isEqual(newGridLayout, oldGridLayout))) {\n setUpdateLayout(newGridLayout)\n }\n }, [ children, gridLayout, offsetHours, showConfirm, events, type ])\n\n useEffect(() => {\n // Once the manual rerender is done, clear the layout\n if (updateLayout.length) {\n setUpdateLayout([]);\n }\n }, [ updateLayout ])\n\n useEffect(() => {\n if (undo) {\n setUndo(false);\n }\n }, [ undo ])\n\n const onLayoutChange = (layout) => {\n layout = layout.map(item => ({ ...item, i: sanitizeItemId(item.i) }));\n setGridLayout(layout);\n }\n\n const onDragStart = (layout, oldItem, newItem) => {\n setInitialPosition({ x: oldItem.x, y: oldItem.y });\n\n const eventId = getEventId(oldItem);\n const oldEvent = events?.[eventId] || droppingEvent || {};\n setPreviousEvent(oldEvent);\n\n layout = layout.map(item => ({ ...item, i: sanitizeItemId(item.i) }));\n setPreviousLayout(layout);\n }\n\n const onDragStop = async (layout, oldItem, newItem) => {\n if (dragging) {\n // wait time to prevent popover from triggering\n setTimeout(() => setDragging(false), 100);\n }\n\n if (initialPosition.x === newItem.x && initialPosition.y === newItem.y) return;\n\n const newEvent = toEventDetails(newItem);\n const event = events?.[newEvent?.id];\n\n if (!event) return;\n\n setDraggingEvent({ ...event, ...newEvent });\n setShowConfirm(true);\n }\n\n const onDrag = (layout, oldItem, newItem) => {\n if (!dragging) {\n setDragging(true);\n }\n\n if (newItem.x !== dragPosition.x || newItem.y !== dragPosition.y) {\n setDragPosition({ x: newItem.x, y: newItem.y });\n const eventDetails = toEventDetails(newItem);\n setDraggingEvent(eventDetails);\n }\n }\n\n const saveEvent = async (event) => {\n const { resource, id, date, startTime, endTime, status } = event;\n\n if (onSave) {\n await onSave(event);\n } else {\n await dataProvider.update(resource, { id, data: { date, startTime, endTime, status } })\n }\n }\n\n const onDrop = (layout, layoutItem) => {\n if (!layoutItem.i) return\n if (dragging) {\n // wait time to prevent popover from triggering\n setTimeout(() => setDragging(false), 100);\n }\n\n const eventResource = droppingEvent?.resource || schedulingResource || resource;\n const { date, startTime, endTime, arenaId } = toEventDetails(layoutItem, eventResource, droppingEvent?.id, gridDateIndex);\n const event = { ...droppingEvent, date, startTime, endTime, resource: eventResource, timezone };\n\n if (arenaId) {\n event.arenaId = arenaId;\n }\n\n layout = layout.map(item => ({ ...item, i: sanitizeItemId(item.i) }));\n\n const error = validateEvent(event, schedule, translate);\n if (error) {\n return notify(error, 'error');\n }\n\n setUpdateLayout(layout);\n setDraggingEvent(event);\n setShowConfirm(true);\n }\n\n const handleConfirm = async (record) => {\n await saveEvent(record);\n if (setSelectedGame && !disableScheduling) {\n setSelectedGame(record);\n }\n if (setRefreshAvailability && type === CALENDAR_VIEWS.SEASON) {\n setRefreshAvailability(true)\n }\n\n setShowConfirm(false);\n setDraggingEvent({});\n }\n\n const handleCancel = async () => {\n setUndo(true);\n setShowConfirm(false);\n setDraggingEvent({});\n }\n\n const droppingItem = {\n i: Object.keys(droppingEvent).length !== 0 ? `${droppingEvent?.resource || schedulingResource || resource}-${droppingEvent.id}` : null,\n w: 1,\n h: [CALENDAR_VIEWS.MONTH, CALENDAR_VIEWS.SEASON].includes(type) ? 1 : (gameLength || 60) / SNAP_MINUTES\n }\n\n return <>\n \n {/* the children needs to be a function so that we can set dnd props to the actual childrens */}\n {typeof children === 'function' && children({ getDndItem, offsetHours })}\n \n \n \n}\n\n\n","import React, { useContext, useMemo, useState } from 'react';\n\nconst DragContext = React.createContext(null);\n\nexport const useDragContext = () => useContext(DragContext) || {};\n\nexport const DragProvider = ({ ...props }) => {\n const [ dragging, setDragging ] = useState(false);\n const [ draggingEvent, setDraggingEvent ] = useState({});\n const [ droppingEvent, setDroppingEvent ] = useState({});\n\n const value = useMemo(() => ({\n dragging,\n setDragging,\n draggingEvent,\n setDraggingEvent,\n droppingEvent,\n setDroppingEvent,\n }), [\n dragging,\n setDragging,\n draggingEvent,\n setDraggingEvent,\n droppingEvent,\n ]);\n\n return \n}\n","import React from 'react';\nimport { useRecordContext, useTranslate } from 'react-admin';\nimport { Box, Tooltip, alpha, makeStyles } from '@material-ui/core'\nimport { CardTravel, Home, StarBorder } from \"@material-ui/icons\";\nimport moment from 'moment-timezone';\n\nimport { SurfaceField } from '../../resources/surfaces/SurfaceField';\nimport { PracticeIcon, ActivityIcon, TimeSlotIcon, DraftIcon, GameIcon } from '../../resources/icons';\nimport { LocationField } from '../../resources/events/EventGrid';\nimport { OfficeField } from '../../resources/offices/OfficeField';\nimport { CategoryField } from '../../resources/categories/CategoryField';\nimport { TeamField } from '../../resources/teams/TeamField';\nimport { useScheduleWithStore } from '../../resources/schedules/useSchedule';\n\nimport { useSchedulingContext } from './SchedulingContext';\nimport { useCalendarContext } from './CalendarContext';\nimport { AvailabilityDetailsPopover, SlotDetailsPopover, ActivityDetailsPopover, PracticeDetailsPopover, GameDetailsPopover } from './EventDetailsPopover';\nimport { isAuthorized } from '../Authorize';\n\nexport const isDraftGameType = type => ['Draft', 'Draft Game'].includes(type)\n\nexport const isDraft = event => ['drafts', 'draftGames'].includes(event?.resource) || isDraftGameType(event?.type) || !!event?.draftId;\n\nexport const isGame = event => event?.resource === 'games' || event?.type === 'Game';\n\nexport const isPractice = event => event?.resource === 'practices' || event?.type === 'Practice';\n\nconst isInactive = status =>\n status && !['Active', 'Rescheduled', 'Rink Changed'].includes(status)\n\nconst getDuration = (start, end) => {\n const diff = moment(end).diff(start, 'minutes');\n\n const minutes = diff % 60\n const hours = Math.floor(diff / 60)\n if (minutes <= 0) return `${hours}h`\n if (hours <= 0) return `${minutes}m`\n return `${hours}h ${minutes}m`\n}\n\nconst useEventStyles = makeStyles(theme => {\n const getBorderWidth = (eventType, isDraft, isSplitSurfaceEvent, isInactive) => {\n if (isDraft || isInactive) return 3;\n if (eventType === 'Slot' && !isSplitSurfaceEvent) return 2;\n return 1;\n }\n\n const getBorderStyle = (eventType, isDraft, isSplitSurfaceEvent) => {\n if (isDraft) return 'dashed';\n if (eventType === 'Slot' && !isSplitSurfaceEvent) return 'dotted';\n return 'solid';\n }\n\n const getBorderColor = (eventType, isSplitSurfaceEvent, isInactive, scheduleType) => {\n if (['Game', 'Practice', 'Activity'].includes(eventType)) {\n if (isInactive) return theme.palette.error[500];\n if (eventType === 'Game') {\n const gameColor = getGameColorBasedOnScheduleType(scheduleType);\n return isSplitSurfaceEvent ? gameColor[700] : gameColor[800];\n }\n if (eventType === 'Practice') return isSplitSurfaceEvent ? theme.palette.purple[300] : theme.palette.purple[600];\n }\n if (eventType === 'External') return isSplitSurfaceEvent ? theme.palette.blueGrey[400] : theme.palette.blueGrey[500];\n if (eventType === 'Slot') return theme.palette.grey[600];\n }\n\n const getBackgroundColor = (eventType, isSelected, isHovered, isSplitSurfaceEvent, scheduleType) => {\n switch (eventType) {\n case 'Game': {\n const gameColor = getGameColorBasedOnScheduleType(scheduleType);\n if (isSelected) return isSplitSurfaceEvent ? gameColor[100] : gameColor[300];\n if (isHovered) return gameColor[300];\n return isSplitSurfaceEvent ? gameColor[50] : gameColor[100];\n }\n\n case 'Practice':\n if (isSelected) return isSplitSurfaceEvent ? theme.palette.purple[100] : theme.palette.purple[300];\n if (isHovered) return theme.palette.purple[200];\n return isSplitSurfaceEvent ? theme.palette.purple[50] : theme.palette.purple[100];\n\n case 'External':\n if (isHovered) return theme.palette.blueGrey[200];\n return isSplitSurfaceEvent ? theme.palette.blueGrey[50] : theme.palette.blueGrey[100];\n\n case 'Slot':\n if (isHovered) return theme.palette.grey[200];\n return theme.palette.grey[50];\n\n default:\n return 'white';\n }\n }\n\n const getGameColorBasedOnScheduleType = (scheduleType) => {\n switch (scheduleType) {\n case 'Exhibition':\n case 'Placement':\n return theme.palette.yellow;\n\n case 'League':\n return theme.palette.lightBlue;\n\n case 'Playoffs':\n case 'Championship':\n return theme.palette.success;\n\n case 'Tournament':\n case 'Cup':\n return theme.palette.warning;\n\n default:\n return theme.palette.primary;\n }\n }\n\n const getBoxShadow = (isDraggable, isHovered) => {\n if (isDraggable && isHovered) return theme.shadows[7];\n if (isDraggable) return theme.shadows[2];\n }\n\n return ({\n root: {\n borderWidth: props => getBorderWidth(props.eventType, props.isDraft, props.isSplitSurfaceEvent, props.isInactive),\n borderStyle: props => getBorderStyle(props.eventType, props.isDraft, props.isSplitSurfaceEvent),\n borderColor: props => getBorderColor(props.eventType, props.isSplitSurfaceEvent, props.isInactive, props.scheduleType),\n backgroundColor: props => getBackgroundColor(props.eventType, props.isSelected, false, props.isSplitSurfaceEvent, props.scheduleType),\n boxShadow: props => getBoxShadow(props.isDraggable, false),\n transition: 'all 0.1s ease-in-out',\n\n borderRadius: theme.spacing(.75),\n overflow: 'hidden',\n padding: theme.spacing(.5),\n display: 'flex',\n flexDirection: 'column',\n justifyContent: 'center',\n\n fontSize: theme.spacing(1.5),\n\n '&:hover': {\n cursor: 'pointer',\n backgroundColor: props => getBackgroundColor(props.eventType, props.isSelected, true, props.isSplitSurfaceEvent, props.scheduleType),\n boxShadow: props => getBoxShadow(props.isDraggable, true),\n }\n },\n })\n})\n\nconst useGameStyles = makeStyles(theme => ({\n number: {\n fontWeight: 'bold',\n display: 'flex',\n flexFlow: 'wrap',\n alignContent: 'center',\n gap: theme.spacing(0, .5),\n lineHeight: `${theme.spacing(2.5)}px`,\n },\n icon: {\n width: theme.spacing(2.5),\n height: theme.spacing(2.5),\n },\n status: {\n fontWeight: 'bold',\n },\n time: {\n whiteSpace: 'nowrap',\n },\n location: {\n whiteSpace: 'nowrap',\n },\n teamName: {\n fontStyle: 'italic',\n fontSize: theme.spacing(1.25),\n },\n}))\n\nconst OpponentField = ({ teamId, game }) => {\n const classes = useGameStyles();\n const isHome = game?.homeTeamId === teamId;\n\n return
\n \n {isHome ? 'vs' : '@'}\n {' '}\n \n \n
\n}\n\nexport const GameDetails = ({ game, ...props }) => {\n const { data: schedule } = useScheduleWithStore(game.scheduleId);\n\n // schedule needs to be loaded to render the event classes properly on the game card\n if (!schedule) return null;\n return \n}\n\nconst GameCard = ({ game, className, teamId, showOpponent = false, schedule, ...props }) => {\n const translate = useTranslate()\n const { selectedGame } = useSchedulingContext();\n const { hideArena, includeVenue, timezone } = useCalendarContext();\n const inactive = isInactive(game.status);\n const record = useRecordContext();\n const gameType = isDraft(game) ? 'draftGames' : 'games';\n const permittedToEdit = isAuthorized(record, gameType, 'edit');\n const classes = useGameStyles();\n const eventClasses = useEventStyles({\n eventType: selectedGame && (game.scheduleId !== selectedGame?.scheduleId) ? 'External' : 'Game',\n isDraft: isDraft(game),\n isSelected: game.id === selectedGame?.id,\n isDraggable: permittedToEdit && game?.isEditable !== false, // currently isEditable is never true, mostly undefined. so we specifically need to check if its not false\n isSplitSurfaceEvent: game.isSplitSurfaceEvent,\n isInactive: isInactive(game?.status),\n scheduleType: schedule?.type\n })\n\n const gameNumber =
\n \n {' '}\n {game.number != null ? game.number : game.id}\n {' - '}\n \n
\n\n return \n {(onClick) => {\n return
\n {game.isSplitSurfaceEvent ?\n
\n
{translate(`resources.blockedSurfaces.name`)}
\n {gameNumber}\n
\n :<>\n {gameNumber}\n {inactive &&
{translate(`resources.games.values.status.${game.status}`)}
}\n {game?.startTime && game?.endTime &&
{moment.tz(game.startTime, game?.timezone || timezone).format('HH:mm')} - {moment.tz(game.endTime, game?.timezone || timezone).format('HH:mm z')} ({getDuration(game.startTime, game.endTime)})
}\n {!hideArena &&
}\n {showOpponent && teamId && }\n }\n
\n }}\n
\n}\n\nconst usePracticeStyles = makeStyles(theme => ({\n number: {\n fontWeight: 'bold',\n display: 'flex',\n flexFlow: 'wrap',\n alignContent: 'center',\n gap: theme.spacing(0, .5),\n lineHeight: `${theme.spacing(2.5)}px`,\n },\n icon: {\n width: theme.spacing(2.5),\n height: theme.spacing(2.5),\n },\n status: {\n padding: 2,\n fontWeight: 'bold',\n },\n time: {\n whiteSpace: 'nowrap',\n },\n location: {\n whiteSpace: 'nowrap',\n },\n}))\n\nexport const PracticeDetails = ({ practice, className, ...props }) => {\n const translate = useTranslate();\n const { resource } = useSchedulingContext();\n const { hideArena, includeVenue, timezone } = useCalendarContext();\n const inactive = isInactive(practice.status);\n const classes = usePracticeStyles();\n const eventClasses = useEventStyles({\n eventType: 'Practice',\n isSplitSurfaceEvent: practice.isSplitSurfaceEvent,\n isInactive: isInactive(practice?.status)\n });\n\n let time = `${moment.tz(practice.startTime, timezone).format('HH:mm')} - ${moment.tz(practice.endTime, timezone).format('HH:mm z')}`\n if (!practice.multiday) {\n time += ` (${getDuration(practice.startTime, practice.endTime)})`\n }\n\n const practiceTitle =
\n \n {' '}\n {translate(`resources.practices.name`, { smart_count: 1 })}\n
\n\n return \n {(onClick) => {\n return
\n {practice.isSplitSurfaceEvent ?\n
\n {translate(`resources.blockedSurfaces.name`)}\n {practiceTitle}\n {practice.name?.length > 0 &&
{practice.name}
}\n
\n :<>\n {practiceTitle}\n {inactive &&
{translate(`resources.games.values.status.${practice.status}`)}
}\n
{time}
\n {practice.name?.length > 0 &&
{practice.name}
}\n {!hideArena &&
}\n }\n
\n }}\n
\n}\n\nconst useActivityStyles = makeStyles(theme => ({\n number: {\n fontWeight: 'bold',\n display: 'flex',\n alignContent: 'center',\n gap: theme.spacing(.5),\n lineHeight: `${theme.spacing(2.5)}px`,\n },\n icon: {\n width: theme.spacing(2.5),\n height: theme.spacing(2.5),\n },\n status: {\n padding: 2,\n fontWeight: 'bold',\n },\n time: {\n whiteSpace: 'nowrap',\n },\n location: {\n whiteSpace: 'nowrap',\n },\n}))\n\nexport const ActivityDetails = ({ activity, className, ...props }) => {\n const translate = useTranslate();\n const { resource } = useSchedulingContext();\n const { timezone } = useCalendarContext();\n const inactive = isInactive(activity.status);\n const classes = useActivityStyles();\n const eventClasses = useEventStyles({\n eventType: 'Activity',\n isInactive: isInactive(activity?.status) });\n\n let time = `${moment.tz(activity.startTime, timezone).format('HH:mm')} - ${moment.tz(activity.endTime, timezone).format('HH:mm z')}`\n if (!activity.multiday) {\n time += ` (${getDuration(activity.startTime, activity.endTime)})`\n }\n\n return \n {(onClick) => {\n return
\n
\n \n {' '}\n {translate(`resources.activities.values.type.${activity.type}`, { _: activity.type })}\n
\n {inactive &&
{translate(`resources.games.values.status.${activity.status}`)}
}\n
{time}
\n {activity.name?.length > 0 &&
{activity.name}
}\n
\n
\n }}\n
\n}\n\nconst useSlotStyles = makeStyles(theme => ({\n title: {\n fontWeight: 'bold',\n display: 'inline-flex',\n alignContent: 'center',\n\n gap: theme.spacing(0, .5),\n lineHeight: `${theme.spacing(2.5)}px`,\n whiteSpace: 'nowrap',\n },\n icon: {\n width: theme.spacing(2.5),\n height: theme.spacing(2.5),\n },\n ellipsis: {\n whiteSpace: 'nowrap',\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n display: 'block',\n },\n status: {\n padding: 2,\n fontWeight: 'bold',\n },\n time: {\n whiteSpace: 'nowrap',\n },\n details: {\n color: theme.palette.grey[800],\n },\n location: {\n whiteSpace: 'nowrap',\n },\n}))\n\nexport const SlotDetails = ({ slot, className }) => {\n const { hideArena, includeVenue, timezone } = useCalendarContext();\n const classes = useSlotStyles();\n const eventClasses = useEventStyles({ eventType: 'Slot', isSplitSurfaceEvent: slot.isSplitSurfaceEvent });\n const translate = useTranslate();\n\n const { startTime, endTime, multiday } = slot;\n\n let time = `${moment.tz(startTime, timezone).format('HH:mm')} - ${moment.tz(endTime, timezone).format('HH:mm z')}`\n if (!multiday) {\n time += ` (${getDuration(startTime, endTime)})`\n }\n\n const timeSlotName = slot.name?.length > 0 ? slot.name : translate(`resources.arenaslots.name`, { smart_count: 1 });\n\n const timeslotTitle =
\n \n {' '}\n {timeSlotName}\n
\n\n const arenaDetails =
\n {hideArena ?\n :\n }\n
\n\n return \n {(onClick) => {\n return
\n {slot.isSplitSurfaceEvent ?\n
\n
{translate(`resources.blockedSurfaces.name`)}
\n \n {timeslotTitle}\n {' - '}\n {arenaDetails}\n \n
\n :<>\n {timeslotTitle}\n
{time}
\n {arenaDetails}\n \n }\n
\n }}\n
\n}\n\nconst useAvailabilityStyles = makeStyles(theme => ({\n available: {\n background: `repeating-linear-gradient(\n -45deg,\n ${alpha(theme.palette.success[200], 1/8)},\n ${alpha(theme.palette.success[200], 1/8)} 4px,\n ${alpha(theme.palette.success[300], 1/8)} 4px,\n ${alpha(theme.palette.success[300], 1/8)} 8px\n )`,\n },\n unavailable: {\n background: `repeating-linear-gradient(\n -45deg,\n ${alpha(theme.palette.grey[300], 1/3)},\n ${alpha(theme.palette.grey[300], 1/3)} 4px,\n ${alpha(theme.palette.grey[400], 1/3)} 4px,\n ${alpha(theme.palette.grey[400], 1/3)} 8px\n )`,\n },\n icon: {\n fontSize: '0.75rem',\n }\n}))\n\nexport const AvailabilityDetails = ({ availability, className }) => {\n const classes = useAvailabilityStyles();\n const { isAvailable, isMixed } = availability;\n\n const availabilityClass = isAvailable && !isMixed ? classes.available : classes.unavailable;\n return \n {(onClick) => {\n return
\n }}\n
\n};\n\nexport const CalendarGameIcon = ({ game, className, teamId }) => {\n const { selectedGame } = useSchedulingContext();\n const translate = useTranslate();\n\n const teamIds = [game.homeTeamId, game.awayTeamId].filter(Boolean);\n const isHome = (selectedGame && teamIds.includes(selectedGame.homeTeamId)) || (teamId && teamId === game.homeTeamId);\n const isAway = (selectedGame && teamIds.includes(selectedGame.awayTeamId)) || (teamId && teamId === game.awayTeamId);\n\n let teamsTooltip;\n if (isHome && isAway) {\n teamsTooltip = 'both_teams'\n } else if (isHome) {\n teamsTooltip = 'home_team'\n } else if (isAway) {\n teamsTooltip = 'away_team'\n }\n\n const typeTooltip = isDraft(game) ? 'draft_game' : 'game';\n\n const title = [typeTooltip, teamsTooltip]\n .filter(Boolean)\n .map(tooltip => translate(`components.calendar.tooltips.${tooltip}`))\n .join(' - ')\n\n let Icon;\n if (isHome && isAway) {\n Icon = StarBorder;\n } else if (isHome) {\n Icon = Home;\n } else if (isAway) {\n Icon = CardTravel;\n } else if (isDraft(game)) {\n Icon = DraftIcon;\n } else {\n Icon = GameIcon;\n }\n\n return (\n \n \n \n );\n};\n\n","import React, { memo, useState } from 'react';\nimport { Dialog, DialogContent, DialogTitle, Divider, IconButton, LinearProgress, List, ListSubheader, makeStyles, Popover, Table, TableBody, Typography } from '@material-ui/core';\nimport { RecordContextProvider, ResourceContextProvider, useRecordContext, useTranslate, TextField, useNotify, useResourceContext } from 'react-admin';\nimport { Alert } from '@material-ui/lab';\nimport { Check, Clear, Launch, Close } from '@material-ui/icons';\nimport moment from 'moment-timezone';\nimport { Link } from 'react-router-dom';\n\nimport { isAuthorized } from '../Authorize';\nimport Row from '../../common/cards/TableRow';\nimport InfoCard from '../cards/InfoCard';\nimport { CALENDAR_VIEWS, useCalendarView, useIsHomeFirst } from '../../resources/events/EventViewSettings';\nimport TimeRangeField from '../../common/fields/TimeRangeField';\nimport TextArrayField from '../../common/fields/TextArrayField';\nimport FunctionField from '../fields/FunctionField';\nimport UserTextField from '../fields/UserTextField';\nimport { OfficeField } from '../../resources/offices/OfficeField';\nimport { OfficesField } from '../../resources/offices/OfficesField';\nimport { SurfaceField } from '../../resources/surfaces/SurfaceField';\nimport { TeamField } from '../../resources/teams/TeamField';\nimport { TeamsField } from '../../resources/teams/TeamsField';\nimport { GroupField } from '../../resources/groups/GroupField';\nimport { CategoryField } from '../../resources/categories/CategoryField';\nimport { ScheduleField } from '../../resources/schedules/ScheduleField';\nimport { GameStatusField } from '../../resources/games/cards/GameCard';\nimport { TargetField } from '../../resources/targets/TargetField';\nimport { GameTitle } from '../../resources/drafts/dialogs/GameDialog';\nimport { CategoriesField } from '../../resources/categories/CategoriesField';\nimport { SeasonField } from '../../resources/seasons/SeasonField';\nimport { AvailabilityList, SlotItem, isSlotInUse } from '../../resources/games/GameAvailabilityInfo';\nimport { PracticeAvailabilityContextProvider } from '../../resources/practices/PracticeAvailabilityContext';\nimport { GameAvailabilityContextProvider } from '../../resources/games/GameAvailabilityContext';\nimport { rowClick } from '../../resources/events/EventGrid';\nimport { UpdateGameAlert } from '../../resources/draftgames/DraftGameForm';\nimport { useSlotsInUse } from '../../resources/arenaslots/useSlotsInUse';\n\nimport { useDragContext } from './DragContext';\nimport { useCalendarContext } from './CalendarContext';\nimport { useSchedulingContext } from './SchedulingContext';\nimport { isDraftGameType, isPractice } from './EventDetails';\nimport { EventChangesForm, validateEvent } from './DragAndDropGrid';\n\nconst useStyles = makeStyles(theme => ({\n card: {\n maxWidth: theme.spacing(24),\n },\n root: {\n margin: theme.spacing(1),\n minWidth: theme.spacing(50),\n },\n row: {\n paddingTop: theme.spacing(.5),\n paddingBottom: theme.spacing(.5),\n borderBottom: 'none',\n },\n icon: {\n verticalAlign: 'bottom',\n },\n note: {\n color: theme.palette.grey[700],\n fontStyle: 'italic',\n },\n availabilityList: {\n paddingInline: theme.spacing(2),\n paddingBottom: theme.spacing(1),\n },\n slotLoad: {\n minWidth: theme.spacing(24)\n }\n}));\n\nconst LaunchButton = props => {\n const record = useRecordContext(props);\n\n const showLink = rowClick(record.id, null, record)\n\n if (!showLink) return null;\n\n return
\n \n \n \n \n \n
\n}\n\nconst ExitButton = ({ handleClose }) =>\n \n \n \n\nconst EventDetailsPopover = ({ children, popoverContent, width, popRight, disableCloseOnBlur = false }) => {\n const { dragging } = useDragContext();\n const [anchorEl, setAnchorEl] = useState(null);\n\n const handleClick = (event) => {\n if (dragging) return;\n setAnchorEl(event.currentTarget);\n };\n const handleClose = () => {\n setAnchorEl(null);\n };\n const handleBlur = () => {\n if (disableCloseOnBlur) return; // prevents close when opening dialog within popover\n setAnchorEl(null);\n }\n const open = Boolean(anchorEl);\n const id = open ? 'simple-popover' : undefined;\n\n // hardcoded className only used as identifier when inspecting the dom\n return
\n
\n {children(handleClick)}\n
\n \n {popoverContent(handleClose)}\n \n
\n}\n\nconst ConfirmDialog = ({ event, open = false, handleCancel, handleConfirm, previousEvent }) => {\n const { disableAuth } = useCalendarContext();\n const translate = useTranslate();\n const { resource: schedulingResource } = useSchedulingContext();\n const resource = useResourceContext();\n\n if (!event || !disableAuth) return null;\n\n const eventResource = event?.resource || schedulingResource || resource;\n const canEditEvent = event?.id ? isAuthorized(event, eventResource, 'edit') : true;\n\n const AvailabilityContextProvider = isPractice(event) ? PracticeAvailabilityContextProvider : GameAvailabilityContextProvider;\n\n return \n {translate('resources.games.labels.confirm_changes')}\n \n {!canEditEvent && {translate('resources.games.alerts.no_edit_permission')}}\n \n \n \n \n \n \n \n}\n\nconst SlotsList = ({ slots = [], handleClose, readOnly }) => {\n const translate = useTranslate();\n const notify = useNotify()\n const classes = useStyles();\n const [open, setOpen] = useState(false)\n const [selectedSlot, setSelectedSlot] = useState(null)\n const { selectedGame, setSelectedGame, onSave, schedule } = useSchedulingContext();\n const { data: slotsInUse, loading, error } = useSlotsInUse(slots.map(slot => slot.id))\n\n const { date, startTime, endTime, arenaId } = selectedSlot || {};\n const updatedEvent = { ...selectedGame, date, startTime, endTime, arenaId };\n\n const handleClick = async () => {\n if (!onSave || !selectedGame) return;\n\n const error = validateEvent(updatedEvent, schedule, translate);\n if (error) {\n return notify(error, 'error');\n }\n\n await onSave(updatedEvent);\n setSelectedGame(updatedEvent);\n handleClose();\n };\n\n const handleSelect = (slot) => {\n setSelectedSlot(slot);\n setOpen(true);\n }\n\n if (!slots?.length) return null;\n return \n {translate('resources.availabilities.labels.slots')}\n {loading ?\n \n :\n slots.map(slot => \n handleSelect(slot)} readOnly={readOnly} isInUse={isSlotInUse(slotsInUse, slot.id)} />\n )\n }\n setOpen(false)}\n handleConfirm={handleClick}\n previousEvent={selectedGame}\n />\n \n}\n\nconst SlotDetails = ({ handleClose }) => {\n const { hideArena, includeVenue } = useCalendarContext();\n const translate = useTranslate();\n const slot = useRecordContext();\n const classes = useStyles();\n\n const { date, categoryIds, types, leagueIds } = slot;\n const headerActions = [\n \n ].filter(Boolean);\n\n return \n \n \n \n \n \n \n {!hideArena && \n \n }\n \n \n \n \n \n \n \n
\n \n
\n}\n\nconst AvailabilityDetailsList = ({ slots, availabilities, handleClose }) => {\n const classes = useStyles();\n const [ view ] = useCalendarView();\n\n const headerActions = [\n \n ]\n\n const available = availabilities.filter(availability => availability.isAvailable);\n const unavailable = availabilities.filter(availability => !availability.isAvailable);\n\n return \n
\n \n \n
\n \n}\n\nconst AvailabilityDetails = ({ handleClose }) => {\n const { hideArena, includeVenue } = useCalendarContext();\n const translate = useTranslate();\n const availability = useRecordContext();\n const classes = useStyles();\n\n const { date, overlaps } = availability;\n const availabilities = overlaps || [availability];\n const headerActions = [\n \n ].filter(Boolean);\n\n return \n \n \n \n {availabilities.map((overlappingAvailability, i) => {\n const { isAvailable, targetType } = overlappingAvailability;\n return \n {!hideArena && \n \n }\n \n \n \n {targetType === 'Surface' && \n <>\n \n {overlappingAvailability?.isPrimary && ({translate('resources.arenaoffices.fields.isPrimary')})}\n \n }\n {targetType === 'Surface' && \n \n }\n \n {translate(`resources.availabilities.values.isAvailable.${isAvailable ? 'available' : 'notAvailable'}`)}\n {' '}\n {isAvailable ? : }\n \n \n {i + 1 !== availabilities.length &&\n \n \n }\n \n })}\n \n
\n \n
\n}\n\nconst ActivityDetails = ({ handleClose, disableLaunch, ...props }) => {\n const translate = useTranslate();\n const activity = useRecordContext();\n const classes = useStyles();\n\n const { type, name, comments } = activity;\n const headerActions = [\n !disableLaunch && ,\n ,\n ].filter(Boolean);\n\n return \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
\n \n
\n}\n\nconst PracticeDetails = ({ handleClose, disableLaunch }) => {\n const translate = useTranslate();\n const practice = useRecordContext();\n const classes = useStyles();\n const { includeVenue } = useCalendarContext();\n\n const headerActions = [\n !disableLaunch && ,\n ,\n ].filter(Boolean);\n\n return \n \n \n \n \n \n \n \n \n \n \n \n \n \n translate(`resources.games.values.status.${status}`, { _: status })} />\n \n \n \n
\n \n
\n}\n\nconst GameDetails = ({ handleClose, isEditable, disableLaunch }) => {\n const game = useRecordContext();\n const { popoverActions, includeVenue } = useCalendarContext();\n const isHomeFirst = useIsHomeFirst();\n const classes = useStyles();\n const translate = useTranslate();\n\n const isDraft = game?.draftId || isDraftGameType(game?.type);\n\n const title = isDraft ? : `${translate('resources.games.name', 1)} ${game?.number}`;\n const customActions = isEditable === false ? [!disableLaunch && ] : popoverActions;\n const headerActions = [\n ...(customActions || [!disableLaunch && ]),\n ,\n ].filter(Boolean);\n\n const homeTeam = \n \n \n const awayTeam = \n \n \n\n return \n \n {isDraft && game?.updatedGameId && }\n \n \n \n \n \n \n \n \n \n \n \n {isHomeFirst ? <>{homeTeam}{awayTeam} : <>{awayTeam}{homeTeam}}\n \n \n \n \n \n \n \n \n
\n \n
\n}\n\nexport const AvailabilityDetailsListPopover = memo(({ children, slots = [], availabilities = [], ...props }) => {\n return } {...props}>\n {children}\n \n})\n\nexport const AvailableSlotsPopover = memo(({ children, slots, ...props }) => {\n return } {...props}>\n {children}\n \n})\n\nexport const SlotDetailsPopover = memo(({ children, ...props }) => {\n return } {...props}>\n {children}\n \n})\n\nexport const AvailabilityDetailsPopover = memo(({ children, ...props }) => {\n return } {...props}>\n {children}\n \n})\n\nexport const ActivityDetailsPopover = memo(({ children, ...props }) => {\n return } {...props}>\n {children}\n \n})\n\nexport const PracticeDetailsPopover = memo(({ children, ...props }) => {\n return } {...props}>\n {children}\n \n})\n\nexport const GameDetailsPopover = memo(({ children, ...props }) => {\n return } width=\"600px\" {...props}>\n {children}\n \n})\n","import React, { useMemo } from 'react';\nimport { RecordContextProvider } from 'react-admin';\nimport { makeStyles } from '@material-ui/core'\nimport moment from 'moment-timezone';\nimport { flatMap, cloneDeep } from 'lodash';\n\nimport { createRange } from '@hisports/common';\n\nimport { CALENDAR_VIEWS } from '../../resources/events/EventViewSettings';\n\nimport { GameDetails, PracticeDetails, ActivityDetails, SlotDetails, AvailabilityDetails } from './EventDetails';\nimport { DragAndDropGrid, SeasonDndGrid } from './DragAndDropGrid';\nimport { useDragContext } from './DragContext';\nimport { useSchedulingContext } from './SchedulingContext';\nimport { useCalendarContext } from './CalendarContext';\n\nconst EVENT_TYPES = {\n teamEvents: ['Game', 'Practice', 'Training', 'Meeting', 'Meal', 'Accomodation'],\n slots: ['Slot'],\n availabilities: ['Availability'],\n}\n\nconst isTeamEvent = ({ type, awayTeamId, homeTeamId, number }) => EVENT_TYPES.teamEvents.includes(type) || awayTeamId || homeTeamId || number;\nconst isSlot = ({ type }) => EVENT_TYPES.slots.includes(type);\nconst isAvailability = ({ type }) => EVENT_TYPES.availabilities.includes(type);\n\nexport const getResourceByType = event => {\n if (!event?.type) return;\n switch (event.type) {\n case 'Game':\n return 'games'\n case 'Draft Game':\n return 'draftGames'\n case 'Draft':\n return 'drafts'\n case 'Training':\n case 'Meeting':\n case 'Meal':\n case 'Accomodation':\n return 'activities'\n }\n if (isSlot(event)) return 'arenaslots'\n if (isAvailability(event)) return 'availabilities'\n}\n\n/**\n * Returns the z-index value based on the zIndexProps and state.\n *\n * @param {object} zIndexProps - The properties used to calculate the z-index value\n * @param {string|null} - The state of the element ('dragged', 'hovered', null)\n * @return {number|null} The calculated z-index value or null if zIndexProps is falsy\n */\nconst getZIndex = (zIndexProps, state) => {\n if (state === 'dragged') return 50000;\n if (!zIndexProps) return null;\n\n const { event, hours, minutes } = zIndexProps;\n const baseZIndex = hours * 60 + minutes; // from 0 to 1439 based on the time of the day\n\n if (isAvailability(event)) {\n return 10000 + baseZIndex;\n };\n if (isSlot(event)) {\n return 20000 + baseZIndex;\n }\n if (!state) {\n return 30000 + baseZIndex;\n }\n if (state === 'hovered') {\n return 40000 + baseZIndex;\n }\n}\n\nconst calculateEvents = (events, getColumnIndex, maxWidth, timezone, isGrouped) => {\n if (Array.isArray(events?.[0])) {\n return events.map(eventGroup => groupEvents(eventGroup, getColumnIndex, maxWidth, timezone, isGrouped)).flat();\n }\n return groupEvents(events, getColumnIndex, maxWidth, timezone, isGrouped);\n}\n\n/**\n * events are grouped by an overlap of the latest start time within the group + 45m\n * events within groups are equally sized\n * groups that overlap other groups offset after the last event in the previous group\n */\nconst groupEvents = (events, getColumnIndex, maxWidth, timezone, isGrouped = true) => {\n // split multi-day events into two\n return cloneDeep(events).reduce((events, event) => {\n const { startTime, endTime, ...details } = event;\n const startOfDay = { hours: 6, minutes: 0, seconds: 0 }\n const endOfDay = moment.tz(startTime, timezone).endOf('day')\n\n if (moment.tz(endTime, timezone).isSameOrBefore(endOfDay)) { // normal event\n const eventStartOfDay = moment.tz(startTime, timezone).set(startOfDay);\n if (moment.tz(startTime, timezone).isBefore(eventStartOfDay)) {\n event.layout = { startTime: eventStartOfDay.toISOString() };\n }\n events.push(event);\n return events;\n }\n\n // event exceeds end of day, limit to end of day, create additional events for additional days\n events.push({\n startTime,\n endTime,\n layout: { endTime: endOfDay.toISOString() },\n multiday: true,\n ...details\n });\n\n let days = moment.tz(endTime, timezone).diff(endOfDay, 'days') // full days\n const diff = moment.tz(endTime, timezone).diff(endOfDay, 'hours') - (days * 24) // last partial day\n\n while (days-- > 0) { // add full day events (days 2 and 3 of a 4-day event)\n const prevEvent = events[events.length - 1] // always exists because you always add one a few lines ago\n const prevEventStart = prevEvent.layout?.startTime || prevEvent.startTime;\n const layoutStartTime = moment.tz(prevEventStart, timezone).add(1, 'day').set(startOfDay).toISOString();\n const layoutEndTime = moment.tz(layoutStartTime, timezone).endOf('day').toISOString();\n events.push({\n startTime,\n endTime,\n layout: { startTime: layoutStartTime, endTime: layoutEndTime },\n multiday: true,\n ...details\n });\n }\n\n if (diff < 24) {\n const layoutStartTime = moment.tz(endTime, timezone).set(startOfDay);\n const layoutEndTime = moment.tz(endTime, timezone);\n if (layoutEndTime.isAfter(layoutStartTime)) {\n events.push({\n startTime,\n endTime,\n layout: { startTime: layoutStartTime.toISOString(), endTime: layoutEndTime.toISOString() },\n multiday: true,\n ...details\n });\n }\n }\n return events;\n }, [])\n // sort events into groups\n .reduce((groups, event) => {\n const { startTime, endTime, layout } = event;\n const start = layout?.startTime || startTime;\n const end = layout?.endTime || endTime;\n const eventRange = createRange(start, end);\n const group = groups.findLast(group => {\n // group end time is 45m after the latest start time within the group\n const range = createRange(group.startTime, group.offsetTime);\n return eventRange.overlaps(range)\n })\n if (!group) {\n groups.push({\n startTime: start,\n endTime: end,\n offsetTime: moment.tz(start, timezone).add(45, 'minutes').toISOString(),\n events: [event],\n })\n return groups;\n }\n group.events.push(event);\n group.startTime = group.events.reduce((lastTime, event) => {\n const groupEventStart = event.layout?.startTime || event.startTime;\n if (!lastTime) return start;\n if (moment(groupEventStart).isBefore(lastTime)) return groupEventStart;\n return lastTime;\n }, null);\n group.endTime = group.events.reduce((lastTime, event) => {\n const groupEventEnd = event.layout?.endTime || event.endTime;\n if (!lastTime) return groupEventEnd;\n if (moment(groupEventEnd).isAfter(lastTime)) return groupEventEnd;\n return lastTime;\n }, null);\n\n if (group.events.length < 4) {\n const lastTime = group.events.reduce((lastTime, event) => {\n const groupEventStart = event.layout?.startTime || event.startTime;\n if (!lastTime) return groupEventStart;\n if (moment(groupEventStart).isAfter(lastTime)) return groupEventStart;\n return lastTime;\n }, null);\n group.offsetTime = moment.tz(lastTime, timezone).add(45, 'minutes').toISOString();\n } else {\n // group.offsetTime = moment(group.startTime).add(60, 'minutes').toISOString();\n const groupEventEnd = group.events[0].layout?.endTime || group.events[0].endTime;\n group.offsetTime = moment.tz(groupEventEnd, timezone).toISOString();\n }\n return groups;\n }, [])\n // determine overlapping groups and an offset from the last event in the parent group\n .reduce((groups, group) => {\n const groupRange = createRange(group.startTime, group.offsetTime)\n group.parent = groups.find(parent => {\n const range = createRange(parent.startTime, parent.offsetTime)\n return range.overlaps(groupRange)\n })\n if (!group.parent) {\n group.offset = 0;\n group.width = maxWidth;\n } else {\n const { width, events } = group.parent;\n const eventWidth = width / events.length;\n group.offset = (eventWidth * (events.length - 1)) + 10;\n group.width = maxWidth - group.offset;\n }\n groups.push(group);\n return groups;\n }, [])\n // flatten events with group relations\n .reduce((events, group, id) => {\n events.push(...group.events.map(event => {\n return {\n ...event,\n grouping: group,\n }\n }))\n return events;\n }, [])\n // calculate layout metadata\n .map(event => {\n const { id, startTime, endTime, grouping, layout } = event;\n const date = moment.tz(layout?.startTime || startTime, timezone);\n const index = grouping.events.findIndex(groupEvent => groupEvent.id === id);\n const eventWidth = isGrouped ? (grouping.width / grouping.events.length) : maxWidth;\n const colIndex = getColumnIndex(event, timezone);\n if (colIndex < 0) return;\n\n return {\n event,\n layout: {\n colIndex,\n hours: date.hours(),\n minutes: date.minutes(),\n duration: moment(layout?.endTime || endTime).diff(layout?.startTime || startTime, 'minutes'),\n width: eventWidth,\n groupWidth: grouping.width,\n offset: grouping.offset + (eventWidth * index),\n }\n }\n })\n .filter(Boolean);\n}\n\nconst combineAvailabilities = (availabilities = []) => {\n if (!availabilities.length) return availabilities;\n\n availabilities = availabilities\n .map(availability => ({\n ...availability,\n range: createRange(availability.startTime, availability.endTime),\n }))\n .sort((a, b) => new Date(a.startTime) - new Date(b.startTime));\n\n const decoupled = [];\n let decoupling = true;\n let time;\n\n do {\n if (!time) {\n // first time\n time = availabilities[0].startTime;\n }\n // find next time from availabilities\n const times = flatMap(availabilities, availability => [availability.startTime, availability.endTime]);\n const nextTime = times.sort((a, b) => new Date(a) - new Date(b)).find(t => t > time);\n\n if (!nextTime) {\n // no more times from availabilities\n decoupling = false;\n break;\n }\n // create new availability with new times and availability status\n const newAvailabilityRange = createRange(time, nextTime);\n const newAvailabilityOverlaps = availabilities.filter(e => newAvailabilityRange.overlaps(e.range, { adjacent: false }));\n const isAvailable = newAvailabilityOverlaps.some(availability => availability.isAvailable === true);\n const isUnavailable = newAvailabilityOverlaps.some(availability => availability.isAvailable === false);\n\n const newAvailability = {\n ...newAvailabilityOverlaps[0],\n startTime: time,\n endTime: nextTime,\n isMixed: isAvailable && isUnavailable,\n overlaps: newAvailabilityOverlaps,\n }\n\n if (newAvailability.id) {\n // filter out empty events\n decoupled.push(newAvailability);\n }\n\n time = nextTime;\n } while (decoupling);\n\n return decoupled;\n}\n\nconst useStyles = makeStyles(theme => ({\n root: {\n boxSizing: 'border-box',\n height: props => props.height,\n width: props => props.width,\n\n position: 'absolute',\n // if isDnDItem, top and left are handled by gridLayout in a parent node (DragAndDropItem)\n top: props => !props.isDnDItem ? props.top : null,\n left: props => !props.isDnDItem ? props.left : null,\n zIndex: props => getZIndex(props.zIndexProps),\n\n '&:hover': {\n transform: props => `translate(${-props.offsetLeft}px, 0px)`,\n width: props => props.hoverWidth,\n zIndex: props => getZIndex(props.zIndexProps, 'hovered'),\n }\n },\n /* dndItem uses default gridLayout's style, with a couple of tweeks */\n dndItem: {\n boxSizing: 'border-box',\n zIndex: props => getZIndex(props.zIndexProps, props.isDragged ? 'dragged' : null),\n left: props => props.left, /* offsets positioning when many events are in the same place */\n\n '&:hover': {\n zIndex: props => getZIndex(props.zIndexProps, props.isDragged ? 'dragged' : 'hovered'),\n }\n }\n}))\n\nconst TeamEventDetails = ({ event, inactive, className, ...props }) => {\n switch (event.type) {\n case 'Training':\n case 'Meeting':\n case 'Meal':\n case 'Accomodation':\n return \n\n case 'Practice':\n return \n\n case 'Game':\n default:\n return \n }\n}\n\nexport const EventDetails = ({ event, inactive, className, ...props }) => {\n if (isAvailability(event)) {\n return \n }\n if (isSlot(event)) {\n return \n }\n return \n}\n\n\nconst Event = ({ event, size, offset, offsetHours, layout, isDnDItem, offsetLeft, ...props }) => {\n const { resource, selectedGame } = useSchedulingContext();\n const { draggingEvent } = useDragContext();\n const isDragged = draggingEvent.id && draggingEvent.id == event.id;\n\n const { colIndex, hours, minutes, duration } = layout;\n const minute = size.height / 60\n\n const columnOffset = colIndex * size.width;\n const hoursOffset = (hours - offsetHours) * size.height;\n const minutesOffset = minutes * minute;\n\n const classes = useStyles({\n height: duration * minute,\n width: layout.width,\n isDnDItem,\n top: hoursOffset + minutesOffset,\n left: columnOffset + offset.width + layout.offset,\n offsetLeft, // left applied to the parent to offset from the other event in the same spot\n hoverWidth: layout.groupWidth,\n zIndexProps: {\n event, hours, minutes\n },\n })\n\n if (isDragged) {\n const { startTime, endTime } = draggingEvent;\n event.startTime = startTime;\n event.endTime = endTime;\n }\n\n return \n}\n\nexport const TeamEvents = ({ events, size, offset, rowHeights, offsetHours, startDate, rowClick, ...props }) => {\n const { columns, filterEvents, getColumnIndex, timezone, pushSplitSurfaceEvents, type } = useCalendarContext();\n\n const layoutTeamEvents = useMemo(() => {\n let teamEvents = events.filter(event => isTeamEvent(event));\n if ([CALENDAR_VIEWS.MONTH, CALENDAR_VIEWS.SEASON].includes(type)) return filterEvents(teamEvents);\n\n teamEvents = pushSplitSurfaceEvents(teamEvents);\n teamEvents = filterEvents(teamEvents);\n return calculateEvents(teamEvents, getColumnIndex, size.width - 15, timezone, true);\n }, [ events, type, pushSplitSurfaceEvents, filterEvents, getColumnIndex, size.width, timezone ]);\n\n const DndGrid = type === CALENDAR_VIEWS.SEASON ? SeasonDndGrid : DragAndDropGrid;\n\n return \n {({ getDndItem, offsetHours }) => (\n layoutTeamEvents.map(({ event, layout }) => {\n const dndItem = getDndItem(layout, event, offsetHours);\n\n return (\n \n \n \n \n \n )\n })\n )}\n \n}\n\n// gridLayout from DragAndDropGrid sends props to the direct child. this needs to be the direct child\nconst DragAndDropItem = React.forwardRef(({ styleOverrides, eventId, children, className: gridLayoutClassName, style: gridLayoutStyle, ...gridLayoutProps }, gridLayoutRef) => {\n const { dragging, draggingEvent } = useDragContext();\n const classes = useStyles(\n {\n left: styleOverrides?.left,\n zIndexProps: styleOverrides?.zIndexProps,\n isDragged: draggingEvent && draggingEvent?.id === eventId\n }\n );\n\n const isDragged = draggingEvent && draggingEvent?.id === eventId\n const draggedZIndex = dragging && isDragged ? getZIndex(null, 'dragged') : null; // draggedZIndex needs to be in style to be updated on rerender.\n\n return (\n \n {children}\n
\n )\n})\n\nexport const Slots = ({ events, size, offset, offsetHours, startDate, rowClick }) => {\n const { filterEvents, getColumnIndex, timezone, pushSplitSurfaceEvents, type } = useCalendarContext();\n const layoutSlots = useMemo(() => {\n let slots = events.filter(event => isSlot(event));\n if ([CALENDAR_VIEWS.MONTH, CALENDAR_VIEWS.SEASON].includes(type)) return;\n\n slots = pushSplitSurfaceEvents(slots);\n slots = filterEvents(slots);\n return calculateEvents(slots, getColumnIndex, size.width - 15, timezone, true);\n }, [ events, type, pushSplitSurfaceEvents, filterEvents, getColumnIndex, size.width, timezone ]);\n\n if (!layoutSlots?.length) return null;\n return layoutSlots.map(({ event, layout }) =>\n \n \n \n )\n}\n\nexport const Availabilities = ({ events, size, offset, offsetHours, startDate, rowClick }) => {\n const { filterEvents, getColumnIndex, timezone, pushSplitSurfaceEvents, type } = useCalendarContext();\n const layoutAvailabilities = useMemo(() => {\n let availabilities = events.filter(event => isAvailability(event));\n if ([CALENDAR_VIEWS.MONTH, CALENDAR_VIEWS.SEASON].includes(type)) return;\n\n availabilities = pushSplitSurfaceEvents(availabilities);\n availabilities = filterEvents(availabilities);\n const combinedAvailabilities = availabilities.map(availability => combineAvailabilities(availability));\n return calculateEvents(combinedAvailabilities, getColumnIndex, size.width - 8, timezone, true);\n }, [ events, type, pushSplitSurfaceEvents, filterEvents, getColumnIndex, size.width, timezone ]);\n\n if (!layoutAvailabilities?.length) return null;\n return layoutAvailabilities.map(({ event, layout }) =>\n \n \n \n )\n}\n","import React, { memo, useContext, useEffect, useMemo, useState } from 'react';\nimport { GET_LIST, useQuery } from 'react-admin';\n\nimport { dedupe } from '@hisports/parsers';\n\nimport { apiClient } from '../../http';\nimport { CALENDAR_VIEWS, useCalendarView, useShowAwaySlots, useSurfaceSizes } from '../../resources/events/EventViewSettings';\nimport { useSchedule } from '../../resources/schedules/useSchedule';\nimport { useScheduleSettings } from '../../resources/scheduleSettings';\n\nconst SchedulingContext = React.createContext(null);\n\nconst getScheduleAvailability = async (scheduleId, teamId, date, additionalSurfaceIds, signal) => {\n const { data } = await apiClient({\n method: 'GET',\n url: `/schedules/${scheduleId}/availabilities`,\n params: { teamId, date, additionalSurfaceIds },\n signal,\n });\n\n return data;\n}\n\nconst getOfficeAvailability = async (officeId, teamIds, awayTeamId, scheduleId, startDate, endDate, isSeasonView, includeAwaySlots, signal) => {\n const { data } = await apiClient({\n method: 'GET',\n url: `/offices/${officeId}/teamAvailabilities`,\n params: { teamIds, awayTeamId, scheduleId, startDate, endDate, includePractices: isSeasonView, includeActivities: isSeasonView, includeAwaySlots },\n signal,\n })\n\n return data\n}\n\nconst useScheduleTeams = scheduleId => useQuery({\n type: GET_LIST,\n resource: 'scheduleteams',\n payload: {\n filter: { scheduleId, _include: 'team' },\n sort: { field: 'team.name', order: 'ASC' },\n }\n}, {\n enabled: scheduleId != null,\n})\n\nexport const useSchedulingContext = () => useContext(SchedulingContext) || {};\n\nexport const SchedulingProvider = memo(({ officeId, scheduleId: defaultScheduleId, draftId, resource, limitedView, showSchedule = false, onSave, disableScheduling = false, ...props }) => {\n const [ surfaceSizes, setSurfaceSizes ] = useSurfaceSizes()\n const [ view ] = useCalendarView();\n const [ selectedGame, setSelectedGame ] = useState(null);\n const [ showAwaySlots ] = useShowAwaySlots();\n\n const scheduleId = useMemo(() => {\n return defaultScheduleId || selectedGame?.scheduleId;\n }, [ defaultScheduleId, selectedGame ])\n\n const { data: schedule, loading: scheduleLoading } = useSchedule(scheduleId);\n const { data: scheduleTeams, loading: scheduleTeamsLoading } = useScheduleTeams(scheduleId);\n const { data: scheduleSettings, loading: scheduleSettingsLoading } = useScheduleSettings(scheduleId);\n\n const [ dateFilter, setDateFilter ] = useState(null);\n const [ availability, setAvailability ] = useState(null);\n const [ refreshAvailability, setRefreshAvailability ] = useState(false)\n const [ loading, setLoading ] = useState(0);\n const [ gameLength, setGameLength ] = useState(null);\n const [ surfaceOfficeId, setSurfaceOfficeId ] = useState(null);\n const [ deferDraftConflict, setDeferDraftConflict ] = useState(false);\n const [ limitDateChange, setLimitDateChange ] = useState(false);\n const { homeTeamId, awayTeamId, date, arenaId } = selectedGame || {}\n const { startDate, endDate } = schedule || {}\n\n useEffect(() => {\n // day, week availability\n if (![CALENDAR_VIEWS.DAY, CALENDAR_VIEWS.WEEK].includes(view)) return;\n\n setAvailability(null);\n\n if (!scheduleId || !startDate || !homeTeamId || disableScheduling) return;\n\n const abortController = new AbortController();\n if (date && view === CALENDAR_VIEWS.DAY) {\n // load day availability\n setLoading(loading => ++loading);\n getScheduleAvailability(scheduleId, homeTeamId, date, arenaId ? [arenaId] : undefined, abortController.signal)\n .then(setAvailability)\n .finally(() => {\n setLoading(loading => --loading);\n })\n } else if (startDate && view !== CALENDAR_VIEWS.DAY) {\n // load teams' availability\n setLoading(loading => ++loading);\n const teamIds = [homeTeamId, awayTeamId].filter(Boolean);\n\n getOfficeAvailability(officeId, teamIds, awayTeamId, scheduleId, startDate, endDate, false, showAwaySlots, abortController.signal)\n .then(setAvailability)\n .finally(() => {\n setLoading(loading => --loading);\n })\n }\n\n return () => {\n abortController.abort();\n }\n }, [ homeTeamId, awayTeamId, date, arenaId, scheduleId, startDate, endDate, view, officeId, disableScheduling, scheduleTeams, showAwaySlots ])\n\n useEffect(() => {\n // month view availability\n if (view !== CALENDAR_VIEWS.MONTH || dateFilter?.type !== CALENDAR_VIEWS.MONTH) return;\n\n const teamIds = [homeTeamId, awayTeamId].filter(Boolean);\n if (!teamIds.length) return;\n\n const abortController = new AbortController();\n\n setLoading(loading => ++loading);\n getOfficeAvailability(officeId, teamIds, awayTeamId, scheduleId, dateFilter.startDate, dateFilter.endDate, false, showAwaySlots, abortController.signal)\n .then(setAvailability)\n .finally(() => {\n setLoading(loading => --loading);\n })\n\n return () => {\n abortController.abort();\n }\n }, [homeTeamId, awayTeamId, officeId, scheduleId, startDate, endDate, view, showAwaySlots, dateFilter?.type, dateFilter?.startDate, dateFilter?.endDate])\n\n useEffect(() => {\n // season view availability\n if (view !== CALENDAR_VIEWS.SEASON || dateFilter?.type !== CALENDAR_VIEWS.SEASON) return;\n\n if (refreshAvailability) {\n return setRefreshAvailability(false);\n }\n\n const teamIds = dedupe((scheduleTeams || []).map(scheduleTeam => scheduleTeam.teamId))\n if (!teamIds.length) return;\n\n const abortController = new AbortController();\n setLoading(loading => ++loading);\n getOfficeAvailability(officeId, teamIds, null, scheduleId, dateFilter.startDate, dateFilter.endDate, true, true, abortController.signal)\n .then(setAvailability)\n .finally(() => {\n setLoading(loading => --loading);\n })\n\n return () => {\n abortController.abort();\n }\n }, [officeId, refreshAvailability, scheduleId, scheduleTeams, view, dateFilter?.startDate, dateFilter?.endDate, dateFilter?.type])\n\n useEffect(() => {\n if (!scheduleSettings || scheduleSettingsLoading) return;\n setSurfaceOfficeId(scheduleSettings?.surfaceOfficeId)\n setGameLength(scheduleSettings.gameLength);\n setDeferDraftConflict(scheduleSettings.deferDraftConflict);\n setLimitDateChange(scheduleSettings.limitDateChange)\n\n if (!setSurfaceSizes || !scheduleSettings?.surfaceSizes?.length) return;\n setSurfaceSizes(scheduleSettings.surfaceSizes);\n }, [scheduleSettings, scheduleSettingsLoading, setSurfaceSizes])\n\n const value = useMemo(() => ({\n resource,\n schedule,\n surfaceOfficeId,\n selectedGame,\n availability,\n setSelectedGame,\n dateFilter,\n setDateFilter,\n draftId,\n limitedView,\n loading: loading !== 0 || scheduleLoading || scheduleTeamsLoading || scheduleSettingsLoading,\n gameLength,\n deferDraftConflict,\n limitDateChange,\n onSave,\n showSchedule,\n disableScheduling,\n scheduleTeams,\n setRefreshAvailability,\n }), [resource, schedule, surfaceOfficeId, selectedGame, availability, draftId, limitedView, loading, scheduleLoading, scheduleTeamsLoading, scheduleSettingsLoading, gameLength, deferDraftConflict, limitDateChange, onSave, showSchedule, disableScheduling, scheduleTeams, dateFilter]);\n\n return \n})\n","import React, { useState } from 'react';\nimport { useTranslate, useRecordContext } from 'react-admin';\nimport { ListItemIcon, ListItemText } from '@material-ui/core'\nimport { StarBorder } from '@material-ui/icons'\n\nimport { ActionMenuItem } from '../../../../common/ActionMenu';\nimport { LazyDialog } from '../../../../common/LazyDialog';\n\nconst Generator = React.lazy(() => import('./Generator'))\n\nexport default ({ schedule, isOpen, onClose, ...props }) => {\n return \n {isOpen && }\n \n}\n\nexport const GenerateDraftGamesAction = ({ onClick, ...props }) => {\n const schedule = useRecordContext();\n const translate = useTranslate();\n const [ isOpen, setOpen ] = useState(false);\n const handleClick = () => {\n onClick();\n setOpen(true);\n }\n return <>\n \n \n {translate('resources.draftGames.actions.generate')}\n \n \n {isOpen && setOpen(false)} {...props} />}\n \n \n}\n","import React, { useState } from 'react';\nimport { useTranslate } from 'react-admin';\nimport { ListItemIcon, ListItemText } from '@material-ui/core'\nimport { UnarchiveOutlined } from '@material-ui/icons'\n\nimport { LazyDialog } from '../../../common/LazyDialog';\nimport { ActionMenuItem } from '../../../common/ActionMenu';\n\nconst Uploader = React.lazy(() => import('./Uploader'))\n\nexport default ({ isOpen, onClose, ...props }) => {\n return \n {isOpen && }\n \n}\n\nexport const ImportDraftGamesAction = ({ onClick, ...props }) => {\n const translate = useTranslate();\n const [ isOpen, setOpen ] = useState(false);\n const handleClick = () => {\n onClick();\n setOpen(true);\n }\n return <>\n \n \n {translate('resources.draftGames.actions.upload')}\n \n \n {isOpen && setOpen(false)} {...props} />}\n \n \n}\n","import React, { useState } from 'react'\nimport { useRecordContext, useTranslate } from 'react-admin'\nimport { Button, ListSubheader, Menu } from '@material-ui/core'\nimport { Add } from '@material-ui/icons'\n\nimport { FF_BRACKETS, FF_SEQUENCES } from '@hisports/common/featureFlags'\n\nimport { isAuthorized } from '../../Authorize'\n\nimport { GenerateDraftGamesAction } from '../../../resources/schedules/dialogs/generator'\nimport { AddGameAction } from '../../../resources/games/GameModal'\nimport { AddDraftGameAction } from '../../../resources/draftgames/DraftGameModal'\nimport { ImportDraftGamesAction } from '../../../resources/draftgames/dialogs'\nimport { AddScheduleSequenceAction } from '../../../resources/schedulesequences/ScheduleSequenceModal'\nimport { AddBracketButton } from '../../../resources/schedules/dialogs/BracketDialog'\nimport { useFlag } from '../../../http'\n\nexport const AddMenu = ({\n hideAddGame = false,\n hideAddDraft = false,\n size = \"small\",\n buttonTitle = 'resources.draftGames.actions.create',\n ...props\n}) => {\n const schedule = useRecordContext();\n const translate = useTranslate();\n const isEnabled = useFlag()\n const [ anchor, setAnchor ] = useState(null);\n\n const canCreateDrafts = isAuthorized(schedule, 'draftGames', 'create');\n const canCreateGames = isAuthorized(schedule, 'games', 'create');\n const canCreateSequences = isAuthorized(schedule, 'schedulesequences', 'create') && isEnabled(FF_SEQUENCES);\n const showBrackets = isEnabled(FF_BRACKETS) && ['Playoffs', 'Tournament', 'Cup'].includes(schedule?.type)\n\n const handleOpen = e => {\n setAnchor(e.currentTarget);\n }\n const handleClose = () => {\n setAnchor(null);\n }\n\n if (hideAddGame && hideAddDraft) return null;\n if (!canCreateDrafts && !canCreateGames) return null;\n\n return <>\n \n \n {!hideAddDraft && canCreateDrafts && {translate('resources.draftGames.name', 2)}}\n {!hideAddDraft && canCreateDrafts && }\n {!hideAddDraft && canCreateDrafts && }\n {!hideAddDraft && canCreateDrafts && }\n\n {!hideAddGame && canCreateGames && {translate('resources.games.name', 2)}}\n {!hideAddGame && canCreateGames && showBrackets && }\n {!hideAddGame && canCreateGames && }\n\n {!hideAddGame && canCreateSequences && {translate('resources.schedulesequences.name', 2)}}\n {!hideAddGame && canCreateSequences && }\n \n \n}\n\n\n","import React, { useEffect, useMemo, useState } from \"react\";\nimport { ListContextProvider, useDataProvider, useResourceContext } from \"react-admin\";\nimport { useForm } from \"react-final-form\";\n\nimport { ListView } from \"../cards/ListCard\";\nimport { useList } from \"../ra/useList\";\n\nexport const SelectableListView = ({\n children,\n filter,\n sort,\n localSort,\n localFilter,\n localFilterCallback = () => true,\n initialSelectAll = false,\n ...props\n}) => {\n const dataProvider = useDataProvider();\n const resource = useResourceContext();\n const { change } = useForm();\n const [ loaded, setLoaded ] = useState(false);\n const [ loading, setLoading ] = useState(false);\n const [ records, setRecords ] = useState([]);\n\n const initialSelection = useMemo(() => {\n if (!initialSelectAll) return\n return records?.map(record => record.id)\n }, [ records, initialSelectAll ])\n\n const listContext = useList({\n data: records,\n resource: resource.toLocaleLowerCase(), // resource has to be lowercase for team filtering to work correctly\n loaded,\n loading,\n page: 1,\n perPage: 25,\n sort: localSort,\n filter: localFilter,\n initialSelection,\n })\n\n useEffect(() => {\n change('selectedIds', listContext?.selectedIds || [])\n }, [ listContext?.selectedIds, change ])\n\n useEffect(() => {\n if (loading || loaded) return\n setLoading(true);\n\n dataProvider.getList(resource, {\n pagination: { page: 1, perPage: 999 },\n sort,\n filter,\n })\n .then(res => res.data)\n .then(records => records.filter(localFilterCallback))\n .then(setRecords)\n .catch(() => {\n setRecords([])\n })\n .finally(() => {\n setLoaded(true);\n setLoading(false);\n })\n }, [ dataProvider, loading, loaded, resource, sort, filter, localFilterCallback ])\n\n return \n \n {children}\n \n \n}\n","import React, { Fragment, useMemo, useState } from \"react\";\nimport { RecordContextProvider, ResourceContextProvider, SimpleForm, useNotify, useRefresh, useTranslate } from \"react-admin\";\nimport { Button, Dialog, DialogContent, DialogContentText, DialogTitle, useMediaQuery } from \"@material-ui/core\";\nimport { PersonAddOutlined } from \"@material-ui/icons\";\n\nimport { apiClient } from \"../../http\";\nimport { DialogFormToolbar } from \"../../common/dialogs/DialogForm\";\nimport { SelectableListView } from \"../../common/dialogs/SelectableListView\";\nimport { DateInput } from \"../../common/inputs/DateInput\";\nimport { useSeason } from \"../../common/inputs/SeasonSelector\";\nimport { EventViewSettingsContext, EventViewSettingsMenu, GAME_LIST_FILTERS, useEventSort, useReverseHomeAway } from \"../events/EventViewSettings\";\nimport { BaseEventView } from \"../events/EventView\";\nimport { TeamInput } from \"../teams/TeamInput\";\n\nconst inputProps = {\n variant: 'outlined',\n}\n\nexport const gameFilter = (office, schedule) => {\n const isLeague = ['League', 'Tournament', 'Cup'].includes(office?.type)\n const filter = {}\n\n if (office && isLeague) {\n filter.scheduleOffices = office.id\n } else if (office && !isLeague) {\n filter.or = [{ scheduleOffices: office.id }, { homeTeamOffices: office.id }]\n } else if (schedule) {\n filter.scheduleId = schedule.id\n }\n\n return filter;\n}\n\n\nconst validate = ({ selectedIds = [] }) => {\n const errors = {}\n\n if (!selectedIds.length) {\n errors.selectedIds = 'ra.validation.required'\n }\n\n return errors\n}\n\nconst EventViewSettingsProvider = ({ ...props }) => {\n const groupDates = useState(true);\n const groupArenas = useState(false);\n const groupRounds = useState(false);\n const assignments = useState(false);\n const gameInfo = useState(false);\n const flags = useState(false);\n const reverseHomeAway = useReverseHomeAway()\n const calendar = useState(false);\n const teamEvents = useState(false);\n const slots = useState(true);\n const awaySlots = useState(true);\n const teamNames = useState(false);\n const availabilities = useState(false);\n const surfaceSizes = useState([]);\n const gameListFilter = useState(GAME_LIST_FILTERS.ALL_GAMES);\n const value = useMemo(() => ({\n calendar,\n teamEvents,\n slots,\n awaySlots,\n teamNames,\n availabilities,\n gameInfo,\n flags,\n reverseHomeAway,\n groupDates,\n groupArenas,\n groupRounds,\n assignments,\n surfaceSizes,\n gameListFilter\n }), [ calendar, teamEvents, slots, awaySlots, availabilities, gameInfo, flags, reverseHomeAway, groupDates, groupArenas, groupRounds, assignments, surfaceSizes, gameListFilter, teamNames ])\n return \n}\n\nconst ShareDraftGameForm = ({ office, schedule, ...props }) => {\n const localSort = useEventSort();\n const seasonId = useSeason();\n\n const filters = [\n ,\n ,\n \n ]\n const actions = [\n \n ]\n\n // query only non shared draft games\n const filter = { ...gameFilter(office, schedule), seasonId, pastEvents: true, isShared: false, isPublished: false }\n\n // filter out draft games with unallocated teams from the list\n const localFilterCallback = draftGame => {\n return draftGame.homeTeamId && draftGame.awayTeamId\n }\n\n return \n \n true}\n hasBulkActions\n disableCalendar\n disableAssignments\n hideStatus\n component={Fragment}\n />\n \n \n}\n\nexport const ShareDraftGameDialog = ({ isOpen, onClose, office, schedule, ...props }) => {\n const translate = useTranslate();\n const fullScreen = useMediaQuery(theme => theme.breakpoints.down('xs'));\n const refresh = useRefresh();\n const notify = useNotify();\n\n const onSubmit = ({ selectedIds } = {}) => {\n const url = office ? `/offices/${office.id}/share` : `/schedules/${schedule.id}/share`;\n apiClient(url, {\n method: 'POST',\n data: {\n draftGameIds: selectedIds,\n },\n })\n .then(({ data }) => {\n const count = data?.count || 0;\n refresh();\n notify(translate('resources.draftGames.notifications.shared_games', count))\n })\n .catch(err => {\n console.log(err) // eslint-disable-line no-console\n notify(translate('resources.draftGames.notifications.shared_games_error', selectedIds.length))\n })\n onClose();\n }\n\n return \n {translate('resources.draftGames.labels.share')}\n \n \n {translate('resources.draftGames.messages.share_help')}\n \n \n \n \n \n } />\n \n \n \n \n \n}\n\nexport const ShareDraftGameAction = ({ size = 'small', ...props }) => {\n const translate = useTranslate();\n const [ isOpen, setOpen ] = useState(false);\n\n const handleClick = () => {\n setOpen(true);\n }\n\n return <>\n \n {isOpen && setOpen(false)} {...props} />}\n \n}\n","import React, { Fragment, useMemo, useState } from \"react\";\nimport { BooleanInput, RecordContextProvider, ResourceContextProvider, SimpleForm, useListContext, useNotify, useRefresh, useTranslate } from \"react-admin\";\nimport { Button, Dialog, DialogContent, DialogContentText, DialogTitle, useMediaQuery } from \"@material-ui/core\";\nimport { DoneAll } from \"@material-ui/icons\";\n\nimport { apiClient } from \"../../http\";\nimport { DialogFormToolbar } from \"../../common/dialogs/DialogForm\";\nimport { SelectableListView } from \"../../common/dialogs/SelectableListView\";\nimport ConfirmDialog from \"../../common/dialogs/ConfirmDialog\";\nimport { useSeason } from \"../../common/inputs/SeasonSelector\";\nimport { DateInput } from \"../../common/inputs/DateInput\";\nimport { EventViewSettingsContext, EventViewSettingsMenu, GAME_LIST_FILTERS, useEventSort, useReverseHomeAway } from \"../events/EventViewSettings\";\nimport { BaseEventView } from \"../events/EventView\";\nimport { TeamInput } from \"../teams/TeamInput\";\nimport { gameFilter } from \"./DraftGameShareModal\";\nimport ScheduleSequenceAlert from \"../schedulesequences/ScheduleSequenceAlert\";\nimport ScheduleSequenceError from \"../schedulesequences/ScheduleSequenceError\";\n\nconst validate = ({ selectedIds = [] }) => {\n const errors = {}\n\n if (!selectedIds.length) {\n errors.selectedIds = 'ra.validation.required'\n }\n\n return errors\n}\n\nconst EventViewSettingsProvider = (props) => {\n const groupDates = useState(true);\n const groupArenas = useState(false);\n const groupRounds = useState(false);\n const assignments = useState(false);\n const gameInfo = useState(false);\n const flags = useState(false);\n const reverseHomeAway = useReverseHomeAway()\n const calendar = useState(false);\n const teamEvents = useState(false);\n const slots = useState(true);\n const availabilities = useState(false);\n const surfaceSizes = useState([]);\n const gameListFilter = useState(GAME_LIST_FILTERS.ALL_GAMES);\n const value = useMemo(() => ({\n calendar,\n teamEvents,\n slots,\n availabilities,\n gameInfo,\n flags,\n reverseHomeAway,\n groupDates,\n groupArenas,\n groupRounds,\n assignments,\n surfaceSizes,\n gameListFilter\n }), [ calendar, teamEvents, slots, availabilities, gameInfo, flags, reverseHomeAway, groupDates, groupArenas, groupRounds, assignments, surfaceSizes, gameListFilter ])\n return \n}\n\nconst PublishDraftGameForm = ({ schedule, office, ...props }) => {\n const localSort = useEventSort();\n const seasonId = useSeason();\n\n const filters = [\n ,\n ,\n ,\n ,\n ]\n const actions = [\n \n ]\n\n // query only non published draft games and non draft updates\n const filter = { ...gameFilter(office, schedule), seasonId, pastEvents: true, isPublished: false, updatedGameId: null }\n\n // filter out unslotted draft games from the list\n const localFilterCallback = draftGame => {\n return draftGame.arenaId && draftGame.startTime && draftGame.endTime\n }\n\n return \n \n true}\n hasBulkActions\n disableCalendar\n disableAssignments\n hideStatus\n component={Fragment}\n />\n \n \n}\n\nexport const PublishDraftGameDialog = ({ isOpen, onClose, schedule, office }) => {\n const translate = useTranslate();\n const fullScreen = useMediaQuery(theme => theme.breakpoints.down('xs'));\n const refresh = useRefresh();\n const notify = useNotify();\n const { data } = useListContext();\n const [confirmOpen, setConfirmOpen] = useState(false);\n const [confirmedSelectedIds, setConfirmedSelectedIds] = useState([]);\n\n const handleConfirmClose = () => {\n setConfirmOpen(false);\n };\n\n const handleConfirm = () => {\n setConfirmOpen(false);\n publishDraftGames(confirmedSelectedIds);\n };\n\n const onSubmit = ({ selectedIds } = {}) => {\n const hasConflicts = selectedIds.some(id => data[id]?.status === 'Conflict');\n if (hasConflicts) {\n setConfirmedSelectedIds(selectedIds);\n setConfirmOpen(true);\n } else {\n publishDraftGames(selectedIds);\n }\n };\n\n const publishDraftGames = (selectedIds) => {\n const url = office ? `/offices/${office.id}/publish` : `/schedules/${schedule.id}/publish`;\n apiClient(url, {\n method: 'POST',\n data: {\n draftGameIds: selectedIds\n },\n })\n .then(({ data }) => {\n const count = data?.count || 0;\n const failed = data?.failed || 0;\n const invalid = data?.invalid || 0;\n\n refresh();\n notify(translate('resources.draftGames.notifications.published_games', count))\n\n if (failed) {\n notify(translate('resources.draftGames.notifications.publish_failed', failed), 'error');\n }\n if (invalid) {\n notify(translate('resources.draftGames.notifications.invalid_games', invalid), 'error')\n }\n })\n .catch(err => {\n const name = err?.response?.data?.error?.name\n if (['missing_sequence', 'sequence_exhausted'].includes(name)) {\n const errorMsg = translate(`resources.draftGames.notifications.${name}`)\n notify(, 'error')\n } else {\n notify(translate('resources.draftGames.notifications.published_games_error', selectedIds.length), 'error')\n }\n })\n onClose()\n };\n\n return <>\n \n {translate('resources.draftGames.labels.publish')}\n \n \n {translate('resources.draftGames.messages.publish_help')}\n \n \n \n \n \n \n } />\n \n \n \n \n \n \n \n}\n\nexport const PublishDraftGamesAction = ({ size = \"small\", ...props }) => {\n const translate = useTranslate();\n const [ isOpen, setOpen ] = useState(false);\n\n const handleClick = () => {\n setOpen(true);\n }\n\n return <>\n \n {isOpen && setOpen(false)} {...props} />}\n \n}\n","import React from 'react';\nimport { BooleanInput, TextInput, useTranslate } from \"react-admin\";\nimport { FormControl, MenuItem, Select, makeStyles } from \"@material-ui/core\";\n\nimport { GAME_OFFICE_TYPES } from '@hisports/common/src/constants';\n\nimport { isAuthorized } from '../../Authorize';\nimport { InlineDateInput } from \"../../inputs/DateInput\";\nimport { GameStatusEnumInput } from '../../inputs/EnumInputs';\nimport { CALENDAR_VIEWS, GAME_LIST_FILTERS, useGameListFilter } from '../../../resources/events/EventViewSettings';\nimport { OfficeInput } from '../../../resources/offices/OfficeInput';\nimport { CategoryInput } from '../../../resources/categories/CategoryInput';\nimport { TeamInput } from '../../../resources/teams/TeamInput';\nimport { GroupInput, hasGroups } from '../../../resources/groups/GroupInput';\nimport { SurfaceInput } from '../../../resources/surfaces/SurfaceInput';\n\nconst filterProps = {\n variant: 'outlined',\n options: {\n helperText: undefined,\n style: { marginRight: 0 }\n },\n helperText: false,\n margin: 'normal',\n}\n\nconst multipleProps = {\n multiple: true,\n allowEmpty: false,\n}\n\nconst allOfficeFilter = {\n type: { neq: 'Historical' }\n}\n\nconst localOfficeFilter = {\n type: { nin: [...GAME_OFFICE_TYPES, 'Historical'] }\n}\n\nconst useStyles = makeStyles(theme => ({\n listFilterDiv: {\n flexGrow: 1,\n padding: theme.spacing(1.5)\n },\n listFilter: {\n width: '100%',\n '& .MuiSelect-select:focus': {\n backgroundColor: 'white',\n }\n },\n}))\n\nexport const getGameListFilters = (office, schedule, groups, scopes, seasonId, calendarView) => {\n const canListTeams = isAuthorized(scopes, 'teams', 'list');\n const canListOffices = isAuthorized(scopes, 'offices', 'show');\n const canListSurfaces = isAuthorized(scopes, 'surfaces', 'list');\n\n const scheduleId = schedule?.id;\n const scheduleType = schedule?.type;\n const officeId = schedule?.officeId || office?.id;\n const categoryIds = schedule && [schedule.categoryId];\n const scheduleHasGroups = hasGroups(groups, schedule?.officeId, scheduleType)\n const teamFilter = {\n seasonId,\n ...(schedule ? { scheduleId } : {}),\n ...(office && !['League', 'Tournament', 'Cup'].includes(office?.type) ? { officeId } : {})\n }\n\n if (calendarView === CALENDAR_VIEWS.SEASON) {\n return [\n canListOffices && ,\n canListOffices && ,\n ,\n ].filter(Boolean)\n }\n\n return [\n ,\n ,\n canListSurfaces && ,\n canListTeams && ,\n office && ,\n schedule && scheduleHasGroups && ,\n ,\n canListTeams && ,\n canListTeams && ,\n canListOffices && office && ,\n canListOffices && ,\n canListOffices && ,\n canListOffices && ,\n canListOffices && ,\n ,\n ,\n ].filter(Boolean)\n}\n\nexport const GameListFilterInput = props => {\n const [ gameListFilter, setGameListFilter ] = useGameListFilter()\n const translate = useTranslate();\n const classes = useStyles();\n\n const handleChange = e => {\n setGameListFilter(e.target.value);\n }\n\n return
\n \n \n {Object.values(GAME_LIST_FILTERS).map(FILTER => {\n return {translate(`components.calendar.values.game_list_filters.${FILTER}`)}\n })}\n \n \n
\n}\n","import React, { memo, useEffect, useMemo, useState } from 'react';\nimport { ListContextProvider, RecordContextProvider, useDataProvider, useListContext, useRecordContext, useTranslate } from 'react-admin';\nimport { useSelector } from 'react-redux';\nimport { Button, Checkbox, Dialog, DialogActions, DialogContent, DialogContentText, DialogTitle, FormControlLabel, FormHelperText, Grid, IconButton, Tooltip, makeStyles } from '@material-ui/core';\nimport { Edit, EventBusy } from '@material-ui/icons';\n\nimport { isEmpty } from '@hisports/parsers';\n\nimport { useScopes } from '../../../http';\nimport { isAuthorized } from '../../Authorize';\nimport { useList } from '../../ra/useList';\nimport { useSeason } from '../../inputs/SeasonSelector';\nimport ListCard from '../../cards/ListCard';\n\nimport { EventReferenceManyField } from '../../../resources/events/EventReferenceField';\nimport EventCalendar from '../../../resources/events/EventCalendar';\nimport { CALENDAR_VIEWS, EventViewSettingsContext, EventViewSettingsMenu, GAME_LIST_FILTERS, useCalendarView, useDatelessView, useGameListFilter, useReverseHomeAway, useShowAwaySlots, useShowCalendar, useShowGameInfo } from '../../../resources/events/EventViewSettings';\nimport { EditGameDialog } from '../../../resources/games/GameModal';\nimport { ShareDraftGameAction } from '../../../resources/draftgames/DraftGameShareModal';\nimport { PublishDraftGamesAction } from '../../../resources/draftgames/DraftGamesPublishModal';\nimport { EditDraftGameDialog } from '../../../resources/draftgames/DraftGameModal';\nimport { DraggableEventRow, ScheduleButton, UnscheduleButton as RemoveDate, useLimitDateChange } from '../../../resources/events/EventGroupedGrid';\nimport DraggableGameList from '../../../resources/drafts/draggables/DraggableGameList';\nimport DraggableEvent from '../../../resources/drafts/draggables/DraggableEvent';\nimport ScheduleSequenceAlert from '../../../resources/schedulesequences/ScheduleSequenceAlert';\nimport { usePrevious } from '../../hooks/hooks';\n\nimport { SchedulingProvider, useSchedulingContext } from '../SchedulingContext';\nimport { GameListFilterInput, getGameListFilters } from './GameListFilters';\nimport { CalendarProvider } from '../CalendarContext';\nimport { DragProvider } from '../DragContext';\nimport { isDraft, isGame } from '../EventDetails';\nimport { getResourceByType } from '../Events';\nimport { AddMenu } from './AddMenu';\n\nconst useStyles = makeStyles(theme => ({\n gameList: {\n borderRadius: 0,\n height: '100%',\n },\n selectedGameActions: {\n display: 'flex',\n justifyContent: 'flex-end',\n padding: theme.spacing(1),\n },\n table: {\n width: '100%',\n backgroundColor: 'lightgrey'\n }\n}))\n\nconst getFilter = (office, seasonId) => {\n if (!office) return;\n\n return {\n seasonId,\n ...(['League', 'Tournament', 'Cup'].includes(office.type) ? { scheduleOffices: office.id } : { or: [{ scheduleOffices: office.id }, { homeTeamOffices: office.id, isShared: true }] })\n }\n}\n\nconst UnscheduleDialog = ({ open, setOpen, handleConfirm }) => {\n const translate = useTranslate();\n const [ view ] = useCalendarView();\n const [ removeDate, setRemoveDate ] = useState(view === CALENDAR_VIEWS.SEASON);\n const disableDateChange = useLimitDateChange();\n\n const onClose = (e) => {\n e.stopPropagation();\n setOpen(false);\n }\n\n const handleCheckboxChange = e => {\n const checked = e.target.checked;\n setRemoveDate(checked);\n }\n\n return \n {translate('components.calendar.labels.unschedule')}\n \n \n {translate('components.calendar.messages.remove_time_field')}\n \n \n }\n />\n {disableDateChange && {translate('resources.games.alerts.no_change_date_permission')}}\n \n \n \n \n \n \n \n}\n\nconst EventViewSettingsProvider = ({ ...props }) => {\n const groupDates = useState(true);\n const groupArenas = useState(false);\n const groupRounds = useState(false);\n const assignments = useState(false);\n const gameInfo = useState(false);\n const flags = useState(false);\n const reverseHomeAway = useReverseHomeAway()\n const calendar = useState(false);\n const calendarView = useCalendarView()\n const teamEvents = useState(false);\n const slots = useState(true);\n const teamNames = useState(false)\n const officeNames = useState(false)\n const condensedView = useState(true)\n const availabilities = useState(false);\n const surfaceSizes = useState([]);\n const gameListFilter = useState(GAME_LIST_FILTERS.ALL_GAMES);\n const value = useMemo(() => ({\n calendar,\n calendarView,\n teamEvents,\n slots,\n teamNames,\n officeNames,\n condensedView,\n availabilities,\n gameInfo,\n flags,\n reverseHomeAway,\n groupDates,\n groupArenas,\n groupRounds,\n assignments,\n surfaceSizes,\n gameListFilter\n }), [ calendar, calendarView, teamEvents, slots, availabilities, gameInfo, flags, reverseHomeAway, groupDates, groupArenas, groupRounds, assignments, surfaceSizes, gameListFilter, teamNames, officeNames, condensedView ])\n return \n}\n\nexport const UnscheduleButton = ({ setUnscheduleGame, ...props }) => {\n const translate = useTranslate();\n const game = useRecordContext();\n\n if (isGame(game)) return null;\n\n const onClick = (e) => {\n e.stopPropagation();\n setUnscheduleGame(game)\n }\n\n return \n \n \n \n \n}\n\nconst EditButton = ({ setGame, ...props }) => {\n const game = useRecordContext();\n const translate = useTranslate();\n\n const canEdit = isAuthorized(game, 'games', 'edit');\n if (!canEdit) return null;\n\n const onClick = (e) => {\n e.stopPropagation();\n setGame(game)\n }\n\n return \n \n \n \n \n}\n\nconst Calendar = memo(({ setEditGame, setUnscheduleGame, ...props }) => {\n const { data, ids, ...listContext } = useListContext()\n\n const games = useMemo(() => {\n return ids.map(id => data[id])\n }, [data, ids])\n\n const contextValue = useMemo(() => ({\n ...listContext,\n data: games,\n ids: games.map(game => game.id),\n loaded: true,\n loading: false,\n page: 1,\n perPage: 99999\n }), [games, listContext])\n\n const context = useList(contextValue)\n\n const popoverActions = useMemo(() => [\n ,\n \n ], [setUnscheduleGame, setEditGame]);\n\n return \n \n \n \n \n})\n\nconst SelectedGame = memo(({ setEditGame, setUnscheduleGame, ...props }) => {\n const { selectedGame } = useSchedulingContext();\n const classes = useStyles()\n\n if (!selectedGame) return null;\n\n const isScheduled = selectedGame.startTime != null && selectedGame.endTime != null && selectedGame.arenaId != null;\n const showCalendar = !isScheduled && !selectedGame?.date;\n const showClear = selectedGame?.date && !isScheduled\n\n const actions = [\n showCalendar && ,\n showClear && ,\n isScheduled && ,\n ,\n ].filter(Boolean)\n\n return \n \n \n
\n
\n})\n\nconst GameList = memo(({ setEditGame, setUnscheduleGame, showAdd, ...props }) => {\n const upperListContext = useListContext()\n const { selectedGame, setSelectedGame } = useSchedulingContext();\n const [ view, setView ] = useCalendarView();\n const previousView = usePrevious(view);\n const [ gameListFilter, setGameListFilter ] = useGameListFilter()\n const classes = useStyles();\n\n const isSeasonView = view === CALENDAR_VIEWS.SEASON;\n const wasSeasonView = previousView === CALENDAR_VIEWS.SEASON;\n\n const { data, ids } = useMemo(() => {\n return {\n data: upperListContext.ids.map(id => upperListContext.data[id]),\n ids: upperListContext.ids,\n }\n }, [upperListContext.ids, upperListContext.data])\n\n useEffect(() => {\n if (!wasSeasonView && isSeasonView) {\n setGameListFilter(GAME_LIST_FILTERS.DRAFT_GAMES_NO_DATES)\n }\n if (wasSeasonView && !isSeasonView) {\n setGameListFilter(GAME_LIST_FILTERS.ALL_GAMES)\n }\n }, [wasSeasonView, isSeasonView, setGameListFilter])\n\n useEffect(() => {\n if (!wasSeasonView && isSeasonView && !isEmpty(upperListContext.filterValues)) {\n // clear all filters when entering season view\n upperListContext.setFilters({})\n }\n }, [wasSeasonView, isSeasonView, upperListContext])\n\n const filter = useMemo(() => {\n const listFilter = {}\n switch (gameListFilter) {\n case GAME_LIST_FILTERS.ALL_DRAFT_GAMES:\n listFilter.type = ['Draft', 'Draft Game']\n break;\n case GAME_LIST_FILTERS.DRAFT_GAMES_NO_DATES:\n listFilter.type = ['Draft', 'Draft Game']\n listFilter.date = null\n break;\n case GAME_LIST_FILTERS.DRAFT_GAMES_NO_TIMES:\n listFilter.type = ['Draft', 'Draft Game']\n listFilter.missingStartTime = true\n break;\n case GAME_LIST_FILTERS.ALL_PUBLISHED_GAMES:\n listFilter.type = 'Game'\n }\n\n return {\n ...upperListContext.filterValues,\n ...listFilter\n }\n }, [ gameListFilter, upperListContext.filterValues ])\n\n const contextValue = useMemo(() => ({\n data,\n ids,\n loaded: true,\n loading: false,\n perPage: 50,\n sort: upperListContext.currentSort,\n filter,\n }), [data, filter, ids, upperListContext.currentSort])\n\n const context = useList(contextValue)\n\n const handleRowSelect = useMemo(() => (id, basePath, game) => {\n if (selectedGame?.id === game?.id) {\n // unselecting the selected row\n setSelectedGame(null)\n if (view === CALENDAR_VIEWS.DAY) {\n setView(CALENDAR_VIEWS.MONTH)\n }\n } else {\n // selecting a new row\n setSelectedGame(game)\n }\n }, [selectedGame?.id, setSelectedGame, setView, view])\n\n const actions = useMemo(() => [\n \n ], [])\n\n const filters = useMemo(() => [\n \n ], [])\n\n\n const listViewProps = useMemo(() => {\n const headerRow = \n return {\n filters,\n actions,\n headerRow,\n fill: true,\n noResultsText: false,\n addButton: showAdd ? : null,\n addPosition: false,\n rowsPerPageOptions: false,\n compactToolbar: true\n }\n }, [actions, filters, handleRowSelect, setEditGame, setUnscheduleGame, showAdd])\n\n return \n \n \n})\n\nconst View = memo((props) => {\n const { onSave, setSelectedGame, setRefreshAvailability } = useSchedulingContext()\n const [ view ] = useCalendarView();\n\n const [ unscheduleGame, setUnscheduleGame ] = useState(false);\n const [ editGame, setEditGame ] = useState(false);\n\n const handleUnschedule = async (removeDate) => {\n if (!unscheduleGame) return;\n\n const newGame = { ...unscheduleGame, startTime: null, endTime: null, surfaceId: null, arenaId: null }\n\n if (removeDate) {\n newGame.date = null;\n }\n\n await onSave(newGame);\n\n setSelectedGame(newGame)\n setUnscheduleGame(false)\n if (view === CALENDAR_VIEWS.SEASON) {\n setRefreshAvailability(true)\n }\n }\n\n const onSubmitSuccess = (event) => {\n setSelectedGame(event)\n if (view === CALENDAR_VIEWS.SEASON) {\n setRefreshAvailability(true)\n }\n }\n\n return <>\n \n \n \n \n \n \n \n \n \n \n {!!unscheduleGame && }\n setEditGame(false)} onSuccess={onSubmitSuccess} skipRefresh />\n setEditGame(false)} onSuccess={onSubmitSuccess} skipRefresh />\n \n})\n\nexport default memo(({ office, schedule, scheduleSettings, setGameId, ...props }) => {\n const scopes = useScopes();\n const seasonId = useSeason();\n const [ showCalendar, setShowCalendar ] = useShowCalendar()\n const [ calendarView, setCalendarView ] = useCalendarView();\n const [ datelessView, setDateLessView ] = useDatelessView();\n const [ showGameInfo, setShowGameInfo ] = useShowGameInfo();\n const [ showAwaySlots, setShowAwaySlots ] = useShowAwaySlots()\n const dataProvider = useDataProvider();\n const groupsData = useSelector(state => state.admin.resources.groups.data);\n\n const officeId = office?.id || schedule?.officeId;\n const scheduleId = schedule?.id;\n const surfaceOfficeId = scheduleSettings?.surfaceOfficeId\n\n const target = office ? 'officeId' : 'scheduleId'\n\n const canPublishDrafts = target === 'officeId' ? false : isAuthorized(schedule, 'schedules', 'publish');\n const canShareDrafts = target === 'officeId' ? isAuthorized(office, 'offices', 'share') : isAuthorized(schedule, 'schedules', 'share');\n\n const onSave = async (event = {}) => {\n const { id, resource: eventResource, ...rest } = event || {};\n await dataProvider.update(getResourceByType(event) || eventResource, { id, data: { ...rest } })\n }\n\n useEffect(() => {\n // on mount\n setShowCalendar(true)\n setShowGameInfo(false)\n setCalendarView(target === 'scheduleId' ? datelessView : CALENDAR_VIEWS.MONTH)\n // on unmount\n return () => setShowCalendar(false)\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n useEffect(() => {\n if (![CALENDAR_VIEWS.MONTH, CALENDAR_VIEWS.SEASON].includes(calendarView)) return;\n\n if (calendarView === CALENDAR_VIEWS.SEASON) {\n setShowAwaySlots(false)\n }\n\n setDateLessView(calendarView)\n }, [calendarView, setDateLessView, setShowAwaySlots])\n\n const showAdd = target === 'scheduleId';\n\n const actions = useMemo(() => [\n canShareDrafts && ,\n canPublishDrafts && ,\n \n ].filter(Boolean), [calendarView, canPublishDrafts, canShareDrafts, office, schedule, surfaceOfficeId, target])\n\n const filter = getFilter(office, seasonId);\n const filters = useMemo(() => {\n return getGameListFilters(office, schedule, groupsData, scopes, seasonId, calendarView)\n }, [groupsData, office, schedule, scopes, seasonId, calendarView])\n\n return <>\n {target === 'scheduleId' && }\n : null}\n filters={filters}\n filter={filter}\n actions={actions}\n noResultsText={false}\n sort={{ field: ['date', 'startTime', 'number', 'id'], order: ['ASC', 'ASC', 'ASC', 'ASC'] }}\n rowsPerPageOptions={false}\n perPage={99999}\n pagination={null}\n >\n \n \n \n \n \n \n \n})\n","import React from 'react';\nimport { CardActions, Typography, makeStyles } from '@material-ui/core';\n\nconst useStyles = makeStyles(theme => ({\n cardAction: {\n zIndex: 2,\n display: 'flex',\n padding: theme.spacing(2, 1),\n flexWrap: 'wrap',\n alignItems: 'flex-start',\n justifyContent: 'flex-end',\n },\n title: {\n flex: 1,\n textOverflow: 'ellipsis',\n whiteSpace: 'nowrap',\n overflow: 'hidden',\n }\n}))\n\nexport const TopToolbar = ({ children, ...props }) => {\n const classes = useStyles();\n return \n \n {children}\n \n}\n","import React, { useState } from 'react';\nimport { useTranslate } from 'react-admin';\nimport { Card, CardHeader as MuiCardHeader, CardActions, Divider, IconButton, styled, makeStyles } from '@material-ui/core'\nimport { ExpandLess, ExpandMore } from '@material-ui/icons';\n\nconst CardHeader = styled(MuiCardHeader)(({ collapsable }) => ({\n cursor: collapsable ? 'pointer' : undefined,\n}))\n\nconst Collapsable = styled('span')(({ open }) => ({\n display: !open ? 'none' : '',\n}))\n\nconst useStyles = makeStyles(theme => ({\n smallIcons: {\n marginTop: '-3px', // same as small IconButton's padding\n marginright: '-3px', // same as small IconButton's padding\n },\n actions: {\n flexWrap: 'wrap',\n }\n}));\n\nexport default ({\n title,\n subtitle,\n headerAction,\n actions = [],\n collapsable = false,\n collapseActions = false,\n icon,\n smallActionBtns = false,\n component: Component = Card,\n componentProps = {},\n children,\n}) => {\n const classes = useStyles();\n const translate = useTranslate();\n const [ open, setOpen ] = useState(false);\n const [ loaded, setLoaded ] = useState(!collapsable);\n\n const onToggle = () => {\n if (!collapsable) return;\n setLoaded(true);\n setOpen(open => !open);\n }\n\n let cardActions = actions;\n if (cardActions && Array.isArray(cardActions)) {\n cardActions = cardActions.filter(Boolean);\n }\n\n const canCollapseActions = collapsable && collapseActions && !open;\n const showActions = cardActions && (!Array.isArray(cardActions) || cardActions.length > 0) && !canCollapseActions;\n return \n {title && \n {(open || !collapsable) && headerAction}\n {collapsable && {open ? : }}\n }\n titleTypographyProps={{ variant: \"subtitle2\", gutterBottom: false }}\n subheaderTypographyProps={{ variant: \"body2\", gutterBottom: false }}\n collapsable={collapsable}\n onClick={onToggle}\n />}\n {title && }\n {loaded && \n {children}\n }\n {showActions && {cardActions}}\n \n}\n","import React, { Fragment, useState } from 'react';\nimport { BulkActionsToolbar, FilterButton, ListBase, ListContextProvider, ListToolbar, Pagination, ResourceContextProvider, TopToolbar, useListContext, useRecordContext, useReferenceManyFieldController, useResourceContext, useTranslate } from 'react-admin';\nimport { Card, CardHeader as MuiCardHeader, Divider, styled, IconButton, Menu, MenuItem, makeStyles, Dialog, useMediaQuery } from '@material-ui/core';\nimport { Close, ExpandLess, ExpandMore, MoreVert, ZoomOutMap } from '@material-ui/icons';\n\nimport NoResults from '../NoResults';\n\nconst CardHeader = styled(MuiCardHeader)({\n cursor: 'pointer',\n})\n\nconst CardContentInner = styled('div')({\n padding: '0 8px',\n})\n\nconst Actions = styled('div')({\n display: 'flex',\n justifyContent: 'space-between',\n alignItems: 'center',\n margin: '2px 8px',\n})\n\nconst Collapsable = styled('span')(({ open }) => ({\n display: !open ? 'none' : '',\n}))\n\nconst ActionsMenu = ({ actions }) => {\n const [ anchor, setAnchor ] = useState(null)\n const toggle = e => setAnchor(anchor => anchor ? !anchor : e.currentTarget)\n\n if (!actions?.length) return null;\n return <>\n \n setAnchor(null)}\n >\n {actions.map(action => {action})}\n \n \n}\n\nconst useActionStyles = makeStyles(() => ({\n root: {\n '@media (max-width: 900px)': {\n width: 'calc(100% - 16px)',\n }\n }\n}))\n\nexport const ActionsToolbar = ({ addButton, actions = [], filters }) => {\n const classes = useActionStyles();\n // TODO: figure out how to deal with add buttons + menu item nicely\n // const defaultActions = actions?.filter(action => action?.props?.alwaysOn);\n // const menuActions = actions?.filter(action => !action?.props?.alwaysOn);\n\n const renderActions = Array.isArray(actions) ? actions.map(action =>
{action}
) :
{actions}
\n\n // having a button as a flex-child makes them missaligned wih the rest. Thats why we use empty divs\n return \n \n
{addButton && React.cloneElement(addButton, { ...addButton.props, size: 'small' })}
\n {renderActions}\n
\n}\n\nconst useListStyles = makeStyles(theme => {\n return ({\n toolbar: {\n lineHeight: ({ filters, compactToolbar }) => compactToolbar ? null : `${theme.spacing(filters?.length ? 7 : 6)}px`,\n minHeight: ({ filters }) => theme.spacing(filters?.length ? 7 : 6),\n [theme.breakpoints.down('xs')]: {\n maxWidth: 'calc(100vw - 32px)',\n flexDirection: 'column',\n paddingLeft: theme.spacing(1),\n },\n '& .MuiFormControl-marginNormal': {\n marginBlock: theme.spacing(1), // vertically align formControls\n },\n '& .MuiFormControl-marginDense': {\n marginBlock: theme.spacing(.5), // vertically align formControls\n }\n },\n });\n})\n\nexport const ListView = ({\n filters,\n fill,\n addButton,\n addPosition = 'header',\n actions,\n headerRow,\n alert,\n rowsPerPageOptions,\n labelDisplayedRows,\n noResultsText,\n pagination = ,\n bulkActionButtons,\n hasBulkActions = false,\n open,\n children,\n compactToolbar = false,\n}) => {\n const classes = useListStyles({ filters, fill, compactToolbar })\n const { total, loaded, loading, perPage } = useListContext();\n\n const showBulkActions = bulkActionButtons !== false && React.isValidElement(bulkActionButtons)\n const actionsToolbar = \n\n const noResultsFound = loaded && total <= 0;\n const showToolbar = (filters?.length > 0 || (addButton && addPosition === 'header' && !noResultsFound) || actions?.length > 0)\n const showHeaderRow = headerRow !== false && React.isValidElement(headerRow)\n const showFooter = loaded && (total > perPage || (addButton && addPosition === 'footer'))\n\n return \n {showToolbar && \n \n }\n {showToolbar && }\n {showHeaderRow && headerRow}\n {showHeaderRow && }\n {alert}\n {showBulkActions !== false && (\n \n {bulkActionButtons}\n \n )}\n {children && React.cloneElement(children, {\n hasBulkActions: hasBulkActions || showBulkActions,\n loading,\n loaded,\n ...children.props,\n })}\n {noResultsFound\n ? \n : showFooter\n ? \n {addPosition === 'footer' && addButton}\n {!noResultsFound ? pagination : null}\n \n : null\n }\n \n}\n\nconst ReferenceManyBase = ({ children, ...props }) => {\n const {\n basePath,\n filter,\n page = 1,\n perPage,\n reference,\n sort,\n source = 'id',\n target,\n } = props;\n const record = useRecordContext(props);\n const resource = useResourceContext(props);\n\n const value = useReferenceManyFieldController({\n basePath,\n filter,\n page,\n perPage,\n record,\n reference,\n resource,\n sort,\n source,\n target,\n });\n\n return \n {children}\n \n}\n\nconst Expandable = ({ children, dialogOpen, dialogProps, ...props }) => {\n const fullScreen = useMediaQuery(theme => theme.breakpoints.down('sm'));\n\n if (!dialogOpen) return React.cloneElement(children, children.props)\n\n return \n {React.cloneElement(children, { ...children.props, dialogOpen })}\n \n}\n\nexport default function ListCard({\n title,\n subtitle,\n headerAction,\n reference,\n resource = reference,\n filters = null,\n perPage = 25,\n rowsPerPageOptions = [25, 50, 100],\n labelDisplayedRows = () => null,\n pagination,\n actions,\n addButton,\n addPosition,\n bulkActionButtons,\n alert,\n icon,\n collapsable = false,\n canOpen = true,\n expandableComponent: ExpandableComponent,\n expandIcon: ExpandIcon,\n expandable = false,\n onExpand,\n dialogProps,\n component: Component = Card,\n componentProps,\n base: Base = reference != null ? ReferenceManyBase : ListBase,\n baseProps,\n additionalContent,\n children,\n ...props\n}) {\n const translate = useTranslate();\n const [ open, setOpen ] = useState(!collapsable);\n const [ loaded, setLoaded ] = useState(!collapsable);\n const [ dialogOpen, setDialogOpen ] = useState(false);\n\n const onToggle = (e) => {\n if (!canOpen) return;\n if (dialogOpen) {\n return onToggleDialog(e)\n }\n setLoaded(true);\n setOpen(open => !open);\n }\n\n const onToggleDialog = (e) => {\n if (typeof onExpand === 'function') {\n onExpand();\n }\n e.stopPropagation();\n setDialogOpen(!dialogOpen);\n }\n\n Component = dialogOpen ? Fragment : Component\n ExpandIcon = ExpandIcon || \n\n return \n \n {title && \n {open && headerAction}\n {expandable && open && {dialogOpen ? : ExpandIcon}}\n {!dialogOpen && {open ? : }}\n }\n titleTypographyProps={{ variant: \"subtitle2\", gutterBottom: false }}\n subheaderTypographyProps={{ variant: \"body2\", gutterBottom: false }}\n onClick={onToggle}\n />}\n {title && }\n\n {loaded && \n \n {additionalContent}\n \n {(expandable && dialogOpen && ExpandableComponent) || children}\n \n \n }\n \n \n}\n","import React from 'react';\nimport { useTranslate } from 'react-admin';\nimport { TableRow, TableCell, styled } from '@material-ui/core';\n\nconst StyledTableRow = styled(TableRow)(({ theme, clickable }) => ({\n ...(clickable && {\n cursor: 'pointer',\n '&:hover': {\n backgroundColor: theme.palette.action.hover,\n },\n }),\n}));\n\nexport default ({ label, children, hidden = false, cellClass, onClick = null }) => {\n if (hidden) return null;\n const translate = useTranslate();\n\n const handleClick = (e) => {\n if (!onClick) return;\n onClick(e);\n }\n\n return \n {label &&\n \n {translate(label, { _: label, smart_count: 1 })}\n }\n {children}\n \n}\n","import React from 'react';\nimport { Button, Dialog, DialogActions, DialogContent, DialogContentText as MuiDialogContentText, DialogTitle, styled } from '@material-ui/core'\nimport { useTranslate } from 'react-admin';\n\nconst DialogContentText = styled(MuiDialogContentText)({\n whiteSpace: 'pre-line'\n})\n\nexport default ({\n isOpen = false,\n title,\n message,\n reject,\n accept,\n extraButton,\n onExtraButtonClose = () => {},\n onClose = () => {}\n}) => {\n const translate = useTranslate()\n return onClose()}\n aria-labelledby=\"alert-dialog-title\"\n aria-describedby=\"alert-dialog-description\"\n >\n {title && {title}}\n {message && \n \n {message}\n \n }\n \n {reject && }\n {accept && }\n {extraButton && }\n \n \n}\n","import { Button, Dialog, DialogActions, DialogContent, DialogContentText, DialogTitle } from '@material-ui/core';\nimport React from 'react';\nimport { useTranslate } from 'react-admin';\n\nexport default ({\n open,\n setOpen,\n handleConfirm,\n title,\n text,\n}) => {\n const translate = useTranslate();\n\n const onClose = (e) => {\n e.stopPropagation();\n setOpen(false);\n }\n\n return \n {title && {title}}\n {text && \n \n {text}\n \n }\n \n \n \n \n \n}\n","import React, { useState } from 'react';\nimport { Datagrid, DatagridBody, DatagridRow, useRecordContext, useResourceContext } from 'react-admin';\n\nimport { isAuthorized } from '../Authorize';\n\nconst DialogDatagridRow = ({ dialog, save, onDelete, isRowSelectable, ...props }) => {\n const record = useRecordContext(props);\n const resource = useResourceContext(props);\n\n const canEdit = isAuthorized(record, resource, 'edit');\n const selectable = isRowSelectable ? isRowSelectable(record.id) : true;\n const canClickRow = canEdit && selectable;\n\n const [ isOpen, setOpen ] = useState(false);\n\n const openModal = () => setOpen(true);\n const rowClick = canClickRow ? openModal : null\n\n const handleClose = () => {\n setOpen(false);\n }\n\n let handleSave;\n if (save) {\n handleSave = (...values) => {\n save(...values)\n handleClose()\n }\n }\n\n let handleDelete;\n if (onDelete) {\n handleDelete = (...values) => {\n onDelete(...values);\n handleClose()\n }\n }\n\n const style = canClickRow ? { cursor: 'pointer' } : undefined;\n return <>\n \n { canClickRow && dialog && isOpen && React.createElement(dialog, { ...props, record, resource, initialValues: record, isOpen, save: handleSave, onDelete: handleDelete, handleClose })}\n \n}\n\nconst DialogDatagridBody = ({ dialog, save, canDelete, onDelete, rowOptions = {}, ...props }) => } />\nexport const DialogDatagrid = ({ dialog, save, canDelete, onDelete, bodyOptions = {}, rowOptions = {}, ...props }) => } />\n","import React from 'react';\nimport { useTranslate } from 'react-admin';\nimport { useFormState } from 'react-final-form';\nimport { DialogActions, Button, CircularProgress } from '@material-ui/core';\nimport { styled } from '@material-ui/core/styles';\n\nconst Error = styled('p')(({ theme }) => ({\n color: theme.palette.error.main,\n margin: theme.spacing(0, 1),\n fontSize: '0.9rem',\n fontWeight: 400,\n}))\n\nconst DialogFormActions = styled(DialogActions)({\n margin: '8px -24px -8px -24px',\n})\n\nexport const DialogFormToolbar = ({ handleSubmit, submitLabel, submittingLabel = submitLabel, hideSubmit = false, disableInvalidSubmit = false, cancelLabel = \"ra.action.cancel\", onCancel, deleteButton = null, disableSubmit = false, showSubmitLoading = false, className }) => {\n const { submitError, submitting, invalid } = useFormState();\n const translate = useTranslate();\n\n const showLoader = submitting && showSubmitLoading;\n\n return <>\n {submitError && {submitError}}\n \n {deleteButton}\n {onCancel && }\n {!hideSubmit && }\n \n \n}\n","import React, { Fragment } from 'react';\nimport { DeleteButton, useCreate, useUpdate, useGetOne, useRefresh, useNotify, useTranslate, CRUD_GET_ONE, useResourceContext, useRecordContext, RecordContextProvider, ResourceContextProvider } from 'react-admin';\nimport { Button, Dialog, DialogTitle, DialogContent, makeStyles, alpha } from '@material-ui/core';\n\nimport { isAuthorized } from '../Authorize';\n\nimport { DialogFormToolbar } from './DialogForm';\nimport { useScopes } from '../../http';\n\nconst useStyles = makeStyles(theme => ({\n deleteButton: {\n color: theme.palette.error.main,\n marginRight: 'auto',\n '&:hover': {\n backgroundColor: alpha(theme.palette.error.main, 0.12),\n // Reset on mouse devices\n '@media (hover: none)': {\n backgroundColor: 'transparent',\n },\n },\n }\n}))\n\nexport const ResourceDialog = ({\n children,\n\n basePath,\n\n label,\n isOpen,\n maxWidth = \"sm\",\n\n loading,\n initialValues,\n hideSubmit = false,\n handleSubmit,\n handleClose,\n\n disableDelete = false,\n canDelete,\n onDelete,\n undoableDelete = true,\n ...props\n}) => {\n const resource = useResourceContext(props);\n const record = useRecordContext(props);\n const translate = useTranslate();\n const classes = useStyles();\n const notify = useNotify();\n const refresh = useRefresh();\n const scopes = useScopes()\n\n if (canDelete == null) {\n canDelete = scopes.includes('internal') || (!disableDelete && record && record.id && !record?.externalId && isAuthorized(record, resource, 'remove'))\n }\n let deleteButton;\n if (onDelete) {\n const handleDelete = () => {\n onDelete(record)\n handleClose()\n }\n deleteButton = \n } else {\n deleteButton = {\n const message = (error.name && error.name !== 'ra.validation.invalid') ? translate(error.name) : translate('ra.validation.unable_to_delete')\n notify(message, 'error');\n refresh();\n }}\n />\n }\n\n return \n {isOpen && <>\n {label && translate(label, { _: label, smart_count: 1 })}\n \n { React.cloneElement(React.Children.only(children), {\n initialValues,\n record,\n resource,\n handleSubmit,\n onSubmit: handleSubmit,\n save: handleSubmit,\n saving: loading,\n undoable: false,\n destroyOnUnmount: true,\n component: Fragment,\n toolbar: \n })}\n \n }\n \n}\n\nexport const CreateResourceDialog = ({ onSuccess, onFailure, handleClose, skipRefresh = false, ...props }) => {\n const resource = useResourceContext(props);\n const [ create ] = useCreate(resource);\n const refresh = useRefresh();\n const notify = useNotify();\n\n const handleSubmit = async values => {\n try {\n return await create({ payload: { data: values } }, {\n onSuccess({ data }) {\n if (!skipRefresh) refresh()\n if (typeof onSuccess === 'function') onSuccess(data)\n handleClose()\n },\n onFailure({ error }) {\n if (typeof onFailure === 'function') onFailure(error)\n if (error?.message) notify(error.message, 'error')\n },\n returnPromise: true,\n })\n } catch (e) {\n return e;\n }\n }\n\n return \n \n \n \n \n}\n\nexport const EditResourceDialog = ({ id, onSuccess, onFailure, customHandleSubmit, handleClose, skipRefresh = false, ...props }) => {\n const resource = useResourceContext(props);\n const [ update ] = useUpdate(resource, id);\n const refresh = useRefresh();\n const notify = useNotify();\n\n const { data: record, loaded } = useGetOne(resource, id, {\n action: CRUD_GET_ONE,\n enabled: props.isOpen,\n onFailure() {\n notify('ra.notification.item_doesnt_exist', 'warning');\n }\n })\n\n const handleSubmit = async values => {\n try {\n return await update({ payload: { data: values } }, {\n onSuccess({ data }) {\n if (!skipRefresh) refresh()\n if (typeof onSuccess === 'function') onSuccess(data)\n handleClose()\n },\n onFailure(error) {\n if (typeof onFailure === 'function') onFailure(error)\n if (error?.message) notify(error.message, 'error')\n },\n returnPromise: true,\n })\n } catch (e) {\n return e;\n }\n }\n\n if (!loaded) return null;\n return \n \n \n \n \n}\n\n","import React from 'react';\nimport { useLocale, useRecordContext } from 'react-admin';\nimport { Typography, styled } from '@material-ui/core';\nimport moment from 'moment-timezone';\n\nconst Alt = styled('div')(({ theme }) => ({\n color: theme.palette.text.disabled,\n}))\n\nconst getDate = (value, { timezone, format, yearFormat }) => {\n const date = timezone ? moment.tz(value, timezone) : moment(value)\n if (format === 'calendar') return date.calendar();\n if (moment().isSame(date, 'year')) return date.format(format)\n return date.format(yearFormat)\n}\n\nexport const getDateFormat = locale => (!locale || locale.startsWith('en')) ? 'MMM D' : 'D MMM'\n\nconst DateField = ({ className, source, format, yearFormat = 'll', emptyText, showLocal = false, ...props }) => {\n const locale = useLocale();\n const record = useRecordContext(props)\n\n const dateFormat = format || getDateFormat(locale);\n let date = emptyText;\n\n if (record?.[source]) {\n const hasTimezone = record.timezone != null;\n const tzDate = getDate(record[source], { timezone: record.timezone || 'UTC', format: dateFormat, yearFormat });\n const localDate = getDate(record[source], { format: dateFormat, yearFormat })\n\n date = showLocal && hasTimezone ? localDate : tzDate;\n if (showLocal && hasTimezone && localDate !== tzDate) {\n date = <>\n
{tzDate} {moment.tz(record[source], record.timezone).format('z')}
\n {localDate} {moment.tz(record[source], moment.tz.guess()).format('z')}\n \n }\n }\n\n if (!date) return null;\n\n return \n {date}\n \n}\n\nDateField.defaultProps = {\n addLabel: true\n}\n\nexport default DateField;\n","import React from 'react';\nimport moment from 'moment-timezone';\nimport { Typography, styled } from '@material-ui/core';\nimport { useLocale, useRecordContext } from 'react-admin';\n\nconst Alt = styled('div')(({ theme }) => ({\n color: theme.palette.text.disabled,\n}))\n\nexport const getDateRange = (start, end, locale, timezone) => {\n const startDate = timezone ? moment.tz(start, timezone) : moment(start);\n const endDate = timezone ? moment.tz(end, timezone) : moment(end);\n const isSameYear = moment.utc().isSame(startDate, 'year')\n\n if (locale.startsWith('en')) {\n if (!startDate.isSame(endDate, 'month')) return `${startDate.format(isSameYear ? 'MMMM D' : 'LL')} - ${endDate.format(isSameYear ? 'MMMM D' : 'LL')}`\n if (!startDate.isSame(endDate, 'day')) return `${startDate.format(isSameYear ? 'MMMM D' : 'LL')} - ${endDate.format(isSameYear ? 'D' : 'LL')}`\n return startDate.format(isSameYear ? 'MMMM D' : 'LL');\n } else {\n if (!startDate.isSame(endDate, 'month')) return `${startDate.format(isSameYear ? 'D MMMM' : 'LL')} - ${endDate.format(isSameYear ? 'D MMMM' : 'LL')}`\n if (!startDate.isSame(endDate, 'day')) return `${startDate.format(isSameYear ? 'D' : 'LL')} - ${endDate.format(isSameYear ? 'D MMMM' : 'LL')}`\n return startDate.format(isSameYear ? 'D MMMM' : 'LL');\n }\n}\n\nconst DateRangeField = ({ className, startSource, endSource, showLocal = false, ...props }) => {\n const locale = useLocale();\n const record = useRecordContext(props)\n if (!record) return null;\n\n const hasTimezone = record.timezone != null;\n const tzRange = getDateRange(record[startSource], record[endSource], locale, record.timezone || 'UTC')\n const localRange = getDateRange(record[startSource], record[endSource], locale)\n\n let range = showLocal && hasTimezone ? localRange : tzRange;\n if (showLocal && hasTimezone && localRange !== tzRange) {\n range = <>\n
{tzRange} {moment.tz(record[startSource], record.timezone || 'UTC').format('z')}
\n {localRange}\n \n }\n\n return \n {range}\n \n}\n\nDateRangeField.defaultProps = {\n label: 'Dates',\n addLabel: true\n}\n\nexport default DateRangeField;\n","import React, { cloneElement } from 'react';\nimport { RecordContextProvider, useRecordContext } from 'react-admin';\nimport { makeStyles } from '@material-ui/core';\n\nconst useStyles = makeStyles(theme => ({\n grayText: {\n color: theme.palette.text.secondary,\n },\n decline: {\n textDecoration: 'line-through',\n color: theme.palette.error.main,\n }\n}))\n\nconst handleHasChanged = (previousEvent, currentEvent, property) => {\n return previousEvent[property] !== currentEvent[property]\n}\n\n/**\n * if the previousEvent is different from the record from useRecordContext(),\n * dupplicate the children using a RecordContextProvider set as previousEvent.\n * we also adds that -> between both childrens\n *\n * @param {ReactNode} props.children - The children elements, mostlikely a Field component (DateField, TimeField or SurfaceField)\n * @param {Object} props.previousEvent - The previous record.\n * @param {string} props.property - The property of the record to compare.\n * @param {function} props.hasChanged - Optionnal function that returns true/false to manually handle the UI.\n * @return {ReactNode} renders the children or the dupplicated children using a previous value on RecordContextProvider.\n */\nconst DifferenceField = ({ children, previousEvent, property, indicateChangeRemoval = false, hasChanged = handleHasChanged }) => {\n const event = useRecordContext();\n const classes = useStyles();\n\n const previousValue = previousEvent[property];\n const currentValue = event[property];\n const hasEventChanged = hasChanged(previousEvent, event, property);\n const hasChangeRemoval = indicateChangeRemoval && hasEventChanged;\n\n return <>\n {previousValue && hasEventChanged &&\n <>\n \n {cloneElement(children, { className: currentValue ? classes.grayText : undefined, link: false })}\n \n {currentValue && }\n \n }\n {cloneElement(children, { className: hasChangeRemoval ? classes.decline : undefined, link: false })}\n \n}\n\nexport default DifferenceField;\n","import React, { useMemo } from 'react';\nimport { useRecordContext, useTranslate, sanitizeFieldRestProps, useResourceContext } from 'react-admin';\nimport PropTypes from 'prop-types';\nimport Typography from '@material-ui/core/Typography';\n\nimport { useSport } from '../../http';\n\n/**\n * Field using a render function\n *\n * @example\n * record && `${record.first_name} ${record.last_name}`}\n * />\n */\nconst FunctionField = props => {\n const record = useRecordContext(props);\n const resource = useResourceContext(props);\n const sport = useSport();\n const translate = useTranslate();\n\n const { className, source = '', render, ...rest } = props;\n return useMemo(() => {\n if (!record) return null;\n return \n {render(record, source, resource, translate, sport)}\n \n }, [className, record, source, resource, render, rest, translate, sport]);\n};\n\nFunctionField.defaultProps = {\n addLabel: true,\n};\n\nFunctionField.propTypes = {\n ...Typography.propTypes,\n render: PropTypes.func.isRequired,\n};\n\nexport default FunctionField;\n","import React from 'react';\nimport { useResourceContext } from 'react-admin';\nimport { dedupe } from '@hisports/parsers';\n\nimport FunctionField from '../fields/FunctionField'\n\nconst TextArrayField = ({ emptyText, test, ...props }) => {\n const resource = useResourceContext(props);\n return {\n const values = dedupe(entity[source] || [])\n if (!values.length && emptyText) return translate(emptyText);\n return values\n .map(element => translate(test ? test(element) : `resources.${resource}.values.${source}.${element}`))\n .join(', ')\n }} {...props} />\n}\n\nTextArrayField.defaultProps = {\n addLabel: true\n}\n\nexport default TextArrayField;\n","import React from 'react';\nimport { sanitizeFieldRestProps, useLocale, useRecordContext } from \"react-admin\";\nimport { Typography } from \"@material-ui/core\";\nimport { get } from \"lodash\";\n\nexport const TextLocaleField = props => {\n const { className, source, emptyText, ...rest } = props;\n\n const locale = useLocale();\n const record = useRecordContext(props);\n\n const defaultValue = get(record, source);\n const localeValue = get(record?.i18n?.[locale], source);\n const value = localeValue || defaultValue;\n\n return \n {value != null && typeof value !== 'string' ? JSON.stringify(value) : value || emptyText}\n \n}\n","import React from 'react';\nimport { useLocale, useRecordContext } from 'react-admin';\nimport { Typography, styled } from '@material-ui/core';\nimport moment from 'moment-timezone';\n\nimport { isLocalTimezone } from '@hisports/parsers/src/dateTime';\nimport { getDateFormat } from './DateField';\n\nconst Alt = styled('div')(({ theme }) => ({\n color: theme.palette.text.disabled,\n}))\n\nconst formatRange = (start, end, { showDate, timezone, locale }) => {\n const startTime = timezone ? moment.tz(start, timezone) : moment(start)\n const endTime = timezone ? moment.tz(end, timezone) : moment(end)\n\n let startFormat = 'HH:mm';\n if (showDate) {\n const dateFormat = getDateFormat(locale);\n startFormat = moment().isSame(startTime, 'year') ? `${dateFormat}, HH:mm` : 'll, HH:mm'\n }\n let endFormat = 'HH:mm';\n if (timezone) {\n endFormat = 'HH:mm z';\n }\n return `${startTime.format(startFormat)} - ${endTime.format(endFormat)}`\n}\n\nconst TimeRangeField = ({ className, startSource, endSource, emptyText, showDate = false, showLocal = false, variant = 'body2', ...props }) => {\n const locale = useLocale();\n const record = useRecordContext(props);\n let range = emptyText;\n\n if (record && record[startSource] && record[endSource]) {\n range = formatRange(record[startSource], record[endSource], { showDate, locale, timezone: showLocal ? moment.tz.guess() : record.timezone })\n if (showLocal && !isLocalTimezone(record[startSource], record.timezone)) {\n const tzRange = formatRange(record[startSource], record[endSource], { locale, showDate, timezone: record.timezone })\n range = <>\n
{tzRange}
\n {range}\n \n }\n }\n\n if (!range) return null;\n\n return \n {range}\n \n}\n\nTimeRangeField.defaultProps = {\n label: 'Time',\n addLabel: true\n}\n\nexport default TimeRangeField;\n","import React from 'react';\nimport moment from 'moment';\nimport { Typography } from '@material-ui/core';\nimport { useTranslate } from 'react-admin';\n\nimport FunctionField from './FunctionField';\n\nconst renderUpdatedAt = (record, translate, includePrefix = false, typographyProps = {}) => {\n const { updatedAt, updatedByAuthor } = record || {};\n const date = moment(updatedAt).calendar()\n if (!updatedAt) return null;\n\n const prefix = includePrefix ? `${translate('ra.message.updated')} ` : ''\n if (!updatedByAuthor) return `${prefix}${date}`;\n return {`${prefix}${date} ${translate('ra.function.by')} ${updatedByAuthor}`}\n}\n\nexport const UpdatedAtField = ({ includePrefix = false, typographyProps, ...props }) => {\n const translate = useTranslate();\n return renderUpdatedAt(record, translate, includePrefix, typographyProps)} {...props} />\n}\n","import React from 'react';\nimport { TextField } from 'react-admin';\nimport { makeStyles } from '@material-ui/core';\n\nconst useStyles = makeStyles(theme => ({\n text: {\n whiteSpace: 'pre-line',\n }\n}));\n\nconst UserTextField = props => {\n const classes = useStyles();\n return \n}\n\nexport default UserTextField;\n","// extracted by mini-css-extract-plugin\nexport default {\"Bar\":\"eMk7QGCyCVgwtoj11Tyw\",\"IsVisible\":\"BKoprdDXctKUq7bdt4qs\",\"BarTop\":\"hQkkv8Ld7HzNzHnm62Cx\",\"BarTopFileInfo\":\"tRDxrvia3EOXqPLFRhFA\",\"BarTopFileName\":\"hyDpXmjGlBianRKwZ5oH\",\"BarTopBtns\":\"cUHZWnZ7rqiECjmRPbQI\",\"BarBottom\":\"pqgDpLCQCG4GSMejDTcB\",\"Container\":\"p5S0KrlDJk4_l169IHQW\",\"PdfPage\":\"bGHCBub4E5rpten1WStj\",\"PdfFirstPage\":\"yTmHJ5yUTuSJ8WZQbleK\",\"SVG\":\"S6BWw4RFdlJ10REUqdkK\",\"ZoomLevel\":\"x7ukm5IohhM7sQN600XZ\",\"Button\":\"E0VXoT9tMGQJRsKID2kF\",\"ButtonSecondary\":\"H4dqkH3u3v18xnPYKh0c\",\"ButtonDark\":\"hRuQ2wcQERa8RDt18Fz3\",\"Bootstrap_MR2\":\"QHxCeQggQJosTGDvC1MA\",\"Bootstrap_MX2\":\"wZGgst5pX0Geh0RGxFMD\",\"Bootstrap_MR1\":\"Zc6Ue88N0c8RSIp7L3B1\",\"Bootstrap_MX1\":\"RP7bsafDDuxU23drnHT9\",\"Bootstrap_ML1\":\"EDjQF6IrOtd0inHFimfy\",\"Bootstrap_MB3\":\"KKd81eFv9MRLLftDNOaG\",\"Bootstrap_MY3\":\"VRnnItBA7fveIwNGukXg\",\"Bootstrap_LineHeight1\":\"yxs2eJB_GHmynFB7ur0_\",\"Bootstrap_TextMuted\":\"hYFzra8Pk3SVS0LCjAFn\",\"Preview\":\"chXnl_GayOGADM_LJ4ek\",\"PreviewImg\":\"o952Jv4B6q4pHZsuHilN\",\"PreviewVideo\":\"NoVe8g3uatJUzAbcH7nl\",\"PreviewContainer\":\"rIqEwZ9ylSY3MWw2Lsp9\",\"PreviewContainerZoom\":\"zSkdHXX7OdfCtmzYnWKF\",\"WithText\":\"U1nylWzL2KTKhb4nm_gd\",\"PreviewText\":\"SITSOulkPfsQPHTYNSrw\",\"Icon\":\"ue_eTifLVJG95FAGnpwT\",\"NoPreview\":\"NaMn1P2d_ulTqhx7glHy\",\"NoPreviewText\":\"DM5DaBZe_RVVPewJEUDT\",\"NoPreviewIcon\":\"fZtdhj5DMxAsmBNclfRf\",\"Loading\":\"XmGAZj3wvCmMttLX6h9c\",\"loadingDocAnimation\":\"q6H0EyzG0Wm2aCl9xbJh\"};","import React, { useEffect } from 'react';\nimport { Button } from 'reactstrap';\nimport { Document, Page, pdfjs } from 'react-pdf';\nimport \"react-pdf/dist/esm/Page/TextLayer.css\";\n\nimport styles from \"./FileViewer.module.scss\";\nimport { useTranslate } from 'react-admin';\n\npdfjs.GlobalWorkerOptions.workerSrc = `//cdnjs.cloudflare.com/ajax/libs/pdf.js/${pdfjs.version}/pdf.worker.min.js`;\n\nconst PDFFile = ({ image, pageCount, fileLoading, errorView, onDocumentLoadSuccess, onPreviewFail, containerRef, reactPinchPanZoom, resetScalePoints }) => {\n // eslint-disable-next-line react-hooks/exhaustive-deps\n useEffect(() => reactPinchPanZoom.centerView(undefined, 0), []);\n\n return (\n User can download to have full quality\n externalLinkTarget=\"_blank\"// Links in pdf must not bail out of our website\n loading={fileLoading}\n onLoadError={() => {\n reactPinchPanZoom.setTransform(0, 0, reactPinchPanZoom.state.scale, 0);\n onPreviewFail();\n }}\n error={errorView}\n noData={}\n >\n {Array.from({ length: pageCount }, (_, index) => index + 1)\n .map((pageNumber) => (\n {\n const scaleValue = Math.min(1, containerRef.current.clientWidth / e.originalWidth);\n resetScalePoints(scaleValue);\n reactPinchPanZoom.setTransform(Math.max((containerRef.current.clientWidth - e.originalWidth) / 2, 0), Math.max((containerRef.current.clientHeight - e.originalHeight) / 2, 0), scaleValue, 0);\n reactPinchPanZoom.centerView();\n } : undefined}\n renderAnnotationLayer={false}\n />\n ))\n }\n \n );\n};\n\nconst NoPdfPreview = ({ close, reactPinchPanZoom }) => {\n const translate = useTranslate();\n\n // eslint-disable-next-line react-hooks/exhaustive-deps\n useEffect(() => reactPinchPanZoom.centerView(undefined, 0), []);\n\n return (\n
\n
\n
\n {translate('resources.schedules.labels.brackets_viewer.no_preview.no_data')}\n
\n

\n {translate('resources.schedules.labels.brackets_viewer.no_preview.text')}\n

\n \n
\n );\n};\n\nexport default PDFFile;\n","import React from \"react\";\n\nimport styles from \"./FileViewer.module.scss\";\n\nconst ImageFile = ({ fileData, onLoad, onPreviewFail, fileName, setPreviewInfo, containerRef, fileType, isMobile }) => {\n const reducedWidth = isMobile ? 50 : 200;\n const imageWidth = fileType === 'svg' ? window.innerWidth - reducedWidth : 'auto';\n\n return (\n {\n onLoad(Math.min(1, containerRef.current.clientWidth / e.target.naturalWidth, containerRef.current.clientHeight / e.target.naturalHeight));\n setPreviewInfo({ isVisible: true, naturalWidth: e.target.naturalWidth, naturalHeight: e.target.naturalHeight });\n }}\n />\n );\n};\n\nexport default ImageFile;\n","import React, { Fragment, memo } from 'react';\n\nimport styles from './FileViewer.module.scss';\n\nconst TextFiles = ({ fileData }) => {\n return (\n \n {fileData.map((line, index) => (\n // eslint-disable-next-line react/no-array-index-key\n \n \n {index + 1}\n \n {line}\n
\n
\n ))}\n
\n );\n};\n\n// Using memo because this file type can be very big and ressource hungry\nexport default memo(TextFiles);\n","import React, { useEffect, useRef } from 'react';\n\nimport { PreviewFailed } from './FileViewer';\nimport styles from \"./FileViewer.module.scss\";\n\nconst AudioFile = ({ audioSource, fileType, canDownload, downloadFile, onPreviewFail }) => {\n const audioTag = useRef(null);\n useEffect(() => {\n audioTag.current.volume = 0.5;\n }, []);\n return (\n \n );\n};\n\nexport default AudioFile;\n","import React, { useEffect, useRef } from 'react';\n\nimport { PreviewFailed } from './FileViewer';\nimport styles from \"./FileViewer.module.scss\";\n\nconst VideoFile = ({ videoSrc, fileType, canDownload, downloadFile, onPreviewFail }) => {\n const videoTag = useRef(null);\n useEffect(() => {\n videoTag.current.volume = 0.5;\n }, []);\n return (\n \n );\n};\n\nexport default VideoFile;\n","import React from \"react\";\n\nimport ImageFile from \"./ImageFile\";\nimport TextFiles from './TextFiles';\nimport AudioFile from \"./AudioFile\";\nimport VideoFile from \"./VideoFile\";\n\nconst FileViewerPicker = ({ fileData, setPreviewInfo, fileName, onLoad, onPreviewFail, fileType, canDownload, downloadFile, containerRef, hasScroll, isMobile }) => {\n return (\n Array.isArray(fileData) ?// text files will be read line by line represented by an array\n \n : fileData.type === 'audio' ?\n \n : fileData.type === 'video' ?\n \n :\n \n );\n};\n\nexport default FileViewerPicker;\n","import { useEffect } from \"react\";\n\n/**\n * Component that will do thing with the actual portal's lifecycle such as mount and unmount\n * @param {Object} param\n * @param {React.LegacyRef} param.container\n * @param {Function} param.setScale\n * @param {Function} param.resetScalePoints\n */\nconst PortalLifeCycle = ({ container, resetScalePoints }) => {\n useEffect(() => {\n const metaViewportTag = document.querySelector('meta[name=viewport]');\n\n metaViewportTag.setAttribute('content', `${metaViewportTag.getAttribute('content')}, user-scalable=no`);// Prevent mobile zooming\n document.body.classList.add('overflow-hidden');// Hiding scroll\n\n function _preventDesktopWheelZoom(e) {\n if (e.ctrlKey) {\n e.preventDefault();\n }\n }\n container.current.addEventListener('wheel', _preventDesktopWheelZoom, { passive: false });// Defined here since having the onWheel event on the aside doesn't work but it works here\n container.current.focus();\n\n return () => {\n metaViewportTag.setAttribute('content', metaViewportTag.getAttribute('content').replace(', user-scalable=no', ''));\n document.body.classList.remove('overflow-hidden');\n resetScalePoints();\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n return null;\n};\n\nexport default PortalLifeCycle;\n","import React, { useCallback, useEffect, useRef, useState } from \"react\";\nimport { useTranslate } from \"react-admin\";\nimport { createPortal } from 'react-dom';\nimport { Button } from \"reactstrap\";\nimport { FormattedNumber } from \"react-intl\";\nimport { CloseOutlined, Description, GetApp, Image, OpenInNew, PictureAsPdf, ZoomIn, ZoomOut } from \"@material-ui/icons\";\nimport { UAParser } from \"ua-parser-js\";\nimport { TransformComponent, TransformWrapper } from \"react-zoom-pan-pinch\";\n\nimport styles from \"./FileViewer.module.scss\";\nimport PDFFile from \"./PDFFile\";\nimport FileViewerPicker from \"./FileViewerPicker\";\nimport PortalLifeCycle from \"./PortalLifeCycle\";\n\n// /////////////////////////////////////////////////////////////////////\n// This is an imported component from the SID project\n// Some Page specific changes had to be done :\n// openInNewTabURL & URLToFetchForDownload props -> required for the schedule brackets\n// downloadFile & getFileForDownload functions -> different logic to fetch the download file instead of downloading the loaded one\n// { cache: 'no-cache' } in useEffect -> causes bug with image fetches getting CORS errors\n// SVG class in scss module -> adds a white background to the SVG so the brackets are readable\n// added \", a\" to the Btns class -> handles the openInNewTab button that acts like an anchor tag\n// /////////////////////////////////////////////////////////////////////\n\n/**\n * @param {object} props\n * @param {string} props.type\n * @param {string|(() => Promise.)|File} props.fullPath\n * @param {string} props.fileName\n * @param {string} props.creationDate\n * @param {boolean} props.isOpen\n * @param {Function} props.close\n * @param {Record.} [props.createdBy]\n * @param {Record.} [props.defaultImage]\n * @returns\n */\nconst FileViewer = ({ type, fullPath, fileName, createdBy, creationDate, isOpen, close, openInNewTabURL, URLToFetchForDownload }) => {\n const translate = useTranslate();\n const [ image, setImage ] = useState('');\n const [ fetchedType, setFetchedType ] = useState(type);\n const [ pageCount, setPageNumber ] = useState(1);\n const [ shownControls, setShownControls ] = useState(true);\n const containerRef = useRef(null);\n const mouseCooldown = useRef(null);\n const [ previewInfo, setPreviewInfo ] = useState({ isVisible: true, naturalWidth: 0, naturalHeight: 0 });\n const canDownload = !(fullPath instanceof File) && image;\n const isPhone = useRef(new UAParser().getDevice().type === 'mobile');\n const isLoading = useRef(false);\n const [ isPdf, setIsPdf ] = useState(type === 'application/pdf' || type === 'pdf');\n const isTextFile = Array.isArray(image);\n const isVideoFile = image?.type === 'video';\n const isAudioFile = image?.type === 'audio';\n\n useEffect(() => {\n setIsPdf(type === 'application/pdf' || type === 'pdf');\n }, [ type ]);\n\n function hideControls() {\n setShownControls(false);\n clearTimeout(mouseCooldown.current);\n }\n\n function showControls(cooldown = 2000) {\n setShownControls(true);\n clearTimeout(mouseCooldown.current);\n mouseCooldown.current = setTimeout(hideControls, cooldown);\n }\n\n function getInitialScale() {\n return isPhone.current ? 0.6 : 1;\n }\n\n /**\n * @param {number} initialScale\n * @returns {number[]}\n */\n function buildScalePoints(initialScale = 1) {\n const jumpStep = 1.5;// 50%\n const points = [ initialScale ];\n let lowerPoint = initialScale, higherPoint = initialScale;\n for (let index = 0; index < 4; index++) { // 4 points lower scale and 4 points higher scale\n points.push([ lowerPoint /= jumpStep, higherPoint *= jumpStep ]);\n }\n return points.sort();\n }\n\n const scalePoints = useRef(buildScalePoints(getInitialScale()));\n\n function onDocumentLoadSuccess({ numPages }) {\n setPageNumber(numPages);\n setPreviewInfo({ isVisible: true });\n }\n\n function getFileForDownload() {\n // very stiff logic that only works for downloading PDF files\n // short on time\n // look at how we handle different file types in the useEffect\n if (URLToFetchForDownload) {\n return fetch(URLToFetchForDownload)\n .then((r) => r.blob().then(URL.createObjectURL));\n }\n return Promise.resolve(image);\n }\n\n function downloadFile() {\n // this function is different than the SID one\n // because we needed a logic to download a different file\n // from the one loaded\n // we load an SVG, user needs to download a PDF\n getFileForDownload()\n .then((file) => {\n const a = document.createElement('a');\n a.style = 'display: none;';\n a.download = fileName;\n a.href = Array.isArray(file) ? `data:text/plain;charset=utf-8,${encodeURIComponent(file.join(''))}` : file;\n document.body.appendChild(a);\n a.click();\n a.remove();\n })\n // eslint-disable-next-line no-console\n .catch(console.error);\n }\n\n function onPreviewFail() {\n setPreviewInfo({ isVisible: false });\n }\n\n // string when image and pdf\n // eslint-disable-next-line react-hooks/exhaustive-deps\n const canZoomInOut = useCallback(() => image && previewInfo.isVisible && typeof image === 'string', [ image, previewInfo.isVisible, typeof image ]);\n\n function hasScroll() {\n if (!containerRef.current) return false;\n return containerRef.current.clientHeight < containerRef.current.scrollHeight || containerRef.current.clientWidth < containerRef.current.scrollWidth;\n }\n\n function getVideoImageValue(content) {\n return {\n type: 'video',\n src: URL.createObjectURL(content),\n };\n }\n function getAudioImageValue(content) {\n return {\n type: 'audio',\n src: URL.createObjectURL(content),\n };\n }\n\n useEffect(() => {\n if (isOpen) {\n if (isLoading.current) return;\n\n showControls(2000);\n\n if (image) {\n // Do nothing -> Image has already been loaded\n } else if (typeof fullPath === \"string\") {\n isLoading.current = true;\n fetch(fullPath, { cache: 'no-cache' }) // cache causes images to get a CORS error for some reason\n .then((r) => {\n if (/text\\/*/.test(type)) {\n return r.text().then((text) => text.split('\\n'));\n } else if (/video\\/*/.test(type)) {\n return r.blob().then(getVideoImageValue);\n } else if (/audio\\/*/.test(type)) {\n return r.blob().then(getAudioImageValue);\n }\n return r.blob().then(URL.createObjectURL);\n })\n .then(setImage)\n .catch(() => {\n // Needed to show the \"No preview\" state of the FileViewer\n // Will trigger the loading of the ressource to fail thus, showing no preview available\n setImage('something_that_will_fail_the_download');\n })\n .finally(() => {\n isLoading.current = false;\n });\n } else if (typeof fullPath === 'function') {\n isLoading.current = true;\n fullPath()\n .then((data) => {\n setFetchedType(data.original_file_mime_type);\n if (data.preview_full_path) setIsPdf(true);\n return fetch(data.preview_full_path || data.full_path)\n .then((r) => {\n if (/text\\/*/.test(data.original_file_mime_type)) {\n return r.text().then((text) => text.split('\\n'));\n } else if (/video\\/*/.test(data.original_file_mime_type)) {\n return r.blob().then(getVideoImageValue);\n } else if (/audio\\/*/.test(data.original_file_mime_type)) {\n return r.blob().then(getAudioImageValue);\n }\n return r.blob().then(URL.createObjectURL);\n });\n })\n .then(setImage)\n // .then(() => setImage('something_that_will_fail_the_download'))\n .catch(() => {\n // Needed to show the \"No preview\" state of the FileViewer\n // Will trigger the loading of the ressource to fail thus, showing no preview available\n setImage('something_that_will_fail_the_download');\n })\n .finally(() => {\n isLoading.current = false;\n });\n } else if (/text\\/*/.test(fullPath.type)) { // Is text file\n const reader = new FileReader();\n reader.addEventListener('load', () => {\n setImage(reader.result.split('\\n'));\n });\n reader.addEventListener('error', onPreviewFail);\n reader.readAsText(fullPath);\n } else if (/video\\/*/.test(fullPath.type)) {\n setImage(getVideoImageValue(fullPath));\n } else if (/audio\\/*/.test(fullPath.type)) {\n setImage(getAudioImageValue(fullPath));\n } else {\n setImage(URL.createObjectURL(fullPath));\n }\n } else {\n setImage('');\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [ isOpen ]);\n\n useEffect(() => {\n const handleEsc = (event) => {\n if (event.keyCode === 27) {\n close();\n }\n };\n window.addEventListener('keydown', handleEsc);\n\n return () => {\n window.removeEventListener('keydown', handleEsc);\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n return isOpen && createPortal(\n \n {(reactPinchPanZoom) => (\n {\n showControls();\n }}\n role=\"alertdialog\"\n aria-describedby=\"FileViewerHeaderInfo\"\n tabIndex={0}// Makes the onKeyDown listener works\n onKeyDown={(e) => {\n if (e.ctrlKey) {\n // CTRL + e.code\n switch (e.code) {\n case 'Equal':\n case 'NumpadEqual':\n case 'NumpadAdd':\n if (canZoomInOut()) reactPinchPanZoom.zoomIn();\n e.preventDefault();\n break;\n case 'Minus':\n case 'NumpadSubtract':\n if (canZoomInOut()) reactPinchPanZoom.zoomOut();\n e.preventDefault();\n break;\n case 'Semicolon':\n case 'IntlRo':\n case 'IntlYen':\n e.preventDefault();\n break;\n default:\n break;\n }\n }\n }}\n >\n {\n scalePoints.current = buildScalePoints(1);\n }}\n />\n
\n
\n {getIcon(fetchedType)}\n
\n
\n
\n {fileName}\n
\n {createdBy &&\n
{createdBy.name} {createdBy.family_name}
\n }\n
\n {creationDate}\n
\n
\n
\n {openInNewTabURL &&\n {\n e.stopPropagation();\n }}// Prevents zoom on double click\n title={translate('resources.schedules.labels.brackets_viewer.open_new_window')}\n onBlur={() => {\n containerRef.current.focus();\n }}\n tag=\"a\"\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n href={openInNewTabURL}\n >\n \n \n }\n {canDownload &&\n {\n e.stopPropagation();\n }}// Prevents zoom on double click\n title={translate('resources.schedules.labels.brackets_viewer.download')}\n onBlur={() => {\n containerRef.current.focus();\n }}\n >\n \n \n }\n {\n e.stopPropagation(); close();\n }}\n onDoubleClick={(e) => {\n e.stopPropagation();\n }}// Prevents zoom on double click\n title={translate('resources.schedules.labels.brackets_viewer.close')}\n onBlur={() => {\n containerRef.current.focus();\n }}\n >\n \n \n
\n
\n \n {isPdf ?\n image ?\n }\n errorView={}\n onDocumentLoadSuccess={onDocumentLoadSuccess}\n onPreviewFail={onPreviewFail}\n pageCount={pageCount}\n containerRef={containerRef}\n reactPinchPanZoom={reactPinchPanZoom}\n resetScalePoints={(initialScale) => {\n scalePoints.current = buildScalePoints(initialScale);\n }}\n />\n :\n \n :\n !image ?\n \n : previewInfo.isVisible ?\n {\n scalePoints.current = buildScalePoints(scaleValue);\n reactPinchPanZoom.centerView(scaleValue, 0);\n }}\n containerRef={containerRef}\n canDownload={canDownload}\n downloadFile={downloadFile}\n fileType={fetchedType}\n hasScroll={hasScroll}\n isMobile={isPhone.current}\n />\n :\n \n }\n \n {canZoomInOut() &&\n
\n {\n reactPinchPanZoom.zoomOut();\n }}\n title={translate('resources.schedules.labels.brackets_viewer.zoom_out')}\n aria-controls=\"FileViewerZoomLevel\"\n onDoubleClick={(e) => {\n e.stopPropagation();\n }}// Prevents zoom on double click\n onBlur={() => {\n containerRef.current.focus();\n }}\n >\n \n \n {\n reactPinchPanZoom.zoomIn();\n }}\n title={translate('resources.schedules.labels.brackets_viewer.zoom_in')}\n aria-controls=\"FileViewerZoomLevel\"\n onDoubleClick={(e) => {\n e.stopPropagation();\n }}// Prevents zoom on double click\n onBlur={() => {\n containerRef.current.focus();\n }}\n >\n \n \n
\n
\n }\n \n )}\n \n , document.body\n );\n};\n\nconst FileLoading = ({ type, fileName }) => {\n const translate = useTranslate();\n\n return (\n <>\n {getIcon(type)}\n \n \n );\n};\n\nexport const PreviewFailed = ({ canDownload, downloadFile, type }) => {\n const translate = useTranslate();\n\n return (\n
\n
\n {getIcon(type)}\n
\n
\n {translate('resources.schedules.labels.brackets_viewer.no_preview.text')}\n {canDownload &&\n
\n
\n \n
\n }\n
\n );\n};\n\nconst getIcon = (type) => {\n switch (type) {\n case 'application/pdf':\n case 'pdf':\n return ;\n case 'image/jpeg':\n case 'image/jpg':\n case 'image/png':\n case 'png':\n case 'jpg':\n case 'jpeg':\n return \n default:\n return ;\n }\n};\n\nexport default FileViewer;\n","import { useCallback, useEffect, useRef } from \"react\";\nimport { useNotify } from \"react-admin\";\nimport { useHistory, useLocation } from \"react-router-dom\";\n\nimport { useParticipant } from \"../../http\";\n\nexport const usePrevious = value => {\n const ref = useRef();\n useEffect(() => {\n ref.current = value;\n }, [value]);\n return ref.current;\n}\n\nexport const useAutoHideNotify = () => {\n const notify = useNotify();\n const timerRef = useRef(null);\n\n const showNotification = useCallback((message, type = 'info', duration = 5000) => {\n if (timerRef.current) {\n clearTimeout(timerRef.current);\n }\n\n notify(message, type);\n\n timerRef.current = setTimeout(() => {\n timerRef.current = null;\n }, duration);\n\n return () => {\n if (timerRef.current) {\n clearTimeout(timerRef.current);\n timerRef.current = null;\n }\n };\n }, [notify]);\n\n return showNotification;\n};\n\nexport const useFocusState = (focusKey, timeout = 4000, scrollTimeout = 750) => {\n const location = useLocation();\n const history = useHistory();\n const { focus, scrollTo } = location.state || {};\n\n useEffect(() => {\n if (focus !== focusKey || !timeout) return;\n\n const timer = setTimeout(() => {\n history.replace({ ...location, state: { ...location.state, focus: null, scrollTo: null } });\n }, timeout);\n\n return () => clearTimeout(timer);\n }, [focus, focusKey, location, history, timeout]);\n\n useEffect(() => {\n if (!scrollTo) return;\n const element = document.getElementById(scrollTo);\n if (element) {\n setTimeout(() => element.scrollIntoView({ behavior: 'smooth', block: 'start', inline: 'nearest' }), scrollTimeout);\n }\n }, [scrollTimeout, scrollTo])\n\n return {\n focus,\n isFocused: focus === focusKey,\n };\n};\n\nexport const useIsOwnParticipant = (participantId) => {\n const loggedInParticipantId = useParticipant();\n return participantId === loggedInParticipantId;\n}\n","import { makeStyles, Tooltip } from \"@material-ui/core\";\nimport React from \"react\";\nimport { useTranslate } from \"react-admin\";\n\nconst useStyles = makeStyles(theme => ({\n icon: {\n verticalAlign: 'middle',\n marginLeft: theme.spacing(0.5),\n color: props => props.themeColor[500],\n }\n}))\n\nexport const StatusIcon = ({ tooltipText, icon: Icon, themeColor, ...props }) => {\n const classes = useStyles({ themeColor })\n const translate = useTranslate();\n\n return \n \n \n}\n","import React from \"react\";\nimport { useTheme } from \"@material-ui/core\";\nimport { DomainDisabledOutlined } from \"@material-ui/icons\";\n\nimport { StatusIcon } from \"./StatusIcon\";\n\nexport const UnsanctionedIcon = ({ record, ...props }) => {\n const theme = useTheme();\n\n if (record?.isSanctioned !== false) return null;\n return \n}\n","import React from 'react';\nimport { Stepper, Step, StepLabel } from '@material-ui/core';\n\nexport const ImportStepper = ({ steps, activeStep }) =>\n \n {steps.map((label) => (\n \n {label}\n \n ))}\n \n","import React, {\n useCallback,\n useState,\n useMemo,\n isValidElement,\n} from 'react';\nimport { makeStyles, TextField } from '@material-ui/core';\nimport { Done } from '@material-ui/icons';\nimport { Autocomplete } from '@material-ui/lab'\nimport {\n useInput,\n useTranslate,\n FieldTitle,\n useChoices,\n warning,\n InputHelperText,\n useResourceContext\n} from 'react-admin';\nimport { orderBy, debounce } from 'lodash'\nimport { matchSorter } from 'match-sorter';\n\nimport AutocompleteSuggestion from './AutocompleteSuggestion';\n\nconst getOptionDescription = (option, optionDescription, translate) => {\n if (!option || !optionDescription) return;\n const description = option[optionDescription];\n return translate(description, { _: description, smart_count: 1 })\n}\n\n/**\n* An Input component for an autocomplete field, using an array of objects for the options\n*\n* Pass possible options as an array of objects in the 'choices' attribute.\n*\n* By default, the options are built from:\n* - the 'id' property as the option value,\n* - the 'name' property an the option text\n* @example\n* const choices = [\n* { id: 'M', name: 'Male' },\n* { id: 'F', name: 'Female' },\n* ];\n* \n*\n* You can also customize the properties to use for the option name and value,\n* thanks to the 'optionText' and 'optionValue' attributes.\n* @example\n* const choices = [\n* { _id: 123, full_name: 'Leo Tolstoi', sex: 'M' },\n* { _id: 456, full_name: 'Jane Austen', sex: 'F' },\n* ];\n* \n*\n* `optionText` also accepts a function, so you can shape the option text at will:\n* @example\n* const choices = [\n* { id: 123, first_name: 'Leo', last_name: 'Tolstoi' },\n* { id: 456, first_name: 'Jane', last_name: 'Austen' },\n* ];\n* const optionRenderer = choice => `${choice.first_name} ${choice.last_name}`;\n* \n*\n* `optionText` also accepts a React Element, that will be cloned and receive\n* the related choice as the `record` prop. You can use Field components there.\n* Note that you must also specify the `matchSuggestion` prop\n* @example\n* const choices = [\n* { id: 123, first_name: 'Leo', last_name: 'Tolstoi' },\n* { id: 456, first_name: 'Jane', last_name: 'Austen' },\n* ];\n* const matchSuggestion = (filterValue, choice) => choice.first_name.match(filterValue) || choice.last_name.match(filterValue);\n* const FullNameField = ({ record }) => {record.first_name} {record.last_name};\n* } matchSuggestion={matchSuggestion} />\n*\n* The choices are translated by default, so you can use translation identifiers as choices:\n* @example\n* const choices = [\n* { id: 'M', name: 'myroot.gender.male' },\n* { id: 'F', name: 'myroot.gender.female' },\n* ];\n*\n* However, in some cases (e.g. inside a ``), you may not want\n* the choice to be translated. In that case, set the `translateChoice` prop to false.\n* @example\n* \n*\n* The object passed as `options` props is passed to the material-ui component\n*\n* @example\n* \n*/\nconst AutocompleteInput = ({\n allowDuplicates = false,\n className,\n classes: classesOverride,\n choices = [],\n debounce: debounceDelay = 250,\n emptyText,\n emptyValue,\n format,\n fullWidth,\n helperText,\n id: idOverride,\n input: inputOverride,\n isRequired: isRequiredOverride,\n label,\n limitChoicesToValue,\n margin = 'dense',\n matchSuggestion,\n multiple,\n meta: metaOverride,\n nullable = false,\n onBlur,\n onChange,\n onFocus,\n options: {\n suggestionComponentProps,\n labelProps,\n InputProps,\n ...inputOptions\n } = {\n suggestionComponentProps: undefined,\n labelProps: undefined,\n InputProps: undefined,\n },\n optionText = 'name',\n optionValue = 'id',\n optionDescription,\n disableSort,\n parse,\n placeholder = \"ra.input.autocomplete.type_to_search\",\n setFilter,\n shouldRenderSuggestions: shouldRenderSuggestionsOverride,\n source,\n suggestionLimit,\n translateChoice = true,\n validate,\n variant = 'filled',\n loading,\n groupBy,\n alwaysGroup = false,\n inputValueMatcher,\n filterKeys,\n suggestionComponent,\n disabled,\n disableClearable,\n hideDisabled,\n getOptionDisabled,\n minFilterLength = 0,\n emptyOptionsText,\n noResultsText,\n disableRemove,\n renderTags,\n ...rest\n}) => {\n warning(\n isValidElement(optionText) && !matchSuggestion,\n `If the optionText prop is a React element, you must also specify the matchSuggestion prop:\n true}\n/>\n `\n );\n\n const resource = useResourceContext(rest);\n const translate = useTranslate();\n const classes = useStyles({ classes: classesOverride });\n const { id, input, isRequired, meta: { touched, error, submitError } } = useInput({\n format,\n id: idOverride,\n input: inputOverride,\n meta: metaOverride,\n onBlur,\n onChange,\n onFocus,\n parse,\n resource,\n source,\n validate,\n ...rest,\n });\n\n const debouncedSetFilter = useCallback( // eslint-disable-line react-hooks/exhaustive-deps\n debounce(setFilter || DefaultSetFilter, debounceDelay)\n , [setFilter, debounceDelay]);\n\n const [filterValue, setFilterValue] = useState('');\n const handleFilterChange = useCallback((event, value, reason) => {\n // getSuggestionFromValue will cause selectedValue to change, which will trigger a reset with no event or value.\n // must ignore otherwise filter value will reset.\n if (event == null && (value == null || value == '') && reason === 'reset') {\n if (multiple) return;\n return setFilterValue('');\n }\n if (multiple && event.type !== 'blur' && reason === 'reset') return;\n\n setFilterValue(value);\n debouncedSetFilter(value);\n }, [ multiple, debouncedSetFilter, setFilterValue]);\n\n const { getChoiceText, getChoiceValue } = useChoices({ optionText, optionValue });\n\n const getSuggestionFromValue = useCallback(\n value => choices.find(choice => getChoiceValue(choice) === value)\n , [ choices, getChoiceValue ]);\n\n const selectedValue = useMemo(() => {\n if (multiple) {\n if (!input.value || !Array.isArray(input.value)) return EmptyArray;\n return input.value.map(getSuggestionFromValue);\n }\n if (nullable) return getSuggestionFromValue(input.value);\n return getSuggestionFromValue(input.value) || '';\n }, [multiple, input.value, nullable, getSuggestionFromValue]);\n\n const handleChange = useCallback((event, item, reason, details) => {\n // prevent backspacing from removing an item while tags are hidden from the input\n if (disableRemove && reason === 'remove-option') return;\n const value = Array.isArray(item) ? item.map(getChoiceValue) : getChoiceValue(item)\n\n input.onChange(value);\n }, [getChoiceValue, input, disableRemove]);\n\n const handleOptionSelected = (option, value) => option === value && !(multiple && allowDuplicates);\n\n let options = choices.filter(Boolean);\n const grouped = groupBy && (alwaysGroup || options?.length > 5);\n if (grouped && !disableSort) {\n options = orderBy(options, groupBy)\n }\n\n const sorter = (grouped || disableSort) ? items => items : undefined;\n\n let _filterOptions;\n if (inputValueMatcher) {\n _filterOptions = (options, { inputValue }) => {\n if (!inputValue) return options;\n return options.filter(option => inputValueMatcher(inputValue, option));\n }\n } else if (filterKeys) {\n _filterOptions = (options, { inputValue }) => {\n if (!inputValue) return options;\n return matchSorter(options, inputValue, { keys: filterKeys, sorter });\n }\n } else {\n _filterOptions = (options, { inputValue }) => {\n if (!inputValue) return options;\n return matchSorter(options, inputValue, { keys: [getChoiceText], sorter });\n }\n }\n\n const isTooShort = (length = 0) => minFilterLength && length < minFilterLength\n\n const filterOptions = (options, input) => {\n if (isTooShort(input.inputValue?.length)) return [];\n let results = _filterOptions(options, input);\n if (hideDisabled) {\n results = results.filter(option => !getOptionDisabled(option))\n }\n return results;\n }\n\n const renderOption = useCallback((option, { selected }) => {\n if (!option) return null;\n const suggestion = !suggestionComponent\n ? \n : React.createElement(suggestionComponent, {\n ...suggestionComponentProps,\n suggestion: option,\n })\n\n return <>\n {suggestion}\n {selected && }\n \n }, [ suggestionComponent, suggestionComponentProps, optionDescription, getChoiceText, translate ])\n\n let noOptionsText = translate('ra.message.no_options');\n if (emptyOptionsText && (!filterValue?.length || isTooShort(filterValue.length))) {\n noOptionsText = translate(emptyOptionsText, { _: emptyOptionsText, smart_count: 1 })\n } else if (noResultsText && filterValue?.length > 0) {\n noOptionsText = translate(noResultsText, { _: noResultsText, smart_count: 1 })\n }\n\n return {\n return \n }\n helperText={\n (touched && (error || submitError)) || helperText ? (\n \n ) : null\n }\n variant={variant}\n margin={margin}\n fullWidth={fullWidth}\n value={filterValue}\n className={classes.input}\n placeholder={placeholder && translate(placeholder, { _: placeholder, smart_count: 1 })}\n inputProps={{\n ...inputProps,\n autoComplete: 'off',\n \"aria-autocomplete\": 'off',\n onFocus(event) {\n inputProps.onFocus(event);\n input.onFocus(event);\n },\n onBlur(event) {\n inputProps.onBlur(event);\n input.onBlur(event);\n }\n }}\n {...inputOptions}\n />\n }}\n />\n};\n\nconst DefaultSetFilter = () => {};\nconst EmptyArray = [];\n\nconst useStyles = makeStyles(theme => ({\n input: {\n minWidth: theme.spacing(24),\n marginRight: theme.spacing(1),\n },\n suggestion: {\n width: '100%',\n }\n}), { name: 'HiAutocompleteInput' });\n\nexport default AutocompleteInput;\n","import React, { useRef } from 'react';\nimport { Grid, Typography, makeStyles } from '@material-ui/core'\nimport useComponentSize from '@rehooks/component-size'\n\nconst useStyles = makeStyles(theme => ({\n icon: {\n color: theme.palette.text.secondary,\n marginRight: theme.spacing(2),\n }\n}))\n\nexport default ({ icon, primary, secondary }) => {\n const ref = useRef(null)\n const { width } = useComponentSize(ref)\n const classes = useStyles();\n\n return \n {icon && width > 250 && \n {React.cloneElement(icon, { className: classes.icon })}\n }\n \n {primary}\n\n {secondary && \n {secondary}\n }\n \n \n}\n","import React from 'react';\n\nimport MaskedTextInput from './MaskedTextInput';\n\nexport const timeMask = value => {\n if (/^[2]/.test(value)) return [/\\d/, /[0-3]/, ':', /[0-5]/, /\\d/];\n return [/[0-2]/, /\\d/, ':', /[0-5]/, /\\d/];\n}\n\nexport default props =>\n \n","import * as React from 'react';\nimport { useCallback } from 'react';\nimport { useInput, InputHelperText, sanitizeInputRestProps, FieldTitle } from 'react-admin';\nimport { FormHelperText, FormGroup, Checkbox, FormControlLabel } from '@material-ui/core';\n\nconst CheckboxInput = (props) => {\n const {\n format,\n label,\n fullWidth,\n helperText,\n onBlur,\n onChange,\n onFocus,\n options,\n disabled,\n parse,\n resource,\n source,\n validate,\n hideHelper = false,\n ...rest\n } = props;\n const {\n id,\n input: { onChange: finalFormOnChange, type, value, ...inputProps },\n isRequired,\n meta: { error, submitError, touched },\n } = useInput({\n format,\n onBlur,\n onChange,\n onFocus,\n parse,\n resource,\n source,\n type: 'checkbox',\n validate,\n ...rest,\n });\n\n const handleChange = useCallback(\n (event, value) => {\n finalFormOnChange(value);\n },\n [finalFormOnChange]\n );\n\n return (\n \n \n }\n label={\n \n }\n />\n {!hideHelper && \n \n }\n \n );\n};\n\nCheckboxInput.defaultProps = {\n options: {},\n};\n\nexport default CheckboxInput;\n","import React from 'react';\nimport { FormControl, FormHelperText, InputLabel, Chip, makeStyles } from '@material-ui/core';\nimport { FieldTitle, useResourceContext, useTranslate } from 'react-admin';\nimport { useFormState } from 'react-final-form';\n\nconst useStyles = makeStyles(theme => ({\n label: {\n transform: 'translate(0, -10px) scale(0.75)',\n },\n chips: {\n display: 'flex',\n flexWrap: 'wrap',\n },\n chip: {\n margin: theme.spacing(.5),\n },\n}));\n\nconst onClick = (value, input, multiple) => {\n let nextValue;\n if (multiple) {\n const currentValue = input.value || [];\n nextValue = currentValue.includes(value)\n ? currentValue.filter(v => v !== value)\n : [...currentValue, value];\n } else {\n nextValue = input.value !== value ? value : null;\n }\n input.onChange(nextValue);\n input.onBlur(nextValue);\n};\n\nconst ChipInput = ({ choices, optionText, input, id, label, source, isRequired, meta, allowEmpty = false, multiple = false, ...props }) => {\n const resource = useResourceContext(props);\n const classes = useStyles();\n const translate = useTranslate();\n const { values } = useFormState();\n const value = source && values[source];\n const { touched, error, submitError, helperText = false } = meta;\n\n const formHelperText = (touched && (error || submitError)) || helperText;\n\n const hasEmptyLabel = allowEmpty && allowEmpty !== true;\n return \n {label && (\n \n \n \n )}\n
\n {choices.map(choice => {\n const choiceValue = choice.id;\n const label = typeof optionText === 'function'\n ? optionText(choice)\n : choice[optionText];\n const isSelected = multiple\n ? (input.value || []).includes(choiceValue)\n : input.value === choiceValue;\n const color = isSelected ? 'secondary' : undefined;\n const variant = isSelected ? 'default' : 'outlined';\n return (\n onClick(choiceValue, input, multiple)}\n />\n );\n })}\n {hasEmptyLabel && choices.length > 0 && onClick(null, input, multiple)}\n />}\n
\n {formHelperText && (\n \n {translate(formHelperText, { _: formHelperText })}\n \n )}\n \n};\n\nexport default ChipInput;\n","import React from \"react\";\nimport { useTranslate } from \"react-admin\";\n\nimport AutocompleteInput from \"./AutocompleteInput\";\nimport ChipInput from \"./ChipInput\";\n\nconst ChipSelectInput = ({ selectThreshold = 15, multiple, optionText, choices, showNone, emptyText, ...props }) => {\n const translate = useTranslate();\n\n let data = choices ? [...choices] : [];\n data = data.sort((dataA, dataB) => {\n const a = optionText(dataA);\n const b = optionText(dataB);\n\n if (!a && !b) return 0;\n if (a && !b) return -1;\n if (b && !a) return 1;\n\n return a.localeCompare(b, undefined, {\n sensitivity: 'base',\n ignorePunctuation: true,\n numeric: true,\n })\n })\n\n const long = data.length > selectThreshold;\n if (long && showNone) data.push({ id: null, name: showNone });\n\n if (long) return \n return \n}\n\nexport default ChipSelectInput;\n","import React, { useState } from 'react';\nimport { useFormState } from 'react-final-form';\nimport moment from 'moment'\nimport { useInput, FieldTitle, InputHelperText, useResourceContext } from 'react-admin';\nimport {\n KeyboardDatePicker,\n KeyboardTimePicker,\n KeyboardDateTimePicker,\n} from '@material-ui/pickers';\n\nexport const datePlaceholder = moment().format('YYYY-MM-DD');\nexport const dateTimePlaceholder = moment().format('YYYY-MM-DD HH:mm');\n\nconst defaultOptions = {\n variant: 'inline',\n showTodayButton: true,\n autoOk: true,\n format: 'YYYY-MM-DD',\n placeholder: datePlaceholder,\n minutesStep: 5,\n hideTabs: true,\n}\nconst getOptions = options => Object.assign({}, defaultOptions, options);\n\nconst makePicker = (PickerComponent, dateOnly = false) => props => {\n const [ focused, setFocused ] = useState(false);\n const { values: { timezone } } = useFormState();\n\n const {\n id,\n input: { name, value, onChange, onFocus, onBlur, ...input },\n meta: { touched, error, submitError },\n isRequired\n } = useInput(props);\n\n const {\n options,\n label,\n source,\n helperText,\n className,\n variant,\n margin = 'dense',\n } = props;\n const resource = useResourceContext(props);\n\n const onDateChange = value => {\n // remove any timezone and truncate time\n const parseFormat = dateOnly ? 'YYYY-MM-DD' : 'YYYY-MM-DD HH:mm'\n const date = moment(value).utc(true).format(parseFormat);\n // adjust to selected timezone\n const dateISO = moment.tz(date, parseFormat, timezone || 'UTC').toISOString();\n\n return onChange(dateISO);\n }\n\n const onDateFocus = e => {\n setFocused(true);\n return onFocus(e);\n }\n\n const onDateBlur = e => {\n setFocused(false);\n onDateChange(e.target.value);\n return onBlur(e);\n }\n\n const allOptions = getOptions(options);\n const inputValue = moment(value).isValid() ? moment.tz(value, timezone).format(allOptions.format || 'YYYY-MM-DD HH:mm') : null;\n\n return }\n inputVariant={variant}\n margin={margin}\n error={!!(touched && (error || submitError))}\n helperText={(touched && (error || submitError)) || helperText ? (\n \n ) : null\n }\n className={className}\n value={value || null} // null avoids an error in rifm (no longer necessary in v4)\n inputValue={inputValue}\n onChange={onDateChange}\n onFocus={onDateFocus}\n onBlur={onDateBlur}\n {...input}\n InputLabelProps={{\n shrink: focused || !!value,\n }}\n {...allOptions}\n />\n}\n\nexport const DateInput = makePicker(KeyboardDatePicker, true);\nexport const InlineDateInput = makePicker(KeyboardDatePicker, true);\nexport const TimeInput = makePicker(KeyboardTimePicker);\nexport const InlineTimeInput = makePicker(KeyboardTimePicker);\nexport const DateTimeInput = makePicker(KeyboardDateTimePicker);\nexport const InlineDateTimeInput = makePicker(KeyboardDateTimePicker);\n","import moment from 'moment';\nimport React from 'react';\nimport { useField, useFormState } from 'react-final-form';\n\nimport { InlineDateTimeInput, DateInput } from './DateInput';\n\nexport const EndTimeInput = ({ maxHours, ...props }) => {\n const { name } = useField();\n const { values } = useFormState();\n\n const { startTime, timezone } = values;\n const localTimezone = moment.tz.guess();\n const start = moment.tz(startTime, timezone || localTimezone).format('YYYY-MM-DD HH:mm');\n\n const maxDate = (maxHours && start) ? moment.tz(start, timezone || localTimezone).add(maxHours, 'hours').format('YYYY-MM-DD HH:mm') : undefined;\n const openTo = (start && !values[name]) ? 'hours' : 'date';\n\n return \n}\n\nexport const EndDateInput = ({ maxHours, ...props }) => {\n const { values: { startDate, startTime } } = useFormState();\n const start = startDate || startTime\n const maxDate = (maxHours && start) ? moment(start).add(maxHours, 'hours').toISOString(true) : undefined;\n\n return \n}\n","import React from 'react';\nimport { SelectInput, SelectArrayInput, useTranslate, useResourceContext, RadioButtonGroupInput, useLocale } from 'react-admin';\nimport { useFormState } from 'react-final-form';\nimport moment from 'moment';\n\nimport {\n FIRST_PERIOD,\n SECOND_PERIOD,\n THIRD_PERIOD,\n OVERTIME_PERIOD,\n SHOOTOUT_PERIOD,\n ASSIGNMENT_POSITIONS,\n} from '@hisports/scoresheet/src/constants';\nimport { getSeasonDisplayName, SEASONS } from '@hisports/common/src/seasons';\n\nimport { useSport } from '../../http';\nimport { ROUND_TYPES } from '../../resources/drafts/generator/InfoStep';\nimport {\n METHODS as GENERATOR_METHODS,\n TYPES as GENERATOR_TYPES,\n ROUND_TYPES as GENERATOR_ROUND_TYPES,\n WEEKDAYS_TYPES as GENERATOR_WEEKDAYS_TYPES,\n} from '../../resources/schedules/dialogs/generator/Generator';\nimport { formatCurrency } from '../../locale';\n\nimport FunctionField from '../fields/FunctionField';\nimport AutocompleteInput from './AutocompleteInput';\nimport { useSeason } from './SeasonSelector';\n\nconst value = (id, name, description) => ({ id, name, description })\nexport const createChoices = choices => choices.map(choice => {\n if (typeof choice === 'string') return value(choice, choice)\n return choice;\n})\n\nexport const EnumInput = ({\n select = false,\n radio = false,\n sortValues = true,\n multiple,\n options = {},\n emptyLabel = '',\n defaultValue,\n ...props\n}) => {\n const translate = useTranslate();\n const sport = useSport();\n\n let Input;\n if (radio) {\n Input = RadioButtonGroupInput\n } else if (!select) {\n Input = AutocompleteInput\n } else if (multiple) {\n Input = SelectArrayInput;\n } else {\n Input = SelectInput;\n }\n\n props.choices = props.choices?.filter(choice => !choice?.sports?.length || choice.sports.includes(sport));\n\n return {\n if (!selected.length) return emptyLabel;\n\n const choices = props.choices.map(choice => choice.id);\n let values = [...selected];\n if (sortValues) {\n values.sort((a, b) => choices.indexOf(a) - choices.indexOf(b))\n }\n values = values.map(value => {\n const choice = props.choices.find(choice => choice.id === value);\n return translate(choice.name, { _: choice.name });\n })\n if (values.length === 1) return values[0];\n if (values.length === 2) return `${values[0]} ${translate('ra.function.and')} ${values[1]}`\n\n const first = values.slice(0, -1);\n const last = values[values.length - 1];\n return `${first.join(', ')}, ${translate('ra.function.and')} ${last}`\n },\n defaultValue: defaultValue && multiple ? [defaultValue] : defaultValue,\n ...options\n }}\n disableSort\n {...props}\n />\n}\n\nexport const EnumField = props =>\n {\n const value = record?.[source];\n if (!value) return;\n return translate(`resources.${resource}.values.${source}.${value}`, { _: value })\n }} />\n\nexport const SeasonInput = props => {\n const sport = useSport();\n const seasonId = useSeason();\n const choices = SEASONS.map(seasonId => ({ id: seasonId, name: getSeasonDisplayName(seasonId, sport) }))\n return \n}\n\nexport const ScheduleTypeEnumInput = props => {\n const resource = useResourceContext(props);\n return \n}\n\nexport const TournamentScheduleTypeEnumInput = props => {\n const resource = useResourceContext(props);\n return \n}\n\nexport const CupScheduleTypeEnumInput = props => {\n const resource = useResourceContext(props);\n return \n}\n\nexport const PeriodTypeEnumInput = props => {\n const resource = useResourceContext(props);\n return \n}\n\nexport const ResourceTypeEnumInput = props => {\n const resource = useResourceContext(props);\n return \n}\n\nexport const GenderEnumInput = props => {\n const resource = useResourceContext(props);\n return \n}\n\nexport const GameStatusEnumInput = props => {\n const translate = useTranslate();\n return translate(type)}\n />\n}\n\nexport const GamePeriodEnumInput = props =>\n \n\nexport const ArenaSlotTypeEnumInput = props =>\n \n\nexport const ActivityTypeEnumInput = props =>\n \n\nexport const AssignmentStatusEnumInput = props =>\n \n\nexport const OfficeTypeEnumInput = ({ hideOrganization = false, ...props }) => {\n const types = [\n { id: 'Branch', name: 'resources.offices.values.type.Branch' },\n { id: 'Region', name: 'resources.offices.values.type.Region' },\n { id: 'District', name: 'resources.offices.values.type.District' },\n { id: 'Association', name: 'resources.offices.values.type.Association' },\n { id: 'Administrative', name: 'resources.offices.values.type.Administrative' },\n { id: 'Zone', name: 'resources.offices.values.type.Zone' },\n { id: 'League', name: 'resources.offices.values.type.League' },\n { id: 'Tournament', name: 'resources.offices.values.type.Tournament' },\n { id: 'Cup', name: 'resources.offices.values.type.Cup', sports: ['Soccer'] },\n ]\n if (!hideOrganization) types.unshift({ id: 'Organization', name: 'resources.offices.values.type.Organization' })\n return \n}\n\nexport const PlayerPositionsEnumInput = props =>\n \n\nexport const AssignmentPositionsEnumInput = ({ additionalChoices = [], ...props }) => {\n const choices = ASSIGNMENT_POSITIONS.map(\n ({ position, sports }) => ({ id: position, name: `resources.games.values.assignment.position.${position}`, sports })\n )\n\n return \n}\n\nexport const MemberPositionsEnumInput = props => {\n const translate = useTranslate();\n return translate(type)}\n />\n}\n\nexport const ContactTypeEnumInput = props =>\n \n\nexport const AddressTypeEnumInput = props =>\n \n\nexport const LanguageTypeEnum = props =>\n \n\nexport const ProfileDexterityEnumInput = props =>\n \n\nexport const DayEnumInput = ({ abbreviation = true, ...props }) => {\n return \n}\n\nexport const AnnouncementTypeEnumInput = props =>\n \n\nexport const AnnouncementTargetTypeEnumInput = props =>\n \n\nexport const DraftGameMethodInput = props =>\n \n\nexport const DraftGameTypeInput = ({ showMatrixOption, ...props }) =>\n \n\nexport const DraftGameRoundTypeEnumInput = props =>\n \n\nexport const DraftGameWeekdaysTypeEnumInput = props =>\n \n\nexport const DraftTypeEnumInput = props =>\n \n\nexport const DraftMethodEnumInput = props =>\n \n\nexport const DraftRoundTypeEnumInput = props =>\n \n\nexport const ProvinceEnumInput = props =>\n \n\nexport const RoleEnumInput = props =>\n \n\nexport const FrequencyEnumInput = props =>\n \n\nexport const TimezoneEnumInput = props => {\n const translate = useTranslate();\n const COUNTRY_CODES = {\n 'Canada': 'CA',\n 'United States': 'US',\n 'Europe': ['GB', 'FR', 'IT', 'NL'],\n }\n\n const timezones = region => {\n const codes = Array.isArray(COUNTRY_CODES[region]) ? COUNTRY_CODES[region] : [COUNTRY_CODES[region]];\n const zones = codes.map(code => moment.tz.zonesForCountry(code)).flat();\n return zones.map(tz => ({ id: tz, name: tz.replaceAll('_', ' '), region }));\n }\n\n return translate(`common.regions.${region}`)} />\n}\n\nexport const FileTypeEnumInput = props =>\n \n\nexport const SportsEnumInput = props => {\n return \n}\n\nexport const SurfaceSizeEnumInput = props =>\n \n\nexport const SurfaceTypeEnumInput = props =>\n \n\nexport const GameFormatEnumInput = props =>\n \n\nexport const AttributeTypeEnumInput = props =>\n \n\nexport const AttributeTargetTypeEnumInput = props =>\n \n\nexport const AttributeValueTypeEnumInput = props =>\n \n\nexport const AssignRuleTypeEnumInput = ({ disabled, types, ...props }) =>\n \n\nexport const AssignTypeEnumInput = props =>\n \n\nexport const AssignTypeDelegationEnumInput = props =>\n \n\nexport const AssignRuleStatusEnumInput = props =>\n \n\nexport const QualificationCategoryTypeInput = props =>\n \n\nexport const OfficialTransactionTypeInput = ({ hideBase = false, ...props }) =>\n \n\nexport const PitcherLimitsScheduleTypeEnumInput = props =>\n \n\nexport const LimitTypeEnumInput = props =>\n \n\nexport const ClaimTypeEnumInput = ({ settings = {}, hideAmount = false, helperText, ...props }) => {\n const locale = useLocale();\n const translate = useTranslate()\n const { values } = useFormState();\n\n const {\n claimableDriver,\n claimablePassenger,\n claimableBreakfast,\n claimableLunch,\n claimableDinner,\n driverAmount,\n passengerAmount,\n breakfastAmount,\n lunchAmount,\n dinnerAmount,\n driverExcludedDistance,\n passengerExcludedDistance,\n } = settings;\n\n const amount = (amount, excludedDistance, isKm) => {\n if (amount == null || hideAmount) return;\n\n const amountText = formatCurrency(amount, locale, true);\n if (!isKm) return amountText;\n\n if (excludedDistance == null) return `${amountText}/km`;\n return `${amountText}/km ${translate('resources.officialClaims.helpers.excluded_amount', { distance: excludedDistance })}`;\n }\n\n const value = values?.[props?.source];\n const choices = [\n {\n id: 'Driver',\n name: 'resources.officialClaims.values.type.Driver',\n type: 'resources.officialTransactions.values.type.Travel',\n amount: amount(driverAmount, driverExcludedDistance, true),\n enabled: claimableDriver || value === 'Driver',\n },\n {\n id: 'Passenger',\n name: 'resources.officialClaims.values.type.Passenger',\n type: 'resources.officialTransactions.values.type.Travel',\n amount: amount(passengerAmount, passengerExcludedDistance, true),\n enabled: claimablePassenger || value === 'Passenger',\n },\n {\n id: 'Breakfast',\n name: 'resources.officialClaims.values.type.Breakfast',\n type: 'resources.officialTransactions.values.type.Per Diem',\n amount: amount(breakfastAmount),\n enabled: claimableBreakfast || value === 'Breakfast',\n },\n {\n id: 'Lunch',\n name: 'resources.officialClaims.values.type.Lunch',\n type: 'resources.officialTransactions.values.type.Per Diem',\n amount: amount(lunchAmount),\n enabled: claimableLunch || value === 'Lunch',\n },\n {\n id: 'Dinner',\n name: 'resources.officialClaims.values.type.Dinner',\n type: 'resources.officialTransactions.values.type.Per Diem',\n amount: amount(dinnerAmount),\n enabled: claimableDinner || value === 'Dinner',\n },\n ].filter(choice => choice.enabled);\n\n const selectedChoice = value && choices.find(choice => choice.id === value);\n return translate(type)}\n alwaysGroup\n disableSort\n {...props}\n />\n}\n\nexport const OfficeClaimsTypesEnumInput = props => {\n return \n}\n\nexport const ClaimStatusEnumInput= props => {\n return \n}\n\nexport const InfractionSeverityInput = props => {\n return \n}\n\nexport const SuspensionStatusInput = props => {\n const { values } = useFormState();\n return option.disabled}\n hideDisabled\n choices={[\n { id: 'Pending', name: 'resources.suspensions.values.status.Pending' },\n { id: 'Appealed', name: 'resources.suspensions.values.status.Appealed', disabled: values?.code },\n { id: 'Active', name: 'resources.suspensions.values.status.Active' },\n { id: 'Completed', name: 'resources.suspensions.values.status.Completed' },\n { id: 'Cancelled', name: 'resources.suspensions.values.status.Cancelled' },\n ]}\n />\n}\n\nexport const SuspensionPositionGroupInput = props => {\n return \n}\n\nexport const SanctionPositionGroupInput = props => {\n return \n}\n\nexport const DurationTypeInput = props => {\n const resource = useResourceContext(props);\n return \n}\n\nexport const DisciplineStatusInput = props => {\n return \n}\n","import React, { useState } from 'react';\nimport { TextInput, useInput } from 'react-admin';\n\nimport TextMask from 'react-text-mask';\n\nconst MaskedInput = ({ inputRef, ...props }) =>\n \n\nexport default ({ maskOptions, InputProps, ...props }) => {\n const {\n input: { value, onFocus, onBlur },\n } = useInput(props);\n\n const [ focused, setFocused ] = useState(false);\n\n const onInputFocus = e => {\n setFocused(true)\n return onFocus(e)\n }\n\n const onInputBlur = e => {\n setFocused(false);\n return onBlur(e)\n }\n\n return \n}\n","import React, { useContext, useEffect, useMemo } from 'react';\nimport { FormControl, Select, MenuItem, makeStyles } from '@material-ui/core';\nimport { useSelector } from 'react-redux';\nimport { useForm, Field, useFormState } from 'react-final-form';\nimport { useRouteMatch, useHistory } from 'react-router-dom';\n\nimport { getSeasonDisplayName, SEASONS } from '@hisports/common/src/seasons';\n\nimport usePreferences from '../usePreferences';\nimport { useDefaultSeason, useSport } from '../../http';\n\nexport const SeasonContext = React.createContext([null, () => {}]);\nexport const SeasonProvider = props => {\n const defaultSeason = useDefaultSeason();\n const season = usePreferences('seasonId', defaultSeason);\n\n useEffect(() => {\n const [ current, setSeason ] = season;\n if (current != null) return;\n setSeason(defaultSeason)\n }, [ season, defaultSeason ])\n\n const value = useMemo(() => ({\n season,\n defaultSeason,\n }), [ season, defaultSeason ])\n\n return
\n}\n\nexport const useSeason = () => {\n const { season: [ seasonId ] } = useContext(SeasonContext);\n return seasonId;\n}\n\nexport const useFormSeason = () => {\n const appSeasonId = useSeason();\n const { values } = useFormState();\n const matches = useRouteMatch(\"/:resource/:id\")\n const params = (matches && matches.params) || {};\n\n const resources = useSelector(state => state.admin.resources);\n const { schedules, groups, teams, games } = resources || {};\n\n if (values.seasonId) return values.seasonId;\n\n if (values.scheduleId) {\n const schedule = schedules.data[values.scheduleId];\n if (schedule) return schedule.seasonId;\n }\n\n if (values.groupId) {\n const group = groups.data[values.groupId];\n if (group) return group.seasonId;\n }\n\n if (values.groupIds && values.groupIds.length) {\n const groupId = values.groupIds[0];\n const group = groups.data[groupId];\n if (group) return group.seasonId;\n }\n\n if (values.teamId) {\n const team = teams.data[values.teamId];\n if (team) return team.seasonId;\n }\n\n if (params.resource === \"schedules\") {\n const scheduleId = parseInt(params.id, 10);\n const schedule = schedules.data[scheduleId];\n if (schedule) return schedule.seasonId;\n }\n\n if (params.resource === \"teams\") {\n const teamId = parseInt(params.id, 10);\n const team = teams.data[teamId];\n if (team) return team.seasonId;\n }\n\n if (params.resource === \"games\") {\n const gameId = parseInt(params.id, 10);\n const game = games.data[gameId];\n if (game) return game.seasonId;\n }\n\n return appSeasonId;\n}\n\nconst useStyles = makeStyles(theme => ({\n root: {\n display: 'flex',\n flexWrap: 'wrap',\n flex: 1,\n alignItems: 'flex-end',\n },\n formControl: {\n margin: theme.spacing(1),\n minWidth: theme.spacing(15),\n width: '100%',\n },\n selectEmpty: {\n marginTop: theme.spacing(2),\n },\n inputHistory: {\n fontWeight: 'bold',\n },\n}))\n\nconst BaseSeasonFilter = ({ source, meta }) => {\n const seasonId = useSeason()\n const { change } = useForm();\n\n useEffect(() => {\n change(source, seasonId)\n }, [change, seasonId, source])\n return null;\n}\n\nexport const SeasonFilter = props =>\n \n\nexport default () => {\n const { season: [ seasonId, setSeason ] } = useContext(SeasonContext)\n const defaultSeason = useDefaultSeason()\n const classes = useStyles();\n const sport = useSport();\n const history = useHistory()\n\n const isDefault = seasonId === defaultSeason;\n return
\n \n {\n setSeason(e.target.value);\n history.push(`/`);\n }}\n className={isDefault ? classes.input : classes.inputHistory}\n inputProps={{\n name: 'season',\n id: 'season-input',\n }}\n >\n {SEASONS.map(season =>\n {getSeasonDisplayName(season, sport)}\n )}\n \n \n
\n}\n","import { makeStyles } from '@material-ui/core';\nimport React, { useState, forwardRef, useEffect } from 'react';\nimport SignaturePad from 'react-signature-pad-wrapper';\n\nexport const useSignature = (ref) => {\n const [ signature, setSignature ] = useState(null);\n const [ isEmpty, setEmpty ] = useState(true);\n\n return {\n isEmpty,\n signature,\n handleChange: function() {\n setSignature(this.toDataURL());\n setEmpty(false);\n },\n clear: () => {\n ref.current.clear();\n setEmpty(true);\n },\n };\n}\n\nconst useStyles = makeStyles(theme => ({\n root: {\n background: theme.palette.grey[100],\n borderRadius: theme.spacing(.5),\n margin: theme.spacing(1, 0),\n }\n}))\n\nexport const SignatureInput = forwardRef(({ onChange }, ref) => {\n const classes = useStyles();\n\n useEffect(() => {\n const resize = () => {\n const canvas = ref.current?.canvas;\n const signaturePad = ref.current?.instance;\n if (!canvas || !signaturePad) return;\n\n // maintain aspect ratio\n const width = canvas.parentNode.clientWidth;\n canvas.width = width;\n canvas.height = width / 2.5;\n\n signaturePad.clear();\n }\n resize()\n window.addEventListener('resize', resize);\n return () => {\n window.removeEventListener('resize', resize);\n }\n }, [ ref ])\n\n return
\n \n
\n})\n","import React from 'react';\nimport { BooleanInput } from 'react-admin';\nimport { makeStyles } from '@material-ui/core'\n\nconst useGroupStyles = makeStyles(theme => ({\n root: {\n marginLeft: theme.spacing(2),\n marginRight: theme.spacing(-2),\n }\n}))\n\nconst useSwitchStyles = makeStyles(theme => ({\n root: {\n order: 2,\n marginLeft: 'auto',\n },\n}))\n\nexport default ({ classes: classesOverride, ...props }) => {\n const groupClasses = useGroupStyles(classesOverride);\n const switchClasses = useSwitchStyles(classesOverride);\n return \n}\n","import * as React from 'react';\nimport { useCallback } from 'react';\nimport DownloadIcon from '@material-ui/icons/GetApp';\nimport { Button, sanitizeListRestProps,\n fetchRelatedRecords,\n useDataProvider,\n useNotify,\n useListContext,\n useResourceContext,\n useTranslate,\n} from 'react-admin'\nimport { ListItemIcon, ListItemText, MenuItem } from '@material-ui/core';\n\n// does not currently support nested relations\nconst parseInclude = _include => Array.isArray(_include) ? _include.map(include => ({ relation: include, scope: { scope: 'Tenant' } })) : (_include || undefined);\n\nconst ExportButton = (props) => {\n const {\n maxResults = 1000,\n onClick,\n label = 'ra.action.export',\n icon = ,\n exporter: customExporter,\n sort, // deprecated, to be removed in v4\n menuItem,\n ...rest\n } = props;\n const {\n filter,\n filterValues,\n currentSort,\n exporter: exporterFromContext,\n total,\n } = useListContext(props);\n const resource = useResourceContext(props);\n const exporter = customExporter || exporterFromContext;\n const dataProvider = useDataProvider();\n const notify = useNotify();\n const translate = useTranslate()\n\n const handleClick = useCallback(event => {\n if (!exporter) return;\n const _include = parseInclude(exporter._include);\n dataProvider.getList(resource, {\n sort: currentSort || sort,\n filter: filter\n ? { ...filterValues, ...filter, _include }\n : { ...filterValues, _include },\n pagination: { page: 1, perPage: maxResults },\n })\n .then(({ data }) => {\n return exporter(\n data,\n fetchRelatedRecords(dataProvider),\n dataProvider,\n resource\n )\n })\n .catch(error => {\n console.error(error); /* eslint-disable-line no-console */\n notify('ra.notification.http_error', { type: 'warning' });\n });\n\n if (typeof onClick === 'function') {\n onClick(event);\n }\n }, [\n currentSort,\n dataProvider,\n exporter,\n filter,\n filterValues,\n maxResults,\n notify,\n onClick,\n resource,\n sort,\n ]);\n\n if (menuItem) return \n \n {icon}\n \n \n \n\n return \n {icon}\n \n};\n\nexport default ExportButton\n","import { SimpleFormIterator } from 'react-admin';\nimport { withStyles } from '@material-ui/core';\n\nconst styles = theme => ({\n root: {\n padding: 0,\n margin: 0,\n marginTop: theme.spacing(1),\n },\n line: {\n alignItems: 'center',\n borderBottom: 0,\n },\n form: {\n display: 'grid',\n gridAutoFlow: 'column',\n gridColumnGap: `${theme.spacing(1)}px`,\n },\n index: {\n display: props => !props.hideIndex ? 'none' : 'block',\n padding: '1em 1em 0 0',\n },\n})\n\nexport const TransitionProps = {\n in: true,\n appear: true,\n enter: false,\n exit: false,\n}\n\nexport default withStyles(styles)(SimpleFormIterator);\n","import React from 'react';\nimport { makeStyles } from '@material-ui/core';\nimport { SingleFieldList as RaSingleFieldList } from 'react-admin';\n\nconst useStyles = makeStyles({\n root: {\n display: 'inline-flex',\n flexDirection: 'column'\n },\n})\n\nexport const SingleFieldList = props => {\n const classes = useStyles();\n return \n}\n","import React, {\n Children,\n cloneElement,\n Component,\n isValidElement,\n} from 'react';\nimport PropTypes from 'prop-types';\nimport { compose } from 'recompose';\nimport { get } from 'lodash';\nimport Typography from '@material-ui/core/Typography';\nimport Button from '@material-ui/core/Button';\nimport FormHelperText from '@material-ui/core/FormHelperText';\nimport { withStyles, createStyles } from '@material-ui/core/styles';\nimport AddIcon from '@material-ui/icons/AddCircleOutline';\nimport ArrowUpwardIcon from '@material-ui/icons/ArrowUpward';\nimport ArrowDownwardIcon from '@material-ui/icons/ArrowDownward';\nimport CloseIcon from '@material-ui/icons/Clear';\nimport { FormInput } from 'react-admin'\nimport { translate, ValidationError } from 'ra-core';\nimport classNames from 'classnames';\n\n\nconst styles = theme =>\n createStyles({\n root: {\n padding: 0,\n margin: 0,\n '& > li:last-child': {\n borderBottom: 'none',\n },\n },\n line: {\n display: 'flex',\n alignItems: 'flex-start',\n listStyleType: 'none',\n paddingBottom: theme.spacing(1.5),\n // borderBottom: `solid 1px ${theme.palette.divider}`,\n [theme.breakpoints.down('xs')]: { display: 'block' },\n },\n index: {\n width: '3em',\n paddingTop: theme.spacing(2.5),\n textAlign: 'center',\n [theme.breakpoints.down('sm')]: { display: 'none' },\n },\n form: {\n display: 'grid',\n gridAutoFlow: 'column',\n gridColumnGap: `${theme.spacing(1)}px`,\n flex: 2,\n },\n action: {\n paddingTop: theme.spacing(1.5),\n },\n leftIcon: {\n marginRight: theme.spacing(1),\n },\n });\n\nexport class SortedFormIterator extends Component {\n constructor(props) {\n super(props);\n // we need a unique id for each field for a proper enter/exit animation\n // but redux-form doesn't provide one (cf https://github.com/erikras/redux-form/issues/2735)\n // so we keep an internal map between the field position and an autoincrement id\n this.nextId = props.fields.length\n ? props.fields.length\n : props.initialValues\n ? props.initialValues.length\n : 0;\n\n // We check whether we have a initialValues (which must be an array) before checking\n // the fields prop which will always be empty for a new record.\n // Without it, our ids wouldn't match the default value and we would get key warnings\n // on the CssTransition element inside our render method\n this.ids = this.nextId > 0 ? Array.from(Array(this.nextId).keys()) : [];\n }\n\n moveUp = index => () => {\n const { fields } = this.props;\n [this.ids[index - 1], this.ids[index]] = [this.ids[index], this.ids[index - 1]]\n fields.move(index, index - 1);\n }\n\n moveDown = index => () => {\n const { fields } = this.props;\n [this.ids[index + 1], this.ids[index]] = [this.ids[index], this.ids[index + 1]]\n fields.move(index, index + 1);\n }\n\n removeField = index => () => {\n const { fields } = this.props;\n this.ids.splice(index, 1);\n fields.remove(index);\n };\n\n // Returns a boolean to indicate whether to disable the remove button for certain fields.\n // If disableRemove is a function, then call the function with the current record to\n // determing if the button should be disabled. Otherwise, use a boolean property that\n // enables or disables the button for all of the fields.\n disableRemoveField = (record, disableRemove) => {\n if (typeof disableRemove === 'boolean') {\n return disableRemove;\n }\n return disableRemove && disableRemove(record);\n };\n\n addField = () => {\n const { fields } = this.props;\n this.ids.push(this.nextId++);\n fields.push({});\n };\n\n render() {\n const {\n basePath,\n classes = {},\n children,\n fields,\n meta: { error, submitFailed },\n record,\n resource,\n source,\n translate,\n disableAdd,\n disableRemove,\n variant,\n margin,\n } = this.props;\n\n const records = get(record, source);\n return fields ? (\n
    \n {submitFailed && typeof error !== \"object\" && error && (\n \n \n \n )}\n {fields.map((member, index) => (\n
  • \n \n {index + 1}\n \n
    \n {Children.map(children, (input, index2) =>\n isValidElement(input) ? (\n \n ) : null\n )}\n
    \n \n \n \n \n \n \n \n \n \n \n {!this.disableRemoveField((records && records[index]) || {}, disableRemove) && (\n \n \n \n \n \n )}\n
  • \n ))}\n {!disableAdd && (\n
  • \n \n \n \n {translate('ra.action.add')}\n \n \n
  • \n )}\n
\n ) : null;\n }\n}\n\nSortedFormIterator.defaultProps = {\n disableAdd: false,\n disableRemove: false,\n};\n\nSortedFormIterator.propTypes = {\n initialValues: PropTypes.any,\n basePath: PropTypes.string,\n children: PropTypes.node,\n classes: PropTypes.object,\n className: PropTypes.string,\n fields: PropTypes.object,\n meta: PropTypes.object,\n record: PropTypes.object,\n source: PropTypes.string,\n resource: PropTypes.string,\n translate: PropTypes.func,\n disableAdd: PropTypes.bool,\n disableRemove: PropTypes.oneOfType([PropTypes.func, PropTypes.bool]),\n};\n\nexport default compose(\n translate,\n withStyles(styles)\n)(SortedFormIterator);\n","import React, { Children, cloneElement, Fragment, isValidElement } from 'react';\nimport { SaveButton, useRecordContext, useResourceContext, DeleteWithConfirmButton } from 'react-admin';\nimport PropTypes from 'prop-types';\nimport { compose } from 'recompose';\nimport MuiToolbar from '@material-ui/core/Toolbar';\nimport withWidth from '@material-ui/core/withWidth';\nimport { withStyles, createStyles } from '@material-ui/core/styles';\nimport classnames from 'classnames';\n\nimport { isTemporaryId } from '../../http/restClient/response';\nimport { isAuthorized } from '../Authorize';\n\nconst styles = theme => createStyles({\n toolbar: {\n backgroundColor:\n theme.palette.type === 'light'\n ? theme.palette.grey[100]\n : theme.palette.grey[900],\n },\n desktopToolbar: {\n marginTop: theme.spacing(2),\n },\n mobileToolbar: {\n position: 'fixed',\n bottom: 0,\n left: 0,\n right: 0,\n padding: '16px',\n width: '100%',\n boxSizing: 'border-box',\n flexShrink: 0,\n zIndex: 2,\n },\n defaultToolbar: {\n flex: 1,\n display: 'flex',\n justifyContent: 'space-between',\n },\n spacer: {\n [theme.breakpoints.down('xs')]: {\n height: '5em',\n },\n },\n});\n\nconst valueOrDefault = (value, defaultValue) =>\n typeof value === 'undefined' ? defaultValue : value;\n\nconst Toolbar = ({\n basePath,\n children,\n classes,\n className,\n handleSubmit,\n handleSubmitWithRedirect,\n invalid,\n pristine,\n redirect,\n disabled,\n saving,\n submitOnEnter,\n width,\n isSynced,\n hideDelete = false,\n confirmDeleteTitle,\n confirmDeleteMessage,\n deleteButton = ,\n ...rest\n}) => {\n const record = useRecordContext(rest)\n const resource = useResourceContext(rest);\n\n const showDelete = record?.id && !hideDelete && !isSynced && !isTemporaryId(record.id) && isAuthorized(record, resource, 'remove');\n return <>\n \n {Children.count(children) === 0 ? (\n
\n \n {showDelete && cloneElement(deleteButton, { basePath, record, resource })}\n
\n ) : (\n Children.map(children, button =>\n button && isValidElement(button)\n ? React.cloneElement(button, {\n basePath,\n handleSubmit: valueOrDefault(\n button.props.handleSubmit,\n handleSubmit\n ),\n handleSubmitWithRedirect: valueOrDefault(\n button.props.handleSubmitWithRedirect,\n handleSubmitWithRedirect\n ),\n invalid,\n pristine,\n saving,\n submitOnEnter: valueOrDefault(\n button.props.submitOnEnter,\n submitOnEnter\n ),\n })\n : null\n )\n )}\n \n
\n \n}\n\nToolbar.propTypes = {\n basePath: PropTypes.string,\n children: PropTypes.node,\n classes: PropTypes.object,\n className: PropTypes.string,\n confirmDeleteTitle: PropTypes.string,\n confirmDeleteMessage: PropTypes.string,\n disabled: PropTypes.bool,\n handleSubmit: PropTypes.func,\n handleSubmitWithRedirect: PropTypes.func,\n invalid: PropTypes.bool,\n pristine: PropTypes.bool,\n record: PropTypes.object,\n redirect: PropTypes.oneOfType([\n PropTypes.string,\n PropTypes.bool,\n PropTypes.func,\n ]),\n resource: PropTypes.string,\n saving: PropTypes.oneOfType([PropTypes.object, PropTypes.bool]),\n submitOnEnter: PropTypes.bool,\n width: PropTypes.string,\n};\n\nToolbar.defaultProps = {\n submitOnEnter: true,\n};\n\nconst enhance = compose(\n withWidth(),\n withStyles(styles)\n);\nexport default enhance(Toolbar);\n","import { useCallback, useEffect, useRef } from 'react';\nimport { indexById, removeEmpty, useSafeSetState, usePaginationState, useSortState, useSelectionState, useResourceContext } from 'react-admin';\nimport applyFilter from 'loopback-filters';\nimport { isEqual } from 'lodash'\n\nimport { getWhere, getOrder } from '../../http/restClient/filters';\n\n/**\n * Handle filtering, sorting and pagination on local data.\n *\n * Returns the data and callbacks expected by .\n *\n * @example\n * const data = [\n * { id: 1, name: 'Arnold' },\n * { id: 2, name: 'Sylvester' },\n * { id: 3, name: 'Jean-Claude' },\n * ]\n * const ids = [1, 2, 3];\n *\n * const MyComponent = () => {\n * const listContext = useList({\n * data,\n * ids,\n * basePath: '/resource';\n * resource: 'resource';\n * });\n * return (\n * \n * \n * \n * \n * \n * \n * );\n * };\n *\n * @param {UseListOptions} props\n * @param {Record[]} props.data An array of records\n * @param {Identifier[]} props.ids An array of the record identifiers\n * @param {Boolean} props.loaded: A boolean indicating whether the data has been loaded at least once\n * @param {Boolean} props.loading: A boolean indicating whether the data is being loaded\n * @param {Error | String} props.error: Optional. The error if any occurred while loading the data\n * @param {Object} props.filter: Optional. An object containing the filters applied on the data\n * @param {Number} props.page: Optional. The initial page index\n * @param {Number} props.perPage: Optional. The initial page size\n * @param {SortPayload} props.sort: Optional. The initial sort (field and order)\n */\nexport const useList = (props) => {\n const resource = useResourceContext(props);\n const {\n data,\n error,\n filter = defaultFilter,\n ids,\n loaded,\n loading,\n page: initialPage = 1,\n perPage: initialPerPage = 1000,\n sort: initialSort = defaultSort,\n initialSelection: initialSelection = defaultInitialSelection,\n } = props;\n\n const [finalItems, setFinalItems] = useSafeSetState(() => ({\n data: Array.isArray(data) ? indexById(data) : {},\n ids: Array.isArray(ids) ? ids : [],\n total: Array.isArray(ids) ? ids.length : 0,\n }));\n\n // pagination logic\n const { page, setPage, perPage, setPerPage } = usePaginationState({\n page: initialPage,\n perPage: initialPerPage,\n });\n\n // sort logic\n const { sort, setSort: setSortObject } = useSortState(initialSort);\n const setSort = useCallback((field, order = 'ASC') => {\n setSortObject({ field, order });\n setPage(1);\n }, [setPage, setSortObject]);\n\n // selection logic\n const {\n selectedIds,\n onSelect,\n onToggleItem,\n onUnselectItems,\n } = useSelectionState(initialSelection);\n\n // filter logic\n const filterRef = useRef(filter);\n const [displayedFilters, setDisplayedFilters] = useSafeSetState({});\n const [filterValues, setFilterValues] = useSafeSetState(filter);\n\n const hideFilter = useCallback((filterName) => {\n setDisplayedFilters(previousState => {\n const { [filterName]: _, ...newState } = previousState;\n return newState;\n });\n setFilterValues(previousState => {\n const { [filterName]: _, ...newState } = previousState;\n return newState;\n });\n }, [setDisplayedFilters, setFilterValues]);\n\n const showFilter = useCallback((filterName, defaultValue) => {\n setDisplayedFilters(previousState => ({\n ...previousState,\n [filterName]: true,\n }));\n setFilterValues(previousState =>\n removeEmpty({\n ...previousState,\n [filterName]: defaultValue,\n })\n );\n }, [setDisplayedFilters, setFilterValues]);\n\n const setFilters = useCallback((filters, displayedFilters) => {\n setFilterValues(removeEmpty(filters));\n if (displayedFilters) {\n setDisplayedFilters(displayedFilters);\n }\n setPage(1);\n }, [setDisplayedFilters, setFilterValues, setPage]);\n\n // handle filter prop change\n useEffect(() => {\n if (isEqual(filter, filterRef.current)) return;\n filterRef.current = filter;\n setFilterValues(filter);\n setPage(1);\n });\n\n // We do all the data processing (filtering, sorting, paginating) client-side\n useEffect(() => {\n if (!loaded) return;\n\n const lbFilter = {\n where: getWhere(resource, { filter: filterValues, clientFiltering: true }),\n order: getOrder({ field: sort.field, order: sort.order }),\n }\n\n let tempData = applyFilter(data, lbFilter);\n const filteredLength = tempData.length;\n\n // paginate\n tempData = tempData.slice((page - 1) * perPage, page * perPage);\n const finalData = indexById(tempData);\n const finalIds = tempData\n .filter(data => typeof data !== 'undefined')\n .map(data => data.id);\n\n setFinalItems({\n data: finalData,\n ids: finalIds,\n total: filteredLength,\n });\n }, [\n data,\n resource,\n filterValues,\n loaded,\n page,\n perPage,\n setFinalItems,\n sort.field,\n sort.order,\n ]);\n\n return {\n currentSort: sort,\n data: finalItems.data,\n error,\n displayedFilters,\n filterValues,\n hideFilter,\n ids: finalItems.ids,\n loaded,\n loading,\n onSelect,\n onToggleItem,\n onUnselectItems,\n page,\n perPage,\n selectedIds,\n setFilters,\n setPage,\n setPerPage,\n setSort,\n showFilter,\n total: finalItems.total,\n };\n};\n\nconst defaultFilter = {};\nconst defaultSort = { field: null, order: null };\nconst defaultInitialSelection = []\n","import { useState, useLayoutEffect } from 'react';\n\nconst measureSize = element => ({\n height: element?.getBoundingClientRect().height,\n width: element?.getBoundingClientRect().width,\n})\n\nexport const useElementSize = element => {\n const [size, setSize] = useState(measureSize(element));\n\n useLayoutEffect(() => {\n if (!element) return;\n setSize(measureSize(element));\n\n const observer = new ResizeObserver(() => {\n window.requestAnimationFrame(() => {\n setSize(measureSize(element));\n });\n });\n\n observer.observe(element);\n return () => {\n observer.disconnect();\n };\n }, [ element ]);\n\n return size;\n}\n","import { useState, useEffect } from 'react';\nimport { createInstance } from 'localforage';\n\nconst storage = createInstance({\n name: 'hisports',\n storeName: 'preferences',\n})\n\nexport default (key, initialState) => {\n const [ loaded, setLoaded ] = useState(false);\n const [ state, setState ] = useState(initialState)\n\n useEffect(() => {\n storage.getItem(key).then(saved => {\n if (saved != null) {\n setState(saved)\n }\n setLoaded(true);\n }).catch(e => {\n setLoaded(true)\n })\n }, [ key ])\n\n useEffect(() => {\n if (!loaded) return;\n storage.setItem(key, state).catch(e => {});\n }, [ key, state, loaded ])\n\n return [ state, setState, loaded ];\n}\n","import React, { isValidElement, Fragment } from 'react';\nimport { useTranslate } from 'react-admin';\n\n// https://github.com/airbnb/polyglot.js/blob/master/index.js#L148\n// Could probably be written as /(%\\{(?:[a-zA-Z_]+)\\})/\nconst REGEX_VARIABLE = /(%\\{(?:.+?)\\})/;\n\nconst groupOptions = (options) => (\n Object.keys(options).reduce((acc, key) => {\n const value = options[key];\n const type = isValidElement(value) ? 'jsx' : 'regular';\n acc[type][key] = value;\n return acc;\n }, { jsx: {}, regular: {} })\n);\n\nconst smartT = (simpleT, id, options) => {\n // If there is no key there is nothing to work with. Matching Polyglot behavior.\n if (!id) return;\n\n // Options could be either a number or missing\n if (typeof options !== 'object') return simpleT(id, options);\n\n const { jsx, regular } = groupOptions(options);\n const content = simpleT(id, regular);\n\n if (!Object.keys(jsx).length) return content;\n\n const renderFragment = (shard, index) => {\n // `shard` is either a variable WITH syntax '%{variableName}' or a part of the string\n // We could use a regex to extract `variableName` but this is 100x faster\n // Syntax is preserved to avoid false positive replacements when part of the string\n // is matching a substitution variable\n const node = options[shard.slice(2, -1)];\n return node ? {node} : shard;\n };\n\n // returns an array of mixed strings/Fragment nodes\n return content.split(REGEX_VARIABLE).map(renderFragment);\n};\n\nexport const useRichTranslate = () => {\n const translate = useTranslate();\n return (id, options) => smartT(translate, id, options);\n}\n","import { useEffect } from 'react';\n\nimport usePreferences from './usePreferences';\n\nconst EVENT_NAME = 'preferences-changed';\n\nexport default function useSyncedPreferences(key, initialValue) {\n const [state, setState, loaded] = usePreferences(key, initialValue);\n\n useEffect(() => {\n function handlePreferenceChange(event) {\n if (event.detail?.key === key) {\n setState(prev => (prev === event.detail.value ? prev : event.detail.value));\n }\n }\n\n window.addEventListener(EVENT_NAME, handlePreferenceChange);\n return () => {\n window.removeEventListener(EVENT_NAME, handlePreferenceChange);\n };\n }, [key, setState]);\n\n useEffect(() => {\n if (!loaded) return;\n\n const event = new CustomEvent(EVENT_NAME, {\n detail: { key, value: state }\n });\n\n window.dispatchEvent(event);\n }, [key, state, loaded]);\n\n return [state, setState, loaded];\n}\n","import playLogo from '../assets/logos/SpordlePlay.svg';\nimport playLogoDark from '../assets/logos/SpordlePlayDark.svg';\n\nexport const logo = playLogo\nexport const logoDark = playLogoDark\nexport const appName = 'Spordle Play'\n","import React, { useContext, useState, useMemo, useEffect } from 'react';\n\nimport { authService } from './index';\n\nconst AuthContext = React.createContext({});\n\nexport const AuthProvider = props => {\n const [ isReady, setReady ] = useState(false);\n const [ isLoggedIn, setLoggedIn ] = useState(false);\n const [ isVolunteer, setVolunteer ] = useState(false);\n const [ account, setAccount ] = useState(null);\n const [ identity, setIdentity ] = useState();\n const [ identities, setIdentities ] = useState([]);\n const [ permissions, setPermissions ] = useState([]);\n const [ scopes, setScopes ] = useState([])\n const [ seasonId, setSeasonId ] = useState();\n const [ officeId, setOfficeId ] = useState();\n const [ notices, setNotices ] = useState([]);\n const [ flags, setFlags ] = useState([]);\n\n useEffect(() => {\n const handler = () => {\n setReady(authService._ready);\n setLoggedIn(authService.isLoggedIn());\n setVolunteer(authService.isVolunteer());\n setAccount(authService.getAccount());\n setIdentity(authService.getIdentity());\n setIdentities(authService.getIdentities());\n setPermissions(authService.getPermissions());\n setScopes(authService.getScopes());\n setSeasonId(authService._seasonId);\n setOfficeId(authService._officeId);\n setNotices(authService.getNotices());\n setFlags(authService.getFlags());\n }\n\n handler();\n return authService.subscribe(handler);\n }, [])\n\n const value = useMemo(() => ({\n isReady,\n isLoggedIn,\n isVolunteer,\n account,\n identity,\n identities,\n permissions,\n scopes,\n seasonId,\n officeId,\n notices,\n flags,\n }), [ isReady, isLoggedIn, isVolunteer, account, identity, identities, permissions, scopes, seasonId, officeId, notices, flags ])\n\n return \n}\n\nexport const useAuthContext = () => useContext(AuthContext);\n\nconst createAuthHook = property => () => {\n const auth = useAuthContext();\n return auth[property]\n}\n\nexport const useReady = createAuthHook('isReady');\nexport const useLoggedIn = createAuthHook('isLoggedIn');\nexport const useVolunteer = createAuthHook('isVolunteer');\nexport const useAccount = createAuthHook('account');\nexport const useIdentity = createAuthHook('identity');\nexport const useIdentities = createAuthHook('identities');\n/** @type {() => Array<{ roleType: string; }>} */\nexport const usePermissions = createAuthHook('permissions');\nexport const useScopes = createAuthHook('scopes');\nexport const useNotices = createAuthHook('notices');\n/** @type {() => Array} */\nexport const useFlags = createAuthHook('flags');\n\nexport const useFilteredScopes = (roleTypes) => {\n const permissions = usePermissions();\n const filtered = permissions.filter(permission => roleTypes.includes(permission.roleType));\n return Array.from(new Set(filtered.flatMap(p => p.scopes)));\n}\n\nexport const useParticipant = () => {\n const identity = useIdentity();\n return identity?.participantId;\n}\n\nexport const useTenant = () => {\n const identity = useIdentity();\n return identity?.tenant;\n}\n\nexport const useSport = () => {\n const tenant = useTenant();\n if (!tenant) return null;\n return tenant.sport;\n}\n\nexport const useDefaultSeason = () => {\n const { seasonId } = useAuthContext();\n return seasonId;\n}\n\nexport const useDefaultOffice = () => {\n const { officeId } = useAuthContext();\n return officeId;\n}\n\nexport const useFlag = () => {\n const flags = useFlags();\n return useMemo(() => {\n return flag => flags.includes(flag);\n }, [ flags ])\n}\n","import axios from 'axios';\n\nimport setupHostInterceptor from './hostInterceptor';\nimport setupRetryInterceptor from './retryInterceptor';\nimport setupDeviceInterceptor from './deviceInterceptor';\nimport setupVersionInterceptor from './versionInterceptor';\nimport setupIdentityInterceptor from './identityInterceptor';\nimport setupAccessTokenInterceptor from './accessTokenInterceptor';\n\nconst API_URL = `${process.env.API_HOST}/api`;\n\nconst instance = axios.create({\n baseURL: API_URL,\n})\n\nsetupHostInterceptor(instance);\nsetupRetryInterceptor(instance);\nsetupDeviceInterceptor(instance);\nsetupVersionInterceptor(instance);\nsetupIdentityInterceptor(instance);\nsetupAccessTokenInterceptor(instance);\n\n/** @type {typeof fetch} */\nexport const apiFetchPublic = (url, ...args) => fetch(`${process.env.API_HOST}/api${url}`, ...args);\n\nexport default instance;\n","import { createInstance } from 'localforage';\nimport { v4 as uuid } from 'uuid';\nimport { setTag } from '@sentry/browser';\n\nconst storage = createInstance({\n name: 'hisports',\n storeName: 'device'\n})\n\nexport const storageReady = storage.ready();\n\nconst getDeviceId = () => {\n return storage.getItem('deviceId')\n .catch(() => null)\n .then(deviceId => {\n if (deviceId) return deviceId;\n\n const newId = uuid();\n storage.setItem('deviceId', newId).catch(e => {})\n return newId;\n })\n}\n\nexport const deviceId = getDeviceId().catch(() => uuid())\n\ndeviceId.then(deviceId => {\n setTag('deviceId', deviceId)\n})\n","import { useState, useEffect, useCallback } from 'react';\n\nimport apiClient from './apiClient';\nimport { parseResponse } from './restClient/response';\n\nexport default (url, initialState = null, enabled = true) => {\n const [ data, setData ] = useState(initialState);\n const [ loaded, setLoaded ] = useState(false)\n const [ loading, setLoading ] = useState(false)\n const [ error, setError ] = useState(null)\n // innerVersion is use to force a refetch\n const [innerVersion, setInnerVersion] = useState(0);\n\n const refetch = useCallback(() => {\n setInnerVersion(prevInnerVersion => prevInnerVersion + 1);\n }, []);\n\n useEffect(() => {\n if (!enabled) return;\n if (!url) {\n setLoading(false)\n setData(null);\n return;\n }\n setLoading(true)\n setError(null);\n apiClient(url)\n .then(({ data, headers }) => parseResponse(null, data, headers))\n .then(data => {\n setData(data)\n setLoaded(true);\n setLoading(false);\n }, e => {\n setError(e);\n setLoading(false);\n })\n }, [ url, enabled, innerVersion ])\n\n return { data, loaded, loading, error, refetch };\n}\n","import loopbackRestClient from './restClient';\nimport { AuthService } from './authService';\nimport { AuthClient } from './authClient';\n\nexport const authService = new AuthService(\n process.env.AUTH_CLIENT_ID,\n process.env.AUTH_CLIENT_SECRET\n);\n\nexport const authClient = new AuthClient(authService)\nexport const restClient = loopbackRestClient();\n\nexport { default as apiClient, apiFetchPublic } from './apiClient';\nexport { default as useHttpClient } from './useHttpClient';\n\nexport { deviceId } from './deviceService';\n\nexport * from './AuthContext';\n","import moment from \"moment\";\n\nimport { filterParticipants } from \"@hisports/scoresheet/src/util/participants\";\nimport { filterOfficialParticipants } from \"@hisports/scoresheet/src/util/officialParticipants\";\nimport { LATEST_SEASON } from \"@hisports/common/src/seasons\";\n\nimport { authService } from '../index';\n\nconst dedupe = values => Array.from(new Set(values.filter(value => value != null)));\nconst escapeRegExpChars = value => value.replace(/[-[\\]{}()*+?.,\\\\^$|#\\s]/g, '\\\\$&');\n\nexport const ilike = value => ({ ilike: `%${value}%` });\nexport const ilikeDiacriticUnsensitive = value => ({ ilike: `_diacritic_%${value}%` });\n\nexport const startsWith = value => ({ ilike: `${value}%` })\nexport const regexStartsWith = value => ({ regexp: new RegExp(`^${escapeRegExpChars(value)}`, 'i') }) // loopback-filters 1.1.1 does not support ilike\nexport const eq = (value, useInq = true, simplify = true) => {\n if (value == null) return;\n if (!Array.isArray(value)) return value;\n\n const values = dedupe(value);\n if (!values.length) return;\n\n if (simplify && values.length === 1) return values[0]\n if (useInq) return { inq: values };\n return values;\n}\n\nconst filterName = (resource, params) => {\n const { name: value } = params.filter;\n if (!value) return;\n\n switch (resource) {\n case 'participants':\n return filterParticipants(value);\n\n case 'officialoffices':\n return filterOfficialParticipants(value);\n\n case 'offices':\n return {\n or: [\n { name: ilikeDiacriticUnsensitive(value) },\n { HCRId: startsWith(value) },\n ]\n }\n case 'teams': {\n return {\n or: [\n { name: ilike(value) },\n { HCRId: startsWith(value) },\n ]\n }\n }\n\n case 'venues': {\n return { or: [\n { 'name': ilike(value) },\n { 'address': ilike(value) },\n { 'city': ilike(value) },\n { 'region': ilike(value) },\n { 'country': ilike(value) },\n { 'alias': ilike(value) },\n ] }\n }\n\n case 'surfaces': {\n const [ venue ] = value.trim().split(' - ')\n return { or: [\n { name: ilike(venue) },\n { alias: ilike(venue) },\n { 'venue.name': ilike(venue) },\n { 'venue.address': ilike(venue) },\n { 'venue.city': ilike(venue) },\n { 'venue.region': ilike(venue) },\n { 'venue.country': ilike(venue) },\n { 'venue.alias': ilike(venue) },\n ] }\n }\n\n default:\n return {\n name: ilike(value),\n }\n }\n}\n\nconst filterOfficialName = (resource, params) => {\n const { officialname: value } = params.filter\n if (!value) return;\n\n if (resource == 'officialoffices') return filterOfficialParticipants(value);\n}\n\nconst filterTeam = (resource, params) => {\n const { target, id } = params;\n const { teamId: value } = params.filter;\n\n let teamId = eq(value);\n if (resource === 'games' && target == 'teams') {\n teamId = id;\n }\n\n if (teamId == null) return;\n if (resource === 'games' || resource === 'draftgames') {\n return { or: [\n { homeTeamId: teamId },\n { awayTeamId: teamId },\n ] }\n }\n\n return {\n teamId,\n }\n}\n\nconst filterHCRId = (resource, params) => {\n const { HCRId: value } = params.filter;\n if (!value) return;\n\n if (typeof value === 'string' || typeof value === 'number') {\n return {\n HCRId: startsWith(value),\n }\n }\n\n return {\n HCRId: value,\n }\n}\n\nconst filterEmail = (resource, params) => {\n const { email: value } = params.filter.accounts || params.filter;\n if (!value) return;\n\n if (!['accounts', 'participants'].includes(resource)) return;\n\n switch (resource) {\n case 'participants':\n return {\n accounts: { email: ilike(value) }\n }\n default:\n return {\n email: ilike(value),\n }\n }\n}\n\nconst filterOffice = (resource, params) => {\n const { officeId, effectiveOffices, includeMembers, includeParents, via } = params.filter;\n const { target, id } = params;\n\n if (effectiveOffices === false) {\n return { officeId }\n }\n\n if (params.clientFiltering) return;\n\n let value = officeId || effectiveOffices;\n if (target === 'officeId' && effectiveOffices) {\n value = id;\n }\n\n if (!value) return;\n switch (resource) {\n case 'draftgames':\n case 'games': {\n return {\n effectiveOffices: eq(value, false),\n includeMembers: includeMembers || false,\n includeParents,\n via,\n }\n }\n\n case 'schedules':\n case 'teams':\n default: {\n return {\n effectiveOffices: eq(value, false),\n includeMembers,\n includeParents,\n via,\n }\n }\n }\n}\n\nconst filterEffective = effectiveType => (resource, params) => {\n const { [effectiveType]: value } = params.filter;\n\n if (params.clientFiltering) return;\n\n const effectiveValue = eq(value, false);\n if (!effectiveValue || !['games', 'draftgames'].includes(resource)) return;\n\n return {\n [effectiveType]: effectiveValue,\n }\n}\n\nconst filterSchedule = (resource, params) => {\n const { scheduleId: value } = params.filter;\n const scheduleId = eq(value);\n if (scheduleId == null) return;\n\n if (resource === 'teams' && !Array.isArray(value)) return;\n return {\n scheduleId,\n }\n}\n\nconst filterSurface = (resource, params) => {\n const { arenaId, effectiveSurfaces, includeParents = true } = params.filter;\n const { target, id } = params;\n\n if (effectiveSurfaces === false) {\n return { arenaId }\n }\n\n if (params.clientFiltering) return;\n\n let value = arenaId || effectiveSurfaces;\n if ((target === 'arenaId') && effectiveSurfaces) {\n value = id;\n }\n\n if (!value) return;\n switch (resource) {\n default: {\n return {\n effectiveSurfaces: eq(value, false),\n includeParents,\n }\n }\n }\n}\n\nconst filterNumber = (resource, params) => {\n const { number } = params.filter;\n if (!number) return;\n\n if (resource === 'games') {\n if (params.clientFiltering) {\n // include draft game number (id)\n return { or: [{ number: regexStartsWith(number) }, { id: regexStartsWith(number) }] }\n }\n\n return { number: startsWith(number) }\n }\n\n return {\n number,\n }\n}\n\nconst filterDate = (resource, params) => {\n const { target } = params;\n const { name, pastEvents, seasonId } = params.filter;\n const limitPast = !pastEvents && (seasonId === LATEST_SEASON || seasonId === authService._seasonId);\n if (name || !limitPast || resource !== 'schedules' || target) return;\n\n return {\n endDate: {\n gte: moment().format('YYYY-MM-DD')\n }\n }\n}\n\nconst filterTime = (resource, params) => {\n const { target } = params;\n const { startTime, endTime, number, pastEvents, missingStartTime, seasonId } = params.filter;\n\n if (!['games', 'draftgames', 'activities', 'practices', 'arenaslots', 'officialtransactions'].includes(resource)) return;\n\n if (missingStartTime) {\n return { startTime: null }\n }\n\n if (startTime && endTime) {\n const startDate = moment.utc(startTime).format('YYYY-MM-DD');\n const endDate = moment.utc(endTime).format('YYYY-MM-DD');\n\n return { and: [\n { date: { gte: startDate } },\n { date: { lte: endDate } },\n ] }\n } else if (startTime && !endTime) {\n if (target && resource !== 'arenaslots') return { startTime: { gte: startTime } };\n const date = moment.utc(startTime).format('YYYY-MM-DD')\n\n if (resource === 'officialtransactions') return { date: { gte: date } };\n\n return {\n date\n }\n } else if (!startTime && endTime) {\n if (target && resource !== 'arenaslots') return { endTime: { gte: endTime } };\n const startDate = moment.utc().startOf('day').toISOString();\n const endDate = moment.utc(endTime).format('YYYY-MM-DD');\n\n if (resource === 'officialtransactions') return { date: { lte: endDate } };\n\n return { and: [\n { date: { gte: startDate } },\n { date: { lte: endDate } },\n ] }\n } else if (!pastEvents && (seasonId === LATEST_SEASON || seasonId === authService._seasonId) && !number && !target) { // limit past games\n if (resource === 'arenaslots') return;\n return {\n date: {\n gte: moment().format('YYYY-MM-DD'),\n }\n }\n }\n}\n\nconst filterAssigner = (resource, params) => {\n const { isAssigner } = params.filter;\n if (isAssigner == null || params.clientFiltering) return;\n return { isAssigner }\n}\n\nconst filterTarget = (resource, params) => {\n const { target, id } = params;\n if (!target || !target.endsWith('Id') || id == null) return;\n\n const filterKeys = [...Object.keys(params.filter), ...(params.filter.or || []).map(orClause => Object.keys(orClause)).flat()]\n if (filterKeys.some(key => ['effectiveOffices', 'scheduleOffices', 'awayTeamOffices', 'homeTeamOffices'].includes(key)) && target === 'officeId') return;\n if (filterKeys.includes('effectiveSurfaces') && target === 'arenaId') return;\n\n return {\n [target]: id\n }\n}\n\nconst filterValue = (resource, params) => {\n const { target, id } = params;\n if (resource !== 'assignrules' || target !== 'value') return;\n return {\n value: id,\n }\n}\n\nconst filterConflicts = (resource, params) => {\n const { conflictsOnly } = params.filter;\n if (!conflictsOnly || !['games', 'draftgames'].includes(resource)) return;\n\n return { status: 'Conflict' };\n}\n\nconst filterBracketGames = (resource, params) => {\n const { bracketGamesOnly } = params.filter;\n if (!bracketGamesOnly || resource !== 'games') return;\n\n return { gameBracket: { id: { neq: null } } };\n}\n\nconst filterAutomatic = (resource, params) => {\n const { isAutomatic } = params.filter;\n if (resource !== 'suspensions' || isAutomatic == null) return;\n\n return isAutomatic\n ? { or: [{ code: { neq: null } }, { sanctionId: { neq: null } }] }\n : { and: [{ code: null }, { sanctionId: null }] };\n}\n\nconst filterRest = (resource, params) => {\n const {\n startTime, endTime, pastEvents, missingStartTime,\n name, number, HCRId, email,\n teamId, scheduleId, officeId, arenaId,\n effectiveOffices, effectiveSurfaces, includeMembers, includeParents, via,\n scheduleOffices, teamOffices, homeTeamOffices, awayTeamOffices, surfaceOffices, assignOffices,\n isAssigner, isAutomatic, conflictsOnly, bracketGamesOnly,\n _scope, _include, _options,\n ...rest\n } = params.filter;\n\n const where = Object.keys(rest).reduce((where, key) => {\n const value = rest[key];\n if (typeof value === 'undefined') return where;\n if (Array.isArray(value) && !value.some(v => typeof v === 'object')) {\n where[key] = eq(value, true, !['arenaslots', 'practices', 'officialoffices'].includes(resource))\n } else {\n where[key] = value;\n }\n return where;\n }, {})\n\n if (!Object.keys(where).length) return;\n return where;\n}\n\nexport const getWhere = (resource, params) => {\n const where = [\n filterName,\n filterOfficialName,\n filterTeam,\n filterHCRId,\n filterEmail,\n filterOffice,\n filterEffective('scheduleOffices'),\n filterEffective('teamOffices'),\n filterEffective('homeTeamOffices'),\n filterEffective('awayTeamOffices'),\n filterEffective('surfaceOffices'),\n filterEffective('assignOffices'),\n filterSurface,\n filterNumber,\n filterSchedule,\n filterTime,\n filterDate,\n filterAssigner,\n filterTarget,\n filterValue,\n filterConflicts,\n filterBracketGames,\n filterAutomatic,\n filterRest,\n ].reduce((filters, filter) => {\n const result = filter(resource, params);\n if (result != null) filters.push(result);\n return filters;\n }, [])\n\n if (!where.length) return;\n if (where.length === 1) return where[0];\n return { and: where };\n}\n\nexport const getOrder = sort => {\n if (!sort) return;\n const { field, order } = sort;\n if (Array.isArray(field)) return field.map((f, i) => {\n if (order && order[i]) return `${f} ${order[i]}`\n return f\n })\n if (order) return `${field} ${order}`\n return field;\n}\n\n// skip pagination if value >500 (e.g., 999 workaround)\nexport const getLimit = ({ perPage }) => {\n if (perPage && perPage > 0 && perPage < 500) return perPage;\n}\n\nexport const getSkip = ({ page, perPage }) => {\n const limit = getLimit({ perPage });\n if (limit == null || page <= 0) return;\n return (page - 1) * perPage;\n}\n\nexport const skipFilter = (resource, filter) => {\n if (!['accounts', 'categories'].includes(resource)) return false;\n const hasFilter = Object.keys(filter).some(key => {\n const value = filter[key];\n if (key === '_scope') return false;\n if (key === 'isOfficial') return false;\n if (typeof value === 'string') {\n if (key === 'name') return value.length >= 3;\n if (key === 'email') return value.length >= 5;\n return value.length > 0;\n }\n return value != null;\n })\n return !hasFilter;\n}\n","import { v4 as uuid } from 'uuid';\nimport { isEmpty } from 'lodash';\n\nimport { dedupe } from '@hisports/parsers';\n\nimport { authService } from '../index';\nimport { RESOURCE_CACHE } from './cache.constant';\n\nexport const isTemporaryId = id =>\n id && typeof id === 'string' && id.startsWith('_')\n\nexport const getIdProperty = resource => {\n switch (resource) {\n case 'scoresheet':\n case 'gameassignsettings':\n return 'gameId';\n\n case 'schedulesettings':\n return 'scheduleId';\n\n case 'officesettings':\n case 'branchofficesettings':\n case 'officeassignsettings':\n case 'effectiveofficesettings':\n case 'effectivebranchofficesettings':\n case 'effectiveofficeassignsettings':\n return 'officeId';\n\n default:\n return 'id'\n }\n}\n\nexport const hasContent = resource =>\n ['posts', 'pages', 'webevents', 'announcements', 'articles'].includes(resource)\n\nconst _parseResponse = (resource, data, scopes) => {\n if (!data) return;\n\n // react-admin requires an id property\n const ID = getIdProperty(resource);\n if (ID !== 'id') {\n data.id = data[ID];\n }\n\n switch (resource) {\n case 'notifications':\n case 'officialassignments': {\n data.id = data.id || `_${uuid()}`\n break;\n }\n case 'permissions': {\n data.principalId = Number(data.principalId);\n break;\n }\n\n case 'practices': {\n data.type = 'Practice';\n break;\n }\n }\n\n if (hasContent(resource)) {\n data.content = JSON.parse(data.content);\n }\n\n if (scopes) {\n data._scopes = scopes;\n Object.defineProperty(data, '_scopes', {\n enumerable: true,\n configurable: false,\n writable: false,\n })\n }\n\n const permissions = authService.getPermissions();\n const officeId = (resource === 'offices') ? data.id : data.officeId;\n const scheduleId = (resource === 'schedules') ? data.id : data.scheduleId;\n\n // List of resource to get filtered scopes\n const filteredResource = ['games', 'draftgames', 'offices', 'schedules'];\n let filteredScopes\n\n // Get filtered record scopes if you find a permission with side inheritance\n // and resource is include in filteredResource\n if (permissions.some(p => p?.inherited != false) && filteredResource.includes(resource)) {\n filteredScopes = getFilteredScopes(permissions, officeId, scheduleId)\n }\n\n if (!isEmpty(filteredScopes)) {\n data._filteredScopes = filteredScopes;\n Object.defineProperty(data, '_filteredScopes', {\n enumerable: true,\n configurable: false,\n writable: false,\n })\n }\n\n return data;\n}\n\nexport const parseResponse = (resource, data, headers) => {\n if (!data) return;\n\n const scopes = headers && headers['x-authorized-roles']?.split(',');\n\n if (Array.isArray(data)) {\n return data.map(entity => _parseResponse(resource, entity, scopes));\n }\n return _parseResponse(resource, data, scopes);\n}\n\nexport const getTotal = (headers, data) => {\n if (!(\"x-total-count\" in headers)) return data.length;\n return parseInt(headers[\"x-total-count\"].split(\"/\").pop(), 10);\n}\n\nexport const getValidUntil = (() => {\n /**\n * @param {string} str\n */\n const transformStringToDuration = str => {\n const regexp = /(\\d+)(h|m|s)/;\n return str.split(' ').filter(Boolean).map(e => {\n const result = regexp.exec(e);\n if (!result) {\n return 0;\n }\n const [, time, type] = result;\n return ({\n h: Number(time) * 60 * 60 * 1000,\n m: Number(time) * 60 * 1000,\n s: Number(time) * 1000,\n })[type] || 0;\n }).concat(0, 0).reduce((a, b) => a + b);\n };\n\n return (resource) => {\n if (!(resource in RESOURCE_CACHE)) {\n return;\n }\n\n const duration = transformStringToDuration(RESOURCE_CACHE[resource]);\n const validUntil = new Date();\n validUntil.setTime(validUntil.getTime() + duration);\n return validUntil;\n }\n})();\n\n/**\n * Get filtered scopes for a record from their officeId and/or scheduleId\n * Currently only support Office and Schedule permission role types\n */\nexport const getFilteredScopes = (permissions = [], officeId, scheduleId, homeOfficeId) => {\n const scopes = []\n\n if (permissions.some(p => p.roleType === 'System')) {\n return authService.getScopes();\n }\n\n if (officeId) {\n permissions.forEach(p => {\n if (p.roleType === 'Office' && p.officeIds?.includes(officeId)) {\n scopes.push(...p.scopes);\n }\n })\n }\n\n if (scheduleId) {\n permissions.forEach(p => {\n if (p.roleType === 'Schedule' && p.scheduleIds?.includes(scheduleId)) {\n scopes.push(...p.scopes);\n }\n })\n }\n\n if (homeOfficeId) {\n permissions.forEach(p => {\n if (p.roleType === 'Office' && p.officeIds?.includes(homeOfficeId)) {\n scopes.push(...p.scopes);\n }\n })\n }\n\n permissions.forEach(p => {\n if (p.roleType !== 'Office' && p.roleType !== 'Schedule') {\n scopes.push(...p.scopes);\n }\n })\n\n return dedupe(scopes);\n}\n","import { useMemo } from 'react';\nimport { createTheme } from '@material-ui/core/styles';\nimport grey from '@material-ui/core/colors/grey';\nimport red from '@material-ui/core/colors/red';\nimport green from '@material-ui/core/colors/green';\nimport blue from '@material-ui/core/colors/blue';\nimport purple from '@material-ui/core/colors/purple';\nimport orange from '@material-ui/core/colors/orange';\nimport blueGrey from '@material-ui/core/colors/blueGrey';\nimport lightBlue from '@material-ui/core/colors/lightBlue';\nimport yellow from '@material-ui/core/colors/yellow';\nimport pink from '@material-ui/core/colors/pink';\nimport { enUS, frFR } from '@material-ui/core/locale'\n\nimport { useLocale } from './locale';\n\nconst theme = {\n palette: {\n purple,\n blueGrey,\n lightBlue,\n yellow,\n pink,\n primary: { ...blue, main: '#3994ff', contrastText: '#fff' },\n secondary: grey,\n success: {\n ...green,\n contrastText: '#fff',\n },\n error: red,\n warning: orange,\n tertiary: {\n ...purple,\n light: purple[300],\n main: purple[500],\n dark: purple[600],\n contrastText: '#fff',\n },\n },\n\n focusShadow: `0 0 10px 5px ${blue[100]}`,\n\n overrides: {\n MuiSelect: {\n select: {\n minWidth: 120,\n }\n },\n MuiFormHelperText: {\n root: {\n whiteSpace: 'pre-line',\n }\n },\n MuiTableCell: {\n root: {\n padding: 12,\n }\n },\n MuiList: {\n root: {\n backgroundColor: '#fff',\n }\n },\n MuiCardHeader: {\n action: {\n display: 'flex',\n }\n },\n RaShow: {\n root: {\n width: '100%',\n maxWidth: 8 * 150,\n marginLeft: 'auto',\n marginRight: 'auto'\n }\n },\n RaCreate: {\n root: {\n width: '100%',\n maxWidth: 8 * 150,\n marginLeft: 'auto',\n marginRight: 'auto'\n }\n },\n RaEdit: {\n root: {\n width: '100%',\n maxWidth: 8 * 150,\n marginLeft: 'auto',\n marginRight: 'auto'\n }\n },\n RaTabbedShowLayout: {\n content: {\n paddingLeft: 0,\n paddingRight: 0,\n }\n },\n RaAutocompleteSuggestionList: {\n suggestionsContainer: {\n zIndex: 9999,\n }\n },\n RaFileInputPreview: {\n removeButton: {\n display: 'none',\n }\n },\n RaImageField: {\n image: {\n maxHeight: '15rem',\n maxWidth: '100%',\n }\n },\n RaFilterForm: {\n form: {\n marginTop: 'auto',\n alignItems: 'center',\n minHeight: 40,\n }\n },\n RaTopToolbar: {\n root: {\n paddingTop: 4,\n paddingBottom: 4,\n alignSelf: 'baseline',\n alignItems: 'center',\n minHeight: 40,\n '& .MuiButtonBase-root': {\n whiteSpace: 'pre',\n },\n '& .MuiButton-startIcon': {\n display: 'inline-block',\n position: 'relative',\n top: '2px',\n },\n '@media(max-width: 600px)': {\n display: 'flex',\n flexDirection: 'column',\n }\n },\n },\n RaList: {\n bulkActionsDisplayed: {\n marginTop: 0,\n '& > .MuiToolbar-root': {\n position: 'sticky',\n top: 0,\n }\n }\n },\n RaListToolbar: {\n toolbar: {\n // minHeight: 48,\n // '@media (max-width: 900px)': {\n // flexDirection: 'column',\n // },\n },\n actions: {\n paddingTop: 8,\n alignItems: 'center',\n '@media (min-width: 600px)': {\n minWidth: 200,\n }\n }\n },\n RaFilter: {\n form: {\n '& [data-source=\"seasonId\"]': {\n display: 'none',\n }\n }\n },\n RaFilterFormInput: {\n body: {\n '@media (max-width: 600px)': {\n width: '100%',\n '& > div:first-child': {\n width: '100%',\n },\n '& .MuiFormControl-root': {\n width: '100%',\n }\n }\n },\n },\n MuiAutocomplete: {\n groupLabel: {\n lineHeight: '24px',\n paddingTop: 8,\n paddingBottom: 8,\n },\n hasPopupIcon: {\n '&:not(.Mui-focused) label': {\n right: 48,\n whiteSpace: 'pre',\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n }\n }\n },\n MuiTabs: {\n root: {\n maxWidth: 'calc(100vw - 16px)',\n },\n },\n MuiPaper: {\n rounded: {\n borderRadius: 8,\n }\n },\n MuiAlert: {\n root: {\n borderRadius: 8,\n }\n }\n },\n props: {\n MuiButton: {\n disableElevation: true,\n }\n }\n}\n\nexport const useCreateTheme = () => {\n const [ locale ] = useLocale();\n\n const appTheme = useMemo(() => {\n let muiLocale = enUS;\n if (locale === 'fr') {\n muiLocale = frFR;\n }\n return createTheme(theme, muiLocale)\n }, [ locale ])\n\n return appTheme;\n}\n","import React, { useEffect, useContext } from 'react';\nimport { TranslationContext } from 'react-admin';\nimport { Button } from '@material-ui/core';\n\nimport { useLocale, locales } from '../locale';\nimport { useTenant } from '../http';\n\nexport const LanguageMenu = ({ className }) => {\n const [ locale, setLocale ] = useLocale();\n const { setLocale: setAdminLocale, i18nProvider } = useContext(TranslationContext);\n const { sport } = useTenant() || {}\n\n const languages = Object.keys(locales)\n const currentLanguage = languages.indexOf(locale)\n const nextLanguage = languages[(currentLanguage + 1) % languages.length]\n\n useEffect(() => {\n i18nProvider.changeLocale(locale, sport)\n setAdminLocale(locale)\n }, [ i18nProvider, locale, sport, setAdminLocale ])\n\n return \n}\n","import React from 'react';\nimport { Paper, makeStyles } from '@material-ui/core';\nimport { ThemeProvider } from '@material-ui/styles'\nimport { Notification } from 'react-admin';\nimport Helmet from 'react-helmet';\n\nimport background from '../../assets/backgrounds/background.jpg'\n\nimport { useCreateTheme } from '../theme';\nimport { logoDark, appName } from '../flags';\nimport { LanguageMenu } from '../layout/LanguageMenu';\n\nconst useStyles = makeStyles(theme => ({\n root: {\n backgroundImage: `url(${background})`,\n backgroundColor: '#fdfdfd',\n\n position: 'absolute',\n top: 0,\n left: 0,\n right: 0,\n bottom: 0,\n },\n layout: {\n width: 'auto',\n marginLeft: theme.spacing(2),\n marginRight: theme.spacing(2),\n [theme.breakpoints.up(350 + theme.spacing(2 * 2))]: {\n width: 350,\n marginLeft: 'auto',\n marginRight: 'auto',\n },\n },\n logo: {\n marginTop: theme.spacing(8),\n width: 250,\n margin: '0 auto',\n textAlign: 'center',\n '& svg': {\n width: '100%',\n height: theme.spacing(10),\n },\n [theme.breakpoints.up(350 + theme.spacing(3 * 2))]: {\n marginTop: theme.spacing(16),\n }\n },\n paper: {\n marginBottom: theme.spacing(2),\n padding: theme.spacing(2),\n },\n}));\n\nconst Logo = ({ classes }) =>\n
\n
\n\nconst BaseLayout = ({ children, meta, hideNotifications }) => {\n const classes = useStyles();\n return
\n \n
\n \n \n {children}\n \n \n {meta}\n \n \n
\n {!hideNotifications && }\n
\n}\n\nexport default props => {\n const theme = useCreateTheme();\n return \n \n \n}\n","import React, { forwardRef } from 'react';\nimport { useLogout, useTranslate } from 'react-admin';\nimport { Button } from '@material-ui/core';\nimport { PowerSettingsNew } from '@material-ui/icons';\n\nimport { authService } from '../http';\nimport Layout from './BaseLayout';\n\nconst Logout = forwardRef((props, ref) => {\n const translate = useTranslate();\n const logout = useLogout();\n\n return \n});\n\n/* eslint-disable react/jsx-no-useless-fragment */\nconst Meta = () =>\n <>\n \n \n/* eslint-enable react/jsx-no-useless-fragment */\n\nexport default () => {\n const translate = useTranslate();\n const user = authService.getUsername();\n\n return }>\n

{translate('ra.auth.unauthorized')}

\n

{translate('ra.auth.unauthorized_long', { user })}

\n

{translate('components.login.messages.unauthorized')}

\n
\n}\n","import React, { useEffect } from 'react';\nimport { useTranslate } from 'react-admin';\nimport { Link } from '@material-ui/core';\n\nimport { usePermissions } from '../http';\n\nimport Layout from './BaseLayout';\nimport Unauthorized from './Unauthorized';\n\nexport default () => {\n const translate = useTranslate();\n const permissions = usePermissions();\n const volunteer = permissions.find(p => p.roleType === 'Game' && p.scopes.includes('scoresheets:manage'));\n\n const url = `/scoresheets/${volunteer?.gameId}/pregame`;\n useEffect(() => {\n if (!volunteer) return;\n window.location.href = url;\n }, [volunteer, url])\n\n if (!volunteer) return \n return \n

{translate('ra.message.redirecting')}...

\n

{translate('components.login.messages.redirect')}\n {translate('ra.action.click_here').toLowerCase()}.\n

\n
\n}\n","import React, { useEffect, Children, cloneElement } from 'react';\nimport PropTypes from 'prop-types';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { Drawer, makeStyles, useMediaQuery } from '@material-ui/core';\nimport { get } from 'lodash';\nimport { setSidebarVisibility } from 'ra-core';\n\nexport const DRAWER_WIDTH = 240;\nexport const CLOSED_DRAWER_WIDTH = 55;\n\nconst getWidth = (theme, isOpen) => {\n const property = isOpen ? 'sidebar.width' : 'sidebar.closedWith';\n const defaultWidth = isOpen ? DRAWER_WIDTH : CLOSED_DRAWER_WIDTH;\n return get(theme, property, defaultWidth);\n}\n\nconst useStyles = makeStyles(\n theme => ({\n drawerPaper: {\n position: 'relative',\n overflowX: 'hidden',\n width: props => getWidth(theme, props.open),\n transition: theme.transitions.create('width', {\n easing: theme.transitions.easing.sharp,\n duration: theme.transitions.duration.leavingScreen,\n }),\n height: '100%',\n [theme.breakpoints.only('xs')]: {\n backgroundColor: theme.palette.background.default,\n },\n zIndex: 1,\n },\n }),\n { name: 'RaSidebar' }\n);\n\nconst Sidebar = ({\n children,\n closedSize,\n size,\n classes: classesOverride,\n ...rest\n}) => {\n const dispatch = useDispatch();\n const isXSmall = useMediaQuery(theme => theme.breakpoints.down('xs'));\n const isSmall = useMediaQuery(theme => theme.breakpoints.down('sm'));\n\n // FIXME negating isXSmall and isSmall should be enough, but unfortunately\n // mui media queries use a two pass system and are always false at first\n // see https://github.com/mui-org/material-ui/issues/14336\n const isDesktop = useMediaQuery(theme => theme.breakpoints.up('md'));\n useEffect(() => {\n if (isDesktop) {\n dispatch(setSidebarVisibility(true)); // FIXME renders with a closed sidebar at first\n }\n }, [isDesktop, dispatch]);\n\n const open = useSelector(state => state.admin.ui.sidebarOpen);\n const classes = useStyles({ classes: classesOverride, open });\n useSelector(state => state.locale); // force redraw on locale change\n\n const toggleSidebar = () => dispatch(setSidebarVisibility(!open));\n const handleClose = () => dispatch(setSidebarVisibility(false));\n\n const variant = isXSmall ? 'temporary' : 'permanent';\n const onMenuClick = (isXSmall || isSmall) ? handleClose : undefined;\n\n return \n {cloneElement(Children.only(children), {\n dense: false,\n onMenuClick,\n })}\n \n};\n\nSidebar.propTypes = {\n children: PropTypes.node.isRequired,\n};\n\nexport default Sidebar;\n","import React, { useState } from 'react';\nimport { Button, Avatar, makeStyles, Menu, MenuItem, Divider, ListItemText, ListSubheader, useMediaQuery, IconButton, Tooltip } from '@material-ui/core';\nimport { AccountCircle, ArrowDropDown, HowToRegOutlined, NavigateNext } from '@material-ui/icons';\nimport { useLogout, useTranslate } from 'react-admin';\nimport { truncate } from 'lodash';\nimport cn from 'classnames';\n\nimport { useAccount, useIdentities, useIdentity, authService } from '../http';\n\nconst useStyles = makeStyles(theme => ({\n menu: {\n minWidth: theme.spacing(32),\n },\n button: {\n textTransform: 'initial',\n },\n avatar: {\n backgroundColor: theme.palette.primary.dark,\n color: theme.palette.primary.contrastText,\n height: theme.spacing(4),\n width: theme.spacing(4),\n fontSize: '1rem !important',\n },\n avatarAccount: {\n backgroundColor: 'inherit',\n marginRight: theme.spacing(-1),\n }\n}))\n\nconst capitalizeName = name => name?.toLowerCase().replace(/\\b(\\w)/g, s => s.toUpperCase());\nconst toName = value => truncate(capitalizeName(value), { length: 32 })\n\nconst IdentityButton = ({ identity, account, onClick, classes }) => {\n const isMobile = useMediaQuery(theme => theme.breakpoints.down('xs'));\n\n let name = \n const fullName = identity?.participant?.fullName\n if (fullName) {\n name = fullName.split(' ')[0][0].toUpperCase();\n }\n\n const avatarClass = cn(classes.avatar, {\n [classes.avatarAccount]: !fullName,\n })\n\n if (isMobile) {\n return \n {name}\n \n }\n\n const tooltip = [account?.username, identity?.tenant?.name].filter(Boolean).join(' · ')\n return \n {name}}\n endIcon={}\n onClick={onClick}\n >\n {toName(identity?.participant?.firstName)}\n \n \n}\n\nconst IdentitiesList = ({ identity: current, identities, onClick }) => {\n const selectIdentity = (identity) => {\n authService.setIdentity(identity)\n onClick();\n setTimeout(() => {\n // using setTimeout allows the new identity to persist for the reload to be effective\n window.location = '/profile'\n }, 0)\n }\n\n return <>\n {identities.map(identity => {\n const name = toName(identity.participant.fullName)\n const isCurrent = identity.id === current.id\n return selectIdentity(identity)}>\n \n {isCurrent ? : }\n \n })}\n \n \n}\n\nexport const IdentityMenu = () => {\n const translate = useTranslate();\n const classes = useStyles();\n const account = useAccount();\n const identity = useIdentity()\n const identities = useIdentities();\n const logout = useLogout();\n\n const [ anchorEl, setAnchorEl ] = useState(null);\n const open = Boolean(anchorEl);\n\n const handleMenu = event => setAnchorEl(event.currentTarget);\n const handleClose = () => setAnchorEl(null);\n const handleLogout = () => {\n handleClose()\n logout()\n }\n\n return <>\n \n \n \n {account.username}\n {translate('ra.auth.logout')}\n \n \n}\n","import React, { useState } from 'react';\nimport { Menu, MenuItem, IconButton, makeStyles, ListItemIcon, ListItemText } from '@material-ui/core';\nimport { useLocale, useTranslate } from 'react-admin';\nimport { HelpOutline as HelpIcon, MenuBook, LiveHelp } from '@material-ui/icons'\n\nconst useStyles = makeStyles(theme => ({\n button: {\n color: theme.palette.primary.contrastText,\n }\n}))\n\nconst HelpButton = ({ className, onClick }) => {\n const classes = useStyles();\n\n return \n \n \n}\n\nexport const HelpMenu = ({ className }) => {\n const translate = useTranslate();\n const locale = useLocale();\n\n const [ anchorEl, setAnchorEl ] = useState(null);\n const open = Boolean(anchorEl);\n\n const handleMenu = event => setAnchorEl(event.currentTarget);\n const handleClose = () => setAnchorEl(null);\n\n let commonUrls = {};\n try {\n commonUrls = process.env.COMMON_URLS && JSON.parse(process.env.COMMON_URLS || '{}');\n // eslint-disable-next-line no-empty\n } catch (error) {}\n\n const documentationUrl = commonUrls?.[locale]?.documentation\n const supportUrl = commonUrls?.[locale]?.support\n\n if (!documentationUrl && !supportUrl) return null;\n\n return <>\n \n \n {!!documentationUrl && \n \n \n \n \n }\n {!!supportUrl && \n \n \n \n \n }\n \n \n}\n","export const SCOPE_DESCRIPTIONS = {\n 'assigning:assign': 'Assign games, manage attributes, transactions, claims, pay periods, send announcements',\n 'assigning:availability': 'Manage official availability',\n 'assigning:lists': 'Manage official lists',\n 'assigning:manage': 'Manage assigning settings, rules, fees, overrides, attributes, transactions, claims, pay periods, send announcements',\n 'assigning:qualifications': 'Manage official qualifications',\n 'assigning:view': 'View anything related to assigning',\n\n 'cms:manage': 'Manage content for hisports public sites (legacy)',\n 'cms:public': 'View content for hisports public sites (legacy)',\n\n 'discipline:manage': 'Manage anything related to suspension disciplines',\n 'discipline:trigger': 'Trigger the discipline process from a suspension',\n 'discipline:view': 'View anything related to suspension disciplines',\n\n 'internal': 'Spordle internal use only',\n\n 'leagues:manage': 'Manage organizations, organization settings, organization members, groups, analyze schedules, penalties, suspensions, external providers, organization notifications',\n 'leagues:public': 'View league information on public websites',\n 'leagues:view': 'View anything related to leagues',\n\n 'participants:accounts': 'Manage accounts and linked identities',\n 'participants:invite': 'Send invites to participants',\n 'participants:manage': 'Manage participant information',\n 'participants:permissions': 'Manage roles/permissions',\n 'participants:view': 'View anything related to participants',\n\n 'profiles:addresses': 'Manage addresses',\n 'profiles:manage': 'Manage profiles',\n 'profiles:notifications': 'Manage notifications',\n 'profiles:public': 'View profiles on public websites',\n\n 'scheduling:approve': 'Approve games and draft games',\n 'scheduling:availability': 'Manage availability and time slots',\n 'scheduling:drafts': 'Schedule shared draft games',\n 'scheduling:games': 'Schedule games',\n 'scheduling:manage': 'Manage schedules, teams, games, drafts and settings',\n 'scheduling:practices': 'Manage practices',\n 'scheduling:public': 'View schedules on public websites',\n 'scheduling:status': 'Change the game status through the bulk action or change status form',\n 'scheduling:view': 'View anything related to scheduling',\n\n 'scoresheets:events': 'View audit logs',\n 'scoresheets:lineups': 'Manage scoresheet lineup',\n 'scoresheets:manage': 'Manage full scoresheet and certify',\n 'scoresheets:view': 'View anything related to scoresheets',\n\n 'stats:public': 'View stats on public websites',\n 'stats:reports': 'View reports based on role context',\n 'stats:view': 'View schedule/game stats and box scores',\n\n 'suspensions:manage': 'Manage automatic and manual suspensions',\n 'suspensions:view': 'View anything related to suspensions',\n\n 'teams:activities': 'Manage team activities',\n 'teams:manage': 'Manage anything related to teams',\n 'teams:public': 'View team information on public websites',\n 'teams:roster': 'Manage team rosters',\n 'teams:settings': 'Manage team settings',\n 'teams:view': 'View anything related to teams',\n};\n","import React, { useMemo, useState } from 'react';\nimport { useLocale, useTranslate } from 'react-admin';\nimport { Dialog, DialogTitle, DialogContent, Typography, Accordion, AccordionSummary, AccordionDetails, Tabs, Tab, TextField, IconButton, makeStyles } from '@material-ui/core';\nimport { Accessibility, ArrowDropDown, BrightnessAuto, Close, ControlCamera } from '@material-ui/icons';\nimport { Alert } from '@material-ui/lab';\n\nimport { translateApiProperty } from '@hisports/common';\nimport { capitalize } from '@hisports/common/src/lodash';\nimport { SCOPE_DESCRIPTIONS } from '@hisports/common/src/scope-descriptions';\n\nimport { useHttpClient } from '../../http';\n\nconst AUTOMATIC_ROLES = [\n {\n name: 'participant',\n i18n: {\n en: {\n name: 'Participant',\n description: 'Automatic to all participants, it allows participants to manage their own profile',\n },\n fr: {\n name: 'Participant',\n description: 'Automatique pour tous les participants, il permet aux participants de gérer leur propre profil',\n },\n },\n targetType: 'Participant',\n scopes: [\n 'profiles:manage',\n 'profiles:addresses',\n 'profiles:notifications'\n ],\n },\n {\n name: 'official',\n i18n: {\n en: {\n name: 'Official',\n description: 'Automatic with an official qualification, it allows to be assigned and officiate games',\n },\n fr: {\n name: 'Officiel',\n description: \"Automatique avec une qualification d'officiel, cela permet d’être assigné et d’arbitrer des matchs.\",\n },\n },\n targetType: 'Participant',\n scopes: [\n 'assigning:availability',\n 'assigning:official',\n ],\n },\n {\n name: 'scorekeeper',\n i18n: {\n en: {\n name: 'Scorekeeper',\n description: 'Automatic with a scorekeeper official qualification, it allows to be assigned and manage scoresheets',\n },\n fr: {\n name: 'Marqueur',\n description: \"Automatique avec une qualification d’officiel marqueur, cela permet d’être assigné et de gérer les feuilles de match\",\n },\n },\n targetType: 'Participant',\n scopes: [\n 'assigning:availability',\n 'assigning:official',\n 'scoresheets:view',\n 'scoresheets:lineups',\n 'scoresheets:manage'\n ],\n },\n {\n name: 'coach',\n i18n: {\n en: {\n name: 'Team Staff',\n description: 'Automatic when rostered as a team staff on a team, it allows to manage anything related to the team',\n },\n fr: {\n name: \"Personnel d'équipe\",\n description: \"Automatique une fois inscrit en tant que personnel d'équipe, cela permet de gérer tout ce qui concerne l'équipe.\",\n }\n },\n targetType: 'Team',\n scopes: [\n 'profiles:manage',\n 'teams:roster',\n 'teams:activities',\n 'scheduling:view',\n 'scheduling:approve',\n 'assigning:view',\n 'scoresheets:lineups',\n 'scoresheets:view',\n 'stats:view',\n 'stats:reports',\n 'suspensions:view',\n ],\n },\n {\n name: 'player',\n i18n: {\n en: {\n name: 'Player',\n description: 'Automatic when rostered as a player on a team, it allows to view team information and upcoming games',\n },\n fr: {\n name: 'Joueur',\n description: \"Automatique une fois inscrit en tant que joueur sur une équipe, cela permet de consulter les informations de l'équipe et les matchs à venir\",\n }\n },\n targetType: 'Team',\n scopes: [\n 'teams:view',\n 'scheduling:view',\n 'scoresheets:view',\n 'suspensions:view',\n ],\n }\n]\n\nconst useStyles = makeStyles(theme => ({\n closeButton: {\n position: 'absolute',\n top: theme.spacing(1),\n right: theme.spacing(1),\n },\n alert: {\n marginBottom: theme.spacing(2),\n },\n group: {\n display: 'flex',\n alignItems: 'center',\n gap: theme.spacing(2),\n },\n stack: {\n display: 'flex',\n flexDirection: 'column',\n }\n}))\n\nconst Roles = ({ roles, search }) => {\n const translate = useTranslate();\n const locale = useLocale();\n const classes = useStyles();\n\n const sortedRoles = useMemo(() => {\n return [\n ...AUTOMATIC_ROLES,\n ...(roles?.sort((a, b) => translate(`resources.permissions.values.targetType.${a.targetType}`).localeCompare(translate(`resources.permissions.values.targetType.${b.targetType}`))) || [])\n ]\n }, [roles, translate])\n\n return
\n {sortedRoles?.map(role => {\n const targetType = translate(`resources.permissions.values.targetType.${role.targetType}`);\n const name = capitalize(translateApiProperty(role, 'name', locale));\n const description = translateApiProperty(role, 'description', locale);\n const secondaryText = `${targetType}${description ? ` - ${description}` : ''}`;\n\n if (search && !name?.toLowerCase().includes(search.toLowerCase()) && !description?.toLowerCase().includes(search.toLowerCase())) return null;\n return (\n \n }>\n
\n {role.id ? : }\n
\n {name}{!role?.id ? ` (${translate('components.roles_and_permissions.labels.automatic')})` : ''}\n {secondaryText}\n
\n
\n
\n \n \n {translate('components.roles_and_permissions.labels.scopes')}:\n
    \n {role?.scopes.sort((a, b) => a.localeCompare(b)).map((scope) => (\n
  • \n {scope} {SCOPE_DESCRIPTIONS[scope]}\n
  • \n ))}\n
\n
\n
\n
\n );\n })}\n
\n}\n\nconst Scopes = ({ search, roles = [] }) => {\n const translate = useTranslate();\n const locale = useLocale();\n const classes = useStyles();\n\n return
\n {Object.entries(SCOPE_DESCRIPTIONS).map(([scope, description]) => {\n if (search && !scope.toLowerCase().includes(search.toLowerCase()) && !description.toLowerCase().includes(search.toLowerCase())) return null;\n\n const scopeRoles = roles.filter(role => role.scopes.includes(scope));\n\n return (\n \n }>\n
\n \n
\n {scope}\n {SCOPE_DESCRIPTIONS[scope]}\n
\n
\n
\n \n \n {translate('resources.permissions.labels.card.title')}:\n
    \n {scopeRoles.map((role) => {\n const targetType = translate(`resources.permissions.values.targetType.${role.targetType}`);\n const name = capitalize(translateApiProperty(role, 'name', locale));\n return
  • \n {name} ({targetType})\n
  • \n })}\n
\n
\n
\n
\n )\n })}\n
\n}\n\nexport const RolesAndPermissionsDialog = ({ open, onClose }) => {\n const { data: roles } = useHttpClient('/roles');\n const translate = useTranslate();\n const [tabIndex, setTabIndex] = useState(0);\n const [search, setSearch] = useState('');\n const classes = useStyles();\n\n const handleTabChange = (event, newIndex) => {\n setTabIndex(newIndex);\n };\n\n return (\n \n {translate('components.roles_and_permissions.title')}\n
\n \n \n \n
\n \n {translate('components.roles_and_permissions.alerts.account_permissions')}\n \n \n \n \n setSearch(e.target.value)}\n variant=\"outlined\"\n fullWidth\n style={{ marginBlock: 16 }}\n />\n {tabIndex === 0 && (\n \n )}\n {tabIndex === 1 && (\n \n )}\n \n \n );\n};\n","/* eslint-disable import/namespace */\nimport * as FeaturesFlag from \"./featureFlags.js\";\n\n/** @typedef {typeof import('./featureFlags')} FeatureFlagType */\n\nexport const FF_CATEGORIES = (() => {\n /** @type {{ [category: string]: Array}} */\n const out = {\n application: [\n {\n id: FeaturesFlag.FF_VERSION_MISMATCH,\n description: 'Banner when version between front-end and back-end is not matching.',\n },\n {\n id: FeaturesFlag.FF_FORETHOUGHT,\n description: 'AI agent for customer support (Spordle Assistant).',\n }\n ],\n account_management: [\n {\n id: FeaturesFlag.FF_SSO,\n description: 'Single Sign On with MyAccount.',\n },\n {\n id: FeaturesFlag.FF_ACCOUNTS,\n description: 'Display of \"Accounts\" tab on the left panel menu.',\n },\n {\n id: FeaturesFlag.FF_SSO_RESET_PASSWORD,\n description: 'Ability to reset the password of an account that is linked to MyAccount.',\n },\n ],\n scheduling: [\n {\n id: FeaturesFlag.FF_DRAFT_GAMES,\n description: 'Ability to use the Scheduler and see Draft Games.',\n },\n {\n id: FeaturesFlag.FF_LEGACY_DRAFTS_DISABLED,\n description: 'Disable ability to use the deprecated Scheduler and see the old drafts.',\n },\n {\n id: FeaturesFlag.FF_TOURNAMENTS,\n description: 'Display of \"Tournaments\" tab on the left panel menu.',\n },\n {\n id: FeaturesFlag.FF_CUPS,\n description: 'Display of \"Cups\" tab on the left panel menu.',\n },\n {\n id: FeaturesFlag.FF_SCHEDULE_MENU,\n description: 'Display of \"Schedules\" tab on the left panel menu.',\n },\n {\n id: FeaturesFlag.FF_BRACKETS,\n description: 'Ability to add brackets to a schedule of type Playoffs, Tournament or Cup.',\n },\n {\n id: FeaturesFlag.FF_DRAFT_LIMIT_BYES,\n description: 'Ability to limit the amount of bye rounds when generating games using \"Single Rotation\".',\n },\n {\n id: FeaturesFlag.FF_DRAFT_DEFAULT_ROUNDS,\n description: 'Defaults to \"Total Rounds\" instead of \"Games Per Team\" when generating games.',\n },\n {\n id: FeaturesFlag.FF_DRAFT_DEFAULT_SLOTS,\n description: 'Defaults to using \"Home Slots\" instead of \"Weekdays\" when generating games.',\n },\n {\n id: FeaturesFlag.FF_SEQUENCES,\n description: 'Ability to use sequences in schedules.',\n },\n {\n id: FeaturesFlag.FF_SCHEDULE_TEAMS_ORDER,\n description: 'Ability to edit the order of teams in schedules. Order is used when generating games and have no impact on stats.',\n },\n {\n id: FeaturesFlag.FF_SCHEDULE_TEAMS_DISABLE_ADD_SYNCED,\n description: 'Disable the ability to add teams in a schedule when a team is synced from SID. Internal users will still have access to add teams.',\n },\n {\n id: FeaturesFlag.FF_CROSS_SCHEDULING,\n description: 'Allow cross scheduling between groups and schedules.',\n },\n {\n id: FeaturesFlag.FF_TEAM_SHORT_NAMES,\n description: 'Allow the display of team short names in the scheduling matrix and scheduler calendar. Short name will only display if the team has a short name available.',\n },\n {\n id: FeaturesFlag.FF_POOLS,\n description: 'Ability to enable pools at the office level in the office settings.',\n },\n {\n id: FeaturesFlag.FF_MANUAL_RANKINGS,\n description: 'Ability to overwrite the calculated standings in the schedules.',\n }\n ],\n officiating: [\n {\n id: FeaturesFlag.FF_SCOREKEEPERS,\n description: 'Allow the official position \"Scorekeeper\".',\n },\n {\n id: FeaturesFlag.FF_TIMEKEEPERS,\n description: 'Allow the official position \"Timekeeper\".',\n },\n {\n id: FeaturesFlag.FF_OFFICIALS,\n description: 'Allow the official position \"Official\" or \"4th Referee\" in Soccer.',\n },\n {\n id: FeaturesFlag.FF_ADDITIONAL_LINESPERSONS,\n description: 'Allow the official position \"Video Judge\" & \"Other Off-Ice Official\" (Hockey), \"Assistants 2\" & \"Assistants 3\" (Soccer), or \"2nd Base Umpire\" & \"3rd Base Umpire\" (Baseball).',\n },\n {\n id: FeaturesFlag.FF_GRADES,\n description: 'Allow the use of \"Grades\" for official qualifications.',\n },\n {\n id: FeaturesFlag.FF_OFFICIAL_HIDE_ASSIGNERS,\n description: 'Hide the \"My Assigners\" in the availability settings of an official. The \"My Assigners\" is used for officials to be able to make themself available to officiate games for a specific association.',\n },\n {\n id: FeaturesFlag.FF_DISABLE_ADD_QUALIFICATIONS,\n description: 'Disable the ability to add qualifications to a participant when they are synced from SID. Internal users will still have access to add qualifications.',\n },\n {\n id: FeaturesFlag.FF_SID_MEMBER_TYPES,\n description: 'Ability to see the SID member type of a participant on the participant show page and official / scorekeeper cards.',\n }\n ],\n scorekeeping: [\n {\n id: FeaturesFlag.FF_SCOREKEEPING_APP,\n description: 'Ability to go to the Scorekeeping Application from a game.',\n },\n {\n id: FeaturesFlag.FF_PERIODS,\n description: 'Office setting to set default period length for newly created schedules. This feature is currently only supported for Hockey.',\n },\n {\n id: FeaturesFlag.FF_PENALTY_SERVED_BY,\n description: 'Allow the entry of \"served by\" on a penalty.',\n },\n {\n id: FeaturesFlag.FF_PENALTY_START_END,\n description: 'Allow the entry of a start time on a penalty.',\n },\n {\n id: FeaturesFlag.FF_PENALTY_FILL_START,\n description: 'Automatically fill the start time when entering a game time on a penalty.',\n },\n {\n id: FeaturesFlag.FF_DOUBLE_FORFEIT,\n description: 'Allow forfeiting from both teams. Double forfeiting results in a loss for both teams.',\n },\n {\n id: FeaturesFlag.FF_PHOTOS,\n description: 'Allow access to the players photo carousel slider on a lineup (\"Photos\" button).',\n },\n {\n id: FeaturesFlag.FF_PRINT_LINEUP,\n description: 'Ability to print the lineup sheet. This feature is currently only supported for Soccer.',\n },\n {\n id: FeaturesFlag.FF_BATTERS,\n description: 'Ability to mark a player as a \"Batter\" and adding a batting order in a lineup.',\n },\n {\n id: FeaturesFlag.FF_PITCHERS,\n description: 'Allow the entry of throws and innings pitched and applying pitching limits.',\n },\n {\n id: FeaturesFlag.FF_GOALIES,\n description: 'Allow the entry of goalie shots against.',\n },\n {\n id: FeaturesFlag.FF_REQUIRE_LINEUPS,\n description: 'Both lineups need to be approved before starting to scorekeep a game.',\n },\n {\n id: FeaturesFlag.FF_REQUIRE_GAME_START,\n description: 'Scorekeeper must click start game in order to start scorekeeping.',\n },\n {\n id: FeaturesFlag.FF_REQUIRE_TEAMS,\n description: 'Only teams are required on a game in order to scorekeep. The lineups does not need to be approved and the game does not need to be manually started.',\n },\n {\n id: FeaturesFlag.FF_APPROVAL_SIGNATURE,\n description: 'Require official signature when approving a game.',\n },\n {\n id: FeaturesFlag.FF_HIDE_INFRACTION_NAME,\n description: 'Show only the rule name without the infraction name when displaying a penalty. Ex. used in Soccer to avoid showing \"Yellow Card - Yellow Card\".',\n },\n {\n id: FeaturesFlag.FF_SPORTSMANSHIP,\n description: 'Allow calculation of sportsmanship points when calculating stats. This feature only supports specific leagues: \"PCAHA\" and \"VIAHA\".',\n },\n {\n id: FeaturesFlag.FF_RESTRICT_LINEUP_ENTRY,\n description: 'Lineup cannot be entered until the prior game is completed.',\n },\n ],\n sanction_management: [\n {\n id: FeaturesFlag.FF_SUSPENSIONS_MENU,\n description: 'Display of \"Suspensions\" tab on the left panel menu.',\n },\n ],\n legacy_public_sites: [\n {\n id: FeaturesFlag.FF_CMS,\n description: 'Display of \"Posts\", \"Events\", and \"Pages\" tab on the left panel menu. This is the legacy CMS that is used for the legacy hisports sites. Ex. an event is a publication on the legacy site.',\n },\n ],\n };\n !out.unclassified && void (out.unclassified = []);\n const allFeaturesIncludedOnCategories = Object.keys(out).flatMap(key => out[key]).map(e => e.id || e);\n out.unclassified = Object.keys(FeaturesFlag)\n .filter(key => !allFeaturesIncludedOnCategories.includes(FeaturesFlag[key]) && !allFeaturesIncludedOnCategories.includes(FeaturesFlag[key].id))\n .map(key => FeaturesFlag[key]);\n if (!out.unclassified.length) {\n delete out.unclassified;\n }\n return out;\n})();\n","import React, { useMemo } from 'react';\nimport { useTranslate } from 'react-admin';\nimport { Dialog, DialogTitle, DialogContent, Typography, Grid, IconButton, makeStyles } from '@material-ui/core';\nimport { Close } from '@material-ui/icons';\nimport { Alert } from '@material-ui/lab'\nimport { camelCase, startCase } from 'lodash';\n\nimport { FF_CATEGORIES } from '@hisports/common/feature-flags-categories';\n\nimport { useFlags, useTenant } from '../../http';\n\nconst useStyles = makeStyles(theme => ({\n closeButton: {\n position: 'absolute',\n top: theme.spacing(1),\n right: theme.spacing(1),\n },\n alert: {\n marginBottom: theme.spacing(2),\n }\n}))\n\nexport const FeatureFlagDialog = ({ open, onClose }) => {\n const classes = useStyles();\n const flags = useFlags();\n const tenant = useTenant();\n const initialValues = useMemo(() => flags.reduce((initialValues, flag) => {\n initialValues[flag] = true;\n return initialValues;\n }, {}), [flags]);\n\n const translate = useTranslate();\n\n return \n {`${translate('components.feature_flags.title')} - ${tenant?.name}`}\n
\n \n \n \n
\n \n \n {translate('components.feature_flags.alerts.branch_level')}\n \n {Object.entries(FF_CATEGORIES).map(([category, flags]) =>
\n {startCase(camelCase(category))}\n
\n \n {flags.map(flag => \n
\n \n
\n {(flag.id || flag).toUpperCase()}\n
\n
\n {flag.description &&
\n {flag.description}\n
}\n
\n )}\n
\n
)}\n
\n
\n};\n","import React, { useState } from 'react';\nimport { Menu, MenuItem, IconButton, makeStyles, ListItemIcon, ListItemText } from '@material-ui/core';\nimport { useTranslate } from 'react-admin';\nimport { Accessibility, Build as BuildIcon, Flag as FlagIcon } from '@material-ui/icons'\n\nimport { usePermissions } from '../http';\nimport { RolesAndPermissionsDialog } from './internalTools/RolesAndPermissionsDialog';\nimport { FeatureFlagDialog } from './internalTools/FeatureFlagDialog';\n\nconst useStyleToolButton = makeStyles(theme => ({\n button: {\n color: [theme.palette.tertiary.light, '!important'],\n opacity: 0.8,\n borderRadius: '50%',\n width: '2rem',\n height: '2rem',\n }\n}));\n\nconst useStyleDropdownlButton = makeStyles(theme => ({\n button: {\n color: [theme.palette.tertiary.main, '!important'],\n }\n}));\n\nconst InternalToolButton = ({ className, onClick }) => {\n const classes = useStyleToolButton();\n\n return \n \n \n}\n\nexport const useCanShowInternalMenu = () => {\n const permissions = usePermissions();\n const canShowInternalMenu = permissions.some(p => p.roleType === 'System');\n return canShowInternalMenu;\n};\n\nexport const InternalToolMenu = ({ className }) => {\n const translate = useTranslate();\n const classes = useStyleDropdownlButton();\n const [FFOpen, setFFOpen] = useState(false);\n const [rolesOpen, setRolesOpen] = useState(false);\n\n const [anchorEl, setAnchorEl] = useState(null);\n const open = Boolean(anchorEl);\n\n const handleMenu = event => setAnchorEl(event.currentTarget);\n const handleClose = () => setAnchorEl(null);\n\n const handleFFOpen = () => {\n setFFOpen(true);\n handleClose();\n }\n\n const handleRolesOpen = () => {\n setRolesOpen(true);\n handleClose()\n }\n\n return <>\n \n {FFOpen && setFFOpen(false)} />}\n {rolesOpen && setRolesOpen(false)} />}\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n}\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport classNames from 'classnames';\nimport { AppBar as MuiAppBar, Toolbar, IconButton, makeStyles, useMediaQuery } from '@material-ui/core'\nimport { Menu as MenuIcon } from '@material-ui/icons'\nimport { toggleSidebar, HideOnScroll } from 'react-admin';\nimport { useDispatch } from 'react-redux';\nimport { Link } from 'react-router-dom';\n\nimport { logo } from '../flags';\n\nimport { LanguageMenu } from './LanguageMenu';\nimport { IdentityMenu } from './IdentityMenu';\nimport { HelpMenu } from './HelpMenu';\nimport { InternalToolMenu, useCanShowInternalMenu } from './InternalToolMenu';\n\nconst useStyles = makeStyles(theme => ({\n toolbar: {\n paddingRight: theme.spacing(1),\n },\n menuButton: {\n marginLeft: '0.5em',\n marginRight: '0.5em',\n },\n menuButtonIconClosed: {\n transition: theme.transitions.create(['transform'], {\n easing: theme.transitions.easing.sharp,\n duration: theme.transitions.duration.leavingScreen,\n }),\n transform: 'rotate(0deg)',\n },\n menuButtonIconOpen: {\n transition: theme.transitions.create(['transform'], {\n easing: theme.transitions.easing.sharp,\n duration: theme.transitions.duration.leavingScreen,\n }),\n transform: 'rotate(180deg)',\n },\n spacer: {\n flex: 1,\n },\n logo: {\n height: undefined,\n marginRight: theme.spacing(5),\n marginTop: theme.spacing(.5),\n [theme.breakpoints.down('xs')]: {\n marginRight: theme.spacing(1),\n },\n '& svg': {\n width: 158,\n height: 28,\n },\n },\n menu: {\n color: theme.palette.primary.contrastText,\n fontSize: theme.typography.fontSize,\n minWidth: theme.spacing(4),\n padding: 0,\n marginRight: theme.spacing(2),\n }\n}));\n\nconst Logo = ({ className }) =>\n
\n
\n\nconst AppBar = ({\n children,\n classes: classesOverride,\n className,\n logo,\n open,\n title,\n userMenu,\n ...rest\n}) => {\n const classes = useStyles({ classes: classesOverride });\n const dispatch = useDispatch();\n const isMobile = useMediaQuery(theme => theme.breakpoints.down('xs'));\n\n const canShowInternalMenu = useCanShowInternalMenu();\n\n return \n \n \n dispatch(toggleSidebar())}\n className={classNames(classes.menuButton)}\n >\n \n \n\n \n \n \n\n
{children}
\n\n {canShowInternalMenu && }\n {!isMobile && }\n \n \n
\n
\n
\n};\n\nAppBar.propTypes = {\n children: PropTypes.node,\n classes: PropTypes.object,\n className: PropTypes.string,\n logout: PropTypes.element,\n open: PropTypes.bool,\n userMenu: PropTypes.element,\n};\n\nexport default AppBar;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport inflection from 'inflection';\nimport { Divider, MenuItem, makeStyles, useMediaQuery } from '@material-ui/core';\nimport { get } from 'lodash';\nimport classnames from 'classnames';\nimport { LoadingIndicator, MenuItemLink, useTranslate, getResources, useLocale } from 'react-admin';\nimport { ViewList as DefaultIcon, TrendingUp as ReportsIcon, HomeOutlined as ProfileIcon, DateRange as AvailabilityIcon, HelpOutline as HelpIcon } from '@material-ui/icons'\nimport { useSelector, shallowEqual } from 'react-redux';\nimport moment from 'moment';\n\nimport { FF_ACCOUNTS, FF_CMS, FF_CUPS, FF_SCHEDULE_MENU, FF_SUSPENSIONS_MENU, FF_TOURNAMENTS } from \"@hisports/common/featureFlags\";\n\nimport { isAuthorized } from '../common/Authorize';\nimport SeasonSelector from '../common/inputs/SeasonSelector';\nimport { useFilteredScopes, useScopes, useFlag } from '../http';\n\nexport const MENU_WIDTH = 240;\nexport const CLOSED_MENU_WIDTH = 55;\n\nconst useStyles = makeStyles(\n theme => ({\n main: {\n display: 'flex',\n flex: 1,\n flexDirection: 'column',\n justifyContent: 'flex-start',\n marginTop: theme.spacing(2),\n marginBottom: '1em',\n [theme.breakpoints.only('xs')]: {\n marginTop: theme.spacing(1),\n },\n },\n itemActive: {\n fontWeight: 500,\n },\n releaseVersion: {\n fontSize: '75%',\n },\n open: {\n width: get(theme, 'menu.width', MENU_WIDTH),\n },\n closed: {\n width: get(theme, 'menu.closedWidth', CLOSED_MENU_WIDTH),\n },\n divider: {\n margin: theme.spacing(1, 0),\n },\n loader: {\n display: 'flex',\n marginLeft: theme.spacing(1),\n marginBottom: theme.spacing(1),\n },\n profile: {\n paddingBottom: '1em',\n [theme.breakpoints.up('md')]: {\n background: theme.palette.background.paper,\n position: 'fixed',\n bottom: 0,\n },\n }\n }),\n { name: 'RaMenu' }\n);\n\nconst translatedResourceName = (resource, translate) => {\n const label = resource.options && resource.options.label;\n return translate(`resources.${resource.name}.name`, {\n smart_count: 2,\n _: label\n ? translate(label, { smart_count: 2, _: label })\n : inflection.humanize(inflection.pluralize(resource.name)),\n });\n}\n\nconst ResourceMenuItem = ({ name, resources, scopes, onMenuClick, dense, classes }) => {\n const translate = useTranslate();\n\n const resource = resources.find(resource => resource.name === name);\n if (!resource) return null;\n\n if (!resource.hasList || !isAuthorized(scopes, resource.name, 'list')) return null;\n\n return : \n }\n onClick={onMenuClick}\n dense={dense}\n classes={{\n active: classes.itemActive\n }}\n />\n}\n\nconst SeasonLoader = ({ open, className }) => {\n return
\n {open && }\n \n
\n}\n\nconst isVisible = (resources, scopes) => resources.map(resource => isAuthorized(scopes, resource, 'list')).filter(Boolean).length > 1\n\nconst Menu = props => {\n const isEnabled = useFlag();\n const classes = useStyles(props);\n const translate = useTranslate();\n const locale = useLocale();\n const isMobile = useMediaQuery(theme => theme.breakpoints.down('xs'));\n const releaseName = process.env.RELEASE_VERSION && process.env.RELEASE_VERSION.replace(/(hotfix\\/)|(release\\/)/g, '').substring(0, 8);\n const releaseDate = process.env.RELEASE_DATE && moment(process.env.RELEASE_DATE).format('LL')\n let commonUrls = {};\n try {\n commonUrls = process.env.COMMON_URLS && JSON.parse(process.env.COMMON_URLS || '{}');\n // eslint-disable-next-line no-empty\n } catch (error) {}\n const documentationUrl = commonUrls?.[locale]?.documentation\n\n const {\n className,\n dense,\n hasDashboard,\n onMenuClick,\n pathname,\n ...rest\n } = props;\n\n const open = useSelector(state => state.admin.ui.sidebarOpen);\n const resources = useSelector(getResources, shallowEqual)\n const scopes = useScopes();\n const adminScopes = useFilteredScopes(['System', 'Tenant', 'Office', 'Schedule']);\n\n // Used to force redraw on navigation\n useSelector(state => state.router.location.pathname);\n\n const scheduling = ['leagues', 'tournaments', 'cups', 'schedules'];\n const showSchedulingDivider = isVisible(scheduling, adminScopes);\n\n const showSuspensionDivider = isAuthorized(scopes, 'suspensions', 'list') && isEnabled(FF_SUSPENSIONS_MENU);\n\n const management = ['participants', 'teams', 'offices', 'venues'];\n const showManagementDivider = isVisible(management, scopes);\n\n const web = ['posts', 'webevents', 'pages'];\n const showWebDivider = isVisible(web, scopes) && isEnabled(FF_CMS);\n\n const showReports = isAuthorized(scopes, 'reports', 'list');\n\n const isOfficial = isAuthorized(scopes, 'profile', 'official')\n\n const resourceProps = { resources, scopes, onMenuClick, dense, classes };\n const itemProps = { onClick: onMenuClick, dense, classes: { active: classes.itemActive } };\n\n return
\n \n\n \n {isEnabled(FF_TOURNAMENTS) && }\n {isEnabled(FF_CUPS) && }\n {isEnabled(FF_SCHEDULE_MENU) && }\n\n {showSchedulingDivider && }\n \n \n \n\n {showSuspensionDivider && }\n {isEnabled(FF_SUSPENSIONS_MENU) && }\n\n {showManagementDivider && }\n \n \n \n \n\n {showWebDivider && }\n {isEnabled(FF_CMS) && }\n {isEnabled(FF_CMS) && }\n {isEnabled(FF_CMS) && }\n\n {showReports && }\n {isEnabled(FF_ACCOUNTS) && }\n {showReports && } {...itemProps} />}\n\n
\n \n {isMobile && !!documentationUrl && } exact {...itemProps} />}\n {isOfficial && } {...itemProps} />}\n } exact {...itemProps} />\n {releaseName && releaseDate && {`Version: ${releaseName} (${releaseDate})`}}\n
\n
\n}\n\nMenu.propTypes = {\n classes: PropTypes.object,\n className: PropTypes.string,\n dense: PropTypes.bool,\n hasDashboard: PropTypes.bool,\n logout: PropTypes.element,\n onMenuClick: PropTypes.func,\n open: PropTypes.bool,\n pathname: PropTypes.string,\n};\n\nMenu.defaultProps = {\n onMenuClick: () => null,\n dense: false,\n};\n\nexport default Menu;\n","import React, { Fragment, useEffect } from 'react';\nimport PropTypes from 'prop-types';\nimport classnames from 'classnames';\nimport { Button, Accordion, AccordionDetails, AccordionSummary, makeStyles } from '@material-ui/core';\nimport { Error as ErrorIcon, ExpandMore as ExpandMoreIcon } from '@material-ui/icons';\nimport { captureException, lastEventId, showReportDialog } from '@sentry/browser'\n\nimport { Title, TitlePropType, useTranslate } from 'react-admin';\n\nconst useStyles = makeStyles(\n theme => ({\n container: {\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n justifyContent: 'center',\n [theme.breakpoints.down('sm')]: {\n padding: '1em',\n },\n fontFamily: 'Roboto, sans-serif',\n opacity: 0.5,\n },\n title: {\n display: 'flex',\n alignItems: 'center',\n },\n icon: {\n width: '2em',\n height: '2em',\n marginRight: '0.5em',\n },\n panel: {\n marginTop: '1em',\n },\n panelDetails: {\n whiteSpace: 'pre-wrap',\n },\n toolbar: {\n marginTop: '2em',\n },\n }),\n { name: 'RaError' }\n);\n\nconst Error = ({\n error,\n errorInfo,\n classes: classesOverride,\n className,\n title,\n ...rest\n}) => {\n const classes = useStyles({ classes: classesOverride });\n const translate = useTranslate();\n\n useEffect(() => {\n const exception = captureException(error, { extra: errorInfo });\n console.error(error); /* eslint-disable-line no-console */\n console.log(`Captured exception ${exception}`) /* eslint-disable-line no-console */\n }, [ error, errorInfo ])\n\n const eventId = lastEventId();\n return (\n <>\n \n <div className={classnames(classes.container, className)} {...rest}>\n <h1 className={classes.title} role=\"alert\">\n <ErrorIcon className={classes.icon} />\n {translate('ra.page.error')}\n </h1>\n <div>{translate('ra.message.error')}</div>\n\n {process.env.NODE_ENV !== 'production' && (\n <Accordion className={classes.panel}>\n <AccordionSummary expandIcon={<ExpandMoreIcon />}>\n {translate('ra.message.details')}\n </AccordionSummary>\n <AccordionDetails className={classes.panelDetails}>\n <div>\n <h3>{translate(error.toString())}</h3>\n {errorInfo.componentStack}\n </div>\n </AccordionDetails>\n </Accordion>\n )}\n\n <div className={classes.toolbar}>\n {eventId && <Button\n variant=\"contained\"\n onClick={() => showReportDialog()}\n >\n {translate('ra.message.report_details')}\n </Button>}\n </div>\n\n <pre>{eventId}</pre>\n </div>\n </>\n );\n};\n\nError.propTypes = {\n classes: PropTypes.object,\n className: PropTypes.string,\n error: PropTypes.object.isRequired,\n errorInfo: PropTypes.object,\n title: TitlePropType,\n};\n\nexport default Error;\n","import React, { useEffect, useState } from 'react';\nimport { Redirect } from 'react-router';\nimport { useLocation } from 'react-router-dom'\nimport { Layout, useLocale, useTranslate } from 'react-admin'\nimport { IconButton, makeStyles, Button } from '@material-ui/core';\nimport { Close, History, Launch } from '@material-ui/icons';\nimport { Alert, AlertTitle } from '@material-ui/lab';\n\nimport { translateApiProperty } from '@hisports/common';\nimport { FF_FORETHOUGHT, FF_VERSION_MISMATCH } from '@hisports/common/featureFlags';\nimport { getSeasonDisplayName } from '@hisports/common/src/seasons';\n\nimport Volunteer from '../routes/Volunteer';\nimport Unauthorized from '../routes/Unauthorized';\nimport GameContext from '../resources/gameStatus/GameContext';\n\nimport Sidebar from './Sidebar';\nimport AppBar from './AppBar';\nimport Menu from './Menu';\nimport Error from './Error';\nimport ForeThought from './foreThought/ForeThought';\n\nimport { useSeason } from '../common/inputs/SeasonSelector';\nimport { useDefaultSeason, useLoggedIn, useNotices, usePermissions, useVolunteer, apiClient, useFlag, useSport, useIdentity } from '../http';\nimport usePreferences from '../common/usePreferences';\n\nconst useStyles = makeStyles(theme => ({\n appFrame: {\n marginTop: theme.spacing(8),\n flex: 1,\n },\n content: {\n padding: theme.spacing(0, 1),\n [theme.breakpoints.up('md')]: {\n padding: theme.spacing(1, 2),\n },\n },\n alerts: {\n display: 'flex',\n flexDirection: 'column',\n gap: theme.spacing(1),\n }\n}))\n\nconst useAlertStyles = makeStyles(theme => ({\n message: {\n whiteSpace: 'pre-line',\n }\n}))\n\nconst getVersion = async () => {\n return await apiClient(`/apimetadatas/getVersion`)\n .then(res => res?.data);\n}\n\nconst RefreshButton = () => {\n const translate = useTranslate();\n return <Button color=\"primary\" onClick={() => window.location.reload()} variant=\"outlined\">{translate('ra.action.refresh')}</Button>\n}\n\nconst NoticeAlert = ({ notice, onHide }) => {\n const locale = useLocale();\n const classes = useAlertStyles();\n\n const title = translateApiProperty(notice, 'title', locale);\n const message = translateApiProperty(notice, 'message', locale);\n const showLink = translateApiProperty(notice, 'link', locale);\n const { severity, dismissable = true } = notice;\n\n const actions = [\n showLink && <IconButton color=\"inherit\" size=\"large\" href={showLink} target=\"_blank\">\n <Launch fontSize=\"inherit\" />\n </IconButton>,\n dismissable && <IconButton color=\"inherit\" size=\"small\" onClick={() => onHide(notice)}>\n <Close fontSize=\"inherit\" />\n </IconButton>\n ]\n\n return <Alert severity={severity || 'info'} action={actions}>\n {title && <AlertTitle>{title}</AlertTitle>}\n <span className={classes.message}>{message}</span>\n </Alert>\n}\n\nexport default ({ children, ...props }) => {\n const translate = useTranslate();\n const seasonId = useSeason();\n const sport = useSport();\n const defaultSeason = useDefaultSeason();\n const isLoggedIn = useLoggedIn();\n const permissions = usePermissions();\n const isVolunteer = useVolunteer();\n const classes = useStyles();\n const [ apiVersion, setApiVersion ] = useState();\n const location = useLocation();\n const isEnabled = useFlag();\n const identity = useIdentity();\n\n useEffect(() => {\n if (!isLoggedIn) return\n getVersion()\n .then(version => setApiVersion(version))\n }, [location, isLoggedIn]);\n\n const appVersion = process.env.RELEASE_VERSION;\n const versionMismatch = apiVersion ? appVersion !== apiVersion : false\n\n\n const notices = useNotices();\n const [ hiddenNoticeIds, setHiddenNoticeIds, hiddenLoaded ] = usePreferences('hiddenNotices', []);\n const visibleNotices = notices.filter(notice => hiddenLoaded && (!notice.dismissable || !hiddenNoticeIds.includes(notice.id)));\n\n const hideNotice = notice => {\n const currentNoticeIds = notices.map(notice => notice.id);\n setHiddenNoticeIds(prevNoticeIds => [\n ...prevNoticeIds.filter(noticeId => currentNoticeIds.includes(noticeId)),\n notice.id,\n ])\n }\n\n if (!isLoggedIn) return <Redirect to=\"/login\" />\n if (!permissions.filter(p => p.roleName !== 'participant').length) return <Unauthorized />\n if (isVolunteer) return <Volunteer />\n\n const isPastSeason = seasonId !== defaultSeason;\n const season = getSeasonDisplayName(seasonId, sport);\n return <Layout\n {...props}\n classes={classes}\n appBar={AppBar}\n menu={Menu}\n sidebar={Sidebar}\n error={Error}\n >\n <div className={classes.alerts}>\n {isEnabled(FF_FORETHOUGHT) && <ForeThought authenticated={isLoggedIn} fullName={identity?.participant?.fullName} />}\n {versionMismatch && isEnabled(FF_VERSION_MISMATCH) && <Alert severity=\"error\" action={<RefreshButton />} icon={<History />}>\n {translate('ra.message.version_mismatch')}\n </Alert>}\n {visibleNotices.map(notice => <NoticeAlert notice={notice} onHide={hideNotice} />)}\n {isPastSeason && <Alert severity=\"info\" icon={<History />}>\n {translate('resources.seasons.alerts.viewing_inactive_season', { season })}\n </Alert>}\n </div>\n <GameContext>\n {children}\n </GameContext>\n </Layout>\n}\n","import React, { Fragment } from 'react';\nimport { Dialog, DialogTitle, DialogContent } from '@material-ui/core';\nimport { SimpleForm, useTranslate } from 'react-admin';\n\nimport { OfficeInput } from '../../resources/offices/OfficeInput';\nimport { useOffice } from '../inputs/OfficeSelector';\n\nimport { DialogFormToolbar } from './DialogForm';\n\nconst Toolbar = ({ handleSubmit, onClose }) => {\n return <DialogFormToolbar\n onCancel={onClose}\n handleSubmit={handleSubmit}\n submitLabel=\"ra.action.select\"\n />\n}\n\nconst OfficeSelectorForm = ({ onClose, handleSave, filter }) => {\n const translate = useTranslate();\n const officeId = useOffice();\n\n return <SimpleForm component={Fragment} toolbar={<Toolbar onClose={onClose} />} save={handleSave} initialValues={{ selectedOfficeId: officeId }} >\n <OfficeInput source=\"selectedOfficeId\" filter={filter} fullWidth variant=\"outlined\" margin=\"none\" label={translate('resources.offices.name')} />\n </SimpleForm>\n}\n\nexport default ({ open, onClose, handleSave, filter }) => {\n const translate = useTranslate();\n\n return <Dialog open={open} onClose={onClose} fullWidth maxWidth=\"sm\">\n <DialogTitle>{translate('components.office_selector.labels.title')}</DialogTitle>\n <DialogContent>\n <OfficeSelectorForm onClose={onClose} handleSave={handleSave} filter={filter} />\n </DialogContent>\n </Dialog>\n}\n","import React, { useContext, useMemo, useState } from 'react';\nimport { useGetMany, useTranslate } from 'react-admin';\nimport { Button, makeStyles } from '@material-ui/core';\nimport { Edit, Visibility } from '@material-ui/icons';\n\nimport { useDefaultOffice } from '../../http';\n\nimport OfficeSelectorDialog from '../dialogs/OfficeSelectorDialog';\n\nexport const OfficeContext = React.createContext([null, () => {}]);\nexport const OfficeProvider = props => {\n const defaultOffice = useDefaultOffice();\n const [ officeId, setOfficeId ] = useState(defaultOffice);\n\n const value = useMemo(() => ({\n officeId,\n setOfficeId,\n }), [ officeId, setOfficeId ])\n\n return <OfficeContext.Provider value={value} {...props} />\n}\n\nexport const useOffice = () => {\n const { officeId } = useContext(OfficeContext);\n return officeId;\n}\n\nconst useStyles = makeStyles(theme => ({\n toolbar: {\n display: 'flex',\n alignItems: 'center',\n padding: theme.spacing(1),\n }\n}))\n\nexport default ({ filter, disabled, ...props }) => {\n const translate = useTranslate();\n const { officeId, setOfficeId } = useContext(OfficeContext);\n const { data, loaded, loading } = useGetMany('offices', [ officeId ], {\n enabled: officeId != null,\n });\n const office = data[0]\n\n const [ open, setOpen ] = useState(false);\n\n const onClose = () => setOpen(false);\n const handleSave = (values) => {\n const { selectedOfficeId } = values;\n setOfficeId(selectedOfficeId);\n onClose();\n }\n\n let label = translate('components.office_selector.actions.open')\n if (loaded && office?.name) {\n label = office?.name;\n } else if (loading && officeId) {\n label = translate('ra.page.loading');\n }\n\n const classes = useStyles();\n const icon = !disabled ? <Edit /> : <Visibility />;\n return <div className={classes.toolbar} >\n <Button color=\"primary\" endIcon={icon} disabled={disabled} onClick={() => setOpen(true)}>\n {label}\n </Button>\n\n {open && <OfficeSelectorDialog open={open} onClose={onClose} handleSave={handleSave} filter={filter} />}\n </div>\n}\n","import React from 'react'\nimport { Button, useListContext, useTranslate } from 'react-admin';\nimport { ClearAll } from '@material-ui/icons';\nimport { isEmpty } from 'lodash';\n\nimport { useSeason } from './inputs/SeasonSelector'\n\nexport const ResetFiltersButton = () => {\n const translate = useTranslate();\n const seasonId = useSeason();\n const { filterValues, setFilters } = useListContext();\n\n const { seasonId: initialSeasonId, _include, ...rest } = filterValues;\n\n const handleClick = () => setFilters({ seasonId, _include })\n\n if (isEmpty(rest)) return null;\n return <div>\n <Button label={translate(\"ra.action.clear_filters\")} onClick={handleClick}>\n <ClearAll />\n </Button>\n </div>\n}\n","import React, { cloneElement, useMemo, useContext } from 'react';\nimport {\n sanitizeListRestProps,\n useListContext,\n useResourceContext,\n useResourceDefinition,\n TopToolbar,\n CreateButton,\n FilterContext,\n FilterButton,\n} from 'react-admin';\n\nimport ExportButton from './/ExportButton';\nimport { ResetFiltersButton } from '../ResetFiltersButton';\n\n\n/**\n * Action Toolbar for the List view\n *\n * Internal component. If you want to add or remove actions for a List view,\n * write your own ListActions Component. Then, in the <List> component,\n * use it in the `actions` prop to pass a custom component.\n *\n * @example\n * import { cloneElement } from 'react';\n * import Button from '@material-ui/core/Button';\n * import { TopToolbar, List, CreateButton, ExportButton } from 'react-admin';\n *\n * const PostListActions = ({ basePath, filters }) => (\n * <TopToolbar>\n * { cloneElement(filters, { context: 'button' }) }\n * <CreateButton/>\n * <ExportButton/>\n * // Add your custom actions here //\n * <Button onClick={customAction}>Custom Action</Button>\n * </TopToolbar>\n * );\n *\n * export const PostList = (props) => (\n * <List actions={<PostListActions />} {...props}>\n * ...\n * </List>\n * );\n */\nconst ListActions = props => {\n const { className, exporter = false, resetFilters = false, filters: filtersProp, actions = [], ...rest } = props;\n const {\n currentSort,\n displayedFilters,\n filterValues,\n basePath,\n showFilter,\n total,\n } = useListContext(props);\n const resource = useResourceContext(rest);\n const { hasCreate } = useResourceDefinition(rest);\n const filters = useContext(FilterContext) || filtersProp;\n\n return useMemo(() => (\n <TopToolbar className={className} {...sanitizeListRestProps(rest)}>\n {filtersProp\n ? cloneElement(filtersProp, {\n resource,\n showFilter,\n displayedFilters,\n filterValues,\n context: 'button',\n })\n : filters && <FilterButton />}\n {resetFilters && <ResetFiltersButton {...props} />}\n {!!actions?.length && actions.map(action => action)}\n {exporter && (\n <ExportButton\n exporter={exporter}\n disabled={total === 0}\n resource={resource}\n sort={currentSort}\n filterValues={filterValues} />\n )}\n {hasCreate && <CreateButton basePath={basePath} />}\n </TopToolbar>\n ),\n /* eslint-disable react-hooks/exhaustive-deps */\n [\n resource,\n displayedFilters,\n filterValues,\n showFilter,\n filters,\n total,\n basePath,\n className,\n currentSort,\n exporter,\n hasCreate,\n resetFilters\n ]\n );\n};\n\nListActions.defaultProps = {\n selectedIds: [],\n onUnselectItems: () => null,\n};\n\nexport default ListActions;\n","import React from 'react';\nimport { List as RAList, Pagination, useResourceContext } from 'react-admin';\n\nimport { isAuthorized } from '../Authorize';\n\nimport ListActions from './ListActions';\n\n/**\n * @param {{ customActions: any; listActionsClass: any; rowsPerPageOptions: [number,number,number]; resetFilters: any; permissions: string[]; } & Parameters<typeof RAList>[0]} param0\n */\nexport function List({ actions, customActions, listActionsClass, rowsPerPageOptions = [25, 50, 100], exporter = false, resetFilters, ...props }) {\n const resource = useResourceContext(props);\n return <RAList\n perPage={25}\n exporter={exporter}\n bulkActionButtons={false}\n empty={false}\n pagination={<Pagination rowsPerPageOptions={rowsPerPageOptions} />}\n actions={actions || <ListActions actions={customActions} className={listActionsClass} resetFilters={resetFilters} />}\n {...props}\n hasCreate={!props.hasCreate ? false : isAuthorized(props.permissions, resource, 'create')}\n />\n}\n","import React from 'react';\nimport { EditButton, ShowButton, useEditContext, useResourceContext } from 'react-admin';\n\nimport { TopToolbar } from '../cards/Card';\nimport { isAuthorized } from '../Authorize';\n\nexport const ResourceActions = ({ hasEdit, hasShow, ...props }) => {\n const resource = useResourceContext(props)\n const { basePath, record } = useEditContext(props);\n const canEditResource = isAuthorized(record, resource, 'edit');\n const canShowResource = isAuthorized(record, resource, 'show');\n\n return <TopToolbar>\n {hasEdit && canEditResource && <EditButton basePath={basePath} resource={resource} record={record} />}\n {hasShow && canShowResource && <ShowButton basePath={basePath} resource={resource} record={record} />}\n </TopToolbar>\n}\n","import React from 'react';\nimport { Show as RAShow } from 'react-admin';\nimport { Box } from '@material-ui/core';\n\nimport { ResourceActions } from './ResourceActions';\n\nexport function Show(props) {\n return <RAShow\n actions={<ResourceActions />}\n component={Box}\n {...props}\n />\n}\n","import React, { useCallback } from 'react';\nimport { Create as RACreate, useCreate, useSaveModifiers, useNotify, useRedirect, CRUD_CREATE } from 'react-admin';\nimport { ResourceActions } from './ResourceActions';\n\nconst Form = ({\n resource,\n basePath,\n onSuccess,\n onFailure,\n transform,\n successMessage,\n children,\n ...props\n}) => {\n // save based on useCreateController\n const {\n onSuccessRef,\n setOnSuccess,\n onFailureRef,\n setOnFailure,\n transformRef,\n setTransform,\n } = useSaveModifiers({ onSuccess, onFailure, transform });\n const notify = useNotify()\n const redirect = useRedirect()\n\n const [ create ] = useCreate(resource)\n const save = useCallback(async (values, redirectTo, {\n onSuccess: onSuccessFromSave,\n onFailure: onFailureFromSave,\n transform: transformFromSave,\n } = {}) => {\n try {\n const data = await Promise.resolve(\n transformFromSave ? transformFromSave(values) :\n transformRef.current ? transformRef.current(values)\n : values\n )\n\n return await create(\n { payload: { data } },\n {\n action: CRUD_CREATE,\n onSuccess: onSuccessFromSave || onSuccessRef.current || function({ data }) {\n notify(successMessage || 'ra.notification.created', 'info', { smart_count: 1 })\n redirect(redirectTo, basePath, data.id, data)\n },\n onFailure: onFailureFromSave || onFailureRef.current || function(error) {\n const errorMessage = typeof error === 'string' ? error : error.message;\n notify(errorMessage || 'ra.notification.http_error', 'warning', { _: errorMessage })\n },\n // added for final-form to recognize the error response\n returnPromise: true,\n }\n )\n } catch (e) {\n // passed to final-form\n return e;\n }\n }, [\n transformRef,\n create,\n onSuccessRef,\n onFailureRef,\n notify,\n successMessage,\n redirect,\n basePath,\n ])\n\n return React.cloneElement(children, {\n ...props,\n ...children.props,\n resource,\n basePath,\n save,\n setOnSuccess,\n setOnFailure,\n setTransform,\n })\n}\n\nexport function Create({ children, ...props }) {\n return <RACreate\n actions={<ResourceActions />}\n {...props}\n >\n <Form>\n {children}\n </Form>\n </RACreate>\n}\n","import React, { useCallback } from 'react';\nimport { Edit as RAEdit, useUpdate, useSaveModifiers, useNotify, useRedirect, CRUD_UPDATE } from 'react-admin';\nimport { ResourceActions } from './ResourceActions';\n\nconst Form = ({\n resource,\n id,\n record,\n basePath,\n onSuccess,\n onFailure,\n transform,\n successMessage,\n undoable = true,\n mutationMode = undoable ? 'undoable' : undefined,\n children,\n ...props\n}) => {\n // save based on useUpdateController\n const {\n onSuccessRef,\n setOnSuccess,\n onFailureRef,\n setOnFailure,\n transformRef,\n setTransform,\n } = useSaveModifiers({ onSuccess, onFailure, transform });\n const notify = useNotify()\n const redirect = useRedirect()\n\n const [ update, { loading: saving } ] = useUpdate(resource, id, {}, record)\n const save = useCallback(async (values, redirectTo, {\n onSuccess: onSuccessFromSave,\n onFailure: onFailureFromSave,\n transform: transformFromSave,\n } = {}) => {\n try {\n const data = await Promise.resolve(\n transformFromSave ? transformFromSave(values) :\n transformRef.current ? transformRef.current(values)\n : values\n )\n\n return await update(\n { payload: { data } },\n {\n action: CRUD_UPDATE,\n onSuccess: onSuccessFromSave || onSuccessRef.current || function() {\n notify(successMessage || 'ra.notification.updated', 'info', { smart_count: 1 }, mutationMode === 'undoable')\n redirect(redirectTo, basePath, data.id, data)\n },\n onFailure: onFailureFromSave || onFailureRef.current || function(error) {\n const errorMessage = typeof error === 'string' ? error : error.message;\n notify(errorMessage || 'ra.notification.http_error', 'warning', { _: errorMessage })\n },\n mutationMode,\n // added for final-form to recognize the error response\n returnPromise: true,\n }\n )\n } catch (e) {\n // passed to final-form\n return e;\n }\n }, [\n transformRef,\n update,\n onSuccessRef,\n onFailureRef,\n notify,\n successMessage,\n redirect,\n basePath,\n mutationMode,\n ])\n\n return React.cloneElement(children, {\n ...props,\n ...children.props,\n resource,\n basePath,\n id,\n record,\n saving,\n save,\n setOnSuccess,\n setOnFailure,\n setTransform,\n })\n}\n\nexport function Edit({ children, id, ...props }) {\n return <RAEdit\n id={id}\n undoable={false}\n mutationMode=\"pessimistic\"\n actions={<ResourceActions />}\n {...props}\n >\n <Form id={id}>\n {children}\n </Form>\n </RAEdit>\n}\n","import React from 'react';\nimport DefaultIcon from '@material-ui/icons/ViewList';\nimport { makeStyles } from '@material-ui/core/styles'\nimport { useSelector } from 'react-redux';\nimport { useResourceContext, useRecordContext, getResources, useTranslate } from 'react-admin';\nimport Helmet from 'react-helmet';\nimport { Avatar, Badge, Tooltip } from '@material-ui/core';\nimport { Sync } from '@material-ui/icons';\n\nconst useStyles = makeStyles(theme => ({\n icon: {\n verticalAlign: 'middle',\n marginRight: 8,\n marginTop: -3,\n },\n svgIcon: {\n fontSize: 'large'\n },\n mainContainer: {\n display: 'flex',\n alignItems: 'center',\n padding: 5,\n marginBottom: 5\n },\n container: {\n display: 'flex',\n alignItems: 'center',\n marginRight: 8,\n marginTop: -3,\n marginLeft: 10\n },\n avatar: {\n width: 100,\n height: 100,\n boxShadow: theme.shadows[3],\n },\n smallAvatar: {\n width: 20,\n height: 20,\n border: `1px solid ${theme.palette.background.paper}`,\n },\n number: {\n fontSize: 'small',\n }\n}))\n\nexport const ResourceIcon = ({ className, ...props }) => {\n const resourceName = useResourceContext(props);\n const resource = useSelector(state => getResources(state).find(resource => resource.name === resourceName))\n const Icon = resource && resource.icon || DefaultIcon;\n return <Icon className={className} />\n}\n\nexport const ResourceTitle = ({ title, classes: classOverrides, chip, ...props }) => {\n const record = useRecordContext(props)\n const classes = useStyles(classOverrides);\n return <>\n <Helmet title={title(record)} />\n <ResourceIcon className={classes.icon} />\n {title(record)}{chip && chip(record)}\n </>\n}\n\nexport const ResourceAvatarTitle = ({ title, classes: classOverrides, ...props }) => {\n const record = useRecordContext(props);\n const classes = useStyles(classOverrides);\n const translate = useTranslate();\n\n return <div className={classes.mainContainer}>\n <Helmet title={title(record)} />\n <Badge backgroundColor=\"grey\" overlap=\"circular\" anchorOrigin={{ vertical: 'bottom', horizontal: 'right' }} badgeContent={ record.externalId &&\n <Tooltip title={translate('resources.participants.labels.tooltips.picture_update_in_id')}>\n <Avatar className={classes.smallAvatar}>\n <Sync className={classes.svgIcon} htmlColor=\"black\" />\n </Avatar>\n </Tooltip>\n }>\n <Avatar className={classes.avatar} src={record.pictureUrl} alt={record.fullName} />\n </Badge>\n <div>\n <div className={classes.container}>\n {title(record)}\n </div>\n {record.HCRId && <div className={classes.container}>\n <span className={classes.number}>{translate('resources.participants.fields.HCRId')} {record.HCRId}</span>\n </div>}\n </div>\n </div>\n}\n\nexport default ResourceTitle;\n","import React from \"react\";\nimport { Chip, makeStyles, Tooltip } from \"@material-ui/core\";\nimport { useTranslate } from \"react-admin\";\n\nconst useStyles = makeStyles(theme => ({\n chip: {\n color: props => props.themeColor[500],\n border: props => `1px solid ${props.themeColor[500]}`,\n backgroundColor: props => props.themeColor[50],\n marginLeft: theme.spacing(0.5),\n height: theme.spacing(2.5),\n fontSize: '0.7rem',\n },\n icon: {\n color: props => props.themeColor[500],\n marginLeft: '6px !important',\n height: theme.spacing(2),\n width: theme.spacing(2)\n },\n}));\n\nexport default ({ themeColor, tooltipText, label, icon: Icon, ...props }) => {\n const translate = useTranslate();\n const classes = useStyles({ themeColor });\n\n return <Tooltip title={translate(tooltipText)}>\n <Chip\n className={classes.chip}\n size=\"small\"\n label={translate(label)}\n icon={<Icon className={classes.icon} />}\n {...props}\n />\n </Tooltip>\n}\n","import React from \"react\"\nimport { useTheme } from \"@material-ui/core\"\nimport { VisibilityOff } from \"@material-ui/icons\";\n\nimport StatusChip from \"./StatusChip\";\n\nexport default ({ record }) => {\n const theme = useTheme();\n\n if (record?.isPublic !== false) return null;\n return <StatusChip\n themeColor={theme.palette.warning}\n tooltipText=\"resources.schedules.tooltips.hidden_to_public\"\n label=\"resources.schedules.labels.not_public\"\n icon={VisibilityOff}\n />\n}\n","import React, { useMemo, useState } from 'react';\nimport { useRecordContext, useTranslate } from 'react-admin';\nimport { makeStyles, Tooltip } from '@material-ui/core';\nimport { Sync } from '@material-ui/icons';\nimport { Alert } from '@material-ui/lab';\n\nimport { useScopes } from '../http';\n\nconst useStyles = makeStyles(theme => ({\n alertRoot: {\n marginBottom: theme.spacing(1),\n '&:hover .MuiAlert-action': {\n visibility: 'visible',\n }\n },\n alertAction: {\n visibility: 'hidden'\n },\n syncIcon: {\n verticalAlign: 'middle',\n marginLeft: theme.spacing(0.5),\n color: theme.palette.secondary[500],\n }\n}))\n\nexport const useRecordSynced = props => {\n const record = useRecordContext(props);\n const [ disabled, setDisabled ] = useState(record?.externalId != null);\n const scopes = useScopes();\n\n return useMemo(() => {\n const toggle = scopes.includes('internal') ? () => setDisabled(disabled => !disabled) : null;\n return [ disabled, toggle ];\n }, [ scopes, disabled, setDisabled ])\n}\n\nexport const SyncAlert = ({ isSynced, toggle }) => {\n const classes = useStyles();\n const translate = useTranslate();\n\n if (!isSynced) return null;\n return <Alert\n icon={<Sync />}\n severity=\"info\"\n classes={{ root: classes.alertRoot, action: classes.alertAction }}\n onClose={toggle}\n >\n {translate('ra.message.managed_by_id')}\n </Alert>\n}\n\nexport const SyncAlertCustomMessage = ({ isSynced, toggle, message }) => {\n const classes = useStyles();\n const translate = useTranslate();\n\n if (!isSynced) return null;\n return <Alert\n icon={<Sync />}\n severity=\"info\"\n classes={{ root: classes.alertRoot, action: classes.alertAction }}\n onClose={toggle}\n >\n {translate(message)}\n </Alert>\n}\n\nexport const SyncedIcon = props => {\n const translate = useTranslate();\n return <Tooltip title={translate('ra.message.synced_with_id')}>\n <Sync {...props} />\n </Tooltip>\n}\n\nexport const SyncedIndicator = ({ record, ...props }) => {\n const classes = useStyles();\n if (!record?.externalId) return null;\n return <SyncedIcon className={classes.syncIcon} fontSize=\"inherit\" {...props} />;\n}\n","import React from \"react\"\nimport { useTheme } from \"@material-ui/core\"\nimport { DomainDisabledOutlined } from \"@material-ui/icons\";\n\nimport StatusChip from \"./StatusChip\";\n\nexport default ({ record }) => {\n const theme = useTheme();\n\n if (record?.isSanctioned !== false) return null;\n return <StatusChip\n themeColor={theme.palette.pink}\n tooltipText=\"resources.teams.tooltips.unsanctioned\"\n label=\"resources.teams.chips.unsanctioned\"\n icon={DomainDisabledOutlined}\n />\n}\n","import React from 'react';\nimport { useRecordContext } from 'react-admin';\nimport { makeStyles, Typography } from '@material-ui/core';\n\nimport NotPublicChip from './chips/NotPublicChip';\nimport { SyncedIndicator } from './SyncAlert';\nimport UnsanctionedChip from './chips/UnsanctionedChip';\n\nconst useStyles = makeStyles(theme => ({\n root: {\n display: 'flex',\n gap: theme.spacing(2),\n margin: theme.spacing(1),\n },\n avatar: {\n display: 'flex',\n alignItems: 'center',\n maxWidth: theme.spacing(10),\n overflow: 'hidden',\n '& img': {\n margin: 0,\n verticalAlign: 'middle',\n }\n },\n main: {\n flex: 1,\n display: 'flex',\n flexDirection: 'column',\n justifyContent: 'center',\n '& h1': {\n margin: 0,\n },\n '& h2': {\n margin: 0,\n }\n },\n typeText: {\n lineHeight: 1,\n },\n description: {\n lineHeight: 2,\n },\n name: {\n display: 'flex',\n alignItems: 'center',\n gap: 4,\n },\n}))\n\nexport const ShowHeader = ({ name, description, type, avatar }) => {\n const classes = useStyles();\n const record = useRecordContext();\n\n return <div className={classes.root}>\n {avatar && <div className={classes.avatar}>\n {avatar(record)}\n </div>}\n <div className={classes.main}>\n {type && <Typography variant=\"overline\" component=\"h2\" color=\"textSecondary\" className={classes.typeText}>\n {type(record)}\n </Typography>}\n {name &&\n <div className={classes.name}>\n <Typography variant=\"h6\" component=\"h1\">\n {name(record)}\n </Typography>\n <SyncedIndicator record={record} style={{ fontSize: 18 }} />\n <NotPublicChip record={record} />\n <UnsanctionedChip record={record} />\n </div>}\n {description && <Typography variant=\"overline\" component=\"h2\" className={classes.description}>{description(record)}</Typography>}\n </div>\n </div>\n}\n","import React from \"react\";\nimport { useTheme } from \"@material-ui/core\";\nimport { VisibilityOff } from \"@material-ui/icons\";\n\nimport { StatusIcon } from \"./StatusIcon\";\n\nexport const NotPublicIcon = ({ record, ...props }) => {\n const theme = useTheme();\n\n if (record?.isPublic !== false) return null;\n return <StatusIcon\n tooltipText=\"resources.schedules.labels.not_public\"\n icon={VisibilityOff}\n themeColor={theme.palette.warning}\n {...props}\n />\n}\n","import React from \"react\"\nimport { FunctionField, TextField } from \"react-admin\";\n\nimport { NotPublicIcon } from \"../icons/NotPublicIcon\";\nimport { SyncedIndicator } from \"../SyncAlert\";\nimport { UnsanctionedIcon } from \"../icons/UnsanctionedIcon\";\n\nexport const NameWithStatusesField = ({ source = \"name\" }) => {\n return <FunctionField source={source} render={(record) => {\n return <div style={{ display: 'flex', alignItems: 'center', gap: 4 }}>\n <TextField source={source} />\n <SyncedIndicator record={record} />\n <NotPublicIcon record={record} />\n <UnsanctionedIcon record={record} />\n </div>\n }} />\n}\n","import React from 'react';\nimport { Datagrid } from 'react-admin';\n\nimport DateRangeField from '../../common/fields/DateRangeField';\nimport { EnumField } from '../../common/inputs/EnumInputs';\nimport { NameWithStatusesField } from '../../common/fields/NameWithStatusesField';\n\nimport { CategoryField } from '../categories/CategoryField';\nimport { OfficeField } from '../offices/OfficeField';\n\nexport const ScheduleGrid = ({ showOffice = true, ...props }) =>\n <Datagrid size=\"medium\" {...props}>\n <NameWithStatusesField source=\"name\" />\n <CategoryField source=\"categoryId\" />\n <EnumField source=\"type\" />\n\n <DateRangeField source=\"startDate\" startSource=\"startDate\" endSource=\"endDate\" />\n\n {showOffice && <OfficeField source=\"officeId\" />}\n </Datagrid>\n","import React from 'react';\nimport { Filter, TextInput, BooleanInput } from 'react-admin';\n\nimport { LATEST_SEASON } from '@hisports/common/src/seasons';\n\nimport { ScheduleTypeEnumInput, GameFormatEnumInput } from '../../common/inputs/EnumInputs';\nimport { SeasonFilter, useSeason } from '../../common/inputs/SeasonSelector';\nimport { isAuthorized } from '../../common/Authorize';\nimport { useDefaultSeason, useScopes } from '../../http';\n\nimport { OfficeInput } from '../offices/OfficeInput';\nimport { CategoryInput } from '../categories/CategoryInput';\n\nconst multipleProps = {\n multiple: true,\n allowEmpty: false,\n}\n\nexport const ScheduleFilters = ({ hideOffices, ...props }) => {\n const scopes = useScopes();\n const seasonId = useSeason()\n const defaultSeason = useDefaultSeason();\n\n const canListOffices = isAuthorized(scopes, 'offices', 'list');\n const showPastSeason = (seasonId === LATEST_SEASON) || (seasonId === defaultSeason);\n\n return <Filter variant=\"outlined\" {...props}>\n <TextInput source=\"name\" alwaysOn />\n {canListOffices && !hideOffices && <OfficeInput source=\"officeId\" type={{ type: { neq: 'Historical' } }} alwaysOn {...multipleProps} />}\n <ScheduleTypeEnumInput source=\"type\" alwaysOn {...multipleProps} />\n <CategoryInput source=\"categoryId\" {...multipleProps} />\n <GameFormatEnumInput source=\"gameFormat\" {...multipleProps} />\n {showPastSeason && <BooleanInput source=\"pastEvents\" alwaysOn />}\n <SeasonFilter source=\"seasonId\" alwaysOn />\n </Filter>\n}\n","import React from 'react';\nimport { Card, CardContent } from '@material-ui/core'\nimport { ThemeProvider } from '@material-ui/styles';\n\nconst createTheme = theme => ({\n ...theme,\n overrides: {\n ...theme.overrides,\n MuiCard: {\n root: {\n order: -1,\n width: '20em',\n paddingTop: '16px',\n paddingBottom: '16px',\n marginTop: '-56px',\n marginRight: '1em',\n minHeight: '75vh',\n minWidth: 288,\n position: 'relative',\n zIndex: 1,\n }\n },\n RaAutocompleteArrayInput: {\n chipContainerOutlined: {\n margin: 8,\n },\n },\n RaFilterForm: {\n form: {\n flexDirection: 'column',\n alignItems: 'flex-start',\n }\n },\n RaFilterFormInput: {\n body: {\n alignItems: 'center',\n flex: 1,\n display: 'flex',\n width: '100%',\n },\n spacer: {\n width: 0,\n height: 0,\n },\n hideButton: {\n order: 2,\n '& svg': {\n width: '0.85em',\n height: '0.85em',\n }\n }\n },\n RaNullableBooleanInput: {\n input: {\n width: '100%',\n }\n },\n MuiChip: {\n root: {\n height: 'auto',\n },\n label: {\n whiteSpace: 'break-spaces',\n padding: '4px 8px',\n }\n },\n MuiOutlinedInput: {\n adornedStart: {\n paddingLeft: 0,\n },\n },\n MuiAutocomplete: {\n hasClearIcon: {\n width: '100%'\n },\n hasPopupIcon: {\n '&:not(.Mui-focused) label': {\n right: 48,\n whiteSpace: 'pre',\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n }\n }\n },\n HiAutocompleteInput: {\n input: {\n minWidth: '0px'\n }\n }\n }\n})\n\nexport const FilterCard = ({ children }) => {\n return <ThemeProvider theme={createTheme}>\n <Card>\n <CardContent>\n { children }\n </CardContent>\n </Card>\n </ThemeProvider>\n}\n","import { useState } from 'react';\nimport { useQueryWithStore, useMutation, GET_LIST, CREATE, UPDATE, DELETE } from 'react-admin';\n\nimport { isEmpty } from '@hisports/parsers';\n\nexport default (type, initialValue) => {\n const [ preference, _setPreference ] = useState({ value: initialValue })\n const [ save, { loading: saveLoading } ] = useMutation();\n const { loading, error } = useQueryWithStore({\n type: GET_LIST,\n resource: 'preferences',\n }, {\n onSuccess(response) {\n const preference = response.data.find(preference => preference.type === type)\n if (preference) _setPreference(preference);\n }\n })\n\n const setPreference = value => {\n if (typeof value === 'function') return setPreference(value(preference.value));\n _setPreference(preference => ({ ...preference, value }));\n save({\n type: preference.id ? (!isEmpty(value) ? UPDATE : DELETE) : CREATE,\n resource: 'preferences',\n payload: {\n id: preference.id,\n data: { type, value },\n }\n }, {\n onSuccess(response) {\n const data = !isEmpty(response.data) ? response.data : { value: initialValue }\n _setPreference(data)\n }\n })\n }\n\n return [ preference.value, setPreference, loading || saveLoading, error ];\n}\n","import { useListContext } from 'react-admin';\nimport { v4 as uuid } from 'uuid';\n\nimport useAccountPreferences from './useAccountPreferences';\nimport { useOfficialList } from '../resources/events/EventViewSettings';\n\nexport const getFilterValue = (filterValues, ignoredFilters) => {\n return Object.keys(filterValues)\n .filter(filter => !ignoredFilters.includes(filter))\n .reduce((filters, key) => {\n filters[key] = filterValues[key];\n return filters;\n }, {})\n}\n\nexport const useSavedSearches = (ignoredFilters = []) => {\n const { resource, setFilters, filterValues } = useListContext();\n const [ searches, setSearches, loading, error ] = useAccountPreferences('SavedSearches', []);\n const [listId, setListId] = useOfficialList();\n\n const saveSearch = name => {\n const value = getFilterValue(filterValues, ignoredFilters)\n\n if (listId) {\n value.listId = listId;\n }\n\n setSearches(searches => ([...searches, { id: uuid(), name, resource, value }]))\n }\n\n const removeSearch = search => {\n if (!search?.id) return;\n setSearches(searches => searches.filter(p => p.id !== search.id))\n }\n\n const applySearch = search => {\n if (!search?.value) return;\n const ignored = Object.keys(filterValues)\n .filter(filter => ignoredFilters.includes(filter))\n .reduce((filters, key) => {\n filters[key] = filterValues[key]\n return filters;\n }, {})\n\n if (search.value.listId) {\n setListId(search.value.listId)\n }\n\n setFilters({ ...search.value, ...ignored });\n }\n\n return {\n searches: searches.filter(search => search.resource === resource),\n filterValues,\n saveSearch,\n removeSearch,\n applySearch,\n loading,\n error,\n }\n}\n","import React, { useState, useEffect } from 'react';\nimport { useTranslate } from 'react-admin';\nimport {\n List,\n ListItem,\n ListItemText,\n Dialog,\n DialogTitle,\n DialogContent,\n DialogContentText,\n DialogActions,\n TextField,\n Tooltip,\n Button,\n Typography,\n IconButton,\n makeStyles,\n ListItemSecondaryAction,\n CircularProgress,\n} from '@material-ui/core'\nimport { Add, Close, ErrorOutline } from '@material-ui/icons'\n\nimport { useSavedSearches, getFilterValue } from './useSavedSearches';\n\nconst useStyles = makeStyles(theme => ({\n header: {\n display: 'flex',\n justifyContent: 'space-between',\n alignItems: 'center',\n marginTop: theme.spacing(2),\n },\n}))\n\nconst SearchListItem = ({ search, onClick, onRemove }) =>\n <ListItem button onClick={onClick}>\n <ListItemText primary={search.name} />\n <ListItemSecondaryAction>\n <Tooltip title=\"Remove\">\n <IconButton size=\"small\" onClick={onRemove}>\n <Close fontSize=\"small\" />\n </IconButton>\n </Tooltip>\n </ListItemSecondaryAction>\n </ListItem>\n\nconst AddSearchButton = ({ disabled, onClick }) => {\n const translate = useTranslate();\n\n return <Tooltip title={translate('components.search.save')}>\n <IconButton disabled={disabled} onClick={onClick} edge=\"end\">\n <Add />\n </IconButton>\n </Tooltip>\n}\n\nconst AddSearchDialog = ({ isOpen, onClose }) => {\n const [ name, setName ] = useState('');\n const translate = useTranslate();\n\n const handleClose = name => {\n onClose(name)\n setName('')\n }\n\n return <Dialog open={isOpen} maxWidth=\"xs\" fullWidth>\n <DialogTitle>{translate('components.search.save')}</DialogTitle>\n <DialogContent>\n <TextField\n autoFocus\n margin=\"dense\"\n id=\"name\"\n label={translate('ra.input.field.name')}\n type=\"text\"\n fullWidth\n value={name}\n onChange={e => setName(e.target.value)}\n helperText={translate('components.search.specify_name')}\n />\n </DialogContent>\n <DialogActions>\n <Button onClick={() => handleClose()}>{translate('ra.action.cancel')}</Button>\n <Button color=\"primary\" onClick={() => handleClose(name)} disabled={!name}>{translate('ra.action.save')}</Button>\n </DialogActions>\n </Dialog>\n}\n\nconst RemoveSearchDialog = ({ search, onClose }) => {\n const translate = useTranslate();\n\n if (!search) return null;\n return <Dialog open maxWidth=\"xs\" fullWidth>\n <DialogTitle>{translate('components.search.remove')}</DialogTitle>\n <DialogContent>\n <DialogContentText>\n {translate('ra.message.delete_content', { name: search.name })}\n </DialogContentText>\n </DialogContent>\n <DialogActions>\n <Button onClick={() => onClose()}>{translate('ra.action.cancel')}</Button>\n <Button onClick={() => onClose(search)}>{translate('ra.action.remove')}</Button>\n </DialogActions>\n </Dialog>\n}\n\nexport const SavedSearches = ({ ignoredFilters = [] }) => {\n const translate = useTranslate();\n const classes = useStyles();\n const [ isAddDisabled, setAddDisabled ] = useState(true);\n const [ isAddOpen, setAddOpen ] = useState(false);\n const [ remove, setRemove ] = useState(null);\n\n const { searches, filterValues, saveSearch, removeSearch, applySearch, loading, error } = useSavedSearches(ignoredFilters);\n\n useEffect(() => {\n const value = getFilterValue(filterValues, ignoredFilters)\n setAddDisabled(!Object.keys(value).length)\n }, [ filterValues, ignoredFilters ])\n\n const handleAdd = () => {\n setAddOpen(true)\n }\n\n const handleAddClose = name => {\n if (name) saveSearch(name);\n setAddOpen(false);\n }\n\n const handleRemove = search => {\n setRemove(search)\n }\n\n const handleRemoveClose = search => {\n if (search) removeSearch(search);\n setRemove(null)\n }\n\n let action = null;\n if (error) {\n action = <Tooltip title={translate('components.search.loading_error')}><ErrorOutline /></Tooltip>\n } else if (loading) {\n action = <Tooltip title={translate('ra.page.loading')}><CircularProgress size={14} color=\"secondary\" /></Tooltip>\n } else {\n action = <AddSearchButton disabled={isAddDisabled} onClick={handleAdd} />\n }\n\n return <>\n <div className={classes.header}>\n <Typography variant=\"overline\">{translate('components.search.title')}</Typography>\n {action}\n </div>\n <List dense disablePadding>\n {searches.map(search =>\n <SearchListItem\n key={search.id}\n search={search}\n onClick={() => applySearch(search)}\n onRemove={() => handleRemove(search)}\n />)}\n </List>\n <AddSearchDialog isOpen={isAddOpen} onClose={handleAddClose} />\n <RemoveSearchDialog search={remove} onClose={handleRemoveClose} />\n </>\n}\n","import React from 'react';\nimport { Filter, TextInput, BooleanInput } from 'react-admin';\n\nimport { LATEST_SEASON } from '@hisports/common/src/seasons';\n\nimport { ScheduleTypeEnumInput, GameFormatEnumInput } from '../../common/inputs/EnumInputs';\nimport { useSeason, SeasonFilter } from '../../common/inputs/SeasonSelector';\nimport { isAuthorized } from '../../common/Authorize';\nimport { FilterCard } from '../../common/cards/FilterCard';\nimport { SavedSearches } from '../../common/SavedSearches';\nimport { useScopes, useDefaultSeason } from '../../http';\n\nimport { OfficeInput } from '../offices/OfficeInput';\nimport { CategoryInput } from '../categories/CategoryInput';\n\nconst multipleProps = {\n multiple: true,\n alwaysOn: true,\n fullWidth: true,\n allowEmpty: false,\n}\n\nconst ScheduleFilters = props => {\n const scopes = useScopes();\n const seasonId = useSeason();\n const defaultSeason = useDefaultSeason();\n\n const canListOffices = isAuthorized(scopes, 'offices', 'show');\n const showPastSeason = (seasonId === LATEST_SEASON) || (seasonId === defaultSeason);\n\n return <Filter variant=\"outlined\" margin=\"dense\" fullWidth {...props}>\n <TextInput source=\"name\" alwaysOn fullWidth />\n {canListOffices && <OfficeInput source=\"officeId\" {...multipleProps} />}\n <ScheduleTypeEnumInput source=\"type\" alwaysOn {...multipleProps} />\n <CategoryInput source=\"categoryId\" {...multipleProps} />\n <GameFormatEnumInput source=\"gameFormat\" {...multipleProps} />\n {showPastSeason && <BooleanInput source=\"pastEvents\" label=\"resources.schedules.filters.pastEvents\" alwaysOn fullWidth />}\n <SeasonFilter source=\"seasonId\" alwaysOn fullWidth />\n </Filter>\n}\n\nexport const ScheduleFilterList = () => {\n return <FilterCard>\n <ScheduleFilters />\n <SavedSearches ignoredFilters={['seasonId', 'pastEvents']} />\n </FilterCard>\n}\n","import { useMediaQuery } from '@material-ui/core';\nimport React from 'react';\nimport { TabbedShowLayout as RaTabbedShowLayout, TabbedShowLayoutTabs } from 'react-admin';\n\nexport const TabbedShowLayout = props => {\n const isMobile = useMediaQuery(theme => theme.breakpoints.down('md'))\n const tabs = isMobile ? <TabbedShowLayoutTabs variant=\"scrollable\" scrollButtons=\"on\" /> : <TabbedShowLayoutTabs />\n return <RaTabbedShowLayout\n tabs={tabs}\n {...props}\n />\n}\n\nexport { Tab } from 'react-admin';\n","import React from 'react';\nimport { TextField, EditButton, useRecordContext } from 'react-admin';\nimport { Table, TableBody } from '@material-ui/core';\n\nimport { getSeasonDisplayName } from '@hisports/common/src/seasons';\n\nimport InfoCard from '../../../common/cards/InfoCard';\nimport Row from '../../../common/cards/TableRow';\nimport DateRangeField from '../../../common/fields/DateRangeField';\nimport FunctionField from '../../../common/fields/FunctionField'\nimport UserTextField from '../../../common/fields/UserTextField';\nimport { hasAnyScope, isAuthorized } from '../../../common/Authorize';\n\nimport { CategoryField } from '../../categories/CategoryField';\nimport { OfficeField } from '../../offices/OfficeField';\n\nimport { usePermissions } from '../../../http';\n\nconst renderType = (schedule, source, resource, translate, sport) => {\n return `${getSeasonDisplayName(schedule.seasonId, sport)} ${translate(`resources.schedules.values.type.${schedule.type}`)}`\n}\n\nexport default props => {\n const schedule = useRecordContext(props);\n const permissions = usePermissions()\n const isLeague = permissions.some(p =>\n p.roleType === 'System' ||\n (\n hasAnyScope(p.scopes, ['leagues:manage'])\n && p.roleType === 'Office'\n && !p.inherited\n && (p?.officeIds || []).includes(schedule.officeId)\n )\n );\n const canEditSchedule = isAuthorized(schedule, 'schedules', 'edit') && isLeague;\n\n return <InfoCard title=\"resources.schedules.name\" actions={\n canEditSchedule && <EditButton label=\"resources.schedules.actions.edit\" record={schedule} />\n }>\n <Table>\n <TableBody>\n <Row label=\"resources.schedules.fields.type\">\n <FunctionField render={renderType} />\n </Row>\n <Row label=\"resources.schedules.labels.dates\">\n <DateRangeField startSource=\"startDate\" endSource=\"endDate\" />\n </Row>\n <Row label=\"resources.schedules.fields.categoryId\">\n <CategoryField source=\"categoryId\" includeGender=\"full\" />\n </Row>\n <Row label=\"resources.schedules.fields.gameFormat\" hidden={!schedule?.gameFormat}>\n <TextField source=\"gameFormat\" />\n </Row>\n <Row label=\"resources.schedules.fields.officeId\">\n <OfficeField source=\"officeId\" includeType=\"full\" />\n </Row>\n <Row label=\"resources.schedules.fields.comments\" hidden={!schedule?.comments}>\n <UserTextField source=\"comments\" />\n </Row>\n </TableBody>\n </Table>\n </InfoCard>\n}\n","import React from 'react';\nimport { Card, List, ListItem, ListItemText, ListItemIcon } from '@material-ui/core';\nimport { Link as RouterLink } from 'react-router-dom';\n\nexport const ListItemLink = ({ to, onClick, primary, icon }) => {\n const renderLink = React.useMemo(() => {\n if (onClick) return;\n return React.forwardRef((itemProps, ref) => <RouterLink to={to} ref={ref} {...itemProps} />);\n }, [ to, onClick ]);\n\n return (\n <li>\n <ListItem button onClick={onClick} component={renderLink}>\n {icon ? <ListItemIcon>{icon}</ListItemIcon> : null}\n <ListItemText primary={primary} />\n </ListItem>\n </li>\n );\n}\n\nexport default ({ links }) => {\n if (!links || !links.length) return null;\n return <Card>\n <List>{\n links.map(link => <ListItemLink key={link.primary} {...link} />)\n }</List>\n </Card>\n}\n","import React, { useState } from 'react';\nimport { useRecordContext, useTranslate } from 'react-admin';\nimport { UnarchiveOutlined, StarBorder, PlaylistAdd } from '@material-ui/icons';\nimport { useHistory } from 'react-router-dom';\n\nimport { FF_BRACKETS, FF_DRAFT_GAMES, FF_LEGACY_DRAFTS_DISABLED } from '@hisports/common/featureFlags';\n\nimport { useFlag } from '../../../http';\nimport { isAuthorized } from '../../../common/Authorize';\nimport LinksCard from '../../../common/cards/LinksCard';\n\nimport { BracketDialog, BracketIcon } from '../dialogs/BracketDialog';\n\nexport default props => {\n const isEnabled = useFlag();\n const schedule = useRecordContext(props);\n const translate = useTranslate();\n const history = useHistory();\n\n const [ bracketsOpen, setBracketsOpen ] = useState(false);\n\n const onBracketsClose = (cancelled = false) => {\n setBracketsOpen(false);\n if (!cancelled) history.push(`/schedules/${scheduleId}/show/games`)\n }\n\n const canAddDrafts = isAuthorized(schedule, 'drafts', 'create');\n if (!canAddDrafts) return null;\n\n const scheduleId = schedule?.id;\n const showBrackets = isEnabled(FF_BRACKETS) && ['Playoffs', 'Tournament', 'Cup'].includes(schedule?.type)\n\n const showLegacyDrafts = !isEnabled(FF_LEGACY_DRAFTS_DISABLED);\n if (!showLegacyDrafts) return null;\n\n return <>\n <LinksCard links={[\n {\n primary: translate(`resources.schedules.labels.generate${isEnabled(FF_DRAFT_GAMES) ?'_legacy' : ''}`),\n icon: <StarBorder />,\n to: {\n pathname: \"/drafts/create\",\n search: '?type=Generated',\n state: { scheduleId, type: 'Generated' }\n }\n },\n {\n primary: translate(`resources.schedules.labels.upload${isEnabled(FF_DRAFT_GAMES) ?'_legacy' : ''}`),\n icon: <UnarchiveOutlined />,\n to: {\n pathname: \"/drafts/create\",\n search: '?type=Upload',\n state: { scheduleId, type: 'Upload' }\n }\n },\n {\n primary: translate(`resources.schedules.labels.draft${isEnabled(FF_DRAFT_GAMES) ?'_legacy' : ''}`),\n icon: <PlaylistAdd />,\n to: {\n pathname: \"/drafts/create\",\n search: '?type=Manual',\n state: { scheduleId, type: 'Manual' }\n }\n },\n showBrackets && {\n primary: translate(`resources.schedules.labels.bracket_schedule`),\n icon: <BracketIcon />,\n onClick: () => setBracketsOpen(true),\n },\n ].filter(Boolean)} />\n <BracketDialog scheduleId={schedule.id} isOpen={bracketsOpen} onClose={onBracketsClose} />\n </>\n}\n","import React from 'react';\nimport { FunctionField, ReferenceField, TextField } from 'react-admin';\nimport { Chip, withStyles } from '@material-ui/core';\n\nconst CustomChip = withStyles(theme => ({\n root: {\n height: theme.spacing(2.5),\n fontSize: '0.725rem',\n lineHeight: '1rem',\n },\n}))(Chip);\n\nexport const PoolChipField = ({ variant = 'default', color = 'default', ...props }) =>\n <ReferenceField basePath=\"/pools\" resource=\"pools\" reference=\"pools\" link={false} allowEmpty {...props}>\n <FunctionField source=\"name\" render={record => <CustomChip label={record.name} size=\"small\" color={color} variant={variant} />} />\n </ReferenceField>\n\nexport const PoolField = ({ variant = 'body2', ...props }) =>\n <ReferenceField basePath=\"/pools\" resource=\"pools\" reference=\"pools\" link={false} allowEmpty {...props}>\n <TextField source=\"name\" variant={variant} />\n </ReferenceField>\n\nPoolField.defaultProps = {\n addLabel: true,\n}\n","import React from 'react';\nimport { SimpleForm, useTranslate } from 'react-admin';\n\n\nimport { EditResourceDialog } from '../../common/dialogs/ResourceDialog';\nimport { DialogDatagrid } from '../../common/dialogs/DialogDatagrid';\nimport { useSeason } from '../../common/inputs/SeasonSelector';\n\nimport { TeamInput } from '../teams/TeamInput';\n\nimport { ScheduleGroupInput } from '../groups/GroupInput';\nimport { PoolInput } from '../pools/PoolInput';\n\nconst inputProps = {\n variant: 'outlined',\n margin: 'normal',\n fullWidth: true,\n}\n\nconst EditTeamForm = props => {\n const seasonId = useSeason();\n const translate = useTranslate();\n\n return <SimpleForm {...props}>\n <TeamInput source=\"teamId\" filter={{ seasonId, _scope: 'Tenant' }} {...inputProps} ignoreSchedule />\n <ScheduleGroupInput source=\"groupId\" showNone={translate('ra.message.no_group')} {...inputProps} />\n <PoolInput source=\"poolId\" {...inputProps} />\n </SimpleForm>\n}\n\nconst EditTeamDialog = props =>\n <EditResourceDialog label=\"resources.scheduleteams.labels.edit\" resource=\"scheduleteams\" basePath=\"/scheduleteams\" undoableDelete={false} {...props}>\n <EditTeamForm />\n </EditResourceDialog>\n\nexport const ScheduleTeamGrid = props => <DialogDatagrid dialog={EditTeamDialog} {...props} />\n","import { withStyles } from '@material-ui/core';\nimport { SimpleFormIterator } from 'react-admin';\n\nconst styles = {\n index: {\n display: 'none',\n },\n line: {\n alignItems: 'center',\n minHeight: 40,\n }\n}\n\nexport const TransitionProps = {\n in: true,\n appear: true,\n enter: false,\n exit: false,\n}\n\nexport default withStyles(styles)(SimpleFormIterator);\n","import React, { Fragment, useState } from 'react';\nimport { ArrayInput, SimpleForm, useDataProvider, useRefresh, useNotify, useTranslate, RecordContextProvider, BooleanInput } from 'react-admin';\nimport { useForm, useFormState } from 'react-final-form';\nimport { Dialog, DialogTitle, DialogContent, Button, makeStyles, Typography } from '@material-ui/core';\nimport { Add } from '@material-ui/icons';\n\n\nimport { DialogFormToolbar } from '../../common/dialogs/DialogForm';\nimport SimpleFormIterator, { TransitionProps } from '../../common/ra/SimpleFormIterator';\nimport { useSeason } from '../../common/inputs/SeasonSelector';\n\nimport { TeamInput } from '../teams/TeamInput'\nimport { ScheduleGroupInput } from '../groups/GroupInput';\nimport { CategoryInput } from '../categories/CategoryInput';\nimport { PoolInput } from '../pools/PoolInput';\n\nconst inputProps = {\n variant: 'outlined',\n margin: 'normal',\n fullWidth: true,\n}\n\nconst useStyles = makeStyles(theme => ({\n inputChip: {\n marginBlock: theme.spacing(1),\n }\n}))\n\nconst CategoryInputWithSwitch = () => {\n const { change } = useForm();\n const { values: { scheduleCategoryId } } = useFormState();\n const [disabled, setDisabled] = useState(!!scheduleCategoryId);\n\n const handleChange = (event) => {\n setDisabled(!disabled);\n\n if (!event) {\n change('categoryId');\n return;\n }\n\n change('categoryId', scheduleCategoryId);\n }\n\n return <>\n <CategoryInput source=\"categoryId\" disabled={disabled} {...inputProps} />\n <BooleanInput source=\"enableScheduleCategoryId\" label=\"resources.categories.actions.scheduleCategory\" onChange={handleChange} defaultValue={scheduleCategoryId} />\n </>\n}\n\nconst FormBody = () => {\n const classes = useStyles();\n const translate = useTranslate();\n const seasonId = useSeason();\n const { values: { categoryId } } = useFormState();\n\n return <>\n <ScheduleGroupInput className={classes.inputChip} source=\"groupId\" showNone={translate('ra.message.no_group')} label=\"resources.schedules.labels.add_to_group\" {...inputProps} />\n <PoolInput className={classes.inputChip} source=\"poolId\" label=\"resources.schedules.labels.add_to_pool\" {...inputProps} />\n <br />\n <Typography variant=\"body2\" color=\"textSecondary\">{translate('ra.message.filter_by_category')}</Typography>\n <CategoryInputWithSwitch />\n <ArrayInput source=\"teamIds\" label=\"resources.scheduleteams.fields.teamIds\" {...inputProps}>\n <SimpleFormIterator disableReordering TransitionProps={TransitionProps}>\n <TeamInput source=\"id\" filter={{ seasonId, _scope: 'Tenant', categoryId }} ignoreSchedule options={{ label: null }} {...inputProps} />\n </SimpleFormIterator>\n </ArrayInput>\n </>\n}\n\nconst AddTeamsForm = (props) => {\n return <RecordContextProvider>\n <SimpleForm {...props} {...inputProps}>\n <FormBody />\n </SimpleForm>\n </RecordContextProvider>\n}\n\nexport const AddTeamsButton = ({ initialValues, size, variant }) => {\n const [ isOpen, setOpen ] = useState(false);\n const dataProvider = useDataProvider();\n const refresh = useRefresh();\n const notify = useNotify();\n const translate = useTranslate();\n\n const onSubmit = ({ scheduleId, groupId, poolId, teamIds }) => {\n if (!teamIds || !teamIds.length) {\n setOpen(false);\n return;\n }\n\n const teams = teamIds\n .map(team => team && team.id)\n .filter(Boolean)\n .map(teamId => ({ scheduleId, groupId, teamId, poolId }))\n\n return Promise.all(teams.map(\n data => dataProvider.create(\"scheduleteams\", { data })\n )).then(() => {\n setOpen(false)\n refresh()\n }).catch(error => {\n notify(error.message, 'error');\n })\n }\n\n return <>\n <Button color=\"primary\" size={size} variant={variant} startIcon={<Add />} onClick={() => setOpen(true)}>\n {translate('resources.scheduleteams.actions.add')}\n </Button>\n <Dialog open={isOpen} fullWidth maxWidth=\"sm\" onClose={() => setOpen(false)}>\n <DialogTitle>{translate('resources.scheduleteams.actions.add')}</DialogTitle>\n <DialogContent>\n <AddTeamsForm initialValues={initialValues} save={onSubmit} component={Fragment} toolbar={\n <DialogFormToolbar submitLabel=\"ra.action.save\" cancelLabel=\"ra.action.cancel\" onCancel={() => setOpen(false)} />\n } />\n </DialogContent>\n </Dialog>\n </>\n}\n","import React, { useState } from 'react';\nimport { useDataProvider, useRefresh, useNotify, useTranslate, useRecordContext } from 'react-admin';\nimport { Button } from '@material-ui/core';\nimport { PlaylistAdd } from '@material-ui/icons';\n\nimport { TeamImportDialog } from '../schedules/dialogs/TeamImportDialog';\n\nconst getMaxOrder = teams => teams.length ? Math.max(...teams.map(team => team.order)) : 0;\n\nexport const TeamImportButton = ({ initialValues, size, variant }) => {\n const [ isOpen, setOpen ] = useState(false);\n const dataProvider = useDataProvider();\n const refresh = useRefresh();\n const notify = useNotify();\n const translate = useTranslate();\n const schedule = useRecordContext();\n\n const onSubmit = async ({ teamIds, groupId, poolId }) => {\n if (!teamIds || !teamIds.length) {\n setOpen(false);\n return;\n }\n\n const scheduleTeams = await dataProvider.getList(\"scheduleteams\", { filter: { scheduleId: schedule.id, groupId } })\n let maxOrder = getMaxOrder(scheduleTeams.data)\n const teams = teamIds.map(teamId => {\n if (!scheduleTeams.data.some(team => team.teamId == teamId)) maxOrder++;\n const team = ({ scheduleId: schedule.id, groupId, teamId, order: maxOrder, poolId })\n return team\n })\n\n return Promise.all(teams.map(\n data => dataProvider.create(\"scheduleteams\", { data })\n )).then(() => {\n setOpen(false)\n refresh()\n }).catch(error => {\n notify(error.message, 'error');\n })\n }\n\n return <>\n <Button color=\"primary\" size={size} variant={variant} startIcon={<PlaylistAdd fontSize=\"small\" />} onClick={() => setOpen(true)}>\n {translate('resources.scheduleteams.labels.import_teams')}\n </Button>\n <TeamImportDialog\n title={translate('resources.scheduleteams.labels.import_teams')}\n isOpen={isOpen}\n onSubmit={onSubmit}\n onClose={() => setOpen(false)}\n initialValues={initialValues}\n scheduleIdForGroupInput={schedule.id}\n />\n </>\n}\n","import React, { Fragment, useEffect, useState } from 'react';\nimport { ArrayInput, SimpleForm, useRefresh, useNotify, useTranslate, RecordContextProvider, useDataProvider, useListContext, NumberInput } from 'react-admin';\nimport { Dialog, DialogTitle, DialogContent, Button, makeStyles, DialogContentText } from '@material-ui/core';\nimport { Add } from '@material-ui/icons';\nimport { useFormState } from 'react-final-form';\n\nimport { DialogFormToolbar } from '../../common/dialogs/DialogForm';\nimport HorizontalFormIterator, { TransitionProps } from '../../common/ra/HorizontalFormIterator';\n\nimport { ScheduleGroupInput } from '../groups/GroupInput';\nimport { TeamInput } from '../teams/TeamInput';\n\nconst inputProps = {\n variant: 'outlined',\n margin: 'normal',\n fullWidth: true,\n}\n\nconst useStyles = makeStyles(theme => ({\n form: {\n gridTemplateColumns: `auto ${theme.spacing(12)}px`,\n columnGap: theme.spacing(2)\n }\n}))\n\nconst hasDuplicateOrder = (order, teamOrders) => {\n const filteredOrders = teamOrders.filter(teamOrder => teamOrder && teamOrder === order);\n return filteredOrders.length > 1;\n}\n\nconst validate = ({ scheduleTeams = [] }) => {\n const errors = {}\n\n const orders = scheduleTeams.map(team => team.order);\n\n errors.scheduleTeams = scheduleTeams.map(team => {\n const teamErrors = {};\n\n if (!team.order) teamErrors.order = 'ra.validation.required';\n if (!Number.isInteger(team.order) || team.order <= 0) teamErrors.order = 'ra.validation.invalid';\n if (hasDuplicateOrder(team.order, orders)) teamErrors.order = 'ra.validation.duplicate';\n\n return teamErrors;\n })\n\n return errors;\n}\n\nconst EditOrderForm = ({ setGroupId }) => {\n const translate = useTranslate();\n const classes = useStyles();\n const { values: { groupId } } = useFormState();\n\n useEffect(() => {\n setGroupId(groupId)\n }, [setGroupId, groupId])\n\n return <>\n <ScheduleGroupInput source=\"groupId\" showNone={translate('ra.message.no_group')} {...inputProps} />\n <ArrayInput source=\"scheduleTeams\" label=\"\" {...inputProps}>\n <HorizontalFormIterator disableReordering disableRemove disableAdd TransitionProps={TransitionProps} classes={classes}>\n <TeamInput source=\"teamId\" disabled includePool options={{ label: null }} {...inputProps} />\n <NumberInput source=\"order\" label=\"resources.scheduleteams.fields.order\" min={1} {...inputProps} />\n </HorizontalFormIterator>\n </ArrayInput>\n </>\n}\n\nexport const EditOrderButton = ({ initialValues, size, variant }) => {\n const [ isOpen, setOpen ] = useState(false);\n const dataProvider = useDataProvider();\n const refresh = useRefresh();\n const notify = useNotify();\n const translate = useTranslate();\n const { filterValues } = useListContext();\n const [ scheduleTeams, setScheduleTeams ] = useState([]);\n const [ groupId, setGroupId ] = useState(null)\n\n const { scheduleId } = initialValues;\n\n useEffect(() => {\n dataProvider.getList('scheduleteams', {\n pagination: { page: 1, perPage: 999 },\n filter: { scheduleId },\n sort: { field: ['pool.name', 'order'], order: ['ASC', 'ASC'] } })\n .then(res => res.data)\n .then(teams => setScheduleTeams(teams))\n }, [ dataProvider, scheduleId ])\n\n const onSubmit = async ({ scheduleTeams: updatedTeams }) => {\n if (!updatedTeams || !updatedTeams.length) {\n setOpen(false);\n return;\n }\n\n const teams = updatedTeams.filter(({ teamId, groupId, order }) => {\n return scheduleTeams.find(team => team.teamId === teamId && team?.groupId === groupId && team.order !== order)\n });\n\n return await Promise.all(teams.map(\n data => dataProvider.update(\"scheduleteams\", { id: data.id, data })\n )).then(() => {\n setOpen(false)\n refresh()\n }).catch(error => {\n notify(error.message, 'error');\n })\n }\n\n if (!scheduleTeams.length) return null;\n const teams = scheduleTeams.filter(team => team.groupId == groupId)\n\n return <>\n <Button color=\"primary\" size={size} variant={variant} startIcon={<Add />} onClick={() => setOpen(true)}>\n {translate('resources.scheduleteams.actions.edit')}\n </Button>\n <Dialog open={isOpen} fullWidth maxWidth=\"sm\" onClose={() => setOpen(false)}>\n <DialogTitle>{translate('resources.scheduleteams.actions.edit')}</DialogTitle>\n <DialogContent>\n <DialogContentText>\n {translate('resources.scheduleteams.messages.team_order')}\n </DialogContentText>\n <RecordContextProvider value={{ scheduleTeams: teams }}>\n <SimpleForm initialValues={{ ...initialValues, groupId: filterValues?.groupId || null }} validate={validate} save={onSubmit} component={Fragment} toolbar={\n <DialogFormToolbar submitLabel=\"ra.action.save\" cancelLabel=\"ra.action.cancel\" onCancel={() => setOpen(false)} /> }\n {...inputProps}\n >\n <EditOrderForm setGroupId={setGroupId} />\n </SimpleForm>\n </RecordContextProvider>\n </DialogContent>\n </Dialog>\n </>\n}\n","import React, { useEffect, useState } from 'react';\nimport { NumberField, useListContext, useRecordContext, useTranslate } from 'react-admin'\n\nimport { FF_SCHEDULE_TEAMS_ORDER, FF_SCHEDULE_TEAMS_DISABLE_ADD_SYNCED } from \"@hisports/common/featureFlags\";\n\nimport { SyncAlertCustomMessage, SyncedIndicator, useRecordSynced } from '../../../common/SyncAlert';\nimport ListCard from '../../../common/cards/ListCard';\nimport { useFlag, useScopes } from '../../../http';\nimport { isAuthorized } from '../../../common/Authorize';\n\nimport { TeamField } from '../../teams/TeamField';\nimport { GroupField } from '../../groups/GroupField';\nimport { GroupInput } from '../../groups/GroupInput';\nimport { PoolField } from '../../pools/PoolField';\nimport { PoolInput } from '../../pools/PoolInput';\n\nimport { ScheduleTeamGrid as ScheduleTeamDatagrid } from '../../scheduleteams/ScheduleTeamModal';\nimport { AddTeamsButton } from '../../scheduleteams/AddTeamsModal';\nimport { TeamImportButton } from '../../scheduleteams/TeamImportModal';\nimport { EditOrderButton } from '../../scheduleteams/EditOrderModal';\nimport { useScheduleGroupingType } from '../../scheduleSettings';\nimport { TeamIcon } from '../../icons';\n\nconst ScheduleTeamField = ({ ...props }) => {\n const scheduleTeam = useRecordContext();\n return <>\n <TeamField {...props} />\n <SyncedIndicator record={scheduleTeam} />\n </>\n}\n\nconst ScheduleTeamGrid = ({ scheduleId, setTotalTeams }) => {\n const { total } = useListContext()\n const isEnabled = useFlag();\n const { isPools: showPools, isGroups: showGroups } = useScheduleGroupingType(scheduleId);\n\n useEffect(() => {\n setTotalTeams(total)\n }, [total, setTotalTeams])\n\n return <ScheduleTeamDatagrid size=\"medium\">\n {isEnabled(FF_SCHEDULE_TEAMS_ORDER) && <NumberField sortable={false} source=\"order\" />}\n <ScheduleTeamField source=\"teamId\" sortable={false} includeId=\"inline\" includeCategory=\"inline\" />\n {showGroups && <GroupField source=\"groupId\" sortable={false} />}\n {showPools && <PoolField source=\"poolId\" sortable={false} />}\n </ScheduleTeamDatagrid>\n}\n\nconst getFilters = (schedule) => {\n const scheduleId = schedule?.id;\n const scheduleType = schedule?.type;\n const officeId = schedule?.officeId;\n const categoryIds = schedule && [schedule.categoryId]\n\n return [\n <GroupInput\n key=\"groupId\"\n source=\"groupId\"\n variant=\"outlined\"\n scheduleId={scheduleId}\n scheduleType={scheduleType}\n officeId={officeId}\n categoryIds={categoryIds}\n allowEmpty\n alwaysOn\n />,\n <PoolInput\n key=\"poolId\"\n source=\"poolId\"\n variant=\"outlined\"\n scheduleId={scheduleId}\n allowEmpty\n alwaysOn\n />\n ].filter(Boolean)\n}\n\nconst TeamsActions = props => {\n const schedule = useRecordContext(props);\n const { data } = useListContext();\n const isEnabled = useFlag();\n const scopes = useScopes();\n\n const { id: scheduleId, categoryId, officeId } = schedule;\n\n const hasScheduleTeams = !!Object.keys(data).length;\n const isSynced = schedule.externalId && isEnabled(FF_SCHEDULE_TEAMS_DISABLE_ADD_SYNCED) && !scopes.includes('internal');\n\n const canAddTeams = isAuthorized(schedule, 'scheduleteams', 'create');\n const canOrderTeams = isEnabled(FF_SCHEDULE_TEAMS_ORDER) && hasScheduleTeams;\n\n if (!canAddTeams) return null;\n\n return <>\n {!isSynced && <AddTeamsButton size=\"small\" initialValues={{ scheduleId, categoryId, scheduleCategoryId: categoryId }} />}\n {!isSynced && <TeamImportButton initialValues={{ officeId, categoryId }} size=\"small\" />}\n {canOrderTeams && <EditOrderButton size=\"small\" initialValues={{ scheduleId }} />}\n </>\n}\n\nexport default props => {\n const schedule = useRecordContext(props);\n const translate = useTranslate();\n const isEnabled = useFlag();\n const [ totalTeams, setTotalTeams ] = useState(null);\n const [ isSynced, toggle ] = useRecordSynced(props);\n\n const isOrdered = isEnabled(FF_SCHEDULE_TEAMS_ORDER);\n\n return <>\n <SyncAlertCustomMessage isSynced={isSynced} toggle={toggle} message=\"resources.scheduleteams.messages.synced_by_id\" />\n <ListCard\n title={`${translate(\"resources.teams.labels.card.title\")}${totalTeams ? ` (${totalTeams})` : ''}`}\n icon={<TeamIcon />}\n reference=\"scheduleteams\"\n target=\"scheduleId\"\n sort={{\n field: ['pool.name', 'group.name', isOrdered ? 'order' : 'team.name'],\n order: ['ASC', 'ASC', 'ASC'],\n }}\n filters={getFilters(schedule)}\n actions={<TeamsActions />}\n >\n <ScheduleTeamGrid scheduleId={schedule?.id} setTotalTeams={setTotalTeams} />\n </ListCard>\n </>\n}\n","import React from 'react';\nimport { Datagrid, useListContext } from 'react-admin';\nimport moment from 'moment-timezone';\n\nimport FunctionField from '../../common/fields/FunctionField';\n\nimport { GroupField } from '../groups/GroupField';\n\nconst metaRender = ({ type, draft, isShared }, source, resource, translate) => {\n if (!draft) return type;\n const meta = [\n `${draft.games.length} ${translate('resources.games.name', draft.games.length)}`,\n `${draft.teams.length} ${translate('resources.teams.name', draft.teams.length)}`,\n isShared && translate('resources.drafts.labels.shared'),\n ].filter(Boolean).join(', ')\n return `${translate(`resources.drafts.values.type.${type}`, { _: type })} (${meta})`\n}\n\nconst updatedAtRender = ({ updatedAt }, source, resource, translate) => {\n if (!updatedAt) return;\n return moment.tz(updatedAt, moment.tz.guess()).calendar();\n}\n\nconst publishedAtRender = ({ publishedAt, publishedBy }, source, resource, translate) => {\n if (!publishedAt) return;\n\n const date = moment(publishedAt);\n return `${date.calendar()}${publishedBy ? ` ${translate('ra.function.by')} ${publishedBy}` : ''}`;\n}\n\nexport default props => {\n const { ids = [], data } = useListContext(props);\n\n const showGroup = ids?.some(id => data?.[id]?.groupId != null)\n const showPublished = ids?.some(id => data?.[id]?.isPublished)\n\n return <Datagrid size=\"medium\" {...props}>\n <FunctionField render={metaRender} />\n {showGroup && <GroupField source=\"groupId\" />}\n <FunctionField source=\"updatedAt\" render={updatedAtRender} />\n {showPublished && <FunctionField label=\"resources.drafts.fields.publishedAt\" render={publishedAtRender} />}\n </Datagrid>\n}\n","import React, { useState } from 'react';\nimport { useRecordContext, useTranslate } from 'react-admin';\nimport { Button, Dialog, List, ListItem, ListItemText, ListItemIcon, DialogActions } from '@material-ui/core';\nimport { Add, StarBorder, UnarchiveOutlined, PlaylistAdd } from '@material-ui/icons';\nimport { Link, useHistory } from 'react-router-dom';\n\nimport { FF_BRACKETS } from '@hisports/common/featureFlags';\n\nimport { useFlag } from '../../../http';\nimport { BracketDialog, BracketIcon } from '../../schedules/dialogs/BracketDialog';\n\nexport const AddDraftDialog = ({ schedule, isOpen, handleClose, showSchedule, showBrackets, showDraftGamesGenerator }) => {\n const isEnabled = useFlag()\n const translate = useTranslate();\n const history = useHistory()\n const [ bracketsOpen, setBracketsOpen ] = useState(false);\n const scheduleId = schedule?.id\n\n const onBracketsClose = (cancelled = false) => {\n setBracketsOpen(false)\n if (!cancelled) history.push(`/schedules/${scheduleId}/show/games`)\n }\n\n return <Dialog open={isOpen} onClose={handleClose}>\n <div>\n <List>\n <ListItem button component={Link} to={{ pathname: '/drafts/create', search: '?type=Generated', state: { scheduleId, type: 'Generated' } }}>\n <ListItemIcon><StarBorder /></ListItemIcon>\n <ListItemText\n primary={translate(`resources.drafts.labels.generate_automatically`)}\n secondary={translate('resources.drafts.messages.generate_single_double')} />\n </ListItem>\n <ListItem button component={Link} to={{ pathname: '/drafts/create', search: '?type=Upload', state: { scheduleId, type: 'Upload' } }}>\n <ListItemIcon><UnarchiveOutlined /></ListItemIcon>\n <ListItemText\n primary={translate('ra.input.file.upload')}\n secondary={translate('ra.input.file.upload_csv')} />\n </ListItem>\n {showBrackets && isEnabled(FF_BRACKETS) && <ListItem button onClick={() => setBracketsOpen(true)}>\n <ListItemIcon><BracketIcon /></ListItemIcon>\n <ListItemText\n primary={translate('resources.schedules.labels.bracket_schedule')}\n secondary={translate('resources.schedules.labels.bracket_info')}\n />\n </ListItem>}\n <ListItem button component={Link} to={{ pathname: '/drafts/create', search: '?type=Manual', state: { scheduleId, type: 'Manual' } }}>\n <ListItemIcon><PlaylistAdd /></ListItemIcon>\n <ListItemText\n primary={translate('resources.drafts.labels.manual_entry')}\n secondary={translate('resources.drafts.messages.draft_multiple_games')} />\n </ListItem>\n </List>\n </div>\n {showBrackets && isEnabled(FF_BRACKETS) && <BracketDialog scheduleId={scheduleId} isOpen={bracketsOpen} onClose={onBracketsClose} />}\n {showSchedule && <DialogActions>\n <Button component={Link} color=\"primary\" to={`/schedules/${scheduleId}/show`}>{translate('ra.action.skip')}</Button>\n </DialogActions>}\n\n </Dialog>\n}\n\nexport const AddDraftButton = ({ size, variant }) => {\n const schedule = useRecordContext();\n const [ isOpen, setOpen ] = useState(false);\n const translate = useTranslate();\n\n return <>\n <Button color=\"primary\" size={size} variant={variant} startIcon={<Add />} onClick={() => setOpen(true)}>{translate('resources.drafts.actions.add')}</Button>\n <AddDraftDialog schedule={schedule} isOpen={isOpen} handleClose={() => setOpen(false)} />\n </>\n}\n","import React from 'react';\nimport { useRecordContext } from 'react-admin'\n\nimport { FF_DRAFT_GAMES } from '@hisports/common/featureFlags';\n\nimport ListCard from '../../../common/cards/ListCard';\nimport { isAuthorized } from '../../../common/Authorize';\nimport { useFlag } from '../../../http';\n\nimport DraftGrid from '../../drafts/DraftGrid';\nimport { AddDraftButton } from '../../drafts/dialogs/DraftDialog';\n\nexport default props => {\n const schedule = useRecordContext(props);\n const isEnabled = useFlag()\n\n const canCreateDrafts = isAuthorized(schedule, 'drafts', 'create');\n const canManageDrafts = isAuthorized(schedule, 'drafts', 'edit');\n if (!canManageDrafts) return null;\n\n const isSharedDrafts = isAuthorized(schedule, 'drafts', 'shared')\n return <ListCard\n title={`resources.drafts.labels.card.title${isEnabled(FF_DRAFT_GAMES) ? '_legacy' : ''}`}\n collapsable={!isSharedDrafts}\n target=\"schedules\"\n reference=\"drafts\"\n filter={{ isPublished: false }}\n sort={{ field: 'updatedAt', order: 'DESC' }}\n rowsPerPageOptions={[]}\n addButton={canCreateDrafts && <AddDraftButton /> }\n {...props}\n >\n <DraftGrid rowClick={draftId => `/drafts/${draftId}/review`} />\n </ListCard>\n}\n","import React, { Fragment, useState } from 'react';\nimport { Dialog, DialogContent, DialogContentText, DialogTitle, styled } from '@material-ui/core';\nimport { Button, RecordContextProvider, SimpleForm, useListContext, useNotify, useRecordContext, useRefresh, useTranslate } from 'react-admin';\nimport moment from 'moment-timezone';\n\nimport { isAuthorized } from '../../common/Authorize';\nimport { apiClient, useScopes } from '../../http';\nimport { DialogFormToolbar } from '../../common/dialogs/DialogForm';\nimport { InlineDateInput } from '../../common/inputs/DateInput';\nimport Toolbar from '../../common/ra/Toolbar';\nimport { GameStatusEnumInput } from '../../common/inputs/EnumInputs';\n\nconst inputProps = {\n variant: 'outlined',\n margin: 'normal',\n fullWidth: true,\n}\n\nconst FormDialogContent = styled(DialogContent)({\n '&:first-child': { // overrides default style\n paddingTop: 0,\n }\n})\n\nconst validateStatus = (values) => {\n const errors = {}\n const { status } = values || {};\n if (!status) errors.status = 'ra.validation.required'\n return errors\n}\n\nconst validateDates = (values, schedule = {}, translate) => {\n const errors = {}\n const { startDate, endDate } = schedule;\n\n if (values.date == null) {\n errors.date = 'ra.validation.required'\n } else if (startDate && moment.utc(startDate, 'YYYY-MM-DD').isAfter(values.date)) {\n errors.date = translate('resources.draftGames.validations.must_be_after', { date: moment(startDate).format('LL') })\n } else if (endDate && moment.utc(endDate, 'YYYY-MM-DD').add(1, 'day').isBefore(values.date)) {\n errors.date = translate('resources.draftGames.validations.must_be_before_schedule_end_date', { date: moment(endDate).format('LL') })\n }\n\n return errors\n}\n\nconst ChangeDateDialog = ({ open, onSave, onClose }) => {\n const translate = useTranslate();\n const schedule = useRecordContext();\n\n return <Dialog open={open} fullWidth maxWidth=\"sm\" onClose={onClose}>\n <DialogTitle>{translate('resources.draftGames.actions.set_date')}</DialogTitle>\n <RecordContextProvider value={null}>\n <SimpleForm {...inputProps} save={onSave} component={Fragment} margin=\"none\" toolbar={<Toolbar hideDelete />} validate={(values) => validateDates(values, schedule, translate)} {...inputProps} >\n <FormDialogContent {...inputProps}>\n <DialogContentText>\n {translate('resources.draftGames.messages.change_dates_dialog')}\n </DialogContentText>\n <InlineDateInput\n source=\"date\"\n helperText={translate('resources.draftGames.messages.schedule_dates', { startDate: moment(schedule.startDate).format('LL'), endDate: moment(schedule.endDate).format('LL') })}\n {...inputProps}\n margin=\"none\"\n />\n </FormDialogContent>\n </SimpleForm>\n </RecordContextProvider>\n </Dialog>\n}\n\nconst ChangeDate = ({ selectedIds, date }) => {\n const [ open, setOpen ] = useState(false);\n const { onUnselectItems } = useListContext();\n const refresh = useRefresh();\n const notify = useNotify();\n const translate = useTranslate();\n\n const onSubmit = async (values) => {\n apiClient(`/draftgames/bulkChangeDate`, {\n method: 'POST',\n data: {\n draftGamesIds: selectedIds,\n date: values.date,\n },\n })\n .then(({ data }) => {\n const count = data?.count || 0;\n refresh();\n onUnselectItems();\n notify(translate('resources.draftGames.notifications.set_date', { smart_count: count }), 'success')\n })\n .catch(err => {\n console.log(err) // eslint-disable-line no-console\n notify(translate('resources.draftGames.notifications.set_date_error', { smart_count: selectedIds.length }), 'error')\n })\n\n setOpen(false);\n }\n\n return <>\n <Button label={translate('resources.draftGames.actions.set_date')} onClick={() => setOpen(true)} disabled={!selectedIds.length} />\n <ChangeDateDialog open={open} onSave={onSubmit} onClose={() => setOpen(false)} />\n </>\n}\n\nconst ClearDateDialog = ({ open, onSubmit, onClose, draftGamesIds = [] }) => {\n const translate = useTranslate();\n\n return <Dialog open={open} fullWidth maxWidth=\"sm\" onClose={onClose}>\n <DialogTitle>{translate('resources.draftGames.actions.clear_date', { smart_count: draftGamesIds.length })}</DialogTitle>\n <DialogContent>\n <DialogContentText>\n {translate('resources.draftGames.messages.confirm_clear_date', { smart_count: draftGamesIds.length })}\n </DialogContentText>\n <RecordContextProvider value={null}>\n <SimpleForm\n save={onSubmit}\n component={Fragment}\n toolbar={<DialogFormToolbar submitLabel=\"ra.action.clear\" cancelLabel=\"ra.action.cancel\" onCancel={onClose} hideSubmit={!draftGamesIds?.length} />}\n />\n </RecordContextProvider>\n </DialogContent>\n </Dialog>\n}\n\nconst ClearDate = ({ selectedIds }) => {\n const [ open, setOpen ] = useState(false);\n const { onUnselectItems } = useListContext();\n const refresh = useRefresh();\n const notify = useNotify();\n const translate = useTranslate();\n\n const onSubmit = async () => {\n apiClient(`/draftgames/bulkChangeDate`, {\n method: 'POST',\n data: {\n draftGamesIds: selectedIds,\n },\n })\n .then(({ data }) => {\n const count = data?.count || 0;\n refresh();\n onUnselectItems();\n notify(translate('resources.draftGames.notifications.clear_date', { smart_count: count }), 'success')\n })\n .catch(err => {\n console.log(err) // eslint-disable-line no-console\n notify(translate('resources.draftGames.notifications.clear_date_error', { smart_count: selectedIds.length }), 'error')\n })\n\n setOpen(false);\n }\n\n return <>\n <Button label={translate('resources.draftGames.actions.clear_date')} onClick={() => setOpen(true)} disabled={!selectedIds.length} />\n <ClearDateDialog open={open} onSubmit={onSubmit} onClose={() => setOpen(false)} draftGamesIds={selectedIds} />\n </>\n}\n\nconst ChangeStatusDialog = ({ open, onSave, onClose, status }) => {\n const translate = useTranslate();\n\n return <Dialog open={open} fullWidth maxWidth=\"sm\" onClose={onClose}>\n <DialogTitle>{translate('resources.draftGames.actions.change_status')}</DialogTitle>\n <RecordContextProvider value={null}>\n <SimpleForm {...inputProps} save={onSave} component={Fragment} toolbar={<Toolbar hideDelete />} validate={(values) => validateStatus(values)} {...inputProps} >\n <FormDialogContent {...inputProps}>\n <GameStatusEnumInput source=\"status\" {...inputProps} margin=\"none\" />\n </FormDialogContent>\n </SimpleForm>\n </RecordContextProvider>\n </Dialog>\n}\n\nconst ChangeStatus = ({ selectedIds, status }) => {\n const [ open, setOpen ] = useState(false);\n const { onUnselectItems } = useListContext();\n const refresh = useRefresh();\n const notify = useNotify();\n const translate = useTranslate();\n\n const onSubmit = async (values) => {\n apiClient(`/draftgames/bulkChangeStatus`, {\n method: 'POST',\n data: {\n draftGamesIds: selectedIds,\n status: values.status,\n },\n })\n .then(({ data }) => {\n const count = data?.count || 0;\n refresh();\n onUnselectItems();\n notify(translate('resources.draftGames.notifications.change_status', { smart_count: count }), 'success')\n })\n .catch(err => {\n console.log(err) // eslint-disable-line no-console\n notify(translate('resources.draftGames.notifications.change_status_error', 'error'))\n })\n\n setOpen(false);\n }\n\n return <>\n <Button label={translate('resources.draftGames.actions.change_status')} onClick={() => setOpen(true)} disabled={!selectedIds.length} />\n <ChangeStatusDialog open={open} onSave={onSubmit} onClose={() => setOpen(false)} draftGamesIds={selectedIds} />\n </>\n}\n\n\nconst DeleteDialog = ({ open, onSubmit, onClose, draftGamesIds = [] }) => {\n const translate = useTranslate();\n\n return <Dialog open={open} fullWidth maxWidth=\"sm\" onClose={onClose}>\n <DialogTitle>{translate('resources.draftGames.actions.delete_draft_game', { smart_count: draftGamesIds.length })}</DialogTitle>\n <DialogContent>\n <DialogContentText>\n {translate('resources.draftGames.messages.confirm_delete', { smart_count: draftGamesIds.length })}\n </DialogContentText>\n <RecordContextProvider value={null}>\n <SimpleForm\n save={onSubmit}\n component={Fragment}\n toolbar={<DialogFormToolbar submitLabel=\"ra.action.delete\" cancelLabel=\"ra.action.cancel\" onCancel={onClose} hideSubmit={!draftGamesIds?.length} />}\n />\n </RecordContextProvider>\n </DialogContent>\n </Dialog>\n}\n\nconst Delete = ({ selectedIds }) => {\n const [ open, setOpen ] = useState(false);\n const { onUnselectItems } = useListContext();\n const refresh = useRefresh();\n const notify = useNotify();\n const translate = useTranslate();\n\n const onSubmit = async () => {\n apiClient(`/draftgames/bulkDelete`, {\n method: 'DELETE',\n data: {\n draftGamesIds: selectedIds,\n },\n })\n .then(({ data }) => {\n const count = data?.count || 0;\n if (count > 0) {\n refresh();\n }\n onUnselectItems();\n notify(translate('resources.draftGames.notifications.delete_draft', { smart_count: count }), 'success')\n })\n .catch(err => {\n console.log(err) // eslint-disable-line no-console\n notify(translate('resources.draftGames.notifications.delete_draft_error', { smart_count: selectedIds.length }), 'error')\n })\n\n setOpen(false);\n }\n\n return <>\n <Button label={translate('ra.action.delete')} onClick={() => setOpen(true)} disabled={!selectedIds.length} />\n <DeleteDialog open={open} onSubmit={onSubmit} onClose={() => setOpen(false)} draftGamesIds={selectedIds} />\n </>\n}\n\nexport const DraftGamesBulkActions = props => {\n const scopes = useScopes();\n const canEditDrafts = isAuthorized(scopes, 'draftGames', 'edit');\n const canDeleteDrafts = isAuthorized(scopes, 'draftGames', 'remove');\n\n return <>\n {canEditDrafts && <ChangeDate {...props} />}\n {canEditDrafts && <ClearDate {...props} />}\n {canEditDrafts && <ChangeStatus {...props} />}\n {canDeleteDrafts && <Delete {...props} />}\n </>\n}\n","import React, { Fragment, useMemo, useState } from 'react';\nimport { BooleanInput, useRecordContext } from 'react-admin'\n\nimport ListCard from '../../../common/cards/ListCard';\nimport { isAuthorized } from '../../../common/Authorize';\nimport { InlineDateInput } from '../../../common/inputs/DateInput';\nimport { AddMenu } from '../../../common/calendar/scheduler/AddMenu';\nimport { usePermissions, useScopes } from '../../../http';\nimport { DraftIcon } from '../../icons';\n\nimport { BaseEventView } from '../../events/EventView';\nimport { CALENDAR_VIEWS, EventViewSettingsContext, EventViewSettingsMenu, GAME_LIST_FILTERS, useEventSort, useReverseHomeAway, useShowCalendar } from '../../events/EventViewSettings';\nimport { SurfaceInput } from '../../surfaces/SurfaceInput';\nimport { TeamInput } from '../../teams/TeamInput';\nimport { GroupInput } from '../../groups/GroupInput';\nimport { EditDraftGameDialog } from '../../draftgames/DraftGameModal';\nimport { DraftGamesBulkActions } from '../../draftgames/DraftGameBulkActions';\n\nconst EventViewSettingsProvider = ({ ...props }) => {\n const groupDates = useState(true);\n const groupArenas = useState(false);\n const groupRounds = useState(false);\n const assignments = useState(false);\n const gameInfo = useState(false);\n const flags = useState(false);\n const reverseHomeAway = useReverseHomeAway()\n const calendar = useState(false);\n const calendarView = useState(CALENDAR_VIEWS.WEEK);\n const teamEvents = useState(false);\n const slots = useState(true);\n const teamNames = useState(false)\n const availabilities = useState(false);\n const surfaceSizes = useState([]);\n const gameListFilter = useState(GAME_LIST_FILTERS.ALL_GAMES);\n const value = useMemo(() => ({\n calendar,\n calendarView,\n teamEvents,\n slots,\n teamNames,\n availabilities,\n gameInfo,\n flags,\n reverseHomeAway,\n groupDates,\n groupArenas,\n groupRounds,\n assignments,\n surfaceSizes,\n gameListFilter\n }), [ calendar, calendarView, teamEvents, slots, availabilities, gameInfo, flags, reverseHomeAway, groupDates, groupArenas, groupRounds, assignments, surfaceSizes, gameListFilter, teamNames ])\n return <EventViewSettingsContext.Provider value={value} {...props} />\n}\n\nconst multipleProps = {\n multiple: true,\n allowEmpty: false,\n}\n\nconst getFilters = (schedule, scopes, showCalendar) => {\n const canListTeams = isAuthorized(scopes, 'teams', 'list');\n const canListSurfaces = isAuthorized(scopes, 'surfaces', 'list');\n\n const scheduleId = schedule?.id;\n const scheduleType = schedule?.type;\n const officeId = schedule?.officeId;\n\n const categoryIds = schedule && [schedule.categoryId];\n\n return [\n <InlineDateInput source=\"startTime\" label=\"resources.draftGames.filters.startTime\" variant=\"outlined\" alwaysOn />,\n <InlineDateInput source=\"endTime\" label=\"resources.draftGames.filters.endTime\" variant=\"outlined\" disabled={showCalendar} alwaysOn />,\n <BooleanInput source=\"conflictsOnly\" label=\"resources.games.filters.conflictsOnly\" variant=\"outlined\" alwaysOn />,\n canListTeams && <TeamInput source=\"teamId\" label=\"resources.teams.fields.teamId\" filter={{ scheduleId, seasonId: schedule?.seasonId }} variant=\"outlined\" alwaysOn {...multipleProps} />,\n canListSurfaces && <SurfaceInput source=\"arenaId\" variant=\"outlined\" {...multipleProps} />,\n <GroupInput\n source=\"groupId\"\n variant=\"outlined\"\n scheduleId={scheduleId}\n scheduleType={scheduleType}\n officeId={officeId}\n categoryIds={categoryIds}\n allowEmpty\n alwaysOn\n />,\n ].filter(Boolean)\n}\n\nconst DraftGamesListCard = ({ setDraftGameId, ...props }) => {\n const schedule = useRecordContext(props);\n const scopes = useScopes();\n const [ showCalendar ] = useShowCalendar();\n const sort = useEventSort();\n const permissions = usePermissions();\n\n const filters = getFilters(schedule, scopes, showCalendar);\n\n const actions = [\n <EventViewSettingsMenu\n disableCalendar\n disableAssignments\n disableGroupRounds={false}\n disableGroupArenas={false}\n alwaysOn\n showTeamEvents={false}\n showSlots={false}\n showTeamNames={false}\n showAvailabilties={false}\n showSurfaceSizes={false}\n showFlagsInput={false}\n showRenumber={false}\n showExporter\n showGameInfoInput={false}\n />,\n ]\n\n const handleRowSelect = (id, basePath, draftGame) => setDraftGameId(id);\n\n const showBulkActions = isAuthorized(schedule, 'draftGames', 'bulkActions');\n\n const hasDirectOrParentPermission = (permissions\n .filter(p => p.inherited === false || p.parentInherited === true)\n .some(p => {\n if (p.roleType === 'Office' && p.officeIds?.includes(schedule?.officeId)) return true;\n if (p.roleType === 'Schedule' && p.scheduleIds?.includes(schedule?.id)) return true;\n return false;\n }) || permissions.some(p => {\n if (p.roleType === 'System') return true;\n return false\n }));\n\n const filter = { scheduleId: schedule?.id, \"seasonId\": schedule?.seasonId, isPublished: false, updatedGameId: null, pastEvents: true };\n\n if (!hasDirectOrParentPermission) {\n filter.isShared = true;\n }\n\n return <ListCard\n title=\"resources.draftGames.labels.card.title\"\n icon={<DraftIcon />}\n reference=\"draftGames\"\n target=\"scheduleId\"\n addButton={<AddMenu hideAddGame buttonTitle=\"resources.draftGames.actions.add\" />}\n actions={actions}\n filters={filters}\n filter={filter}\n sort={sort}\n bulkActionButtons={showBulkActions && <DraftGamesBulkActions />}\n noResultsText={!showCalendar}\n {...props}\n >\n <BaseEventView\n rowClick={handleRowSelect}\n disableCalendar\n disableAssignments\n hideStatus\n showPools\n component={Fragment}\n />\n </ListCard>\n}\n\nexport default props => {\n const [ draftGameId, setDraftGameId ] = useState()\n\n return <EventViewSettingsProvider>\n <DraftGamesListCard setDraftGameId={setDraftGameId} {...props} />\n <EditDraftGameDialog isOpen={!!draftGameId} id={draftGameId} handleClose={() => setDraftGameId()} />\n </EventViewSettingsProvider>\n}\n","import React from 'react';\nimport { BooleanInput, NullableBooleanInput, TextInput, useRecordContext } from 'react-admin'\n\nimport ListCard from '../../../common/cards/ListCard';\nimport { isAuthorized } from '../../../common/Authorize';\nimport { useScopes } from '../../../http';\nimport { GameIcon } from '../../icons';\nimport { InlineDateInput } from '../../../common/inputs/DateInput';\n\nimport { EventView } from '../../events/EventView';\nimport { AddGameButton } from '../../games/GameModal';\nimport { GroupInput } from '../../groups/GroupInput';\nimport { TeamInput } from '../../teams/TeamInput';\nimport { SurfaceInput } from '../../surfaces/SurfaceInput';\nimport { CALENDAR_VIEWS, EventViewSettingsMenu, useEventSort, useShowCalendar } from '../../events/EventViewSettings';\n\nconst multipleProps = {\n multiple: true,\n allowEmpty: false,\n}\n\nconst getFilters = (schedule, scopes, showCalendar) => {\n const canListTeams = isAuthorized(scopes, 'teams', 'list');\n const canListSurfaces = isAuthorized(scopes, 'surfaces', 'list');\n\n const scheduleId = schedule?.id;\n const scheduleType = schedule?.type;\n const officeId = schedule?.officeId;\n\n const categoryIds = schedule && [schedule.categoryId];\n\n return [\n <TextInput source=\"number\" variant=\"outlined\" alwaysOn />,\n <InlineDateInput source=\"startTime\" label=\"resources.games.filters.startTime\" variant=\"outlined\" alwaysOn />,\n <InlineDateInput source=\"endTime\" label=\"resources.games.filters.endTime\" variant=\"outlined\" disabled={showCalendar} alwaysOn />,\n\n canListTeams && <TeamInput source=\"teamId\" label=\"resources.teams.fields.teamId\" filter={{ scheduleId, seasonId: schedule?.seasonId }} variant=\"outlined\" {...multipleProps} />,\n canListSurfaces && <SurfaceInput source=\"arenaId\" variant=\"outlined\" {...multipleProps} />,\n <NullableBooleanInput source=\"isApproved\" label=\"resources.games.filters.isApproved\" variant=\"outlined\" />,\n <BooleanInput source=\"conflictsOnly\" label=\"resources.games.filters.conflictsOnly\" variant=\"outlined\" />,\n <BooleanInput source=\"bracketGamesOnly\" label=\"resources.games.filters.bracketGamesOnly\" variant=\"outlined\" />,\n <GroupInput\n source=\"groupId\"\n variant=\"outlined\"\n scheduleId={scheduleId}\n scheduleType={scheduleType}\n officeId={officeId}\n categoryIds={categoryIds}\n allowEmpty\n alwaysOn\n />,\n ].filter(Boolean)\n}\n\nexport default props => {\n const schedule = useRecordContext(props);\n const scopes = useScopes();\n const canAddGames = isAuthorized(schedule, 'games', 'create')\n const [ showCalendar ] = useShowCalendar();\n const sort = useEventSort();\n\n const addButton = canAddGames && <AddGameButton size=\"small\" initialValues={{ scheduleId: schedule?.id }} />\n const actions = [\n <EventViewSettingsMenu alwaysOn />,\n ].filter(Boolean)\n const filters = getFilters(schedule, scopes, showCalendar);\n\n return <ListCard\n title=\"resources.games.labels.card.title\"\n icon={<GameIcon />}\n reference=\"games\"\n target=\"scheduleId\"\n addButton={addButton}\n actions={actions}\n filters={filters}\n filter={{ _include: [\"gameBracket\"] }}\n sort={sort}\n noResultsText={!showCalendar}\n >\n <EventView rowClick=\"show\" strictView={CALENDAR_VIEWS.WEEK} disableScheduling showPools />\n </ListCard>\n}\n","import React from 'react';\nimport { useListContext, useTranslate } from 'react-admin';\nimport { styled, Table, TableHead, TableRow, TableCell, TableBody, CardContent, Typography } from '@material-ui/core';\n\nconst GroupTableCell = styled(TableCell)({\n fontWeight: 'bold',\n})\n\nconst ContactTableCell = styled(TableCell)({\n whiteSpace: 'pre',\n verticalAlign: 'top',\n})\n\nconst ContactList = styled('ul')({\n margin: 0,\n marginTop: 4,\n paddingLeft: 24,\n})\n\nconst ContactListItem = styled('li')({\n maxWidth: 200,\n whiteSpace: 'normal',\n overflowWrap: 'anywhere',\n})\n\nconst Contact = ({ member }) => {\n if (!member) return <ContactTableCell>--</ContactTableCell>;\n\n const contacts = member.contacts.map(contact => {\n let value = contact.value;\n if (contact.type !== 'Email') {\n value = `${contact.value} (${contact.type})`\n } else if (contact.notes) {\n value = `${contact.value} (${contact.notes})`\n }\n return <ContactListItem key={contact.id} title={contact.notes}>{value}</ContactListItem>\n });\n\n return <ContactTableCell>\n {member.name}\n {contacts.length ? <ContactList>{contacts}</ContactList> : null}\n </ContactTableCell>\n}\n\nexport const ScheduleTeamContactGrid = ({ showGroup = false, ...props }) => {\n const translate = useTranslate();\n const { ids = [], data, loaded } = useListContext(props)\n\n if (!loaded) return <CardContent>{translate('ra.page.loading')}</CardContent>;\n if (!ids?.length) return null;\n\n const teams = ids.map(id => data?.[id]).filter(Boolean);\n\n const hasGroups = showGroup && teams.some(team => team.group);\n const hasPrimaryTeamArena = teams.some(team => team.primaryTeamArena);\n return <Table stickyHeader size=\"small\">\n <TableHead>\n <TableRow>\n <TableCell>{translate('resources.scheduleteams.fields.teamId')}</TableCell>\n <TableCell>{translate('resources.scheduleteams.labels.coach')}</TableCell>\n <TableCell>{translate('resources.scheduleteams.labels.manager')}</TableCell>\n </TableRow>\n </TableHead>\n <TableBody>\n {teams.map((team, index) => {\n const manager = team.members.find(member => member.positions.includes('Manager'))\n let coach = team.members.find(member => member.positions.includes('Head Coach'))\n coach = coach || team.members.find(member => member.positions.some(position => position.includes('Coach')))\n\n const prevTeam = index > 0 && teams[index - 1];\n const firstGroup = index === 0 || (prevTeam && prevTeam.group !== team.group);\n const group = hasGroups && firstGroup && team.group;\n return <>\n {group && <TableRow><GroupTableCell colSpan={3}>{group || 'No group'}</GroupTableCell></TableRow>}\n <TableRow key={team._id} hover>\n <ContactTableCell>\n {team.name}\n {hasPrimaryTeamArena && <Typography variant=\"inherit\" display=\"block\" color=\"textSecondary\">{team.primaryTeamArena || '--'}</Typography>}\n </ContactTableCell>\n <Contact member={coach} />\n <Contact member={manager} />\n </TableRow>\n </>\n })}\n </TableBody>\n </Table>\n}\n","import React from 'react';\n\nimport ListCard from '../../../common/cards/ListCard';\n\nimport { ScheduleTeamContactGrid } from '../../contacts/ScheduleTeamContactGrid';\n\nexport default () =>\n <ListCard\n title=\"resources.teams.labels.contacts\"\n reference=\"teamContacts\"\n target=\"schedules\"\n sort={{ field: 'id', order: 'ASC' }}\n perPage={999}\n pagination={null}\n >\n <ScheduleTeamContactGrid showGroup />\n </ListCard>\n","import React from 'react';\nimport { useListContext, useLocale, useTranslate } from 'react-admin';\nimport { styled, Table, TableHead, TableRow, TableCell, TableBody, CardContent, Typography } from '@material-ui/core';\n\nimport { translateApiProperty } from '@hisports/common';\n\nconst ContactTableCell = styled(TableCell)({\n whiteSpace: 'pre',\n})\n\nconst ContactList = styled('ul')({\n padding: 0,\n margin: 0,\n listStyleType: 'none',\n})\n\nconst Roles = ({ member }) => {\n const locale = useLocale()\n if (!member || !member.roles.length) return <Typography variant=\"inherit\" display=\"block\" color=\"textSecondary\">--</Typography>\n const roles = member.roles.reduce((roles, r) => {\n const role = translateApiProperty(r, 'role', locale)\n if (!r.groups || !r.groups.length) {\n roles.push(role);\n } else {\n roles.push(...r.groups.map(group => `${role} - ${group.name}`))\n }\n return roles;\n }, [])\n\n if (roles.length === 1) return <Typography variant=\"inherit\" display=\"block\" color=\"textSecondary\">{roles[0]}</Typography>\n return <Typography variant=\"inherit\" display=\"block\" color=\"textSecondary\">\n <ContactList>\n {roles.map((role, index) => <li>{role}</li>)}\n </ContactList>\n </Typography>\n}\n\nconst Contacts = ({ member }) => {\n if (!member) return <ContactTableCell>--</ContactTableCell>\n\n const contacts = member.contacts.map(contact => {\n let value = contact.value;\n if (contact.type !== 'Email') {\n value = `${contact.value} (${contact.type})`\n } else if (contact.notes) {\n value = `${contact.value} (${contact.notes})`\n }\n return <li key={contact.id} title={contact.notes}>{value}</li>\n });\n\n return <ContactTableCell>{!contacts.length ? '--' : <ContactList>{contacts}</ContactList>}</ContactTableCell>\n}\n\nexport const ScheduleManagerContactGrid = (props) => {\n const translate = useTranslate();\n const { ids = [], data, loaded } = useListContext(props)\n\n if (!loaded) return <CardContent>{translate('ra.page.loading')}</CardContent>;\n if (!ids?.length) return null;\n\n const members = ids.map(id => data?.[id]).filter(Boolean);\n\n return <Table>\n <TableHead>\n <TableRow>\n <TableCell>{translate('ra.input.field.name')}</TableCell>\n <TableCell>{translate('resources.contacts.name', 2)}</TableCell>\n </TableRow>\n </TableHead>\n <TableBody>\n {members.map(member => {\n return <TableRow key={member.id} hover>\n <ContactTableCell>\n {member.name}\n <Roles member={member} />\n </ContactTableCell>\n <Contacts member={member} />\n </TableRow>\n })}\n </TableBody>\n </Table>\n}\n","import React from 'react';\n\nimport ListCard from '../../../common/cards/ListCard';\n\nimport { ScheduleManagerContactGrid } from '../../contacts/ScheduleManagerContactGrid';\n\nexport default () =>\n <ListCard\n title=\"resources.schedules.labels.league_contacts\"\n reference=\"scheduleContacts\"\n target=\"schedules\"\n sort={{ field: 'id', order: 'ASC' }}\n perPage={999}\n pagination={null}\n >\n <ScheduleManagerContactGrid showGroup />\n </ListCard>\n","import React from 'react';\nimport { LinearProgress, RecordContextProvider, useTranslate } from 'react-admin';\nimport { Table, TableBody } from '@material-ui/core';\n\nimport Row from '../../common/cards/TableRow';\nimport FunctionField from '../../common/fields/FunctionField'\n\nimport { useScheduleSettings } from './index.js';\n\nconst renderGameLength = (record, source, resource, translate) => translate('ra.date.phrase.minute', record.gameLength);\n\nconst renderRegistrations = (settings, source, resource, translate) => {\n if (!settings?.includeRegistrations) return translate('resources.scheduleSettings.values.includeRegistrations');\n return translate('resources.scheduleSettings.messages.included')\n}\n\nconst renderExtras = (settings, source, resource, translate) => {\n if (!settings?.allowExtras) return translate('resources.scheduleSettings.values.allowExtras');\n return translate('resources.scheduleSettings.messages.allow_extras_default')\n}\n\nconst renderPoints = (settings, source, resource, translate) => {\n const { win, loss, tie } = settings.points.Team\n let result = translate('resources.scheduleSettings.fields.points.preview', { win, loss, tie })\n\n if (settings?.disableSportsmanshipCarry) {\n result += `. ${translate('resources.scheduleSettings.values.disableSportsmanshipCarry')}`\n }\n return result;\n}\n\nexport const ScheduleSettingsField = ({ scheduleId }) => {\n const translate = useTranslate();\n const { data: scheduleSettings, loading, error } = useScheduleSettings(scheduleId);\n\n if (loading) return <LinearProgress />\n if (error) return translate('resources.scheduleSettings.messages.load_error');\n\n return <RecordContextProvider value={scheduleSettings}>\n <Table>\n <TableBody>\n <Row label=\"resources.scheduleSettings.labels.game_length\" hidden={!Number.isInteger(scheduleSettings?.gameLength)}>\n <FunctionField source=\"gameLength\" render={renderGameLength} />\n </Row>\n <Row label=\"resources.scheduleSettings.labels.include_registrations\">\n <FunctionField source=\"includeRegistrations\" allowEmpty render={renderRegistrations} />\n </Row>\n <Row label=\"resources.scheduleSettings.labels.allow_extras\">\n <FunctionField source=\"allowExtras\" allowEmpty render={renderExtras} />\n </Row>\n <Row label=\"resources.scheduleSettings.labels.points_system\">\n <FunctionField source=\"points\" allowEmpty render={renderPoints} />\n </Row>\n </TableBody>\n </Table>\n </RecordContextProvider>\n}\n","import React from 'react';\nimport { ReferenceInput, ReferenceArrayInput } from 'react-admin';\n\nimport AutocompleteInput from '../../common/inputs/AutocompleteInput';\nimport AutocompleteSuggestion from '../../common/inputs/AutocompleteSuggestion'\nimport { SchemaIcon } from '../icons';\n\nconst filterSchemas = () => ({})\n\nconst getProperties = schema => {\n const properties = Object.keys(schema.schema.properties)\n .map(id => schema.schema.properties[id].displayOptions)\n\n properties.sort((a, b) => a.order - b.order);\n return properties.map(property => property.description).join(' / ')\n}\n\nconst SchemaSuggestion = ({ suggestion: schema, query, isHighlighted, ...props }) => {\n if (!schema?.id) return null;\n return <AutocompleteSuggestion\n icon={<SchemaIcon />}\n primary={`${schema.name} (${schema.owner} v${schema.version})`}\n secondary={getProperties(schema)}\n />\n}\n\nexport const SchemaInput = ({ allowEmpty, multiple, helperText, ...props }) => {\n const Input = multiple ? ReferenceArrayInput : ReferenceInput;\n return <Input\n reference=\"schemas\"\n filterToQuery={filterSchemas}\n sort={{\n field: ['type', 'scope', 'owner'],\n order: ['ASC', 'ASC', 'ASC'],\n }}\n perPage={100}\n {...props}\n >\n <AutocompleteInput\n optionText={schema => `${schema.name} (${schema.owner})`}\n groupBy={schema => `${schema.type} ${schema.scope}`}\n suggestionComponent={SchemaSuggestion}\n multiple={multiple}\n helperText={helperText}\n resettable\n allowEmpty\n />\n </Input>\n}\n","import React from 'react';\nimport { ReferenceInput, ReferenceArrayInput, useLocale } from 'react-admin';\n\nimport { translateApiProperty } from '@hisports/common';\n\nimport AutocompleteInput from '../../common/inputs/AutocompleteInput';\nimport AutocompleteSuggestion from '../../common/inputs/AutocompleteSuggestion'\nimport { ilike } from '../../http/restClient/filters';\n\nconst filterDivision = (name, locale) => name ? ({ or: [\n { name: ilike(name) },\n { [`i18n.${locale}.name`]: ilike(name) },\n] }) : undefined\n\nexport const DivisionSuggestion = ({ suggestion: division, query, isHighlighted, ...props }) => {\n const locale = useLocale();\n return <AutocompleteSuggestion primary={translateApiProperty(division, 'name', locale)} />\n}\n\nexport const DivisionInput = ({ helperText, multiple, ...props }) => {\n const locale = useLocale();\n const Input = multiple ? ReferenceArrayInput : ReferenceInput;\n return <Input\n reference=\"divisions\"\n filterToQuery={name => filterDivision(name, locale)}\n sort={{ field: ['order', 'name'], order: ['ASC', 'ASC'] }}\n perPage={25}\n {...props}\n >\n <AutocompleteInput\n optionText={division => translateApiProperty(division, 'name', locale)}\n suggestionComponent={DivisionSuggestion}\n filterKeys={['name', 'shortName', `i18n.${locale}.name`, `i18n.${locale}.shortName`]}\n disableSort\n multiple={multiple}\n helperText={helperText}\n />\n </Input>\n}\n","import React, { Fragment, useRef } from 'react';\nimport { SelectInput, TabbedForm, TabbedFormTabs, FormTab, useTranslate, NumberInput, useRecordContext } from 'react-admin';\nimport { Alert } from '@material-ui/lab'\nimport { Grid, Typography, makeStyles, useMediaQuery } from '@material-ui/core';\nimport { FileCopyOutlined } from '@material-ui/icons';\nimport { useSelector } from 'react-redux';\nimport { useFormState } from 'react-final-form';\nimport createCalculator from 'final-form-calculate';\n\nimport { FF_DOUBLE_FORFEIT, FF_DRAFT_GAMES, FF_PERIODS, FF_POOLS, FF_SPORTSMANSHIP } from '@hisports/common/featureFlags';\nimport { translateApiProperty } from '@hisports/common';\n\nimport { useFlag, useSport } from '../../http';\nimport { useLocale } from '../../locale';\nimport Toolbar from '../../common/ra/Toolbar';\nimport SwitchInput from '../../common/inputs/SwitchInput';\nimport { InformationTooltip } from '../../common/InformationTooltip';\nimport { EnumInput, LanguageTypeEnum } from '../../common/inputs/EnumInputs';\nimport { FieldDependency } from '../../common/FieldDependency';\nimport { isAuthorized } from '../../common/Authorize';\n\nimport { StandingsOrderInput } from '../scheduleSettings/ScheduleSettingsForm';\nimport { SchemaInput } from '../schemas/SchemaInput';\nimport { DivisionInput } from '../categories/DivisionInput';\nimport { OfficeInput } from '../offices/OfficeInput';\nimport { HockeyPeriodSettings } from '../scoresheet/summary/PeriodsModal';\nimport { useBranchSettings } from '../branchOfficeSettings';\n\nconst useStyles = makeStyles(theme => ({\n periods: {\n marginTop: 0,\n },\n advancedTab: {\n color: theme.palette.tertiary.main,\n },\n groupingType: {\n display: 'flex',\n alignItems: 'center',\n gap: theme.spacing(1),\n }\n}))\n\nconst validate = values => {\n const errors = { points: {} }\n\n errors.points.Team = ['win', 'otWin', 'soWin', 'forfeitWin', 'loss', 'otLoss', 'soLoss', 'forfeitLoss', 'tie', 'forfeitTie']\n .reduce((errors, key) => {\n const value = values.points.Team[key];\n if (value == null) {\n errors[key] = 'ra.validation.required'\n }\n return errors;\n }, {})\n\n if (values.sportsmanshipPoints !== 'none' && values.points.Team.sportsmanship == null) {\n errors.points.Team.sportsmanship = 'ra.validation.required';\n }\n\n errors.points.Player = ['goal', 'assist']\n .reduce((errors, key) => {\n const value = values.points.Player[key];\n if (value == null) {\n errors[key] = 'ra.validation.required'\n } else if (value < 0) {\n errors[key] = 'ra.validation.greater_than_or_equal_zero'\n }\n return errors;\n }, {})\n\n if (values.maxScoreDiff != null && values.maxScoreDiff <= 0) errors.maxScoreDiff = 'ra.validation.greater_than_zero'\n if (values.gameLength != null && values.gameLength <= 0) errors.gameLength = 'resources.scheduleSettings.validations.game_length';\n if (!values.language) errors.language = 'ra.validation.required'\n if (values.rescheduleRequestsEnabled && !values.requiredRescheduleApprovals?.length) errors.requiredRescheduleApprovals = 'ra.validation.required'\n\n return errors;\n}\n\nexport const SportsmanshipPointsInput = props =>\n <SelectInput {...props} choices={[\n { id: 'none', name: 'resources.officeSettings.values.sportsmanship_points.none' },\n { id: 'PCAHA', name: 'resources.officeSettings.values.sportsmanship_points.PCAHA' },\n { id: 'VIAHA', name: 'resources.officeSettings.values.sportsmanship_points.VIAHA' },\n ]} />\n\nconst SyncAttributesInput = props =>\n <SelectInput {...props} choices={[\n { id: 'position', name: 'resources.officeSettings.values.sync_attributes.position' },\n { id: 'all', name: 'resources.officeSettings.values.sync_attributes.all' },\n ]} />\n\nconst ContactsInput = props =>\n <SelectInput {...props} choices={[\n { id: 'profiles', name: 'resources.officeSettings.values.contacts.profiles' },\n { id: 'schedules', name: 'resources.officeSettings.values.contacts.schedules' },\n { id: 'teams', name: 'resources.officeSettings.values.contacts.teams' },\n ]} />\n\nconst ReportsInput = props =>\n <EnumInput {...props} multiple emptyLabel=\"Disabled\" choices={[\n { id: 'Penalty', name: 'resources.officeSettings.values.reports.penalty' },\n { id: 'Scoring', name: 'resources.officeSettings.values.reports.scoring' },\n { id: 'AP', name: 'resources.officeSettings.values.reports.ap' },\n ]} />\n\nconst SuspensionActivationInput = ({ disableOptions = [], ...props }) => {\n const { values } = useFormState();\n\n return <EnumInput {...props} radio choices={[\n { id: 'Manual', name: 'resources.officeSettings.values.suspension_activation.manual' },\n { id: 'Approval', name: 'resources.officeSettings.values.suspension_activation.approval' },\n values?.requireCertification && { id: 'Certification', name: 'resources.officeSettings.values.suspension_activation.certification' },\n ].filter(Boolean)} />\n}\n\nexport const ScoringModeInput = props => {\n return <EnumInput {...props} radio choices={[\n { id: 'Detailed', name: 'resources.officeSettings.values.scoring_mode.detailed', sports: ['Hockey', 'Soccer'] },\n { id: 'Score', name: 'resources.officeSettings.values.scoring_mode.score' },\n ]} />\n}\n\nexport const PenaltyModeInput = props => {\n return <EnumInput {...props} radio choices={[\n { id: 'Detailed', name: 'resources.officeSettings.values.penalty_mode.detailed' },\n ]} />\n}\n\nexport const GroupingTypeInput = props => {\n const translate = useTranslate();\n const classes = useStyles();\n\n return <>\n <div className={classes.groupingType}>\n <Typography variant=\"body1\">{translate(\"resources.officeSettings.fields.groupingType\")}</Typography>\n <InformationTooltip\n text={<div dangerouslySetInnerHTML={{ __html: `${translate('resources.officeSettings.tooltips.groupingTypeHint')} ${translate('resources.officeSettings.tooltips.groupingType')}` } } />}\n placement=\"right\"\n width={750}\n />\n </div>\n <EnumInput {...props} margin=\"none\" label={null} radio choices={[\n { id: 'Pools', name: 'resources.officeSettings.values.groupingType.Pools' },\n { id: 'Groups', name: 'resources.officeSettings.values.groupingType.Groups' },\n ]} />\n </>\n}\n\nexport const PeriodsInput = ({ source }) => {\n const classes = useStyles();\n const settings = useRecordContext()\n\n if (!settings?.periods?.length) return null;\n\n return <HockeyPeriodSettings className={classes.periods} periods={settings.periods} />\n}\n\nexport const EnforcementInput = ({ hideNone = false, ...props }) => {\n const isMobile = useMediaQuery(theme => theme.breakpoints.down('md'))\n const choices = [\n { id: 'Conflict', name: 'resources.officeSettings.values.enforcement.conflict' },\n { id: 'Validation', name: 'resources.officeSettings.values.enforcement.validation' },\n ]\n\n if (!hideNone) choices.unshift({ id: 'None', name: 'resources.officeSettings.values.enforcement.none' })\n\n return <EnumInput {...props} radio row={isMobile} choices={choices} />\n}\n\nconst RescheduleApprovalsInput = props => {\n const isMobile = useMediaQuery(theme => theme.breakpoints.down('md'))\n return <EnumInput {...props} optionDescription=\"description\" multiple row={isMobile} choices={[\n { id: 'Team Staff', name: 'resources.officeSettings.values.required_approvals.Team Staff', description: 'resources.officeSettings.helpers.required_approvals.Team Staff' },\n { id: 'Team Office', name: 'resources.officeSettings.values.required_approvals.Team Organization', description: 'resources.officeSettings.helpers.required_approvals.Team Organization' },\n { id: 'Schedule Office', name: 'resources.officeSettings.values.required_approvals.Schedule Organization', description: 'resources.officeSettings.helpers.required_approvals.Schedule Organization' },\n ]} />\n}\n\nexport const DraftRequestInput = props => {\n const { values: { rescheduleRequestsEnabled } } = useFormState();\n return <>\n <SwitchInput\n source=\"rescheduleRequestsEnabled\"\n label=\"resources.officeSettings.fields.rescheduleRequestsEnabled\"\n helperText=\"resources.officeSettings.helpers.rescheduleRequestsEnabled\"\n {...inputProps}\n />\n {rescheduleRequestsEnabled && <RescheduleApprovalsInput\n source=\"requiredRescheduleApprovals\"\n label=\"resources.officeSettings.fields.requiredRescheduleApprovals\"\n helperText=\"resources.officeSettings.helpers.requiredRescheduleApprovals\"\n {...inputProps}\n />}\n </>\n}\n\nexport const HiddenStatsInput = ({ source, type, scope, ...props }) => {\n const [ locale ] = useLocale();\n const { values: { schemaIds } } = useFormState();\n\n const schemaId = schemaIds?.[type]?.[scope];\n const schema = useSelector(state => state.admin.resources.schemas.data?.[schemaId]);\n\n const properties = Object.keys(schema?.schema?.properties || [])\n .filter(property =>\n !(schema.schema.properties[property].displayOptions && schema.schema.properties[property].displayOptions.hidden)\n )\n .map(property => {\n const { displayOptions } = schema.schema.properties[property];\n const abbreviation = translateApiProperty(displayOptions, 'abbreviation', locale);\n const description = translateApiProperty(displayOptions, 'description', locale);\n\n return {\n id: property,\n name: description || abbreviation,\n description: abbreviation || description,\n };\n });\n\n return <EnumInput {...props} source={`${source}.${type}.${scope}`} multiple emptyLabel=\"Disabled\" choices={properties} optionDescription=\"description\" />;\n}\n\nconst DefaultAlert = () => {\n const translate = useTranslate();\n return <Alert\n severity=\"info\"\n fullWidth\n icon={<FileCopyOutlined />}\n >\n {translate('resources.officeSettings.alerts.new_schedules_only')}\n </Alert>\n}\n\nconst inputProps = {\n variant: 'outlined',\n margin: 'normal',\n fullWidth: true,\n}\n\nconst GeneralTab = props => {\n const translate = useTranslate();\n return <FormTab label=\"resources.officeSettings.labels.tabs.general\" {...props}>\n <Typography variant=\"subtitle2\">{translate('resources.officeSettings.labels.reports')}</Typography>\n <ReportsInput\n source=\"adminReports\"\n label=\"resources.officeSettings.fields.adminReports\"\n helperText=\"resources.officeSettings.helpers.adminReports\"\n {...inputProps}\n />\n <ReportsInput\n source=\"teamReports\"\n label=\"resources.officeSettings.fields.teamReports\"\n helperText=\"resources.officeSettings.helpers.teamReports\"\n {...inputProps}\n />\n\n <br />\n <Typography variant=\"subtitle2\">{translate('resources.officeSettings.labels.contacts')}</Typography>\n <LanguageTypeEnum\n source=\"language\"\n label=\"resources.officeSettings.fields.language\"\n helperText=\"resources.officeSettings.helpers.language\"\n {...inputProps}\n />\n <ContactsInput source=\"contactsVisibility\" label=\"resources.officeSettings.fields.contactsVisibility\" helperText=\"\" {...inputProps} />\n </FormTab>\n}\n\nconst SchedulingTab = ({ office, ...props }) => {\n const translate = useTranslate();\n const isEnabled = useFlag();\n\n const showGroupingType = isEnabled(FF_POOLS);\n\n return <FormTab label=\"resources.officeSettings.labels.tabs.scheduling\" {...props}>\n <Typography variant=\"subtitle2\">{translate('resources.officeSettings.labels.conflict_enforcement')}</Typography>\n <Grid container spacing={2}>\n <Grid item xs={12} md={4}>\n <EnforcementInput source=\"conflictEnforcement\" label=\"resources.officeSettings.fields.conflictEnforcement\" hideNone {...inputProps} />\n </Grid>\n <Grid item xs={12} md={4}>\n <EnforcementInput source=\"availabilityEnforcement\" label=\"resources.officeSettings.fields.availabilityEnforcement\" {...inputProps} />\n </Grid>\n <Grid item xs={12} md={4}>\n <EnforcementInput source=\"constraintEnforcement\" label=\"resources.officeSettings.fields.constraintEnforcement\" {...inputProps} />\n </Grid>\n </Grid>\n\n <Typography variant=\"subtitle2\">{translate('resources.officeSettings.labels.drafts')}</Typography>\n <SwitchInput\n source=\"deferDraftConflict\"\n label={`resources.officeSettings.fields.${isEnabled(FF_DRAFT_GAMES) ? 'deferLegacyDraftConflict' : 'deferDraftConflict'}`}\n helperText={`resources.officeSettings.helpers.${isEnabled(FF_DRAFT_GAMES) ? 'deferLegacyDraftConflict' : 'deferDraftConflict'}`}\n {...inputProps}\n />\n <SwitchInput\n source=\"conflictDrafts\"\n label={`resources.officeSettings.fields.${isEnabled(FF_DRAFT_GAMES) ? 'conflictLegacyDrafts' : 'conflictDrafts'}`}\n helperText={`resources.officeSettings.helpers.${isEnabled(FF_DRAFT_GAMES) ? 'conflictLegacyDrafts' : 'conflictDrafts'}`}\n {...inputProps}\n />\n <SwitchInput\n source=\"limitDateChange\"\n label=\"resources.officeSettings.fields.limitDateChange\"\n helperText=\"resources.officeSettings.helpers.limitDateChange\"\n {...inputProps}\n />\n\n <br />\n <Typography variant=\"subtitle2\" gutterBottom>{translate('resources.officeSettings.labels.scheduling')}</Typography>\n <DefaultAlert />\n <Grid container spacing={2}>\n <Grid item xs={12} md={6}>\n <NumberInput\n source=\"gameLength\"\n label=\"resources.officeSettings.fields.gameLength\"\n helperText=\"resources.officeSettings.helpers.gameLength\"\n {...inputProps}\n />\n </Grid>\n <Grid item xs={12} md={6}>\n <OfficeInput\n source=\"surfaceOfficeId\"\n label=\"resources.officeSettings.fields.surfaceOfficeId\"\n helperText=\"resources.officeSettings.helpers.surfaceOfficeId\"\n filter={{ type: { nin: ['League', 'Tournament', 'Cup'] } }}\n {...inputProps}\n />\n </Grid>\n <Grid item xs={12}>\n <SwitchInput\n source=\"homeChangeStatus\"\n label=\"resources.officeSettings.fields.homeChangeStatus\"\n helperText=\"resources.officeSettings.helpers.homeChangeStatus\"\n {...inputProps}\n />\n </Grid>\n <Grid item xs={12}>\n <DraftRequestInput />\n </Grid>\n {showGroupingType && <Grid item xs={12}>\n <GroupingTypeInput source=\"groupingType\" helperText=\"resources.officeSettings.helpers.groupingType\" {...inputProps} />\n </Grid>}\n </Grid>\n </FormTab>\n}\n\nconst ScorekeepingTab = ({ office, ...props }) => {\n const translate = useTranslate();\n const isEnabled = useFlag();\n const { data: branchSettings } = useBranchSettings(office?.id);\n\n return <FormTab label=\"resources.officeSettings.labels.tabs.scoresheet\" {...props}>\n <Typography variant=\"subtitle2\">{translate('resources.officeSettings.labels.teamScorekeeping')}</Typography>\n <SwitchInput source=\"homeTeamScorekeeping\" helperText=\"resources.officeSettings.helpers.homeTeamScorekeeping\" {...inputProps} />\n <SwitchInput source=\"awayTeamScorekeeping\" helperText=\"resources.officeSettings.helpers.awayTeamScorekeeping\" {...inputProps} />\n\n <br />\n <Typography variant=\"subtitle2\">{translate('resources.officeSettings.labels.certification')}</Typography>\n <SwitchInput source=\"requireCertification\" helperText=\"resources.officeSettings.helpers.certification\" {...inputProps} />\n\n {branchSettings?.ff_incidents && <SwitchInput source=\"requireIncidentReports\" helperText=\"resources.officeSettings.helpers.incidentReports\" {...inputProps} />}\n\n {branchSettings?.ff_suspensions && <>\n <br />\n <Typography variant=\"subtitle2\">{translate('resources.officeSettings.labels.suspensions')}</Typography>\n <SuspensionActivationInput source=\"suspensionActivation\" helperText=\"resources.officeSettings.helpers.suspensionActivation\" {...inputProps} />\n </>}\n\n <br />\n <Typography variant=\"subtitle2\" gutterBottom>{translate('resources.scheduleSettings.labels.lineups')}</Typography>\n <DefaultAlert />\n <SwitchInput\n source=\"includeRegistrations\"\n helperText=\"resources.officeSettings.helpers.includeRegistrations\"\n {...inputProps}\n />\n <SwitchInput\n source=\"allowExtras\"\n helperText=\"resources.officeSettings.helpers.allowExtras\"\n {...inputProps}\n />\n <ScoringModeInput source=\"scoringMode\" helperText=\"resources.officeSettings.helpers.scoringMode\" {...inputProps} />\n <PenaltyModeInput source=\"penaltyMode\" helperText=\"resources.officeSettings.helpers.penaltyMode\" {...inputProps} />\n\n {isEnabled(FF_PERIODS) && <>\n <br />\n <Typography variant=\"subtitle2\">{translate('resources.officeSettings.labels.periods')}</Typography>\n <DefaultAlert />\n <PeriodsInput />\n </>}\n </FormTab>\n}\n\nconst StandingsTab = props => {\n const translate = useTranslate();\n const isEnabled = useFlag();\n\n return <FormTab label=\"resources.officeSettings.labels.tabs.team_stats\" {...props}>\n <DefaultAlert />\n\n <br />\n <Typography variant=\"subtitle2\">{translate('resources.officeSettings.labels.points')}</Typography>\n <Grid container spacing={2}>\n <Grid item xs={6} md={3}>\n <NumberInput\n source=\"points.Team.win\"\n label=\"resources.officeSettings.fields.points.Team.win\"\n helperText=\"\"\n {...inputProps}\n />\n </Grid>\n <Grid item xs={6} md={3}>\n <NumberInput\n source=\"points.Team.otWin\"\n label=\"resources.officeSettings.fields.points.Team.otWin\"\n helperText=\"\"\n {...inputProps}\n />\n </Grid>\n <Grid item xs={6} md={3}>\n <NumberInput\n source=\"points.Team.soWin\"\n label=\"resources.officeSettings.fields.points.Team.soWin\"\n helperText=\"\"\n {...inputProps}\n />\n </Grid>\n <Grid item xs={6} md={3}>\n <NumberInput\n source=\"points.Team.forfeitWin\"\n label=\"resources.officeSettings.fields.points.Team.forfeitWin\"\n helperText=\"\"\n {...inputProps}\n />\n </Grid>\n <Grid item xs={6} md={3}>\n <NumberInput\n source=\"points.Team.loss\"\n label=\"resources.officeSettings.fields.points.Team.loss\"\n helperText=\"\"\n {...inputProps}\n />\n </Grid>\n <Grid item xs={6} md={3}>\n <NumberInput\n source=\"points.Team.otLoss\"\n label=\"resources.officeSettings.fields.points.Team.otLoss\"\n helperText=\"\"\n {...inputProps}\n />\n </Grid>\n <Grid item xs={6} md={3}>\n <NumberInput\n source=\"points.Team.soLoss\"\n label=\"resources.officeSettings.fields.points.Team.soLoss\"\n helperText=\"\"\n {...inputProps}\n />\n </Grid>\n <Grid item xs={6} md={3}>\n <NumberInput\n source=\"points.Team.forfeitLoss\"\n label=\"resources.officeSettings.fields.points.Team.forfeitLoss\"\n helperText=\"\"\n {...inputProps}\n />\n </Grid>\n <Grid item xs={6} md={3}>\n <NumberInput\n source=\"points.Team.tie\"\n label=\"resources.officeSettings.fields.points.Team.tie\"\n helperText=\"\"\n {...inputProps}\n />\n </Grid>\n {isEnabled(FF_DOUBLE_FORFEIT) && <Grid item xs={6} md={3}>\n <NumberInput\n source=\"points.Team.forfeitTie\"\n label=\"resources.officeSettings.fields.points.Team.forfeitTie\"\n helperText=\"\"\n {...inputProps}\n />\n </Grid>}\n <Grid item xs={6} md={3}>\n <NumberInput\n source=\"maxScoreDiff\"\n label=\"resources.officeSettings.fields.maxScoreDiff\"\n helperText=\"ra.message.optional\"\n {...inputProps}\n />\n </Grid>\n <Grid item xs={4} md={3}>\n <FieldDependency fieldSource=\"sportsmanshipPoints\" test={value => value != 'none'}>\n <NumberInput\n source=\"points.Team.sportsmanship\"\n label=\"resources.officeSettings.fields.points.Team.sportsmanship\"\n helperText=\"\"\n {...inputProps}\n />\n </FieldDependency>\n </Grid>\n </Grid>\n\n {isEnabled(FF_SPORTSMANSHIP) && <br />}\n {isEnabled(FF_SPORTSMANSHIP) && <SportsmanshipPointsInput\n source=\"sportsmanshipPoints\"\n label=\"resources.officeSettings.fields.sportsmanshipPoints\"\n helperText=\"resources.officeSettings.helpers.sportsmanshipPoints\"\n {...inputProps}\n />}\n\n <br />\n <Typography variant=\"subtitle2\">{translate('resources.officeSettings.labels.standings')}</Typography>\n <StandingsOrderInput source=\"standingsOrder\" type=\"Team\" label=\"resources.scheduleSettings.labels.standings_order.team\" {...inputProps} />\n\n <br />\n <Typography variant=\"subtitle2\">{translate('resources.officeSettings.labels.public')}</Typography>\n <DivisionInput\n source=\"standingsHiddenDivisionIds\"\n multiple\n helperText=\"resources.officeSettings.helpers.standingsVisibility\"\n {...inputProps}\n />\n <HiddenStatsInput\n source=\"hiddenStats\"\n type=\"Team\"\n scope=\"Schedule\"\n label=\"resources.officeSettings.labels.hidden_stats.team\"\n helperText=\"resources.officeSettings.helpers.hiddenStats\"\n {...inputProps}\n />\n <DivisionInput\n source=\"boxScoreHiddenDivisionIds\"\n multiple\n helperText=\"resources.officeSettings.helpers.boxScoreVisibility\"\n {...inputProps}\n />\n </FormTab>\n}\n\nconst StatsTab = props => {\n const translate = useTranslate();\n const officeSettings = useRecordContext(props);\n const sport = useSport();\n const scoreOnly = officeSettings?.scoringMode === 'Score';\n\n return <FormTab label=\"resources.officeSettings.labels.tabs.player_stats\" {...props}>\n <DefaultAlert />\n\n <br />\n {!scoreOnly && <>\n <Typography variant=\"subtitle2\">{translate('resources.officeSettings.labels.points')}</Typography>\n <Grid container spacing={2}>\n <Grid item xs={6} md={3}>\n <NumberInput\n source=\"points.Player.goal\"\n label=\"resources.officeSettings.fields.points.Player.goal\"\n helperText=\"\"\n min={0}\n {...inputProps}\n />\n </Grid>\n <Grid item xs={6} md={3}>\n <NumberInput\n source=\"points.Player.assist\"\n label=\"resources.officeSettings.fields.points.Player.assist\"\n helperText=\"\"\n min={0}\n {...inputProps}\n />\n </Grid>\n </Grid>\n </>}\n\n <br />\n <Typography variant=\"subtitle2\">{translate('resources.officeSettings.labels.standings')}</Typography>\n <StandingsOrderInput source=\"standingsOrder\" type=\"Skater\" label=\"resources.scheduleSettings.labels.standings_order.skater\" {...inputProps} />\n {sport != 'Baseball' && <StandingsOrderInput source=\"standingsOrder\" type=\"Goalie\" label=\"resources.scheduleSettings.labels.standings_order.goalie\" {...inputProps} />}\n\n <br />\n <Typography variant=\"subtitle2\">{translate('resources.officeSettings.labels.public')}</Typography>\n <DivisionInput\n source=\"skaterStatsHiddenDivisionIds\"\n multiple\n helperText=\"resources.officeSettings.helpers.statsVisibility\"\n {...inputProps}\n />\n <HiddenStatsInput\n source=\"hiddenStats\"\n type=\"Skater\"\n scope=\"Schedule\"\n label=\"resources.officeSettings.labels.hidden_stats.skater\"\n helperText=\"resources.officeSettings.helpers.hiddenStats\"\n {...inputProps}\n />\n\n <br />\n {sport != 'Baseball' && <>\n <DivisionInput\n source=\"goalieStatsHiddenDivisionIds\"\n multiple\n helperText=\"resources.officeSettings.helpers.statsVisibility\"\n {...inputProps}\n />\n <HiddenStatsInput\n source=\"hiddenStats\"\n type=\"Goalie\"\n scope=\"Schedule\"\n label=\"resources.officeSettings.labels.hidden_stats.goalie\"\n helperText=\"resources.officeSettings.helpers.hiddenStats\"\n {...inputProps}\n />\n </>}\n </FormTab>\n}\n\nconst AdvancedTab = ({ office, ...props }) => {\n const translate = useTranslate();\n const classes = useStyles();\n const isEnabled = useFlag();\n\n const showGroupingType = !isEnabled(FF_POOLS);\n\n if (!isAuthorized(office, 'offices', 'internal')) return null;\n return <FormTab className={classes.advancedTab} label=\"resources.officeSettings.labels.tabs.advanced\" {...props}>\n <Alert severity=\"warning\" fullWidth>{translate('resources.officeSettings.alerts.advanced')}</Alert>\n <br />\n\n {showGroupingType && <Typography variant=\"subtitle2\">{translate('resources.scheduleSettings.labels.scheduling')}</Typography>}\n {showGroupingType && <GroupingTypeInput source=\"groupingType\" helperText=\"resources.officeSettings.helpers.groupingType\" {...inputProps} />}\n\n <Typography variant=\"subtitle2\">{translate('resources.officeSettings.labels.schedule_stats')}</Typography>\n <SchemaInput\n label=\"resources.officeSettings.labels.stats_schema.team\"\n source=\"schemaIds.Team.Schedule\"\n filter={{ type: 'Team', scope: 'Schedule' }}\n {...inputProps}\n />\n <SchemaInput\n label=\"resources.officeSettings.labels.stats_schema.skater\"\n source=\"schemaIds.Skater.Schedule\"\n filter={{ type: 'Skater', scope: 'Schedule' }}\n {...inputProps}\n />\n <SchemaInput\n label=\"resources.officeSettings.labels.stats_schema.goalie\"\n source=\"schemaIds.Goalie.Schedule\"\n filter={{ type: 'Goalie', scope: 'Schedule' }}\n {...inputProps}\n />\n\n <br />\n <Typography variant=\"subtitle2\">{translate('resources.officeSettings.labels.game_stats')}</Typography>\n <SchemaInput\n label=\"resources.officeSettings.labels.stats_schema.team\"\n source=\"schemaIds.Team.Game\"\n filter={{ type: 'Team', scope: 'Game' }}\n {...inputProps}\n />\n <SchemaInput\n label=\"resources.officeSettings.labels.stats_schema.skater\"\n source=\"schemaIds.Skater.Game\"\n filter={{ type: 'Skater', scope: 'Game' }}\n {...inputProps}\n />\n <SchemaInput\n label=\"resources.officeSettings.labels.stats_schema.goalie\"\n source=\"schemaIds.Goalie.Game\"\n filter={{ type: 'Goalie', scope: 'Game' }}\n {...inputProps}\n />\n\n <br />\n <Typography variant=\"subtitle2\">{translate('resources.officeSettings.labels.rosters')}</Typography>\n <SyncAttributesInput source=\"syncAttributes\" label=\"resources.officeSettings.fields.syncAttributes\" helperText=\"\" {...inputProps} />\n <SwitchInput\n source=\"updateRosterFromLineups\"\n helperText=\"resources.officeSettings.helpers.updateRosterFromLineups\"\n {...inputProps}\n />\n </FormTab>\n}\n\nexport default ({ office, ...props }) => {\n const decorators = useRef([createCalculator({\n field: 'requireCertification',\n updates: {\n suspensionActivation: (requireCertification, values, prevValues) => {\n if (!requireCertification && values.suspensionActivation === 'Certification') return 'Manual'\n return values.suspensionActivation\n }\n }\n })])\n\n return <TabbedForm toolbar={<Toolbar />} validate={validate} decorators={decorators.current} tabs={<TabbedFormTabs variant=\"scrollable\" scrollButtons=\"auto\" />} component={Fragment} {...props} syncWithLocation={false}>\n <GeneralTab />\n <SchedulingTab office={office} />\n <ScorekeepingTab office={office} />\n <StandingsTab />\n <StatsTab />\n <AdvancedTab office={office} />\n </TabbedForm>\n}\n","import React from 'react';\nimport { ArrayInput } from 'react-admin';\n\nimport { translateApiProperty } from '@hisports/common';\n\nimport { useLocale } from '../../locale';\n\nimport { EnumInput } from '../../common/inputs/EnumInputs';\nimport SortedFormIterator from '../../common/ra/SortedFormIterator';\n\nconst PropertyInput = ({ schema, ...props }) => {\n const [ locale ] = useLocale();\n\n if (!schema) return <EnumInput {...props} choices={[]} helperText=\"resources.scheduleSettings.helpers.schema\" disabled />\n\n const properties = Object.keys(schema.schema.properties);\n const choices = properties.map(id => {\n const { displayOptions } = schema.schema.properties[id];\n const abbreviation = translateApiProperty(displayOptions, 'abbreviation', locale);\n const description = translateApiProperty(displayOptions, 'description', locale);\n return {\n id,\n name: description || abbreviation,\n description: abbreviation || description,\n }\n })\n return <EnumInput {...props} choices={choices} optionDescription=\"description\" />\n}\n\nconst TypeInput = props =>\n <EnumInput {...props} choices={[\n { id: 'All Games', name: 'resources.scheduleSettings.values.ranking_type.All Games' },\n { id: 'Head-to-head', name: 'resources.scheduleSettings.values.ranking_type.Head-to-head' }\n ]} />\n\nconst OrderInput = props =>\n <EnumInput {...props} choices={[\n { id: 'DESC', name: 'resources.scheduleSettings.values.ranking_order.DESC', description: 'resources.scheduleSettings.messages.high_low' },\n { id: 'ASC', name: 'resources.scheduleSettings.values.ranking_order.ASC', description: 'resources.scheduleSettings.messages.low_high' },\n ]} optionDescription=\"description\" />\n\nexport const RankingInput = ({ schema, ...props }) =>\n <ArrayInput {...props}>\n <SortedFormIterator>\n <PropertyInput source=\"property\" label=\"resources.scheduleSettings.labels.points_system_ranking.property\" schema={schema} fullWidth />\n <OrderInput source=\"order\" label=\"resources.scheduleSettings.labels.points_system_ranking.order\" />\n <TypeInput source=\"type\" label=\"resources.scheduleSettings.labels.points_system_ranking.type\" />\n </SortedFormIterator>\n </ArrayInput>\n","import React from 'react';\nimport { TabbedForm, TabbedFormTabs, FormTab, useTranslate, useRecordContext, NumberInput, useQueryWithStore } from 'react-admin';\nimport { Grid, makeStyles, Typography } from '@material-ui/core'\nimport { Alert } from '@material-ui/lab'\nimport { FileCopyOutlined } from '@material-ui/icons';\nimport { useSelector } from 'react-redux';\nimport { useFormState } from 'react-final-form';\n\nimport { FF_DOUBLE_FORFEIT, FF_PERIODS, FF_SPORTSMANSHIP } from '@hisports/common/featureFlags';\n\nimport { useFlag, useSport } from '../../http';\nimport { DialogFormToolbar } from '../../common/dialogs/DialogForm';\nimport SwitchInput from '../../common/inputs/SwitchInput';\nimport { FieldDependency } from '../../common/FieldDependency';\nimport { SurfaceSizeEnumInput } from '../../common/inputs/EnumInputs';\nimport { isAuthorized } from '../../common/Authorize';\n\nimport { SportsmanshipPointsInput, HiddenStatsInput, ScoringModeInput, PenaltyModeInput, PeriodsInput, DraftRequestInput, GroupingTypeInput } from '../officeSettings/OfficeSettingsForm';\nimport { SchemaInput } from '../schemas/SchemaInput';\nimport { OfficeInput } from '../offices/OfficeInput';\nimport { RankingInput } from './RankingInput';\n\nconst inputProps = {\n resource: 'scheduleSettings',\n basePath: '/scheduleSettings',\n variant: 'outlined',\n margin: 'normal',\n fullWidth: true,\n}\n\nconst useStyles = makeStyles(theme => ({\n advancedTab: {\n color: theme.palette.tertiary.main,\n }\n}));\n\nconst validate = values => {\n const errors = { points: {} }\n\n errors.points.Team = ['win', 'otWin', 'soWin', 'forfeitWin', 'loss', 'otLoss', 'soLoss', 'forfeitLoss', 'tie', 'forfeitTie']\n .reduce((errors, key) => {\n const value = values.points.Team[key];\n if (value == null) {\n errors[key] = 'ra.validation.required'\n }\n return errors;\n }, {})\n\n if (values.sportsmanshipPoints !== 'none' && values.points.Team.sportsmanship == null) {\n errors.points.Team.sportsmanship = 'ra.validation.required';\n }\n\n errors.points.Player = ['goal', 'assist']\n .reduce((errors, key) => {\n const value = values.points.Player[key];\n if (value == null) {\n errors[key] = 'ra.validation.required'\n } else if (value < 0) {\n errors[key] = 'ra.validation.greater_than_or_equal_zero'\n }\n return errors;\n }, {})\n\n if (values.maxScoreDiff != null && values.maxScoreDiff <= 0) errors.maxScoreDiff = 'ra.validation.greater_than_zero'\n if (values.gameLength != null && values.gameLength <= 0) errors.gameLength = 'resources.scheduleSettings.validations.game_length';\n if (values.rescheduleRequestsEnabled && !values.requiredRescheduleApprovals?.length) errors.requiredRescheduleApprovals = 'ra.validation.required'\n\n return errors;\n}\n\nconst DefaultAlert = () => {\n const translate = useTranslate();\n return <Alert\n severity=\"info\"\n fullWidth\n icon={<FileCopyOutlined />}\n >\n {translate('resources.scheduleSettings.alerts.new_scoresheets_only')}\n </Alert>\n}\n\nexport const StandingsOrderInput = ({ source, type, label, ...props }) => {\n const translate = useTranslate();\n const { values: { schemaIds } } = useFormState();\n const schemaId = schemaIds?.[type]?.Schedule;\n const { data: schemas } = useQueryWithStore({\n type: 'getMany',\n resource: 'schemas',\n payload: { ids: [ schemaId ] }\n }, {\n enabled: schemaId != null,\n action: 'CUSTOM_QUERY',\n })\n\n return <>\n <Typography variant=\"body2\" color=\"textSecondary\">{translate(label)}</Typography>\n <RankingInput schema={schemas?.[0]} source={`${source}.${type}`} label={null} {...props} margin=\"none\" />\n </>\n}\n\nconst SchedulingTab = ({ schedule, ...props }) => {\n return <FormTab label=\"resources.scheduleSettings.labels.tabs.scheduling\" {...props}>\n <Grid container spacing={2}>\n <Grid item xs={12} md={4}>\n <NumberInput\n source=\"gameLength\"\n helperText=\"resources.scheduleSettings.helpers.gameLength\"\n {...inputProps}\n />\n </Grid>\n <Grid item xs={12} md={4}>\n <SurfaceSizeEnumInput\n multiple\n source=\"surfaceSizes\"\n helperText=\"resources.scheduleSettings.helpers.surfaceSizes\"\n {...inputProps}\n />\n </Grid>\n <Grid item xs={12} md={4}>\n <OfficeInput\n source=\"surfaceOfficeId\"\n helperText=\"resources.scheduleSettings.helpers.surfaceOfficeId\"\n filter={{ type: { inq: ['Organization', 'Branch', 'Region', 'District', 'Association', 'Administrative', 'Historical', 'Zone'] } }}\n {...inputProps}\n />\n </Grid>\n <Grid item xs={12}>\n <DraftRequestInput />\n </Grid>\n </Grid>\n </FormTab>\n}\n\nconst ScoresheetTab = (props) => {\n const translate = useTranslate();\n const isEnabled = useFlag();\n\n return <FormTab label=\"resources.scheduleSettings.labels.tabs.scoresheet\" {...props}>\n <Typography variant=\"subtitle2\">{translate('resources.scheduleSettings.labels.scorekeeping')}</Typography>\n <ScoringModeInput source=\"scoringMode\" helperText=\"resources.scheduleSettings.helpers.scoringMode\" />\n <PenaltyModeInput source=\"penaltyMode\" helperText=\"resources.scheduleSettings.helpers.penaltyMode\" />\n <br />\n\n <Typography variant=\"subtitle2\">{translate('resources.scheduleSettings.labels.lineups')}</Typography>\n <SwitchInput\n source=\"includeRegistrations\"\n helperText=\"resources.scheduleSettings.helpers.includeRegistrations\"\n {...inputProps}\n />\n <SwitchInput\n source=\"allowExtras\"\n helperText=\"resources.scheduleSettings.helpers.allowExtras\"\n {...inputProps}\n />\n\n {isEnabled(FF_PERIODS) && <>\n <br />\n <Typography variant=\"subtitle2\">{translate('resources.officeSettings.labels.periods')}</Typography>\n <DefaultAlert />\n <PeriodsInput />\n </>}\n </FormTab>\n}\n\nconst TeamStatsTab = (props) => {\n const translate = useTranslate();\n const isEnabled = useFlag();\n const scheduleSettings = useRecordContext(props);\n const schedule = useSelector(state => state.admin.resources.schedules.data?.[scheduleSettings?.id])\n\n const isLeague = schedule?.type === 'League';\n\n return <FormTab label=\"resources.scheduleSettings.labels.tabs.team_stats\" {...props}>\n <Typography variant=\"subtitle2\">{translate('resources.scheduleSettings.labels.points')}</Typography>\n <Grid container spacing={2}>\n <Grid item xs={6} md={3}>\n <NumberInput\n source=\"points.Team.win\"\n label=\"resources.scheduleSettings.fields.points.Team.win\"\n helperText=\"\"\n {...inputProps}\n />\n </Grid>\n <Grid item xs={6} md={3}>\n <NumberInput\n source=\"points.Team.otWin\"\n label=\"resources.scheduleSettings.fields.points.Team.otWin\"\n helperText=\"\"\n {...inputProps}\n />\n </Grid>\n <Grid item xs={6} md={3}>\n <NumberInput\n source=\"points.Team.soWin\"\n label=\"resources.scheduleSettings.fields.points.Team.soWin\"\n helperText=\"\"\n {...inputProps}\n />\n </Grid>\n <Grid item xs={6} md={3}>\n <NumberInput\n source=\"points.Team.forfeitWin\"\n label=\"resources.scheduleSettings.fields.points.Team.forfeitWin\"\n helperText=\"\"\n {...inputProps}\n />\n </Grid>\n <Grid item xs={6} md={3}>\n <NumberInput\n source=\"points.Team.loss\"\n label=\"resources.scheduleSettings.fields.points.Team.loss\"\n helperText=\"\"\n {...inputProps}\n />\n </Grid>\n <Grid item xs={6} md={3}>\n <NumberInput\n source=\"points.Team.otLoss\"\n label=\"resources.scheduleSettings.fields.points.Team.otLoss\"\n helperText=\"\"\n {...inputProps}\n />\n </Grid>\n <Grid item xs={6} md={3}>\n <NumberInput\n source=\"points.Team.soLoss\"\n label=\"resources.scheduleSettings.fields.points.Team.soLoss\"\n helperText=\"\"\n {...inputProps}\n />\n </Grid>\n <Grid item xs={6} md={3}>\n <NumberInput\n source=\"points.Team.forfeitLoss\"\n label=\"resources.scheduleSettings.fields.points.Team.forfeitLoss\"\n helperText=\"\"\n {...inputProps}\n />\n </Grid>\n <Grid item xs={6} md={3}>\n <NumberInput\n source=\"points.Team.tie\"\n label=\"resources.scheduleSettings.fields.points.Team.tie\"\n helperText=\"\"\n {...inputProps}\n />\n </Grid>\n {isEnabled(FF_DOUBLE_FORFEIT) && <Grid item xs={6} md={3}>\n <NumberInput\n source=\"points.Team.forfeitTie\"\n label=\"resources.scheduleSettings.fields.points.Team.forfeitTie\"\n helperText=\"\"\n {...inputProps}\n />\n </Grid>}\n <Grid item xs={6} md={3}>\n <NumberInput\n source=\"maxScoreDiff\"\n label=\"resources.scheduleSettings.fields.maxScoreDiff\"\n helperText=\"ra.message.optional\"\n {...inputProps}\n />\n </Grid>\n <Grid item xs={4} md={3}>\n <FieldDependency fieldSource=\"sportsmanshipPoints\" test={value => value != 'none'}>\n <NumberInput\n source=\"points.Team.sportsmanship\"\n label=\"resources.scheduleSettings.fields.points.Team.sportsmanship\"\n helperText=\"\"\n {...inputProps}\n />\n </FieldDependency>\n </Grid>\n </Grid>\n\n <br />\n {isEnabled(FF_SPORTSMANSHIP) && <SportsmanshipPointsInput\n source=\"sportsmanshipPoints\"\n label=\"resources.scheduleSettings.fields.sportsmanshipPoints\"\n helperText=\"resources.scheduleSettings.helpers.sportsmanshipPoints\"\n {...inputProps}\n />}\n\n {isLeague && <SwitchInput\n source=\"disableSportsmanshipCarry\"\n helperText=\"resources.scheduleSettings.helpers.disableSportsmanshipCarry\"\n {...inputProps}\n />}\n\n <br />\n <Typography variant=\"subtitle2\">{translate('resources.scheduleSettings.labels.standings')}</Typography>\n <StandingsOrderInput source=\"standingsOrder\" type=\"Team\" label=\"resources.scheduleSettings.labels.standings_order.team\" {...inputProps} />\n\n <br />\n <Typography variant=\"subtitle2\">{translate('resources.scheduleSettings.labels.public')}</Typography>\n <HiddenStatsInput\n source=\"hiddenStats\"\n type=\"Team\"\n scope=\"Schedule\"\n label=\"resources.scheduleSettings.labels.hidden_stats.team\"\n {...inputProps}\n />\n </FormTab>\n}\n\nconst PlayerStatsTab = (props) => {\n const translate = useTranslate();\n const sport = useSport();\n const scheduleSettings = useRecordContext(props);\n\n const scoreOnly = scheduleSettings?.scoringMode === 'Score';\n\n return <FormTab label=\"resources.scheduleSettings.labels.tabs.player_stats\" {...props}>\n {!scoreOnly && <>\n <Typography variant=\"subtitle2\">{translate('resources.scheduleSettings.labels.points')}</Typography>\n <Grid container spacing={2}>\n <Grid item xs={6} md={3}>\n <NumberInput\n source=\"points.Player.goal\"\n label=\"resources.scheduleSettings.fields.points.Player.goal\"\n helperText=\"\"\n min={0}\n {...inputProps}\n />\n </Grid>\n <Grid item xs={6} md={3}>\n <NumberInput\n source=\"points.Player.assist\"\n label=\"resources.scheduleSettings.fields.points.Player.assist\"\n helperText=\"\"\n min={0}\n {...inputProps}\n />\n </Grid>\n </Grid>\n </>}\n\n <br />\n <Typography variant=\"subtitle2\">{translate('resources.scheduleSettings.labels.standings')}</Typography>\n <StandingsOrderInput source=\"standingsOrder\" type=\"Skater\" label=\"resources.scheduleSettings.labels.standings_order.skater\" {...inputProps} />\n {sport != 'Baseball' && <StandingsOrderInput source=\"standingsOrder\" type=\"Goalie\" label=\"resources.scheduleSettings.labels.standings_order.goalie\" {...inputProps} />}\n\n <br />\n <Typography variant=\"subtitle2\">{translate('resources.scheduleSettings.labels.public')}</Typography>\n <HiddenStatsInput\n source=\"hiddenStats\"\n type=\"Skater\"\n scope=\"Schedule\"\n label=\"resources.scheduleSettings.labels.hidden_stats.skater\"\n {...inputProps}\n />\n {sport != 'Baseball' && <HiddenStatsInput\n source=\"hiddenStats\"\n type=\"Goalie\"\n scope=\"Schedule\"\n label=\"resources.scheduleSettings.labels.hidden_stats.goalie\"\n {...inputProps}\n />}\n </FormTab>\n}\n\nconst AdvancedTab = ({ schedule, ...props }) => {\n const translate = useTranslate();\n const classes = useStyles();\n\n if (!isAuthorized(schedule, 'schedules', 'internal')) return null;\n return <FormTab className={classes.advancedTab} label=\"resources.scheduleSettings.labels.tabs.advanced\" {...props}>\n\n <br />\n <Typography variant=\"subtitle2\">{translate('resources.scheduleSettings.labels.scheduling')}</Typography>\n <GroupingTypeInput source=\"groupingType\" helperText=\"resources.scheduleSettings.helpers.groupingType\" {...inputProps} />\n\n <br />\n <Typography variant=\"subtitle2\">{translate('resources.scheduleSettings.labels.schedule_stats')}</Typography>\n <SchemaInput\n label=\"resources.scheduleSettings.labels.stats_schema.team\"\n source=\"schemaIds.Team.Schedule\"\n filter={{ type: 'Team', scope: 'Schedule' }}\n {...inputProps}\n />\n <SchemaInput\n label=\"resources.scheduleSettings.labels.stats_schema.skater\"\n source=\"schemaIds.Skater.Schedule\"\n filter={{ type: 'Skater', scope: 'Schedule' }}\n {...inputProps}\n />\n <SchemaInput\n label=\"resources.scheduleSettings.labels.stats_schema.goalie\"\n source=\"schemaIds.Goalie.Schedule\"\n filter={{ type: 'Goalie', scope: 'Schedule' }}\n {...inputProps}\n />\n\n <br />\n <Typography variant=\"subtitle2\">{translate('resources.scheduleSettings.labels.game_stats')}</Typography>\n <SchemaInput\n label=\"resources.scheduleSettings.labels.stats_schema.team\"\n source=\"schemaIds.Team.Game\"\n filter={{ type: 'Team', scope: 'Game' }}\n {...inputProps}\n />\n <SchemaInput\n label=\"resources.scheduleSettings.labels.stats_schema.skater\"\n source=\"schemaIds.Skater.Game\"\n filter={{ type: 'Skater', scope: 'Game' }}\n {...inputProps}\n />\n <SchemaInput\n label=\"resources.scheduleSettings.labels.stats_schema.goalie\"\n source=\"schemaIds.Goalie.Game\"\n filter={{ type: 'Goalie', scope: 'Game' }}\n {...inputProps}\n />\n </FormTab>\n}\n\nexport default ({ schedule, ...props }) => {\n return <TabbedForm toolbar={<DialogFormToolbar />} validate={validate} tabs={<TabbedFormTabs variant=\"scrollable\" scrollButtons=\"auto\" />} syncWithLocation={false} {...props}>\n <SchedulingTab schedule={schedule} />\n <ScoresheetTab />\n <TeamStatsTab />\n <PlayerStatsTab />\n <AdvancedTab schedule={schedule} />\n </TabbedForm>\n}\n","import React, { Fragment, useState } from 'react';\nimport { useRecordContext, useTranslate } from 'react-admin';\nimport { Button } from '@material-ui/core';\nimport { Edit } from '@material-ui/icons';\n\nimport { EditResourceDialog } from '../../common/dialogs/ResourceDialog';\n\nimport ScheduleSettingsForm from './ScheduleSettingsForm';\n\nconst EditScheduleSettingsDialog = props => {\n const schedule = useRecordContext();\n\n return <EditResourceDialog label=\"resources.scheduleSettings.labels.edit_schedule\" disableDelete maxWidth=\"md\" resource=\"scheduleSettings\" basePath=\"/scheduleSettings\" canDelete={false} {...props}>\n <ScheduleSettingsForm schedule={schedule} />\n </EditResourceDialog>\n}\n\nexport const UpdateScheduleSettingsButton = ({ scheduleId, ...props }) => {\n const [ isOpen, setOpen ] = useState(false);\n const translate = useTranslate();\n\n return <>\n <Button color=\"primary\" startIcon={<Edit />} onClick={() => setOpen(true)}>\n {translate('resources.scheduleSettings.actions.edit')}\n </Button>\n <EditScheduleSettingsDialog id={scheduleId} isOpen={isOpen} handleClose={() => setOpen(false)} {...props} />\n </>\n}\n","import React from 'react';\nimport { useRecordContext } from 'react-admin';\n\nimport InfoCard from '../../../common/cards/InfoCard';\nimport { isAuthorized } from '../../../common/Authorize';\n\nimport { ScheduleSettingsField } from '../../scheduleSettings/ScheduleSettingsField';\nimport { UpdateScheduleSettingsButton } from '../../scheduleSettings/ScheduleSettingsModal';\n\nexport default props => {\n const schedule = useRecordContext(props);\n\n const showSettings = isAuthorized(schedule, 'scheduleSettings', 'show');\n const canEditSettings = isAuthorized(schedule, 'scheduleSettings', 'edit');\n\n if (!showSettings) return null;\n return <InfoCard title=\"ra.message.settings\" actions={\n canEditSettings && <UpdateScheduleSettingsButton scheduleId={schedule?.id} />\n }>\n <ScheduleSettingsField scheduleId={schedule?.id} />\n </InfoCard>\n}\n","import React from 'react';\nimport { ReferenceInput } from 'react-admin';\n\nimport AutocompleteSuggestion from '../../common/inputs/AutocompleteSuggestion';\nimport AutocompleteInput from '../../common/inputs/AutocompleteInput';\nimport { MailOutline, Phone, Smartphone } from '@material-ui/icons';\n\nconst getSecondary = contact => {\n if (contact.type !== 'Email') return contact.type;\n const attributes = [];\n if (contact.isPrimary) attributes.push('Primary')\n if (contact.isEmergency) attributes.push('Emergency')\n if (!contact.isVerified) attributes.push('Unverified')\n return attributes.join(', ')\n}\n\nconst getIcon = contact => {\n if (!contact) return null;\n if (contact.type === 'Email') return <MailOutline />\n if (contact.type === 'Mobile') return <Smartphone />\n if (contact.type === 'Home') return <Phone />\n return null\n}\n\nconst ContactSuggestion = ({ suggestion: contact }) => {\n if (!contact) return null;\n const primary = contact.value;\n const secondary = getSecondary(contact);\n const icon = getIcon(contact);\n return <AutocompleteSuggestion primary={primary} secondary={secondary} icon={icon} />\n}\n\nexport const ContactInput = ({ helperText, ...props }) =>\n <ReferenceInput reference=\"contacts\" filterToQuery={() => null} {...props}>\n <AutocompleteInput optionText=\"value\" helperText={helperText} suggestionComponent={ContactSuggestion} />\n </ReferenceInput>\n","import React from 'react';\nimport { ReferenceInput, ReferenceArrayInput } from 'react-admin';\n\nimport AutocompleteInput from '../../common/inputs/AutocompleteInput';\nimport AutocompleteSuggestion from '../../common/inputs/AutocompleteSuggestion'\nimport { VenueIcon } from '../icons';\n\nimport { getVenueName, getVenueCity } from './util';\n\nexport const filterVenue = name => ({ name })\n\nconst matches = (left, right) => `${left}`.trim().toLowerCase().includes(`${right}`.trim().toLowerCase());\nexport const matchVenue = (input, result) => {\n if (!input) return true;\n if (!result) return false;\n return matches(result.name, input) ||\n matches(result.address, input) ||\n matches(result.city, input) ||\n matches(result.region, input) ||\n matches(result.country, input) ||\n matches(result.alias, input)\n}\n\nexport const VenueSuggestion = ({ suggestion: venue, query, isHighlighted, ...props }) =>\n <AutocompleteSuggestion icon={<VenueIcon />} primary={getVenueName(venue)} secondary={venue.address} />\n\nexport const VenueInput = ({ helperText, multiple, ...props }) => {\n const Input = multiple ? ReferenceArrayInput : ReferenceInput;\n return <Input\n reference=\"venues\"\n filterToQuery={filterVenue}\n sort={{\n field: ['country', 'region', 'city', 'name'],\n order: ['ASC', 'ASC', 'ASC', 'ASC']\n }}\n perPage={25}\n {...props}\n >\n <AutocompleteInput\n optionText={getVenueName}\n groupBy={venue => getVenueCity(venue, true, true, false)}\n suggestionComponent={VenueSuggestion}\n multiple={multiple}\n helperText={helperText}\n />\n </Input>\n}\n","import React from 'react';\nimport { useTranslate } from 'react-admin';\nimport { useFormState } from 'react-final-form';\n\nimport { OfficeInput } from '../offices/OfficeInput';\nimport { ScheduleInput } from '../schedules/ScheduleInput';\nimport { TeamInput } from '../teams/TeamInput';\nimport { ParticipantInput } from '../participants/ParticipantInput';\nimport { VenueInput } from '../venues/VenueInput';\nimport { SurfaceInput } from '../surfaces/SurfaceInput';\nimport { ListInput } from '../lists/ListInput';\nimport { GameInput } from '../games/GameInput';\n\nexport const TargetInput = props => {\n const translate = useTranslate();\n const { values } = useFormState();\n const { targetType } = values;\n\n switch (targetType) {\n case 'Office':\n return <OfficeInput label={translate('resources.offices.name', 1)} filter={{ type: { neq: 'Historical' } }} {...props} />\n case 'Schedule':\n return <ScheduleInput label={translate('resources.schedules.name', 1)} {...props} />\n case 'Team':\n return <TeamInput label={translate('resources.teams.name', 1)} {...props} />\n case 'Venue':\n return <VenueInput label={translate('resources.venues.name', 1)} {...props} />\n case 'Surface':\n case 'Arena':\n return <SurfaceInput label={translate('resources.surfaces.name', 1)} {...props} />\n case 'Participant':\n return <ParticipantInput label={translate('resources.participants.name', 1)} {...props} />\n case 'List':\n return <ListInput label={translate('resources.lists.name', 1)} {...props} />\n case 'Game':\n return <GameInput label={translate('resources.games.name', 1)} {...props} />\n default:\n return null;\n }\n}\n","import React from 'react';\nimport { useFormState } from 'react-final-form';\n\nimport { OfficeGroupInput, ScheduleGroupInput } from '../groups/GroupInput';\n\nexport const TargetGroupInput = props => {\n const { values } = useFormState();\n const { targetType, targetId } = values;\n\n switch (targetType) {\n case 'Office':\n return <OfficeGroupInput officeId={targetId} {...props} />\n case 'Schedule':\n return <ScheduleGroupInput scheduleId={targetId} {...props} />\n default:\n return null;\n }\n}\n","import React from 'react';\nimport { TextInput, SimpleForm, useRecordContext, useTranslate } from 'react-admin';\nimport { useFormState } from 'react-final-form'\nimport { Grid } from '@material-ui/core'\nimport { Alert } from '@material-ui/lab';\n\nimport Toolbar from '../../common/ra/Toolbar';\nimport SwitchInput from '../../common/inputs/SwitchInput';\n\nimport { ParticipantInput } from '../participants/ParticipantInput';\nimport { ContactInput } from '../contacts/ContactInput';\nimport { TargetInput } from '../targets/TargetInput';\nimport { TargetGroupInput } from '../targets/TargetGroupInput';\nimport { CategoryInput } from '../categories/CategoryInput';\n\nconst OfficeAttributeGrid = props => {\n const { values } = useFormState();\n const { targetType, targetId } = values;\n\n if (targetType !== 'Office' || !targetId) return null;\n return <Grid {...props} />\n}\n\nconst TeamSwitchInput = props => {\n const { values } = useFormState();\n const { targetType } = values;\n\n if (targetType !== 'Team') return null;\n return <SwitchInput {...props} />\n}\n\nconst validate = (values, isLegacy) => {\n const errors = {};\n\n if (!isLegacy && !values.participantId) errors.participantId = 'ra.validation.required'\n if (isLegacy && !values.email) errors.email = 'ra.validation.required'\n\n return errors;\n}\n\nconst inputProps = {\n resource: 'notifications',\n basePath: '/notifications',\n variant: 'outlined',\n margin: 'none',\n fullWidth: true,\n}\n\nexport default ({ showContact = true, ...props }) => {\n const notification = useRecordContext(props);\n const translate = useTranslate(props)\n const { id, email, participantId } = props.initialValues || {}\n const legacy = id && email && !participantId\n\n const origin = notification?.origin || props.initialValues?.origin\n\n return <SimpleForm toolbar={<Toolbar />} validate={values => validate(values, legacy)} {...props}>\n <Grid container spacing={2} fullWidth>\n <Grid item xs={12}>\n <ParticipantInput source=\"participantId\" autoFocus disabled={participantId} helperText=\"resources.notifications.helpers.participantId\" {...inputProps} />\n </Grid>\n <Grid item xs={12}>\n <TargetInput source=\"targetId\" disabled {...inputProps} />\n </Grid>\n {showContact && !!participantId && <Grid item xs={12}>\n <ContactInput source=\"contactId\" filter={{ participantId, type: 'Email' }} helperText=\"resources.notifications.helpers.contactId\" {...inputProps} />\n </Grid>}\n {legacy && <Grid item xs={12}>\n <TextInput source=\"email\" disabled helperText=\"resources.notifications.helpers.email\" {...inputProps} />\n </Grid>}\n\n <Grid item xs={12} spacing={2}>\n <SwitchInput source=\"scheduling\" defaultValue={false} helperText=\"resources.notifications.helpers.scheduling\" format={Boolean} parse={Boolean} {...inputProps} />\n <TeamSwitchInput source=\"activities\" defaultValue={false} helperText=\"resources.notifications.helpers.activities\" format={Boolean} parse={Boolean} {...inputProps} />\n <SwitchInput source=\"assigning\" defaultValue={false} helperText=\"resources.notifications.helpers.assigning\" format={Boolean} parse={Boolean} {...inputProps} />\n <SwitchInput source=\"gameReport\" defaultValue={false} helperText=\"resources.notifications.helpers.gameReport\" format={Boolean} parse={Boolean} {...inputProps} />\n <SwitchInput source=\"majorPenalty\" defaultValue={false} helperText=\"resources.notifications.helpers.majorPenalty\" format={Boolean} parse={Boolean} {...inputProps} />\n <SwitchInput source=\"suspension\" defaultValue={false} helperText=\"resources.notifications.helpers.suspension\" format={Boolean} parse={Boolean} {...inputProps} />\n <SwitchInput source=\"drafts\" defaultValue={false} helperText=\"resources.notifications.helpers.drafts\" format={Boolean} parse={Boolean} {...inputProps} />\n </Grid>\n\n {origin === 'Role' && <Grid item xs={12}>\n <Alert severity=\"info\">\n {translate('resources.notifications.alerts.role_origin')}\n </Alert>\n </Grid>}\n\n <OfficeAttributeGrid item xs={12}>\n <CategoryInput\n source=\"categoryIds\"\n select\n multiple\n allowEmpty\n emptyLabel=\"All\"\n helperText=\"resources.notifications.helpers.categoryIds\"\n disabled={['RosterMember', 'Role'].includes(origin)}\n {...inputProps}\n />\n </OfficeAttributeGrid>\n <Grid item xs={12}>\n <TargetGroupInput\n source=\"groupIds\"\n select\n multiple\n allowEmpty\n helperText=\"resources.notifications.helpers.groupIds\"\n disabled={['RosterMember', 'Role'].includes(origin)}\n {...inputProps}\n />\n </Grid>\n </Grid>\n </SimpleForm>\n}\n","import React, { Fragment, useState } from 'react';\nimport { useRecordContext, useTranslate } from 'react-admin';\nimport { Button } from '@material-ui/core';\nimport { Add } from '@material-ui/icons';\n\nimport { isAuthorized } from '../../common/Authorize';\nimport { DialogDatagrid } from '../../common/dialogs/DialogDatagrid';\nimport { CreateResourceDialog, EditResourceDialog } from '../../common/dialogs/ResourceDialog';\n\nimport NotificationForm from './NotificationForm';\n\nconst AddNotificationDialog = props =>\n <CreateResourceDialog label=\"resources.notifications.actions.add\" resource=\"notifications\" basePath=\"/notifications\" {...props}>\n <NotificationForm />\n </CreateResourceDialog>\n\nconst EditNotificationDialog = props => {\n const notification = useRecordContext(props);\n\n const id = (notification?.id) || (props.initialValues?.id);\n const exists = id && !String(id).startsWith(\"_\");\n const ResourceDialog = exists ? EditResourceDialog : CreateResourceDialog;\n const canDelete = exists && notification?.origin === 'Manual' && isAuthorized(notification, 'notifications', 'remove')\n\n return <ResourceDialog label=\"resources.notifications.labels.update_source\" resource=\"notifications\" basePath=\"/notifications\" {...props} canDelete={canDelete}>\n <NotificationForm />\n </ResourceDialog>\n}\n\nexport const AddNotificationButton = ({ size, variant, ...props }) => {\n const [ isOpen, setOpen ] = useState(false);\n const translate = useTranslate();\n return <>\n <Button color=\"primary\" size={size} variant={variant} startIcon={<Add />} onClick={() => setOpen(true)}>{translate('resources.notifications.actions.add')}</Button>\n <AddNotificationDialog isOpen={isOpen} handleClose={() => setOpen(false)} {...props} />\n </>\n}\n\nexport const NotificationDatagrid = props => <DialogDatagrid dialog={EditNotificationDialog} {...props} />\n","import React from 'react';\nimport { TextField, useListContext, useRecordContext, useTranslate } from 'react-admin';\nimport { makeStyles, Tooltip, Typography } from '@material-ui/core';\nimport { InfoOutlined } from '@material-ui/icons';\n\nimport FunctionField from '../../common/fields/FunctionField';\nimport { ParticipantField } from '../participants/ParticipantField';\nimport { TargetField } from '../targets/TargetField';\nimport { TargetTypeField } from '../targets/TargetTypeField';\nimport { CategoriesField } from '../categories/CategoriesField';\nimport { GroupsField } from '../groups/GroupsField';\nimport { SeasonField } from '../seasons/SeasonField';\n\nimport { NotificationDatagrid } from './NotificationModal'\n\nconst useStyles = makeStyles(theme => ({\n originLabel: {\n display: 'flex',\n alignItems: 'center',\n gap: theme.spacing(1),\n }\n}))\n\nconst DestinationField = ({ showContact, ...props }) => {\n const notification = useRecordContext(props);\n\n if (!notification) return null;\n if (!notification.participantId) return <TextField source=\"email\" {...props} />\n return <ParticipantField {...props} source=\"participantId\" />\n}\n\nconst TypesField = props => {\n return <FunctionField {...props} render={(notification, source, resource, translate) => {\n const types = [\n notification.scheduling && translate('resources.notifications.fields.scheduling'),\n notification.activities && translate('resources.notifications.fields.activities'),\n notification.assigning && translate('resources.notifications.fields.assigning'),\n notification.gameReport && translate('resources.notifications.fields.gameReport'),\n notification.majorPenalty && translate('resources.notifications.fields.majorPenalty'),\n notification.suspension && translate('resources.notifications.fields.suspension'),\n notification.drafts && translate('resources.notifications.fields.drafts'),\n ].filter(Boolean)\n\n return types.length ? types.join(', ') : translate('ra.input.autocomplete.none')\n }} />\n}\n\nconst OriginLabel = () => {\n const classes = useStyles();\n const translate = useTranslate();\n\n return <div className={classes.originLabel}>\n {translate('resources.notifications.fields.origin')}\n <Tooltip title={<Typography variant=\"body2\">{translate('resources.notifications.helpers.origin')}</Typography>}>\n <InfoOutlined color=\"primary\" fontSize=\"small\" />\n </Tooltip>\n </div>\n}\n\nconst OriginField = props => {\n return <FunctionField {...props}\n render={(notification, source, resource, translate) => {\n return translate(`resources.notifications.values.origin.${notification.origin}`)\n }}\n />\n}\n\nconst has = (ids, data, property) =>\n ids?.some(id => data?.[id]?.[property]?.length > 0)\n\nexport const NotificationGrid = ({ showTarget = false, showParticipant = true, showSeason = true, ...props }) => {\n const { ids = [], data } = useListContext(props);\n const translate = useTranslate();\n\n const showCategories = has(ids, data, 'categoryIds')\n const showGroups = has(ids, data, 'groupIds')\n\n return <NotificationDatagrid size=\"medium\">\n <OriginField source=\"origin\" sortable={false} label={<OriginLabel />} />\n {showTarget && <TargetTypeField source=\"targetType\" label=\"\" />}\n {showTarget && <TargetField source=\"targetId\" />}\n {showParticipant && <DestinationField source=\"participantId\" />}\n <TypesField label={translate('resources.notifications.labels.types')} />\n {showCategories && <CategoriesField source=\"categoryIds\" emptyText=\"ra.message.all\" />}\n {showGroups && <GroupsField source=\"groupIds\" emptyText=\"ra.message.all\" showType />}\n {showSeason && <SeasonField source=\"seasonId\" />}\n </NotificationDatagrid>\n}\n","import React from 'react';\nimport { useRecordContext } from 'react-admin';\nimport { NotificationsOutlined } from '@material-ui/icons';\n\nimport ListCard from '../../../common/cards/ListCard';\n\nimport { NotificationGrid } from '../../notifications/NotificationGrid';\nimport { AddNotificationButton } from '../../notifications/NotificationModal';\n\nexport default props => {\n const schedule = useRecordContext(props);\n\n return <ListCard\n title=\"resources.notifications.labels.card.title\"\n subtitle=\"resources.notifications.labels.card.subtitles.schedule\"\n icon={<NotificationsOutlined />}\n collapsable\n reference=\"notifications\"\n target=\"schedules\"\n sort={{ field: 'email', order: 'ASC' }}\n addButton={<AddNotificationButton initialValues={{ targetType: 'Schedule', targetId: schedule?.id }} />}\n >\n <NotificationGrid />\n </ListCard>\n}\n","import React from 'react';\nimport { SimpleForm } from 'react-admin';\nimport { Grid } from '@material-ui/core'\n\nimport Toolbar from '../../common/ra/Toolbar';\nimport { TargetInput } from '../targets/TargetInput';\nimport { TargetGroupInput } from '../targets/TargetGroupInput';\nimport { OfficeInput } from '../offices/OfficeInput';\n\nconst validate = values => {\n const errors = {};\n\n if (!values.targetType) errors.targetId = 'resources.assignTargets.validations.missing_type'\n if (!values.targetId) errors.targetId = 'ra.validation.required'\n if (!values.officeId) errors.officeId = 'ra.validation.required'\n\n return errors;\n}\n\nconst inputProps = {\n resource: 'assignTargets',\n basePath: '/assignTargets',\n variant: 'outlined',\n margin: 'none',\n fullWidth: true,\n}\n\nexport const AssignTargetForm = props =>\n <SimpleForm toolbar={<Toolbar />} validate={validate} {...props}>\n <Grid container spacing={2} fullWidth>\n <Grid item xs={12}>\n <TargetInput source=\"targetId\" disabled={props.initialValues?.targetId} {...inputProps} />\n </Grid>\n <Grid item xs={12}>\n <TargetGroupInput source=\"groupIds\" helperText=\"ra.message.optional\" multiple {...inputProps} />\n </Grid>\n <Grid item xs={12}>\n <OfficeInput source=\"officeId\" {...inputProps} />\n </Grid>\n </Grid>\n </SimpleForm>\n","import React, { useState } from 'react';\nimport { useTranslate } from 'react-admin';\nimport { Button } from '@material-ui/core';\nimport { Add } from '@material-ui/icons';\n\nimport { DialogDatagrid } from '../../common/dialogs/DialogDatagrid';\nimport { CreateResourceDialog, EditResourceDialog } from '../../common/dialogs/ResourceDialog';\n\nimport { AssignTargetForm } from './AssignTargetForm';\n\nconst AddAssignTargetDialog = props =>\n <CreateResourceDialog label=\"resources.assignTargets.actions.add\" resource=\"assignTargets\" basePath=\"/assignTargets\" {...props}>\n <AssignTargetForm />\n </CreateResourceDialog>\n\nconst EditAssignTargetDialog = props =>\n <EditResourceDialog label=\"resources.assignTargets.labels.edit\" resource=\"assignTargets\" basePath=\"/assignTargets\" {...props}>\n <AssignTargetForm />\n </EditResourceDialog>\n\nexport const AddAssignTargetButton = ({ size, variant, ...props }) => {\n const [ isOpen, setOpen ] = useState(false);\n const translate = useTranslate();\n return <>\n <Button color=\"primary\" size={size} variant={variant} startIcon={<Add />} onClick={() => setOpen(true)}>{translate('resources.assignTargets.labels.add_override')}</Button>\n <AddAssignTargetDialog isOpen={isOpen} handleClose={() => setOpen(false)} {...props} />\n </>\n}\n\nexport const AssignTargetDatagrid = props => <DialogDatagrid dialog={EditAssignTargetDialog} {...props} />\n","import React from 'react';\nimport { useListContext } from 'react-admin';\n\nimport Toolbar from '../../common/ra/Toolbar';\n\nimport { OfficeField } from '../offices/OfficeField';\nimport { TargetField } from '../targets/TargetField';\nimport { TargetTypeField } from '../targets/TargetTypeField';\nimport { GroupsField } from '../groups/GroupsField';\n\nimport { AssignTargetDatagrid } from './AssignTargetModal';\n\nexport const AssignTargetGrid = props => {\n const { ids = [], data } = useListContext(props);\n const showGroups = ids?.some(id => {\n const groupIds = data?.[id]?.groupIds;\n return groupIds != null && groupIds.length > 0;\n })\n\n return <AssignTargetDatagrid size=\"medium\" toolbar={<Toolbar />} {...props}>\n <TargetTypeField source=\"targetType\" label=\"\" />\n <TargetField source=\"targetId\" />\n {showGroups && <GroupsField source=\"groupIds\" showType />}\n <OfficeField source=\"officeId\" filter={{ isAssigner: true }} />\n </AssignTargetDatagrid>\n}\n","import React from 'react';\nimport { Pagination, useRecordContext } from 'react-admin';\nimport { SupervisorAccount } from '@material-ui/icons';\n\nimport ListCard from '../../../common/cards/ListCard';\nimport { isAuthorized } from '../../../common/Authorize';\n\nimport { AssignTargetGrid } from '../../assignTargets/AssignTargetGrid';\nimport { AddAssignTargetButton } from '../../assignTargets/AssignTargetModal';\n\nexport default props => {\n const schedule = useRecordContext(props);\n\n const canAddOverride = isAuthorized(schedule, 'assignTargets', 'create', true);\n return <ListCard\n title=\"resources.assignTargets.labels.card.title\"\n subtitle=\"resources.assignTargets.labels.card.subtitle\"\n icon={<SupervisorAccount />}\n collapsable\n reference=\"assignTargets\"\n target=\"targetId\"\n filter={{ targetType: 'Schedule' }}\n sort={{ field: 'id', order: 'ASC' }}\n pagination={<Pagination />}\n addLabel={false}\n addButton={canAddOverride && <AddAssignTargetButton initialValues={{ targetType: 'Schedule', targetId: schedule?.id }} />}\n >\n <AssignTargetGrid rowClick={false} />\n </ListCard>\n}\n","import React from 'react';\nimport { ReferenceField, TextField } from 'react-admin';\n\nexport const AccountField = props =>\n <ReferenceField basePath=\"/accounts\" resource=\"accounts\" reference=\"accounts\" link=\"show\" {...props}>\n <TextField {...props} source=\"email\" />\n </ReferenceField>\n","import React from 'react';\nimport { ReferenceField } from 'react-admin';\n\nimport { TextLocaleField } from '../../common/fields/TextLocaleField';\n\nexport const RoleField = ({ variant = 'body2', ...props }) =>\n <ReferenceField reference=\"roles\" link={false} {...props}>\n <TextLocaleField source=\"name\" variant={variant} />\n </ReferenceField>\n\nRoleField.defaultProps = {\n addLabel: true,\n}\n","import React from 'react';\nimport { ReferenceInput, useTranslate, useLocale } from 'react-admin';\nimport { useFormState } from 'react-final-form';\nimport { useSelector } from 'react-redux';\n\nimport { translateApiProperty } from '@hisports/common';\n\nimport AutocompleteInput from '../../common/inputs/AutocompleteInput';\nimport AutocompleteSuggestion from '../../common/inputs/AutocompleteSuggestion'\n\nconst useDescription = (source, defaultText) => {\n const roles = useSelector(state => state.admin.resources.roles.data);\n const { values } = useFormState();\n\n const roleId = values[source];\n if (!roleId || !roles) return defaultText;\n\n const role = roles[roleId]\n return role ? role.description : defaultText;\n}\n\nconst RoleSuggestion = ({ suggestion: role, filter }) => {\n const locale = useLocale();\n return <AutocompleteSuggestion\n primary={translateApiProperty(role, 'name', locale)}\n secondary={translateApiProperty(role, 'description', locale)}\n />\n}\n\nexport const RoleInput = ({ helperText: defaultText, ...props }) => {\n const locale = useLocale();\n const translate = useTranslate();\n const helperText = useDescription(props.source, defaultText);\n return <ReferenceInput\n reference=\"roles\"\n sort={{ field: 'name', order: 'ASC' }}\n filterToQuery={() => null}\n {...props}\n >\n <AutocompleteInput\n optionText={role => translateApiProperty(role, 'name', locale)}\n suggestionComponent={RoleSuggestion}\n helperText={helperText}\n groupBy={({ context }) => translate(`resources.permissions.values.context.${context}`)} />\n </ReferenceInput>\n}\n","import React from 'react';\nimport { ReferenceInput } from 'react-admin';\n\nimport AutocompleteInput from '../../common/inputs/AutocompleteInput';\nimport AutocompleteSuggestion from '../../common/inputs/AutocompleteSuggestion'\nimport { AccountIcon } from '../icons';\n\nconst filterAccount = email => ({ email })\n\nconst AccountSuggestion = ({ suggestion: account, query, isHighlighted, ...props }) =>\n <AutocompleteSuggestion icon={<AccountIcon />} primary={account.email} />\n\nexport const AccountInput = ({ helperText, ...props }) =>\n <ReferenceInput\n reference=\"accounts\"\n filterToQuery={filterAccount}\n sort={{\n field: 'email',\n order: 'ASC'\n }}\n perPage={25}\n {...props}\n >\n <AutocompleteInput\n optionText=\"email\"\n suggestionComponent={AccountSuggestion}\n helperText={helperText}\n emptyOptionsText=\"resources.accounts.messages.enter_email\"\n />\n </ReferenceInput>\n","import React, { useRef } from 'react';\nimport { SimpleForm, useTranslate } from 'react-admin';\nimport { Grid } from '@material-ui/core';\nimport { useFormState } from 'react-final-form';\nimport { useSelector } from 'react-redux';\nimport createCalculator from 'final-form-calculate';\n\nimport Toolbar from '../../common/ra/Toolbar';\nimport { InlineDateInput } from '../../common/inputs/DateInput';\nimport SwitchInput from '../../common/inputs/SwitchInput';\n\nimport { RoleInput } from '../roles/RoleInput';\nimport { TargetInput } from '../targets/TargetInput';\nimport { TargetGroupInput } from '../targets/TargetGroupInput';\nimport { AccountInput } from '../accounts/AccountInput';\nimport { ParticipantInput } from '../participants/ParticipantInput';\nimport { CategoryInput } from '../categories/CategoryInput';\nimport { useBranchSettings } from '../branchOfficeSettings';\n\nconst validate = (values, canUseRole) => {\n const errors = {};\n\n if (!values.principalId) errors.principalId = 'ra.validation.required'\n if (!values.principalType) errors.principalType = 'ra.validation.required'\n if (!values.roleId) errors.roleId = 'ra.validation.required'\n if (!values.targetType) errors.targetType = 'ra.validation.required'\n if (!values.targetId) errors.targetId = 'ra.validation.required'\n\n if (values.roleId && values.targetId && !canUseRole) {\n errors.roleId = 'resources.permissions.validations.role_not_activated';\n }\n\n return errors;\n}\n\nconst PrincipalInput = ({ principalType, ...props }) => {\n const translate = useTranslate();\n if (principalType === 'Account') return <AccountInput label={translate('resources.accounts.name', 1)} {...props} />\n if (principalType === 'Participant') return <ParticipantInput label=\"resources.accounts.fields.participantId\" filter={{ _scope: 'Tenant' }} {...props} />\n return null;\n}\n\nconst OfficeAttributeGrid = props => {\n const { values } = useFormState();\n const { targetType, targetId } = values;\n\n if (targetType !== 'Office' || !targetId) return null;\n return <Grid {...props} />\n}\n\nconst ScopeAttributeGrid = ({ scope, ...props }) => {\n const { values } = useFormState();\n const { roleId } = values;\n\n const role = useSelector(state => state.admin.resources.roles.data?.[roleId])\n if (!role?.scopes.includes(scope)) return null;\n return <Grid {...props} />\n}\n\nconst inputProps = {\n resource: 'permissions',\n basePath: '/permissions',\n variant: 'outlined',\n margin: 'none',\n fullWidth: true,\n}\n\nconst isRoleEnabled = (selectedRole, roleName, branchSettings) => {\n return selectedRole?.name !== roleName || (selectedRole?.name === roleName && branchSettings);\n};\n\nexport const RoleForm = props => {\n const translate = useTranslate();\n // must use ref for roles to get current value, otherwise value in calculator is stale\n const roles = useSelector(store => store.admin.resources.roles.data)\n const rolesRef = useRef({});\n rolesRef.current = roles;\n\n const officeIdRef = useRef();\n const selectedRoleRef = useRef();\n\n const { data: branchSettings } = useBranchSettings(officeIdRef.current);\n const canUseRole = isRoleEnabled(selectedRoleRef.current, 'discipline-committee', branchSettings?.ff_suspension_disciplines);\n\n // decorators must be wrapped in useRef otherwise SimpleForm prop will register duplicates\n // this bug seems to be triggered by use of hooks (useSelector)\n const decorators = useRef([createCalculator({\n field: 'roleId',\n updates: {\n targetType: (roleId, values, prevValues) => {\n const role = rolesRef.current[roleId];\n if (!role) return;\n selectedRoleRef.current = role;\n return role.targetType;\n }\n }\n }, {\n field: 'targetType',\n isEqual(next, prev) {\n if (typeof prev === 'undefined') return true; // ignored\n return next === prev;\n },\n updates: {\n targetId: () => {},\n categoryIds: () => {},\n groupIds: () => {},\n }\n }, {\n field: 'targetId',\n isEqual(next, prev) {\n officeIdRef.current = next;\n if (typeof prev === 'undefined') return true; // ignored\n return next === prev;\n },\n updates: {\n groupIds: () => {},\n }\n })])\n\n const { id, principalType, principalId, targetType, targetId } = props.initialValues || {};\n const principalDisabled = id || principalId;\n const targetDisabled = id || targetId;\n const legacy = id && principalType !== 'Participant';\n\n return <SimpleForm toolbar={<Toolbar />} decorators={decorators.current} validate={(v) => validate(v, canUseRole)} {...props}>\n <Grid container spacing={2} fullWidth>\n <Grid item xs={12}>\n <PrincipalInput\n source=\"principalId\"\n principalType={principalType}\n disabled={principalDisabled}\n helperText={legacy ? translate('resources.permissions.helpers.principalId') : ''}\n {...inputProps}\n />\n </Grid>\n <Grid item xs={12}>\n <RoleInput source=\"roleId\" filter={{ targetType }} {...inputProps} />\n </Grid>\n\n <Grid item xs={12}>\n <TargetInput source=\"targetId\" disabled={targetDisabled} allowEmpty {...inputProps} />\n </Grid>\n\n <OfficeAttributeGrid item xs={12}>\n <CategoryInput source=\"categoryIds\" select multiple allowEmpty emptyLabel=\"All\" helperText=\"resources.permissions.helpers.categoryIds\" {...inputProps} />\n </OfficeAttributeGrid>\n\n <Grid item xs={12}>\n <TargetGroupInput source=\"groupIds\" allowEmpty multiple filterByCategories={false} helperText=\"resources.permissions.helpers.groupIds\" {...inputProps} />\n </Grid>\n\n <Grid item xs={12}>\n <InlineDateInput source=\"expiry\" helperText=\"resources.permissions.helpers.expiry\" {...inputProps} />\n </Grid>\n\n <ScopeAttributeGrid item xs={12} scope=\"stats:reports\">\n <SwitchInput source=\"reportsDisabled\" allowEmpty helperText=\"\" options={{ color: 'secondary' }} {...inputProps} />\n </ScopeAttributeGrid>\n\n <ScopeAttributeGrid item xs={12} scope=\"scoresheets:manage\">\n <SwitchInput source=\"scorekeepingDisabled\" allowEmpty helperText=\"\" options={{ color: 'secondary' }} {...inputProps} />\n </ScopeAttributeGrid>\n </Grid>\n </SimpleForm>\n}\n","import React, { Fragment, useState } from 'react';\nimport { useTranslate } from 'react-admin';\nimport { Button } from '@material-ui/core';\nimport { Add } from '@material-ui/icons';\n\nimport { DialogDatagrid } from '../../common/dialogs/DialogDatagrid';\nimport { CreateResourceDialog, EditResourceDialog } from '../../common/dialogs/ResourceDialog';\n\nimport { RoleForm } from './RoleForm';\n\nconst AddRoleDialog = props =>\n <CreateResourceDialog label=\"resources.permissions.actions.add\" resource=\"permissions\" basePath=\"/permissions\" {...props}>\n <RoleForm />\n </CreateResourceDialog>\n\nconst EditRoleDialog = props =>\n <EditResourceDialog label=\"resources.permissions.labels.edit\" resource=\"permissions\" basePath=\"/permissions\" {...props}>\n <RoleForm />\n </EditResourceDialog>\n\nexport const AddRoleButton = ({ size, variant, ...props }) => {\n const [ isOpen, setOpen ] = useState(false);\n const translate = useTranslate();\n return <>\n <Button color=\"primary\" size={size} variant={variant} startIcon={<Add />} onClick={() => setOpen(true)}>\n {translate('resources.permissions.actions.add')}\n </Button>\n <AddRoleDialog isOpen={isOpen} handleClose={() => setOpen(false)} {...props} />\n </>\n}\n\nexport const RoleDatagrid = props => <DialogDatagrid dialog={EditRoleDialog} {...props} />\n","import React from 'react';\nimport { Datagrid, useListContext, useRecordContext, useTranslate } from 'react-admin';\nimport moment from 'moment';\n\nimport DateField from '../../common/fields/DateField';\nimport NoResults from '../../common/NoResults';\n\nimport { AccountField } from '../accounts/AccountField';\nimport { ParticipantField } from '../participants/ParticipantField';\nimport { TargetField } from '../targets/TargetField';\nimport { TargetTypeField } from '../targets/TargetTypeField';\nimport { GroupsField } from '../groups/GroupsField';\n\nimport { RoleField } from './RoleField';\nimport { RoleDatagrid } from './RoleModal';\nimport { CategoriesField } from '../categories/CategoriesField';\n\nconst PrincipalField = (props) => {\n const role = useRecordContext(props);\n if (!role) return null;\n\n switch (role?.principalType) {\n case 'Account': return <AccountField {...props} />\n case 'Participant': return <ParticipantField {...props} />\n default: return null;\n }\n}\n\nconst ExpiryField = props => {\n const translate = useTranslate();\n const role = useRecordContext(props);\n const expiry = role?.[props.source];\n\n if (expiry && moment.utc(expiry, 'YYYY-MM-DD').isBefore(moment(), 'day')) return translate('resources.permissions.labels.expired');\n return <DateField {...props} />\n}\n\nconst has = (ids, data, property) =>\n ids?.some(id => data?.[id]?.[property]?.length > 0)\n\nexport const RoleGrid = ({ showAccount = true, showOffice = true, showSchedule = false, ...props }) => {\n const { ids = [], data } = useListContext(props);\n\n const showGroups = has(ids, data, 'groupIds');\n const showCategories = has(ids, data, 'categoryIds')\n const showExpiry = has(ids, data, 'expiry');\n\n return <RoleDatagrid size=\"medium\">\n {showOffice && <TargetTypeField source=\"targetType\" allowEmpty label=\"\" />}\n {showOffice && <TargetField source=\"targetId\" allowEmpty />}\n {showAccount && <PrincipalField source=\"principalId\" />}\n <RoleField source=\"roleId\" />\n {showCategories && <CategoriesField source=\"categoryIds\" emptyText=\"ra.message.all\" allowEmpty />}\n {showGroups && <GroupsField source=\"groupIds\" showType emptyText=\"ra.message.all\" allowEmpty />}\n {showExpiry && <ExpiryField source=\"expiry\" format=\"LL\" yearFormat=\"LL\" />}\n </RoleDatagrid>\n}\n\nexport const CommitteeRoleGrid = (props) => {\n const { ids = [], data } = useListContext(props);\n\n const showGroups = has(ids, data, 'groupIds');\n const showCategories = has(ids, data, 'categoryIds')\n const showExpiry = has(ids, data, 'expiry');\n\n return <Datagrid size=\"medium\" empty={<NoResults />}>\n <PrincipalField source=\"principalId\" label=\"resources.participants.fields.name\" />\n <TargetField source=\"targetId\" allowEmpty label=\"resources.permissions.values.targetType.Office\" />\n {showCategories && <CategoriesField source=\"categoryIds\" emptyText=\"ra.message.all\" allowEmpty />}\n {showGroups && <GroupsField source=\"groupIds\" showType emptyText=\"ra.message.all\" allowEmpty />}\n {showExpiry && <ExpiryField source=\"expiry\" format=\"LL\" yearFormat=\"LL\" />}\n </Datagrid>\n}\n","import React from 'react';\nimport { useRecordContext } from 'react-admin';\nimport { VerifiedUserOutlined } from '@material-ui/icons';\n\nimport ListCard from '../../../common/cards/ListCard';\nimport { isAuthorized } from '../../../common/Authorize';\n\nimport { RoleGrid } from '../../roles/RoleGrid';\nimport { AddRoleButton } from '../../roles/RoleModal';\n\nexport default props => {\n const schedule = useRecordContext(props);\n\n const showRoles = isAuthorized(schedule, 'permissions', 'list', true)\n const canAddRoles = isAuthorized(schedule, 'permissions', 'create', true)\n\n if (!showRoles) return null;\n return <ListCard\n title=\"resources.permissions.labels.card.title\"\n subtitle=\"resources.permissions.labels.card.subtitles.schedule\"\n icon={<VerifiedUserOutlined />}\n collapsable\n reference=\"permissions\"\n target=\"schedules\"\n sort={{ field: 'roleId', order: 'ASC' }}\n addButton={canAddRoles && <AddRoleButton initialValues={{ principalType: 'Participant', targetType: 'Schedule', targetId: schedule?.id }} />}\n >\n <RoleGrid showOffice={false} />\n </ListCard>\n}\n","import React from 'react';\nimport { useRecordContext, useTranslate } from 'react-admin';\nimport { Gavel } from '@material-ui/icons';\n\nimport ListCard from '../../../common/cards/ListCard';\nimport { SuspensionStatusInput } from '../../../common/inputs/EnumInputs';\nimport { SuspensionGrid } from '../../scoresheet/suspension/SuspensionGrid';\nimport { TeamInput } from '../../teams/TeamInput';\nimport { ParticipantInput } from '../../participants/ParticipantInput';\nimport { CategoryInput } from '../../categories/CategoryInput';\n\nexport default props => {\n const schedule = useRecordContext(props);\n const translate = useTranslate();\n\n const filters = [\n <ParticipantInput source=\"participantId\" variant=\"outlined\" />,\n <TeamInput source=\"teamId\" variant=\"outlined\" />,\n <CategoryInput source=\"game.categoryId\" label=\"resources.games.fields.categoryId\" variant=\"outlined\" />,\n <SuspensionStatusInput source=\"status\" variant=\"outlined\" multiple />,\n ]\n\n return <ListCard\n title={translate(\"resources.suspensions.name\", 2)}\n icon={<Gavel />}\n basePath=\"/suspensions\"\n resource=\"suspensions\"\n filter={{ 'game.scheduleId': schedule?.id }}\n sort={{ field: ['game.date', 'participant.lastName', 'participant.firstName'], order: ['DESC', 'ASC', 'ASC'] }}\n filters={filters}\n {...props}\n >\n <SuspensionGrid multipleGames rowOptions={{ isRowSelectable: () => false }} />\n </ListCard>\n}\n","import React from 'react';\nimport { ReferenceField } from 'react-admin';\n\nimport { TextLocaleField } from '../../common/fields/TextLocaleField';\n\nexport const InfractionTypeField = ({ variant = 'body2', className, ...props }) => {\n return <ReferenceField basePath=\"/infractionTypes\" resource=\"infractionTypes\" reference=\"infractionTypes\" {...props} link={false}>\n <TextLocaleField source=\"name\" variant={variant} className={className} />\n </ReferenceField>\n}\n\nInfractionTypeField.defaultProps = {\n addLabel: true,\n}\n","import React from 'react';\nimport { ReferenceField } from 'react-admin';\n\nimport { TextLocaleField } from '../../common/fields/TextLocaleField';\n\nexport const RuleField = ({ variant = 'body2', ...props }) => {\n return <ReferenceField basePath=\"/rules\" resource=\"rules\" reference=\"rules\" {...props} link={false}>\n <TextLocaleField source=\"name\" variant={variant} />\n </ReferenceField>\n}\n\nRuleField.defaultProps = {\n addLabel: true,\n}\n","import React from 'react';\nimport { ReferenceField } from 'react-admin';\nimport { Typography, makeStyles } from '@material-ui/core';\n\nimport FunctionField from '../../common/fields/FunctionField';\n\nimport { InfractionTypeField } from './InfractionTypeField'\nimport { RuleField } from './RuleField'\n\nconst useStyles = makeStyles((theme) => ({\n type: {\n paddingLeft: theme.spacing(0.5)\n }\n}))\n\nexport const InfractionField = ({ variant = 'body2', ...props }) => {\n const classes = useStyles();\n\n return <ReferenceField basePath=\"/infractions\" resource=\"infractions\" reference=\"infractions\" {...props} link={false}>\n <FunctionField render={infraction => <>\n <Typography variant={variant} display=\"inline\">{infraction.code}</Typography>\n <InfractionTypeField source=\"typeId\" className={classes.type} />\n <Typography variant={variant} color=\"textSecondary\">\n <RuleField source=\"ruleId\" />\n </Typography>\n </>} />\n </ReferenceField>\n}\n\nInfractionField.defaultProps = {\n addLabel: true,\n}\n","import React from 'react';\nimport { Datagrid, ReferenceField, useRecordContext, useTranslate } from 'react-admin';\n\nimport { displayTime, getPenalty, isLegacyRulebookSeason } from '@hisports/scoresheet/src/util';\n\nimport { useSport } from '../../http';\nimport FunctionField from '../../common/fields/FunctionField';\nimport { useLocale } from '../../locale';\nimport { TeamField } from '../teams/TeamField';\nimport { GameField } from '../games/GameField';\nimport { ParticipantField } from '../participants/ParticipantField';\nimport { ScheduleField } from '../schedules/ScheduleField';\nimport { InfractionField } from '../infractions/InfractionField'\n\nconst GamePenaltyField = ({ seasonId, ...props }) => {\n const translate = useTranslate();\n const gamePenalty = useRecordContext();\n const sport = useSport();\n const [ locale ] = useLocale();\n const infractions = [gamePenalty?.meta?.infraction].filter(Boolean)\n const durations = {\n [gamePenalty.duration]: gamePenalty?.meta?.duration\n }\n\n return <FunctionField render={() => {\n return getPenalty(gamePenalty, [], infractions, durations, [], {\n start: translate('resources.scoresheets.labels.start'),\n ended: translate('resources.scoresheets.labels.ended'),\n }, sport, seasonId, locale)\n }} {...props} />\n}\n\nconst GamePenaltyGameTimeField = props => {\n const gamePenalty = useRecordContext();\n const sport = useSport();\n\n if (!gamePenalty?.gameTime) return null\n\n return <FunctionField render={() => {\n return displayTime(gamePenalty.gameTime, sport, false, false)\n }} {...props} />\n}\n\nexport const GamePenaltyGrid = ({ seasonId, multipleGames = false, hideTeam = false, hideParticipant = false, ...props }) => {\n if (!seasonId) return null;\n\n const isLegacy = isLegacyRulebookSeason(seasonId);\n\n return <Datagrid size=\"medium\" {...props}>\n {!hideParticipant && <ParticipantField source=\"participantId\" includeId=\"full\" />}\n {!hideTeam && <TeamField source=\"teamId\" includeId=\"full\" />}\n {multipleGames && <ReferenceField source=\"gameId\" reference=\"games\" resource=\"games\" basePath=\"/games\" label=\"resources.games.fields.scheduleId\" link={false}>\n <ScheduleField source=\"scheduleId\" includeCategory=\"full\" includeType=\"full\" />\n </ReferenceField>}\n {multipleGames && <GameField source=\"gameId\" link=\"scoresheet\" includeDate=\"inline\" includeSurface=\"full\" />}\n {isLegacy\n ? <GamePenaltyField label=\"resources.gamepenalties.fields.infraction\" seasonId={seasonId} />\n : <InfractionField source=\"infractionId\" />\n }\n <GamePenaltyGameTimeField label=\"resources.gamepenalties.fields.gameTime\" />\n\n </Datagrid>\n}\n","import { Button, ButtonGroup, ClickAwayListener, Grow, MenuItem, MenuList, Paper, Popper } from '@material-ui/core';\nimport { ArrowDropDown } from '@material-ui/icons';\nimport React, { useRef, useState } from 'react';\nimport XLSX from 'xlsx';\nimport { downloadCSV, useDataProvider, useListContext, useRecordContext, useTranslate } from 'react-admin';\n\nimport { appName } from '../flags';\nimport { apiClient } from '../http';\n\nconst OPTIONS = {\n officialTransactions: ['details_csv', 'details_xlsx', 'summary_csv', 'summary_xlsx'],\n gamepenalties: ['export_csv', 'export_xlsx']\n}\n\nconst getData = async (resource, dataProvider, filterValues = {}, sort, include, target, targetId) => {\n const filters = { ...filterValues }\n\n if (target && targetId) {\n filters[target] = targetId;\n }\n\n if (resource === 'gamepenalties' && target === 'officeId' && targetId) {\n // remove includeMeta to skip observer\n delete filters._options.includeMeta;\n\n return await apiClient(`/gamepenalties/export`, {\n params: { filter: { where: filters, include } }\n })\n .then(res => res.data)\n }\n\n return await dataProvider.getList(resource, {\n filter: { _include: include, ...filters },\n sort,\n pagination: { page: 1, perPage: 9999 }\n }, { enabled: !!resource })\n .then(res => res.data);\n}\n\nexport const exportFile = (csv, fileName = appName, fileType = 'csv') => {\n switch (fileType) {\n case 'xlsx': {\n const wb = XLSX.read(csv, { type: 'string', raw: true });\n return XLSX.writeFile(wb, `${fileName}.xlsx`, { blankrows: false });\n }\n\n case 'csv':\n default:\n return downloadCSV(csv, fileName);\n }\n}\n\nexport const makeExporter = (exportData, include) => ({ target, showSummary = false, ...props }) => {\n const translate = useTranslate()\n const dataProvider = useDataProvider()\n const record = useRecordContext()\n const { sort, resource, filterValues, filter } = useListContext();\n\n const anchorRef = useRef(null);\n const [open, setOpen] = useState(false);\n\n const displayedOptions = OPTIONS[resource].filter(option => showSummary || !option.includes('summary'))\n\n const exportReport = (report, fileType) => {\n const filters = { ...filterValues, ...filter }\n getData(resource, dataProvider, filters, sort, include, target, record.id)\n .then(data => exportData(data, translate, fileType, report, props))\n };\n\n const handleClick = (index) => {\n const option = OPTIONS[resource][index];\n\n switch (option) {\n case 'export_csv':\n exportReport(null, 'csv');\n break;\n case 'export_xlsx':\n exportReport(null, 'xlsx');\n break;\n case 'summary_csv':\n exportReport('summary', 'csv');\n break;\n case 'summary_xlsx':\n exportReport('summary', 'xlsx');\n break;\n case 'details_csv':\n exportReport('details', 'csv');\n break\n case 'details_xlsx':\n default:\n exportReport('details', 'xlsx');\n break;\n }\n\n setOpen(false);\n }\n\n const handleToggle = () => {\n setOpen((prevOpen) => !prevOpen);\n };\n\n const handleClose = (event) => {\n if (anchorRef.current && anchorRef.current.contains(event.target)) return;\n\n setOpen(false);\n };\n\n return <>\n <ButtonGroup variant=\"text\" color=\"primary\" ref={anchorRef}>\n <Button\n color=\"primary\"\n size=\"small\"\n onClick={handleToggle}\n endIcon={<ArrowDropDown />}\n >\n {translate('ra.action.export')}\n </Button>\n </ButtonGroup>\n <Popper open={open} anchorEl={anchorRef.current} placement=\"bottom-end\" transition style={{ zIndex: '2' }}>\n {({ TransitionProps, placement }) => (\n <Grow\n {...TransitionProps}\n style={{\n transformOrigin: placement === 'bottom' ? 'center top' : 'center bottom',\n }}\n >\n <Paper>\n <ClickAwayListener onClickAway={handleClose}>\n <MenuList id=\"split-button-menu\">\n {displayedOptions.map((option, index) => (\n <MenuItem\n key={option}\n onClick={() => handleClick(index)}\n >\n {translate(`components.exporter.actions.${option}`)}\n </MenuItem>\n ))}\n </MenuList>\n </ClickAwayListener>\n </Paper>\n </Grow>\n )}\n </Popper>\n </>\n}\n","import moment from 'moment-timezone';\nimport Papa from 'papaparse'\n\nimport { displayTime } from '@hisports/scoresheet/src/util';\nimport { FF_PENALTY_SERVED_BY, FF_PENALTY_START_END } from \"@hisports/common/featureFlags\";\nimport { translateApiProperty } from '@hisports/common';\n\nimport { appName } from '../../../flags';\n\nexport default (penalties, translate, sport, isEnabled, locale) => {\n const data = penalties.map(penalty => {\n const { team, game, participant, servedBy, gameTime = null, startTime = null, endTime = null, infraction } = penalty;\n\n const gameDate = game?.date ? moment.utc(game.date, 'YYYY-MM-DD').format('YYYY-MM-DD') : '-';\n let infractionName = translateApiProperty(infraction?.rule, 'name', locale)\n\n if (infraction?.code) {\n infractionName += ` - ${infraction?.code}`\n }\n\n return [\n participant?.firstName,\n participant?.lastName,\n participant?.HCRId,\n team?.name,\n team?.HCRId,\n game?.schedule?.name,\n game?.number,\n gameDate,\n infractionName,\n displayTime(gameTime, sport, true),\n isEnabled(FF_PENALTY_START_END) && displayTime(startTime, sport, true),\n isEnabled(FF_PENALTY_START_END) && displayTime(endTime, sport, true),\n isEnabled(FF_PENALTY_SERVED_BY) && servedBy?.fullName,\n isEnabled(FF_PENALTY_SERVED_BY) && servedBy?.HCRId,\n ].filter(field => field !== false)\n })\n\n const csv = Papa.unparse({\n fields: [\n translate('components.exporter.penalties_exporter.reports.summary.columns.first_name'),\n translate('components.exporter.penalties_exporter.reports.summary.columns.last_name'),\n translate('components.exporter.penalties_exporter.reports.summary.columns.member_id'),\n translate('components.exporter.penalties_exporter.reports.summary.columns.team_name'),\n translate('components.exporter.penalties_exporter.reports.summary.columns.team_id'),\n translate('components.exporter.penalties_exporter.reports.summary.columns.schedule_name'),\n translate('components.exporter.penalties_exporter.reports.summary.columns.game_number'),\n translate('components.exporter.penalties_exporter.reports.summary.columns.game_date'),\n translate('components.exporter.penalties_exporter.reports.summary.columns.infraction'),\n translate('components.exporter.penalties_exporter.reports.summary.columns.game_time'),\n isEnabled(FF_PENALTY_START_END) && translate('components.exporter.penalties_exporter.reports.summary.columns.start_time'),\n isEnabled(FF_PENALTY_START_END) && translate('components.exporter.penalties_exporter.reports.summary.columns.end_time'),\n isEnabled(FF_PENALTY_SERVED_BY) && translate('components.exporter.penalties_exporter.reports.summary.columns.served_by_name'),\n isEnabled(FF_PENALTY_SERVED_BY) && translate('components.exporter.penalties_exporter.reports.summary.columns.served_by_id'),\n ].filter(Boolean),\n data,\n })\n const fileName = `${appName} - ${translate('components.exporter.penalties_exporter.reports.summary.title')} - ${moment().format('YYYY-MM-DD HH:mm')}`;\n return { csv, fileName };\n}\n","\nimport { exportFile, makeExporter } from '../../common/Exporter';\n\nimport summary from './reports/summary';\n\nconst penaltiesExporter = (penalties, translate, fileType = 'csv', reportName, { sport, isEnabled, locale, ...props }) => {\n const report = summary(penalties, translate, sport, isEnabled, locale);\n if (!report) return;\n\n return exportFile(report.csv, report.fileName, fileType);\n};\n\nconst include = [\n { relation: 'team', scope: { scope: 'Tenant' } },\n { relation: 'participant', scope: { scope: 'Tenant' } },\n { relation: 'infraction', scope: {\n scope: 'Tenant',\n include: [{\n relation: 'rule',\n scope: {\n scope: 'Tenant'\n }\n }]\n } },\n { relation: 'servedBy', scope: { scope: 'Tenant' } },\n { relation: 'game', scope: {\n scope: 'Tenant',\n include: [{\n relation: 'schedule',\n scope: {\n scope: 'Tenant',\n }\n }]\n } },\n]\n\nexport default makeExporter(penaltiesExporter, include);\n","import React from 'react';\nimport { useLocale, useRecordContext, useTranslate } from 'react-admin';\nimport { SportsOutlined } from '@material-ui/icons';\n\nimport { isLegacyRulebookSeason } from '@hisports/scoresheet/src/util';\n\nimport { useFlag, useSport } from '../../../http';\nimport ListCard from '../../../common/cards/ListCard';\n\nimport { GamePenaltyGrid } from '../../gamepenalties/GamePenaltyGrid';\nimport { ParticipantInput } from '../../participants/ParticipantInput';\nimport { TeamInput } from '../../teams/TeamInput';\nimport { CategoryInput } from '../../categories/CategoryInput';\nimport PenaltiesExporter from '../../gamepenalties/PenaltiesExporter';\n\nexport default props => {\n const schedule = useRecordContext(props);\n const translate = useTranslate();\n const sport = useSport();\n const isEnabled = useFlag();\n const locale = useLocale();\n\n const isLegacy = isLegacyRulebookSeason(schedule?.seasonId);\n\n const filters = [\n <ParticipantInput source=\"participantId\" variant=\"outlined\" />,\n <TeamInput source=\"teamId\" variant=\"outlined\" />,\n <CategoryInput source=\"game.categoryId\" label=\"resources.games.fields.categoryId\" variant=\"outlined\" />,\n ]\n\n const actions = [\n <PenaltiesExporter target=\"game.scheduleId\" sport={sport} isEnabled={isEnabled} locale={locale} />\n ]\n\n return <ListCard\n title={translate('resources.gamepenalties.name', 2)}\n icon={<SportsOutlined />}\n basePath=\"/gamepenalties\"\n resource=\"gamepenalties\"\n actions={actions}\n filter={{ _options: { includeMeta: isLegacy }, 'game.scheduleId': schedule?.id }}\n sort={{ field: ['game.date', 'participant.lastName', 'participant.firstName'], order: ['DESC', 'ASC', 'ASC'] }}\n filters={filters}\n {...props}\n >\n <GamePenaltyGrid seasonId={schedule?.seasonId} multipleGames rowOptions={{ isRowSelectable: () => false }} />\n </ListCard>\n}\n","import React from 'react';\nimport { NumberField, TextField, useListContext } from \"react-admin\"\n\nimport { parseSequence } from '@hisports/scheduler';\n\nimport FunctionField from '../../common/fields/FunctionField';\n\nimport { GroupField } from '../groups/GroupField';\nimport { ScheduleSequenceDatagrid } from './ScheduleSequenceModal';\n\nexport default ({ ...props }) => {\n const { ids, data } = useListContext(props);\n const showGroup = ids?.some(id => data?.[id]?.groupId != null)\n\n return <ScheduleSequenceDatagrid size=\"medium\" {...props}>\n {showGroup && <GroupField source=\"groupId\" sortable={false} />}\n <FunctionField label=\"resources.schedulesequences.labels.starting_sequence\" render={sequence => parseSequence(sequence)} />\n <TextField source=\"prefix\" />\n <TextField source=\"start\" />\n <TextField source=\"suffix\" />\n <NumberField source=\"current\" />\n </ScheduleSequenceDatagrid>\n}\n","import React from 'react';\nimport { useRecordContext, useTranslate } from 'react-admin';\nimport { useTheme } from '@material-ui/core';\nimport { FormatListNumbered } from '@material-ui/icons';\n\nimport ListCard from '../../../common/cards/ListCard';\nimport { isAuthorized } from '../../../common/Authorize';\nimport { useFocusState } from '../../../common/hooks/hooks';\n\nimport ScheduleSequencesGrid from '../../schedulesequences/ScheduleSequencesGrid';\nimport { AddScheduleSequenceButton } from '../../schedulesequences/ScheduleSequenceModal';\n\n\nexport default props => {\n const translate = useTranslate();\n const schedule = useRecordContext(props);\n const theme = useTheme();\n const { isFocused } = useFocusState('sequence');\n\n const canAddSequence = isAuthorized(schedule, 'schedulesequences', 'create')\n const addButton = canAddSequence && <AddScheduleSequenceButton size=\"small\" initialValues={{ scheduleId: schedule?.id }} />\n\n return <ListCard\n title={translate('resources.schedulesequences.name', 2)}\n icon={<FormatListNumbered />}\n basePath=\"/schedulesequences\"\n resource=\"schedulesequences\"\n filter={{ 'scheduleId': schedule?.id }}\n sort={{ field: ['start'], order: ['ASC'] }}\n addButton={addButton}\n componentProps={{ style: { boxShadow: isFocused ? theme.focusShadow : undefined } }}\n collapsable={!isFocused}\n {...props}\n >\n <ScheduleSequencesGrid />\n </ListCard>\n}\n","import React, { useState } from \"react\";\nimport { useTranslate } from \"react-admin\";\nimport Iframe from \"react-iframe\";\nimport { IntlProvider } from \"react-intl\";\n\nimport { Button, makeStyles, Typography } from \"@material-ui/core\";\nimport FileViewer from \"../../common/fileViewer/FileViewer\";\n\nconst useStyles = makeStyles(theme => ({\n frame: {\n width: '100%',\n height: theme.spacing(60),\n border: '1px black solid'\n },\n}))\n\nexport default ({ url, scheduleId, showIframe = false }) => {\n const translate = useTranslate();\n const classes = useStyles();\n const [ fileOpen, setFileOpen ] = useState(false);\n\n return <>\n {showIframe && <Iframe url={`${url}/svg`} className={classes.frame} />}\n <IntlProvider>\n <Button color=\"primary\" size=\"small\" onClick={() => setFileOpen(true)}>\n <Typography variant=\"inherit\">{translate('resources.schedules.labels.brackets_viewer.open_in_viewer')}</Typography>\n </Button>\n {fileOpen && <FileViewer\n isOpen={fileOpen}\n close={() => setFileOpen(false)}\n fileName={scheduleId}\n fullPath={`${url}/svg`}\n type=\"svg\"\n openInNewTabURL={`${url}/svg`}\n URLToFetchForDownload={`${url}/pdf`} />}\n </IntlProvider></>\n}\n","import React, { Fragment, useState } from 'react';\nimport { SimpleForm, useNotify, useRefresh, useTranslate } from 'react-admin';\nimport { Button, Dialog, DialogContent, DialogContentText, DialogTitle, makeStyles } from '@material-ui/core';\n\nimport { apiClient } from '../../../http';\nimport { DialogFormToolbar } from '../../../common/dialogs/DialogForm';\nimport { ScheduleGroupInput } from '../../groups/GroupInput';\nimport { BracketIcon } from './BracketDialog';\n\nconst useStyles = makeStyles((theme) => ({\n group: {\n marginTop: theme.spacing(2)\n },\n}))\n\nconst inputProps = {\n variant: 'outlined',\n margin: 'normal',\n fullWidth: true\n}\n\nconst validate = (values) => {\n const errors = {};\n\n return errors;\n}\n\nconst Toolbar = ({ handleSubmit, onClose }) => {\n return <DialogFormToolbar\n onCancel={() => onClose(true)}\n handleSubmit={handleSubmit}\n submitLabel=\"ra.action.confirm\"\n />\n}\n\nconst BracketReseedForm = ({ scheduleId, onClose }) => {\n const translate = useTranslate();\n const notify = useNotify();\n const refresh = useRefresh();\n const classes = useStyles();\n\n const handleSave = values => {\n return apiClient(`/schedules/${scheduleId}/reseedBracketGames`, {\n method: 'POST',\n data: {\n groupId: values.groupId\n }\n })\n .then(() => {\n onClose()\n refresh()\n notify('resources.schedules.notifications.bracket_games_reseeded')\n })\n .catch(e => {\n // page error\n if (!e.isAxiosError) {\n notify('ra.page.error_try_again_refresh')\n return;\n }\n\n // validation error\n const { error } = e.response.data;\n if ((error?.status === 422 || error?.statusCode === 422) && error?.message) {\n notify(`resources.schedules.errors.brackets.${error.message}`)\n return;\n }\n\n // api error\n return notify('ra.page.error_try_again')\n })\n }\n\n return <SimpleForm\n component={Fragment}\n validate={validate}\n toolbar={<Toolbar onClose={onClose} />}\n save={handleSave}\n >\n <ScheduleGroupInput className={classes.group} source=\"groupId\" scheduleId={scheduleId} showNone={translate('ra.message.no_group')} label={translate('resources.schedules.labels.group_bracket_reseed')} {...inputProps} />\n </SimpleForm>\n}\n\nexport const BracketReseedButton = ({ size, variant, scheduleId, ...props }) => {\n const translate = useTranslate();\n const [ isOpen, setOpen ] = useState(false);\n\n if (!scheduleId) return null;\n return <>\n <Button color=\"primary\" size={size} variant={variant} startIcon={<BracketIcon />} onClick={() => setOpen(true)}>{translate('resources.schedules.labels.bracket_reseed')}</Button>\n <BracketReseedDialog scheduleId={scheduleId} isOpen={isOpen} onClose={() => setOpen(false)} {...props} />\n </>\n}\n\n\nexport const BracketReseedDialog = ({ scheduleId, isOpen, onClose }) => {\n const translate = useTranslate();\n\n return <Dialog open={isOpen} onClose={onClose} maxWidth=\"md\" fullWidth>\n <DialogTitle>{translate('resources.schedules.labels.reseed_bracket')}</DialogTitle>\n <DialogContent>\n <DialogContentText>{translate('resources.schedules.labels.bracket_reseed_info')}</DialogContentText>\n <BracketReseedForm scheduleId={scheduleId} onClose={onClose} />\n </DialogContent>\n </Dialog>\n}\n","import React from 'react';\nimport { Table, TableBody } from '@material-ui/core';\n\nimport BracketViewer from '../BracketViewer';\n\nimport { BracketReseedButton } from '../../schedules/dialogs/BracketReseedDialog';\nimport { usePermissions } from '../../../http';\n\n\nimport InfoCard from '../../../common/cards/InfoCard';\nimport Row from '../../../common/cards/TableRow';\nimport { getFilteredScopes } from '../../../http/restClient/response';\nimport { isAuthorized } from '../../../common/Authorize';\nimport { useRecordContext } from 'react-admin';\n\nexport default ({ url, scheduleId }) => {\n const record = useRecordContext();\n const permissions = usePermissions();\n\n const filteredScopes = getFilteredScopes(permissions, record?.officeId, record?.scheduleId, false);\n\n const canEditSeeds = isAuthorized(filteredScopes, 'gameBrackets', 'edit')\n\n const headerActions = [\n canEditSeeds && <BracketReseedButton onClick scheduleId={scheduleId} variant=\"inherit\" />\n ].filter(Boolean);\n\n return <InfoCard title=\"resources.gameBrackets.name\" headerAction={headerActions}>\n <Table>\n <TableBody>\n <Row >\n <BracketViewer url={url} scheduleId={scheduleId} showIframe />\n </Row>\n </TableBody>\n </Table>\n </InfoCard>\n}\n","import React, { createContext, useContext, useEffect, useMemo, useState } from 'react'\nimport { GET_LIST, GET_ONE, NumberInput, RecordContextProvider, useLocale, useQuery, useTranslate } from 'react-admin'\nimport { LinearProgress, Table, TableBody as MUITableBody, TableCell, TableHead, TablePagination, TableRow, makeStyles, TableSortLabel, Tooltip, TableContainer, Typography } from '@material-ui/core'\nimport { orderBy } from 'lodash'\nimport { blue } from '@material-ui/core/colors'\nimport { useForm, useFormState } from 'react-final-form'\n\nimport { translateApiProperty } from '@hisports/common'\nimport { groupBy } from '@hisports/common/src/lodash'\n\nimport NoResults from '../../common/NoResults'\nimport FunctionField from '../../common/fields/FunctionField'\nimport { SquareAlert } from '../../common/SquareAlert';\nimport { getGenericLocale } from '../../locale/LocaleProvider'\nimport { PoolField } from '../pools/PoolField'\nimport { useScheduleGroupingType } from '../scheduleSettings'\n\nconst useStyles = makeStyles(theme => ({\n filtersContainer: {\n display: 'flex',\n alignItems: 'center',\n gap: theme.spacing(1),\n padding: theme.spacing(1.5),\n },\n tableContainer: {\n width: '100%',\n overflowX: 'auto',\n },\n table: {\n '& .MuiTableCell-root': {\n paddingInline: theme.spacing(0.75),\n }\n },\n pagination: {\n display: 'flex',\n justifyContent: 'flex-end'\n },\n poolHeader: {\n padding: theme.spacing(1, 2),\n backgroundColor: 'whitesmoke',\n },\n textInput: {\n '& .MuiOutlinedInput-notchedOutline': {\n borderColor: props => props?.warning && theme.palette.warning.main,\n borderWidth: props => props?.warning && theme.spacing(0.25),\n },\n '&:hover .MuiOutlinedInput-notchedOutline': {\n borderColor: props => props?.warning && theme.palette.warning.main,\n borderWidth: props => props?.warning && theme.spacing(0.25),\n },\n '&.Mui-focused .MuiOutlinedInput-notchedOutline': {\n borderColor: props => props?.warning && theme.palette.warning.main,\n borderWidth: props => props?.warning && theme.spacing(0.25),\n },\n }\n}))\n\nconst getPropertyValue = (row, property) => row.stats ? row.stats[property.id] : row[property.id]\n\nconst getSchemaProperties = (schema, rows, querySort) => {\n if (!schema?.schema?.properties) return [];\n\n const properties = Object.keys(schema.schema.properties)\n .map(id => ({ id, ...schema.schema.properties[id] }))\n .filter(property => {\n let { hidden, hideNull } = property.displayOptions || {};\n let missingRowProperty = false;\n if (hidden) return false;\n\n if (querySort && querySort.includes(property.id)) {\n hideNull = false;\n } else {\n missingRowProperty = rows.every(row => {\n const rowProperties = Object.keys(row.stats || row);\n return !rowProperties.includes(property.id);\n });\n }\n\n if (missingRowProperty) return false;\n\n return !(hideNull && rows.every(row => getPropertyValue(row, property) == null))\n })\n\n properties.sort((a, b) => a.displayOptions.order - b.displayOptions.order);\n return properties;\n}\n\nconst formatPrecision = (stat, precision) => {\n return Number(stat).toFixed(precision);\n}\n\nconst formatPercentage = (stat) => {\n if (stat >= 1) return stat;\n const [ , decimal ] = String(stat).split('.');\n return `.${decimal}`\n}\n\nconst formatPlusMinus = (stat) => {\n const style = {\n color: stat === 0 ? undefined : (stat < 0 ? 'red' : 'green'),\n fontSize: 'inherit',\n };\n\n return <Typography style={style}>{stat <= 0 ? stat : `+${stat}`}</Typography>;\n};\n\nconst formatMinutes = (stat) => {\n const minutes = Math.floor(stat);\n const seconds = Math.round((stat % 1) * 60)\n return `${minutes}:${String(seconds).padStart(2, 0)}`\n}\n\nconst format = (value, displayOptions) => {\n const { precision, type } = displayOptions;\n\n if (value == null) return '--'\n\n if (value === true) return '✓';\n\n if (precision) {\n value = formatPrecision(value, precision);\n }\n\n switch (type) {\n case 'percentage': return formatPercentage(value);\n case 'plus-minus': return formatPlusMinus(value);\n case 'minutes': return formatMinutes(value);\n }\n\n return value;\n}\n\nconst sortStats = (data, sortBy, sort, standingsType) => {\n if (standingsType === 'Overall') {\n return orderBy(data, [sortBy], [sort])\n }\n\n const groupedData = groupBy(data, 'poolId');\n return Object.values(groupedData).flatMap(poolData =>\n orderBy(poolData, [sortBy], [sort])\n )\n}\n\nconst filterStats = (row, filters) => {\n const isTeam = filters?.teamId == null || row.teamId === filters.teamId;\n const isGroup = filters?.groupId == null || row.groupId === filters.groupId;\n const isPool = filters?.poolId == null || row.poolId === filters.poolId;\n return isTeam && isGroup && isPool;\n}\n\nconst useScheduleStats = (resource, filter) => useQuery({\n type: GET_LIST,\n resource,\n payload: {\n filter,\n pagination: { page: 1, perPage: 99999 },\n },\n}, { enabled: !!resource })\n\nconst useSchema = schemaId => useQuery({\n type: GET_ONE,\n resource: 'schemas',\n payload: { id: schemaId }\n}, { enabled: !!schemaId })\n\nconst RankHeader = ({ sort, sortBy, createSortHandler, translate, property = 'ranking', hasManualRanking }) => {\n return <TableCell component=\"th\" scope=\"row\" align=\"center\" style={{ backgroundColor: property === sortBy ? blue[50] : undefined, width: 75 }}>\n <TableSortLabel\n active={property === sortBy}\n direction={sortBy === property ? sort : 'asc'}\n onClick={createSortHandler(property)}\n hideSortIcon\n >\n {translate(`components.scheduleStats.labels.${property}${hasManualRanking ? '_og' : ''}`)}\n </TableSortLabel>\n </TableCell>\n}\n\nconst RankInput = ({ row, property, standingsType, source }) => {\n const { values: formValues } = useFormState();\n const { change } = useForm();\n const [ showWarning, setShowWarning ] = useState(false);\n const classes = useStyles({ warning: showWarning });\n\n const originalRank = standingsType === 'Pools' ? row?.poolRanking : row?.ranking;\n const defaultValue = row[property] || originalRank\n\n const groupedFormValues = useMemo(() => {\n // grouped by pools if they exist\n return Object.keys(formValues || {}).reduce((newValues, key) => {\n if (key.startsWith(`${source.split('_')[0]}`)) {\n newValues[key] = formValues[key];\n }\n return newValues;\n }, {})\n }, [formValues, source]);\n\n\n useEffect(() => {\n // set default value on form if it doesn't exist\n if (!Object.keys(groupedFormValues).includes(source)) {\n change(source, defaultValue);\n }\n\n const inputValue = groupedFormValues?.[source];\n if (!inputValue) {\n setShowWarning(false);\n return;\n }\n\n const showWarning = Object.keys(groupedFormValues).some(key => key !== source && groupedFormValues[key] === inputValue);\n setShowWarning(showWarning);\n }, [change, defaultValue, groupedFormValues, source]);\n\n const onChange = (event) => {\n const inputValue = parseInt(event.target.value, 10);\n\n const showWarning = !isNaN(inputValue) && Object.values(groupedFormValues).includes(inputValue);\n setShowWarning(showWarning);\n };\n\n return <NumberInput\n source={source}\n variant=\"outlined\"\n label={false}\n options={{\n InputLabelProps: { shrink: false },\n InputProps: { className: classes.textInput } }}\n helperText=\"\"\n min={1}\n onChange={onChange}\n />\n}\n\nconst RankCell = ({ row, standingsType, schedule, sortBy, property = 'ranking', isFormOpen = false }) => {\n const value = row[property];\n const poolId = (standingsType === 'Pools' && row?.poolId !== null) ? row.poolId : 'Overall';\n\n return <TableCell component=\"th\" scope=\"row\" align=\"center\" style={{ backgroundColor: property === sortBy ? blue[50] : undefined, paddingBlock: isFormOpen ? 0 : undefined }}>\n <RecordContextProvider value={{ [property]: value || '-', ...schedule }}>\n {isFormOpen\n ? <RankInput row={row} property={property} standingsType={standingsType} source={`${poolId}_${row.id}`} />\n : <FunctionField source={property} render={record => record[property]} />\n }\n </RecordContextProvider>\n </TableCell>\n}\n\nconst SortableHeader = ({ properties, renderHeaders, onRequestSort, hidden }) => {\n const { filters, sort, sortBy, manualRanking, manualPoolRanking, isFormOpen } = useScheduleStatsContext();\n const translate = useTranslate();\n const locale = useLocale();\n const classes = useStyles();\n\n const genericLocale = getGenericLocale(locale);\n\n const showManualRanking = manualRanking || manualPoolRanking || isFormOpen;\n const manualRankingProperty = manualPoolRanking ? 'manualPoolRanking' : 'manualRanking';\n const rankingProperty = filters?.standingsType === 'Pools' ? 'poolRanking' : 'ranking';\n\n const createSortHandler = (property) => (event) => {\n onRequestSort(event, property);\n };\n\n if (hidden) return null;\n return <TableHead>\n <TableRow>\n {(showManualRanking) && <RankHeader sort={sort} sortBy={sortBy} createSortHandler={createSortHandler} translate={translate} property={manualRankingProperty} />}\n <RankHeader sort={sort} sortBy={sortBy} createSortHandler={createSortHandler} translate={translate} property={rankingProperty} hasManualRanking={showManualRanking} />\n {renderHeaders && renderHeaders({ sort, sortBy, createSortHandler, translate })}\n {properties.map(property => {\n const { id, displayOptions } = property;\n const description = translateApiProperty(displayOptions, 'description', genericLocale);\n const abbreviation = translateApiProperty(displayOptions, 'abbreviation', genericLocale);\n const active = id === sortBy;\n\n return <TableCell key={id} sortDirection={sortBy === id ? sort : false} align=\"center\" style={{ backgroundColor: sortBy === id ? blue[50] : undefined }}>\n <Tooltip title={description} placement=\"top\">\n <TableSortLabel className={classes.label} active={active} direction={sortBy === id ? sort : 'asc'} onClick={createSortHandler(id)} hideSortIcon>\n {abbreviation}\n </TableSortLabel>\n </Tooltip>\n </TableCell>\n })}\n </TableRow>\n </TableHead>\n}\n\nconst TableBody = ({ data, properties, renderColumns, fixedColumns }) => {\n const { filters, sortBy, schedule, manualRanking, manualPoolRanking, isFormOpen } = useScheduleStatsContext();\n\n const showManualRanking = manualRanking || manualPoolRanking || isFormOpen;\n const manualRankingProperty = manualPoolRanking ? 'manualPoolRanking' : 'manualRanking';\n const rankingProperty = filters?.standingsType === 'Pools' ? 'poolRanking' : 'ranking';\n\n if (!data?.length) return <TableRow>\n <TableCell colSpan={properties.length + (fixedColumns || 0) + (manualRanking ? 1 : 0)}>\n <NoResults />\n </TableCell>\n </TableRow>\n\n return <MUITableBody>\n {data.map((row) => (\n <TableRow key={row.id}>\n {showManualRanking && <RankCell row={row} standingsType={filters?.standingsType} schedule={schedule} sortBy={sortBy} property={manualRankingProperty} isFormOpen={isFormOpen} />}\n <RankCell row={row} standingsType={filters?.standingsType} schedule={schedule} sortBy={sortBy} property={rankingProperty} />\n {renderColumns && renderColumns(row, schedule, sortBy)}\n {properties.map(property => {\n const { id, displayOptions } = property;\n const stat = format(getPropertyValue(row, property), displayOptions);\n return <TableCell key={id} align=\"center\" style={{ backgroundColor: sortBy === id ? blue[50] : undefined }}>{stat}</TableCell>\n })}\n </TableRow>\n ))}\n </MUITableBody>\n}\n\nconst TableContent = ({ data, properties, renderColumns, renderHeaders, handleRequestSort }) => {\n const { schedule, resource, filters } = useScheduleStatsContext();\n const { isPools } = useScheduleGroupingType(schedule?.id);\n const translate = useTranslate();\n const classes = useStyles();\n\n const shouldGroupStats = isPools && resource === 'TeamScheduleStats' && filters.standingsType === 'Pools';\n\n const groupedData = shouldGroupStats\n ? groupBy(data, 'poolId')\n : { Overall: data }\n\n return Object.keys(groupedData)\n .sort((a, b) => {\n const nameA = groupedData[a][0]?.pool?.name;\n const nameB = groupedData[b][0]?.pool?.name;\n\n // Always sort \"Not in Pool\" to the end\n if (!nameA) return 1;\n if (!nameB) return -1;\n\n return nameA.localeCompare(nameB);\n })\n .map(poolId => {\n const poolData = groupedData[poolId];\n return <>\n {shouldGroupStats && <div className={classes.poolHeader}>\n {poolId === 'null' ?\n <Typography variant=\"h6\">{translate('components.scheduleStats.labels.no_pools')}</Typography> :\n <RecordContextProvider value={{ poolId }}>\n <PoolField source=\"poolId\" variant=\"h6\" />\n </RecordContextProvider>}\n </div>\n }\n <Table className={classes.table}>\n <SortableHeader properties={properties} renderHeaders={renderHeaders} onRequestSort={handleRequestSort} hidden={!poolData?.length} />\n <TableBody data={poolData} properties={properties} renderColumns={renderColumns} />\n </Table>\n </>\n })\n}\n\nconst Filters = ({ filterComponents = [] }) => {\n const classes = useStyles();\n const { groupIds, poolIds } = useScheduleStatsContext();\n\n const hasFilters = filterComponents.some(filter => {\n if (filter.key === 'group') return groupIds?.length > 0;\n if (filter.key === 'standings-type') return poolIds?.length > 0;\n return true;\n });\n\n if (!hasFilters) return null;\n return <div className={classes.filtersContainer}>\n {filterComponents}\n </div>\n}\n\nconst ScheduleStatsContext = createContext();\n\nexport const useScheduleStatsContext = () => useContext(ScheduleStatsContext);\n\nexport const ScheduleStatsTable = ({\n resource,\n filter: defaultFilters = {},\n filters: filterComponents,\n sort: defaultSort,\n renderColumns,\n renderHeaders,\n schedule,\n isFormOpen,\n triggerRefetch,\n disablePagination,\n}) => {\n const translate = useTranslate();\n const classes = useStyles();\n const [sortBy, setSortBy] = useState(defaultSort?.field || 'id');\n const [sort, setSort] = useState(defaultSort?.order || 'asc');\n const [page, setPage] = useState(0);\n const [rowsPerPage, setRowsPerPage] = useState(disablePagination ? 99999 : 25);\n const [filters, setFilters] = useState(defaultFilters);\n\n const { data, loading: dataLoading, refetch } = useScheduleStats(resource, {\n scheduleId: schedule?.id,\n type: filters?.type,\n ...(resource === 'TeamScheduleStats' ? { _include: ['pool'] } : {})\n });\n const { data: schema, loading: schemaLoading } = useSchema(data?.[0]?.schemaId);\n\n const filteredData = useMemo(() => data?.filter(row => filterStats(row, filters)), [data, filters]);\n const sortedData = useMemo(() => {\n const sortedStats = sortStats(filteredData, sortBy, sort, filters.standingsType);\n return sortedStats.slice(page * rowsPerPage, page * rowsPerPage + rowsPerPage);\n }, [filteredData, sortBy, sort, page, rowsPerPage, filters.standingsType]);\n\n const hasManualRanking = useMemo(() => data?.some(row => row.manualRanking != null) && filters?.standingsType === 'Overall', [data, filters.standingsType]);\n const hasManualPoolRanking = useMemo(() => data?.some(row => row.manualPoolRanking != null) && filters?.standingsType === 'Pools', [data, filters.standingsType]);\n\n useEffect(() => {\n if (!triggerRefetch) return;\n refetch();\n }, [refetch, triggerRefetch]);\n\n useEffect(() => {\n // reset to initial sort\n setSortBy(defaultSort?.field || 'id');\n setSort(defaultSort?.order || 'asc');\n\n if (hasManualRanking || hasManualPoolRanking) {\n setSortBy(hasManualRanking ? 'manualRanking' : 'manualPoolRanking');\n setSort('asc');\n } else if (filters?.standingsType === 'Pools') {\n setSortBy('poolRanking');\n setSort('asc');\n }\n }, [hasManualRanking, hasManualPoolRanking, filters?.standingsType, defaultSort?.field, defaultSort?.order]);\n\n const properties = getSchemaProperties(schema, data);\n\n const handleRequestSort = (event, property) => {\n const isDesc = sortBy === property && sort === 'desc';\n const isRankingProperty = property.toLowerCase().includes('ranking');\n const newSort = isRankingProperty && sortBy !== property ? 'asc' : (isDesc ? 'asc' : 'desc');\n\n setSort(newSort);\n setSortBy(property);\n setPage(0);\n };\n\n const handleChangePage = (event, newPage) => {\n setPage(newPage);\n };\n\n const handleChangeRowsPerPage = (event) => {\n setRowsPerPage(parseInt(event.target.value, 10));\n setPage(0);\n };\n\n const context = useMemo(() => ({\n resource,\n schedule,\n teamIds: data?.map(row => row.teamId).filter(Boolean),\n groupIds: data?.map(row => row.groupId).filter(Boolean),\n poolIds: data?.map(row => row.poolId).filter(Boolean),\n manualPoolRanking: hasManualPoolRanking,\n manualRanking: hasManualRanking,\n isFormOpen,\n page,\n sort,\n sortBy,\n filters,\n setPage,\n setSort,\n setSortBy,\n setFilters\n }), [resource, data, schedule, filters, page, sortBy, sort, hasManualRanking, hasManualPoolRanking, isFormOpen]);\n\n const loading = dataLoading || schemaLoading;\n const showManualRankingAlert = hasManualRanking || hasManualPoolRanking || isFormOpen;\n\n return (\n <ScheduleStatsContext.Provider value={context}>\n {loading\n ? <LinearProgress />\n : <>\n {showManualRankingAlert && <SquareAlert severity=\"warning\">{translate('components.scheduleStats.alerts.manual_standings')}</SquareAlert>}\n <Filters filterComponents={filterComponents} />\n <TableContainer className={classes.tableContainer}>\n <TableContent\n data={sortedData}\n properties={properties}\n renderColumns={renderColumns}\n renderHeaders={renderHeaders}\n handleRequestSort={handleRequestSort}\n />\n </TableContainer>\n {!disablePagination && <TablePagination\n className={classes.pagination}\n count={filteredData?.length}\n page={page}\n rowsPerPageOptions={[10, 25, 50]}\n rowsPerPage={rowsPerPage}\n onPageChange={handleChangePage}\n onRowsPerPageChange={handleChangeRowsPerPage}\n />}\n </>}\n </ScheduleStatsContext.Provider>\n )\n}\n","import React from \"react\";\nimport { GET_LIST, useQuery, useTranslate } from \"react-admin\";\nimport { TextField, makeStyles, MenuItem } from \"@material-ui/core\";\nimport { Autocomplete } from \"@material-ui/lab\";\nimport { useForm } from \"react-final-form\";\n\nimport { TeamSuggestion } from '../teams/TeamInput';\nimport { useScheduleStatsContext } from \"./ScheduleStatsTable\";\n\nconst inputProps = {\n variant: 'outlined',\n margin: 'dense',\n}\n\nconst menuProps = {\n getContentAnchorEl: null,\n anchorOrigin: {\n vertical: 'bottom',\n horizontal: 'left',\n },\n transformOrigin: {\n vertical: 'top',\n horizontal: 'left',\n },\n}\n\nconst useStyles = makeStyles(theme => ({\n input: {\n minWidth: theme.spacing(24),\n },\n}));\n\nconst usePools = (poolIds) => useQuery({\n type: GET_LIST,\n resource: 'pools',\n payload: {\n filter: { id: { inq: poolIds } },\n pagination: { page: 1, perPage: 99999 },\n },\n}, { enabled: poolIds?.length > 0 })\n\nconst useGroups = (groupIds) => useQuery({\n type: GET_LIST,\n resource: 'groups',\n payload: {\n filter: { id: { inq: groupIds } },\n pagination: { page: 1, perPage: 99999 },\n },\n}, { enabled: groupIds?.length > 0 })\n\nconst useTeams = (teamIds) => useQuery({\n type: GET_LIST,\n resource: 'teams',\n payload: {\n filter: { id: { inq: teamIds } },\n pagination: { page: 1, perPage: 99999 },\n },\n}, { enabled: teamIds?.length > 0 })\n\nconst NoOptionsText = (loading) => {\n const translate = useTranslate();\n return loading ? translate('ra.page.loading') : translate('ra.navigation.no_results')\n}\n\nexport const StandingsTypeSelect = ({ handleStandingsType }) => {\n const { filters, setFilters, setSortBy, setSort, setPage, poolIds } = useScheduleStatsContext();\n const translate = useTranslate();\n const { reset } = useForm();\n const classes = useStyles();\n\n const handleTypeChange = (event) => {\n const { value } = event.target;\n\n if (value !== filters?.standingsType) {\n setSortBy('ranking');\n setSort('asc');\n reset();\n }\n\n setPage(0);\n setFilters(prev => ({ ...prev, poolId: null, standingsType: value }));\n handleStandingsType(value);\n };\n\n if (!poolIds?.length) return null;\n\n return <TextField\n className={classes.input}\n label={translate(\"components.scheduleStats.labels.standingsType\")}\n select\n value={filters?.standingsType}\n onChange={handleTypeChange}\n SelectProps={{\n MenuProps: menuProps\n }}\n {...inputProps}\n >\n <MenuItem value=\"Overall\">{translate(\"components.scheduleStats.values.standingsType.Overall\")}</MenuItem>\n <MenuItem value=\"Pools\">{translate(\"components.scheduleStats.values.standingsType.Pools\")}</MenuItem>\n </TextField>\n}\n\nexport const GroupSelect = () => {\n const { groupIds, filters, setFilters, setPage } = useScheduleStatsContext();\n const { data: groups, loading } = useGroups(groupIds);\n const translate = useTranslate();\n const classes = useStyles();\n\n const handleGroupChange = (event, value) => {\n setPage(0);\n setFilters(prev => ({ ...prev, groupId: value?.id }));\n };\n\n if (!groupIds?.length) return null;\n\n const value = groups?.find(group => group.id === filters?.groupId) || null;\n\n return <Autocomplete\n value={value}\n options={groups || []}\n getOptionLabel={(option) => option.name}\n noOptionsText={<NoOptionsText loading={loading} />}\n renderInput={(params) => <TextField {...params} className={classes.input} label={translate('resources.groups.name', 1)} {...inputProps} />}\n onChange={handleGroupChange}\n />\n}\n\nexport const PoolSelect = () => {\n const { poolIds, filters, setFilters, setPage } = useScheduleStatsContext();\n const { data: pools } = usePools(poolIds);\n const translate = useTranslate();\n const classes = useStyles();\n\n const handlePoolChange = (event) => {\n const { value } = event.target;\n\n setPage(0);\n setFilters(prev => ({ ...prev, poolId: value?.id }));\n };\n\n if (!poolIds?.length || filters?.standingsType === 'Pools') return null;\n\n const value = pools?.find(pool => pool.id === filters?.poolId) || \"\";\n\n return <TextField\n className={classes.input}\n label={translate(\"resources.pools.name\", 2)}\n select\n value={value}\n onChange={handlePoolChange}\n SelectProps={{\n MenuProps: menuProps\n }}\n {...inputProps}\n >\n {pools?.map(pool => <MenuItem key={pool.id} value={pool}>{pool.name}</MenuItem>)}\n {value && <MenuItem value={{ id: null }}><em>{translate('ra.action.clear')}</em></MenuItem>}\n </TextField>\n}\n\nexport const ScheduleTeamSelect = () => {\n const { teamIds, filters, setFilters, setPage } = useScheduleStatsContext();\n const { data: scheduleTeams, loading } = useTeams(teamIds);\n const translate = useTranslate();\n const classes = useStyles();\n\n const handleTeamChange = (event, value) => {\n setPage(0);\n setFilters(prev => ({ ...prev, teamId: value?.id }));\n };\n\n const value = scheduleTeams?.find(team => team.id === filters?.teamId) || null;\n\n return <Autocomplete\n value={value}\n options={scheduleTeams || []}\n getOptionLabel={(option) => option.name}\n noOptionsText={<NoOptionsText loading={loading} />}\n renderOption={option => <TeamSuggestion suggestion={option} />}\n renderInput={(params) => <TextField {...params} className={classes.input} label={translate('resources.teams.name', 1)} {...inputProps} />}\n onChange={handleTeamChange}\n />\n}\n\nexport const PlayerTypeSelect = () => {\n const { filters, setFilters, setSortBy, setSort, setPage } = useScheduleStatsContext();\n const translate = useTranslate();\n const classes = useStyles();\n\n const handleTypeChange = (event) => {\n const { value } = event.target;\n\n if (value !== filters?.type) {\n setSortBy('ranking');\n setSort('asc');\n }\n\n setPage(0);\n setFilters(prev => ({ ...prev, type: value }));\n };\n\n return <TextField\n className={classes.input}\n label={translate(\"components.scheduleStats.labels.type\")}\n select\n value={filters?.type}\n onChange={handleTypeChange}\n SelectProps={{\n MenuProps: menuProps\n }}\n {...inputProps}\n >\n <MenuItem value=\"Skater\">{translate(\"components.scheduleStats.values.type.Skater\")}</MenuItem>\n <MenuItem value=\"Goalie\">{translate(\"components.scheduleStats.values.type.Goalie\")}</MenuItem>\n </TextField>\n}\n","import React from 'react'\nimport { RecordContextProvider, useRecordContext } from 'react-admin';\nimport { makeStyles, TableCell } from '@material-ui/core'\n\nimport InfoCard from '../../../common/cards/InfoCard';\nimport { useSport } from '../../../http';\n\nimport { TeamField } from '../../teams/TeamField';\nimport { ParticipantField } from '../../participants/ParticipantField';\nimport { ScheduleStatsTable } from '../ScheduleStatsTable'\nimport { GroupSelect, PlayerTypeSelect, ScheduleTeamSelect } from '../ScheduleStatsTableFilters';\n\nconst useStyles = makeStyles(theme => ({\n input: {\n minWidth: theme.spacing(24),\n },\n teamField: {\n display: 'block',\n color: theme.palette.text.secondary,\n }\n}));\n\nconst renderColumns = (classes) => (row, schedule) => {\n const { participantId, teamId } = row;\n\n return <TableCell component=\"th\" scope=\"row\" >\n <RecordContextProvider value={{ participantId, teamId, ...schedule }}>\n <ParticipantField source=\"participantId\" />\n <TeamField className={classes.teamField} source=\"teamId\" variant=\"caption\" link={false} />\n </RecordContextProvider>\n </TableCell>\n}\n\nconst renderHeaders = ({ translate }) =>\n <TableCell component=\"th\" scope=\"row\" style={{ width: 250 }}>{translate('resources.participants.labels.card.title')}</TableCell>\n\nexport default function PlayerScheduleStatsCard() {\n const schedule = useRecordContext();\n const sport = useSport();\n const classes = useStyles();\n\n const isHockey = sport === 'Hockey';\n\n const filters = [\n isHockey && <PlayerTypeSelect key=\"player-type\" />,\n <ScheduleTeamSelect key=\"team\" />,\n <GroupSelect key=\"group\" />,\n ].filter(Boolean);\n\n return <InfoCard\n title=\"components.scheduleStats.titles.ParticipantScheduleStats\"\n >\n <ScheduleStatsTable\n resource=\"ParticipantScheduleStats\"\n filters={filters}\n filter={{ type: 'Skater' }}\n sort={{ field: 'ranking', order: 'asc' }}\n renderColumns={renderColumns(classes)}\n renderHeaders={renderHeaders}\n schedule={schedule}\n />\n </InfoCard>\n}\n","import React, { useState } from 'react'\nimport { RecordContextProvider, useNotify, useRecordContext, useTranslate } from 'react-admin'\nimport { Button, makeStyles, TableCell } from '@material-ui/core';\nimport { Form, useForm, useFormState } from 'react-final-form';\nimport { isEmpty } from '@hisports/parsers';\nimport { FF_MANUAL_RANKINGS } from '@hisports/common/featureFlags';\n\nimport InfoCard from '../../../common/cards/InfoCard';\nimport { apiClient, useFlag } from '../../../http';\nimport { TeamField } from '../../teams/TeamField';\n\nimport { ScheduleStatsTable } from '../ScheduleStatsTable';\nimport { GroupSelect, StandingsTypeSelect } from '../ScheduleStatsTableFilters';\nimport { useScheduleGroupingType } from '../../scheduleSettings';\n\nconst useStyles = makeStyles((theme) => ({\n clearButton: {\n color: theme.palette.error.main,\n },\n}));\n\nconst validate = (values) => {\n const errors = {};\n const teamPoolCount = [];\n\n Object.keys(values).forEach((key) => {\n const poolId = key.split('_')[0];\n const teamId = key.split('_')[1];\n\n if (!teamPoolCount[poolId]) {\n teamPoolCount[poolId] = [];\n }\n\n teamPoolCount[poolId].push(teamId);\n });\n\n Object.keys(values).forEach((key) => {\n const poolId = key.split('_')[0];\n\n if (values[key] != null && values[key] <= 0) {\n errors[key] = 'ra.validation.invalid';\n }\n if (values[key] != null && values[key] > teamPoolCount[poolId]?.length) {\n errors[key] = 'ra.validation.too_high';\n }\n });\n\n return errors;\n}\n\nconst sanitizeRankings = (values) => Object.keys(values).reduce((acc, key) => {\n const newKey = key.includes('_') ? key.split('_')[1] : key;\n acc[newKey] = values[key];\n return acc;\n}, {});\n\nconst ManualRankingsForm = ({ children, standingsType, onClose, onSave }) => {\n const schedule = useRecordContext();\n const notify = useNotify();\n\n const onSubmit = async (values) => {\n if (isEmpty(values)) return;\n\n const newRankings = sanitizeRankings(values);\n const isPoolRanking = standingsType !== 'Overall';\n\n try {\n await apiClient(`schedules/${schedule.id}/updateManualRankings`, {\n method: 'POST',\n data: {\n manualRankings: newRankings,\n isPoolRanking,\n },\n });\n\n const notificationMessage = `components.scheduleStats.notifications.${isPoolRanking ? 'manual_pool_standings_updated' : 'manual_standings_updated'}`;\n notify(notificationMessage, 'success');\n onSave();\n } catch (error) {\n const errorMessage = error.response?.data?.error?.message || `components.scheduleStats.notifications.${isPoolRanking ? 'manual_pool_standings_error' : 'manual_standings_error'}`;\n notify(errorMessage, 'error');\n } finally {\n onClose();\n }\n };\n\n return <Form onSubmit={onSubmit} validate={validate}>\n {props => (\n <form onSubmit={props.handleSubmit}>\n <RecordContextProvider value={{}}>\n {children}\n </RecordContextProvider>\n </form>\n )}\n </Form>\n}\n\nconst ManualRankingsButton = ({ open, setOpen }) => {\n const classes = useStyles();\n const translate = useTranslate();\n const { change, reset } = useForm();\n const { values } = useFormState();\n const isEnabled = useFlag();\n\n if (!isEnabled(FF_MANUAL_RANKINGS)) return null;\n\n const handleClearAll = () => {\n Object.keys(values).forEach((key) => {\n change(key, null);\n });\n };\n\n const handleEditClick = () => {\n reset();\n setOpen(true);\n }\n\n return <>\n {!open && <Button color=\"primary\" onClick={handleEditClick}>\n {translate('components.scheduleStats.actions.edit_manual_standings')}\n </Button>}\n {open && <>\n <Button onClick={() => setOpen(false)}>\n {translate('ra.action.cancel')}\n </Button>\n <Button onClick={handleClearAll} className={classes.clearButton}>\n {translate('ra.action.clear')}\n </Button>\n </>\n }\n {/* Submit button needs to be rendered when form is rendered initially */}\n <Button type=\"submit\" color=\"primary\" style={{ display: !open ? 'none' : undefined }}>\n {translate('ra.action.save')}\n </Button>\n </>\n}\n\nconst renderColumns = (row, schedule) =>\n <TableCell>\n <RecordContextProvider value={{ teamId: row.teamId, ...schedule }}>\n <TeamField source=\"teamId\" />\n </RecordContextProvider>\n </TableCell>\n\nconst renderHeaders = ({ translate }) =>\n <TableCell style={{ width: 325 }}>{translate('resources.teams.name', 1)}</TableCell>\n\nexport default function TeamScheduleStandingsCard() {\n const schedule = useRecordContext();\n const [open, setOpen] = useState(false);\n const [standingsType, setStandingsType] = useState('Overall');\n const [triggerRefetch, setTriggerRefetch] = useState(0);\n const { isPools, isGroups } = useScheduleGroupingType(schedule?.id);\n\n const filters = [\n isGroups && <GroupSelect key=\"group\" />,\n isPools && <StandingsTypeSelect key=\"standings-type\" handleStandingsType={setStandingsType} />,\n ].filter(Boolean);\n\n const onClose = () => setOpen(false);\n const onSave = () => {\n setTriggerRefetch(prev => prev + 1);\n onClose();\n }\n\n return <ManualRankingsForm standingsType={standingsType} onClose={onClose} onSave={onSave}>\n <InfoCard\n title=\"components.scheduleStats.titles.TeamScheduleStats\"\n headerAction={<ManualRankingsButton open={open} setOpen={setOpen} />}\n >\n <ScheduleStatsTable\n resource=\"TeamScheduleStats\"\n filters={filters}\n filter={{ standingsType }}\n sort={{ field: 'ranking', order: 'asc' }}\n renderColumns={renderColumns}\n renderHeaders={renderHeaders}\n schedule={schedule}\n isFormOpen={open}\n triggerRefetch={triggerRefetch}\n disablePagination\n />\n </InfoCard>\n </ManualRankingsForm>\n}\n","import React from 'react';\nimport { SimpleForm, TextInput } from 'react-admin';\nimport { Grid } from '@material-ui/core';\n\nimport Toolbar from '../../common/ra/Toolbar';\n\nconst inputProps = {\n resource: 'pools',\n basePath: '/pools',\n variant: 'outlined',\n margin: 'none',\n fullWidth: true,\n}\n\nconst validate = values => {\n const errors = {};\n\n if (!values.name) {\n errors.name = 'ra.validation.required';\n }\n\n return errors;\n};\n\nexport const PoolForm = ({ initialValues, ...props }) =>\n <SimpleForm toolbar={<Toolbar />} validate={validate} initialValues={initialValues} {...props}>\n <Grid container spacing={2} fullWidth>\n <Grid item xs={12}>\n <TextInput source=\"name\" helperText=\"\" {...inputProps} />\n </Grid>\n </Grid>\n </SimpleForm>\n","import React, { useState } from 'react';\nimport { useTranslate } from 'react-admin';\nimport { Button } from '@material-ui/core';\nimport { Add } from '@material-ui/icons';\n\nimport { DialogDatagrid } from '../../common/dialogs/DialogDatagrid';\nimport { CreateResourceDialog, EditResourceDialog } from '../../common/dialogs/ResourceDialog';\n\nimport { PoolForm } from './PoolForm';\n\nconst AddPoolDialog = (props) =>\n <CreateResourceDialog label=\"resources.pools.actions.add\" resource=\"pools\" basePath=\"/pools\" {...props}>\n <PoolForm />\n </CreateResourceDialog>\n\nconst EditPoolDialog = (props) =>\n <EditResourceDialog label=\"resources.pools.labels.edit\" resource=\"pools\" basePath=\"/pools\" {...props}>\n <PoolForm />\n </EditResourceDialog>\n\nexport const AddPoolButton = ({ size, variant, ...props }) => {\n const [ isOpen, setOpen ] = useState(false);\n const translate = useTranslate();\n return <>\n <Button color=\"primary\" size={size} variant={variant} startIcon={<Add />} onClick={() => setOpen(true)}>\n {translate('resources.pools.actions.add')}\n </Button>\n <AddPoolDialog isOpen={isOpen} handleClose={() => setOpen(false)} {...props} />\n </>\n}\n\nexport const PoolDatagrid = props => <DialogDatagrid dialog={EditPoolDialog} {...props} />\n","import React from 'react';\nimport { TextField } from 'react-admin';\n\nimport { PoolDatagrid } from './PoolModal';\n\nexport const PoolGrid = (props) =>\n <PoolDatagrid size=\"medium\" {...props}>\n <TextField source=\"name\" />\n </PoolDatagrid>\n","import React, { useRef } from \"react\"\nimport { useRecordContext, useTranslate } from \"react-admin\"\nimport { makeStyles, Tooltip, Typography, useTheme } from \"@material-ui/core\"\n\nimport ListCard from \"../../common/cards/ListCard\"\nimport { isAuthorized } from \"../../common/Authorize\"\n\nimport { AddPoolButton } from \"../pools/PoolModal\"\nimport { PoolGrid } from \"../pools/PoolGrid\"\nimport { PoolIcon } from \"../icons\"\nimport { useScheduleGroupingType } from \"../scheduleSettings\"\n\nconst useStyles = makeStyles((theme) => ({\n tooltip: {\n maxWidth: 750,\n },\n}));\n\nexport default (props) => {\n const schedule = useRecordContext();\n const theme = useTheme();\n const translate = useTranslate();\n const listCardRef = useRef(null);\n const classes = useStyles();\n const { isGroups, isPools } = useScheduleGroupingType(schedule?.id);\n\n const canAddPools = isPools && isAuthorized(schedule, 'pools', 'create');\n\n return <Tooltip\n title={isGroups\n ? <Typography variant=\"body2\" display=\"inline\">\n <div dangerouslySetInnerHTML={{ __html: `${translate(\"resources.pools.tooltips.pools_unavailable\")}${translate('resources.officeSettings.tooltips.groupingType')}` } } />\n </Typography>\n : ''}\n placement=\"center\"\n classes={{ tooltip: classes.tooltip }}\n >\n <div ref={listCardRef}>\n <ListCard\n title=\"resources.pools.labels.card.title\"\n icon={<PoolIcon />}\n reference=\"pools\"\n target=\"scheduleId\"\n sort={{\n field: 'name',\n order: 'ASC'\n }}\n collapsable\n canOpen={isPools}\n addButton={canAddPools && <AddPoolButton initialValues={{ scheduleId: schedule?.id }} /> }\n componentProps={{ style: { color: isGroups ? theme.palette.text.disabled : undefined } }}\n {...props}\n >\n <PoolGrid rowOptions={{ isRowSelectable: () => isPools }} />\n </ListCard>\n </div>\n </Tooltip>\n}\n","import React from 'react';\nimport { useLocale, useRecordContext } from 'react-admin';\nimport { Grid, useMediaQuery } from '@material-ui/core';\n\nimport { FF_DRAFT_GAMES, FF_LEGACY_DRAFTS_DISABLED, FF_POOLS, FF_SEQUENCES } from '@hisports/common/featureFlags';\n\nimport { useFlag, useSport } from '../../http';\nimport { isAuthorized } from '../../common/Authorize';\nimport { TabbedShowLayout, Tab } from '../../common/ra/TabbedShowLayout';\nimport SchedulerView from '../../common/calendar/scheduler/SchedulerView';\nimport { useScheduleSettings } from '../scheduleSettings';\nimport { useBranchSettings } from '../branchOfficeSettings';\nimport { useScheduleSeeds } from '../gameBrackets/useSeeds';\n\nimport ScheduleCard from './cards/ScheduleCard';\nimport ScheduleLinksCard from './cards/ScheduleLinksCard';\nimport ScheduleTeamsCard from './cards/TeamsCard';\nimport DraftsCard from './cards/DraftsCard';\nimport DraftGamesCard from './cards/DraftGamesCard'\nimport GamesCard from './cards/GamesCard';\nimport TeamContactsCard from './cards/TeamContactsCard';\nimport ScheduleContactsCard from './cards/ScheduleContactsCard';\nimport ScheduleSettingsCard from './cards/ScheduleSettingsCard';\nimport NotificationsCard from './cards/NotificationsCard';\nimport AssignTargetsCard from './cards/AssignTargetsCard';\nimport RolesCard from './cards/RolesCard';\nimport SuspensionsCard from './cards/SuspensionsCard';\nimport GamePenaltiesCard from './cards/GamePenaltiesCard';\nimport ScheduleSequencesCard from './cards/ScheduleSequencesCard';\nimport BracketsCard from '../gameBrackets/cards/BracketsCard';\nimport PlayerScheduleStatsCard from './cards/PlayerScheduleStatsCard';\nimport TeamScheduleStandingsCard from './cards/TeamScheduleStandingsCard';\nimport PoolsCard from './PoolsCard';\n\nconst SummaryTab = props => {\n const schedule = useRecordContext(props);\n const { data: branchSettings } = useBranchSettings(schedule?.officeId)\n\n const showSuspensions = isAuthorized(schedule, 'suspensions', 'show') && branchSettings?.ff_suspensions;\n const showGamePenalties = isAuthorized(schedule, 'gamepenalties', 'show')\n\n return <Tab {...props}>\n <Grid container spacing={3}>\n <Grid item xs={12} md={6}>\n <ScheduleCard />\n </Grid>\n <Grid item xs={12} md={4}>\n <ScheduleLinksCard />\n </Grid>\n {showGamePenalties && <Grid item xs={12}>\n <GamePenaltiesCard collapsable />\n </Grid>}\n {showSuspensions && <Grid item xs={12}>\n <SuspensionsCard collapsable />\n </Grid>}\n </Grid>\n </Tab>\n}\n\nconst TeamsTab = props => {\n const schedule = useRecordContext();\n const isEnabled = useFlag();\n\n if (!isAuthorized(schedule, \"schedules\", \"teams\")) return <div />;\n\n return <Tab {...props}>\n <Grid container spacing={3}>\n {isEnabled(FF_POOLS) && <Grid item xs={12}>\n <PoolsCard />\n </Grid>}\n <Grid item xs={12}>\n <ScheduleTeamsCard />\n </Grid>\n </Grid>\n\n </Tab>\n}\n\nconst GamesTab = props => {\n const schedule = useRecordContext(props);\n const isEnabled = useFlag()\n\n if (!isAuthorized(schedule, 'games', 'show')) return <div />;\n\n const showSequences = isAuthorized(schedule, 'schedulesequences', 'show') && isEnabled(FF_SEQUENCES);\n const showDraftGames = isAuthorized(schedule, 'draftGames', 'show') && isEnabled(FF_DRAFT_GAMES);\n const showLegacyDrafts = isAuthorized(schedule, 'drafts', 'show') && !isEnabled(FF_LEGACY_DRAFTS_DISABLED);\n\n return <Tab {...props}>\n <Grid container spacing={3}>\n {showSequences && <Grid item xs={12}>\n <ScheduleSequencesCard />\n </Grid>}\n {showLegacyDrafts && <Grid item xs={12}>\n <DraftsCard collapsable={isEnabled(FF_DRAFT_GAMES)} />\n </Grid>}\n {showDraftGames && <Grid item xs={12}>\n <DraftGamesCard collapsable />\n </Grid>}\n <Grid item xs={12}>\n <GamesCard />\n </Grid>\n </Grid>\n </Tab>\n}\n\nconst BracketsTab = props => {\n const schedule = useRecordContext(props);\n\n /* Used by the bracket system */\n const sport = useSport();\n const locale = useLocale();\n const BRACKET_URL = process.env.BRACKET_URL;\n const isSeeded = useScheduleSeeds(schedule?.id)\n\n if (!isSeeded || !BRACKET_URL) return <div />;\n\n const bracketUrl = `${BRACKET_URL}/${schedule?.id}/${sport}/${locale}`\n\n return <Tab {...props}>\n <BracketsCard url={bracketUrl} scheduleId={schedule?.id} />\n </Tab>\n}\n\nconst SchedulerTab = props => {\n const schedule = useRecordContext();\n const isEnabled = useFlag()\n const { data: settings } = useScheduleSettings(schedule?.id);\n const isMobile = useMediaQuery(theme => theme.breakpoints.down('xs'));\n\n const canSchedule = isAuthorized(schedule, 'schedules', 'scheduler');\n\n if (!isEnabled(FF_DRAFT_GAMES) || isMobile || !canSchedule) return <div />;\n\n return <Tab {...props}>\n <SchedulerView schedule={schedule} scheduleSettings={settings} />\n </Tab>\n}\n\nconst StandingsTab = props => {\n const schedule = useRecordContext(props);\n\n if (!isAuthorized(schedule, \"schedules\", \"standings\")) return <div />;\n\n return <Tab {...props}>\n <TeamScheduleStandingsCard />\n </Tab>\n}\n\nconst StatsTab = props => {\n const schedule = useRecordContext(props);\n\n if (!isAuthorized(schedule, \"schedules\", \"stats\")) return <div />;\n\n return <Tab {...props}>\n <PlayerScheduleStatsCard />\n </Tab>\n}\n\nconst ContactsTab = props => {\n const schedule = useRecordContext(props);\n const { data: settings } = useScheduleSettings(schedule?.id);\n\n if (!['schedules', 'teams'].includes(settings?.contactsVisibility)) return <div />;\n\n return <Tab {...props}>\n <Grid container spacing={3}>\n <Grid item xs={12}>\n <TeamContactsCard />\n </Grid>\n <Grid item xs={12}>\n <ScheduleContactsCard />\n </Grid>\n </Grid>\n </Tab>\n}\n\nconst SettingsTab = props => {\n const schedule = useRecordContext(props);\n\n if (!isAuthorized(schedule, \"schedules\", \"settings\")) return <div />;\n const showTargets = isAuthorized(schedule, 'schedules', 'targets', true);\n\n return <Tab {...props}>\n <Grid container spacing={3}>\n <Grid item xs={12} md={6}>\n <ScheduleSettingsCard />\n </Grid>\n <Grid item xs={0} md={6} />\n <Grid item xs={12}>\n <RolesCard />\n </Grid>\n <Grid item xs={12}>\n <NotificationsCard />\n </Grid>\n {showTargets && <Grid item xs={12}>\n <AssignTargetsCard />\n </Grid>}\n </Grid>\n </Tab>\n}\n\nexport default props =>\n <TabbedShowLayout {...props}>\n <SummaryTab label=\"resources.schedules.labels.tabs.summary\" />\n\n <TeamsTab label=\"resources.schedules.labels.tabs.teams\" path=\"teams\" />\n <GamesTab label=\"resources.schedules.labels.tabs.games\" path=\"games\" />\n <BracketsTab label=\"resources.schedules.labels.tabs.bracket\" path=\"bracket\" />\n <SchedulerTab label=\"resources.schedules.labels.tabs.scheduler\" path=\"scheduler\" />\n <StandingsTab label=\"resources.schedules.labels.tabs.standings\" path=\"standings\" />\n <StatsTab label=\"resources.schedules.labels.tabs.stats\" path=\"stats\" />\n <ContactsTab label=\"resources.schedules.labels.tabs.contacts\" path=\"contacts\" />\n\n <SettingsTab label=\"resources.schedules.labels.tabs.settings\" path=\"settings\" />\n </TabbedShowLayout>\n\n","import React, { useContext, useState } from 'react';\n\nconst ScheduleContext = React.createContext();\n\nexport const useScheduleContext = () => useContext(ScheduleContext);\n\nexport const ScheduleWizardProvider = ({ initialValues, children }) => {\n const context = useState(initialValues);\n\n return <ScheduleContext.Provider value={context} >\n {children}\n </ScheduleContext.Provider>\n}\n","import React from 'react';\nimport { useTranslate } from 'react-admin';\nimport { useFormState } from 'react-final-form';\nimport { DialogActions, Button } from '@material-ui/core';\nimport { makeStyles } from '@material-ui/core/styles';\n\nconst useStyles = makeStyles(theme => ({\n error: {\n color: theme.palette.error.main,\n margin: theme.spacing(0, 1),\n fontSize: '0.9rem',\n fontWeight: 400,\n },\n skipButton: {\n marginLeft: 8,\n marginRight: 'auto',\n }\n}))\n\nexport const StepperToolbar = ({\n handleSubmit,\n submitLabel,\n submittingLabel = submitLabel,\n hideSubmit = false,\n cancelLabel = \"ra.action.cancel\",\n onCancel,\n handleSkip,\n showSkip = false,\n}) => {\n const classes = useStyles();\n const { submitError, submitting } = useFormState();\n const translate = useTranslate();\n\n return <>\n {submitError && <p className={classes.error}>{submitError}</p>}\n <DialogActions>\n {showSkip && <Button color=\"secondary\" disabled={submitting} onClick={handleSkip} className={classes.skipButton}>\n {translate(\"ra.action.skip\")}\n </Button>}\n {onCancel && <Button disabled={submitting} onClick={onCancel}>\n {translate(cancelLabel, { _: cancelLabel, smart_count: 1 })}\n </Button>}\n {!hideSubmit && <Button type=\"submit\" color=\"primary\" disabled={submitting} onClick={handleSubmit}>\n {!submitting\n ? translate(submitLabel, { _: submitLabel, smart_count: 1 })\n : translate(submittingLabel, { _: submittingLabel, smart_count: 1 })}\n </Button>}\n </DialogActions>\n </>\n}\n","import React from 'react';\nimport { TextInput, SimpleForm, BooleanInput } from 'react-admin';\nimport moment from 'moment-timezone';\nimport { Grid } from '@material-ui/core'\nimport { useSelector } from 'react-redux'\nimport { useFormState } from 'react-final-form';\n\n\nimport { GameFormatEnumInput, SeasonInput, ScheduleTypeEnumInput, TournamentScheduleTypeEnumInput, CupScheduleTypeEnumInput } from '../../common/inputs/EnumInputs';\nimport { InlineDateInput } from '../../common/inputs/DateInput';\nimport Toolbar from '../../common/ra/Toolbar';\n\nimport { OfficeInput } from '../offices/OfficeInput';\nimport { CategoryInput } from '../categories/CategoryInput';\nimport { SyncAlert, useRecordSynced } from '../../common/SyncAlert';\n\nconst validate = values => {\n const errors = {};\n\n if (!values.name) errors.name = 'ra.validation.required'\n\n if (!values.type) errors.type = 'ra.validation.required'\n if (!values.officeId) errors.officeId = 'ra.validation.required'\n\n if (!values.categoryId) errors.categoryId = 'ra.validation.required'\n\n if (!values.seasonId) errors.seasonId = 'ra.validation.required'\n if (!values.startDate) errors.startDate = 'ra.validation.required'\n if (!values.endDate) errors.endDate = 'ra.validation.required'\n\n if (values.startDate && values.endDate) {\n if (moment(values.endDate).isBefore(values.startDate, 'day')) {\n errors.endDate = 'resources.schedules.validations.end_after_start'\n }\n }\n\n return errors;\n}\n\nconst inputProps = {\n resource: 'schedules',\n basePath: '/schedules',\n variant: 'outlined',\n margin: 'none',\n fullWidth: true,\n}\n\nconst NameInput = props => {\n const { values } = useFormState()\n const { name } = values;\n\n const hasDivision = name && name.match(/Cohort|Group|Flight|Round/i);\n const helperText = hasDivision ? \"resources.schedules.helpers.cohorts\" : null;\n return <TextInput helperText={helperText} {...props} />\n}\n\nconst TypeInput = props => {\n const { values } = useFormState()\n const { officeId } = values;\n const office = useSelector(store => officeId && store.admin.resources.offices.data[officeId])\n\n switch (office?.type) {\n case 'Tournament':\n return <TournamentScheduleTypeEnumInput {...props} {...inputProps} />\n case 'Cup':\n return <CupScheduleTypeEnumInput {...props} {...inputProps} />\n default:\n return <ScheduleTypeEnumInput {...props} {...inputProps} />\n }\n}\n\nconst ScheduleOfficeInput = props => {\n const { values } = useFormState()\n const { officeId } = values;\n const office = useSelector(store => officeId && store.admin.resources.offices.data[officeId])\n\n const label = office?.type ? `resources.offices.values.type.${office.type}` : undefined;\n return <OfficeInput source=\"officeId\" label={label} filter={{ type: { neq: 'Historical' } }} {...props} {...inputProps} />\n}\n\nexport default props => {\n const disableOffice = props?.initialValues?.officeId != null;\n const [ isSynced, toggle ] = useRecordSynced(props);\n\n return <>\n <SyncAlert isSynced={isSynced} toggle={toggle} />\n <SimpleForm toolbar={<Toolbar isSynced={isSynced} />} validate={validate} {...props}>\n <Grid container spacing={2} fullWidth>\n <Grid item xs={12} md={8}>\n <NameInput source=\"name\" autoFocus {...inputProps} disabled={isSynced} />\n </Grid>\n <Grid item xs={12} sm={6} md={4}>\n <SeasonInput source=\"seasonId\" disabled={isSynced} {...inputProps} />\n </Grid>\n\n <Grid item xs={12} md={4}>\n <TypeInput source=\"type\" disabled={isSynced} {...inputProps} />\n </Grid>\n <Grid item xs={12} md={4}>\n <CategoryInput source=\"categoryId\" disabled={isSynced} {...inputProps} />\n </Grid>\n <Grid item xs={12} md={4}>\n <GameFormatEnumInput\n source=\"gameFormat\"\n helperText=\"resources.schedules.helpers.gameFormat\"\n {...inputProps} />\n </Grid>\n\n <Grid item xs={12}>\n <ScheduleOfficeInput source=\"officeId\" disabled={disableOffice || isSynced} {...inputProps} />\n </Grid>\n\n <Grid item xs={12} md={6}>\n <InlineDateInput source=\"startDate\" label=\"resources.schedules.fields.startDate\" {...inputProps} />\n </Grid>\n <Grid item xs={12} md={6}>\n <InlineDateInput source=\"endDate\" label=\"resources.schedules.fields.endDate\" {...inputProps} />\n </Grid>\n\n <Grid item xs={12}>\n <TextInput source=\"comments\" multiline rows=\"3\" helperText=\"ra.message.optional\" {...inputProps} />\n </Grid>\n <Grid item xs={12}>\n <BooleanInput source=\"isPublic\" label=\"resources.schedules.fields.isPublic\" defaultValue={true} helperText=\"resources.schedules.helpers.isPublic\" {...inputProps} />\n </Grid>\n </Grid>\n </SimpleForm>\n </>\n}\n","import React from \"react\";\nimport { useDataProvider, useNotify } from \"react-admin\";\n\nimport ScheduleForm from '../ScheduleForm'\n\nimport { useScheduleContext } from \"./WizardContext.js\";\n\nexport default ({ toolbar, handleNext }) => {\n const dataProvider = useDataProvider();\n const [ schedule, setSchedule ] = useScheduleContext();\n const notify = useNotify();\n\n const onSubmit = values => {\n if (!values?.id) {\n return dataProvider.create(\"schedules\", {\n data: values,\n }, {\n onSuccess({ data }) {\n setSchedule(data);\n notify('resources.schedules.notifications.created')\n return handleNext();\n },\n onFailure(error) {\n notify(error.message, 'error')\n },\n returnPromise: true,\n })\n } else {\n return dataProvider.update(\"schedules\", {\n id: values.id,\n data: values,\n }, {\n onSuccess({ data }) {\n setSchedule(data);\n notify('resources.schedules.notifications.updated')\n return handleNext();\n },\n onFailure(error) {\n notify(error.message, 'error')\n },\n returnPromise: true,\n })\n }\n }\n\n return <ScheduleForm toolbar={toolbar} save={onSubmit} initialValues={schedule} />\n}\n","import React, { useEffect, useState } from 'react';\nimport { ArrayInput, CardContentInner, RecordContextProvider, SimpleForm, SimpleFormIterator, useDataProvider, useNotify, useTranslate } from \"react-admin\"\nimport { useForm, useFormState } from 'react-final-form';\nimport { Button, CardActions, LinearProgress, Typography, withStyles } from '@material-ui/core';\nimport { Add } from '@material-ui/icons';\n\nimport { isEmpty } from '@hisports/parsers';\n\nimport { TransitionProps } from '../../../common/ra/SimpleFormIterator';\n\nimport { useScheduleContext } from './WizardContext';\nimport { TeamImportButton } from '../../drafts/manual/TeamsStep';\nimport { TeamInput } from '../../teams/TeamInput';\nimport { ScheduleGroupInput } from '../../groups/GroupInput';\n\nconst styles = {\n indexContainer: {\n display: 'none',\n },\n line: {\n alignItems: 'top',\n border: 'none',\n padding: '0 8px 24px',\n },\n action: {\n paddingTop: '12px',\n paddingLeft: '20px'\n }\n}\n\nconst FormIterator = withStyles(styles)(SimpleFormIterator);\n\nconst inputProps = {\n variant: 'outlined',\n margin: 'none',\n fullWidth: true,\n}\n\nconst getScheduleTeams = (dataProvider, scheduleId) => {\n if (!scheduleId) return Promise.resolve([]);\n return dataProvider.getList('scheduleteams', {\n filter: { scheduleId },\n sort: {\n field: ['group.name', 'team.name'],\n order: ['ASC', 'ASC']\n },\n }).then(res => res.data)\n}\n\nconst validate = values => {\n const errors = {};\n errors.teams = values?.teams?.map(team => {\n const error = {};\n if (!team.teamId) error.teamId = 'ra.validation.required'\n return error;\n })\n return errors;\n}\n\nconst TeamsInput = ({ schedule, ...props }) => {\n const dataProvider = useDataProvider();\n const translate = useTranslate();\n const { change, mutators } = useForm();\n const { values } = useFormState();\n const [loaded, setLoaded] = useState(false)\n\n useEffect(() => {\n getScheduleTeams(dataProvider, schedule.id)\n .then(teams => {\n change(\"teams\", teams);\n setLoaded(true);\n })\n }, [dataProvider, schedule.id, change])\n\n let content = <LinearProgress color=\"primary\" variant=\"indeterminate\" />\n if (loaded) {\n const noTeams = isEmpty(values?.teams);\n content = <>\n {noTeams && <CardContentInner>\n <Typography variant=\"body2\">{translate('resources.teams.messages.no_teams')}</Typography>\n </CardContentInner>}\n\n <ArrayInput source=\"teams\" label=\"\" {...inputProps}>\n <FormIterator disableReordering disableAdd TransitionProps={TransitionProps} {...inputProps}>\n <TeamInput source=\"teamId\" filter={{ _scope: 'Tenant' }} label=\"resources.teams.name\" ignoreSchedule {...inputProps} />\n <ScheduleGroupInput source=\"groupId\" scheduleId={schedule.id} label=\" \" showNone={translate('ra.message.no_group')} select={false} {...inputProps} />\n </FormIterator>\n </ArrayInput>\n </>\n }\n\n return <>\n {content}\n <CardActions>\n <Button color=\"primary\" startIcon={<Add />} onClick={() => mutators.push('teams', {})}>{translate('resources.drafts.labels.add_team')}</Button>\n <TeamImportButton label={translate('resources.drafts.labels.import_teams')} scheduleIdForGroupInput={schedule.id} />\n </CardActions>\n </>\n}\n\nexport default ({ toolbar, handleNext }) => {\n const dataProvider = useDataProvider();\n const [ schedule ] = useScheduleContext();\n const notify = useNotify();\n\n const onSubmit = async values => {\n const teams = values.teams.filter(team => team.teamId != null)\n const scheduleTeams = await getScheduleTeams(dataProvider, schedule.id)\n\n const deletedTeams = scheduleTeams\n .filter(scheduleTeam => {\n return !teams.some(team => {\n return scheduleTeam.teamId === team.teamId && scheduleTeam.groupId === team.groupId\n })\n })\n\n const addedTeams = teams\n .filter(team => {\n return !scheduleTeams.some(scheduleTeam => {\n return scheduleTeam.teamId === team.teamId && scheduleTeam.groupId === team.groupId\n })\n })\n .map(team => ({\n teamId: team.teamId,\n scheduleId: schedule.id,\n officeId: schedule.officeId,\n groupId: team.groupId,\n }))\n\n try {\n await Promise.all([\n ...deletedTeams.map(team => dataProvider.delete(\"scheduleTeams\", { id: team.id })),\n ...addedTeams.map(data => dataProvider.create(\"scheduleTeams\", { data })),\n ])\n handleNext();\n } catch (error) {\n notify(error.message, 'error');\n }\n }\n\n return <RecordContextProvider value={schedule}>\n <SimpleForm toolbar={toolbar} validate={validate} save={onSubmit}>\n <TeamsInput schedule={schedule} />\n </SimpleForm>\n </RecordContextProvider>\n}\n","import React, { Fragment } from 'react';\nimport { RecordContextProvider, ResourceContextProvider, SimpleForm } from 'react-admin';\nimport ScheduleSequencesCard from '../cards/ScheduleSequencesCard';\nimport { useScheduleContext } from './WizardContext';\n\nexport default ({ toolbar, handleNext }) => {\n const [ schedule ] = useScheduleContext();\n\n return <ResourceContextProvider value=\"schedules\">\n <RecordContextProvider value={schedule}>\n <SimpleForm toolbar={toolbar} save={handleNext} component={Fragment} >\n <ScheduleSequencesCard\n resource=\"schedulesequences\"\n title={false}\n collapsable={false}\n componentProps={{ style: { boxShadow: 'none' } }}\n />\n </SimpleForm>\n </RecordContextProvider>\n </ResourceContextProvider>\n}\n","import React, { useState } from \"react\"\nimport { RecordContextProvider, useDataProvider, useNotify } from \"react-admin\"\nimport { Card, LinearProgress, makeStyles } from \"@material-ui/core\";\nimport { useHistory } from 'react-router-dom';\n\nimport { FF_DRAFT_GAMES } from \"@hisports/common/featureFlags\";\n\nimport { useFlag } from \"../../../http\";\nimport { useScheduleSettings } from \"../../scheduleSettings\";\n\nimport { AddDraftDialog } from \"../../drafts/dialogs/DraftDialog\";\nimport ScheduleSettingsForm from '../../scheduleSettings/ScheduleSettingsForm'\n\nimport { useScheduleContext } from \"./WizardContext\";\n\nconst useStyles = makeStyles(theme => ({\n content: {\n padding: theme.spacing(3, 4),\n },\n}));\n\nexport default ({ toolbar, handleNext }) => {\n const isEnabled = useFlag()\n const notify = useNotify();\n const history = useHistory()\n const classes = useStyles();\n const dataProvider = useDataProvider();\n const [ schedule ] = useScheduleContext();\n const [ showDraft, setShowDraft ] = useState(false);\n const { data: scheduleSettings, loaded } = useScheduleSettings(schedule?.id);\n\n const onSubmit = async values => {\n if (!isEnabled(FF_DRAFT_GAMES)) setShowDraft(true);\n try {\n await dataProvider.update(\"scheduleSettings\", {\n id: values.id,\n data: values,\n })\n if (isEnabled(FF_DRAFT_GAMES)) history.push(`/schedules/${values.id}/show/scheduler`)\n } catch (error) {\n notify(error.message, 'error');\n }\n }\n\n return <Card>\n <RecordContextProvider value={scheduleSettings}>\n {loaded\n ? <ScheduleSettingsForm toolbar={toolbar} save={onSubmit} classes={classes} schedule={schedule} />\n : <LinearProgress color=\"primary\" variant=\"indeterminate\" />\n }\n </RecordContextProvider>\n {!isEnabled(FF_DRAFT_GAMES) && <AddDraftDialog schedule={schedule} isOpen={showDraft} handleClose={() => setShowDraft(false)} showSchedule showBrackets={['Playoffs', 'Tournament'].includes(schedule?.type)} showDraftGamesGenerator />}\n </Card>\n}\n","import React, { useState } from 'react';\nimport { useRedirect, useTranslate } from 'react-admin'\n\nimport { FF_SEQUENCES } from '@hisports/common/featureFlags';\n\nimport { useFlag } from '../../../http';\nimport { ImportStepper } from '../../../common/importers/ImportStepper';\nimport { isAuthorized } from '../../../common/Authorize';\n\nimport { StepperToolbar } from './StepperToolbar'\nimport { useScheduleContext } from './WizardContext';\n\nimport InfoStep from './InfoStep';\nimport TeamsStep from './TeamsStep';\nimport SequencesStep from './SequencesStep';\nimport SettingsStep from './SettingsStep';\n\nconst SCHEDULE_INFO = 0;\nconst TEAM_SELECT = 1;\nconst ADD_SEQUENCES = 2;\nconst SCHEDULE_SETTINGS = 3;\n\nexport const ScheduleWizard = props => {\n const translate = useTranslate();\n const redirect = useRedirect();\n const isEnabled = useFlag();\n\n const [ activeStep, setActiveStep ] = useState(0);\n const [ schedule ] = useScheduleContext();\n\n const showSequences = isAuthorized(schedule, 'schedulesequences', 'show') && isEnabled(FF_SEQUENCES);\n\n const steps = [\n 'schedule_info',\n 'team_select',\n showSequences && 'add_sequences',\n 'schedule_settings'\n ].filter(Boolean)\n .map(step => translate(`resources.schedules.labels.steps.${step}`))\n\n const handleSkip = () => {\n if (![TEAM_SELECT, ADD_SEQUENCES].includes(activeStep)) return\n redirect(`/schedules/${schedule.id}/show`)\n };\n\n const handleNext = () => {\n setActiveStep(activeStep => activeStep + (!showSequences && activeStep === TEAM_SELECT ? 2 : 1));\n };\n\n const handleBack = () => {\n if (activeStep === SCHEDULE_INFO) {\n return redirect('/schedules')\n }\n setActiveStep(activeStep => activeStep - (!showSequences && activeStep === SCHEDULE_SETTINGS ? 2 : 1));\n };\n\n const cancelLabel = activeStep === SCHEDULE_INFO ? \"ra.action.cancel\" : \"ra.action.back\";\n const submitLabel = activeStep === steps.length - 1 ? \"ra.action.finish\" : \"ra.action.next\";\n const showSkip = [TEAM_SELECT, ADD_SEQUENCES].includes(activeStep)\n\n const toolbar = <StepperToolbar\n onCancel={handleBack}\n cancelLabel={cancelLabel}\n submitLabel={submitLabel}\n handleSkip={handleSkip}\n showSkip={showSkip}\n />\n\n let step = null;\n switch (activeStep) {\n case SCHEDULE_INFO:\n step = <InfoStep toolbar={toolbar} handleNext={handleNext} />\n break;\n case TEAM_SELECT:\n step = <TeamsStep toolbar={toolbar} handleNext={handleNext} />\n break;\n case ADD_SEQUENCES:\n step = <SequencesStep toolbar={toolbar} handleNext={handleNext} />\n break;\n case SCHEDULE_SETTINGS:\n step = <SettingsStep toolbar={toolbar} handleNext={handleNext} />\n break;\n }\n\n return <>\n <ImportStepper steps={steps} activeStep={activeStep} />\n {step}\n </>\n}\n","import React from 'react';\nimport { useLocation } from 'react-router-dom';\n\nimport { ScheduleWizardProvider } from \"./WizardContext\"\nimport { ScheduleWizard } from \"./ScheduleWizard\"\n\nexport default props => {\n const location = useLocation();\n\n return <ScheduleWizardProvider initialValues={location?.state?.initialValues} {...props}>\n <ScheduleWizard />\n </ScheduleWizardProvider>\n}\n","import { downloadCSV } from 'react-admin';\nimport moment from 'moment-timezone';\nimport Papa from 'papaparse'\n\nimport { getSeasonDisplayName } from '@hisports/common/src/seasons';\n\nimport { appName } from '../../flags';\n\nconst schedulesExporter = (data, sport) => {\n const schedules = data.map(schedule => {\n const office = schedule.office;\n const season = getSeasonDisplayName(schedule.seasonId, sport);\n\n return [\n schedule.id,\n schedule.name,\n season,\n schedule.type,\n schedule.category.name,\n moment.utc(schedule.startDate, 'YYYY-MM-DD').format(\"YYYY-MM-DD\"),\n moment.utc(schedule.endDate, 'YYYY-MM-DD').format(\"YYYY-MM-DD\"),\n schedule.officeId,\n office?.name\n ]\n });\n\n const csv = Papa.unparse({\n fields: [\"Schedule ID\", \"Schedule Name\", \"Season\", \"Type\", \"Category\", \"Start Date\", \"End Date\", \"Office ID\", \"Office Name\"],\n data: schedules\n });\n downloadCSV(csv, `${appName} - Schedules - ${moment().format('YYYYMMDDHHmmss')}`);\n};\n\nschedulesExporter._include = [\n 'office',\n 'category',\n]\n\nexport default schedulesExporter;\n","import React, { Fragment, useEffect, useState } from 'react';\nimport { RecordContextProvider, useTranslate, useRecordContext, BooleanInput, SimpleForm } from 'react-admin';\nimport {\n styled,\n Button,\n Dialog,\n DialogTitle,\n DialogActions,\n Typography,\n Accordion as MuiAccordion,\n AccordionSummary,\n AccordionDetails as MuiAccordionDetails,\n Table,\n TableHead,\n TableBody,\n TableRow,\n TableCell,\n makeStyles,\n LinearProgress,\n ListItemText,\n ListItemIcon\n} from '@material-ui/core';\nimport { BarChart, ExpandMore } from '@material-ui/icons'\nimport { useFormState } from 'react-final-form';\n\nimport { FF_DRAFT_GAMES } from '@hisports/common/featureFlags';\nimport { isEmpty } from '@hisports/parsers';\n\nimport { apiClient, useFlag } from '../../http';\nimport { ActionMenuItem } from '../../common/ActionMenu';\nimport DateRangeField from '../../common/fields/DateRangeField';\nimport FunctionField from '../../common/fields/FunctionField';\n\nimport { TeamField } from '../teams/TeamField';\nimport { OfficeField } from '../offices/OfficeField';\nimport { GroupField } from '../groups/GroupField';\nimport { PoolChipField } from '../pools/PoolField';\nimport { ScheduleGroupInput } from '../groups/GroupInput';\nimport { PoolInput } from '../pools/PoolInput';\nimport { useScheduleGroupingType } from '../scheduleSettings';\n\nconst inputProps = {\n variant: 'outlined',\n margin: 'normal',\n}\n\nconst AccordionDetails = styled(MuiAccordionDetails)({\n padding: 0,\n overflowX: 'auto',\n overflowY: 'hidden',\n})\n\nconst ByesList = styled('ul')({\n margin: 0,\n padding: 0,\n listStyleType: 'none',\n})\n\nconst ByesListItem = styled('li')({\n marginBottom: 4,\n})\n\nconst useStyles = makeStyles(theme => ({\n draftInput: {\n marginLeft: theme.spacing(2),\n marginBottom: theme.spacing(1)\n },\n groupInput: {\n marginLeft: theme.spacing(1),\n marginBottom: theme.spacing(2)\n },\n status: {\n width: '100%',\n margin: theme.spacing(2),\n textAlign: 'center',\n },\n table: {\n // add margin to minimize scrolling\n marginRight: theme.spacing(15),\n },\n officeHeader: {\n width: theme.spacing(3),\n height: theme.spacing(15),\n textOverflow: 'ellipsis',\n whiteSpace: 'nowrap',\n },\n rotate: {\n transform: 'translate(25px, 58px) rotate(315deg)',\n width: theme.spacing(1.5),\n },\n rotateInner: {\n borderBottom: `1px solid ${theme.palette.divider}`,\n paddingBottom: theme.spacing(.5),\n },\n officeCell: {\n borderRight: `1px solid ${theme.palette.divider}`,\n textAlign: 'center',\n width: theme.spacing(3),\n height: theme.spacing(3),\n },\n link: {\n display: 'inline-block',\n width: theme.spacing(21),\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n },\n loaderDiv: {\n height: theme.spacing(0.5)\n },\n group: {\n display: 'flex',\n alignItems: 'center',\n gap: theme.spacing(1),\n },\n}));\n\nconst filterMatchupsByPool = (matchups, poolId) => matchups.filter(team => !poolId || team.poolId === poolId);\n\nconst Accordion = props => <MuiAccordion TransitionProps={{ unmountOnExit: true }} {...props} />\nconst Heading = props => <Typography variant=\"body2\" gutterBottom {...props} />\n\nconst TeamFieldWithPool = ({ activePoolId }) => {\n const { values: { id: scheduleId } } = useFormState();\n const { isPools } = useScheduleGroupingType(scheduleId);\n const classes = useStyles();\n\n return <FunctionField render={({ poolId }) => {\n const showPool = isPools && poolId;\n\n return <div className={classes.group}>\n <Typography variant=\"body2\" display=\"inline\"><TeamField source=\"teamId\" /></Typography>\n {showPool && <PoolChipField source=\"poolId\" variant={activePoolId === poolId ? 'default' : 'outlined'} />}\n </div>\n }} />\n}\n\nconst Summary = ({ matchups, activePoolId }) => {\n const translate = useTranslate();\n\n const filteredMatchups = filterMatchupsByPool(matchups, activePoolId);\n const hasGroup = filteredMatchups.some(matchup => matchup.groupId);\n\n if (isEmpty(filteredMatchups)) return <MuiAccordionDetails>{translate('resources.schedules.messages.no_matchups')}</MuiAccordionDetails>\n\n return <Table>\n <TableHead>\n <TableRow>\n <TableCell>{translate('resources.schedules.labels.team')}</TableCell>\n {hasGroup && <TableCell>{translate('resources.schedules.labels.group')}</TableCell>}\n <TableCell>{translate('resources.schedules.labels.opponents')}</TableCell>\n <TableCell>{translate('resources.schedules.labels.conflicts')}</TableCell>\n <TableCell>{translate('resources.schedules.labels.byes')}</TableCell>\n <TableCell>{translate('resources.schedules.labels.home')}</TableCell>\n <TableCell>{translate('resources.schedules.labels.away')}</TableCell>\n <TableCell>{translate('resources.schedules.labels.total')}</TableCell>\n </TableRow>\n </TableHead>\n <TableBody>\n {filteredMatchups.map(team => {\n const { teamId, home, away, byes, conflicts, totalOpponents, groupId, poolId } = team;\n\n return <RecordContextProvider key={teamId} value={{ teamId, groupId, poolId }}>\n <TableRow>\n <TableCell component=\"th\" scope=\"row\">\n <TeamFieldWithPool activePoolId={activePoolId} />\n </TableCell>\n {hasGroup && <TableCell>\n <GroupField source=\"groupId\" />\n </TableCell>}\n <TableCell>{totalOpponents}</TableCell>\n <TableCell>{conflicts}</TableCell>\n <TableCell>{byes}</TableCell>\n <TableCell>{home}</TableCell>\n <TableCell>{away}</TableCell>\n <TableCell>{home + away}</TableCell>\n </TableRow>\n </RecordContextProvider>\n })}\n </TableBody>\n </Table>\n}\n\nconst Matchups = ({ matchups, groupId, activePoolId }) => {\n const translate = useTranslate();\n\n if (isEmpty(matchups)) return <MuiAccordionDetails>{translate('resources.schedules.messages.no_matchups')}</MuiAccordionDetails>\n\n const showGroups = groupId != null;\n const teamIds = matchups.map(team => team.teamId);\n\n return <Table>\n <TableHead>\n <TableRow>\n <TableCell />\n <TableCell>{translate('resources.schedules.labels.team')}</TableCell>\n {showGroups && <TableCell>{translate('resources.schedules.labels.group')}</TableCell>}\n {teamIds.map((teamId, index) => <TableCell key={`head_${teamId}`}>{index + 1}</TableCell>)}\n </TableRow>\n </TableHead>\n <TableBody>\n {matchups.map((team, index) => {\n const { teamId, poolId, opponents } = team;\n\n return <RecordContextProvider key={teamId} value={{ teamId, groupId, poolId }} >\n <TableRow hover>\n <TableCell component=\"th\" scope=\"row\">{index + 1}</TableCell>\n <TableCell><TeamFieldWithPool activePoolId={activePoolId} /></TableCell>\n {showGroups && <TableCell><GroupField source=\"groupId\" /></TableCell>}\n {opponents.map(opponent => {\n const { home, away, teamId: opponentTeamId } = opponent;\n\n return <TableCell key={`opponent_${opponentTeamId}`}>\n {(home + away === 0) ? null : `${home}/${away}`}\n </TableCell>\n })}\n </TableRow>\n </RecordContextProvider>\n })}\n </TableBody>\n </Table>\n}\n\nconst OfficeMatchups = ({ matchups, officeIds, activePoolId }) => {\n const classes = useStyles();\n const translate = useTranslate();\n\n const filteredMatchups = filterMatchupsByPool(matchups, activePoolId);\n\n if (isEmpty(filteredMatchups)) return <MuiAccordionDetails>{translate('resources.schedules.messages.no_matchups')}</MuiAccordionDetails>\n\n return <Table className={classes.table}>\n <TableHead>\n <TableRow>\n <TableCell />\n {officeIds.map(officeId => <TableCell key={`head_${officeId}`} className={classes.officeHeader}>\n <div className={classes.rotate}>\n <span className={classes.rotateInner}>\n <RecordContextProvider value={{ officeId }}>\n <OfficeField source=\"officeId\" classes={{ link: classes.link }} />\n </RecordContextProvider>\n </span>\n </div>\n </TableCell>)}\n </TableRow>\n </TableHead>\n <TableBody>\n {filteredMatchups.map(team => {\n return <TableRow key={team.teamId} hover>\n <TableCell component=\"th\" scope=\"row\">\n <RecordContextProvider value={team}>\n <TeamFieldWithPool activePoolId={activePoolId} />\n </RecordContextProvider>\n </TableCell>\n {officeIds.map(officeId => <TableCell key={officeId} className={classes.officeCell}>\n {team?.officeMatchups?.[officeId] || 0}\n </TableCell>)}\n </TableRow>\n })}\n </TableBody>\n </Table>\n}\n\nconst Byes = ({ matchups, byes, activePoolId }) => {\n const translate = useTranslate();\n\n const teams = matchups.map(team => ({\n teamId: team.teamId,\n poolId: team.poolId,\n }));\n\n const filteredByesByPoolId = byes.map(week => {\n const teamIds = week.teamIds.filter(teamId => {\n const team = teams.find(team => team.teamId === teamId);\n if (!team) return false;\n return !activePoolId || team.poolId === activePoolId;\n });\n\n return { ...week, teamIds };\n });\n\n if (!filteredByesByPoolId?.length || !filteredByesByPoolId.some(week => week.teamIds?.length > 0)) return <MuiAccordionDetails>{translate('resources.schedules.messages.no_byes')}</MuiAccordionDetails>\n\n return <Table>\n <TableHead>\n <TableRow>\n <TableCell align=\"center\">{translate('resources.schedules.labels.week')}</TableCell>\n <TableCell align=\"left\">{translate('ra.date.name')}</TableCell>\n <TableCell>{translate('resources.schedules.labels.team')}</TableCell>\n </TableRow>\n </TableHead>\n <TableBody>\n {filteredByesByPoolId.map(week => {\n const { weekNumber, teamIds } = week;\n\n return <TableRow key={weekNumber}>\n <TableCell component=\"th\" scope=\"row\" align=\"center\">\n {weekNumber}\n </TableCell>\n <TableCell component=\"th\" scope=\"row\" align=\"left\">\n <RecordContextProvider value={week}>\n <DateRangeField source=\"startDate\" startSource=\"startDate\" endSource=\"endDate\" />\n </RecordContextProvider>\n </TableCell>\n <TableCell>\n {!teamIds?.length\n ? translate('ra.message.none')\n : <ByesList>\n {teamIds.map(teamId => {\n const poolId = teams.find(team => team.teamId === teamId)?.poolId;\n return <RecordContextProvider key={teamId} value={{ teamId, poolId }}>\n <ByesListItem>\n <TeamFieldWithPool activePoolId={activePoolId} />\n </ByesListItem>\n </RecordContextProvider>\n })}\n </ByesList>\n }\n </TableCell>\n </TableRow>\n })}\n </TableBody>\n </Table>\n}\n\nconst AnalyzeBody = ({ officeId, scheduleId }) => {\n const translate = useTranslate();\n const classes = useStyles();\n const { values } = useFormState();\n const record = useRecordContext();\n const [analysis, setAnalysis] = useState({});\n const [loading, setLoading] = useState(true);\n const [error, setError] = useState(false);\n\n const { matchups = [], officeMatchups, officeIds, byes } = analysis;\n const { poolId, groupId, includeDraft } = values;\n const { seasonId } = record;\n\n useEffect(() => {\n setLoading(true);\n apiClient(`/offices/${officeId}/analyze`, {\n method: \"GET\",\n params: {\n scheduleId,\n groupId,\n includeDraft,\n seasonId\n }\n })\n .then(res => res.data)\n .then(data => setAnalysis(data))\n .catch(() => setError(true))\n .finally(() => setLoading(false))\n }, [ scheduleId, officeId, groupId, includeDraft, seasonId ])\n\n if (!matchups?.length && loading) return <LinearProgress colour=\"primary\" variant=\"indeterminate\" />\n if (error) return <MuiAccordionDetails>{translate('resources.schedules.messages.unable_to_load')}</MuiAccordionDetails>\n\n if (!matchups?.length) return <MuiAccordionDetails>{translate('resources.schedules.messages.no_matchups')}</MuiAccordionDetails>\n if (matchups?.length > 200) return <MuiAccordionDetails>{translate('resources.schedules.messages.too_many_matchups')}</MuiAccordionDetails>\n\n return <>\n <div className={classes.loaderDiv}>\n {loading && <LinearProgress colour=\"primary\" variant=\"indeterminate\" />}\n </div>\n <Accordion defaultExpanded>\n <AccordionSummary expandIcon={<ExpandMore />}>\n <Heading>{translate('ra.action.summary')}</Heading>\n </AccordionSummary>\n <AccordionDetails>\n <Summary matchups={matchups} activePoolId={poolId} />\n </AccordionDetails>\n </Accordion>\n\n <Accordion>\n <AccordionSummary expandIcon={<ExpandMore />}>\n <Heading>{translate('resources.schedules.labels.matchups')}</Heading>\n </AccordionSummary>\n <AccordionDetails>\n <Matchups matchups={matchups} groupId={groupId} activePoolId={poolId} />\n </AccordionDetails>\n </Accordion>\n\n <Accordion>\n <AccordionSummary expandIcon={<ExpandMore />}>\n <Heading>{translate('resources.schedules.labels.office_matchups')}</Heading>\n </AccordionSummary>\n <AccordionDetails>\n <OfficeMatchups matchups={officeMatchups} officeIds={officeIds} activePoolId={poolId} />\n </AccordionDetails>\n </Accordion>\n\n {scheduleId ? <Accordion>\n <AccordionSummary expandIcon={<ExpandMore />}>\n <Heading>{translate('resources.schedules.labels.byes')}</Heading>\n </AccordionSummary>\n <AccordionDetails>\n <Byes matchups={matchups} byes={byes} activePoolId={poolId} />\n </AccordionDetails>\n </Accordion> : null}\n </>\n}\n\nconst AnalyzeForm = ({ scheduleId }) => {\n const classes = useStyles();\n const translate = useTranslate();\n const isEnabled = useFlag();\n\n return <>\n {isEnabled(FF_DRAFT_GAMES) && <BooleanInput className={classes.draftInput} source=\"includeDraft\" label=\"resources.schedules.labels.include_drafts\" helperText=\"\" {...inputProps} />}\n <ScheduleGroupInput className={classes.groupInput} source=\"groupId\" scheduleId={scheduleId} defaultValue={null} showNone={translate('resources.groups.messages.all_groups')} {...inputProps} />\n <PoolInput className={classes.groupInput} source=\"poolId\" scheduleId={scheduleId} {...inputProps} />\n </>\n}\n\nconst AnalyzeDialog = ({ isOpen, handleClose, scheduleId, officeId }) => {\n const translate = useTranslate();\n\n return <Dialog\n maxWidth=\"lg\"\n fullWidth\n open={isOpen}\n onClose={handleClose}\n >\n <DialogTitle>{translate('resources.schedules.labels.analysis')}</DialogTitle>\n {isOpen && <SimpleForm component={Fragment} resource=\"schedules\" toolbar={null}>\n <AnalyzeForm scheduleId={scheduleId} />\n <AnalyzeBody scheduleId={scheduleId} officeId={officeId} />\n </SimpleForm>}\n <DialogActions>\n <Button color=\"primary\" onClick={handleClose}>{translate('ra.action.close')}</Button>\n </DialogActions>\n </Dialog>\n}\n\nexport const AnalyzeButton = ({ onClick, size = \"small\", ...props }) => {\n const translate = useTranslate();\n const [ isOpen, setOpen ] = useState(false);\n\n return <>\n <Button color=\"primary\" size={size} variant=\"text\" startIcon={<BarChart />} onClick={() => setOpen(true)}>\n {translate('ra.action.analyze')}\n </Button>\n {isOpen && <AnalyzeDialog\n isOpen={isOpen}\n handleClose={() => setOpen(false)}\n {...props}\n />}\n </>\n}\n\nexport const AnalyzeMenuItem = ({ onClick, handleClose: onClose, ...props }) => {\n const translate = useTranslate();\n const [ isOpen, setOpen ] = useState(false);\n\n const handleClick = () => {\n onClick();\n setOpen(true);\n }\n\n return <>\n <ActionMenuItem color=\"primary\" size=\"small\" onClick={handleClick}>\n <ListItemIcon><BarChart fontSize=\"small\" /></ListItemIcon>\n <ListItemText>{translate('resources.offices.labels.analyzeSchedules')}</ListItemText>\n </ActionMenuItem>\n {isOpen && <AnalyzeDialog isOpen={isOpen} handleClose={() => setOpen(false)} {...props} />}\n </>\n}\n","import React from 'react';\nimport { useNotify, useRecordContext, useRefresh, useTranslate } from 'react-admin';\nimport { ListItemIcon, ListItemText, ListSubheader, useTheme } from \"@material-ui/core\"\nimport { Sync } from \"@material-ui/icons\"\n\nimport { ActionMenuItem } from \"../../common/ActionMenu\"\nimport { apiClient, usePermissions } from '../../http';\n\nconst Recalculate = ({ scheduleId, method, handleClose }) => {\n const theme = useTheme();\n const notify = useNotify();\n const refresh = useRefresh();\n const translate = useTranslate();\n const purple = theme.palette.tertiary.main;\n\n const handleClick = () => {\n handleClose();\n notify(translate('resources.schedules.notifications.recalculating'), { autoHideDuration: 3 * 1000 }) // 3s\n apiClient(`/schedules/${scheduleId}/${method}`, {\n method: 'POST',\n })\n .then(() => refresh())\n }\n\n return <ActionMenuItem size=\"small\" onClick={handleClick}>\n <ListItemIcon><Sync htmlColor={purple} /></ListItemIcon>\n <ListItemText>{translate(`resources.schedules.actions.${method}`)}</ListItemText>\n </ActionMenuItem>\n}\n\nexport default ({ handleClose }) => {\n const translate = useTranslate();\n const schedule = useRecordContext();\n if (!schedule) return null;\n\n const permissions = usePermissions()\n const isSystem = permissions.some(p => p.roleType === 'System')\n\n if (!isSystem) return null\n return <>\n <ListSubheader>{translate('resources.schedules.actions.internal')}</ListSubheader>\n <Recalculate scheduleId={schedule.id} method=\"recalculateStats\" handleClose={handleClose} />\n </>\n}\n","import React from 'react';\nimport { EditButton, ShowButton, useEditContext, useResourceContext } from 'react-admin';\n\nimport { usePermissions } from '../../http';\nimport { isAuthorized } from '../../common/Authorize';\nimport { TopToolbar } from '../../common/cards/Card';\nimport { ActionMenu } from '../../common/ActionMenu';\n\nimport { AnalyzeButton } from './AnalyzeDialog';\nimport ScheduleInternalActions from './ScheduleInternalActions';\n\nexport const ScheduleActions = ({ hasEdit, hasShow, ...props }) => {\n const resource = useResourceContext(props);\n const { basePath, record: schedule } = useEditContext(props);\n const permissions = usePermissions()\n\n if (!schedule) return null;\n const { id: scheduleId, officeId, type } = schedule;\n const isSystem = permissions.some(p => p.roleType === 'System')\n\n const canEditResource = isAuthorized(schedule, resource, 'edit');\n const canShowResource = isAuthorized(schedule, resource, 'show');\n const showInternalActions = isSystem\n\n return <TopToolbar>\n {hasEdit && canEditResource && <EditButton basePath={basePath} resource={resource} record={schedule} />}\n {hasShow && canShowResource && <ShowButton basePath={basePath} resource={resource} record={schedule} />}\n <AnalyzeButton scheduleId={scheduleId} officeId={officeId} />\n {showInternalActions && <ActionMenu>\n <ScheduleInternalActions />\n </ActionMenu>}\n </TopToolbar>\n}\n","import React, { useMemo } from 'react';\nimport { useTranslate } from 'react-admin';\nimport { useLocation } from 'react-router-dom';\nimport { useMediaQuery } from '@material-ui/core';\n\nimport { List, Show, Create, Edit } from '../../common/ra';\nimport { useSeason } from '../../common/inputs/SeasonSelector';\nimport ResourceTitle from '../../common/ResourceTitle';\nimport { ShowHeader } from '../../common/ShowHeader';\nimport { useSport } from '../../http';\n\nimport { ScheduleGrid } from './ScheduleGrid';\nimport { ScheduleFilters } from './ScheduleFilters';\nimport { ScheduleFilterList } from './ScheduleFilterList';\nimport ScheduleShowLayout from './ScheduleShow';\nimport ScheduleWizard from './ScheduleWizard';\nimport ScheduleForm from './ScheduleForm';\nimport ScheduleExporter from './ScheduleExporter';\nimport { ScheduleActions } from './ScheduleActions';\nimport { OfficeField } from '../offices/OfficeField';\n\nexport const ScheduleShowHeader = () => {\n const translate = useTranslate()\n return <ShowHeader\n name={schedule => schedule.name}\n type={schedule => `${translate('resources.schedules.name', 1)} - ${translate(`resources.schedules.values.type.${schedule.type}`, { _: schedule.type })}`}\n description={() => <OfficeField source=\"officeId\" variant=\"inherit\" />}\n />;\n}\n\nexport const ScheduleList = props => {\n const seasonId = useSeason();\n const sport = useSport();\n const isSmall = useMediaQuery(theme => theme.breakpoints.down('sm'));\n\n const exporter = (data) => ScheduleExporter(data, sport)\n exporter._include = ScheduleExporter._include\n\n return <List {...props}\n exporter={exporter}\n aside={!isSmall && <ScheduleFilterList />}\n filters={isSmall && <ScheduleFilters />}\n filterDefaultValues={{ seasonId }}\n sort={{\n field: 'name',\n order: 'ASC'\n }}\n >\n <ScheduleGrid rowClick=\"show\" />\n </List>\n}\n\nexport const ScheduleShow = props => {\n const location = useLocation();\n const scheduleTab = useMemo(() => {\n return location?.pathname?.substring(location.pathname.lastIndexOf('/') + 1)\n }, [ location.pathname ])\n\n return <Show {...props}\n title={<ScheduleShowHeader />}\n className={scheduleTab === 'scheduler' ? 'scheduler-tab-show' : ''}\n actions={<ScheduleActions />}\n >\n <ScheduleShowLayout />\n </Show>\n}\n\nexport const ScheduleCreate = props => {\n const translate = useTranslate();\n return <Create\n title={<ResourceTitle title={record => translate('resources.schedules.labels.add')} />}\n {...props}\n >\n <ScheduleWizard />\n </Create>\n}\n\nexport const ScheduleEdit = props => {\n const translate = useTranslate();\n return <Edit\n title={<ResourceTitle title={record => translate('ra.page.editing', { name: record.name })} />}\n {...props}\n >\n <ScheduleForm redirect=\"show\" />\n </Edit>\n}\n","import React from 'react';\nimport { Filter, TextInput, NullableBooleanInput, BooleanInput } from 'react-admin';\n\nimport { GAME_OFFICE_TYPES } from '@hisports/common/src/constants';\nimport { LATEST_SEASON } from '@hisports/common/src/seasons';\n\nimport { InlineDateInput } from '../../common/inputs/DateInput';\nimport { GameStatusEnumInput } from '../../common/inputs/EnumInputs';\nimport { SeasonFilter, useSeason } from '../../common/inputs/SeasonSelector';\nimport { isAuthorized } from '../../common/Authorize';\nimport { useDefaultSeason, useScopes } from '../../http';\n\nimport { OfficeInput } from '../offices/OfficeInput';\nimport { SurfaceInput } from '../surfaces/SurfaceInput';\nimport { TeamInput } from '../teams/TeamInput';\nimport { ScheduleInput } from '../schedules/ScheduleInput';\nimport { CategoryInput } from '../categories/CategoryInput';\n\nconst multipleProps = {\n multiple: true,\n allowEmpty: false,\n}\n\nconst allOfficeFilter = {\n type: { neq: 'Historical' }\n}\n\nconst localOfficeFilter = {\n type: { nin: [...GAME_OFFICE_TYPES, 'Historical'] }\n}\n\nexport const GameFilters = props => {\n const scopes = useScopes();\n const seasonId = useSeason();\n const defaultSeason = useDefaultSeason();\n\n const canListOffices = isAuthorized(scopes, 'offices', 'show');\n const canAssign = isAuthorized(scopes, 'games', 'assign');\n const canListTeams = isAuthorized(scopes, 'teams', 'list');\n const canListSurfaces = isAuthorized(scopes, 'surfaces', 'list');\n const canListSchedules = isAuthorized(scopes, 'schedules', 'list');\n const showPastSeason = (seasonId === LATEST_SEASON) || (seasonId === defaultSeason);\n\n return <Filter variant=\"outlined\" {...props}>\n <TextInput source=\"number\" alwaysOn />\n <InlineDateInput source=\"startTime\" label=\"resources.games.filters.startTime\" alwaysOn />\n <InlineDateInput source=\"endTime\" label=\"resources.games.filters.endTime\" />\n {canListOffices && <OfficeInput source=\"officeId\" filter={allOfficeFilter} {...multipleProps} />}\n {canListOffices && <OfficeInput source=\"scheduleOffices\" label=\"resources.games.filters.scheduleOffices\" filter={allOfficeFilter} alwaysOn {...multipleProps} />}\n {canListOffices && <OfficeInput source=\"teamOffices\" label=\"resources.games.filters.teamOffices\" filter={localOfficeFilter} alwaysOn {...multipleProps} />}\n {canListOffices && <OfficeInput source=\"homeTeamOffices\" label=\"resources.games.filters.homeTeamOffices\" filter={localOfficeFilter} {...multipleProps} />}\n {canListOffices && <OfficeInput source=\"awayTeamOffices\" label=\"resources.games.filters.awayTeamOffices\" filter={localOfficeFilter} {...multipleProps} />}\n {canListOffices && <OfficeInput source=\"surfaceOffices\" label=\"resources.games.filters.surfaceOffices\" filter={localOfficeFilter} {...multipleProps} />}\n {canAssign && <OfficeInput source=\"assignOffices\" label=\"resources.games.filters.assignOffices\" filter={{ ...localOfficeFilter, isAssigner: true }} alwaysOn {...multipleProps} />}\n {canListTeams && <TeamInput source=\"teamId\" label=\"resources.teams.fields.teamId\" filter={{ seasonId }} {...multipleProps} alwaysOn />}\n {canListSurfaces && <SurfaceInput source=\"effectiveSurfaces\" filter={{ parentId: null }} {...multipleProps} />}\n {canListSchedules && <ScheduleInput source=\"scheduleId\" {...multipleProps} />}\n <CategoryInput source=\"categoryId\" {...multipleProps} />\n <GameStatusEnumInput source=\"status\" {...multipleProps} />\n <NullableBooleanInput source=\"isApproved\" label=\"resources.games.filters.isApproved\" alwaysOn />\n <NullableBooleanInput source=\"isCertified\" label=\"resources.games.filters.isCertified\" alwaysOn />\n {showPastSeason && <BooleanInput source=\"pastEvents\" label=\"resources.games.filters.pastEvents\" alwaysOn />}\n <BooleanInput source=\"bracketGamesOnly\" label=\"resources.games.filters.bracketGamesOnly\" />\n <SeasonFilter source=\"seasonId\" alwaysOn />\n </Filter>\n}\n","import React, { useState, cloneElement } from 'react';\nimport { Filter as RAFilter } from 'react-admin';\n\n// load input dropdowns on focus\nconst LazyLoadFilter = (props) => {\n const [ activeFilters, setActiveFilters ] = useState({});\n\n const handleFocus = (filterName) => {\n setActiveFilters(prev => ({\n ...prev,\n [filterName]: true\n }));\n };\n\n // append onFocus and enableGetChoices props to children (inputs)\n const enhancedChildren = React.Children.map(props.children, child => {\n if (React.isValidElement(child)) {\n return cloneElement(child, {\n onFocus: () => handleFocus(child.props.source),\n enableGetChoices: () => !!activeFilters[child.props.source],\n ...child.props\n });\n }\n return child;\n });\n\n return (\n <RAFilter {...props}>\n {enhancedChildren}\n </RAFilter>\n );\n};\n\nexport default LazyLoadFilter;\n","import React, { useEffect, useRef, useState } from \"react\";\nimport { RecordContextProvider, useDataProvider, useListContext, useTranslate } from \"react-admin\";\nimport { List, ListSubheader, TextField, Tooltip, Typography, makeStyles } from \"@material-ui/core\";\nimport { Autocomplete } from \"@material-ui/lab\";\nimport { InfoOutlined } from \"@material-ui/icons\";\nimport { isEqual } from \"lodash\";\n\nimport { useOfficialList, useShowAssignments } from \"../events/EventViewSettings\";\nimport { OfficeField } from \"../offices/OfficeField\";\n\nconst useStyles = makeStyles(theme => ({\n flex: {\n display: 'flex',\n alignItems: 'center',\n flexGrow: 1,\n gap: theme.spacing(1)\n },\n autocomplete: {\n marginTop: theme.spacing(1),\n marginBottom: theme.spacing(0.5)\n },\n listSubheader: {\n paddingTop: theme.spacing(2),\n lineHeight: theme.spacing(0.25),\n }\n}))\n\nconst useDeepCompareMemoize = (value) => {\n const ref = useRef();\n if (!isEqual(value, ref.current)) {\n ref.current = value;\n }\n\n return ref.current;\n}\n\nconst renderGroup = (params) =>\n <List key={params.key}>\n <ListSubheader>\n <RecordContextProvider value={params}>\n <OfficeField source=\"group\" variant=\"inherit\" link={false} />\n </RecordContextProvider>\n </ListSubheader>\n {params.children}\n </List>\n\n\nexport const QuickAssignListInput = ({ helperText, ...props }) => {\n const classes = useStyles();\n const translate = useTranslate();\n const dataProvider = useDataProvider();\n const { filterValues } = useListContext();\n const [showAssignments] = useShowAssignments();\n const [listId, setListId] = useOfficialList();\n const [lists, setLists] = useState([]);\n const [loading, setLoading] = useState(false);\n\n const assignOffices = useDeepCompareMemoize(filterValues.assignOffices); // prevent re-refetching when other filterValues change\n const canSelectList = showAssignments && assignOffices?.length === 1;\n\n const selectedList = lists?.length ? lists.find(list => list.id === listId) : null;\n\n useEffect(() => {\n if (!canSelectList) {\n setListId(null);\n setLists([]);\n return;\n }\n\n setLoading(true);\n\n dataProvider.getList('lists', {\n pagination: { page: 1, perPage: 100 },\n sort: { field: 'officeId', order: 'ASC' },\n filter: { officeId: { inq: assignOffices }, effectiveOffices: false }\n }).then(({ data }) => {\n setLists(data);\n setLoading(false);\n });\n }, [canSelectList, assignOffices, dataProvider, setListId ]);\n\n return <div className={classes.flex}>\n <Autocomplete\n size=\"small\"\n value={selectedList}\n onChange={(event, newValue) => setListId(newValue?.id)}\n loading={loading}\n options={lists}\n getOptionLabel={(option) => option.name}\n groupBy={(option) => option.officeId}\n renderGroup={renderGroup}\n disabled={!canSelectList}\n renderInput={params => <TextField {...params} className={classes.autocomplete} variant=\"outlined\" label={translate(\"resources.lists.labels.official\")} helperText={helperText} />}\n {...props}\n />\n <Tooltip title={<Typography variant=\"body2\" display=\"inline\">{translate(\"resources.lists.helpers.quick_assign_tooltip\")}</Typography>}>\n <InfoOutlined color=\"primary\" fontSize=\"small\" />\n </Tooltip>\n </div>\n}\n","import React from 'react';\nimport { TextInput, NullableBooleanInput, BooleanInput } from 'react-admin';\nimport { makeStyles } from '@material-ui/core';\n\nimport { GAME_OFFICE_TYPES } from '@hisports/common/src/constants';\nimport { LATEST_SEASON } from '@hisports/common/src/seasons';\n\nimport { ResetFiltersButton } from '../../common/ResetFiltersButton';\nimport { InlineDateInput } from '../../common/inputs/DateInput';\nimport { GameStatusEnumInput } from '../../common/inputs/EnumInputs';\nimport { SeasonFilter, useSeason } from '../../common/inputs/SeasonSelector';\nimport { isAuthorized } from '../../common/Authorize';\nimport { FilterCard } from '../../common/cards/FilterCard';\nimport { SavedSearches } from '../../common/SavedSearches';\nimport { useDefaultSeason, useScopes } from '../../http';\nimport LazyLoadFilter from '../../common/ra/Filter';\nimport { DividerWithText } from '../../common/DividerWithText';\n\nimport { OfficeInput } from '../offices/OfficeInput';\nimport { SurfaceInput } from '../surfaces/SurfaceInput';\nimport { TeamInput } from '../teams/TeamInput';\nimport { EventViewSettingsForm, useShowAssignments } from '../events/EventViewSettings';\nimport { CategoryInput } from '../categories/CategoryInput';\nimport { ScheduleInput } from '../schedules/ScheduleInput';\nimport { QuickAssignListInput } from '../lists/QuickAssignListInput';\nimport { EffectiveOfficialsBoolean } from './cards/OfficialsCard';\n\nconst useStyles = makeStyles(theme => ({\n filters: {\n marginTop: theme.spacing(1)\n }\n}));\n\nconst filterProps = {\n fullWidth: true,\n}\n\nconst multipleProps = {\n multiple: true,\n allowEmpty: false,\n ...filterProps,\n}\n\nconst allOfficeFilter = {\n type: { neq: 'Historical' }\n}\n\nconst localOfficeFilter = {\n type: { nin: [...GAME_OFFICE_TYPES, 'Historical'] }\n}\n\nconst GameFilters = props => {\n const scopes = useScopes();\n const seasonId = useSeason();\n const defaultSeason = useDefaultSeason();\n const [ showAssignments ] = useShowAssignments();\n\n const canListOffices = isAuthorized(scopes, 'offices', 'show');\n const canAssign = isAuthorized(scopes, 'games', 'assign');\n const canListTeams = isAuthorized(scopes, 'teams', 'list');\n const canListSurfaces = isAuthorized(scopes, 'surfaces', 'list');\n const canListSchedules = isAuthorized(scopes, 'schedules', 'list');\n\n const showPastSeason = (seasonId === LATEST_SEASON) || (seasonId === defaultSeason);\n\n return <LazyLoadFilter variant=\"outlined\" margin=\"dense\" fullWidth {...props}>\n <TextInput source=\"number\" alwaysOn {...filterProps} />\n <InlineDateInput source=\"startTime\" label=\"resources.games.filters.startTime\" alwaysOn {...filterProps} />\n <InlineDateInput source=\"endTime\" label=\"resources.games.filters.endTime\" alwaysOn {...filterProps} />\n {canListOffices && <OfficeInput source=\"officeId\" filter={allOfficeFilter} {...multipleProps} />}\n {canListOffices && <OfficeInput source=\"scheduleOffices\" label=\"resources.games.filters.scheduleOffices\" filter={allOfficeFilter} alwaysOn {...multipleProps} />}\n {canListOffices && <OfficeInput source=\"teamOffices\" label=\"resources.games.filters.teamOffices\" filter={localOfficeFilter} alwaysOn {...multipleProps} />}\n {canListOffices && <OfficeInput source=\"homeTeamOffices\" label=\"resources.games.filters.homeTeamOffices\" filter={localOfficeFilter} {...multipleProps} />}\n {canListOffices && <OfficeInput source=\"awayTeamOffices\" label=\"resources.games.filters.awayTeamOffices\" filter={localOfficeFilter} {...multipleProps} />}\n {canListOffices && <OfficeInput source=\"surfaceOffices\" label=\"resources.games.filters.surfaceOffices\" filter={localOfficeFilter} {...multipleProps} />}\n\n {canAssign && showAssignments && <DividerWithText label=\"resources.games.filters.quickAssignLabel\" alwaysOn />}\n {canAssign && <OfficeInput source=\"assignOffices\" label=\"resources.games.filters.assignOffices\" filter={{ ...localOfficeFilter, isAssigner: true }} alwaysOn {...multipleProps} />}\n {canAssign && showAssignments && <EffectiveOfficialsBoolean alwaysOn {...filterProps} />}\n {canAssign && showAssignments && <QuickAssignListInput alwaysOn {...filterProps} />}\n {canAssign && showAssignments && <DividerWithText alwaysOn />}\n\n {canListSurfaces && <SurfaceInput source=\"effectiveSurfaces\" filter={{ parentId: null }} alwaysOn {...multipleProps} />}\n {canListTeams && <TeamInput source=\"teamId\" label=\"resources.teams.fields.teamId\" filter={{ seasonId }} alwaysOn {...multipleProps} />}\n {canListSchedules && <ScheduleInput source=\"scheduleId\" {...multipleProps} />}\n <CategoryInput source=\"categoryId\" alwaysOn {...multipleProps} />\n <GameStatusEnumInput source=\"status\" alwaysOn {...multipleProps} />\n <NullableBooleanInput source=\"isApproved\" label=\"resources.games.filters.isApproved\" alwaysOn {...filterProps} />\n <NullableBooleanInput source=\"isCertified\" label=\"resources.games.filters.isCertified\" alwaysOn {...filterProps} />\n {showPastSeason && <BooleanInput source=\"pastEvents\" label=\"resources.games.filters.pastEvents\" alwaysOn {...filterProps} />}\n <BooleanInput source=\"bracketGamesOnly\" label=\"resources.games.filters.bracketGamesOnly\" />\n <SeasonFilter source=\"seasonId\" alwaysOn {...filterProps} />\n </LazyLoadFilter>\n}\n\nexport const GameFilterList = ({ disableAssignments }) => {\n const classes = useStyles();\n return <FilterCard>\n <GameFilters />\n <GameFilters className={classes.filters} context=\"button\" />\n <ResetFiltersButton />\n <EventViewSettingsForm disableAssignments={disableAssignments} disableCalendar showLabel />\n <SavedSearches ignoredFilters={['seasonId', 'pastEvents']} />\n </FilterCard>\n}\n","import React, { useState } from 'react';\nimport { RecordContextProvider, useLocale, useRecordContext, useTranslate } from 'react-admin';\nimport { Dialog, DialogTitle, DialogContent as MuiDialogContent, DialogActions, Button, List, ListSubheader as MuiListSubheader, ListItem, ListItemText, ListItemIcon as MuiListItemIcon, Table, TableBody, TableRow, TableCell, Tooltip, styled, useTheme } from '@material-ui/core';\nimport { History, AddCircleOutline, DateRange, Edit, Delete, AssignmentTurnedIn, DoneAll, Assignment, Inbox, Remove, Feedback, Flag, Settings, Restore, Replay } from '@material-ui/icons';\nimport { Alert } from '@material-ui/lab';\nimport moment from 'moment-timezone';\nimport { startCase, camelCase, orderBy, groupBy } from 'lodash';\n\nimport { useHttpClient } from '../../../http';\nimport { formatCurrency } from '../../../locale';\n\nimport { ParticipantField } from '../../participants/ParticipantField';\nimport { SurfaceField } from '../../surfaces/SurfaceField';\nimport { TeamField } from '../../teams/TeamField';\nimport { ScheduleField } from '../../schedules/ScheduleField';\nimport { CategoryField } from '../../categories/CategoryField';\nimport { GroupField } from '../../groups/GroupField';\nimport { OfficeField } from '../../offices/OfficeField';\nimport { SeasonField } from '../../seasons/SeasonField';\nimport { AssignSystemField } from '../../assignSystems';\nimport { AssignFeesField } from '../../assignFees';\n\nconst DialogContent = styled(MuiDialogContent)({\n padding: 0,\n})\n\nconst ListSubheader = styled(MuiListSubheader)({\n backgroundColor: '#fff',\n})\n\nconst LabelCell = styled(TableCell)({\n width: 96,\n maxWidth: 96,\n padding: 4,\n})\n\nconst ListItemIcon = styled(MuiListItemIcon)({\n justifyContent: 'center',\n alignSelf: 'start',\n paddingTop: 4,\n})\n\nconst getPosition = event => {\n if (event.positions) return event.positions.map(position => {\n if (position === 'Linesman') return 'Linesperson'\n return position;\n }).join(', ');\n return event.position;\n}\n\nconst ChangeIcon = ({ source }) => {\n const change = useRecordContext();\n const theme = useTheme();\n switch (change[source]) {\n case 'gameCreated': return <AddCircleOutline />\n case 'gameRescheduled': return <DateRange />\n case 'gameUpdated': return <Edit />\n case 'gameDeleted': return <Delete htmlColor={theme.palette.error.main} />\n case 'gameForfeited': return <Flag />\n\n case 'assignSettingsUpdated': return <Settings />\n\n case 'officialRequested': return <Feedback />\n case 'officialAssigned': return <Inbox />\n case 'officialAccepted': return <DoneAll htmlColor={theme.palette.success.main} />\n case 'officialDeclined': return <Remove htmlColor={theme.palette.error.main} />\n\n case 'officialAdded': return <DoneAll htmlColor={theme.palette.success.main} />\n case 'officialUpdated': return <Assignment htmlColor={theme.palette.success.main} />\n case 'officialRemoved': return <Remove />\n\n case 'scoresheetApproved': return <AssignmentTurnedIn htmlColor={theme.palette.success.main} />\n case 'scoresheetDisapproved': return <Replay />\n case 'scoresheetCertified': return <DoneAll htmlColor={theme.palette.success.main} />\n case 'scoresheetDecertified': return <Replay />\n case 'scoresheetReset': return <Restore />\n\n default:\n return null;\n }\n}\n\nconst AttributeRow = ({ source }) => {\n const change = useRecordContext()\n const translate = useTranslate();\n const locale = useLocale();\n\n const value = change.event[source]\n switch (source) {\n case 'startTime': {\n const date = moment.tz(value, change.event.timezone || moment.tz.guess()).format('LL HH:mm z');\n return <TableRow>\n <LabelCell>\n {translate('resources.games.fields.startTime')}\n </LabelCell>\n <TableCell>\n <strong>{date}</strong>\n </TableCell>\n </TableRow>\n }\n\n case 'endTime': {\n const date = moment.tz(value, change.event.timezone || moment.tz.guess()).format('LL HH:mm z');\n return <TableRow>\n <LabelCell>\n {translate('resources.games.fields.endTime')}\n </LabelCell>\n <TableCell>\n <strong>{date}</strong>\n </TableCell>\n </TableRow>\n }\n\n case 'timezone': {\n if (Object.keys(change.event).some(key => ['startTime', 'endTime'].includes(key))) return null;\n\n return <TableRow>\n <LabelCell>{translate('resources.games.fields.timezone')}</LabelCell>\n <TableCell>\n {value}\n </TableCell>\n </TableRow>\n }\n\n case 'arenaId':\n return <TableRow>\n <LabelCell>\n {translate('resources.games.fields.arenaId')}\n </LabelCell>\n <TableCell>\n <SurfaceField source=\"event.arenaId\" includeAttributes=\"full\" includeCity=\"full\" />\n </TableCell>\n </TableRow>\n\n case 'homeTeamId':\n return <TableRow>\n <LabelCell>\n {translate('resources.games.fields.homeTeamId')}\n </LabelCell>\n <TableCell>\n <TeamField source=\"event.homeTeamId\" includeCategory=\"full\" includeId=\"full\" />\n </TableCell>\n </TableRow>\n\n case 'awayTeamId':\n return <TableRow>\n <LabelCell>\n {translate('resources.games.fields.awayTeamId')}\n </LabelCell>\n <TableCell>\n <TeamField source=\"event.awayTeamId\" includeCategory=\"full\" includeId=\"full\" />\n </TableCell>\n </TableRow>\n\n case 'scheduleId':\n return <TableRow>\n <LabelCell>\n {translate('resources.games.fields.scheduleId')}\n </LabelCell>\n <TableCell>\n <ScheduleField source=\"event.scheduleId\" includeCategory=\"full\" includeType=\"ful\" />\n </TableCell>\n </TableRow>\n\n case 'categoryId':\n return <TableRow>\n <LabelCell>\n {translate('resources.games.fields.categoryId')}\n </LabelCell>\n <TableCell>\n <CategoryField source=\"event.categoryId\" />\n </TableCell>\n </TableRow>\n\n case 'groupId':\n return <TableRow>\n <LabelCell>\n {translate('resources.games.fields.groupId')}\n </LabelCell>\n <TableCell>\n <GroupField source=\"event.groupId\" />\n </TableCell>\n </TableRow>\n\n case 'officeId':\n return <TableRow>\n <LabelCell>{translate('resources.games.fields.officeId')}</LabelCell>\n <TableCell>\n <OfficeField source=\"event.officeId\" />\n </TableCell>\n </TableRow>\n\n case 'seasonId':\n return <TableRow>\n <LabelCell>{translate('resources.games.fields.seasonId')}</LabelCell>\n <TableCell>\n <SeasonField source=\"event.seasonId\" />\n </TableCell>\n </TableRow>\n\n case 'systemId':\n return <TableRow>\n <LabelCell>{translate('resources.gameAssignSettings.fields.systemId')}</LabelCell>\n <TableCell>\n <AssignSystemField source=\"event.systemId\" />\n </TableCell>\n </TableRow>\n\n case 'minReferee':\n case 'minLinesperson':\n case 'minOfficial':\n case 'minScorekeeper':\n case 'minTimekeeper':\n case 'minGrade':\n case 'minRefereeGrade':\n case 'minLinespersonGrade':\n case 'minAge':\n return <TableRow>\n <LabelCell>{translate(`resources.gameAssignSettings.fields.${source}`)}</LabelCell>\n <TableCell>\n {value}\n </TableCell>\n </TableRow>\n\n case 'feesId':\n return <TableRow>\n <LabelCell>{translate('resources.assignFees.fields.fees')}</LabelCell>\n <TableCell>\n <AssignFeesField source=\"event.feesId\" />\n </TableCell>\n </TableRow>\n\n case 'fees':\n return <TableRow>\n <LabelCell>{translate('resources.assignFees.fields.fees')}</LabelCell>\n <TableCell>\n {translate('resources.assignFees.fields.Referee')}: {formatCurrency(value.Referee, locale)}<br />\n {translate('resources.assignFees.fields.Linesperson')}: {formatCurrency(value.Linesperson, locale)}<br />\n {translate('resources.assignFees.fields.LinespersonTwo')}: {formatCurrency(value.LinespersonTwo, locale)}<br />\n {translate('resources.assignFees.fields.LinespersonThree')}: {formatCurrency(value.LinespersonThree, locale)}<br />\n {translate('resources.assignFees.fields.Supervisor')}: {formatCurrency(value.Supervisor, locale)}\n </TableCell>\n </TableRow>\n\n case 'status':\n return <TableRow>\n <LabelCell>{translate('resources.games.fields.status')}</LabelCell>\n <TableCell>\n {translate(`resources.games.values.status.${value}`, { _: value })}\n </TableCell>\n </TableRow>\n\n case 'number':\n return <TableRow>\n <LabelCell>\n {translate('resources.games.fields.number')}\n </LabelCell>\n <TableCell>\n {value}\n </TableCell>\n </TableRow>\n\n default:\n return <TableRow>\n <LabelCell>\n {startCase(source)}\n </LabelCell>\n <TableCell>\n {value || <em>{translate('resources.games.labels.assignment.status.removed')}</em>}\n </TableCell>\n </TableRow>\n }\n}\n\nconst order = [\n 'startTime',\n 'endTime',\n 'arenaId',\n 'homeTeamId',\n 'awayTeamId',\n 'scheduleId',\n 'groupId',\n 'status',\n 'comments',\n\n 'number',\n 'division',\n 'gender',\n 'category',\n 'categoryId',\n 'isApproved',\n\n 'officeId',\n 'systemId',\n 'minReferee',\n 'minLinesperson',\n 'minOfficial',\n 'minScorekeeper',\n 'minTimekeeper',\n 'minGrade',\n 'minRefereeGrade',\n 'minLinespersonGrade',\n 'feesId',\n 'fees',\n 'status',\n]\n\nconst getAttributes = (game, ignored = []) => {\n const changes = Object.keys(game).filter(key => !ignored.includes(key))\n\n return changes.sort((a, b) => {\n const aIndex = order.findIndex(attribute => a === attribute);\n if (aIndex < 0) return 1;\n const bIndex = order.findIndex(attribute => b === attribute);\n if (bIndex < 0) return -1;\n return aIndex - bIndex;\n })\n}\nconst AttributeTable = ({ ignored }) => {\n const change = useRecordContext();\n return <Table size=\"small\">\n <TableBody>\n {getAttributes(change.event, ignored).map(source => {\n return <AttributeRow key={source} source={source} />\n })}\n </TableBody>\n </Table>\n}\n\nconst ChangeCell = () => {\n const change = useRecordContext();\n const translate = useTranslate();\n\n switch (change.eventType) {\n case 'gameCreated': {\n const ignored = ['division', 'gender', 'category', 'seasonId', 'isApproved']\n return <>\n {translate('resources.gameEvents.values.eventType.gameCreated')}\n <AttributeTable ignored={ignored} />\n </>\n }\n\n case 'gameRescheduled':\n return <>\n {change.event.status !== 'Cancelled'\n ? translate('resources.gameEvents.values.eventType.gameRescheduled')\n : translate('resources.gameEvents.messages.game_cancelled')\n }\n <AttributeTable />\n </>\n\n case 'gameUpdated':\n return <>\n {translate('resources.gameEvents.values.eventType.gameUpdated')}\n <AttributeTable ignored={['category']} />\n </>\n\n case 'gameDeleted':\n return translate('resources.gameEvents.messages.game_deleted');\n\n case 'gameForfeited':\n return <>\n {change.event.teamId == -1\n ? translate('resources.games.values.status.DoubleForfeit')\n : <>{translate('resources.gameEvents.values.eventType.gameForfeited')} {translate('ra.function.by')} <TeamField source=\"event.teamId\" /></>\n }\n {change.event.notes && <p>{change.event.notes}</p>}\n </>\n\n case 'scoresheetApproved':\n return translate('resources.gameEvents.messages.game_completed');\n\n case 'scoresheetDisapproved':\n return translate('resources.gameEvents.messages.game_disapproved');\n\n case 'scoresheetCertified':\n return translate('resources.gameEvents.messages.game_certified')\n\n case 'scoresheetDecertified':\n return translate('resources.gameEvents.messages.game_decertified')\n\n case 'scoresheetReset':\n return translate('resources.gameEvents.messages.game_reset')\n\n case 'assignSettingsUpdated':\n return <>\n {translate('resources.gameEvents.values.eventType.assignSettingsUpdated')}\n <AttributeTable />\n </>\n\n case 'officialRequested':\n return <>\n <ParticipantField source=\"event.official.participantId\" allowEmpty /> {translate('resources.gameEvents.messages.requested', { position: getPosition(change.event) })}\n </>\n\n case 'officialAssigned':\n return <>\n <ParticipantField source=\"event.official.participantId\" allowEmpty /> {translate('resources.gameEvents.messages.assigned_as', { position: getPosition(change.event) })}\n </>\n\n case 'officialAccepted':\n return <>\n <ParticipantField source=\"event.participantId\" allowEmpty /> {translate('resources.gameEvents.messages.accepted_assignment')}\n </>\n\n case 'officialDeclined':\n return <>\n <ParticipantField source=\"event.participantId\" allowEmpty /> {translate('resources.gameEvents.messages.declined_assignment')}\n </>\n\n\n case 'officialAdded':\n return <>\n <ParticipantField source=\"event.official.participantId\" allowEmpty /> {translate('resources.gameEvents.messages.added_as', { position: getPosition(change.event) })}\n </>\n\n case 'officialUpdated':\n return <>\n <ParticipantField source=\"event.participantId\" allowEmpty /> {translate('resources.gameEvents.messages.changed_to', { position: getPosition(change.event) })}\n </>\n\n case 'officialRemoved':\n return <>\n <ParticipantField source=\"event.participantId\" allowEmpty /> {translate('resources.gameEvents.messages.removed')}\n </>\n\n default:\n return null;\n }\n}\n\nconst nameCase = name => {\n if (name.includes('@')) return name;\n return startCase(camelCase(name));\n}\n\nconst ChangeItem = () => {\n const change = useRecordContext()\n const translate = useTranslate();\n const time = moment(change.meta.timestamp || change.timestamp);\n\n return <ListItem dense>\n <ListItemIcon>\n <ChangeIcon source=\"eventType\" />\n </ListItemIcon>\n <ListItemText\n primary={<ChangeCell />}\n secondary={<>\n <Tooltip title={time.format('YYYY-MM-DD HH:mm:ss')}><span>{time.format('h:mm A')}</span></Tooltip> {translate('ra.function.by')} {nameCase(change.meta.actorName)}\n </>}\n />\n </ListItem>\n}\n\nconst ChangesTable = ({ changes }) => {\n const sortedChanges = orderBy(changes, change => moment(change.meta.timestamp || change.timestamp).valueOf(), 'desc');\n const dates = groupBy(sortedChanges, change => moment(change.meta.timestamp || change.timestamp).format('LL'))\n\n return <List>\n {Object.keys(dates).map(date => {\n const changes = dates[date];\n return <>\n <ListSubheader>{date}</ListSubheader>\n {changes.map(change => <RecordContextProvider value={change} key={change.id}>\n <ChangeItem />\n </RecordContextProvider>)}\n </>\n })}\n </List>\n}\n\nconst ChangesCard = ({ gameId }) => {\n const translate = useTranslate();\n const { data: changes, loading, error } = useHttpClient(gameId && `/games/${gameId}/changes`)\n\n if (loading) return <Alert severity=\"info\" variant=\"outlined\">{translate('ra.page.loading')}</Alert>\n if (error) return <Alert severity=\"error\">{translate('resources.games.alerts.loading_game_error')}</Alert>\n if (!changes || !changes.length) return <Alert severity=\"success\">{translate('resources.games.alerts.no_changes_made')}</Alert>;\n\n return <ChangesTable changes={changes} />\n}\n\nexport default props => {\n const game = useRecordContext(props)\n const translate = useTranslate();\n const [ open, setOpen ] = useState(false);\n const onClose = () => {\n setOpen(false);\n }\n\n if (!game?.id) return null;\n return <>\n <Button size=\"small\" startIcon={<History />} onClick={() => setOpen(true)}>{translate('resources.gameEvents.labels.history')}</Button>\n <Dialog\n open={open}\n onClose={onClose}\n fullWidth\n maxWidth=\"sm\"\n scroll=\"paper\"\n >\n <DialogTitle>{translate('resources.games.labels.game_number_history', { number: game.number })}</DialogTitle>\n <DialogContent dividers>\n <ChangesCard gameId={game.id} />\n </DialogContent>\n <DialogActions>\n <Button onClick={onClose}>{translate('ra.action.close')}</Button>\n </DialogActions>\n </Dialog>\n </>\n}\n","import React, { Fragment, useState } from 'react'\nimport { SimpleForm, useNotify, useRecordContext, useRefresh, useTranslate } from 'react-admin';\nimport { Dialog, DialogContent, DialogContentText, DialogTitle, ListItemIcon, ListItemText } from '@material-ui/core';\nimport { Restore } from '@material-ui/icons';\n\nimport { apiClient } from '../../http';\n\nimport { ActionMenuItem } from '../../common/ActionMenu';\nimport { DialogFormToolbar } from '../../common/dialogs/DialogForm';\nimport CheckboxInput from '../../common/inputs/CheckboxInput';\nimport { AssignRuleTypeEnumInput } from '../../common/inputs/EnumInputs';\nimport { FieldDependency } from '../../common/FieldDependency';\n\nconst inputProps = {\n variant: 'outlined',\n margin: 'normal',\n fullWidth: true,\n}\n\nconst validate = values => {\n const errors = {};\n return errors;\n}\n\nconst ResetForm = (props) => {\n const translate = useTranslate();\n const types = ['systemId', 'feesId', \"minReferee\", \"minLinesperson\", \"minOfficial\", \"minScorekeeper\", \"minTimekeeper\", \"minRefereeGrade\", \"minLinespersonGrade\", \"minAge\", \"status\"]\n\n return <SimpleForm validate={validate} {...props} {...inputProps}>\n <CheckboxInput source=\"resetAssigner\" label=\"resources.games.fields.resetAssigner\" helperText=\"resources.games.helpers.reset_assigner\" {...props} {...inputProps} />\n <FieldDependency fieldSource=\"resetAssigner\" test={reset => !reset}>\n <AssignRuleTypeEnumInput source=\"rules\" types={types} label={translate(\"resources.assignRules.labels.applied_settings\", 2)} helperText=\"resources.assignRules.helpers.applied_settings\" multiple {...props} {...inputProps} />\n </FieldDependency>\n </SimpleForm>\n}\n\nconst ResetAssignRulesModal = ({ isOpen, handleClose, ...props }) => {\n const translate = useTranslate();\n const refresh = useRefresh();\n const notify = useNotify();\n const game = useRecordContext();\n\n const onSubmit = async ({ resetAssigner, rules }) => {\n await apiClient(`/games/${game.id}/applyAssignRules`, {\n method: 'POST',\n data: {\n resetAssigner,\n rules: !resetAssigner ? rules : undefined,\n }\n }).then(() => {\n handleClose();\n refresh();\n notify('ra.message.updated');\n }).catch(err => {\n handleClose();\n notify('ra.page.error_try_again', 'error')\n })\n }\n\n return <Dialog open={isOpen} onClose={handleClose} fullWidth maxWidth=\"sm\">\n <DialogTitle>{translate('resources.games.actions.applyAssignRules')}</DialogTitle>\n <DialogContent>\n <DialogContentText>\n {translate('resources.games.messages.apply_assign_rules')}\n </DialogContentText>\n <ResetForm save={onSubmit} component={Fragment} toolbar={\n <DialogFormToolbar submitLabel=\"ra.action.apply\" onCancel={handleClose} disableInvalidSubmit />\n } />\n </DialogContent>\n </Dialog>\n}\n\nexport default ({ handleClose }) => {\n const translate = useTranslate();\n const [ isOpen, setOpen ] = useState(false);\n\n const handleClick = () => {\n handleClose();\n setOpen(true);\n }\n const handleSubmit = () => {\n setOpen(false);\n }\n\n return <>\n <ActionMenuItem color=\"primary\" size=\"small\" onClick={handleClick}>\n <ListItemIcon><Restore fontSize=\"small\" /></ListItemIcon>\n <ListItemText>{translate('resources.games.actions.applyAssignRules')}</ListItemText>\n </ActionMenuItem>\n {isOpen && <ResetAssignRulesModal isOpen={isOpen} handleClose={handleSubmit} />}\n </>\n}\n","import React, { Fragment, useState } from 'react'\nimport { SimpleForm, useNotify, useRecordContext, useRefresh, useTranslate } from 'react-admin';\nimport { Dialog, DialogContent, DialogContentText, DialogTitle, ListItemIcon, ListItemText } from '@material-ui/core';\nimport { Restore } from '@material-ui/icons';\n\nimport { apiClient } from '../../http';\n\nimport { ActionMenuItem } from '../../common/ActionMenu';\nimport { DialogFormToolbar } from '../../common/dialogs/DialogForm';\nimport CheckboxInput from '../../common/inputs/CheckboxInput';\nimport { SquareAlert } from '../../common/SquareAlert';\n\nconst inputProps = {\n variant: 'outlined',\n margin: 'normal',\n fullWidth: true,\n}\n\nconst validate = values => {\n const errors = {};\n if (!values.confirm) errors.confirm ='ra.validation.required';\n return errors;\n}\n\nconst ResetForm = (props) => {\n return <SimpleForm validate={validate} {...props} {...inputProps}>\n <CheckboxInput\n source=\"confirm\"\n label=\"resources.scoresheets.validations.confirm\"\n helperText=\"\"\n {...props}\n {...inputProps}\n />\n </SimpleForm>\n}\n\nconst ResetScoresheetModal = ({ isOpen, handleClose, ...props }) => {\n const translate = useTranslate();\n const refresh = useRefresh();\n const notify = useNotify();\n const game = useRecordContext();\n const isApproved = game?.isApproved;\n\n const onSubmit = async () => {\n await apiClient(`/games/${game.id}/resetScoresheet`, {\n method: 'POST',\n }).then(() => {\n handleClose();\n refresh();\n notify('resources.scoresheets.notifications.reset');\n }).catch(err => {\n handleClose();\n const errorName = err?.response?.data?.error?.name;\n const errorMessage = errorName && `resources.scoresheets.notifications.errors.${errorName}`;\n notify(errorMessage || 'ra.page.error_try_again', 'error')\n })\n }\n\n return <Dialog open={isOpen} onClose={handleClose} fullWidth maxWidth=\"sm\">\n <DialogTitle>{translate('resources.scoresheets.labels.reset_scoresheet')}</DialogTitle>\n {isApproved && <SquareAlert severity=\"warning\">\n {translate('resources.scoresheets.alerts.cannot_reset')}\n </SquareAlert>}\n <DialogContent>\n <DialogContentText color={isApproved ? \"textSecondary\" : \"\"}>\n {translate('resources.scoresheets.messages.reset_scoresheet')}\n </DialogContentText>\n <ResetForm disabled={isApproved} save={onSubmit} component={Fragment} toolbar={\n <DialogFormToolbar submitLabel=\"ra.action.reset\" onCancel={handleClose} disableInvalidSubmit />\n } />\n </DialogContent>\n </Dialog>\n}\n\nexport default ({ handleClose }) => {\n const translate = useTranslate();\n const [ isOpen, setOpen ] = useState(false);\n\n const handleClick = () => {\n handleClose();\n setOpen(true);\n }\n const handleSubmit = () => {\n setOpen(false);\n }\n\n return <>\n <ActionMenuItem color=\"primary\" size=\"small\" onClick={handleClick}>\n <ListItemIcon><Restore fontSize=\"small\" /></ListItemIcon>\n <ListItemText>{translate('resources.scoresheets.labels.reset_scoresheet')}</ListItemText>\n </ActionMenuItem>\n {isOpen && <ResetScoresheetModal isOpen={isOpen} handleClose={handleSubmit} />}\n </>\n}\n","import React from 'react';\nimport { useNotify, useRecordContext, useRefresh, useTranslate } from 'react-admin';\nimport { ListItemIcon, ListItemText, ListSubheader, useTheme } from \"@material-ui/core\"\nimport { Sync } from \"@material-ui/icons\"\n\nimport { ActionMenuItem } from \"../../../common/ActionMenu\"\nimport { apiClient } from '../../../http';\n\nconst Recalculate = ({ gameId, method, handleClose }) => {\n const theme = useTheme();\n const notify = useNotify();\n const refresh = useRefresh();\n const translate = useTranslate();\n const purple = theme.palette.tertiary.main;\n\n const handleClick = () => {\n handleClose();\n notify(translate('resources.games.notifications.recalculating'), { autoHideDuration: 3 * 1000 }) // 3s\n apiClient(`/games/${gameId}/${method}`, {\n method: 'POST',\n })\n .then(() => refresh())\n }\n return <ActionMenuItem size=\"small\" onClick={handleClick}>\n <ListItemIcon><Sync htmlColor={purple} /></ListItemIcon>\n <ListItemText>{translate(`resources.games.actions.${method}`)}</ListItemText>\n </ActionMenuItem>\n}\n\nexport default ({ handleClose }) => {\n const translate = useTranslate();\n const game = useRecordContext();\n if (!game) return null;\n\n return <>\n <ListSubheader>{translate('resources.games.actions.internal')}</ListSubheader>\n {game.isApproved && <Recalculate gameId={game.id} method=\"recalculateStats\" handleClose={handleClose} />}\n <Recalculate gameId={game.id} method=\"recalculateScoresheet\" handleClose={handleClose} />\n <Recalculate gameId={game.id} method=\"recalculateTransactions\" handleClose={handleClose} />\n </>\n}\n","import React from 'react';\nimport { EditButton, ShowButton, useEditContext, useResourceContext } from 'react-admin';\nimport { Divider } from '@material-ui/core';\n\nimport { ActionMenu } from '../../common/ActionMenu';\nimport { isAuthorized } from '../../common/Authorize';\nimport { TopToolbar } from '../../common/cards/Card';\n\nimport ChangesCard from './cards/ChangesCard';\nimport ResetAssignRulesModal from './ResetAssignRulesModal';\nimport ResetScoresheetModal from '../games/ResetScoresheetModal'\nimport InternalScoresheetActions from '../scoresheet/actions/InternalScoresheetActions';\n\nexport const GameActions = ({ hasEdit, hasShow, ...props }) => {\n const resource = useResourceContext(props)\n const { basePath, record } = useEditContext(props);\n const canEditResource = isAuthorized(record, resource, 'edit');\n const canShowResource = isAuthorized(record, resource, 'show');\n const canResetAssignRules = isAuthorized(record, resource, 'resetAssignRules');\n const canResetScoresheet = isAuthorized(record, resource, 'resetScoresheet');\n const canUseInternalActions = isAuthorized(record, resource, 'internal');\n\n return <TopToolbar>\n <ChangesCard />\n {hasEdit && canEditResource && <EditButton basePath={basePath} resource={resource} record={record} />}\n {hasShow && canShowResource && <ShowButton basePath={basePath} resource={resource} record={record} />}\n <ActionMenu>\n {canResetAssignRules && <ResetAssignRulesModal />}\n {canResetScoresheet && <ResetScoresheetModal />}\n {(canResetAssignRules || canResetScoresheet) && canUseInternalActions && <Divider />}\n {canUseInternalActions && <InternalScoresheetActions />}\n </ActionMenu>\n </TopToolbar>\n}\n","import React from 'react';\nimport { useRecordContext, useLocale, useTranslate } from 'react-admin';\nimport { Card, List, ListItem, ListItemIcon, ListItemText } from '@material-ui/core';\nimport { Sports, AssignmentOutlined, People, Nfc, TabletMac } from '@material-ui/icons'\n\nimport { FF_GOALIES, FF_SCOREKEEPING_APP } from '@hisports/common/featureFlags';\nimport { KEEPER_POSITIONS, OFFICIAL_POSITIONS } from '@hisports/scoresheet/src/constants';\n\nimport { useFlag } from '../../../http';\nimport { isAuthorized } from '../../../common/Authorize';\nimport { ListItemLink } from '../../../common/cards/LinksCard';\n\nconst LinkItem = ({ icon, primary, to, href, onClick }) => {\n return <ListItem button component=\"a\" to={to} href={href} onClick={onClick}>\n <ListItemIcon>{icon}</ListItemIcon>\n <ListItemText primary={primary} />\n </ListItem>\n}\n\nexport default ({ status, ...props }) => {\n const isEnabled = useFlag();\n const game = useRecordContext(props);\n const translate = useTranslate();\n const locale = useLocale();\n\n if (!game) return null;\n\n const { status: gameStatus, officials, scorekeeping = false, assigning = false, scoringMode = 'Detailed', penaltyMode = 'Detailed' } = status || {};\n const assignedOfficials = officials?.assignments?.filter(official => ['assigned', 'confirmed'].includes(official.status));\n const hasRequiredOfficials = assignedOfficials?.some(official => KEEPER_POSITIONS.includes(official.position)) && assignedOfficials?.some(official => OFFICIAL_POSITIONS.includes(official.position));\n const reportUrl = `${process.env.PDF_URL}/game/${game.id}?locale=${locale}`\n const isGameComplete = game.isApproved;\n const isGameStarted = gameStatus !== 'scheduled';\n const scorekeepingUrl = isGameStarted && hasRequiredOfficials ? `/scoresheets/${game.id}/scoresheet` : `/scoresheets/${game.id}/pregame`;\n const hasTeam = game.homeTeamId || game.awayTeamId;\n\n const canEditScoresheet = scorekeeping && (scoringMode === 'Detailed' && penaltyMode === 'Detailed') && isEnabled(FF_SCOREKEEPING_APP) && isAuthorized(game, 'scoresheets', 'full');\n const canManageLineups = scorekeeping && hasTeam && isAuthorized(game, 'scoresheets', 'lineup');\n const canAssignOfficials = assigning && isAuthorized(game, 'games', 'assign');\n const canRequestAssignment = assigning && isAuthorized(game, 'games', 'request');\n const showOfficials = canAssignOfficials || canRequestAssignment\n const canEditShots = scorekeeping && isEnabled(FF_GOALIES) && isGameComplete && isAuthorized(game, 'games', 'shots');\n\n let officialLabel = translate('resources.games.labels.assignment.game_officials');\n if (canAssignOfficials) {\n officialLabel = translate('resources.games.labels.assignment.assign_officials');\n }\n\n const actions = [\n isGameComplete && <LinkItem href={reportUrl} icon={<AssignmentOutlined />} primary={translate('resources.games.labels.report')} target=\"_blank\" />,\n canEditScoresheet && <LinkItem href={scorekeepingUrl} icon={<TabletMac />} primary={translate('resources.games.labels.scorekeeping')} />,\n showOfficials && <ListItemLink to={`/games/${game.id}/show/officials`} icon={<Sports />} primary={officialLabel} />,\n canManageLineups && <ListItemLink to={`/games/${game.id}/show/scoresheet`} icon={<People />} primary={translate('resources.games.labels.team_lineups')} />,\n canEditShots && <ListItemLink to={`/games/${game.id}/show/scoresheet`} icon={<Nfc />} primary={translate('components.goalie_shots_against.name')} />,\n ].filter(Boolean);\n\n if (!canAssignOfficials && !canEditScoresheet && !canManageLineups && !isGameComplete) return null;\n return <Card>\n <List>\n {actions}\n </List>\n </Card>\n}\n","import React from 'react';\n\nimport ListCard from '../../../common/cards/ListCard';\n\nimport { EventView } from '../../events/EventView';\n\nexport default props =>\n <ListCard\n title=\"resources.officialConflicts.labels.card.title\"\n subtitle=\"resources.officialConflicts.labels.card.subtitle\"\n reference=\"games\"\n target=\"conflicts\"\n rowsPerPageOptions={[]}\n sort={{ field: 'startTime', order: 'ASC' }}\n >\n <EventView rowClick={false} hideGroup hideStatus showSchedule disableCalendar />\n </ListCard>\n","import React from 'react';\nimport { RecordContextProvider, ReferenceManyField, ResourceContextProvider, useRecordContext, useTranslate } from 'react-admin';\nimport { Card, CardHeader, CardContent, CardActions, makeStyles, Divider } from '@material-ui/core'\n\nimport { MessageGrid } from '../../messages/MessageGrid';\nimport { MessageForm } from '../../messages/MessageForm';\n\nconst useStyles = makeStyles(theme => ({\n actions: {\n padding: 0,\n },\n form: {\n width: '100%',\n }\n}))\nexport default ({ type = 'League', showCreate = false, ...props }) => {\n const game = useRecordContext(props);\n const classes = useStyles();\n const translate = useTranslate();\n\n const recipients = type === 'League'\n ? translate('resources.games.labels.assignment.team_officials').toLowerCase()\n : translate('resources.games.labels.assignment.assigners').toLowerCase();\n const helperText = translate('resources.gameMessages.helpers.notification_sent_to', { recipients });\n\n return <Card>\n <CardHeader title={`${translate('resources.gameMessages.name', 2)} (${translate(`resources.gameMessages.values.type.${type}`)})`} titleTypographyProps={{ variant: \"subtitle2\", gutterBottom: false }} />\n <Divider />\n <CardContent>\n <ReferenceManyField\n reference=\"gameMessages\"\n target=\"games\"\n label={translate('resources.gameMessages.name', 2)}\n filter={{ type }}\n sort={{ field: 'createdAt', order: 'ASC' }}\n >\n <MessageGrid type={type} />\n </ReferenceManyField>\n </CardContent>\n {showCreate && <CardActions className={classes.actions}>\n <ResourceContextProvider value=\"gameMessages\">\n <RecordContextProvider value={null}>\n <MessageForm className={classes.form} initialValues={{ gameId: game?.id, type }} helperText={helperText} />\n </RecordContextProvider>\n </ResourceContextProvider>\n </CardActions>}\n </Card>\n}\n","import React, { Fragment } from 'react';\nimport { Datagrid, DeleteButton, useTranslate, RecordContextProvider, useRecordContext } from 'react-admin';\nimport { Link, makeStyles } from '@material-ui/core'\nimport { Link as RouterLink } from 'react-router-dom';\nimport moment from 'moment-timezone';\nimport { startCase } from 'lodash';\n\nimport { dedupe } from '@hisports/parsers';\nimport { displayTime, isGeneralFlag, isTeamFlag } from '@hisports/scoresheet/src/util';\nimport { FF_BATTERS } from '@hisports/common/featureFlags';\n\nimport { useFlag, useSport } from '../../http';\nimport { isAuthorized } from '../../common/Authorize';\n\nimport { TeamField } from '../teams/TeamField';\nimport { ParticipantField } from '../participants/ParticipantField';\nimport { AccountField } from '../accounts/AccountField';\nimport { OfficeField } from '../offices/OfficeField';\nimport { AssignSystemField } from '../assignSystems';\nimport { AssignFeesField } from '../assignFees';\nimport { SurfaceField } from '../surfaces/SurfaceField';\nimport { ScheduleField } from '../schedules/ScheduleField';\nimport { GroupField } from '../groups/GroupField';\nimport { CategoryField } from '../categories/CategoryField';\nimport { InfractionField } from '../infractions/InfractionField';\n\nconst useStyles = makeStyles(theme => ({\n text: {\n whiteSpace: 'pre-line'\n },\n verticalAlignTop: {\n verticalAlign: 'top'\n }\n}))\n\nconst Timestamp = ({ timestamp, timezone = moment.tz.guess() }) =>\n <span title={moment.tz(timestamp, timezone).format('YYYY-MM-DD HH:mm:ss.SSS')}>\n {moment.tz(timestamp, timezone).format('YYYY-MM-DD hh:mm A z')}\n </span>\n\nconst TimestampDate = ({ timestamp, timezone = moment.tz.guess() }) =>\n <span title={moment.tz(timestamp, timezone).format('LL')}>\n {moment.tz(timestamp, timezone).format('LL')}\n </span>\n\nconst Participant = ({ participant }) => {\n if (!participant) return null;\n const name = participant.HCRId ? `${participant.fullName} (${participant.HCRId})` : participant.fullName;\n if (!participant.id) return name;\n return <Link component={RouterLink} to={`/participants/${participant.id}/show`}>{name}</Link>\n}\n\nconst toSuspension = suspension => !suspension ? '-' :\n `✅${suspension.game ? ` (${suspension.game}/${suspension.total || '∞'})` : ''}`\n\nconst getValue = value => {\n if (React.isValidElement(value)) return value;\n if (typeof value === 'undefined') return '-';\n if (value === true) return '✅';\n if (value === false) return '❌';\n if (typeof value === 'string') return value;\n if (Array.isArray(value) && !value.length) return 'N/A';\n if (Array.isArray(value) && value.some(React.isValidElement)) return value.map(getValue)\n if (Array.isArray(value)) return value.map(getValue).join(', ')\n return JSON.stringify(value, null, 2);\n}\n\nconst Value = ({ value }) => {\n return <td>{getValue(value)}</td>\n}\n\nconst scrollTo = id => () => {\n const row = document.getElementById(`id-${id}`);\n if (!row) return;\n row.scrollIntoView();\n}\n\nconst Row = ({ title, value, addLink }) =>\n <tr>\n <td style={{ fontWeight: 500, minWidth: 100, borderSpacing: 0 }}>{title}</td>\n <td onClick={addLink && scrollTo(value)}>{value}</td>\n </tr>\n\nconst RowValue = ({ title, value, addLink }) =>\n <Row title={title} value={getValue(value)} addLink={addLink} />\n\nconst Signature = ({ signature }) => {\n if (!signature) return JSON.stringify(signature, null, 2) || null;\n return <img style={{ border: '1px solid #efefef', maxWidth: 500 }} src={signature} alt=\"Signature\" />\n}\n\nconst Member = ({ member }) => {\n const isEnabled = useFlag();\n\n return <tr>\n <Value value={member.number != null ? member.number : ''} />\n <td><Participant participant={member.participant} /></td>\n {isEnabled(FF_BATTERS) && <Value value={member.battingOrder != null ? member.battingOrder : '-'} />}\n <Value value={member.positions} />\n <Value value={member.isCaptain} />\n <Value value={member.isAlternate} />\n <Value value={member.isAffiliate} />\n <Value value={member.isOverage} />\n <Value value={member.isUnderage} />\n <Value value={!!member.isStarter} />\n <Value value={toSuspension(member.suspension)} />\n </tr>\n}\n\nconst ThrowsInnings = ({ member }) =>\n <tr>\n <td><ParticipantField record={member} reference=\"participants\" source=\"participantId\" /></td>\n <Value value={member.throws != null ? member.throws : '-'} />\n <Value value={member.inningsPitched != null ? member.inningsPitched : '-'} />\n </tr>\n\nconst EventTypeField = () => {\n const translate = useTranslate();\n const { eventType } = useRecordContext();\n return translate(`resources.gameEvents.values.eventType.${eventType}`);\n}\n\nconst EventField = ({ game, ...props }) => {\n const isEnabled = useFlag()\n const translate = useTranslate();\n const sport = useSport();\n const { eventType, event } = useRecordContext(props);\n const classes = useStyles();\n\n switch (eventType) {\n case 'gameCreated':\n case 'gameRescheduled':\n case 'gameUpdated': {\n return <table>\n <tbody>\n {event.number && <RowValue title={translate('resources.games.fields.number')} value={event.number} />}\n {event.date && <RowValue title={translate('resources.games.fields.date')} value={<TimestampDate timestamp={event.startTime} timezone={event.timezone} />} />}\n {event.startTime && <Row title={translate('resources.games.fields.startTime')} value={<Timestamp timestamp={event.startTime} timezone={event.timezone} />} />}\n {event.endTime && <Row title={translate('resources.games.fields.endTime')} value={<Timestamp timestamp={event.endTime} timezone={event.timezone} />} />}\n {event.arenaId && <RowValue title={translate('resources.games.fields.arenaId')} value={<SurfaceField source=\"event.arenaId\" addLabel={false} allowEmpty />} />}\n {event.homeTeamId && <RowValue title={translate('resources.games.fields.homeTeamId')} value={<TeamField source=\"event.homeTeamId\" addLabel={false} allowEmpty />} />}\n {event.awayTeamId && <RowValue title={translate('resources.games.fields.awayTeamId')} value={<TeamField source=\"event.awayTeamId\" addLabel={false} allowEmpty />} />}\n {event.scheduleId && <RowValue title={translate('resources.games.fields.scheduleId')} value={<ScheduleField source=\"event.scheduleId\" addLabel={false} allowEmpty />} />}\n {event.categoryId && <RowValue title={translate('resources.games.fields.categoryId')} value={<CategoryField source=\"event.categoryId\" addLabel={false} allowEmpty />} />}\n {event.groupId && <RowValue title={translate('resources.games.fields.groupId')} value={<GroupField source=\"event.groupId\" addLabel={false} allowEmpty />} />}\n {event.status && <RowValue title={translate('resources.games.fields.status')} value={event.status} />}\n {event.comments && <RowValue title={translate('resources.games.fields.comments')} value={event.comments} />}\n </tbody>\n </table>\n }\n\n case 'assignSettingsUpdated': {\n return <table>\n <tbody>\n <RowValue title={translate('resources.offices.name', 1)} value={<OfficeField source=\"event.officeId\" addLabel={false} allowEmpty />} />\n <RowValue title={translate('resources.gameAssignSettings.fields.systemId')} value={<AssignSystemField source=\"event.systemId\" addLabel={false} allowEmpty />} />\n <RowValue title={translate('resources.gameAssignSettings.labels.referee')} value={event.minReferee} />\n <RowValue title={translate('resources.gameAssignSettings.labels.linesperson')} value={event.minLinesperson} />\n <RowValue title={translate('resources.gameAssignSettings.labels.official')} value={event.minOfficial} />\n <RowValue title={translate('resources.gameAssignSettings.labels.scorekeeper')} value={event.minScorekeeper} />\n <RowValue title={translate('resources.gameAssignSettings.labels.timekeeper')} value={event.minTimekeeper} />\n <RowValue title={translate('resources.gameAssignSettings.labels.grade')} value={event.minGrade} />\n <RowValue title={translate('resources.gameAssignSettings.labels.referee_grade')} value={event.minRefereeGrade} />\n <RowValue title={translate('resources.gameAssignSettings.labels.linesperson_grade')} value={event.minLinespersonGrade} />\n <RowValue title={translate('resources.gameAssignSettings.fields.minAge')} value={event.minAge} />\n <RowValue title={translate('resources.gameAssignSettings.fields.feesId')} value={<AssignFeesField source=\"event.feesId\" addLabel={false} allowEmpty />} />\n <RowValue title={translate('resources.gameAssignSettings.fields.status')} value={event.status} />\n </tbody>\n </table>\n }\n\n case 'lineupExtraAdded': {\n return <>\n <TeamField source=\"teamId\" addLabel={false} allowEmpty />\n <table>\n <thead>\n <tr>\n <th>#</th>\n <th>{translate('resources.members.fields.participantId')}</th>\n {isEnabled(FF_BATTERS) && <th>{translate('resources.members.fields.batter')}</th>}\n <th>{translate('resources.members.fields.positions')}</th>\n <th title={translate('resources.members.fields.isCaptain')}>{translate('resources.members.fields.abbreviations.isCaptain')}</th>\n <th title={translate('resources.members.fields.isAlternate')}>{translate('resources.members.fields.abbreviations.isAlternate')}</th>\n <th title={translate('resources.members.fields.isAffiliate')}>{translate('resources.members.fields.abbreviations.isAffiliate')}</th>\n <th title={translate('resources.members.fields.isOverage')}>{translate('resources.members.fields.abbreviations.isOverage')}</th>\n <th title={translate('resources.members.fields.isUnderage')}>{translate('resources.members.fields.abbreviations.isUnderage')}</th>\n <th title={translate('resources.members.fields.isStarter')}>{translate('resources.members.fields.abbreviations.isStarter')}</th>\n <th title={translate('resources.members.labels.suspension')}>{translate('resources.members.labels.suspension_abbreviation')}</th>\n </tr>\n </thead>\n <tbody>\n <Member member={event.member} />\n </tbody>\n </table>\n </>\n }\n\n case 'lineupExtraRemoved': {\n return <table>\n <tbody>\n <RowValue title={translate('resources.teams.name', 1)} value={<TeamField source=\"event.teamId\" addLabel={false} allowEmpty />} />\n <RowValue title={translate('resources.participants.name', 1)} value={<ParticipantField source=\"event.participantId\" addLabel={false} allowEmpty />} />\n </tbody>\n </table>\n }\n\n case 'lineupUpdated': {\n const members = event.members.map(member => <Member member={member} key={member.id} />)\n\n return <>\n <TeamField source=\"event.teamId\" addLabel={false} allowEmpty />\n <table>\n <thead>\n <tr>\n <th>#</th>\n <th>{translate('resources.members.fields.participantId')}</th>\n {isEnabled(FF_BATTERS) && <th>{translate('resources.members.fields.batter')}</th>}\n <th>{translate('resources.members.fields.positions')}</th>\n <th title={translate('resources.members.fields.isCaptain')}>{translate('resources.members.fields.abbreviations.isCaptain')}</th>\n <th title={translate('resources.members.fields.isAlternate')}>{translate('resources.members.fields.abbreviations.isAlternate')}</th>\n <th title={translate('resources.members.fields.isAffiliate')}>{translate('resources.members.fields.abbreviations.isAffiliate')}</th>\n <th title={translate('resources.members.fields.isOverage')}>{translate('resources.members.fields.abbreviations.isOverage')}</th>\n <th title={translate('resources.members.fields.isUnderage')}>{translate('resources.members.fields.abbreviations.isUnderage')}</th>\n <th title={translate('resources.members.fields.isStarter')}>{translate('resources.members.fields.abbreviations.isStarter')}</th>\n <th title={translate('resources.members.labels.suspension')}>{translate('resources.members.labels.suspension_abbreviation')}</th>\n </tr>\n </thead>\n <tbody>\n {members}\n </tbody>\n </table>\n </>\n }\n\n case 'lineupApproved': {\n return <>\n <table>\n <tbody>\n <RowValue title={translate('resources.teams.name', 1)} value={<TeamField source=\"event.teamId\" addLabel={false} allowEmpty />} />\n <RowValue title={translate('resources.gameEvents.labels.signatory')} value={<ParticipantField source=\"event.participantId\" addLabel={false} allowEmpty />} />\n </tbody>\n </table>\n <Signature signature={event.signature} />\n </>\n }\n\n case 'keepersUpdated': {\n return <table>\n <tbody>\n <RowValue title={translate('resources.gameEvents.labels.scorekeeper')} value={event.scorekeeper} />\n <RowValue title={translate('resources.gameEvents.labels.timekeeper')} value={event.timekeeper} />\n </tbody>\n </table>\n }\n\n case 'officialRequested':\n case 'officialAssigned':\n case 'officialAdded': {\n const position = event.position || (event.positions && event.positions[0])\n return <table>\n <tbody>\n <RowValue title=\"ID\" value={event.official.id} />\n <RowValue title={translate('resources.participants.name', 1)} value={<Participant participant={event.official.participant} />} />\n <RowValue title={translate('resources.gameEvents.labels.position', 1)} value={translate(`resources.games.values.assignment.position.${position}`, { _: position })} />\n <RowValue title={translate('resources.gameEvents.labels.notes')} value={event.notes} />\n </tbody>\n </table>\n }\n\n case 'officialAccepted':\n case 'officialDeclined': {\n return <table>\n <tbody>\n {event.participantId && <RowValue title={translate('resources.participants.name', 1)} value={<ParticipantField source=\"event.participantId\" addLabel={false} allowEmpty />} />}\n <RowValue title={translate('resources.gameEvents.labels.notes')} value={event.notes} />\n </tbody>\n </table>\n }\n\n case 'officialDelegated': {\n const position = event.position || (event.positions && event.positions[0])\n return <table>\n <tbody>\n {event.participantId && <RowValue title={translate('resources.participants.name', 1)} value={<ParticipantField source=\"event.participantId\" addLabel={false} allowEmpty />} />}\n {event.officialId && <RowValue title={translate('resources.officials.labels.official_id')} value={event.officialId} />}\n {event.officeId && <RowValue title={translate('resources.officials.fields.officeId')} value={<OfficeField source=\"event.officeId\" addLabel={false} allowEmpty />} />}\n {event.payOfficeId && <RowValue title={translate('resources.officials.fields.payOfficeId')} value={<OfficeField source=\"event.payOfficeId\" addLabel={false} allowEmpty />} />}\n <RowValue title={translate('resources.gameEvents.labels.position', 1)} value={translate(`resources.games.values.assignment.position.${position}`, { _: position })} />\n </tbody>\n </table>\n }\n\n case 'officialUpdated': {\n const position = event.position || (event.positions && event.positions[0])\n return <table>\n <tbody>\n {event.participantId && <RowValue title={translate('resources.participants.name', 1)} value={<ParticipantField source=\"event.participantId\" addLabel={false} allowEmpty />} />}\n {event.officialId && <RowValue title={translate('resources.officials.labels.official_id')} value={event.officialId} />}\n <RowValue title={translate('resources.gameEvents.labels.position', 1)} value={translate(`resources.games.values.assignment.position.${position}`, { _: position })} />\n {event.status && <RowValue title={translate('resources.games.fields.status')} value={translate(`resources.games.labels.assignment.status.${event.status}`, { _: event.status })} />}\n </tbody>\n </table>\n }\n\n case 'officialRemoved': {\n return <table>\n <tbody>\n {event.participantId && <RowValue title={translate('resources.participants.name', 1)} value={<ParticipantField source=\"event.participantId\" addLabel={false} allowEmpty />} />}\n {event.officialId && <RowValue title={translate('resources.officials.labels.official_id')} value={event.officialId} />}\n {event.isNoShow && <RowValue title={translate('resources.games.fields.status')} value={translate(`resources.games.labels.assignment.status.no_show`)} />}\n </tbody>\n </table>\n }\n\n case 'settingsUpdated': {\n return <table>\n <tbody>\n <RowValue title={translate('resources.gameEvents.labels.periods.1')} value={displayTime(event.periods?.[0], sport, false, !event.periods?.[0])} />\n <RowValue title={translate('resources.gameEvents.labels.periods.2')} value={displayTime(event.periods?.[1], sport, false, !event.periods?.[1])} />\n <RowValue title={translate('resources.gameEvents.labels.periods.3')} value={displayTime(event.periods?.[2], sport, false, !event.periods?.[2])} />\n <RowValue title={translate('resources.gameEvents.labels.periods.OT')} value={displayTime(event.periods?.[3], sport, false, !event.periods?.[2])} />\n </tbody>\n </table>\n }\n\n case 'certificationFlagsUpdated': {\n const { flags = [] } = event;\n const teamIds = dedupe(flags.map(flag => flag.teamId));\n const generalFlags = flags.filter(isGeneralFlag);\n const firstTeamFlags = teamIds?.[0] && flags.filter(flag => isTeamFlag(flag) && flag.teamId === teamIds?.[0])\n const secondTeamFlags = teamIds?.[1] && flags.filter(flag => isTeamFlag(flag) && flag.teamId === teamIds?.[1])\n\n return <table>\n <tbody>\n {!!generalFlags?.length && <RowValue title={translate('resources.games.labels.general')} value={generalFlags.map(flag => translate(`resources.games.labels.flags.${flag.name}`, 2))} />}\n {!!firstTeamFlags?.length && <RowValue\n title={<TeamField source=\"id\" record={{ id: teamIds?.[0] }} addLabel={false} allowEmpty link={false} variant=\"inherit\" />}\n value={firstTeamFlags.map(flag => translate(`resources.games.labels.flags.${flag.name}`, 2))}\n />}\n {!!secondTeamFlags?.length && <RowValue\n title={<TeamField source=\"id\" record={{ id: teamIds?.[1] }} addLabel={false} allowEmpty link={false} variant=\"inherit\" />}\n value={secondTeamFlags.map(flag => translate(`resources.games.labels.flags.${flag.name}`, 2))}\n />}\n </tbody>\n </table>\n }\n\n case 'gameStarted':\n case 'scoresheetDisapproved':\n case 'scoresheetCertified':\n case 'scoresheetDecertified':\n case 'scoresheetReset':\n return null;\n\n case 'goalScored':\n case 'goalEdited': {\n const types = [\n event.isPowerplay && translate('resources.gameEvents.labels.goal.powerplay'),\n event.isShorthanded && translate('resources.gameEvents.labels.goal.shorthanded'),\n event.isEmptyNet && translate('resources.gameEvents.labels.goal.empty_net'),\n event.isPenaltyShot && translate('resources.gameEvents.labels.goal.penalty_shot'),\n event.isOwnGoal && translate('resources.gameEvents.labels.goal.own_goal')\n ].filter(Boolean)\n return <table>\n <tbody>\n { event.goalId && <RowValue title={translate('resources.gameEvents.labels.goal.id')} value={event.goalId} addLink />}\n <RowValue title={translate('resources.gameEvents.labels.game_time')} value={displayTime(event.gameTime, sport, true, false)} />\n <RowValue title={translate('resources.teams.name', 1)} value={<TeamField source=\"event.teamId\" addLabel={false} allowEmpty />} />\n <RowValue title={translate('resources.gameEvents.labels.goal.scorer')} value={<ParticipantField source=\"event.participantId\" addLabel={false} allowEmpty />} />\n { event.assistIds.length\n ? <RowValue title={translate('resources.gameEvents.labels.goal.assists')} value={event.assistIds.map((_, index) =>\n <ParticipantField source={`event.assistIds[${index}]`} addLabel={false} allowEmpty />\n )} />\n : null}\n { !!types.length && <RowValue title={translate('resources.gameEvents.labels.goal.type')} value={types.join(' / ')} />}\n </tbody>\n </table>\n }\n\n case 'goalDeleted': {\n return <table>\n <tbody>\n <RowValue title={translate('resources.gameEvents.labels.goal.id')} value={event.goalId} addLink />\n </tbody>\n </table>\n }\n\n case 'penaltyStarted':\n case 'penaltyEdited': {\n return <table>\n <tbody>\n { event.penaltyId && <RowValue title={translate('resources.gameEvents.labels.penalty.id')} value={event.penaltyId} addLink /> }\n <RowValue title={translate('resources.gameEvents.labels.game_time')} value={displayTime(event.gameTime, sport, true, false)} />\n <RowValue title={translate('resources.teams.name', 1)} value={<TeamField source=\"event.teamId\" addLabel={false} allowEmpty />} />\n <RowValue title={translate('resources.participants.name', 1)} value={<ParticipantField source=\"event.participantId\" addLabel={false} allowEmpty />} />\n <RowValue\n title={translate('resources.gameEvents.labels.penalty.infraction')}\n value={event?.infractionId ? <InfractionField source=\"event.infractionId\" /> : `${startCase(event.infraction)} - ${startCase(event.duration)}`}\n />\n { event.servedById && <RowValue title={translate('resources.gameEvents.labels.penalty.served_by')} value={<ParticipantField source=\"event.servedById\" addLabel={false} allowEmpty />} />}\n { event.startTime && <RowValue title={translate('resources.gameEvents.labels.start_time')} value={displayTime(event.startTime, sport, true, false)} />}\n { event.endTime && <RowValue title={translate('resources.gameEvents.labels.end_time')} value={displayTime(event.endTime, sport, true, false)} />}\n </tbody>\n </table>\n }\n\n case 'penaltyEnded': {\n return <table>\n <tbody>\n <RowValue title={translate('resources.gameEvents.labels.penalty.id')} value={event.penaltyId} addLink />\n <RowValue title={translate('resources.gameEvents.labels.end_time')} value={displayTime(event.endTime, sport, true, false)} />\n </tbody>\n </table>\n }\n\n case 'penaltyDeleted': {\n return <table>\n <tbody>\n <RowValue title={translate('resources.gameEvents.labels.penalty.id')} value={event.penaltyId} addLink />\n </tbody>\n </table>\n }\n\n case 'goalieChanged':\n case 'goalieChangeEdited': {\n return <table>\n <tbody>\n { event.goalieChangeId && <RowValue title={translate('resources.gameEvents.labels.goalie_change.id')} value={event.goalieChangeId} addLink /> }\n <RowValue title={translate('resources.teams.name', 1)} value={<TeamField source=\"event.teamId\" addLabel={false} allowEmpty />} />\n <RowValue title={translate('resources.gameEvents.labels.game_time')} value={displayTime(event.gameTime, sport, true, false)} />\n <RowValue title={translate('resources.gameEvents.fields.eventType')} value={event.onParticipantId ? translate('resources.gameEvents.labels.goalie_change.new_goalie') : translate('resources.gameEvents.labels.goal.empty_net')} />\n {event.onParticipantId && <RowValue title={translate('resources.gameEvents.labels.goalie_change.goalie')} value={<ParticipantField source=\"event.onParticipantId\" addLabel={false} allowEmpty />} />}\n </tbody>\n </table>\n }\n\n case 'goalieChangeDeleted': {\n return <table>\n <tbody>\n <RowValue title={translate('resources.gameEvents.labels.goalie_change.id')} value={event.goalieChangeId} addLink />\n </tbody>\n </table>\n }\n\n case 'goalieShotsUpdated': {\n return <table>\n <thead>\n <tr>\n <th>{translate('resources.gameEvents.labels.goalie_change.goalie')}</th>\n <th>1</th>\n <th>2</th>\n <th>3</th>\n <th>OT</th>\n </tr>\n </thead>\n <tbody>\n {event.goalies.map(goalie => <RecordContextProvider value={goalie}>\n <tr>\n <td><ParticipantField source=\"participantId\" addLabel={false} allowEmpty /></td>\n <td>{goalie.totals[0] || '-'}</td>\n <td>{goalie.totals[1] || '-'}</td>\n <td>{goalie.totals[2] || '-'}</td>\n <td>{goalie.totals[3] || '-'}</td>\n </tr>\n </RecordContextProvider>)}\n </tbody>\n </table>\n }\n\n case 'notesUpdated': {\n return <table>\n <tbody className={classes.verticalAlignTop}>\n {event.notes && <RowValue\n title={<span className={classes.verticalAlignTop}>{translate('resources.scoresheets.labels.scoresheet_notes')}</span>}\n value={<span className={classes.text}>{event.notes}</span>}\n />}\n {event.adminNotes && <RowValue\n title={translate('resources.scoresheets.labels.admin_notes')}\n value={<span className={classes.text}>{event.adminNotes}</span>}\n />}\n </tbody>\n </table>\n }\n\n case 'scoreUpdated': {\n return <table>\n <tbody>\n {Object.keys(event.score || {}).map(key =>\n <RowValue\n title={<TeamField source=\"id\" record={{ id: key }} addLabel={false} allowEmpty link={false} variant=\"inherit\" />}\n value={event.score[key]}\n />\n )}\n </tbody>\n </table>\n }\n\n case 'gameEnded': {\n return <table>\n <tbody>\n <RowValue title={translate('resources.gameEvents.labels.end_time')} value={displayTime(event.gameTime, sport, true, false)} />\n </tbody>\n </table>\n }\n\n case 'scoresheetApproved': {\n return <>\n {event?.emails && <table>\n <tbody>\n <RowValue title={translate('resources.gameEvents.labels.emails')} value={event.emails} />\n </tbody>\n </table>}\n {(event?.scorekeeper || event?.timekeeper || event?.officials?.length) && <table>\n <thead>\n <tr>\n <th>{translate('resources.participants.name', 1)}</th>\n <th>{translate('resources.gameEvents.labels.signature')}</th>\n </tr>\n </thead>\n <tbody>\n {event?.scorekeeper && <tr>\n <Value value={`${event.scorekeeper.name} (${translate('resources.gameEvents.labels.scorekeeper')})`} />\n <td><Signature signature={event.scorekeeper.signature} /></td>\n </tr>}\n {event?.timekeeper && <tr>\n <Value value={`${event.timekeeper.name} (${translate('resources.gameEvents.labels.timekeeper')})`} />\n <td><Signature signature={event.timekeeper.signature} /></td>\n </tr>}\n {event.officials?.map((official, index) => <tr>\n <Value value={official.participantId\n ? <ParticipantField source={`event.officials[${index}].participantId`} addLabel={false} allowEmpty />\n : official.officialId\n } />\n <td><Signature signature={official.signature} /></td>\n </tr>)}\n </tbody>\n </table>}\n </>\n }\n\n case 'gameForfeited': {\n const { homeTeamId, awayTeamId } = game || {}\n return <table>\n <tbody>\n {event?.teamId == -1\n ? <RowValue title={translate('resources.teams.name', 1)} value={translate('resources.games.values.status.DoubleForfeit')} />\n : <RowValue title={translate('resources.teams.name', 1)} value={<TeamField source=\"event.teamId\" addLabel={false} allowEmpty />} />\n }\n <RowValue title={translate('resources.gameEvents.labels.homeScore')} value={event.score?.[homeTeamId]} />\n <RowValue title={translate('resources.gameEvents.labels.awayScore')} value={event.score?.[awayTeamId]} />\n <p style={{ whiteSpace: 'pre-line', maxWidth: 700 }}>{event.notes}</p>\n </tbody>\n </table>\n }\n case 'throwsInningsUpdated': {\n const members = event.throwsInnings.map(member => <ThrowsInnings member={member} key={member.participantId} />)\n\n return <>\n <TeamField source=\"event.teamId\" addLabel={false} allowEmpty />\n <table>\n <thead>\n <tr>\n <th>{translate('resources.members.fields.participantId')}</th>\n <th>{translate('components.throws_innings.labels.throws')}</th>\n <th>{translate('components.throws_innings.labels.innings')}</th>\n </tr>\n </thead>\n <tbody>\n {members}\n </tbody>\n </table>\n </>\n }\n\n default:\n return <pre>\n {JSON.stringify(event, null, ' ')}\n </pre>\n }\n}\n\nconst systemEvents = ['gameCreated', 'gameRescheduled', 'gameUpdated', 'gameDeleted', 'assignSettingsUpdated', 'gameForfeited']\nconst User = () => {\n const event = useRecordContext();\n const translate = useTranslate();\n if (!event.meta.userId) {\n if (systemEvents.includes(event.eventType)) return translate('resources.gameEvents.labels.system');\n return translate('resources.gameEvents.labels.scorekeeper');\n }\n return <AccountField source=\"meta.userId\" addLabel={false} />\n}\n\nconst MetaField = (props) => {\n const translate = useTranslate()\n const event = useRecordContext(props)\n const { timezone } = props.game;\n const { timestamp, deviceId, transactionId } = event.meta;\n\n const offset = moment(timestamp).diff(event.timestamp);\n const delayed = offset > 30 * 1000; // took >30s to upload\n const skewed = offset < 60 * 1000 * -5; // time is >5m in the future?\n const duration = moment.duration(offset);\n\n const canDelete = isAuthorized(event, 'gameEvents', 'remove');\n return <>\n <table id={`id-${event.id}`}>\n <tbody>\n <RowValue title={translate('resources.gameEvents.labels.event_id')} value={event.id} />\n <Row title={translate('resources.gameEvents.labels.account')} value={<User />} />\n <RowValue title={translate('resources.gameEvents.labels.device')} value={deviceId} />\n {transactionId && <RowValue title={translate('resources.gameEvents.labels.transaction')} value={transactionId} />}\n <Row title={translate('resources.gameEvents.labels.created')} value={<Timestamp timestamp={event.timestamp} timezone={timezone} />} />\n {(delayed || skewed) && <Row title={translate('resources.gameEvents.labels.received')} value={<Timestamp timestamp={timestamp} timezone={timezone} />} />}\n {delayed && <tr style={{ fontWeight: 'bold', color: 'red' }}><td colSpan={2} title={duration.toISOString()}>{translate('resources.gameEvents.messages.offline_for_duration', { duration: duration.humanize() })}</td></tr>}\n {skewed && <tr style={{ fontWeight: 'bold', color: 'red' }}><td colSpan={2} title={duration.toISOString()}>{translate('resources.gameEvents.messages.time_skew_duration', { duration: duration.humanize() })}</td></tr>}\n </tbody>\n </table>\n {canDelete && <DeleteButton resource=\"gameEvents\" redirect={false} />}\n </>\n}\n\nexport const GameEventGrid = props => {\n const game = useRecordContext();\n return <Datagrid {...props}>\n <EventTypeField source=\"eventType\" sortable={false} />\n <EventField source=\"event\" sortable={false} game={game} />\n <MetaField source=\"meta\" sortable={false} game={game} />\n </Datagrid>;\n}\n","import React, { useState } from 'react';\nimport { Button, useDataProvider, useListContext, useNotify, useRecordContext, useRefresh, useTranslate } from 'react-admin';\n\nimport { apiClient } from '../../http';\nimport { Dialog, DialogActions, DialogContent, DialogContentText, DialogTitle, Button as MuiButton } from '@material-ui/core';\n\nconst recalculateScoresheet = (gameId) => {\n return apiClient(`/games/${gameId}/recalculateScoresheet`, { method: 'POST' });\n}\n\nconst DeleteEventsDialog = ({ isOpen, onSubmit, onClose, selectedIds = [] }) => {\n const translate = useTranslate()\n return <Dialog open={isOpen} fullWidth maxWidth=\"sm\" onClose={onClose}>\n <DialogTitle>{translate('resources.gameEvents.labels.delete_events', selectedIds.length)}</DialogTitle>\n <DialogContent>\n <DialogContentText>{translate('resources.gameEvents.messages.confirm_delete_events', selectedIds.length)}</DialogContentText>\n </DialogContent>\n <DialogActions>\n <MuiButton onClick={onClose}>{translate('ra.action.cancel')}</MuiButton>\n <MuiButton onClick={onSubmit} color=\"primary\">{translate('ra.action.delete')}</MuiButton>\n </DialogActions>\n </Dialog>\n}\n\nconst DeleteEvents = ({ selectedIds, resource, ...props }) => {\n const [ open, setOpen ] = useState(false);\n const game = useRecordContext()\n const dataProvider = useDataProvider();\n const { onUnselectItems } = useListContext();\n const translate = useTranslate()\n const refresh = useRefresh();\n const notify = useNotify();\n\n const onSubmit = () => {\n return Promise.all(selectedIds.map(eventId => dataProvider.delete('gameEvents', { id: eventId })))\n .then(res => {\n notify(translate('resources.gameEvents.notifications.deleted', { smart_count: res.length }), 'success')\n recalculateScoresheet(game.id)\n refresh()\n onUnselectItems()\n setOpen(false)\n })\n .catch(err => {\n console.log('err :>>', err); /* eslint-disable-line no-console */\n notify(translate('resources.gameEvents.notifications.delete_error'), 'error')\n })\n }\n\n return <>\n <Button label=\"ra.action.delete\" onClick={() => setOpen(true)} disabled={!selectedIds?.length} />\n <DeleteEventsDialog isOpen={open} onSubmit={onSubmit} onClose={() => setOpen(false)} selectedIds={selectedIds} />\n </>\n}\n\nexport const EventBulkActions = props =>\n <DeleteEvents {...props} />\n","import React from 'react';\nimport { useRecordContext } from 'react-admin';\n\nimport { isAuthorized } from '../../../common/Authorize';\nimport ListCard from '../../../common/cards/ListCard';\n\nimport { GameEventGrid } from '../../gameEvents/GameEventGrid';\nimport { EventBulkActions } from '../../events/EventBulkActions';\n\nexport default props => {\n const game = useRecordContext();\n const canDelete = isAuthorized(game, 'gameEvents', 'remove');\n\n return <ListCard\n title=\"resources.gameEvents.labels.card.title\"\n reference=\"gameEvents\"\n target=\"gameId\"\n sort={{ field: 'timestamp', order: 'ASC' }}\n rowsPerPageOptions={[]}\n perPage={9999}\n bulkActionButtons={canDelete && <EventBulkActions />}\n >\n <GameEventGrid />\n </ListCard>\n}\n","import React, { useState } from 'react'\nimport { TextInput, useInput } from 'react-admin'\nimport MaskedInput from 'react-text-mask'\nimport { InputAdornment } from '@material-ui/core'\nimport createNumberMask from 'text-mask-addons/dist/createNumberMask'\n\nconst CurrencyInput = ({ maskOptions, ...inputProps }) => {\n const currencyMask = createNumberMask({\n prefix: '',\n suffix: '',\n includeThousandsSeparator: true,\n thousandsSeparatorSymbol: ',',\n allowDecimal: true,\n decimalSymbol: '.',\n decimalLimit: 2,\n integerLimit: 7,\n allowNegative: true,\n allowLeadingZeroes: false,\n })\n\n return <MaskedInput mask={currencyMask} {...inputProps} />\n}\n\nexport default ({ nullable = false, ...props }) => {\n const {\n input: { value, onFocus, onBlur },\n } = useInput(props);\n\n const [ focused, setFocused ] = useState(false);\n\n const onInputFocus = e => {\n setFocused(true)\n return onFocus(e)\n }\n\n const onInputBlur = e => {\n setFocused(false);\n return onBlur(e)\n }\n\n const parse = price => {\n if (nullable && !price && price !== 0) return null;\n\n price = price || '';\n\n if (price === '-_') return price;\n\n return Number(price.replace(/[^0-9.-]+/g, \"\"));\n }\n\n const format = price => {\n if (price == null || isNaN(Number(price)) || focused) return price\n return Number(price).toFixed(2)\n }\n\n const shrink = focused || !!value || value === 0;\n\n return <TextInput\n {...props}\n onFocus={onInputFocus}\n onBlur={onInputBlur}\n parse={parse}\n format={format}\n options={{\n ...props.options,\n InputProps: {\n inputComponent: CurrencyInput,\n startAdornment: shrink ? <InputAdornment>$</InputAdornment> : undefined\n },\n InputLabelProps: {\n shrink,\n }\n }}\n />\n}\n","import React from 'react';\nimport { ReferenceInput, ReferenceArrayInput, useLocale } from 'react-admin';\nimport { startCase } from 'lodash';\n\nimport { useSeason } from '../../common/inputs/SeasonSelector';\nimport AutocompleteInput from '../../common/inputs/AutocompleteInput';\nimport AutocompleteSuggestion from '../../common/inputs/AutocompleteSuggestion'\nimport { getDateRange } from '../../common/fields/DateRangeField';\n\nconst toName = payPeriod => startCase(payPeriod.name);\n\nconst toDates = (payPeriod, locale) => getDateRange(payPeriod.startDate, payPeriod.endDate, locale, 'UTC');\n\nconst PayPeriodSuggestions = ({ suggestion: payPeriod, query, isHighlighted, ...props }) => {\n const locale = useLocale();\n if (!payPeriod?.id) return null;\n return <AutocompleteSuggestion primary={toName(payPeriod)} secondary={toDates(payPeriod, locale)} />\n}\n\nexport const PayPeriodInput = ({ allowEmpty, multiple, helperText, filter, ...props }) => {\n const seasonId = useSeason();\n const Input = multiple ? ReferenceArrayInput : ReferenceInput;\n\n return <Input\n reference=\"payPeriods\"\n sort={{\n field: ['startDate'],\n order: ['ASC'],\n }}\n filterToQuery={() => null}\n {...props}\n filter={{ seasonId, effectiveOffices: false, ...filter }}\n >\n <AutocompleteInput\n optionText={toName}\n helperText={helperText}\n suggestionComponent={PayPeriodSuggestions}\n />\n </Input>\n}\n","import React from 'react';\nimport { SimpleForm, TextInput } from 'react-admin';\nimport { Grid } from '@material-ui/core';\nimport { useFormState } from 'react-final-form';\nimport { useSelector } from 'react-redux';\nimport moment from 'moment-timezone';\n\nimport Toolbar from '../../common/ra/Toolbar';\nimport { DateInput } from '../../common/inputs/DateInput';\nimport CurrencyInput from '../../common/inputs/CurrencyInput';\nimport { OfficialTransactionTypeInput } from '../../common/inputs/EnumInputs';\nimport { GameInput } from '../games/GameInput';\nimport { ParticipantInput } from '../participants/ParticipantInput';\nimport { PayPeriodInput } from '../payPeriods/PayPeriodInput';\nimport { OfficeInput } from '../offices/OfficeInput';\n\n\nconst validate = values => {\n const errors = {}\n\n if (!values.gameId) errors.gameId = 'ra.validation.required';\n if (!values.participantId) errors.participantId = 'ra.validation.required';\n if (!values.officeId) errors.officeId = 'ra.validation.required';\n if (!values.date) errors.date = 'ra.validation.required';\n if (!values.type) errors.type = 'ra.validation.required';\n if ((!values.amount || isNaN(values.amount)) && values.amount !== 0) errors.amount = 'ra.validation.required';\n\n if (values.amount && !isNaN(values.amount) && values.type) {\n if (values.type === 'Withhold' && values.amount > 0) {\n errors.amount = 'ra.validation.negative'\n }\n if (values.type !== 'Withhold' && values.amount < 0) {\n errors.amount = 'ra.validation.positive'\n }\n }\n\n return errors;\n}\n\nconst inputProps = {\n variant: 'outlined',\n margin: 'none',\n fullWidth: true,\n}\n\nconst OfficialGameInput = props => {\n const { values } = useFormState()\n const { participantId, officeId } = values || {};\n\n const filter = {}\n if (participantId) {\n filter[\"officials.participantId\"] = participantId\n }\n if (officeId) {\n filter[\"officials.officeId\"] = officeId\n }\n\n return <GameInput filter={filter} {...props} />\n}\n\nconst OfficialInput = props => {\n const { values } = useFormState()\n const { gameId } = values || {};\n\n const filter = {}\n if (gameId) {\n filter[\"officialGames.gameId\"] = gameId,\n filter[\"officialGames.status\"] = \"confirmed\"\n }\n\n return <ParticipantInput disabled={!gameId} filter={filter} {...props} />\n}\n\nconst AmountInput = props => {\n const { values } = useFormState();\n const { type } = values || {};\n\n const helperText = type === 'Withhold' ? 'ra.validation.negative' : undefined;\n\n return <CurrencyInput nullable disabled={!type} helperText={helperText} {...props} />\n}\n\nconst TransactionPayPeriodInput = props => {\n const { values, initialValues } = useFormState();\n const payPeriods = useSelector(state => state.admin.resources.payPeriods.data);\n\n const payPeriod = payPeriods?.[values?.payPeriodId];\n\n return <PayPeriodInput disabled={!!initialValues?.payPeriodId || !values.officeId || payPeriod?.isClosed} filter={{ officeId: values.officeId, isClosed: false }} {...props} />\n}\n\nexport const TransactionForm = ({ initialValues, officeIds, ...props }) =>\n <SimpleForm toolbar={<Toolbar />} validate={validate} initialValues={initialValues} {...props}>\n <Grid container spacing={2} fullWidth>\n <Grid item xs={12} sm={6}>\n <OfficeInput\n source=\"officeId\"\n label=\"resources.officialTransactions.fields.officeId\"\n disabled={!officeIds && !!initialValues?.officeId}\n filter={{\n type: { nin: ['League', 'Tournament', 'Cup'] },\n id: officeIds ? { inq: officeIds } : undefined,\n }}\n {...inputProps}\n />\n </Grid>\n <Grid item xs={12} sm={6}>\n <TransactionPayPeriodInput source=\"payPeriodId\" label=\"resources.officialTransactions.fields.payPeriodId\" helperText=\"ra.message.optional\" {...inputProps} />\n </Grid>\n <Grid item xs={12} sm={4}>\n <OfficialGameInput source=\"gameId\" label=\"resources.officialTransactions.fields.gameId\" disabled={!!initialValues?.gameId} {...inputProps} />\n </Grid>\n <Grid item xs={12} sm={8}>\n <OfficialInput source=\"participantId\" label=\"resources.officialTransactions.fields.participantId\" disabled={!!initialValues?.participantId} {...inputProps} />\n </Grid>\n <Grid item xs={12} sm={4}>\n <OfficialTransactionTypeInput source=\"type\" label=\"resources.officialTransactions.fields.type\" hideBase {...inputProps} />\n </Grid>\n <Grid item xs={12} sm={4}>\n <DateInput source=\"date\" label=\"resources.officialTransactions.fields.date\" initialValue={moment.utc().format('YYYY-MM-DD')} {...inputProps} />\n </Grid>\n <Grid item xs={12} sm={4}>\n <AmountInput source=\"amount\" label=\"resources.officialTransactions.fields.amount\" {...inputProps} />\n </Grid>\n <Grid item xs={12}>\n <TextInput source=\"description\" label=\"resources.officialTransactions.fields.description\" helperText=\"ra.message.optional\" multiline rows={3} {...inputProps} />\n </Grid>\n </Grid>\n </SimpleForm>\n","import React, { useState } from 'react';\nimport { useTranslate } from 'react-admin';\nimport { Button } from '@material-ui/core';\nimport { Add } from '@material-ui/icons';\n\nimport { CreateResourceDialog, EditResourceDialog } from '../../common/dialogs/ResourceDialog';\nimport { DialogDatagrid } from '../../common/dialogs/DialogDatagrid';\n\nimport { TransactionForm } from './TransactionForm';\n\nconst AddTransactionDialog = ({ officeIds, ...props }) =>\n <CreateResourceDialog label=\"resources.officialTransactions.actions.add\" maxWidth=\"md\" resource=\"officialTransactions\" basePath=\"/officialTransactions\" {...props}>\n <TransactionForm officeIds={officeIds} />\n </CreateResourceDialog>\n\nexport const AddTransactionButton = ({ size, variant, className, ...props }) => {\n const [ isOpen, setOpen ] = useState(false);\n const translate = useTranslate();\n\n return <>\n <Button color=\"primary\" size={size} variant={variant} className={className} startIcon={<Add />} onClick={() => setOpen(true)}>{translate(\"resources.officialTransactions.actions.add\")}</Button>\n <AddTransactionDialog isOpen={isOpen} handleClose={() => setOpen(false)} {...props} />\n </>\n}\n\nexport const EditTransactionDialog = props =>\n <EditResourceDialog label=\"resources.officialTransactions.actions.edit\" maxWidth=\"md\" resource=\"officialTransactions\" basePath=\"/officialTransactions\" {...props}>\n <TransactionForm />\n </EditResourceDialog>\n\nexport const TransactionDatagrid = props =>\n <DialogDatagrid dialog={EditTransactionDialog} {...props} />\n","import React, { cloneElement, useState } from 'react';\nimport { Popover as MuiPopover } from '@material-ui/core';\n\nexport const Popover = ({ children, popoverContent, width = '400px', ...props }) => {\n const [anchorEl, setAnchorEl] = useState(null);\n\n const handleClick = (e) => {\n e.stopPropagation();\n setAnchorEl(e.currentTarget);\n };\n const handleClose = () => {\n setAnchorEl(null);\n };\n const handleBlur = () => {\n setAnchorEl(null);\n }\n const open = Boolean(anchorEl);\n const id = open ? 'simple-popover' : undefined;\n\n return <div>\n <div>\n {cloneElement(children, { onClick: handleClick })}\n </div>\n <MuiPopover\n id={id}\n open={open}\n anchorEl={anchorEl}\n onClose={handleClose}\n onBlur={handleBlur}\n anchorOrigin={{\n vertical: 'center',\n horizontal: 'left',\n }}\n transformOrigin={{\n vertical: 'center',\n horizontal: 'right',\n }}\n PaperProps={{\n style: { width }\n }}\n {...props}\n >\n {cloneElement(popoverContent, { handleClose })}\n </MuiPopover>\n </div>\n}\n\n","import React from 'react';\nimport { FunctionField } from 'react-admin';\nimport { Typography, makeStyles } from '@material-ui/core';\nimport { SmsOutlined } from '@material-ui/icons';\n\nimport { Popover } from '../Popover';\n\nconst useStyles = makeStyles(theme => ({\n popover: {\n padding: theme.spacing(2),\n whiteSpace: 'pre-line',\n },\n icon: {\n marginLeft: theme.spacing(1),\n cursor: 'pointer',\n }\n}));\n\nexport const PopoverTextField = ({ source, ...props }) => {\n const classes = useStyles();\n return <FunctionField {...props} render={record => {\n const text = record?.[source];\n if (!text) return null;\n\n return <Popover\n popoverContent={\n <div className={classes.popover}>\n <Typography variant=\"body2\">{text}</Typography>\n </div>\n }\n anchorOrigin={{\n vertical: 'bottom',\n horizontal: 'left',\n }}\n transformOrigin={{\n vertical: 'top',\n horizontal: 'right',\n }}\n >\n <SmsOutlined fontSize=\"small\" className={classes.icon} />\n </Popover>\n }} />\n}\n","import React from 'react';\nimport { FunctionField, useLocale } from 'react-admin';\n\nimport { formatCurrency } from '../../locale';\n\nexport const CurrencyField = ({ source, allowZero = false, ...props }) => {\n const locale = useLocale();\n return <FunctionField source={source} render={record => formatCurrency(record?.[source], locale, allowZero)} {...props} />;\n}\n","import React from 'react';\nimport { FunctionField, GET_ONE, ReferenceField, useQuery, useRecordContext } from \"react-admin\";\nimport { makeStyles } from '@material-ui/core';\nimport { Lock, LockOpen } from '@material-ui/icons';\nimport { useSelector } from 'react-redux';\n\nimport { usePermissions } from '../../http';\nimport { hasAnyScope } from '../../common/Authorize';\n\nconst useStyles = makeStyles(theme => ({\n root: {\n display: 'inline-flex',\n justifyContent: 'space-between',\n width: '100%',\n },\n icon: {\n marginLeft: theme.spacing(1),\n justifySelf: 'flex-end',\n alignSelf: 'center',\n },\n}))\n\nconst usePayPeriodWithStore = payPeriodId => {\n const payPeriodInStore = useSelector(state => state?.admin?.resources?.payPeriods?.data?.[payPeriodId])\n\n const { data, loading, error } = useQuery({\n type: GET_ONE,\n resource: 'payperiods',\n payload: { id: payPeriodId },\n }, {\n enabled: !payPeriodInStore && !!payPeriodId\n })\n return { data: payPeriodInStore || data, loading, error };\n}\n\nexport const PayPeriodField = props => {\n const record = useRecordContext();\n const permissions = usePermissions();\n const classes = useStyles()\n const { data: payPeriod } = usePayPeriodWithStore(record?.payPeriodId);\n\n const showPayPeriodLink = !!payPeriod && permissions.some(p =>\n p.roleType === 'System' ||\n (\n hasAnyScope(p.scopes, ['assigning:manage', 'assigning:assign'])\n && p.roleType === 'Office'\n && !p.inherited\n && (p?.officeIds || []).includes(payPeriod.officeId)\n )\n );\n\n const showLink = showPayPeriodLink && 'show'\n return <ReferenceField basePath=\"/payPeriods\" resource=\"payPeriods\" reference=\"payPeriods\" link={showLink} emptyText=\"—\" {...props}>\n <FunctionField render={({ name, isClosed }) =>\n <div className={classes.root}>\n {name}\n {isClosed\n ? <Lock className={classes.icon} fontSize=\"small\" color=\"secondary\" />\n : <LockOpen className={classes.icon} fontSize=\"small\" color=\"secondary\" />\n }\n </div>}\n />\n </ReferenceField>\n}\n","import React from 'react';\nimport { FunctionField, ReferenceField, useListContext, useTranslate } from 'react-admin';\nimport { useSelector } from 'react-redux';\nimport { Typography } from '@material-ui/core';\n\n\nimport DateField from '../../common/fields/DateField';\nimport { PopoverTextField } from '../../common/fields/PopoverTextField';\nimport { CurrencyField } from '../../common/fields/CurrencyField';\nimport { EnumField } from '../../common/inputs/EnumInputs';\n\nimport { ParticipantField } from '../participants/ParticipantField';\nimport { OfficeField } from '../offices/OfficeField';\nimport { GameField } from '../games/GameField';\nimport { PayPeriodField } from '../payPeriods/PayPeriodField';\n\nimport { TransactionDatagrid } from './TransactionModal';\n\nconst isSelectable = (transactions, payPeriods = {}) => id => {\n const transaction = transactions?.[id]\n if (transaction?.type === 'Base') return false;\n const payPeriod = payPeriods[transaction?.payPeriodId];\n if (!payPeriod) return true;\n return payPeriod.isClosed !== true;\n}\n\nexport const AmountAndDescriptionField = props =>\n <FunctionField\n render={() => {\n return <div style={{ display: 'inline-flex', gap: 4 }}>\n <CurrencyField source=\"amount\" />\n <PopoverTextField source=\"description\" />\n </div>\n }}\n {...props}\n />\n\nconst SubtypeField = props => {\n const translate = useTranslate()\n return <FunctionField\n render={({ subtype, type }) => {\n if (!subtype) return null;\n if (type === 'Base') {\n return translate(`resources.games.values.assignment.position.${subtype}`)\n }\n return translate(`resources.officialTransactions.values.subtype.${subtype}`)\n }}\n {...props}\n />\n}\n\nconst ClaimNoteField = props => {\n return <ReferenceField basePath=\"/officialClaims\" resource=\"officialClaims\" reference=\"officialClaims\" link={false} {...props}>\n <PopoverTextField source=\"note\" />\n </ReferenceField>\n}\n\nexport const TypeAndNoteField = props => {\n return <FunctionField render={({ subtype, claimId }) => {\n return <div style={{ display: 'inline-flex', gap: 4, flexWrap: 'wrap' }}>\n <EnumField source=\"type\" />\n {subtype && <Typography variant=\"body2\" color=\"textSecondary\">–</Typography>}\n {subtype && <SubtypeField source=\"subtype\" color=\"textSecondary\" />}\n <ClaimNoteField source=\"claimId\" />\n </div>\n }}\n {...props} />\n}\n\nexport const TransactionsGrid = ({ hideGame = false, hideParticipant = false, ...props }) => {\n const { data: transactions } = useListContext();\n const payPeriods = useSelector(state => state?.admin?.resources?.payPeriods?.data)\n\n const isRowSelectable = isSelectable(transactions, payPeriods);\n\n return <TransactionDatagrid size=\"medium\" rowOptions={{ isRowSelectable }} {...props}>\n {!hideParticipant && <ParticipantField source=\"participantId\" link=\"show\" includeId=\"inline\" sortable={false} />}\n {!hideGame && <GameField source=\"gameId\" includeDate=\"inline\" includeTime includeSurface=\"full\" sortable={false} />}\n <OfficeField source=\"officeId\" sortable={false} />\n <DateField source=\"date\" format=\"LL\" sortable={false} />\n <TypeAndNoteField source=\"type\" sortable={false} />\n <AmountAndDescriptionField source=\"amount\" sortable={false} />\n <PayPeriodField source=\"payPeriodId\" sortable={false} />\n </TransactionDatagrid>\n}\n","import moment from 'moment-timezone';\nimport Papa from 'papaparse'\n\nimport { appName } from '../../../flags';\nimport { getSurfaceName } from '../../surfaces/util';\n\nexport default (transactions, translate, hidePayPeriod = false) => {\n const data = transactions.map(transaction => {\n const payPeriod = transaction.payPeriod;\n const participant = transaction.participant;\n const game = transaction.game;\n const schedule = game?.schedule;\n const scheduleOffice = schedule?.office;\n const surface = game?.surface;\n const office = transaction.office;\n const amount = Number(transaction.amount).toFixed(2);\n const subtype = transaction.type === 'Base' ?\n translate(`resources.games.values.assignment.position.${transaction.subtype}`) :\n translate(`resources.officialTransactions.values.subtype.${transaction.subtype}`)\n\n return [\n !hidePayPeriod ? payPeriod?.name : false,\n game?.number,\n moment.tz(game.startTime, game.timezone).format('YYYY-MM-DD HH:mm'),\n getSurfaceName(surface),\n schedule?.name,\n scheduleOffice?.name,\n participant?.firstName,\n participant?.lastName,\n participant?.HCRId,\n office?.name,\n moment.utc(transaction.date).format('YYYY-MM-DD'),\n translate(`resources.officialTransactions.values.type.${transaction.type}`, { _: transaction.type }),\n transaction.subtype ? subtype : null,\n amount,\n ].filter(value => value !== false)\n })\n\n const csv = Papa.unparse({\n fields: [\n !hidePayPeriod && translate('components.exporter.transactions_exporter.reports.details.columns.pay_period'),\n translate('components.exporter.transactions_exporter.reports.details.columns.game_number'),\n translate('components.exporter.transactions_exporter.reports.details.columns.game_time'),\n translate('components.exporter.transactions_exporter.reports.details.columns.surface'),\n translate('components.exporter.transactions_exporter.reports.details.columns.schedule_name'),\n translate('components.exporter.transactions_exporter.reports.details.columns.schedule_office_name'),\n translate('components.exporter.transactions_exporter.reports.details.columns.first_name'),\n translate('components.exporter.transactions_exporter.reports.details.columns.last_name'),\n translate('components.exporter.transactions_exporter.reports.details.columns.member_id'),\n translate('components.exporter.transactions_exporter.reports.details.columns.assigner'),\n translate('components.exporter.transactions_exporter.reports.details.columns.transaction_date'),\n translate('components.exporter.transactions_exporter.reports.details.columns.type'),\n translate('components.exporter.transactions_exporter.reports.details.columns.subtype'),\n translate('components.exporter.transactions_exporter.reports.details.columns.amount'),\n ].filter(field => field !== false),\n data,\n });\n const fileName = `${appName} - ${translate('components.exporter.transactions_exporter.reports.details.title')} - ${moment().format('YYYY-MM-DD HH:mm')}`;\n\n\n return { csv, fileName };\n}\n","import moment from 'moment-timezone';\nimport Papa from 'papaparse'\n\nimport { dedupe } from \"@hisports/parsers\"\n\nimport { appName } from '../../../flags';\n\n\nexport default (transactions, translate) => {\n const participantIds = dedupe(transactions.map(transaction => transaction.participantId));\n\n const data = participantIds.map(participantId => {\n const participantTransactions = transactions.filter(tx => tx.participantId === participantId);\n const participant = participantTransactions?.[0]?.participant;\n\n const travelFees = participantTransactions\n .filter(tx => tx.type === 'Travel')\n .reduce((total, tx) => total += Number(tx.amount), 0)\n\n const officiatingFees = participantTransactions\n .filter(tx => tx.type === 'Base')\n .reduce((total, tx) => total += Number(tx.amount), 0)\n\n const otherFees = participantTransactions\n .filter(tx => ['Per Diem', 'Evaluation', 'Exhibition Game', 'Internship', 'Withhold', 'Other'].includes(tx.type))\n .reduce((total, tx) => total += Number(tx.amount), 0)\n\n const total = travelFees + officiatingFees + otherFees;\n\n return [\n participant?.firstName,\n participant?.lastName,\n participant?.HCRId,\n Number(officiatingFees).toFixed(2),\n Number(travelFees).toFixed(2),\n Number(otherFees).toFixed(2),\n Number(total).toFixed(2),\n ]\n })\n\n const csv = Papa.unparse({\n fields: [\n translate('components.exporter.transactions_exporter.reports.summary.columns.first_name'),\n translate('components.exporter.transactions_exporter.reports.summary.columns.last_name'),\n translate('components.exporter.transactions_exporter.reports.summary.columns.member_id'),\n translate('components.exporter.transactions_exporter.reports.summary.columns.officiating_fees'),\n translate('components.exporter.transactions_exporter.reports.summary.columns.travel_fees'),\n translate('components.exporter.transactions_exporter.reports.summary.columns.other_fees'),\n translate('components.exporter.transactions_exporter.reports.summary.columns.total_fees'),\n ],\n data,\n })\n const fileName = `${appName} - ${translate('components.exporter.transactions_exporter.reports.summary.title')} - ${moment().format('YYYY-MM-DD HH:mm')}`;\n\n return { csv, fileName };\n}\n","\nimport { exportFile, makeExporter } from '../../common/Exporter';\nimport details from './reports/details';\nimport summary from './reports/summary';\n\nconst transactionsExporter = (transactions, translate, fileType = 'csv', reportName = 'details', { hidePayPeriod = false, ...props }) => {\n let report;\n\n switch (reportName) {\n case 'summary':\n report = summary(transactions, translate);\n break;\n case 'details':\n default:\n report = details(transactions, translate, hidePayPeriod);\n break;\n }\n\n if (!report) return;\n\n return exportFile(report.csv, report.fileName, fileType);\n};\n\nconst include = [\n 'payPeriod',\n { relation: 'participant', scope: { scope: 'Tenant' } },\n { relation: 'game', scope: {\n scope: 'Tenant',\n include: [{\n relation: 'schedule',\n scope: {\n scope: 'Tenant',\n include: {\n relation: 'office',\n scope: { scope: 'Tenant' },\n }\n }\n },\n { relation: 'surface', scope: { scope: 'Tenant' } }]\n } },\n { relation: 'office', scope: { scope: 'Tenant' } },\n]\n\nexport default makeExporter(transactionsExporter, include);\n","import React from 'react';\nimport { useRecordContext } from 'react-admin';\nimport { LocalAtm } from '@material-ui/icons';\n\nimport ListCard from '../../../common/cards/ListCard';\n\nimport { usePermissions } from '../../../http';\nimport { isAuthorized } from '../../../common/Authorize';\nimport { AddTransactionButton } from '../../officialTransactions/TransactionModal';\nimport { TransactionsGrid } from '../../officialTransactions/TransactionsGrid';\nimport TransactionsExporter from '../../officialTransactions/TransactionsExporter';\n\nexport default ({ ...props }) => {\n const game = useRecordContext();\n const permissions = usePermissions();\n\n const canAddTransactions = isAuthorized(game, 'officialTransactions', 'create', false, false);\n const canSelectAnyOffice = permissions.some(p => p.roleType === 'System')\n const allowedOfficeIds = permissions\n .filter(p =>\n p.inherited === false\n && p.roleType === 'Office'\n && p.scopes.some(scope => ['assigning:manage', 'assigning:assign'].includes(scope))\n )\n .flatMap(p => p.officeIds)\n\n let officeId;\n if (!canSelectAnyOffice && allowedOfficeIds.length === 1) {\n officeId = allowedOfficeIds[0];\n }\n\n const actions = [\n <TransactionsExporter hidePayPeriod={!canAddTransactions} target=\"gameId\" />\n ]\n\n const initialValues = { officeId, gameId: game?.id }\n return <ListCard\n title=\"resources.officialTransactions.name\"\n icon={<LocalAtm />}\n reference=\"officialTransactions\"\n target=\"gameId\"\n sort={{ field: ['participant.lastName', 'participant.firstName', 'payPeriod.startDate', 'type', 'subtype'], order: ['ASC', 'ASC', 'ASC', 'ASC', 'ASC'] }}\n actions={actions}\n addButton={canAddTransactions && <AddTransactionButton\n initialValues={initialValues}\n officeIds={!canSelectAnyOffice ? allowedOfficeIds : undefined}\n target=\"gameId\"\n />}\n collapsable\n {...props}\n >\n <TransactionsGrid hideGame />\n </ListCard>\n}\n","import React from 'react';\nimport { DELETE, Datagrid, useMutation, useNotify, useRecordContext, useRefresh, useTranslate } from 'react-admin';\nimport { IconButton, Tooltip, makeStyles } from '@material-ui/core';\nimport moment from 'moment';\nimport { Delete } from '@material-ui/icons';\n\nimport { isAuthorized } from '../../common/Authorize';\nimport FunctionField from '../../common/fields/FunctionField';\n\nconst useStyles = makeStyles(theme => ({\n headerRow: {\n display: 'none',\n },\n row: {\n '& .column-createdAt': {\n maxWidth: theme.spacing(4),\n },\n },\n buttons: {\n float: 'right',\n }\n}))\n\nconst DeleteButton = ({ className }) => {\n const message = useRecordContext();\n const [ mutate, { loading } ] = useMutation();\n const notify = useNotify();\n const refresh = useRefresh();\n const translate = useTranslate();\n\n const canDelete = isAuthorized(message, 'officialClaimDocuments', 'remove');\n if (!canDelete) return null;\n\n const onClick = event => {\n if (event) {\n event.preventDefault();\n event.stopPropagation();\n }\n if (loading) return;\n mutate({\n type: DELETE,\n resource: 'officialClaimDocuments',\n payload: {\n id: message.id,\n data: message\n }\n }, {\n undoable: true,\n onSuccess() {\n notify('resources.officialClaimDocuments.notifications.deleted', 'info', {}, true);\n refresh()\n },\n onFailure() {\n notify('resources.officialClaimDocuments.notifications.delete_error', 'error')\n }\n })\n }\n\n return <Tooltip title={translate('resources.officialClaimDocuments.labels.delete')}>\n <IconButton size=\"small\" className={className} disabled={loading} onClick={onClick}>\n <Delete />\n </IconButton>\n </Tooltip>\n}\n\nconst renderMeta = (document, source, resource, translate) => {\n const { createdAt, author } = document;\n const date = moment(createdAt).calendar()\n if (!author) return date;\n return `${date} ${translate('ra.function.by')} ${author}`;\n}\n\nexport const OfficialClaimDocumentGrid = ({ canManageClaimDocuments, ...props }) => {\n const classes = useStyles();\n\n const rowClick = (id, basePath, document) => {\n const url = document?.file?.url;\n if (!url) return;\n window.open(url, '_blank')\n }\n\n return <Datagrid size=\"medium\" classes={classes} rowClick={rowClick}>\n <FunctionField source=\"name\" render={document => `${document.name}`} />\n <FunctionField source=\"createdAt\" render={renderMeta} />\n <DeleteButton className={classes.buttons} />\n </Datagrid>\n}\n","import React, { useCallback } from 'react';\nimport { get } from 'lodash';\nimport { FileInput, useNotify, useTranslate } from 'react-admin';\nimport { useFormState } from 'react-final-form';\n\nconst MAX_SIZE = 10000000 // 10mb\n\nconst OfficialClaimDocumentInput = ({ placeholder, source, ...props }) => {\n const { values } = useFormState();\n const filename = get(values, source)?.rawFile?.name;\n const notify = useNotify()\n const translate = useTranslate()\n\n const handleDropRejected = useCallback((fileRejections) => {\n if (fileRejections?.[0]?.size && fileRejections[0].size > MAX_SIZE) {\n notify(translate('ra.input.file.error_too_large'), 'error');\n }\n }, [notify, translate]);\n\n return <FileInput\n accept=\"image/*, application/pdf\"\n multiple={false}\n source={source}\n placeholder={filename || placeholder}\n maxSize={MAX_SIZE}\n options={{ onDropRejected: handleDropRejected }}\n {...props}\n >\n <div></div>\n </FileInput>\n}\n\nexport default OfficialClaimDocumentInput;\n","import React from 'react';\nimport { SimpleForm, TextInput } from 'react-admin';\nimport { Grid } from '@material-ui/core'\n\nimport Toolbar from '../../common/ra/Toolbar';\n\nimport DocumentInput from './OfficialClaimDocumentInput';\nimport { GameInput } from '../games/GameInput';\n\nconst validate = values => {\n const errors = {}\n\n if (!values.file) errors.file = 'ra.validation.required'\n if (!values.name) errors.name = 'ra.validation.required'\n return errors;\n}\n\nconst inputProps = {\n resource: 'officialClaimDocuments',\n basePath: '/officialClaimDocuments',\n variant: 'outlined',\n margin: 'none',\n fullWidth: true,\n}\n\nexport const OfficialClaimDocumentForm = props =>\n <SimpleForm toolbar={<Toolbar />} validate={validate} {...props}>\n <Grid container spacing={2} fullWidth>\n <Grid item xs={12}>\n <GameInput source=\"gameId\" disabled {...inputProps} />\n </Grid>\n <Grid item xs={12} md={9}>\n <TextInput source=\"name\" {...inputProps} />\n </Grid>\n <Grid item xs={12}>\n <DocumentInput source=\"file\" helperText=\"resources.gameDocuments.messages.max_size\" {...inputProps} />\n </Grid>\n </Grid>\n </SimpleForm>\n","import React, { Fragment, useState } from 'react';\nimport { useTranslate } from 'react-admin';\nimport { Button } from '@material-ui/core';\nimport { Add } from '@material-ui/icons';\n\nimport { DialogDatagrid } from '../../common/dialogs/DialogDatagrid';\nimport { CreateResourceDialog, EditResourceDialog } from '../../common/dialogs/ResourceDialog';\n\nimport { OfficialClaimDocumentForm } from './OfficialClaimDocumentForm';\n\nconst AddOfficialClaimDocumentDialog = props =>\n <CreateResourceDialog label=\"resources.gameDocuments.actions.add\" maxWidth=\"md\" resource=\"officialClaimDocuments\" basePath=\"/officialClaimDocuments\" {...props}>\n <OfficialClaimDocumentForm />\n </CreateResourceDialog>\n\nconst EditOfficialClaimDocumentDialog = props =>\n <EditResourceDialog label=\"resources.gameDocuments.actions.edit\" maxWidth=\"md\" resource=\"officialClaimDocuments\" basePath=\"/officialClaimDocuments\" {...props}>\n <OfficialClaimDocumentForm />\n </EditResourceDialog>\n\nexport const AddOfficialClaimDocumentButton = ({ size, variant, ...props }) => {\n const translate = useTranslate();\n const [ isOpen, setOpen ] = useState(false);\n return <>\n <Button color=\"primary\" size={size} variant={variant} startIcon={<Add />} onClick={() => setOpen(true)}>{translate('resources.gameDocuments.actions.add')}</Button>\n <AddOfficialClaimDocumentDialog isOpen={isOpen} handleClose={() => setOpen(false)} {...props} />\n </>\n}\n\nexport const OfficialClaimDocumentDatagrid = props => <DialogDatagrid dialog={EditOfficialClaimDocumentDialog} {...props} />\n","import React from 'react';\nimport { useRecordContext, useTranslate } from 'react-admin';\nimport { InsertDriveFileOutlined } from '@material-ui/icons';\n\nimport { isAuthorized } from '../../../common/Authorize';\nimport { useScopes } from '../../../http';\n\nimport ListCard from '../../../common/cards/ListCard';\nimport { OfficialClaimDocumentGrid } from '../../officialClaimsDocuments/OfficialClaimDocumentGrid';\nimport { AddOfficialClaimDocumentButton } from '../../officialClaimsDocuments/OfficialClaimDocumentModal';\nimport { Alert, AlertTitle } from '@material-ui/lab';\n\nexport default props => {\n const game = useRecordContext(props);\n const translate = useTranslate();\n const scopes = useScopes();\n\n const canManageGameDocuments = !game?.isCertified || scopes.includes('assigning:official');\n const canAddGameDocuments = isAuthorized(game, 'officialClaimDocuments', 'create') && canManageGameDocuments;\n\n if (!game?.claimId) return <Alert severity=\"info\">\n <AlertTitle>{translate('resources.officialClaimDocuments.name')}</AlertTitle>\n {translate('resources.officialClaimDocuments.messages.info_creating_claim')}\n </Alert>\n\n return <ListCard\n title={translate(\"resources.officialClaimDocuments.name\", 2)}\n icon={<InsertDriveFileOutlined fontSize=\"small\" />}\n reference=\"officialClaimDocuments\"\n target=\"games\"\n filter={{ claimId: game.claimId }}\n addButton={canAddGameDocuments && <AddOfficialClaimDocumentButton initialValues={{ gameId: game.id, claimId: game.claimId }} />}\n >\n <OfficialClaimDocumentGrid canManageGameDocuments={canManageGameDocuments} />\n </ListCard>\n}\n\n","import React, { useState, useEffect, useCallback } from 'react';\nimport { CircularProgress, TextField } from '@material-ui/core';\nimport { useForm } from 'react-final-form';\nimport { Autocomplete } from '@material-ui/lab';\n\nimport { apiClient } from '../../http';\n\nconst AddressAutoCompleteInput = ({ defaultAddress, gameId, source, ...props }) => {\n const { change } = useForm();\n const [inputValue, setInputValue] = useState('');\n const [loading, setLoading] = useState(false);\n const [suggestions, setSuggestions] = useState([]);\n const [debounceTimeout, setDebounceTimeout] = useState(null);\n\n useEffect(() => {\n if (!defaultAddress) return;\n setInputValue(defaultAddress);\n change(source, defaultAddress);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [])\n\n const handleInputChange = (event) => {\n const value = event.target.value || '';\n\n setInputValue(value);\n change(source, value);\n\n if (debounceTimeout) {\n clearTimeout(debounceTimeout);\n }\n\n setDebounceTimeout(\n setTimeout(() => {\n fetchSuggestions(value);\n }, 1000)\n );\n };\n\n const fetchSuggestions = useCallback(\n async (value) => {\n if (!value) return;\n\n try {\n setLoading(true);\n const response = await apiClient(\n `/games/${gameId}/getAddresses`,\n {\n params: {\n address: value,\n },\n }\n );\n\n if (response.data.status === 'OK') {\n setSuggestions(response.data.predictions);\n } else {\n setSuggestions([]);\n }\n } catch (error) {\n setSuggestions([]);\n } finally {\n setLoading(false);\n }\n },\n [gameId]\n );\n\n useEffect(() => {\n return () => {\n if (debounceTimeout) {\n clearTimeout(debounceTimeout);\n }\n };\n }, [debounceTimeout]);\n\n const handleSuggestionClick = (event, value) => {\n const description = value?.description || '';\n setInputValue(description);\n change(source, description);\n };\n\n const handleBlur = () => {\n const isValidAddress = suggestions.some(suggestion => suggestion.description == inputValue);\n const isDefaultAddress = inputValue == defaultAddress;\n if (!isValidAddress && !isDefaultAddress) {\n setInputValue('');\n change(source, '');\n setSuggestions([]);\n }\n };\n\n return (\n <Autocomplete\n freeSolo\n inputValue={inputValue}\n onInputChange={handleInputChange}\n onChange={handleSuggestionClick}\n options={suggestions || []}\n loading={loading}\n getOptionLabel={(option) => option?.description || ''}\n filterOptions={(options) => options}\n renderOption={(option) => (\n <div>\n {option.description}\n </div>\n )}\n renderInput={(params) => (\n <TextField\n {...params}\n {...props}\n onBlur={handleBlur}\n InputProps={{\n ...params.InputProps,\n endAdornment: (\n <>\n {loading ? <CircularProgress color=\"inherit\" size={20} /> : null}\n {params.InputProps.endAdornment}\n </>\n ),\n }}\n />\n )}\n />\n );\n};\n\nexport default AddressAutoCompleteInput;\n","import React, { useEffect, useRef, useState } from 'react';\nimport { BooleanInput, Button, GET_MANY_REFERENCE, GET_ONE, NumberInput, RecordContextProvider, SimpleForm, TextInput, useLocale, useQuery, useRecordContext, useTranslate } from 'react-admin';\nimport { useForm, useFormState } from 'react-final-form';\nimport Iframe from 'react-iframe';\nimport { Grid, InputAdornment } from '@material-ui/core'\nimport { makeStyles } from '@material-ui/styles';\nimport createCalculator from 'final-form-calculate';\nimport { isEmpty } from 'lodash';\n\nimport { dedupe } from '@hisports/parsers';\nimport { translateApiProperty } from '@hisports/common';\nimport { GAME_OFFICE_TYPES } from '@hisports/common/src/constants';\n\nimport { apiClient, usePermissions } from '../../http';\nimport { formatCurrency, formatDistance } from '../../locale';\n\nimport Toolbar from '../../common/ra/Toolbar';\nimport CurrencyInput from '../../common/inputs/CurrencyInput';\nimport { ClaimStatusEnumInput, EnumInput } from '../../common/inputs/EnumInputs';\nimport { hasAnyScope } from '../../common/Authorize';\n\nimport { OfficeInput } from '../offices/OfficeInput';\nimport { ParticipantInput } from '../participants/ParticipantInput';\nimport { GameInput } from '../games/GameInput';\nimport OfficialClaimDocumentsCard from '../games/cards/OfficialClaimDocumentsCard';\n\nimport AddressAutoCompleteInput from '../addresses/AddressAutoCompleteInput';\nimport { SquareAlert } from '../../common/SquareAlert';\n\nexport const useGameOfficials = (gameId) => useQuery({\n type: GET_MANY_REFERENCE,\n resource: 'officials',\n payload: {\n target: 'games',\n id: gameId,\n pagination: { page: 1, perPage: 100 },\n sort: { field: 'gameId', order: 'ASC' },\n filter: { participantId: { neq: null } },\n }\n}, {\n enabled: gameId != null,\n})\n\nexport const useGameAssignSettings = (gameId) => useQuery({\n type: GET_ONE,\n resource: 'gameAssignSettings',\n payload: {\n id: gameId,\n }\n}, {\n enabled: gameId != null,\n})\n\nconst getClaimType = (values) => {\n const claim = values?.claimSettings?.find(claimSettings => claimSettings.id === values.claimSettingId)\n return claim.type\n}\n\nconst getClaimAmount = (values) => {\n if (!values) return 0;\n const claim = values?.claimSettings?.find(claimSettings => claimSettings.id === values.claimSettingId)\n if (claim.type === 'Travel') {\n if (!values.distance) return 0;\n return travelAmount(claim.rate, values.distance, claim.excludedDistance)\n }\n if (claim.type === 'Expense') {\n if (values.amount) return values.amount;\n }\n return claim.amount\n}\n\nconst travelAmount = (amount, distance, exclude) => {\n if (!amount || !distance) return 0;\n if (exclude) {\n if (exclude >= distance) return 0;\n return amount * (distance - exclude);\n }\n return amount * distance\n}\n\nconst travelCalculation = (rate, distance, exclude, locale) => {\n if (rate == null || distance == null) return null;\n if (exclude == null) return `${formatDistance(distance.toFixed(2))} x ${formatCurrency(rate, locale, true)}`;\n\n const nonExcluded = distance - exclude;\n return `(${formatDistance(nonExcluded < 0 ? distance.toFixed(2) : exclude.toFixed(2))} x ${formatCurrency(0, locale, true)}) + (${formatDistance(nonExcluded < 0 ? 0 : nonExcluded.toFixed(2))} x ${formatCurrency(rate, locale, true)})`\n}\n\nconst getGameAddresses = async (gameId, participantId) => {\n if (!gameId || !participantId) return\n const addresses = await apiClient(`/games/${gameId}/getClaimAddresses?participantId=${participantId}`)\n .then(res => res?.data);\n return addresses\n}\n\nconst getDistances = async (gameId, addressFrom, addressTo, intermediateStop) => {\n let url = `/games/${gameId}/distances?addressFrom=${addressFrom}&addressTo=${addressTo}`\n if (intermediateStop) {\n url += `&intermediateStop=${intermediateStop}`;\n }\n return apiClient(url)\n .then(res => res?.data);\n}\n\nconst getDistanceMap = async (gameId, addressFrom, addressTo, intermediateStop) => {\n if (!addressFrom || !addressTo) return;\n let url = `/games/${gameId}/routeMap?addressFrom=${addressFrom}&addressTo=${addressTo}`\n if (intermediateStop) {\n url += `&intermediateStop=${intermediateStop}`;\n }\n return apiClient(url)\n .then(res => res?.data);\n}\n\nconst getOfficeAssignSettings = officeId => {\n return apiClient('/effectiveOfficeAssignSettings', { params: { filter: { where: { officeId }, scope: 'Tenant' } } })\n .then(res => res?.data?.[0]);\n}\n\nconst getOfficeClaimsSettings = officeId => {\n return apiClient('/officeClaimsSettings', { params: { filter: { where: { officeId }, scope: 'Tenant' } } })\n .then(res => res?.data);\n}\n\nconst validate = (values, translate) => {\n const errors = {};\n\n const claim = values?.claimSettings?.find(claimSettings => claimSettings.id === values.claimSettingId)\n\n if (!values.participantId) errors.participantId = 'ra.validation.required'\n if (!values.gameId) errors.gameId = 'ra.validation.required'\n if (!values.officeId) errors.officeId = 'ra.validation.required'\n if (!values.type) errors.type = 'ra.validation.required'\n if (values.type && values.type ==='Travel' && !values.distance) errors.distance = 'ra.validation.required'\n if (values.type && values.type ==='Travel' && values.distance && values.distance < 0) errors.distance = 'ra.validation.positive';\n if (values.type && values.type ==='Travel' && !Number.isInteger(values.distance)) errors.distance = 'ra.validation.whole';\n if (values.amount == null) errors.amount = 'ra.validation.required';\n if (Number(values.amount).toFixed(2) > claim?.amount && values.type ==='Expense') errors.amount = translate('ra.validation.claim_maximum_amount', { amount: claim.amount });\n\n return errors;\n}\n\nconst inputProps = {\n resource: 'officialClaims',\n basePath: '/officialclaims',\n variant: 'outlined',\n margin: 'none',\n fullWidth: true,\n}\n\nconst useStyles = makeStyles(theme => ({\n frame: {\n width: '100%',\n height: theme.spacing(60),\n boxShadow: '0 3px 10px rgb(0 0 0 / 0.2)',\n },\n}))\n\nconst OfficeGameInput = ({ filter = {}, ...props }) => {\n const { values } = useFormState()\n const { officeId, participantId } = values || {};\n\n if (officeId) {\n filter = { and: [ filter, { or: [{ 'officials.officeId': officeId }, { 'assignSettings.officeId': officeId }] } ] }\n }\n\n if (participantId) {\n filter['officials.participantId'] = participantId;\n }\n\n return <GameInput filter={filter} {...props} />\n}\n\nconst OfficialInput = ({ filter = {}, officials, ...props }) => {\n const { values } = useFormState()\n const { officeId } = values || {};\n\n if (officials) {\n let officeOfficials = officials.filter(official => official.officeId === officeId)\n if (!officeOfficials.length) {\n officeOfficials = officials.filter(official => official.officeId === null)\n }\n filter.id = { inq: officeOfficials.map(official => official.participantId) }\n }\n\n return <ParticipantInput filter={filter} {...props} />\n}\n\nconst DistanceInput = props => {\n const translate = useTranslate();\n return <NumberInput {...props} InputProps={{\n endAdornment: <InputAdornment position=\"end\">\n {translate('ra.input.adornments.kilometers')}\n </InputAdornment>\n }} />\n}\n\nconst FormContent = (props) => {\n const { values, initialValues } = useFormState()\n const { gameId, officeId, type, claimSettingId, amount, distance } = values || {};\n const [ officeAssignSettings, setOfficeAssignSettings ] = useState();\n const [ officeClaimsSettings, setOfficeClaimsSettings ] = useState();\n const [ gameClaimAddresses, setGameClaimAddresses ] = useState();\n const form = useForm();\n const { data: gameAssignSettings } = useGameAssignSettings(gameId);\n const { data: officials } = useGameOfficials(gameId);\n const permissions = usePermissions();\n const translate = useTranslate();\n const claim = useRecordContext();\n const locale = useLocale();\n const classes = useStyles();\n\n const handleCalculateTravel = async () => {\n try {\n const distance = await getDistances(gameId, values.addressFrom, values.addressTo, values.intermediateStop);\n if (distance !== null) {\n form.change('distance', values.roundtrip ? distance * 2 : distance);\n }\n } catch (error) {\n <SquareAlert severity=\"error\" title=\"Error\" />\n }\n };\n\n useEffect(() => {\n if (!officeId) return\n getOfficeAssignSettings(officeId)\n .then(settings => setOfficeAssignSettings(settings))\n getOfficeClaimsSettings(officeId)\n .then(settings => {\n setOfficeClaimsSettings(settings)\n values.claimSettings = settings\n })\n }, [officeId, values])\n\n useEffect(() => {\n if (claim?.id) return\n getGameAddresses(values.gameId, values.participantId)\n .then(addresses => setGameClaimAddresses(addresses))\n }, [claim, values])\n\n const officeIds = dedupe(officials?.map(official => official.officeId || gameAssignSettings?.officeId) || []);\n const isAssigner = permissions && permissions.some(({ roleType, scopes = [], officeIds = [], inherited }) =>\n (roleType === 'System') ||\n (roleType === 'Office' && inherited === false && hasAnyScope(scopes, ['assigning:manage', 'assigning:assign']) && officeIds.includes(officeId))\n )\n\n const showDistance = values?.type === 'Travel';\n const showStatus = isAssigner && claim?.id;\n const showIntermediateTrip = values?.hasIntermediateStop\n const activateCalculateTravel = values?.addressFrom && values?.addressTo\n const activateCustomAmount = values?.type === 'Expense'\n const isApproved = initialValues?.status === 'Approved'\n const disableAutocompleteAddressInputs = isApproved || !!initialValues?.addressFrom || !!initialValues?.addressTo || !!initialValues?.intermediateStop || claim?.id\n const inputSize = showDistance ? 4 : 6;\n\n const amountHelperText = (() => {\n if (!officeClaimsSettings || !claimSettingId) return;\n const claim = officeClaimsSettings.find(claimSettings => claimSettings.id === claimSettingId)\n\n if (claim.type === 'Travel') {\n if (!distance) return;\n return travelCalculation(claim.rate, distance, claim.excludedDistance, locale);\n }\n\n if (claim.type === 'Per Diem') {\n return `Allowed Amount: ${formatCurrency(claim.amount, locale)}`;\n }\n\n if (claim.type === 'Expense') {\n return `Maximum Amount: ${formatCurrency(claim.amount, locale)}`;\n }\n })()\n\n const distanceHelperText = (() => {\n if (!officeClaimsSettings || !showDistance) return null;\n const claim = officeClaimsSettings.find(claimSettings => claimSettings.id === claimSettingId)\n\n if (claim.type === 'Travel' && claim.excludedDistance != null) {\n return translate('resources.officialClaims.helpers.distance', claim.excludedDistance)\n }\n })()\n\n return <Grid container spacing={2} fullWidth>\n <Grid item xs={12} sm={4}>\n <OfficeGameInput source=\"gameId\" disabled={!!initialValues?.gameId || isApproved} {...inputProps} />\n </Grid>\n <Grid item xs={12} sm={4}>\n <OfficeInput source=\"officeId\" disabled={!!initialValues?.officeId || !gameId || isApproved} filter={{ _scope: 'Tenant', id: { inq: officeIds }, type: { nin: [...GAME_OFFICE_TYPES, 'Historical'] } }} {...inputProps} />\n </Grid>\n <Grid item xs={12} sm={4}>\n <OfficialInput source=\"participantId\" disabled={!!initialValues?.participantId || !gameId || !officeId || !officials || isApproved}\n filter={{ _scope: 'Tenant' }} officials={officials} {...inputProps} />\n </Grid>\n <Grid item xs={12} sm={inputSize}>\n <EnumInput source=\"claimSettingId\" emptyOptionsText=\"resources.officeClaimsSettings.helpers.no_options\" choices={officeClaimsSettings} disabled={!!initialValues.claimSettingId || !officeId} optionText={setting => translateApiProperty(setting, 'name', locale)} {...inputProps} />\n </Grid>\n <Grid item xs={12} sm={inputSize}>\n <TextInput source=\"type\" disabled {...inputProps} />\n </Grid>\n {showDistance && <Grid item xs={12} sm={inputSize}>\n <DistanceInput min={0} source=\"distance\" disabled helperText={distanceHelperText} {...inputProps} />\n </Grid>}\n {showDistance && <Grid item xs={12} sm={showIntermediateTrip ? 4 : 6}>\n <AddressAutoCompleteInput source=\"addressFrom\" label={translate(\"resources.officialClaims.fields.addressFrom\")} disabled={disableAutocompleteAddressInputs} gameId={gameId}\n defaultAddress={initialValues?.addressFrom || gameClaimAddresses?.officialAddress} {...inputProps} />\n </Grid>}\n {(showDistance && showIntermediateTrip) && <Grid item xs={12} sm={showIntermediateTrip ? 4 : 6}>\n <AddressAutoCompleteInput source=\"intermediateStop\" defaultAddress={initialValues?.intermediateStop} label={translate(\"resources.officialClaims.fields.intermediateStop\")} disabled={disableAutocompleteAddressInputs}\n gameId={gameId} {...inputProps} />\n </Grid>}\n {showDistance && <Grid item xs={12} sm={showIntermediateTrip ? 4 : 6}>\n <AddressAutoCompleteInput source=\"addressTo\" label={translate(\"resources.officialClaims.fields.addressTo\")} disabled={disableAutocompleteAddressInputs}\n defaultAddress={initialValues?.addressTo || gameClaimAddresses?.venueAddress} gameId={gameId} {...inputProps} />\n </Grid>}\n {values.claimSettingId && <Grid item xs={12}>\n <CurrencyInput source=\"amount\" disabled={!activateCustomAmount || !isAssigner} helperText={amountHelperText} {...inputProps} />\n </Grid>}\n {showDistance && <Grid item xs={12} sm={inputSize}>\n <BooleanInput source=\"roundtrip\" disabled={isApproved} helperText={false} {...inputProps} />\n </Grid>}\n {showDistance && <Grid item xs={12} sm={inputSize}>\n <BooleanInput source=\"hasIntermediateStop\" disabled={disableAutocompleteAddressInputs} defaultValue={values?.intermediateStop} helperText={false} {...inputProps} />\n </Grid>}\n {showDistance && <Grid item xs={12} sm={inputSize}>\n <Button source=\"calculateDistance\" label=\"resources.officialClaims.fields.calculateDistance\"\n disabled={isApproved || !activateCalculateTravel || !!initialValues?.addressFrom} onClick={() => handleCalculateTravel()} size=\"medium\" {...inputProps} />\n </Grid>}\n {values.mapUrl && <Grid item xs={12}>\n <Iframe source=\"mapUrl\" url={values.mapUrl} className={classes.frame} />\n </Grid>}\n {showStatus && <Grid item xs={12}>\n <ClaimStatusEnumInput source=\"status\" disabled={!gameId} radio {...inputProps} />\n </Grid>}\n <Grid item xs={12}>\n <TextInput source=\"note\" disabled={!gameId || isApproved} helperText=\"ra.message.optional\" multiline minRows={3} {...inputProps} />\n </Grid>\n <RecordContextProvider value={{ id: gameId, claimId: initialValues?.id }}>\n <Grid item xs={12}>\n <OfficialClaimDocumentsCard />\n </Grid>\n </RecordContextProvider>\n </Grid>\n}\n\nexport const ClaimForm = ({ initialValues = {}, ...props }) => {\n const translate = useTranslate();\n\n const decorators = useRef([createCalculator({\n field: 'claimSettingId',\n updates: {\n amount: async (claimSettingId, values, prevValues) => {\n if (!claimSettingId || !values?.officeId) return 0;\n if (!values.claimSettings) values.claimSettings = await getOfficeClaimsSettings(values.officeId)\n return getClaimAmount(values)\n },\n type: async (claimSettingId, values, prevValues) => {\n if (!claimSettingId || !values?.officeId) return;\n if (!values.claimSettings) values.claimSettings = await getOfficeClaimsSettings(values.officeId)\n return getClaimType(values)\n }\n }\n }, {\n field: 'hasIntermediateStop',\n updates: {\n intermediateStop: async (hasIntermediateStop, values, prevValues) => {\n if (isEmpty(prevValues)) return values.intermediateStop\n if (values.hasIntermediateStop == false) values.intermediateStop = \"\"\n return values.intermediateStop\n },\n } }, {\n field: 'roundtrip',\n updates: {\n distance: async (roundtrip, values, prevValues) => {\n if (!values?.distance) return;\n if (isEmpty(prevValues)) return values.distance\n if (values.roundtrip) return values.distance * 2\n return values.distance / 2\n },\n } }, {\n field: 'distance',\n updates: {\n amount: async (distance, values, prevValues) => {\n if (!distance || !values?.officeId) return 0;\n if (!values.claimSettings) values.claimSettings = await getOfficeClaimsSettings(values.officeId)\n return getClaimAmount(values)\n },\n mapUrl: async (mapUrl, values, prevValues) => {\n if (isEmpty(prevValues)) return values.mapUrl\n if (values?.addressFrom && values?.addressTo) return getDistanceMap(values.gameId, values.addressFrom, values.addressTo, values.intermediateStop)\n return values.mapUrl\n }\n },\n })])\n\n return <SimpleForm toolbar={<Toolbar />} validate={values => validate(values, translate)} initialValues={{ status: 'Pending', ...initialValues }} decorators={decorators.current} {...props}>\n <FormContent {...props} />\n </SimpleForm>\n}\n","import React, { Fragment, useState } from 'react';\nimport { useTranslate } from 'react-admin';\nimport { Button } from '@material-ui/core';\nimport { Add } from '@material-ui/icons';\n\nimport { DialogDatagrid } from '../../common/dialogs/DialogDatagrid';\nimport { CreateResourceDialog, EditResourceDialog } from '../../common/dialogs/ResourceDialog';\n\nimport { ClaimForm } from './ClaimForm';\n\nconst AddClaimDialog = props =>\n <CreateResourceDialog label=\"resources.officialClaims.actions.add\" maxWidth=\"md\" resource=\"officialClaims\" basePath=\"/officialclaims\" {...props}>\n <ClaimForm />\n </CreateResourceDialog>\n\nexport const AddClaimButton = ({ size, variant, className, disabled, ...props }) => {\n const [ isOpen, setOpen ] = useState(false);\n const translate = useTranslate();\n\n return <>\n <Button color=\"primary\" size={size} variant={variant} className={className} startIcon={<Add />} disabled={disabled} onClick={() => setOpen(true)}>\n {translate('resources.officialClaims.actions.add')}\n </Button>\n <AddClaimDialog isOpen={isOpen} handleClose={() => setOpen(false)} {...props} />\n </>\n}\n\nconst EditClaimDialog = props =>\n <EditResourceDialog label=\"resources.officialClaims.labels.edit\" maxWidth=\"md\" resource=\"officialClaims\" basePath=\"/officialclaims\" {...props}>\n <ClaimForm />\n </EditResourceDialog>\n\nexport const ClaimDatagrid = props => <DialogDatagrid dialog={EditClaimDialog} {...props} />\n","import React from 'react';\nimport { FunctionField, useListContext, useLocale, useTranslate } from 'react-admin';\nimport { Clear, DoneAll, Inbox } from '@material-ui/icons';\nimport { Tooltip, Typography, useTheme } from '@material-ui/core';\nimport moment from 'moment';\n\nimport { PopoverTextField } from '../../common/fields/PopoverTextField';\nimport { hasAnyScope } from '../../common/Authorize';\nimport { usePermissions } from '../../http';\nimport { formatCurrency, formatDistance } from '../../locale';\n\nimport { OfficeField } from '../offices/OfficeField';\nimport { ParticipantField } from '../participants/ParticipantField';\nimport { GameField } from '../games/GameField';\n\nimport { ClaimDatagrid } from './ClaimModal';\nimport { EnumField } from '../../common/inputs/EnumInputs';\n\nexport const isDistance = (type) => ['Travel', 'Driver', 'Passenger'].includes(type);\nexport const isPerDiemAndExpense = (type) => ['Per Diem', 'Expense'].includes(type);\n\nexport const isAssigner = (permissions, officeId) => {\n return officeId && permissions && permissions.some(({ roleType, scopes = [], officeIds = [], inherited }) =>\n (roleType === 'System') ||\n (roleType === 'Office' && inherited === false && hasAnyScope(scopes, ['assigning:manage', 'assigning:assign']) && officeIds.includes(officeId))\n )\n}\n\nconst AmountField = props => {\n const locale = useLocale();\n return <FunctionField\n render={({ type, distance, amount }) => {\n if (!type || !amount) return;\n if (distance && isDistance(type)) {\n return <>\n <Typography variant=\"body2\" display=\"inline\">{formatCurrency(amount, locale, true)}</Typography>\n <Typography variant=\"body2\" display=\"inline\" color=\"textSecondary\"> ({formatDistance(distance)})</Typography>\n </>\n }\n return formatCurrency(amount, locale, true)\n }}\n {...props}\n />\n}\n\nconst StatusIcon = ({ status, style, ...props }) => {\n const theme = useTheme();\n const translate = useTranslate()\n const toolTipTitle = translate(`resources.officialClaims.values.status.${status}`);\n if (status === 'Approved') {\n return <Tooltip title={toolTipTitle}>\n <DoneAll fontSize=\"small\" htmlColor={theme.palette.success.main} style={style} />\n </Tooltip>\n }\n if (status === 'Declined') {\n return <Tooltip title={toolTipTitle}>\n <Clear fontSize=\"small\" color=\"error\" style={style} />\n </Tooltip>\n }\n return <Tooltip title={toolTipTitle}>\n <Inbox fontSize=\"small\" style={style} />\n </Tooltip>\n}\n\nconst StatusField = props => {\n const translate = useTranslate()\n return <FunctionField\n render={({ status }) => {\n const statusText = translate(`resources.officialClaims.values.status.${status}`)\n\n return <div style={{ display: 'inline-flex', alignItems: 'center' }}>\n {statusText}\n <StatusIcon status={status} fontSize=\"default\" style={{ marginLeft: 4 }} />\n </div>\n }}\n {...props}\n />\n}\n\nconst AmountAndNoteField = props =>\n <FunctionField\n render={({ amount, distance, type }) => {\n const marginLeft = (amount && isPerDiemAndExpense(type)) || (distance && isDistance(type)) ? '4px' : undefined;\n return <div style={{ display: 'inline-flex' }}>\n <AmountField source=\"amount\" />\n <PopoverTextField source=\"note\" style={{ marginLeft }} />\n </div>\n }}\n {...props}\n />\n\nexport const ClaimsGrid = ({ hideParticipant = false, hideGame = false, hideOffice = false, ...props }) => {\n const permissions = usePermissions();\n const { data: claims } = useListContext()\n\n const isRowSelectable = (claimId) => {\n const { officeId, status } = claims?.[claimId] || {};\n return isAssigner(permissions, officeId) || status === 'Pending';\n }\n\n return <ClaimDatagrid size=\"medium\" rowOptions={{ isRowSelectable }}{...props}>\n {!hideParticipant && <ParticipantField source=\"participantId\" />}\n {!hideGame && <GameField source=\"gameId\" includeDate=\"inline\" includeTime includeSurface=\"full\" />}\n {!hideOffice && <OfficeField source=\"officeId\" />}\n <EnumField source=\"type\" />\n <AmountAndNoteField source=\"amount\" />\n <StatusField source=\"status\" />\n <FunctionField source=\"createdAt\" render={claim => moment(claim.createdAt).format('LLL')} />\n </ClaimDatagrid>\n}\n","import React, { useState } from 'react';\nimport { Button, useListContext, useNotify, useRefresh, useTranslate } from 'react-admin';\nimport { apiClient } from '../../http';\nimport { Dialog, DialogActions, DialogContent, DialogContentText, DialogTitle, Button as MuiButton } from '@material-ui/core';\n\nconst ProcessClaimDialog = ({ status, isOpen, onSubmit, onClose, selectedIds = [] }) => {\n const translate = useTranslate();\n let actionI18n = status === 'Approved' ? 'ra.action.approve' : 'ra.action.decline';\n actionI18n = status === 'Pending' ? 'ra.action.pend' : actionI18n;\n\n return <Dialog open={isOpen} onClose={onClose} maxWidth=\"medium\">\n <DialogTitle>{translate(`resources.officialClaims.labels.${status}`, selectedIds.length || 1)}</DialogTitle>\n <DialogContent>\n <DialogContentText>\n {translate(`resources.officialClaims.helpers.${status}`)}\n </DialogContentText>\n </DialogContent>\n <DialogActions>\n <MuiButton onClick={onClose}>{translate('ra.action.cancel')}</MuiButton>\n <MuiButton onClick={onSubmit} color=\"primary\">{translate(actionI18n, selectedIds.length || 1)}</MuiButton>\n </DialogActions>\n </Dialog>\n}\n\nconst ProcessClaim = ({ status, selectedIds = [], resource, ...props }) => {\n const translate = useTranslate();\n const { onUnselectItems } = useListContext();\n const notify = useNotify();\n const refresh = useRefresh();\n const [ open, setOpen ] = useState(false);\n\n const onSubmit = async values => {\n apiClient('/officialClaims/process', {\n method: 'POST',\n data: {\n claimIds: selectedIds,\n status,\n }\n })\n .then(({ data }) => {\n refresh();\n onUnselectItems();\n notify(translate(`resources.officialClaims.notifications.${status}`, selectedIds.length || 1));\n })\n .catch(err => {\n console.log(err) // eslint-disable-line no-console\n notify(translate(`resources.officialClaims.notifications.${status.toLowerCase()}_error`, selectedIds.length || 1))\n })\n\n setOpen(false)\n }\n\n return <>\n <Button label={`resources.officialClaims.actions.${status}`} onClick={() => setOpen(true)} {...props} />\n <ProcessClaimDialog status={status} isOpen={open} onSubmit={onSubmit} onClose={() => setOpen(false)} selectedIds={selectedIds} />\n </>\n}\n\nexport const ClaimBulkAction = props =>\n <>\n <ProcessClaim status=\"Pending\" {...props} />\n <ProcessClaim status=\"Declined\" {...props} />\n <ProcessClaim status=\"Approved\" {...props} />\n </>\n","import React from 'react';\nimport { useRecordContext } from 'react-admin';\nimport { EmojiPeople } from '@material-ui/icons';\nimport moment from 'moment';\n\nimport { useParticipant, usePermissions } from '../../../http';\nimport ListCard from '../../../common/cards/ListCard';\nimport { ClaimsGrid, isAssigner } from '../../officialClaims/ClaimsGrid';\nimport { AddClaimButton } from '../../officialClaims/ClaimModal';\nimport { useGameAssignSettings, useGameOfficials } from '../../officialClaims/ClaimForm';\nimport { ClaimBulkAction } from '../../officialClaims/ClaimBulkActions';\n\n\nexport default ({ ...props }) => {\n const game = useRecordContext(props);\n const permissions = usePermissions();\n const participantId = useParticipant()\n const { data: officials } = useGameOfficials(game?.id);\n const { data: gameAssignSettings } = useGameAssignSettings(game?.id)\n\n const participantAssignment = officials?.find(official => official.participantId === participantId)\n const officeId = participantAssignment?.payOfficeId || gameAssignSettings?.officeId;\n const canAddClaims = moment().isSameOrAfter(game?.endTime) || game?.isApproved || gameAssignSettings?.allowEarlyClaims\n\n return <ListCard\n title=\"resources.officialClaims.labels.card.title\"\n icon={<EmojiPeople />}\n reference=\"officialClaims\"\n target=\"gameId\"\n sort={{ field: ['participant.lastName', 'participant.firstName', 'type', 'subtype', 'status'], order: ['ASC', 'ASC', 'ASC', 'ASC', 'ASC'] }}\n perPage={9999}\n bulkActionButtons={isAssigner(permissions, officeId) && <ClaimBulkAction />}\n noResultsText={!canAddClaims ? \"resources.officialClaims.messages.claim_unavailable\" : undefined}\n addButton={<AddClaimButton\n disabled={!canAddClaims}\n target=\"gameId\"\n initialValues={{\n gameId: game?.id,\n participantId: participantAssignment ? participantId : null,\n officeId: participantAssignment ? officeId : null,\n }}\n />}\n collapsable\n >\n <ClaimsGrid hideGame />\n </ListCard>\n}\n","import React, { useState } from 'react';\nimport { useRecordContext } from 'react-admin';\n\nimport { FF_DRAFT_GAMES } from '@hisports/common/featureFlags';\n\nimport { useFlag } from '../../../http';\nimport { isAuthorized } from '../../../common/Authorize';\nimport ListCard from '../../../common/cards/ListCard';\n\nimport { EventView } from '../../events/EventView';\nimport { EditDraftGameDialog } from '../../draftgames/DraftGameModal';\n\nexport default props => {\n const game = useRecordContext(props);\n const [ draftGameId, setDraftGameId ] = useState()\n const isEnabled = useFlag();\n const canEdit = isEnabled(FF_DRAFT_GAMES) && isAuthorized(game, 'games', 'edit');\n const canApprove = isEnabled(FF_DRAFT_GAMES) && isAuthorized(game, 'games', 'approve', false, false);\n const showOnlyRequest = (!canEdit && canApprove);\n const requestsFilter = showOnlyRequest ? { draftGameId: { neq: null } } : null;\n\n const handleRowSelect = (id, basePath, draftGame) => {\n return canEdit || canApprove ? setDraftGameId(id) : null;\n }\n\n return <>\n <ListCard\n title=\"resources.games.labels.draftUpdates.card.title\"\n subtitle=\"resources.games.labels.draftUpdates.card.subtitle\"\n reference=\"draftGames\"\n target=\"updatedGameId\"\n rowsPerPageOptions={[]}\n filter={{ _include: 'requests', isPublished: false, requests: requestsFilter }}\n sort={{ field: 'startTime', order: 'ASC' }}\n >\n <EventView rowClick={handleRowSelect} hideGroup hideStatus disableCalendar showDraftActions />\n </ListCard>\n <EditDraftGameDialog isOpen={!!draftGameId} id={draftGameId} gameToUpdate={game} hideRounds handleClose={() => setDraftGameId()} />\n </>\n}\n","import React, { useEffect, useMemo } from 'react';\nimport { TextInput, SimpleForm } from 'react-admin';\nimport { useForm, useFormState } from 'react-final-form';\nimport { Grid } from '@material-ui/core'\n\nimport { usePermissions } from '../../http';\n\nimport Toolbar from '../../common/ra/Toolbar';\nimport { EnumInput } from '../../common/inputs/EnumInputs';\n\nconst validate = values => {\n const errors = {}\n\n if (!values.service) errors.service = 'ra.validation.required'\n if (!values.link) errors.link = 'ra.validation.required'\n\n return errors;\n}\n\nconst inputProps = {\n resource: 'externalProviders',\n basePath: '/externalProviders',\n variant: 'outlined',\n margin: 'none',\n fullWidth: true,\n}\n\nconst ExternalIdInput = (props) => {\n const { values } = useFormState();\n const isSurface = values?.targetType === 'Surface';\n\n if (!isSurface) return null;\n\n return <TextInput {...props} />\n}\n\nconst ServiceEnum = (props) => {\n const { values } = useFormState();\n const { change } = useForm();\n const permissions = usePermissions();\n\n const isSurface = values?.targetType === 'Surface';\n const isSystem = permissions.some(p => p.roleType === 'System');\n\n useEffect(() => {\n if (isSurface) {\n change('service', 'Streaming');\n }\n }, [isSurface, change]);\n\n const choices = useMemo(() => ([\n { id: 'Streaming', name: 'resources.externalProviders.labels.services.Streaming' },\n !isSurface && { id: 'Ticketing', name: 'resources.externalProviders.labels.services.Ticketing' },\n !isSurface && isSystem && { id: 'Stats', name: 'resources.externalProviders.labels.services.Stats' },\n ].filter(Boolean)), [isSurface, isSystem]);\n\n return <EnumInput {...props} select choices={choices} disabled={isSurface} />\n}\n\nexport const ExternalProviderForm = (props) => {\n return <SimpleForm toolbar={<Toolbar />} validate={validate} {...props}>\n <Grid container spacing={2} fullWidth>\n <Grid item xs={12} md={4}>\n <ServiceEnum source=\"service\" {...inputProps} />\n </Grid>\n <Grid item xs={12} md={8}>\n <TextInput source=\"provider\" autoFocus {...inputProps} />\n </Grid>\n <Grid item xs={12}>\n <TextInput source=\"link\" placeholder=\"https://www.spordle.com\" {...inputProps} />\n </Grid>\n <Grid item xs={12}>\n <ExternalIdInput source=\"externalId\" {...inputProps} />\n </Grid>\n </Grid>\n </SimpleForm>\n}\n","import React, { useState } from 'react';\nimport { useTranslate } from 'react-admin';\nimport { Button } from '@material-ui/core';\nimport { Add } from '@material-ui/icons';\n\nimport { CreateResourceDialog, EditResourceDialog } from '../../common/dialogs/ResourceDialog';\n\nimport { ExternalProviderForm } from './ExternalProviderForm';\n\nconst AddExternalProviderDialog = props =>\n <CreateResourceDialog label=\"resources.externalProviders.actions.add\" maxWidth=\"sm\" resource=\"externalProviders\" basePath=\"/externalProviders\" {...props}>\n <ExternalProviderForm />\n </CreateResourceDialog>\n\nexport const EditExternalProviderDialog = props =>\n <EditResourceDialog label=\"resources.externalProviders.labels.edit\" maxWidth=\"sm\" resource=\"externalProviders\" basePath=\"/externalProviders\" {...props}>\n <ExternalProviderForm />\n </EditResourceDialog>\n\nexport const AddExternalProviderButton = ({ size, variant, ...props }) => {\n const translate = useTranslate();\n const [ isOpen, setOpen ] = useState(false);\n return <>\n <Button color=\"primary\" size={size} variant={variant} startIcon={<Add />} onClick={() => setOpen(true)}>{translate('resources.externalProviders.actions.add')}</Button>\n <AddExternalProviderDialog isOpen={isOpen} handleClose={() => setOpen(false)} {...props} />\n </>\n}\n\nexport const EditExternalProviderButton = ({ size, variant, ...props }) => {\n const translate = useTranslate();\n const [ isOpen, setOpen ] = useState(false);\n return <>\n <Button color=\"primary\" size={size} variant={variant} startIcon={<Add />} onClick={() => setOpen(true)}>{translate('resources.externalProviders.actions.edit')}</Button>\n <EditExternalProviderDialog isOpen={isOpen} handleClose={() => setOpen(false)} {...props} />\n </>\n}\n","import React, { useState } from 'react';\nimport { GET_LIST, useDataProvider, useNotify, useQuery, useRecordContext, useRefresh, useResourceContext, useTranslate } from \"react-admin\";\nimport { LinearProgress, Link, Table, TableBody, Typography } from '@material-ui/core';\nimport { Link as LinkIcon } from '@material-ui/icons';\nimport { GAME_OFFICE_RESOURCES } from '@hisports/common/src/constants';\n\nimport { isAuthorized } from '../../common/Authorize';\nimport InfoCard from '../../common/cards/InfoCard';\nimport Row from '../../common/cards/TableRow';\n\nimport { AddExternalProviderButton, EditExternalProviderDialog } from './ExternalProviderModal';\nimport { usePermissions } from '../../http';\n\nconst TARGET_TYPES = {\n games: 'Game',\n surfaces: 'Surface',\n offices: 'Office',\n leagues: 'Office',\n cups: 'Office',\n tournaments: 'Office',\n};\n\nconst useExternalProviders = (targetId) => {\n const resource = useResourceContext();\n const permissions = usePermissions();\n\n const isSystem = permissions.some(p => p.roleType === 'System');\n const targetType = TARGET_TYPES[resource];\n\n return useQuery({\n type: GET_LIST,\n resource: 'externalProviders',\n payload: {\n filter: { targetType, targetId, ...(!isSystem && { service: { neq: 'Stats' } }) },\n }\n }, {\n enabled: !!targetId,\n });\n}\n\nconst ExternalProviderField = ({ provider, canEdit }) => {\n const [isOpen, setOpen] = useState(false);\n const dataProvider = useDataProvider();\n const notify = useNotify();\n const refresh = useRefresh();\n const link = provider?.link.startsWith('http') ? provider.link : `http://${provider.link}`;\n\n const handleOpen = () => {\n setOpen(true);\n }\n\n const handleDelete = () => dataProvider.delete('externalProviders', { id: provider.id })\n .then(() => {\n refresh();\n notify('resources.externalProviders.messages.deleted');\n })\n\n\n return <>\n <Row label={`resources.externalProviders.labels.services.${provider.service}`} onClick={canEdit && handleOpen}>\n {provider?.provider && <Typography variant=\"body2\">{provider.provider}</Typography>}\n <Link href={link} target=\"_blank\" rel=\"noopener noreferrer\" onClick={e => e.stopPropagation()}>\n {link.split('//')[1]}\n </Link>\n </Row>\n {canEdit && <EditExternalProviderDialog id={provider.id} isOpen={isOpen} handleClose={() => setOpen(false)} onDelete={handleDelete} canDelete={canEdit} />}\n </>\n}\n\nconst ExternalProviderList = ({ providers, canEdit, isLoading }) => {\n const translate = useTranslate();\n\n if (isLoading) return <LinearProgress />;\n\n return <Table>\n <TableBody>\n {!providers?.length\n ? <Row>\n <Typography align=\"center\" variant=\"body2\">{translate(\"resources.externalProviders.messages.no_results\")}</Typography>\n </Row>\n : providers.map(provider => (\n <ExternalProviderField key={provider.id} provider={provider} canEdit={canEdit} />\n ))}\n </TableBody>\n </Table>\n}\n\nconst ExternalProvidersCard = ({ targetId }) => {\n const resource = useResourceContext();\n const record = useRecordContext();\n const { data: providers = [], loading, loaded } = useExternalProviders(targetId);\n\n const canEditProviders = isAuthorized(record, resource, GAME_OFFICE_RESOURCES.includes(resource) ? 'editProviders' : 'edit');\n const canCreateProviders = isAuthorized(record, resource, GAME_OFFICE_RESOURCES.includes(resource) ? 'createProviders' : 'create');\n\n const targetType = TARGET_TYPES[resource];\n const showIcon = targetType === 'Office';\n\n const actions = [\n canCreateProviders && <AddExternalProviderButton key=\"add\" initialValues={{ targetType, targetId }} />\n ].filter(Boolean);\n\n if (!canCreateProviders && !providers?.length) return null;\n\n return <InfoCard\n title=\"resources.externalProviders.name\"\n icon={showIcon && <LinkIcon />}\n actions={actions}\n collapsable\n collapseActions\n >\n <ExternalProviderList providers={providers} canEdit={canEditProviders} isLoading={loading && !loaded} />\n </InfoCard>\n}\n\nexport default ExternalProvidersCard;\n","import React, { Suspense } from 'react';\nimport { useLocale, useRecordContext } from 'react-admin';\nimport { Grid } from '@material-ui/core';\n\nimport { FF_DRAFT_GAMES } from '@hisports/common/featureFlags';\n\nimport { useFlag, usePermissions, useSport } from '../../http';\nimport { hasAnyScope, isAuthorized } from '../../common/Authorize'\nimport { LazyBoundary } from '../../common/LazyBoundary';\nimport { TabbedShowLayout, Tab } from '../../common/ra/TabbedShowLayout';\nimport { useGameStatus } from '../gameStatus/useGameStatus';\nimport InfoCard from '../../common/cards/InfoCard';\n\nimport Scoresheet from '../scoresheet';\nimport { useScheduleSeeds } from '../gameBrackets/useSeeds';\n\nimport GameCard from './cards/GameCard';\nimport GameLinksCard from './cards/GameLinksCard';\nimport ConflictsCard from './cards/ConflictsCard';\nimport MessagesCard from './cards/MessagesCard';\nimport EventsCard from './cards/EventsCard';\nimport TransactionsCard from './cards/TransactionsCard';\nimport ClaimsCard from './cards/ClaimsCard';\nimport DraftGamesCard from './cards/DraftGamesCard';\nimport ExternalProvidersCard from '../externalProviders/ExternalProvidersCard';\nimport BracketsCard from '../gameBrackets/cards/BracketsCard';\n\nconst Assignments = React.lazy(() => import('./cards/OfficialsCard'));\n\nconst SummaryTab = ({ status, ...props }) => {\n const game = useRecordContext(props);\n const isEnabled = useFlag();\n\n const canViewConflicts = isAuthorized(game, 'games', 'edit') && game?.status === 'Conflict';\n const canViewDraftGames = isEnabled(FF_DRAFT_GAMES) && (isAuthorized(game, 'games', 'edit') || (status?.rescheduleRequests && isAuthorized(game, 'draftGames', 'approve', false, false)));\n const canViewMessages = isAuthorized(game, 'gameMessagesLeague', 'list');\n const canCreateMessages = isAuthorized(game, 'gameMessagesLeague', 'create');\n\n return <Tab {...props}>\n <Grid container spacing={3}>\n <Grid item xs={12} md={9} lg={8}>\n <GameCard status={status} />\n </Grid>\n <Grid item xs={12} md={3} lg={4}>\n <GameLinksCard status={status} />\n <br />\n <ExternalProvidersCard targetId={game?.id} />\n </Grid>\n {canViewDraftGames && <Grid item xs={12}>\n <DraftGamesCard />\n </Grid>}\n {canViewConflicts && <Grid item xs={12}>\n <ConflictsCard />\n </Grid>}\n {canViewMessages && <Grid item xs={12}>\n <MessagesCard type=\"League\" showCreate={canCreateMessages} />\n </Grid>}\n </Grid>\n </Tab>\n}\n\nconst OfficialsTab = ({ status, ...props }) => {\n const game = useRecordContext(props);\n const permissions = usePermissions();\n\n if (!status?.scorekeeping && !status?.assigning) return <div />;\n if (!isAuthorized(game, \"games\", \"officials\", false, false)) return <div />;\n\n const isAssigner = hasAnyScope(permissions.map(permission => permission.scopes).flat(), ['assigning:manage', 'assigning:assign']);\n\n const canViewTransactions = isAuthorized(game, 'officialTransactions', 'list', false, false) && (isAssigner || ['assigned', 'confirmed', 'declined', 'no-show'].includes(status.officials?.self));\n const canViewClaims = isAuthorized(game, 'officialClaims', 'list', false, false) && (isAssigner || ['assigned', 'confirmed', 'declined', 'no-show'].includes(status.officials?.self));\n const canViewMessages = isAuthorized(game, 'gameMessagesOfficiating', 'list', false, false) || ['assigned', 'confirmed', 'declined', 'no-show'].includes(status.officials?.self);\n const canCreateMessages = isAuthorized(game, 'gameMessagesOfficiating', 'create', false, false) || ['assigned', 'confirmed'].includes(status.officials?.self);\n\n return <Tab {...props}>\n <Grid container spacing={3}>\n <Grid item xs={12}>\n <Suspense fallback={() => null}>\n <InfoCard title=\"resources.officials.labels.card.title\" componentProps={{ style: { overflow: 'visible' } }}>\n <LazyBoundary>\n <Assignments gameId={game?.id} gameOfficeId={game?.officeId} hideMessages />\n </LazyBoundary>\n </InfoCard>\n </Suspense>\n </Grid>\n\n {canViewTransactions && <Grid item xs={12}>\n <TransactionsCard />\n </Grid>}\n\n {canViewClaims && <Grid item xs={12}>\n <ClaimsCard />\n </Grid>}\n\n {canViewMessages && <Grid item xs={12}>\n <MessagesCard type=\"Officiating\" showCreate={canCreateMessages} />\n </Grid>}\n </Grid>\n </Tab>\n}\n\nconst ScoresheetTab = ({ status, ...props }) => {\n const game = useRecordContext(props);\n\n if (!game || (!game.homeTeamId && !game.awayTeamId)) return <div />;\n if (!status?.scorekeeping) return null;\n if (!(isAuthorized(game, \"scoresheets\", \"lineup\") || status?.officials?.self)) return null;\n\n return <Tab {...props}>\n <Scoresheet status={status} />\n </Tab>\n}\n\nconst BracketsTab = props => {\n const game = useRecordContext(props);\n\n /* Used by the bracket system */\n const sport = useSport();\n const locale = useLocale();\n const BRACKET_URL = process.env.BRACKET_URL;\n const isSeeded = useScheduleSeeds(game?.scheduleId)\n\n if (!isSeeded || !BRACKET_URL) return <div />;\n\n const bracketUrl = `${BRACKET_URL}/${game?.scheduleId}/${sport}/${locale}`\n\n return <Tab {...props}>\n <BracketsCard url={bracketUrl} scheduleId={game?.scheduleId} />\n </Tab>\n}\n\n\nconst EventsTab = props => {\n const game = useRecordContext(props);\n\n if (!isAuthorized(game, \"gameEvents\", \"list\")) return <div />;\n return <Tab {...props}>\n <EventsCard />\n </Tab>\n}\n\nexport const GameShowLayout = props => {\n const game = useRecordContext(props);\n\n const { data: status, loading, error } = useGameStatus(game?.id);\n\n return <TabbedShowLayout>\n <SummaryTab label=\"resources.games.labels.tabs.summary\" status={status} />\n <OfficialsTab label=\"resources.games.labels.tabs.officials\" path=\"officials\" status={status} />\n <ScoresheetTab label=\"resources.games.labels.tabs.scoresheet\" path=\"scoresheet\" status={status} />\n <BracketsTab label=\"resources.games.labels.tabs.bracket\" path=\"bracket\" />\n <EventsTab label=\"resources.games.labels.tabs.events\" path=\"events\" status={status} />\n </TabbedShowLayout>\n}\n","import { useQueryWithStore, GET_ONE } from 'react-admin';\n\nexport const useGameStatus = gameId =>\n useQueryWithStore({\n type: GET_ONE,\n resource: 'gameStatuses',\n payload: { id: gameId },\n })\n","import { Grid, makeStyles } from '@material-ui/core';\nimport React from 'react';\nimport CheckboxInput from './CheckboxInput';\nimport { FieldDependency } from '../FieldDependency';\nimport { useTranslate } from 'react-admin';\n\nconst useStyles = makeStyles(theme => ({\n checkbox: {\n paddingTop: theme.spacing(2.75),\n }\n}))\n\nconst CheckboxRowInput = (props) => {\n const {\n showLabel = false,\n helperText = false,\n disabled = true,\n resource,\n source,\n hideHelper = false,\n children,\n } = props;\n const translate = useTranslate();\n const classes = useStyles();\n\n return (\n <Grid container direction=\"row\">\n <Grid item xs={1}>\n <CheckboxInput source={`${source}IsChecked`} label={showLabel} hideHelper={hideHelper} className={classes.checkbox} />\n </Grid>\n <Grid item xs={11}>\n <FieldDependency fieldSource={`${source}IsChecked`} test={value => !!value} disabled={disabled}>\n {React.cloneElement(children, {\n label: translate(`resources.${resource}.fields.${source}`),\n helperText,\n ...props\n })}\n </FieldDependency>\n </Grid>\n </Grid>\n );\n};\n\nexport default CheckboxRowInput;\n","import React, { useState, Fragment, useRef } from 'react';\nimport { useSelector } from 'react-redux';\nimport { Button, SimpleForm, useRefresh, useNotify, useTranslate, TextInput, NumberInput } from 'react-admin';\nimport { Dialog, DialogTitle, DialogContent, DialogContentText, List, ListItem } from '@material-ui/core';\nimport createCalculator from 'final-form-calculate';\n\nimport { FF_GRADES, FF_OFFICIALS, FF_SCOREKEEPERS, FF_TIMEKEEPERS } from '@hisports/common/featureFlags';\nimport { GAME_OFFICE_TYPES } from '@hisports/common/src/constants';\n\nimport { AssignmentPositionsEnumInput, AssignmentStatusEnumInput, GameStatusEnumInput, AssignTypeDelegationEnumInput } from '../../common/inputs/EnumInputs';\nimport CheckboxRowInput from '../../common/inputs/CheckboxRowInput';\nimport { DialogFormToolbar } from '../../common/dialogs/DialogForm';\nimport { isAuthorized } from '../../common/Authorize';\nimport { useSeason } from '../../common/inputs/SeasonSelector'\nimport { useScopes, apiClient, useFlag } from '../../http';\n\nimport { OfficeInput } from '../offices/OfficeInput';\nimport { AssignSystemInput } from '../assignSystems';\nimport { AssignFeesInput } from '../assignFees';\nimport { FieldDependency } from '../../common/FieldDependency';\n\nexport const canChangeStatus = game => game && !(game.isApproved || game.isCertified);\nexport const canManageAssignments = gameStatus => gameStatus && gameStatus.assigning != null && gameStatus.officials != null;\nexport const canCertify = gameStatus => gameStatus && !!gameStatus.flags && gameStatus.status === 'approved';\n\nconst validateStatus = values => {\n const errors = {};\n if (!values.status) errors.status = 'ra.validation.required';\n return errors;\n}\n\nconst validateDelegateForm = values => {\n const errors = {};\n if (!values.assignType) errors.assignType = 'ra.validation.required';\n if (!values.officeId && values.assignType == 'Office') errors.officeId = 'ra.validation.required';\n return errors;\n}\n\nconst validateAssignSettings = values => {\n const errors = {};\n if (values.systemIdIsChecked && !values.systemId) errors.systemId = 'ra.validation.required';\n if (values.statusIsChecked && !values.status) errors.status = 'ra.validation.required';\n\n if (values.minRefereeIsChecked && values.minReferee != null) {\n if (values.minReferee < 0) {\n errors.minReferee = 'resources.assignSettings.validations.min_setting_range';\n } else if (values.minReferee % 1 > 0) {\n errors.minReferee = 'resources.assignSettings.validations.invalid_level';\n }\n }\n\n if (values.minLinespersonIsChecked && values.minLinesperson != null) {\n if (values.minLinesperson < 0) {\n errors.minLinesperson = 'resources.assignSettings.validations.min_setting_range';\n } else if (values.minLinesperson % 1 > 0) {\n errors.minLinesperson = 'resources.assignSettings.validations.invalid_level';\n }\n }\n\n if (values.minOfficialIsChecked && values.minOfficial != null) {\n if (values.minOfficial < 0) {\n errors.minOfficial = 'resources.assignSettings.validations.min_setting_range';\n } else if (values.minOfficial % 1 > 0) {\n errors.minOfficial = 'resources.assignSettings.validations.invalid_level';\n }\n }\n\n if (values.minScorekeeperIsChecked && values.minScorekeeper != null) {\n if (values.minScorekeeper < 0) {\n errors.minScorekeeper = 'resources.assignSettings.validations.min_setting_range';\n } else if (values.minScorekeeper % 1 > 0) {\n errors.minScorekeeper = 'resources.assignSettings.validations.invalid_level';\n }\n }\n\n if (values.minTimekeeperIsChecked && values.minTimekeeper != null) {\n if (values.minTimekeeper < 0) {\n errors.minTimekeeper = 'resources.assignSettings.validations.min_setting_range';\n } else if (values.minTimekeeper % 1 > 0) {\n errors.minTimekeeper = 'resources.assignSettings.validations.invalid_level';\n }\n }\n\n if (values.minRefereeGradeIsChecked && values.minRefereeGrade != null && (values.minRefereeGrade % 1 > 0 || values.minRefereeGrade < 0)) {\n errors.minRefereeGrade = 'resources.assignSettings.validations.invalid_grade';\n }\n if (values.minLinespersonGradeIsChecked && values.minLinespersonGrade != null && (values.minLinespersonGrade % 1 > 0 || values.minLinespersonGrade < 0)) {\n errors.minLinespersonGrade = 'resources.assignSettings.validations.invalid_grade';\n }\n\n if (values.minAgeIsChecked && values.minAge != null && (values.minAge % 1 > 0 || values.minAge < 1)) {\n errors.minAge = 'resources.assignSettings.validations.invalid_age';\n }\n\n return errors;\n}\n\nconst inputProps = {\n variant: 'outlined',\n margin: 'normal',\n fullWidth: true,\n}\n\nconst DelegatePositionsForm = props => {\n const translate = useTranslate();\n return <SimpleForm {...props} validate={validateDelegateForm} initialValues={{ assignType: 'Office' }} {...inputProps} >\n <AssignTypeDelegationEnumInput source=\"assignType\" label={translate(\"resources.assignRules.options.officeId\")} {...inputProps} helperText=\"\" radio />\n <FieldDependency fieldSource=\"assignType\" test={type => type == 'Office'}>\n <OfficeInput label={translate('resources.games.fields.officeId')} source=\"officeId\" filter={{ type: { nin: [...GAME_OFFICE_TYPES, 'Historical'] }, isAssigner: true, _scope: 'Tenant' }} {...inputProps} />\n </FieldDependency>\n <AssignmentPositionsEnumInput label={translate('resources.officials.labels.position')} source=\"positions\" helperText=\"ra.message.optional\" multiple {...inputProps} />\n </SimpleForm>\n}\n\nconst DelegateDialog = ({ isOpen, onSubmit, onClose }) => {\n const translate = useTranslate();\n return <Dialog open={isOpen} fullWidth maxWidth=\"sm\" onClose={onClose}>\n <DialogTitle>{translate('resources.gameAssignSettings.labels.change_assigner')}</DialogTitle>\n <DialogContent>\n <DialogContentText>{translate('resources.gameAssignSettings.messages.change_assigner')}</DialogContentText>\n <DialogContentText>{translate('resources.gameAssignSettings.messages.change_assigner_partial')}</DialogContentText>\n <DelegatePositionsForm save={onSubmit} component={Fragment} toolbar={\n <DialogFormToolbar submitLabel=\"ra.action.update\" onCancel={onClose} />\n } />\n </DialogContent>\n </Dialog>\n}\n\nconst Delegate = ({ selectedIds, resource }) => {\n const translate = useTranslate();\n const refresh = useRefresh();\n const notify = useNotify();\n const statuses = useSelector(state => state.admin.resources.gameStatuses.data)\n const [ open, setOpen ] = useState(false);\n const actionableGameIds = selectedIds.filter(id => canManageAssignments(statuses?.[id]))\n\n const onClose = () => {\n setOpen(false);\n }\n\n const onSubmit = async values => {\n const { assignType, positions, officeId } = values;\n const type = positions ? 'delegated' : 'changed_assigner'\n\n apiClient(`/games/bulkDelegate`, {\n method: 'POST',\n data: {\n gameIds: actionableGameIds,\n positions,\n officeId,\n assignType\n },\n })\n .then(({ data }) => {\n const count = data.count || 0;\n onClose();\n // wait 1s for events to be processed\n setTimeout(() => refresh(), 1000);\n notify(translate(`resources.games.notifications.${type}_games`, count))\n })\n .catch(err => {\n console.log(err) // eslint-disable-line no-console\n notify(translate(`resources.games.notifications.${type}_games_error`, actionableGameIds.length))\n })\n\n setOpen(false)\n }\n\n return <>\n <Button label={translate('resources.gameAssignSettings.labels.set_assigner')} onClick={() => setOpen(true)} disabled={!actionableGameIds.length} />\n <DelegateDialog isOpen={open} onSubmit={onSubmit} onClose={onClose} />\n </>\n}\n\nconst GameStatusForm = props => {\n return <SimpleForm {...props} {...inputProps} validate={validateStatus} >\n <GameStatusEnumInput source=\"status\" defaultValue=\"Active\" {...inputProps} />\n <TextInput source=\"comments\" multiline minRows=\"3\" helperText=\"resources.games.helpers.comments\" {...inputProps} />\n </SimpleForm>\n}\n\nconst GameStatusDialog = ({ isOpen, onSubmit, onClose }) => {\n const translate = useTranslate();\n return <Dialog open={isOpen} fullWidth maxWidth=\"sm\" onClose={onClose}>\n <DialogTitle>{translate('resources.games.labels.game_status')}</DialogTitle>\n <DialogContent>\n <DialogContentText>{translate('resources.games.messages.game_status')}</DialogContentText>\n <GameStatusForm initialValues={{ status: 'Active', comments: '' }} save={onSubmit} component={Fragment} toolbar={\n <DialogFormToolbar submitLabel=\"ra.action.update\" onCancel={onClose} />\n } />\n </DialogContent>\n </Dialog>\n}\n\nconst GameStatus = ({ selectedIds, resource }) => {\n const [ open, setOpen ] = useState(false);\n const refresh = useRefresh();\n const notify = useNotify();\n const translate = useTranslate();\n const games = useSelector(state => state.admin.resources.games.data)\n const actionableGameIds = selectedIds.filter(id => canChangeStatus(games?.[id]))\n\n const onClose = () => {\n setOpen(false);\n }\n\n const onSubmit = (values) => {\n apiClient(`/games/bulkGameStatus`, {\n method: 'POST',\n data: {\n gameIds: actionableGameIds,\n status: values.status,\n comments: values.comments\n },\n })\n .then(({ data }) => {\n const count = data?.count || 0;\n onClose();\n refresh();\n notify(translate('resources.games.notifications.change_game_status', {\n smart_count: count,\n status: values.status,\n }))\n })\n .catch(err => {\n console.log(err) // eslint-disable-line no-console\n notify('resources.games.notifications.change_game_status_error', actionableGameIds.length)\n })\n }\n\n return <>\n <Button label={translate('resources.games.labels.set_game_status')} onClick={() => setOpen(true)} disabled={!actionableGameIds.length} />\n <GameStatusDialog\n isOpen={open}\n selectedIds={actionableGameIds}\n onSubmit={onSubmit}\n onClose={onClose}\n />\n </>\n}\n\nconst AssignSettingsForm = props => {\n const isEnabled = useFlag();\n const seasonId = useSeason();\n\n const decorators = useRef([createCalculator({\n field: 'statusIsChecked',\n updates: {\n status: (statusIsChecked, values) => {\n if (!statusIsChecked || values.status) return values.status;\n return 'Active'\n }\n }\n })])\n\n return <SimpleForm validate={validateAssignSettings} decorators={decorators.current} {...props}>\n <CheckboxRowInput resource=\"gameAssignSettings\" source=\"systemId\" {...inputProps}>\n <AssignSystemInput />\n </CheckboxRowInput>\n <CheckboxRowInput resource=\"gameAssignSettings\" source=\"feesId\" filter={{ seasonId }} {...inputProps}>\n <AssignFeesInput />\n </CheckboxRowInput>\n <CheckboxRowInput resource=\"gameAssignSettings\" source=\"status\" helperText=\"resources.gameAssignSettings.helpers.status_draft\" {...inputProps}>\n <AssignmentStatusEnumInput />\n </CheckboxRowInput>\n <CheckboxRowInput resource=\"gameAssignSettings\" source=\"minReferee\" min={0} step={1} {...inputProps}>\n <NumberInput />\n </CheckboxRowInput>\n <CheckboxRowInput resource=\"gameAssignSettings\" source=\"minLinesperson\" min={0} step={1} {...inputProps}>\n <NumberInput />\n </CheckboxRowInput>\n {isEnabled(FF_OFFICIALS) && <CheckboxRowInput resource=\"gameAssignSettings\" source=\"minOfficial\" min={0} step={1} {...inputProps}>\n <NumberInput />\n </CheckboxRowInput>}\n {isEnabled(FF_SCOREKEEPERS) && <CheckboxRowInput resource=\"gameAssignSettings\" source=\"minScorekeeper\" min={0} step={1} {...inputProps}>\n <NumberInput />\n </CheckboxRowInput>}\n {isEnabled(FF_TIMEKEEPERS) && <CheckboxRowInput resource=\"gameAssignSettings\" source=\"minTimekeeper\" min={0} step={1} {...inputProps}>\n <NumberInput />\n </CheckboxRowInput>}\n {isEnabled(FF_GRADES) && <CheckboxRowInput resource=\"gameAssignSettings\" source=\"minRefereeGrade\" min={0} step={1} {...inputProps}>\n <NumberInput />\n </CheckboxRowInput>}\n {isEnabled(FF_GRADES) && <CheckboxRowInput resource=\"gameAssignSettings\" source=\"minLinespersonGrade\" min={0} step={1} {...inputProps}>\n <NumberInput />\n </CheckboxRowInput>}\n <CheckboxRowInput resource=\"gameAssignSettings\" source=\"minAge\" min={1} step={1} {...inputProps}>\n <NumberInput />\n </CheckboxRowInput>\n </SimpleForm>\n}\n\nconst AssignSettingsDialog = ({ isOpen, onSubmit, onClose }) => {\n const translate = useTranslate();\n return <Dialog open={isOpen} fullWidth maxWidth=\"sm\" onClose={onClose}>\n <DialogTitle>{translate('resources.gameAssignSettings.labels.assigning_settings')}</DialogTitle>\n <DialogContent>\n <DialogContentText>\n {translate('resources.gameAssignSettings.alerts.bulk_assign_settings')}\n </DialogContentText>\n <AssignSettingsForm save={onSubmit} component={Fragment} toolbar={\n <DialogFormToolbar submitLabel=\"ra.action.update\" onCancel={onClose} />\n } />\n </DialogContent>\n </Dialog>\n}\n\nconst AssignStatus = ({ selectedIds, resource }) => {\n const [ open, setOpen ] = useState(false);\n const refresh = useRefresh();\n const notify = useNotify();\n const translate = useTranslate();\n const statuses = useSelector(state => state.admin.resources.gameStatuses.data)\n\n const actionableGameIds = selectedIds.filter(id => canManageAssignments(statuses?.[id]))\n\n const onClose = () => {\n setOpen(false);\n }\n\n const onSubmit = (values) => {\n const {\n systemIdIsChecked, systemId,\n feesIdIsChecked, feesId,\n statusIsChecked, status,\n minRefereeIsChecked, minReferee,\n minLinespersonIsChecked, minLinesperson,\n minOfficialIsChecked, minOfficial,\n minScorekeeperIsChecked, minScorekeeper,\n minTimekeeperIsChecked, minTimekeeper,\n minRefereeGradeIsChecked, minRefereeGrade,\n minLinespersonGradeIsChecked, minLinespersonGrade,\n minAgeIsChecked, minAge,\n } = values;\n\n apiClient(`/games/bulkAssignSettings`, {\n method: 'POST',\n data: {\n gameIds: actionableGameIds,\n settings: JSON.parse(JSON.stringify({\n systemId: systemIdIsChecked ? systemId : undefined,\n feesId: feesIdIsChecked ? (feesId || null) : undefined,\n status: statusIsChecked ? status : undefined,\n minReferee: minRefereeIsChecked ? (minReferee || null) : undefined,\n minLinesperson: minLinespersonIsChecked ? (minLinesperson || null) : undefined,\n minOfficial: minOfficialIsChecked ? (minOfficial || null) : undefined,\n minScorekeeper: minScorekeeperIsChecked ? (minScorekeeper || null) : undefined,\n minTimekeeper: minTimekeeperIsChecked ? (minTimekeeper || null) : undefined,\n minRefereeGrade: minRefereeGradeIsChecked ? (minRefereeGrade || null) : undefined,\n minLinespersonGrade: minLinespersonGradeIsChecked ? (minLinespersonGrade || null) : undefined,\n minAge: minAgeIsChecked ? (minAge || null) : undefined,\n })),\n },\n })\n .then(({ data }) => {\n const count = data?.count || 0;\n onClose();\n refresh();\n notify(translate('resources.gameAssignSettings.notifications.updated_game_settings', count))\n })\n .catch(err => {\n console.log(err) // eslint-disable-line no-console\n const errorName = err?.response?.data?.error?.name;\n const errorMessage = errorName && translate(`resources.gameAssignSettings.notifications.errors.${errorName}`);\n notify(errorMessage || 'resources.gameAssignSettings.notifications.updating_settings_error', 'error')\n })\n }\n\n return <>\n <Button label={translate('resources.gameAssignSettings.labels.set_assigning_settings')} onClick={() => setOpen(true)} disabled={!actionableGameIds.length} />\n <AssignSettingsDialog\n isOpen={open}\n selectedIds={actionableGameIds}\n onSubmit={onSubmit}\n onClose={onClose}\n />\n </>\n}\n\nconst CertifyDialog = ({ open, onSubmit, onClose, gameIds = [] }) => {\n const translate = useTranslate();\n const games = useSelector(state => state.admin.resources.games.data)\n\n return <Dialog open={open} fullWidth maxWidth=\"sm\" onClose={onClose}>\n <DialogTitle>{translate('resources.scoresheets.labels.certify', gameIds.length)}</DialogTitle>\n <DialogContent>\n <DialogContentText>\n {translate('resources.scoresheets.messages.confirm_certify', gameIds.length)}\n </DialogContentText>\n <SimpleForm\n save={onSubmit}\n component={Fragment}\n toolbar={<DialogFormToolbar submitLabel=\"ra.action.certify\" cancelLabel=\"ra.action.cancel\" onCancel={onClose} hideSubmit={!gameIds?.length} />}\n >\n {!!gameIds?.length &&\n <List>\n {gameIds.map(gameId => <ListItem>{`• ${games?.[gameId]?.number}`}</ListItem>)}\n </List>}\n </SimpleForm>\n </DialogContent>\n </Dialog>\n}\n\nconst Certify = ({ selectedIds, resource }) => {\n const translate = useTranslate();\n const refresh = useRefresh();\n const notify = useNotify();\n const statuses = useSelector(state => state.admin.resources.gameStatuses.data)\n const [ open, setOpen ] = useState(false);\n\n const actionableGameIds = selectedIds.filter(id => canCertify(statuses?.[id]))\n\n const onClose = () => {\n setOpen(false);\n }\n\n const onSubmit = async () => {\n apiClient(`/games/bulkCertify`, {\n method: 'POST',\n data: {\n gameIds: actionableGameIds,\n },\n })\n .then(({ data }) => {\n const count = data?.count || 0;\n onClose();\n refresh();\n notify(translate('resources.games.notifications.certified_games', count))\n })\n .catch(err => {\n console.log(err) // eslint-disable-line no-console\n notify(translate('resources.games.notifications.certified_games_error', actionableGameIds.length))\n })\n\n setOpen(false)\n }\n\n return <>\n <Button label={translate('ra.action.certify')} onClick={() => setOpen(true)} disabled={!actionableGameIds.length} />\n <CertifyDialog open={open} onSubmit={onSubmit} onClose={onClose} gameIds={actionableGameIds} />\n </>\n}\n\nexport const GameBulkActions = props => {\n const scopes = useScopes();\n const canChangeStatuses = isAuthorized(scopes, 'games', 'changeStatus');\n const canManageAssigning = isAuthorized(scopes, 'games', 'assign');\n const canCertify = isAuthorized(scopes, 'scoresheets', 'full');\n\n return <>\n {canChangeStatuses && <GameStatus {...props} />}\n {canManageAssigning && <AssignStatus {...props} />}\n {canManageAssigning && <Delegate {...props} />}\n {canCertify && <Certify {...props} />}\n </>\n}\n","import { downloadCSV } from 'react-admin';\nimport moment from 'moment-timezone';\nimport Papa from 'papaparse'\n\nimport { appName } from '../../flags';\nimport { getSurfaceName } from '../surfaces/util';\n\nconst gamesExporter = data => {\n const games = data.map(game => {\n const timezone = game.timezone;\n const homeTeam = game.homeTeam;\n const awayTeam = game.awayTeam;\n const schedule = game.schedule\n const surface = game.surface;\n\n return [\n game.scheduleId,\n schedule?.name,\n game.number,\n game.homeTeamId,\n homeTeam?.name,\n homeTeam?.HCRId,\n game.awayTeamId,\n awayTeam?.name,\n awayTeam?.HCRId,\n moment.utc(game.date, 'YYYY-MM-DD').format('YYYY-MM-DD'),\n moment.tz(game.startTime, timezone).format(\"HH:mm\"),\n moment.tz(game.endTime, timezone).format(\"HH:mm\"),\n timezone,\n getSurfaceName(surface, true),\n game.status,\n game.comments\n ]\n });\n\n const fields = ['Schedule ID', 'Schedule Name', 'Game Number', 'Home Team ID', 'Home Team Name', 'Home Team Registry ID', 'Away Team ID', 'Away Team Name', 'Away Team Registry ID', 'Date', 'Start Time', 'End Time', 'Timezone', 'Venue', 'Status', 'Comments'];\n\n const csv = Papa.unparse({\n fields,\n data: games\n }, {\n quotes: fields.map(columnName => ['Home Team Registry ID', 'Away Team Registry ID'].includes(columnName)),\n });\n downloadCSV(csv, `${appName} - Games - ${moment().format('YYYYMMDDHHmmss')}`);\n};\n\ngamesExporter._include = [\n 'homeTeam',\n 'awayTeam',\n 'schedule',\n 'surface',\n]\n\nexport default gamesExporter;\n","import React from 'react';\nimport { Filter, BooleanInput } from 'react-admin';\n\nimport { LATEST_SEASON } from '@hisports/common/src/seasons';\n\nimport { InlineDateInput } from '../../common/inputs/DateInput';\nimport { GameStatusEnumInput } from '../../common/inputs/EnumInputs';\nimport { SeasonFilter, useSeason } from '../../common/inputs/SeasonSelector';\nimport { isAuthorized } from '../../common/Authorize';\nimport { useDefaultSeason, useScopes } from '../../http';\n\nimport { OfficeInput } from '../offices/OfficeInput';\nimport { SurfaceInput } from '../surfaces/SurfaceInput';\nimport { TeamInput } from '../teams/TeamInput';\n\nconst multipleProps = {\n multiple: true,\n allowEmpty: false,\n}\n\nexport const PracticeFilters = props => {\n const scopes = useScopes();\n const seasonId = useSeason()\n const defaultSeason = useDefaultSeason();\n\n const canListOffices = isAuthorized(scopes, 'offices', 'show');\n const canListTeams = isAuthorized(scopes, 'teams', 'list');\n const canListSurfaces = isAuthorized(scopes, 'surfaces', 'list');\n const showPastSeason = (seasonId === LATEST_SEASON) || (seasonId === defaultSeason);\n\n return <Filter variant=\"outlined\" {...props}>\n <InlineDateInput source=\"startTime\" label=\"resources.practices.filters.startTime\" alwaysOn />\n <InlineDateInput source=\"endTime\" label=\"resources.practices.filters.endTime\" />\n {canListTeams && <TeamInput source=\"teamIds\" filter={{ seasonId }} {...multipleProps} alwaysOn />}\n {canListOffices && <OfficeInput source=\"officeId\" filter={{ type: { neq: 'Historical' } }} {...multipleProps} alwaysOn />}\n {canListSurfaces && <SurfaceInput source=\"arenaId\" {...multipleProps} />}\n <GameStatusEnumInput source=\"status\" {...multipleProps} />\n {showPastSeason && <BooleanInput source=\"pastEvents\" alwaysOn />}\n <SeasonFilter source=\"seasonId\" alwaysOn />\n </Filter>\n}\n","import React from 'react';\nimport { BooleanInput } from 'react-admin';\n\nimport { LATEST_SEASON } from '@hisports/common/src/seasons';\n\nimport { ResetFiltersButton } from '../../common/ResetFiltersButton';\nimport { InlineDateInput } from '../../common/inputs/DateInput';\nimport { GameStatusEnumInput } from '../../common/inputs/EnumInputs';\nimport { SeasonFilter, useSeason } from '../../common/inputs/SeasonSelector';\nimport { isAuthorized } from '../../common/Authorize';\nimport { FilterCard } from '../../common/cards/FilterCard';\nimport LazyLoadFilter from '../../common/ra/Filter';\nimport { useDefaultSeason, useScopes } from '../../http';\n\nimport { OfficeInput } from '../offices/OfficeInput';\nimport { SurfaceInput } from '../surfaces/SurfaceInput';\nimport { TeamInput } from '../teams/TeamInput';\nimport { SavedSearches } from '../../common/SavedSearches';\n\nconst filterProps = {\n alwaysOn: true,\n fullWidth: true,\n}\n\nconst multipleProps = {\n multiple: true,\n allowEmpty: false,\n ...filterProps,\n}\n\nconst PracticeFilters = props => {\n const scopes = useScopes();\n const seasonId = useSeason()\n const defaultSeason = useDefaultSeason();\n\n const canListOffices = isAuthorized(scopes, 'offices', 'show');\n const canListTeams = isAuthorized(scopes, 'teams', 'list');\n const canListSurfaces = isAuthorized(scopes, 'surfaces', 'list');\n const showPastSeason = (seasonId === LATEST_SEASON) || (seasonId === defaultSeason);\n\n return <LazyLoadFilter variant=\"outlined\" margin=\"dense\" fullWidth {...props}>\n <InlineDateInput source=\"startTime\" label=\"resources.practices.filters.startTime\" {...filterProps} />\n <InlineDateInput source=\"endTime\" label=\"resources.practices.filters.endTime\" {...filterProps} />\n {canListTeams && <TeamInput source=\"teamIds\" filter={{ seasonId }} {...multipleProps} />}\n {canListOffices && <OfficeInput source=\"officeId\" filter={{ type: { neq: 'Historical' } }} {...multipleProps} />}\n {canListSurfaces && <SurfaceInput source=\"arenaId\" {...multipleProps} />}\n <GameStatusEnumInput source=\"status\" {...multipleProps} />\n {showPastSeason && <BooleanInput source=\"pastEvents\" label=\"resources.practices.filters.pastEvents\" {...filterProps} />}\n <SeasonFilter source=\"seasonId\" {...filterProps} />\n </LazyLoadFilter>\n}\n\nexport const PracticeFilterList = () => {\n return <FilterCard>\n <PracticeFilters />\n <ResetFiltersButton />\n\n <SavedSearches ignoredFilters={['seasonId', 'pastEvents']} />\n </FilterCard>\n}\n","import React from 'react';\n\nimport FunctionField from \"./FunctionField\";\n\nconst getEnum = (category, source, resource, translate) => {\n const value = category[source];\n return translate(`resources.${resource}.values.${source}.${value}`, { _: value })\n}\n\nexport const EnumField = props =>\n <FunctionField {...props} render={getEnum} />\n","import React, { Fragment, useState } from 'react';\nimport { TextInput, SimpleForm, useRefresh, useNotify, useTranslate, useRecordContext, RecordContextProvider } from 'react-admin';\nimport { Dialog, DialogTitle, DialogContent, Button } from '@material-ui/core';\nimport { UpdateOutlined } from '@material-ui/icons';\n\nimport { apiClient } from '../../http';\nimport { DialogFormToolbar } from '../../common/dialogs/DialogForm';\nimport { isAuthorized } from '../../common/Authorize';\nimport { GameStatusEnumInput } from '../../common/inputs/EnumInputs';\n\nconst inputProps = {\n variant: 'outlined',\n margin: 'normal',\n fullWidth: true,\n}\n\nconst PracticeStatusForm = props =>\n <SimpleForm {...props} {...inputProps} >\n <GameStatusEnumInput source=\"status\" defaultValue=\"Active\" {...inputProps} />\n <TextInput source=\"comments\" multiline minRows=\"3\" helperText=\"ra.message.optional\" {...inputProps} />\n </SimpleForm>\n\nexport default ({ size, variant, ...props }) => {\n const practice = useRecordContext(props)\n const [ isOpen, setOpen ] = useState(false);\n const refresh = useRefresh();\n const notify = useNotify();\n const translate = useTranslate();\n\n if (!isAuthorized(practice, 'practices', 'changeStatus')) return null;\n\n const onSubmit = (values) => {\n const { status, comments } = values;\n\n return apiClient(`/practices/${practice.id}/changeStatus`, {\n method: 'POST',\n data: {\n status,\n comments\n }\n })\n .then(() => {\n setOpen(false)\n refresh();\n notify('resources.practices.notifications.practice_status_changed')\n }).catch(err =>\n notify('ra.page.error_try_again', 'error')\n )\n }\n\n return <>\n <Button color=\"primary\" size={size} variant={variant} startIcon={<UpdateOutlined />} onClick={() => setOpen(true)}>\n {translate('resources.practices.labels.change_practice_status')}\n </Button>\n <Dialog open={isOpen} fullWidth maxWidth=\"sm\" onClose={() => setOpen(false)}>\n <DialogTitle>{translate('resources.practices.labels.change_practice_status')}</DialogTitle>\n <DialogContent>\n <RecordContextProvider value={null}>\n <PracticeStatusForm save={onSubmit} initialValues={{ status: practice.status, comments: practice.comments }} component={Fragment} toolbar={\n <DialogFormToolbar submitLabel=\"resources.practices.labels.change_practice_status\" onCancel={() => setOpen(false)} />\n } />\n </RecordContextProvider>\n </DialogContent>\n </Dialog>\n </>\n}\n","import React from 'react';\nimport { EditButton, useTranslate, useRecordContext } from 'react-admin';\nimport { Table, TableBody } from '@material-ui/core';\n\nimport InfoCard from '../../../common/cards/InfoCard';\nimport Row from '../../../common/cards/TableRow';\nimport TimeRangeField from '../../../common/fields/TimeRangeField';\nimport { isAuthorized } from '../../../common/Authorize';\nimport UserTextField from '../../../common/fields/UserTextField';\nimport { EnumField } from '../../../common/fields/EnumField';\n\nimport { SurfaceField } from '../../surfaces/SurfaceField';\nimport { TeamsField } from '../../teams/TeamsField';\nimport { OfficeField } from '../../offices/OfficeField';\n\nimport PracticeStatusModal from '../PracticeStatusModal';\n\nexport default props => {\n const practice = useRecordContext(props);\n const translate = useTranslate();\n\n const canEditPractice = isAuthorized(practice, 'practices', 'edit');\n const canChangeStatus = isAuthorized(practice, 'practices', 'changeStatus')\n const type = translate(`resources.practices.values.type.${practice?.type}`, { _: practice?.type }) || 'resources.practices.labels.card.name'\n\n return <InfoCard\n title={type}\n actions={[\n canEditPractice && <EditButton label=\"resources.practices.actions.edit\" record={practice} />,\n canChangeStatus && <PracticeStatusModal />\n ]}\n >\n <Table>\n <TableBody>\n <Row label=\"resources.practices.fields.teamIds\">\n {practice?.teamIds?.length ? <TeamsField source=\"teamIds\" includeCategory=\"inline\" /> : translate('resources.practices.labels.tbd')}\n </Row>\n <Row label=\"resources.practices.fields.officeId\">\n <OfficeField source=\"officeId\" />\n </Row>\n <Row label=\"ra.date.name\">\n <TimeRangeField startSource=\"startTime\" endSource=\"endTime\" showDate showLocal />\n </Row>\n <Row label=\"resources.practices.fields.location\">\n <SurfaceField source=\"arenaId\" includeAttributes=\"full\" includeCity=\"full\" />\n </Row>\n <Row label=\"resources.practices.fields.status\">\n <EnumField source=\"status\" />\n </Row>\n <Row hidden={!practice?.comments}>\n <UserTextField source=\"comments\" />\n </Row>\n </TableBody>\n </Table>\n </InfoCard>\n}\n","import React from 'react';\nimport { Grid } from '@material-ui/core'\n\nimport PracticeCard from './cards/PracticeCard';\n\nexport const PracticeShowLayout = props =>\n <Grid container spacing={3}>\n <Grid item xs={12}>\n <PracticeCard />\n </Grid>\n </Grid>\n","import React, { useMemo } from 'react';\nimport { useResourceContext, useTranslate } from 'react-admin';\nimport { useFormState } from 'react-final-form';\nimport { Accordion, AccordionSummary, AccordionDetails, styled, Typography } from '@material-ui/core';\nimport { ExpandMore as ExpandMoreIcon, DateRange as Schedule } from '@material-ui/icons';\nimport { RRule } from 'rrule';\nimport moment from 'moment-timezone';\n\nconst ScheduleIcon = styled(Schedule)(({ theme }) => ({\n marginRight: theme.spacing(1),\n}))\n\nconst List = styled('ul')(({ theme }) => ({\n margin: 0,\n paddingLeft: theme.spacing(5),\n}))\n\nconst ListItem = styled('li')(({ theme }) => ({\n padding: theme.spacing(.5, 0),\n}))\n\nexport const getRule = values => {\n if (!values.frequency || values.frequency === 'Once' || !values.endDate || !values.timezone) return;\n\n const FREQ = { 'Daily': RRule.DAILY, 'Weekly': RRule.WEEKLY, 'Monthly': RRule.MONTHLY };\n const WDAY = { 'Sun': RRule.SU, 'Mon': RRule.MO, 'Tue': RRule.TU, 'Wed': RRule.WE, 'Thu': RRule.TH, 'Fri': RRule.FR, 'Sat': RRule.SA };\n\n const weekdays = values.weekdays?.map(day => WDAY[day]).filter(Boolean);\n const dtstart = values.startTime ? moment.tz(values.startTime, values.timezone).startOf('day').toDate() : undefined;\n const until = moment.tz(values.endDate, values.timezone).endOf('day').toDate();\n\n return new RRule({\n freq: FREQ[values.frequency],\n dtstart,\n until,\n interval: values.interval || 1,\n byweekday: weekdays?.length > 0 ? weekdays : undefined,\n });\n}\n\nexport const useRecurrence = recurrence => {\n return useMemo(() => {\n if (!recurrence) return {};\n\n const FREQ = { [RRule.DAILY]: 'Daily', [RRule.WEEKLY]: 'Weekly', [RRule.MONTHLY]: 'Monthly' };\n const WDAY = { [RRule.SU]: 'Sun', [RRule.MO]: 'Mon', [RRule.TU]: 'Tue', [RRule.WE]: 'Wed', [RRule.TH]: 'Thu', [RRule.FR]: 'Fri', [RRule.SA]: 'Sat' }\n\n const rule = RRule.fromString(recurrence);\n if (!rule?.origOptions) return {};\n\n const { freq, interval, byweekday, until } = rule.origOptions;\n\n return {\n frequency: FREQ[freq],\n interval,\n weekdays: byweekday?.map(day => WDAY[day]),\n endDate: until,\n };\n }, [recurrence]);\n};\n\nexport const RecurrenceSchedule = () => {\n const translate = useTranslate();\n const resource = useResourceContext();\n\n const { values } = useFormState();\n const rule = useMemo(() => getRule(values), [ values ])\n\n const occurrences = useMemo(() => {\n if (!rule) return [];\n return rule.all().map(instance => {\n const date = moment(instance).tz(values.timezone).format('YYYY-MM-DD');\n return moment.tz(`${date}T00:00:00`, values.timezone);\n });\n }, [rule, values.timezone]);\n\n if (!rule || !values.startTime || !occurrences) return null;\n\n const total = occurrences.length;\n const first = occurrences.slice(0, 5);\n const last = occurrences[total - 1];\n\n const summary = total > 0\n ? translate(`resources.${resource}.messages.event_repeat`, { smart_count: total })\n : translate(`resources.${resource}.messages.schedule_no_occurences`)\n\n return <Accordion>\n <AccordionSummary expandIcon={<ExpandMoreIcon />}>\n <ScheduleIcon />\n <Typography color=\"textSecondary\">{summary}</Typography>\n </AccordionSummary>\n <AccordionDetails>\n <List>\n {first?.map(timestamp => <ListItem>{timestamp.format('ddd, LL')}</ListItem>)}\n {total > 5 && <ListItem>{translate(`resources.${resource}.messages.additional_instances`, { smart_count: total - 6 })}</ListItem>}\n {total > 5 && <ListItem>{last.format('ddd, LL')}</ListItem>}\n </List>\n </AccordionDetails>\n </Accordion>\n}\n","import React from 'react';\nimport { Grid, Typography } from \"@material-ui/core\"\nimport { NumberInput, useResourceContext, useTranslate } from \"react-admin\"\nimport { useFormState } from 'react-final-form';\n\nimport { EndDateInput } from \"../inputs/EndTimeInput\"\nimport { DayEnumInput, FrequencyEnumInput } from \"../inputs/EnumInputs\"\n\nimport { RecurrenceSchedule } from './RecurrenceSchedule';\n\nexport const RecurrenceField = (inputProps) => {\n const translate = useTranslate();\n const resource = useResourceContext();\n const { values: { frequency }, initialValues } = useFormState();\n\n const isRecurring = frequency != null && frequency !== 'Once'\n const frequencyHelper = !isRecurring && (initialValues.frequency && initialValues.frequency !== 'Once') ? `resources.${resource}.helpers.frequency` : ''\n\n return <>\n <Grid item xs={12}>\n <Typography variant=\"subtitle2\">{translate('resources.arenaslots.labels.recurrence')}</Typography>\n </Grid>\n\n <Grid item xs={12} lg={3}>\n <FrequencyEnumInput source=\"frequency\" label={translate(`resources.${resource}.labels.frequency`)} helperText={frequencyHelper} {...inputProps} />\n </Grid>\n\n <Grid item xs={12} lg={3}>\n <NumberInput source=\"interval\" label={translate(`resources.${resource}.labels.interval`)} helperText={isRecurring ? \"ra.message.optional\" : 'ra.message.not_applicable'} disabled={!isRecurring} {...inputProps} />\n </Grid>\n\n <Grid item xs={12} lg={3}>\n <DayEnumInput source=\"weekdays\" label={translate(`resources.${resource}.labels.weekdays`)} helperText={isRecurring ? \"ra.message.optional\" : 'ra.message.not_applicable'} multiple disabled={!isRecurring} {...inputProps} />\n </Grid>\n\n <Grid item xs={12} lg={3}>\n <EndDateInput source=\"endDate\" label={translate(`resources.${resource}.labels.end_date`)} helperText={isRecurring ? '' : 'ra.message.not_applicable'} disabled={!isRecurring} {...inputProps} />\n </Grid>\n\n {isRecurring && <Grid item xs={12}>\n <RecurrenceSchedule />\n </Grid>}\n </>\n}\n","import React, { useRef } from 'react';\nimport { TextInput, SimpleForm, useTranslate } from 'react-admin';\nimport moment from 'moment-timezone';\nimport { Grid } from '@material-ui/core';\nimport { useFormState } from 'react-final-form';\nimport { useSelector } from 'react-redux';\nimport createCalculator from 'final-form-calculate';\n\nimport { changeTimezone, isEmpty } from '@hisports/parsers';\nimport { GAME_OFFICE_TYPES } from '@hisports/common/src/constants';\n\nimport { InlineDateTimeInput, dateTimePlaceholder } from '../../common/inputs/DateInput';\nimport { GameStatusEnumInput, SeasonInput, TimezoneEnumInput } from '../../common/inputs/EnumInputs';\nimport { EndTimeInput } from '../../common/inputs/EndTimeInput';\nimport { FieldDependency } from '../../common/FieldDependency';\nimport { getRule } from '../../common/fields/RecurrenceSchedule';\nimport { RecurrenceField } from '../../common/fields/RecurrenceField';\nimport Toolbar from '../../common/ra/Toolbar';\n\nimport { TeamInput } from '../teams/TeamInput';\nimport { SurfaceInput } from '../surfaces/SurfaceInput';\nimport { OfficeInput } from '../offices/OfficeInput';\nimport { hasConflicts, validateStatus } from '../games/GameForm';\n\nimport { PracticeAvailabilityContextProvider } from './PracticeAvailabilityContext';\nimport { PracticeAvailabilityInfo, useAvailabilities } from './PracticeAvailabilityInfo';\n\n\nconst validate = values => {\n const errors = {};\n\n if (!values.officeId) errors.officeId = 'ra.validation.required'\n if (!values.seasonId?.length) errors.seasonId = 'ra.validation.required'\n if (!values.arenaId) {\n errors.arenaId = 'ra.validation.required'\n }\n\n if (!values.startTime) errors.startTime = 'ra.validation.required'\n if (!values.endTime) errors.endTime = 'ra.validation.required'\n\n if (values.startTime && values.endTime) {\n if (!moment.tz(values.startTime, values.timezone).isValid()) {\n errors.startTime = 'resources.games.validations.invalid_time'\n } else if (!moment.tz(values.endTime, values.timezone).isValid()) {\n errors.endTime = 'resources.games.validations.invalid_time'\n } else if (moment.tz(values.endTime, values.timezone).isBefore(values.startTime, 'minute')) {\n errors.endTime = 'resources.games.validations.end_before_start'\n } else if (!moment.tz(values.endTime, values.timezone).isSame(values.startTime, 'day')) {\n errors.endTime = 'resources.games.validations.invalid_must_be_same_day'\n }\n }\n\n if (values.frequency != null && values.frequency !== 'Once') {\n if (!values.endDate) {\n errors.endDate = 'ra.validation.required'\n } else if (values.startTime && moment.utc(values.endDate).isBefore(values.startTime, 'day')) {\n errors.endDate = 'resources.games.validations.after_start_time';\n } else if (values.startTime && moment.utc(values.endDate).diff(values.startTime, 'day') > 365) {\n errors.endDate = 'resources.games.validations.invalid_date'\n }\n }\n\n if (!values.status) errors.status = 'ra.validation.required'\n\n return errors;\n}\n\nconst PracticeStatusInput = props => {\n const { values } = useFormState();\n const availabilities = useAvailabilities(values);\n\n const helperText = hasConflicts(availabilities, values.status, ['Conflict']) ? 'resources.practices.helpers.conflicts' : '';\n\n return <GameStatusEnumInput validate={validateStatus(availabilities)} helperText={helperText} {...props} />\n}\n\nconst inputProps = {\n resource: 'practices',\n basePath: '/practices',\n variant: 'outlined',\n margin: 'none',\n fullWidth: true,\n}\n\nconst PracticeFormBody = () => {\n const { initialValues } = useFormState();\n const translate = useTranslate();\n\n const isEditing = initialValues.id != null;\n return <Grid container spacing={2} fullWidth>\n <Grid item xs={12} md={9}>\n <TextInput source=\"name\" helperText=\"ra.message.optional\" {...inputProps} />\n </Grid>\n <Grid item xs={12} md={3}>\n <SeasonInput source=\"seasonId\" {...inputProps} />\n </Grid>\n <Grid item xs={12} md={12}>\n <TeamInput source=\"teamIds\" multiple helperText=\"ra.message.optional\" {...inputProps} />\n </Grid>\n <Grid item xs={12} md={12}>\n <OfficeInput source=\"officeId\" filter={{ type: { nin: [...GAME_OFFICE_TYPES] } }} {...inputProps} />\n </Grid>\n <Grid item xs={12} md={4}>\n <SurfaceInput source=\"arenaId\" {...inputProps} />\n </Grid>\n <Grid item xs={12} md={4}>\n <FieldDependency fieldSource=\"arenaId\" disabled>\n <InlineDateTimeInput\n source=\"startTime\"\n options={{\n label: translate('resources.practices.fields.startTime'),\n format: 'YYYY-MM-DD HH:mm',\n placeholder: dateTimePlaceholder,\n ampm: false,\n }}\n {...inputProps}\n />\n </FieldDependency>\n </Grid>\n <Grid item xs={12} md={4}>\n <FieldDependency fieldSource=\"arenaId\" disabled>\n <EndTimeInput\n source=\"endTime\"\n options={{\n label: translate('resources.practices.fields.endTime'),\n format: 'YYYY-MM-DD HH:mm',\n placeholder: dateTimePlaceholder,\n ampm: false,\n }}\n {...inputProps}\n />\n </FieldDependency>\n </Grid>\n <PracticeAvailabilityInfo />\n <Grid item xs={12} md={4}>\n <PracticeStatusInput source=\"status\" defaultValue=\"Active\" {...inputProps} />\n </Grid>\n <Grid item xs={12} md={4}>\n <TimezoneEnumInput source=\"timezone\" disabled {...inputProps} />\n </Grid>\n <Grid item xs={0} md={4} />\n\n {!isEditing && <RecurrenceField {...inputProps} />}\n\n <Grid item xs={12} lg={12}>\n <TextInput source=\"comments\" multiline rows=\"3\" helperText=\"ra.message.optional\" {...inputProps} />\n </Grid>\n </Grid>\n}\n\nexport const PracticeForm = ({ initialValues: propInitialValues, save, ...props }) => {\n const initialValues = { status: 'Active', type: 'Practice', frequency: 'Once', ...propInitialValues }\n\n const surfaces = useSelector(store => store.admin.resources.surfaces.data);\n const surfacesRef = useRef({});\n surfacesRef.current = surfaces;\n\n const teams = useSelector(store => store.admin.resources.teams.data);\n const teamsRef = useRef({});\n teamsRef.current = teams;\n\n const decorators = useRef([createCalculator({\n field: 'arenaId',\n updates: {\n timezone: (arenaId, values, prevValues) => {\n const surface = surfacesRef.current[arenaId];\n if (!surface || isEmpty(prevValues) || (values.timezone && !prevValues.timezone)) return values.timezone;\n return surface.timezone;\n }\n }\n }, {\n field: 'timezone',\n updates: {\n startTime: (timezone, values, prevValues) => {\n const { timezone: prevTimezone } = prevValues;\n if (!prevTimezone || !timezone || !values.startTime || isEmpty(prevValues) || timezone === prevTimezone) return values.startTime;\n return changeTimezone(values.startTime, prevTimezone, timezone)\n },\n endTime: (timezone, values, prevValues) => {\n const { timezone: prevTimezone } = prevValues;\n if (!prevTimezone || !timezone || !values.endTime || isEmpty(prevValues) || timezone === prevTimezone) return values.endTime;\n return changeTimezone(values.endTime, prevTimezone, timezone)\n },\n }\n }, {\n field: 'startTime',\n updates: {\n date: (startTime, values) => {\n if (!startTime || !values.timezone) return startTime;\n return moment.tz(startTime, values.timezone).format('YYYY-MM-DD');\n },\n }\n })])\n\n const onSave = async ({ frequency, interval, weekdays, endDate, recurrence, ...practice }) => {\n const rule = getRule({ frequency, interval, weekdays, endDate, timezone: practice.timezone });\n practice.recurrence = rule?.toString().replace('RRULE:', '') || null;\n return save(practice, props.redirect);\n }\n\n return <PracticeAvailabilityContextProvider>\n <SimpleForm\n initialValues={initialValues}\n validate={validate}\n save={onSave}\n decorators={decorators.current}\n toolbar={<Toolbar />}\n {...props}\n >\n <PracticeFormBody />\n </SimpleForm>\n </PracticeAvailabilityContextProvider>\n}\n","import { downloadCSV } from 'react-admin';\nimport moment from 'moment-timezone';\nimport Papa from 'papaparse'\n\nimport { appName } from '../../flags';\nimport { getSurfaceName } from '../surfaces/util';\n\nconst practicesExporter = data => {\n const practices = data.map(practice => {\n const teamNames = practice?.teams.map(team => team.name);\n const teamHCRIds = practice?.teams.map(team => team.HCRId);\n const surface = practice.surface;\n const timezone = practice.timezone;\n\n return [\n practice.teamIds,\n teamNames,\n teamHCRIds,\n practice.name,\n getSurfaceName(surface),\n moment.utc(practice.date, 'YYYY-MM-DD').format(\"YYYY-MM-DD\"),\n moment.tz(practice.startTime, timezone).format(\"HH:mm\"),\n moment.tz(practice.endTime, timezone).format(\"HH:mm\"),\n timezone,\n practice.status,\n practice.comments\n ]\n });\n\n const csv = Papa.unparse({\n fields: [\"Team IDs\", \"Team Names\", \"Team Registry IDs\", \"Name\", \"Venue\", \"Date\", \"Start Time\", \"End Time\", \"Timezone\", \"Status\", \"Comments\"],\n data: practices\n });\n downloadCSV(csv, `${appName} - Practices - ${moment().format('YYYYMMDDHHmmss')}`);\n};\n\npracticesExporter._include = [\n 'teams',\n 'surface',\n]\n\nexport default practicesExporter;\n","import React, { Fragment, useState } from 'react';\nimport { SimpleForm, TextInput, Button, useNotify, useRefresh, useTranslate, useUnselectAll } from \"react-admin\";\nimport { Dialog, DialogContent, DialogTitle } from '@material-ui/core';\n\nimport { apiClient, useScopes } from '../../http';\n\nimport { isAuthorized } from \"../../common/Authorize\";\nimport { GameStatusEnumInput } from '../../common/inputs/EnumInputs';\nimport { DialogFormToolbar } from '../../common/dialogs/DialogForm';\n\nconst inputProps = {\n variant: 'outlined',\n margin: 'normal',\n fullWidth: true,\n}\n\nconst validateStatus = values => {\n const errors = {};\n if (!values.status) errors.status = 'ra.validation.required';\n return errors;\n}\n\nconst PracticeStatusForm = props => {\n return <SimpleForm {...props} {...inputProps} validate={validateStatus} >\n <GameStatusEnumInput source=\"status\" defaultValue=\"Active\" {...inputProps} />\n <TextInput source=\"comments\" multiline minRows=\"3\" {...inputProps} />\n </SimpleForm>\n}\n\nconst PracticeStatusDialog = ({ isOpen, onSubmit, onClose }) => {\n const translate = useTranslate();\n return <Dialog open={isOpen} fullWidth maxWidth=\"sm\" onClose={onClose}>\n <DialogTitle>{translate('resources.practices.labels.practice_status')}</DialogTitle>\n <DialogContent>\n <PracticeStatusForm initialValues={{ status: 'Active', comments: '' }} save={onSubmit} component={Fragment} toolbar={\n <DialogFormToolbar submitLabel=\"ra.action.update\" onCancel={onClose} />\n } />\n </DialogContent>\n </Dialog>\n}\n\nconst PracticeStatus = ({ selectedIds, resource }) => {\n const [ open, setOpen ] = useState(false);\n const unselectAll = useUnselectAll(resource);\n const refresh = useRefresh();\n const notify = useNotify();\n const translate = useTranslate();\n\n const onClose = () => {\n setOpen(false);\n unselectAll();\n }\n\n const onSubmit = (values) => {\n apiClient(`/practices/bulkStatus`, {\n method: 'POST',\n data: {\n practiceIds: selectedIds,\n status: values.status,\n comments: values.comments\n },\n })\n .then(({ data }) => {\n const count = data?.count || 0;\n onClose();\n refresh();\n notify(translate('resources.practices.notifications.change_practice_status', {\n smart_count: count,\n status: translate(`resources.games.values.status.${values.status}`, { _: values.status }),\n }))\n })\n .catch(err => {\n console.log(err) // eslint-disable-line no-console\n notify('resources.practices.notifications.change_practice_status_error', selectedIds.length)\n })\n }\n\n return <>\n <Button label={translate('resources.practices.labels.set_practice_status')} onClick={() => setOpen(true)} disabled={!selectedIds.length} />\n <PracticeStatusDialog\n isOpen={open}\n selectedIds={selectedIds}\n onSubmit={onSubmit}\n onClose={onClose}\n />\n </>\n}\n\nexport const PracticeBulkActions = props => {\n const scopes = useScopes();\n const canChangeStatuses = isAuthorized(scopes, 'practices', 'changeStatus');\n\n return canChangeStatuses && <PracticeStatus {...props} />\n}\n","import React from 'react';\nimport { Filter, BooleanInput } from 'react-admin';\n\nimport { LATEST_SEASON } from '@hisports/common/src/seasons';\n\nimport { InlineDateInput } from '../../common/inputs/DateInput';\nimport { ActivityTypeEnumInput, GameStatusEnumInput } from '../../common/inputs/EnumInputs';\nimport { SeasonFilter, useSeason } from '../../common/inputs/SeasonSelector';\nimport { isAuthorized } from '../../common/Authorize';\nimport { useDefaultSeason, useScopes } from '../../http';\n\nimport { OfficeInput } from '../offices/OfficeInput';\nimport { TeamInput } from '../teams/TeamInput';\n\nconst multipleProps = {\n multiple: true,\n allowEmpty: false,\n}\n\nexport const ActivityFilters = props => {\n const scopes = useScopes();\n const seasonId = useSeason()\n const defaultSeason = useDefaultSeason();\n\n const canListOffices = isAuthorized(scopes, 'offices', 'show');\n const canListTeams = isAuthorized(scopes, 'teams', 'list');\n const showPastSeason = (seasonId === LATEST_SEASON) || (seasonId === defaultSeason);\n\n return <Filter variant=\"outlined\" {...props}>\n <InlineDateInput source=\"startTime\" label=\"resources.activities.filters.startTime\" alwaysOn />\n <InlineDateInput source=\"endTime\" label=\"resources.activities.filters.endTime\" />\n {canListTeams && <TeamInput source=\"teamId\" filter={{ seasonId }} {...multipleProps} alwaysOn />}\n {canListOffices && <OfficeInput source=\"officeId\" filter={{ type: { neq: 'Historical' } }} {...multipleProps} alwaysOn />}\n <ActivityTypeEnumInput source=\"type\" {...multipleProps} />\n <GameStatusEnumInput source=\"status\" {...multipleProps} />\n {showPastSeason && <BooleanInput source=\"pastEvents\" label=\"resources.activities.filters.pastEvents\" alwaysOn />}\n <SeasonFilter source=\"seasonId\" alwaysOn />\n </Filter>\n}\n","import React from 'react';\nimport { BooleanInput } from 'react-admin';\n\nimport { LATEST_SEASON } from '@hisports/common/src/seasons';\n\nimport { ResetFiltersButton } from '../../common/ResetFiltersButton';\nimport { InlineDateInput } from '../../common/inputs/DateInput';\nimport { ActivityTypeEnumInput, GameStatusEnumInput } from '../../common/inputs/EnumInputs';\nimport { SeasonFilter, useSeason } from '../../common/inputs/SeasonSelector';\nimport { isAuthorized } from '../../common/Authorize';\nimport { FilterCard } from '../../common/cards/FilterCard';\nimport LazyLoadFilter from '../../common/ra/Filter';\nimport { useDefaultSeason, useScopes } from '../../http';\n\nimport { OfficeInput } from '../offices/OfficeInput';\nimport { TeamInput } from '../teams/TeamInput';\nimport { SavedSearches } from '../../common/SavedSearches';\n\nconst filterProps = {\n alwaysOn: true,\n fullWidth: true,\n}\n\nconst multipleProps = {\n multiple: true,\n allowEmpty: false,\n ...filterProps,\n}\n\nconst ActivityFilters = props => {\n const scopes = useScopes();\n const seasonId = useSeason()\n const defaultSeason = useDefaultSeason();\n\n const canListOffices = isAuthorized(scopes, 'offices', 'show');\n const canListTeams = isAuthorized(scopes, 'teams', 'list');\n const showPastSeason = (seasonId === LATEST_SEASON) || (seasonId === defaultSeason);\n\n return <LazyLoadFilter variant=\"outlined\" margin=\"dense\" fullWidth {...props}>\n <InlineDateInput source=\"startTime\" label=\"resources.activities.filters.startTime\" {...filterProps} />\n <InlineDateInput source=\"endTime\" label=\"resources.activities.filters.endTime\" {...filterProps} />\n {canListTeams && <TeamInput source=\"teamId\" filter={{ seasonId }} {...multipleProps} />}\n {canListOffices && <OfficeInput source=\"officeId\" filter={{ type: { neq: 'Historical' } }} {...multipleProps} />}\n <ActivityTypeEnumInput source=\"type\" {...multipleProps} />\n <GameStatusEnumInput source=\"status\" {...multipleProps} />\n {showPastSeason && <BooleanInput source=\"pastEvents\" label=\"resources.activities.filters.pastEvents\" {...filterProps} />}\n <SeasonFilter source=\"seasonId\" {...filterProps} />\n </LazyLoadFilter>\n}\n\nexport const ActivityFilterList = () => {\n return <FilterCard>\n <ActivityFilters />\n <ResetFiltersButton />\n\n <SavedSearches ignoredFilters={['seasonId', 'pastEvents']} />\n </FilterCard>\n}\n","import React from 'react';\nimport { TextField, EditButton, useTranslate, useRecordContext } from 'react-admin';\nimport { Table, TableBody } from '@material-ui/core';\n\nimport InfoCard from '../../../common/cards/InfoCard';\nimport Row from '../../../common/cards/TableRow';\nimport TimeRangeField from '../../../common/fields/TimeRangeField';\nimport { isAuthorized } from '../../../common/Authorize';\nimport UserTextField from '../../../common/fields/UserTextField';\nimport { EnumField } from '../../../common/fields/EnumField';\n\nimport { TeamField } from '../../teams/TeamField';\n\nexport default props => {\n const activity = useRecordContext(props);\n const translate = useTranslate();\n\n const canEditActivity = isAuthorized(activity, 'activities', 'edit');\n const type = translate(`resources.activities.values.type.${activity?.type}`, { _: activity?.type }) || 'resources.activities.labels.card.name'\n\n return <InfoCard\n title={type}\n actions={[\n canEditActivity && <EditButton label={translate('ra.page.edit', { name: type })} record={activity} />\n ]}\n >\n <Table>\n <TableBody>\n <Row label=\"resources.activities.fields.teamId\">\n <TeamField source=\"teamId\" includeId=\"full\" includeCategory=\"full\" />\n </Row>\n <Row label=\"ra.date.name\">\n <TimeRangeField startSource=\"startTime\" endSource=\"endTime\" showDate showLocal />\n </Row>\n <Row label=\"resources.activities.fields.location\">\n <TextField {...props} source=\"location\" />\n </Row>\n <Row label=\"resources.activities.fields.status\">\n <EnumField source=\"status\" />\n </Row>\n <Row hidden={!activity?.comments}>\n <UserTextField source=\"comments\" />\n </Row>\n </TableBody>\n </Table>\n </InfoCard>\n}\n","import React from 'react';\nimport { Grid } from '@material-ui/core'\n\nimport ActivityCard from './cards/ActivityCard';\n\nexport const ActivityShowLayout = props =>\n <Grid container spacing={3}>\n <Grid item xs={12}>\n <ActivityCard />\n </Grid>\n </Grid>\n","import React, { useRef } from 'react';\nimport { TextInput, SimpleForm, useTranslate, useRecordContext } from 'react-admin';\nimport moment from 'moment-timezone';\nimport { Grid } from '@material-ui/core';\nimport { Alert } from '@material-ui/lab';\nimport { useFormState } from 'react-final-form';\nimport { useSelector } from 'react-redux';\nimport createCalculator from 'final-form-calculate';\n\nimport { changeTimezone, isEmpty } from '@hisports/parsers';\n\nimport { InlineDateTimeInput, dateTimePlaceholder } from '../../common/inputs/DateInput';\nimport { GameStatusEnumInput, ActivityTypeEnumInput, TimezoneEnumInput } from '../../common/inputs/EnumInputs';\nimport { EndTimeInput } from '../../common/inputs/EndTimeInput';\nimport { getRule, useRecurrence } from '../../common/fields/RecurrenceSchedule';\nimport { RecurrenceField } from '../../common/fields/RecurrenceField';\nimport Toolbar from '../../common/ra/Toolbar';\n\nimport { TeamInput } from '../teams/TeamInput';\n\nconst validate = values => {\n const errors = {};\n\n if (!values.teamId) errors.teamId = 'ra.validation.required'\n if (!values.type) {\n errors.type = 'ra.validation.required'\n }\n if (!values.location) {\n errors.location = 'ra.validation.required'\n }\n\n if (!values.startTime) errors.startTime = 'ra.validation.required'\n if (!values.endTime) errors.endTime = 'ra.validation.required'\n\n if (values.startTime && values.endTime) {\n if (!moment(values.startTime).isValid()) {\n errors.startTime = 'resources.games.validations.invalid_time'\n } else if (!moment(values.endTime).isValid()) {\n errors.endTime = 'resources.games.validations.invalid_time'\n } else if (moment(values.endTime).isBefore(values.startTime, 'minute')) {\n errors.endTime = 'resources.games.validations.end_before_start'\n } else if (moment(values.endTime).diff(values.startTime, 'hours') > 12 && values.type !== 'Accomodation') {\n errors.endTime = 'resources.games.validations.invalid_time_check_am_pm'\n }\n }\n\n if (values.frequency != null && values.frequency !== 'Once') {\n if (!values.endDate) {\n errors.endDate = 'ra.validation.required'\n } else if (values.startTime && moment(values.endDate).isBefore(values.startTime, 'day')) {\n errors.endDate = 'resources.games.validations.after_start_time';\n } else if (values.startTime && moment(values.endDate).diff(values.startTime, 'days') > 365) {\n errors.endDate = 'resources.games.validations.invalid_date'\n }\n }\n\n if (!values.status) errors.status = 'ra.validation.required'\n\n return errors;\n}\n\nconst inputProps = {\n resource: 'activities',\n basePath: '/activities',\n variant: 'outlined',\n margin: 'none',\n fullWidth: true,\n}\n\nconst ActivityFormBody = () => {\n const { initialValues } = useFormState();\n const translate = useTranslate();\n\n const isEditing = initialValues.id\n return <Grid container spacing={2} fullWidth>\n <Grid item xs={12} >\n <Alert severity=\"info\">{translate('resources.activities.alerts.activity_explanation')}</Alert>\n </Grid>\n <Grid item xs={12} md={9}>\n <TextInput source=\"name\" helperText=\"ra.message.optional\" {...inputProps} />\n </Grid>\n <Grid item xs={12} md={3}>\n <ActivityTypeEnumInput source=\"type\" {...inputProps} />\n </Grid>\n <Grid item xs={12}>\n <TeamInput source=\"teamId\" {...inputProps} disabled={initialValues?.teamId} />\n </Grid>\n <Grid item xs={12} md={4}>\n <TextInput source=\"location\" helperText={false} {...inputProps} />\n </Grid>\n <Grid item xs={12} md={4}>\n <InlineDateTimeInput\n source=\"startTime\"\n options={{\n label: translate('resources.activities.fields.startTime'),\n format: 'YYYY-MM-DD HH:mm',\n placeholder: dateTimePlaceholder,\n ampm: false,\n }}\n {...inputProps}\n />\n </Grid>\n <Grid item xs={12} md={4}>\n <EndTimeInput\n source=\"endTime\"\n options={{\n label: translate('resources.activities.fields.endTime'),\n format: 'YYYY-MM-DD HH:mm',\n placeholder: dateTimePlaceholder,\n ampm: false,\n }}\n {...inputProps}\n />\n </Grid>\n <Grid item xs={12} md={4}>\n <GameStatusEnumInput source=\"status\" defaultValue=\"Active\" {...inputProps} />\n </Grid>\n <Grid item xs={12} md={4}>\n <TimezoneEnumInput source=\"timezone\" {...inputProps} />\n </Grid>\n <Grid item xs={0} md={4} />\n\n {!isEditing && <RecurrenceField {...inputProps} />}\n\n <Grid item xs={12} lg={12}>\n <TextInput source=\"comments\" multiline rows=\"3\" helperText=\"ra.message.optional\" {...inputProps} />\n </Grid>\n </Grid>\n}\n\nexport const ActivityForm = ({ initialValues: propInitialValues, save, ...props }) => {\n const record = useRecordContext(props);\n const recurrenceValues = useRecurrence(record?.recurrence)\n const initialValues = { status: 'Active', type: 'Training', frequency: 'Once', timezone: moment.tz.guess(), ...recurrenceValues, ...propInitialValues }\n\n const teams = useSelector(store => store.admin.resources.teams.data);\n const teamsRef = useRef({});\n teamsRef.current = teams;\n\n const decorators = useRef([createCalculator({\n field: 'timezone',\n updates: {\n startTime: (timezone, values, prevValues) => {\n const { timezone: prevTimezone } = prevValues;\n if (!prevTimezone || !timezone || !values.startTime || isEmpty(prevValues) || timezone === prevTimezone) return values.startTime;\n return changeTimezone(values.startTime, prevTimezone, timezone)\n },\n endTime: (timezone, values, prevValues) => {\n const { timezone: prevTimezone } = prevValues;\n if (!prevTimezone || !timezone || !values.endTime || isEmpty(prevValues) || timezone === prevTimezone) return values.endTime;\n return changeTimezone(values.endTime, prevTimezone, timezone)\n },\n }\n }, {\n field: 'startTime',\n updates: {\n date: (startTime, values) => {\n if (!startTime || !values.timezone) return startTime;\n return moment.tz(startTime, values.timezone).format('YYYY-MM-DD');\n },\n }\n })])\n\n const onSave = async ({ frequency, interval, weekdays, endDate, recurrence, ...activity }) => {\n const rule = getRule({ frequency, interval, weekdays, endDate, timezone: activity.timezone });\n activity.recurrence = rule?.toString().replace('RRULE:', '') || null;\n return save(activity, props.redirect);\n }\n\n /* eslint-disable react/jsx-no-useless-fragment */\n return <>\n <SimpleForm\n initialValues={initialValues}\n validate={validate}\n save={onSave}\n decorators={decorators.current}\n toolbar={<Toolbar />}\n {...props}\n >\n <ActivityFormBody />\n </SimpleForm>\n </>\n}\n","import { downloadCSV } from 'react-admin';\nimport moment from 'moment-timezone';\nimport Papa from 'papaparse'\n\nimport { appName } from '../../flags';\n\nconst activitiesExporter = data => {\n const activities = data.map(activity => {\n const timezone = activity.timezone;\n const team = activity.team;\n\n return [\n activity.teamId,\n team?.name,\n team?.HCRId,\n activity.name,\n activity.type,\n activity.location,\n moment.utc(activity.date, 'YYYY-MM-DD').format('YYYY-MM-DD'),\n moment.tz(activity.startTime, timezone).format(\"HH:mm\"),\n moment.tz(activity.endTime, timezone).format(\"HH:mm\"),\n timezone,\n activity.status,\n activity.comments\n ]\n });\n\n const csv = Papa.unparse({\n fields: [\"Team ID\", \"Team Name\", \"Team Registry ID\", \"Name\", \"Type\", \"Location\", \"Date\", \"Start Time\", \"End Time\", \"Timezone\", \"Status\", \"Comments\"],\n data: activities\n });\n downloadCSV(csv, `${appName} - Activities - ${moment().format('YYYYMMDDHHmmss')}`);\n};\n\nactivitiesExporter._include = [\n 'team',\n]\n\nexport default activitiesExporter;\n","import React from 'react';\nimport { useTranslate } from 'react-admin';\nimport { useMediaQuery } from '@material-ui/core';\n\nimport { List, Show, Create, Edit } from '../../common/ra';\nimport { useSeason } from '../../common/inputs/SeasonSelector';\nimport ResourceTitle from '../../common/ResourceTitle';\n\nimport { EventView } from '../events/EventView';\nimport { useEventSort } from '../events/EventViewSettings';\n\nimport { ActivityFilters } from './ActivityFilters';\nimport { ActivityFilterList } from './ActivityFilterList';\nimport { ActivityShowLayout } from './ActivityShow';\nimport { ActivityForm } from './ActivityForm';\nimport ActivitiesExporter from './ActivitiesExporter';\n\nexport const ActivityList = props => {\n const seasonId = useSeason();\n const isSmall = useMediaQuery(theme => theme.breakpoints.down('sm'));\n const sort = useEventSort();\n\n return <List {...props}\n exporter={ActivitiesExporter}\n aside={!isSmall && <ActivityFilterList />}\n filters={isSmall && <ActivityFilters />}\n filterDefaultValues={{ seasonId }}\n sort={sort}\n resetFilters={isSmall}\n >\n <EventView rowClick=\"show\" disableCalendar />\n </List>\n}\n\nconst getTitle = (activity, translate) => {\n const type = translate(`resources.activities.values.type.${activity.type}`, { _: activity.type })\n if (!activity.name?.length) return type;\n return `${type}: ${activity.name}`\n}\n\nexport const ActivityShow = props => {\n const translate = useTranslate();\n return <Show {...props}\n title={<ResourceTitle title={record => getTitle(record, translate)} />}\n >\n <ActivityShowLayout />\n </Show>\n}\n\nexport const ActivityCreate = props => {\n const translate = useTranslate()\n return <Create\n title={<ResourceTitle title={() => translate('resources.activities.labels.add')} />}\n {...props}\n >\n <ActivityForm redirect=\"show\" />\n </Create>\n}\n\nexport const ActivityEdit = props => {\n const translate = useTranslate();\n return <Edit\n title={<ResourceTitle title={record => translate('ra.page.editing', { name: getTitle(record, translate) })} />}\n {...props}\n >\n <ActivityForm redirect=\"show\" />\n </Edit>\n}\n","import React from 'react';\nimport { Datagrid, TextField, useListContext } from 'react-admin';\n\nimport { NameWithStatusesField } from '../../common/fields/NameWithStatusesField';\nimport { CategoryField } from '../categories/CategoryField';\nimport { OfficeField } from '../offices/OfficeField';\n\nexport const TeamGrid = ({ showOffice = false, ...props }) => {\n const { ids = [], data } = useListContext(props);\n\n const teams = ids?.map(id => data?.[id]).filter(Boolean) || [];\n const showIds = teams.some(team => team.HCRId != null)\n\n return <Datagrid size=\"medium\" {...props}>\n <NameWithStatusesField source=\"name\" />\n <CategoryField source=\"categoryId\" />\n {showIds && <TextField source=\"HCRId\" />}\n {showOffice && <OfficeField source=\"officeId\" />}\n </Datagrid>\n}\n","import React from 'react';\nimport { Filter, NullableBooleanInput, TextInput } from 'react-admin';\n\nimport { isAuthorized } from '../../common/Authorize';\nimport { SeasonFilter } from '../../common/inputs/SeasonSelector';\nimport { useScopes } from '../../http';\n\nimport { OfficeInput } from '../offices/OfficeInput';\nimport { CategoryInput } from '../categories/CategoryInput';\n\nconst multipleProps = {\n multiple: true,\n allowEmpty: false,\n}\n\nexport const TeamFilters = props => {\n const scopes = useScopes();\n const canListOffices = isAuthorized(scopes, 'offices', 'show');\n\n return <Filter variant=\"outlined\" {...props}>\n <TextInput source=\"name\" alwaysOn />\n <TextInput source=\"HCRId\" alwaysOn />\n {canListOffices && <OfficeInput source=\"officeId\" {...multipleProps} />}\n <CategoryInput source=\"categoryId\" {...multipleProps} />\n <NullableBooleanInput source=\"isSanctioned\" />\n <SeasonFilter source=\"seasonId\" alwaysOn />\n </Filter>\n}\n","import React from 'react';\nimport { Filter, NullableBooleanInput, TextInput } from 'react-admin';\n\nimport { ResetFiltersButton } from '../../common/ResetFiltersButton';\nimport { SeasonFilter } from '../../common/inputs/SeasonSelector';\nimport { isAuthorized } from '../../common/Authorize';\nimport { FilterCard } from '../../common/cards/FilterCard';\nimport { SavedSearches } from '../../common/SavedSearches';\nimport { useScopes } from '../../http';\n\nimport { OfficeInput } from '../offices/OfficeInput';\nimport { CategoryInput } from '../categories/CategoryInput';\n\n\nconst multipleProps = {\n multiple: true,\n alwaysOn: true,\n fullWidth: true,\n allowEmpty: false,\n}\n\nconst TeamFilters = props => {\n const scopes = useScopes();\n const canListOffices = isAuthorized(scopes, 'offices', 'show');\n\n return <Filter variant=\"outlined\" margin=\"dense\" fullWidth {...props}>\n <TextInput source=\"name\" alwaysOn fullWidth />\n <TextInput source=\"HCRId\" alwaysOn fullWidth />\n {canListOffices && <OfficeInput source=\"officeId\" {...multipleProps} />}\n <CategoryInput source=\"categoryId\" {...multipleProps} />\n <NullableBooleanInput source=\"isSanctioned\" alwaysOn fullWidth />\n <SeasonFilter source=\"seasonId\" alwaysOn fullWidth />\n </Filter>\n}\n\nexport const TeamFilterList = () => {\n return <FilterCard>\n <TeamFilters />\n <ResetFiltersButton />\n\n <SavedSearches ignoredFilters={['seasonId']} />\n </FilterCard>\n}\n","import moment from 'moment-timezone';\nimport { v4 as uuid } from 'uuid';\n\nimport { apiClient } from '../../../http';\n\nexport const today = moment().format('YYYY-MM-DD');\n\nconst toToday = (time, timezone) => {\n const from = moment.tz(time, timezone);\n return moment.tz(today, timezone).set({ hours: from.hours(), minutes: from.minutes(), seconds: from.seconds() }).toISOString();\n}\n\nexport const availabilitiesToSlot = (availabilities, date) =>\n availabilities.filter(slot => slot.date === date)\n .map(slot => ({\n id: uuid(),\n isAvailable: slot.isAvailable,\n startTime: toToday(slot.startTime, slot.timezone),\n endTime: toToday(slot.endTime, slot.timezone),\n timezone: slot.timezone,\n notes: slot.notes,\n updatedat: slot.updatedat,\n }))\n\nconst mergeNotes = (prev, next) => Array.from(new Set([prev, next])).filter(Boolean).join('\\n') || undefined;\n\nexport const updateSlots = (existing = [], slot) => {\n const id = slot.id || uuid();\n\n if (slot.allDay) return [{\n id,\n isAvailable: slot.isAvailable,\n startTime: slot.startTime,\n endTime: slot.endTime,\n timezone: slot.timezone,\n notes: slot.notes || null,\n }]\n\n if (slot.remove) return existing.filter(s => s.id !== slot.id);\n\n let sorted = [...existing];\n slot.changed = true;\n\n if (!slot.id) {\n slot.id = id;\n sorted.push(slot);\n } else {\n sorted = sorted.reduce((slots, next) => {\n // update existing\n slots.push(next.id === id ? slot : next);\n return slots;\n }, [])\n }\n\n if (!sorted.length) return [];\n sorted = sorted.sort((a, b) => {\n const diff = moment.tz(a.startTime, a.timezone).valueOf() - moment.tz(b.startTime, b.timezone).valueOf()\n if (diff !== 0) return diff;\n if (a.changed && !b.changed) return -1;\n if (!a.changed && b.changed) return 1;\n return 0;\n })\n\n let result = [sorted[0]];\n\n for (let i = 1; i < sorted.length; i++) {\n const prev = result[result.length - 1];\n const next = sorted[i];\n if (!next) continue;\n if (!next.changed && !prev.changed) {\n // skip, nothing changed so no need to compare\n result.push(next)\n continue;\n }\n\n if (moment.tz(next.startTime, next.timezone).isAfter(prev.endTime)) {\n // no overlap, append\n result.push(next);\n } else if (prev.isAvailable === next.isAvailable) {\n if (moment.tz(next.endTime, next.timezone).isAfter(prev.endTime)) {\n // extend\n result[result.length - 1].endTime = next.endTime\n result[result.length - 1].notes = mergeNotes(prev.notes, next.notes);\n result[result.length - 1].changed = true\n }\n } else if (moment.tz(next.startTime, next.timezone).isSame(prev.endTime)) {\n // no overlap, add\n result.push(next)\n } else if (moment.tz(next.endTime, next.timezone).isAfter(prev.endTime)) {\n // reduce\n if (prev.changed) {\n next.startTime = prev.endTime;\n next.timezone = prev.timezone;\n next.changed = true;\n } else {\n result[result.length - 1].endTime = next.startTime;\n result[result.length - 1].changed = true;\n }\n result.push(next);\n } else if (prev.changed) {\n // noop\n } else {\n // split\n const split = { ...prev, id: uuid(), changed: true, startTime: next.endTime };\n result[result.length - 1].endTime = next.startTime;\n result[result.length - 1].timezone = next.timezone;\n result[result.length - 1].changed = true;\n result.push(next, split);\n }\n\n // filter cancelled out slots\n result = result.filter(slot => moment.tz(slot.endTime, slot.timezone).diff(slot.startTime, 'minutes') > 5)\n }\n\n // reset changes\n result = result.map(slot => {\n delete slot.changed;\n return slot;\n })\n\n return result;\n}\n\nexport const formatTime = (time, timezone) =>\n timezone ?\n moment.tz(time, timezone).format('h:mm A') :\n moment(time).format('h:mm A');\n\nexport const saveAvailability = (resource, id, dates, slots, timezone, officeId) => {\n const times = slots.map(slot => ({\n isAvailable: slot.isAvailable,\n startTime: slot.startTime,\n endTime: slot.endTime,\n notes: slot.notes || undefined,\n timezone: slot.timezone,\n }))\n\n return apiClient(`/${resource}/${id}/availability`, {\n method: 'PUT',\n data: {\n dates,\n times,\n timezone,\n officeId,\n }\n })\n}\n","import React, { useEffect, useState } from 'react';\nimport { useResourceContext, useTranslate } from 'react-admin';\nimport {\n Dialog,\n DialogTitle,\n DialogContent,\n DialogActions,\n FormControl,\n FormControlLabel,\n FormHelperText,\n Radio,\n RadioGroup,\n Select,\n MenuItem,\n TextField,\n Button,\n makeStyles,\n styled,\n} from '@material-ui/core';\nimport { UnfoldMore } from '@material-ui/icons';\nimport moment from 'moment-timezone';\nimport MaskedInput from 'react-text-mask';\n\nimport { isLocalTimezone } from '@hisports/parsers/src/dateTime';\n\nimport { useRichTranslate } from '../../../common/useRichTranslate';\nimport { timeMask } from '../../../common/inputs/BasicTimeInput';\n\nimport { today } from './util';\n\nconst Content = styled('div')({\n display: 'inline-grid',\n gridGap: 8,\n gridAutoFlow: 'column',\n alignItems: 'baseline',\n})\n\nconst AvailableInput = ({ value, setValue, className, ...props }) => {\n const translate = useTranslate();\n const resource = useResourceContext();\n const handleOpen = e => {\n setValue(value => !value);\n }\n return <FormControl>\n <Select\n value={value}\n open={false}\n onOpen={handleOpen}\n IconComponent={UnfoldMore}\n classes={{ select: className }}\n {...props}\n >\n <MenuItem value={true}>{translate(`resources.participants.messages.availability.${resource === 'participants' ? 'person' : 'thing'}_will`)}</MenuItem>\n <MenuItem value={false}>{translate(`resources.participants.messages.availability.${resource === 'participants' ? 'person' : 'thing'}_will_not`)}</MenuItem>\n </Select>\n </FormControl>\n}\n\nconst DurationInput = ({ value, setValue, timezone, children, ...props }) => {\n const translate = useTranslate();\n const handleChange = e => setValue(e.target.value);\n\n const displayedTimezone = isLocalTimezone(undefined, timezone)\n ? 'resources.games.messages.assignment.time_display_local'\n : 'resources.games.messages.assignment.time_display_other'\n return <FormControl>\n <RadioGroup value={value} onChange={handleChange}>\n <FormControlLabel value=\"all day\" control={<Radio />} label={translate('ra.date.lexical.all_day')} />\n <FormControlLabel value=\"before\" control={<Radio />} label={<Content>{translate('ra.date.lexical.before')} {value === 'before' && children}</Content>} />\n <FormControlLabel value=\"between\" control={<Radio />} label={<Content>{translate('ra.date.lexical.between')} {value === 'between' && children}</Content>} />\n <FormControlLabel value=\"after\" control={<Radio />} label={<Content>{translate('ra.date.lexical.after')} {value === 'after' && children}</Content>} />\n <FormHelperText>\n {translate(displayedTimezone, { timezone: moment.tz(timezone).zoneAbbr() })}\n </FormHelperText>\n </RadioGroup>\n </FormControl>\n}\n\nconst TimeInput = ({ date, value: userValue, timezone, onChange, className, ...props }) => {\n const defaultValue = moment.tz(userValue, timezone).format('HH:mm');\n\n return <MaskedInput\n className={className}\n defaultValue={defaultValue}\n mask={timeMask}\n onChange={(e) => {\n const value = e?.target?.value\n const hour = value?.split(':')[0];\n const minutes = value?.split(':')[1];\n if (isNaN(hour) || isNaN(minutes)) return onChange(null)\n\n const time = moment.tz(date, timezone).set({ hours: hour, minutes }).toISOString();\n onChange(time);\n }}\n render={(ref, props) => (\n <TextField inputRef={ref} style={{ width: 75 }} {...props} />\n )}\n />\n}\n\nconst NotesInput = ({ value, onChange }) => {\n const translate = useTranslate();\n const resource = useResourceContext();\n const handleChange = e => onChange(e.target.value);\n return <TextField\n value={value}\n onChange={handleChange}\n label={translate(`resources.${resource}.labels.availability.note`)}\n helperText={translate(`resources.${resource}.helpers.availability.note`)}\n variant=\"outlined\"\n fullWidth\n multiline\n rows={2}\n rowsMax={4}\n />\n}\n\nconst getDuration = (startTime, endTime, timezone) => {\n const dayStart = moment.tz(today, timezone).startOf('day')\n const dayEnd = moment.tz(today, timezone).endOf('day')\n\n const isStart = moment.tz(startTime, timezone).isSame(dayStart, 'minute');\n const isEnd = moment.tz(endTime, timezone).isSame(dayEnd, 'minute');\n\n if (isStart && isEnd) return 'all day';\n if (isStart && !isEnd) return 'before';\n if (!isStart && isEnd) return 'after';\n return 'between';\n}\n\nconst useStyles = makeStyles(theme => ({\n available: {\n fontWeight: 500,\n },\n duration: {\n margin: theme.spacing(1, 2, 3)\n },\n removeButton: {\n position: 'absolute',\n left: theme.spacing(1),\n color: theme.palette.error.dark,\n }\n}))\n\n\nexport default ({ slot, timezone, onClose }) => {\n const translate = useRichTranslate();\n const resource = useResourceContext();\n const classes = useStyles();\n\n const defaultStart = slot?.startTime ?? moment.tz(today, timezone).set({ hours: 9, minutes: 0 }).toISOString()\n const defaultEnd = slot?.endTime ?? moment.tz(today, timezone).set({ hours: 18, minutes: 0 }).toISOString()\n\n const defaultAvailable = resource === 'participants';\n const disabled = resource == 'teams' || resource == 'surfaces';\n const [ isAvailable, setAvailable ] = useState(slot?.isAvailable ?? defaultAvailable);\n const [ startTime, setStart ] = useState(defaultStart)\n const [ endTime, setEnd ] = useState(defaultEnd)\n const [ duration, setDuration ] = useState(getDuration(startTime, endTime, timezone));\n const [ notes, setNotes ] = useState(slot?.notes ?? null);\n\n const showStart = ['between', 'after'].includes(duration);\n const showTo = duration === 'between';\n const showEnd = ['between', 'before'].includes(duration);\n\n const effectiveStartTime = showStart ? startTime : moment.tz(today, timezone).startOf('day').toISOString()\n const effectiveEndTime = showEnd ? endTime : moment.tz(today, timezone).endOf('day').toISOString()\n\n const isUpdate = slot?.id != null\n const isValid = moment.tz(effectiveStartTime, timezone).isBefore(effectiveEndTime);\n\n useEffect(() => {\n const dayStart = moment.tz(today, timezone).startOf('day')\n const dayEnd = moment.tz(today, timezone).endOf('day')\n\n const isStart = moment.tz(startTime, timezone).isSame(dayStart, 'minute');\n const isEnd = moment.tz(endTime, timezone).isSame(dayEnd, 'minute');\n\n if (isStart) {\n setStart(defaultStart)\n } else if (isEnd) {\n setEnd(defaultEnd)\n }\n }, [ startTime, endTime, timezone, defaultStart, defaultEnd ])\n\n const onAdd = () => {\n onClose({\n id: slot?.id ?? null,\n allDay: duration === 'all day',\n isAvailable,\n startTime: effectiveStartTime,\n endTime: effectiveEndTime,\n timezone,\n notes,\n });\n }\n\n const onRemove = () => {\n onClose({\n id: slot.id,\n remove: true,\n })\n }\n\n return <Dialog open onClose={() => onClose()} maxWidth=\"sm\" fullWidth>\n <DialogTitle>{!isUpdate ? translate('ra.action.add') : translate('ra.action.update')} {translate('ra.date.time')}</DialogTitle>\n <DialogContent>\n <div>\n <Content>\n {translate(`resources.${resource}.messages.availability.available`, { input: <AvailableInput value={isAvailable} setValue={setAvailable} className={classes.available} disabled={disabled} /> })}\n </Content>\n </div>\n\n <div className={classes.duration}>\n <DurationInput value={duration} setValue={setDuration} timezone={timezone}>\n {showStart && <TimeInput date={today} value={startTime} timezone={timezone} onChange={setStart} />}\n {showTo && ` ${translate('resources.participants.messages.availability.to')} `}\n {showEnd && <TimeInput date={today} value={endTime} timezone={timezone} onChange={setEnd} />}\n </DurationInput>\n </div>\n\n <NotesInput value={notes} onChange={setNotes} />\n </DialogContent>\n <DialogActions>\n {isUpdate && <Button onClick={onRemove} color=\"secondary\" className={classes.removeButton}>{translate('ra.action.remove')}</Button>}\n <Button onClick={() => onClose()}>{translate('ra.action.cancel')}</Button>\n <Button onClick={onAdd} color=\"primary\" disabled={!isValid}>{!isUpdate ? translate('ra.action.add') : translate('ra.action.update')}</Button>\n </DialogActions>\n </Dialog>\n}\n","import React, { useState, useEffect } from 'react'\nimport { useLocale, useResourceContext, useTranslate } from 'react-admin';\nimport { Button, makeStyles } from '@material-ui/core'\nimport { Add, Check, Clear, Edit } from '@material-ui/icons'\nimport moment from 'moment-timezone';\nimport cn from 'classnames';\n\nimport { isLocalTimezone } from '@hisports/parsers/src/dateTime';\n\nimport { getDateFormat } from '../../../common/fields/DateField';\n\nimport SlotModal from './SlotModal';\nimport { formatTime, updateSlots, availabilitiesToSlot } from './util'\n\nconst getSize = slot => {\n if (!slot) return;\n const diff = moment(slot.endTime).diff(slot.startTime);\n const hours = moment.duration(diff).asHours();\n\n const minutes = hours * 60;\n return Math.max(6, Math.min(minutes / 15, 16)) * 8\n}\n\nconst stripes = (r, g, b) => `repeating-linear-gradient(\n -55deg,\n rgba(${r}, ${g}, ${b}, .125),\n rgba(${r}, ${g}, ${b}, .125) 8px,\n rgba(${r}, ${g}, ${b}, .15) 8px,\n rgba(${r}, ${g}, ${b}, .15) 16px\n)`\n\nconst useSlotStyles = makeStyles(theme => ({\n root: {\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n justifyContent: 'center',\n cursor: 'default',\n },\n placeholder: {\n padding: theme.spacing(0, 1),\n height: '100%',\n textAlign: 'center',\n background: stripes(222, 222, 222),\n [theme.breakpoints.down('sm')]: {\n padding: theme.spacing(2),\n }\n },\n edit: {\n position: 'absolute',\n top: theme.spacing(1),\n right: theme.spacing(1),\n color: theme.palette.text.disabled,\n },\n empty: {\n padding: theme.spacing(3),\n background: stripes(189, 189, 189),\n textAlign: 'center',\n },\n time: {\n marginTop: theme.spacing(1),\n minHeight: '4em',\n position: 'relative',\n height: props => getSize(props.slot),\n cursor: props => props.editable ? 'pointer' : 'default',\n },\n available: {\n backgroundColor: 'rgba(76, 175, 80, .25)',\n },\n unavailable: {\n backgroundColor: 'rgba(211, 47, 47, .15)',\n },\n notes: {\n fontStyle: 'italic',\n whiteSpace: 'nowrap',\n textOverflow: 'ellipsis',\n overflow: 'hidden',\n width: `calc(100% - ${theme.spacing(2)}px)`,\n textAlign: 'center',\n },\n updatedat: {\n fontStyle: 'italic',\n whiteSpace: 'nowrap',\n textOverflow: 'ellipsis',\n overflow: 'hidden',\n textAlign: 'center',\n fontSize: \"60%\"\n }\n}))\n\nconst Placeholder = ({ loading }) => {\n const translate = useTranslate();\n const classes = useSlotStyles({});\n const __html = translate(loading ? 'ra.page.loading' : 'resources.participants.messages.availability.placeholder')\n return <div\n className={cn(classes.root, classes.placeholder)}\n dangerouslySetInnerHTML={{ __html }}\n >\n </div>\n}\n\nconst EmptySlot = ({ onClick }) => {\n const translate = useTranslate();\n const classes = useSlotStyles({});\n return <div className={cn(classes.root, classes.empty)} onClick={onClick}>\n {translate('resources.participants.messages.availability.empty_slot')}\n </div>\n}\n\nconst Slot = ({ slot, onClick, editable }) => {\n const classes = useSlotStyles({ slot, editable });\n const availableClass = slot.isAvailable ? classes.available : classes.unavailable;\n const translate = useTranslate();\n\n return <div className={cn(classes.root, classes.time, availableClass)} onClick={editable ? () => onClick(slot) : null}>\n {editable && <div className={classes.edit}>\n <Edit fontSize=\"small\" />\n </div>}\n {slot.isAvailable ? <Check /> : <Clear />}\n { formatTime(slot.startTime, slot.timezone) } - { formatTime(slot.endTime, slot.timezone)}\n { slot.notes && <div className={classes.notes}>{slot.notes}</div>}\n { slot.updatedat && <div className={classes.updatedat}>{translate('ra.message.updated')}: {moment.tz(slot.updatedat, slot.timezone).format('LLLL')}</div>}\n </div>\n}\n\nconst usePanelStyles = makeStyles(theme => ({\n root: {\n display: 'flex',\n flexDirection: 'column',\n padding: theme.spacing(1),\n height: `calc(100% - ${theme.spacing(2)}px)`,\n },\n title: {\n fontWeight: 500,\n fontSize: '0.875rem',\n lineHeight: '1.5rem',\n },\n spacer: {\n flex: 1,\n minHeight: theme.spacing(3),\n },\n timezone: {\n fontSize: '0.875rem',\n textAlign: 'center',\n color: theme.palette.text.secondary,\n marginBottom: theme.spacing(1),\n }\n}))\n\nconst SaveButton = ({ selection, dirty, saving, ...props }) => {\n const locale = useLocale();\n const translate = useTranslate();\n\n let saveLabel = translate('resources.participants.labels.availability.saved');\n if (saving) {\n saveLabel = translate('resources.participants.labels.availability.saving')\n } else if (dirty) {\n saveLabel = translate('resources.participants.messages.availability.save_for');\n if (selection.length === 1) {\n const dateFormat = getDateFormat(locale)\n saveLabel += moment.utc(selection[0]).format(dateFormat)\n } else {\n saveLabel += translate('resources.participants.messages.availability.number_dates', { number: selection.length })\n }\n }\n\n const variant = dirty ? 'contained' : 'text';\n return <Button\n color=\"primary\"\n startIcon={<Check />}\n variant={variant}\n disabled={!dirty || saving}\n {...props}\n >\n {saveLabel}\n </Button>\n}\n\nexport default ({ availabilities = [], selection = [], clearSelection, timezone: defaultTimezone = moment.tz.guess(), onSave, saving, loading, editable }) => {\n const translate = useTranslate();\n const classes = usePanelStyles();\n const resource = useResourceContext();\n\n const [ timezone, setTimezone ] = useState(defaultTimezone);\n const [ date, setDate ] = useState(null);\n const [ open, setOpen ] = useState(false);\n const [ selected, setSelected ] = useState(null);\n const [ slots, setSlots ] = useState([]);\n const [ dirty, setDirty ] = useState(false);\n\n useEffect(() => {\n if (!selection.length) {\n setDate(null);\n setSlots([]);\n setDirty(false);\n setTimezone(defaultTimezone)\n return;\n }\n const selectionDate = selection[0];\n if (selectionDate === date) {\n if (selection.length > 1) setDirty(true)\n return;\n };\n\n setDate(selectionDate);\n const slots = availabilitiesToSlot(availabilities, selectionDate);\n setSlots(slots);\n if (slots.length) {\n setTimezone(slots[0].timezone)\n } else {\n setTimezone(defaultTimezone)\n }\n }, [ date, selection, availabilities, defaultTimezone ])\n\n const openSlot = slot => {\n setSelected(slot);\n setOpen(true);\n }\n\n const onAdd = slot => {\n setOpen(false);\n if (!slot) return;\n setDirty(true)\n setSlots(existing => updateSlots(existing, slot))\n }\n\n if (loading || !selection.length) return <Placeholder loading={loading} />\n\n const displayedTimezone = isLocalTimezone(undefined, timezone)\n ? 'resources.games.messages.assignment.time_display_local'\n : 'resources.games.messages.assignment.time_display_other'\n return <div className={classes.root}>\n <div className={classes.title}>\n {translate(`resources.${resource}.labels.availability.title`)}\n </div>\n\n {!slots.length && <EmptySlot onClick={() => editable && openSlot(null)} />}\n {slots.map(slot => <Slot key={slot.id} slot={slot} onClick={openSlot} editable={editable} />)}\n\n {editable && <Button color=\"primary\" startIcon={<Add />} onClick={() => openSlot(null)}>\n {translate('resources.participants.labels.availability.add_time')}\n </Button>}\n\n <div className={classes.spacer}></div>\n <div className={classes.timezone}>{translate(displayedTimezone, { timezone: moment.tz(timezone).zoneAbbr() })}</div>\n {editable && <SaveButton selection={selection} dirty={dirty} saving={saving} onClick={() => onSave(slots, timezone)} />}\n\n {open && <SlotModal slot={selected} timezone={timezone} onClose={onAdd} />}\n </div>\n}\n","import React from 'react';\nimport { useTranslate } from 'react-admin';\nimport { Table, TableHead, TableBody, TableRow, TableCell, Button, useMediaQuery } from '@material-ui/core';\nimport { makeStyles } from '@material-ui/styles';\nimport { Clear, Check } from '@material-ui/icons';\nimport moment from 'moment-timezone';\n\nimport { isLocalTimezone } from '@hisports/parsers/src/dateTime';\n\nconst duration = ({ startTime, endTime }) => {\n const diff = moment(endTime).diff(startTime);\n return moment.duration(diff).asHours();\n}\n\nconst totalDuration = slots =>\n slots.reduce((total, slot) => total + duration(slot), 0)\n\nconst isAllDay = slots => {\n if (!slots.length) return false;\n const hours = totalDuration(slots);\n return hours > 22;\n}\n\nconst getBackgroundColor = ({ selected, available, unavailable }, theme) => {\n if (selected) return theme.palette.primary.light;\n if (available) return theme.palette.common.white;\n if (unavailable) return theme.palette.grey[300];\n return theme.palette.grey[100];\n}\n\nconst getIconColor = ({ selected, available, unavailable }, theme) => {\n if (selected) return theme.palette.common.black;\n if (available) return theme.palette.success.main;\n if (unavailable) return theme.palette.error.main;\n return theme.palette.grey[400];\n}\n\nconst useDayStyles = makeStyles(theme => ({\n root: {\n position: 'relative',\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n justifyContent: 'center',\n textAlign: 'center',\n height: theme.spacing(10),\n backgroundColor: props => getBackgroundColor(props, theme),\n color: theme.palette.common.black,\n cursor: 'pointer',\n },\n day: {\n position: 'absolute',\n top: theme.spacing(1),\n left: theme.spacing(1),\n fontWeight: props => props.today ? 'bold' : undefined,\n color: props => props.past ? theme.palette.text.disabled : undefined,\n userSelect: 'none',\n [theme.breakpoints.down('sm')]: {\n fontSize: '.75rem',\n },\n },\n icon: {\n color: props => getIconColor(props, theme),\n [theme.breakpoints.down('sm')]: {\n display: 'none',\n }\n },\n time: {\n position: 'absolute',\n top: theme.spacing(3.5),\n lineHeight: '1em',\n [theme.breakpoints.down('sm')]: {\n lineHeight: '.9em',\n fontSize: '.9em',\n },\n },\n info: {\n color: theme.palette.text.secondary,\n fontSize: '.65rem',\n [theme.breakpoints.down('sm')]: {\n lineHeight: '.5rem',\n fontSize: '.5rem',\n },\n },\n}))\n\nconst useSlotStyles = makeStyles(theme => ({\n root: {\n width: '.75em',\n height: '.75em',\n fontSize: '1.25em',\n },\n available: {\n color: theme.palette.success.main,\n },\n unavailable: {\n color: theme.palette.error.main,\n }\n}))\n\nconst SlotTime = ({ slot, showRange }) => {\n const classes = useSlotStyles();\n const { startTime, endTime, timezone, isAvailable } = slot;\n const icon = isAvailable ? <Check className={`${classes.root} ${classes.available}`} /> : <Clear className={`${classes.root} ${classes.unavailable}`} />\n\n const start = moment.tz(startTime, timezone).format('HH:mm')\n const end = moment.tz(endTime, timezone).format('HH:mm')\n const range = `${start} - ${end}`\n return <div>{icon} {showRange ? range : start}</div>\n}\n\nconst AllDay = ({ available, unavailable, classes }) => {\n const translate = useTranslate();\n return <>\n {available ? <Check className={classes.icon} />\n : unavailable ? <Clear className={classes.icon} />\n : null}\n {translate('ra.date.lexical.all_day')}\n </>\n}\n\nconst Availability = ({ slots, available, unavailable, timezone, classes }) => {\n const translate = useTranslate();\n const showRange = useMediaQuery(theme => theme.breakpoints.up('sm'));\n if (!slots.length) return null;\n\n if (isAllDay(slots)) return <AllDay available={available} unavailable={unavailable} classes={classes} />;\n\n const timeslots = slots.slice(0, 2).map(slot => <SlotTime slot={slot} showRange={showRange} />);\n const offset = !isLocalTimezone(slots[0].startTime, slots[0].timezone, timezone);\n\n const info = []\n if (slots.length > 2) info.push(translate('resources.availabilities.labels.more', { smart_count: slots.length - 2 }))\n if (offset) info.push(moment.tz(slots[0].startTime, slots[0].timezone).format('z'))\n\n return <div className={classes.time}>\n {timeslots}\n {info.length ? <div className={classes.info}>{info.join(' / ')}</div> : null}\n </div>\n}\n\nconst Day = ({ date, availabilities, selection, timezone, toggleSelection }) => {\n const selected = selection.includes(date);\n const onClick = event => toggleSelection(date, event.shiftKey, event.ctrlKey);\n\n const past = moment.tz(date, timezone).isBefore(undefined, 'day');\n const today = moment.tz(date, timezone).isSame(undefined, 'day');\n const day = moment.tz(date, timezone).date();\n\n const slots = availabilities.filter(availability => availability.date === date);\n const available = slots.some(slot => slot.isAvailable === true);\n const unavailable = slots.some(slot => slot.isAvailable === false)\n\n const classes = useDayStyles({ date, selected, available, unavailable, past, today })\n return <div className={classes.root} onClick={onClick}>\n <div className={classes.day}>\n {day}\n </div>\n <Availability date={date} slots={slots} available={available} unavailable={unavailable} timezone={timezone} classes={classes} />\n </div>\n}\n\nconst Week = ({ dates, availabilities, selection, timezone, toggleSelection }) => {\n return <TableRow>\n {dates.map(date => <TableCell key={date} padding=\"none\">\n <Day date={date} availabilities={availabilities} selection={selection} timezone={timezone} toggleSelection={toggleSelection} />\n </TableCell>)}\n </TableRow>\n}\n\nconst useMonthStyles = makeStyles(theme => ({\n root: {\n tableLayout: 'fixed',\n }\n}))\n\nconst PrevMonth = ({ date, timezone, setMonth }) => {\n const month = moment.tz(date, timezone).add(-1, 'months');\n const limit = moment.tz(timezone).add(-1, 'months')\n const enabled = month.isSameOrAfter(limit, 'month');\n const onClick = () => {\n if (!enabled) return;\n setMonth(-1);\n }\n const label = enabled ? `← ${month.format('MMMM YYYY')}` : ''\n return <TableCell colSpan={2} onClick={onClick}>\n <Button size=\"small\">{label}</Button>\n </TableCell>\n}\n\nconst NextMonth = ({ date, timezone, setMonth }) => {\n const month = moment.tz(date, timezone).add(1, 'months');\n const limit = moment.tz(timezone).add(4, 'months').endOf('year');\n const enabled = month.isSameOrBefore(limit, 'month');\n const onClick = () => {\n if (!enabled) return;\n setMonth(1)\n }\n const label = enabled ? `${month.format('MMMM YYYY')} →` : ''\n return <TableCell colSpan={2} onClick={onClick} align=\"right\">\n <Button size=\"small\">{label}</Button>\n </TableCell>\n}\n\nconst Month = ({ date, dates, availabilities, timezone, selection, toggleSelection, setMonth }) => {\n const classes = useMonthStyles();\n const totalWeeks = dates.length / 7;\n\n const weeks = [];\n for (let week = 0; week < totalWeeks; week++) {\n const weekDates = dates.slice(week * 7, (week + 1) * 7);\n weeks.push(<Week key={week} dates={weekDates} availabilities={availabilities} timezone={timezone} selection={selection} toggleSelection={toggleSelection} />)\n }\n\n return <Table size=\"small\" className={classes.root}>\n <TableHead>\n <TableRow>\n <PrevMonth date={date} setMonth={setMonth} />\n <TableCell colSpan={3} align=\"center\">\n {moment.tz(date, timezone).format('MMMM YYYY')}\n </TableCell>\n <NextMonth date={date} setMonth={setMonth} />\n </TableRow>\n <TableRow>\n {dates.slice(0, 7).map(date => <TableCell align=\"center\">{moment.tz(date, timezone).format('ddd')}</TableCell>)}\n </TableRow>\n </TableHead>\n <TableBody>\n {weeks}\n </TableBody>\n </Table>\n}\n\nexport default ({ date, dates, availabilities, timezone, selection, toggleSelection, setMonth }) => {\n return <Month date={date} dates={dates} availabilities={availabilities} timezone={timezone} selection={selection} toggleSelection={toggleSelection} setMonth={setMonth} />\n}\n","import React from 'react';\nimport { useTranslate } from 'react-admin';\nimport { ButtonGroup, Button, makeStyles } from '@material-ui/core';\n\nconst useStyles = makeStyles(theme => ({\n root: {\n display: 'flex',\n padding: theme.spacing(1, 2),\n },\n spacer: {\n flex: 1,\n }\n}))\n\nconst SelectionSummary = ({ bulkSelect, toggleBulkSelect, selection, clearSelection }) => {\n const translate = useTranslate();\n return <ButtonGroup size=\"small\" disableElevation>\n <Button variant={!bulkSelect && 'contained'} onClick={() => toggleBulkSelect()}>{translate('ra.date.day', 1)}</Button>\n <Button variant={bulkSelect && 'contained'} onClick={() => toggleBulkSelect()}>{translate('resources.participants.labels.availability.multiple')}</Button>\n <Button disabled={!selection.length} onClick={clearSelection}>{translate('ra.action.clear')}</Button>\n </ButtonGroup>\n}\n\nexport default ({ bulkSelect, toggleBulkSelect, selection, clearSelection, settings: Settings }) => {\n const classes = useStyles()\n return <div className={classes.root}>\n <SelectionSummary bulkSelect={bulkSelect} toggleBulkSelect={toggleBulkSelect} selection={selection} clearSelection={clearSelection} />\n <div className={classes.spacer}></div>\n {Settings && <Settings />}\n </div>\n}\n","import React, { useState } from 'react';\nimport { useQueryWithStore, useRefresh, useNotify, GET_MANY_REFERENCE, useRecordContext, useResourceContext, useGetOne } from 'react-admin';\nimport { Grid, makeStyles } from '@material-ui/core';\nimport { EventAvailable } from '@material-ui/icons';\nimport moment from 'moment-timezone';\n\nimport { dedupe } from '@hisports/parsers';\n\nimport OfficeSelector, { useOffice } from '../../../common/inputs/OfficeSelector';\nimport InfoCard from '../../../common/cards/InfoCard';\n\nimport AvailabilityPanel from './AvailabilityPanel';\nimport AvailabilityCalendar from './AvailabilityCalendar';\nimport AvailabilityToolbar from './AvailabilityToolbar';\nimport { saveAvailability } from './util';\n\nconst getDates = (startDate, timezone) => {\n const calendarStart = moment.tz(startDate, timezone).startOf('month').day(0).startOf('day')\n const calendarEnd = moment.tz(startDate, timezone).endOf('month').day(6).endOf('day')\n\n const date = moment.tz(calendarStart, timezone);\n const dates = [];\n do {\n dates.push(date.format('YYYY-MM-DD'))\n date.add(1, 'day');\n } while (date.isBefore(calendarEnd));\n return dates;\n}\n\nconst useAvailabilities = (target, dates, id, officeId, enabled) => {\n const { data = [], loading, error } = useQueryWithStore({\n type: GET_MANY_REFERENCE,\n resource: 'availabilities',\n payload: {\n target,\n id,\n pagination: { page: 0, perPage: 9999 },\n sort: { field: 'startTime', order: 'ASC' },\n filter: {\n officeId,\n effectiveOffices: false,\n date: { inq: dates }\n },\n }\n }, { enabled, action: 'CUSTOM_QUERY' })\n\n return [ data, loading, error ]\n}\n\nconst useTimezone = (resource, officeId, recordId) => {\n const tzResource = resource === 'surfaces' ? 'surfaces' : 'offices';\n const id = resource === 'surfaces' ? recordId : officeId;\n const { data } = useGetOne(tzResource, id, { enabled: id != null })\n return data?.timezone || moment.tz.guess();\n}\n\nconst useStyles = makeStyles(theme => ({\n root: {\n [theme.breakpoints.down('sm')]: {\n flexDirection: 'column',\n }\n },\n disabled: {\n opacity: 0.3,\n pointerEvents: 'none',\n }\n}))\n\nconst AvailabilityCard = ({ settings, editable, officeIds, ...props }) => {\n const classes = useStyles();\n const refresh = useRefresh();\n const notify = useNotify();\n const record = useRecordContext(props);\n const resource = useResourceContext(props);\n const selectedOfficeId = useOffice();\n\n let officeId = null, requiresOffice = false, availabilityResource = resource;\n switch (resource) {\n case 'participants': break;\n\n case 'offices':\n case 'leagues': {\n officeId = record.id;\n availabilityResource = 'offices';\n break;\n }\n case 'teams': {\n officeId = record.officeId;\n break;\n }\n case 'surfaces':\n default: {\n requiresOffice = true;\n officeId = selectedOfficeId;\n break;\n }\n }\n\n const timezone = useTimezone(resource, officeId, record?.id);\n\n const [ saving, setSaving ] = useState(false);\n const [ date, setDate ] = useState(moment.tz(timezone).toISOString());\n const dates = getDates(date, timezone);\n const setMonth = months => {\n setDate(moment.tz(date, timezone).add(months, 'months').toISOString())\n }\n\n const missingOffice = editable && requiresOffice && officeId == null\n const [ availabilities, loading, error ] = useAvailabilities(availabilityResource, dates, record.id, officeId, !missingOffice);\n const [ selection, setSelection ] = useState([]);\n const [ bulkSelect, setBulkSelect ] = useState(false);\n const toggleBulkSelect = () => {\n setBulkSelect(!bulkSelect);\n if (bulkSelect && selection.length > 1) {\n setSelection([selection[0]])\n }\n }\n\n const disableCalendar = loading || error || missingOffice;\n\n const toggleSelection = (date, selectMultiple, selectWeekday) => setSelection(selection => {\n if (selectMultiple && selection.length) {\n const shiftSelection = [];\n const lastSelected = selection[selection.length - 1];\n const startDate = lastSelected < date ? moment(lastSelected) : moment(date);\n const endDate = lastSelected < date ? moment(date) : moment(lastSelected);\n\n while (startDate <= endDate) {\n if (!selectWeekday || moment(lastSelected).format('ddd') === startDate.format('ddd')) {\n shiftSelection.push(startDate.format('YYYY-MM-DD'));\n }\n startDate.add(1, 'days');\n }\n return dedupe([...selection, ...shiftSelection]);\n }\n if (selection.includes(date)) {\n if (!bulkSelect) return [];\n return selection.filter(select => select !== date);\n }\n if (!bulkSelect) return [date];\n return [...selection, date];\n })\n const clearSelection = () => setSelection([])\n\n const onSave = (slots, timezone) => {\n setSaving(true)\n saveAvailability(availabilityResource, record.id, selection, slots, timezone, officeId)\n .then(() => {\n notify(`resources.${resource}.labels.availability.updated`, 'info');\n clearSelection();\n refresh();\n }).catch(() => {\n notify('ra.page.error_try_again', 'error');\n }).finally(() => {\n setSaving(false)\n })\n }\n\n const officeFilter = officeIds?.length > 0 ? { id: { inq: officeIds } } : {}\n return <Grid container className={classes.root}>\n {requiresOffice &&\n <Grid item xs={12} sm={12} md={9}>\n <OfficeSelector filter={{ ...officeFilter, effectiveSurfaces: true }} disabled={officeIds && !officeIds?.length} />\n </Grid>\n }\n <Grid item xs={12} sm={12} md={9} className={disableCalendar && classes.disabled}>\n <AvailabilityCalendar\n date={date}\n dates={dates}\n availabilities={!disableCalendar ? availabilities : []}\n timezone={timezone}\n selection={selection}\n toggleSelection={toggleSelection}\n setMonth={setMonth}\n />\n {editable &&\n <AvailabilityToolbar\n bulkSelect={bulkSelect}\n toggleBulkSelect={toggleBulkSelect}\n selection={selection}\n clearSelection={clearSelection}\n settings={settings}\n />\n }\n </Grid>\n <Grid item xs={12} sm={12} md={3} className={disableCalendar && classes.disabled}>\n <AvailabilityPanel\n availabilities={availabilities}\n selection={selection}\n clearSelection={clearSelection}\n timezone={timezone}\n onSave={onSave}\n saving={saving}\n loading={loading}\n editable={editable}\n />\n </Grid>\n </Grid>\n}\n\nexport default ({ icon, collapsable, editable, officeIds, ...props }) => {\n const resource = useResourceContext();\n return <InfoCard\n title={`resources.${resource}.labels.availability.card.title`}\n subtitle={`resources.${resource}.labels.availability.card.subtitle`}\n icon={<EventAvailable />}\n collapsable={collapsable}\n >\n <AvailabilityCard editable={editable} officeIds={officeIds} {...props} />\n </InfoCard>\n}\n","import React from 'react';\nimport { useRecordContext, useResourceContext, useTranslate } from 'react-admin';\nimport { Button } from '@material-ui/core';\nimport { Launch } from '@material-ui/icons';\n\nimport { useTenant } from '../http';\n\nexport default props => {\n const translate = useTranslate();\n const tenant = useTenant();\n const { externalId } = useRecordContext(props);\n const resource = useResourceContext(props);\n\n if (!externalId || !tenant?.registryUrl) return null;\n\n let url;\n switch (resource) {\n case 'teams':\n url = `${tenant.registryUrl}/teams/profile/${externalId}/roster`;\n break;\n case 'participants':\n url = `${tenant.registryUrl}/members/profile/${externalId}/overview`;\n break;\n default:\n break;\n }\n\n if (!url) return null;\n return <Button href={url} target=\"_blank\" rel=\"noreferrer\" color=\"primary\" startIcon={<Launch />}>\n {translate('ra.action.open_in_id')}\n </Button>\n}\n","import React from 'react';\nimport { TextField, ImageField, EditButton, useRecordContext } from 'react-admin';\nimport { Table, TableBody } from '@material-ui/core';\n\nimport Row from '../../../common/cards/TableRow';\nimport { isAuthorized } from '../../../common/Authorize';\nimport InfoCard from '../../../common/cards/InfoCard';\nimport RegistryLink from '../../../common/RegistryLink';\n\nimport { CategoryField } from '../../categories/CategoryField';\nimport { OfficeField } from '../../offices/OfficeField';\nimport { SeasonField } from '../../seasons/SeasonField';\n\nexport default props => {\n const team = useRecordContext(props);\n\n const canEditTeam = isAuthorized(team, 'teams', 'edit')\n return <InfoCard\n title=\"resources.teams.name\"\n actions={[\n canEditTeam && <EditButton label=\"resources.teams.actions.edit\" record={team} />,\n <RegistryLink />\n ]}\n >\n <Table>\n <TableBody>\n <Row hidden={!team?.logo}>\n <ImageField source=\"logo.url\" label=\"Logo\" />\n </Row>\n <Row label=\"resources.teams.fields.HCRId\" hidden={!team?.HCRId}>\n <TextField source=\"HCRId\" />\n </Row>\n <Row label=\"resources.teams.fields.seasonId\">\n <SeasonField source=\"seasonId\" />\n </Row>\n <Row label=\"resources.teams.fields.categoryId\">\n <CategoryField source=\"categoryId\" includeGender=\"full\" />\n </Row>\n {isAuthorized(team, \"offices\", \"show\") &&\n <Row label=\"resources.teams.fields.officeId\">\n <OfficeField source=\"officeId\" includeType=\"full\" />\n </Row>}\n </TableBody>\n </Table>\n </InfoCard>\n}\n","import React from 'react';\nimport { NumberInput, SimpleForm } from 'react-admin';\nimport { useFormState } from 'react-final-form'\n\nimport { isAuthorized } from '../../common/Authorize';\nimport Toolbar from '../../common/ra/Toolbar';\nimport { MemberPositionsEnumInput, PlayerPositionsEnumInput } from '../../common/inputs/EnumInputs';\nimport SwitchInput from '../../common/inputs/SwitchInput';\nimport { SyncAlert, useRecordSynced } from '../../common/SyncAlert';\nimport { useScopes } from '../../http';\n\nimport { ParticipantInput } from '../participants/ParticipantInput';\n\nconst players = ['F', 'C', 'D', 'G']\nconst isPlayer = positions => positions && positions.some(position => players.includes(position))\nconst validate = values => {\n const errors = {};\n\n if (!values.participantId) errors.participantId = 'ra.validation.required'\n if (!values.teamId) errors.teamId = 'ra.validation.required'\n if (!values.positions || !values.positions.length) errors.positions = 'ra.validation.required'\n\n const number = Number(values.number);\n if (isPlayer(values.positions)) {\n if (values.number == null) {\n errors.number = 'resources.members.validations.must_have_number';\n } else if (isNaN(number) || number < 0) {\n errors.number = 'ra.validation.invalid_number';\n }\n if (values.isOverage && values.isUnderage) {\n errors.isOverage = 'ra.validation.invalid';\n errors.isUnderage = 'ra.validation.invalid';\n }\n }\n\n return errors;\n}\n\nconst PlayerNumberInput = ({ children, ...props }) => {\n const { values } = useFormState();\n\n if (!isPlayer(values.positions)) return null;\n return <NumberInput {...props} />\n}\n\nconst PlayerBooleanInput = ({ children, ...props }) => {\n const { values } = useFormState();\n\n if (!isPlayer(values.positions)) return null;\n return <SwitchInput {...props} />\n}\n\nconst inputProps = {\n variant: 'outlined',\n margin: 'normal',\n fullWidth: true,\n}\n\nconst PositionsEnumInput = ({ canChangeStatus, disabled, ...props }) => {\n const { initialValues } = useFormState();\n const isPlayer = initialValues && initialValues.id && initialValues.positions.every(position => ['F', 'C', 'D', 'G'].includes(position));\n\n if (isPlayer && !canChangeStatus) return <PlayerPositionsEnumInput disabled={disabled} {...props} />\n return <MemberPositionsEnumInput {...props} disabled={disabled || !(canChangeStatus || isPlayer)} />\n}\n\nexport const MemberForm = props => {\n const scopes = useScopes();\n const canChangeStatus = isAuthorized(props.initialValues?.id ? props.initialValues : scopes, 'members', 'status')\n const [ isSynced, toggle ] = useRecordSynced(props);\n\n return <>\n <SyncAlert isSynced={isSynced} toggle={toggle} />\n <SimpleForm resource=\"members\" toolbar={<Toolbar isSynced={isSynced} />} validate={validate} {...props}>\n <ParticipantInput source=\"participantId\" filter={{ _scope: 'Tenant' }} disabled={props.initialValues?.id || props.initialValues?.participantId || isSynced} {...inputProps} />\n <PositionsEnumInput source=\"positions\" canChangeStatus={canChangeStatus} disabled={isSynced} {...inputProps} />\n <PlayerNumberInput source=\"number\" {...inputProps} />\n <PlayerBooleanInput source=\"isCaptain\" helperText=\"resources.members.helpers.isCaptain\" {...inputProps} />\n <PlayerBooleanInput source=\"isAlternate\" helperText=\"resources.members.helpers.isAlternate\" {...inputProps} />\n {canChangeStatus && <PlayerBooleanInput source=\"isAffiliate\" disabled={isSynced} {...inputProps} />}\n {canChangeStatus && <PlayerBooleanInput source=\"isOverage\" disabled={isSynced} {...inputProps} />}\n {canChangeStatus && <PlayerBooleanInput source=\"isUnderage\" disabled={isSynced} {...inputProps} />}\n {canChangeStatus && <SwitchInput source=\"isReleased\" disabled={isSynced} {...inputProps} />}\n </SimpleForm>\n </>\n}\n","import React, { Fragment, useState } from 'react';\nimport { useTranslate } from 'react-admin';\nimport { Button } from '@material-ui/core';\nimport { Add } from '@material-ui/icons';\n\nimport { DialogDatagrid } from '../../common/dialogs/DialogDatagrid';\nimport { CreateResourceDialog, EditResourceDialog } from '../../common/dialogs/ResourceDialog';\n\nimport { MemberForm } from './MemberForm';\n\nconst AddMemberDialog = props =>\n <CreateResourceDialog label=\"resources.members.actions.add\" resource=\"members\" basePath=\"/members\" {...props}>\n <MemberForm />\n </CreateResourceDialog>\n\nconst EditMemberDialog = props =>\n <EditResourceDialog label=\"resources.members.labels.edit\" resource=\"members\" basePath=\"/members\" {...props}>\n <MemberForm />\n </EditResourceDialog>\n\nexport const AddMemberButton = ({ size, variant, ...props }) => {\n const [ isOpen, setOpen ] = useState(false);\n const translate = useTranslate();\n return <>\n <Button color=\"primary\" size={size} variant={variant} startIcon={<Add />} onClick={() => setOpen(true)}>{translate('resources.members.actions.add')}</Button>\n <AddMemberDialog isOpen={isOpen} handleClose={() => setOpen(false)} {...props} />\n </>\n}\n\nexport const MemberDatagrid = props => <DialogDatagrid dialog={EditMemberDialog} {...props} />\n","import React from 'react';\n\nimport { getStatus } from '@hisports/scoresheet/src/util'\n\nimport FunctionField from '../../common/fields/FunctionField'\n\nexport const MemberStatusField = props =>\n <FunctionField render={member => getStatus(member)} {...props} />\n\nMemberStatusField.defaultProps = {\n addLabel: true\n}\n","import React from \"react\";\nimport { Datagrid, ListContextProvider, useListContext, useRecordContext, useTranslate } from \"react-admin\";\nimport { Accordion, AccordionDetails, AccordionSummary, Button, IconButton, makeStyles, Typography } from \"@material-ui/core\";\nimport { Clear, ExpandMore } from \"@material-ui/icons\";\n\nimport { useList } from \"./ra/useList\";\nimport { ListView } from \"./cards/ListCard\";\n\nconst useStyles = makeStyles(theme => ({\n accordion: {\n marginTop: theme.spacing(2),\n borderRadius: theme.shape.borderRadius,\n border: `1px solid ${theme.palette.divider}`,\n '&:before': {\n display: 'none',\n },\n },\n accordionDetails: {\n paddingTop: 0,\n },\n listContainer: {\n width: '100%',\n },\n removeButton: {\n float: 'right',\n }\n}));\n\nconst RemoveButton = ({ onRemove }) => {\n const { ids, page, setPage } = useListContext();\n const record = useRecordContext();\n const classes = useStyles();\n\n const handleRemove = () => {\n if (page !== 1 && ids.length === 1) {\n setPage(page - 1);\n }\n onRemove(record);\n }\n\n return <IconButton className={classes.removeButton} size=\"small\" onClick={handleRemove}>\n <Clear />\n </IconButton>\n}\n\nconst SelectedItems = ({\n title,\n items = [],\n actions = [],\n noResultsText,\n onRemove,\n onRemoveAll,\n children,\n}) => {\n const translate = useTranslate();\n const classes = useStyles();\n\n const context = useList({\n data: items,\n loaded: true,\n loading: false,\n page: 1,\n perPage: 10,\n });\n\n const showRemoveButton = typeof onRemove === 'function';\n const showRemoveAllButton = !!items?.length && typeof onRemoveAll === 'function';\n\n const handleRemoveAll = () => {\n context.setPage(1);\n onRemoveAll();\n }\n\n const allActions = [\n ...(actions?.length ? actions : []),\n showRemoveAllButton && <Button color=\"primary\" size=\"small\" onClick={handleRemoveAll}>{translate(\"resources.officials.actions.remove_all\")}</Button>\n ].filter(Boolean);\n\n return (\n <Accordion className={classes.accordion}>\n <AccordionSummary expandIcon={<ExpandMore />}>\n <Typography variant=\"subtitle1\">\n {translate(title, items.length || 0)}\n </Typography>\n </AccordionSummary>\n <AccordionDetails className={classes.accordionDetails}>\n <ListContextProvider value={context}>\n <div className={classes.listContainer}>\n <ListView open actions={allActions} noResultsText={noResultsText} compactToolbar>\n <Datagrid>\n {children}\n {showRemoveButton && <RemoveButton onRemove={onRemove} />}\n </Datagrid>\n </ListView>\n </div>\n </ListContextProvider>\n </AccordionDetails>\n </Accordion>\n );\n};\n\nexport default SelectedItems;\n","import { makeStyles, Tooltip, Typography } from \"@material-ui/core\";\nimport { Check } from \"@material-ui/icons\";\nimport React from \"react\";\nimport { useRecordContext, useTranslate } from \"react-admin\";\n\nimport { OfficeField } from \"../offices/OfficeField\";\nimport { useSeason } from \"../../common/inputs/SeasonSelector\";\n\nconst useStyles = makeStyles((theme) => ({\n list: {\n margin: 0,\n paddingLeft: theme.spacing(1.5),\n },\n stack: {\n display: 'flex',\n flexDirection: 'column',\n }\n}));\n\nexport const AffiliationLabel = () => {\n const seasonId = useSeason();\n const translate = useTranslate();\n const classes = useStyles();\n return <div className={classes.stack}>\n <Typography variant=\"inherit\">{translate('resources.participantMemberTypes.labels.affiliated')}</Typography>\n <Typography variant=\"body2\" color=\"textSecondary\">{`${translate('ra.action.active')} - ${seasonId}`}</Typography>\n </div>\n}\n\nexport const AffiliationField = ({ source, memberTypes = [], ...props }) => {\n const classes = useStyles();\n const record = useRecordContext();\n const participantId = record[source];\n\n const affiliations = memberTypes.filter(memberType => memberType.participantId === participantId);\n\n if (!affiliations?.length) return null;\n return <Tooltip\n title={\n <ul className={classes.list}>\n {affiliations.map((affiliation, index) => (\n <li key={affiliation.id}>\n <OfficeField record={affiliation} source=\"officeId\" />\n </li>\n ))}\n </ul>\n }\n >\n <Check fontSize=\"small\" />\n </Tooltip>\n};\n","import React from 'react';\nimport { SimpleForm } from 'react-admin';\nimport { Grid } from '@material-ui/core'\n\nimport { GAME_OFFICE_TYPES } from '@hisports/common/src/constants';\n\nimport Toolbar from '../../common/ra/Toolbar';\n\nimport { OfficeInput } from '../offices/OfficeInput';\nimport { ParticipantInput } from '../participants/ParticipantInput';\n\nconst validate = values => {\n const errors = {};\n\n if (!values.participantId) errors.participantId = 'ra.validation.required'\n if (!values.officeId) errors.officeId = 'ra.validation.required'\n\n return errors;\n}\n\nconst inputProps = {\n resource: 'officialOffices',\n basePath: '/officialoffices',\n variant: 'outlined',\n margin: 'none',\n fullWidth: true,\n}\n\nexport const OfficialForm = props => {\n return <SimpleForm toolbar={<Toolbar />} validate={validate} {...props}>\n <Grid container spacing={2} fullWidth>\n <Grid item xs={12}>\n <ParticipantInput source=\"participantId\" filter={{ _scope: 'Tenant', isOfficial: true }} disabled={props.initialValues?.id || props.initialValues?.participantId} {...inputProps} />\n </Grid>\n <Grid item xs={12}>\n <OfficeInput source=\"officeId\" disabled filter={{ type: { nin: [...GAME_OFFICE_TYPES, 'Historical'] } }} {...inputProps} />\n </Grid>\n </Grid>\n </SimpleForm>\n}\n","import React, { Fragment, useState } from 'react';\nimport { useTranslate } from 'react-admin';\nimport { Button } from '@material-ui/core';\nimport { Add } from '@material-ui/icons';\n\nimport { DialogDatagrid } from '../../common/dialogs/DialogDatagrid';\nimport { CreateResourceDialog, EditResourceDialog } from '../../common/dialogs/ResourceDialog';\n\nimport { OfficialForm } from './OfficialForm';\n\nconst AddOfficialDialog = props =>\n <CreateResourceDialog label=\"resources.officials.actions.add\" resource=\"officialOffices\" basePath=\"/officialoffices\" {...props}>\n <OfficialForm />\n </CreateResourceDialog>\n\nconst EditOfficialDialog = props =>\n <EditResourceDialog label=\"resources.officials.labels.edit\" resource=\"officialOffices\" basePath=\"/officialoffices\" {...props}>\n <OfficialForm />\n </EditResourceDialog>\n\nexport const AddOfficialButton = ({ size, variant, ...props }) => {\n const [ isOpen, setOpen ] = useState(false);\n const translate = useTranslate();\n return <>\n <Button color=\"primary\" size={size} variant={variant} startIcon={<Add />} onClick={() => setOpen(true)}>\n {translate('resources.officials.actions.add')}\n </Button>\n <AddOfficialDialog isOpen={isOpen} handleClose={() => setOpen(false)} {...props} />\n </>\n}\n\nexport const OfficialDatagrid = props => <DialogDatagrid dialog={EditOfficialDialog} {...props} />\n","import React, { useMemo } from 'react';\nimport { GET_LIST, useListContext, useQuery } from 'react-admin';\n\nimport { SID_MEMBER_TYPES } from '@hisports/common/src/constants';\nimport { FF_SID_MEMBER_TYPES } from '@hisports/common/featureFlags';\n\nimport { useSeason } from '../../common/inputs/SeasonSelector';\nimport { useFlag } from '../../http';\nimport { ParticipantField } from '../participants/ParticipantField';\nimport { OfficeField } from '../offices/OfficeField';\nimport { AffiliationField, AffiliationLabel } from '../memberTypes/AffiliationField';\nimport { OfficialDatagrid } from './OfficialModal';\n\nexport const useParticipantMemberTypes = (enabled = true, participantIds, seasonId) => useQuery({\n type: GET_LIST,\n resource: 'participantMemberTypes',\n payload: {\n filter: {\n participantId: { inq: participantIds },\n isActive: true,\n 'memberType.type': SID_MEMBER_TYPES.official,\n seasonId,\n _include: 'memberType'\n },\n }\n},\n{\n enabled: !!participantIds?.length && enabled,\n})\n\nexport const OfficialGrid = ({ ...props }) => {\n const seasonId = useSeason();\n const isEnabled = useFlag();\n const { data: officials } = useListContext();\n const participantIds = useMemo(() => Object.values(officials).map(official => official.participantId), [officials]);\n const showMemberType = isEnabled(FF_SID_MEMBER_TYPES);\n\n const { data: memberTypes } = useParticipantMemberTypes(showMemberType, participantIds, seasonId);\n\n return <OfficialDatagrid size=\"medium\" {...props}>\n <ParticipantField source=\"participantId\" label=\"resources.officials.fields.participantId\" includeId=\"inline\" />\n <OfficeField source=\"officeId\" label=\"resources.officials.fields.officeId\" />\n {showMemberType && <AffiliationField label={<AffiliationLabel />} source=\"participantId\" memberTypes={memberTypes} />}\n </OfficialDatagrid>\n}\n","import React, { Fragment, useEffect, useMemo, useState } from 'react';\nimport { BooleanInput, Datagrid, RecordContextProvider, SimpleForm, TextInput, useDataProvider, useInput, useListContext, useNotify, useRecordContext, useRefresh, useResourceContext, useTranslate } from \"react-admin\";\nimport { useForm, useFormState } from 'react-final-form';\nimport { Button, Dialog, DialogContent, DialogTitle, Grid, IconButton, InputAdornment, LinearProgress, makeStyles, Typography, useMediaQuery } from \"@material-ui/core\";\nimport { Clear, PlaylistAdd } from '@material-ui/icons';\nimport moment from 'moment';\n\nimport { GAME_OFFICE_TYPES } from '@hisports/common/src/constants';\nimport { FF_SID_MEMBER_TYPES } from '@hisports/common/featureFlags';\nimport { filterOfficialParticipants } from '@hisports/scoresheet/src/util/officialParticipants';\n\nimport ListCard from '../../common/cards/ListCard';\nimport { DialogFormToolbar } from '../../common/dialogs/DialogForm';\nimport { FieldDependency } from '../../common/FieldDependency';\nimport { useSeason } from '../../common/inputs/SeasonSelector';\nimport SelectedItems from '../../common/SelectedItems';\n\nimport { useFlag } from '../../http';\nimport { OfficeInput } from '../offices/OfficeInput';\nimport { ParticipantField } from '../participants/ParticipantField';\nimport { ListInput } from '../lists/ListInput';\nimport { useParticipantMemberTypes } from '../officialOffices/OfficialGrid';\nimport { AffiliationField, AffiliationLabel } from '../memberTypes/AffiliationField';\n\nconst useStyles = makeStyles(theme => ({\n toolbar: {\n display: 'flex',\n justifyContent: 'flex-end',\n gap: theme.spacing(1),\n },\n}));\n\nconst DEFAULT_FORM_VALUES = {\n officeId: null,\n participant: null,\n includeSubOffices: false,\n today: moment().format('YYYY-MM-DD'),\n};\n\nconst SUBMIT_MSGS = {\n officialOffices: {\n success: 'resources.officialOffices.notifications.officials_added',\n error: 'resources.officialOffices.notifications.add_officials_error',\n },\n listMembers: {\n success: 'resources.listMembers.notifications.list_officials_added',\n error: 'resources.listMembers.notifications.add_list_officials_error',\n },\n}\n\nconst inputProps = {\n variant: 'outlined',\n margin: 'none',\n fullWidth: true,\n helperText: false,\n}\n\nconst getFilters = (values) => {\n if (!values) return null;\n\n const { today, officeId, includeSubOffices, participant, type } = values;\n\n return {\n _scope: 'Tenant',\n distinct: 'participantId',\n ...(officeId && { officeId, effectiveOffices: includeSubOffices }),\n ...(type && { 'qualificationCategory.types': { inq: [type] } }),\n and: [\n { or: [{ expiry: { gte: today } }, { expiry: { eq: null } }] },\n ...(participant ? [filterOfficialParticipants(participant)] : [])\n ],\n }\n}\n\nexport const SearchInput = (props) => {\n const translate = useTranslate();\n const { input: { value, onChange } } = useInput(props);\n\n const handleClear = () => onChange('');\n\n return <TextInput\n placeholder={translate('ra.input.autocomplete.type_to_search')}\n InputProps={{\n endAdornment: (\n value && <InputAdornment position=\"end\">\n <IconButton size=\"small\" edge=\"end\" onClick={handleClear}>\n <Clear fontSize=\"small\" />\n </IconButton>\n </InputAdornment>\n )\n }}\n {...props}\n />\n}\n\nexport const ListLoader = () => {\n const { loading } = useListContext();\n return <LinearProgress style={{ marginTop: 12, visibility: loading ? 'visible' : 'hidden' }} />\n}\n\nexport const ListToolbar = ({ handleSearch, handleReset }) => {\n const { dirty } = useFormState();\n const translate = useTranslate();\n const classes = useStyles();\n\n useEffect(() => {\n const handleKeyDown = (event) => {\n if (event.key === 'Enter') {\n event.preventDefault();\n handleSearch();\n }\n };\n\n document.addEventListener('keydown', handleKeyDown);\n\n return () => {\n document.removeEventListener('keydown', handleKeyDown);\n };\n }, [handleSearch]);\n\n return <div className={classes.toolbar}>\n <Button variant=\"outlined\" size=\"small\" onClick={handleReset} disabled={!dirty}>\n {translate('ra.action.reset')}\n </Button>\n <Button color=\"primary\" variant=\"contained\" size=\"small\" onClick={handleSearch}>\n {translate('ra.action.search')}\n </Button>\n </div>\n}\n\nconst SelectedOfficials = () => {\n const { values: { participantIds = [] } } = useFormState();\n const { onToggleItem, onUnselectItems } = useListContext();\n\n const items = participantIds?.map(participantId => ({ id: participantId, participantId })) || [];\n\n return <SelectedItems\n title=\"resources.officials.labels.selected_officials\"\n noResultsText=\"resources.officials.messages.no_officials_selected\"\n items={items}\n onRemoveAll={onUnselectItems}\n onRemove={(item) => onToggleItem(item.participantId)}\n >\n <ParticipantField source=\"participantId\" label=\"resources.officials.fields.participantId\" includeId=\"inline\" link={false} />\n </SelectedItems>\n};\n\nconst OfficialsGrid = (props) => {\n const seasonId = useSeason();\n const isEnabled = useFlag();\n const { selectedIds, data = {}, ids = [] } = useListContext();\n const { change } = useForm();\n const showMemberType = isEnabled(FF_SID_MEMBER_TYPES);\n\n const officials = useMemo(() =>\n ids.reduce((officials, id) => {\n const official = data[id];\n if (!official) return officials;\n\n officials[official.participantId] = { ...official, id: official.participantId };\n return officials;\n }, {})\n , [data, ids]);\n\n const participantIds = useMemo(() => ids.map(id => data[id]?.participantId).filter(Boolean), [ids, data]);\n const { data: memberTypes } = useParticipantMemberTypes(showMemberType, participantIds, seasonId);\n\n useEffect(() => {\n change('participantIds', selectedIds);\n }, [selectedIds, change]);\n\n return <Datagrid {...props} data={officials} ids={participantIds} size=\"medium\" rowClick=\"toggleSelection\" hasBulkActions>\n <ParticipantField source=\"participantId\" includeId=\"inline\" />\n {showMemberType && <AffiliationField label={<AffiliationLabel />} source=\"participantId\" memberTypes={memberTypes} />}\n </Datagrid>\n}\n\nconst OfficialList = () => {\n const { change, batch } = useForm();\n const { values, initialValues } = useFormState();\n const [filters, setFilters] = useState(getFilters(initialValues));\n\n const { officeId, includeSubOffices } = values;\n\n useEffect(() => {\n if (includeSubOffices && !officeId) {\n change('includeSubOffices', false);\n }\n }, [officeId, includeSubOffices, change]);\n\n const handleSearch = () => {\n setFilters(getFilters(values));\n };\n\n const handleReset = () => {\n batch(() => Object.entries(initialValues).forEach(([key, value]) => change(key, value)));\n setFilters(getFilters(initialValues));\n }\n\n return <ListCard\n component={Fragment}\n reference=\"qualifications\"\n target=\"participantId\"\n filter={filters}\n sort={{ field: 'participant.firstName', order: 'ASC' }}\n perPage={10}\n rowsPerPageOptions={[10, 25, 50]}\n additionalContent={<div style={{ paddingBottom: 16 }}>\n <ListToolbar handleSearch={handleSearch} handleReset={handleReset} />\n <SelectedOfficials />\n <ListLoader />\n </div>}\n >\n <OfficialsGrid />\n </ListCard>\n}\n\nconst SelectOfficialsForm = ({ onClose, officeId, initialValues, ...props }) => {\n const translate = useTranslate();\n const notify = useNotify();\n const refresh = useRefresh();\n const dataProvider = useDataProvider();\n const resource = useResourceContext();\n\n const onSubmit = ({ listId, participantIds }) => {\n if (!participantIds?.length) return;\n\n const listMembers = participantIds.map(participantId => ({\n officeId,\n participantId,\n ...(listId ? { listId } : {}),\n }));\n\n return dataProvider.createMany(resource, { data: listMembers })\n .then(data => data.data)\n .then(data => {\n onClose();\n refresh();\n notify(translate(SUBMIT_MSGS[resource].success, data.length || 0));\n })\n .catch(() => {\n onClose();\n notify(translate(SUBMIT_MSGS[resource].error), 'warning');\n });\n };\n\n const handleKeyDown = (event) => {\n if (event.key === 'Enter') {\n event.preventDefault();\n }\n };\n\n const showListInput = !!initialValues?.listId;\n\n return <SimpleForm save={onSubmit} component={Fragment} initialValues={{ ...DEFAULT_FORM_VALUES, ...initialValues }} onKeyDown={handleKeyDown} {...props}>\n <Typography variant=\"subtitle1\" color=\"textSecondary\" component=\"h3\" gutterBottom style={{ fontWeight: 500 }}>\n {translate('ra.message.filters')}\n </Typography>\n <Grid container spacing={2} alignItems=\"center\" style={{ paddingTop: 8 }}>\n {showListInput && <Grid item xs={12}>\n <ListInput source=\"listId\" label=\"resources.listMembers.fields.listId\" disabled {...inputProps} />\n </Grid>}\n <Grid item xs={12} md={8}>\n <OfficeInput source=\"officeId\" label=\"resources.officials.fields.qualificationOrganization\" filter={{ _scope: \"Tenant\", type: { nin: [...GAME_OFFICE_TYPES, 'Historical'] } }} {...inputProps} helperText=\"ra.message.optional\" />\n </Grid>\n <Grid item xs={12} md={4}>\n <FieldDependency fieldSource=\"officeId\" disabled>\n <BooleanInput source=\"includeSubOffices\" label=\"resources.officials.fields.includeSubOffices\" {...inputProps} helperText />\n </FieldDependency>\n </Grid>\n <Grid item xs={12}>\n <SearchInput source=\"participant\" label=\"resources.officials.fields.participant\" {...inputProps} helperText=\"resources.officials.helpers.optional\" />\n </Grid>\n <Grid item xs={12}>\n <OfficialList />\n </Grid>\n </Grid>\n </SimpleForm>\n}\n\nconst SelectOfficialsDialog = ({ title, isOpen, onSubmit, onClose, ...props }) => {\n const fullScreen = useMediaQuery(theme => theme.breakpoints.down('sm'));\n\n return <Dialog open={isOpen} maxWidth=\"md\" fullWidth fullScreen={fullScreen}>\n <DialogTitle>{title}</DialogTitle>\n <DialogContent style={{ paddingTop: 0 }}>\n <RecordContextProvider value={{}}>\n <SelectOfficialsForm\n onClose={onClose}\n toolbar={<DialogFormToolbar submitLabel=\"ra.action.add\" cancelLabel=\"ra.action.cancel\" onCancel={onClose} />}\n {...props}\n />\n </RecordContextProvider>\n </DialogContent>\n </Dialog>\n}\n\nexport const SelectOfficialsButton = ({ size = \"small\", variant, ...props }) => {\n const translate = useTranslate();\n const resource = useResourceContext(props);\n const record = useRecordContext();\n const [open, setOpen] = useState(false);\n\n return <>\n <Button color=\"primary\" size={size} variant={variant} startIcon={<PlaylistAdd fontSize=\"small\" />} onClick={() => setOpen(true)}>\n {translate(`resources.${resource}.actions.add_officials`)}\n </Button>\n <SelectOfficialsDialog\n title={translate(`resources.${resource}.labels.add_officials`, { name: record?.name })}\n isOpen={open}\n onClose={() => setOpen(false)}\n {...props}\n />\n </>\n}\n","import React, { Fragment, useEffect, useState } from 'react';\nimport { Datagrid, RecordContextProvider, SimpleForm, useDataProvider, useListContext, useNotify, useRecordContext, useRefresh, useResourceContext, useTranslate } from \"react-admin\";\nimport { useForm, useFormState } from 'react-final-form';\nimport { Button, Dialog, DialogContent, DialogTitle, Grid, Typography, useMediaQuery } from \"@material-ui/core\";\nimport { PlaylistAdd } from '@material-ui/icons';\n\nimport { filterParticipants } from '@hisports/scoresheet/src/util';\n\nimport { DialogFormToolbar } from '../../common/dialogs/DialogForm';\nimport SelectedItems from '../../common/SelectedItems';\nimport ListCard from '../../common/cards/ListCard';\n\nimport { ListLoader, ListToolbar, SearchInput } from '../officials/SelectOfficialsDialog';\nimport { ParticipantField } from '../participants/ParticipantField';\n\nconst DEFAULT_FORM_VALUES = {\n participant: null,\n};\n\nconst inputProps = {\n variant: 'outlined',\n margin: 'none',\n fullWidth: true,\n helperText: false,\n}\n\nconst getFilters = (values) => {\n if (!values) return null;\n\n const { participant } = values;\n\n return {\n ...(participant && filterParticipants(participant))\n }\n}\n\nconst SelectedMembers = () => {\n const { values: { participantIds = [] } } = useFormState();\n const { onToggleItem, onUnselectItems } = useListContext();\n const translate = useTranslate();\n\n const items = participantIds?.map(participantId => ({ id: participantId, participantId })) || [];\n\n const actions = [\n !!participantIds?.length && <Button color=\"primary\" size=\"small\" onClick={onUnselectItems}>{translate(\"resources.members.actions.remove_all\")}</Button>\n ].filter(Boolean);\n\n return <SelectedItems\n title=\"resources.members.labels.selected_members\"\n noResultsText=\"resources.members.messages.no_members_selected\"\n items={items}\n actions={actions}\n onRemove={(item) => onToggleItem(item.participantId)}\n >\n <ParticipantField source=\"participantId\" label=\"resources.members.fields.participantId\" includeId=\"inline\" link={false} />\n </SelectedItems>\n};\n\nconst ParticipantGrid = (props) => {\n const { selectedIds } = useListContext();\n const { change } = useForm();\n\n useEffect(() => {\n change('participantIds', selectedIds);\n }, [selectedIds, change]);\n\n return <Datagrid {...props} size=\"medium\" rowClick=\"toggleSelection\" hasBulkActions>\n <ParticipantField source=\"id\" label=\"resources.members.fields.participantId\" includeId=\"inline\" />\n </Datagrid>\n}\n\nconst MembersList = () => {\n const { change, batch } = useForm();\n const { values, initialValues } = useFormState();\n const [filters, setFilters] = useState(getFilters(initialValues));\n\n const handleSearch = () => {\n setFilters(getFilters(values));\n };\n\n const handleReset = () => {\n batch(() => Object.entries(initialValues).forEach(([key, value]) => change(key, value)));\n setFilters(initialValues);\n }\n\n return <ListCard\n component={Fragment}\n reference=\"participants\"\n target=\"participantId\"\n filter={filters}\n sort={{ field: 'lastName', order: 'ASC' }}\n perPage={10}\n rowsPerPageOptions={[10, 25, 50]}\n additionalContent={<div style={{ paddingBottom: 16 }}>\n <ListToolbar handleSearch={handleSearch} handleReset={handleReset} />\n <SelectedMembers />\n <ListLoader />\n </div>}\n >\n <ParticipantGrid />\n </ListCard>\n}\n\nconst SelectMembersForm = ({ onClose, initialValues, ...props }) => {\n const translate = useTranslate();\n const notify = useNotify();\n const refresh = useRefresh();\n const dataProvider = useDataProvider();\n const resource = useResourceContext();\n\n const onSubmit = ({ participantIds, teamId }) => {\n if (!participantIds?.length) return;\n\n const members = participantIds.map(participantId => ({\n teamId,\n participantId,\n number: 0,\n positions: ['F'],\n }));\n\n return dataProvider.createMany(resource, { data: members })\n .then(data => data.data)\n .then(data => {\n onClose();\n refresh();\n notify(translate('resources.members.notifications.members_added', data.length || 0));\n })\n .catch(() => {\n onClose();\n notify(translate('resources.members.notifications.add_members_error'), 'warning');\n });\n };\n\n const handleKeyDown = (event) => {\n if (event.key === 'Enter') {\n event.preventDefault();\n }\n };\n\n return <SimpleForm save={onSubmit} component={Fragment} initialValues={{ ...DEFAULT_FORM_VALUES, ...initialValues }} onKeyDown={handleKeyDown} {...props}>\n <Typography variant=\"subtitle1\" color=\"textSecondary\" component=\"h3\" gutterBottom style={{ fontWeight: 500 }}>\n {translate('ra.message.filters')}\n </Typography>\n <Grid container spacing={2} alignItems=\"center\" style={{ paddingTop: 8 }}>\n <Grid item xs={12}>\n <SearchInput source=\"participant\" label={translate(\"resources.members.name\", 1)} {...inputProps} helperText=\"resources.members.helpers.name_or_id\" />\n </Grid>\n <Grid item xs={12}>\n <MembersList />\n </Grid>\n </Grid>\n </SimpleForm>\n}\n\nconst SelectMembersDialog = ({ title, isOpen, onSubmit, onClose, ...props }) => {\n const fullScreen = useMediaQuery(theme => theme.breakpoints.down('sm'));\n\n return <Dialog open={isOpen} maxWidth=\"md\" fullWidth fullScreen={fullScreen}>\n <DialogTitle>{title}</DialogTitle>\n <DialogContent style={{ paddingTop: 0 }}>\n <RecordContextProvider value={{}}>\n <SelectMembersForm\n onClose={onClose}\n toolbar={<DialogFormToolbar submitLabel=\"ra.action.add\" cancelLabel=\"ra.action.cancel\" onCancel={onClose} />}\n {...props}\n />\n </RecordContextProvider>\n </DialogContent>\n </Dialog>\n}\n\nexport const SelectMembersButton = ({ size = \"small\", variant, ...props }) => {\n const translate = useTranslate();\n const record = useRecordContext();\n const [open, setOpen] = useState(false);\n\n return <>\n <Button color=\"primary\" size={size} variant={variant} startIcon={<PlaylistAdd fontSize=\"small\" />} onClick={() => setOpen(true)}>\n {translate('resources.members.actions.add_members')}\n </Button>\n <SelectMembersDialog\n title={translate('resources.members.labels.add_members', { name: record?.name })}\n isOpen={open}\n onClose={() => setOpen(false)}\n {...props}\n />\n </>\n}\n","import React, { useState } from 'react';\nimport { useTranslate } from 'react-admin';\nimport { Button } from '@material-ui/core'\nimport { UnarchiveOutlined } from '@material-ui/icons'\n\nimport { LazyDialog } from '../../../../common/LazyDialog';\n\nconst Uploader = React.lazy(() => import('./Uploader'))\n\nexport default ({ teamId, size, variant }) => {\n const [ isOpen, setOpen ] = useState(false);\n const translate = useTranslate();\n\n return <>\n <Button color=\"primary\" size={size} variant={variant} startIcon={<UnarchiveOutlined />} onClick={() => setOpen(true)}>\n {translate('ra.action.import')}\n </Button>\n <LazyDialog>\n {isOpen && <Uploader teamId={teamId} isOpen={isOpen} onClose={() => setOpen(false)} />}\n </LazyDialog>\n </>\n}\n","import React, { useState } from 'react';\nimport { useTranslate } from 'react-admin';\nimport { Button } from '@material-ui/core'\nimport { UnarchiveOutlined } from '@material-ui/icons'\n\nimport { LazyDialog } from '../../../../common/LazyDialog';\n\nconst Uploader = React.lazy(() => import('./Uploader'))\n\nexport default ({ teamId, size, variant }) => {\n const [ isOpen, setOpen ] = useState(false);\n const translate = useTranslate();\n\n return <>\n <Button color=\"primary\" size={size} variant={variant} startIcon={<UnarchiveOutlined />} onClick={() => setOpen(true)}>\n {translate('resources.teams.labels.import_profiles')}\n </Button>\n <LazyDialog>\n {isOpen && <Uploader teamId={teamId} isOpen={isOpen} onClose={() => setOpen(false)} />}\n </LazyDialog>\n </>\n}\n","import React from 'react';\nimport { Pagination, TextField, useRecordContext } from 'react-admin';\n\nimport ListCard from '../../../common/cards/ListCard';\nimport TextArrayField from '../../../common/fields/TextArrayField';\nimport { isAuthorized } from '../../../common/Authorize';\nimport { TeamIcon } from '../../icons';\nimport { usePermissions } from '../../../http';\n\nimport { ParticipantField } from '../../participants/ParticipantField';\nimport { MemberDatagrid } from '../../members/MemberModal';\nimport { MemberStatusField } from '../../members/MemberFields';\nimport { SelectMembersButton } from '../../members/SelectMembersDialog';\n\nimport ImportRoster from '../dialogs/upload';\nimport ImportProfile from '../../profiles/dialogs/import';\n\nexport default props => {\n const team = useRecordContext(props);\n const permissions = usePermissions()\n const isSystemUser = permissions.some(p => p.roleType === 'System');\n\n const canAddMember = (isAuthorized(team, 'members', 'create') && !team.isSanctioned) || isSystemUser;\n const canImportMembers = (isAuthorized(team, 'members', 'import') && !team.isSanctioned) || isSystemUser;\n const canImportProfiles = isAuthorized(team, 'profiles', 'import', true);\n\n const addButton = canAddMember && <SelectMembersButton initialValues={{ teamId: team?.id }} />\n\n const actions = [\n canImportMembers && <ImportRoster teamId={team?.id} size=\"small\" />,\n canImportProfiles && <ImportProfile teamId={team?.id} size=\"small\" />,\n ]\n\n return <ListCard\n title=\"resources.teams.labels.team_roster\"\n icon={<TeamIcon />}\n reference=\"members\"\n target=\"teams\"\n sort={{ field: \"number\", order: \"ASC\" }}\n perPage={50}\n pagination={<Pagination rowsPerPageOptions={[]} />}\n addButton={addButton}\n actions={actions}\n >\n <MemberDatagrid size=\"small\">\n <ParticipantField source=\"participantId\" includeId=\"inline\" />\n\n <TextField source=\"number\" />\n <TextArrayField source=\"positions\" />\n\n <MemberStatusField label=\"resources.members.fields.status\" />\n </MemberDatagrid>\n </ListCard>\n}\n","import { useState, useEffect } from 'react';\n\nimport { apiClient } from '../../http';\n\nexport const useTeamEffectiveSettings = (teamId) => {\n const [ settings, setSettings ] = useState({});\n\n useEffect(() => {\n if (!teamId) {\n setSettings({})\n return;\n }\n apiClient(`/teams/${teamId}/effectiveSettings`)\n .then(res => res.data)\n .then(setSettings);\n }, [ teamId ])\n\n return settings;\n}\n","import React from 'react';\nimport { Datagrid, ReferenceField, useListContext } from 'react-admin';\n\nimport DateRangeField from '../../common/fields/DateRangeField';\n\nimport { ScheduleField } from '../schedules/ScheduleField';\nimport { GroupField } from '../groups/GroupField';\nimport { OfficeField } from '../offices/OfficeField';\n\nexport default ({ showOffice = true, ...props }) => {\n const { ids = [], data } = useListContext(props);\n const showGroup = ids?.some(id => data?.[id]?.groupId != null)\n\n return <Datagrid size=\"medium\" {...props}>\n <ScheduleField source=\"scheduleId\" label=\"resources.scheduleteams.fields.scheduleId\" sortable={false} includeCategory=\"inline\" includeType=\"inline\" />\n {showGroup && <GroupField source=\"groupId\" sortable={false} />}\n <ReferenceField source=\"scheduleId\" reference=\"schedules\" label=\"resources.schedules.labels.dates\" link={false} sortable={false} allowEmpty>\n <DateRangeField source=\"startDate\" startSource=\"startDate\" endSource=\"endDate\" />\n </ReferenceField>\n {showOffice && <OfficeField source=\"officeId\" sortable={false} includeType=\"inline\" />}\n </Datagrid>\n}\n","import React from 'react';\nimport { useRecordContext, ReferenceManyField, RecordContextProvider, ResourceContextProvider, useResourceContext } from 'react-admin';\n\nimport ListCard from '../../../common/cards/ListCard';\nimport { isAuthorized } from '../../../common/Authorize';\nimport { ScheduleIcon } from '../../icons';\n\nimport { useTeamEffectiveSettings } from '../../teamSettings';\nimport ScheduleTeamsGrid from '../../scheduleteams/ScheduleTeamsGrid';\nimport { ScheduleTeamContactGrid } from '../../contacts/ScheduleTeamContactGrid';\nimport { ScheduleManagerContactGrid } from '../../contacts/ScheduleManagerContactGrid';\n\nconst ScheduleContacts = ({ basePath, ...props }) => {\n const team = useRecordContext(props);\n const resource = useResourceContext(props);\n\n return <RecordContextProvider value={team}>\n <ResourceContextProvider value={resource}>\n <ReferenceManyField\n label=\"resources.contacts.labels.card.title\"\n basePath={basePath}\n reference=\"teamContacts\"\n target=\"schedules\"\n source=\"scheduleId\"\n filter={{ groupId: team?.groupId }}\n sort={{\n field: ['schedule.startTime', 'schedule.name'],\n order: ['ASC', 'ASC'],\n }}\n perPage={9999}\n pagination={null}\n >\n <ScheduleTeamContactGrid />\n </ReferenceManyField>\n <ReferenceManyField\n label={null}\n basePath={basePath}\n reference=\"scheduleContacts\"\n target=\"schedules\"\n source=\"scheduleId\"\n filter={{ groupId: team?.groupId }}\n perPage={9999}\n pagination={null}\n >\n <ScheduleManagerContactGrid />\n </ReferenceManyField>\n </ResourceContextProvider>\n </RecordContextProvider>\n}\n\nexport default props => {\n const team = useRecordContext(props);\n const settings = useTeamEffectiveSettings(team?.id);\n\n const showOffice = isAuthorized(team, 'offices', 'show')\n const showContacts = settings?.contactsVisibility === 'teams';\n\n const title = showContacts ? 'resources.scheduleteams.labels.card.title' : 'resources.schedules.labels.card.title'\n return <ListCard\n title={title}\n icon={<ScheduleIcon />}\n collapsable\n reference=\"scheduleteams\"\n target=\"teams\"\n perPage={999}\n rowsPerPageOptions={[]}\n sort={{ field: 'schedule.startDate', order: 'ASC' }}\n >\n <ScheduleTeamsGrid\n showOffice={showOffice}\n expand={showContacts && <ScheduleContacts />}\n />\n </ListCard>\n}\n","import React, { useState } from 'react';\nimport { useTranslate } from 'react-admin';\nimport { Button } from '@material-ui/core';\nimport { Add } from '@material-ui/icons';\n\nimport { DialogDatagrid } from '../../common/dialogs/DialogDatagrid';\nimport { CreateResourceDialog, EditResourceDialog } from '../../common/dialogs/ResourceDialog';\n\nimport { PracticeForm } from './PracticeForm';\n\nconst AddPracticeDialog = props =>\n <CreateResourceDialog label=\"resources.practices.actions.add\" maxWidth=\"md\" resource=\"practices\" basePath=\"/practices\" {...props}>\n <PracticeForm />\n </CreateResourceDialog>\n\nconst EditPracticeDialog = props =>\n <EditResourceDialog label=\"resources.practices.labels.edit\" maxWidth=\"md\" resource=\"practices\" basePath=\"/practices\" {...props}>\n <PracticeForm />\n </EditResourceDialog>\n\nexport const AddPracticeButton = ({ size, variant, ...props }) => {\n const [ isOpen, setOpen ] = useState(false);\n const translate = useTranslate();\n return <>\n <Button color=\"primary\" size={size} variant={variant} startIcon={<Add />} onClick={() => setOpen(true)}>{translate('resources.practices.actions.add')}</Button>\n <AddPracticeDialog isOpen={isOpen} handleClose={() => setOpen(false)} {...props} />\n </>\n}\n\nexport const PracticeDatagrid = props => <DialogDatagrid dialog={EditPracticeDialog} {...props} />\n","import React, { useState } from 'react';\nimport { useTranslate } from 'react-admin';\nimport { Button } from '@material-ui/core';\nimport { Add } from '@material-ui/icons';\n\nimport { DialogDatagrid } from '../../common/dialogs/DialogDatagrid';\nimport { CreateResourceDialog, EditResourceDialog } from '../../common/dialogs/ResourceDialog';\n\nimport { ActivityForm } from './ActivityForm';\n\nconst AddActivityDialog = props =>\n <CreateResourceDialog label=\"resources.activities.actions.add\" maxWidth=\"md\" resource=\"activities\" basePath=\"/activities\" {...props}>\n <ActivityForm />\n </CreateResourceDialog>\n\nconst EditActivityDialog = props =>\n <EditResourceDialog label=\"resources.activities.labels.edit\" maxWidth=\"md\" resource=\"activities\" basePath=\"/activities\" {...props}>\n <ActivityForm />\n </EditResourceDialog>\n\nexport const AddActivityButton = ({ size, variant, ...props }) => {\n const [ isOpen, setOpen ] = useState(false);\n const translate = useTranslate();\n return <>\n <Button color=\"primary\" size={size} variant={variant} startIcon={<Add />} onClick={() => setOpen(true)}>{translate('resources.activities.actions.add')}</Button>\n <AddActivityDialog isOpen={isOpen} handleClose={() => setOpen(false)} {...props} />\n </>\n}\n\nexport const ActivityDatagrid = props => <DialogDatagrid dialog={EditActivityDialog} {...props} />\n","import React from 'react';\nimport { NullableBooleanInput, TextInput, useRecordContext } from 'react-admin';\n\nimport ListCard from '../../../common/cards/ListCard';\nimport { isAuthorized } from '../../../common/Authorize';\nimport { InlineDateInput } from '../../../common/inputs/DateInput';\nimport { EventIcon } from '../../icons';\n\nimport { EventView } from '../../events/EventView';\nimport { EventReferenceManyField } from '../../events/EventReferenceField';\nimport { AddPracticeButton } from '../../practices/PracticeModal';\nimport { AddActivityButton } from '../../activities/ActivityModal';\nimport { CALENDAR_VIEWS, EventViewSettingsMenu, useEventSort, useShowCalendar } from '../../events/EventViewSettings';\nimport { rowClick } from '../../events/EventGrid';\n\nexport default props => {\n const team = useRecordContext(props);\n const [ showCalendar ] = useShowCalendar();\n const sort = useEventSort();\n\n const canAddPractices = isAuthorized(team, 'practices', 'create')\n const canAddActivities = isAuthorized(team, 'activities', 'create')\n\n const addButton = canAddPractices && <AddPracticeButton initialValues={{ teamIds: team ? [team.id] : [] }} />\n const actions = [\n canAddActivities && <AddActivityButton size=\"small\" initialValues={{ teamId: team?.id }} />,\n <EventViewSettingsMenu alwaysOn showTeamEvents showAvailabilties disableGroupArenas />,\n ].filter(Boolean)\n\n const filters = [\n <InlineDateInput source=\"startTime\" label=\"resources.games.filters.startTime\" variant=\"outlined\" alwaysOn />,\n <InlineDateInput source=\"endTime\" label=\"resources.games.filters.endTime\" variant=\"outlined\" disabled={showCalendar} alwaysOn />,\n <TextInput source=\"number\" variant=\"outlined\" />,\n <NullableBooleanInput source=\"isApproved\" label=\"resources.games.filters.isApproved\" variant=\"outlined\" />,\n ]\n\n return <ListCard\n title=\"resources.schedules.labels.scheduled_events\"\n icon={<EventIcon />}\n resource=\"games\"\n target=\"teams\"\n base={EventReferenceManyField}\n baseProps={{\n includeGames: true,\n includeDraftGames: false,\n includePractices: true,\n includeActivities: true,\n includeSlots: false,\n includeAvailabilities: showCalendar\n }}\n addButton={addButton}\n actions={actions}\n filters={filters}\n sort={sort}\n noResultsText={!showCalendar}\n >\n <EventView team={team} rowClick={rowClick} strictView={CALENDAR_VIEWS.WEEK} disableScheduling />\n </ListCard>\n}\n","import React from 'react';\nimport { Datagrid, useTranslate } from 'react-admin';\nimport { makeStyles } from '@material-ui/core';\n\nimport FunctionField from '../../common/fields/FunctionField';\n\nimport { SurfaceField } from '../surfaces/SurfaceField';\n\nconst useStyles = makeStyles({\n headerRow: {\n display: 'none',\n },\n order: {\n width: '10%',\n }\n})\n\nconst renderOrder = (teamarena = {}, source, resource, translate) => {\n const { order } = teamarena;\n return translate(`resources.teamArenas.values.order.${order || 1}`, { _: `${order}` })\n}\n\n\nconst renderSlot = (teamarena = {}, source, resource, translate) => {\n const { day, startTime, endTime } = teamarena\n if (!day || !startTime || !endTime) return translate('resources.teamArenas.labels.not_set');\n return `${translate(`ra.date.days.long.${day}`, { _: day })} ${startTime} - ${endTime}`\n}\n\nexport const TeamArenasGrid = ({ ...props }) => {\n const classes = useStyles();\n const translate = useTranslate();\n\n return <Datagrid size=\"medium\" classes={classes} {...props}>\n <FunctionField source=\"order\" label={translate('resources.teamArenas.fields.order')} render={renderOrder} cellClassName={classes.order} />\n <SurfaceField source=\"arenaId\" label={translate('resources.teamArenas.fields.arenaId')} includeAttributes=\"full\" includeCity=\"full\" />\n <FunctionField label={translate('resources.teamArenas.fields.slot')} render={renderSlot} />\n </Datagrid>\n}\n","import React, { Fragment } from 'react';\nimport { ArrayInput, SimpleForm } from 'react-admin';\nimport { makeStyles } from '@material-ui/core';\nimport moment from 'moment-timezone';\n\nimport { DayEnumInput } from '../../common/inputs/EnumInputs';\nimport TimeInput from '../../common/inputs/BasicTimeInput';\nimport { DialogFormToolbar } from '../../common/dialogs/DialogForm';\nimport SortedFormIterator from '../../common/ra/SortedFormIterator';\n\nimport { SurfaceInput } from '../surfaces/SurfaceInput';\n\nconst validate = values => {\n const errors = {};\n\n errors.teamArenas = values?.teamArenas?.map(teamArena => {\n const errors = {}\n const { day, startTime, endTime, arenaId } = teamArena || {}\n\n if (!arenaId) errors.arenaId = 'ra.validation.required';\n\n // if any are set all are required\n if (day || startTime || endTime) {\n if (!day) errors.day = 'ra.validation.required';\n if (!startTime) errors.startTime = 'ra.validation.required';\n if (!endTime) errors.endTime = 'ra.validation.required';\n }\n\n // ensure start and end times are valid range\n if (startTime && endTime) {\n const start = moment.utc(startTime, 'HH:mm')\n const end = moment.utc(endTime, 'HH:mm')\n\n if (end.isSameOrBefore(start, 'minutes')) {\n errors.endTime = 'resources.games.validations.end_before_start';\n } else if (end.diff(start, 'hours') > 6) {\n errors.endTime = 'resources.games.validations.invalid_time_check_am_pm'\n }\n }\n\n return errors;\n })\n\n return errors;\n}\n\nconst inputProps = {\n variant: 'outlined',\n margin: 'none',\n fullWidth: true,\n}\n\nconst useIteratorStyles = makeStyles(theme => ({\n form: {\n gridTemplateColumns: `auto repeat(3, ${theme.spacing(16)}px)`,\n },\n action: {\n width: theme.spacing(6)\n }\n}))\n\nconst useStyles = makeStyles(theme => ({\n surface: {\n width: '100%',\n },\n input: {\n width: '100%',\n maxWidth: theme.spacing(16),\n minWidth: theme.spacing(16),\n }\n}))\n\nconst TeamArenasInput = ({ source, ...props }) => {\n const classes = useStyles();\n const iteratorClasses = useIteratorStyles();\n return <ArrayInput source={source} label=\"\" {...inputProps}>\n <SortedFormIterator {...inputProps} classes={iteratorClasses}>\n <SurfaceInput source=\"arenaId\" label=\"resources.teamArenas.fields.arenaId\" {...inputProps} classes={classes.surface} />\n <DayEnumInput source=\"day\" label=\"resources.teamArenas.fields.day\" allowEmpty className={classes.input} />\n <TimeInput source=\"startTime\" label=\"resources.teamArenas.fields.startTime\" className={classes.input} />\n <TimeInput source=\"endTime\" label=\"resources.teamArenas.fields.endTime\" className={classes.input} />\n </SortedFormIterator>\n </ArrayInput>;\n}\n\nexport default ({ onSubmit, onCancel, ...props }) =>\n <SimpleForm component={Fragment} toolbar={<DialogFormToolbar submitLabel=\"ra.action.save\" handleSubmit={onSubmit} onCancel={onCancel} />} save={onSubmit} validate={validate} >\n <TeamArenasInput {...props} />\n </SimpleForm>\n\n\n","import React, { useState } from 'react';\nimport { RecordContextProvider, useListContext, useRefresh, useRecordContext, useTranslate } from 'react-admin';\nimport { Button, Dialog, DialogContent, DialogTitle, useMediaQuery } from '@material-ui/core';\nimport { Edit } from '@material-ui/icons';\n\nimport { apiClient } from '../../http';\n\nimport TeamArenaForm from './TeamArenaForm';\n\nconst EditTeamArenasDialog = ({ title, isOpen, closeModal, ...props }) => {\n const fullScreen = useMediaQuery(theme => theme.breakpoints.down('sm'));\n const refresh = useRefresh();\n const translate = useTranslate();\n const record = useRecordContext();\n const { data } = useListContext();\n const teamArenas = Object.values(data);\n\n const onSubmit = async (values = {}) => {\n const arenas = (values?.teamArenas || []).map((teamArena, index) => ({\n ...teamArena,\n id: teamArena.id || undefined,\n teamId: record.id,\n order: index + 1\n }))\n\n if (record.id) {\n await apiClient(`/teams/${record.id}/teamArenas`, {\n method: 'PATCH',\n data: { arenas },\n })\n refresh()\n }\n\n closeModal()\n }\n\n const onCancel = () => {\n closeModal();\n }\n\n return <Dialog open={isOpen} maxWidth=\"md\" fullWidth fullScreen={fullScreen}>\n <DialogTitle>{translate('resources.teamArenas.actions.edit')}</DialogTitle>\n <DialogContent>\n <RecordContextProvider value={{ teamArenas }}>\n <TeamArenaForm source=\"teamArenas\" onSubmit={onSubmit} onCancel={onCancel} />\n </RecordContextProvider>\n </DialogContent>\n </Dialog>\n}\n\nexport const EditTeamArenasButton = ({ size, variant, ...props }) => {\n const [ isOpen, setOpen ] = useState(false);\n const translate = useTranslate();\n return <>\n <Button color=\"primary\" startIcon={<Edit />} size={size} variant={variant} onClick={() => setOpen(true)}>\n {translate('resources.teamArenas.actions.edit')}\n </Button>\n <EditTeamArenasDialog isOpen={isOpen} closeModal={() => setOpen(false)} {...props} />\n </>\n}\n","import React from 'react';\nimport { useRecordContext } from 'react-admin';\n\nimport ListCard from '../../../common/cards/ListCard';\nimport { isAuthorized } from '../../../common/Authorize';\n\nimport { TeamArenasGrid } from '../../teamArenas/TeamArenaGrid';\nimport { EditTeamArenasButton } from '../../teamArenas/TeamArenaModal';\nimport { SurfaceIcon } from '../../icons';\n\nexport default props => {\n const team = useRecordContext(props);\n\n const showSettings = isAuthorized(team, 'teamArenas', 'show');\n const canEditSettings = isAuthorized(team, 'teamArenas', 'edit');\n\n const addButton = canEditSettings && <EditTeamArenasButton />;\n\n if (!showSettings) return null;\n return <ListCard\n {...props}\n title=\"resources.teamArenas.labels.card.title\"\n subtitle=\"resources.teamArenas.labels.card.subtitle\"\n icon={<SurfaceIcon />}\n collapsable\n reference=\"teamArenas\"\n target=\"teams\"\n source=\"id\"\n sort={{ field: 'order', order: 'ASC' }}\n addButton={addButton}\n >\n <TeamArenasGrid />\n </ListCard>\n}\n","import React from 'react';\nimport { useRecordContext } from 'react-admin';\nimport { VerifiedUserOutlined } from '@material-ui/icons';\n\nimport ListCard from '../../../common/cards/ListCard';\nimport { isAuthorized } from '../../../common/Authorize';\n\nimport { RoleGrid } from '../../roles/RoleGrid';\nimport { AddRoleButton } from '../../roles/RoleModal';\n\nexport default props => {\n const team = useRecordContext(props);\n\n const showRoles = isAuthorized(team, 'permissions', 'list', true)\n const canAddRoles = isAuthorized(team, 'permissions', 'create', true)\n\n if (!showRoles) return null;\n return <ListCard\n title=\"resources.permissions.labels.card.title\"\n subtitle=\"resources.permissions.labels.card.subtitles.team\"\n icon={<VerifiedUserOutlined />}\n collapsable\n reference=\"permissions\"\n target=\"teams\"\n sort={{ field: 'roleId', order: 'ASC' }}\n addButton={canAddRoles && <AddRoleButton initialValues={{ principalType: 'Participant', targetType: 'Team', targetId: team?.id }} />}\n >\n <RoleGrid showOffice={false} />\n </ListCard>\n}\n","import React from 'react';\nimport { useRecordContext } from 'react-admin';\nimport { NotificationsOutlined } from '@material-ui/icons';\n\nimport ListCard from '../../../common/cards/ListCard';\nimport { isAuthorized } from '../../../common/Authorize';\n\nimport { NotificationGrid } from '../../notifications/NotificationGrid';\nimport { AddNotificationButton } from '../../notifications/NotificationModal';\n\nexport default props => {\n const team = useRecordContext(props);\n\n const showNotifications = isAuthorized(team, 'notifications', 'list', true)\n const canAddNotifications = isAuthorized(team, 'notifications', 'create', true)\n\n if (!showNotifications) return null;\n return <ListCard\n title=\"resources.notifications.labels.card.title\"\n subtitle=\"resources.notifications.labels.card.subtitles.team\"\n icon={<NotificationsOutlined />}\n collapsable\n reference=\"notifications\"\n target=\"teams\"\n sort={{ field: 'targetType', order: 'ASC' }}\n addButton={canAddNotifications && <AddNotificationButton initialValues={{ targetType: 'Team', targetId: team?.id }} />}\n >\n <NotificationGrid />\n </ListCard>\n}\n","import React from 'react';\nimport { useTranslate } from 'react-admin';\nimport { Gavel } from '@material-ui/icons';\n\n\nimport ListCard from '../../../common/cards/ListCard';\nimport { SuspensionStatusInput } from '../../../common/inputs/EnumInputs';\nimport { SuspensionGrid } from '../../scoresheet/suspension/SuspensionGrid';\nimport { ParticipantInput } from '../../participants/ParticipantInput';\nimport { CategoryInput } from '../../categories/CategoryInput';\n\nexport default props => {\n const translate = useTranslate();\n\n const filters = [\n <ParticipantInput source=\"participantId\" variant=\"outlined\" />,\n <CategoryInput source=\"game.categoryId\" label=\"resources.games.fields.categoryId\" variant=\"outlined\" />,\n <SuspensionStatusInput source=\"status\" variant=\"outlined\" multiple />,\n ]\n\n return <ListCard\n title={translate(\"resources.suspensions.name\", 2)}\n icon={<Gavel />}\n basePath=\"/suspensions\"\n reference=\"suspensions\"\n target=\"teamId\"\n sort={{ field: ['game.date', 'participant.lastName', 'participant.firstName'], order: ['DESC', 'ASC', 'ASC'] }}\n filters={filters}\n {...props}\n >\n <SuspensionGrid multipleGames hideTeam rowOptions={{ isRowSelectable: () => false }} />\n </ListCard>\n}\n","import React from 'react';\nimport { useRecordContext, useTranslate } from 'react-admin';\nimport { SportsOutlined } from '@material-ui/icons';\n\nimport { isLegacyRulebookSeason } from '@hisports/scoresheet/src/util';\n\nimport ListCard from '../../../common/cards/ListCard';\n\nimport { GamePenaltyGrid } from '../../gamepenalties/GamePenaltyGrid';\nimport { ParticipantInput } from '../../participants/ParticipantInput';\nimport { CategoryInput } from '../../categories/CategoryInput';\n\nexport default props => {\n const team = useRecordContext(props);\n const translate = useTranslate();\n\n const isLegacy = isLegacyRulebookSeason(team?.seasonId);\n\n const filters = [\n <ParticipantInput source=\"participantId\" variant=\"outlined\" />,\n <CategoryInput source=\"game.categoryId\" label=\"resources.games.fields.categoryId\" variant=\"outlined\" />,\n ]\n\n return <ListCard\n title={translate('resources.gamepenalties.name', 2)}\n icon={<SportsOutlined />}\n basePath=\"/gamepenalties\"\n reference=\"gamepenalties\"\n target=\"teamId\"\n filter={{ _options: { includeMeta: isLegacy } }}\n sort={{ field: ['game.date', 'participant.lastName', 'participant.firstName'], order: ['DESC', 'ASC', 'ASC'] }}\n filters={filters}\n {...props}\n >\n <GamePenaltyGrid seasonId={team?.seasonId} multipleGames hideTeam rowOptions={{ isRowSelectable: () => false }} />\n </ListCard>\n}\n","import React from 'react';\nimport { Pagination, useRecordContext } from 'react-admin';\nimport { SupervisorAccount } from '@material-ui/icons';\n\nimport ListCard from '../../../common/cards/ListCard';\nimport { isAuthorized } from '../../../common/Authorize';\n\nimport { AssignTargetGrid } from '../../assignTargets/AssignTargetGrid';\nimport { AddAssignTargetButton } from '../../assignTargets/AssignTargetModal';\n\nexport default props => {\n const team = useRecordContext(props);\n\n const canAddOverride = isAuthorized(team, 'assignTargets', 'create', true)\n return <ListCard\n title=\"resources.assignTargets.labels.card.title\"\n subtitle=\"resources.assignTargets.labels.card.subtitle\"\n icon={<SupervisorAccount />}\n collapsable\n reference=\"assignTargets\"\n target=\"targetId\"\n filter={{ targetType: 'Team' }}\n sort={{ field: 'id', order: 'ASC' }}\n pagination={<Pagination />}\n addLabel={false}\n addButton={canAddOverride && <AddAssignTargetButton initialValues={{ targetType: 'Team', targetId: team?.id }} />}\n >\n <AssignTargetGrid rowClick={false} />\n </ListCard>\n}\n","import React from 'react';\nimport { Card, CardContent, Grid } from '@material-ui/core'\nimport { useFormState } from 'react-final-form';\nimport { useTranslate, useLocale } from 'react-admin';\n\nimport { translateApiProperty } from '@hisports/common';\n\nimport { ScheduleTypeEnumInput } from '../../common/inputs/EnumInputs';\nimport { SeasonFilter, useSeason } from '../../common/inputs/SeasonSelector';\nimport AutocompleteInput from '../../common/inputs/AutocompleteInput';\n\nimport { OfficeInput } from '../../resources/offices/OfficeInput';\nimport { ParticipantInput } from '../../resources/participants/ParticipantInput';\nimport { TeamInput } from '../../resources/teams/TeamInput';\nimport { ScheduleInput } from '../../resources/schedules/ScheduleInput';\nimport { CategoryInput } from '../../resources/categories/CategoryInput';\n\nconst inputProps = {\n variant: 'outlined',\n margin: 'normal',\n allowEmpty: true,\n fullWidth: true\n}\n\nconst TopFilters = ({ reports, hideOffice, hideParticipant, hideTeam, ...props }) => {\n const translate = useTranslate();\n const locale = useLocale();\n const seasonId = useSeason();\n const { values } = useFormState();\n const { reportId } = values;\n\n const report = reports.find(report => report.id === reportId);\n const isPlayerReport = report && report.targetType === 'Participant'\n const isTeamReport = report && report.targetType === 'Team'\n const isLeagueReport = report && report.targetType === 'Office'\n\n return <>\n <Grid item xs={12} md={4}>\n <AutocompleteInput\n source=\"reportId\"\n label=\"resources.reports.name\"\n choices={reports}\n groupBy={report => translate(`resources.reports.values.types.${report.type}`)}\n optionText={report => translateApiProperty(report, 'name', locale)}\n {...inputProps}\n />\n </Grid>\n {isLeagueReport && !hideOffice && <Grid item xs={12} md={4}>\n <OfficeInput\n source=\"officeId\"\n label=\"resources.offices.name\"\n filter={{ _scope: 'Reports' }}\n perPage={100}\n {...inputProps}\n />\n </Grid>}\n {isPlayerReport && !hideParticipant && <Grid item xs={12} md={4}>\n <ParticipantInput\n source=\"participantId\"\n label=\"resources.participants.name\"\n filter={{ _scope: 'Reports' }}\n {...inputProps}\n />\n </Grid>}\n {isTeamReport && !hideTeam && <Grid item xs={12} md={4}>\n <TeamInput\n source=\"teamId\"\n label=\"resources.teams.name\"\n filter={{ seasonId, _scope: 'Reports' }}\n {...inputProps}\n />\n </Grid>}\n </>\n}\n\nconst OptionalFilters = ({ reports, ...props }) => {\n const { values } = useFormState();\n const { reportId, officeId, scheduleType } = values;\n\n const report = reports.find(report => report.id === reportId);\n const isLeagueReport = report && report.targetType === 'Office'\n\n return <>\n <Grid item xs={12} md={4}>\n <ScheduleTypeEnumInput\n source=\"scheduleType\"\n label=\"resources.schedules.fields.scheduleType\"\n helperText=\"ra.message.optional\"\n {...inputProps} />\n </Grid>\n <Grid item xs={12} md={4}>\n <ScheduleInput\n source=\"scheduleId\"\n label=\"resources.schedules.name\"\n filter={{ effectiveOffices: officeId, type: scheduleType }}\n helperText=\"ra.message.optional\"\n {...inputProps}\n />\n </Grid>\n {isLeagueReport && <Grid item xs={12} md={4}>\n <CategoryInput\n source=\"categoryIds\"\n label=\"resources.categories.name\"\n multiple\n officeId={officeId}\n helperText=\"ra.message.optional\"\n {...inputProps}\n />\n </Grid>}\n </>\n}\n\nconst ReportFilters = ({\n reports,\n component: Component = Card,\n componentContent: ComponentContent = CardContent,\n groupFilters = true,\n hideOffice = false,\n hideParticipant = false,\n hideTeam = false,\n}) => {\n return <Component>\n <ComponentContent>\n <SeasonFilter source=\"seasonId\" />\n {groupFilters ?\n <>\n <Grid container spacing={2} fullWidth>\n <TopFilters reports={reports} hideOffice={hideOffice} hideParticipant={hideParticipant} hideTeam={hideTeam} />\n </Grid>\n <Grid container spacing={2} fullWidth>\n <OptionalFilters reports={reports} />\n </Grid>\n </>\n :\n <Grid container spacing={2} fullWidth>\n <TopFilters reports={reports} hideOffice={hideOffice} hideParticipant={hideParticipant} hideTeam={hideTeam} />\n <OptionalFilters reports={reports} />\n </Grid>\n }\n </ComponentContent>\n </Component>\n}\n\nexport default ReportFilters;\n","import React, { useState, useEffect } from 'react';\nimport { Card, CardContent, makeStyles } from '@material-ui/core'\nimport { useVersion } from 'react-admin';\nimport Iframe from 'react-iframe';\nimport { useFormState } from 'react-final-form';\nimport { useSelector } from 'react-redux';\n\nimport { apiClient } from '../../http';\n\nconst useStyles = makeStyles(theme => ({\n root: {\n marginTop: theme.spacing(2),\n },\n frame: {\n overflow: 'hidden',\n position: 'inherit',\n display: 'block',\n height: '95vh',\n width: '100%',\n border: 0,\n }\n}))\n\nconst ReportFrame = ({ reports }) => {\n const classes = useStyles();\n const version = useVersion();\n const [ reportUrl, setReportUrl ] = useState(null);\n const [ frameUrl, setFrameUrl ] = useState(null);\n const [ loading, setLoading ] = useState(false);\n const [ error, setError ] = useState(null);\n\n const { values = {} } = useFormState();\n const { reportId, officeId, seasonId, participantId, teamId, scheduleType, scheduleId, categoryIds } = values;\n\n const office = useSelector(state => officeId && state.admin?.resources?.offices?.data[officeId])\n\n useEffect(() => {\n const getUrl = () => {\n if (!reportId) return null;\n const report = reports.find(report => report.id === reportId);\n if (!report) return null;\n\n const params = [];\n if (seasonId) params.push(`seasonId=${seasonId}`)\n if (scheduleType) params.push(`scheduleType=${scheduleType}`)\n if (scheduleId) params.push(`scheduleId=${scheduleId}`)\n\n if (report.targetType === 'Office') {\n if (categoryIds?.length) params.push(...categoryIds.map(categoryId => `categoryIds[]=${categoryId}`))\n if (!officeId) return null;\n params.push(`targetId=${officeId}`)\n } else if (report.targetType === 'Team') {\n if (!teamId) return null;\n params.push(`targetId=${teamId}`)\n } else if (report.targetType === 'Participant') {\n if (!participantId) return null;\n params.push(`targetId=${participantId}`)\n } else {\n return null;\n }\n\n return `/reports/${reportId}/generateReport?${params.join('&')}`\n }\n setReportUrl(getUrl())\n }, [ reports, reportId, officeId, seasonId, participantId, teamId, scheduleType, scheduleId, categoryIds ])\n\n useEffect(() => {\n setFrameUrl(null);\n\n if (!reportUrl) return\n setLoading(true)\n apiClient(reportUrl, { method: 'POST' })\n .then(res => res ? res.data : null)\n .then(url => {\n setFrameUrl(url);\n setError(null);\n })\n .catch(res => {\n setFrameUrl(null);\n const status = res?.response?.status;\n setError(status || true)\n })\n .finally(() => {\n setLoading(false);\n })\n }, [ reportUrl, version ])\n\n let message;\n if (loading) {\n message = 'Generating report...'\n } else if (error === 403) {\n const report = reports.find(r => r.id === reportId);\n if (report) {\n message = 'This report is not available for this '\n switch (report.targetType) {\n case 'Team':\n message += 'team.';\n break;\n case 'Participant':\n message += \"player's association.\";\n break;\n case 'Office':\n default: {\n let type = office?.type?.toLowerCase() || 'office';\n if (type === 'Administrative') {\n type = 'office';\n }\n message += `${type}.`;\n break;\n }\n }\n } else {\n message = 'This report is not available.'\n }\n } else if (error) {\n const code = error !== true ? ` (${error})` : '';\n message = `Something went wrong while loading this report${code}. You may need to try again later.`\n }\n\n if (message) {\n return <Card className={classes.root}>\n <CardContent>\n {message}\n </CardContent>\n </Card>\n }\n\n if (!frameUrl) return null;\n return <Card className={classes.root}>\n <Iframe url={`${frameUrl}#bordered=false&titled=false`} className={classes.frame} />\n </Card>\n}\n\nexport default ReportFrame;\n","import React, { Fragment, useEffect, useState } from 'react';\nimport { useTranslate } from 'react-admin';\nimport { makeStyles } from '@material-ui/core';\n\nimport { apiClient } from '../../http';\nimport ListCard from '../../common/cards/ListCard';\nimport { Form } from 'react-final-form';\nimport ReportFilters from '../../routes/Reports/ReportFilters';\nimport ReportFrame from '../../routes/Reports/ReportFrame';\nimport { TrendingUp } from '@material-ui/icons';\n\nconst useStyles = makeStyles({\n cardContent: {\n padding: '8px',\n }\n})\n\nconst validate = values => {\n const errors = {};\n\n if (!values.reportId) errors.reportId = 'ra.validation.required'\n\n return errors;\n}\n\nexport default ({ collapsable = true, targetType, officeId, participantId, teamId, ...props }) => {\n const [ loading, setLoading ] = useState(true);\n const [ error, setError ] = useState(null);\n const [ reports, setReports ] = useState([]);\n const [ groupFilters, setGroupFilters ] = useState(false)\n const translate = useTranslate();\n const classes = useStyles()\n\n useEffect(() => {\n setLoading(true);\n apiClient(`/reports`, { params: { filter: {\n where: {\n targetType,\n } } } })\n .then(res => res.data)\n .catch(err => {\n setError(err?.response?.status || -1)\n return []\n })\n .then(setReports)\n .finally(() => {\n setLoading(false);\n })\n }, [ targetType ])\n\n let message;\n if (loading) {\n message = translate('ra.page.loading')\n } else if (error && error !== 403) {\n message = translate('resources.reports.messages.error', { error })\n } else if (!reports.length) {\n message = translate('resources.reports.messages.empty')\n }\n\n return <Form\n initialValues={{ officeId, participantId, teamId }}\n onSubmit={() => {}}\n validate={validate}\n render={({ handleSubmit, ...props }) => {\n return <ListCard\n title={translate('resources.reports.name', 2)}\n icon={<TrendingUp />}\n reference=\"reports\"\n collapsable={collapsable}\n expandable\n onExpand={() => setGroupFilters(!groupFilters)}\n dialogProps={{ fullHeight: true }}\n base={Fragment}\n >\n <div className={classes.cardContent}>\n {message}\n {reports?.length > 0 &&\n <form onSubmit={handleSubmit}>\n <ReportFilters\n reports={reports}\n component={Fragment}\n componentContent={Fragment}\n groupFilters={groupFilters}\n hideOffice={targetType === 'Office'}\n hideParticipant={targetType === 'Participant'}\n hideTeam={targetType === 'Team'}\n />\n <ReportFrame reports={reports} />\n </form>\n }\n </div>\n </ListCard>\n }}\n />\n}\n","import React from 'react';\nimport { useRecordContext } from 'react-admin'\nimport { Grid } from '@material-ui/core';\n\n\nimport { useScopes } from '../../http';\nimport { isAuthorized } from '../../common/Authorize';\nimport { TabbedShowLayout, Tab } from '../../common/ra/TabbedShowLayout';\n\nimport AvailabilityCard from '../availabilities/AvailabilityCard';\nimport { useBranchSettings } from '../branchOfficeSettings';\n\nimport TeamCard from './cards/TeamCard';\nimport RosterCard from './cards/RosterCard';\nimport SchedulesCard from './cards/SchedulesCard';\nimport EventsCard from './cards/EventsCard';\nimport TeamArenasCard from './cards/TeamArenasCard';\nimport RolesCard from './cards/RolesCard';\nimport NotificationsCard from './cards/NotificationsCard';\nimport SuspensionsCard from './cards/SuspensionsCard';\nimport GamePenaltiesCard from './cards/GamePenaltiesCard';\nimport AssignTargetsCard from './cards/AssignTargetsCard';\nimport ReportsCard from '../reports/ReportsCard';\n\nconst SummaryTab = props => {\n const team = useRecordContext(props);\n const scopes = useScopes();\n const { data: branchSettings } = useBranchSettings(team?.officeId)\n\n const canListAvailabilities = isAuthorized(team, 'availabilities', 'list');\n const canEditAvailabilities = isAuthorized(team, 'availabilities', 'edit');\n const showSuspensions = isAuthorized(team, 'suspensions', 'show') && branchSettings?.ff_suspensions;\n const showGamePenalties = isAuthorized(team, 'gamepenalties', 'show')\n const showReports = isAuthorized(scopes, 'reports', 'list');\n\n return <Tab {...props}>\n <Grid container spacing={3}>\n <Grid item xs={12} md={9} lg={6}>\n <TeamCard />\n </Grid>\n {canListAvailabilities && <Grid item xs={12}>\n <AvailabilityCard collapsable editable={canEditAvailabilities} />\n </Grid>}\n {showGamePenalties && <Grid item xs={12}>\n <GamePenaltiesCard collapsable />\n </Grid>}\n {showSuspensions && <Grid item xs={12}>\n <SuspensionsCard collapsable />\n </Grid>}\n {showReports && <Grid item xs={12}>\n <ReportsCard targetType=\"Team\" teamId={team.id} />\n </Grid>}\n </Grid>\n </Tab>\n}\n\nconst RosterTab = props =>\n <Tab {...props}>\n <RosterCard />\n </Tab>\n\nconst ScheduleTab = props => {\n const team = useRecordContext(props);\n if (!isAuthorized(team, 'games', 'list')) return null;\n\n return <Tab {...props}>\n <Grid container spacing={3}>\n <Grid item xs={12}>\n <SchedulesCard />\n </Grid>\n <Grid item xs={12}>\n <EventsCard />\n </Grid>\n </Grid>\n </Tab>\n}\n\nconst SettingsTab = props => {\n const team = useRecordContext(props);\n if (!isAuthorized(team, 'teams', 'settingsTab')) return null;\n\n const showOverrides = isAuthorized(team, 'assignTargets', 'list', true);\n return <Tab {...props}>\n <Grid container spacing={3}>\n <Grid item xs={12}>\n <TeamArenasCard />\n </Grid>\n <Grid item xs={12}>\n <RolesCard />\n </Grid>\n <Grid item xs={12}>\n <NotificationsCard />\n </Grid>\n {showOverrides && <Grid item xs={12}>\n <AssignTargetsCard />\n </Grid>}\n </Grid>\n </Tab>\n}\n\nexport const TeamShowLayout = props =>\n <TabbedShowLayout>\n <SummaryTab label=\"resources.teams.labels.tabs.summary\" />\n <RosterTab label=\"resources.teams.labels.tabs.roster\" path=\"roster\" />\n <ScheduleTab label=\"resources.teams.labels.tabs.schedule\" path=\"schedule\" />\n <SettingsTab label=\"resources.teams.labels.tabs.settings\" path=\"settings\" />\n </TabbedShowLayout>\n","import React from 'react';\nimport { ImageInput, ImageField, useTranslate } from 'react-admin';\nimport { makeStyles } from '@material-ui/core';\n\nconst useStyles = makeStyles(() => ({\n input: {\n width: '256px'\n }\n}));\n\nconst LogoInput = (props) => {\n const classes = useStyles();\n const translate = useTranslate();\n return <ImageInput\n accept=\"image/*\"\n multiple={false}\n placeholder={translate('ra.input.file.drop.logo')}\n classes={{ root: classes.input }}\n {...props}\n >\n <ImageField source=\"url\" />\n </ImageInput>\n}\n\nexport default LogoInput;\n","import React from 'react';\nimport { TextInput, SimpleForm, BooleanInput, useRecordContext, useTranslate } from 'react-admin';\nimport { Grid, makeStyles } from '@material-ui/core'\nimport { Alert } from '@material-ui/lab';\n\nimport { isEmpty } from '@hisports/parsers';\n\nimport { useScopes } from '../../http';\nimport { SeasonInput } from '../../common/inputs/EnumInputs';\nimport Toolbar from '../../common/ra/Toolbar';\nimport LogoInput from '../../common/inputs/LogoInput';\nimport { SyncAlert, useRecordSynced } from '../../common/SyncAlert';\n\nimport { OfficeInput } from '../offices/OfficeInput';\nimport { CategoryInput } from '../categories/CategoryInput';\n\nconst useStyles = makeStyles((theme) => ({\n internal: {\n color: theme.palette.tertiary.main\n }\n}\n));\n\nconst validate = values => {\n const errors = {}\n\n if (!values.name) errors.name = 'ra.validation.required'\n if (!values.HCRId) errors.HCRId = 'ra.validation.required'\n if (!values.seasonId) errors.seasonId = 'ra.validation.required'\n if (!values.categoryId) errors.categoryId = 'ra.validation.required'\n\n if (!values.officeId) errors.officeId = 'ra.validation.required'\n\n return errors;\n}\n\nconst inputProps = {\n resource: 'teams',\n basePath: '/teams',\n variant: 'outlined',\n margin: 'none',\n fullWidth: true,\n}\n\nexport const TeamForm = props => {\n const classes = useStyles();\n const [ isSynced, toggle ] = useRecordSynced(props);\n const scopes = useScopes();\n const record = useRecordContext(props);\n const translate = useTranslate();\n\n const isCreate = isEmpty(record);\n\n const isInternal = scopes.includes('internal');\n\n return <SimpleForm toolbar={<Toolbar isSynced={isSynced} />} validate={validate} {...props}>\n <Grid container spacing={2} fullWidth>\n {isSynced && <Grid item xs={12}>\n <SyncAlert isSynced={isSynced} toggle={toggle} />\n </Grid>}\n\n {isCreate && <Grid item xs={12}>\n <Alert severity=\"warning\">\n {translate('resources.teams.alerts.creating_unsanctioned')}\n </Alert>\n </Grid>}\n\n <Grid item xs={12} md={8}>\n <TextInput source=\"name\" autoFocus disabled={isSynced} {...inputProps} />\n </Grid>\n\n <Grid item xs={12} md={4}>\n <SeasonInput source=\"seasonId\" disabled={isSynced} {...inputProps} />\n </Grid>\n\n <Grid item xs={12} sm={6}>\n <TextInput source=\"HCRId\" disabled={isSynced} {...inputProps} />\n </Grid>\n\n <Grid item xs={12} sm={6}>\n <CategoryInput source=\"categoryId\" disabled={isSynced} {...inputProps} />\n </Grid>\n\n <Grid item xs={12}>\n <OfficeInput source=\"officeId\" filter={{ type: { nin: ['League', 'Tournament', 'Cup', 'Zone', 'Historical'] } }} disabled={isSynced} {...inputProps} />\n </Grid>\n {(!isSynced || isInternal) && <Grid item xs={12}>\n <LogoInput source=\"logo\" {...inputProps} />\n </Grid>}\n {isInternal && <Grid item xs={12}>\n <BooleanInput source=\"isPublic\" label=\"resources.teams.fields.isPublic\" helperText=\"resources.teams.helpers.isPublic\" className={classes.internal} {...inputProps} />\n </Grid>}\n </Grid>\n </SimpleForm>\n}\n","import React from 'react';\nimport { EditButton, ShowButton, useEditContext, useNotify, useRecordContext, useResourceContext, useTranslate } from 'react-admin';\nimport { ListSubheader, ListItemIcon, ListItemText, useTheme } from '@material-ui/core';\nimport { Sync } from '@material-ui/icons';\n\nimport { apiClient } from '../../http';\nimport { isAuthorized } from '../../common/Authorize';\nimport { TopToolbar } from '../../common/cards/Card';\nimport { ActionMenu, ActionMenuItem } from '../../common/ActionMenu';\n\nconst SyncButton = ({ teamId }) => {\n const theme = useTheme()\n const notify = useNotify();\n const translate = useTranslate();\n const purple = theme.palette.tertiary.main;\n\n const handleClick = () => {\n notify('Syncing...', { autoHideDuration: 3 * 1000 }) // 3s\n apiClient(`/teams/${teamId}/sync`, { method: 'POST' })\n }\n return <ActionMenuItem size=\"small\" onClick={handleClick}>\n <ListItemIcon><Sync htmlColor={purple} /></ListItemIcon>\n <ListItemText>{translate(`resources.teams.actions.sync`)}</ListItemText>\n </ActionMenuItem>\n}\n\nconst TeamInternalActions = () => {\n const translate = useTranslate();\n const team = useRecordContext();\n if (!team || team.externalId == null) return null;\n\n return <>\n <ListSubheader>{translate('resources.teams.actions.internal')}</ListSubheader>\n <SyncButton teamId={team.id} />\n </>\n}\n\nexport const TeamActions = ({ hasEdit, hasShow, ...props }) => {\n const resource = useResourceContext(props)\n const { basePath, record: team } = useEditContext(props);\n\n const canEditResource = isAuthorized(team, resource, 'edit');\n const canShowResource = isAuthorized(team, resource, 'show');\n const showInternalActions = isAuthorized(team, 'teams', 'internal', true);\n\n return <TopToolbar>\n {hasEdit && canEditResource && <EditButton basePath={basePath} resource={resource} record={team} />}\n {hasShow && canShowResource && <ShowButton basePath={basePath} resource={resource} record={team} />}\n {showInternalActions && <ActionMenu>\n <TeamInternalActions />\n </ActionMenu>}\n </TopToolbar>\n}\n","import React from 'react';\nimport { useTranslate } from 'react-admin';\nimport { useMediaQuery } from '@material-ui/core';\n\nimport { List, Show, Create, Edit } from '../../common/ra';\nimport { useSeason } from '../../common/inputs/SeasonSelector';\nimport ResourceTitle from '../../common/ResourceTitle';\nimport { ShowHeader } from '../../common/ShowHeader';\nimport { OfficeField } from '../offices/OfficeField';\n\nimport { TeamGrid } from './TeamGrid';\nimport { TeamFilters } from './TeamFilters';\nimport { TeamFilterList } from './TeamFilterList';\nimport { TeamShowLayout } from './TeamShow';\nimport { TeamForm } from './TeamForm';\nimport { TeamActions } from './TeamActions';\n\nexport const TeamList = props => {\n const seasonId = useSeason();\n const isSmall = useMediaQuery(theme => theme.breakpoints.down('sm'));\n return <List {...props}\n aside={!isSmall && <TeamFilterList />}\n filters={isSmall && <TeamFilters />}\n filterDefaultValues={{ seasonId }}\n sort={{\n field: 'name',\n order: 'ASC'\n }}\n resetFilters={isSmall}\n >\n <TeamGrid rowClick=\"show\" />\n </List>\n}\n\nconst getTitle = team => team.name\n\nconst TeamShowHeader = () => {\n const translate = useTranslate()\n return <ShowHeader\n name={team => team.name}\n type={team => translate('resources.teams.name', { smart_count: 1 })}\n description={team => <OfficeField source=\"officeId\" variant=\"inherit\" />}\n />\n}\n\nexport const TeamShow = props =>\n <Show {...props}\n title={<TeamShowHeader />}\n actions={<TeamActions />}\n >\n <TeamShowLayout />\n </Show>\n\nexport const TeamCreate = props => {\n const translate = useTranslate();\n return <Create\n title={<ResourceTitle title={record => translate('resources.teams.labels.add')} />}\n {...props}\n >\n <TeamForm redirect=\"show\" />\n </Create>\n}\n\nexport const TeamEdit = props => {\n const translate = useTranslate();\n return <Edit\n title={<ResourceTitle title={record => translate('ra.page.editing', { name: getTitle(record) })} />}\n {...props}\n >\n <TeamForm redirect=\"show\" />\n </Edit>\n}\n","import React from 'react';\nimport { useTheme } from '@material-ui/core';\nimport { SupervisorAccountOutlined } from '@material-ui/icons';\n\nimport StatusChip from './StatusChip';\n\nexport const SMAChip = () => {\n const theme = useTheme();\n\n return <StatusChip\n themeColor={theme.palette.lightBlue}\n tooltipText=\"components.login.tooltips.sso\"\n label=\"components.login.chip.sso\"\n icon={SupervisorAccountOutlined}\n />\n}\n","import React from 'react';\nimport { Datagrid, TextField } from 'react-admin';\n\nimport { dedupe } from '@hisports/parsers';\n\nimport FunctionField from '../../common/fields/FunctionField'\nimport { SMAChip } from '../../common/chips/SMAChip';\nimport { NameWithStatusesField } from '../../common/fields/NameWithStatusesField';\nimport { makeStyles } from '@material-ui/core';\n\nconst useStyles = makeStyles((theme) => ({\n group: {\n display: 'flex',\n alignItems: 'center',\n gap: theme.spacing(1),\n },\n}));\n\nexport const ParticipantGrid = ({ ids, ...props }) => {\n return <Datagrid size=\"medium\" ids={dedupe(ids)} rowClick=\"show\">\n <NameWithStatusesField source=\"fullName\" />\n <TextField source=\"HCRId\" />\n <FunctionField source=\"accounts.email\" label=\"resources.participants.fields.accountEmail\" render={participant => <ParticipantAccountEmail participant={participant} />} />\n </Datagrid>\n};\n\nconst ParticipantAccountEmail = ({ participant }) => {\n const classes = useStyles();\n\n const identity = participant?.identities?.find(identity => identity.isPrimary);\n const accountId = identity?.accountId;\n const account = participant?.accounts?.find(account => account.id === accountId);\n\n return account?.externalId\n ? <div className={classes.group}>\n <span>{account?.email}</span>\n <SMAChip />\n </div>\n : <span>{account?.email}</span>\n}\n","import React from 'react';\nimport { Filter, TextInput, useTranslate } from 'react-admin';\n\nexport const ParticipantFilters = props => {\n const translate = useTranslate();\n\n return <Filter variant=\"outlined\" {...props}>\n <TextInput source=\"name\" alwaysOn />\n <TextInput source=\"HCRId\" alwaysOn />\n <TextInput source=\"email\" label={translate('resources.participants.fields.accountEmail')} alwaysOn />\n </Filter>\n}\n","import { useState } from 'react';\nimport { useQuery, GET_LIST, GET_MANY_REFERENCE } from 'react-admin';\n\nimport { GAME_OFFICE_TYPES } from '@hisports/common/src/constants';\n\nexport const useOffices = () => useQuery({\n type: GET_LIST,\n resource: 'offices',\n payload: {\n filter: {\n type: { nin: [...GAME_OFFICE_TYPES, 'Historical'] },\n isAssigner: true,\n _include: [{ relation: 'parent', scope: { fields: ['name'], scope: 'Tenant' } }],\n _scope: 'Tenant',\n },\n pagination: { page: 0, perPage: 9999 },\n sort: { field: ['parent.name', 'name'], order: ['ASC', 'ASC'] },\n }\n});\n\nexport function useOfficeSelection(participantId) {\n const [ selection, setSelection ] = useState([]);\n\n const { data = [], ...props } = useQuery({\n type: GET_MANY_REFERENCE,\n resource: 'officialOffices',\n payload: {\n target: 'participants',\n id: participantId,\n pagination: { page: 0, perPage: 9999 },\n filter: {},\n }\n }, {\n enabled: participantId != null,\n onSuccess({ data }) {\n const officeIds = data.map(relation => relation.officeId);\n setSelection(officeIds);\n }\n })\n\n return { selection, ...props }\n}\n","import { useQueryWithStore, GET_LIST } from \"react-admin\";\nimport { useSelector } from \"react-redux\";\nimport moment from \"moment\";\n\nimport { useSeason } from \"../../common/inputs/SeasonSelector\";\n\nexport const useQualificationsWithSettings = (participantId) => {\n const seasonId = useSeason();\n const startOfToday = moment().startOf(\"day\").toISOString();\n\n const query = {\n type: GET_LIST,\n resource: 'qualifications',\n payload: {\n pagination: { page: 1, perPage: 100 },\n sort: { field: 'seasonId', order: 'DESC' },\n filter: {\n participantId,\n qualificationCategory: {\n types: { inq: ['Official', 'Scorekeeper'] }\n },\n or: [\n { seasonId },\n { expiry: { gte: startOfToday } },\n { expiry: { eq: null } }\n ],\n _include: [{\n relation: 'office',\n scope: {\n scope: 'Tenant',\n include: 'branchSettings',\n },\n }],\n }\n }\n };\n\n const queryKey = JSON.stringify(query);\n const cachedQualifications = useSelector(state => state.admin.customQueries[queryKey]?.data);\n\n const { data, loading, loaded, error } = useQueryWithStore(query, {\n enabled: !cachedQualifications && !!participantId,\n action: 'CUSTOM_QUERY'\n });\n\n return {\n data: cachedQualifications || data,\n loaded: !!cachedQualifications || loaded,\n loading,\n error\n };\n};\n","import React, { useMemo } from 'react';\nimport { useRecordContext, useTranslate } from 'react-admin';\nimport { DialogTitle as MuiDialogTitle, DialogContent as MuiDialogContent, DialogContentText, List, ListItem, ListItemText, ListItemSecondaryAction, IconButton, styled, Chip, Typography } from '@material-ui/core'\nimport { Clear } from '@material-ui/icons';\nimport { Alert, AlertTitle } from '@material-ui/lab';\nimport { useForm, useFormState } from 'react-final-form';\nimport { orderBy } from 'lodash'\n\nimport AutocompleteInput from '../../../common/inputs/AutocompleteInput';\nimport { useIsOwnParticipant } from '../../../common/hooks/hooks';\nimport { useQualificationsWithSettings } from '../useQualificationsWithSettings';\nimport { isAuthorized } from '../../../common/Authorize';\n\nconst DialogTitle = styled(MuiDialogTitle)({\n position: 'sticky',\n top: 0,\n background: 'white',\n zIndex: 10,\n})\n\nconst DialogContent = styled(MuiDialogContent)({\n paddingTop: 0,\n})\n\nconst NewChip = styled(Chip)(({ theme }) => ({\n color: theme.palette.success[500],\n borderColor: theme.palette.success[500],\n backgroundColor: theme.palette.success[50],\n marginLeft: theme.spacing(1),\n height: theme.spacing(2.5),\n}))\n\nconst AssignerSelectionAlert = ({ allOrgsAllowAssignerSelection = false, noOrgsAllowAssignerSelection = false }) => {\n const translate = useTranslate();\n\n if (allOrgsAllowAssignerSelection) return null;\n\n const title = noOrgsAllowAssignerSelection\n ? 'resources.participants.alerts.no_assigner_selection_title'\n : 'resources.participants.alerts.limited_assigner_selection_title';\n\n const message = noOrgsAllowAssignerSelection\n ? 'resources.participants.alerts.no_assigner_selection_message'\n : 'resources.participants.alerts.limited_assigner_selection_message';\n\n return <Alert severity=\"warning\">\n <AlertTitle>{translate(title)}</AlertTitle>\n {translate(message)}\n </Alert>\n}\n\nconst Office = ({ office, initialSelected = false, canEdit = false }) => {\n const translate = useTranslate();\n const { mutators } = useForm();\n const { values: { officeIds } } = useFormState();\n\n const removeOffice = () => {\n if (!canEdit) return;\n const index = officeIds.findIndex(value => value === office.id);\n mutators.remove('officeIds', index);\n }\n\n return <ListItem dense component=\"li\">\n <ListItemText\n primary={<>\n <Typography variant=\"inherit\">{office?.name || translate('ra.message.unknown')}</Typography>\n {!initialSelected && <NewChip size=\"small\" label={translate('ra.action.new')} />}\n </>}\n secondary={office?.parent?.name}\n />\n {canEdit && <ListItemSecondaryAction>\n <IconButton edge=\"end\" onClick={removeOffice}>\n <Clear />\n </IconButton>\n </ListItemSecondaryAction>}\n </ListItem>\n}\n\nconst Selection = ({ offices = [], excludedIds = [], canEdit = false, isAssigner = false }) => {\n const translate = useTranslate();\n const isOwnParticipant = useIsOwnParticipant();\n const { values: { officeIds }, initialValues } = useFormState();\n\n if (!officeIds?.length) {\n return <Alert severity=\"error\">\n <AlertTitle>{translate('resources.participants.alerts.availability.no_associations.title')}</AlertTitle>\n <p>{translate(`resources.participants.alerts.availability.no_associations.${isOwnParticipant ? 'own_profile' : 'other_profile'}.search_make_yourself_available`)}</p>\n <p>{translate(`resources.participants.alerts.availability.no_associations.${isOwnParticipant ? 'own_profile' : 'other_profile'}.not_available_to_assigners`)}</p>\n </Alert>\n }\n\n let selection = officeIds.map(officeId => offices.find(office => office.id === officeId)).filter(Boolean)\n selection = orderBy(selection, ['parent.name', 'name'])\n\n const initialSelection = initialValues?.officeIds || [];\n\n return <List>\n {selection.map(office => {\n const initialSelected = initialSelection.includes(office.id);\n const isEditable = (canEdit && !excludedIds.includes(office.id)) || isAssigner;\n return <Office office={office} initialSelected={initialSelected} canEdit={isEditable} />\n })}\n </List>\n}\n\nconst OfficesForm = ({ participantId, offices }) => {\n const translate = useTranslate();\n const { data: qualifications = [] } = useQualificationsWithSettings(participantId);\n const isOwnParticipant = useIsOwnParticipant(participantId);\n const record = useRecordContext();\n\n const isAssigner = isAuthorized(record, 'officialAvailabilities', 'assigners');\n\n const allOrgsAllowAssignerSelection = useMemo(() => (\n qualifications?.length > 1 ? qualifications.every(q => q.office?.branchSettings?.allowOfficialSetAssignOffices) : true\n ), [qualifications]);\n\n const noOrgsAllowAssignerSelection = useMemo(() => (\n qualifications?.length > 1 ? qualifications.every(q => !q.office?.branchSettings?.allowOfficialSetAssignOffices) : false\n ), [qualifications]);\n\n const includedOfficeIds = useMemo(() => (\n qualifications.filter(q => q.office?.branchSettings?.allowOfficialSetAssignOffices).map(q => q.office?.branchSettings?.branchOfficeId)\n ), [qualifications]);\n\n const canEditAssignerSelection = (isOwnParticipant && !noOrgsAllowAssignerSelection) || isAuthorized(record, 'officialAvailabilities', 'assigners');\n\n const excludedIds = offices.filter(office => {\n const paths = office.path.split('.').map(Number);\n return !includedOfficeIds.some(officeId => paths.includes(officeId));\n }).map(office => office.id);\n\n return <>\n {isOwnParticipant && <AssignerSelectionAlert allOrgsAllowAssignerSelection={allOrgsAllowAssignerSelection} noOrgsAllowAssignerSelection={noOrgsAllowAssignerSelection} />}\n {canEditAssignerSelection && <AutocompleteInput\n choices={offices}\n getOptionDisabled={office => !isAssigner && excludedIds.includes(office.id)}\n source=\"officeIds\"\n label=\"resources.participants.labels.availability.add_associations\"\n placeholder=\"resources.participants.messages.availability.search_by_association\"\n emptyOptionsText=\"resources.participants.messages.availability.enter_name_search\"\n multiple\n hideDisabled\n disableClearable\n minFilterLength={3}\n groupBy={office => office.parent?.name || translate('ra.message.unknown')}\n variant=\"outlined\"\n margin=\"normal\"\n fullWidth\n disableRemove\n renderTags={() => null}\n />}\n <Selection offices={offices} excludedIds={excludedIds} canEdit={canEditAssignerSelection} isAssigner={isAssigner} />\n </>\n}\n\nexport const OfficeList = ({ participantId, offices }) => {\n const translate = useTranslate();\n const isOwnParticipant = useIsOwnParticipant(participantId);\n\n return <>\n <DialogTitle>{translate(`resources.participants.labels.availability.assigner_availabilities.${isOwnParticipant ? 'own_profile' : 'other_profile'}.title`)}</DialogTitle>\n <DialogContent>\n <DialogContentText>\n {translate(`resources.participants.labels.availability.assigner_availabilities.${isOwnParticipant ? 'own_profile' : 'other_profile'}.select_associations`)}\n </DialogContentText>\n <OfficesForm participantId={participantId} offices={offices} />\n </DialogContent>\n </>\n}\n","import React, { Fragment, useState } from 'react';\nimport { useTranslate, SimpleForm, useNotify } from 'react-admin';\nimport { Dialog, Button, CircularProgress, DialogActions, ListItemIcon, ListItemText } from '@material-ui/core';\nimport { Alert } from '@material-ui/lab';\nimport arrayMutators from 'final-form-arrays'\nimport { useFormState } from 'react-final-form';\n\nimport { ActionMenuItem } from '../../../common/ActionMenu';\nimport { useIsOwnParticipant } from '../../../common/hooks/hooks';\nimport { apiClient } from '../../../http';\nimport { OfficeIcon } from '../../icons';\n\nimport { useOffices, useOfficeSelection } from './offices';\nimport { OfficeList } from './OfficeList';\n\nconst Toolbar = ({ handleSubmit, onClose }) => {\n const translate = useTranslate();\n const { submitting } = useFormState();\n\n return <DialogActions>\n <Button onClick={onClose}>{translate('ra.action.cancel')}</Button>\n <Button type=\"submit\" color=\"primary\" onClick={handleSubmit} disabled={submitting}>\n {!submitting ? translate('ra.action.save') : translate('resources.participants.labels.availability.saving')}\n </Button>\n </DialogActions>\n}\n\nconst OfficialAssignersForm = ({ onClose, participantId }) => {\n const notify = useNotify();\n const translate = useTranslate();\n const { data: offices = [], loaded: officesLoaded, error: officesError } = useOffices();\n const { selection, loaded: selectionLoaded, error: selectionError } = useOfficeSelection(participantId);\n\n if (officesError || selectionError) {\n return <Alert severity=\"error\">{translate('ra.page.error_try_again')}</Alert>\n }\n\n if (!officesLoaded || !selectionLoaded) {\n return <Alert severity=\"info\" icon={<CircularProgress color=\"secondary\" size={22} />}>{translate('ra.page.loading')}</Alert>\n }\n\n const handleSave = async values => {\n const { officeIds } = values;\n\n try {\n await apiClient(`/participants/${participantId}/officialSettings`, {\n method: 'PATCH',\n data: {\n officeIds,\n },\n })\n\n notify('resources.participants.labels.availability.assigners_updated', 'success');\n } catch (error) {\n notify('resources.participants.labels.availability.assigners_error', 'error');\n }\n\n onClose();\n }\n\n return <SimpleForm mutators={arrayMutators} component={Fragment} toolbar={<Toolbar onClose={onClose} />} fullWidth save={handleSave} initialValues={{ officeIds: selection }}>\n <OfficeList participantId={participantId} offices={offices} />\n </SimpleForm>\n}\n\nconst OfficialAssignersDialog = ({ isOpen, handleClose, participantId }) => {\n return <Dialog\n maxWidth=\"sm\"\n fullWidth\n open={isOpen}\n >\n <OfficialAssignersForm onClose={handleClose} participantId={participantId} />\n </Dialog>\n}\n\nexport const OfficialAssignersMenuItem = ({ participantId, ...props }) => {\n const translate = useTranslate();\n const isOwnParticipant = useIsOwnParticipant(participantId);\n const [isOpen, setOpen] = useState(false);\n\n return <>\n <ActionMenuItem color=\"primary\" size=\"small\" onClick={() => setOpen(true)}>\n <ListItemIcon><OfficeIcon fontSize=\"small\" /></ListItemIcon>\n <ListItemText>{translate(`resources.participants.labels.availability.assigner_availabilities.${isOwnParticipant ? 'own_profile' : 'other_profile'}.title`)}</ListItemText>\n </ActionMenuItem>\n {isOpen && <OfficialAssignersDialog isOpen={isOpen} handleClose={() => setOpen(false)} participantId={participantId} {...props} />}\n </>\n}\n","import React from 'react';\nimport { useTranslate } from 'react-admin';\nimport {\n DialogTitle as MuiDialogTitle,\n DialogContent as MuiDialogContent,\n DialogContentText,\n List,\n ListItem,\n ListItemSecondaryAction,\n ListItemText,\n styled,\n CircularProgress,\n IconButton,\n} from '@material-ui/core';\nimport { Clear } from '@material-ui/icons';\nimport { Alert, AlertTitle } from '@material-ui/lab';\nimport { useForm, useFormState } from 'react-final-form';\n\nimport AutocompleteInput from '../../../common/inputs/AutocompleteInput';\nimport { useVenueSelection } from './venues'\nimport { getVenueCity } from '../../venues/util';\nimport { matchVenue, VenueSuggestion } from '../../venues/VenueInput';\nimport { useIsOwnParticipant } from '../../../common/hooks/hooks';\n\nconst DialogTitle = styled(MuiDialogTitle)({\n position: 'sticky',\n top: 0,\n background: 'white',\n zIndex: 10,\n})\n\nconst DialogContent = styled(MuiDialogContent)({\n paddingTop: 0,\n})\n\nconst Venue = ({ venue }) => {\n const { mutators } = useForm();\n const { values: { venueIds } } = useFormState();\n\n const removeVenue = () => {\n const index = venueIds.findIndex(venueId => venueId === venue.id)\n mutators.remove('venueIds', index)\n }\n\n if (!venue) return null;\n return <ListItem dense disableRipple component=\"li\">\n <ListItemText primary={venue.name} secondary={getVenueCity(venue, true)} />\n <ListItemSecondaryAction>\n <IconButton edge=\"end\" onClick={removeVenue}>\n <Clear />\n </IconButton>\n </ListItemSecondaryAction>\n </ListItem>\n}\n\nconst Selection = ({ venues, participantId }) => {\n const translate = useTranslate();\n const { values: { venueIds = [] } } = useFormState();\n const isOwnParticipant = useIsOwnParticipant(participantId);\n\n const selectedVenues = venueIds\n .map(venueId => venues.find(venue => venue.id === venueId))\n .filter(Boolean)\n\n if (!selectedVenues?.length) {\n return <Alert severity=\"success\">\n <AlertTitle>{translate('resources.participants.alerts.availability.selection.title')}</AlertTitle>\n <p>{translate(`resources.participants.alerts.availability.selection.${isOwnParticipant ? 'own_profile' : 'other_profile'}.available_to_all_arenas`)}</p>\n </Alert>\n }\n\n return <List disablePadding>\n {selectedVenues.map(venue => <Venue key={venue.id} venue={venue} />)}\n </List>\n}\n\nconst VenuesForm = ({ participantId, venues }) => {\n const translate = useTranslate();\n const { selection, loaded, error } = useVenueSelection(participantId, venues);\n\n if (error) {\n return <Alert severity=\"error\">{translate('ra.page.error_try_again')}</Alert>\n }\n\n if (!loaded) {\n return <Alert severity=\"info\" icon={<CircularProgress color=\"secondary\" size={22} />}>{translate('resources.venues.alerts.loading_venues')}</Alert>\n }\n\n return <>\n <AutocompleteInput\n choices={venues}\n defaultValue={selection}\n source=\"venueIds\"\n label=\"resources.venues.messages.add_venues\"\n placeholder=\"resources.venues.messages.search_venue\"\n emptyOptionsText=\"resources.venues.messages.enter_name_city\"\n multiple\n disableClearable\n groupBy={venue => venue && getVenueCity(venue, true, true, false)}\n minFilterLength={3}\n suggestionComponent={VenueSuggestion}\n inputValueMatcher={matchVenue}\n variant=\"outlined\"\n margin=\"normal\"\n fullWidth\n disableRemove\n renderTags={() => null}\n />\n <Selection venues={venues} participantId={participantId} />\n </>\n}\n\nexport const VenueList = ({ participantId, venues }) => {\n const translate = useTranslate();\n const isOwnParticipant = useIsOwnParticipant(participantId);\n\n return <>\n <DialogTitle>{translate(`resources.participants.labels.availability.venues_availabilities.${isOwnParticipant ? 'own_profile' : 'other_profile'}.title`)}</DialogTitle>\n <DialogContent>\n <DialogContentText>\n {translate(`resources.participants.labels.availability.venues_availabilities.${isOwnParticipant ? 'own_profile' : 'other_profile'}.select_venues`)}\n </DialogContentText>\n <VenuesForm participantId={participantId} venues={venues} />\n </DialogContent>\n </>\n}\n","import { useState } from 'react';\nimport { useQuery, GET_LIST, GET_MANY_REFERENCE } from 'ra-core';\n\nexport function useVenues() {\n const { data: venues, ...props } = useQuery({\n type: GET_LIST,\n resource: 'venues',\n payload: {\n filter: { _scope: 'Tenant' },\n pagination: { page: 0, perPage: 9999 },\n sort: {\n field: [ 'country', 'region', 'city', 'name' ],\n order: [ 'ASC', 'ASC', 'ASC', 'ASC' ],\n }\n }\n });\n\n return { venues, ...props };\n}\n\n\nexport function useVenueSelection(participantId, venues = []) {\n const [ selection, setSelection ] = useState([]);\n const { data, ...props } = useQuery({\n type: GET_MANY_REFERENCE,\n resource: 'officialVenues',\n payload: {\n target: 'participants',\n id: participantId,\n pagination: { page: 0, perPage: 9999 },\n filter: {},\n }\n }, {\n enabled: participantId !== null && venues.length > 0,\n onSuccess({ data }) {\n if (!data?.length) return;\n const ids = data.map(officialVenue => officialVenue.venueId);\n setSelection(ids)\n }\n })\n\n return { selection, ...props }\n}\n","import React, { Fragment, useState } from 'react';\nimport { useTranslate, SimpleForm, useNotify } from 'react-admin';\nimport { Dialog, Button, CircularProgress, DialogActions, ListItemIcon, ListItemText } from '@material-ui/core';\nimport { Alert } from '@material-ui/lab';\nimport arrayMutators from 'final-form-arrays'\nimport { useFormState } from 'react-final-form';\n\nimport { ActionMenuItem } from '../../../common/ActionMenu';\nimport { useIsOwnParticipant } from '../../../common/hooks/hooks';\nimport { apiClient } from '../../../http';\nimport { VenueIcon } from '../../icons';\nimport { VenueList } from './VenueList';\nimport { useVenues } from './venues';\n\nconst Toolbar = ({ handleSubmit, onClose }) => {\n const translate = useTranslate();\n const { submitting } = useFormState();\n\n return <DialogActions>\n <Button onClick={onClose}>{translate('ra.action.cancel')}</Button>\n <Button type=\"submit\" color=\"primary\" onClick={handleSubmit} disabled={submitting}>\n {!submitting ? translate('ra.action.save') : translate('resources.participants.labels.availability.saving')}\n </Button>\n </DialogActions>\n}\n\nconst OfficialVenuesForm = ({ onClose, participantId }) => {\n const notify = useNotify();\n const translate = useTranslate();\n const { venues, loaded, error } = useVenues();\n\n if (error) {\n return <Alert severity=\"error\">{translate('ra.page.error_try_again')}</Alert>\n }\n\n if (!loaded) {\n return <Alert severity=\"info\" icon={<CircularProgress color=\"secondary\" size={22} />}>{translate('ra.page.loading')}</Alert>\n }\n\n const handleSave = async values => {\n const { venueIds } = values;\n\n try {\n await apiClient(`/participants/${participantId}/officialSettings`, {\n method: 'PATCH',\n data: {\n venueIds,\n },\n })\n\n notify('resources.participants.labels.availability.venues_updated', 'success');\n } catch (error) {\n notify('resources.participants.labels.availability.venues_error', 'error');\n }\n\n onClose();\n }\n\n return <SimpleForm mutators={arrayMutators} component={Fragment} toolbar={<Toolbar onClose={onClose} />} fullWidth save={handleSave}>\n <VenueList participantId={participantId} venues={venues} />\n </SimpleForm>\n}\n\nconst OfficialVenuesDialog = ({ isOpen, handleClose, participantId }) => {\n return <Dialog\n maxWidth=\"sm\"\n fullWidth\n open={isOpen}\n >\n <OfficialVenuesForm onClose={handleClose} participantId={participantId} />\n </Dialog>\n}\n\nexport const OfficialVenuesMenuItem = ({ participantId, ...props }) => {\n const translate = useTranslate();\n const isOwnParticipant = useIsOwnParticipant(participantId);\n const [isOpen, setOpen] = useState(false);\n\n return <>\n <ActionMenuItem color=\"primary\" size=\"small\" onClick={() => setOpen(true)}>\n <ListItemIcon><VenueIcon fontSize=\"small\" /></ListItemIcon>\n <ListItemText>{translate(`resources.participants.labels.availability.venues_availabilities.${isOwnParticipant ? 'own_profile' : 'other_profile'}.title`)}</ListItemText>\n </ActionMenuItem>\n {isOpen && <OfficialVenuesDialog isOpen={isOpen} handleClose={() => setOpen(false)} participantId={participantId} {...props} />}\n </>\n}\n","import React, { useEffect, useMemo } from 'react';\nimport { useLocale, useTranslate } from 'react-admin';\nimport { useForm, useFormState } from 'react-final-form';\nimport { Accordion, AccordionDetails, AccordionSummary, Box, Checkbox, FormControlLabel, Grid, makeStyles, Typography } from '@material-ui/core';\nimport { ExpandMore } from '@material-ui/icons';\n\nimport { translateApiProperty } from '@hisports/common';\nimport { groupBy, sortBy, get } from '@hisports/common/src/lodash';\n\nconst useStyles = makeStyles(theme => ({\n group: {\n display: 'flex',\n alignItems: 'center',\n gap: theme.spacing(1),\n },\n stack: {\n display: 'flex',\n flexDirection: 'column',\n },\n outerAccordion: {\n marginBottom: theme.spacing(1),\n boxShadow: 'none',\n '&:hover': {\n border: `1px solid rgba(0, 0, 0, 0.87)`,\n },\n border: props => props.hasError ? '1px solid red' : `1px solid rgba(0, 0, 0, 0.23)`,\n },\n innerAccordion: {\n border: `1px solid rgba(0, 0, 0, 0.23)`,\n '&:hover': {\n border: `1px solid rgba(0, 0, 0, 0.87)`,\n },\n boxShadow: 'none',\n },\n accordionSummary: {\n '& .MuiAccordionSummary-content': {\n margin: 0,\n },\n },\n titleBox: {\n display: 'flex',\n justifyContent: 'space-between',\n alignItems: 'center',\n width: '100%',\n },\n errorMessage: {\n marginLeft: 14,\n }\n}))\n\nconst OuterAccordionTitle = ({ selectedCount = 0, categoryCount = 0, handleToggleAll, disabled, label }) => {\n const translate = useTranslate();\n const classes = useStyles();\n\n const isAllSelected = selectedCount === categoryCount;\n\n return <Box className={classes.titleBox}>\n <FormControlLabel\n control={\n <Checkbox\n disabled={disabled}\n checked={isAllSelected}\n indeterminate={selectedCount > 0 && selectedCount < categoryCount}\n onChange={() => handleToggleAll(isAllSelected)}\n onClick={(e) => e.stopPropagation()}\n onFocus={(e) => e.stopPropagation()}\n />\n }\n label={\n <Typography variant=\"body2\" color=\"textPrimary\">\n {label || translate('resources.categories.name', 2)}\n </Typography>\n }\n />\n <Typography variant=\"body2\" color=\"textSecondary\">\n {`${selectedCount} / ${categoryCount}`}\n </Typography>\n </Box>\n}\n\nconst DivisionTitle = ({ selectedCount, divisionCategories, handleToggleAllInDivision, division, disabled }) => {\n const classes = useStyles();\n\n const isAllSelected = selectedCount === divisionCategories.length;\n\n return <Box className={classes.titleBox}>\n <FormControlLabel\n control={\n <Checkbox\n disabled={disabled}\n checked={isAllSelected}\n indeterminate={selectedCount > 0 && selectedCount < divisionCategories.length}\n onChange={() => handleToggleAllInDivision(divisionCategories, isAllSelected)}\n onClick={(e) => e.stopPropagation()}\n onFocus={(e) => e.stopPropagation()}\n />\n }\n label={\n <Typography variant=\"body2\" color=\"textPrimary\">\n {division}\n </Typography>\n }\n />\n <Typography variant=\"body2\" color=\"textSecondary\">\n {`${selectedCount} / ${divisionCategories.length}`}\n </Typography>\n </Box>\n}\n\nconst SelectableCategory = ({ category, selected, handleCategoryToggle, disabled }) => {\n const translate = useTranslate();\n const locale = useLocale();\n const classes = useStyles();\n\n return <FormControlLabel\n key={category.id}\n control={\n <Checkbox\n disabled={disabled}\n checked={selected?.includes(category.id)}\n onChange={() => handleCategoryToggle(category.id)}\n />\n }\n label={\n <div className={classes.group}>\n <Typography variant=\"body2\" color=\"textPrimary\">\n {translateApiProperty(category, 'name', locale)}\n </Typography>\n <Typography variant=\"body2\" color=\"textSecondary\">\n {translate(`resources.categories.values.gender.${category.gender}`)}\n </Typography>\n </div>\n }\n />\n}\n\nexport const SelectableCategoriesInput = ({ categories = [], source, disabled = false, label }) => {\n const locale = useLocale();\n const translate = useTranslate();\n const { values, errors, submitFailed } = useFormState();\n const { change } = useForm();\n\n const fieldError = get(errors, source);\n const hasError = submitFailed && fieldError;\n\n const classes = useStyles({ hasError });\n\n const selected = useMemo(() => get(values, source, []), [values, source]);\n\n const groupedByDivision = useMemo(() => {\n const sorted = sortBy(categories, ['division.order', 'order', 'name']);\n return groupBy(sorted, category => translateApiProperty(category.division, 'name', locale));\n }, [categories, locale]);\n\n useEffect(() => {\n // set initial value if not set\n if (get(values, source) == null) {\n change(source, []);\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n\n const handleCategoryToggle = (categoryId) => {\n const newSelection = selected.includes(categoryId)\n ? selected.filter(id => id !== categoryId)\n : [...selected, categoryId];\n\n change(source, newSelection);\n };\n\n const handleToggleAllInDivision = (divisionCategories, isAllSelected) => {\n const divisionCategoryIds = divisionCategories.map(category => category.id);\n\n const newSelection = isAllSelected\n ? selected.filter(id => !divisionCategoryIds.includes(id))\n : [...selected, ...divisionCategoryIds.filter(id => !selected.includes(id))];\n\n change(source, newSelection);\n };\n\n const handleToggleAll = (isAllSelected) => {\n const categoryIds = categories.map(category => category.id);\n\n const newSelection = isAllSelected\n ? []\n : [...categoryIds];\n\n change(source, newSelection);\n }\n\n if (!categories?.length) return null;\n\n return (\n <Box>\n <Accordion className={classes.outerAccordion} TransitionProps={{ unmountOnExit: true }}>\n <AccordionSummary expandIcon={<ExpandMore />} className={classes.accordionSummary}>\n <OuterAccordionTitle selectedCount={selected.length} categoryCount={categories.length} handleToggleAll={handleToggleAll} disabled={disabled} label={label} />\n </AccordionSummary>\n <AccordionDetails>\n <Grid container spacing={1}>\n {Object.keys(groupedByDivision).map((division) => {\n const divisionCategories = groupedByDivision[division] || [];\n const selectedCount = divisionCategories.filter(category => selected?.includes(category.id)).length;\n\n if (!divisionCategories.length) return null;\n return <Grid item xs={12} md={6} key={division}>\n <Accordion key={division} className={classes.innerAccordion} TransitionProps={{ unmountOnExit: true }}>\n <AccordionSummary expandIcon={<ExpandMore />} className={classes.accordionSummary} >\n <DivisionTitle selectedCount={selectedCount} divisionCategories={divisionCategories} handleToggleAllInDivision={handleToggleAllInDivision} division={division} disabled={disabled} />\n </AccordionSummary>\n\n <AccordionDetails>\n <Grid container spacing={0}>\n {divisionCategories.map((category) => (\n <Grid item xs={12} md={6} key={category.id}>\n <SelectableCategory category={category} selected={selected} handleCategoryToggle={handleCategoryToggle} disabled={disabled} />\n </Grid>\n ))\n }\n </Grid>\n </AccordionDetails>\n </Accordion>\n </Grid>\n }\n )}\n </Grid>\n </AccordionDetails>\n </Accordion>\n\n {submitFailed && fieldError && (\n <Typography variant=\"caption\" color=\"error\" className={classes.errorMessage}>\n {translate(fieldError)}\n </Typography>\n )}\n </Box>\n );\n};\n","import React, { useMemo, useState } from 'react';\nimport { useTranslate, SimpleForm, useNotify, useQuery, GET_MANY_REFERENCE, RecordContextProvider } from 'react-admin';\nimport { Dialog, Button, CircularProgress, DialogActions, ListItemIcon, ListItemText, DialogTitle, makeStyles } from '@material-ui/core';\nimport { Alert, AlertTitle } from '@material-ui/lab';\nimport { Category } from '@material-ui/icons';\nimport arrayMutators from 'final-form-arrays'\nimport { useFormState } from 'react-final-form';\n\nimport { ASSIGNMENT_POSITIONS } from '@hisports/scoresheet/src/constants';\n\nimport { ActionMenuItem } from '../../../common/ActionMenu';\nimport { UpdatedAtField } from '../../../common/fields/UpdatedAtField';\nimport { useIsOwnParticipant } from '../../../common/hooks/hooks';\nimport { apiClient, useHttpClient, useSport } from '../../../http';\nimport { SelectableCategoriesInput } from '../../categories/SelectableCategoriesInput';\n\nconst useStyles = makeStyles((theme) => ({\n updatedAt: {\n display: 'flex',\n justifyContent: 'flex-end',\n },\n alert: {\n marginBottom: theme.spacing(1),\n },\n group: {\n display: 'flex',\n alignItems: 'center',\n gap: theme.spacing(2),\n }\n}));\n\nconst UpdatedAt = ({ officialCategories }) => {\n const classes = useStyles();\n\n const latestCategory = useMemo(() => {\n return officialCategories.reduce((latest, category) => {\n if (!category.updatedAt) return latest;\n if (!latest || new Date(category.updatedAt) > new Date(latest.updatedAt)) {\n return category;\n }\n return latest;\n }, null);\n }, [officialCategories]);\n\n if (!latestCategory) return null;\n return <div className={classes.updatedAt}>\n <RecordContextProvider value={latestCategory}>\n <UpdatedAtField includePrefix typographyProps={{ variant: 'caption', color: 'textSecondary' }} />\n </RecordContextProvider>\n </div>\n}\n\nconst OfficialCategoriesAlert = ({ allCategoriesTotal = 0 }) => {\n const translate = useTranslate();\n const classes = useStyles();\n const { values } = useFormState();\n\n const availableToAll = Object.values(values).every(value => value.length === allCategoriesTotal);\n\n if (!availableToAll) return null\n return <Alert severity=\"success\" className={classes.alert}>\n <AlertTitle>{translate('resources.participants.labels.availability.categories_availabilities.alerts.available_to_all_title')}</AlertTitle>\n {translate('resources.participants.labels.availability.categories_availabilities.alerts.available_to_all_body')}\n </Alert>\n}\n\nconst Toolbar = ({ handleSubmit, onClose }) => {\n const translate = useTranslate();\n const { submitting } = useFormState();\n\n const submitLabel = submitting ? 'resources.participants.labels.availability.saving' : 'ra.action.save';\n\n return <DialogActions>\n <Button onClick={onClose}>{translate('ra.action.cancel')}</Button>\n <Button type=\"submit\" color=\"primary\" onClick={handleSubmit} disabled={submitting}>\n {translate(submitLabel)}\n </Button>\n </DialogActions>\n}\n\nconst OfficialCategoryEdit = ({ allCategories = [], officialCategories }) => {\n const sport = useSport();\n const translate = useTranslate();\n\n return <>\n {ASSIGNMENT_POSITIONS\n .filter(({ sports }) => !sports || sports.includes(sport))\n .map(({ position }) => {\n return <SelectableCategoriesInput\n label={translate(`resources.games.values.assignment.position.${position}`)}\n source={position}\n categories={allCategories}\n />\n })}\n <UpdatedAt officialCategories={officialCategories} />\n </>\n}\n\nconst toFormValues = (sport, allCategoryIds = [], officialCategories = []) => {\n const formValues = {};\n\n ASSIGNMENT_POSITIONS\n .filter(({ sports }) => !sports || sports.includes(sport))\n .map(({ position }) => {\n const invalidCategories = (officialCategories || []).find(({ position: p }) => p === position)?.categoryIds || [];\n const validCategories = (allCategoryIds || []).filter(categoryId => !invalidCategories.includes(categoryId))\n\n formValues[position] = validCategories;\n });\n\n return formValues;\n}\n\nconst toApiValues = (formValues, allCategoryIds = []) => {\n const apiValues = {};\n\n Object.keys(formValues).forEach(position => {\n const invalidCategories = (allCategoryIds || []).filter(category => !formValues[position].includes(category));\n apiValues[position] = invalidCategories;\n })\n\n return apiValues;\n}\n\nconst OfficialCategoriesForm = ({ onClose, participantId }) => {\n const notify = useNotify();\n const translate = useTranslate();\n const sport = useSport();\n\n const { data: allCategories = [], loaded: categoriesLoaded, error: categoriesError } = useHttpClient('/categories');\n const { data: officialCategories = [], loaded: officialCategoriesLoaded, error: officialCategoriesError } = useQuery({\n type: GET_MANY_REFERENCE,\n resource: 'officialCategories',\n payload: {\n target: 'participants',\n id: participantId,\n pagination: { page: 1, perPage: 999 },\n sort: { field: 'position', order: 'ASC' },\n filter: {}\n },\n }, { enabled: participantId != null });\n\n const error = categoriesError || officialCategoriesError;\n const loaded = categoriesLoaded && officialCategoriesLoaded;\n\n const allCategoryIds = useMemo(() => (allCategories || []).map(category => category.id), [allCategories]);\n const initialValues = useMemo(() => {\n return toFormValues(sport, allCategoryIds, officialCategories);\n }, [allCategoryIds, officialCategories, sport]);\n\n const handleSave = async values => {\n try {\n await apiClient(`/participants/${participantId}/officialSettings`, {\n method: 'PATCH',\n data: {\n positionCategories: toApiValues(values, allCategoryIds),\n },\n })\n\n notify('resources.participants.labels.availability.categories_updated', 'success');\n onClose();\n } catch (error) {\n notify('resources.participants.labels.availability.categories_error', 'error');\n }\n }\n\n if (error) {\n return <Alert severity=\"error\">{translate('ra.page.error_try_again')}</Alert>\n }\n\n if (!loaded) {\n return <Alert severity=\"info\" icon={<CircularProgress color=\"secondary\" size={22} />}>{translate('ra.page.loading')}</Alert>\n }\n\n return <RecordContextProvider value={initialValues}>\n <SimpleForm initialValues={initialValues} mutators={arrayMutators} toolbar={<Toolbar onClose={onClose} />} fullWidth save={handleSave}>\n <OfficialCategoriesAlert onClose={onClose} allCategoriesTotal={allCategories?.length} />\n <OfficialCategoryEdit allCategories={allCategories} officialCategories={officialCategories} />\n </SimpleForm>\n </RecordContextProvider>\n}\n\nconst OfficialCategoriesDialog = ({ isOpen, handleClose, participantId }) => {\n const translate = useTranslate();\n const isOwnParticipant = useIsOwnParticipant(participantId);\n\n return <Dialog\n maxWidth=\"lg\"\n fullWidth\n open={isOpen}\n >\n <DialogTitle>{translate(`resources.participants.labels.availability.categories_availabilities.${isOwnParticipant ? 'own_profile' : 'other_profile'}.title`)}</DialogTitle>\n <OfficialCategoriesForm onClose={handleClose} participantId={participantId} />\n </Dialog>\n}\n\nexport const OfficialCategoriesMenuItem = ({ participantId, ...props }) => {\n const translate = useTranslate();\n const [isOpen, setOpen] = useState(false);\n const isOwnParticipant = useIsOwnParticipant(participantId);\n\n return <>\n <ActionMenuItem color=\"primary\" size=\"small\" onClick={() => setOpen(true)}>\n <ListItemIcon><Category fontSize=\"small\" /></ListItemIcon>\n <ListItemText>{translate(`resources.participants.labels.availability.categories_availabilities.${isOwnParticipant ? 'own_profile' : 'other_profile'}.title`)}</ListItemText>\n </ActionMenuItem>\n {isOpen && <OfficialCategoriesDialog isOpen={isOpen} handleClose={() => setOpen(false)} participantId={participantId} {...props} />}\n </>\n}\n","import React from 'react';\nimport { useRecordContext } from 'react-admin';\nimport { Card, List } from '@material-ui/core';\n\nimport { isAuthorized } from '../../../common/Authorize';\n\nimport { OfficialAssignersMenuItem } from '../AvailabilitySettings/OfficialAssignersDialog';\nimport { OfficialVenuesMenuItem } from '../AvailabilitySettings/OfficialVenuesDialog';\nimport { OfficialCategoriesMenuItem } from '../AvailabilitySettings/OfficialCategoriesDialog';\n\nexport default () => {\n const record = useRecordContext();\n const participantId = record?.participantId || record?.id;\n\n const canManageCategories = isAuthorized(record, 'officialAvailabilities', 'categories');\n\n const actions = [\n <OfficialAssignersMenuItem key=\"assigners\" participantId={participantId} />,\n <OfficialVenuesMenuItem key=\"venues\" participantId={participantId} />,\n canManageCategories && <OfficialCategoriesMenuItem key=\"categories\" participantId={participantId} />,\n ].filter(Boolean);\n\n if (!actions.length) return null;\n\n return <Card>\n <List>\n {actions}\n </List>\n </Card>\n}\n","import React, { useContext, useEffect, useState } from 'react';\nimport { useRecordContext, useTranslate, useVersion } from 'react-admin';\nimport { NotificationsOffOutlined } from '@material-ui/icons';\nimport { Alert, AlertTitle } from '@material-ui/lab';\n\nimport { FF_SSO } from '@hisports/common/featureFlags';\n\nimport { apiClient, useFlag } from '../../http';\nimport { InviteButton, SsoInviteButton } from './cards/ParticipantCard';\n\nconst ParticipantStatusContext = React.createContext(null);\n\nexport const useParticipantStatus = () => useContext(ParticipantStatusContext);\n\nexport const ParticipantStatusProvider = props => {\n const participant = useRecordContext();\n const [ status, setStatus ] = useState();\n const version = useVersion();\n\n useEffect(() => {\n apiClient(`/participants/${participant.id}/status`, { method: 'GET' })\n .then(res => res.data)\n .then(status => {\n setStatus(status)\n })\n }, [ participant.id, version ])\n\n if (!status) return null;\n return <ParticipantStatusContext.Provider value={status} {...props} />\n}\n\nexport const ParticipantStatusAlert = props => {\n const participant = useRecordContext();\n const translate = useTranslate();\n const { types, accounts, contacts, notifications } = useParticipantStatus();\n const isEnabled = useFlag();\n\n if (!types.length) return <Alert severity=\"error\">\n <AlertTitle>{translate('resources.participants.labels.status.roles_title')}</AlertTitle>\n {!accounts\n ? translate('resources.participants.labels.status.roles_body')\n : translate('resources.participants.labels.status.roles_unauthorized')\n }\n </Alert>\n\n if (!accounts) return <Alert severity=\"info\" action={\n !isEnabled(FF_SSO)\n ? <InviteButton participant={participant} />\n : <SsoInviteButton participant={participant} />\n }>\n <AlertTitle>{translate('resources.participants.labels.status.account_title')}</AlertTitle>\n {translate('resources.participants.labels.status.account_body')}\n </Alert>\n\n if (accounts === 'Invited') return <Alert severity=\"success\" action={\n !isEnabled(FF_SSO)\n ? <InviteButton participant={participant} />\n : <SsoInviteButton participant={participant} />\n }>\n <AlertTitle>{translate('resources.participants.labels.status.invited_title')}</AlertTitle>\n {translate('resources.participants.labels.status.invited_body')}\n </Alert>\n\n if (notifications) {\n if (!contacts) return <Alert severity=\"warning\">\n <AlertTitle>{translate('resources.participants.labels.status.contacts_title')}</AlertTitle>\n {translate('resources.participants.labels.status.contacts_body')}\n </Alert>\n\n if (contacts === 'Unverified') return <Alert severity=\"warning\" icon={<NotificationsOffOutlined />}>\n <AlertTitle>{translate('resources.participants.labels.status.unverified_title')}</AlertTitle>\n {translate('resources.participants.labels.status.unverified_body')}\n </Alert>\n }\n\n return null;\n}\n","import React, { Fragment } from 'react';\nimport { SimpleForm, FormInput, TextInput, useNotify, useTranslate, useRefresh } from 'react-admin';\nimport { Dialog, DialogTitle, DialogContent, DialogContentText } from '@material-ui/core'\nimport { FORM_ERROR } from 'final-form';\n\nimport { apiClient } from '../../http';\nimport { DialogFormToolbar } from '../../common/dialogs/DialogForm';\n\n// simple email regex to require at least: a@a.a\nconst emailRegex = /^[^@\\s]+@[^@\\s]+\\.[^@\\s]+$/i;\n\nconst validate = values => {\n const errors = {};\n if (!values.email) {\n errors.email = 'ra.validation.required';\n } else if (!emailRegex.test(values.email)) {\n errors.email = 'ra.validation.email';\n }\n return errors;\n}\n\nconst SsoInviteForm = props =>\n <SimpleForm component={Fragment} validate={validate} variant=\"outlined\" margin=\"normal\" {...props}>\n <FormInput fullWidth input={\n <TextInput resource=\"participants\" source=\"email\" type=\"email\" autoComplete=\"off\" />\n } />\n </SimpleForm>\n\nexport const SsoInviteDialog = ({ participantId, open, onClose }) => {\n const translate = useTranslate();\n const notify = useNotify();\n const refresh = useRefresh();\n\n const handleSubmit = async values => {\n return apiClient(`/participants/${participantId}/ssoInvite`, {\n method: 'POST',\n data: {\n email: values.email,\n },\n })\n .then(() => {\n onClose();\n notify('resources.participants.notifications.sso_created_and_linked', 'success');\n refresh();\n })\n .catch(err => {\n const code = err?.response?.data?.error?.name\n\n return { [FORM_ERROR]: translate(`resources.participants.errors.${code}`) }\n })\n }\n\n return <Dialog open={open} onClose={onClose} fullWidth maxWidth=\"sm\">\n <DialogTitle>{translate('resources.participants.labels.account_invitation_sso')}</DialogTitle>\n <DialogContent>\n <DialogContentText>{translate('resources.participants.messages.link_sso')}</DialogContentText>\n <SsoInviteForm initialValues={{ participantId }} save={handleSubmit} toolbar={\n <DialogFormToolbar submitLabel=\"ra.action.invite\" onCancel={onClose} />\n } />\n </DialogContent>\n </Dialog>\n}\n","import React, { useContext, useEffect, useState } from 'react';\nimport { useRecordContext, useVersion } from 'react-admin';\n\nimport { apiClient } from '../../http';\n\nconst ParticipantAccountContext = React.createContext(null);\n\nexport const useParticipantAccount = () => useContext(ParticipantAccountContext);\n\nexport const ParticipantAccountProvider = props => {\n const participant = useRecordContext();\n const [ accounts, setAccount ] = useState();\n const version = useVersion();\n\n useEffect(() => {\n apiClient(`/participants/${participant.id}/identities`, { method: 'GET' })\n .then(res => res.data)\n .then(identities => {\n const identity = identities.find(identity => identity.isPrimary)\n fetchAccount(identity)\n })\n\n function fetchAccount(identity) {\n if (!identity) return Promise.resolve();\n\n return apiClient(`/accounts/${identity.accountId}`, { method: 'GET' })\n .then(res => res.data)\n .then(account => {\n setAccount(account)\n })\n }\n }, [version, participant.id])\n\n return <ParticipantAccountContext.Provider value={accounts} {...props} />\n}\n","import React, { useState } from 'react';\nimport { EditButton, TextField, useRecordContext, useTranslate } from 'react-admin';\nimport { Table, TableBody, Button, Chip as MuiChip, styled, makeStyles } from '@material-ui/core';\nimport { PersonAdd, Star, SupervisorAccountOutlined, VerifiedUserOutlined } from '@material-ui/icons';\n\nimport { FF_SSO } from '@hisports/common/featureFlags';\n\nimport InfoCard from '../../../common/cards/InfoCard';\nimport Row from '../../../common/cards/TableRow';\nimport { isAuthorized } from '../../../common/Authorize';\nimport RegistryLink from '../../../common/RegistryLink';\nimport { SMAChip } from '../../../common/chips/SMAChip';\nimport { useFlag } from '../../../http';\nimport { ParticipantIcon, TeamIcon } from '../../icons';\n\nimport { useParticipantStatus } from '../ParticipantStatusContext';\nimport { InviteDialog } from '../InviteDialog';\nimport { SsoInviteDialog } from '../SsoInviteDialog';\nimport { useParticipantAccount } from '../ParticipantAccountContext';\n\nconst useStyles = makeStyles((theme) => ({\n group: {\n display: 'flex',\n alignItems: 'center',\n gap: theme.spacing(1),\n },\n}));\n\nconst Chip = styled(MuiChip)(({ theme }) => ({\n margin: theme.spacing(.5),\n padding: theme.spacing(.5),\n}))\n\nexport const InviteButton = ({ participant, size = 'medium' }) => {\n const [ open, setOpen ] = useState(false);\n const translate = useTranslate();\n\n if (!participant) return null;\n return <>\n <Button color=\"primary\" size={size} startIcon={<PersonAdd />} onClick={() => setOpen(true)}>{translate('ra.action.invite')}</Button>\n <InviteDialog participantId={participant.id} open={open} onClose={() => setOpen(false)} />\n </>\n}\n\nexport const SsoInviteButton = ({ participant }) => {\n const [ open, setOpen ] = useState(false);\n const translate = useTranslate()\n\n if (!participant) return null;\n return <>\n <Button color=\"primary\" size=\"small\" startIcon={<SupervisorAccountOutlined />} onClick={() => setOpen(true)}>\n {translate('ra.action.invite')}\n </Button>\n <SsoInviteDialog participantId={participant.id} open={open} onClose={() => setOpen(false)} />\n </>\n}\n\nconst getIcon = type => {\n switch (type) {\n case 'Spordle':\n return <Star fontSize=\"small\" />\n case 'Admin':\n case 'League':\n case 'Assigner':\n return <VerifiedUserOutlined fontSize=\"small\" />\n case 'Staff':\n case 'Player':\n return <TeamIcon fontSize=\"small\" />\n case 'Official':\n case 'Coach':\n case 'Scorekeeper':\n case 'Monitor':\n return <ParticipantIcon fontSize=\"small\" />\n default:\n return null;\n }\n}\n\nconst TypeChip = ({ type }) => {\n const translate = useTranslate();\n const label = translate(`resources.participants.labels.status.types.${type}`, { _: type });\n return <Chip variant=\"outlined\" size=\"small\" label={label} icon={getIcon(type)} />\n}\n\nexport default props => {\n const participant = useRecordContext(props);\n const status = useParticipantStatus();\n const isEnabled = useFlag();\n const accounts = useParticipantAccount();\n const classes = useStyles();\n\n const canEditParticipant = isAuthorized(participant, 'participants', 'edit');\n const canInvite = isAuthorized(participant, 'participants', 'invite') && !status.accounts && status.types.length > 0;\n const canSsoInvite = isEnabled(FF_SSO) && (!status.accounts || status.accounts === 'Invited') && status.types.length > 0;\n const Invite = (canInvite && !canSsoInvite)\n ? <InviteButton participant={participant} />\n : (canInvite && canSsoInvite ? <SsoInviteButton participant={participant} /> : null);\n\n return <InfoCard\n title=\"resources.participants.labels.card.title\"\n actions={[\n canEditParticipant && <EditButton label=\"resources.participants.actions.edit\" record={participant} />,\n Invite,\n <RegistryLink />,\n ]}\n >\n <Table>\n <TableBody>\n <Row label=\"resources.participants.fields.fullName\">\n <TextField source=\"fullName\" />\n </Row>\n <Row label=\"resources.participants.fields.HCRId\" hidden={!participant?.HCRId}>\n <TextField source=\"HCRId\" />\n </Row>\n <Row label=\"resources.participants.labels.status.roles\" hidden={!status.types?.length}>\n {status.types.map(type => <TypeChip type={type} />)}\n </Row>\n <Row label=\"resources.participants.fields.accountEmail\" hidden={!accounts?.email}>\n <div className={classes.group}>\n {accounts?.email}\n {accounts?.externalId && <SMAChip />}\n </div>\n </Row>\n </TableBody>\n </Table>\n </InfoCard>\n}\n","import React from 'react';\nimport { ImageField, TextField, LinearProgress, useReference, useTranslate, useRecordContext, RecordContextProvider } from 'react-admin';\nimport { Table, TableBody, makeStyles } from '@material-ui/core';\nimport { Alert } from '@material-ui/lab';\nimport { VisibilityOff, Public } from '@material-ui/icons';\n\nimport Row from '../../common/cards/TableRow'\nimport DateField from '../../common/fields/DateField';\n\nimport { ParticipantField } from '../participants/ParticipantField';\n\nconst useStyles = makeStyles(() => ({\n root: {\n display: 'flex',\n justifyContent: 'center',\n },\n image: {\n borderRadius: '50%',\n }\n}))\n\nconst ProfileImage = props => {\n const classes = useStyles(props);\n return <div className={classes.root}>\n <ImageField source=\"picture.url\" label=\"resources.profiles.labels.picture\" classes={classes} />\n </div>\n}\n\nconst ProfileTable = ({ loaded, ...props }) => {\n const profile = useRecordContext(props);\n const translate = useTranslate();\n return <Table>\n <TableBody>\n <Row hidden={!profile.picture}>\n <ProfileImage />\n </Row>\n <Row hidden={!loaded || !profile.isPublic}>\n <Alert variant=\"outlined\" severity=\"info\" icon={<Public />}>\n {translate('resources.profiles.alerts.public_profile')}\n </Alert>\n </Row>\n <Row hidden={!loaded || profile.isPublic}>\n <Alert variant=\"outlined\" severity=\"success\" icon={<VisibilityOff />}>\n {translate('resources.profiles.alerts.private_profile')}\n </Alert>\n </Row>\n <Row label=\"resources.participants.fields.name\">\n <ParticipantField source=\"id\" link={false} />\n </Row>\n <Row hidden={loaded}>\n <LinearProgress />\n </Row>\n <Row label=\"resources.profiles.fields.birthdate\" hidden={!profile.birthdate}>\n <DateField source=\"birthdate\" yearFormat=\"LL\" />\n </Row>\n <Row label=\"resources.profiles.fields.height\" hidden={!profile.height}>\n <TextField source=\"height\" />\n </Row>\n <Row label=\"resources.profiles.fields.weight\" hidden={!profile.weight}>\n <TextField source=\"weight\" />\n </Row>\n <Row label=\"resources.profiles.fields.hometown\" hidden={!profile.hometown}>\n <TextField source=\"hometown\" />\n </Row>\n <Row label=\"resources.profiles.fields.dexterity\" hidden={!profile.dexterity}>\n <TextField source=\"dexterity\" />\n </Row>\n </TableBody>\n </Table>\n}\n\nexport const ProfileField = ({ source = 'id', ...props }) => {\n const participant = useRecordContext(props);\n const id = participant?.[source];\n\n const { referenceRecord, loaded } = useReference({ reference: 'profiles', id })\n const profile = referenceRecord || { id }\n\n return <RecordContextProvider value={profile}>\n <ProfileTable loaded={loaded} />\n </RecordContextProvider>\n}\n","import React from 'react';\nimport { TextInput, NumberInput, SimpleForm } from 'react-admin';\nimport { Grid } from '@material-ui/core'\n\nimport { InlineDateInput } from '../../common/inputs/DateInput';\nimport { ProfileDexterityEnumInput } from '../../common/inputs/EnumInputs';\nimport MaskedTextInput from '../../common/inputs/MaskedTextInput';\n// import AvatarInput from '../../common/inputs/AvatarInput';\nimport Toolbar from '../../common/ra/Toolbar';\nimport SwitchInput from '../../common/inputs/SwitchInput';\n\nimport { ParticipantInput } from '../participants/ParticipantInput';\n\nconst heightMask = value => {\n if (/\\d' 1[0-1]\"/.test(value)) return [/\\d/, '\\'', ' ', /[1]/, /[0-1]/, '\"'];\n return [/\\d/, '\\'', ' ', /\\d/, '\"'];\n}\n\nconst inputProps = {\n resource: 'profiles',\n basePath: '/profiles',\n variant: 'outlined',\n margin: 'none',\n fullWidth: true,\n}\n\nexport const ProfileForm = props =>\n <SimpleForm toolbar={<Toolbar />} {...props}>\n <Grid container spacing={2} fullWidth>\n <Grid item xs={12}>\n <ParticipantInput source=\"id\" label=\"resources.participants.fields.name\" disabled {...inputProps} />\n </Grid>\n <Grid item xs={12} md={6}>\n <InlineDateInput source=\"birthdate\" autoFocus {...inputProps} />\n </Grid>\n <Grid item xs={12} md={6}>\n <TextInput source=\"hometown\" {...inputProps} />\n </Grid>\n <Grid item xs={12} md={4}>\n <MaskedTextInput source=\"height\" maskOptions={{ mask: heightMask }} {...inputProps} />\n </Grid>\n <Grid item xs={12} md={4}>\n <NumberInput source=\"weight\" {...inputProps} />\n </Grid>\n <Grid item xs={12} md={4}>\n <ProfileDexterityEnumInput source=\"dexterity\" allowEmpty {...inputProps} />\n </Grid>\n <Grid item xs={12}>\n <SwitchInput source=\"isPublic\" helperText=\"resources.profiles.helpers.isPublic\" {...inputProps} />\n </Grid>\n </Grid>\n </SimpleForm>\n\n// <Grid item xs={12}>\n// <AvatarInput {...props} source=\"picture\" label=\"Upload a new picture\" {...inputProps} />\n// </Grid>\n","import React, { Fragment, useState } from 'react';\nimport { useRecordContext, useTranslate } from 'react-admin';\nimport { Button } from '@material-ui/core';\nimport { Edit } from '@material-ui/icons';\n\nimport { EditResourceDialog } from '../../common/dialogs/ResourceDialog';\n\nimport { ProfileForm } from './ProfileForm';\n\nconst UpdateProfileDialog = ({ source = 'id', ...props }) => {\n const profile = useRecordContext(props);\n return <EditResourceDialog source={source} label=\"resources.profiles.labels.edit\" disableDelete id={profile?.[source]} resource=\"profiles\" basePath=\"/profiles\" {...props}>\n <ProfileForm />\n </EditResourceDialog>\n}\n\nexport const EditProfileButton = props => {\n const [ isOpen, setOpen ] = useState(false);\n const translate = useTranslate();\n return <>\n <Button color=\"primary\" startIcon={<Edit />} onClick={() => setOpen(true)}>\n {translate('resources.profiles.actions.edit')}\n </Button>\n {isOpen && <UpdateProfileDialog isOpen={isOpen} handleClose={() => setOpen(false)} {...props} />}\n </>\n}\n","import React from 'react';\nimport { useRecordContext } from 'react-admin';\n\nimport InfoCard from '../../../common/cards/InfoCard';\nimport { isAuthorized } from '../../../common/Authorize';\n\nimport { ProfileField } from '../../profiles/ProfileField';\nimport { EditProfileButton } from '../../profiles/ProfileModal';\n\nexport default props => {\n const participant = useRecordContext(props);\n\n const canShowProfile = isAuthorized(participant, \"profiles\", \"show\");\n const canEditProfile = isAuthorized(participant, \"profiles\", \"edit\");\n if (!canShowProfile) return null;\n\n return <InfoCard title=\"resources.profiles.labels.card.title\" actions={\n canEditProfile && <EditProfileButton />\n }>\n <ProfileField source=\"id\" />\n </InfoCard>\n}\n","import React from 'react';\nimport { useRecordContext } from 'react-admin';\nimport { ForumOutlined } from '@material-ui/icons';\n\nimport ListCard from '../../../common/cards/ListCard';\nimport { isAuthorized } from '../../../common/Authorize';\n\nimport { ContactGrid } from '../../contacts/ContactGrid';\nimport { AddContactButton } from '../../contacts/ContactModal';\n\nexport default props => {\n const participant = useRecordContext(props);\n\n const showContacts = isAuthorized(participant, 'contacts', 'list')\n const canAddContact = isAuthorized(participant, 'contacts', 'create')\n\n if (!showContacts) return null;\n return <ListCard\n title=\"resources.contacts.labels.card.title\"\n icon={<ForumOutlined />}\n reference=\"contacts\"\n target=\"participants\"\n sort={{\n field: ['isPrimary', 'type'],\n order: ['DESC', 'ASC'],\n }}\n addButton={canAddContact && <AddContactButton initialValues={{ participantId: participant?.id }} />}\n >\n <ContactGrid />\n </ListCard>\n}\n","import React from 'react';\nimport { TextInput, SimpleForm } from 'react-admin';\nimport { Grid } from '@material-ui/core';\n\nimport Toolbar from '../../common/ra/Toolbar';\nimport { AddressTypeEnumInput, ProvinceEnumInput } from '../../common/inputs/EnumInputs';\nimport MaskedTextInput from '../../common/inputs/MaskedTextInput';\nimport SwitchInput from '../../common/inputs/SwitchInput';\n\nconst AZ = /[A-Za-z]/\nconst NM = /[0-9]/\nconst postalMask = () => [AZ, NM, AZ, ' ', NM, AZ, NM]\n\nconst validate = values => {\n const errors = {};\n if (!values.type) errors.type = 'ra.validation.required';\n if (!values.address) errors.address = 'ra.validation.required';\n if (!values.city) errors.city = 'ra.validation.required';\n if (!values.province) errors.province = 'ra.validation.required';\n if (!values.postal) errors.postal = 'ra.validation.required';\n return errors;\n}\n\nconst inputProps = {\n resource: 'addresses',\n basePath: '/addresses',\n variant: 'outlined',\n margin: 'none',\n fullWidth: true,\n}\n\nexport const AddressForm = props => {\n return <SimpleForm validate={validate} toolbar={<Toolbar />} {...props}>\n <Grid container spacing={1} fullWidth>\n <Grid item xs={12} sm={4}>\n <AddressTypeEnumInput source=\"type\" {...inputProps} />\n </Grid>\n <Grid item xs={12} sm={8}>\n <TextInput source=\"label\" helperText=\"resources.addresses.helpers.label\" {...inputProps} />\n </Grid>\n <Grid item xs={12}>\n <TextInput source=\"address\" placeholder=\"400 Kipling Ave\" {...inputProps} />\n </Grid>\n <Grid item xs={12}>\n <TextInput source=\"address2\" helperText=\"resources.addresses.helpers.address2\" {...inputProps} />\n </Grid>\n <Grid item xs={12}>\n <TextInput source=\"city\" placeholder=\"Etobicoke\" {...inputProps} />\n </Grid>\n <Grid item xs={12} md={6}>\n <ProvinceEnumInput source=\"province\" placeholder=\"ON - Ontario\" {...inputProps} />\n </Grid>\n <Grid item xs={12} md={6}>\n <MaskedTextInput source=\"postal\" maskOptions={{ mask: postalMask }} placeholder=\"M8V 3L1\" {...inputProps} />\n </Grid>\n <Grid item xs={12}>\n <SwitchInput source=\"isPrimary\" {...inputProps} />\n </Grid>\n </Grid>\n </SimpleForm>;\n}\n","import React, { Fragment, useState } from 'react';\nimport { useTranslate } from 'react-admin';\nimport { Button } from '@material-ui/core';\nimport { Add } from '@material-ui/icons';\n\nimport { DialogDatagrid } from '../../common/dialogs/DialogDatagrid';\nimport { CreateResourceDialog, EditResourceDialog } from '../../common/dialogs/ResourceDialog';\n\nimport { AddressForm } from './AddressForm';\n\nconst AddAddressDialog = props =>\n <CreateResourceDialog label=\"resources.addresses.actions.add\" resource=\"addresses\" basePath=\"/addresses\" {...props}>\n <AddressForm />\n </CreateResourceDialog>\n\nconst EditAddressDialog = props =>\n <EditResourceDialog label=\"resources.addresses.labels.edit\" resource=\"addresses\" basePath=\"/addresses\" {...props}>\n <AddressForm />\n </EditResourceDialog>\n\nexport const AddAddressButton = ({ size, variant, ...props }) => {\n const [ isOpen, setOpen ] = useState(false);\n const translate = useTranslate()\n return <>\n <Button color=\"primary\" size={size} variant={variant} startIcon={<Add />} onClick={() => setOpen(true)}>{translate('resources.addresses.actions.add')}</Button>\n <AddAddressDialog isOpen={isOpen} handleClose={() => setOpen(false)} {...props} />\n </>\n}\n\nexport const AddressDatagrid = props => <DialogDatagrid dialog={EditAddressDialog} {...props} />\n","import React from 'react';\nimport { makeStyles } from '@material-ui/styles';\n\nimport FunctionField from '../../common/fields/FunctionField'\n\nimport { AddressDatagrid } from './AddressModal';\n\nconst useStyles = makeStyles({\n headerRow: {\n display: 'none',\n },\n addressField: {\n whiteSpace: 'pre-line',\n }\n})\n\nconst AddressField = props =>\n <FunctionField {...props} render={address => {\n if (!address.address) return;\n return [\n address.label,\n address.address,\n address.address2,\n [address.city, address.province].filter(Boolean).join(', '),\n address.postal\n ].filter(Boolean).join('\\n')\n }} />\n\nconst TypeField = props =>\n <FunctionField {...props} render={address => {\n if (!address.isPrimary) return address.type;\n return `${address.type} (Primary)`\n }} />\n\nexport const AddressGrid = props => {\n const classes = useStyles();\n\n return <AddressDatagrid size=\"medium\" classes={classes} {...props}>\n <TypeField source=\"isPrimary\" />\n <AddressField source=\"address\" className={classes.addressField} />\n </AddressDatagrid>\n}\n","import React from 'react';\nimport { useRecordContext } from 'react-admin';\n\nimport ListCard from '../../../common/cards/ListCard';\nimport { isAuthorized } from '../../../common/Authorize';\n\nimport { AddressGrid } from '../../addresses/AddressGrid';\nimport { AddAddressButton } from '../../addresses/AddressModal';\n\nexport default props => {\n const participant = useRecordContext(props);\n\n const showAddresses = isAuthorized(participant, 'addresses', 'list')\n const canAddAddress = isAuthorized(participant, 'addresses', 'create')\n\n if (!showAddresses) return null;\n return <ListCard\n title=\"resources.addresses.labels.card.title\"\n reference=\"addresses\"\n target=\"participants\"\n sort={{\n field: ['isPrimary', 'type', 'label'],\n order: ['DESC', 'ASC', 'ASC'],\n }}\n addButton={canAddAddress && <AddAddressButton initialValues={{ participantId: participant?.id }} />}\n >\n <AddressGrid />\n </ListCard>\n}\n","import React from 'react';\nimport { NotificationsOutlined } from '@material-ui/icons';\n\nimport ListCard from '../../../common/cards/ListCard';\nimport { useSeason } from '../../../common/inputs/SeasonSelector';\n\nimport { NotificationGrid } from '../../notifications/NotificationGrid';\n\nexport default props => {\n const seasonId = useSeason();\n\n return <ListCard\n title=\"resources.notifications.labels.sources\"\n icon={<NotificationsOutlined fontSize=\"small\" />}\n reference=\"notifications\"\n target=\"participants\"\n sort={{ field: 'targetType', order: 'ASC' }}\n filter={{ or: [{ seasonId }, { seasonId: null }] }}\n collapsable\n >\n <NotificationGrid showParticipant={false} showTarget showContact />\n </ListCard>\n}\n","import React from 'react';\nimport { TextField, useRecordContext } from 'react-admin';\n\nimport ListCard from '../../../common/cards/ListCard';\nimport { useSeason } from '../../../common/inputs/SeasonSelector';\nimport TextArrayField from '../../../common/fields/TextArrayField';\nimport { isAuthorized } from '../../../common/Authorize';\nimport { TeamIcon } from '../../icons';\n\nimport { TeamField } from '../../teams/TeamField';\nimport { MemberDatagrid } from '../../members/MemberModal';\nimport { MemberStatusField } from '../../members/MemberFields';\n\nexport default ({ isSanctioned = true, ...props }) => {\n const participant = useRecordContext(props);\n const seasonId = useSeason();\n\n const showMembers = isAuthorized(participant, 'members', 'list')\n if (!showMembers) return null;\n\n return <ListCard\n title={isSanctioned ? 'resources.teams.labels.card.title' : 'resources.teams.labels.card.unsanctioned_title'}\n icon={<TeamIcon />}\n reference=\"members\"\n target=\"participants\"\n filter={{ 'team.seasonId': seasonId, 'team.isSanctioned': isSanctioned }}\n sort={{\n field: ['team.category.order', 'team.name'],\n order: ['ASC', 'ASC'],\n }}\n >\n <MemberDatagrid size=\"medium\">\n <TeamField source=\"teamId\" includeCategory=\"inline\" />\n <TextField source=\"number\" />\n\n <TextArrayField source=\"positions\" />\n <MemberStatusField label=\"resources.members.fields.status\" />\n </MemberDatagrid>\n </ListCard>\n}\n","import React from 'react';\nimport { NullableBooleanInput, TextInput } from 'react-admin';\n\nimport ListCard from '../../../common/cards/ListCard';\nimport { useSeason } from '../../../common/inputs/SeasonSelector';\nimport { InlineDateInput } from '../../../common/inputs/DateInput';\nimport { EventIcon } from '../../icons';\n\nimport { EventReferenceManyField } from '../../events/EventReferenceField';\nimport { EventView } from '../../events/EventView';\nimport { EventViewSettingsMenu, useEventSort, useShowCalendar } from '../../events/EventViewSettings';\nimport { rowClick } from '../../events/EventGrid';\n\nexport default props => {\n const seasonId = useSeason()\n const [ showCalendar ] = useShowCalendar();\n const sort = useEventSort();\n\n const actions = [\n <EventViewSettingsMenu disableAssignments disableGroupArenas />\n ]\n\n const filters = [\n <InlineDateInput source=\"startTime\" label=\"resources.games.filters.startTime\" variant=\"outlined\" alwaysOn />,\n <InlineDateInput source=\"endTime\" label=\"resources.games.filters.endTime\" variant=\"outlined\" disabled={showCalendar} alwaysOn />,\n <TextInput source=\"number\" variant=\"outlined\" />,\n <NullableBooleanInput source=\"isApproved\" label=\"resources.games.filters.isApproved\" variant=\"outlined\" />,\n ]\n\n return <ListCard\n title=\"resources.schedules.labels.scheduled_events\"\n icon={<EventIcon />}\n resource=\"games\"\n target=\"participants\"\n filter={{ seasonId, pastEvents: true }}\n filters={filters}\n sort={sort}\n base={EventReferenceManyField}\n baseProps={{\n includeGames: true,\n includeDraftGames: false,\n includePractices: true,\n includeActivities: true,\n includeSlots: false,\n includeAvailabilities: false,\n }}\n actions={actions}\n noResultsText={!showCalendar}\n >\n <EventView rowClick={rowClick} />\n </ListCard>\n}\n","import React from 'react';\nimport { NumberInput, SimpleForm, TextInput, ReferenceArrayInput, ReferenceInput, useLocale } from 'react-admin';\nimport { Grid } from '@material-ui/core'\n\nimport { FF_GRADES } from '@hisports/common/featureFlags';\nimport { translateApiProperty } from '@hisports/common';\n\nimport { useFlag } from '../../http';\nimport { ilike } from '../../http/restClient/filters';\nimport { SeasonInput } from '../../common/inputs/EnumInputs';\nimport Toolbar from '../../common/ra/Toolbar';\nimport { DateInput } from '../../common/inputs/DateInput';\nimport { SyncAlert, useRecordSynced } from '../../common/SyncAlert';\n\nimport { OfficeInput } from '../offices/OfficeInput';\nimport { ParticipantInput } from '../participants/ParticipantInput';\nimport AutocompleteInput from '../../common/inputs/AutocompleteInput';\n\n\nconst validateGrade = (grades, position) => {\n if (!grades) return;\n const grade = grades[position];\n if (grade == null) return;\n if (isNaN(grade)) return 'ra.validation.invalid';\n if (grade < 0) return 'ra.validation.greater_than_or_equal_zero';\n if (grade % 1 > 0) return 'ra.validation.invalid';\n}\n\nconst validate = values => {\n const errors = { grades: {} };\n\n if (values.level == null) {\n errors.level = 'ra.validation.required'\n } else if (values.level < 0) {\n errors.level = 'resources.qualifications.validations.level'\n } else if (values.level % 1 > 0) {\n errors.level = 'ra.validation.invalid'\n }\n\n errors.grades.Referee = validateGrade(values.grades, 'Referee')\n errors.grades.Linesperson = validateGrade(values.grades, 'Linesperson')\n\n if (!values.participantId) errors.participantId = 'ra.validation.required'\n if (!values.qualificationCategoryId) errors.qualificationCategoryId = 'ra.validation.required'\n if (!values.seasonId) errors.seasonId = 'ra.validation.required'\n if (!values.officeId) errors.officeId = 'ra.validation.required'\n\n return errors;\n}\n\nconst inputProps = {\n resource: 'qualifications',\n basePath: '/qualifications',\n variant: 'outlined',\n margin: 'none',\n fullWidth: true,\n}\n\nconst filterQualificationCategory = (name, locale) => name ? ({ or: [\n { name: ilike(name) },\n { [`i18n.${locale}.name`]: ilike(name) },\n] }) : undefined\n\nexport const QualificationCategoryInput = ({ multiple, filter, ...props }) => {\n const locale = useLocale();\n const Input = multiple ? ReferenceArrayInput : ReferenceInput;\n\n return <Input\n source=\"qualificationCategoryId\"\n reference=\"qualificationCategories\"\n filterToQuery={name => filterQualificationCategory(name, locale)}\n filter={filter}\n sort={{ field: [`i18n.${locale}.name`, 'name'], order: ['ASC', 'ASC'] }}\n {...props}\n >\n <AutocompleteInput\n optionText={qualificationcategory => translateApiProperty(qualificationcategory, 'name', locale)}\n />\n </Input>\n}\n\nexport const QualificationForm = props => {\n const [ isSynced, toggle ] = useRecordSynced(props);\n const isEnabled = useFlag();\n\n return <>\n <SyncAlert isSynced={isSynced} toggle={toggle} />\n <SimpleForm toolbar={<Toolbar isSynced={isSynced} />} validate={validate} {...props}>\n <Grid container spacing={2} fullWidth>\n <Grid item xs={12}>\n <ParticipantInput source=\"participantId\" filter={{ _scope: 'Tenant' }} label=\"resources.qualifications.fields.participantId\" disabled={props.initialValues?.id || props.initialValues?.participantId || isSynced} {...inputProps} />\n </Grid>\n <Grid item xs={12}>\n <QualificationCategoryInput source=\"qualificationCategoryId\" filter={{ _scope: 'Tenant' }} label=\"resources.qualifications.labels.qualification_category\" disabled={isSynced} {...inputProps} />\n </Grid>\n <Grid item xs={12} md={isEnabled(FF_GRADES) ? 4 : 12}>\n <NumberInput source=\"level\" min={0} step={1} label=\"resources.qualifications.labels.official_level\" helperText=\"\" disabled={isSynced} {...inputProps} />\n </Grid>\n {isEnabled(FF_GRADES) && <Grid item xs={12} md={4}>\n <NumberInput source=\"grades.Referee\" min={0} step={1} label=\"resources.qualifications.fields.grades.Referee\" helperText=\"ra.message.optional\" {...inputProps} />\n </Grid>}\n {isEnabled(FF_GRADES) && <Grid item xs={12} md={4}>\n <NumberInput source=\"grades.Linesperson\" min={0} step={1} label=\"resources.qualifications.fields.grades.Linesperson\" helperText=\"ra.message.optional\" {...inputProps} />\n </Grid>}\n <Grid item xs={12} md={6}>\n <SeasonInput source=\"seasonId\" label=\"resources.qualifications.fields.seasonId\" disabled={isSynced} {...inputProps} />\n </Grid>\n <Grid item xs={12} md={6}>\n <DateInput source=\"expiry\" label=\"resources.qualifications.fields.expiry\" helperText=\"ra.message.optional\" disabled={isSynced} {...inputProps} />\n </Grid>\n <Grid item xs={12}>\n <OfficeInput source=\"officeId\" filter={{ type: { nin: ['League', 'Tournament', 'Cup', 'Zone', 'Historical'] } }} label=\"resources.qualifications.fields.officeId\" disabled={isSynced} {...inputProps} />\n </Grid>\n <Grid item xs={12}>\n <TextInput source=\"notes\" helperText=\"ra.message.optional\" multiline rows=\"2\" disabled={isSynced} {...inputProps} />\n </Grid>\n </Grid>\n </SimpleForm>\n </>\n}\n","import React, { Fragment, useState } from 'react';\nimport { useTranslate } from 'react-admin';\nimport { Button } from '@material-ui/core';\nimport { Add } from '@material-ui/icons';\n\nimport { DialogDatagrid } from '../../common/dialogs/DialogDatagrid';\nimport { CreateResourceDialog, EditResourceDialog } from '../../common/dialogs/ResourceDialog';\n\nimport { QualificationForm } from './QualificationForm';\n\nconst AddQualificationDialog = props =>\n <CreateResourceDialog label=\"resources.qualifications.actions.add\" resource=\"officials\" basePath=\"/officials\" {...props}>\n <QualificationForm />\n </CreateResourceDialog>\n\nconst EditQualificationDialog = props =>\n <EditResourceDialog label=\"resources.qualifications.labels.edit\" resource=\"officials\" basePath=\"/officials\" {...props}>\n <QualificationForm />\n </EditResourceDialog>\n\nexport const AddQualificationButton = ({ size, variant, ...props }) => {\n const [ isOpen, setOpen ] = useState(false);\n const translate = useTranslate();\n return <>\n <Button color=\"primary\" size={size} variant={variant} startIcon={<Add />} onClick={() => setOpen(true)}>\n {translate('resources.qualifications.actions.add')}\n </Button>\n <AddQualificationDialog isOpen={isOpen} handleClose={() => setOpen(false)} {...props} />\n </>\n}\n\nexport const QualificationDatagrid = props => <DialogDatagrid dialog={EditQualificationDialog} {...props} />\n","import React from 'react';\nimport { ReferenceField } from 'react-admin';\n\nimport { TextLocaleField } from '../../common/fields/TextLocaleField';\n\nexport const QualificationCategoryField = ({ variant = 'body2', ...props }) => {\n return <ReferenceField basePath=\"/qualificationCategories\" resource=\"qualificationCategories\" reference=\"qualificationCategories\" link={false} {...props}>\n <TextLocaleField source=\"name\" variant={variant} />\n </ReferenceField>\n}\n\nQualificationCategoryField.defaultProps = {\n addLabel: true,\n}\n","import React from 'react';\nimport { useListContext } from 'react-admin';\n\nimport { FF_GRADES } from '@hisports/common/featureFlags';\n\nimport { useFlag } from '../../http';\nimport DateField from '../../common/fields/DateField';\nimport FunctionField from '../../common/fields/FunctionField'\n\nimport { ParticipantField } from '../participants/ParticipantField';\nimport { OfficeField } from '../offices/OfficeField';\nimport { SeasonField } from '../seasons/SeasonField';\n\nimport { QualificationDatagrid } from './QualificationModal';\nimport { QualificationCategoryField } from './QualificationCategoryField';\n\nconst renderLevel = (record, source, resource, translate) => {\n const level = record[source];\n if (level == null) return;\n if (level === 0) return translate('resources.qualifications.values.level.zero')\n return level;\n}\n\nconst renderGrades = (record, source, resource, translate) => {\n if (!record.grades) return null;\n const { Referee, Linesperson } = record.grades;\n const R = translate(`resources.games.values.assignment.position_short.Referee`)\n const L = translate(`resources.games.values.assignment.position_short.Linesperson`)\n if (!Referee && !Linesperson) return null;\n if (Referee && !Linesperson) return `${Referee}${R}`\n if (!Referee && Linesperson) return `${Referee}${L}`\n if (Referee == Linesperson) return `${Referee}`\n return `${Referee}${R} / ${Linesperson}${L}`\n}\n\nexport const QualificationGrid = ({ showParticipant = false, showOffice = true, ...props }) => {\n const { ids = [], data } = useListContext(props);\n const isEnabled = useFlag()\n\n const qualifications = ids?.map(id => data?.[id]);\n const showGrades = isEnabled(FF_GRADES) && qualifications.some(qualification => qualification?.grades != null)\n const showExpiry = qualifications.some(qualification => qualification?.expiry != null)\n\n return <QualificationDatagrid size=\"medium\" {...props}>\n <SeasonField source=\"seasonId\" />\n {showParticipant && <ParticipantField source=\"participantId\" includeId=\"inline\" />}\n <QualificationCategoryField source=\"qualificationCategoryId\" />\n <FunctionField source=\"level\" render={renderLevel} textAlign=\"right\" />\n {showGrades && <FunctionField source=\"grades\" render={renderGrades} />}\n {showOffice && <OfficeField source=\"officeId\" />}\n {showExpiry && <DateField source=\"expiry\" format=\"LL\" yearFormat=\"LL\" />}\n </QualificationDatagrid>;\n}\n","import React from 'react';\nimport { useRecordContext, NumberInput } from 'react-admin';\n\nimport { FF_DISABLE_ADD_QUALIFICATIONS } from '@hisports/common/featureFlags';\nimport { isPastSeason } from '@hisports/common/src/seasons';\n\nimport ListCard from '../../../common/cards/ListCard';\nimport { useSeason } from '../../../common/inputs/SeasonSelector';\nimport { isAuthorized } from '../../../common/Authorize';\nimport { useDefaultSeason, useFlag, useScopes } from '../../../http';\nimport { ParticipantIcon } from '../../icons';\n\nimport { QualificationGrid } from '../../qualifications/QualificationGrid';\nimport { AddQualificationButton } from '../../qualifications/QualificationModal';\nimport { QualificationCategoryInput } from '../../qualifications/QualificationForm';\n\nconst expiry = new Date().toISOString();\n\nexport default props => {\n const isEnabled = useFlag();\n const scopes = useScopes();\n const participant = useRecordContext(props);\n const seasonId = useSeason();\n const defaultSeason = useDefaultSeason();\n\n const showQualifications = isAuthorized(participant, 'qualifications', 'list')\n const canAddQualification = scopes.includes('internal') || (isAuthorized(participant, 'qualifications', 'create') && !isEnabled(FF_DISABLE_ADD_QUALIFICATIONS))\n\n if (!showQualifications) return null;\n\n const filters = [\n <NumberInput source=\"level\" variant=\"outlined\" alwaysOn />,\n <QualificationCategoryInput source=\"qualificationCategoryId\" filter={{ types: { inq: ['Official', 'Scorekeeper'] } }} variant=\"outlined\" alwaysOn />,\n // <QualificationCategoryTypeInput source=\"qualificationCategory.types\" variant=\"outlined\" alwaysOn />,\n ]\n\n const filter = isPastSeason(seasonId, defaultSeason)\n ? { seasonId,\n qualificationCategory: {\n types: { inq: ['Official', 'Scorekeeper'] } } }\n : { qualificationCategory: {\n types: { inq: ['Official', 'Scorekeeper'] } },\n or: [\n { seasonId },\n { expiry: { gte: expiry } },\n { expiry: { eq: null } }\n ]\n }\n\n return <ListCard\n title=\"resources.qualifications.labels.card.title\"\n icon={<ParticipantIcon />}\n reference=\"qualifications\"\n target=\"participants\"\n filter={{ _scope: 'Tenant', ...filter }}\n filters={filters}\n sort={{ field: 'seasonId', order: 'DESC' }}\n addButton={canAddQualification && <AddQualificationButton initialValues={{ participantId: participant?.id }} />}\n >\n <QualificationGrid />\n </ListCard>\n}\n","import React from 'react';\nimport { Datagrid } from 'react-admin';\nimport { makeStyles } from '@material-ui/core';\n\nimport { ListField } from '../lists/ListField';\n\nconst useStyles = makeStyles({\n headerRow: {\n display: 'none',\n }\n})\n\nexport const ListMemberGrid = ({ showOffice = true, ...props }) => {\n const classes = useStyles();\n return <Datagrid size=\"medium\" classes={classes} {...props}>\n <ListField source=\"listId\" />\n </Datagrid>\n}\n","import React from 'react';\nimport { useRecordContext } from 'react-admin';\n\nimport ListCard from '../../../common/cards/ListCard';\nimport { isAuthorized } from '../../../common/Authorize';\n\nimport { ListMemberGrid } from '../../listMembers/ListMemberGrid';\n\nexport default props => {\n const participant = useRecordContext(props);\n const showLists = isAuthorized(participant, 'listMembers', 'list')\n\n if (!showLists) return null;\n return <ListCard\n title=\"resources.lists.labels.card.title\"\n reference=\"listMembers\"\n target=\"participants\"\n >\n <ListMemberGrid />\n </ListCard>\n}\n","import React from 'react';\nimport { Grid } from '@material-ui/core'\nimport { SimpleForm } from 'react-admin';\n\nimport { SeasonInput } from '../../common/inputs/EnumInputs';\nimport Toolbar from '../../common/ra/Toolbar';\n\nimport { TargetInput } from '../targets/TargetInput';\nimport { ParticipantInput } from '../participants/ParticipantInput';\n\nconst validate = values => {\n const errors = {};\n\n if (!values.seasonId) errors.seasonId = 'ra.validation.required'\n if (!values.participantId) errors.participantId = 'ra.validation.required'\n if (!values.targetType) errors.targetType = 'ra.validation.required'\n if (!values.targetId) errors.targetId = 'ra.validation.required'\n\n return errors;\n}\n\nconst inputProps = {\n resource: 'officialConflicts',\n basePath: '/officialConflicts',\n variant: 'outlined',\n margin: 'none',\n fullWidth: true,\n}\n\nexport const OfficialConflictForm = props =>\n <SimpleForm toolbar={<Toolbar />} validate={validate} {...props}>\n <Grid container spacing={2} fullWidth>\n <Grid item xs={12}>\n <ParticipantInput source=\"participantId\" disabled {...inputProps} />\n </Grid>\n <Grid item xs={12}>\n <SeasonInput source=\"seasonId\" {...inputProps} />\n </Grid>\n <Grid item xs={12}>\n <TargetInput source=\"targetId\" {...inputProps} />\n </Grid>\n </Grid>\n </SimpleForm>\n","import React, { Fragment, useState } from 'react';\nimport { useTranslate } from 'react-admin';\nimport { Button } from '@material-ui/core';\nimport { Add } from '@material-ui/icons';\n\nimport { DialogDatagrid } from '../../common/dialogs/DialogDatagrid';\nimport { CreateResourceDialog, EditResourceDialog } from '../../common/dialogs/ResourceDialog';\n\nimport { OfficialConflictForm } from './OfficialConflictForm';\n\nconst AddOfficialConflictDialog = props =>\n <CreateResourceDialog label=\"resources.officialConflicts.actions.add\" resource=\"officialConflicts\" basePath=\"/officialConflicts\" {...props}>\n <OfficialConflictForm />\n </CreateResourceDialog>\n\nconst EditOfficialConflictDialog = props =>\n <EditResourceDialog label=\"resources.officialConflicts.labels.edit\" resource=\"officialConflicts\" basePath=\"/officialConflicts\" {...props}>\n <OfficialConflictForm />\n </EditResourceDialog>\n\nexport const AddOfficialConflictButton = ({ size, variant, ...props }) => {\n const [ isOpen, setOpen ] = useState(false);\n const translate = useTranslate();\n return <>\n <Button color=\"primary\" size={size} variant={variant} startIcon={<Add />} onClick={() => setOpen(true)}>{translate('resources.officialConflicts.labels.add_team')}</Button>\n <AddOfficialConflictDialog isOpen={isOpen} handleClose={() => setOpen(false)} {...props} />\n </>\n}\n\nexport const OfficialConflictDatagrid = props => <DialogDatagrid dialog={EditOfficialConflictDialog} {...props} />\n","import React from 'react';\n\nimport { SeasonField } from '../seasons/SeasonField';\nimport { TargetField } from '../targets/TargetField';\n\nimport { OfficialConflictDatagrid } from './OfficialConflictModal';\n\nexport const OfficialConflictGrid = props =>\n <OfficialConflictDatagrid size=\"medium\" {...props}>\n <SeasonField source=\"seasonId\" />\n <TargetField source=\"targetId\" />\n </OfficialConflictDatagrid>\n","import React from 'react';\nimport { useRecordContext } from 'react-admin';\n\nimport ListCard from '../../../common/cards/ListCard';\nimport { useSeason } from '../../../common/inputs/SeasonSelector';\nimport { isAuthorized } from '../../../common/Authorize';\n\nimport { OfficialConflictGrid } from '../../officialConflicts/OfficialConflictGrid';\nimport { AddOfficialConflictButton } from '../../officialConflicts/OfficialConflictModal';\n\nexport default props => {\n const participant = useRecordContext(props);\n const seasonId = useSeason();\n\n const showOfficials = isAuthorized(participant, 'officialConflicts', 'list')\n const canAddOfficial = isAuthorized(participant, 'officialConflicts', 'create')\n\n if (!showOfficials) return null;\n return <ListCard\n title=\"resources.officialConflicts.labels.card.title\"\n reference=\"officialConflicts\"\n target=\"participants\"\n filter={{ seasonId }}\n addButton={canAddOfficial && <AddOfficialConflictButton initialValues={{ participantId: participant?.id, targetType: 'Team' }} />}\n >\n <OfficialConflictGrid />\n </ListCard>\n}\n","import React from 'react';\nimport { ReferenceField } from 'react-admin';\n\nimport { TextLocaleField } from '../../common/fields/TextLocaleField';\n\nexport const DivisionField = ({ variant = 'body2', ...props }) => {\n return <ReferenceField basePath=\"/divisions\" resource=\"divisions\" reference=\"divisions\" {...props} link={false}>\n <TextLocaleField source=\"name\" variant={variant} />\n </ReferenceField>\n}\n\nDivisionField.defaultProps = {\n addLabel: true,\n}\n","import React from 'react';\nimport { SimpleForm } from 'react-admin';\nimport { Grid } from '@material-ui/core'\n\nimport { SeasonInput } from '../../common/inputs/EnumInputs';\nimport Toolbar from '../../common/ra/Toolbar';\n\nimport { ParticipantInput } from '../participants/ParticipantInput';\nimport { OfficeInput } from '../offices/OfficeInput';\nimport { DivisionInput } from '../categories/DivisionInput';\n\nconst validate = values => {\n const errors = {};\n\n if (!values.participantId) errors.participantId = 'ra.validation.required'\n if (!values.seasonId) errors.seasonId = 'ra.validation.required'\n if (!values.divisionId) errors.divisionId = 'ra.validation.required'\n if (!values.officeId) errors.officeId = 'ra.validation.required'\n\n return errors;\n}\n\nconst inputProps = {\n resource: 'registrations',\n basePath: '/registrations',\n variant: 'outlined',\n margin: 'none',\n fullWidth: true,\n}\n\nexport default props =>\n <SimpleForm toolbar={<Toolbar />} validate={validate} {...props}>\n <Grid container spacing={2} fullWidth>\n <Grid item xs={12}>\n <ParticipantInput source=\"participantId\" filter={{ _scope: 'Tenant' }} disabled={props.initialValues?.id || props.initialValues?.participantId} {...inputProps} />\n </Grid>\n <Grid item xs={12} sm={4}>\n <SeasonInput source=\"seasonId\" {...inputProps} />\n </Grid>\n <Grid item xs={12} sm={8}>\n <DivisionInput source=\"divisionId\" {...inputProps} />\n </Grid>\n <Grid item xs={12}>\n <OfficeInput source=\"officeId\" filter={{ type: 'Association' }} {...inputProps} />\n </Grid>\n </Grid>\n </SimpleForm>\n","import React, { Fragment, useState } from 'react';\nimport { useTranslate } from 'react-admin';\nimport { Button } from '@material-ui/core';\nimport { Add } from '@material-ui/icons';\n\nimport { DialogDatagrid } from '../../common/dialogs/DialogDatagrid';\nimport { CreateResourceDialog, EditResourceDialog } from '../../common/dialogs/ResourceDialog';\n\nimport RegistrationForm from './RegistrationForm';\n\nconst AddRegistrationDialog = props =>\n <CreateResourceDialog label=\"resources.registrations.actions.add\" resource=\"registrations\" basePath=\"/registrations\" {...props}>\n <RegistrationForm />\n </CreateResourceDialog>\n\nconst EditRegistrationDialog = props =>\n <EditResourceDialog label=\"resources.registrations.labels.edit\" resource=\"registrations\" basePath=\"/registrations\" {...props}>\n <RegistrationForm />\n </EditResourceDialog>\n\nexport const AddRegistrationButton = ({ size, variant, ...props }) => {\n const [ isOpen, setOpen ] = useState(false);\n const translate = useTranslate();\n return <>\n <Button color=\"primary\" size={size} variant={variant} startIcon={<Add />} onClick={() => setOpen(true)}>\n {translate('resources.registrations.actions.add')}\n </Button>\n <AddRegistrationDialog isOpen={isOpen} handleClose={() => setOpen(false)} {...props} />\n </>\n}\n\nexport const RegistrationDatagrid = props => <DialogDatagrid dialog={EditRegistrationDialog} {...props} />\n","import React from 'react';\n\nimport { ParticipantField } from '../participants/ParticipantField';\nimport { OfficeField } from '../offices/OfficeField';\nimport { DivisionField } from '../categories/DivisionField';\nimport { SeasonField } from '../seasons/SeasonField';\n\nimport { RegistrationDatagrid } from './RegistrationModal';\n\nexport const RegistrationGrid = ({ showParticipant = false, showOffice = true, ...props }) =>\n <RegistrationDatagrid size=\"medium\" {...props}>\n <SeasonField source=\"seasonId\" />\n {showParticipant && <ParticipantField source=\"participantId\" includeId=\"inline\" />}\n {showOffice && <OfficeField source=\"officeId\" />}\n <DivisionField source=\"divisionId\" />\n </RegistrationDatagrid>\n","import React from 'react';\nimport { useRecordContext } from 'react-admin';\n\nimport ListCard from '../../../common/cards/ListCard';\nimport { useSeason } from '../../../common/inputs/SeasonSelector';\nimport { isAuthorized } from '../../../common/Authorize';\nimport { ParticipantIcon } from '../../icons';\n\nimport { RegistrationGrid } from '../../registrations/RegistrationGrid';\nimport { AddRegistrationButton } from '../../registrations/RegistrationModal';\n\nexport default props => {\n const participant = useRecordContext(props);\n const seasonId = useSeason();\n\n const showRegistrations = isAuthorized(participant, 'registrations', 'list')\n const canAddRegistration = isAuthorized(participant, 'registrations', 'create')\n\n if (!showRegistrations) return null;\n return <ListCard\n title=\"resources.registrations.labels.card.title\"\n icon={<ParticipantIcon />}\n reference=\"registrations\"\n target=\"participants\"\n filter={{ seasonId }}\n addButton={canAddRegistration && <AddRegistrationButton initialValues={{ participantId: participant?.id }} />}\n >\n <RegistrationGrid />\n </ListCard>\n}\n","import React from 'react';\nimport { useRecordContext } from 'react-admin';\nimport { VerifiedUserOutlined } from '@material-ui/icons';\n\nimport ListCard from '../../../common/cards/ListCard';\nimport { isAuthorized } from '../../../common/Authorize';\n\nimport { RoleGrid } from '../../roles/RoleGrid';\nimport { AddRoleButton } from '../../roles/RoleModal';\n\nexport default props => {\n const participant = useRecordContext(props);\n const showRoles = isAuthorized(participant, 'permissions', 'list')\n if (!showRoles) return null;\n\n return <ListCard\n title=\"resources.permissions.labels.administrative\"\n icon={<VerifiedUserOutlined fontSize=\"small\" />}\n reference=\"permissions\"\n target=\"participants\"\n label=\"Roles\"\n sort={{ field: 'roleId', order: 'ASC' }}\n addButton={<AddRoleButton initialValues={{ principalId: participant?.id, principalType: 'Participant' }} />}\n collapsable\n >\n <RoleGrid showAccount={false} />\n </ListCard>\n}\n","import React from 'react';\nimport { SimpleForm } from 'react-admin';\nimport { Grid } from '@material-ui/core';\n\nimport Toolbar from '../../common/ra/Toolbar';\nimport SwitchInput from '../../common/inputs/SwitchInput';\n\nimport { AccountInput } from '../accounts/AccountInput';\nimport { ParticipantInput } from '../participants/ParticipantInput';\n\nconst validate = values => {\n const errors = {};\n\n if (!values.accountId) errors.accountId = 'ra.validation.required'\n if (!values.participantId) errors.participantId = 'ra.validation.required'\n\n return errors;\n}\n\nconst inputProps = {\n resource: 'identities',\n basePath: '/identities',\n variant: 'outlined',\n margin: 'none',\n fullWidth: true,\n}\n\nexport const IdentityForm = props =>\n <SimpleForm toolbar={<Toolbar />} validate={validate} {...props}>\n <Grid container spacing={2} fullWidth>\n <Grid item xs={12}>\n <AccountInput source=\"accountId\" disabled {...inputProps} />\n </Grid>\n <Grid item xs={12}>\n <ParticipantInput source=\"participantId\" {...inputProps} />\n </Grid>\n\n <Grid item xs={12}>\n <SwitchInput\n source=\"isPrimary\"\n allowEmpty\n label=\"resources.identities.fields.isPrimary\"\n helperText=\"resources.identities.helpers.isPrimary\"\n options={{ color: 'secondary' }}\n {...inputProps}\n />\n </Grid>\n </Grid>\n </SimpleForm>\n","import React, { useState } from 'react';\nimport { useTranslate } from 'react-admin';\nimport { Button } from '@material-ui/core';\nimport { Add } from '@material-ui/icons';\n\nimport { DialogDatagrid } from '../../common/dialogs/DialogDatagrid';\nimport { CreateResourceDialog, EditResourceDialog } from '../../common/dialogs/ResourceDialog';\n\nimport { IdentityForm } from './IdentityForm';\n\nconst AddIdentityDialog = props =>\n <CreateResourceDialog label=\"resources.identities.actions.add\" resource=\"identities\" basePath=\"/identities\" {...props}>\n <IdentityForm />\n </CreateResourceDialog>\n\nconst EditIdentityDialog = props =>\n <EditResourceDialog label=\"resources.identities.labels.edit\" resource=\"identities\" basePath=\"/identities\" {...props}>\n <IdentityForm />\n </EditResourceDialog>\n\nexport const AddIdentityButton = ({ size, variant, ...props }) => {\n const translate = useTranslate();\n const [ isOpen, setOpen ] = useState(false);\n return <>\n <Button color=\"primary\" size={size} variant={variant} startIcon={<Add />} onClick={() => setOpen(true)}>{translate('resources.identities.actions.add')}</Button>\n <AddIdentityDialog isOpen={isOpen} handleClose={() => setOpen(false)} {...props} />\n </>\n}\n\nexport const IdentityDatagrid = props => <DialogDatagrid dialog={EditIdentityDialog} {...props} />\n","import React from 'react';\nimport { ReferenceField } from 'react-admin';\nimport { makeStyles } from '@material-ui/core';\n\n\nimport FunctionField from '../../common/fields/FunctionField'\n\nimport { AccountField } from '../accounts/AccountField';\nimport { ParticipantField } from '../participants/ParticipantField';\nimport { IdentityDatagrid } from './IdentityModal';\nimport { SMAChip } from '../../common/chips/SMAChip';\n\n\nconst useStyles = makeStyles(theme => ({\n headerRow: {\n display: 'none',\n },\n row: {\n '& .sso': {\n width: theme.spacing(0),\n },\n }\n}))\n\nconst PrimaryField = props =>\n <FunctionField {...props} render={(identity, source, resource, translate) => {\n if (identity.isPrimary) return translate('resources.participants.fields.isPrimary')\n }} />\n\nconst ExternalIdField = props => {\n return <ReferenceField basePath=\"/accounts\" resource=\"accounts\" reference=\"accounts\" link={false} {...props}>\n <FunctionField {...props} render={(account, source, resource, translate) => {\n if (account.externalId) return <SMAChip />\n }} />\n </ReferenceField>\n}\n\nexport const IdentityGrid = ({ showAccount = true, showParticipant = true, component: Datagrid = IdentityDatagrid, ...props }) => {\n const classes = useStyles()\n\n return <Datagrid classes={classes} size=\"medium\" {...props}>\n {showAccount && <ExternalIdField cellClassName=\"sso\" source=\"accountId\" />}\n {showAccount && <AccountField source=\"accountId\" allowEmpty label=\"\" />}\n {showParticipant && <ParticipantField source=\"participantId\" allowEmpty label=\"\" />}\n <PrimaryField />\n </Datagrid>\n}\n","import React from 'react';\nimport { Datagrid, useRecordContext } from 'react-admin';\nimport { useSelector } from 'react-redux';\n\nimport { FF_SSO } from '@hisports/common/featureFlags';\n\nimport ListCard from '../../../common/cards/ListCard';\nimport { isAuthorized } from '../../../common/Authorize';\nimport { useFlag } from '../../../http';\n\nimport { IdentityGrid } from '../../identities/IdentityGrid';\nimport { AccountIcon } from '../../icons';\nimport { InviteButton, SsoInviteButton } from './ParticipantCard';\nimport { useParticipantStatus } from '../ParticipantStatusContext';\n\nconst useCanInvite = () => {\n const identities = useSelector(store => store.admin.resources.identities.data);\n const participant = useRecordContext();\n const { types } = useParticipantStatus();\n\n const hasTypes = types?.length > 0;\n const hasIdentity = Object.values(identities).some(identity => identity.participantId === participant.id);\n\n return !hasIdentity && hasTypes && isAuthorized(participant, 'participants', 'invite');\n};\n\nexport default props => {\n const participant = useRecordContext(props);\n const isEnabled = useFlag();\n const canInvite = useCanInvite();\n\n const showIdentities = isAuthorized(participant, 'identities', 'show');\n if (!showIdentities) return null;\n\n\n const canSsoInvite = isEnabled(FF_SSO);\n const Invite = (canInvite && !canSsoInvite)\n ? <InviteButton participant={participant} />\n : (canInvite && canSsoInvite ? <SsoInviteButton participant={participant} /> : null);\n\n const onRowClick = (id, basePath, record) => `/accounts/${record.accountId}/show`\n\n return <ListCard\n title=\"resources.accounts.labels.card.title\"\n icon={<AccountIcon fontSize=\"small\" />}\n reference=\"identities\"\n target=\"participants\"\n rowsPerPageOptions={[]}\n addButton={Invite}\n collapsable\n >\n <IdentityGrid showParticipant={false} component={Datagrid} rowClick={onRowClick} />\n </ListCard>\n}\n","import React, { useRef } from 'react';\nimport { Grid } from '@material-ui/core'\nimport { GET_ONE, NumberInput, ReferenceArrayInput, ReferenceInput, SimpleForm, TextInput, useQuery } from 'react-admin';\n\nimport Toolbar from '../../common/ra/Toolbar';\nimport { EnumInput } from '../../common/inputs/EnumInputs';\nimport { OfficeInput } from '../offices/OfficeInput';\nimport createCalculator from 'final-form-calculate';\nimport { useFormState } from 'react-final-form';\nimport { isEmpty } from '@hisports/parsers';\nimport { isInteger } from 'lodash';\n\nconst validate = values => {\n const errors = {};\n\n if (!values?.officeId) errors.officeId = 'ra.validation.required'\n if (!values?.attributeId) errors.attributeId = 'ra.validation.required'\n if (!values?.value && values?.value !== 0) errors.value = 'ra.validation.required'\n\n return errors;\n}\n\nconst validateNumberValue = (options) => {\n if (isInteger(options?.min) && !isInteger(options?.max)) {\n return [minValueValidation(options?.min)];\n } else if (!isInteger(options?.min) && isInteger(options?.max)) {\n return [maxValueValidation(options?.max)];\n } else if (isInteger(options?.min) && isInteger(options?.max)) {\n return [minValueValidation(options?.min), maxValueValidation(options?.max)];\n }\n\n return [];\n}\n\nconst minValueValidation = (min) => (value) => {\n return (value < min) ? { message: 'ra.validation.minValue', args: { min } } : undefined;\n}\n\nconst maxValueValidation = (max) => (value) => {\n return value > max ? { message: 'ra.validation.maxValue', args: { max } } : undefined;\n}\n\nconst inputProps = {\n resource: 'attributeValues',\n basePath: '/attributeValues',\n variant: 'outlined',\n margin: 'none',\n fullWidth: true,\n}\n\nconst dropdownValueTypeChoice = values => {\n const options = [];\n\n Object.keys(values).map(function(key) {\n options.push({ id: values[key], name: values[key] });\n })\n\n return options;\n}\n\nexport const ParticipantAttributeInput = ({ multiple, ...props }) => {\n const { values } = useFormState();\n const Input = multiple ? ReferenceArrayInput : ReferenceInput;\n const officeId = values?.officeId ? values.officeId : 0;\n\n if (!officeId && officeId === 0) return null;\n\n return <Input\n source=\"attributeId\"\n reference=\"attributeTypes\"\n filter={{ targetType: 'Participant', type: 'Officiating', effectiveOffices: officeId, includeParents: true, _scope: 'Parents' }}\n sort={{\n field: 'name',\n order: 'ASC'\n }}\n {...props}\n >\n <EnumInput {...inputProps} />\n </Input>\n}\n\nexport const AttributeValuesInput = ({ ...props }) => {\n const { values } = useFormState();\n const attributeId = values?.attributeId ? values.attributeId : 0;\n\n const { data: typeData, loading } = useQuery({\n type: GET_ONE,\n resource: 'attributeTypes',\n payload: {\n id: attributeId,\n }\n })\n\n if (loading) {\n return <TextInput disabled source=\"value\" {...inputProps} />\n }\n\n switch (typeData?.valueType) {\n case 'Dropdown':\n return <EnumInput source=\"value\" choices={dropdownValueTypeChoice(typeData?.options?.values)} {...inputProps} />\n case 'Number':\n return <NumberInput validate={validateNumberValue(typeData?.options)} min={typeData?.options?.min} max={typeData?.options?.max} source=\"value\" {...inputProps} />\n case 'Text':\n return <TextInput source=\"value\" {...inputProps} />\n default:\n return null;\n }\n}\n\nexport const AttributeValuesForm = props => {\n const decorators = useRef([createCalculator({\n field: 'officeId',\n updates: {\n attributeId: (officeId, values, prevValues) => {\n if (isEmpty(prevValues) || prevValues.officeId == officeId) {\n return values.attributeId;\n }\n\n return null;\n }\n }\n }, {\n field: 'attributeId',\n updates: {\n value: (attributeId, values, prevValues) => {\n if (isEmpty(prevValues) || prevValues.attributeId == attributeId) {\n return values.value;\n }\n\n return null;\n }\n }\n })])\n\n return <SimpleForm toolbar={<Toolbar />} validate={validate} decorators={decorators.current} {...props}>\n <Grid container spacing={2} fullWidth>\n <Grid item xs={12}>\n <OfficeInput source=\"officeId\" {...inputProps} />\n </Grid>\n <Grid item xs={12}>\n <ParticipantAttributeInput {...inputProps} />\n </Grid>\n <Grid item xs={12}>\n <AttributeValuesInput {...inputProps} />\n </Grid>\n </Grid>\n </SimpleForm>\n}\n","import React, { useState } from 'react';\nimport { useTranslate } from 'react-admin';\nimport { Button } from '@material-ui/core';\nimport { Add } from '@material-ui/icons';\n\nimport { DialogDatagrid } from '../../common/dialogs/DialogDatagrid';\nimport { CreateResourceDialog, EditResourceDialog } from '../../common/dialogs/ResourceDialog';\nimport { AttributeValuesForm } from './AttributeValuesForm';\n\nconst AddAttributeValuesDialog = props =>\n <CreateResourceDialog label=\"resources.attributeValues.actions.add\" resource=\"attributeValues\" basePath=\"/attributeValues\" {...props}>\n <AttributeValuesForm />\n </CreateResourceDialog>\n\nconst EditAttributeValuesDialog = props =>\n <EditResourceDialog label=\"resources.attributeValues.labels.edit\" resource=\"attributeValues\" basePath=\"/attributeValues\" {...props}>\n <AttributeValuesForm />\n </EditResourceDialog>\n\nexport const AddAttributeValuesButton = ({ size, variant, ...props }) => {\n const [ isOpen, setOpen ] = useState(false);\n const translate = useTranslate();\n return <>\n <Button color=\"primary\" size={size} variant={variant} startIcon={<Add />} onClick={() => setOpen(true)}>{translate('resources.attributeValues.actions.add')}</Button>\n <AddAttributeValuesDialog isOpen={isOpen} handleClose={() => setOpen(false)} {...props} />\n </>\n}\n\nexport const AttributeValuesDatagrid = props => <DialogDatagrid dialog={EditAttributeValuesDialog} {...props} />\n","import React from 'react';\nimport { TextField } from 'react-admin';\nimport { AttributeTypeField } from '../attributeTypes/AttributeTypeField';\nimport { OfficeField } from '../offices/OfficeField';\nimport { AttributeValuesDatagrid } from './AttributeValuesModal';\n\n\nexport const AttributeValuesGrid = props =>\n <AttributeValuesDatagrid size=\"medium\" {...props}>\n <AttributeTypeField source=\"attributeId\" />\n <TextField source=\"value\" />\n <OfficeField source=\"officeId\" />\n </AttributeValuesDatagrid>\n","import React from 'react';\nimport { useRecordContext } from 'react-admin';\n\nimport ListCard from '../../../common/cards/ListCard';\nimport { isAuthorized } from '../../../common/Authorize';\nimport { AddAttributeValuesButton } from '../../attributeValues/AttributeValuesModal';\nimport { AttributeValuesGrid } from '../../attributeValues/AttributeValuesGrid';\nimport { useScopes } from '../../../http';\n\n\nexport default ({ type, targetType, ...props }) => {\n const participant = useRecordContext(props);\n const scopes = useScopes();\n const participantId = participant?.id;\n\n const showAttributeValues = isAuthorized(scopes, 'attributeValues', 'list');\n const canAddAttributeValues = isAuthorized(scopes, 'attributeValues', 'create');\n const addButton = canAddAttributeValues && <AddAttributeValuesButton initialValues={{ targetType, targetId: participantId }} />;\n\n if (!showAttributeValues) return null;\n\n return <ListCard\n title=\"resources.attributeValues.labels.card.title\"\n subtitle=\"resources.attributeValues.labels.card.subtitle\"\n reference=\"attributeValues\"\n target=\"targetId\"\n filter={{ targetType, targetId: participantId, 'attributeType.type': type }}\n sort={{ field: 'attributeType.name', order: 'ASC' }}\n addButton={addButton}\n >\n <AttributeValuesGrid />\n </ListCard>\n}\n","import React from 'react';\nimport { useRecordContext, useTranslate } from 'react-admin';\nimport { Gavel } from '@material-ui/icons';\n\nimport ListCard from '../../../common/cards/ListCard';\nimport { SuspensionStatusInput } from '../../../common/inputs/EnumInputs';\nimport { SuspensionGrid } from '../../scoresheet/suspension/SuspensionGrid';\nimport { TeamInput } from '../../teams/TeamInput';\nimport { CategoryInput } from '../../categories/CategoryInput';\n\nexport default props => {\n const translate = useTranslate();\n const participant = useRecordContext(props);\n const participantId = participant?.id;\n\n const filters = [\n <TeamInput source=\"teamId\" variant=\"outlined\" />,\n <CategoryInput source=\"game.categoryId\" label=\"resources.games.fields.categoryId\" variant=\"outlined\" />,\n <SuspensionStatusInput source=\"status\" variant=\"outlined\" multiple />,\n ]\n\n return <ListCard\n title={translate(\"resources.suspensions.name\", 2)}\n icon={<Gavel />}\n basePath=\"/suspensions\"\n resource=\"suspensions\"\n filter={{ participantId }}\n sort={{ field: ['game.date', 'participant.lastName', 'participant.firstName'], order: ['DESC', 'ASC', 'ASC'] }}\n filters={filters}\n {...props}\n >\n <SuspensionGrid multipleGames hideParticipant rowOptions={{ isRowSelectable: () => false }} />\n </ListCard>\n}\n","import React from 'react';\nimport { useRecordContext } from 'react-admin';\nimport { LocalAtm } from '@material-ui/icons';\n\nimport { usePermissions } from '../../../http';\nimport ListCard from '../../../common/cards/ListCard';\nimport { isAuthorized } from '../../../common/Authorize';\nimport { useSeason } from '../../../common/inputs/SeasonSelector';\nimport { AddTransactionButton } from '../../officialTransactions/TransactionModal';\nimport { TransactionsGrid } from '../../officialTransactions/TransactionsGrid';\nimport TransactionsExporter from '../../officialTransactions/TransactionsExporter';\n\nexport default ({ ...props }) => {\n const participant = useRecordContext();\n const permissions = usePermissions();\n const seasonId = useSeason();\n\n const canAddTransactions = isAuthorized(participant, 'officialTransactions', 'create');\n const canSelectAnyOffice = permissions.some(p => p.roleType === 'System')\n const allowedOfficeIds = permissions\n .filter(p =>\n p.inherited === false\n && p.roleType === 'Office'\n && p.scopes.some(scope => ['assigning:manage', 'assigning:assign'].includes(scope))\n )\n .flatMap(p => p.officeIds)\n\n let officeId;\n if (!canSelectAnyOffice && allowedOfficeIds.length === 1) {\n officeId = allowedOfficeIds[0];\n }\n\n const actions = [\n <TransactionsExporter target=\"participantId\" showSummary />\n ]\n\n const initialValues = { officeId, participantId: participant?.id }\n return <ListCard\n title=\"resources.officialTransactions.name\"\n icon={<LocalAtm />}\n reference=\"officialTransactions\"\n target=\"participantId\"\n sort={{ field: ['game.date', 'game.number'], order: ['DESC', 'ASC'] }}\n actions={actions}\n filter={{ 'game.seasonId': seasonId }}\n addButton={canAddTransactions && <AddTransactionButton\n initialValues={initialValues}\n officeIds={!canSelectAnyOffice ? allowedOfficeIds : undefined}\n target=\"participantId\"\n />}\n collapsable\n {...props}\n >\n <TransactionsGrid hideParticipant />\n </ListCard>\n}\n","import React from 'react';\nimport { useTranslate } from 'react-admin';\nimport { SportsOutlined } from '@material-ui/icons';\n\nimport { isLegacyRulebookSeason } from '@hisports/scoresheet/src/util';\n\nimport ListCard from '../../../common/cards/ListCard';\nimport { useSeason } from '../../../common/inputs/SeasonSelector';\n\nimport { GamePenaltyGrid } from '../../gamepenalties/GamePenaltyGrid';\nimport { TeamInput } from '../../teams/TeamInput';\nimport { CategoryInput } from '../../categories/CategoryInput';\n\nexport default props => {\n const translate = useTranslate()\n const seasonId = useSeason();\n\n const isLegacy = isLegacyRulebookSeason(seasonId);\n\n const filters = [\n <TeamInput source=\"teamId\" variant=\"outlined\" />,\n <CategoryInput source=\"game.categoryId\" label=\"resources.games.fields.categoryId\" variant=\"outlined\" />,\n ]\n\n return <ListCard\n title={translate('resources.gamepenalties.name', 2)}\n icon={<SportsOutlined />}\n basePath=\"/gamepenalties\"\n reference=\"gamepenalties\"\n target=\"participantId\"\n filter={{ 'game.seasonId': seasonId, _options: { includeMeta: isLegacy } }}\n sort={{ field: ['game.date', 'participant.lastName', 'participant.firstName'], order: ['DESC', 'ASC', 'ASC'] }}\n filters={filters}\n {...props}\n >\n <GamePenaltyGrid seasonId={seasonId} multipleGames hideParticipant rowOptions={{ isRowSelectable: () => false }} />\n </ListCard>\n}\n","import React from 'react';\nimport { useRecordContext } from 'react-admin';\nimport { EmojiPeople } from '@material-ui/icons';\n\nimport ListCard from '../../../common/cards/ListCard';\nimport { isAuthorized } from '../../../common/Authorize';\nimport { ClaimStatusEnumInput } from '../../../common/inputs/EnumInputs';\nimport { useSeason } from '../../../common/inputs/SeasonSelector';\nimport { ClaimsGrid } from '../../officialClaims/ClaimsGrid';\nimport { AddClaimButton } from '../../officialClaims/ClaimModal';\nimport { ClaimBulkAction } from '../../officialClaims/ClaimBulkActions';\n\nexport default ({ ...props }) => {\n const participant = useRecordContext(props);\n const seasonId = useSeason();\n\n const filters = [\n <ClaimStatusEnumInput source=\"status\" variant=\"outlined\" multiple alwaysOn />,\n ]\n\n const canAddClaims = isAuthorized(participant, 'officialClaims', 'create');\n const canBulkAction = isAuthorized(participant, 'officialClaims', 'changeStatus');\n\n return <ListCard\n title=\"resources.officialClaims.labels.card.title\"\n icon={<EmojiPeople />}\n reference=\"officialClaims\"\n target=\"participantId\"\n filters={filters}\n filter={{ 'game.seasonId': seasonId }}\n sort={{ field: ['status', 'participant.lastName', 'participant.firstName', 'game.startTime'], order: ['ASC', 'ASC', 'ASC', 'ASC'] }}\n bulkActionButtons={canBulkAction && <ClaimBulkAction />}\n addButton={canAddClaims && <AddClaimButton\n target=\"participantId\"\n initialValues={{\n participantId: participant?.id,\n }}\n />}\n collapsable\n >\n <ClaimsGrid hideParticipant />\n </ListCard>\n}\n","import React from \"react\";\nimport { FunctionField, ReferenceField } from \"react-admin\";\n\nimport { translateApiProperty } from \"@hisports/common\";\n\nexport const MemberTypeField = ({ ...props }) => {\n return <ReferenceField basePath=\"/memberTypes\" resource=\"memberTypes\" reference=\"memberTypes\" link={false} {...props}>\n <FunctionField source=\"name\" render={memberType => {\n return translateApiProperty(memberType, 'name');\n }} />\n </ReferenceField>\n};\n","import React from \"react\"\nimport { BooleanField, Datagrid } from \"react-admin\"\nimport { OfficeField } from \"../offices/OfficeField\"\nimport { MemberTypeField } from \"./MemberTypeField\"\nimport { SeasonField } from \"../seasons/SeasonField\"\n\n\nexport const ParticipantMemberTypeGrid = ({ ...props }) => {\n return <Datagrid size=\"small\" {...props}>\n <SeasonField source=\"seasonId\" />\n <MemberTypeField source=\"memberTypeId\" />\n <OfficeField source=\"officeId\" />\n <BooleanField source=\"isActive\" />\n </Datagrid>\n}\n","import React from \"react\"\nimport { CardMembership } from \"@material-ui/icons\"\n\nimport ListCard from \"../../../common/cards/ListCard\"\nimport { ParticipantMemberTypeGrid } from \"../../memberTypes/ParticipantMemberTypeGrid\"\n\nexport default props => {\n return <ListCard\n title=\"resources.participantMemberTypes.labels.card.title\"\n subtitle=\"resources.participantMemberTypes.labels.card.subtitle\"\n icon={<CardMembership />}\n reference=\"participantMemberTypes\"\n target=\"participants\"\n >\n <ParticipantMemberTypeGrid />\n </ListCard>\n}\n","import React from 'react';\nimport { useRecordContext } from 'react-admin';\nimport { Grid } from '@material-ui/core';\n\nimport { FF_SID_MEMBER_TYPES } from '@hisports/common/featureFlags';\n\nimport { useFlag, useScopes } from '../../http';\nimport { isAuthorized } from '../../common/Authorize';\nimport { TabbedShowLayout, Tab } from '../../common/ra/TabbedShowLayout';\n\nimport AvailabilityCard from '../availabilities/AvailabilityCard';\nimport ReportsCard from '../reports/ReportsCard';\nimport OfficiatingActionsCard from '../officials/cards/OfficiatingActionsCard';\n\nimport ParticipantCard from './cards/ParticipantCard';\nimport ProfileCard from './cards/ProfileCard';\nimport ContactsCard from './cards/ContactsCard';\nimport AddressesCard from './cards/AddressesCard';\nimport NotificationsCard from './cards/NotificationsCard';\nimport TeamsCard from './cards/TeamsCard';\nimport EventsCard from './cards/EventsCard';\nimport QualificationsCard from './cards/QualificationsCard';\nimport ListsCard from './cards/ListsCard';\nimport ConflictsCard from './cards/ConflictsCard';\nimport RegistrationsCard from './cards/RegistrationsCard';\nimport RolesCard from './cards/RolesCard';\nimport AccountsCard from './cards/AccountsCard';\nimport AttributeValuesCard from './cards/AttributeValuesCard';\nimport SuspensionsCard from './cards/SuspensionsCard';\nimport { ParticipantStatusAlert, ParticipantStatusProvider } from './ParticipantStatusContext';\nimport { ParticipantAccountProvider } from './ParticipantAccountContext';\nimport TransactionsCard from './cards/TransactionsCard';\nimport GamePenaltiesCard from './cards/GamePenaltiesCard';\nimport ClaimsCard from './cards/ClaimsCard';\nimport MemberTypesCard from './cards/MemberTypesCard';\n\nconst SummaryTab = props => {\n const participant = useRecordContext();\n const scopes = useScopes();\n const isEnabled = useFlag();\n\n const showReports = isAuthorized(scopes, 'reports', 'list');\n const showMemberTypes = isEnabled(FF_SID_MEMBER_TYPES);\n\n return <Tab {...props}>\n <Grid container spacing={1}>\n <Grid item xs={12}>\n <ParticipantStatusAlert />\n </Grid>\n </Grid>\n\n <Grid container spacing={3}>\n <Grid item xs={12} md={6}>\n <ParticipantCard />\n </Grid>\n <Grid item xs={12} md={6}>\n <ContactsCard />\n </Grid>\n <Grid item xs={12} md={6}>\n <Grid container spacing={3}>\n <Grid item xs={12}>\n <TeamsCard />\n </Grid>\n <Grid item xs={12}>\n <TeamsCard isSanctioned={false} />\n </Grid>\n </Grid>\n </Grid>\n <Grid item xs={12} md={6}>\n <Grid container spacing={3}>\n <Grid item xs={12}>\n <QualificationsCard />\n </Grid>\n {showMemberTypes && <Grid item xs={12}>\n <MemberTypesCard />\n </Grid>}\n </Grid>\n </Grid>\n <Grid item xs={12}>\n <NotificationsCard />\n </Grid>\n <Grid item xs={12}>\n <RolesCard />\n </Grid>\n <Grid item xs={12}>\n <AccountsCard />\n </Grid>\n {showReports && <Grid item xs={12}>\n <ReportsCard targetType=\"Participant\" participantId={participant.id} />\n </Grid>}\n </Grid>\n </Tab>\n}\n\nconst ProfileTab = props => {\n const participant = useRecordContext(props);\n if (!isAuthorized(participant, 'participants', 'profileTab')) return null;\n\n return <Tab {...props}>\n <Grid container spacing={3}>\n <Grid item xs={12} sm={6}>\n <ContactsCard />\n </Grid>\n <Grid item xs={12} sm={6}>\n <AddressesCard />\n </Grid>\n <Grid item xs={12} sm={6}>\n <ProfileCard />\n </Grid>\n </Grid>\n </Tab>\n}\n\nconst ScheduleTab = props => {\n const participant = useRecordContext(props);\n if (!isAuthorized(participant, 'games', 'list')) return null;\n\n return <Tab {...props}>\n <Grid container spacing={3}>\n <Grid item xs={12}>\n <TeamsCard />\n </Grid>\n <Grid item xs={12}>\n <EventsCard />\n </Grid>\n </Grid>\n </Tab>\n}\n\nconst RegistrationsTab = props => {\n const participant = useRecordContext(props);\n\n if (!isAuthorized(participant, 'participants', 'registrationsTab')) return null;\n\n const showSuspensions = isAuthorized(participant, 'suspensions', 'show')\n const showGamePenalties = isAuthorized(participant, 'gamepenalties', 'show')\n\n return <Tab {...props}>\n <Grid container spacing={3}>\n <Grid item xs={12}>\n <RegistrationsCard />\n </Grid>\n {showGamePenalties && <Grid item xs={12}>\n <GamePenaltiesCard />\n </Grid>}\n {showSuspensions && <Grid item xs={12}>\n <SuspensionsCard />\n </Grid>}\n </Grid>\n </Tab>\n}\n\nconst OfficiatingTab = props => {\n const participant = useRecordContext(props);\n if (!isAuthorized(participant, 'participants', 'officiatingTab')) return null;\n\n const canEditAvailabilities = isAuthorized(participant, 'officialAvailabilities', 'edit');\n const canViewTransactions = isAuthorized(participant, 'officialTransactions', 'list');\n const canViewClaims = isAuthorized(participant, 'officialClaims', 'list')\n\n return <Tab {...props}>\n <Grid container spacing={3}>\n <Grid item xs={12} md={8}>\n <QualificationsCard />\n </Grid>\n <Grid item xs={12} md={4}>\n <OfficiatingActionsCard />\n </Grid>\n <Grid item xs={12}>\n <AvailabilityCard editable={canEditAvailabilities} />\n </Grid>\n {canViewTransactions && <Grid item xs={12}>\n <TransactionsCard />\n </Grid>}\n {canViewClaims && <Grid item xs={12}>\n <ClaimsCard />\n </Grid>}\n <Grid item xs={12}>\n <AttributeValuesCard type=\"Officiating\" targetType=\"Participant\" />\n </Grid>\n <Grid item xs={12} md={6}>\n <ListsCard />\n </Grid>\n <Grid item xs={12} md={6}>\n <ConflictsCard />\n </Grid>\n </Grid>\n </Tab>\n}\n\nexport const ParticipantShowLayout = props =>\n <ParticipantStatusProvider>\n <ParticipantAccountProvider>\n <TabbedShowLayout>\n <SummaryTab label=\"resources.participants.labels.tabs.summary\" />\n <ProfileTab label=\"resources.participants.labels.tabs.profile\" path=\"profile\" />\n <ScheduleTab label=\"resources.participants.labels.tabs.schedule\" path=\"games\" />\n <RegistrationsTab label=\"resources.participants.labels.tabs.registrations\" path=\"registrations\" />\n <OfficiatingTab label=\"resources.participants.labels.tabs.officiating\" path=\"officiating\" />\n </TabbedShowLayout>\n </ParticipantAccountProvider>\n </ParticipantStatusProvider>\n","import React from 'react';\nimport { TextInput, SimpleForm, useTranslate } from 'react-admin';\nimport { Grid } from '@material-ui/core'\n\nimport Toolbar from '../../common/ra/Toolbar';\nimport { SyncAlert, useRecordSynced } from '../../common/SyncAlert';\nimport { useScopes } from '../../http';\n\nconst validate = values => {\n const errors = {}\n if (!values.firstName) errors.firstName = 'ra.validation.required';\n if (!values.lastName) errors.lastName = 'ra.validation.required';\n\n return errors;\n}\n\nconst inputProps = {\n resource: 'participants',\n basePath: '/participants',\n variant: 'outlined',\n margin: 'none',\n fullWidth: true,\n}\n\nexport const ParticipantForm = props => {\n const translate = useTranslate();\n const scopes = useScopes();\n const [ isSynced, toggle ] = useRecordSynced(props);\n\n const isInternal = scopes.includes('internal');\n\n return <>\n <SyncAlert isSynced={isSynced} toggle={toggle} />\n <SimpleForm toolbar={<Toolbar isSynced={isSynced} />} validate={validate} {...props}>\n <Grid container spacing={2} fullWidth>\n <Grid item xs={12} sm={6}>\n <TextInput source=\"firstName\" autoFocus disabled={isSynced} {...inputProps} />\n </Grid>\n <Grid item xs={12} sm={6}>\n <TextInput source=\"lastName\" disabled={isSynced} {...inputProps} />\n </Grid>\n <Grid item xs={12}>\n <TextInput source=\"HCRId\" helperText=\"ra.message.optional\" disabled={isSynced} {...inputProps} />\n </Grid>\n {isInternal && <Grid item xs={12}>\n <TextInput source=\"alternateName\" disabled={isSynced} helperText=\"resources.participants.helpers.alternateName\" {...inputProps} />\n </Grid>}\n </Grid>\n </SimpleForm>\n </>\n}\n","import React from 'react';\nimport { useTranslate } from 'react-admin';\nimport { Alert } from '@material-ui/lab';\nimport { Search } from '@material-ui/icons';\n\nimport { List, Show, Create, Edit, Pagination } from '../../common/ra';\nimport ResourceTitle, { ResourceAvatarTitle } from '../../common/ResourceTitle';\n\nimport { ParticipantGrid } from './ParticipantGrid';\nimport { ParticipantFilters } from './ParticipantFilters';\nimport { ParticipantShowLayout } from './ParticipantShow';\nimport { ParticipantForm } from './ParticipantForm';\n\nconst ParticipantPagination = ({ total, ...props }) => {\n const translate = useTranslate();\n if (total < 0) return <Alert severity=\"info\" icon={<Search />}>{translate('resources.participants.alerts.search_by_name_hockeyid')}</Alert>\n return <Pagination total={total} {...props} />\n}\n\nexport const ParticipantList = props =>\n <List {...props}\n filters={<ParticipantFilters />}\n filter={{ _include: ['accounts', 'identities'] }}\n sort={{\n field: 'lastName',\n order: 'ASC'\n }}\n pagination={<ParticipantPagination />}\n >\n <ParticipantGrid rowClick=\"show\" />\n </List>\n\nconst getTitle = participant => participant.fullName\n\nexport const ParticipantShow = props =>\n <Show {...props}\n title={<ResourceAvatarTitle title={getTitle} />}\n >\n <ParticipantShowLayout />\n </Show>\n\nexport const ParticipantCreate = props => {\n const translate = useTranslate();\n return <Create\n title={<ResourceTitle title={record => translate('resources.participants.labels.add')} />}\n {...props}\n >\n <ParticipantForm redirect=\"show\" />\n </Create>\n}\n\nexport const ParticipantEdit = props => {\n const translate = useTranslate();\n return <Edit\n title={<ResourceTitle title={record => translate('ra.page.editing', { name: getTitle(record) })} />}\n {...props}\n >\n <ParticipantForm redirect=\"show\" />\n </Edit>\n}\n","import React from 'react';\nimport { Datagrid, FunctionField } from 'react-admin';\nimport { makeStyles } from '@material-ui/core';\n\nimport { EnumField } from '../../common/inputs/EnumInputs';\nimport { NameWithStatusesField } from '../../common/fields/NameWithStatusesField';\n\nconst useStyles = makeStyles(theme => ({\n root: {\n display: 'flex',\n alignItems: 'center',\n gap: 12,\n },\n logo: {\n width: '28px',\n height: '28px',\n objectFit: 'contain',\n },\n}))\n\nexport const OfficeNameField = ({ includeLogo = true, ...props }) => {\n const classes = useStyles();\n\n return <FunctionField {...props} render={record => {\n return <div className={classes.root}>\n {includeLogo && !!record?.logo?.url && (\n <img\n src={record.logo.url}\n alt={`${record.id} logo`}\n className={classes.logo}\n />\n )}\n <NameWithStatusesField {...props} />\n </div>\n }} />\n}\n\nexport const OfficeGrid = props =>\n <Datagrid size=\"medium\" {...props}>\n <OfficeNameField source=\"name\" />\n <EnumField source=\"type\" />\n </Datagrid>\n\n","import React, { useContext, useMemo, useState } from 'react';\n\nconst ArenaSlotContext = React.createContext();\n\nexport const useArenaSlotContext = () => useContext(ArenaSlotContext);\n\nexport const ArenaSlotProvider = ({ children }) => {\n const overlaps = useState([]);\n\n const context = useMemo(() => ({\n overlaps\n }), [ overlaps ])\n\n return <ArenaSlotContext.Provider value={context}>\n {children}\n </ArenaSlotContext.Provider>\n}\n","import React from 'react';\nimport { GET_LIST, useQueryWithStore } from \"react-admin\";\n\nimport { SurfaceInput } from \"../surfaces/SurfaceInput\";\n\nconst useArenaOffices = (officeId) => useQueryWithStore({\n type: GET_LIST,\n resource: 'arenaoffices',\n payload: {\n filter: { officeId: officeId }\n }\n}, {\n enabled: !!officeId,\n action: 'CUSTOM_QUERY',\n})\n\nexport const ArenaOfficeInput = ({ officeId, ...props }) => {\n const { data: surfaces = [] } = useArenaOffices(officeId);\n const parentSurfaceIds = surfaces.map(surface => surface.arenaId);\n\n return <SurfaceInput\n filter={parentSurfaceIds.length ? { effectiveSurfaces: parentSurfaceIds } : { \"offices.id\": officeId }}\n {...props}\n />\n}\n","import React, { useEffect, useState } from 'react';\nimport { NumberInput, useResourceContext, useTranslate } from 'react-admin';\nimport moment from 'moment-timezone';\nimport { Accordion, AccordionDetails, AccordionSummary, Grid, InputAdornment, Typography, styled } from '@material-ui/core';\nimport { ExpandMore as ExpandMoreIcon, DateRange as Schedule } from '@material-ui/icons'\nimport { useFormState } from 'react-final-form';\n\nconst ScheduleIcon = styled(Schedule)(({ theme }) => ({\n marginRight: theme.spacing(1),\n}))\n\nconst List = styled('ul')(({ theme }) => ({\n margin: 0,\n paddingLeft: theme.spacing(5),\n}))\n\nconst ListItem = styled('li')(({ theme }) => ({\n padding: theme.spacing(.5, 0),\n}))\n\nconst DurationInput = props => {\n const translate = useTranslate();\n return <NumberInput {...props} InputProps={{\n endAdornment: <InputAdornment position=\"end\">\n {translate('ra.input.adornments.minutes')}\n </InputAdornment>\n }}\n />\n}\n\nconst SlotSplitSchedule = () => {\n const translate = useTranslate();\n const resource = useResourceContext();\n const { values } = useFormState();\n const { startTime, endTime, slotDuration, breakDuration, timezone } = values;\n const [ splits, setSplits ] = useState([])\n\n const date = moment.tz(startTime, timezone).format('MMM Do');\n const firstSlotTime = moment.tz(startTime, timezone).format('HH:mm A');\n const lastSlotTime = moment.tz(endTime, timezone).format('HH:mm A');\n\n useEffect(() => {\n const timeslotMinutes = moment(endTime).diff(startTime, 'minutes');\n const splits = [];\n\n if (timeslotMinutes % (slotDuration + breakDuration) === 0) {\n const numOfSplits = timeslotMinutes / (slotDuration + breakDuration);\n const currentStartTime = moment.tz(startTime, timezone);\n\n for (let i = 0; i < numOfSplits; i++) {\n const duration = slotDuration + breakDuration;\n const splitStart = moment(currentStartTime)\n const splitEnd = moment(currentStartTime).add(slotDuration, 'minutes')\n\n splits.push({ startTime: splitStart, endTime: splitEnd });\n currentStartTime.add(duration, 'minutes');\n }\n }\n\n setSplits(splits)\n }, [startTime, endTime, timezone, slotDuration, breakDuration])\n\n if (!splits?.length) return null;\n\n const total = splits.length;\n const first = splits.slice(0, 5);\n const last = splits[total - 1];\n\n return <Accordion>\n <AccordionSummary expandIcon={<ExpandMoreIcon />}>\n <ScheduleIcon />\n <Typography color=\"textSecondary\">{translate(`resources.${resource}.messages.slot_splits`, { smart_count: total, startTime: firstSlotTime, endTime: lastSlotTime, date })}</Typography>\n </AccordionSummary>\n <AccordionDetails>\n <List>\n {first.map(({ startTime, endTime }) => <ListItem>{`${startTime.format('HH:mm A')} - ${endTime.format('HH:mm A')}`}</ListItem>)}\n {total > 6 && <ListItem>{translate(`resources.${resource}.messages.additional_instances`, { smart_count: total - 6 })}</ListItem>}\n {total > 5 && <ListItem>{`${last.startTime.format('HH:mm A')} - ${last.endTime.format('HH:mm A')}`}</ListItem>}\n </List>\n </AccordionDetails>\n </Accordion>\n}\n\nexport const SlotSplitField = (inputProps) => {\n const translate = useTranslate();\n const { values } = useFormState();\n const { startTime, endTime, slotDuration, breakDuration } = values;\n const hasSplits = startTime && endTime && slotDuration && breakDuration !== null && breakDuration >= 0;\n\n return <>\n <Grid item xs={12}>\n <Typography variant=\"subtitle2\">{translate('resources.arenaslots.labels.slot_splits')}</Typography>\n </Grid>\n <Grid item xs={6}>\n <DurationInput source=\"slotDuration\" label=\"resources.arenaslots.labels.slot_duration\" helperText={!breakDuration ? 'ra.message.optional' : ''} {...inputProps} />\n </Grid>\n <Grid item xs={6}>\n <DurationInput source=\"breakDuration\" label=\"resources.arenaslots.labels.break_duration\" helperText={!slotDuration ? 'ra.message.optional' : ''} {...inputProps} />\n </Grid>\n {hasSplits && <Grid item xs={12}>\n <SlotSplitSchedule />\n </Grid> }\n </>\n}\n","import React, { useEffect, useMemo, useRef } from 'react';\nimport { SimpleForm, useTranslate, TextInput } from 'react-admin';\nimport moment from 'moment-timezone';\nimport { Grid, Typography } from '@material-ui/core';\nimport { Alert, AlertTitle } from '@material-ui/lab';\nimport { useSelector } from 'react-redux';\nimport { useFormState } from 'react-final-form';\nimport createCalculator from 'final-form-calculate';\n\nimport { changeTimezone, isEmpty } from '@hisports/parsers';\nimport { GAME_OFFICE_TYPES } from '@hisports/common/src/constants';\n\nimport { ArenaSlotProvider, useArenaSlotContext } from './ArenaSlotContext';\nimport { apiClient } from '../../http';\n\nimport { InlineDateTimeInput, dateTimePlaceholder } from '../../common/inputs/DateInput';\nimport { ArenaSlotTypeEnumInput, TimezoneEnumInput } from '../../common/inputs/EnumInputs';\nimport { EndTimeInput } from '../../common/inputs/EndTimeInput';\nimport { RecurrenceField } from '../../common/fields/RecurrenceField';\nimport { getRule } from '../../common/fields/RecurrenceSchedule';\nimport Toolbar from '../../common/ra/Toolbar';\n\nimport { CategoryInput } from '../categories/CategoryInput';\nimport { OfficeInput } from '../offices/OfficeInput';\nimport { ArenaOfficeInput } from '../arenaoffices/ArenaOfficeInput';\n\nimport { SlotSplitField } from './SlotSplits';\nimport SwitchInput from '../../common/inputs/SwitchInput';\n\nconst inputProps = {\n resource: 'arenaslots',\n basePath: '/arenaslots',\n variant: 'outlined',\n margin: 'none',\n fullWidth: true,\n}\n\nconst validate = (values, overlaps) => {\n const { startTime, endTime, officeId, arenaId, timezone, frequency, endDate, slotDuration, breakDuration } = values;\n const errors = {};\n\n if (overlaps?.length > 0) errors.startTime = 'resources.arenaslots.validations.overlaps';\n if (!startTime) errors.startTime = 'ra.validation.required';\n if (!endTime) errors.endTime = 'ra.validation.required';\n if (!arenaId) errors.arenaId = 'ra.validation.required';\n if (!timezone) errors.timezone = 'ra.validation.required';\n\n if (startTime && endTime) {\n if (!moment(startTime).isValid()) {\n errors.startTime = 'resources.games.validations.invalid_time'\n } else if (!moment(endTime).isValid()) {\n errors.endTime = 'resources.games.validations.invalid_time'\n } else if (moment(endTime).isBefore(startTime, 'minute')) {\n errors.endTime = 'resources.games.validations.end_before_start'\n } else if (!moment(endTime).isSame(startTime, 'day')) {\n errors.endTime = 'resources.games.validations.invalid_must_be_same_day'\n }\n\n if (slotDuration || breakDuration) {\n const timeslotMinutes = moment.tz(endTime, timezone).diff(startTime, 'minutes');\n\n if (slotDuration && breakDuration == null) errors.breakDuration = 'ra.validation.required';\n if (!slotDuration && breakDuration) errors.slotDuration = 'ra.validation.required';\n\n if (slotDuration > timeslotMinutes) errors.slotDuration = 'resources.arenaslots.validations.duration_exceeds_range';\n if (breakDuration > timeslotMinutes) errors.breakDuration = 'resources.arenaslots.validations.duration_exceeds_range';\n\n if (slotDuration && breakDuration != null) {\n if (timeslotMinutes % (slotDuration + breakDuration) !== 0) {\n errors.slotDuration = 'resources.arenaslots.validations.total_duration';\n errors.breakDuration = 'resources.arenaslots.validations.total_duration';\n }\n }\n }\n }\n\n if (frequency != null && frequency !== 'Once') {\n if (!endDate) {\n errors.endDate = 'ra.validation.required'\n } else if (startTime && moment.utc(endDate).isBefore(startTime, 'day')) {\n errors.endDate = 'resources.games.validations.after_start_time';\n } else if (startTime && moment.utc(endDate).diff(startTime, 'day') > 365) {\n errors.endDate = 'resources.games.validations.invalid_date'\n }\n }\n\n if (!officeId) errors.officeId = 'ra.validation.required';\n\n return errors;\n}\n\nconst useSlotOverlaps = slot => {\n const { overlaps: [ overlaps, setOverlaps ] } = useArenaSlotContext();\n const { id, startTime, endTime, arenaId, frequency, interval, weekdays, endDate, timezone } = slot;\n\n const rule = useMemo(() => {\n return getRule({ frequency, interval, weekdays, endDate, timezone })\n }, [frequency, interval, weekdays, endDate, timezone])\n\n const recurrence = rule?.toString().replace('RRULE:', '') || null;\n\n useEffect(() => {\n if (!startTime || !endTime || !arenaId) return;\n\n apiClient(`/surfaces/${arenaId}/overlaps`, { method: 'POST', data: [{ startTime, endTime, recurrence, timezone }] })\n .then(res => res.data)\n .then(data => setOverlaps(data.flatMap(slot => slot.overlaps).filter(overlap => overlap.id !== id)))\n }, [startTime, endTime, arenaId, recurrence, timezone, setOverlaps, id])\n\n return overlaps;\n}\n\nconst ArenaSlotFormBody = () => {\n const translate = useTranslate();\n const { initialValues, values } = useFormState();\n const overlaps = useSlotOverlaps(values);\n const isEditing = initialValues.id != null;\n\n return <Grid container spacing={2} fullWidth>\n <Grid item xs={12} md={6}>\n <TextInput source=\"name\" helperText=\"ra.message.optional\" {...inputProps} />\n </Grid>\n <Grid item xs={12} md={6}>\n <OfficeInput source=\"officeId\" filter={{ type: { nin: [...GAME_OFFICE_TYPES, 'Historical'] } }} {...inputProps} />\n </Grid>\n <Grid item xs={12}>\n <ArenaOfficeInput source=\"arenaId\" officeId={initialValues?.officeId} {...inputProps} />\n </Grid>\n <Grid item xs={12} md={4}>\n <InlineDateTimeInput\n source=\"startTime\"\n options={{\n label: translate('resources.arenaslots.fields.startTime'),\n format: 'YYYY-MM-DD HH:mm',\n placeholder: dateTimePlaceholder,\n ampm: false,\n }}\n {...inputProps}\n />\n </Grid>\n <Grid item xs={12} md={4}>\n <EndTimeInput\n source=\"endTime\"\n maxHours={12}\n options={{\n label: translate('resources.arenaslots.fields.endTime'),\n format: 'YYYY-MM-DD HH:mm',\n placeholder: dateTimePlaceholder,\n ampm: false,\n }}\n {...inputProps}\n />\n </Grid>\n <Grid item xs={12} md={4}>\n <TimezoneEnumInput source=\"timezone\" disabled {...inputProps} />\n </Grid>\n {!!overlaps?.length && <Grid item xs={12}>\n <Alert severity=\"error\">\n <AlertTitle>\n {translate('resources.arenaslots.alerts.overlaps_title')}\n </AlertTitle>\n {translate('resources.arenaslots.alerts.overlaps')}\n </Alert>\n </Grid>}\n <Grid item xs={12} lg={12}>\n <TextInput source=\"comments\" multiline rows=\"3\" helperText=\"ra.message.optional\" {...inputProps} />\n </Grid>\n {!isEditing && <SlotSplitField {...inputProps} />}\n <Grid item xs={12}>\n <Typography variant=\"subtitle2\">{translate('resources.arenaslots.labels.restrictions')}</Typography>\n </Grid>\n <Grid item xs={12} md={4}>\n <ArenaSlotTypeEnumInput source=\"types\" multiple helperText=\"resources.arenaslots.helpers.types\" {...inputProps} />\n </Grid>\n <Grid item xs={12} md={8}>\n <CategoryInput source=\"categoryIds\" multiple helperText=\"resources.arenaslots.helpers.categoryIds\" {...inputProps} />\n </Grid>\n <Grid item xs={12}>\n <OfficeInput source=\"leagueIds\" multiple helperText=\"resources.arenaslots.helpers.leagueIds\" filter={{ type: ['League', 'Tournament', 'Cup'] }} {...inputProps} />\n </Grid>\n <Grid item xs={12}>\n <SwitchInput source=\"isShared\" {...inputProps} />\n </Grid>\n {!isEditing && <RecurrenceField {...inputProps} />}\n </Grid>\n}\n\nconst InnerArenaSlotForm = ({ save, ...props }) => {\n const { overlaps: [ overlaps ] } = useArenaSlotContext();\n const surfaces = useSelector(store => store.admin.resources.surfaces.data);\n const surfacesRef = useRef({});\n surfacesRef.current = surfaces;\n\n const decorators = useRef([createCalculator({\n field: 'officeId',\n updates: {\n leagueIds: (officeId, values, prevValues) => {\n if (!officeId || prevValues.officeId != officeId) {\n return [];\n }\n return values.leagueIds;\n } }\n }, {\n field: 'arenaId',\n updates: {\n timezone: (arenaId, values, prevValues) => {\n const surface = surfacesRef.current[arenaId];\n if (!surface) return values.timezone;\n return surface.timezone;\n }\n }\n }, {\n field: 'timezone',\n updates: {\n startTime: (timezone, values, prevValues) => {\n const { timezone: prevTimezone } = prevValues;\n if (!prevTimezone || !timezone || !values.startTime || isEmpty(prevValues) || timezone === prevTimezone) return values.startTime;\n return changeTimezone(values.startTime, prevTimezone, timezone)\n },\n endTime: (timezone, values, prevValues) => {\n const { timezone: prevTimezone } = prevValues;\n if (!prevTimezone || !timezone || !values.endTime || isEmpty(prevValues) || timezone === prevTimezone) return values.endTime;\n return changeTimezone(values.endTime, prevTimezone, timezone)\n },\n }\n }, {\n field: 'startTime',\n updates: {\n date: (startTime, values) => {\n if (!startTime) return values.date;\n if (!values.timezone) return startTime;\n return moment.tz(startTime, values.timezone).format('YYYY-MM-DD');\n }\n }\n })])\n\n const onSave = async ({ frequency, interval, weekdays, endDate, recurrence, splits = [], ...timeslot }) => {\n const rule = getRule({ frequency, interval, weekdays, endDate, timezone: timeslot.timezone });\n timeslot.recurrence = rule?.toString().replace('RRULE:', '') || null;\n\n return save(timeslot, props.redirect);\n }\n\n return (\n <SimpleForm\n toolbar={<Toolbar />}\n decorators={decorators.current}\n validate={(values) => validate(values, overlaps)}\n save={onSave}\n {...props}>\n <ArenaSlotFormBody />\n </SimpleForm>\n );\n}\n\nexport const ArenaSlotForm = props =>\n <ArenaSlotProvider>\n <InnerArenaSlotForm {...props} />\n </ArenaSlotProvider>\n","import React, { Fragment, useState } from 'react';\nimport { useTranslate } from 'react-admin';\nimport { Button } from '@material-ui/core';\nimport { Add } from '@material-ui/icons';\n\nimport { DialogDatagrid } from '../../common/dialogs/DialogDatagrid';\nimport { CreateResourceDialog, EditResourceDialog } from '../../common/dialogs/ResourceDialog';\n\nimport { ArenaSlotForm } from './ArenaSlotForm';\n\nconst AddArenaSlotDialog = props =>\n <CreateResourceDialog label=\"resources.arenaslots.actions.add\" resource=\"arenaslots\" basePath=\"/arenaslots\" maxWidth=\"md\" {...props}>\n <ArenaSlotForm />\n </CreateResourceDialog>\n\nconst EditArenaSlotDialog = props =>\n <EditResourceDialog label=\"resources.arenaslots.labels.edit\" resource=\"arenaslots\" basePath=\"/arenaslots\" maxWidth=\"md\" {...props}>\n <ArenaSlotForm />\n </EditResourceDialog>\n\nexport const AddArenaSlotButton = ({ size, variant, ...props }) => {\n const [ isOpen, setOpen ] = useState(false);\n const translate = useTranslate();\n\n return <>\n <Button color=\"primary\" size={size} variant={variant} startIcon={<Add />} onClick={() => setOpen(true)}>\n {translate('resources.arenaslots.actions.add')}\n </Button>\n <AddArenaSlotDialog isOpen={isOpen} handleClose={() => setOpen(false)} {...props} />\n </>\n}\n\nexport const ArenaSlotDatagrid = props => <DialogDatagrid dialog={EditArenaSlotDialog} {...props} />\n","import React from 'react';\nimport { makeStyles } from '@material-ui/core';\nimport { BooleanField } from 'react-admin';\n\nimport TimeRangeField from '../../common/fields/TimeRangeField';\nimport DateField from '../../common/fields/DateField';\nimport TextArrayField from '../../common/fields/TextArrayField';\n\nimport { OfficeField } from '../offices/OfficeField';\nimport { OfficesField } from '../offices/OfficesField';\nimport { CategoriesField } from '../categories/CategoriesField';\nimport { SurfaceField } from '../surfaces/SurfaceField';\n\nimport { ArenaSlotDatagrid } from './ArenaSlotModal';\n\nconst useStyles = makeStyles({\n headerRow: {\n display: 'none',\n }\n})\n\nexport const ArenaSlotsGrid = ({ showOffice = true, showSurface = false, ...props }) => {\n const classes = useStyles();\n\n return <ArenaSlotDatagrid size=\"medium\" className={classes} {...props}>\n <DateField source=\"startTime\" label=\"ra.date.name\" />\n <TimeRangeField startSource=\"startTime\" endSource=\"endTime\" label=\"ra.date.time\" />\n { showOffice && <OfficeField source=\"officeId\" /> }\n { showSurface && <SurfaceField source=\"arenaId\" /> }\n <CategoriesField source=\"categoryIds\" emptyText=\"ra.message.all\" />\n <TextArrayField source=\"types\" emptyText=\"ra.message.all\" />\n <OfficesField source=\"leagueIds\" emptyText=\"ra.message.all\" />\n <BooleanField source=\"isShared\" label=\"ra.message.shared_slot\" />\n </ArenaSlotDatagrid>\n}\n","import React, { Fragment, useState } from 'react';\nimport { Dialog, DialogContent, DialogContentText, DialogTitle } from '@material-ui/core';\nimport { Button, SimpleForm, useListContext, useNotify, useRefresh, useTranslate } from 'react-admin';\n\nimport { isAuthorized } from '../../common/Authorize';\nimport { apiClient, useScopes } from '../../http';\nimport { DialogFormToolbar } from '../../common/dialogs/DialogForm';\nimport { ArenaSlotTypeEnumInput } from '../../common/inputs/EnumInputs';\nimport CheckboxRowInput from '../../common/inputs/CheckboxRowInput';\n\nimport { CategoryInput } from '../categories/CategoryInput';\nimport { OfficeInput } from '../offices/OfficeInput';\n\nconst inputProps = {\n variant: 'outlined',\n margin: 'normal',\n fullWidth: true,\n}\n\nconst ArenaSlotRestrictionDialog = ({ isOpen, onSubmit, onClose, arenaSlotsIds = [] }) => {\n const translate = useTranslate();\n return <Dialog open={isOpen} fullWidth maxWidth=\"sm\" onClose={onClose}>\n <DialogTitle>{translate('resources.arenaslots.labels.slots_restrictions')}</DialogTitle>\n <DialogContent>\n <DialogContentText>\n {translate('resources.arenaslots.alerts.bulk_slots_restrictions')}\n </DialogContentText>\n <ArenaSlotRestrictionForm save={onSubmit} component={Fragment} toolbar={\n <DialogFormToolbar submitLabel=\"ra.action.update\" onCancel={onClose} />\n } />\n </DialogContent>\n </Dialog>\n}\n\nconst ArenaSlotRestrictionForm = props => {\n return <SimpleForm {...props}>\n <CheckboxRowInput resource=\"arenaslots\" source=\"types\" multiple helperText=\"resources.arenaslots.helpers.types\" {...inputProps}>\n <ArenaSlotTypeEnumInput />\n </CheckboxRowInput>\n <CheckboxRowInput resource=\"arenaslots\" source=\"categoryIds\" multiple helperText=\"resources.arenaslots.helpers.categoryIds\" {...inputProps}>\n <CategoryInput />\n </CheckboxRowInput>\n <CheckboxRowInput resource=\"arenaslots\" source=\"leagueIds\" multiple helperText=\"resources.arenaslots.helpers.leagueIds\" filter={{ type: ['League', 'Tournament', 'Cup'] }} {...inputProps}>\n <OfficeInput />\n </CheckboxRowInput>\n </SimpleForm>\n}\n\nconst ArenaSlotsRestrictions = ({ selectedIds }) => {\n const [ open, setOpen ] = useState(false);\n const { onUnselectItems } = useListContext();\n const refresh = useRefresh();\n const notify = useNotify();\n const translate = useTranslate();\n\n const onSubmit = (values) => {\n const {\n typesIsChecked, types,\n categoryIdsIsChecked, categoryIds,\n leagueIdsIsChecked, leagueIds,\n } = values;\n\n apiClient(`/arenaslots/bulkRestrictions`, {\n method: 'POST',\n data: {\n arenaSlotsIds: selectedIds,\n restrictions: JSON.parse(JSON.stringify({\n types: typesIsChecked ? (types || []) : undefined,\n categoryIds: categoryIdsIsChecked ? (categoryIds || []) : undefined,\n leagueIds: leagueIdsIsChecked ? (leagueIds || []) : undefined,\n }))\n },\n })\n .then(({ data }) => {\n const count = data?.count || 0;\n refresh();\n onUnselectItems();\n notify(translate('resources.arenaslots.notifications.update_restrictions_success', { smart_count: count }), 'success')\n })\n .catch(err => {\n console.log(err) // eslint-disable-line no-console\n notify(translate('resources.arenaslots.notifications.update_restrictions_error', { smart_count: selectedIds.length }), 'error')\n })\n\n setOpen(false);\n }\n\n return <>\n <Button label={translate('resources.arenaslots.labels.set_slots_restrictions')} onClick={() => setOpen(true)} disabled={!selectedIds.length} />\n <ArenaSlotRestrictionDialog isOpen={open} onSubmit={onSubmit} onClose={() => setOpen(false)} arenaSlotsIds={selectedIds} />\n </>\n}\n\nconst DeleteDialog = ({ open, onSubmit, onClose, arenaSlotsIds = [] }) => {\n const translate = useTranslate();\n\n return <Dialog open={open} fullWidth maxWidth=\"sm\" onClose={onClose}>\n <DialogTitle>{translate('resources.arenaslots.labels.delete_slots', { smart_count: arenaSlotsIds.length })}</DialogTitle>\n <DialogContent>\n <DialogContentText>\n {translate('resources.arenaslots.messages.confirm_delete', { smart_count: arenaSlotsIds.length })}\n </DialogContentText>\n <SimpleForm\n save={onSubmit}\n component={Fragment}\n toolbar={<DialogFormToolbar submitLabel=\"ra.action.delete\" cancelLabel=\"ra.action.cancel\" onCancel={onClose} hideSubmit={!arenaSlotsIds?.length} />}\n />\n </DialogContent>\n </Dialog>\n}\n\nconst Delete = ({ selectedIds }) => {\n const [ open, setOpen ] = useState(false);\n const { onUnselectItems } = useListContext();\n const refresh = useRefresh();\n const notify = useNotify();\n const translate = useTranslate();\n\n const onSubmit = async () => {\n apiClient(`/arenaslots/bulkDelete`, {\n method: 'DELETE',\n data: {\n arenaSlotsIds: selectedIds,\n },\n })\n .then(({ data }) => {\n const count = data?.count || 0;\n refresh();\n onUnselectItems();\n notify(translate('resources.arenaslots.notifications.delete_slots_success', { smart_count: count }), 'success')\n })\n .catch(err => {\n console.log(err) // eslint-disable-line no-console\n notify(translate('resources.arenaslots.notifications.delete_slots_error', { smart_count: selectedIds.length }), 'error')\n })\n\n setOpen(false);\n }\n\n return <>\n <Button label={translate('ra.action.delete')} onClick={() => setOpen(true)} disabled={!selectedIds.length} />\n <DeleteDialog open={open} onSubmit={onSubmit} onClose={() => setOpen(false)} arenaSlotsIds={selectedIds} />\n </>\n}\n\nexport const ArenaSlotBulkActions = props => {\n const scopes = useScopes();\n const canChangeRestriction = isAuthorized(scopes, 'arenaslots', 'edit');\n const canDeleteArenaSlots = isAuthorized(scopes, 'arenaslots', 'remove');\n\n return <>\n {canChangeRestriction && <ArenaSlotsRestrictions {...props} />}\n {canDeleteArenaSlots && <Delete {...props} />}\n </>\n}\n","import React from 'react';\nimport { useRecordContext } from 'react-admin';\n\nimport { makeStyles } from '@material-ui/core';\nimport { Schedule } from '@material-ui/icons';\n\nimport { isAuthorized } from '../../../common/Authorize';\nimport { InlineDateInput } from '../../../common/inputs/DateInput';\nimport { ArenaSlotTypeEnumInput } from '../../../common/inputs/EnumInputs';\nimport ListCard from '../../../common/cards/ListCard';\n\nimport { ArenaSlotsGrid } from '../../arenaslots/ArenaSlotsGrid';\nimport { AddArenaSlotButton } from '../../arenaslots/ArenaSlotModal';\nimport { ArenaSlotBulkActions } from '../../arenaslots/ArenaSlotBulkActions';\nimport { ArenaOfficeInput } from '../../arenaoffices/ArenaOfficeInput';\n\nconst useStyles = makeStyles(theme => ({\n filter: {\n minWidth: theme.spacing(22),\n },\n hideHelperText: {\n '& .MuiFormHelperText-root:empty': {\n display: 'none',\n }\n },\n}))\n\nexport default ({ filter, title, initialValues, ...props }) => {\n const office = useRecordContext(props);\n const classes = useStyles()\n\n const showSlots = isAuthorized(office, 'arenaslots', 'list');\n const canAddSlots = isAuthorized(office, 'arenaslots', 'create');\n const showBulkActions = isAuthorized(office, 'arenaslots', 'bulkActions')\n if (!showSlots) return null;\n\n const addButton = canAddSlots && <AddArenaSlotButton initialValues={{ ...initialValues, officeId: office?.id }} />\n\n const filters = [\n <InlineDateInput source=\"startTime\" key=\"startTime\" label=\"resources.arenaslots.fields.startTime\" variant=\"outlined\" alwaysOn />,\n <InlineDateInput source=\"endTime\" key=\"endTime\" label=\"resources.arenaslots.fields.endTime\" variant=\"outlined\" alwaysOn />,\n <ArenaSlotTypeEnumInput source=\"types\" key=\"types\" label=\"resources.arenaslots.fields.types\" variant=\"outlined\" alwaysOn multiple className={classes.filter} {...props} />,\n <ArenaOfficeInput source=\"arenaId\" key=\"arenaId\" label=\"resources.surfaces.name\" variant=\"outlined\" alwaysOn officeId={office?.id} {...props} />,\n ];\n\n return <ListCard\n {...props}\n title={title || \"resources.arenaslots.labels.card.title\"}\n subtitle=\"resources.arenaslots.labels.card.subtitle\"\n icon={<Schedule />}\n reference=\"arenaslots\"\n target=\"officeId\"\n filter={filter}\n sort={{\n field: ['startTime', 'endTime'],\n order: ['DESC', 'DESC'],\n }}\n addButton={addButton}\n filters={filters}\n bulkActionButtons={showBulkActions ? <ArenaSlotBulkActions /> : false}\n collapsable\n >\n <ArenaSlotsGrid showOffice={false} showSurface />\n </ListCard>\n}\n","import React from 'react';\nimport { useTranslate } from 'react-admin';\nimport { Link } from 'react-router-dom';\nimport { Button } from '@material-ui/core';\nimport { Add } from '@material-ui/icons';\n\nimport { DialogDatagrid } from '../../common/dialogs/DialogDatagrid';\nimport { EditResourceDialog } from '../../common/dialogs/ResourceDialog';\n\nimport ScheduleForm from './ScheduleForm';\n\nconst EditScheduleDialog = props =>\n <EditResourceDialog label=\"resources.schedules.labels.edit\" resource=\"schedules\" basePath=\"/schedules\" maxWidth=\"md\" {...props}>\n <ScheduleForm />\n </EditResourceDialog>\n\nexport const AddScheduleButton = ({ size, variant, initialValues, ...props }) => {\n const translate = useTranslate();\n return <Button color=\"primary\" size={size} variant={variant} startIcon={<Add />} component={Link} to={{ pathname: \"/schedules/create\", state: { initialValues } }}>\n {translate('resources.schedules.actions.add')}\n </Button>\n}\n\nexport const ScheduleDatagrid = props => <DialogDatagrid dialog={EditScheduleDialog} {...props} />\n","import React from 'react';\nimport { useRecordContext } from 'react-admin';\n\nimport { useSeason } from '../../../common/inputs/SeasonSelector';\nimport { isAuthorized } from '../../../common/Authorize';\nimport ListCard from '../../../common/cards/ListCard';\n\nimport { ScheduleGrid } from '../../schedules/ScheduleGrid';\nimport { AddScheduleButton } from '../../schedules/ScheduleModal';\nimport { CategoryInput } from '../../categories/CategoryInput';\nimport { ScheduleIcon } from '../../icons';\n\nexport default ({ showOffice = true, filter = {}, collapsable, ...props }) => {\n const office = useRecordContext(props);\n const seasonId = useSeason();\n\n const canAddSchedule = isAuthorized(office, \"schedules\", \"create\");\n const filters = [\n <CategoryInput source=\"categoryId\" multiple variant=\"outlined\" alwaysOn />,\n ]\n\n return <ListCard\n title=\"resources.schedules.labels.card.title\"\n icon={<ScheduleIcon />}\n reference=\"schedules\"\n target=\"officeId\"\n filter={{ seasonId, ...filter }}\n filters={filters}\n sort={{\n field: ['category.order', 'office.name', 'type', 'name'],\n order: ['ASC', 'DESC', 'ASC', 'ASC'],\n }}\n collapsable={collapsable}\n addButton={canAddSchedule && <AddScheduleButton initialValues={{ seasonId, officeId: office?.id }} />}\n >\n <ScheduleGrid rowClick=\"show\" showOffice={showOffice} />\n </ListCard>\n}\n","import React, { Fragment, useState } from 'react';\nimport { useTranslate } from 'react-admin';\nimport { Button } from '@material-ui/core';\nimport { Add } from '@material-ui/icons';\n\nimport { DialogDatagrid } from '../../common/dialogs/DialogDatagrid';\nimport { CreateResourceDialog, EditResourceDialog } from '../../common/dialogs/ResourceDialog';\n\nimport { TeamForm } from './TeamForm';\n\nconst AddTeamDialog = props =>\n <CreateResourceDialog label=\"resources.teams.actions.add\" resource=\"teams\" basePath=\"/teams\" maxWidth=\"md\" {...props}>\n <TeamForm />\n </CreateResourceDialog>\n\nconst EditTeamDialog = props =>\n <EditResourceDialog label=\"resources.teams.labels.edit\" resource=\"teams\" basePath=\"/teams\" maxWidth=\"md\" {...props}>\n <TeamForm />\n </EditResourceDialog>\n\nexport const AddTeamButton = ({ size, variant, ...props }) => {\n const [ isOpen, setOpen ] = useState(false);\n const translate = useTranslate();\n return <>\n <Button color=\"primary\" size={size} variant={variant} startIcon={<Add />} onClick={() => setOpen(true)}>{translate('resources.teams.actions.add')}</Button>\n <AddTeamDialog isOpen={isOpen} handleClose={() => setOpen(false)} {...props} />\n </>\n}\n\nexport const TeamDatagrid = props => <DialogDatagrid dialog={EditTeamDialog} {...props} />\n","import React from 'react';\nimport { Pagination, useRecordContext } from 'react-admin';\n\nimport ListCard from '../../../common/cards/ListCard';\nimport { useSeason } from '../../../common/inputs/SeasonSelector';\nimport { isAuthorized } from '../../../common/Authorize';\n\nimport { TeamIcon } from '../../icons';\nimport { AddTeamButton } from '../../teams/TeamModal';\nimport { TeamGrid } from '../../teams/TeamGrid';\nimport { CategoryInput } from '../../categories/CategoryInput';\n\nexport default ({ collapsable, isSanctioned = true, ...props }) => {\n const office = useRecordContext(props);\n const seasonId = useSeason();\n\n const canAddTeam = isAuthorized(office, 'teams', 'create');\n const filters = [\n <CategoryInput source=\"categoryId\" multiple variant=\"outlined\" alwaysOn />,\n ]\n\n return <ListCard\n title={isSanctioned ? 'resources.teams.labels.card.title' : 'resources.teams.labels.card.unsanctioned_title'}\n icon={<TeamIcon />}\n reference=\"teams\"\n target=\"officeId\"\n filter={{ seasonId, effectiveOffices: true, isSanctioned }}\n filters={filters}\n sort={{\n field: ['office.name', 'category.order', 'name'],\n order: ['ASC', 'ASC', 'ASC'],\n }}\n pagination={<Pagination />}\n addLabel={false}\n addButton={canAddTeam && !isSanctioned && <AddTeamButton initialValues={{ seasonId, officeId: office?.id, isSanctioned: false }} />}\n collapsable={collapsable}\n >\n <TeamGrid rowClick=\"show\" showOffice />\n </ListCard>\n}\n","import React from 'react';\nimport { ReferenceArrayField, useListContext, useLocale, useTranslate } from 'react-admin';\nimport { orderBy } from 'lodash';\n\nimport { dedupeBy } from '@hisports/parsers';\nimport { translateApiProperty } from '@hisports/common';\n\nimport { formatList } from '../../locale';\n\nconst format = (locale, divisions, source) => {\n const values = divisions.map(division => {\n const value = translateApiProperty(division, source, locale);\n return value\n })\n\n return formatList(values, locale);\n}\n\nconst DivisionsList = ({ source, emptyText }) => {\n const translate = useTranslate()\n const locale = useLocale();\n const { ids = [], data } = useListContext();\n\n const divisions = orderBy(dedupeBy('id', ids.map(id => data?.[id])), 'order')\n return format(locale, divisions, source, translate) || translate(emptyText) || null;\n}\n\nexport const DivisionsField = ({ authMethod = \"show\", variant = 'body2', emptyText, ...props }) => {\n return <ReferenceArrayField basePath=\"/divisions\" resource=\"divisions\" reference=\"divisions\" allowEmpty {...props} >\n <DivisionsList source=\"name\" emptyText={emptyText} />\n </ReferenceArrayField>\n}\n\nDivisionsField.defaultProps = {\n addLabel: true,\n}\n","import React from 'react';\nimport { SimpleForm, useTranslate } from 'react-admin';\nimport { Grid, Typography } from '@material-ui/core'\n\nimport Toolbar from '../../common/ra/Toolbar';\nimport SwitchInput from '../../common/inputs/SwitchInput';\n\nimport { OfficeInput } from '../offices/OfficeInput';\nimport { SurfaceInput } from '../surfaces/SurfaceInput';\n\nimport { DivisionInput } from '../categories/DivisionInput';\n\nconst validate = values => {\n const errors = {};\n\n if (!values.arenaId) errors.arenaId = 'ra.validation.required'\n if (!values.officeId) errors.officeId = 'ra.validation.required'\n\n return errors;\n}\n\nconst inputProps = {\n resource: 'arenaoffices',\n basePath: '/arenaoffices',\n variant: 'outlined',\n margin: 'none',\n fullWidth: true,\n}\n\nexport const ArenaOfficeForm = ({ initialValues = {}, target, ...props }) => {\n const translate = useTranslate();\n const disableArenaInput = initialValues?.arenaId != null\n const disableOfficeInput = initialValues?.officeId != null\n\n return <SimpleForm toolbar={<Toolbar />} validate={validate} initialValues={{ isPrimary: false, ...initialValues }} {...props}>\n <Grid container spacing={2} fullWidth>\n <Grid item xs={12}>\n <SurfaceInput source=\"arenaId\" filter={{ parentId: null }} disabled={disableArenaInput} {...inputProps} />\n </Grid>\n <Grid item xs={12}>\n <OfficeInput source=\"officeId\" filter={{ type: { nin: ['League', 'Tournament', 'Cup'] } }} disabled={disableOfficeInput} {...inputProps} />\n </Grid>\n <Grid item xs={12}>\n <SwitchInput source=\"isPrimary\" {...inputProps} />\n </Grid>\n <Grid item xs={12}>\n <Typography variant=\"subtitle2\">{translate('resources.arenaoffices.labels.restrictions')}</Typography>\n </Grid>\n <Grid item xs={12}>\n <DivisionInput source=\"divisionIds\" multiple helperText=\"ra.message.optional\" {...inputProps} />\n </Grid>\n <Grid item xs={12}>\n <OfficeInput source=\"leagueIds\" multiple helperText=\"ra.message.optional\" {...inputProps} />\n </Grid>\n </Grid>\n </SimpleForm>\n}\n","import React, { Fragment, useState } from 'react';\nimport { useTranslate } from 'react-admin';\nimport { Button } from '@material-ui/core';\nimport { Add } from '@material-ui/icons';\n\nimport { DialogDatagrid } from '../../common/dialogs/DialogDatagrid';\nimport { CreateResourceDialog, EditResourceDialog } from '../../common/dialogs/ResourceDialog';\n\nimport { ArenaOfficeForm } from './ArenaOfficeForm';\n\nconst AddArenaOfficeDialog = ({ target, ...props }) => {\n const label = target === \"arenaId\" ? \"resources.offices.actions.add\" : \"resources.surfaces.actions.add\"\n return <CreateResourceDialog label={label} resource=\"arenaoffices\" basePath=\"/arenaoffices\" {...props}>\n <ArenaOfficeForm target={target} />\n </CreateResourceDialog>\n}\n\nconst EditArenaOfficeDialog = ({ target, ...props }) => {\n const label = target === \"arenaId\" ? \"resources.offices.labels.edit\" : \"resources.surfaces.labels.edit\"\n return <EditResourceDialog label={label} resource=\"arenaoffices\" basePath=\"/arenaoffices\" {...props}>\n <ArenaOfficeForm target={target} />\n </EditResourceDialog>\n}\n\nexport const AddArenaOfficeButton = ({ size, variant, ...props }) => {\n const [ isOpen, setOpen ] = useState(false);\n const translate = useTranslate();\n const buttonLabel = props.target === \"arenaId\" ? \"resources.offices.actions.add\" : \"resources.surfaces.actions.add\"\n return <>\n <Button color=\"primary\" size={size} variant={variant} startIcon={<Add />} onClick={() => setOpen(true)}>{translate(buttonLabel)}</Button>\n <AddArenaOfficeDialog isOpen={isOpen} handleClose={() => setOpen(false)} {...props} />\n </>\n}\n\nexport const ArenaOfficeDatagrid = props => {\n return <DialogDatagrid dialog={EditArenaOfficeDialog} {...props} />\n}\n","import React from 'react';\nimport { useListContext } from 'react-admin';\n\nimport FunctionField from '../../common/fields/FunctionField'\n\nimport { SurfaceField } from '../surfaces/SurfaceField';\nimport { OfficeField } from '../offices/OfficeField';\nimport { OfficesField } from '../offices/OfficesField';\nimport { DivisionsField } from '../categories/DivisionsField';\n\nimport { ArenaOfficeDatagrid } from './ArenaOfficeModal';\n\nconst has = (ids, data, property) =>\n ids?.some(id => data?.[id]?.[property]?.length > 0)\n\nconst TypeField = props =>\n <FunctionField {...props} render={(relation, source, resource, translate) => {\n if (relation.isPrimary) return translate('resources.arenaoffices.fields.isPrimary')\n return null;\n }} />\n\nexport const ArenaOfficesGrid = ({ showArena = true, showOffice = true, ...props }) => {\n const { ids = [], data } = useListContext(props);\n const showLeagues = has(ids, data, 'leagueIds')\n const showDivisions = has(ids, data, 'divisionIds')\n return <ArenaOfficeDatagrid size=\"medium\" {...props}>\n {showArena && <SurfaceField source=\"arenaId\" sortable={false} includeCity=\"full\" />}\n {showOffice && <OfficeField source=\"officeId\" sortable={false} />}\n {showDivisions && <DivisionsField source=\"divisionIds\" sortable={false} link={false} emptyText=\"ra.message.all\" />}\n {showLeagues && <OfficesField source=\"leagueIds\" sortable={false} link={false} />}\n <TypeField source=\"isPrimary\" />\n </ArenaOfficeDatagrid>\n}\n","import React from 'react';\nimport { useRecordContext } from 'react-admin';\n\nimport ListCard from '../../../common/cards/ListCard';\nimport { isAuthorized } from '../../../common/Authorize';\nimport { SurfaceIcon } from '../../icons';\n\nimport { ArenaOfficesGrid } from '../../arenaoffices/ArenaOfficesGrid';\nimport { AddArenaOfficeButton } from '../../arenaoffices/ArenaOfficeModal';\n\nexport default ({ collapsable, ...props }) => {\n const office = useRecordContext(props)\n const canAddSurface = isAuthorized(office, 'arenaoffices', 'create') && !['League', 'Tournament', 'Cup'].includes(office?.type)\n\n return <ListCard\n title=\"resources.surfaces.labels.card.title\"\n icon={<SurfaceIcon />}\n reference=\"arenaoffices\"\n target=\"officeId\"\n filter={{ effectiveOffices: true }}\n sort={{\n field: ['surface.venue.name', 'surface.name', 'isPrimary', 'office.name'],\n order: ['ASC', 'ASC', 'DESC', 'ASC'],\n }}\n collapsable={collapsable}\n addButton={canAddSurface && <AddArenaOfficeButton initialValues={{ officeId: office?.id }} target=\"officeId\" />}\n >\n <ArenaOfficesGrid />\n </ListCard>\n}\n","import React, { useState } from 'react';\nimport { useTranslate } from 'react-admin';\nimport { Button } from '@material-ui/core'\nimport { UnarchiveOutlined } from '@material-ui/icons'\n\nimport { LazyDialog } from '../../../../common/LazyDialog';\n\nconst Uploader = React.lazy(() => import('./Uploader'))\n\nexport default ({ officeId, size, variant }) => {\n const [ isOpen, setOpen ] = useState(false);\n const translate = useTranslate();\n\n return <>\n <Button color=\"primary\" size={size} variant={variant} startIcon={<UnarchiveOutlined />} onClick={() => setOpen(true)}>\n {translate('ra.action.import')}\n </Button>\n <LazyDialog>\n {isOpen && <Uploader officeId={officeId} isOpen={isOpen} onClose={() => setOpen(false)} />}\n </LazyDialog>\n </>\n}\n","import React from 'react';\nimport { useRecordContext } from 'react-admin';\n\nimport ListCard from '../../../common/cards/ListCard';\nimport { useSeason } from '../../../common/inputs/SeasonSelector';\nimport { isAuthorized } from '../../../common/Authorize';\nimport { ParticipantIcon } from '../../icons';\n\nimport { DivisionInput } from '../../categories/DivisionInput';\n\nimport { RegistrationGrid } from '../../registrations/RegistrationGrid';\nimport { AddRegistrationButton } from '../../registrations/RegistrationModal';\nimport ImportRegistrations from '../dialogs/registrations';\n\nexport default ({ collapsable, ...props }) => {\n const office = useRecordContext(props);\n const seasonId = useSeason();\n\n const showRegistrations = isAuthorized(office, 'registrations', 'show');\n const canAddRegistrations = isAuthorized(office, 'registrations', 'create');\n\n if (!showRegistrations) return null;\n\n const filters = [\n <DivisionInput source=\"divisionId\" multiple variant=\"outlined\" alwaysOn />\n ]\n\n const addButton = canAddRegistrations && <AddRegistrationButton initialValues={{ officeId: office?.id }} />\n const actions = [\n canAddRegistrations && <ImportRegistrations officeId={office?.id} size=\"small\" />,\n ].filter(Boolean)\n\n return <ListCard\n title=\"resources.registrations.labels.card.title\"\n icon={<ParticipantIcon />}\n reference=\"registrations\"\n target=\"officeId\"\n filter={{ seasonId, effectiveOffices: true }}\n sort={{\n field: ['participant.lastName', 'participant.firstName', 'division.name'],\n order: ['ASC', 'ASC', 'ASC'],\n }}\n filters={filters}\n addButton={addButton}\n actions={actions}\n collapsable={collapsable}\n >\n <RegistrationGrid showParticipant />\n </ListCard>\n}\n","import React, { useState } from 'react';\nimport { useTranslate } from 'react-admin';\nimport { Button } from '@material-ui/core'\nimport { UnarchiveOutlined } from '@material-ui/icons'\n\nimport { LazyDialog } from '../../../../common/LazyDialog';\n\nconst Uploader = React.lazy(() => import('./Uploader'))\n\nexport default ({ officeId, size, variant }) => {\n const [ isOpen, setOpen ] = useState(false);\n const translate = useTranslate();\n\n return <>\n <Button color=\"primary\" size={size} variant={variant} startIcon={<UnarchiveOutlined />} onClick={() => setOpen(true)}>\n {translate('resources.qualifications.labels.import_grades')}\n </Button>\n <LazyDialog>\n {isOpen && <Uploader officeId={officeId} isOpen={isOpen} onClose={() => setOpen(false)} />}\n </LazyDialog>\n </>\n}\n","import React, { useState } from 'react';\nimport { useTranslate } from 'react-admin';\nimport { Button } from '@material-ui/core'\nimport { UnarchiveOutlined } from '@material-ui/icons'\n\nimport { LazyDialog } from '../../../../common/LazyDialog';\n\nconst Uploader = React.lazy(() => import('./Uploader'))\n\nexport default ({ officeId, size, variant }) => {\n const [ isOpen, setOpen ] = useState(false);\n const translate = useTranslate();\n\n return <>\n <Button color=\"primary\" size={size} variant={variant} startIcon={<UnarchiveOutlined />} onClick={() => setOpen(true)}>\n {translate('ra.action.import')}\n </Button>\n <LazyDialog>\n {isOpen && <Uploader officeId={officeId} isOpen={isOpen} onClose={() => setOpen(false)} />}\n </LazyDialog>\n </>\n}\n","import React from 'react';\nimport { NumberInput, Pagination, useRecordContext } from 'react-admin';\n\nimport { FF_DISABLE_ADD_QUALIFICATIONS } from '@hisports/common/featureFlags';\nimport { isPastSeason } from '@hisports/common/src/seasons';\n\nimport ListCard from '../../../common/cards/ListCard';\nimport { useSeason } from '../../../common/inputs/SeasonSelector';\nimport { isAuthorized } from '../../../common/Authorize';\nimport { useDefaultSeason, useFlag, useScopes } from '../../../http';\nimport { ParticipantIcon } from '../../icons';\n\nimport { QualificationGrid } from '../../qualifications/QualificationGrid';\nimport { AddQualificationButton } from '../../qualifications/QualificationModal';\nimport { QualificationCategoryInput } from '../../qualifications/QualificationForm';\nimport ImportGrades from '../dialogs/grades';\nimport ImportQualifications from '../dialogs/qualifications';\n\nconst expiry = new Date().toISOString();\n\nexport default ({ collapsable, ...props }) => {\n const isEnabled = useFlag();\n const scopes = useScopes();\n const office = useRecordContext(props);\n const seasonId = useSeason();\n const defaultSeason = useDefaultSeason();\n\n const showQualifications = isAuthorized(office, 'qualifications', 'show');\n const canAddQualifications = scopes.includes('internal') || (isAuthorized(office, 'qualifications', 'create') && !isEnabled(FF_DISABLE_ADD_QUALIFICATIONS))\n const canImportGrades = isAuthorized(office, 'qualifications', 'importGrades');\n const canImportQualifications = isAuthorized(office, 'qualifications', 'importQualifications');\n\n if (!showQualifications) return null;\n\n const filter = isPastSeason(seasonId, defaultSeason)\n ? { effectiveOffices: true,\n seasonId,\n qualificationCategory: {\n types: { inq: ['Official', 'Scorekeeper'] } } }\n : {\n effectiveOffices: true,\n qualificationCategory: {\n types: { inq: ['Official', 'Scorekeeper'] } },\n or: [\n { seasonId },\n { expiry: { gte: expiry } },\n { expiry: { eq: null } },\n ]\n }\n\n const filters = [\n <NumberInput source=\"level\" variant=\"outlined\" alwaysOn />,\n <QualificationCategoryInput source=\"qualificationCategoryId\" filter={{ types: { inq: ['Official', 'Scorekeeper'] } }} variant=\"outlined\" alwaysOn />,\n // <QualificationCategoryTypeInput source=\"qualificationCategory.types\" variant=\"outlined\" alwaysOn multiple />,\n ]\n\n const addButton = canAddQualifications && <AddQualificationButton initialValues={{ officeId: office?.id }} />\n const actions = [\n canImportQualifications && <ImportQualifications officeId={office?.id} size=\"small\" alwaysOn />,\n canImportGrades && <ImportGrades officeId={office?.id} size=\"small\" />,\n ].filter(Boolean);\n\n return <ListCard\n title=\"resources.qualifications.labels.card.title\"\n icon={<ParticipantIcon />}\n reference=\"qualifications\"\n target=\"officeId\"\n filter={filter}\n sort={{\n field: ['seasonId', 'participant.lastName', 'participant.firstName', 'level'],\n order: ['DESC', 'ASC', 'ASC', 'ASC'],\n }}\n pagination={<Pagination />}\n filters={filters}\n addButton={addButton}\n actions={actions}\n collapsable={collapsable}\n >\n <QualificationGrid showParticipant rowClick=\"show\" />\n </ListCard>\n}\n","import { GET_ONE, useQuery } from 'react-admin';\n\nexport const useOfficeAssignSettings = (officeId, enabled) =>\n useQuery({\n type: GET_ONE,\n resource: 'officeAssignSettings',\n payload: { id: officeId },\n }, {\n enabled: officeId != null && enabled\n })\n","import React from 'react';\nimport { LinearProgress, RecordContextProvider, useRecordContext, useTranslate } from 'react-admin';\nimport { Table, TableBody } from '@material-ui/core';\n\nimport Row from '../../common/cards/TableRow';\n\nconst GeneralSettingsField = () => {\n const translate = useTranslate();\n const { visibleDaysEnabled, visibleDays } = useRecordContext();\n\n if (!visibleDaysEnabled) return translate('resources.officeAssignSettings.messages.visible_days_disabled')\n if (visibleDays === null) return translate('resources.officeAssignSettings.messages.visible_days_off')\n if (visibleDays === 0) return translate('resources.officeAssignSettings.messages.visible_same_day')\n return translate('resources.officeAssignSettings.messages.visible_days_on', { number: visibleDays })\n}\n\nconst RequestSettingsField = () => {\n const translate = useTranslate();\n const { requestsEnabled } = useRecordContext();\n\n if (!requestsEnabled) return translate('resources.officeAssignSettings.messages.requests_enabled_off')\n return translate('resources.officeAssignSettings.messages.requests_enabled_on')\n}\n\nconst DeclineSettingsField = () => {\n const translate = useTranslate();\n const { declineEnabled, declineConfirmedDisabled, declineHours, declineReason } = useRecordContext();\n\n if (!declineEnabled) return translate('resources.officeAssignSettings.messages.decline_enabled_off')\n return [\n declineHours > 0\n ? translate('resources.officeAssignSettings.messages.decline_enabled_on', { number: declineHours })\n : translate('resources.officeAssignSettings.messages.decline_enabled_on_anytime'),\n declineReason\n ? translate('resources.officeAssignSettings.messages.reason_required')\n : translate('resources.officeAssignSettings.messages.reason_not_required'),\n declineConfirmedDisabled && translate('resources.officeAssignSettings.messages.disabled_after_confirmation'),\n ].filter(Boolean).join(', ')\n}\n\nexport const OfficeAssignSettingsField = ({ data, loading, error }) => {\n const translate = useTranslate();\n if (loading) return <LinearProgress />\n if (error) return translate('resources.officeAssignSettings.messages.load_error');\n\n return <RecordContextProvider value={data}>\n <Table>\n <TableBody>\n <Row label=\"resources.officeAssignSettings.labels.general\">\n <GeneralSettingsField />\n </Row>\n <Row label=\"resources.officeAssignSettings.labels.requests\">\n <RequestSettingsField />\n </Row>\n <Row label=\"resources.officeAssignSettings.labels.declines\">\n <DeclineSettingsField />\n </Row>\n </TableBody>\n </Table>\n </RecordContextProvider>\n}\n","import React from 'react';\nimport { NumberInput, SimpleForm, useTranslate } from 'react-admin';\nimport { Typography } from '@material-ui/core'\nimport { Alert } from '@material-ui/lab';\nimport { useFormState } from 'react-final-form';\n\nimport Toolbar from '../../common/ra/Toolbar';\nimport SwitchInput from '../../common/inputs/SwitchInput'\nimport { EnumInput } from '../../common/inputs/EnumInputs';\nimport { FieldDependency } from '../../common/FieldDependency';\n\nconst inputProps = {\n variant: 'outlined',\n margin: 'normal',\n fullWidth: true,\n}\n\nconst validate = values => {\n const errors = {};\n\n if (values.visibleDays % 1 > 0) {\n errors.visibleDays = 'ra.validation.invalid_number';\n } else if (values.visibleDays !== null && values.visibleDays < 0) {\n errors.visibleDays = 'ra.validation.positive_leave_empty'\n }\n\n if (values.dailyLimit !== null && values.dailyLimit <= 0) {\n errors.dailyLimit = 'ra.validation.greater_than_zero_leave_empty_limit'\n }\n\n if (values.declineHours !== null && values.declineHours <= 0) {\n errors.declineHours = 'ra.validation.greater_than_zero_leave_empty'\n }\n\n if (values.claimableDriver && values.driverAmount == null) errors.driverAmount = 'ra.validation.required';\n if (values.claimablePassenger && values.passengerAmount == null) errors.passengerAmount = 'ra.validation.required';\n if (values.claimableBreakfast && values.breakfastAmount == null) errors.breakfastAmount = 'ra.validation.required';\n if (values.claimableLunch && values.lunchAmount == null) errors.lunchAmount = 'ra.validation.required';\n if (values.claimableDinner && values.dinnerAmount == null) errors.dinnerAmount = 'ra.validation.required';\n\n if (values.driverExcludedDistance != null) {\n if (values.driverExcludedDistance <= 0) {\n errors.driverExcludedDistance = 'ra.validation.greater_than_zero'\n } else if (!Number.isInteger(values.driverExcludedDistance)) {\n errors.driverExcludedDistance = 'ra.validation.whole'\n }\n }\n if (values.passengerExcludedDistance != null) {\n if (values.passengerExcludedDistance <= 0) {\n errors.passengerExcludedDistance = 'ra.validation.greater_than_zero'\n } else if (!Number.isInteger(values.passengerExcludedDistance)) {\n errors.passengerExcludedDistance = 'ra.validation.whole'\n }\n }\n\n return errors;\n}\n\nconst VisibleDaysOptions = props => {\n const translate = useTranslate();\n const { values } = useFormState();\n\n const { visibleDaysEnabled } = values;\n if (!visibleDaysEnabled) return null;\n\n return <NumberInput\n source=\"visibleDays\"\n label={translate('resources.officeAssignSettings.fields.visibleDays')}\n helperText=\"resources.officeAssignSettings.helpers.visibleDays\"\n {...inputProps}\n />\n}\n\nconst RequestOptions = props => {\n const translate = useTranslate();\n const { values } = useFormState();\n\n const { visibleDaysEnabled } = values;\n\n return <>\n {!visibleDaysEnabled && <Alert severity=\"warning\" fullWidth>{translate(\"resources.officeAssignSettings.alerts.visibleDaysEnabled\")}</Alert>}\n <SwitchInput\n source=\"requestsEnabled\"\n label={translate(\"resources.officeAssignSettings.fields.requestsEnabled\")}\n helperText=\"resources.officeAssignSettings.helpers.requestsEnabled\"\n disabled={!visibleDaysEnabled}\n {...inputProps}\n />\n </>\n}\n\nconst DeclineOptions = inputProps => {\n const { values } = useFormState();\n\n const { declineEnabled } = values;\n if (!declineEnabled) return null;\n\n return <>\n <SwitchInput\n source=\"removeAfterDecline\"\n helperText=\"resources.officeAssignSettings.helpers.removeAfterDecline\"\n {...inputProps}\n />\n <SwitchInput\n source=\"declineConfirmedDisabled\"\n helperText=\"resources.officeAssignSettings.helpers.declineConfirmedDisabled\"\n {...inputProps}\n />\n <SwitchInput\n source=\"declineReason\"\n helperText=\"resources.officeAssignSettings.helpers.declineReason\"\n {...inputProps}\n />\n <NumberInput\n source=\"declineHours\"\n helperText=\"resources.officeAssignSettings.helpers.declineHours\"\n {...inputProps}\n />\n </>\n}\n\nconst AssignmentVisibilityEnumInput = props =>\n <EnumInput {...props} radio choices={[\n { id: 'Visible', name: 'resources.officeAssignSettings.values.assignmentVisibility.Visible' },\n { id: 'Status', name: 'resources.officeAssignSettings.values.assignmentVisibility.Status' },\n { id: 'Hidden', name: 'resources.officeAssignSettings.values.assignmentVisibility.Hidden' },\n ]} />\n\nexport default props => {\n const translate = useTranslate();\n return <SimpleForm toolbar={<Toolbar />} validate={validate} {...props}>\n <Typography variant=\"subtitle2\" gutterBottom>{translate('resources.officeAssignSettings.labels.general')}</Typography>\n <SwitchInput\n source=\"visibleDaysEnabled\"\n helperText=\"resources.officeAssignSettings.helpers.visibleDaysEnabled\"\n {...inputProps}\n />\n <VisibleDaysOptions />\n <NumberInput\n source=\"dailyLimit\"\n helperText=\"resources.officeAssignSettings.helpers.dailyLimit\"\n min={1}\n {...inputProps}\n />\n\n <AssignmentVisibilityEnumInput\n source=\"assignmentVisibility\"\n helperText=\"resources.officeAssignSettings.helpers.assignmentVisibility\"\n {...inputProps}\n />\n\n <SwitchInput\n source=\"assignerVisible\"\n helperText=\"resources.officeAssignSettings.helpers.assignerVisible\"\n {...inputProps}\n />\n\n <SwitchInput\n source=\"supervisorVisible\"\n helperText=\"resources.officeAssignSettings.helpers.supervisorVisible\"\n {...inputProps}\n />\n\n <SwitchInput\n source=\"removeAfterRescheduled\"\n helperText=\"resources.officeAssignSettings.helpers.removeAfterRescheduled\"\n {...inputProps}\n />\n <FieldDependency fieldSource=\"removeAfterRescheduled\" test={value => !!value}>\n <SwitchInput\n source=\"removeOnDateChange\"\n label=\"resources.officeAssignSettings.fields.removeOnDateChange\"\n helperText=\"resources.officeAssignSettings.helpers.removeOnDateChange\"\n {...inputProps}\n />\n </FieldDependency>\n\n <SwitchInput\n source=\"enforceConsecutive\"\n helperText=\"resources.officeAssignSettings.helpers.enforceConsecutive\"\n {...inputProps}\n />\n\n <br />\n <Typography variant=\"subtitle2\" gutterBottom>{translate('resources.officeAssignSettings.labels.requests')}</Typography>\n <RequestOptions />\n\n <br />\n <Typography variant=\"subtitle2\" gutterBottom>{translate('resources.officeAssignSettings.labels.declines')}</Typography>\n <SwitchInput\n source=\"declineEnabled\"\n helperText=\"resources.officeAssignSettings.helpers.declineEnabled\"\n {...inputProps}\n />\n <DeclineOptions {...inputProps} />\n\n <br />\n <Typography variant=\"subtitle2\" gutterBottom>{translate('resources.officeAssignSettings.labels.claims')}</Typography>\n <SwitchInput\n source=\"allowEarlyClaims\"\n helperText=\"resources.officeAssignSettings.helpers.allowEarlyClaims\"\n {...inputProps}\n />\n </SimpleForm>\n}\n","import React, { Fragment, useState } from 'react';\nimport { useTranslate } from 'react-admin';\nimport { Button } from '@material-ui/core';\nimport { Edit } from '@material-ui/icons';\n\nimport { EditResourceDialog } from '../../common/dialogs/ResourceDialog';\n\nimport OfficeAssignSettingsForm from './OfficeAssignSettingsForm';\n\nconst EditOfficeAssignSettingsDialog = props =>\n <EditResourceDialog label=\"resources.officeAssignSettings.labels.edit_assigning\" disableDelete resource=\"officeAssignSettings\" basePath=\"/officeAssignSettings\" {...props}>\n <OfficeAssignSettingsForm />\n </EditResourceDialog>\n\nexport const UpdateOfficeAssignSettingsButton = ({ officeId, ...props }) => {\n const translate = useTranslate();\n const [ isOpen, setOpen ] = useState(false);\n\n return <>\n <Button color=\"primary\" startIcon={<Edit />} onClick={() => setOpen(true)}>\n {translate('resources.officeAssignSettings.actions.edit')}\n </Button>\n <EditOfficeAssignSettingsDialog id={officeId} isOpen={isOpen} handleClose={() => setOpen(false)} {...props} />\n </>\n}\n","import React from 'react';\nimport { useRecordContext, useTranslate } from 'react-admin';\nimport { Alert } from '@material-ui/lab';\n\nimport InfoCard from '../../../common/cards/InfoCard';\nimport { isAuthorized } from '../../../common/Authorize';\n\nimport { useOfficeAssignSettings } from '../../officeAssignSettings';\nimport { OfficeAssignSettingsField } from '../../officeAssignSettings/OfficeAssignSettingsField';\nimport { UpdateOfficeAssignSettingsButton } from '../../officeAssignSettings/OfficeAssignSettingsModal';\n\nconst OfficeAssignSettingsCard = ({ officeId, showEdit }) => {\n const translate = useTranslate();\n const settings = useOfficeAssignSettings(officeId, true);\n\n if (!settings.data) return null;\n if (!settings.data.enabled) return <Alert severity=\"warning\">{translate('resources.officeAssignSettings.alerts.assigning_not_enabled')}</Alert>\n\n return <InfoCard title=\"resources.officeAssignSettings.labels.card.title\" actions={[\n showEdit && <UpdateOfficeAssignSettingsButton officeId={officeId} />\n ]}>\n <OfficeAssignSettingsField officeId={officeId} {...settings} />\n </InfoCard>\n}\n\nexport default props => {\n const office = useRecordContext(props);\n const showSettings = isAuthorized(office, 'officeAssignSettings', 'show')\n const canEditSettings = isAuthorized(office, 'officeAssignSettings', 'edit')\n\n if (!showSettings) return null;\n return <OfficeAssignSettingsCard officeId={office?.id} showEdit={canEditSettings} />\n}\n","import React from 'react';\nimport { TextInput, SimpleForm, useTranslate } from 'react-admin';\nimport { Grid } from '@material-ui/core'\n\nimport Toolbar from '../../common/ra/Toolbar';\nimport { SeasonInput, ScheduleTypeEnumInput } from '../../common/inputs/EnumInputs';\nimport { CategoryInput } from '../categories/CategoryInput';\n\nconst validate = values => {\n const errors = {};\n if (!values.name) errors.name = 'ra.validation.required'\n if (!values.type) errors.type = 'ra.validation.required'\n return errors;\n}\n\nconst inputProps = {\n resource: 'groups',\n basePath: '/groups',\n variant: 'outlined',\n margin: 'none',\n fullWidth: true,\n}\n\nexport const GroupForm = props => {\n const translate = useTranslate();\n return <SimpleForm toolbar={<Toolbar />} validate={validate} {...props}>\n <Grid container spacing={2} fullWidth>\n <Grid item xs={12}>\n <SeasonInput source=\"seasonId\" disabled {...inputProps} />\n </Grid>\n <Grid item xs={12} lg={6}>\n <TextInput source=\"name\" autoFocus {...inputProps} />\n </Grid>\n <Grid item xs={12} lg={6}>\n <ScheduleTypeEnumInput source=\"type\" {...inputProps} />\n </Grid>\n <Grid item xs={12}>\n <CategoryInput source=\"categoryIds\" select multiple allowEmpty emptyLabel={translate('ra.message.all')} helperText=\"resources.groups.helpers.categoryIds\" {...inputProps} />\n </Grid>\n </Grid>\n </SimpleForm>\n}\n","import React, { Fragment, useState } from 'react';\nimport { useTranslate } from 'react-admin';\nimport { Button, makeStyles, Tooltip, Typography } from '@material-ui/core';\nimport { Add } from '@material-ui/icons';\n\nimport { DialogDatagrid } from '../../common/dialogs/DialogDatagrid';\nimport { CreateResourceDialog, EditResourceDialog } from '../../common/dialogs/ResourceDialog';\n\nimport { GroupForm } from './GroupForm';\n\nconst useStyles = makeStyles((theme) => ({\n tooltip: {\n maxWidth: 750,\n },\n}));\n\nconst AddGroupDialog = props =>\n <CreateResourceDialog label=\"resources.groups.actions.add\" resource=\"groups\" basePath=\"/groups\" {...props}>\n <GroupForm />\n </CreateResourceDialog>\n\nconst EditGroupDialog = props =>\n <EditResourceDialog label=\"resources.groups.labels.edit\" resource=\"groups\" basePath=\"/groups\" {...props}>\n <GroupForm />\n </EditResourceDialog>\n\nexport const AddGroupButton = ({ size, variant, isGroups, ...props }) => {\n const translate = useTranslate();\n const [ isOpen, setOpen ] = useState(false);\n const classes = useStyles();\n\n const addButton = (\n <Button disabled={!isGroups} color=\"primary\" size={size} variant={variant} startIcon={<Add />} onClick={() => setOpen(true)}>\n {translate('resources.groups.actions.add')}\n </Button>\n );\n\n return <>\n {!isGroups ? <Tooltip\n title={<Typography variant=\"body2\" display=\"inline\">\n <div dangerouslySetInnerHTML={{ __html: `${translate(\"resources.pools.tooltips.groups_unavailable\")}${translate('resources.officeSettings.tooltips.groupingType')}` } } />\n </Typography>}\n placement=\"center\"\n classes={{ tooltip: classes.tooltip }}\n >\n <span>{addButton}</span>\n </Tooltip>\n : <span>{addButton}</span>}\n <AddGroupDialog isOpen={isOpen} handleClose={() => setOpen(false)} {...props} />\n </>\n}\n\nexport const GroupDatagrid = props => <DialogDatagrid dialog={EditGroupDialog} {...props} />\n","import React from 'react';\nimport { TextField } from 'react-admin';\n\nimport { EnumField } from '../../common/inputs/EnumInputs';\nimport { CategoriesField } from '../categories/CategoriesField';\nimport { SeasonField } from '../seasons/SeasonField';\n\nimport { GroupDatagrid } from './GroupModal';\n\nexport const GroupGrid = props =>\n <GroupDatagrid size=\"medium\" {...props}>\n <SeasonField source=\"seasonId\" />\n <TextField source=\"name\" />\n <EnumField source=\"type\" />\n <CategoriesField source=\"categoryIds\" emptyText=\"ra.message.all\" />\n </GroupDatagrid>\n","import { useEffect, useState } from \"react\";\n\nimport { apiClient } from \"../../http\";\n\nexport const useOfficeGroupsCount = (officeId, seasonId) => {\n const [ data, setData ] = useState({});\n const [ loading, setLoading ] = useState(false);\n const [ error, setError ] = useState(null);\n\n useEffect(() => {\n const fetchData = async () => {\n setLoading(true);\n setError(null);\n\n try {\n const response = await apiClient({\n method: 'GET',\n url: `/offices/${officeId}/groups/count`,\n params: { where: { seasonId } },\n })\n setData(response?.data?.count);\n } catch (err) {\n setError(err);\n } finally {\n setLoading(false);\n }\n };\n\n fetchData();\n }, [ officeId, seasonId ]);\n\n return { data, loading, error };\n}\n","import React, { useRef } from 'react';\nimport { useRecordContext } from 'react-admin';\nimport { LayersOutlined } from '@material-ui/icons';\n\nimport ListCard from '../../../common/cards/ListCard';\nimport { useSeason } from '../../../common/inputs/SeasonSelector';\nimport { isAuthorized } from '../../../common/Authorize';\n\nimport { GroupGrid } from '../../groups/GroupGrid';\nimport { AddGroupButton } from '../../groups/GroupModal';\nimport { useOfficeSettingsWithStore } from '../../officeSettings';\nimport { useOfficeGroupsCount } from '../../groups';\n\nexport default props => {\n const office = useRecordContext(props);\n const seasonId = useSeason();\n const listCardRef = useRef(null);\n const { data: officeSettings } = useOfficeSettingsWithStore(office?.id);\n const { data: officeGroupsCount } = useOfficeGroupsCount(office?.id, seasonId);\n const isGroups = officeSettings?.groupingType === 'Groups';\n\n const showGroups = isAuthorized(office, 'groups', 'list');\n const canAddGroups = isAuthorized(office, 'groups', 'create')\n\n if (!showGroups || (!isGroups && !officeGroupsCount)) return null;\n\n return <div ref={listCardRef}>\n <ListCard\n title=\"resources.groups.labels.card.title\"\n subtitle=\"resources.groups.labels.card.subtitle\"\n icon={<LayersOutlined />}\n collapsable\n reference=\"groups\"\n target=\"offices\"\n source=\"id\"\n filter={{ seasonId }}\n sort={{ field: 'name', order: 'ASC' }}\n addButton={canAddGroups && <AddGroupButton initialValues={{ officeId: office?.id }} officeId={office?.id} isGroups={isGroups} />}\n >\n <GroupGrid rowOptions={{ isRowSelectable: () => isGroups }} />\n </ListCard>\n </div>\n}\n","import React from 'react';\nimport { useRecordContext } from 'react-admin';\nimport { VerifiedUserOutlined } from '@material-ui/icons';\n\nimport ListCard from '../../../common/cards/ListCard';\nimport { isAuthorized } from '../../../common/Authorize';\n\nimport { RoleGrid } from '../../roles/RoleGrid';\nimport { AddRoleButton } from '../../roles/RoleModal';\n\nexport default props => {\n const office = useRecordContext(props);\n\n const showRoles = isAuthorized(office, 'permissions', 'list')\n const canAddRoles = isAuthorized(office, 'permissions', 'create')\n\n if (!showRoles) return null;\n return <ListCard\n title=\"resources.permissions.labels.card.title\"\n subtitle=\"resources.permissions.labels.card.subtitles.office\"\n icon={<VerifiedUserOutlined />}\n collapsable\n reference=\"permissions\"\n target=\"offices\"\n sort={{ field: 'roleId', order: 'ASC' }}\n addButton={canAddRoles && <AddRoleButton initialValues={{ principalType: 'Participant', targetType: 'Office', targetId: office?.id }} />}\n >\n <RoleGrid showOffice={false} />\n </ListCard>\n}\n","import React from 'react';\nimport { useRecordContext } from 'react-admin';\nimport { NotificationsOutlined } from '@material-ui/icons';\n\nimport ListCard from '../../../common/cards/ListCard';\nimport { isAuthorized } from '../../../common/Authorize';\n\nimport { NotificationGrid } from '../../notifications/NotificationGrid';\nimport { AddNotificationButton } from '../../notifications/NotificationModal';\n\nexport default props => {\n const office = useRecordContext(props);\n\n const showNotifications = isAuthorized(office, 'notifications', 'list')\n const canAddNotifications = isAuthorized(office, 'notifications', 'create')\n\n if (!showNotifications) return null;\n return <ListCard\n title=\"resources.notifications.labels.card.title\"\n subtitle=\"resources.notifications.labels.card.subtitles.office\"\n icon={<NotificationsOutlined />}\n collapsable\n reference=\"notifications\"\n target=\"offices\"\n sort={{ field: 'email', order: 'ASC' }}\n addButton={canAddNotifications && <AddNotificationButton initialValues={{ targetType: 'Office', targetId: office?.id }} />}\n >\n <NotificationGrid showSeason={false} />\n </ListCard>\n}\n","import React from 'react';\nimport { TextInput, NumberInput, SimpleForm } from 'react-admin';\nimport { Grid } from '@material-ui/core'\n\nimport Toolbar from '../../common/ra/Toolbar';\nimport { OfficeInput } from '../offices/OfficeInput';\n\nconst validate = values => {\n const errors = {};\n if (!values.name) errors.name = 'ra.validation.required'\n if (!values.officeId) errors.officeId = 'ra.validation.required'\n return errors;\n}\n\nconst inputProps = {\n resource: 'sections',\n basePath: '/sections',\n variant: 'outlined',\n margin: 'none',\n fullWidth: true,\n}\n\nexport const SectionForm = props =>\n <SimpleForm toolbar={<Toolbar />} validate={validate} {...props}>\n <Grid container spacing={2} fullWidth>\n <Grid item xs={12} lg={6}>\n <TextInput source=\"name\" autoFocus {...inputProps} />\n </Grid>\n <Grid item xs={12} lg={6}>\n <NumberInput source=\"order\" helperText=\"ra.message.optional\" {...inputProps} />\n </Grid>\n <Grid item xs={12}>\n <OfficeInput source=\"officeId\" filter={{ type: { neq: 'Historical' } }} {...inputProps} />\n </Grid>\n </Grid>\n </SimpleForm>\n","import React, { Fragment, useState } from 'react';\nimport { useTranslate } from 'react-admin';\nimport { Button } from '@material-ui/core';\nimport { Add } from '@material-ui/icons';\n\nimport { DialogDatagrid } from '../../common/dialogs/DialogDatagrid';\nimport { CreateResourceDialog, EditResourceDialog } from '../../common/dialogs/ResourceDialog';\n\nimport { SectionForm } from './SectionForm';\n\nconst AddSectionDialog = props =>\n <CreateResourceDialog label=\"resources.sections.actions.add\" resource=\"sections\" basePath=\"/sections\" {...props}>\n <SectionForm />\n </CreateResourceDialog>\n\nconst EditSectionDialog = props =>\n <EditResourceDialog label=\"resources.sections.labels.edit\" resource=\"sections\" basePath=\"/sections\" {...props}>\n <SectionForm />\n </EditResourceDialog>\n\nexport const AddSectionButton = ({ size, variant, ...props }) => {\n const [ isOpen, setOpen ] = useState(false);\n const translate = useTranslate();\n return <>\n <Button color=\"primary\" size={size} variant={variant} startIcon={<Add />} onClick={() => setOpen(true)}>\n {translate('resources.sections.actions.add')}\n </Button>\n <AddSectionDialog isOpen={isOpen} handleClose={() => setOpen(false)} {...props} />\n </>\n}\n\nexport const SectionDatagrid = props => <DialogDatagrid dialog={EditSectionDialog} {...props} />\n","import React from 'react';\nimport { TextField, NumberField } from 'react-admin';\n\nimport { SectionDatagrid } from './SectionModal';\n\nexport const SectionGrid = props =>\n <SectionDatagrid size=\"medium\" {...props}>\n <TextField source=\"name\" />\n <NumberField source=\"order\" />\n </SectionDatagrid>\n","import React from 'react';\nimport { useRecordContext } from 'react-admin';\nimport { Web } from '@material-ui/icons';\n\nimport ListCard from '../../../common/cards/ListCard';\nimport { isAuthorized } from '../../../common/Authorize';\n\nimport { SectionGrid } from '../../sections/SectionGrid';\nimport { AddSectionButton } from '../../sections/SectionModal';\n\nexport default props => {\n const office = useRecordContext(props);\n\n const canAddSection = isAuthorized(office, 'sections', 'create');\n\n return <ListCard\n title=\"resources.sections.labels.card.title\"\n subtitle=\"resources.sections.labels.card.subtitle\"\n icon={<Web />}\n collapsable\n reference=\"sections\"\n target=\"officeId\"\n sort={{ field: 'name', order: 'ASC' }}\n addButton={canAddSection && <AddSectionButton initialValues={{ officeId: office?.id }} />}\n >\n <SectionGrid rowClick=\"show\" />\n </ListCard>\n}\n","import React from 'react';\nimport { TextInput, SimpleForm } from 'react-admin';\nimport { useFormState } from 'react-final-form';\nimport { Grid } from '@material-ui/core'\n\nimport { useScopes } from '../../http';\nimport Toolbar from '../../common/ra/Toolbar';\nimport { OfficeTypeEnumInput, TimezoneEnumInput } from '../../common/inputs/EnumInputs';\nimport LogoInput from '../../common/inputs/LogoInput'\nimport { SyncAlert, useRecordSynced } from '../../common/SyncAlert';\n\nimport { OfficeInput } from './OfficeInput';\n\nconst validate = values => {\n const errors = {};\n if (!values.name) errors.name = 'ra.validation.required';\n if (!values.type) errors.type = 'ra.validation.required';\n if (!values.timezone) errors.timezone = 'ra.validation.required';\n if (values.type !== 'Organization' && !values.parentId) errors.parentId = 'ra.validation.required';\n if (values.id && (values.id === values.parentId)) errors.parentId = 'resources.offices.validations.same_office';\n\n return errors;\n}\n\nconst HCRIdInput = props => {\n const { values } = useFormState();\n\n if (values && ['League', 'Tournament', 'Cup', 'Zone'].includes(values.type)) return null;\n return <TextInput {...props} />\n}\n\nconst inputProps = {\n resource: 'offices',\n basePath: '/offices',\n variant: 'outlined',\n margin: 'none',\n fullWidth: true,\n}\n\nconst NameInput = props => {\n const { values } = useFormState()\n const { name } = values;\n\n const hasDivision = name && name.match(/U\\d+|Initiation|Novice|Atom|PeeWee|Bantam|Midget|Juvenile/i)\n const helperText = hasDivision ? \"resources.offices.helpers.name\" : null;\n\n return <TextInput helperText={helperText} {...props} />\n}\n\nconst TypeInput = props => {\n const { values } = useFormState()\n\n return <OfficeTypeEnumInput hideOrganization={values.type !== 'Organization'} {...props} />\n}\n\nexport const OfficeForm = props => {\n const [ isSynced, toggle ] = useRecordSynced(props);\n const scopes = useScopes();\n\n const isInternal = scopes.includes('internal');\n\n return <>\n <SyncAlert isSynced={isSynced} toggle={toggle} />\n <SimpleForm toolbar={<Toolbar isSynced={isSynced} />} validate={validate} {...props}>\n <Grid container spacing={2} fullWidth>\n <Grid item xs={12} lg={6}>\n <NameInput source=\"name\" autoFocus disabled={isSynced} {...inputProps} />\n </Grid>\n <Grid item xs={12} sm={6} lg={3}>\n <TypeInput source=\"type\" disabled={isSynced} {...inputProps} />\n </Grid>\n <Grid item xs={12} sm={6} lg={3}>\n <HCRIdInput source=\"HCRId\" helperText=\"ra.message.optional\" disabled={isSynced} {...inputProps} />\n </Grid>\n <Grid item xs={12}>\n <OfficeInput source=\"parentId\" filter={{ type: { nin: ['League', 'Tournament', 'Cup', 'Zone'] }, _scope: 'Tenant' }} disabled={isSynced} {...inputProps} />\n </Grid>\n <Grid item xs={12} sm={4} md={4}>\n <TimezoneEnumInput source=\"timezone\" {...inputProps} />\n </Grid>\n {(!isSynced || isInternal) && <Grid item xs={12}>\n <LogoInput source=\"logo\" {...inputProps} />\n </Grid>}\n </Grid>\n </SimpleForm>\n </>\n}\n","import React, { Fragment, useState } from 'react';\nimport { useTranslate } from 'react-admin';\nimport { Button } from '@material-ui/core';\nimport { Add } from '@material-ui/icons';\n\nimport { DialogDatagrid } from '../../common/dialogs/DialogDatagrid';\nimport { CreateResourceDialog, EditResourceDialog } from '../../common/dialogs/ResourceDialog';\n\nimport { OfficeForm } from './OfficeForm';\n\nconst AddOfficeDialog = props =>\n <CreateResourceDialog label=\"resources.offices.actions.add\" resource=\"offices\" basePath=\"/offices\" maxWidth=\"md\" {...props}>\n <OfficeForm />\n </CreateResourceDialog>\n\nconst EditOfficeDialog = props =>\n <EditResourceDialog label=\"resources.offices.labels.edit\" resource=\"offices\" basePath=\"/offices\" maxWidth=\"md\" {...props}>\n <OfficeForm />\n </EditResourceDialog>\n\nexport const AddOfficeButton = ({ size, variant, ...props }) => {\n const [ isOpen, setOpen ] = useState(false);\n const translate = useTranslate();\n return <>\n <Button color=\"primary\" size={size} variant={variant} startIcon={<Add />} onClick={() => setOpen(true)}>\n {translate('resources.offices.actions.add')}\n </Button>\n <AddOfficeDialog isOpen={isOpen} handleClose={() => setOpen(false)} {...props} />\n </>\n}\n\nexport const OfficeDatagrid = props => <DialogDatagrid dialog={EditOfficeDialog} {...props} />\n","import React, { useEffect, useState } from 'react';\nimport { useListContext, useRecordContext } from 'react-admin';\nimport { useLocation } from 'react-router-dom';\n\nimport ListCard from '../../../common/cards/ListCard';\nimport { isAuthorized } from '../../../common/Authorize';\nimport { OfficeTypeEnumInput } from '../../../common/inputs/EnumInputs';\n\nimport { OfficeGrid } from '../../offices/OfficeGrid';\nimport { AddOfficeButton } from '../../offices/OfficeModal';\nimport { OfficeIcon } from '../../icons';\n\nconst InitializeFilter = ({ children }) => {\n const { setFilters } = useListContext();\n const location = useLocation();\n const [path, setPath] = useState(location.pathname);\n\n useEffect(() => {\n // Reset filters when navigating from office to office\n if (location.pathname === path) return;\n setFilters({})\n setPath(location.pathname);\n }, [location, path, setFilters]);\n\n return children;\n}\n\nexport default props => {\n const office = useRecordContext(props);\n const canAddOffice = isAuthorized(office, 'offices', 'create');\n\n const filters = [\n <OfficeTypeEnumInput source=\"type\" variant=\"outlined\" alwaysOn multiple />,\n ]\n\n return <ListCard\n title=\"resources.offices.labels.card.sub_offices_title\"\n reference=\"offices\"\n target=\"parentId\"\n icon={<OfficeIcon />}\n sort={{ field: 'name', order: 'ASC' }}\n addButton={canAddOffice && <AddOfficeButton initialValues={{ parentId: office?.id }} />}\n perPage={10}\n rowsPerPageOptions={[10, 25, 50, 100]}\n filters={filters}\n >\n <InitializeFilter>\n <OfficeGrid rowClick=\"show\" />\n </InitializeFilter>\n </ListCard>\n}\n","import React, { useState } from 'react';\nimport { useTranslate } from 'react-admin';\nimport { Button } from '@material-ui/core'\nimport { UnarchiveOutlined } from '@material-ui/icons'\n\nimport { LazyDialog } from '../../../../common/LazyDialog';\n\nconst Uploader = React.lazy(() => import('./Uploader'))\n\nexport default ({ officeId, size, variant }) => {\n const [ isOpen, setOpen ] = useState(false);\n const translate = useTranslate();\n\n return <>\n <Button color=\"primary\" size={size} variant={variant} startIcon={<UnarchiveOutlined />} onClick={() => setOpen(true)}>\n {translate('ra.action.import')}\n </Button>\n <LazyDialog>\n {isOpen && <Uploader officeId={officeId} isOpen={isOpen} onClose={() => setOpen(false)} />}\n </LazyDialog>\n </>\n}\n","import React from 'react';\n\nimport ListCard from \"../../common/cards/ListCard\";\nimport { useSeason } from \"../../common/inputs/SeasonSelector\";\nimport { useDefaultSeason } from \"../../http\";\n\nimport { QualificationGrid } from \"./QualificationGrid\";\n\nconst expiry = new Date().toISOString()\n\nexport const OfficialQualificationsGrid = ({ className, variant = 'body2', ...props }) => {\n const seasonId = useSeason();\n const defaultSeason = useDefaultSeason();\n\n const isPast = seasonId !== defaultSeason;\n const filter = isPast\n ? { seasonId, qualificationCategory: {\n types: { inq: ['Official', 'Scorekeeper'] } } }\n : { qualificationCategory: {\n types: { inq: ['Official', 'Scorekeeper'] } },\n or: [\n { seasonId },\n { expiry: { gte: expiry } },\n { expiry: { eq: null } },\n ]\n }\n\n return <ListCard\n reference=\"qualifications\"\n target=\"participants\"\n source=\"participantId\"\n filter={filter}\n sort={{ field: 'seasonId', order: 'DESC' }}\n >\n <QualificationGrid rowClick={false} />\n </ListCard>\n}\n\nOfficialQualificationsGrid.defaultProps = {\n addLabel: true,\n}\n","import React from 'react';\nimport { TextInput } from 'react-admin';\n\nconst filterOfficialParticipants = name => ({ name })\n\nexport const OfficialParticipantInput = ({ allowEmpty, helperText, ...props }) => {\n return <TextInput\n reference=\"participants\"\n filterToQuery={filterOfficialParticipants}\n sort={{\n field: 'lastName',\n order: 'ASC'\n }}\n perPage={25}\n size=\"small\"\n {...props}\n />\n}\n","import React from 'react';\nimport moment from 'moment';\nimport { BooleanInput, Pagination, useRecordContext } from 'react-admin';\n\nimport ListCard from '../../../common/cards/ListCard';\nimport { isAuthorized } from '../../../common/Authorize';\nimport useSyncedPreferences from '../../../common/useSyncedPreferences';\n\nimport { OfficialGrid } from '../../officialOffices/OfficialGrid';\nimport ImportOfficials from '../dialogs/officials';\nimport { ParticipantIcon } from '../../icons';\n\nimport { OfficialQualificationsGrid } from '../../qualifications/OfficialQualificationsGrid';\nimport { OfficialParticipantInput } from '../../officials/OfficialParticipantInput';\nimport { SelectOfficialsButton } from '../../officials/SelectOfficialsDialog';\n\nconst OFFICIAL_TYPE_RESOURCE_MAP = {\n 'Official': 'officials',\n 'Scorekeeper': 'scorekeepers',\n}\n\nconst filterProps = {\n variant: 'outlined',\n options: {\n helperText: undefined,\n style: { marginRight: 0 }\n },\n helperText: false,\n margin: 'normal',\n style: { marginBottom: 5 }\n}\n\nexport default ({ type = 'Official', ...props }) => {\n const office = useRecordContext(props);\n const [effectiveOfficials, setEffectiveOfficials] = useSyncedPreferences('effectiveOfficials', true);\n\n const today = moment().format('YYYY-MM-DD');\n const officeId = office?.id;\n\n const showOfficials = isAuthorized(office, 'officialOffices', 'show');\n const canAddOfficials = isAuthorized(office, 'officialOffices', 'create');\n const canImportOfficials = isAuthorized(office, 'officialOffices', 'importOfficials');\n\n if (!showOfficials) return null;\n\n const filter = {\n officeId: office?.id,\n effectiveOffices: effectiveOfficials,\n types: { inq: [type] },\n or: [{ expiry: { gte: today } }, { expiry: { eq: null } }]\n }\n const filters = [\n <OfficialParticipantInput key=\"official-participant\" source=\"officialname\" label=\"resources.officialOffices.filters.officialName\" alwaysOn {...filterProps} />,\n <BooleanInput key=\"effective-offices\" source=\"effectiveOffices\" label=\"resources.officialOffices.filters.effectiveOfficials\" alwaysOn onChange={setEffectiveOfficials} {...filterProps} />\n ]\n\n const actions = [\n canImportOfficials && <ImportOfficials officeId={officeId} size=\"small\" alwaysOn />,\n ].filter(Boolean);\n\n if (!showOfficials) return null;\n\n return <ListCard\n title={`resources.${OFFICIAL_TYPE_RESOURCE_MAP[type]}.labels.card.title`}\n subtitle={`resources.${OFFICIAL_TYPE_RESOURCE_MAP[type]}.labels.card.subtitle`}\n icon={<ParticipantIcon />}\n reference=\"officialOffices\"\n target=\"officeId\"\n filter={filter}\n filters={filters}\n sort={{\n field: ['office.name', 'participant.lastName', 'participant.firstName'],\n order: ['DESC', 'ASC', 'ASC'],\n }}\n pagination={<Pagination />}\n addButton={canAddOfficials && <SelectOfficialsButton officeId={officeId} initialValues={{ type }} />}\n actions={actions}\n collapsable\n >\n <OfficialGrid\n rowClick=\"expand\"\n expand={<OfficialQualificationsGrid />}\n />\n </ListCard>\n}\n","import React, { useState } from 'react';\nimport { useTranslate } from 'react-admin';\nimport { Button } from '@material-ui/core'\nimport { UnarchiveOutlined } from '@material-ui/icons'\n\nimport { LazyDialog } from '../../../../common/LazyDialog';\n\nconst Uploader = React.lazy(() => import('./Uploader'))\n\nexport default ({ officeId, size, variant }) => {\n const [ isOpen, setOpen ] = useState(false);\n const translate = useTranslate();\n\n return <>\n <Button color=\"primary\" size={size} variant={variant} startIcon={<UnarchiveOutlined />} onClick={() => setOpen(true)}>\n {translate('ra.action.import')}\n </Button>\n <LazyDialog>\n {isOpen && <Uploader officeId={officeId} isOpen={isOpen} onClose={() => setOpen(false)} />}\n </LazyDialog>\n </>\n}\n","import React from 'react';\nimport { TextInput, SimpleForm } from 'react-admin';\nimport { Grid } from '@material-ui/core';\n\nimport Toolbar from '../../common/ra/Toolbar';\n\nimport { OfficeInput } from '../offices/OfficeInput';\n\nconst validate = values => {\n const errors = {};\n\n if (!values.name) errors.name = 'ra.validation.required';\n\n return errors;\n}\n\nconst inputProps = {\n resource: 'lists',\n basePath: '/lists',\n variant: 'outlined',\n margin: 'none',\n fullWidth: true,\n}\n\nexport const ListForm = (props) => {\n return <SimpleForm toolbar={<Toolbar />} validate={validate} {...props}>\n <Grid container spacing={2} fullWidth>\n <Grid item xs={12}>\n <TextInput source=\"name\" autoFocus helperText=\"\" {...inputProps} />\n </Grid>\n <Grid item xs={12}>\n <OfficeInput source=\"officeId\" disabled helperText=\"\" {...inputProps} />\n </Grid>\n </Grid>\n </SimpleForm>\n}\n","import React, { useState } from 'react';\nimport { useTranslate } from 'react-admin';\nimport { Button } from '@material-ui/core';\nimport { Add } from '@material-ui/icons';\n\nimport { DialogDatagrid } from '../../common/dialogs/DialogDatagrid';\nimport { CreateResourceDialog, EditResourceDialog } from '../../common/dialogs/ResourceDialog';\n\nimport { ListForm } from './ListForm';\n\nconst AddListDialog = props =>\n <CreateResourceDialog label=\"resources.lists.actions.add\" resource=\"lists\" basePath=\"/lists\" {...props}>\n <ListForm />\n </CreateResourceDialog>\n\nconst EditListDialog = props =>\n <EditResourceDialog label=\"resources.lists.actions.edit\" resource=\"lists\" basePath=\"/lists\" {...props}>\n <ListForm />\n </EditResourceDialog>\n\nexport const AddListButton = ({ size, variant, ...props }) => {\n const [ isOpen, setOpen ] = useState(false);\n const translate = useTranslate();\n return <>\n <Button color=\"primary\" size={size} variant={variant} startIcon={<Add />} onClick={() => setOpen(true)}>{translate('resources.lists.actions.add')}</Button>\n <AddListDialog isOpen={isOpen} handleClose={() => setOpen(false)} {...props} />\n </>\n}\n\nexport const ListDatagrid = props => <DialogDatagrid dialog={EditListDialog} {...props} />\n","import React from 'react';\nimport { TextField } from 'react-admin';\n\nimport Toolbar from '../../common/ra/Toolbar';\n\nimport { OfficeField } from '../offices/OfficeField';\nimport { ListDatagrid } from './ListModal';\n\nexport const ListGrid = ({ showOffice = false, ...props }) => {\n return <ListDatagrid size=\"medium\" toolbar={<Toolbar />} {...props}>\n <TextField source=\"name\" />\n {showOffice && <OfficeField source=\"officeId\" allowEmpty />}\n </ListDatagrid>\n}\n","import React, { Fragment, useMemo, useState } from 'react';\nimport { Datagrid, useDataProvider, useListContext, useNotify, useRecordContext, useTranslate, BooleanInput } from 'react-admin';\nimport { Button, makeStyles } from '@material-ui/core';\nimport { FilterList } from '@material-ui/icons';\n\nimport { isEmpty } from '@hisports/common/src/_.lod.cjs';\nimport { FF_SID_MEMBER_TYPES } from '@hisports/common/featureFlags';\n\nimport ListCard from '../../../common/cards/ListCard';\nimport { isAuthorized } from '../../../common/Authorize';\nimport { useSeason } from '../../../common/inputs/SeasonSelector';\nimport useSyncedPreferences from '../../../common/useSyncedPreferences';\nimport { useFlag } from '../../../http';\nimport ImportLists from '../../lists/dialogs/officials';\nimport { ListGrid } from '../../lists/ListGrid';\nimport { AddListButton } from '../../lists/ListModal';\nimport { SelectOfficialsButton } from '../../officials/SelectOfficialsDialog';\nimport { ParticipantField } from '../../participants/ParticipantField';\nimport { useParticipantMemberTypes } from '../../officialOffices/OfficialGrid';\nimport { AffiliationField, AffiliationLabel } from '../../memberTypes/AffiliationField';\n\nconst useStyles = makeStyles(theme => ({\n deleteButton: {\n color: theme.palette.error.main,\n },\n}));\n\nconst filterProps = {\n variant: 'outlined',\n options: {\n helperText: undefined,\n style: { marginRight: 0 }\n },\n helperText: false,\n margin: 'normal',\n style: { marginLeft: 10, marginBottom: 10 }\n}\n\nconst DeleteButton = ({ onDelete }) => {\n const { selectedIds, refetch, onUnselectItems } = useListContext();\n const dataProvider = useDataProvider();\n const classes = useStyles();\n const notify = useNotify();\n const translate = useTranslate();\n\n const handleDelete = async () => {\n await Promise.all(selectedIds.map(id => dataProvider.delete('listMembers', { id })))\n .then(() => {\n refetch();\n onUnselectItems();\n notify(translate('resources.listMembers.notifications.list_officials_removed', selectedIds?.length));\n })\n .catch(() => notify(translate('resources.listMembers.notifications.remove_list_officials_error')))\n .finally(() => onDelete());\n }\n\n if (!selectedIds?.length) return null;\n\n return <Button className={classes.deleteButton} size=\"small\" onClick={handleDelete}>{translate('ra.action.delete')}</Button>\n}\n\nconst ManageButton = ({ isEditing, onManage }) => {\n const { data, onUnselectItems } = useListContext();\n const translate = useTranslate();\n\n const handleManage = () => {\n if (isEditing) {\n onUnselectItems();\n }\n onManage();\n };\n\n if (isEmpty(data)) return null;\n\n return <Button color=\"primary\" size=\"small\" onClick={handleManage}>\n {translate(`ra.action.${isEditing ? 'cancel' : 'manage'}`)}\n </Button>\n}\n\nconst MembersGrid = (props) => {\n const isEnabled = useFlag();\n const { data: officials } = useListContext();\n const seasonId = useSeason();\n\n const participantIds = useMemo(() => Object.values(officials).map(official => official.participantId), [officials]);\n const showMemberType = isEnabled(FF_SID_MEMBER_TYPES);\n\n const { data: memberTypes } = useParticipantMemberTypes(showMemberType, participantIds, seasonId);\n\n return <Datagrid {...props}>\n <ParticipantField source=\"participantId\" includeId=\"inline\" link={(record, reference) => `/${reference}/${record.participantId}/show/officiating`} />\n {showMemberType && <AffiliationField label={<AffiliationLabel />} source=\"participantId\" memberTypes={memberTypes} />}\n </Datagrid>\n}\n\nconst MembersList = (props) => {\n const list = useRecordContext(props);\n const [isEditing, setIsEditing] = useState(false);\n\n const { id: listId, officeId } = list;\n\n const canAddListMembers = isAuthorized(list, 'listMembers', 'create');\n const canManageListMembers = isAuthorized(list, 'listMembers', 'edit');\n\n const actions = [\n canManageListMembers && <>\n <DeleteButton onDelete={() => setIsEditing(false)} />\n <ManageButton isEditing={isEditing} onManage={() => setIsEditing(!isEditing)} />\n </>,\n ].filter(Boolean);\n\n return <ListCard {...props}\n reference=\"listMembers\"\n resource=\"listMembers\"\n target=\"listId\"\n sort={{\n field: ['participant.firstName', 'participant.lastName'],\n order: ['ASC', 'ASC'],\n }}\n addButton={canAddListMembers && <SelectOfficialsButton officeId={officeId} initialValues={{ listId }} />}\n actions={actions}\n component={Fragment}\n hasBulkActions={isEditing}\n >\n <MembersGrid rowClick={isEditing ? \"toggleSelection\" : false} />\n </ListCard>\n}\n\nexport default (props) => {\n const office = useRecordContext(props);\n const [effectiveOfficials, setEffectiveOfficials] = useSyncedPreferences('effectiveOfficials', true);\n\n const showLists = isAuthorized(office, 'lists', 'list');\n const canAddLists = isAuthorized(office, 'lists', 'create');\n const canImportMembers = isAuthorized(office, 'lists', 'import');\n\n const officeId = office?.id;\n\n const listFilters = { officeId, effectiveOffices: effectiveOfficials, includeParents: false, _scope: 'Parents' }\n\n const actions = [\n canImportMembers && <ImportLists officeId={officeId} size=\"small\" />,\n ].filter(Boolean)\n const filters = [\n <BooleanInput key=\"effective-offices\" source=\"effectiveOffices\" label=\"resources.officialOffices.filters.effectiveOfficials\" alwaysOn onChange={setEffectiveOfficials} {...filterProps} />\n ]\n\n if (!showLists) return null;\n return <ListCard\n title=\"resources.lists.labels.official\"\n subtitle=\"resources.lists.labels.card.subtitle\"\n icon={<FilterList />}\n collapsable\n reference=\"lists\"\n target=\"officeId\"\n filter={listFilters}\n filters={filters}\n sort={{ field: 'name', order: 'ASC' }}\n addButton={canAddLists && <AddListButton initialValues={{ officeId }} />}\n actions={actions}\n >\n <ListGrid expand={<MembersList />} showOffice />\n </ListCard>\n}\n","import React from 'react';\nimport { NumberField, Datagrid } from 'react-admin';\n\nimport { FF_OFFICIALS, FF_SCOREKEEPERS, FF_TIMEKEEPERS, FF_ADDITIONAL_LINESPERSONS } from '@hisports/common/featureFlags';\n\nimport { useFlag } from '../../http';\nimport Toolbar from '../../common/ra/Toolbar';\nimport { TextLocaleField } from '../../common/fields/TextLocaleField';\n\nexport const AssignSystemGrid = props => {\n const isEnabled = useFlag();\n\n return <Datagrid size=\"medium\" toolbar={<Toolbar />} {...props}>\n <TextLocaleField source=\"name\" />\n <NumberField source=\"referees\" />\n <NumberField source=\"linespersons\" />\n {isEnabled(FF_ADDITIONAL_LINESPERSONS) && <NumberField source=\"linespersonsTwo\" />}\n {isEnabled(FF_ADDITIONAL_LINESPERSONS) && <NumberField source=\"linespersonsThree\" />}\n {isEnabled(FF_OFFICIALS) && <NumberField source=\"officials\" />}\n {isEnabled(FF_SCOREKEEPERS) && <NumberField source=\"scorekeepers\" />}\n {isEnabled(FF_TIMEKEEPERS) && <NumberField source=\"timekeepers\" />}\n <NumberField source=\"supervisors\" />\n </Datagrid>\n}\n","import React, { Fragment } from 'react';\nimport { useRecordContext } from 'react-admin';\n\nimport ListCard from '../../common/cards/ListCard';\nimport { useSeason } from '../../common/inputs/SeasonSelector';\n\nimport { AssignRuleAltGrid } from '../assignRules/AssignRuleGrid';\nimport { AddAssignRuleButton } from './AssignRuleModal';\n\nexport const AssignRuleList = ({ type, officeId, ...props }) => {\n const record = useRecordContext(props);\n const seasonId = useSeason();\n\n return <ListCard {...props}\n reference=\"assignRules\"\n resource=\"assignRules\"\n target=\"value\"\n filter={{ seasonId, type, effectiveOffices: officeId, includeParents: true, _scope: 'Parents' }}\n sort={{\n field: ['type', 'value', 'order'],\n order: ['ASC', 'ASC', 'ASC'],\n }}\n perPage={25}\n rowsPerPageOptions={[]}\n addButton={<AddAssignRuleButton initialValues={{ type, value: record.id, seasonId, officeId }} />}\n addPosition=\"footer\"\n component={Fragment}\n >\n <AssignRuleAltGrid rowClick={false} />\n </ListCard>\n};\n","import React from 'react';\nimport { useRecordContext } from 'react-admin';\nimport { GroupOutlined } from '@material-ui/icons';\nimport { useTheme } from '@material-ui/core';\n\nimport ListCard from '../../../common/cards/ListCard';\nimport { useSeason } from '../../../common/inputs/SeasonSelector';\nimport { useFocusState } from '../../../common/hooks/hooks';\n\nimport { AssignSystemGrid } from '../../assignSystems/AssignSystemGrid';\nimport { AssignRuleList } from '../../assignRules/AssignRuleList';\n\nexport default props => {\n const office = useRecordContext(props);\n const seasonId = useSeason();\n const theme = useTheme();\n const { isFocused } = useFocusState('assignSystems');\n\n return <div id=\"assignSystems\">\n <ListCard\n title=\"resources.assignSystems.labels.card.title\"\n subtitle=\"resources.assignSystems.labels.card.subtitle\"\n icon={<GroupOutlined />}\n collapsable={!isFocused}\n reference=\"assignSystems\"\n basePath=\"/assignSystems\"\n target=\"officeId\"\n filter={{ seasonId, effectiveOffices: true, includeParents: true, _scope: 'Parents' }}\n sort={{ field: 'name', order: 'ASC' }}\n componentProps={{ style: { boxShadow: isFocused ? theme.focusShadow : undefined } }}\n >\n <AssignSystemGrid\n rowClick=\"expand\"\n expand={<AssignRuleList type=\"systemId\" officeId={office?.id} />}\n />\n </ListCard>\n </div>\n}\n","import React from 'react';\nimport { TextInput, SimpleForm, useTranslate, useRecordContext } from 'react-admin';\nimport { Grid } from '@material-ui/core';\nimport { Alert } from '@material-ui/lab';\n\nimport { FF_OFFICIALS, FF_SCOREKEEPERS, FF_TIMEKEEPERS, FF_ADDITIONAL_LINESPERSONS } from '@hisports/common/featureFlags';\n\nimport CurrencyInput from '../../common/inputs/CurrencyInput';\nimport SwitchInput from '../../common/inputs/SwitchInput';\nimport { useFlag, useHttpClient } from '../../http';\n\nimport { OfficeInput } from '../offices/OfficeInput';\n\nconst validate = (values, prevValues, hasRules) => {\n const errors = {};\n\n if (!values.name) errors.name = 'ra.validation.required';\n\n if (values.Referee && values.Referee < 0) errors.Referee = 'ra.validation.invalid';\n if (values.Linesperson && values.Linesperson < 0) errors.Linesperson = 'ra.validation.invalid';\n if (values.LinespersonTwo && values.LinespersonTwo < 0) errors.LinespersonTwo = 'ra.validation.invalid';\n if (values.LinespersonThree && values.LinespersonThree < 0) errors.LinespersonThree = 'ra.validation.invalid';\n if (values.Official && values.Official < 0) errors.Official = 'ra.validation.invalid';\n if (values.Scorekeeper && values.Scorekeeper < 0) errors.Scorekeeper = 'ra.validation.invalid';\n if (values.Timekeeper && values.Timekeeper < 0) errors.Timekeeper = 'ra.validation.invalid';\n if (values.Supervisor && values.Supervisor < 0) errors.Supervisor = 'ra.validation.invalid';\n\n if (values?.isArchived === true && prevValues?.isArchived === false && hasRules) errors.isArchived = 'resources.assignFees.validations.cannot_archive';\n\n return errors;\n}\n\nconst inputProps = {\n helperText: '',\n resource: 'assignFees',\n basePath: '/assignFees',\n variant: 'outlined',\n margin: 'none',\n fullWidth: true,\n}\n\nexport const AssignFeesForm = props => {\n const isEnabled = useFlag();\n const translate = useTranslate();\n const assignFees = useRecordContext();\n const { data: prevalidate } = useHttpClient(`/assignfees/${assignFees?.id}/prevalidate`, null, !!assignFees?.id);\n\n const { isFeesUsed = false, hasRules = false } = prevalidate || {};\n\n return <>\n {isFeesUsed && <>\n <Alert severity=\"warning\">\n {translate('resources.assignFees.alerts.cannot_update_amounts')}\n </Alert>\n <br />\n </>}\n <SimpleForm validate={values => validate(values, assignFees, hasRules)} {...props}>\n <Grid container spacing={2} fullWidth>\n <Grid item xs={12}>\n <TextInput source=\"name\" autoFocus {...inputProps} />\n </Grid>\n <Grid item xs={12} sm={6}>\n <CurrencyInput source=\"Referee\" disabled={isFeesUsed} {...inputProps} />\n </Grid>\n <Grid item xs={12} sm={6}>\n <CurrencyInput source=\"Linesperson\" disabled={isFeesUsed} {...inputProps} />\n </Grid>\n {isEnabled(FF_ADDITIONAL_LINESPERSONS) && <Grid item xs={12} sm={6}>\n <CurrencyInput source=\"LinespersonTwo\" disabled={isFeesUsed} {...inputProps} />\n </Grid>}\n {isEnabled(FF_ADDITIONAL_LINESPERSONS) && <Grid item xs={12} sm={6}>\n <CurrencyInput source=\"LinespersonThree\" disabled={isFeesUsed} {...inputProps} />\n </Grid>}\n {isEnabled(FF_OFFICIALS) && <Grid item xs={12} sm={6}>\n <CurrencyInput source=\"Official\" disabled={isFeesUsed} {...inputProps} />\n </Grid>}\n {isEnabled(FF_SCOREKEEPERS) && <Grid item xs={12} sm={6}>\n <CurrencyInput source=\"Scorekeeper\" disabled={isFeesUsed} {...inputProps} />\n </Grid>}\n {isEnabled(FF_TIMEKEEPERS) && <Grid item xs={12} sm={6}>\n <CurrencyInput source=\"Timekeeper\" disabled={isFeesUsed} {...inputProps} />\n </Grid>}\n <Grid item xs={12} sm={6}>\n <CurrencyInput source=\"Supervisor\" disabled={isFeesUsed} {...inputProps} />\n </Grid>\n <Grid item xs={12}>\n <OfficeInput source=\"officeId\" disabled {...inputProps} />\n </Grid>\n <Grid item xs={12}>\n <SwitchInput source=\"isArchived\" {...inputProps} />\n </Grid>\n </Grid>\n </SimpleForm>\n </>\n}\n","import React, { Fragment, useState } from 'react';\nimport { useTranslate } from 'react-admin';\nimport { Button } from '@material-ui/core';\nimport { Add } from '@material-ui/icons';\n\nimport { DialogDatagrid } from '../../common/dialogs/DialogDatagrid';\nimport { CreateResourceDialog, EditResourceDialog } from '../../common/dialogs/ResourceDialog';\n\nimport { AssignFeesForm } from './AssignFeesForm';\n\nconst AddAssignFeesDialog = props =>\n <CreateResourceDialog label=\"resources.assignFees.actions.add\" resource=\"assignFees\" basePath=\"/assignFees\" {...props}>\n <AssignFeesForm />\n </CreateResourceDialog>\n\nconst EditAssignFeesDialog = props =>\n <EditResourceDialog undoableDelete={false} label=\"resources.assignFees.labels.edit\" resource=\"assignFees\" basePath=\"/assignFees\" {...props}>\n <AssignFeesForm />\n </EditResourceDialog>\n\nexport const AddAssignFeesButton = ({ size, variant, ...props }) => {\n const [ isOpen, setOpen ] = useState(false);\n const translate = useTranslate();\n return <>\n <Button color=\"primary\" size={size} variant={variant} startIcon={<Add />} onClick={() => setOpen(true)}>\n {translate('resources.assignFees.actions.add')}\n </Button>\n <AddAssignFeesDialog isOpen={isOpen} handleClose={() => setOpen(false)} {...props} />\n </>\n}\n\nexport const AssignFeesDatagrid = props => <DialogDatagrid dialog={EditAssignFeesDialog} {...props} />\n","import React from 'react';\nimport { TextField, useRecordContext, useTranslate } from 'react-admin';\nimport { Archive } from '@material-ui/icons';\nimport { Tooltip } from '@material-ui/core';\n\nimport { FF_OFFICIALS, FF_SCOREKEEPERS, FF_TIMEKEEPERS, FF_ADDITIONAL_LINESPERSONS } from '@hisports/common/featureFlags';\n\nimport Toolbar from '../../common/ra/Toolbar';\nimport { CurrencyField } from '../../common/fields/CurrencyField';\n\nimport { OfficeField } from '../offices/OfficeField';\nimport { AssignFeesDatagrid } from './AssignFeesModal';\nimport { useFlag } from '../../http';\n\n\nconst ArchiveField = props => {\n const translate = useTranslate();\n const fees = useRecordContext()\n\n if (!fees?.isArchived) return null;\n\n return <Tooltip title={translate('resources.assignFees.fields.isArchived')}>\n <Archive />\n </Tooltip>\n}\n\nexport const AssignFeesGrid = props => {\n const isEnabled = useFlag();\n\n return <AssignFeesDatagrid size=\"medium\" toolbar={<Toolbar />} {...props}>\n <TextField source=\"name\" />\n <CurrencyField source=\"Referee\" />\n <CurrencyField source=\"Linesperson\" />\n {isEnabled(FF_ADDITIONAL_LINESPERSONS) && <CurrencyField source=\"LinespersonTwo\" />}\n {isEnabled(FF_ADDITIONAL_LINESPERSONS) && <CurrencyField source=\"LinespersonThree\" />}\n {isEnabled(FF_OFFICIALS) && <CurrencyField source=\"Official\" />}\n {isEnabled(FF_SCOREKEEPERS) && <CurrencyField source=\"Scorekeeper\" />}\n {isEnabled(FF_TIMEKEEPERS) && <CurrencyField source=\"Timekeeper\" />}\n <CurrencyField source=\"Supervisor\" />\n <OfficeField source=\"officeId\" />\n <ArchiveField source=\"isArchived\" label={false} />\n </AssignFeesDatagrid>\n}\n","import React from 'react';\nimport { BooleanInput, useRecordContext } from 'react-admin';\nimport { PaymentOutlined } from '@material-ui/icons';\n\nimport ListCard from '../../../common/cards/ListCard';\nimport { useSeason } from '../../../common/inputs/SeasonSelector';\nimport { isAuthorized } from '../../../common/Authorize';\n\nimport { AssignFeesGrid } from '../../assignFees/AssignFeesGrid';\nimport { AssignRuleList } from '../../assignRules/AssignRuleList';\nimport { AddAssignFeesButton } from '../../assignFees/AssignFeesModal';\n\nexport default props => {\n const office = useRecordContext(props);\n const seasonId = useSeason();\n\n const canAddFees = isAuthorized(office, 'assignFees', 'create')\n\n const filters = [\n <BooleanInput source=\"isArchived\" defaultValue={false} />\n ]\n\n return <ListCard\n title=\"resources.assignFees.labels.card.title\"\n subtitle=\"resources.assignFees.labels.card.subtitle\"\n icon={<PaymentOutlined />}\n collapsable\n reference=\"assignFees\"\n target=\"officeId\"\n filter={{ seasonId, effectiveOffices: true, includeParents: true, _scope: 'Parents' }}\n filters={filters}\n addButton={canAddFees && <AddAssignFeesButton initialValues={{ officeId: office?.id, seasonId }} />}\n sort={{ field: ['isArchived', 'name'], order: ['ASC', 'ASC'] }}\n >\n <AssignFeesGrid\n rowClick=\"expand\"\n expand={<AssignRuleList type=\"feesId\" officeId={office?.id} />}\n />\n </ListCard>\n}\n","import React from 'react';\nimport { useRecordContext } from 'react-admin';\nimport { AssignmentOutlined } from '@material-ui/icons';\n\nimport ListCard from '../../../common/cards/ListCard';\nimport { useSeason } from '../../../common/inputs/SeasonSelector';\n\nimport { AssignRuleGrid } from '../../assignRules/AssignRuleGrid';\nimport { AddAssignRuleButton } from '../../assignRules/AssignRuleModal';\nimport { useFocusState } from '../../../common/hooks/hooks';\nimport { useTheme } from '@material-ui/core';\n\nexport default ({ title = \"resources.assignRules.labels.default_rules\", types, typesToExclude, ...props }) => {\n const office = useRecordContext(props);\n const seasonId = useSeason();\n const officeId = office?.id;\n const { isFocused } = useFocusState('assignRules');\n const theme = useTheme();\n\n const addButton = <AddAssignRuleButton types={types} initialValues={{ officeId, seasonId }} />;\n\n return <div id=\"assignRules\">\n <ListCard\n title={title}\n icon={<AssignmentOutlined />}\n collapsable={!isFocused}\n addButton={addButton}\n reference=\"assignRules\"\n target=\"officeId\"\n filter={{\n seasonId,\n ...(types ? { type: { inq: types } } : {}),\n effectiveOffices: true,\n includeParents: true,\n _scope: 'Parents'\n }}\n sort={{\n field: ['type', 'value', 'order'],\n order: ['ASC', 'ASC', 'ASC'],\n }}\n componentProps={{ style: { boxShadow: isFocused ? theme.focusShadow : undefined } }}\n {...props}\n >\n <AssignRuleGrid showRule showAttributes showCriteria={false} showConditions={false} />\n </ListCard>\n </div>\n}\n","import React from 'react';\nimport { useRecordContext } from 'react-admin';\nimport { SupervisorAccount } from '@material-ui/icons';\n\nimport ListCard from '../../../common/cards/ListCard';\nimport { useSeason } from '../../../common/inputs/SeasonSelector';\nimport { isAuthorized } from '../../../common/Authorize';\n\nimport { AssignTargetGrid } from '../../assignTargets/AssignTargetGrid';\nimport { AddAssignTargetButton } from '../../assignTargets/AssignTargetModal';\n\nexport default props => {\n const office = useRecordContext(props);\n const seasonId = useSeason()\n\n const canAddOverride = isAuthorized(office, 'assignTargets', 'create')\n return <ListCard\n title=\"resources.assignTargets.labels.card.title\"\n subtitle=\"resources.assignTargets.labels.card.subtitle\"\n icon={<SupervisorAccount />}\n collapsable\n resource=\"assignTargets\"\n basePath=\"/assignTargets\"\n addButton={canAddOverride && <AddAssignTargetButton initialValues={{ targetType: 'Office', targetId: office?.id }} />}\n filter={{\n or: [\n { and: [\n { targetType: 'Office' },\n { or: [\n { targetId: office.id },\n { officeId: office.id }\n ] }\n ] },\n { and: [\n { targetType: { inq: ['Schedule', 'Team'] } },\n { 'target.seasonId': seasonId },\n { or: [\n { 'target.officeId': office.id },\n { officeId: office.id }\n ] }\n ] }\n ]\n }}\n sort={{ field: 'id', order: 'ASC' }}\n >\n <AssignTargetGrid rowClick={false} />\n </ListCard>\n}\n","import React from 'react';\nimport { Datagrid, TextField } from 'react-admin';\nimport { makeStyles } from '@material-ui/core'\n\nconst useStyles = makeStyles({\n headerRow: {\n display: 'none',\n }\n})\n\nexport const RulebookGrid = ({ showTarget = false, showParticipant = true, ...props }) => {\n const classes = useStyles();\n return <Datagrid size=\"medium\" rowClick=\"edit\" classes={classes} {...props}>\n <TextField source=\"name\" />\n </Datagrid>\n}\n","import React from 'react';\nimport { SimpleForm, TextInput, NumberInput, SaveButton, useTranslate } from 'react-admin';\nimport { Grid } from '@material-ui/core';\nimport { useFormState } from 'react-final-form';\n\nimport { PENALTY_SEVERITY } from '@hisports/scoresheet/src/constants';\n\nimport Toolbar from \"../../../common/ra/Toolbar\";\nimport SwitchInput from '../../../common/inputs/SwitchInput';\nimport { EnumInput } from '../../../common/inputs/EnumInputs';\n\nconst inputProps = {\n resource: 'rulebooks',\n basePath: '/rulebooks',\n variant: 'outlined',\n margin: 'none',\n fullWidth: true,\n}\n\n\nconst validate = (values, translate) => {\n const errors = {};\n\n if (!values.name || !values.name.length) {\n errors.name = 'ra.validation.required';\n } else if (values.name.length > 48) {\n errors.name = translate('ra.validation.longer_than', { smart_count: 48, current_length: values.name.length })\n }\n\n if (values.abbreviation && values.abbreviation.length > 4) {\n errors.abbreviation = translate('ra.validation.longer_than', { smart_count: 4, current_length: values.abbreviation.length })\n }\n\n if (values.description && values.description.length > 20) {\n errors.description = translate('ra.validation.longer_than', { smart_count: 20, current_length: values.description.length })\n }\n\n return errors;\n}\n\nconst NameInput = props => {\n const { values } = useFormState();\n const disabled = !!values.id;\n\n return <TextInput disabled={disabled} {...props} />\n}\n\nconst SeverityEnumInput = props =>\n <EnumInput {...props} choices={[\n { id: PENALTY_SEVERITY.LOW, name: 'resources.rulebooks.values.severity.low' },\n { id: PENALTY_SEVERITY.MEDIUM, name: 'resources.rulebooks.values.severity.medium' },\n { id: PENALTY_SEVERITY.HIGH, name: 'resources.rulebooks.values.severity.high' },\n { id: PENALTY_SEVERITY.SEVERE, name: 'resources.rulebooks.values.severity.severe' },\n ]} />\n\nexport const DurationForm = props => {\n const translate = useTranslate();\n\n const toolbar = <Toolbar>\n <SaveButton />\n </Toolbar>\n\n return <SimpleForm toolbar={toolbar} validate={(values) => validate(values, translate)} {...props}>\n <Grid container spacing={2} fullWidth>\n <Grid item xs={12}>\n <NameInput source=\"name\" autoFocus helperText=\"resources.rulebooks.helpers.name\" {...inputProps} />\n </Grid>\n\n <Grid item xs={12}>\n <TextInput source=\"description\" {...inputProps} />\n </Grid>\n\n <Grid item xs={12} md={6}>\n <NumberInput source=\"length\" defaultValue={0} {...inputProps} />\n </Grid>\n\n <Grid item xs={12} md={6}>\n <TextInput source=\"abbreviation\" helperText=\"resources.rulebooks.helpers.abbreviation\" {...inputProps} />\n </Grid>\n\n <Grid item xs={12}>\n <SeverityEnumInput source=\"severity\" {...inputProps} />\n </Grid>\n\n <Grid item xs={12}>\n <SwitchInput source=\"requireIncidentReport\" helperText=\"resources.rulebooks.helpers.requireIncidentReport\" {...inputProps} />\n </Grid>\n\n <Grid item xs={12}>\n <SwitchInput source=\"timed\" helperText=\"resources.rulebooks.helpers.timed\" {...inputProps} />\n </Grid>\n\n </Grid>\n </SimpleForm>\n}\n","import React, { Fragment, useState } from 'react';\nimport { RecordContextProvider, useTranslate } from 'react-admin';\nimport { Button } from '@material-ui/core';\nimport { Add } from '@material-ui/icons';\n\nimport { DialogDatagrid } from '../../../common/dialogs/DialogDatagrid';\nimport { ResourceDialog } from '../../../common/dialogs/ResourceDialog';\n\nimport { DurationForm } from './DurationForm';\n\nconst AddDurationDialog = props =>\n <RecordContextProvider value={null}>\n <ResourceDialog label=\"resources.rulebooks.actions.add_duration\" resource=\"rulebooks\" basePath=\"/rulebooks\" maxWidth=\"sm\" {...props}>\n <DurationForm {...props} />\n </ResourceDialog>\n </RecordContextProvider>\n\nconst EditDurationDialog = ({ save, ...props }) =>\n <ResourceDialog label=\"resources.rulebooks.labels.edit_duration\" resource=\"rulebooks\" basePath=\"/rulebooks\" maxWidth=\"sm\" handleSubmit={save} {...props}>\n <DurationForm {...props} />\n </ResourceDialog>\n\nexport const AddDurationButton = ({ save, ...props }) => {\n const [ isOpen, setOpen ] = useState(false);\n const translate = useTranslate();\n const handleSubmit = infraction => {\n save(infraction);\n setOpen(false);\n }\n return <>\n <Button color=\"primary\" startIcon={<Add />} onClick={() => setOpen(true)}>\n {translate('resources.rulebooks.actions.add_duration')}\n </Button>\n <AddDurationDialog isOpen={isOpen} handleClose={() => setOpen(false)} handleSubmit={handleSubmit} {...props} />\n </>\n}\n\nexport const DurationDatagrid = props => <DialogDatagrid dialog={EditDurationDialog} {...props} />\n","import React from 'react';\nimport { TextField, useTranslate } from \"react-admin\"\nimport { Tooltip } from '@material-ui/core';\nimport { Feedback, Timer } from '@material-ui/icons';\nimport { capitalize } from 'lodash';\n\nimport FunctionField from '../../../common/fields/FunctionField'\n\nimport { DurationDatagrid } from './DurationModal';\n\nconst Timed = () => {\n const translate = useTranslate();\n return <Tooltip title={translate('resources.rulebooks.fields.timed')}>\n <Timer />\n </Tooltip>\n}\n\nexport const DurationGrid = props => {\n return <DurationDatagrid size=\"medium\" {...props}>\n <TextField source=\"name\" />\n <TextField source=\"abbreviation\" />\n <TextField source=\"length\" />\n <TextField source=\"description\" />\n <FunctionField source=\"severity\" render={({ severity }) => capitalize(severity)} />\n <FunctionField render={duration => [\n duration.timed && <Timed />,\n duration.requireIncidentReport && <Feedback />,\n ]} />\n </DurationDatagrid>\n}\n","import React, { useMemo } from 'react';\nimport { ListContextProvider, useList } from 'react-admin';\nimport { useFormState } from 'react-final-form';\n\nexport const ArrayGrid = ({ source, children }) => {\n const { values } = useFormState();\n const data = useMemo(() => Object.values(values[source] || []), [ values, source ]);\n\n return <ListContextProvider value={useList({\n data,\n ids: data ? Object.keys(data) : [],\n loading: false,\n loaded: true,\n sort: {\n field: 'name',\n order: 'ASC'\n } })}>\n {children}\n </ListContextProvider>\n}\n","import React from 'react';\nimport { useFormState, useForm } from 'react-final-form';\nimport { kebabCase } from 'lodash';\n\nimport { DurationGrid } from './DurationGrid';\nimport { AddDurationButton } from './DurationModal';\n\nimport { ArrayGrid } from '../ArrayGrid';\n\nconst inputProps = {\n resource: 'rulebooks',\n basePath: '/rulebooks',\n variant: 'outlined',\n margin: 'none',\n fullWidth: true,\n}\n\nexport const Durations = ({ source }) => {\n const { values: { durations, infractions } } = useFormState();\n const { change, mutators } = useForm();\n\n const onSave = duration => {\n if (!duration.id) {\n duration.id = kebabCase(duration.name);\n }\n\n change(source, {\n ...durations,\n [duration.id]: { ...durations[duration.id], ...duration }\n })\n }\n\n const onDelete = duration => {\n // remove duration\n delete durations[duration.id];\n change(source, { ...durations })\n\n // remove infraction choices that contains the duration\n infractions.forEach((infraction, index) => {\n const initialLength = infraction?.choices?.length || 0;\n infraction.choices = (infraction?.choices || []).filter(choice => !(choice?.durations || []).includes(duration.id))\n\n if (infraction.choices.length !== initialLength) {\n mutators.update('infractions', index, infraction)\n }\n })\n }\n\n return <>\n <ArrayGrid source={source}>\n <DurationGrid\n save={onSave}\n canDelete\n onDelete={onDelete}\n {...inputProps}\n />\n </ArrayGrid>\n <AddDurationButton save={onSave} />\n </>\n}\n","import React, { Fragment, useState } from 'react';\nimport { Datagrid, useTranslate } from 'react-admin';\nimport { Button } from '@material-ui/core';\nimport { Add } from '@material-ui/icons';\n\n// import { DialogDatagrid } from '../../../common/dialogs/DialogDatagrid';\n// import { ResourceDialog } from '../../../common/dialogs/ResourceDialog';\n\n// import { InfractionForm } from './InfractionForm';\n\n// const AddInfractionDialog = props =>\n// <RecordContextProvider value={null}>\n// <ResourceDialog label=\"resources.rulebooks.actions.add_infraction\" resource=\"rulebooks\" basePath=\"/rulebooks\" maxWidth=\"md\" {...props}>\n// <InfractionForm {...props} />\n// </ResourceDialog>\n// </RecordContextProvider>\n\n// const EditInfractionDialog = ({ save, ...props }) =>\n// <ResourceDialog label=\"resources.rulebooks.labels.edit_infraction\" resource=\"rulebooks\" basePath=\"/rulebooks\" maxWidth=\"md\" handleSubmit={save} {...props}>\n// <InfractionForm {...props} />\n// </ResourceDialog>\n\nexport const AddInfractionButton = ({ save, size, variant, ...props }) => {\n const [ isOpen, setOpen ] = useState(false);\n const translate = useTranslate();\n const handleSubmit = infraction => {\n save(infraction);\n setOpen(false);\n }\n return <>\n <Button color=\"primary\" startIcon={<Add />} disabled onClick={() => setOpen(true)}>\n {translate('resources.rulebooks.actions.add_infraction')}\n </Button>\n {/* <AddInfractionDialog isOpen={isOpen} handleClose={() => setOpen(false)} handleSubmit={handleSubmit} {...props} /> */}\n </>\n}\n\n// export const InfractionDatagrid = props => <DialogDatagrid dialog={EditInfractionDialog} {...props} />\nexport const InfractionDatagrid = props => <Datagrid {...props} />\n","import React from 'react';\nimport { TextField, useTranslate } from \"react-admin\";\nimport { Tooltip, makeStyles } from '@material-ui/core';\nimport { Archive, SportsHockey } from '@material-ui/icons';\nimport { useFormState } from 'react-final-form';\n\nimport { getChoiceLabel } from '@hisports/scoresheet/src/util';\n\nimport FunctionField from '../../../common/fields/FunctionField'\nimport { InfractionDatagrid } from './InfractionModal';\n\nconst useStyles = makeStyles({\n list: {\n paddingInlineStart: '12px',\n }\n})\n\nconst Stick = () => {\n const translate = useTranslate();\n return <Tooltip title={translate('resources.rulebooks.fields.isStick')}>\n <SportsHockey />\n </Tooltip>\n}\n\nconst Archived = () => {\n const translate = useTranslate();\n return <Tooltip title={translate('resources.rulebooks.fields.isArchived')}>\n <Archive />\n </Tooltip>\n}\n\nconst ChoiceList = ({ record = {}, className }) => {\n const { values } = useFormState();\n const { durations } = values;\n const { choices } = record;\n return <ul className={className}>\n {(choices || []).map(choice =>\n <li key={choice.id} >{getChoiceLabel(choice, durations, '+')}</li>\n )}\n </ul>\n}\n\nexport const InfractionGrid = props => {\n const classes = useStyles();\n return <InfractionDatagrid size=\"medium\" {...props}>\n <TextField source=\"name\" />\n <ChoiceList source=\"choices\" className={classes.list} {...props} />\n <TextField source=\"category\" sortable />\n <FunctionField render={infraction => {\n return <>\n {infraction.isStick && <Stick />}\n {infraction.isArchived && <Archived />}\n </>\n }} />\n </InfractionDatagrid>\n}\n","import React from 'react';\nimport { useFormState, useForm } from 'react-final-form';\nimport { kebabCase } from 'lodash';\n\nimport { InfractionGrid } from './InfractionGrid';\nimport { AddInfractionButton } from './InfractionModal';\n\nimport { ArrayGrid } from '../ArrayGrid';\n\nconst inputProps = {\n resource: 'rulebooks',\n basePath: '/rulebooks',\n variant: 'outlined',\n margin: 'none',\n fullWidth: true,\n}\n\nexport const Infractions = ({ source }) => {\n const { values: { durations, infractions } } = useFormState();\n const { mutators } = useForm();\n\n const onSave = infraction => {\n if (!infraction.id) {\n infraction.id = kebabCase(infraction.name);\n }\n if (!infraction.isStick) {\n infraction.isStick = undefined;\n }\n if (!infraction.isArchived) {\n infraction.isArchived = undefined;\n }\n infraction.choices = infraction.choices.filter(Boolean);\n const index = infractions?.findIndex(value => value.id === infraction.id);\n if (index >= 0) {\n const { id, name, ...changes } = infraction;\n const newInfraction = Object.assign({}, infractions[index], changes);\n mutators.update(source, index, newInfraction)\n } else {\n mutators.push(source, infraction);\n }\n }\n\n const onDelete = infraction => {\n const index = infractions?.findIndex(value => value.id === infraction.id);\n mutators.remove(source, index);\n }\n\n return <>\n <ArrayGrid source={source}>\n <InfractionGrid\n save={onSave}\n canDelete\n onDelete={onDelete}\n rowOptions={{ durations }}\n {...inputProps}\n />\n </ArrayGrid>\n <AddInfractionButton save={onSave} durations={durations} />\n </>\n}\n","import React from 'react';\nimport { FormInput, NumberInput, useTranslate } from 'react-admin';\nimport { Table, TableHead, TableBody, TableRow, TableCell, styled } from '@material-ui/core'\nimport { useSport } from '../../http';\n\nconst PositionCell = styled(TableCell)(({ theme }) => ({\n minWidth: theme.spacing(12),\n padding: theme.spacing(1),\n}))\n\nconst LimitCell = styled(TableCell)(({ theme }) => ({\n textAlign: 'center',\n width: theme.spacing(10),\n padding: theme.spacing(1),\n '&:last-child': {\n paddingRight: theme.spacing(1),\n }\n}))\n\nconst LimitFormInput = styled(FormInput)(({ theme }) => ({\n input: {\n width: theme.spacing(10),\n margin: 0,\n }\n}))\n\nconst LimitInput = ({ source, label }) =>\n <LimitFormInput input={\n <NumberInput source={source} step={1} label={label} variant=\"outlined\" />\n } />\n\nexport const LimitsInput = ({ source }) => {\n const sport = useSport();\n const translate = useTranslate();\n return <Table selectable={false} fullWidth>\n <TableHead displaySelectAll={false} adjustForCheckbox={false}>\n <TableRow>\n <PositionCell>{translate('resources.rulebooks.labels.position')}</PositionCell>\n <LimitCell>{translate('ra.validation.min')}</LimitCell>\n <LimitCell>{translate('ra.validation.max')}</LimitCell>\n </TableRow>\n </TableHead>\n <TableBody displayRowCheckbox={false}>\n <TableRow>\n <PositionCell>{translate('resources.rulebooks.labels.players')}</PositionCell>\n <LimitCell>\n <LimitInput source={`${source}.players.min`} label={translate('ra.validation.min')} />\n </LimitCell>\n <LimitCell>\n <LimitInput source={`${source}.players.max`} label={translate('ra.validation.max')} />\n </LimitCell>\n </TableRow>\n {sport === 'Hockey' && <TableRow>\n <PositionCell>{translate('resources.rulebooks.labels.skaters')}</PositionCell>\n <LimitCell>\n <LimitInput source={`${source}.skaters.min`} label={translate('ra.validation.min')} />\n </LimitCell>\n <LimitCell>\n <LimitInput source={`${source}.skaters.max`} label={translate('ra.validation.max')} />\n </LimitCell>\n </TableRow>}\n {sport === 'Hockey' && <TableRow>\n <PositionCell>{translate('resources.rulebooks.labels.goalies')}</PositionCell>\n <LimitCell>\n <LimitInput source={`${source}.goalies.min`} label={translate('ra.validation.min')} />\n </LimitCell>\n <LimitCell>\n <LimitInput source={`${source}.goalies.max`} label={translate('ra.validation.max')} />\n </LimitCell>\n </TableRow>}\n <TableRow>\n <PositionCell>{translate('resources.rulebooks.labels.staff')}</PositionCell>\n <LimitCell>\n <LimitInput source={`${source}.staff.min`} label={translate('ra.validation.min')} />\n </LimitCell>\n <LimitCell>\n <LimitInput source={`${source}.staff.max`} label={translate('ra.validation.max')} />\n </LimitCell>\n </TableRow>\n </TableBody>\n </Table>;\n}\n","import React from 'react';\nimport { ArrayInput, NumberInput, SimpleFormIterator, minValue } from 'react-admin';\nimport { Grid } from '@material-ui/core'\nimport { LimitTypeEnumInput, PitcherLimitsScheduleTypeEnumInput } from '../../../common/inputs/EnumInputs';\nimport HorizontalFormIterator, { TransitionProps } from '../../../common/ra/HorizontalFormIterator';\nimport { DateInput } from '../../../common/inputs/DateInput';\n\nconst inputProps = {\n resource: 'rulebooks',\n basePath: '/rulebooks',\n variant: 'outlined',\n margin: 'none',\n fullWidth: true,\n}\n\nconst arrayInputProps = {\n resource: 'rulebooks',\n basePath: '/rulebooks',\n variant: 'outlined',\n margin: 'normal',\n fullWidth: true,\n}\n\nconst required = (value) => {\n if (!value && value != 0) return { message: 'ra.validation.required' };\n}\n\nconst ThrowsLimitsInput = () => {\n return <ArrayInput source=\"throwsLimits\" label=\"resources.rulebooks.labels.throws_limits\" >\n <HorizontalFormIterator disableReordering TransitionProps={TransitionProps} >\n <NumberInput validate={[required, minValue(1)]} source=\"min\" label=\"ra.validation.min\" min={1} step={1} helperText=\"\" {...arrayInputProps} />\n <NumberInput validate={[required, minValue(1)]} source=\"max\" label=\"ra.validation.max\" min={1} step={1} helperText=\"\" {...arrayInputProps} />\n <NumberInput validate={[required, minValue(0)]} source=\"restingDays\" label=\"resources.rulebooks.fields.restingDays\" min={0} step={1} {...arrayInputProps} />\n </HorizontalFormIterator>\n </ArrayInput>\n}\n\nconst InningsPitchedLimitsInput = () => {\n return <ArrayInput source=\"inningsPitchedLimits\" label=\"resources.rulebooks.labels.innings_pitched_limits\" >\n <SimpleFormIterator getItemLabel={index => `#${index + 1}`} disableReordering TransitionProps={TransitionProps} >\n <LimitTypeEnumInput validate={[required]} source=\"limitType\" label=\"resources.rulebooks.fields.limitType\" {...arrayInputProps} />\n <NumberInput validate={[required, minValue(1)]} source=\"limit\" label=\"ra.validation.max\" min={1} step={1} helperText=\"\" {...arrayInputProps} />\n <DateInput source=\"startDate\" label=\"resources.rulebooks.fields.startDate\" helperText=\"ra.message.optional\" {...arrayInputProps} />\n <DateInput source=\"endDate\" label=\"resources.rulebooks.fields.endDate\" helperText=\"ra.message.optional\" {...arrayInputProps} />\n </SimpleFormIterator>\n </ArrayInput>\n}\n\nconst InningsPitchedRestsInput = () => {\n return <ArrayInput source=\"inningsPitchedRests\" label=\"resources.rulebooks.labels.innings_pitched_rests\" >\n <HorizontalFormIterator disableReordering TransitionProps={TransitionProps} >\n <NumberInput validate={[required, minValue(1)]} source=\"min\" label=\"ra.validation.min\" min={1} step={1} helperText=\"\" {...arrayInputProps} />\n <NumberInput validate={[required, minValue(1)]} source=\"max\" label=\"ra.validation.max\" min={1} step={1} helperText=\"\" {...arrayInputProps} />\n <NumberInput validate={[required, minValue(1)]} source=\"restingDays\" label=\"resources.rulebooks.fields.restingDays\" min={1} step={1} {...arrayInputProps} />\n </HorizontalFormIterator>\n </ArrayInput>\n}\n\nexport const PitcherLimitsInput = ({ source }) => {\n return <Grid container spacing={2} fullWidth>\n <Grid item xs={12}>\n <PitcherLimitsScheduleTypeEnumInput multiple source=\"scheduleTypes\" label=\"resources.rulebooks.fields.scheduleTypes\" {...inputProps} />\n </Grid>\n <Grid item xs={12}>\n <ThrowsLimitsInput {...inputProps} />\n </Grid>\n <Grid item xs={12}>\n <InningsPitchedLimitsInput />\n </Grid>\n <Grid item xs={12}>\n <InningsPitchedRestsInput />\n </Grid>\n </Grid>;\n}\n","import React from 'react';\nimport { SimpleForm, SaveButton, useTranslate } from 'react-admin';\n\n\nimport Toolbar from \"../../../common/ra/Toolbar\";\nimport { PitcherLimitsInput } from './PitcherLimitsInput';\nimport { isEmpty } from '@hisports/parsers';\n\nconst inputProps = {\n resource: 'rulebooks',\n basePath: '/rulebooks',\n variant: 'outlined',\n margin: 'none',\n fullWidth: true,\n}\n\nconst validate = (values, translate) => {\n const errors = {};\n\n if (isEmpty(values?.scheduleTypes)) errors.scheduleTypes = 'ra.validation.required'\n\n if (!isEmpty(values?.throwsLimits)) {\n errors.throwsLimits = []\n values.throwsLimits.forEach((limit, index) => {\n if (limit && limit.min > limit.max) {\n errors.throwsLimits[index] = {}\n errors.throwsLimits[index].min = 'resources.rulebooks.validation.min'\n errors.throwsLimits[index].max = 'resources.rulebooks.validation.max'\n }\n });\n }\n\n if (!isEmpty(values?.inningsPitchedLimits)) {\n errors.inningsPitchedLimits = []\n values.inningsPitchedLimits.forEach((limit, index) => {\n if (limit && limit.startDate && limit.endDate && limit.startDate > limit.endDate) {\n errors.inningsPitchedLimits[index] = {}\n errors.inningsPitchedLimits[index].startDate = 'resources.rulebooks.validation.startDate'\n errors.inningsPitchedLimits[index].endDate = 'resources.rulebooks.validation.endDate'\n }\n })\n }\n\n if (!isEmpty(values?.inningsPitchedRests)) {\n errors.inningsPitchedRests = []\n values.inningsPitchedRests.forEach((limit, index) => {\n if (limit && limit.min > limit.max) {\n errors.inningsPitchedRests[index] = {}\n errors.inningsPitchedRests[index].min = 'resources.rulebooks.validation.min'\n errors.inningsPitchedRests[index].max = 'resources.rulebooks.validation.max'\n }\n });\n }\n\n return errors;\n}\n\nexport const PitcherLimitsForm = props => {\n const translate = useTranslate();\n\n const toolbar = <Toolbar>\n <SaveButton />\n </Toolbar>\n\n return <SimpleForm toolbar={toolbar} validate={(values) => validate(values, translate)} {...props}>\n <PitcherLimitsInput />\n </SimpleForm>\n}\n","import React, { useState } from 'react';\nimport { RecordContextProvider, useTranslate } from 'react-admin';\nimport { Button } from '@material-ui/core';\nimport { Add } from '@material-ui/icons';\n\nimport { DialogDatagrid } from '../../../common/dialogs/DialogDatagrid';\nimport { ResourceDialog } from '../../../common/dialogs/ResourceDialog';\n\nimport { PitcherLimitsForm } from './PitcherLimitsForm';\n\nconst AddPitcherLimitsDialog = props =>\n <RecordContextProvider value={null}>\n <ResourceDialog label=\"resources.rulebooks.labels.add_limits\" resource=\"rulebooks\" basePath=\"/rulebooks\" maxWidth=\"sm\" {...props}>\n <PitcherLimitsForm {...props} />\n </ResourceDialog>\n </RecordContextProvider>\n\nconst EditPitcherLimitsDialog = ({ save, ...props }) =>\n <ResourceDialog label=\"resources.rulebooks.labels.edit_limits\" resource=\"rulebooks\" basePath=\"/rulebooks\" maxWidth=\"sm\" handleSubmit={save} {...props}>\n <PitcherLimitsForm {...props} />\n </ResourceDialog>\n\nexport const AddPitcherLimitsButton = ({ save, ...props }) => {\n const [ isOpen, setOpen ] = useState(false);\n const translate = useTranslate();\n const handleSubmit = pitcherLimits => {\n save(pitcherLimits);\n setOpen(false);\n }\n return <>\n <Button color=\"primary\" startIcon={<Add />} onClick={() => setOpen(true)}>\n {translate('resources.rulebooks.actions.add_limits')}\n </Button>\n <AddPitcherLimitsDialog isOpen={isOpen} handleClose={() => setOpen(false)} handleSubmit={handleSubmit} {...props} />\n </>\n}\n\nexport const PitcherLimitsDatagrid = props => <DialogDatagrid dialog={EditPitcherLimitsDialog} {...props} />\n","import React from 'react';\n\n\nimport { PitcherLimitsDatagrid } from './PitcherLimitsModal';\nimport FunctionField from '../../../common/fields/FunctionField';\nimport { isEmpty } from '@hisports/parsers';\nimport moment from 'moment';\nimport { makeStyles } from '@material-ui/core';\n\nconst useStyles = makeStyles({\n ul: {\n '& .column-categoryIds': {\n width: '25%',\n }\n }\n})\n\nconst renderScheduleTypes = ({ scheduleTypes }, source, resource, translate) => {\n const output = [];\n\n scheduleTypes.forEach(value => {\n output.push(<div>{translate(`resources.rulebooks.values.pitcherLimits.scheduleTypes.${value}`)}</div>)\n })\n\n return output\n}\n\nconst renderThrowsLimits = ({ throwsLimits }, source, resource, translate) => {\n if (isEmpty(throwsLimits)) return '-'\n const output = [];\n\n throwsLimits.forEach(value => {\n output.push(<div>\n {translate('resources.rulebooks.values.pitcherLimits.throwsLimits.between', { min: value.min, max: value.max, restingDays: value.restingDays })}\n </div>)\n })\n\n return output\n}\n\nconst renderInningsPitchedLimits = ({ inningsPitchedLimits }, source, resource, translate) => {\n if (isEmpty(inningsPitchedLimits)) return '-'\n const output = [];\n\n inningsPitchedLimits.forEach(value => {\n if (isEmpty(value.startDate) && isEmpty(value.endDate)) {\n output.push(<div>\n {translate('resources.rulebooks.values.pitcherLimits.inningsPitchedLimits.always',\n { limitType: translate(`resources.rulebooks.values.pitcherLimits.limitType.${value.limitType}`), limit: value.limit })}\n </div>)\n } else if (!isEmpty(value.startDate) && isEmpty(value.endDate)) {\n output.push(<div>\n {translate('resources.rulebooks.values.pitcherLimits.inningsPitchedLimits.from',\n { limitType: translate(`resources.rulebooks.values.pitcherLimits.limitType.${value.limitType}`), limit: value.limit, startDate: moment.utc(value.startDate, 'YYYY-MM-DD').format('YYYY-MM-DD') })}\n </div>)\n } else if (!isEmpty(value.startDate) && !isEmpty(value.endDate)) {\n output.push(<div>\n {translate('resources.rulebooks.values.pitcherLimits.inningsPitchedLimits.between',\n { limitType: translate(`resources.rulebooks.values.pitcherLimits.limitType.${value.limitType}`), limit: value.limit, startDate: moment.utc(value.startDate, 'YYYY-MM-DD').format('YYYY-MM-DD'), endDate: moment.utc(value.endDate, 'YYYY-MM-DD').format('YYYY-MM-DD') })}\n </div>)\n } else if (isEmpty(value.startDate) && !isEmpty(value.endDate)) {\n output.push(<div>\n {translate('resources.rulebooks.values.pitcherLimits.inningsPitchedLimits.until',\n { limitType: translate(`resources.rulebooks.values.pitcherLimits.limitType.${value.limitType}`), limit: value.limit, endDate: moment.utc(value.endDate, 'YYYY-MM-DD').format('YYYY-MM-DD') })}\n </div>)\n }\n })\n\n return output\n}\n\nconst renderInningsPitchedRests = ({ inningsPitchedRests }, source, resource, translate) => {\n if (isEmpty(inningsPitchedRests)) return '-'\n const output = [];\n\n inningsPitchedRests.forEach(value => {\n output.push(<div>\n {translate('resources.rulebooks.values.pitcherLimits.inningsPitchedRests.between', { min: value.min, max: value.max, restingDays: value.restingDays })}\n </div>)\n })\n\n return output\n}\n\nexport const PitcherLimitsGrid = props => {\n const classes = useStyles();\n\n return <PitcherLimitsDatagrid size=\"medium\" classes={classes} {...props}>\n <FunctionField source=\"scheduleTypes\" render={renderScheduleTypes} />\n <FunctionField source=\"throwsLimits\" render={renderThrowsLimits} />\n <FunctionField source=\"inningsPitchedLimits\" render={renderInningsPitchedLimits} />\n <FunctionField source=\"inningsPitchedRests\" render={renderInningsPitchedRests} />\n </PitcherLimitsDatagrid>\n}\n","import React from 'react';\nimport { useFormState, useForm } from 'react-final-form';\nimport { v4 as uuid } from 'uuid';\n\nimport { PitcherLimitsGrid } from './PitcherLimitsGrid';\nimport { AddPitcherLimitsButton } from './PitcherLimitsModal';\n\nimport { ArrayGrid } from '../ArrayGrid';\n\nconst inputProps = {\n resource: 'rulebooks',\n basePath: '/rulebooks',\n variant: 'outlined',\n margin: 'none',\n fullWidth: true,\n}\n\nexport const PitcherLimits = ({ source }) => {\n const { values: { pitcherLimits } } = useFormState();\n const { mutators } = useForm();\n\n const onSave = pitcherLimit => {\n if (!pitcherLimit.id) {\n pitcherLimit.id = uuid();\n }\n\n const index = pitcherLimits?.findIndex(value => value.id === pitcherLimit.id);\n if (index >= 0) {\n const { id, ...changes } = pitcherLimit;\n const newPitcherLimits = Object.assign({}, pitcherLimits[index], changes);\n mutators.update('pitcherLimits', index, newPitcherLimits)\n } else {\n mutators.push('pitcherLimits', pitcherLimit);\n }\n }\n\n const onDelete = pitcherLimit => {\n const index = pitcherLimits?.findIndex(value => value.id === pitcherLimit.id);\n mutators.remove('pitcherLimits', index);\n }\n\n return <>\n <ArrayGrid source={source}>\n <PitcherLimitsGrid\n save={onSave}\n canDelete\n onDelete={onDelete}\n {...inputProps}\n />\n </ArrayGrid>\n <AddPitcherLimitsButton save={onSave} />\n </>\n}\n","import React from 'react';\nimport { SimpleForm, SaveButton, useTranslate } from 'react-admin';\nimport { Grid, Typography } from '@material-ui/core';\n\nimport { FF_PITCHERS } from '@hisports/common/featureFlags';\n\nimport { useFlag } from '../../../http';\nimport Toolbar from \"../../../common/ra/Toolbar\";\nimport { CategoryInput } from '../../categories/CategoryInput';\nimport { LimitsInput } from '../LimitsInput';\nimport { PitcherLimits } from '../pitcherLimits';\n\nconst inputProps = {\n resource: 'rulebooks',\n basePath: '/rulebooks',\n variant: 'outlined',\n margin: 'none',\n fullWidth: true,\n}\n\nconst validate = (values, translate) => {\n const errors = {};\n\n if (!values.categoryIds?.length > 0) {\n errors.categoryIds = 'ra.validation.required'\n }\n\n return errors;\n}\n\nexport const VarianceForm = props => {\n const translate = useTranslate();\n const isEnabled = useFlag();\n\n const toolbar = <Toolbar>\n <SaveButton />\n </Toolbar>\n\n return <SimpleForm toolbar={toolbar} validate={(values) => validate(values, translate)} {...props}>\n <Grid container spacing={2} fullWidth>\n <Grid item xs={12}>\n <CategoryInput source=\"categoryIds\" multiple {...inputProps} />\n </Grid>\n\n <Grid item xs={12}>\n <LimitsInput source=\"lineupLimits\" />\n </Grid>\n\n {isEnabled(FF_PITCHERS) && <Grid item xs={12}>\n <Typography variant=\"subtitle2\">{translate('resources.rulebooks.labels.pitcher_limits')}</Typography>\n <PitcherLimits source=\"pitcherLimits\" />\n </Grid>}\n </Grid>\n </SimpleForm>\n}\n","import React, { useState } from 'react';\nimport { RecordContextProvider, useTranslate } from 'react-admin';\nimport { Button } from '@material-ui/core';\nimport { Add } from '@material-ui/icons';\n\nimport { DialogDatagrid } from '../../../common/dialogs/DialogDatagrid';\nimport { ResourceDialog } from '../../../common/dialogs/ResourceDialog';\n\nimport { VarianceForm } from './VarianceForm';\n\nconst AddVarianceDialog = props =>\n <RecordContextProvider value={null}>\n <ResourceDialog label=\"resources.rulebooks.actions.add_variance\" resource=\"rulebooks\" basePath=\"/rulebooks\" maxWidth=\"md\" {...props}>\n <VarianceForm {...props} />\n </ResourceDialog>\n </RecordContextProvider>\n\nconst EditVarianceDialog = ({ save, ...props }) =>\n <ResourceDialog label=\"resources.rulebooks.labels.edit_variance\" resource=\"rulebooks\" basePath=\"/rulebooks\" maxWidth=\"md\" handleSubmit={save} {...props}>\n <VarianceForm {...props} />\n </ResourceDialog>\n\nexport const AddVarianceButton = ({ save, ...props }) => {\n const [ isOpen, setOpen ] = useState(false);\n const translate = useTranslate();\n const handleSubmit = infraction => {\n save(infraction);\n setOpen(false);\n }\n return <>\n <Button color=\"primary\" startIcon={<Add />} onClick={() => setOpen(true)}>\n {translate('resources.rulebooks.actions.add_variance')}\n </Button>\n <AddVarianceDialog isOpen={isOpen} handleClose={() => setOpen(false)} handleSubmit={handleSubmit} {...props} />\n </>\n}\n\nexport const VarianceDatagrid = props => <DialogDatagrid dialog={EditVarianceDialog} {...props} />\n","import React from 'react';\nimport moment from 'moment';\nimport { makeStyles } from '@material-ui/core';\n\nimport { FF_PITCHERS } from '@hisports/common/featureFlags';\nimport { isEmpty } from '@hisports/parsers';\n\nimport { useFlag } from '../../../http';\nimport FunctionField from '../../../common/fields/FunctionField'\nimport { VarianceDatagrid } from './VarianceModal';\nimport { CategoriesField } from '../../categories/CategoriesField';\n\nconst useStyles = makeStyles({\n tbody: {\n '& .column-categoryIds': {\n width: '25%',\n },\n '& .column-lineupLimits': {\n width: '25%',\n }\n }\n})\n\nconst LineupLimitsField = props =>\n <FunctionField {...props} render={({ lineupLimits }, source, resource, translate) => {\n const positions = ['players', 'skaters', 'goalies', 'staff']\n const output = [];\n for (const position of positions) {\n const values = lineupLimits && lineupLimits[position];\n if (!values) continue;\n const positionName = translate(`resources.rulebooks.labels.${position}`).toLowerCase();\n if (values.min != null && values.max != null) {\n output.push(<div>{translate('resources.rulebooks.values.lineupLimits.between', { position: positionName, min: values.min, max: values.max })}</div>)\n } else if (values.min != null) {\n output.push(<div>{translate('resources.rulebooks.values.lineupLimits.min', { position: positionName, min: values.min })}</div>)\n } else if (values.max != null) {\n output.push(<div>{translate('resources.rulebooks.values.lineupLimits.max', { position: positionName, max: values.max })}</div>)\n }\n }\n if (isEmpty(output)) return '-'\n\n return output;\n }} />\n\nconst PitcherLimitsField = props =>\n <FunctionField {...props} render={({ pitcherLimits }, source, resource, translate) => {\n if (isEmpty(pitcherLimits)) return '-'\n const limits = [];\n\n for (const pitcherLimit of pitcherLimits) {\n const scheduleTypes = [];\n const throwsLimits = [];\n const inningsPitchedLimits = [];\n const inningsPitchedRests = [];\n\n pitcherLimit?.scheduleTypes?.map(type => {\n scheduleTypes.push(translate(`resources.rulebooks.values.pitcherLimits.scheduleTypes.${type}`))\n })\n\n pitcherLimit?.throwsLimits?.map(value => {\n throwsLimits.push(translate('resources.rulebooks.values.pitcherLimits.throwsLimits.between',\n { min: value.min, max: value.max, restingDays: value.restingDays })\n )\n })\n\n pitcherLimit?.inningsPitchedLimits?.map(value => {\n if (isEmpty(value.startDate) && isEmpty(value.endDate)) {\n inningsPitchedLimits.push(translate('resources.rulebooks.values.pitcherLimits.inningsPitchedLimits.always',\n { limitType: translate(`resources.rulebooks.values.pitcherLimits.limitType.${value.limitType}`), limit: value.limit })\n )\n } else if (!isEmpty(value.startDate) && isEmpty(value.endDate)) {\n inningsPitchedLimits.push(translate('resources.rulebooks.values.pitcherLimits.inningsPitchedLimits.from',\n { limitType: translate(`resources.rulebooks.values.pitcherLimits.limitType.${value.limitType}`), limit: value.limit, startDate: moment.utc(value.startDate, 'YYYY-MM-DD').format('YYYY-MM-DD') })\n )\n } else if (!isEmpty(value.startDate) && !isEmpty(value.endDate)) {\n inningsPitchedLimits.push(translate('resources.rulebooks.values.pitcherLimits.inningsPitchedLimits.between',\n { limitType: translate(`resources.rulebooks.values.pitcherLimits.limitType.${value.limitType}`), limit: value.limit, startDate: moment.utc(value.startDate, 'YYYY-MM-DD').format('YYYY-MM-DD'), endDate: moment.utc(value.endDate, 'YYYY-MM-DD').format('YYYY-MM-DD') })\n )\n } else if (isEmpty(value.startDate) && !isEmpty(value.endDate)) {\n inningsPitchedLimits.push(translate('resources.rulebooks.values.pitcherLimits.inningsPitchedLimits.until',\n { limitType: translate(`resources.rulebooks.values.pitcherLimits.limitType.${value.limitType}`), limit: value.limit, endDate: moment.utc(value.endDate, 'YYYY-MM-DD').format('YYYY-MM-DD') })\n )\n }\n })\n\n pitcherLimit?.inningsPitchedRests?.map(value => {\n inningsPitchedRests.push(translate('resources.rulebooks.values.pitcherLimits.inningsPitchedRests.between',\n { min: value.min, max: value.max, restingDays: value.restingDays })\n )\n })\n\n if (scheduleTypes && scheduleTypes.length) {\n limits.push(<strong>{scheduleTypes.join(\", \")}</strong>)\n }\n if (throwsLimits && throwsLimits.length) {\n limits.push(<figure>{translate('resources.rulebooks.labels.throws_limits')}<ul>{throwsLimits.map(limit => <li>{limit}</li>)}</ul></figure>)\n }\n if (inningsPitchedLimits && inningsPitchedLimits.length) {\n limits.push(<figure>{translate('resources.rulebooks.labels.innings_pitched_limits')}<ul>{inningsPitchedLimits.map(limit => <li>{limit}</li>)}</ul></figure>)\n }\n if (inningsPitchedRests && inningsPitchedRests.length) {\n limits.push(<figure>{translate('resources.rulebooks.labels.innings_pitched_rests')}<ul>{inningsPitchedRests.map(limit => <li>{limit}</li>)}</ul></figure>)\n }\n }\n\n return limits.map(limit => limit)\n }} />\n\nexport const VarianceGrid = props => {\n const classes = useStyles();\n const isEnabled = useFlag();\n\n return <VarianceDatagrid size=\"medium\" classes={classes} {...props}>\n <CategoriesField source=\"categoryIds\" />\n <LineupLimitsField source=\"lineupLimits\" />\n {isEnabled(FF_PITCHERS) && <PitcherLimitsField source=\"pitcherLimits\" />}\n </VarianceDatagrid>\n}\n","import React from 'react';\nimport { useFormState, useForm } from 'react-final-form';\nimport { v4 as uuid } from 'uuid';\n\nimport { VarianceGrid } from './VarianceGrid';\nimport { AddVarianceButton } from './VarianceModal';\n\nimport { ArrayGrid } from '../ArrayGrid';\n\nconst inputProps = {\n resource: 'rulebooks',\n basePath: '/rulebooks',\n variant: 'outlined',\n margin: 'none',\n fullWidth: true,\n}\n\nexport const Variances = ({ source }) => {\n const { values: { variances } } = useFormState();\n const { mutators } = useForm();\n\n const onSave = variance => {\n if (!variance.id) {\n variance.id = uuid();\n }\n\n const index = variances?.findIndex(value => value.id === variance.id);\n if (index >= 0) {\n const { id, ...changes } = variance;\n const newVariance = Object.assign({}, variances[index], changes);\n mutators.update('variances', index, newVariance)\n } else {\n mutators.push('variances', variance);\n }\n }\n\n const onDelete = variance => {\n const index = variances?.findIndex(value => value.id === variance.id);\n mutators.remove('variances', index);\n }\n\n return <>\n <ArrayGrid source={source}>\n <VarianceGrid\n save={onSave}\n canDelete\n onDelete={onDelete}\n {...inputProps}\n />\n </ArrayGrid>\n <AddVarianceButton save={onSave} />\n </>\n}\n","import React from 'react';\nimport { TextInput, SimpleForm, useTranslate } from 'react-admin';\nimport { Grid, Typography } from '@material-ui/core'\nimport { Alert } from '@material-ui/lab';\nimport { useFormState } from 'react-final-form';\n\nimport { isLegacyRulebookSeason } from '@hisports/scoresheet/src/util';\nimport { FF_PITCHERS } from '@hisports/common/featureFlags';\n\nimport Toolbar from '../../common/ra/Toolbar';\nimport { EnumInput, SeasonInput } from '../../common/inputs/EnumInputs'\nimport { useFlag } from '../../http';\n\nimport { OfficeInput } from '../offices/OfficeInput';\n\nimport { Durations } from './durations';\nimport { Infractions } from './infractions';\n\nimport { LimitsInput } from './LimitsInput';\nimport { Variances } from './variances';\nimport { PitcherLimits } from './pitcherLimits';\n\nconst inputProps = {\n resource: 'rulebooks',\n basePath: '/rulebooks',\n variant: 'outlined',\n margin: 'none',\n fullWidth: true,\n}\n\nconst ejections = [\n { id: 'None', name: 'resources.rulebooks.values.ejections.None' },\n { id: 'Contact', name: 'resources.rulebooks.values.ejections.Contact' },\n { id: 'All', name: 'resources.rulebooks.values.ejections.All' },\n]\n\nconst EjectionsInput = props =>\n <EnumInput choices={ejections} {...props} />\n\nconst RulebookFormBody = () => {\n const translate = useTranslate();\n const isEnabled = useFlag();\n\n const { values: { seasonId } } = useFormState();\n const isLegacy = isLegacyRulebookSeason(seasonId);\n\n return <Grid container spacing={2} fullWidth>\n <Grid item xs={12} md={8}>\n <TextInput source=\"name\" autoFocus {...inputProps} />\n </Grid>\n\n <Grid item xs={12} md={4}>\n <SeasonInput source=\"seasonId\" disabled {...inputProps} />\n </Grid>\n\n <Grid item xs={12}>\n <OfficeInput source=\"officeId\" disabled {...inputProps} />\n </Grid>\n\n {isLegacy && <Grid item xs={12}>\n <Typography variant=\"subtitle2\">{translate('resources.rulebooks.labels.durations')}</Typography>\n <Alert severity=\"info\" variant=\"outlined\">\n {translate('resources.rulebooks.alerts.durations')}\n </Alert>\n\n <Durations source=\"durations\" />\n </Grid>}\n\n {isLegacy && <Grid item xs={12}>\n <Typography variant=\"subtitle2\">{translate('resources.rulebooks.labels.infractions')}</Typography>\n <Alert severity=\"info\" variant=\"outlined\">\n {translate('resources.rulebooks.alerts.infractions')}\n </Alert>\n\n <Infractions source=\"infractions\" />\n </Grid>}\n\n <Grid item xs={12}>\n <Typography variant=\"subtitle2\">{translate('resources.rulebooks.labels.lineup_limits')}</Typography>\n <Alert severity=\"info\" variant=\"outlined\">\n {translate('resources.rulebooks.alerts.lineup_limits')}\n </Alert>\n\n <LimitsInput source=\"lineupLimits\" />\n </Grid>\n\n {isEnabled(FF_PITCHERS) && <Grid item xs={12}>\n <Typography variant=\"subtitle2\">{translate('resources.rulebooks.labels.pitcher_limits')}</Typography>\n <PitcherLimits source=\"pitcherLimits\" />\n </Grid>}\n\n <Grid item xs={12}>\n <Typography variant=\"subtitle2\">{translate('resources.rulebooks.labels.variances')}</Typography>\n <Variances source=\"variances\" />\n </Grid>\n\n {isLegacy && <Grid item xs={12}>\n <Typography variant=\"subtitle2\">{translate('resources.rulebooks.labels.additional_policies')}</Typography>\n <Alert severity=\"info\" variant=\"outlined\">\n {translate('resources.rulebooks.alerts.additional_policies')}\n </Alert>\n </Grid>}\n {isLegacy && <Grid item xs={12} md={6}>\n <EjectionsInput\n allowEmpty\n source=\"ejections\"\n helperText=\"resources.rulebooks.helpers.ejections\"\n {...inputProps}\n />\n </Grid>}\n </Grid>\n}\nexport const RulebookForm = ({ save, ...props }) => {\n const onSave = (rulebook) => {\n return save(rulebook, `/offices/${rulebook.officeId}/show/settings`);\n }\n\n return <SimpleForm toolbar={<Toolbar />} save={onSave} {...props}>\n <RulebookFormBody />\n </SimpleForm>\n}\n","import React, { Fragment, useState } from 'react';\nimport { useTranslate } from 'react-admin';\nimport { Button } from '@material-ui/core';\nimport { Add } from '@material-ui/icons';\n\nimport { DialogDatagrid } from '../../common/dialogs/DialogDatagrid';\nimport { CreateResourceDialog, EditResourceDialog } from '../../common/dialogs/ResourceDialog';\n\nimport { RulebookForm } from './RulebookForm';\n\nconst AddRulebookDialog = props =>\n <CreateResourceDialog label=\"resources.rulebooks.labels.add_limits\" resource=\"rulebooks\" basePath=\"/rulebooks\" maxWidth=\"md\" {...props}>\n <RulebookForm />\n </CreateResourceDialog>\n\nconst EditRulebookDialog = props =>\n <EditResourceDialog label=\"resources.rulebooks.labels.edit_limits\" resource=\"rulebooks\" basePath=\"/rulebooks\" {...props}>\n <RulebookForm />\n </EditResourceDialog>\n\nexport const AddRulebookButton = ({ size, variant, ...props }) => {\n const [ isOpen, setOpen ] = useState(false);\n const translate = useTranslate();\n return <>\n <Button color=\"primary\" size={size} variant={variant} startIcon={<Add />} onClick={() => setOpen(true)}>\n {translate('resources.rulebooks.actions.add_limits')}\n </Button>\n <AddRulebookDialog isOpen={isOpen} handleClose={() => setOpen(false)} {...props} />\n </>\n}\n\nexport const RulebookDatagrid = props => <DialogDatagrid dialog={EditRulebookDialog} {...props} />\n","import React from 'react';\nimport { useRecordContext } from 'react-admin';\nimport { useSelector } from 'react-redux';\nimport { FormatListNumberedRtl } from '@material-ui/icons';\n\nimport ListCard from '../../../common/cards/ListCard';\nimport { useSeason } from '../../../common/inputs/SeasonSelector';\nimport { isAuthorized } from '../../../common/Authorize';\n\nimport { RulebookGrid } from '../../rulebooks/RulebookGrid';\nimport { AddRulebookButton } from '../../rulebooks/RulebookModal';\nimport { useSport } from '../../../http';\n\nexport default props => {\n const office = useRecordContext(props);\n const sport = useSport();\n const seasonId = useSeason();\n\n const rulebooks = useSelector(store => store.admin.resources.rulebooks.data)\n const hasRulebook = Object.keys(rulebooks)\n .map(id => rulebooks[id])\n .some(rulebook => rulebook.officeId === office?.id)\n\n const showRulebooks = isAuthorized(office, 'rulebooks', 'list')\n const canAddRulebooks = isAuthorized(office, 'rulebooks', 'create') && !hasRulebook\n\n const defaultRulebookName = `${office?.name} LIMITS (${seasonId})`\n\n if (!showRulebooks) return null;\n return <ListCard\n title={sport === 'Baseball' ? \"resources.rulebooks.labels.card.baseball_title\" : \"resources.rulebooks.labels.card.title\"}\n subtitle={sport === 'Baseball' ? \"resources.rulebooks.labels.card.baseball_subtitle\" : \"resources.rulebooks.labels.card.subtitle\"}\n icon={<FormatListNumberedRtl />}\n collapsable\n reference=\"rulebooks\"\n target=\"offices\"\n filter={{ seasonId }}\n sort={{ field: 'name', order: 'ASC' }}\n rowsPerPageOptions={[]}\n addButton={canAddRulebooks && <AddRulebookButton initialValues={{ officeId: office?.id, name: defaultRulebookName }} />}\n >\n <RulebookGrid />\n </ListCard>\n}\n","import React, { useRef } from 'react';\nimport { Grid } from '@material-ui/core'\nimport { ArrayInput, NumberInput, SimpleForm, TextInput, useTranslate } from 'react-admin';\nimport createCalculator from 'final-form-calculate';\nimport { useFormState } from 'react-final-form';\nimport { isInteger } from 'lodash';\n\nimport { isEmpty } from '@hisports/parsers';\n\nimport HorizontalFormIterator, { TransitionProps } from '../../common/ra/HorizontalFormIterator';\nimport { AttributeTargetTypeEnumInput, AttributeTypeEnumInput, AttributeValueTypeEnumInput } from '../../common/inputs/EnumInputs';\nimport Toolbar from '../../common/ra/Toolbar';\n\nimport { OfficeInput } from '../offices/OfficeInput';\n\nconst validate = values => {\n const errors = {};\n\n if (!values?.name) errors.name = 'ra.validation.required';\n if (!values?.valueType) errors.valueType = 'ra.validation.required';\n\n if (values?.valueType == 'Number' && values?.options?.min > values?.options?.max && isInteger(values?.options?.min) && isInteger(values?.options?.max)) {\n errors.options = { \"min\": \"resources.attributeTypes.validation.min\", \"max\": \"resources.attributeTypes.validation.max\" };\n }\n\n if (values?.valueType == 'Dropdown' && !isEmpty(values?.options?.values)) {\n const dropDownErrors = [];\n\n Object.keys(values?.options?.values).map(function(key) {\n if (isEmpty(values.options.values[key])) {\n dropDownErrors[key] = 'ra.validation.required';\n }\n });\n\n errors.options = { \"values\": dropDownErrors };\n }\n\n return errors;\n}\n\nconst validateHasDropdownOptions = (options) => {\n if (isEmpty(options)) {\n return { message: 'resources.attributeTypes.validation.no_dropdown_options' };\n }\n}\n\nconst inputProps = {\n resource: 'attributeTypes',\n basePath: '/attributeTypes',\n variant: 'outlined',\n margin: 'none',\n fullWidth: true,\n}\n\nexport const AttributeValueTypeInput = ({ ...props }) => {\n const { values } = useFormState();\n\n switch (values.valueType) {\n case 'Number':\n return <NumberValueTypeInput />\n case 'Dropdown':\n return <DropdownValueTypeInput />\n default:\n return null;\n }\n}\n\nexport const DropdownValueTypeInput = props => {\n const translate = useTranslate();\n\n return <ArrayInput validate={validateHasDropdownOptions} source=\"options.values\" label=\"\" {...inputProps}>\n <HorizontalFormIterator disableReordering TransitionProps={TransitionProps} {...inputProps}>\n <TextInput options={{ label: translate(\"resources.attributeTypes.fields.options\") }} {...inputProps} />\n </HorizontalFormIterator>\n </ArrayInput>\n}\n\nexport const NumberValueTypeInput = props => {\n return <Grid container spacing={2}>\n <Grid item xs={12} md={6}>\n <NumberInput source=\"options.min\" label=\"resources.attributeTypes.fields.min\" helperText=\"resources.attributeTypes.helpers.optional\" {...inputProps} />\n </Grid>\n <Grid item xs={12} md={6}>\n <NumberInput source=\"options.max\" label=\"resources.attributeTypes.fields.max\" helperText=\"resources.attributeTypes.helpers.optional\" {...inputProps} />\n </Grid>\n </Grid>\n}\n\nexport const AttributeTypeForm = props => {\n const showOfficeInput = props?.officeId;\n const showAttributeTypeInput = props?.type;\n const showAttributeTargetTypeInput = props?.targetType;\n const attributeValuesData = props?.attributeValuesData;\n const loadedData = props?.loadedData;\n\n const decorators = useRef([createCalculator({\n field: 'valueType',\n updates: {\n options: (valueType, values, prevValues) => {\n if (!isEmpty(prevValues) && prevValues.valueType != valueType) {\n // Weird behavior when saving if we dont reset the options initialValues\n props.initialValues.options = null;\n return null;\n }\n\n return values.options;\n }\n }\n })])\n\n if (!isEmpty(props.initialValues?.id) && !loadedData) return null;\n\n return <SimpleForm toolbar={<Toolbar />} validate={validate} decorators={decorators.current} {...props}>\n <Grid container spacing={2} fullWidth>\n <Grid item xs={12}>\n <TextInput source=\"name\" label=\"resources.attributeTypes.fields.name\" helperText=\"\" {...inputProps} />\n </Grid>\n {showOfficeInput && <Grid item xs={12}>\n <OfficeInput source=\"officeId\" label=\"resources.attributeTypes.fields.officeId\" helperText=\"\" {...inputProps} />\n </Grid>}\n {showAttributeTypeInput && <Grid item xs={12}>\n <AttributeTypeEnumInput source=\"type\" label=\"resources.attributeTypes.fields.type\" helperText=\"\" {...inputProps} />\n </Grid>}\n {showAttributeTargetTypeInput && <Grid item xs={12}>\n <AttributeTargetTypeEnumInput source=\"targetType\" label=\"resources.attributeTypes.fields.targetType\" helperText=\"\" {...inputProps} />\n </Grid>}\n <Grid item xs={12}>\n <AttributeValueTypeEnumInput source=\"valueType\" label=\"resources.attributeTypes.fields.valueType\" radio helperText={!isEmpty(attributeValuesData) ? \"resources.attributeTypes.helpers.valueType.has_data\" : ''} disabled={!isEmpty(attributeValuesData)} {...inputProps} />\n </Grid>\n <Grid item xs={12}>\n <AttributeValueTypeInput {...inputProps} />\n </Grid>\n </Grid>\n </SimpleForm>\n}\n","import React, { useState } from 'react';\nimport { GET_LIST, useQuery, useTranslate } from 'react-admin';\nimport { Button } from '@material-ui/core';\nimport { Add } from '@material-ui/icons';\n\nimport { DialogDatagrid } from '../../common/dialogs/DialogDatagrid';\nimport { CreateResourceDialog, EditResourceDialog } from '../../common/dialogs/ResourceDialog';\nimport { AttributeTypeForm } from './AttributeTypeForm';\nimport { isEmpty } from 'lodash';\n\nconst AddAttributeTypeDialog = props =>\n <CreateResourceDialog label=\"resources.attributeTypes.actions.add\" resource=\"attributeTypes\" basePath=\"/attributeTypes\" {...props}>\n <AttributeTypeForm />\n </CreateResourceDialog>\n\nconst EditAttributeTypeDialog = props => {\n const { data: attributeValuesData = [], loaded } = useQuery({\n type: GET_LIST,\n resource: 'attributeValues',\n payload: {\n filter: { attributeId: !isEmpty(props.record?.id) ? props.record?.id : '' },\n },\n })\n\n return <EditResourceDialog label=\"resources.attributeTypes.labels.edit\" resource=\"attributeTypes\" basePath=\"/attributeTypes\" disableDelete={!isEmpty(attributeValuesData)} {...props}>\n <AttributeTypeForm attributeValuesData={attributeValuesData} loadedData={loaded} />\n </EditResourceDialog>\n}\n\nexport const AddAttributeTypeButton = ({ size, variant, ...props }) => {\n const [ isOpen, setOpen ] = useState(false);\n const translate = useTranslate();\n return <>\n <Button color=\"primary\" size={size} variant={variant} startIcon={<Add />} onClick={() => setOpen(true)}>{translate('resources.attributeTypes.actions.add')}</Button>\n <AddAttributeTypeDialog isOpen={isOpen} handleClose={() => setOpen(false)} {...props} />\n </>\n}\n\nexport const AttributeTypeDatagrid = props => <DialogDatagrid dialog={EditAttributeTypeDialog} {...props} />\n","import React from 'react';\nimport { TextField } from 'react-admin';\nimport { isInteger } from \"lodash\";\nimport { isEmpty } from \"@hisports/parsers\";\n\nimport FunctionField from '../../common/fields/FunctionField';\nimport { OfficeField } from '../offices/OfficeField';\n\nimport { AttributeTypeDatagrid } from './AttributeTypeModal';\n\nconst getGridAttributeOptions = (attributeType, source, resources, translate) => {\n if (!attributeType?.options) return;\n\n const gridOptions = [];\n const { valueType, options } = attributeType;\n\n Object.keys(options).map(function(key) {\n if (valueType == 'Dropdown') {\n gridOptions.push(options[key].join(', '));\n } else if (valueType == 'Number' && isInteger(options[key])) {\n gridOptions.push(`${translate(`resources.attributeTypes.fields.${key}`, key)}: ` + `${options[key]}`);\n }\n })\n\n if (isEmpty(gridOptions)) return;\n return gridOptions.join(', ');\n}\n\nconst attributesRender = (attributeType, source, resources, translate) => {\n switch (source) {\n case 'valueType':\n return translate(`resources.attributeTypes.${source}.${attributeType[source]}`, attributeType[source])\n default:\n return null\n }\n}\n\nexport const AttributeTypeGrid = props =>\n <AttributeTypeDatagrid size=\"medium\" {...props}>\n <TextField source=\"name\" />\n <FunctionField source=\"valueType\" render={attributesRender} />\n <FunctionField source=\"options\" render={getGridAttributeOptions} />\n <OfficeField source=\"officeId\" />\n </AttributeTypeDatagrid>\n","import React, { useState } from 'react';\nimport { useTranslate } from 'react-admin';\nimport { Button } from '@material-ui/core'\nimport { UnarchiveOutlined } from '@material-ui/icons'\n\nimport { LazyDialog } from '../../../../common/LazyDialog';\n\nconst Uploader = React.lazy(() => import('./Uploader'))\n\nexport default ({ officeId, size, variant }) => {\n const [ isOpen, setOpen ] = useState(false);\n const translate = useTranslate();\n\n return <>\n <Button color=\"primary\" size={size} variant={variant} startIcon={<UnarchiveOutlined />} onClick={() => setOpen(true)}>\n {translate('ra.action.import')}\n </Button>\n <LazyDialog>\n {isOpen && <Uploader officeId={officeId} isOpen={isOpen} onClose={() => setOpen(false)} />}\n </LazyDialog>\n </>\n}\n","import React from 'react';\nimport { useRecordContext } from 'react-admin';\n\nimport ListCard from '../../../common/cards/ListCard';\nimport { isAuthorized } from '../../../common/Authorize';\n\nimport { AttributeTypeGrid } from '../../attributeTypes/AttributeTypeGrid';\nimport { AddAttributeTypeButton } from '../../attributeTypes/AttributeTypeModal';\nimport { AttributeIcon } from '../../icons';\nimport ImportAttributes from '../dialogs/attributes'\n\nexport default ({ type, targetType, ...props }) => {\n const office = useRecordContext(props);\n const officeId = office?.id;\n\n const showAttributes = isAuthorized(office, 'attributeTypes', 'list');\n const canAddAttributes = isAuthorized(office, 'attributeTypes', 'create');\n const canImportAttributes = isAuthorized(office, 'attributeValues', 'import')\n const addButton = canAddAttributes && <AddAttributeTypeButton initialValues={{ officeId, type, targetType }} />;\n\n if (!showAttributes) return null;\n\n return <ListCard\n title=\"resources.attributeTypes.labels.card.title\"\n subtitle=\"resources.attributeTypes.labels.card.subtitle\"\n icon={<AttributeIcon />}\n reference=\"attributeTypes\"\n target=\"officeId\"\n filter={{ officeId, type, targetType }}\n sort={{ field: 'name', order: 'ASC' }}\n addButton={addButton}\n actions={[canImportAttributes && <ImportAttributes officeId={officeId} size=\"small\" />]}\n collapsable\n >\n <AttributeTypeGrid />\n </ListCard>\n}\n","import React, { useRef } from 'react';\nimport { SimpleForm, useTranslate, NumberInput } from 'react-admin';\nimport { useFormState } from \"react-final-form\";\nimport createCalculator from 'final-form-calculate';\nimport moment from 'moment-timezone';\nimport { Grid, Typography } from '@material-ui/core'\nimport { Alert } from '@material-ui/lab';\n\nimport { isEmpty } from '@hisports/parsers';\n\nimport Toolbar from '../../common/ra/Toolbar';\nimport { CupScheduleTypeEnumInput, DayEnumInput, ScheduleTypeEnumInput, TournamentScheduleTypeEnumInput } from '../../common/inputs/EnumInputs';\nimport { InlineDateInput } from '../../common/inputs/DateInput';\nimport { CategoryInput } from '../categories/CategoryInput';\n\nconst validate = values => {\n const errors = {}\n\n if (!values.resource) errors.resource = 'ra.validation.required'\n\n if (values.limit == null) {\n errors.limit = 'ra.validation.required'\n } else if (values.limit < 0) {\n errors.limit = 'ra.validation.greater_than_or_equal_zero'\n }\n\n if (!values.periodType) errors.periodType = 'ra.validation.required'\n\n switch (values.periodType) {\n case 'Date Range': {\n errors.period = {};\n if (values.period == null) {\n errors.period.startDate = 'ra.validation.required'\n } else {\n if (!values.period.startDate) errors.period.startDate = 'ra.validation.required';\n if (!values.period.endDate) errors.period.endDate = 'ra.validation.required';\n }\n break;\n }\n case 'Days': {\n if (values.period == null) {\n errors.period = 'ra.validation.required';\n } else if (!(typeof values.period === 'number')) {\n errors.period = 'ra.validation.required';\n } else if (values.period <= 0) {\n errors.period = 'resources.schedulingConstraints.validations.greater_than_zero';\n }\n break;\n }\n case 'Weekdays': {\n if (values.period == null || !Array.isArray(values.period)) {\n errors.period = 'ra.validation.required';\n } else if (values.period.length <= 0) {\n errors.period = 'ra.validation.required';\n }\n break;\n }\n }\n\n return errors;\n}\n\nconst inputProps = {\n resource: 'schedulingConstraints',\n basePath: '/schedulingConstraints',\n variant: 'outlined',\n margin: 'none',\n fullWidth: true,\n}\n\nconst PeriodValueInput = props => {\n const { values: { periodType } } = useFormState();\n\n switch (periodType) {\n case 'Days':\n return <NumberInput source=\"period\" label=\"resources.schedulingConstraints.fields.period.days\" min={1} helperText=\"\" {...inputProps} />\n case 'Weekdays':\n return <DayEnumInput source=\"period\" label=\"resources.schedulingConstraints.fields.period.weekdays\" multiple helperText=\"\" {...inputProps} />\n case 'Date Range':\n return <Grid container spacing={2} fullWidth>\n <Grid item xs={6}>\n <InlineDateInput\n source=\"period.startDate\"\n label=\"resources.schedulingConstraints.fields.period.startDate\"\n {...inputProps}\n />\n </Grid>\n <Grid item xs={6}>\n <InlineDateInput\n source=\"period.endDate\"\n label=\"resources.schedulingConstraints.fields.period.endDate\"\n {...inputProps}\n />\n </Grid>\n </Grid>\n }\n\n return null;\n}\n\nconst TypeInput = ({ office, ...props }) => {\n switch (office?.type) {\n case 'Tournament':\n return <TournamentScheduleTypeEnumInput {...props} {...inputProps} />\n case 'Cup':\n return <CupScheduleTypeEnumInput {...props} {...inputProps} />\n default:\n return <ScheduleTypeEnumInput {...props} {...inputProps} />\n }\n}\n\nexport const getConstraintSummary = (values, translate) => {\n const { resource, limit, periodType, period } = values;\n if (!resource || !limit || !periodType || !period) return null;\n const verb = translate(`resources.schedulingConstraints.messages.${resource === \"Arena\" ? \"host\" : resource === \"Team\" ? \"play\" : \"have\"}`)\n const resourceText = translate(`resources.${resource.toLowerCase()}s.name`, 1)\n const summary = translate('resources.schedulingConstraints.messages.summary', { resource: resourceText.toLowerCase(), verb, smart_count: limit })\n switch (periodType) {\n case 'Days': {\n return `${summary} ${translate('resources.schedulingConstraints.messages.days', { smart_count: period })}`\n }\n case 'Date Range': {\n const start = moment.utc(period.startDate);\n const end = moment.utc(period.endDate);\n if (!start.isValid() || !end.isValid()) return null;\n return `${summary} ${translate('resources.schedulingConstraints.messages.between', { start: start.format(\"MMM D\"), end: end.format(\"MMM D\") })}`\n }\n case 'Weekdays': {\n if (!period?.length) return null;\n return `${summary} ${translate('resources.schedulingConstraints.messages.on', { weekdays: (period || []).join(', ') })}`\n }\n }\n return null;\n}\n\nconst ConstraintSummary = () => {\n const translate = useTranslate();\n const { values } = useFormState();\n\n const summary = getConstraintSummary(values, translate)\n if (!summary) return null;\n\n return <Grid item xs={12}>\n <Alert severity=\"info\">\n {summary}\n </Alert>\n </Grid>\n}\n\nexport const ConstraintsForm = ({ initialValues, office, ...props }) => {\n const translate = useTranslate();\n const decorators = useRef([createCalculator({\n field: 'periodType',\n updates: {\n period: (periodType, values, prevValues) => {\n if (values.periodType === initialValues.periodType || isEmpty(prevValues)) return initialValues.period\n if (prevValues.periodType !== values.periodType) return null;\n return values.period;\n }\n }\n })])\n\n /* To be used for league Restrictions later */\n const disableOfficeInput = initialValues?.officeId != null && (office && ['League', 'Tournament', 'Cup'].includes(office.type))\n\n return <SimpleForm toolbar={<Toolbar />} validate={validate} decorators={decorators.current} initialValues={{ resource: 'Team', periodType: 'Days', ...initialValues }} {...props}>\n <Grid container spacing={2} fullWidth>\n <ConstraintSummary />\n {/* <Grid item xs={12}>\n <ResourceTypeEnumInput source=\"resource\" radio helperText=\"\" disabled {...inputProps} />\n </Grid> */}\n <Grid item xs={12} md={6}>\n <NumberInput source=\"limit\" min={0} helperText=\"\" {...inputProps} />\n </Grid>\n {/* <Grid item xs={12}>\n <Typography variant=\"subtitle2\">{translate('resources.schedulingConstraints.labels.period')}</Typography>\n </Grid> */}\n {/* <Grid item xs={12}>\n <PeriodTypeEnumInput source=\"periodType\" radio helperText=\"\" disabled {...inputProps} />\n </Grid> */}\n <Grid item xs={12} md={6}>\n <PeriodValueInput {...inputProps} />\n </Grid>\n <Grid item xs={12}>\n <Typography variant=\"subtitle2\">{translate('resources.schedulingConstraints.labels.restrictions')}</Typography>\n </Grid>\n <Grid item xs={12}>\n <CategoryInput source=\"categoryIds\" multiple helperText=\"resources.arenaslots.helpers.categoryIds\" emptyText=\"ra.message.all\" {...inputProps} />\n </Grid>\n <Grid item xs={12}>\n <TypeInput source=\"scheduleTypes\" office={office} helperText=\"resources.schedulingConstraints.helpers.schedules\" multiple {...inputProps} />\n </Grid>\n </Grid>\n </SimpleForm>\n}\n","import React, { Fragment, useState } from 'react';\nimport { useTranslate } from 'react-admin';\nimport { Button } from '@material-ui/core';\nimport { Add } from '@material-ui/icons';\n\nimport { DialogDatagrid } from '../../common/dialogs/DialogDatagrid';\nimport { CreateResourceDialog, EditResourceDialog } from '../../common/dialogs/ResourceDialog';\n\nimport { ConstraintsForm } from './ConstraintsForm';\n\nconst AddConstraintDialog = ({ office, ...props }) => {\n return <CreateResourceDialog label=\"resources.schedulingConstraints.actions.add_constraint\" resource=\"schedulingConstraints\" basePath=\"/schedulingConstraints\" {...props}>\n <ConstraintsForm office={office} />\n </CreateResourceDialog>\n}\n\nconst EditConstraintDialog = ({ office, ...props }) =>\n <EditResourceDialog label=\"resources.schedulingConstraints.actions.edit_constraint\" resource=\"schedulingConstraints\" basePath=\"/schedulingConstraints\" {...props}>\n <ConstraintsForm office={office} />\n </EditResourceDialog>\n\nexport const AddConstraintButton = ({ size, variant, ...props }) => {\n const translate = useTranslate();\n const [ isOpen, setOpen ] = useState(false);\n return <>\n <Button color=\"primary\" size={size} variant={variant} startIcon={<Add />} onClick={() => setOpen(true)}>{translate(\"resources.schedulingConstraints.actions.add_constraint\")}</Button>\n <AddConstraintDialog isOpen={isOpen} handleClose={() => setOpen(false)} {...props} />\n </>\n}\n\nexport const ConstraintDatagrid = props => <DialogDatagrid dialog={EditConstraintDialog} {...props} />\n","import React from 'react';\n\nimport FunctionField from '../../common/fields/FunctionField';\nimport TextArrayField from '../../common/fields/TextArrayField';\n\nimport { ConstraintDatagrid } from './ConstraintsModal';\nimport { getConstraintSummary } from './ConstraintsForm';\n\nimport { CategoriesField } from '../categories/CategoriesField';\n\nconst renderSummary = (values, source, resource, translate) => {\n return getConstraintSummary(values, translate)\n}\n\nexport const ConstraintsGrid = props => {\n return <ConstraintDatagrid size=\"medium\" {...props}>\n <FunctionField source=\"limit\" {...props} render={renderSummary} />\n <CategoriesField source=\"categoryIds\" emptyText=\"ra.message.all\" />\n <TextArrayField source=\"scheduleTypes\" emptyText=\"ra.message.all\" />\n </ConstraintDatagrid>\n}\n","import React from 'react';\nimport { useRecordContext } from 'react-admin';\nimport { LockOutlined } from '@material-ui/icons';\n\nimport ListCard from '../../../common/cards/ListCard';\nimport { useSeason } from '../../../common/inputs/SeasonSelector';\nimport { isAuthorized } from '../../../common/Authorize';\n\nimport { ConstraintsGrid } from '../../schedulingConstraints/ConstraintsGrid';\nimport { AddConstraintButton } from '../../schedulingConstraints/ConstraintsModal';\n\nexport default props => {\n const office = useRecordContext(props);\n const seasonId = useSeason();\n\n const showConstraints = isAuthorized(office, 'schedulingConstraints', 'list')\n const canAddConstraints = isAuthorized(office, 'schedulingConstraints', 'create')\n\n if (!showConstraints) return null;\n return <ListCard\n title=\"resources.schedulingConstraints.labels.card.title\"\n subtitle=\"resources.schedulingConstraints.labels.card.subtitle\"\n icon={<LockOutlined />}\n collapsable\n reference=\"schedulingConstraints\"\n target=\"officeId\"\n filter={{ seasonId }}\n sort={{ field: 'name', order: 'ASC' }}\n addButton={canAddConstraints && <AddConstraintButton initialValues={{ officeId: office?.id, seasonId: seasonId }} office={office} />}\n >\n <ConstraintsGrid rowOptions={{ office }} />\n </ListCard>\n}\n","import React from 'react';\nimport { SimpleForm, TextInput, useRecordContext } from 'react-admin';\nimport { Grid } from '@material-ui/core';\nimport moment from 'moment-timezone';\n\nimport Toolbar from '../../common/ra/Toolbar';\nimport { OfficeInput } from '../offices/OfficeInput';\nimport { DateInput } from '../../common/inputs/DateInput';\n\n\nconst validate = values => {\n const errors = {}\n\n if (!values.officeId) errors.officeId = 'ra.validation.required';\n if (!values.name) errors.name = 'ra.validation.required';\n if (!values.startDate) errors.startDate = 'ra.validation.required';\n if (!values.endDate) errors.endDate = 'ra.validation.required';\n\n if (values.startDate && values.endDate) {\n if (moment(values.endDate).isBefore(values.startDate, 'day')) {\n errors.endDate = 'ra.validation.end_after_start'\n }\n }\n\n return errors;\n}\n\nconst inputProps = {\n variant: 'outlined',\n margin: 'none',\n fullWidth: true,\n}\n\nexport const PayPeriodForm = ({ initialValues, ...props }) => {\n const payPeriod = useRecordContext();\n\n const isClosed = payPeriod?.isClosed === true;\n\n return <SimpleForm toolbar={<Toolbar hideDelete />} validate={validate} initialValues={initialValues} {...props}>\n <Grid container spacing={2} fullWidth>\n <Grid item xs={12}>\n <TextInput source=\"name\" disabled={isClosed} {...inputProps} />\n </Grid>\n <Grid item xs={12}>\n <OfficeInput source=\"officeId\" disabled={isClosed || !!initialValues?.officeId} {...inputProps} />\n </Grid>\n <Grid item xs={12} sm={6}>\n <DateInput source=\"startDate\" disabled={isClosed} {...inputProps} />\n </Grid>\n <Grid item xs={12} sm={6}>\n <DateInput source=\"endDate\" disabled={isClosed} {...inputProps} />\n </Grid>\n </Grid>\n </SimpleForm>\n}\n","import React, { useState } from 'react';\nimport { Datagrid, useTranslate } from 'react-admin';\nimport { Button } from '@material-ui/core';\nimport { Add } from '@material-ui/icons';\n\nimport { CreateResourceDialog, EditResourceDialog } from '../../common/dialogs/ResourceDialog';\n\nimport { PayPeriodForm } from './PayPeriodForm';\n\nconst AddPayPeriodDialog = props =>\n <CreateResourceDialog label=\"resources.payPeriods.actions.add\" resource=\"payPeriods\" basePath=\"/payPeriods\" {...props}>\n <PayPeriodForm />\n </CreateResourceDialog>\n\nconst EditPayPeriodDialog = props => {\n const isPeriodClosed = props?.record?.isClosed === true;\n return <EditResourceDialog disableDelete hideSubmit={isPeriodClosed} label=\"resources.payPeriods.actions.edit\" resource=\"payPeriods\" basePath=\"/payPeriods\" {...props}>\n <PayPeriodForm />\n </EditResourceDialog>\n}\n\nexport const AddPayPeriodButton = ({ size, variant, ...props }) => {\n const [ isOpen, setOpen ] = useState(false);\n const translate = useTranslate()\n return <>\n <Button color=\"primary\" size={size} variant={variant} startIcon={<Add />} onClick={() => setOpen(true)}>{translate('resources.payPeriods.actions.add')}</Button>\n <AddPayPeriodDialog isOpen={isOpen} handleClose={() => setOpen(false)} {...props} />\n </>\n}\n\nexport const PayPeriodDatagrid = props => <Datagrid size=\"medium\" rowClick=\"show\" {...props} />\n","import React from 'react';\nimport { TextField } from 'react-admin';\nimport { Lock } from '@material-ui/icons';\nimport { Chip } from '@material-ui/core';\nimport moment from 'moment-timezone';\n\nimport FunctionField from '../../common/fields/FunctionField'\nimport DateRangeField from '../../common/fields/DateRangeField';\n\nimport { OfficeField } from '../offices/OfficeField';\nimport { PayPeriodDatagrid } from './PayPeriodModal';\n\nexport const CloseStatusChip = ({ isClosed, closedAt, ...props }) => {\n const date = moment.utc(closedAt).format('YYYY-MM-DD');\n const label = moment(date, 'YYYY-MM-DD', true).isValid() ? date : '-'\n\n if (!isClosed) return null;\n return <Chip icon={<Lock />} size=\"small\" variant=\"outlined\" label={label} />\n}\n\nconst renderStatus = (payPeriod, source, resource, translate) => {\n if (!payPeriod.isClosed) return translate('resources.payPeriods.labels.active')\n return translate('resources.payPeriods.labels.closed', { date: moment.utc(payPeriod.closedAt, 'YYYY-MM-DD').format('LL') })\n}\n\nexport const PayPeriodGrid = ({ hideOffice = false, ...props }) =>\n <PayPeriodDatagrid size=\"medium\" {...props}>\n {!hideOffice && <OfficeField source=\"officeId\" />}\n <TextField source=\"name\" />\n\n <DateRangeField source=\"startDate\" startSource=\"startDate\" endSource=\"endDate\" />\n <FunctionField source=\"isClosed\" label=\"resources.payPeriods.labels.status\" render={renderStatus} />\n </PayPeriodDatagrid>\n","import React from 'react';\nimport { BooleanInput, useRecordContext } from 'react-admin';\nimport { AccountBalance } from '@material-ui/icons';\n\nimport { useSeason } from '../../../common/inputs/SeasonSelector';\nimport ListCard from '../../../common/cards/ListCard';\n\nimport { AddPayPeriodButton } from '../../payPeriods/PayPeriodModal';\nimport { PayPeriodGrid } from '../../payPeriods/PayPeriodGrid';\n\nexport default ({ ...props }) => {\n const office = useRecordContext();\n const seasonId = useSeason();\n\n const filters = [\n <BooleanInput source=\"isClosed\" label=\"resources.payPeriods.filters.isClosed\" />\n ]\n\n return <ListCard\n title=\"resources.payPeriods.labels.card.title\"\n icon={<AccountBalance />}\n reference=\"payPeriods\"\n target=\"officeId\"\n filters={filters}\n filter={{ seasonId }}\n sort={{\n field: ['startDate', 'name'],\n order: ['ASC', 'ASC'],\n }}\n addButton={<AddPayPeriodButton initialValues={{ officeId: office?.id, seasonId }} target=\"officeId\" />}\n {...props}\n >\n <PayPeriodGrid hideOffice />\n </ListCard>\n}\n","import React from 'react';\nimport { useRecordContext, useTranslate } from 'react-admin';\nimport { Gavel } from '@material-ui/icons';\n\nimport ListCard from '../../../common/cards/ListCard';\nimport { SuspensionStatusInput } from '../../../common/inputs/EnumInputs';\nimport { useSeason } from '../../../common/inputs/SeasonSelector';\n\nimport { SuspensionGrid } from '../../scoresheet/suspension/SuspensionGrid';\nimport { TeamInput } from '../../teams/TeamInput';\nimport { ParticipantInput } from '../../participants/ParticipantInput';\nimport { CategoryInput } from '../../categories/CategoryInput';\n\nexport default props => {\n const office = useRecordContext(props);\n const seasonId = useSeason();\n const translate = useTranslate();\n\n const filters = [\n <ParticipantInput source=\"participantId\" variant=\"outlined\" />,\n <TeamInput source=\"teamId\" variant=\"outlined\" />,\n <CategoryInput source=\"game.categoryId\" label=\"resources.games.fields.categoryId\" variant=\"outlined\" />,\n <SuspensionStatusInput source=\"status\" variant=\"outlined\" multiple />,\n ]\n\n return <ListCard\n title={translate(\"resources.suspensions.name\", 2)}\n icon={<Gavel />}\n basePath=\"/suspensions\"\n resource=\"suspensions\"\n filter={{ effectiveOffices: office?.id, or: [{ 'game.seasonId': seasonId }, { status: { inq: ['Active', 'Pending'] } }] }}\n sort={{ field: ['game.date', 'participant.lastName', 'participant.firstName'], order: ['DESC', 'ASC', 'ASC'] }}\n filters={filters}\n {...props}\n >\n <SuspensionGrid multipleGames />\n </ListCard>\n}\n","import React from 'react';\nimport { useRecordContext } from 'react-admin';\nimport { EmojiPeople } from '@material-ui/icons';\n\nimport ListCard from '../../../common/cards/ListCard';\nimport { ClaimStatusEnumInput, ClaimTypeEnumInput } from '../../../common/inputs/EnumInputs';\nimport { useSeason } from '../../../common/inputs/SeasonSelector';\nimport { ClaimsGrid } from '../../officialClaims/ClaimsGrid';\nimport { AddClaimButton } from '../../officialClaims/ClaimModal';\nimport { ClaimBulkAction } from '../../officialClaims/ClaimBulkActions';\nimport { ParticipantInput } from '../../participants/ParticipantInput';\nimport { useOfficeAssignSettings } from '../../officeAssignSettings';\n\nexport default ({ ...props }) => {\n const office = useRecordContext(props);\n const seasonId = useSeason();\n const { data: assignSettings } = useOfficeAssignSettings(office?.id);\n\n const filters = [\n <ClaimStatusEnumInput source=\"status\" variant=\"outlined\" multiple alwaysOn />,\n <ParticipantInput source=\"participantId\" filter={{ 'officialClaims.officeId': office?.id }} variant=\"outlined\" />,\n <ClaimTypeEnumInput source=\"type\" settings={assignSettings} hideAmount multiple variant=\"outlined\" />\n ]\n\n return <ListCard\n title=\"resources.officialClaims.labels.card.title\"\n icon={<EmojiPeople />}\n reference=\"officialClaims\"\n target=\"officeId\"\n filters={filters}\n filter={{ 'game.seasonId': seasonId }}\n sort={{ field: ['status', 'participant.lastName', 'participant.firstName', 'game.startTime'], order: ['ASC', 'ASC', 'ASC', 'ASC'] }}\n bulkActionButtons={<ClaimBulkAction />}\n addButton={<AddClaimButton\n target=\"officeId\"\n initialValues={{\n officeId: office?.id,\n }}\n />}\n collapsable\n >\n <ClaimsGrid hideOffice />\n </ListCard>\n}\n","import React from 'react';\nimport { useLocale, useRecordContext, useTranslate } from 'react-admin';\nimport { SportsOutlined } from '@material-ui/icons';\n\nimport { isLegacyRulebookSeason } from '@hisports/scoresheet/src/util';\n\nimport { useFlag, useSport } from '../../../http';\nimport ListCard from '../../../common/cards/ListCard';\nimport { useSeason } from '../../../common/inputs/SeasonSelector';\n\nimport { GamePenaltyGrid } from '../../gamepenalties/GamePenaltyGrid';\nimport { ParticipantInput } from '../../participants/ParticipantInput';\nimport { TeamInput } from '../../teams/TeamInput';\nimport { CategoryInput } from '../../categories/CategoryInput';\nimport PenaltiesExporter from '../../gamepenalties/PenaltiesExporter';\n\nexport default props => {\n const office = useRecordContext(props);\n const translate = useTranslate();\n const seasonId = useSeason();\n const sport = useSport();\n const isEnabled = useFlag();\n const locale = useLocale();\n\n const isLegacy = isLegacyRulebookSeason(seasonId);\n\n const filters = [\n <ParticipantInput source=\"participantId\" variant=\"outlined\" />,\n <TeamInput source=\"teamId\" variant=\"outlined\" />,\n <CategoryInput source=\"game.categoryId\" label=\"resources.games.fields.categoryId\" variant=\"outlined\" />,\n ]\n\n const actions = [\n <PenaltiesExporter target=\"officeId\" sport={sport} isEnabled={isEnabled} locale={locale} />\n ]\n\n return <ListCard\n title={translate('resources.gamepenalties.name', 2)}\n icon={<SportsOutlined />}\n basePath=\"/gamepenalties\"\n resource=\"gamepenalties\"\n actions={actions}\n filter={{ _options: { includeMeta: isLegacy }, effectiveOffices: office?.id, via: 'Team', 'game.seasonId': seasonId }}\n sort={{ field: ['game.date', 'participant.lastName', 'participant.firstName'], order: ['DESC', 'ASC', 'ASC'] }}\n filters={filters}\n {...props}\n >\n <GamePenaltyGrid seasonId={seasonId} multipleGames rowOptions={{ isRowSelectable: () => false }} />\n </ListCard>\n}\n","import React from 'react';\nimport { TextInput, useTranslate } from 'react-admin';\nimport { useFormState } from 'react-final-form';\nimport { Typography, makeStyles } from '@material-ui/core';\n\nconst useStyles = makeStyles(theme => ({\n arrayContainer: {\n display: 'flex',\n flexDirection: 'column',\n gap: theme.spacing(2)\n },\n inputContainer: {\n display: 'flex',\n alignItems: 'center',\n gap: theme.spacing(2),\n paddingLeft: theme.spacing(1),\n },\n}));\n\nexport const I18nInput = props => {\n const translate = useTranslate();\n const classes = useStyles();\n const { values: { i18n } } = useFormState();\n\n const locale = props?.source.split('.')[1];\n\n return <div className={classes.inputContainer}>\n <Typography>{translate(`ra.input.i18n.values.${locale}`)}</Typography>\n <TextInput\n {...props}\n label=\"ra.input.i18n.label\"\n helperText=\"\"\n format={() => i18n?.[locale]?.name}\n parse={(v) => ({ name: v })}\n />\n </div>\n};\n\nexport const ArrayI18nInput = props => {\n const classes = useStyles();\n return <div className={classes.arrayContainer}>\n <I18nInput source=\"i18n.en\" {...props} />\n <I18nInput source=\"i18n.fr\" {...props} />\n </div>\n}\n\n\n","import React from 'react';\nimport { NumberInput, SimpleForm, TextInput, useTranslate } from 'react-admin';\nimport { Grid, InputAdornment } from '@material-ui/core'\n\nimport Toolbar from '../../common/ra/Toolbar';\n\nimport SwitchInput from '../../common/inputs/SwitchInput';\nimport { ArrayI18nInput } from '../../common/inputs/I18nInput';\n\nconst validate = values => {\n const errors = {};\n\n if (!values.name) errors.name = 'ra.validation.required'\n if (!values.officeId) errors.officeId = 'ra.validation.required'\n if (values.order == null) errors.order = 'ra.validation.required'\n\n return errors;\n}\n\nconst inputProps = {\n resource: 'infractionTypes',\n basePath: '/infractionTypes',\n variant: 'outlined',\n margin: 'none',\n fullWidth: true,\n}\n\nconst DurationInput = props => {\n const translate = useTranslate();\n return <NumberInput {...props} InputProps={{\n endAdornment: <InputAdornment position=\"end\">\n {translate('ra.input.adornments.seconds')}\n </InputAdornment>\n }}\n />\n}\n\nexport default props =>\n <SimpleForm toolbar={<Toolbar />} validate={validate} {...props}>\n <Grid container spacing={2} fullWidth>\n <Grid item xs={12} md={8}>\n <TextInput source=\"name\" {...inputProps} />\n </Grid>\n <Grid item xs={12} md={4}>\n <TextInput source=\"abbreviation\" helperText=\"ra.message.optional\" {...inputProps} />\n </Grid>\n <Grid item xs={12}>\n <ArrayI18nInput {...inputProps} />\n </Grid>\n <Grid item xs={12} md={12}>\n <TextInput source=\"description\" helperText=\"ra.message.optional\" {...inputProps} />\n </Grid>\n <Grid item xs={12} md={4}>\n <DurationInput source=\"duration\" helperText=\"ra.message.optional\" {...inputProps} />\n </Grid>\n <Grid item xs={12} md={4}>\n <NumberInput source=\"order\" {...inputProps} />\n </Grid>\n <Grid item xs={12} md={4}>\n <NumberInput source=\"servingOrder\" helperText=\"ra.message.optional\" {...inputProps} />\n </Grid>\n <br />\n <Grid item xs={12}>\n <SwitchInput source=\"isShorthanded\" helperText=\"resources.infractionTypes.helpers.isShorthanded\" {...inputProps} />\n <SwitchInput source=\"isEjection\" helperText=\"resources.infractionTypes.helpers.isEjection\" {...inputProps} />\n </Grid>\n </Grid>\n </SimpleForm>\n","import React, { useState } from 'react';\nimport { useTranslate } from 'react-admin';\nimport { Button } from '@material-ui/core';\nimport { Add } from '@material-ui/icons';\n\nimport { DialogDatagrid } from '../../common/dialogs/DialogDatagrid';\nimport { CreateResourceDialog, EditResourceDialog } from '../../common/dialogs/ResourceDialog';\n\nimport InfractionTypeForm from './InfractionTypeForm';\n\nconst AddInfractionTypeDialog = props =>\n <CreateResourceDialog label=\"resources.infractionTypes.actions.add\" resource=\"infractionTypes\" basePath=\"/infractionTypes\" {...props}>\n <InfractionTypeForm />\n </CreateResourceDialog>\n\nconst EditInfractionTypeDialog = props =>\n <EditResourceDialog label=\"resources.infractionTypes.labels.edit\" resource=\"infractionTypes\" basePath=\"/infractionTypes\" {...props}>\n <InfractionTypeForm />\n </EditResourceDialog>\n\nexport const AddInfractionTypeButton = ({ size, variant, ...props }) => {\n const [ isOpen, setOpen ] = useState(false);\n const translate = useTranslate();\n return <>\n <Button color=\"primary\" size={size} variant={variant} startIcon={<Add />} onClick={() => setOpen(true)}>\n {translate('resources.infractionTypes.actions.add')}\n </Button>\n <AddInfractionTypeDialog isOpen={isOpen} handleClose={() => setOpen(false)} {...props} />\n </>\n}\n\nexport const InfractionTypeDatagrid = props => <DialogDatagrid dialog={EditInfractionTypeDialog} {...props} />\n","import React from 'react';\nimport { BooleanField, NumberField, useTranslate } from 'react-admin';\n\nimport FunctionField from '../../common/fields/FunctionField';\n\nimport { InfractionTypeDatagrid } from './InfractionTypeModal';\nimport { TextLocaleField } from '../../common/fields/TextLocaleField';\n\nconst renderDuration = (duration, translate) => {\n if (!duration) return;\n const minutes = Math.floor(duration / 60);\n return `${minutes} ${translate('ra.input.adornments.minutes')}`\n}\n\nexport const InfractionTypeGrid = props => {\n const translate = useTranslate();\n\n return <InfractionTypeDatagrid size=\"medium\" {...props}>\n <TextLocaleField source=\"name\" />\n <TextLocaleField source=\"abbreviation\" />\n <TextLocaleField source=\"description\" />\n <FunctionField source=\"duration\" render={({ duration }) => renderDuration(duration, translate)} />\n <BooleanField source=\"isShorthanded\" />\n <BooleanField source=\"isEjection\" />\n <NumberField source=\"servingOrder\" />\n </InfractionTypeDatagrid>\n}\n","import React from 'react';\nimport { useRecordContext } from 'react-admin';\nimport { Timer } from '@material-ui/icons';\n\nimport ListCard from '../../../common/cards/ListCard';\nimport { isAuthorized } from '../../../common/Authorize';\nimport { useSeason } from '../../../common/inputs/SeasonSelector';\n\nimport { InfractionTypeGrid } from '../../infractions/InfractionTypeGrid';\nimport { AddInfractionTypeButton } from '../../infractions/InfractionTypeModal';\n\nexport default props => {\n const office = useRecordContext(props);\n const seasonId = useSeason();\n\n const canAddType = isAuthorized(office, 'infractionTypes', 'create');\n\n return <ListCard\n title=\"resources.infractionTypes.labels.card.title\"\n subtitle=\"resources.infractionTypes.labels.card.subtitle\"\n icon={<Timer />}\n collapsable\n reference=\"infractionTypes\"\n target=\"officeId\"\n sort={{\n field: ['order', 'name'],\n order: ['ASC', 'ASC'],\n }}\n addButton={canAddType && <AddInfractionTypeButton initialValues={{ officeId: office?.id, seasonId }} />}\n >\n <InfractionTypeGrid />\n </ListCard>\n}\n","import React from 'react';\nimport { NumberInput, SimpleForm, TextInput } from 'react-admin';\nimport { Grid } from '@material-ui/core'\n\nimport Toolbar from '../../common/ra/Toolbar';\nimport { ArrayI18nInput } from '../../common/inputs/I18nInput';\n\n\nconst validate = values => {\n const errors = {};\n\n if (!values.name) errors.name = 'ra.validation.required'\n if (!values.officeId) errors.officeId = 'ra.validation.required'\n if (!values.seasonId) errors.seasonId = 'ra.validation.required'\n if (values.order == null) errors.order = 'ra.validation.required'\n\n return errors;\n}\n\nconst inputProps = {\n resource: 'ruleSections',\n basePath: '/ruleSections',\n variant: 'outlined',\n margin: 'none',\n fullWidth: true,\n}\n\nexport default props =>\n <SimpleForm toolbar={<Toolbar />} validate={validate} {...props}>\n <Grid container spacing={2} fullWidth>\n <Grid item xs={12} md={8}>\n <TextInput source=\"name\" helperText=\"\" {...inputProps} />\n </Grid>\n <Grid item xs={12} md={4}>\n <TextInput source=\"code\" helperText=\"ra.message.optional\" {...inputProps} />\n </Grid>\n <Grid item xs={12}>\n <ArrayI18nInput {...inputProps} />\n </Grid>\n <Grid item xs={12}>\n <NumberInput source=\"order\" {...inputProps} />\n </Grid>\n </Grid>\n </SimpleForm>\n\n","import React, { useState } from 'react';\nimport { useTranslate } from 'react-admin';\nimport { Button } from '@material-ui/core';\nimport { Add } from '@material-ui/icons';\n\nimport { DialogDatagrid } from '../../common/dialogs/DialogDatagrid';\nimport { CreateResourceDialog, EditResourceDialog } from '../../common/dialogs/ResourceDialog';\n\nimport RuleSectionForm from './RuleSectionForm';\n\nconst AddRuleSectionDialog = props =>\n <CreateResourceDialog label=\"resources.ruleSections.actions.add\" resource=\"ruleSections\" basePath=\"/ruleSections\" {...props}>\n <RuleSectionForm />\n </CreateResourceDialog>\n\nconst EditRuleSectionDialog = props =>\n <EditResourceDialog label=\"resources.ruleSections.labels.edit\" resource=\"ruleSections\" basePath=\"/ruleSections\" {...props}>\n <RuleSectionForm />\n </EditResourceDialog>\n\nexport const AddRuleSectionButton = ({ size, variant, ...props }) => {\n const [ isOpen, setOpen ] = useState(false);\n const translate = useTranslate();\n return <>\n <Button color=\"primary\" size={size} variant={variant} startIcon={<Add />} onClick={() => setOpen(true)}>\n {translate('resources.ruleSections.actions.add')}\n </Button>\n <AddRuleSectionDialog isOpen={isOpen} handleClose={() => setOpen(false)} {...props} />\n </>\n}\n\nexport const RuleSectionDatagrid = props => <DialogDatagrid dialog={EditRuleSectionDialog} {...props} />\n","import React from 'react';\nimport { ReferenceInput, ReferenceArrayInput, useLocale, RecordContextProvider } from 'react-admin';\n\nimport { translateApiProperty } from '@hisports/common';\n\nimport AutocompleteInput from '../../common/inputs/AutocompleteInput';\nimport AutocompleteSuggestion from '../../common/inputs/AutocompleteSuggestion'\n\nimport { OfficeField } from '../offices/OfficeField';\n\nconst filterSection = name => ({ name })\n\nexport const RuleSectionSuggestion = ({ suggestion: section, query, isHighlighted, includeOffice = false, ...props }) => {\n const locale = useLocale();\n const primary = `${section?.code ? `${section.code} - ` : ''}${translateApiProperty(section, 'name', locale)}`;\n return <RecordContextProvider value={section}>\n <AutocompleteSuggestion\n primary={primary}\n secondary={includeOffice && <OfficeField source=\"officeId\" variant=\"inherit\" />}\n />\n </RecordContextProvider>\n}\n\nexport const RuleSectionInput = ({ helperText, multiple, includeOffice = false, ...props }) => {\n const locale = useLocale();\n\n const Input = multiple ? ReferenceArrayInput : ReferenceInput;\n return <Input\n reference=\"ruleSections\"\n filterToQuery={filterSection}\n sort={{ field: ['order', 'name'], order: ['ASC', 'ASC'] }}\n perPage={25}\n {...props}\n >\n <AutocompleteInput\n optionText={section => translateApiProperty(section, 'name', locale)}\n suggestionComponent={RuleSectionSuggestion}\n options={{ suggestionComponentProps: { includeOffice } }}\n filterKeys={['name', 'code']}\n disableSort\n multiple={multiple}\n helperText={helperText}\n />\n </Input>\n}\n","import React from 'react';\nimport { NumberInput, SimpleForm, TextInput } from 'react-admin';\nimport { Grid } from '@material-ui/core'\n\nimport Toolbar from '../../common/ra/Toolbar';\nimport { ArrayI18nInput } from '../../common/inputs/I18nInput';\n\nimport { RuleSectionInput } from './RuleSectionInput';\n\nconst validate = values => {\n const errors = {};\n\n if (!values.name) errors.name = 'ra.validation.required'\n if (!values.order) errors.order = 'ra.validation.required'\n if (!values.officeId) errors.officeId = 'ra.validation.required'\n if (values.order == null) errors.order = 'ra.validation.required';\n\n return errors;\n}\n\nconst inputProps = {\n resource: 'rules',\n basePath: '/rules',\n variant: 'outlined',\n margin: 'none',\n fullWidth: true,\n}\n\nexport default props =>\n <SimpleForm toolbar={<Toolbar />} validate={validate} {...props}>\n <Grid container spacing={2} fullWidth>\n <Grid item xs={12} md={8}>\n <TextInput source=\"name\" helperText=\"\" {...inputProps} />\n </Grid>\n <Grid item xs={12} md={4}>\n <TextInput source=\"code\" helperText=\"ra.message.optional\" {...inputProps} />\n </Grid>\n <Grid item xs={12}>\n <ArrayI18nInput {...inputProps} />\n </Grid>\n <Grid item xs={12} md={8}>\n <RuleSectionInput source=\"sectionId\" disabled {...inputProps} />\n </Grid>\n <Grid item xs={12} md={4}>\n <NumberInput source=\"order\" {...inputProps} />\n </Grid>\n </Grid>\n </SimpleForm>\n","import React, { useState } from 'react';\nimport { useTranslate } from 'react-admin';\nimport { Button } from '@material-ui/core';\nimport { Add } from '@material-ui/icons';\n\nimport { DialogDatagrid } from '../../common/dialogs/DialogDatagrid';\nimport { CreateResourceDialog, EditResourceDialog } from '../../common/dialogs/ResourceDialog';\n\nimport RuleForm from './RuleForm';\n\nconst AddRuleDialog = props =>\n <CreateResourceDialog label=\"resources.rules.actions.add\" resource=\"rules\" basePath=\"/rules\" {...props}>\n <RuleForm />\n </CreateResourceDialog>\n\nconst EditRuleDialog = props =>\n <EditResourceDialog label=\"resources.rules.labels.edit\" resource=\"rules\" basePath=\"/rules\" {...props}>\n <RuleForm />\n </EditResourceDialog>\n\nexport const AddRuleButton = ({ size, variant, ...props }) => {\n const [ isOpen, setOpen ] = useState(false);\n const translate = useTranslate();\n return <>\n <Button color=\"primary\" size={size} variant={variant} startIcon={<Add />} onClick={() => setOpen(true)}>\n {translate('resources.rules.actions.add')}\n </Button>\n <AddRuleDialog isOpen={isOpen} handleClose={() => setOpen(false)} {...props} />\n </>\n}\n\nexport const RuleDatagrid = props => <DialogDatagrid dialog={EditRuleDialog} {...props} />\n","import React from 'react';\nimport { ReferenceField } from 'react-admin';\n\nimport { TextLocaleField } from '../../common/fields/TextLocaleField';\n\nexport const RuleSectionField = ({ variant = 'body2', ...props }) => {\n return <ReferenceField basePath=\"/ruleSections\" resource=\"ruleSections\" reference=\"ruleSections\" {...props} link={false}>\n <TextLocaleField source=\"name\" variant={variant} />\n </ReferenceField>\n}\n\nRuleSectionField.defaultProps = {\n addLabel: true,\n}\n","import React from 'react';\nimport { ReferenceInput, ReferenceArrayInput, RecordContextProvider, useLocale } from 'react-admin';\nimport { makeStyles } from '@material-ui/core';\n\nimport { translateApiProperty } from '@hisports/common';\n\nimport AutocompleteInput from '../../common/inputs/AutocompleteInput';\nimport AutocompleteSuggestion from '../../common/inputs/AutocompleteSuggestion'\n\nimport { RuleSectionField } from './RuleSectionField';\nimport { OfficeField } from '../offices/OfficeField';\n\nconst useStyles = makeStyles(theme => ({\n secondary: {\n display: 'flex',\n flexDirection: 'column',\n }\n}))\n\nconst filterRule = name => ({ name })\n\nexport const RuleSuggestion = ({ suggestion: rule, hideSecondary = false, includeOffice, ...props }) => {\n const classes = useStyles();\n const locale = useLocale();\n return <RecordContextProvider value={rule}>\n <AutocompleteSuggestion\n primary={translateApiProperty(rule, 'name', locale)}\n secondary={<div className={classes.secondary}>\n {!hideSecondary && <RuleSectionField source=\"sectionId\" />}\n {includeOffice && <OfficeField source=\"officeId\" variant=\"inherit\" />}\n </div>}\n />\n </RecordContextProvider>\n}\n\nexport const RuleInput = ({ helperText, multiple, groupBy, alwaysGroup = false, includeOffice = false, ...props }) => {\n const Input = multiple ? ReferenceArrayInput : ReferenceInput;\n\n\n return <Input\n reference=\"rules\"\n filterToQuery={filterRule}\n sort={{ field: ['order', 'name'], order: ['ASC', 'ASC'] }}\n perPage={25}\n {...props}\n >\n <AutocompleteInput\n optionText=\"name\"\n suggestionComponent={RuleSuggestion}\n options={{ suggestionComponentProps: { hideSecondary: !!groupBy, includeOffice } }}\n filterKeys={['name', 'code']}\n disableSort\n multiple={multiple}\n helperText={helperText}\n groupBy={groupBy}\n alwaysGroup={alwaysGroup}\n />\n </Input>\n}\n","import React from 'react';\nimport { ReferenceInput, ReferenceArrayInput, RecordContextProvider } from 'react-admin';\nimport { useSelector } from 'react-redux'\nimport { makeStyles } from '@material-ui/core';\n\nimport AutocompleteInput from '../../common/inputs/AutocompleteInput';\nimport AutocompleteSuggestion from '../../common/inputs/AutocompleteSuggestion'\nimport { RuleField } from './RuleField';\nimport { InfractionTypeField } from './InfractionTypeField';\nimport { OfficeField } from '../offices/OfficeField';\n\nconst useStyles = makeStyles(theme => ({\n secondary: {\n display: 'flex',\n flexDirection: 'column',\n }\n}))\n\nconst filter = (input = '') => {\n if (!input) return;\n const [ code, type ] = input.split(' - ')\n if (!type) return { or: [\n { code: { ilike: `%${code}%` } },\n { 'type.name': { ilike: `%${code}%` } },\n ] }\n return { and: [\n { code: { ilike: `%${code}%` } },\n { 'type.name': { ilike: `%${type}%` } },\n ] }\n}\n\nexport const InfractionSuggestion = ({ suggestion: infraction, query, isHighlighted, includeOffice = false, ...props }) => {\n const classes = useStyles();\n return <RecordContextProvider value={infraction}>\n <AutocompleteSuggestion\n primary={<>\n {infraction.code && `${infraction.code} - `}\n <InfractionTypeField source=\"typeId\" variant=\"inherit\" />\n </>}\n secondary={<div className={classes.secondary}>\n <RuleField source=\"ruleId\" variant=\"inherit\" />\n {includeOffice && <OfficeField source=\"officeId\" variant=\"inherit\" />}\n </div>}\n />\n </RecordContextProvider>\n}\n\nexport const InfractionInput = ({ helperText, multiple, includeOffice = false, ...props }) => {\n const Input = multiple ? ReferenceArrayInput : ReferenceInput;\n const types = useSelector(state => state.admin.resources.infractionTypes.data)\n\n const getOptionText = infraction => {\n const type = types?.[infraction?.typeId];\n return [ infraction.code, type?.name ].filter(Boolean).join(' - ')\n }\n\n return <Input\n reference=\"infractions\"\n filterToQuery={filter}\n sort={{ field: ['rule.order', 'type.order', 'code'], order: ['ASC', 'ASC', 'ASC'] }}\n perPage={25}\n {...props}\n >\n <AutocompleteInput\n optionText={getOptionText}\n suggestionComponent={InfractionSuggestion}\n options={{ suggestionComponentProps: { includeOffice } }}\n disableSort\n multiple={multiple}\n helperText={helperText}\n />\n </Input>\n}\n","import React from 'react';\nimport { ArrayInput, GET_MANY_REFERENCE, NumberInput, SimpleForm, TextInput, useQuery, useRecordContext } from 'react-admin';\nimport { Grid } from '@material-ui/core'\nimport { useFormState } from 'react-final-form';\n\nimport Toolbar from '../../common/ra/Toolbar';\nimport HorizontalFormIterator, { TransitionProps } from '../../common/ra/HorizontalFormIterator';\nimport { ArrayI18nInput } from '../../common/inputs/I18nInput';\n\nimport { RuleInput } from './RuleInput';\nimport { InfractionInput } from './InfractionInput';\n\nconst validate = values => {\n const errors = {};\n\n if (!values.ruleId) errors.ruleId = 'ra.validation.required'\n if (!values.officeId) errors.officeId = 'ra.validation.required'\n if (!values.seasonId) errors.seasonId = 'ra.validation.required'\n if (!values.name) errors.name = 'ra.validation.required'\n if (values.order == null) errors.order = 'ra.validation.required'\n\n return errors;\n}\n\nconst inputProps = {\n resource: 'ruleOptions',\n basePath: '/ruleOptions',\n variant: 'outlined',\n margin: 'none',\n fullWidth: true,\n}\n\nconst arrayInputProps = {\n resource: 'ruleOptions',\n basePath: '/ruleOptions',\n variant: 'outlined',\n margin: 'normal',\n fullWidth: true,\n}\n\nconst RuleInfractionInput = props => {\n const { values } = useFormState();\n return <InfractionInput {...props} filter={{ seasonId: values?.seasonId, officeId: values?.officeId }} />\n}\n\nexport default ({ initialValues, ...props }) => {\n const option = useRecordContext();\n\n const enabled = option != null;\n const { data: members = [], loaded } = useQuery({\n type: GET_MANY_REFERENCE,\n resource: 'ruleOptionMembers',\n payload: {\n target: 'ruleOptions',\n id: option?.id,\n pagination: { page: 1, perPage: 999 },\n sort: { field: 'order', order: 'ASC' },\n filter: {}\n },\n }, { enabled })\n\n if (enabled && !loaded) return null;\n\n const values = { ...initialValues, members }\n return <SimpleForm initialValues={values} toolbar={<Toolbar />} validate={validate} {...props}>\n <Grid container spacing={2} fullWidth>\n <Grid item xs={8}>\n <RuleInput source=\"ruleId\" disabled {...inputProps} />\n </Grid>\n <Grid item xs={12} md={4}>\n <NumberInput source=\"order\" helperText=\"\" {...inputProps} />\n </Grid>\n <Grid item xs={12}>\n <TextInput source=\"name\" helperText=\"\" {...inputProps} />\n </Grid>\n <Grid item xs={12}>\n <ArrayI18nInput {...inputProps} />\n </Grid>\n <ArrayInput source=\"members\" label=\"resources.rulebooks.fields.infractions\" {...inputProps}>\n <HorizontalFormIterator TransitionProps={TransitionProps}>\n <RuleInfractionInput source=\"infractionId\" label=\"resources.infractions.name\" {...arrayInputProps} />\n </HorizontalFormIterator>\n </ArrayInput>\n {/* parent option */}\n </Grid>\n </SimpleForm>;\n}\n\n","import React, { useState } from 'react';\nimport { useTranslate } from 'react-admin';\nimport { Button } from '@material-ui/core';\nimport { Add } from '@material-ui/icons';\n\nimport { DialogDatagrid } from '../../common/dialogs/DialogDatagrid';\nimport { CreateResourceDialog, EditResourceDialog } from '../../common/dialogs/ResourceDialog';\n\nimport RuleOptionForm from './RuleOptionForm';\n\nconst AddRuleOptionDialog = props =>\n <CreateResourceDialog label=\"resources.ruleOptions.actions.add\" resource=\"ruleOptions\" basePath=\"/ruleOptions\" {...props}>\n <RuleOptionForm />\n </CreateResourceDialog>\n\nconst EditRuleOptionDialog = props =>\n <EditResourceDialog label=\"resources.ruleOptions.labels.edit\" resource=\"ruleOptions\" basePath=\"/ruleOptions\" {...props}>\n <RuleOptionForm />\n </EditResourceDialog>\n\nexport const AddRuleOptionButton = ({ size, variant, ...props }) => {\n const [ isOpen, setOpen ] = useState(false);\n const translate = useTranslate();\n return <>\n <Button color=\"primary\" size={size} variant={variant} startIcon={<Add />} onClick={() => setOpen(true)}>\n {translate('resources.ruleOptions.actions.add')}\n </Button>\n <AddRuleOptionDialog isOpen={isOpen} handleClose={() => setOpen(false)} {...props} />\n </>\n}\n\nexport const RuleOptionDatagrid = props => <DialogDatagrid dialog={EditRuleOptionDialog} {...props} />\n","import React from 'react';\nimport { ReferenceInput, ReferenceArrayInput, useLocale } from 'react-admin';\n\nimport AutocompleteInput from '../../common/inputs/AutocompleteInput';\nimport AutocompleteSuggestion from '../../common/inputs/AutocompleteSuggestion'\nimport { translateApiProperty } from '@hisports/common';\n\nconst filterType = name => ({ name })\n\nexport const InfractionTypeSuggestion = ({ suggestion: type, query, isHighlighted, ...props }) => {\n const locale = useLocale();\n\n const primary = translateApiProperty(type, 'name', locale);\n const secondary = [\n translateApiProperty(type, 'abbreviation', locale),\n translateApiProperty(type, 'description', locale)\n ].filter(Boolean).join(' - ')\n return <AutocompleteSuggestion primary={primary} secondary={secondary} />\n}\n\nexport const InfractionTypeInput = ({ helperText, multiple, ...props }) => {\n const locale = useLocale();\n\n const Input = multiple ? ReferenceArrayInput : ReferenceInput;\n return <Input\n reference=\"infractionTypes\"\n filterToQuery={filterType}\n sort={{ field: ['order', 'name'], order: ['ASC', 'ASC'] }}\n perPage={25}\n {...props}\n >\n <AutocompleteInput\n optionText={section => translateApiProperty(section, 'name', locale)}\n optionDescription=\"description\"\n suggestionComponent={InfractionTypeSuggestion}\n filterKeys={['name', 'abbrevation', 'description']}\n disableSort\n multiple={multiple}\n helperText={helperText}\n />\n </Input>\n}\n","import React, { useRef } from 'react';\nimport { SimpleForm, TextInput } from 'react-admin';\nimport { Grid } from '@material-ui/core'\nimport { useSelector } from 'react-redux';\nimport createCalculator from 'final-form-calculate';\nimport { kebabCase } from 'lodash';\n\nimport Toolbar from '../../common/ra/Toolbar';\nimport { InfractionSeverityInput } from '../../common/inputs/EnumInputs';\n\nimport { RuleInput } from './RuleInput';\nimport { InfractionTypeInput } from './InfractionTypeInput';\nimport { InfractionInput } from './InfractionInput';\n\nconst validate = values => {\n const errors = {};\n\n if (!values.ruleId) errors.ruleId = 'ra.validation.required'\n if (!values.typeId) errors.typeId = 'ra.validation.required'\n if (!values.severity) errors.severity = 'ra.validation.required'\n if (!values.officeId) errors.officeId = 'ra.validation.required'\n if (!values.seasonId) errors.seasonId = 'ra.validation.required'\n if (!values.legacyName) errors.legacyName = 'ra.validation.required'\n if (!values.legacyDuration) errors.legacyDuration = 'ra.validation.required'\n\n return errors;\n}\n\nconst inputProps = {\n resource: 'infractions',\n basePath: '/infractions',\n variant: 'outlined',\n margin: 'none',\n fullWidth: true,\n}\n\nconst ParentInfractionInput = ({ office, ...props }) => {\n // hide infractions of current office\n const hasParentOffice = !!office?.parentId\n const getOptionDisabled = infraction => {\n if (infraction?.officeId === office?.id) return true\n return false\n }\n\n return <InfractionInput\n source=\"parentId\"\n filter={{ effectiveOffices: office?.id, includeParents: true, _scope: 'Parents' }}\n helperText=\"resources.infractions.helpers.parentId\"\n includeOffice\n disabled={!hasParentOffice}\n getOptionDisabled={getOptionDisabled}\n hideDisabled\n {...props}\n />\n}\n\n\nexport default ({ office, ...props }) => {\n // must use ref for roles to get current value, otherwise value in calculator is stale\n const rules = useSelector(store => store.admin.resources.rules.data);\n const rulesRef = useRef({});\n rulesRef.current = rules;\n\n const types = useSelector(store => store.admin.resources.infractionTypes.data);\n const typesRef = useRef({});\n typesRef.current = types;\n\n // decorators must be wrapped in useRef otherwise SimpleForm prop will register duplicates\n // this bug seems to be triggered by use of hooks (useSelector)\n const decorators = useRef([createCalculator({\n field: 'ruleId',\n updates: {\n legacyName: (ruleId, values, prevValues) => {\n if (!ruleId || values.legacyName) return values.legacyName;\n const rule = rulesRef.current[ruleId];\n if (!rule) return values.legacyName;\n return kebabCase(rule.name).replace('-the', '');\n }\n }\n }, {\n field: 'typeId',\n updates: {\n legacyDuration: (typeId, values, prevValues) => {\n if (!typeId || values.legacyDuration) return values.legacyDuration;\n const type = typesRef.current[typeId];\n if (!type) return values.legacyDuration;\n return kebabCase(type.name);\n }\n }\n })])\n\n return <SimpleForm toolbar={<Toolbar />} decorators={decorators.current} validate={validate} {...props}>\n <Grid container spacing={2} fullWidth>\n <Grid item xs={12}>\n <RuleInput source=\"ruleId\" {...inputProps} />\n </Grid>\n <Grid item xs={12} md={6}>\n <TextInput source=\"code\" helperText=\"\" {...inputProps} />\n </Grid>\n <Grid item xs={12} md={6}>\n <InfractionTypeInput source=\"typeId\" filter={{ officeId: office?.id }} helperText=\"\" select {...inputProps} />\n </Grid>\n <Grid item xs={12}>\n <InfractionSeverityInput source=\"severity\" helperText=\"\" radio {...inputProps} />\n </Grid>\n <Grid item xs={12} md={6}>\n <TextInput source=\"legacyName\" helperText=\"\" {...inputProps} />\n </Grid>\n <Grid item xs={12} md={6}>\n <TextInput source=\"legacyDuration\" helperText=\"\" {...inputProps} />\n </Grid>\n <Grid item xs={12}>\n <ParentInfractionInput source=\"parentId\" office={office} {...inputProps} />\n </Grid>\n </Grid>\n </SimpleForm>\n}\n","import React, { useState } from 'react';\nimport { useTranslate } from 'react-admin';\nimport { Button } from '@material-ui/core';\nimport { Add } from '@material-ui/icons';\n\nimport { DialogDatagrid } from '../../common/dialogs/DialogDatagrid';\nimport { CreateResourceDialog, EditResourceDialog } from '../../common/dialogs/ResourceDialog';\n\nimport InfractionForm from './InfractionForm';\n\nconst AddInfractionDialog = ({ office, ...props }) =>\n <CreateResourceDialog label=\"resources.infractions.actions.add\" resource=\"infractions\" basePath=\"/infractions\" {...props}>\n <InfractionForm office={office} />\n </CreateResourceDialog>\n\nconst EditInfractionDialog = ({ office, ...props }) =>\n <EditResourceDialog label=\"resources.infractions.labels.edit\" resource=\"infractions\" basePath=\"/infractions\" {...props}>\n <InfractionForm office={office} />\n </EditResourceDialog>\n\nexport const AddInfractionButton = ({ size, variant, ...props }) => {\n const [ isOpen, setOpen ] = useState(false);\n const translate = useTranslate();\n return <>\n <Button color=\"primary\" size={size} variant={variant} startIcon={<Add />} onClick={() => setOpen(true)}>\n {translate('resources.infractions.actions.add')}\n </Button>\n <AddInfractionDialog isOpen={isOpen} handleClose={() => setOpen(false)} {...props} />\n </>\n}\n\nexport const InfractionDatagrid = props => <DialogDatagrid dialog={EditInfractionDialog} {...props} />\n","import React from 'react';\nimport { ReferenceField, TextField, useTranslate } from 'react-admin';\n\nimport { EnumField } from '../../common/fields/EnumField';\nimport { OfficeField } from '../offices/OfficeField';\n\nimport { InfractionDatagrid } from './InfractionModal';\nimport { RuleField } from './RuleField';\nimport { InfractionTypeField } from './InfractionTypeField';\n\nconst ParentInfractionCode = props =>\n <ReferenceField basePath=\"/infractions\" resource=\"infractions\" reference=\"infractions\" {...props} link={false}>\n <TextField source=\"code\" />\n </ReferenceField>\n\nconst ParentInfractionOffice = props =>\n <ReferenceField basePath=\"/infractions\" resource=\"infractions\" reference=\"infractions\" {...props} link={false}>\n <OfficeField source=\"officeId\" />\n </ReferenceField>\n\n\nexport const InfractionGrid = ({ office, ...props }) => {\n const translate = useTranslate()\n const hasParentOffice = !!office?.parentId\n\n return <InfractionDatagrid size=\"medium\" {...props}>\n <TextField source=\"code\" />\n <RuleField source=\"ruleId\" />\n <InfractionTypeField source=\"typeId\" />\n <EnumField source=\"severity\" />\n {hasParentOffice && <ParentInfractionCode source=\"parentId\" label={translate('resources.infractions.labels.parent_code')} />}\n {hasParentOffice && <ParentInfractionOffice source=\"parentId\" label={translate('resources.infractions.labels.parent_office')} />}\n </InfractionDatagrid>\n}\n","import React, { Fragment } from 'react';\nimport { FunctionField, GET_LIST, useLocale, useQuery, useRecordContext, useTranslate } from 'react-admin';\nimport { Typography, makeStyles } from '@material-ui/core';\nimport { BookOutlined } from '@material-ui/icons';\n\nimport { translateApiProperty } from '@hisports/common';\nimport { getInfractionOptionCodes } from '@hisports/scoresheet/src/util';\n\nimport ListCard from '../../../common/cards/ListCard';\nimport { isAuthorized } from '../../../common/Authorize';\nimport { useSeason } from '../../../common/inputs/SeasonSelector';\n\nimport { AddRuleSectionButton, RuleSectionDatagrid } from '../../infractions/RuleSectionModal';\nimport { AddRuleButton, RuleDatagrid } from '../../infractions/RuleModal';\nimport { AddRuleOptionButton, RuleOptionDatagrid } from '../../infractions/RuleOptionModal';\nimport { AddInfractionButton } from '../../infractions/InfractionModal';\nimport { InfractionGrid } from '../../infractions/InfractionGrid';\n\nconst useStyles = makeStyles({\n thead: {\n display: 'none',\n }\n})\n\nconst useRuleOptions = ruleId => useQuery({\n type: GET_LIST,\n resource: 'ruleOptions',\n payload: {\n filter: {\n ruleId,\n _include: ['infractions', 'members']\n }\n },\n}, {\n enabled: ruleId != null,\n})\n\nconst NameField = props => {\n const locale = useLocale();\n return <FunctionField {...props} render={record => [record.code, translateApiProperty(record, 'name', locale)].filter(Boolean).join(' ')} />;\n}\n\nconst RuleSectionGrid = props => {\n const classes = useStyles();\n return <RuleSectionDatagrid classes={classes} {...props}>\n <NameField source=\"name\" />\n </RuleSectionDatagrid>;\n}\n\nconst RuleGrid = props => {\n const classes = useStyles();\n return <RuleDatagrid classes={classes} {...props}>\n <NameField source=\"name\" />\n </RuleDatagrid>;\n}\n\nconst RuleOptionGrid = props => {\n const rule = useRecordContext();\n const { data: ruleOptions } = useRuleOptions(rule?.id);\n\n if (!ruleOptions?.length) return null;\n\n const renderCodes = record => {\n const infractions = ruleOptions.find(({ id }) => id === record.id)?.infractions;\n const members = ruleOptions.find(({ id }) => id === record.id)?.members;\n if (!infractions || !members) return null;\n\n return getInfractionOptionCodes({ ...record, members }, infractions).join(' + ');\n }\n\n return <RuleOptionDatagrid {...props}>\n <FunctionField source=\"code\" label=\"resources.sanctionMembers.labels.code\" render={renderCodes} />\n <NameField source=\"name\" />\n </RuleOptionDatagrid>;\n}\n\nconst RuleOptionList = ({ office, ...props }) => {\n const rule = useRecordContext(props);\n const seasonId = useSeason();\n\n const canAddRuleOption = isAuthorized(office, 'ruleOptions', 'create')\n\n return <ListCard {...props}\n reference=\"ruleOptions\"\n resource=\"ruleOptions\"\n target=\"ruleId\"\n sort={{\n field: ['order'],\n order: ['ASC'],\n }}\n perPage={25}\n rowsPerPageOptions={[]}\n addButton={canAddRuleOption && <AddRuleOptionButton initialValues={{ ruleId: rule?.id, officeId: office?.id, seasonId }} />}\n addPosition=\"footer\"\n component={Fragment}\n >\n <RuleOptionGrid />\n </ListCard>\n}\n\nconst InfractionList = ({ office, ...props }) => {\n const rule = useRecordContext(props);\n const seasonId = useSeason();\n\n const canAddInfraction = isAuthorized(rule, 'infractions', 'create');\n\n return <ListCard\n reference=\"infractions\"\n resource=\"infractions\"\n target=\"ruleId\"\n sort={{ field: ['rule.order', 'type.order', 'code'], order: ['ASC', 'ASC', 'ASC'] }}\n perPage={25}\n rowsPerPageOptions={[]}\n addButton={canAddInfraction && <AddInfractionButton initialValues={{ ruleId: rule?.id, officeId: office?.id, seasonId }} office={office} />}\n addPosition=\"footer\"\n component={Fragment}\n >\n <InfractionGrid rowOptions={{ office }} office={office} />\n </ListCard>\n}\n\nconst RuleDetails = ({ office, ...props }) => {\n const translate = useTranslate()\n return <>\n <Typography variant=\"subtitle2\">{translate('resources.infractions.labels.card.title')}</Typography>\n <Typography variant=\"body2\" color=\"textSecondary\">{translate('resources.infractions.labels.card.subtitle')}</Typography>\n <InfractionList office={office} {...props} />\n\n <Typography variant=\"subtitle2\">{translate('resources.ruleOptions.labels.card.title')}</Typography>\n <Typography variant=\"body2\" color=\"textSecondary\">{translate('resources.ruleOptions.labels.card.subtitle')}</Typography>\n <RuleOptionList office={office} {...props} />\n </>\n}\n\nconst RuleList = ({ office, ...props }) => {\n const section = useRecordContext(props);\n const seasonId = useSeason();\n\n const canAddRule = isAuthorized(office, 'ruleSections', 'create')\n\n return <ListCard {...props}\n reference=\"rules\"\n resource=\"rules\"\n target=\"sectionId\"\n sort={{\n field: ['order', 'code', 'name'],\n order: ['ASC', 'ASC', 'ASC'],\n }}\n perPage={25}\n rowsPerPageOptions={[]}\n addButton={canAddRule && <AddRuleButton initialValues={{ sectionId: section?.id, officeId: office?.id, seasonId }} />}\n addPosition=\"footer\"\n component={Fragment}\n >\n <RuleGrid expand={<RuleDetails office={office} />} />\n </ListCard>\n}\n\nexport default props => {\n const office = useRecordContext(props);\n const seasonId = useSeason();\n\n const canAddSection = isAuthorized(office, 'ruleSections', 'create');\n\n return <ListCard\n title=\"resources.ruleSections.labels.card.title\"\n subtitle=\"resources.ruleSections.labels.card.subtitle\"\n icon={<BookOutlined />}\n reference=\"ruleSections\"\n target=\"officeId\"\n filter={{ seasonId }}\n sort={{\n field: ['order', 'code', 'name'],\n order: ['ASC', 'ASC', 'ASC'],\n }}\n addPosition=\"footer\"\n addButton={canAddSection && <AddRuleSectionButton initialValues={{ officeId: office?.id, seasonId }} />}\n rowsPerPageOptions={[]}\n perPage={99999}\n >\n <RuleSectionGrid expand={<RuleList office={office} />} />\n </ListCard>\n}\n","import React from 'react';\nimport { ArrayInput, GET_MANY_REFERENCE, NumberInput, SimpleForm, TextInput, useQuery, useRecordContext } from 'react-admin';\nimport { Grid } from '@material-ui/core'\n\nimport HorizontalFormIterator, { TransitionProps } from '../../common/ra/HorizontalFormIterator';\nimport Toolbar from '../../common/ra/Toolbar';\nimport SwitchInput from '../../common/inputs/SwitchInput';\nimport { ArrayI18nInput } from '../../common/inputs/I18nInput';\n\nimport { InfractionInput } from './InfractionInput';\n\nconst validate = values => {\n const errors = {};\n\n if (!values.infractionId) errors.infractionId = 'ra.validation.required'\n if (!values.officeId) errors.officeId = 'ra.validation.required'\n if (!values.seasonId) errors.seasonId = 'ra.validation.required'\n if (!values.name) errors.name = 'ra.validation.required'\n if (values.count == null) errors.count = 'ra.validation.required'\n\n return errors;\n}\n\nconst inputProps = {\n resource: 'infractionAccumulations',\n basePath: '/infractionAccumulations',\n variant: 'outlined',\n margin: 'none',\n fullWidth: true,\n}\n\nconst arrayInputProps = {\n resource: 'infractionAccumulations',\n basePath: '/infractionAccumulations',\n variant: 'outlined',\n margin: 'normal',\n fullWidth: true,\n}\n\nexport default ({ initialValues, office, ...props }) => {\n const option = useRecordContext();\n\n const enabled = option != null;\n const { data: members = [], loaded } = useQuery({\n type: GET_MANY_REFERENCE,\n resource: 'infractionAccumulationMembers',\n payload: {\n target: 'infractionAccumulations',\n id: option?.id,\n pagination: { page: 1, perPage: 999 },\n sort: { field: 'order', order: 'ASC' },\n filter: {}\n },\n }, { enabled })\n\n if (enabled && !loaded) return null;\n\n const values = { ...initialValues, members }\n return <SimpleForm initialValues={values} toolbar={<Toolbar />} validate={validate} {...props}>\n <Grid container spacing={2} fullWidth>\n <Grid item xs={12}>\n <TextInput source=\"name\" helperText=\"\" {...inputProps} />\n </Grid>\n <Grid item xs={12}>\n <ArrayI18nInput {...inputProps} />\n </Grid>\n <Grid item xs={12}>\n <ArrayInput source=\"members\" label=\"resources.infractionAccumulations.fields.members\" {...inputProps}>\n <HorizontalFormIterator disableReordering TransitionProps={TransitionProps}>\n <InfractionInput source=\"infractionId\" label=\"\" filter={{ officeId: office?.id, seasonId: initialValues?.seasonId }} {...arrayInputProps} />\n </HorizontalFormIterator>\n </ArrayInput>\n </Grid>\n <Grid item xs={12}>\n <NumberInput source=\"count\" helperText=\"\" {...inputProps} />\n </Grid>\n <Grid item xs={12}>\n <InfractionInput source=\"infractionId\" filter={{ officeId: office?.id, seasonId: initialValues?.seasonId }} {...inputProps} />\n </Grid>\n <Grid item xs={12}>\n <SwitchInput source=\"isReplacement\" helperText=\"resources.infractionAccumulations.helpers.isReplacement\" {...inputProps} />\n </Grid>\n </Grid>\n </SimpleForm>;\n}\n\n","import React, { useState } from 'react';\nimport { useTranslate } from 'react-admin';\nimport { Button } from '@material-ui/core';\nimport { Add } from '@material-ui/icons';\n\nimport { DialogDatagrid } from '../../common/dialogs/DialogDatagrid';\nimport { CreateResourceDialog, EditResourceDialog } from '../../common/dialogs/ResourceDialog';\n\nimport InfractionAccumulationForm from './InfractionAccumulationForm';\n\nconst AddInfractionAccumulationDialog = ({ office, ...props }) =>\n <CreateResourceDialog label=\"resources.infractionAccumulations.actions.add\" resource=\"infractionAccumulations\" basePath=\"/infractionAccumulations\" {...props}>\n <InfractionAccumulationForm office={office} />\n </CreateResourceDialog>\n\n\nconst EditInfractionAccumulationDialog = ({ office, ...props }) =>\n <EditResourceDialog label=\"resources.infractionAccumulations.labels.edit\" resource=\"infractionAccumulations\" basePath=\"/infractionAccumulations\" {...props}>\n <InfractionAccumulationForm office={office} />\n </EditResourceDialog>\n\nexport const AddInfractionAccumulationButton = ({ size, variant, ...props }) => {\n const [ isOpen, setOpen ] = useState(false);\n const translate = useTranslate();\n return <>\n <Button color=\"primary\" size={size} variant={variant} startIcon={<Add />} onClick={() => setOpen(true)}>\n {translate('resources.infractionAccumulations.actions.add')}\n </Button>\n <AddInfractionAccumulationDialog isOpen={isOpen} handleClose={() => setOpen(false)} {...props} />\n </>\n}\n\nexport const InfractionAccumulationDatagrid = props => <DialogDatagrid dialog={EditInfractionAccumulationDialog} {...props} />\n","import React from 'react';\nimport { FunctionField, GET_LIST, TextField, useQuery, useRecordContext } from 'react-admin';\n\nimport { TextLocaleField } from '../../common/fields/TextLocaleField';\n\nimport { InfractionAccumulationDatagrid } from './InfractionAccumulationModal';\nimport { InfractionField } from './InfractionField';\n\nconst useInfractionAccumulations = officeId => useQuery({\n type: GET_LIST,\n resource: 'infractionAccumulations',\n payload: {\n filter: {\n officeId,\n _include: [\n {\n relation: 'members',\n scope: {\n include: [\n { relation: 'infraction' },\n ],\n },\n },\n ] }\n },\n}, {\n enabled: officeId != null,\n})\n\nexport const InfractionAccumulationGrid = props => {\n const office = useRecordContext();\n const { data: infractionAccumulations } = useInfractionAccumulations(office?.id);\n\n if (!infractionAccumulations) return null\n\n const renderCodes = record => {\n const infractionAccumulationMembers = infractionAccumulations.find(({ id }) => id === record.id)?.members;\n if (!infractionAccumulationMembers) return null;\n\n return infractionAccumulationMembers.map(({ infraction } = {}) => infraction?.code).join(', ');\n }\n\n return <InfractionAccumulationDatagrid size=\"medium\" {...props}>\n <TextLocaleField source=\"name\" />\n <FunctionField source=\"rule\" label=\"resources.infractionAccumulations.fields.members\" render={renderCodes} />\n <TextField source=\"count\" />\n <InfractionField source=\"infractionId\" />\n </InfractionAccumulationDatagrid>;\n}\n","import React from 'react';\nimport { useRecordContext } from 'react-admin';\nimport { FontDownloadOutlined } from '@material-ui/icons';\n\nimport ListCard from '../../../common/cards/ListCard';\nimport { isAuthorized } from '../../../common/Authorize';\nimport { useSeason } from '../../../common/inputs/SeasonSelector';\n\nimport { InfractionAccumulationGrid } from '../../infractions/InfractionAccumulationGrid';\nimport { AddInfractionAccumulationButton } from '../../infractions/InfractionAccumulationModal';\n\nexport default props => {\n const office = useRecordContext(props);\n const seasonId = useSeason();\n\n const canAddType = isAuthorized(office, 'infractionAccumulations', 'create');\n\n return <ListCard\n title=\"resources.infractionAccumulations.labels.card.title\"\n subtitle=\"resources.infractionAccumulations.labels.card.subtitle\"\n icon={<FontDownloadOutlined />}\n collapsable\n reference=\"infractionAccumulations\"\n target=\"officeId\"\n filter={{ seasonId }}\n sort={{\n field: ['name'],\n order: ['ASC'],\n }}\n addButton={canAddType && <AddInfractionAccumulationButton initialValues={{ officeId: office?.id, seasonId }} office={office} />}\n >\n <InfractionAccumulationGrid rowOptions={{ office }} office={office} />\n </ListCard>\n}\n","import React from 'react';\nimport { ReferenceInput, ReferenceArrayInput, useLocale, RecordContextProvider } from 'react-admin';\n\nimport { translateApiProperty } from '@hisports/common';\n\nimport AutocompleteInput from '../../common/inputs/AutocompleteInput';\nimport AutocompleteSuggestion from '../../common/inputs/AutocompleteSuggestion'\nimport { OfficeField } from '../offices/OfficeField';\n\nconst filterSanction = name => ({ name })\n\nexport const SanctionSuggestion = ({ suggestion: sanction, query, isHighlighted, includeOffice = false, ...props }) => {\n const locale = useLocale();\n const primary = `${sanction?.code ? `${sanction.code} - ` : ''}${translateApiProperty(sanction, 'name', locale)}`;\n const secondary = includeOffice ? <OfficeField source=\"officeId\" variant=\"inherit\" /> : null\n\n return <RecordContextProvider value={sanction}>\n <AutocompleteSuggestion primary={primary} secondary={secondary} />\n </RecordContextProvider>\n}\n\nexport const SanctionInput = ({ helperText, multiple, includeOffice = false, ...props }) => {\n const Input = multiple ? ReferenceArrayInput : ReferenceInput;\n\n const getOptionText = sanction => {\n return [ sanction.code, sanction.name ].filter(Boolean).join(' - ')\n }\n\n return <Input\n reference=\"sanctions\"\n filterToQuery={filterSanction}\n sort={{ field: ['name'], order: ['ASC'] }}\n perPage={25}\n {...props}\n >\n <AutocompleteInput\n optionText={getOptionText}\n suggestionComponent={SanctionSuggestion}\n options={{ suggestionComponentProps: { includeOffice } }}\n filterKeys={['name', 'code']}\n disableSort\n multiple={multiple}\n helperText={helperText}\n />\n </Input>\n}\n","import React from 'react'\nimport { BooleanInput, NumberInput, SimpleForm, TextInput } from 'react-admin';\nimport { Grid } from '@material-ui/core'\n\nimport Toolbar from '../../common/ra/Toolbar';\nimport { ArrayI18nInput } from '../../common/inputs/I18nInput';\nimport { SanctionPositionGroupInput } from '../../common/inputs/EnumInputs';\nimport { useSeason } from '../../common/inputs/SeasonSelector';\n\nimport { RuleSectionInput } from '../infractions/RuleSectionInput';\nimport { SanctionInput } from './SanctionInput';\nimport { usePermissions } from '../../http';\n\nconst validate = values => {\n const errors = {};\n\n if (!values.name) errors.name = 'ra.validation.required'\n if (!values.officeId) errors.officeId = 'ra.validation.required'\n if (!values.positionGroups || !values.positionGroups.length) errors.positionGroups = 'ra.validation.required';\n\n if (values.accumulationCount == null) {\n errors.accumulationCount = 'ra.validation.required'\n } else if (values.accumulationCount <= 0) {\n errors.accumulationCount = 'ra.validation.greater_than_zero'\n }\n\n if (values.order == null) {\n errors.order = 'ra.validation.required'\n } else if (values.order <= 0) {\n errors.order = 'ra.validation.greater_than_zero'\n }\n return errors;\n}\n\nconst inputProps = {\n resource: 'sanctions',\n basePath: '/sanctions',\n variant: 'outlined',\n margin: 'none',\n fullWidth: true,\n}\n\nconst ParentSanctionInput = ({ office, seasonId, ...props }) => {\n // hide sanctions of current office\n const hasParentOffice = !!office?.parentId\n const getOptionDisabled = sanction => {\n if (sanction?.officeId === office?.id) return true\n return false\n }\n\n return <SanctionInput\n source=\"parentId\"\n filter={{ seasonId, effectiveOffices: office?.id, includeParents: true, _scope: 'Parents' }}\n helperText=\"resources.sanctions.helpers.parentId\"\n includeOffice\n disabled={!hasParentOffice}\n getOptionDisabled={getOptionDisabled}\n hideDisabled\n {...props}\n />\n}\n\nexport default ({ office, initialValues, ...props }) => {\n const seasonId = useSeason();\n const permissions = usePermissions();\n\n const isSystemUser = permissions.some(p => p.roleType === 'System');\n\n return <SimpleForm toolbar={<Toolbar />} validate={validate} initialValues={{ isActive: true, ...initialValues }} {...props}>\n <Grid container spacing={2} fullWidth>\n <Grid item xs={12} md={8}>\n <TextInput source=\"name\" helperText=\"\" {...inputProps} />\n </Grid>\n <Grid item xs={12} md={4}>\n <TextInput source=\"code\" helperText=\"ra.message.optional\" {...inputProps} />\n </Grid>\n <Grid item xs={12}>\n <ArrayI18nInput {...inputProps} />\n </Grid>\n <Grid item xs={12}>\n <RuleSectionInput source=\"sectionId\" filter={{ seasonId }} includeOffice {...inputProps} />\n </Grid>\n <Grid item xs={12} md={6}>\n <NumberInput source=\"priority\" helperText=\"ra.message.optional\" {...inputProps} />\n </Grid>\n <Grid item xs={12} md={6}>\n <NumberInput source=\"order\" helperText=\"\" {...inputProps} />\n </Grid>\n <Grid item xs={12}>\n <ParentSanctionInput source=\"parentId\" office={office} seasonId={seasonId} {...inputProps} />\n </Grid>\n <Grid item xs={12} md={6}>\n <NumberInput source=\"accumulationCount\" {...inputProps} />\n </Grid>\n <Grid item xs={12} md={6}>\n <SanctionPositionGroupInput source=\"positionGroups\" select multiple {...inputProps} />\n </Grid>\n <Grid item xs={12} md={6}>\n <BooleanInput disabled={!isSystemUser} source=\"isActive\" {...inputProps} />\n </Grid>\n </Grid>\n </SimpleForm>\n}\n","import React, { useState } from 'react';\nimport { useTranslate } from 'react-admin';\nimport { Button } from '@material-ui/core';\nimport { Add } from '@material-ui/icons';\n\nimport { DialogDatagrid } from '../../common/dialogs/DialogDatagrid';\nimport { CreateResourceDialog, EditResourceDialog } from '../../common/dialogs/ResourceDialog';\n\nimport SanctionForm from './SanctionForm';\n\nconst AddSanctionDialog = ({ office, ...props }) =>\n <CreateResourceDialog label=\"resources.sanctions.actions.add\" resource=\"sanctions\" basePath=\"/sanctions\" {...props}>\n <SanctionForm office={office} />\n </CreateResourceDialog>\n\n\nconst EditSanctionDialog = ({ office, ...props }) =>\n <EditResourceDialog label=\"resources.sanctions.labels.edit\" resource=\"sanctions\" basePath=\"/sanctions\" {...props}>\n <SanctionForm office={office} />\n </EditResourceDialog>\n\nexport const AddSanctionButton = ({ size, variant, ...props }) => {\n const [ isOpen, setOpen ] = useState(false);\n const translate = useTranslate();\n return <>\n <Button color=\"primary\" size={size} variant={variant} startIcon={<Add />} onClick={() => setOpen(true)}>\n {translate('resources.sanctions.actions.add')}\n </Button>\n <AddSanctionDialog isOpen={isOpen} handleClose={() => setOpen(false)} {...props} />\n </>\n}\n\nexport const SanctionDatagrid = props => <DialogDatagrid dialog={EditSanctionDialog} {...props} />\n","import React, { useMemo, useRef } from 'react'\nimport { GET_LIST, SimpleForm, useQuery } from 'react-admin';\nimport { Grid } from '@material-ui/core'\nimport { useFormState } from 'react-final-form';\nimport createCalculator from 'final-form-calculate';\nimport { isEmpty } from 'lodash';\n\nimport { getInfractionOptionCodes } from '@hisports/scoresheet/src/util';\n\nimport Toolbar from '../../common/ra/Toolbar';\nimport { EnumInput } from '../../common/inputs/EnumInputs';\nimport { useSeason } from '../../common/inputs/SeasonSelector';\n\nimport { SanctionInput } from './SanctionInput';\nimport { InfractionInput } from '../infractions/InfractionInput';\nimport { RuleInput } from '../infractions/RuleInput';\n\nconst validate = values => {\n const errors = {};\n\n if (!values.sanctionId) errors.sanctionId = 'ra.validation.required';\n if (!values.optionId && !values.infractionId) {\n errors.optionId = 'ra.validation.required';\n errors.infractionId = 'ra.validation.required';\n }\n\n return errors;\n}\n\nconst inputProps = {\n resource: 'sanctionMembers',\n basePath: '/sanctionMembers',\n variant: 'outlined',\n margin: 'none',\n fullWidth: true,\n}\n\nconst useRuleOptions = ruleId => useQuery({\n type: GET_LIST,\n resource: 'ruleOptions',\n payload: {\n filter: { ruleId, _include: ['rule', 'infractions', 'members'] }\n },\n}, {\n enabled: ruleId != null,\n})\n\nconst RuleInfractionInput = props => {\n const { values: { ruleId, optionId } } = useFormState();\n return <InfractionInput {...props} filter={{ ruleId }} disabled={optionId || !ruleId} />\n}\n\nconst OptionInputEnum = props => {\n const { values: { ruleId, infractionId } } = useFormState();\n const { data: ruleOptions, loading } = useRuleOptions(ruleId);\n\n const choices = useMemo(() => ruleOptions?.filter(option => option.ruleId === ruleId).map((option) => ({\n id: option.id,\n name: option.name,\n description: getInfractionOptionCodes(option, option.infractions).join(' + '),\n })), [ruleOptions, ruleId]);\n\n return <EnumInput\n choices={choices}\n optionDescription=\"description\"\n filterKeys={['name']}\n disabled={loading || !ruleId || infractionId}\n {...props}\n />\n}\n\nexport default ({ office, ...props }) => {\n const seasonId = useSeason();\n\n const decorators = useRef([createCalculator({\n field: 'ruleId',\n updates: {\n optionId: (ruleId, values, prevValues) => {\n if (!isEmpty(prevValues) && prevValues.ruleId != ruleId) {\n return null;\n }\n return values.optionId;\n },\n infractionId: (ruleId, values, prevValues) => {\n if (!isEmpty(prevValues) && prevValues.ruleId != ruleId) {\n return null;\n }\n return values.infractionId;\n }\n }\n })])\n\n return <SimpleForm toolbar={<Toolbar />} validate={validate} decorators={decorators.current} {...props}>\n <Grid container spacing={2} fullWidth>\n <Grid item xs={12}>\n <SanctionInput source=\"sanctionId\" filter={{ seasonId }} disabled {...inputProps} />\n </Grid>\n <Grid item xs={12} md={12}>\n <RuleInput\n source=\"ruleId\"\n label=\"resources.sanctionMembers.labels.rule\"\n filter={{ _include: 'section', seasonId }}\n groupBy={({ section }) => section?.name}\n alwaysGroup\n includeOffice\n helperText=\"\"\n {...inputProps}\n />\n </Grid>\n <Grid item xs={12} md={6}>\n <OptionInputEnum source=\"optionId\" office={office} {...inputProps} />\n </Grid>\n <Grid item xs={12} md={6}>\n <RuleInfractionInput source=\"infractionId\" office={office} {...inputProps} />\n </Grid>\n </Grid>\n </SimpleForm>\n}\n","import React, { useState } from 'react';\nimport { useTranslate } from 'react-admin';\nimport { Button } from '@material-ui/core';\nimport { Add } from '@material-ui/icons';\n\nimport { DialogDatagrid } from '../../common/dialogs/DialogDatagrid';\nimport { CreateResourceDialog, EditResourceDialog } from '../../common/dialogs/ResourceDialog';\n\nimport SanctionMemberForm from './SanctionMemberForm';\n\nconst AddSanctionMemberDialog = ({ office, ...props }) =>\n <CreateResourceDialog label=\"resources.sanctionMembers.actions.add\" resource=\"sanctionMembers\" basePath=\"/sanctionMembers\" {...props}>\n <SanctionMemberForm office={office} />\n </CreateResourceDialog>\n\nconst EditSanctionMemberDialog = ({ sanctionMembers, initialValues, office, ...props }) => {\n const sanctionMember = sanctionMembers.find(({ id }) => id === props.id);\n const ruleId = sanctionMember?.option?.rule?.id || sanctionMember?.infraction?.rule?.id;\n\n return <EditResourceDialog label=\"resources.sanctionMembers.labels.edit\" resource=\"sanctionMembers\" basePath=\"/sanctionMembers\" initialValues={{ ...initialValues, ruleId }} {...props} >\n <SanctionMemberForm office={office} />\n </EditResourceDialog>\n}\n\n\nexport const AddSanctionMemberButton = ({ size, variant, ...props }) => {\n const [ isOpen, setOpen ] = useState(false);\n const translate = useTranslate();\n return <>\n <Button color=\"primary\" size={size} variant={variant} startIcon={<Add />} onClick={() => setOpen(true)}>\n {translate('resources.sanctionMembers.actions.add')}\n </Button>\n <AddSanctionMemberDialog isOpen={isOpen} handleClose={() => setOpen(false)} {...props} />\n </>\n}\n\nexport const SanctionMemberDatagrid = props => <DialogDatagrid dialog={EditSanctionMemberDialog} {...props} />\n","import React, { useEffect } from 'react'\nimport { BooleanInput, NumberInput, SimpleForm, useTranslate } from 'react-admin';\nimport { useForm, useFormState } from 'react-final-form';\nimport { Grid, InputAdornment, makeStyles, Tooltip } from '@material-ui/core'\nimport { InfoOutlined } from '@material-ui/icons';\n\nimport Toolbar from '../../common/ra/Toolbar';\nimport { DurationTypeInput } from '../../common/inputs/EnumInputs';\nimport { useSport } from '../../http';\n\nimport { SanctionInput } from './SanctionInput';\n\nconst validate = (values, translate) => {\n const errors = {};\n\n if (!values.offense) errors.offense = 'ra.validation.required'\n if (!values.sanctionId) errors.sanctionId = 'ra.validation.required'\n if (values.durationType === 'Definite') {\n if (values.games == undefined) {\n errors.games = 'ra.validation.required';\n } else if (values.games < 1) {\n errors.games = translate('ra.validation.minValue', { min: 1 });\n }\n }\n\n return errors;\n}\n\nconst inputProps = {\n resource: 'sanctionOffenses',\n basePath: '/sanctionOffenses',\n variant: 'outlined',\n margin: 'none',\n fullWidth: true,\n}\n\nconst useStyles = makeStyles(theme => ({\n tooltip: {\n cursor: 'pointer',\n marginLeft: theme.spacing(1),\n }\n}))\n\nconst ToolTipNumberInput = ({ tooltipText, ...props }) => {\n const classes = useStyles();\n const translate = useTranslate();\n\n return <NumberInput\n InputProps={{\n endAdornment: <InputAdornment className={classes.tooltip}>\n <Tooltip title={translate(tooltipText, { _: tooltipText })}>\n <InfoOutlined color=\"primary\" />\n </Tooltip>\n </InputAdornment>\n }}\n {...props}\n />\n}\n\nconst SanctionOffenseForm = props => {\n const translate = useTranslate();\n const { values } = useFormState();\n const { change, batch } = useForm();\n const sport = useSport();\n\n const isIndefinite = values.durationType === 'Indefinite';\n\n useEffect(() => {\n if (isIndefinite) {\n batch(() => {\n change('games', null);\n change('lastMinutesGames', null);\n change('injuryGames', null);\n change('injuryDays', null);\n change('days', null);\n change('lastMinutesDays', null);\n })\n }\n }, [isIndefinite, change, batch]);\n\n return <Grid container spacing={2} fullWidth>\n <Grid item xs={12} md={4}>\n <NumberInput source=\"offense\" helperText=\"\" {...inputProps} />\n </Grid>\n <Grid item xs={12} md={8}>\n <SanctionInput source=\"sanctionId\" disabled helperText=\"\" {...inputProps} />\n </Grid>\n <Grid item xs={12}>\n <DurationTypeInput source=\"durationType\" radio helperText=\"\" {...inputProps} />\n </Grid>\n <Grid item xs={12} md={6}>\n <ToolTipNumberInput source=\"games\" tooltipText=\"resources.sanctionOffenses.helpers.games\" disabled={isIndefinite} {...inputProps} />\n </Grid>\n <Grid item xs={12} md={6}>\n <ToolTipNumberInput source=\"days\" tooltipText=\"resources.sanctionOffenses.helpers.days\" helperText=\"ra.message.unsupported\" disabled {...inputProps} />\n </Grid>\n <Grid item xs={12} md={6}>\n <ToolTipNumberInput source=\"lastMinutesGames\" tooltipText={translate(\"resources.sanctionOffenses.helpers.lastMinutesGames\", { minutes: 10 })} helperText={sport === 'Hockey' ? \"ra.message.optional\" : \"ra.message.unsupported\"} disabled={isIndefinite || sport !== 'Hockey'} {...inputProps} />\n </Grid>\n <Grid item xs={12} md={6}>\n <ToolTipNumberInput source=\"lastMinutesDays\" tooltipText={translate(\"resources.sanctionOffenses.helpers.lastMinutesDays\", { minutes: 10 })} helperText=\"ra.message.unsupported\" disabled {...inputProps} />\n </Grid>\n <Grid item xs={12} md={6}>\n <ToolTipNumberInput source=\"injuryGames\" tooltipText=\"resources.sanctionOffenses.helpers.injuryGames\" helperText=\"ra.message.optional\" disabled={isIndefinite} {...inputProps} />\n </Grid>\n <Grid item xs={12} md={6}>\n <ToolTipNumberInput source=\"injuryDays\" tooltipText=\"resources.sanctionOffenses.helpers.injuryDays\" helperText=\"ra.message.unsupported\" disabled {...inputProps} />\n </Grid>\n <Grid item xs={12}>\n <BooleanInput source=\"requireDisciplineCommittee\" tooltipText=\"resources.sanctionOffenses.helpers.requireDisciplineCommittee\" {...inputProps} />\n </Grid>\n </Grid>\n}\n\nexport default props => {\n const translate = useTranslate();\n return <SimpleForm toolbar={<Toolbar />} validate={values => validate(values, translate)} {...props}>\n <SanctionOffenseForm {...props} />\n </SimpleForm>\n}\n","import React, { useState } from 'react';\nimport { useTranslate } from 'react-admin';\nimport { Button } from '@material-ui/core';\nimport { Add } from '@material-ui/icons';\n\nimport { DialogDatagrid } from '../../common/dialogs/DialogDatagrid';\nimport { CreateResourceDialog, EditResourceDialog } from '../../common/dialogs/ResourceDialog';\n\nimport SanctionOffenseForm from './SanctionOffenseForm';\n\nconst AddSanctionOffenseDialog = props =>\n <CreateResourceDialog label=\"resources.sanctionOffenses.actions.add\" resource=\"sanctionOffenses\" basePath=\"/sanctionOffenses\" {...props}>\n <SanctionOffenseForm />\n </CreateResourceDialog>\n\nconst EditSanctionOffenseDialog = props =>\n <EditResourceDialog label=\"resources.sanctionOffenses.labels.edit\" resource=\"sanctionOffenses\" basePath=\"/sanctionOffenses\" {...props}>\n <SanctionOffenseForm />\n </EditResourceDialog>\n\nexport const AddSanctionOffenseButton = ({ size, variant, ...props }) => {\n const [ isOpen, setOpen ] = useState(false);\n const translate = useTranslate();\n return <>\n <Button color=\"primary\" size={size} variant={variant} startIcon={<Add />} onClick={() => setOpen(true)}>\n {translate('resources.sanctionOffenses.actions.add')}\n </Button>\n <AddSanctionOffenseDialog isOpen={isOpen} handleClose={() => setOpen(false)} {...props} />\n </>\n}\n\nexport const SanctionOffenseDatagrid = props => <DialogDatagrid dialog={EditSanctionOffenseDialog} {...props} />\n","import React from 'react'\nimport { TextField, FunctionField, useTranslate, BooleanField } from 'react-admin'\n\nimport { SanctionOffenseDatagrid } from './SanctionOffenseModal'\n\nconst renderOptionalField = (record, source) => record[source] ? record[source] : '-';\n\nexport const SanctionOffenseGrid = props => {\n const translate = useTranslate();\n\n return <SanctionOffenseDatagrid size=\"medium\" {...props} >\n <TextField source=\"offense\" />\n <FunctionField source=\"durationType\" render={({ durationType }) => translate(`resources.sanctions.values.durationType.${durationType}`, { _: durationType }) } />\n <FunctionField source=\"games\" render={renderOptionalField} />\n <FunctionField source=\"lastMinutesGames\" render={renderOptionalField} />\n <FunctionField source=\"injuryGames\" render={renderOptionalField} />\n <FunctionField source=\"injuryDays\" render={renderOptionalField} />\n <FunctionField source=\"days\" render={renderOptionalField} />\n <FunctionField source=\"lastMinutesDays\" render={renderOptionalField} />\n <BooleanField source=\"requireDisciplineCommittee\" />\n </SanctionOffenseDatagrid>\n}\n","import React, { Fragment } from 'react'\nimport { BooleanField, FunctionField, GET_LIST, ReferenceField, TextField, useLocale, useQuery, useRecordContext, useTranslate } from 'react-admin';\nimport { makeStyles, Tooltip, Typography } from '@material-ui/core';\nimport { GavelOutlined, InfoOutlined } from '@material-ui/icons';\n\nimport { translateApiProperty } from '@hisports/common';\nimport { getInfractionOptionCodes } from '@hisports/scoresheet/src/util';\n\nimport { TextLocaleField } from '../../../common/fields/TextLocaleField';\nimport { useSeason } from '../../../common/inputs/SeasonSelector';\nimport { isAuthorized } from '../../../common/Authorize';\nimport ListCard from '../../../common/cards/ListCard';\nimport { OfficeField } from '../OfficeField';\n\nimport { AddSanctionButton, SanctionDatagrid } from '../../sanctions/SanctionModal';\nimport { AddSanctionMemberButton, SanctionMemberDatagrid } from '../../sanctions/SanctionMemberModal';\nimport { AddSanctionOffenseButton } from '../../sanctions/SanctionOffenseModal';\nimport { SanctionOffenseGrid } from '../../sanctions/SanctionOffenseGrid';\nimport { InfractionField } from '../../infractions/InfractionField';\n\nconst useStyles = makeStyles(theme => ({\n priorityLabel: {\n display: 'flex',\n alignItems: 'center',\n gap: theme.spacing(1),\n }\n}))\n\nconst getRuleCode = rule => rule?.code ? `${rule.code} ` : '';\n\nconst useSanctionMembers = sanctionId => useQuery({\n type: GET_LIST,\n resource: 'sanctionMembers',\n payload: {\n filter: {\n sanctionId,\n _include: [\n {\n relation: 'option',\n scope: {\n include: [\n { relation: 'infractions' },\n { relation: 'rule' },\n { relation: 'members' },\n ],\n },\n },\n {\n relation: 'infraction',\n scope: {\n include: [\n { relation: 'rule' },\n ],\n },\n },\n ] }\n },\n}, {\n enabled: sanctionId != null,\n})\n\nconst PriorityLabel = () => {\n const classes = useStyles();\n const translate = useTranslate();\n\n return <div className={classes.priorityLabel}>\n {translate('resources.sanctions.fields.priority')}\n <Tooltip title={<Typography variant=\"body2\">{translate('resources.sanctions.helpers.priority')}</Typography>}>\n <InfoOutlined color=\"primary\" fontSize=\"small\" />\n </Tooltip>\n </div>\n}\n\nconst RuleOptionField = ({ variant = 'body2', ...props }) => {\n return <ReferenceField basePath=\"/ruleOptions\" resource=\"ruleOptions\" reference=\"ruleOptions\" {...props} link={false}>\n <TextLocaleField source=\"name\" variant={variant} />\n </ReferenceField>\n}\n\nconst RuleSectionField = ({ variant = 'body2', ...props }) => {\n return <ReferenceField basePath=\"/ruleSections\" resource=\"ruleSections\" reference=\"ruleSections\" {...props} link={false}>\n <FunctionField source=\"name\" render={rule => <>\n {getRuleCode(rule)}\n <TextLocaleField source=\"name\" variant={variant} />\n </>} />\n </ReferenceField>\n}\n\nconst NameField = props => {\n const locale = useLocale();\n return <FunctionField {...props} render={record => translateApiProperty(record, 'name', locale)} />;\n}\n\nconst ParentSanctionCode = props =>\n <ReferenceField basePath=\"/sanctions\" resource=\"sanctions\" reference=\"sanctions\" {...props} link={false}>\n <TextField source=\"code\" />\n </ReferenceField>\n\nconst ParentSanctionOffice = props =>\n <ReferenceField basePath=\"/sanctions\" resource=\"sanctions\" reference=\"sanctions\" {...props} link={false}>\n <OfficeField source=\"officeId\" />\n </ReferenceField>\n\nconst SanctionMemberGrid = ({ rowOptions, ...props }) => {\n const sanction = useRecordContext();\n const locale = useLocale();\n const { data: sanctionMembers } = useSanctionMembers(sanction?.id);\n\n if (!sanctionMembers) return null;\n\n const renderRule = record => {\n const sanctionMember = sanctionMembers.find(({ id }) => id === record.id)\n const rule = sanctionMember?.option?.rule || sanctionMember?.infraction?.rule\n if (!rule) return null;\n\n return `${getRuleCode(rule)} ${translateApiProperty(rule, 'name', locale)}`;\n }\n const renderCodes = record => {\n const sanctionMember = sanctionMembers.find(({ id }) => id === record.id)\n const infractions = sanctionMember?.option?.infractions || [sanctionMember?.infraction].filter(Boolean);\n if (!infractions) return null;\n\n return getInfractionOptionCodes(sanctionMember?.option, infractions).join(' + ');\n }\n\n return <SanctionMemberDatagrid rowOptions={{ sanctionMembers, ...rowOptions }} {...props} >\n <FunctionField source=\"rule\" label=\"resources.sanctionMembers.labels.rule\" render={renderRule} />\n <RuleOptionField source=\"optionId\" />\n <InfractionField source=\"infractionId\" />\n <FunctionField source=\"code\" label=\"resources.sanctionMembers.labels.code\" render={renderCodes} />\n </SanctionMemberDatagrid>;\n}\n\nconst SanctionGrid = ({ office, ...props }) => {\n const translate = useTranslate()\n const hasParentOffice = !!office?.parentId\n\n const renderPositionGroups = ({ positionGroups = [] }) =>\n positionGroups?.map(positionGroup => translate(`resources.sanctions.values.positionGroup.${positionGroup}`, { _: positionGroup })).join(', ');\n\n return <SanctionDatagrid {...props}>\n <TextField source=\"code\" />\n <NameField source=\"name\" />\n <RuleSectionField source=\"sectionId\" />\n <TextField source=\"accumulationCount\" />\n <FunctionField source=\"positionGroups\" render={renderPositionGroups} />\n {hasParentOffice && <ParentSanctionCode source=\"parentId\" label={translate('resources.sanctions.labels.parent_code')} />}\n {hasParentOffice && <ParentSanctionOffice source=\"parentId\" label={translate('resources.sanctions.labels.parent_office')} />}\n <TextField source=\"priority\" label={<PriorityLabel />} sortable={false} />\n <TextField source=\"order\" />\n <BooleanField source=\"isActive\" />\n </SanctionDatagrid>;\n}\n\nconst SanctionOffenseList = ({ office, ...props }) => {\n const sanction = useRecordContext(props);\n\n const canAddSanctionOffense = isAuthorized(office, 'sanctionOffenses', 'create');\n\n return <ListCard\n reference=\"sanctionOffenses\"\n resource=\"sanctionOffenses\"\n target=\"sanctionId\"\n sort={{ field: ['offense'], order: ['ASC'] }}\n perPage={25}\n rowsPerPageOptions={[]}\n addPosition=\"footer\"\n addButton={canAddSanctionOffense && <AddSanctionOffenseButton initialValues={{ sanctionId: sanction?.id, durationType: 'Definite' }} />}\n component={Fragment}\n >\n <SanctionOffenseGrid />\n </ListCard>\n}\n\nconst SanctionMemberList = ({ office, ...props }) => {\n const sanction = useRecordContext(props);\n\n const canAddSanctionMember = isAuthorized(office, 'sanctionMembers', 'create');\n\n return <ListCard\n reference=\"sanctionMembers\"\n resource=\"sanctionMembers\"\n target=\"sanctionId\"\n sort={{ field: ['optionId', 'infractionId'], order: ['ASC', 'ASC'] }}\n perPage={25}\n rowsPerPageOptions={[]}\n addPosition=\"footer\"\n addButton={canAddSanctionMember && <AddSanctionMemberButton initialValues={{ sanctionId: sanction?.id }} office={office} />}\n component={Fragment}\n >\n <SanctionMemberGrid rowOptions={{ office }} office={office} />\n </ListCard>\n}\n\nconst SanctionDetails = ({ office, ...props }) => {\n const translate = useTranslate()\n return <>\n <Typography variant=\"subtitle2\">{translate('resources.sanctionMembers.labels.card.title')}</Typography>\n <Typography variant=\"body2\" color=\"textSecondary\">{translate('resources.sanctionMembers.labels.card.subtitle')}</Typography>\n <SanctionMemberList office={office} {...props} />\n\n <Typography variant=\"subtitle2\">{translate('resources.sanctionOffenses.labels.card.title')}</Typography>\n <Typography variant=\"body2\" color=\"textSecondary\">{translate('resources.sanctionOffenses.labels.card.subtitle')}</Typography>\n <SanctionOffenseList office={office} {...props} />\n </>\n}\n\nexport default props => {\n const office = useRecordContext(props);\n const seasonId = useSeason();\n\n const canAddSanction = isAuthorized(office, 'sanctions', 'create');\n\n return <ListCard\n title=\"resources.sanctions.labels.card.title\"\n subtitle=\"resources.sanctions.labels.card.subtitle\"\n collapsable\n icon={<GavelOutlined />}\n reference=\"sanctions\"\n target=\"officeId\"\n filter={{ seasonId }}\n sort={{ field: ['section.order, order, code'], order: ['ASC', 'ASC', 'ASC'] }}\n addPosition=\"footer\"\n addButton={canAddSanction && <AddSanctionButton initialValues={{ officeId: office?.id, seasonId }} office={office} />}\n rowsPerPageOptions={[]}\n perPage={99999}\n >\n <SanctionGrid expand={<SanctionDetails office={office} />} rowOptions={{ office }} office={office} />\n </ListCard>\n}\n\n","import React, { useState } from 'react';\nimport { useRecordContext, useTranslate } from 'react-admin';\nimport { Button } from '@material-ui/core';\nimport { Edit } from '@material-ui/icons';\n\nimport { EditResourceDialog } from '../../common/dialogs/ResourceDialog';\n\nimport OfficeSettingsForm from './OfficeSettingsForm';\n\nconst EditOfficeSettingsDialog = props => {\n const office = useRecordContext();\n return <EditResourceDialog label=\"resources.officeSettings.labels.edit_office\" maxWidth=\"md\" disableDelete resource=\"officeSettings\" basePath=\"/officeSettings\" canDelete={false} {...props}>\n <OfficeSettingsForm office={office} />\n </EditResourceDialog>\n}\n\nexport const UpdateOfficeSettingsButton = ({ officeId, ...props }) => {\n const translate = useTranslate();\n const [ isOpen, setOpen ] = useState(false);\n\n return <>\n <Button color=\"primary\" size=\"small\" startIcon={<Edit />} onClick={() => setOpen(true)}>\n {translate('resources.officeSettings.actions.edit')}\n </Button>\n <EditOfficeSettingsDialog id={officeId} isOpen={isOpen} handleClose={() => setOpen(false)} {...props} />\n </>\n}\n","import React from 'react';\nimport { LinearProgress, RecordContextProvider, useTranslate } from 'react-admin';\nimport { Table, TableBody } from '@material-ui/core';\nimport { isEmpty } from 'lodash';\n\nimport { useOfficeSettingsWithStore } from '.';\n\nimport Row from '../../common/cards/TableRow';\nimport FunctionField from '../../common/fields/FunctionField';\nimport { useSport } from '../../http';\n\nconst renderPoints = (settings, source, resource, translate) => {\n const { win, loss, tie } = settings.points.Team\n const result = translate('resources.officeSettings.fields.points.preview', { win, loss, tie })\n\n return result;\n}\n\nconst renderStandingOrder = (settings, source, resource, translate) => {\n const standingsOrder = settings?.standingsOrder[source];\n\n if (isEmpty(standingsOrder)) return '-';\n\n return <ul style={{ listStyleType: 'decimal', paddingLeft: '15px', margin: 0 }}>\n {standingsOrder.map((standing) => (\n <li key={standing.property}>\n {standing.property ? `${translate(`resources.officeSettings.labels.standings_order.${standing.property}`)} ` : ''}\n {standing.order}\n {standing.type ? ` (${translate(`resources.officeSettings.labels.standings_type.${standing.type}`)})` : ''}\n </li>\n ))}\n </ul>\n};\n\nconst renderEnforcement = (settings, source, resource, translate) => {\n const enforcement = settings[source];\n if (!enforcement) return '-';\n\n const enforcementValue = translate(`resources.officeSettings.values.enforcement.${enforcement.toLowerCase()}`)\n\n return <div>{translate(`resources.officeSettings.fields.enforcements.preview.${source}`, { enforcementValue })}</div>\n};\n\nconst renderReports = (settings, source, resource, translate) => {\n const reports = settings[source];\n if (isEmpty(reports)) return '-';\n\n const values = reports.map((value) => {\n return translate(`resources.officeSettings.values.reports.${value.toLowerCase()}`)\n })\n\n return values.join(', ')\n};\n\nexport const OfficeSettingsField = ({ officeId }) => {\n const translate = useTranslate();\n const sport = useSport();\n const { data: officeSettings, loading, error } = useOfficeSettingsWithStore(officeId);\n\n if (loading) return <LinearProgress />;\n if (error) return translate('resources.officeSettings.messages.load_error');\n\n return (\n <RecordContextProvider value={officeSettings}>\n <Table>\n <TableBody>\n <Row label=\"resources.officeSettings.labels.points_system\">\n <FunctionField source=\"points\" render={renderPoints} />\n </Row>\n {!!officeSettings?.standingsOrder?.Team?.length && <Row label=\"resources.officeSettings.labels.standings_order.team\">\n <FunctionField source=\"Team\" render={renderStandingOrder} />\n </Row>}\n {!!officeSettings?.standingsOrder?.Skater?.length && <Row label=\"resources.officeSettings.labels.standings_order.skater\">\n <FunctionField source=\"Skater\" render={renderStandingOrder} />\n </Row>}\n {sport !== 'Baseball' && !!officeSettings?.standingsOrder?.Goalie?.length && <Row label=\"resources.officeSettings.labels.standings_order.goalie\">\n <FunctionField source=\"Goalie\" render={renderStandingOrder} />\n </Row>}\n <Row label=\"resources.officeSettings.labels.conflict_enforcement\">\n <FunctionField source=\"conflictEnforcement\" render={renderEnforcement} />\n <FunctionField source=\"availabilityEnforcement\" render={renderEnforcement} />\n <FunctionField source=\"constraintEnforcement\" render={renderEnforcement} />\n </Row>\n {!!officeSettings?.adminReports?.length && <Row label=\"resources.officeSettings.labels.admin_reports\">\n <FunctionField source=\"adminReports\" render={renderReports} />\n </Row>}\n {!!officeSettings?.teamReports?.length && <Row label=\"resources.officeSettings.labels.team_reports\">\n <FunctionField source=\"teamReports\" render={renderReports} />\n </Row>}\n </TableBody>\n </Table>\n </RecordContextProvider>\n );\n};\n","import React from 'react';\nimport { useRecordContext } from 'react-admin';\n\nimport InfoCard from '../../../common/cards/InfoCard';\nimport { isAuthorized } from '../../../common/Authorize';\n\nimport { UpdateOfficeSettingsButton } from '../../officeSettings/OfficeSettingsModal';\nimport { OfficeSettingsField } from '../../officeSettings/OfficeSettingsField';\n\nexport default props => {\n const office = useRecordContext(props);\n const showSettings = isAuthorized(office, 'officeSettings', 'show');\n const canEditSettings = isAuthorized(office, 'officeSettings', 'edit');\n\n if (!showSettings) return null;\n return <InfoCard title=\"ra.message.settings\" actions={\n canEditSettings && <UpdateOfficeSettingsButton officeId={office?.id} />\n }>\n <OfficeSettingsField officeId={office?.id} />\n </InfoCard>\n}\n\n","import React, { Fragment } from 'react';\nimport { TabbedForm, TabbedFormTabs, FormTab, useTranslate } from 'react-admin';\nimport { Grid, Typography, makeStyles } from '@material-ui/core';\n\nimport Toolbar from '../../common/ra/Toolbar';\nimport SwitchInput from '../../common/inputs/SwitchInput';\nimport { isAuthorized } from '../../common/Authorize';\nimport { UpdatedAtField } from '../../common/fields/UpdatedAtField';\n\nconst inputProps = {\n variant: 'outlined',\n margin: 'normal',\n fullWidth: true,\n}\n\nconst useStyles = makeStyles((theme) => ({\n tabs: {\n \"& .MuiTab-wrapper\": {\n color: theme.palette.tertiary.main\n }\n },\n updatedAt: {\n color: theme.palette.text.secondary\n },\n}));\n\nconst GeneralTab = props => {\n const translate = useTranslate();\n return <FormTab label=\"resources.branchOfficeSettings.labels.tabs.general\" {...props}>\n <Typography variant=\"subtitle2\">{translate('resources.branchOfficeSettings.labels.assignments')}</Typography>\n <SwitchInput\n source=\"certifiedOfficialChanges\"\n label=\"resources.branchOfficeSettings.fields.certifiedOfficialChanges\"\n helperText=\"resources.branchOfficeSettings.helpers.certifiedOfficialChanges\"\n {...inputProps}\n />\n <br />\n <SwitchInput\n source=\"allowOfficialSetAssignOffices\"\n label=\"resources.branchOfficeSettings.fields.allowOfficialSetAssignOffices\"\n helperText=\"resources.branchOfficeSettings.helpers.allowOfficialSetAssignOffices\"\n {...inputProps}\n />\n </FormTab>\n}\n\nconst InternalTab = props => {\n const classes = useStyles();\n return <FormTab label=\"resources.branchOfficeSettings.labels.tabs.featureFlags\" className={classes.tabs} {...props}>\n <Grid container spacing={2}>\n <Grid item xs={12}>\n <SwitchInput\n source=\"ff_suspensions\"\n label=\"resources.branchOfficeSettings.fields.ff_suspensions\"\n helperText=\"resources.branchOfficeSettings.helpers.ff_suspensions\"\n {...inputProps}\n />\n </Grid>\n <Grid item xs={12}>\n <SwitchInput\n source=\"ff_suspension_disciplines\"\n label=\"resources.branchOfficeSettings.fields.ff_suspension_disciplines\"\n helperText=\"resources.branchOfficeSettings.helpers.ff_suspension_disciplines\"\n {...inputProps}\n />\n </Grid>\n <Grid item xs={12}>\n <SwitchInput\n source=\"ff_incidents\"\n label=\"resources.branchOfficeSettings.fields.ff_incidents\"\n helperText=\"resources.branchOfficeSettings.helpers.ff_incidents\"\n {...inputProps}\n />\n </Grid>\n <Grid item xs={12}>\n <UpdatedAtField source=\"updatedAt\" variant=\"caption\" includePrefix className={classes.updatedAt} />\n </Grid>\n </Grid>\n </FormTab>\n}\n\nexport default ({ office, ...props }) => {\n const showInternalTab = isAuthorized(office, 'branchOfficeSettings', 'internalTab')\n\n return <TabbedForm toolbar={<Toolbar />} tabs={<TabbedFormTabs variant=\"scrollable\" scrollButtons=\"auto\" />} component={Fragment} {...props} syncWithLocation={false}>\n <GeneralTab />\n {showInternalTab && <InternalTab />}\n </TabbedForm>\n}\n","import React, { useState } from 'react';\nimport { useRecordContext, useTranslate } from 'react-admin';\nimport { Button } from '@material-ui/core';\nimport { Edit } from '@material-ui/icons';\n\nimport { EditResourceDialog } from '../../common/dialogs/ResourceDialog';\n\nimport BranchOfficeSettingsForm from './BranchOfficeSettingsForm';\n\nconst EditBranchOfficeSettingsDialog = props => {\n const office = useRecordContext();\n return <EditResourceDialog label=\"resources.branchOfficeSettings.actions.edit\" maxWidth=\"md\" disableDelete resource=\"branchOfficeSettings\" basePath=\"/branchOfficeSettings\" {...props}>\n <BranchOfficeSettingsForm office={office} />\n </EditResourceDialog>\n}\n\nexport const UpdateBranchOfficeSettingsButton = ({ officeId, ...props }) => {\n const translate = useTranslate();\n const [ isOpen, setOpen ] = useState(false);\n\n return <>\n <Button color=\"primary\" size=\"small\" startIcon={<Edit />} onClick={() => setOpen(true)}>\n {translate('resources.branchOfficeSettings.actions.edit')}\n </Button>\n <EditBranchOfficeSettingsDialog id={officeId} isOpen={isOpen} handleClose={() => setOpen(false)} {...props} />\n </>\n}\n","import React from 'react';\nimport { LinearProgress, RecordContextProvider, useTranslate } from 'react-admin';\nimport { Table, TableBody } from '@material-ui/core';\n\nimport Row from '../../common/cards/TableRow';\nimport FunctionField from '../../common/fields/FunctionField';\n\nimport { useBranchSettings } from '../branchOfficeSettings';\n\nconst renderCertifiedOfficialChanges = (settings, source, resource, translate) => {\n const { certifiedOfficialChanges } = settings;\n\n return certifiedOfficialChanges\n ? translate('ra.message.enabled')\n : translate('ra.message.disabled');\n}\n\nconst renderAllowOfficialSetAssignOffices = (settings, source, resource, translate) => {\n const { allowOfficialSetAssignOffices } = settings;\n\n return allowOfficialSetAssignOffices\n ? translate('ra.message.enabled')\n : translate('ra.message.disabled');\n}\n\nexport const BranchOfficeSettingsField = ({ officeId }) => {\n const translate = useTranslate();\n const { data: branchOfficeSettings, loading, error } = useBranchSettings(officeId);\n\n if (loading) return <LinearProgress />;\n if (error) return translate('resources.branchOfficeSettings.messages.load_error');\n\n return (\n <RecordContextProvider value={branchOfficeSettings}>\n <Table>\n <TableBody>\n <Row label={translate(\"resources.branchOfficeSettings.fields.certifiedOfficialChanges\")}>\n <FunctionField source=\"certifiedOfficialChanges\" render={renderCertifiedOfficialChanges} />\n </Row>\n <Row label={translate(\"resources.branchOfficeSettings.fields.allowOfficialSetAssignOffices\")}>\n <FunctionField source=\"allowOfficialSetAssignOffices\" render={renderAllowOfficialSetAssignOffices} />\n </Row>\n </TableBody>\n </Table>\n </RecordContextProvider>\n );\n};\n","import React from 'react';\nimport { useRecordContext } from 'react-admin';\n\nimport InfoCard from '../../../common/cards/InfoCard';\nimport { isAuthorized } from '../../../common/Authorize';\n\nimport { UpdateBranchOfficeSettingsButton } from '../../branchOfficeSettings/BranchOfficeSettingsModal';\nimport { BranchOfficeSettingsField } from '../../branchOfficeSettings/BranchOfficeSettingsField';\n\nexport default props => {\n const office = useRecordContext(props);\n const showSettings = isAuthorized(office, 'branchOfficeSettings', 'show');\n const canEditSettings = isAuthorized(office, 'branchOfficeSettings', 'edit');\n\n if (!showSettings) return null;\n\n return <InfoCard title=\"resources.branchOfficeSettings.labels.card.title\" actions={\n canEditSettings && <UpdateBranchOfficeSettingsButton officeId={office?.id} />\n }>\n <BranchOfficeSettingsField officeId={office?.id} />\n </InfoCard>\n}\n","import React from 'react';\nimport { SimpleForm, NumberInput, TextInput } from 'react-admin';\nimport { useFormState } from 'react-final-form';\nimport { Grid } from '@material-ui/core'\n\nimport Toolbar from '../../common/ra/Toolbar';\nimport { OfficeClaimsTypesEnumInput } from '../../common/inputs/EnumInputs';\nimport { FieldDependency } from '../../common/FieldDependency';\nimport CurrencyInput from '../../common/inputs/CurrencyInput';\n\nconst validate = values => {\n const errors = {};\n if (!values.name) errors.name = 'ra.validation.required';\n if (!values.type) errors.type = 'ra.validation.required';\n if (values.type == 'Travel' && !values.rate) errors.rate = 'ra.validation.required';\n\n return errors;\n}\n\nconst inputProps = {\n resource: 'officeclaimssettings',\n basePath: '/officeClaimsSettings',\n variant: 'outlined',\n margin: 'none',\n fullWidth: true,\n}\n\nconst AmountInput = ({ ...props }) => {\n const { values } = useFormState();\n\n return <CurrencyInput\n label=\"resources.officeClaimsSettings.fields.amount\"\n helperText={`resources.officeClaimsSettings.helpers.amount.${values.type}`}\n {...props}\n {...inputProps}\n />\n}\n\nexport const OfficeClaimsSettingsForm = props => {\n const isAmount = ['Per Diem', 'Expense']\n\n return <SimpleForm toolbar={<Toolbar /> } validate={validate} {...props}>\n <Grid container spacing={2} fullWidth>\n <Grid item xs={12} md={8}>\n <TextInput source=\"name\" label=\"resources.officeClaimsSettings.fields.name\" {...inputProps} />\n </Grid>\n <Grid item xs={12} md={4}>\n <OfficeClaimsTypesEnumInput source=\"type\" label=\"resources.officeClaimsSettings.fields.type\" {...inputProps} />\n </Grid>\n <FieldDependency fieldSource=\"type\" test={type => type == 'Travel'}>\n <Grid item xs={12} lg={6}>\n <CurrencyInput\n source=\"rate\"\n label=\"resources.officeClaimsSettings.fields.rate\"\n helperText=\"resources.officeClaimsSettings.helpers.rate\"\n {...inputProps}\n />\n </Grid>\n </FieldDependency>\n <FieldDependency fieldSource=\"type\" test={type => type == 'Travel'}>\n <Grid item xs={12} lg={6}>\n <NumberInput\n source=\"excludedDistance\"\n label=\"resources.officeClaimsSettings.fields.excludedDistance\"\n helperText=\"resources.officeClaimsSettings.helpers.excludedDistance\"\n {...inputProps}\n />\n </Grid>\n </FieldDependency>\n <FieldDependency fieldSource=\"type\" test={type => isAmount.includes(type)}>\n <Grid item xs={12} lg={6}>\n <AmountInput source=\"amount\" />\n </Grid>\n </FieldDependency>\n </Grid>\n </SimpleForm>\n}\n","import React, { Fragment, useState } from 'react';\nimport { useTranslate } from 'react-admin';\nimport { Button } from '@material-ui/core';\nimport { Add } from '@material-ui/icons';\n\nimport { DialogDatagrid } from '../../common/dialogs/DialogDatagrid';\nimport { CreateResourceDialog, EditResourceDialog } from '../../common/dialogs/ResourceDialog';\n\nimport { OfficeClaimsSettingsForm } from './ClaimSettingsForm';\n\nconst AddOfficeClaimsSettingsDialog = props =>\n <CreateResourceDialog label=\"resources.officeClaimsSettings.actions.add\" maxWidth=\"md\" resource=\"officeClaimsSettings\" basePath=\"/officeclaimssettings\" {...props}>\n <OfficeClaimsSettingsForm />\n </CreateResourceDialog>\n\nexport const AddClaimsSettingsButton = ({ size, variant, className, disabled, ...props }) => {\n const [ isOpen, setOpen ] = useState(false);\n const translate = useTranslate();\n\n return <>\n <Button color=\"primary\" size={size} variant={variant} className={className} startIcon={<Add />} disabled={disabled} onClick={() => setOpen(true)}>\n {translate('resources.officeClaimsSettings.actions.add')}\n </Button>\n <AddOfficeClaimsSettingsDialog isOpen={isOpen} handleClose={() => setOpen(false)} {...props} />\n </>\n}\n\nexport const EditOfficeClaimsSettingsDialog = props =>\n <EditResourceDialog label=\"resources.officialClaims.labels.edit\" maxWidth=\"md\" resource=\"officeClaimsSettings\" basePath=\"/officeclaimssettings\" {...props}>\n <OfficeClaimsSettingsForm />\n </EditResourceDialog>\n\nexport const OfficeClaimsSettingsDataGrid = props => <DialogDatagrid dialog={EditOfficeClaimsSettingsDialog} {...props} />\n","import React from 'react';\nimport { Datagrid, TextField } from 'react-admin';\nimport { Typography } from '@material-ui/core';\n\nimport { EnumField } from '../../common/inputs/EnumInputs';\nimport FunctionField from '../../common/fields/FunctionField';\nimport { CurrencyField } from '../../common/fields/CurrencyField';\n\nexport const TravelRateField = ({ unitOfMeasure = 'km', ...props }) => {\n return <FunctionField render={({ type }) => {\n if (type != 'Travel') return;\n return <div style={{ display: 'inline-flex', gap: 4, flexWrap: 'wrap' }}>\n <CurrencyField source=\"rate\" />\n <Typography variant=\"body2\" color=\"textSecondary\">/{unitOfMeasure}</Typography>\n </div>\n }}\n {...props} />\n}\n\nexport const ExcludedDistanceField = ({ unitOfMeasure = 'km', ...props }) => {\n return <FunctionField render={({ type, excludedDistance }) => {\n if (type != 'Travel' || !excludedDistance) return;\n return <div style={{ display: 'inline-flex', gap: 4, flexWrap: 'wrap' }}>\n <TextField source=\"excludedDistance\" />\n <Typography variant=\"body2\" color=\"textSecondary\">{unitOfMeasure}(s)</Typography>\n </div>\n }}\n {...props} />\n}\n\nexport const ClaimsSettingsGrid = props =>\n <Datagrid size=\"medium\" {...props}>\n <TextField source=\"name\" />\n <EnumField source=\"type\" />\n <TextField source=\"amount\" />\n <TextField source=\"rate\" />\n <TextField source=\"excludedDistance\" />\n </Datagrid>\n\n","import React from 'react';\nimport { useLocale, useRecordContext } from 'react-admin';\nimport { EmojiPeople } from '@material-ui/icons';\n\nimport { translateApiProperty } from '@hisports/common';\n\nimport ListCard from '../../../common/cards/ListCard';\nimport { AddClaimsSettingsButton, OfficeClaimsSettingsDataGrid } from '../../officialClaims/ClaimSettingsModal';\nimport { ExcludedDistanceField, TravelRateField } from '../../officialClaims/ClaimsSettingsGrid';\nimport { TypeAndNoteField } from '../../officialTransactions/TransactionsGrid';\nimport { CurrencyField } from '../../../common/fields/CurrencyField';\nimport FunctionField from '../../../common/fields/FunctionField';\n\nexport default ({ ...props }) => {\n const office = useRecordContext(props);\n const locale = useLocale();\n\n return <ListCard\n title=\"resources.officeClaimsSettings.labels.name\"\n icon={<EmojiPeople />}\n reference=\"officeClaimsSettings\"\n target=\"officeId\"\n sort={{ field: 'name', order: 'ASC' }}\n addButton={<AddClaimsSettingsButton\n target=\"officeId\"\n initialValues={{\n officeId: office?.id,\n }}\n />}\n >\n <OfficeClaimsSettingsDataGrid rowClick=\"show\" >\n <FunctionField source=\"name\" render={record => translateApiProperty(record, 'name', locale)} />\n <TypeAndNoteField source=\"type\" sortable={false} />\n <CurrencyField source=\"amount\" />\n <TravelRateField source=\"rate\" />\n <ExcludedDistanceField source=\"excludedDistance\" />\n </OfficeClaimsSettingsDataGrid>\n </ListCard>\n}\n","import React, { Fragment, useEffect, useState } from 'react';\nimport { SimpleForm, useNotify, useTranslate, useList, ListContextProvider, Pagination, Datagrid, TextField, useDataProvider } from 'react-admin';\nimport { useForm, useFormState } from 'react-final-form';\nimport { Dialog, DialogTitle, DialogContent, DialogContentText, ListItemIcon, ListItemText, Grid } from '@material-ui/core';\nimport { Restore } from '@material-ui/icons';\nimport { Alert } from '@material-ui/lab';\n\nimport { isEmpty } from '@hisports/parsers';\n\nimport { apiClient } from '../../http';\nimport { AssignRuleTypeEnumInput } from '../../common/inputs/EnumInputs';\nimport { DialogFormToolbar } from '../../common/dialogs/DialogForm';\nimport { ActionMenuItem } from '../../common/ActionMenu';\nimport { InlineDateInput } from '../../common/inputs/DateInput';\nimport TimeRangeField from '../../common/fields/TimeRangeField';\nimport DateField from '../../common/fields/DateField';\nimport { useSeason } from '../../common/inputs/SeasonSelector';\n\nimport { CategoryInput } from '../categories/CategoryInput';\nimport { CategoryField } from '../categories/CategoryField';\nimport { TeamField } from '../teams/TeamField';\nimport { SurfaceField } from '../surfaces/SurfaceField';\n\nconst inputProps = {\n variant: 'outlined',\n margin: 'none',\n fullWidth: true,\n}\n\nconst AssignRulesInput = props => {\n const translate = useTranslate();\n const { values } = useFormState();\n const types = ['systemId', 'feesId', \"minReferee\", \"minLinesperson\", \"minOfficial\", \"minScorekeeper\", \"minTimekeeper\", \"minRefereeGrade\", \"minLinespersonGrade\", \"minAge\", \"status\"]\n\n if (isEmpty(values?.gameIds)) return null\n return <>\n <br />\n <AssignRuleTypeEnumInput source=\"rules\" types={types} label={translate(\"resources.assignRules.labels.applied_settings\", 2)} helperText=\"resources.assignRules.helpers.applied_settings\" multiple {...props} />\n </>\n}\n\nconst ResetRulesForm = props => {\n const translate = useTranslate();\n return <>\n <Alert severity=\"info\" fullWidth>\n {translate('resources.assignRules.alerts.existing_games')}\n </Alert>\n <br />\n <SimpleForm {...props} {...inputProps} >\n <Grid container spacing={2}>\n <Grid item xs={12} md={6}>\n <InlineDateInput\n source=\"startDate\"\n label=\"resources.games.filters.startTime\"\n {...inputProps}\n />\n </Grid>\n <Grid item xs={12} md={6}>\n <InlineDateInput\n source=\"endDate\"\n label=\"resources.games.filters.endTime\"\n {...inputProps}\n />\n </Grid>\n <Grid item xs={12}>\n <CategoryInput source=\"categoryIds\" label=\"resources.games.fields.categoryId\" multiple {...inputProps} />\n </Grid>\n </Grid>\n <br />\n <GameList {...props} />\n <AssignRulesInput {...inputProps} />\n </SimpleForm>\n </>\n}\n\nconst GameGrid = props => {\n return <Datagrid size=\"medium\" {...props}>\n <TextField source=\"number\" label=\"resources.games.fields.number\" />\n <DateField source=\"date\" />\n <TimeRangeField startSource=\"startTime\" endSource=\"endTime\" label=\"resources.games.labels.time\" />\n <TeamField source=\"homeTeamId\" link={false} label=\"resources.games.fields.homeTeamId\" />\n <TeamField source=\"awayTeamId\" link={false} label=\"resources.games.fields.awayTeamId\" />\n <SurfaceField source=\"arenaId\" link={false} label=\"resources.games.fields.arenaId\" />\n <CategoryField source=\"categoryId\" label=\"resources.games.fields.categoryId\" />\n </Datagrid>\n}\n\nconst GameList = ({ type }) => {\n const dataProvider = useDataProvider();\n const { values } = useFormState();\n const { id: officeId, startDate, endDate, categoryIds } = values;\n const seasonId = useSeason();\n\n const { change } = useForm();\n const [ loaded, setLoaded ] = useState(false);\n const [ loading, setLoading ] = useState(true);\n const [ games, setGames ] = useState([])\n\n const listContext = useList({\n data: games,\n loaded,\n loading,\n page: 1,\n perPage: 50\n })\n\n useEffect(() => {\n change('gameIds', listContext?.selectedIds)\n }, [ listContext?.selectedIds, change ])\n\n useEffect(() => {\n setLoading(true);\n\n if (!startDate && !endDate && !categoryIds?.length) {\n setGames([]);\n setLoaded(true);\n setLoading(false);\n return\n }\n\n dataProvider.getList('games', {\n filter: {\n startTime: startDate,\n endTime: endDate,\n categoryId: categoryIds,\n [type]: officeId,\n seasonId: seasonId,\n },\n sort: { field: 'date', order: 'ASC' },\n pagination: { page: 1, perPage: 500 }\n })\n .then(res => {\n setGames(res.data);\n setLoaded(true);\n setLoading(false);\n })\n .catch(() => {\n setGames([]);\n setLoaded(true);\n setLoading(false);\n })\n }, [type, officeId, startDate, endDate, categoryIds, dataProvider, seasonId])\n\n return <ListContextProvider value={listContext}>\n <GameGrid\n {...listContext}\n hasBulkActions\n rowClick=\"toggleSelection\"\n isRowSelectable={() => true}\n isLoading={loading}\n />\n <Pagination rowsPerPageOptions={[50, 100, 500, 1000]} />\n </ListContextProvider>\n}\n\nconst AssignRulesResetModal = ({ type, officeId, isOpen, handleClose, ...props }) => {\n const translate = useTranslate();\n const notify = useNotify();\n\n const resetAssigner = type === 'scheduleOffices';\n\n const onSubmit = async values => {\n const gameIds = values?.gameIds || []\n if (!gameIds.length) {\n handleClose();\n return;\n }\n\n await apiClient(`/offices/${officeId}/applyAssignRules`, {\n method: 'POST',\n data: { gameIds, rules: values?.rules, resetAssigner }\n }).then(res => {\n notify(translate('resources.assignRules.notifications.apply_rules_success', { smart_count: res.data.length }));\n handleClose();\n })\n }\n\n return <Dialog open={isOpen} onClose={handleClose} maxWidth=\"medium\">\n <DialogTitle>{translate(`resources.assignRules.labels.${type}`)}</DialogTitle>\n <DialogContent>\n <DialogContentText>\n {translate(`resources.assignRules.alerts.${type}`)}\n </DialogContentText>\n <ResetRulesForm type={type} save={onSubmit} component={Fragment} toolbar={\n <DialogFormToolbar submitLabel=\"ra.action.apply\" cancelLabel=\"ra.action.close\" onCancel={handleClose} />\n } />\n </DialogContent>\n </Dialog>\n}\n\nexport default ({ type, onClick, handleClose, ...props }) => {\n const translate = useTranslate();\n const [ isOpen, setOpen ] = useState(false);\n const handleClick = () => {\n onClick();\n setOpen(true);\n }\n return <>\n <ActionMenuItem color=\"primary\" size=\"small\" onClick={handleClick}>\n <ListItemIcon><Restore fontSize=\"small\" /></ListItemIcon>\n <ListItemText>{translate(`resources.assignRules.labels.${type}`)}</ListItemText>\n </ActionMenuItem>\n {isOpen && <AssignRulesResetModal type={type} isOpen={isOpen} handleClose={() => setOpen(false)} {...props} />}\n </>\n}\n","import React, { Fragment, useState } from 'react';\nimport { ArrayInput, SimpleForm, useDataProvider, useQueryWithStore, useRefresh, useNotify, useRecordContext, GET_LIST, useTranslate } from 'react-admin';\nimport { Dialog, DialogTitle, DialogContent, ListItemIcon, ListItemText } from '@material-ui/core';\nimport { useFieldArray } from 'react-final-form-arrays';\n\nimport { DialogFormToolbar } from '../../common/dialogs/DialogForm';\nimport SimpleFormIterator, { TransitionProps } from '../../common/ra/SimpleFormIterator';\nimport { isAuthorized } from '../../common/Authorize';\nimport { ActionMenuItem } from '../../common/ActionMenu';\n\nimport { OfficeIcon } from '../icons';\nimport { OfficeInput } from '../offices/OfficeInput'\nimport { OfficeField } from '../offices/OfficeField'\n\nconst inputProps = {\n variant: 'outlined',\n margin: 'normal',\n fullWidth: true,\n}\n\nconst Office = props => {\n const [ parent, source ] = props.source.split('.')\n const { fields } = useFieldArray(parent)\n\n if (fields.value && fields.value.id) {\n return <OfficeField {...props} record={fields.value} source={source} basePath=\"/offices\" />\n }\n return <OfficeInput {...props} filter={{ _scope: 'Tenant', type: { nin: ['League', 'Tournament', 'Cup', 'Zone'] } }} />\n}\n\nconst MembersForm = ({ editable, ...props }) =>\n <SimpleForm resource=\"offices\" {...props} {...inputProps}>\n <ArrayInput source=\"members\" label=\"\" {...inputProps}>\n <SimpleFormIterator disableReordering disableAdd={!editable} disableRemove={!editable} TransitionProps={TransitionProps} {...inputProps}>\n <Office source=\"officeId\" label=\"resources.offices.name\" options={{ label: null }} {...inputProps} />\n </SimpleFormIterator>\n </ArrayInput>\n </SimpleForm>\n\nconst OfficeMembersModal = ({ isOpen, handleClose, ...props }) => {\n const office = useRecordContext(props);\n const dataProvider = useDataProvider();\n const translate = useTranslate();\n const refresh = useRefresh();\n const notify = useNotify();\n\n const canEditMembers = isAuthorized(office, 'officemembers', 'create')\n\n const { data: members = [], loaded } = useQueryWithStore({\n type: GET_LIST,\n resource: 'officemembers',\n payload: {\n filter: { parentId: office.id },\n pagination: { page: 1, perPage: 999 },\n sort: { field: 'office.name', order: 'ASC' },\n }\n })\n\n const onSubmit = ({ members: offices }) => {\n const officeIds = offices\n .map(member => member && member.officeId)\n .filter(Boolean)\n\n const added = officeIds.filter(officeId => {\n return !members.some(member => member.officeId === officeId);\n })\n const additions = added.map(officeId => {\n return dataProvider.create(\"officemembers\", { data: {\n officeId,\n parentId: office.id,\n } })\n })\n\n const removed = members.filter(member => {\n return !officeIds.includes(member.officeId)\n })\n const removals = removed.map(member => {\n return dataProvider.delete(\"officemembers\", { id: member.id })\n })\n\n const changes = [...additions, ...removals];\n return Promise.all(changes)\n .then(() => {\n handleClose()\n refresh()\n }).catch(error => {\n notify(error.message, 'error');\n })\n }\n\n const initialValues = {\n members,\n }\n return <Dialog open={isOpen} onClose={handleClose} fullWidth maxWidth=\"sm\">\n <DialogTitle>{translate('resources.offices.labels.members')}</DialogTitle>\n <DialogContent>\n {loaded && <MembersForm initialValues={initialValues} save={onSubmit} component={Fragment} editable={canEditMembers} toolbar={\n <DialogFormToolbar submitLabel=\"ra.action.save\" cancelLabel=\"ra.action.close\" onCancel={handleClose} hideSubmit={!canEditMembers} />\n } />}\n </DialogContent>\n </Dialog>\n}\n\nexport default ({ onClick, handleClose, ...props }) => {\n const translate = useTranslate();\n const [ isOpen, setOpen ] = useState(false);\n const handleClick = () => {\n onClick();\n setOpen(true);\n }\n return <>\n <ActionMenuItem color=\"primary\" size=\"small\" onClick={handleClick}>\n <ListItemIcon><OfficeIcon fontSize=\"small\" /></ListItemIcon>\n <ListItemText>{translate('resources.offices.labels.members')}</ListItemText>\n </ActionMenuItem>\n {isOpen && <OfficeMembersModal isOpen={isOpen} handleClose={() => setOpen(false)} {...props} />}\n </>\n}\n","import React from 'react';\nimport { useRecordContext } from 'react-admin';\nimport { Card, List } from '@material-ui/core';\n\nimport { isAuthorized } from '../../../common/Authorize';\n\nimport AssignRuleApplyModal from '../../assignRules/AssignRuleApplyModal';\nimport OfficeMembersModal from '../../officemembers/OfficeMembersModal';\nimport { AnalyzeMenuItem } from '../../schedules/AnalyzeDialog';\n\nexport default props => {\n const office = useRecordContext(props);\n\n const canResetRules = isAuthorized(office, 'assignRules', 'edit')\n const canShowMembers = isAuthorized(office, 'officemembers', 'list') && ['League', 'Tournament', 'Cup', 'Zone'].includes(office.type)\n const showAnalyze = ['League', 'Tournament', 'Cup', 'Association'].includes(office?.type);\n\n const actions = [\n canShowMembers && <OfficeMembersModal key=\"members\" onClick={() => true} />,\n showAnalyze && <AnalyzeMenuItem key=\"analyze\" officeId={office?.id} onClick={() => true} />,\n canResetRules && <AssignRuleApplyModal key=\"reset\" type=\"assignOffices\" officeId={office?.id} onClick={() => true} />,\n canResetRules && <AssignRuleApplyModal key=\"apply\" type=\"scheduleOffices\" officeId={office?.id} onClick={() => true} />\n ].filter(Boolean);\n\n if (!actions.length) return null;\n\n return <Card>\n <List>\n {actions}\n </List>\n </Card>\n}\n","import React from 'react';\nimport { useRecordContext, useTranslate } from 'react-admin';\nimport { Grid, useMediaQuery } from '@material-ui/core';\nimport { Alert } from '@material-ui/lab';\nimport { AssignmentIndOutlined } from '@material-ui/icons';\nimport { Redirect } from 'react-router-dom';\n\nimport { FF_DRAFT_GAMES, FF_SCOREKEEPERS } from '@hisports/common/featureFlags';\nimport { GAME_OFFICE_TYPES } from '@hisports/common/src/constants';\n\nimport { useFlag, useScopes } from '../../http';\nimport { isAuthorized } from '../../common/Authorize';\nimport { TabbedShowLayout, Tab } from '../../common/ra/TabbedShowLayout';\nimport SchedulerView from '../../common/calendar/scheduler/SchedulerView';\n\nimport AvailabilityCard from '../availabilities/AvailabilityCard';\nimport ReportsCard from '../reports/ReportsCard';\nimport ArenaSlotsCard from '../offices/cards/ArenaSlotsCard';\nimport { useBranchSettings } from '../branchOfficeSettings';\n\nimport SchedulesCard from './cards/SchedulesCard';\nimport TeamsCard from './cards/TeamsCard';\nimport ArenasCard from './cards/ArenasCard';\nimport RegistrationsCard from './cards/RegistrationsCard';\nimport QualificationsCard from './cards/QualificationsCard';\nimport AssignSettingsCard from './cards/OfficeAssignSettingsCard';\nimport GroupsCard from './cards/GroupsCard';\nimport RolesCard from './cards/RolesCard';\nimport NotificationCard from './cards/NotificationsCard';\nimport SectionsCard from './cards/SectionsCard';\nimport OfficesCard from './cards/OfficesCard';\nimport OfficialsCard from './cards/OfficialsCard';\nimport ListsCard from './cards/ListsCard';\nimport AssignSystemsCard from './cards/AssignSystemsCard';\nimport AssignFeesCard from './cards/AssignFeesCard';\nimport AssignRulesCard from './cards/AssignRulesCard';\nimport AssignTargetsCard from './cards/AssignTargetsCard';\nimport RulebooksCard from './cards/RulebooksCard';\nimport AttributeTypesCard from './cards/AttributeTypesCard';\nimport SchedulingConstraintsCard from './cards/SchedulingConstraintsCard';\nimport PayPeriodsCard from './cards/PayPeriodsCard';\nimport SuspensionsCard from './cards/SuspensionsCard';\nimport ClaimsCard from './cards/ClaimsCard';\nimport GamePenaltiesCard from './cards/GamePenaltiesCard';\nimport InfractionTypesCard from './cards/InfractionTypesCard';\nimport RulesCard from './cards/RulesCard';\nimport InfractionAccumulationsCard from './cards/InfractionAccumulationsCard';\nimport SanctionsCard from './cards/SanctionsCard';\nimport OfficeSettingsCard from './cards/OfficeSettingsCard';\nimport BranchOfficeSettingsCard from './cards/BranchOfficeSettingsCard';\nimport ClaimsSettingsCard from './cards/ClaimsSettingsCard';\nimport OfficeActionsCard from './cards/OfficeActionsCard';\n\nconst SummaryTab = props => {\n const office = useRecordContext(props);\n const scopes = useScopes()\n const { data: branchSettings } = useBranchSettings(office?.id)\n\n const isZone = office?.type === 'Zone';\n const isAssociation = office?.type === 'Association';\n\n const showAvailabilitiesCard = isAuthorized(office, 'availabilities', 'list') && !isZone\n const canEditAvailabilities = isAuthorized(office, 'availabilities', 'edit') && !isZone\n\n const showOffices = !isZone;\n const showTeams = isAuthorized(office, 'teams', 'list') && !isZone;\n const showSchedules = isAuthorized(office, 'schedules', 'list') && !isZone;\n const showGamePenalties = isAuthorized(office, 'gamepenalties', 'show')\n const showSuspensions = isAuthorized(office, 'suspensions', 'show') && branchSettings?.ff_suspensions;\n const showArenas = isAuthorized(office, 'surfaces', 'list');\n const showRegistrations = isAuthorized(office, 'registrations', 'list') && !isZone\n const showQualifications = isAuthorized(office, 'qualifications', 'list')\n const showReports = isAuthorized(scopes, 'reports', 'list');\n const showTimeSlots = isAuthorized(office, 'arenaslots', 'list') && ![...GAME_OFFICE_TYPES, 'Historical'].includes(office?.type);\n\n return <Tab {...props}>\n <Grid container spacing={3}>\n {showOffices && <Grid item xs={12} md={8}>\n <OfficesCard />\n </Grid>}\n <Grid item xs={12} md={4} >\n <OfficeActionsCard />\n </Grid>\n {showSchedules && <Grid item xs={12}>\n <SchedulesCard filter={{ effectiveOffices: true, includeMembers: true }} collapsable />\n </Grid>}\n {showAvailabilitiesCard && <Grid item xs={12}>\n <AvailabilityCard collapsable={!isAssociation} editable={canEditAvailabilities} />\n </Grid>}\n <Grid item xs={12}>\n <GroupsCard />\n </Grid>\n {showGamePenalties && <Grid item xs={12}>\n <GamePenaltiesCard collapsable />\n </Grid>}\n {showSuspensions && <Grid item xs={12}>\n <SuspensionsCard collapsable />\n </Grid>}\n {showArenas && <Grid item xs={12}>\n <ArenasCard collapsable />\n </Grid>}\n {showTimeSlots && <Grid item xs={12}>\n <ArenaSlotsCard title=\"resources.arenaslots.labels.card.title\" />\n </Grid>}\n {showTeams && <>\n <Grid item xs={12}>\n <TeamsCard collapsable />\n </Grid>\n <Grid item xs={12}>\n <TeamsCard collapsable isSanctioned={false} />\n </Grid>\n </>}\n\n {showRegistrations && <Grid item xs={12}>\n <RegistrationsCard collapsable />\n </Grid>}\n {showQualifications && <Grid item xs={12}>\n <QualificationsCard collapsable={!isZone} />\n </Grid>}\n {showReports && <Grid item xs={12}>\n <ReportsCard targetType=\"Office\" officeId={office.id} />\n </Grid>}\n </Grid>\n </Tab>\n}\n\nconst SchedulerTab = props => {\n const office = useRecordContext();\n\n return <Tab {...props}>\n <SchedulerView office={office} />\n </Tab>\n}\n\nconst AssigningTab = props => {\n const office = useRecordContext(props);\n const isEnabled = useFlag();\n\n if (!isAuthorized(office, 'offices', 'assigningTab')) return null;\n\n const showAssignSettings = isAuthorized(office, 'officeAssignSettings', 'list')\n const showClaimSettings = isAuthorized(office, 'officeClaimsSettings', 'list')\n const showPayPeriods = isAuthorized(office, 'payPeriods', 'list')\n const showClaimPeriods = isAuthorized(office, 'officialClaims', 'list')\n const showOfficials = isAuthorized(office, 'officialOffices', 'list')\n const showScorekeepers = showOfficials && isEnabled(FF_SCOREKEEPERS);\n const showLists = isAuthorized(office, 'lists', 'list')\n const showAssignSystems = isAuthorized(office, 'assignSystems', 'list')\n const showAssignFees = isAuthorized(office, 'assignFees', 'list')\n const showAssignRules = isAuthorized(office, 'assignRules', 'list')\n const showAssignTargets = isAuthorized(office, 'assignTargets', 'list')\n const showAttributes = isAuthorized(office, 'attributeTypes', 'list')\n\n return <Tab {...props}>\n <Grid container spacing={3}>\n {showAssignSettings && <Grid item xs={12} md={6}>\n <AssignSettingsCard />\n </Grid>}\n {showClaimSettings && <Grid item xs={12}>\n <ClaimsSettingsCard />\n </Grid>}\n {showPayPeriods && <Grid item xs={12}>\n <PayPeriodsCard />\n </Grid>}\n {showClaimPeriods && <Grid item xs={12}>\n <ClaimsCard />\n </Grid>}\n {showOfficials && <Grid item xs={12}>\n <OfficialsCard type=\"Official\" />\n </Grid>}\n {showScorekeepers && <Grid item xs={12}>\n <OfficialsCard type=\"Scorekeeper\" />\n </Grid>}\n {showLists && <Grid item xs={12}>\n <ListsCard />\n </Grid>}\n {showAttributes && <Grid item xs={12}>\n <AttributeTypesCard type=\"Officiating\" targetType=\"Participant\" />\n </Grid>}\n {showAssignSystems && <Grid item xs={12}>\n <AssignSystemsCard />\n </Grid>}\n {showAssignFees && <Grid item xs={12}>\n <AssignFeesCard />\n </Grid>}\n {showAssignRules && <Grid item xs={12}>\n <AssignRulesCard\n title=\"resources.assignRules.labels.card.title\"\n subtitle=\"resources.assignRules.labels.card.subtitle\"\n types={[\"minReferee\", \"minLinesperson\", \"minOfficial\", \"minScorekeeper\", \"minTimekeeper\", \"minRefereeGrade\", \"minLinespersonGrade\", \"minAge\", \"status\"]} />\n </Grid>}\n {showAssignRules && <Grid item xs={12}>\n <AssignRulesCard\n title=\"resources.assignRules.labels.alt_card.title\"\n subtitle=\"resources.assignRules.labels.alt_card.subtitle\"\n icon={<AssignmentIndOutlined />}\n types={[\"officeId\", \"assignType\"]} />\n </Grid>}\n {showAssignTargets && <Grid item xs={12}>\n <AssignTargetsCard />\n </Grid>}\n </Grid>\n </Tab>\n}\n\nconst RulebookTab = props => {\n const office = useRecordContext(props);\n const translate = useTranslate();\n\n if (!isAuthorized(office, 'offices', 'rulebookTab')) return null;\n\n const hasParentOffice = !!office?.parentId\n\n const showRules = isAuthorized(office, 'ruleSections', 'list');\n const showTypes = isAuthorized(office, 'infractionTypes', 'list');\n const showAccumulations = isAuthorized(office, 'infractionAccumulations', 'list');\n const showSanctions = isAuthorized(office, 'sanctions', 'list')\n const showRulebooks = isAuthorized(office, 'rulebooks', 'list')\n const showAlert = hasParentOffice\n\n return <Tab {...props}>\n <Grid container spacing={3}>\n {showAlert && <Grid item xs={12}>\n <Alert severity=\"info\">{translate('resources.rulebooks.alerts.rulebook_independence')}</Alert>\n </Grid>}\n {showRules && <Grid item xs={12}>\n <RulesCard />\n </Grid>}\n {showTypes && <Grid item xs={12}>\n <InfractionTypesCard />\n </Grid>}\n {showAccumulations && <Grid item xs={12}>\n <InfractionAccumulationsCard />\n </Grid>}\n {showSanctions && <Grid item xs={12}>\n <SanctionsCard />\n </Grid>}\n {showRulebooks && <Grid item xs={12}>\n <RulebooksCard />\n </Grid>}\n </Grid>\n </Tab>\n}\n\nconst SettingsTab = props => {\n const office = useRecordContext(props);\n\n if (!isAuthorized(office, 'offices', 'settingsTab')) return null;\n\n const showGroups = isAuthorized(office, 'groups', 'list')\n const showRoles = isAuthorized(office, 'roles', 'list')\n const showNotifications = isAuthorized(office, 'notifications', 'list')\n const showSections = isAuthorized(office, 'sections', 'list')\n const canShowConstraints = isAuthorized(office, 'schedulingConstraints', 'list')\n const showSettings = isAuthorized(office, 'officeSettings', 'list')\n const showBranchSettings = isAuthorized(office, 'branchOfficeSettings', 'list') && office?.type === 'Branch'\n\n return <Tab {...props}>\n <Grid container spacing={3}>\n {showSettings && <Grid item xs={12} md={6}>\n <OfficeSettingsCard />\n </Grid>}\n {showBranchSettings && <Grid item xs={12} md={6}>\n <BranchOfficeSettingsCard />\n </Grid>}\n {showGroups && <Grid item xs={12}>\n <GroupsCard />\n </Grid>}\n {canShowConstraints && <Grid item xs={12}>\n <SchedulingConstraintsCard />\n </Grid>}\n {showRoles && <Grid item xs={12}>\n <RolesCard />\n </Grid>}\n {showNotifications && <Grid item xs={12}>\n <NotificationCard />\n </Grid>}\n {showSections && <Grid item xs={12}>\n <SectionsCard />\n </Grid>}\n </Grid>\n </Tab>\n}\n\nexport const OfficeShowLayout = props => {\n const office = useRecordContext(props);\n const isEnabled = useFlag();\n const isMobile = useMediaQuery(theme => theme.breakpoints.down('xs'));\n\n if (office?.type === 'League') return <Redirect to={`/leagues/${office?.id}/show`} />\n if (office?.type === 'Tournament') return <Redirect to={`/tournaments/${office?.id}/show`} />\n if (office?.type === 'Cup') return <Redirect to={`/cups/${office?.id}/show`} />\n\n const hasParentOffice = !!office?.parentId\n\n const showRulebook = isAuthorized(office, 'offices', 'rulebookTab') && (!hasParentOffice || office?.type === 'Branch')\n const showScheduler = isEnabled(FF_DRAFT_GAMES) && isAuthorized(office, 'offices', 'schedulerTab') && !isMobile\n\n return <TabbedShowLayout>\n <SummaryTab label=\"resources.offices.labels.tabs.summary\" />\n {showScheduler && <SchedulerTab label=\"resources.offices.labels.tabs.scheduler\" path=\"scheduler\" />}\n <AssigningTab label=\"resources.offices.labels.tabs.assigning\" path=\"assigning\" />\n {showRulebook && <RulebookTab label=\"resources.offices.labels.tabs.rulebook\" path=\"rulebook\" />}\n <SettingsTab label=\"resources.offices.labels.tabs.settings\" path=\"settings\" />\n </TabbedShowLayout>\n}\n","import React from 'react';\nimport { ListItemIcon, ListItemText, ListSubheader, useTheme } from \"@material-ui/core\"\nimport { Sync } from \"@material-ui/icons\"\nimport moment from 'moment-timezone';\n\nimport { ActionMenuItem } from \"../../common/ActionMenu\"\nimport { useNotify, useRecordContext, useTranslate } from 'react-admin';\nimport { apiClient } from '../../http';\nimport { useSeason } from '../../common/inputs/SeasonSelector';\nimport { isAuthorized } from '../../common/Authorize';\n\nconst SyncButton = ({ officeId, method, handleClose }) => {\n const theme = useTheme()\n const notify = useNotify();\n const seasonId = useSeason();\n const translate = useTranslate();\n const purple = theme.palette.tertiary.main;\n\n const handleClick = () => {\n handleClose();\n notify('Syncing...', { autoHideDuration: 3 * 1000 }) // 3s\n apiClient(`/offices/${officeId}/${method}`, {\n method: 'POST',\n params: {\n seasonId,\n date: moment().format('YYYY-MM-DD'),\n }\n })\n }\n return <ActionMenuItem size=\"small\" onClick={handleClick}>\n <ListItemIcon><Sync htmlColor={purple} /></ListItemIcon>\n <ListItemText>{translate(`resources.offices.actions.${method}`)}</ListItemText>\n </ActionMenuItem>\n}\nexport default ({ handleClose }) => {\n const translate = useTranslate();\n const office = useRecordContext();\n if (!office || office.externalId == null) return null;\n if (!isAuthorized(office, 'offices', 'internal', true)) return null;\n\n return <>\n <ListSubheader>{translate('resources.offices.actions.internal')}</ListSubheader>\n <SyncButton officeId={office.id} method=\"syncOffices\" handleClose={handleClose} />\n <SyncButton officeId={office.id} method=\"syncTeams\" handleClose={handleClose} />\n <SyncButton officeId={office.id} method=\"syncOfficials\" handleClose={handleClose} />\n <SyncButton officeId={office.id} method=\"syncRegistrations\" handleClose={handleClose} />\n </>\n}\n","import React from 'react';\nimport { EditButton, ShowButton, useEditContext, useResourceContext } from 'react-admin';\nimport { ActionMenu } from '../../common/ActionMenu';\nimport { isAuthorized } from '../../common/Authorize';\n\nimport { TopToolbar } from '../../common/cards/Card';\n\nimport OfficeInternalActions from './OfficeInternalActions';\n\nimport { usePermissions } from '../../http';\n\nexport const OfficeActions = ({ hasEdit, hasShow, ...props }) => {\n const resource = useResourceContext(props)\n const { basePath, record: office } = useEditContext(props);\n const permissions = usePermissions();\n\n const canEditResource = isAuthorized(office, resource, 'edit');\n const canShowResource = isAuthorized(office, resource, 'show');\n const isSystem = permissions.some(p => p.roleType === 'System');\n\n return <TopToolbar>\n {hasEdit && canEditResource && <EditButton basePath={basePath} resource={resource} record={office} />}\n {hasShow && canShowResource && <ShowButton basePath={basePath} resource={resource} record={office} />}\n {isSystem && <ActionMenu>\n <OfficeInternalActions />\n </ActionMenu>}\n </TopToolbar>\n}\n","import React, { useMemo } from 'react';\nimport { ImageField, TextInput, useTranslate } from 'react-admin';\nimport { useLocation } from 'react-router-dom';\n\nimport { List, Show, Create, Edit } from '../../common/ra';\nimport ResourceTitle from '../../common/ResourceTitle';\nimport { ShowHeader } from '../../common/ShowHeader';\nimport { OfficeTypeEnumInput } from '../../common/inputs/EnumInputs';\n\nimport { OfficeGrid } from './OfficeGrid';\nimport { OfficeShowLayout } from './OfficeShow';\nimport { OfficeForm } from './OfficeForm';\nimport { OfficeField } from './OfficeField';\nimport { OfficeActions } from './OfficeActions';\n\nexport const OfficeShowHeader = () => {\n const translate = useTranslate()\n return <ShowHeader\n name={office => office.name}\n type={office => `${translate('resources.offices.name', 1)} - ${translate(`resources.offices.values.type.${office.type}`, { _: office.type })}`}\n description={office => <OfficeField source=\"parentId\" variant=\"inherit\" />}\n avatar={office => <ImageField source=\"logo.url\" />} />;\n}\n\nexport const OfficeList = props =>\n <List {...props}\n filters={[\n <TextInput source=\"name\" variant=\"outlined\" alwaysOn />,\n <OfficeTypeEnumInput source=\"type\" variant=\"outlined\" alwaysOn multiple />,\n ]}\n sort={{\n field: 'name',\n order: 'ASC'\n }}\n >\n <OfficeGrid rowClick=\"show\" />\n </List>\n\nexport const OfficeShow = props => {\n const location = useLocation();\n const officeTab = useMemo(() => {\n return location?.pathname?.substring(location.pathname.lastIndexOf('/') + 1)\n }, [ location.pathname ])\n\n return <Show {...props}\n title={<OfficeShowHeader />}\n className={officeTab === 'scheduler' ? 'scheduler-tab-show' : ''}\n actions={<OfficeActions />}\n >\n <OfficeShowLayout />\n </Show>\n}\n\nexport const OfficeCreate = props => {\n const translate = useTranslate()\n return <Create\n title={<ResourceTitle title={record => translate('resources.offices.labels.add')} />}\n {...props}\n >\n <OfficeForm redirect=\"show\" />\n </Create>\n}\n\nexport const OfficeEdit = props => {\n const translate = useTranslate()\n return <Edit\n title={<ResourceTitle title={record => translate('ra.page.editing', { name: record.name })} />}\n {...props}\n >\n <OfficeForm redirect=\"show\" />\n </Edit>\n}\n","import React from 'react';\nimport { Filter, TextInput } from 'react-admin'\n\nexport const LeagueFilters = props =>\n <Filter variant=\"outlined\" {...props}>\n <TextInput source=\"name\" alwaysOn />\n </Filter>\n","import React from 'react';\nimport { groupBy } from 'lodash';\nimport { useListContext } from 'react-admin';\nimport { Typography, Card, Table, TableBody, makeStyles } from '@material-ui/core'\n\nimport { dedupe } from '@hisports/parsers';\n\nimport { SelectAllCheckbox } from '../resources/events/EventGroupedGrid';\n\nconst useStyles = makeStyles(theme => ({\n header: {\n position: 'sticky',\n top: 0,\n paddingLeft: props => props.canSelectAll ? theme.spacing(0.5) : theme.spacing(1.5),\n paddingRight: theme.spacing(0.5),\n marginTop: 1,\n backgroundColor: theme.palette.background.default,\n zIndex: 1,\n display: 'flex',\n alignItems: 'center',\n height: '56px'\n },\n row: {\n cursor: 'pointer',\n },\n action: {\n marginLeft: 'auto',\n }\n}))\n\nconst Title = ({ group }) => group;\nconst Group = ({ group, records, basePath, resource, titleComponent: TitleComponent = Title, actionButton: ActionComponent, children, hasBulkActions = false, isRowSelectable, ...props }) => {\n const ids = records.map(record => record.id)\n const selectableRows = isRowSelectable ? ids.filter(id => isRowSelectable(id)) : ids\n const canSelectAll = selectableRows.length && hasBulkActions;\n const classes = useStyles({ canSelectAll });\n\n return <>\n <div className={classes.header}>\n <SelectAllCheckbox ids={ids} hasBulkActions={hasBulkActions} isRowSelectable={isRowSelectable} />\n <Typography variant=\"subtitle2\"><TitleComponent group={group} /></Typography>\n {ActionComponent && <ActionComponent group={group} className={classes.action} {...props} />}\n </div>\n <Card square elevation={0.5}>\n <Table>\n <TableBody>\n {React.cloneElement(children, { records, classes, basePath, resource })}\n </TableBody>\n </Table>\n </Card>\n </>\n}\n\nexport default ({ grouping, titleComponent, children, ...props }) => {\n const { ids, data, basePath, resource } = useListContext(props)\n if (!ids || !ids.length) return null;\n\n const records = ids?.map(id => data?.[id]).filter(Boolean) || [];\n const groups = groupBy(records, record => grouping(record));\n const groupKeys = dedupe(records.map(grouping)) // maintains order from API\n\n return groupKeys.map(group =>\n <Group key={group} group={group} titleComponent={titleComponent} records={groups[group]} basePath={basePath} resource={resource} {...props}>\n {children}\n </Group>\n )\n}\n","import React from 'react';\nimport { DatagridRow, RecordContextProvider } from 'react-admin';\n\nimport GroupedView from '../../common/GroupedView';\nimport { OfficeField } from '../offices/OfficeField';\nimport { OfficeNameField } from '../offices/OfficeGrid';\n\nconst LeagueTitle = ({ group: id }) => {\n return <RecordContextProvider value={{ id }}>\n <OfficeField source=\"id\" variant=\"subtitle2\" link={false} />\n </RecordContextProvider>\n}\n\nconst LeagueList = ({ records, basePath, resource, classes, ...props }) => {\n return records.map(record =>\n <DatagridRow key={record.id} basePath={basePath} resource={resource} record={record} id={record.id} rowClick=\"show\" className={classes.row}>\n <OfficeNameField source=\"name\" />\n </DatagridRow>\n )\n}\n\nexport const LeagueView = () =>\n <GroupedView grouping={league => league.parentId} titleComponent={LeagueTitle}>\n <LeagueList />\n </GroupedView>\n","import React from 'react';\nimport { useRecordContext, useTranslate } from 'react-admin';\nimport { Gavel } from '@material-ui/icons';\n\nimport ListCard from '../../../common/cards/ListCard';\nimport { useSeason } from '../../../common/inputs/SeasonSelector';\nimport { SuspensionStatusInput } from '../../../common/inputs/EnumInputs';\n\nimport { SuspensionGrid } from '../../scoresheet/suspension/SuspensionGrid';\nimport { ParticipantInput } from '../../participants/ParticipantInput';\nimport { TeamInput } from '../../teams/TeamInput';\nimport { CategoryInput } from '../../categories/CategoryInput';\n\nexport default props => {\n const office = useRecordContext(props);\n const seasonId = useSeason();\n const translate = useTranslate();\n\n const filters = [\n <ParticipantInput source=\"participantId\" variant=\"outlined\" />,\n <TeamInput source=\"teamId\" variant=\"outlined\" />,\n <CategoryInput source=\"game.categoryId\" label=\"resources.games.fields.categoryId\" variant=\"outlined\" />,\n <SuspensionStatusInput source=\"status\" variant=\"outlined\" multiple />,\n ]\n\n return <ListCard\n title={translate(\"resources.suspensions.name\", 2)}\n icon={<Gavel />}\n basePath=\"/suspensions\"\n resource=\"suspensions\"\n filter={{ effectiveOffices: office?.id, or: [{ 'game.seasonId': seasonId }, { status: { inq: ['Active', 'Pending'] } }] }}\n sort={{ field: ['game.date', 'participant.lastName', 'participant.firstName'], order: ['DESC', 'ASC', 'ASC'] }}\n filters={filters}\n {...props}\n >\n <SuspensionGrid multipleGames rowOptions={{ isRowSelectable: () => false }} />\n </ListCard>\n}\n","import React from 'react';\nimport { useLocale, useRecordContext, useTranslate } from 'react-admin';\nimport { SportsOutlined } from '@material-ui/icons';\n\nimport { isLegacyRulebookSeason } from '@hisports/scoresheet/src/util';\n\nimport { useFlag, useSport } from '../../../http';\nimport ListCard from '../../../common/cards/ListCard';\nimport { useSeason } from '../../../common/inputs/SeasonSelector';\n\nimport { GamePenaltyGrid } from '../../gamepenalties/GamePenaltyGrid';\nimport { ParticipantInput } from '../../participants/ParticipantInput';\nimport { TeamInput } from '../../teams/TeamInput';\nimport { CategoryInput } from '../../categories/CategoryInput';\nimport PenaltiesExporter from '../../gamepenalties/PenaltiesExporter';\n\nexport default ({ collapsale, ...props }) => {\n const translate = useTranslate();\n const office = useRecordContext(props);\n const seasonId = useSeason();\n const sport = useSport();\n const isEnabled = useFlag();\n const locale = useLocale();\n\n const isLegacy = isLegacyRulebookSeason(seasonId);\n\n const filters = [\n <ParticipantInput source=\"participantId\" variant=\"outlined\" />,\n <TeamInput source=\"teamId\" variant=\"outlined\" />,\n <CategoryInput source=\"game.categoryId\" label=\"resources.games.fields.categoryId\" variant=\"outlined\" />,\n ]\n\n const actions = [\n <PenaltiesExporter target=\"officeId\" sport={sport} isEnabled={isEnabled} locale={locale} />\n ]\n\n return <ListCard\n title={translate('resources.gamepenalties.name', 2)}\n icon={<SportsOutlined />}\n basePath=\"/gamepenalties\"\n resource=\"gamepenalties\"\n actions={actions}\n filter={{ _options: { includeMeta: isLegacy }, effectiveOffices: office?.id, 'game.seasonId': seasonId }}\n sort={{ field: ['game.date', 'participant.lastName', 'participant.firstName'], order: ['DESC', 'ASC', 'ASC'] }}\n filters={filters}\n {...props}\n >\n <GamePenaltyGrid seasonId={seasonId} multipleGames rowOptions={{ isRowSelectable: () => false }} />\n </ListCard>\n}\n","import React from 'react';\nimport { useRecordContext } from 'react-admin';\nimport { Grid, useMediaQuery } from '@material-ui/core';\nimport { AssignmentIndOutlined } from '@material-ui/icons';\nimport { Redirect } from 'react-router-dom';\n\nimport { FF_DRAFT_GAMES } from '@hisports/common/featureFlags';\n\nimport { useFlag, useScopes } from '../../http';\nimport { isAuthorized } from '../../common/Authorize';\nimport { Tab, TabbedShowLayout } from '../../common/ra/TabbedShowLayout';\nimport SchedulerView from '../../common/calendar/scheduler/SchedulerView';\nimport { useBranchSettings } from '../branchOfficeSettings';\n\nimport ReportsCard from '../reports/ReportsCard';\nimport SchedulesCard from '../offices/cards/SchedulesCard';\nimport AvailabilityCard from '../availabilities/AvailabilityCard';\nimport GroupsCard from '../offices/cards/GroupsCard';\nimport SchedulingConstraintsCard from '../offices/cards/SchedulingConstraintsCard';\nimport NotificationCard from '../offices/cards/NotificationsCard';\nimport AssignRulesCard from '../offices/cards/AssignRulesCard';\nimport RolesCard from '../offices/cards/RolesCard';\nimport SuspensionsCard from './cards/SuspensionsCard';\nimport GamePenaltiesCard from './cards/GamePenaltiesCard';\nimport OfficeSettingsCard from '../offices/cards/OfficeSettingsCard';\nimport ExternalProvidersCard from '../externalProviders/ExternalProvidersCard';\nimport OfficeActionsCard from '../offices/cards/OfficeActionsCard';\n\nconst SummaryTab = props => {\n const office = useRecordContext(props);\n const scopes = useScopes();\n const { data: branchSettings } = useBranchSettings(office?.id)\n\n const showSchedules = isAuthorized(office, 'schedules', 'list')\n const showGamePenalties = isAuthorized(office, 'gamepenalties', 'show')\n const showSuspensions = isAuthorized(office, 'suspensions', 'show') && branchSettings?.ff_suspensions;\n const showReports = isAuthorized(scopes, 'reports', 'list');\n const showExternalProviders = isAuthorized(office, 'leagues', 'list');\n\n const showAvailabilitiesCard = isAuthorized(office, 'availabilities', 'list')\n const canEditAvailabilities = isAuthorized(office, 'availabilities', 'edit')\n\n return <Tab {...props}>\n <Grid container spacing={3}>\n {showSchedules && <Grid item xs={12} md={8} >\n <SchedulesCard showOffice={false} />\n </Grid>}\n <Grid item xs={12} md={4} >\n <OfficeActionsCard />\n </Grid>\n {showAvailabilitiesCard && <Grid item xs={12}>\n <AvailabilityCard collapsable editable={canEditAvailabilities} />\n </Grid>}\n {showGamePenalties && <Grid item xs={12}>\n <GamePenaltiesCard collapsable />\n </Grid>}\n {showSuspensions && <Grid item xs={12}>\n <SuspensionsCard collapsable />\n </Grid>}\n {showReports && <Grid item xs={12}>\n <ReportsCard targetType=\"Office\" officeId={office.id} />\n </Grid>}\n {showExternalProviders && <Grid item xs={12}>\n <ExternalProvidersCard targetId={office?.id} />\n </Grid>}\n </Grid>\n </Tab>\n}\n\nconst SchedulerTab = props => {\n const office = useRecordContext();\n const isEnabled = useFlag();\n const isMobile = useMediaQuery(theme => theme.breakpoints.down('xs'));\n\n const showScheduler = isAuthorized(office, 'offices', 'schedulerTab');\n\n if (!isEnabled(FF_DRAFT_GAMES) || isMobile || !showScheduler) return null;\n\n return <Tab {...props}>\n <SchedulerView office={office} />\n </Tab>\n}\n\nconst SettingsTab = props => {\n const office = useRecordContext(props);\n\n if (!isAuthorized(office, 'offices', 'settingsTab')) return null\n\n const showGroups = isAuthorized(office, 'groups', 'list')\n const canShowConstraints = isAuthorized(office, 'schedulingConstraints', 'list')\n const showAssignRules = isAuthorized(office, 'assignRules', 'list')\n const showNotifications = isAuthorized(office, 'notifications', 'list')\n const showRoles = isAuthorized(office, 'roles', 'list')\n const showSettings = isAuthorized(office, 'officeSettings', 'list')\n\n return <Tab {...props}>\n <Grid container spacing={3}>\n {showSettings && <Grid item xs={12} md={6}>\n <OfficeSettingsCard />\n </Grid>}\n {showGroups && <Grid item xs={12}>\n <GroupsCard />\n </Grid>}\n {canShowConstraints && <Grid item xs={12}>\n <SchedulingConstraintsCard scheduleTypes={office.type} />\n </Grid>}\n {showAssignRules && <Grid item xs={12}>\n <AssignRulesCard\n title=\"resources.assignRules.labels.alt_card.title\"\n subtitle=\"resources.assignRules.labels.alt_card.subtitle\"\n icon={<AssignmentIndOutlined />}\n types={[\"officeId\", \"assignType\"]} />\n </Grid>}\n {showRoles && <Grid item xs={12}>\n <RolesCard />\n </Grid>}\n {showNotifications && <Grid item xs={12}>\n <NotificationCard />\n </Grid>}\n </Grid>\n </Tab>\n}\n\nexport const LeagueShowLayout = props => {\n const office = useRecordContext(props);\n\n if (office?.type !== 'League') return <Redirect to={`/offices/${office?.id}/show`} />\n return <TabbedShowLayout>\n <SummaryTab label=\"resources.offices.labels.tabs.summary\" />\n <SchedulerTab label=\"resources.offices.labels.tabs.scheduler\" path=\"scheduler\" />\n <SettingsTab label=\"resources.offices.labels.tabs.settings\" path=\"settings\" />\n </TabbedShowLayout>\n}\n","import React from 'react';\nimport { TextInput, SimpleForm } from 'react-admin';\nimport { useFormState } from 'react-final-form';\nimport { Grid } from '@material-ui/core'\n\nimport { useScopes } from '../../http';\nimport Toolbar from '../../common/ra/Toolbar';\nimport { TimezoneEnumInput } from '../../common/inputs/EnumInputs';\nimport LogoInput from '../../common/inputs/LogoInput'\nimport { SyncAlert, useRecordSynced } from '../../common/SyncAlert';\n\nimport { OfficeInput } from '../offices/OfficeInput';\n\nconst validate = values => {\n const errors = {};\n if (!values.name) errors.name = 'ra.validation.required';\n if (!values.type) errors.type = 'ra.validation.required';\n if (!values.timezone) errors.timezone = 'ra.validation.required';\n if (!values.parentId) errors.parentId = 'ra.validation.required';\n if (values.id && (values.id === values.parentId)) errors.parentId = 'resources.offices.validations.same_office';\n\n return errors;\n}\n\nconst inputProps = {\n resource: 'offices',\n basePath: '/offices',\n variant: 'outlined',\n margin: 'none',\n fullWidth: true,\n}\n\nconst NameInput = props => {\n const { values } = useFormState()\n const { name } = values;\n\n const hasDivision = name && name.match(/U\\d+|Initiation|Novice|Atom|PeeWee|Bantam|Midget|Juvenile/i)\n const helperText = hasDivision ? \"resources.offices.helpers.name\" : null;\n\n return <TextInput helperText={helperText} {...props} />\n}\n\nexport const LeagueForm = ({ hideType = false, initialValues, ...props }) => {\n const [ isSynced, toggle ] = useRecordSynced(props);\n const scopes = useScopes();\n\n const isInternal = scopes.includes('internal');\n\n return <>\n <SyncAlert isSynced={isSynced} toggle={toggle} />\n <SimpleForm toolbar={<Toolbar isSynced={isSynced} />} validate={validate} initialValues={{ ...initialValues, type: 'League' }} {...props}>\n <Grid container spacing={2} fullWidth>\n <Grid item xs={12}>\n <NameInput source=\"name\" autoFocus disabled={isSynced} {...inputProps} />\n </Grid>\n <Grid item xs={12} md={7}>\n <OfficeInput source=\"parentId\" filter={{ type: { nin: ['League', 'Tournament', 'Cup', 'Zone'] }, _scope: 'Tenant' }} disabled={isSynced} {...inputProps} />\n </Grid>\n <Grid item xs={12} md={5}>\n <TimezoneEnumInput source=\"timezone\" {...inputProps} />\n </Grid>\n {(!isSynced || isInternal) && <Grid item xs={12}>\n <LogoInput source=\"logo\" {...inputProps} />\n </Grid>}\n </Grid>\n </SimpleForm>\n </>\n}\n","import React from 'react';\nimport { Filter, TextInput } from 'react-admin'\n\nexport const TournamentFilters = props =>\n <Filter variant=\"outlined\" {...props}>\n <TextInput source=\"name\" alwaysOn />\n </Filter>\n","import React from 'react';\nimport { DatagridRow, RecordContextProvider } from 'react-admin';\n\nimport GroupedView from '../../common/GroupedView';\nimport { OfficeField } from '../offices/OfficeField';\nimport { OfficeNameField } from '../offices/OfficeGrid';\n\nconst TournamentTitle = ({ group: id }) => {\n return <RecordContextProvider value={{ id }}>\n <OfficeField source=\"id\" variant=\"subtitle2\" link={false} />\n </RecordContextProvider>\n}\n\nconst TournamentList = ({ records, basePath, resource, classes, ...props }) => {\n return records.map(record =>\n <DatagridRow key={record.id} basePath={basePath} resource={resource} record={record} id={record.id} rowClick=\"show\" className={classes.row}>\n <OfficeNameField source=\"name\" />\n </DatagridRow>\n )\n}\n\nexport const TournamentView = () =>\n <GroupedView grouping={tournament => tournament.parentId} titleComponent={TournamentTitle}>\n <TournamentList />\n </GroupedView>\n","import React from 'react';\nimport { useRecordContext } from 'react-admin';\nimport { Grid, useMediaQuery } from '@material-ui/core';\nimport { AssignmentIndOutlined } from '@material-ui/icons';\nimport { Redirect } from 'react-router-dom';\n\nimport { FF_DRAFT_GAMES } from '@hisports/common/featureFlags';\n\nimport { isAuthorized } from '../../common/Authorize';\nimport { Tab, TabbedShowLayout } from '../../common/ra/TabbedShowLayout';\nimport { useFlag } from '../../http';\nimport SchedulerView from '../../common/calendar/scheduler/SchedulerView';\n\nimport SchedulesCard from '../offices/cards/SchedulesCard';\nimport AvailabilityCard from '../availabilities/AvailabilityCard';\nimport GroupsCard from '../offices/cards/GroupsCard';\nimport SchedulingConstraintsCard from '../offices/cards/SchedulingConstraintsCard';\nimport RolesCard from '../offices/cards/RolesCard';\nimport NotificationCard from '../offices/cards/NotificationsCard';\nimport AssignRulesCard from '../offices/cards/AssignRulesCard';\nimport SuspensionsCard from '../leagues/cards/SuspensionsCard';\nimport GamePenaltiesCard from '../leagues/cards/GamePenaltiesCard';\nimport OfficeSettingsCard from '../offices/cards/OfficeSettingsCard';\nimport ExternalProvidersCard from '../externalProviders/ExternalProvidersCard';\nimport OfficeActionsCard from '../offices/cards/OfficeActionsCard';\n\nconst SummaryTab = props => {\n const office = useRecordContext(props);\n\n const showSchedules = isAuthorized(office, 'schedules', 'list')\n const showGamePenalties = isAuthorized(office, 'gamepenalties', 'show')\n const showSuspensions = isAuthorized(office, 'suspensions', 'show')\n const showExternalProviders = isAuthorized(office, 'tournaments', 'list');\n\n const showAvailabilitiesCard = isAuthorized(office, 'availabilities', 'list')\n const canEditAvailabilities = isAuthorized(office, 'availabilities', 'edit')\n\n return <Tab {...props}>\n <Grid container spacing={3}>\n {showSchedules && <Grid item xs={12} md={8} >\n <SchedulesCard showOffice={false} />\n </Grid>}\n <Grid item xs={12} md={4} >\n <OfficeActionsCard />\n </Grid>\n {showAvailabilitiesCard && <Grid item xs={12}>\n <AvailabilityCard collapsable editable={canEditAvailabilities} />\n </Grid>}\n {showGamePenalties && <Grid item xs={12}>\n <GamePenaltiesCard collapsable />\n </Grid>}\n {showSuspensions && <Grid item xs={12}>\n <SuspensionsCard collapsable />\n </Grid>}\n {showExternalProviders && <Grid item xs={12}>\n <ExternalProvidersCard targetId={office?.id} />\n </Grid>}\n </Grid>\n </Tab>\n}\n\nconst SchedulerTab = props => {\n const office = useRecordContext()\n const isEnabled = useFlag()\n const isMobile = useMediaQuery(theme => theme.breakpoints.down('xs'));\n\n const showScheduler = isAuthorized(office, 'offices', 'schedulerTab');\n\n if (!isEnabled(FF_DRAFT_GAMES) || isMobile || !showScheduler) return null;\n\n return <Tab {...props}>\n <SchedulerView office={office} />\n </Tab>\n}\n\nconst SettingsTab = props => {\n const office = useRecordContext(props);\n\n if (!isAuthorized(office, 'offices', 'settingsTab')) return null;\n\n const showGroups = isAuthorized(office, 'groups', 'list')\n const canShowConstraints = isAuthorized(office, 'schedulingConstraints', 'list')\n const showRoles = isAuthorized(office, 'roles', 'list')\n const showNotifications = isAuthorized(office, 'notifications', 'list')\n const showAssignRules = isAuthorized(office, 'assignRules', 'list')\n const showSettings = isAuthorized(office, 'officeSettings', 'list')\n\n return <Tab {...props}>\n <Grid container spacing={3}>\n {showSettings && <Grid item xs={12} md={6}>\n <OfficeSettingsCard />\n </Grid>}\n {showGroups && <Grid item xs={12}>\n <GroupsCard />\n </Grid>}\n {canShowConstraints && <Grid item xs={12}>\n <SchedulingConstraintsCard scheduleTypes={office.type} />\n </Grid>}\n {showAssignRules && <Grid item xs={12}>\n <AssignRulesCard\n title=\"resources.assignRules.labels.alt_card.title\"\n subtitle=\"resources.assignRules.labels.alt_card.subtitle\"\n icon={<AssignmentIndOutlined />}\n types={[\"officeId\", \"assignType\"]} />\n </Grid>}\n {showRoles && <Grid item xs={12}>\n <RolesCard />\n </Grid>}\n {showNotifications && <Grid item xs={12}>\n <NotificationCard />\n </Grid>}\n </Grid>\n </Tab>\n}\n\nexport const TournamentShowLayout = props => {\n const office = useRecordContext(props);\n\n if (office?.type !== 'Tournament') return <Redirect to={`/offices/${office?.id}/show`} />\n return <TabbedShowLayout>\n <SummaryTab label=\"resources.offices.labels.tabs.summary\" />\n <SchedulerTab label=\"resources.offices.labels.tabs.scheduler\" path=\"scheduler\" />\n <SettingsTab label=\"resources.offices.labels.tabs.settings\" path=\"settings\" />\n </TabbedShowLayout>\n}\n","import React from 'react';\nimport { TextInput, SimpleForm } from 'react-admin';\nimport { useFormState } from 'react-final-form';\nimport { Grid } from '@material-ui/core'\n\nimport { useScopes } from '../../http';\nimport Toolbar from '../../common/ra/Toolbar';\nimport { TimezoneEnumInput } from '../../common/inputs/EnumInputs';\nimport LogoInput from '../../common/inputs/LogoInput'\nimport { SyncAlert, useRecordSynced } from '../../common/SyncAlert';\n\nimport { OfficeInput } from '../offices/OfficeInput';\n\nconst validate = values => {\n const errors = {};\n if (!values.name) errors.name = 'ra.validation.required';\n if (!values.type) errors.type = 'ra.validation.required';\n if (!values.timezone) errors.timezone = 'ra.validation.required';\n if (!values.parentId) errors.parentId = 'ra.validation.required';\n if (values.id && (values.id === values.parentId)) errors.parentId = 'resources.offices.validations.same_office';\n\n return errors;\n}\n\nconst inputProps = {\n resource: 'offices',\n basePath: '/offices',\n variant: 'outlined',\n margin: 'none',\n fullWidth: true,\n}\n\nconst NameInput = props => {\n const { values } = useFormState()\n const { name } = values;\n\n const hasDivision = name && name.match(/U\\d+|Initiation|Novice|Atom|PeeWee|Bantam|Midget|Juvenile/i)\n const helperText = hasDivision ? \"resources.offices.helpers.name\" : null;\n\n return <TextInput helperText={helperText} {...props} />\n}\n\nexport const TournamentForm = ({ hideType = false, initialValues, ...props }) => {\n const [ isSynced, toggle ] = useRecordSynced(props);\n const scopes = useScopes();\n\n const isInternal = scopes.includes('internal');\n\n return <>\n <SyncAlert isSynced={isSynced} toggle={toggle} />\n <SimpleForm toolbar={<Toolbar isSynced={isSynced} />} validate={validate} initialValues={{ ...initialValues, type: 'Tournament' }} {...props}>\n <Grid container spacing={2} fullWidth>\n <Grid item xs={12}>\n <NameInput source=\"name\" autoFocus disabled={isSynced} {...inputProps} />\n </Grid>\n <Grid item xs={12} md={7}>\n <OfficeInput source=\"parentId\" filter={{ type: { nin: ['League', 'Tournament', 'Zone'] }, _scope: 'Tenant' }} disabled={isSynced} {...inputProps} />\n </Grid>\n <Grid item xs={12} md={5}>\n <TimezoneEnumInput source=\"timezone\" {...inputProps} />\n </Grid>\n {(!isSynced || isInternal) && <Grid item xs={12}>\n <LogoInput source=\"logo\" {...inputProps} />\n </Grid>}\n </Grid>\n </SimpleForm>\n </>\n}\n","import React from 'react';\nimport { Filter, TextInput } from 'react-admin'\n\nexport const CupFilters = props =>\n <Filter variant=\"outlined\" {...props}>\n <TextInput source=\"name\" alwaysOn />\n </Filter>\n","import React from 'react';\nimport { DatagridRow, RecordContextProvider } from 'react-admin';\n\nimport GroupedView from '../../common/GroupedView';\nimport { OfficeField } from '../offices/OfficeField';\nimport { OfficeNameField } from '../offices/OfficeGrid';\n\nconst CupTitle = ({ group: id }) => {\n return <RecordContextProvider value={{ id }}>\n <OfficeField source=\"id\" variant=\"subtitle2\" link={false} />\n </RecordContextProvider>\n}\n\nconst CupList = ({ records, basePath, resource, classes, ...props }) => {\n return records.map(record =>\n <DatagridRow key={record.id} basePath={basePath} resource={resource} record={record} id={record.id} rowClick=\"show\" className={classes.row}>\n <OfficeNameField source=\"name\" />\n </DatagridRow>\n )\n}\n\nexport const CupView = () =>\n <GroupedView grouping={cup => cup.parentId} titleComponent={CupTitle}>\n <CupList />\n </GroupedView>\n","import React from 'react';\nimport { useRecordContext } from 'react-admin';\nimport { Grid, useMediaQuery } from '@material-ui/core';\nimport { AssignmentIndOutlined } from '@material-ui/icons';\nimport { Redirect } from 'react-router-dom';\n\nimport { FF_DRAFT_GAMES } from '@hisports/common/featureFlags';\n\nimport { useFlag } from '../../http';\nimport { isAuthorized } from '../../common/Authorize';\nimport { Tab, TabbedShowLayout } from '../../common/ra/TabbedShowLayout';\nimport SchedulerView from '../../common/calendar/scheduler/SchedulerView';\n\nimport SchedulesCard from '../offices/cards/SchedulesCard';\nimport AvailabilityCard from '../availabilities/AvailabilityCard';\nimport GroupsCard from '../offices/cards/GroupsCard';\nimport SchedulingConstraintsCard from '../offices/cards/SchedulingConstraintsCard';\nimport RolesCard from '../offices/cards/RolesCard';\nimport NotificationCard from '../offices/cards/NotificationsCard';\nimport AssignRulesCard from '../offices/cards/AssignRulesCard';\nimport SuspensionsCard from '../leagues/cards/SuspensionsCard';\nimport GamePenaltiesCard from '../leagues/cards/GamePenaltiesCard';\nimport OfficeSettingsCard from '../offices/cards/OfficeSettingsCard';\nimport ExternalProvidersCard from '../externalProviders/ExternalProvidersCard';\nimport OfficeActionsCard from '../offices/cards/OfficeActionsCard';\n\nconst SummaryTab = props => {\n const office = useRecordContext(props);\n\n const showSchedules = isAuthorized(office, 'schedules', 'list')\n const showGamePenalties = isAuthorized(office, 'gamepenalties', 'show')\n const showSuspensions = isAuthorized(office, 'suspensions', 'show')\n const showExternalProviders = isAuthorized(office, 'cups', 'list');\n\n const showAvailabilitiesCard = isAuthorized(office, 'availabilities', 'list')\n const canEditAvailabilities = isAuthorized(office, 'availabilities', 'edit')\n\n return <Tab {...props}>\n <Grid container spacing={3}>\n {showSchedules && <Grid item xs={12} md={8} >\n <SchedulesCard showOffice={false} />\n </Grid>}\n <Grid item xs={12} md={4} >\n <OfficeActionsCard />\n </Grid>\n {showAvailabilitiesCard && <Grid item xs={12}>\n <AvailabilityCard collapsable editable={canEditAvailabilities} />\n </Grid>}\n {showGamePenalties && <Grid item xs={12}>\n <GamePenaltiesCard collapsable />\n </Grid>}\n {showSuspensions && <Grid item xs={12}>\n <SuspensionsCard collapsable />\n </Grid>}\n {showExternalProviders && <Grid item xs={12}>\n <ExternalProvidersCard targetId={office?.id} />\n </Grid>}\n </Grid>\n </Tab>\n}\n\nconst SchedulerTab = props => {\n const office = useRecordContext();\n const isEnabled = useFlag();\n const isMobile = useMediaQuery(theme => theme.breakpoints.down('xs'));\n\n const showScheduler = isAuthorized(office, 'offices', 'schedulerTab');\n\n if (!isEnabled(FF_DRAFT_GAMES) || isMobile || !showScheduler) return null;\n\n return <Tab {...props}>\n <SchedulerView office={office} />\n </Tab>\n}\n\nconst SettingsTab = props => {\n const office = useRecordContext(props);\n\n if (!isAuthorized(office, \"offices\", \"settingsTab\")) return null;\n\n const showGroups = isAuthorized(office, 'groups', 'list')\n const canShowConstraints = isAuthorized(office, 'schedulingConstraints', 'list')\n const showRoles = isAuthorized(office, 'roles', 'list')\n const showNotifications = isAuthorized(office, 'notifications', 'list')\n const showAssignRules = isAuthorized(office, 'assignRules', 'list')\n const showSettings = isAuthorized(office, 'officeSettings', 'list')\n\n return <Tab {...props}>\n <Grid container spacing={3}>\n {showSettings && <Grid item xs={12} md={6}>\n <OfficeSettingsCard />\n </Grid>}\n {showGroups && <Grid item xs={12}>\n <GroupsCard />\n </Grid>}\n {canShowConstraints && <Grid item xs={12}>\n <SchedulingConstraintsCard scheduleTypes={office.type} />\n </Grid>}\n {showAssignRules && <Grid item xs={12}>\n <AssignRulesCard\n title=\"resources.assignRules.labels.alt_card.title\"\n subtitle=\"resources.assignRules.labels.alt_card.subtitle\"\n icon={<AssignmentIndOutlined />}\n types={[\"officeId\", \"assignType\"]} />\n </Grid>}\n {showRoles && <Grid item xs={12}>\n <RolesCard />\n </Grid>}\n {showNotifications && <Grid item xs={12}>\n <NotificationCard />\n </Grid>}\n </Grid>\n </Tab>\n}\n\nexport const CupShowLayout = props => {\n const office = useRecordContext(props);\n\n if (office?.type !== 'Cup') return <Redirect to={`/offices/${office?.id}/show`} />\n return <TabbedShowLayout>\n <SummaryTab label=\"resources.offices.labels.tabs.summary\" />\n <SchedulerTab label=\"resources.offices.labels.tabs.scheduler\" path=\"scheduler\" />\n <SettingsTab label=\"resources.offices.labels.tabs.settings\" path=\"settings\" />\n </TabbedShowLayout>\n}\n","import React from 'react';\nimport { TextInput, SimpleForm } from 'react-admin';\nimport { useFormState } from 'react-final-form';\nimport { Grid } from '@material-ui/core'\n\nimport { useScopes } from '../../http';\nimport Toolbar from '../../common/ra/Toolbar';\nimport { TimezoneEnumInput } from '../../common/inputs/EnumInputs';\nimport LogoInput from '../../common/inputs/LogoInput'\nimport { SyncAlert, useRecordSynced } from '../../common/SyncAlert';\n\nimport { OfficeInput } from '../offices/OfficeInput';\n\nconst validate = values => {\n const errors = {};\n if (!values.name) errors.name = 'ra.validation.required';\n if (!values.type) errors.type = 'ra.validation.required';\n if (!values.timezone) errors.timezone = 'ra.validation.required';\n if (!values.parentId) errors.parentId = 'ra.validation.required';\n if (values.id && (values.id === values.parentId)) errors.parentId = 'resources.offices.validations.same_office';\n\n return errors;\n}\n\nconst inputProps = {\n resource: 'offices',\n basePath: '/offices',\n variant: 'outlined',\n margin: 'none',\n fullWidth: true,\n}\n\nconst NameInput = props => {\n const { values } = useFormState()\n const { name } = values;\n\n const hasDivision = name && name.match(/U\\d+|Initiation|Novice|Atom|PeeWee|Bantam|Midget|Juvenile/i)\n const helperText = hasDivision ? \"resources.offices.helpers.name\" : null;\n\n return <TextInput helperText={helperText} {...props} />\n}\n\nexport const CupForm = ({ hideType = false, initialValues, ...props }) => {\n const [ isSynced, toggle ] = useRecordSynced(props);\n const scopes = useScopes();\n\n const isInternal = scopes.includes('internal');\n\n return <>\n <SyncAlert isSynced={isSynced} toggle={toggle} />\n <SimpleForm toolbar={<Toolbar isSynced={isSynced} />} validate={validate} initialValues={{ ...initialValues, type: 'Cup' }} {...props}>\n <Grid container spacing={2} fullWidth>\n <Grid item xs={12}>\n <NameInput source=\"name\" autoFocus disabled={isSynced} {...inputProps} />\n </Grid>\n <Grid item xs={12} md={7}>\n <OfficeInput source=\"parentId\" filter={{ type: { nin: ['League', 'Cup', 'Zone'] }, _scope: 'Tenant' }} disabled={isSynced} {...inputProps} />\n </Grid>\n <Grid item xs={12} md={5}>\n <TimezoneEnumInput source=\"timezone\" {...inputProps} />\n </Grid>\n {(!isSynced || isInternal) && <Grid item xs={12}>\n <LogoInput source=\"logo\" {...inputProps} />\n </Grid>}\n </Grid>\n </SimpleForm>\n </>\n}\n","import React, { useMemo } from 'react';\nimport { useTranslate } from 'react-admin';\nimport { useLocation } from 'react-router-dom';\n\nimport { List, Show, Create, Edit } from '../../common/ra';\nimport ResourceTitle from '../../common/ResourceTitle';\n\nimport { OfficeActions } from '../offices/OfficeActions';\nimport { OfficeShowHeader } from '../offices';\n\nimport { CupFilters } from './CupFilters';\nimport { CupView } from './CupView';\nimport { CupShowLayout } from './CupShow';\nimport { CupForm } from './CupForm';\n\nexport const CupList = props =>\n <List {...props}\n resource=\"offices\"\n component=\"div\"\n filters={<CupFilters />}\n filter={{ type: 'Cup' }}\n sort={{\n field: ['parent.name', 'name'],\n order: ['ASC', 'ASC'],\n }}\n >\n <CupView rowClick=\"show\" />\n </List>\n\nexport const CupShow = props => {\n const location = useLocation();\n const officeTab = useMemo(() => {\n return location?.pathname?.substring(location.pathname.lastIndexOf('/') + 1)\n }, [ location.pathname ])\n\n return <Show {...props}\n title={<OfficeShowHeader />}\n className={officeTab === 'scheduler' ? 'scheduler-tab-show' : ''}\n actions={<OfficeActions />}\n >\n <CupShowLayout />\n </Show>\n}\n\nexport const CupCreate = props => {\n const translate = useTranslate();\n return <Create\n title={<ResourceTitle title={record => translate('resources.cups.labels.add')} />}\n {...props}\n >\n <CupForm redirect=\"show\" initialValues={{ type: 'Cup' }} hideType />\n </Create>\n}\n\nexport const CupEdit = props => {\n const translate = useTranslate();\n return <Edit\n title={<ResourceTitle title={record => translate('resources.cups.labels.editing', { name: record.name })} />}\n {...props}\n >\n <CupForm redirect=\"show\" />\n </Edit>\n}\n","import React from 'react';\nimport { DatagridRow, TextField } from 'react-admin';\nimport { makeStyles } from '@material-ui/core';\n\nimport FunctionField from '../../common/fields/FunctionField'\nimport GroupedView from '../../common/GroupedView';\nimport { getVenueCity, getVenueName } from './util';\n\nconst useStyles = makeStyles(theme => ({\n row: {\n '& .column-name': {\n width: theme.spacing(50),\n },\n '& .column-address': {\n width: theme.spacing(50),\n },\n }\n}))\n\nconst VenuesList = ({ records, basePath, resource, ...props }) => {\n const classes = useStyles(props);\n\n return records.map(record =>\n <DatagridRow key={record.id} basePath={basePath} resource={resource} record={record} id={record.id} rowClick=\"show\" className={classes.row}>\n <FunctionField source=\"name\" render={getVenueName} />\n <TextField source=\"address\" />\n </DatagridRow>\n )\n}\n\nexport const VenueView = () =>\n <GroupedView grouping={venue => getVenueCity(venue, true, true, false, false)}>\n <VenuesList />\n </GroupedView>\n","import React from 'react';\nimport { Filter, TextInput } from 'react-admin';\n\nexport const VenueFilters = props =>\n <Filter variant=\"outlined\" {...props}>\n <TextInput source=\"name\" alwaysOn />\n </Filter>\n","import React from 'react';\nimport { EditButton, useTranslate, useRecordContext, FunctionField, TextField } from 'react-admin';\nimport { Table, TableBody, Button } from '@material-ui/core';\nimport { Directions } from '@material-ui/icons';\n\nimport Row from '../../../common/cards/TableRow';\nimport InfoCard from '../../../common/cards/InfoCard';\nimport { isAuthorized } from '../../../common/Authorize';\n\nimport { getVenueCity, getVenueName } from '../util';\n\nconst DirectionsButton = ({ venue }) => {\n const translate = useTranslate()\n\n if (!venue?.address) return null;\n const href = `https://www.google.com/maps/dir/?api=1&dir_action=navigate&destination=${getVenueCity(venue)}`;\n return <Button color=\"primary\" size=\"small\" startIcon={<Directions />} href={href} target=\"_blank\">\n {translate('ra.action.directions')}\n </Button>\n}\n\nexport default props => {\n const venue = useRecordContext(props);\n const canEditVenue = isAuthorized(venue, 'venues', 'edit');\n\n const city = getVenueCity(venue, true, true, false)\n return <InfoCard title=\"resources.venues.name\" actions={[\n canEditVenue && <EditButton label=\"resources.venues.actions.edit\" record={venue} />,\n <DirectionsButton venue={venue} />\n ]}>\n <Table>\n <TableBody>\n <Row label=\"resources.venues.fields.name\">\n <FunctionField source=\"name\" render={getVenueName} />\n </Row>\n\n <Row label=\"resources.venues.fields.address\">\n {venue.address && <TextField source=\"address\" />}\n {venue.address && city && <br />}\n {city && <FunctionField source=\"city\" render={() => city} />}\n </Row>\n </TableBody>\n </Table>\n </InfoCard>\n}\n","import React from 'react';\nimport { Datagrid, useTranslate } from 'react-admin';\nimport { makeStyles } from '@material-ui/core';\n\nimport Toolbar from '../../common/ra/Toolbar';\nimport FunctionField from '../../common/fields/FunctionField'\n\nimport { getSurfaceAttributes, getSurfaceName } from './util';\n\nconst useStyles = makeStyles({\n headerRow: {\n display: 'none',\n }\n})\n\nexport const SurfaceGrid = ({ includeVenue = true, ...props }) => {\n const translate = useTranslate();\n const classes = useStyles();\n return <Datagrid size=\"medium\" toolbar={<Toolbar />} classes={classes} {...props}>\n <FunctionField source=\"name\" sortable render={surface => getSurfaceName(surface, includeVenue)} />\n <FunctionField source=\"fraction\" render={surface => getSurfaceAttributes(surface, translate)} />\n </Datagrid>;\n}\n","import React, { useRef } from 'react';\nimport { TextInput, SimpleForm } from 'react-admin';\nimport { Grid } from '@material-ui/core';\nimport { useSelector } from 'react-redux';\nimport { useFormState } from 'react-final-form';\nimport createCalculator from 'final-form-calculate';\n\nimport { useSport } from '../../http';\nimport Toolbar from '../../common/ra/Toolbar';\nimport { SportsEnumInput, SurfaceSizeEnumInput, SurfaceTypeEnumInput } from '../../common/inputs/EnumInputs';\nimport { SyncAlert, useRecordSynced } from '../../common/SyncAlert';\n\nimport { VenueInput } from '../venues/VenueInput';\n\nimport { SurfaceInput } from './SurfaceInput';\n\nconst validate = surfaces => values => {\n const errors = {};\n\n if (!values.venueId) errors.venueId = 'ra.validation.required'\n if (!values.name) errors.name = 'ra.validation.required'\n if (!values.fraction && values.parentId) errors.fraction = 'ra.validation.required'\n if (!values.type) errors.type = 'ra.validation.required'\n if (!values.size) errors.size = 'ra.validation.required'\n if (!values.sports?.length) errors.sports = 'ra.validation.required'\n\n if (values.parentId && values.name) {\n const parent = surfaces[values.parentId]\n if (parent && parent.name !== values.name) errors.name = 'ra.validation.invalid';\n }\n\n return errors;\n}\n\nconst inputProps = {\n resource: 'surfaces',\n basePath: '/surfaces',\n variant: 'outlined',\n margin: 'none',\n fullWidth: true,\n}\n\nconst ParentSurfaceInput = props => {\n const { values } = useFormState();\n return <SurfaceInput source=\"parentId\" filter={{ venueId: values?.venueId }} disabled={!values?.venueId} {...props} />\n}\n\nconst NameInput = ({ disabled, ...props }) => {\n const { values, initialValues } = useFormState();\n const isSplitSurface = values.parentId != null;\n return <TextInput disabled={disabled || (isSplitSurface && !initialValues[props.source])} {...props} />\n}\n\nconst FractionInput = ({ disabled, ...props }) => {\n const { values, initialValues } = useFormState();\n const isSplitSurface = values.parentId != null;\n return <TextInput disabled={disabled || (!isSplitSurface && !initialValues[props.source])} {...props} />\n}\n\nexport const SurfaceForm = ({ initialValues = {}, ...props }) => {\n const [ isSynced, toggle ] = useRecordSynced(props)\n const sport = useSport();\n\n const surfaces = useSelector(store => store.admin.resources.surfaces.data);\n const surfacesRef = useRef({});\n surfacesRef.current = surfaces;\n\n // decorators must be wrapped in useRef otherwise SimpleForm prop will register duplicates\n // this bug seems to be triggered by use of hooks (useSelector)\n const decorators = useRef([createCalculator({\n field: 'parentId',\n updates: {\n name: (parentId, values) => {\n if (!parentId) return values.name;\n const parent = surfacesRef.current[parentId];\n if (!parent?.name) return values.name;\n return parent.name;\n },\n type: (parentId, values) => {\n if (!parentId) return values.type;\n const parent = surfacesRef.current[parentId];\n if (!parent?.type) return values.type;\n return parent.type;\n },\n }\n })])\n\n const isSplitSurface = initialValues.parentId;\n return <>\n <SyncAlert isSynced={isSynced} toggle={toggle} />\n <SimpleForm initialValues={{ sports: [ sport ], ...initialValues }} decorators={decorators.current} toolbar={<Toolbar isSynced={isSynced} />} validate={validate(surfacesRef.current)} {...props}>\n <Grid container spacing={2} fullWidth>\n <Grid item xs={12} md={6}>\n <VenueInput source=\"venueId\" disabled={isSynced || initialValues.venueId} {...inputProps} />\n </Grid>\n <Grid item xs={12} md={6}>\n <ParentSurfaceInput source=\"parentId\" disabled={isSynced || isSplitSurface} {...inputProps} />\n </Grid>\n <Grid item xs={12} md={4}>\n <NameInput source=\"name\" label=\"resources.surfaces.labels.name\" autoFocus={!isSplitSurface} disabled={isSynced} {...inputProps} />\n </Grid>\n <Grid item xs={12} md={4}>\n <FractionInput source=\"fraction\" autoFocus={isSplitSurface} disabled={isSynced} {...inputProps} />\n </Grid>\n <Grid item xs={12} md={4}>\n <TextInput source=\"alias\" helperText=\"resources.surfaces.helpers.alias\" {...inputProps} />\n </Grid>\n <Grid item xs={12} md={4}>\n <SurfaceTypeEnumInput source=\"type\" disabled={isSynced} {...inputProps} />\n </Grid>\n <Grid item xs={12} md={4}>\n <SurfaceSizeEnumInput source=\"size\" disabled={isSynced} {...inputProps} />\n </Grid>\n <Grid item xs={12} md={4}>\n <SportsEnumInput source=\"sports\" {...inputProps} />\n </Grid>\n </Grid>\n </SimpleForm>\n </>\n}\n","import React, { Fragment, useState } from 'react';\nimport { useTranslate } from 'react-admin';\nimport { Button } from '@material-ui/core';\nimport { Add } from '@material-ui/icons';\n\nimport { DialogDatagrid } from '../../common/dialogs/DialogDatagrid';\nimport { CreateResourceDialog, EditResourceDialog } from '../../common/dialogs/ResourceDialog';\n\nimport { SurfaceForm } from './SurfaceForm';\n\nconst AddSurfaceDialog = props =>\n <CreateResourceDialog label=\"resources.surfaces.actions.add\" resource=\"surfaces\" maxWidth=\"md\" basePath=\"/surfaces\" {...props}>\n <SurfaceForm />\n </CreateResourceDialog>\n\nconst EditSurfaceDialog = props =>\n <EditResourceDialog label=\"resources.surfaces.labels.edit\" resource=\"surfaces\" maxWidth=\"md\" basePath=\"/surfaces\" {...props}>\n <SurfaceForm />\n </EditResourceDialog>\n\nexport const AddSurfaceButton = ({ size, variant, ...props }) => {\n const [ isOpen, setOpen ] = useState(false);\n const translate = useTranslate();\n return <>\n <Button color=\"primary\" size={size} variant={variant} startIcon={<Add />} onClick={() => setOpen(true)}>\n {translate('resources.surfaces.actions.add')}\n </Button>\n <AddSurfaceDialog isOpen={isOpen} handleClose={() => setOpen(false)} {...props} />\n </>\n}\n\nexport const SurfaceDatagrid = props => <DialogDatagrid dialog={EditSurfaceDialog} {...props} />\n","import React from 'react';\nimport { useRecordContext } from 'react-admin';\n\nimport ListCard from '../../../common/cards/ListCard';\nimport { isAuthorized } from '../../../common/Authorize';\n\nimport { SurfaceGrid } from '../../surfaces/SurfaceGrid';\nimport { AddSurfaceButton } from '../../surfaces/SurfaceModal';\nimport { SurfaceIcon } from '../../icons';\n\nexport default props => {\n const venue = useRecordContext();\n\n const canAddSurface = isAuthorized(venue, 'surfaces', 'create');\n const addButton = canAddSurface && <AddSurfaceButton initialValues={{ venueId: venue.id }} />\n\n return <ListCard\n {...props}\n title=\"resources.surfaces.labels.card.title\"\n icon={<SurfaceIcon />}\n reference=\"surfaces\"\n target=\"venueId\"\n addButton={addButton}\n filter={{ _scope: 'Tenant', parentId: null }}\n sort={{\n field: 'name',\n order: 'ASC',\n }}\n >\n <SurfaceGrid includeVenue={false} rowClick=\"show\" />\n </ListCard>\n}\n","import React from 'react';\n\nimport ListCard from '../../../common/cards/ListCard';\nimport { InlineDateInput } from '../../../common/inputs/DateInput';\nimport { useSeason } from '../../../common/inputs/SeasonSelector';\n\nimport { EventView } from '../../events/EventView';\nimport { CALENDAR_VIEWS, EventViewSettingsMenu, useEventSort, useShowCalendar } from '../../events/EventViewSettings';\nimport { EventReferenceManyField } from '../../events/EventReferenceField';\nimport { rowClick } from '../../events/EventGrid';\nimport { EventIcon } from '../../icons';\n\nexport default props => {\n const [ showCalendar ] = useShowCalendar();\n const sort = useEventSort();\n const seasonId = useSeason();\n\n const actions = [\n <EventViewSettingsMenu alwaysOn showTeamEvents showSlots showAvailabilties disableGroupArenas />,\n ].filter(Boolean);\n\n const filters = [\n <InlineDateInput source=\"startTime\" label=\"resources.games.filters.startTime\" variant=\"outlined\" alwaysOn />,\n <InlineDateInput source=\"endTime\" label=\"resources.games.filters.endTime\" variant=\"outlined\" alwaysOn />,\n ]\n\n return <ListCard\n title=\"resources.schedules.labels.scheduled_events\"\n icon={<EventIcon />}\n resource=\"games\"\n target=\"venueId\"\n base={EventReferenceManyField}\n baseProps={{\n includeGames: true,\n includeDraftGames: showCalendar,\n includePractices: true,\n includeActivities: false,\n includeSlots: showCalendar,\n includeAvailabilities: showCalendar,\n }}\n filter={{ seasonId }}\n actions={actions}\n filters={filters}\n sort={sort}\n noResultsText={!showCalendar}\n >\n <EventView rowClick={rowClick} includeVenue={false} strictView={CALENDAR_VIEWS.WEEK} disableScheduling />\n </ListCard>\n}\n","import React from 'react';\nimport { SimpleShowLayout } from 'react-admin';\nimport { Grid } from '@material-ui/core';\n\nimport VenueCard from './cards/VenueCard';\nimport SurfacesCard from './cards/SurfacesCard';\nimport EventsCard from './cards/EventsCard';\n\nexport const VenueShowLayout = props =>\n <SimpleShowLayout>\n <Grid container spacing={3}>\n <Grid item xs={12} md={6}>\n <VenueCard />\n </Grid>\n <Grid item xs={12} md={6} />\n <Grid item xs={12}>\n <SurfacesCard />\n </Grid>\n <Grid item xs={12}>\n <EventsCard />\n </Grid>\n </Grid>\n </SimpleShowLayout>\n","import React from 'react';\nimport { TextInput, SimpleForm } from 'react-admin';\nimport { Grid } from '@material-ui/core';\n\nimport Toolbar from '../../common/ra/Toolbar';\nimport { TimezoneEnumInput } from '../../common/inputs/EnumInputs';\nimport { SyncAlert, useRecordSynced } from '../../common/SyncAlert';\n\nconst validate = values => {\n const errors = {};\n\n if (!values.name) errors.name = 'ra.validation.required'\n if (!values.city) errors.city = 'ra.validation.required'\n if (!values.region) errors.region = 'ra.validation.required'\n if (!values.postalCode) errors.postalCode = 'ra.validation.required'\n if (!values.country) errors.country = 'ra.validation.required'\n if (!values.timezone) errors.timezone = 'ra.validation.required'\n\n return errors;\n}\n\nconst inputProps = {\n resource: 'venues',\n basePath: '/venues',\n variant: 'outlined',\n margin: 'none',\n fullWidth: true,\n}\n\nexport const VenueForm = props => {\n const [ isSynced, toggle ] = useRecordSynced(props)\n\n return <>\n <SyncAlert isSynced={isSynced} toggle={toggle} />\n <SimpleForm toolbar={<Toolbar isSynced={isSynced} />} validate={validate} {...props}>\n <Grid container spacing={2} fullWidth>\n <Grid item xs={12} md={4}>\n <TextInput source=\"name\" label=\"resources.venues.labels.name\" autoFocus disabled={isSynced} {...inputProps} />\n </Grid>\n <Grid item xs={12} sm={4} md={4}>\n <TextInput source=\"alias\" helperText=\"resources.surfaces.helpers.alias\" {...inputProps} />\n </Grid>\n <Grid item xs={12} sm={4} md={4}>\n <TextInput source=\"address\" label=\"resources.venues.labels.street_address\" disabled={isSynced} {...inputProps} />\n </Grid>\n <Grid item xs={12} sm={4} md={4}>\n <TextInput source=\"city\" disabled={isSynced} {...inputProps} />\n </Grid>\n <Grid item xs={12} sm={4} md={4}>\n <TextInput source=\"region\" disabled={isSynced} {...inputProps} />\n </Grid>\n <Grid item xs={12} sm={4} md={4}>\n <TextInput source=\"postalCode\" disabled={isSynced} {...inputProps} />\n </Grid>\n <Grid item xs={12} sm={4} md={4}>\n <TextInput source=\"country\" disabled={isSynced} {...inputProps} />\n </Grid>\n <Grid item xs={12} sm={4} md={4}>\n <TimezoneEnumInput source=\"timezone\" disabled={isSynced} {...inputProps} />\n </Grid>\n </Grid>\n </SimpleForm>\n </>\n}\n","import React from 'react';\n\nimport { List, Show, Create, Edit } from '../../common/ra';\nimport ResourceTitle from '../../common/ResourceTitle';\n\nimport { VenueView } from './VenueView';\nimport { VenueFilters } from './VenueFilters';\nimport { VenueShowLayout } from './VenueShow';\n\nimport { getVenueName } from './util';\nimport { VenueForm } from './VenueForm';\nimport { useTranslate } from 'react-admin';\n\nexport const VenueList = props =>\n <List {...props}\n component=\"div\"\n filters={<VenueFilters />}\n filterDefaultValues={{ _scope: 'Tenant' }}\n title=\"Venues\"\n sort={{\n field: ['country', 'region', 'city', 'name'],\n order: ['ASC', 'ASC', 'ASC', 'ASC'],\n }}\n >\n <VenueView rowClick=\"show\" />\n </List>\n\nexport const VenueShow = props =>\n <Show {...props}\n title={<ResourceTitle title={getVenueName} />}\n >\n <VenueShowLayout />\n </Show>\n\nexport const VenueCreate = props => {\n const translate = useTranslate();\n return <Create\n title={<ResourceTitle title={record => translate('resources.venues.actions.add')} />}\n {...props}\n >\n <VenueForm redirect=\"show\" />\n </Create>\n}\n\nexport const VenueEdit = props => {\n const translate = useTranslate();\n return <Edit\n title={<ResourceTitle title={record => translate('ra.page.editing', { name: getVenueName(record) })} />}\n {...props}\n >\n <VenueForm redirect=\"show\" />\n </Edit>\n}\n","import React from 'react';\nimport { DatagridRow, useTranslate } from 'react-admin';\nimport { makeStyles } from '@material-ui/core';\n\nimport FunctionField from '../../common/fields/FunctionField'\nimport GroupedView from '../../common/GroupedView';\nimport { getSurfaceAttributes, getSurfaceCity, getSurfaceName } from './util';\n\nconst useStyles = makeStyles(theme => ({\n row: {\n '& .column-name': {\n width: theme.spacing(50),\n },\n '& .column-fraction': {\n width: theme.spacing(50),\n },\n }\n}))\n\nconst SurfacesList = ({ records, basePath, resource, ...props }) => {\n const translate = useTranslate();\n const classes = useStyles(props);\n\n return records.map(record =>\n <DatagridRow key={record.id} basePath={basePath} resource={resource} record={record} id={record.id} rowClick=\"show\" className={classes.row}>\n <FunctionField source=\"name\" render={surface => getSurfaceName(surface)} />\n <FunctionField source=\"fraction\" render={surface => getSurfaceAttributes(surface, translate)} />\n </DatagridRow>\n )\n}\n\nexport const SurfaceView = () =>\n <GroupedView grouping={surface => getSurfaceCity(surface)}>\n <SurfacesList />\n </GroupedView>\n","import React from 'react';\nimport { Filter, TextInput } from 'react-admin';\n\nexport const SurfaceFilters = props =>\n <Filter variant=\"outlined\" {...props}>\n <TextInput source=\"name\" alwaysOn />\n </Filter>\n","import React from 'react';\nimport { TextField, EditButton, useTranslate, useRecordContext, FunctionField } from 'react-admin';\nimport { Table, TableBody, Button } from '@material-ui/core';\nimport { Directions } from '@material-ui/icons';\n\nimport Row from '../../../common/cards/TableRow';\nimport InfoCard from '../../../common/cards/InfoCard';\nimport { isAuthorized } from '../../../common/Authorize';\nimport { VenueField } from '../../venues/VenueField';\n\nimport { getSurfaceCity } from '../util';\nimport { SurfaceField } from '../SurfaceField';\nimport { EnumField } from '../../../common/inputs/EnumInputs';\n\nconst DirectionsButton = ({ surface }) => {\n const translate = useTranslate()\n\n const address = getSurfaceCity(surface, true, true, true)\n if (!address) return null;\n const href = `https://www.google.com/maps/dir/?api=1&dir_action=navigate&destination=${address}`;\n return <Button color=\"primary\" size=\"small\" startIcon={<Directions />} href={href} target=\"_blank\">\n {translate('ra.action.directions')}\n </Button>\n}\n\nexport default props => {\n const surface = useRecordContext(props);\n const canEditSurface = isAuthorized(surface, 'surfaces', 'edit');\n\n const city = getSurfaceCity(surface, true, true, false)\n return <InfoCard title=\"resources.surfaces.name\" actions={[\n canEditSurface && <EditButton label=\"resources.surfaces.actions.edit\" record={surface} />,\n <DirectionsButton surface={surface} />\n ]}>\n <Table>\n <TableBody>\n <Row label=\"resources.surfaces.fields.venueId\">\n <VenueField source=\"venueId\" />\n </Row>\n {surface?.parentId && <Row label=\"resources.surfaces.fields.parentId\">\n <SurfaceField source=\"parentId\" includeAttributes=\"full\" />\n </Row>}\n <Row label=\"resources.surfaces.fields.name\">\n <TextField source=\"name\" />\n </Row>\n <Row label=\"resources.surfaces.fields.address\">\n {surface.venue?.address && <TextField source=\"venue.address\" />}\n {surface.venue?.address && city && <br />}\n {city && <FunctionField source=\"city\" render={() => city} />}\n </Row>\n <Row label=\"resources.surfaces.fields.type\" hidden={!surface?.type}>\n <EnumField source=\"type\" />\n </Row>\n <Row label=\"resources.surfaces.fields.size\" hidden={!surface?.size}>\n <EnumField source=\"size\" />\n </Row>\n </TableBody>\n </Table>\n </InfoCard>\n}\n","import React from 'react';\nimport { useRecordContext } from 'react-admin';\nimport { makeStyles } from '@material-ui/core';\n\nimport ListCard from '../../../common/cards/ListCard';\nimport { isAuthorized } from '../../../common/Authorize';\n\nimport { ArenaOfficesGrid } from '../../arenaoffices/ArenaOfficesGrid';\nimport { AddArenaOfficeButton } from '../../arenaoffices/ArenaOfficeModal';\n\nconst useStyles = makeStyles({\n headerRow: {\n display: 'none',\n }\n})\n\nexport default props => {\n const surface = useRecordContext(props);\n const canAddOffices = isAuthorized(surface, 'arenaoffices', 'create') && !surface.parentId;\n const classes = useStyles()\n\n return <ListCard\n title=\"resources.offices.labels.card.title\"\n reference=\"arenaoffices\"\n target=\"arenaId\"\n sort={{\n field: ['isPrimary', 'office.name'],\n order: ['DESC', 'ASC'],\n }}\n filter={{ effectiveSurfaces: true }}\n addButton={canAddOffices && <AddArenaOfficeButton initialValues={{ arenaId: surface?.id }} target=\"arenaId\" />}\n collapsable\n >\n <ArenaOfficesGrid showArena={false} classes={classes} />\n </ListCard>\n}\n","import React from 'react';\n\nimport ListCard from '../../../common/cards/ListCard';\nimport { InlineDateInput } from '../../../common/inputs/DateInput';\nimport { useSeason } from '../../../common/inputs/SeasonSelector';\nimport { EventIcon } from '../../icons';\n\nimport { EventView } from '../../events/EventView';\nimport { CALENDAR_VIEWS, EventViewSettingsMenu, useEventSort, useShowCalendar } from '../../events/EventViewSettings';\nimport { EventReferenceManyField } from '../../events/EventReferenceField';\nimport { rowClick } from '../../events/EventGrid';\n\nexport default props => {\n const [ showCalendar ] = useShowCalendar();\n const sort = useEventSort();\n const seasonId = useSeason();\n\n const actions = [\n <EventViewSettingsMenu alwaysOn showTeamEvents showSlots showAvailabilties disableGroupArenas />,\n ].filter(Boolean);\n\n const filters = [\n <InlineDateInput source=\"startTime\" label=\"resources.games.filters.startTime\" variant=\"outlined\" alwaysOn />,\n <InlineDateInput source=\"endTime\" label=\"resources.games.filters.endTime\" variant=\"outlined\" alwaysOn />,\n ]\n\n return <ListCard\n title=\"resources.schedules.labels.scheduled_events\"\n icon={<EventIcon />}\n resource=\"games\"\n target=\"arenaId\"\n base={EventReferenceManyField}\n baseProps={{\n includeGames: true,\n includeDraftGames: showCalendar,\n includePractices: true,\n includeActivities: false,\n includeSlots: showCalendar,\n includeAvailabilities: showCalendar,\n }}\n actions={actions}\n filters={filters}\n filter={{ effectiveSurfaces: true, seasonId }}\n sort={sort}\n noResultsText={!showCalendar}\n >\n <EventView rowClick={rowClick} includeVenue={false} strictView={CALENDAR_VIEWS.WEEK} disableScheduling />\n </ListCard>\n}\n","import React from 'react';\nimport { useRecordContext } from 'react-admin';\n\nimport ListCard from '../../../common/cards/ListCard';\nimport { isAuthorized } from '../../../common/Authorize';\n\nimport { SurfaceGrid } from '../../surfaces/SurfaceGrid';\nimport { AddSurfaceButton } from '../../surfaces/SurfaceModal';\nimport { SurfaceIcon } from '../../icons';\n\nexport default props => {\n const surface = useRecordContext();\n\n const canAddSurface = isAuthorized(surface, 'surfaces', 'create');\n const addButton = canAddSurface && <AddSurfaceButton initialValues={{ venueId: surface?.venue.id, parentId: surface?.id }} />\n\n return <ListCard\n title=\"resources.surfaces.labels.card.title\"\n icon={<SurfaceIcon />}\n {...props}\n reference=\"surfaces\"\n target=\"arenaId\"\n addButton={addButton}\n filter={{ _scope: 'Tenant', effectiveSurfaces: true, includeParents: false }}\n sort={{\n field: 'name',\n order: 'ASC',\n }}\n >\n <SurfaceGrid includeVenue={false} rowClick=\"show\" />\n </ListCard>\n}\n","import React, { useState } from 'react';\nimport { useTranslate } from 'react-admin';\nimport { Button } from '@material-ui/core'\nimport { UnarchiveOutlined } from '@material-ui/icons'\n\nimport { LazyDialog } from '../../../../common/LazyDialog';\n\nconst Uploader = React.lazy(() => import('./Uploader'))\n\nexport default ({ size, variant }) => {\n const [ isOpen, setOpen ] = useState(false);\n const translate = useTranslate();\n\n return <>\n <Button color=\"primary\" size={size} variant={variant} startIcon={<UnarchiveOutlined />} onClick={() => setOpen(true)}>\n {translate('ra.action.import')}\n </Button>\n <LazyDialog>\n {isOpen && <Uploader isOpen={isOpen} onClose={() => setOpen(false)} />}\n </LazyDialog>\n </>\n}\n","import React from 'react';\nimport { useRecordContext } from 'react-admin';\n\nimport { makeStyles } from '@material-ui/core';\nimport { Schedule } from '@material-ui/icons';\n\nimport { isAuthorized } from '../../../common/Authorize';\nimport { InlineDateInput } from '../../../common/inputs/DateInput';\nimport { ArenaSlotTypeEnumInput } from '../../../common/inputs/EnumInputs';\nimport ListCard from '../../../common/cards/ListCard';\n\n// import { CategoryInput } from '../../categories/CategoryInput';\nimport { ArenaSlotsGrid } from '../../arenaslots/ArenaSlotsGrid';\nimport { AddArenaSlotButton } from '../../arenaslots/ArenaSlotModal';\nimport ImportArenaSlots from '../../arenaslots/dialogs/arenaslots';\nimport { ArenaSlotBulkActions } from '../../arenaslots/ArenaSlotBulkActions';\n\nconst useStyles = makeStyles(theme => ({\n filter: {\n minWidth: theme.spacing(22),\n },\n hideHelperText: {\n '& .MuiFormHelperText-root:empty': {\n display: 'none',\n }\n },\n}))\n\nexport default ({ filter, title, initialValues, ...props }) => {\n const surface = useRecordContext(props);\n const classes = useStyles()\n\n const showSlots = isAuthorized(surface, 'arenaslots', 'list');\n const canAddSlots = isAuthorized(surface, 'arenaslots', 'create');\n const canImportSlots = isAuthorized(surface, 'arenaslots', 'import');\n const showBulkActions = isAuthorized(surface, 'arenaslots', 'bulkActions')\n if (!showSlots) return null;\n\n const addButton = canAddSlots && <AddArenaSlotButton initialValues={{ ...initialValues, arenaId: surface.id }} />\n const actions = [\n canImportSlots && <ImportArenaSlots size=\"small\" />,\n ].filter(Boolean)\n\n const filters = [\n <InlineDateInput source=\"startTime\" key=\"startTime\" label=\"resources.arenaslots.fields.startTime\" variant=\"outlined\" alwaysOn />,\n <InlineDateInput source=\"endTime\" key=\"endTime\" label=\"resources.arenaslots.fields.endTime\" variant=\"outlined\" alwaysOn />,\n <ArenaSlotTypeEnumInput source=\"types\" key=\"types\" label=\"resources.arenaslots.fields.types\" variant=\"outlined\" alwaysOn multiple className={classes.filter} {...props} />\n ];\n\n return <ListCard\n {...props}\n title={title || \"resources.arenaslots.labels.card.title\"}\n subtitle=\"resources.arenaslots.labels.card.subtitle\"\n icon={<Schedule />}\n reference=\"arenaslots\"\n target=\"arenaId\"\n filter={filter}\n sort={{\n field: ['startTime', 'endTime'],\n order: ['DESC', 'DESC'],\n }}\n addButton={addButton}\n actions={actions}\n filters={filters}\n bulkActionButtons={showBulkActions ? <ArenaSlotBulkActions /> : false}\n collapsable\n >\n <ArenaSlotsGrid />\n </ListCard>\n}\n","import React, { useContext, useEffect, useState } from 'react';\nimport { SimpleShowLayout, useQuery, useRecordContext, GET_LIST, useTranslate } from 'react-admin';\nimport { Grid, makeStyles } from '@material-ui/core';\nimport { ViewQuiltOutlined } from '@material-ui/icons';\nimport { Alert } from '@material-ui/lab';\n\nimport { usePermissions } from '../../http';\nimport { isAuthorized } from '../../common/Authorize';\nimport { OfficeContext } from '../../common/inputs/OfficeSelector';\n\nimport AvailabilityCard from '../availabilities/AvailabilityCard';\n\nimport SurfaceCard from './cards/SurfaceCard';\nimport OfficesCard from './cards/OfficesCard';\nimport EventsCard from './cards/EventsCard';\nimport SurfacesCard from './cards/SurfacesCard';\nimport ArenaSlotsCard from './cards/ArenaSlotsCard';\nimport { SurfaceField } from './SurfaceField';\nimport ExternalProvidersCard from '../externalProviders/ExternalProvidersCard';\n\nconst useArenaOffices = (surfaceId) => useQuery({\n type: GET_LIST,\n resource: 'arenaoffices',\n payload: {\n filter: { effectiveSurfaces: surfaceId, _scope: 'Tenant' },\n sort: { field: 'isPrimary', order: 'DESC' },\n }\n}, { enabled: !!surfaceId })\n\nconst hasPermission = (permissions, officeId) => {\n if (!officeId) return false;\n const scopes = permissions.filter(p => p.roleType === 'System' || (p.roleType === 'Office' && p.officeIds.includes(officeId))).flatMap(p => p.scopes)\n return scopes.includes('scheduling:availability')\n}\n\nconst useStyles = makeStyles(theme => ({\n alert: {\n marginTop: theme.spacing(-2),\n marginBottom: theme.spacing(2),\n },\n flex: {\n display: 'flex',\n flexDirection: 'column',\n gap: theme.spacing(2),\n }\n}))\n\nconst SplitAlert = () => {\n const classes = useStyles();\n const translate = useTranslate()\n\n return <Alert severity=\"info\" className={classes.alert}>\n {translate(\"resources.surfaces.labels.alerts.message\")} <SurfaceField source=\"parentId\" link={false} />\n </Alert>\n}\n\nexport const SurfaceShowLayout = (props) => {\n const classes = useStyles();\n const permissions = usePermissions()\n const surface = useRecordContext(props);\n const { officeId, setOfficeId } = useContext(OfficeContext);\n const [ arenaOfficeIds, setArenaOfficeIds ] = useState([]);\n const { data: arenaOffices = [] } = useArenaOffices(surface?.id);\n\n const canListOffices = isAuthorized(surface, 'arenaoffices', 'list');\n const canListSlots = isAuthorized(surface, 'arenaslots', 'list')\n const canListAvailabilities = isAuthorized(surface, 'availabilities', 'list')\n const canEditAvailabilities = hasPermission(permissions, officeId)\n const showExternalProviders = isAuthorized(surface, 'surfaces', 'list')\n\n useEffect(() => {\n if (!arenaOffices.length) return;\n\n const authArenaOffices = arenaOffices.filter(arenaOffice => hasPermission(permissions, arenaOffice.officeId))\n const officeIds = authArenaOffices.map(arenaOffice => arenaOffice.officeId);\n setArenaOfficeIds(officeIds);\n\n const defaultArenaOffice = authArenaOffices[0] || arenaOffices[0]\n if (defaultArenaOffice) {\n setOfficeId(defaultArenaOffice.officeId)\n }\n }, [ permissions, arenaOffices, setOfficeId ])\n\n return <SimpleShowLayout>\n {surface?.parentId && <SplitAlert />}\n <Grid container spacing={3}>\n <Grid item xs={12} md={6}>\n <SurfaceCard />\n </Grid>\n {(canListOffices || showExternalProviders) && <Grid item xs={12} md={6} className={classes.flex}>\n {canListOffices && <OfficesCard />}\n {showExternalProviders && <ExternalProvidersCard targetId={surface?.id} />}\n </Grid>}\n <Grid item xs={12}>\n <SurfacesCard\n title=\"resources.surfaces.labels.card.splitTitle\"\n subtitle=\"resources.surfaces.labels.card.splitSubtitle\"\n icon={<ViewQuiltOutlined />}\n collapsable\n />\n </Grid>\n {canListAvailabilities && <Grid item xs={12}>\n <AvailabilityCard collapsable editable={canEditAvailabilities} officeIds={arenaOfficeIds} />\n </Grid>}\n {canListSlots && <Grid item xs={12}>\n <ArenaSlotsCard\n title=\"resources.arenaslots.labels.card.title\"\n />\n </Grid>}\n <Grid item xs={12}>\n <EventsCard />\n </Grid>\n </Grid>\n </SimpleShowLayout>\n}\n","import React from 'react';\nimport { useTranslate } from 'react-admin';\n\nimport { List, Show, Create, Edit } from '../../common/ra';\nimport ResourceTitle from '../../common/ResourceTitle';\n\nimport { SurfaceView } from './SurfaceView';\nimport { SurfaceFilters } from './SurfaceFilters';\nimport { SurfaceShowLayout } from './SurfaceShow';\nimport { SurfaceForm } from './SurfaceForm';\n\nimport { getSurfaceName } from './util';\n\nexport const SurfaceList = props =>\n <List {...props}\n component=\"div\"\n filters={<SurfaceFilters />}\n filterDefaultValues={{ _scope: 'Tenant' }}\n title=\"Surfaces\"\n sort={{\n field: ['venue.country', 'venue.region', 'venue.city', 'venue.name', 'name'],\n order: ['ASC', 'ASC', 'ASC', 'ASC', 'ASC'],\n }}\n >\n <SurfaceView rowClick=\"show\" />\n </List>\n\nexport const SurfaceShow = props =>\n <Show {...props}\n title={<ResourceTitle title={surface => getSurfaceName(surface)} />}\n >\n <SurfaceShowLayout />\n </Show>\n\nexport const SurfaceCreate = props => {\n const translate = useTranslate()\n return <Create\n title={<ResourceTitle title={record => translate('resources.surfaces.labels.add')} />}\n {...props}\n >\n <SurfaceForm redirect=\"show\" />\n </Create>\n}\n\nexport const SurfaceEdit = props => {\n const translate = useTranslate()\n return <Edit\n title={<ResourceTitle title={record => translate('ra.page.editing', { name: getSurfaceName(record) })} />}\n {...props}\n >\n <SurfaceForm redirect=\"show\" />\n </Edit>\n}\n","import React from 'react';\nimport { SimpleList, useListContext } from 'react-admin';\n\nimport { SMAChip } from '../../common/chips/SMAChip';\n\nconst AccountRow = ({ account }) => <>\n {account.email}\n {account?.externalId && <SMAChip />}\n</>\n\nexport const AccountGrid = props => {\n const { data, ids } = useListContext(props);\n if (!ids || !data) return null;\n\n return <SimpleList\n primaryText={account => <AccountRow account={account} />}\n linkType=\"show\"\n {...props} />\n}\n","import React from 'react';\nimport { Filter, TextInput } from 'react-admin';\n\nexport const AccountFilters = props =>\n <Filter variant=\"outlined\" {...props}>\n <TextInput source=\"email\" type=\"email\" alwaysOn />\n </Filter>\n","import React from 'react';\nimport { useRecordContext, useTranslate } from 'react-admin';\n\nimport ListCard from '../../../common/cards/ListCard';\nimport { IdentityGrid } from '../../identities/IdentityGrid';\nimport { AddIdentityButton } from '../../identities/IdentityModal';\n\nexport default props => {\n const account = useRecordContext(props);\n const translate = useTranslate();\n\n return <ListCard\n title=\"resources.participants.labels.card.title\"\n reference=\"identities\"\n target=\"accounts\"\n label={translate('resources.identities.name', 2)}\n sort={{ field: 'isPrimary', order: 'DESC' }}\n rowsPerPageOptions={[]}\n addButton={<AddIdentityButton initialValues={{ accountId: account?.id }} />}\n >\n <IdentityGrid showAccount={false} />\n </ListCard>\n}\n","import React from 'react';\nimport { Grid } from '@material-ui/core'\n\nimport ParticipantCard from './cards/ParticipantCard';\n\nexport const AccountShowLayout = props =>\n <Grid container spacing={3}>\n <Grid item xs={12}>\n <ParticipantCard />\n </Grid>\n </Grid>\n","import React, { useState } from 'react';\nimport { TextInput, useTranslate } from 'react-admin'\nimport { InputAdornment, IconButton } from '@material-ui/core'\nimport { VisibilityOutlined, Visibility } from '@material-ui/icons'\n\nexport default ({ autoComplete, ...props }) => {\n const [ showPassword, setVisibility ] = useState(false);\n const onClick = () => setVisibility(visible => !visible);\n const onMouseDown = e => e.preventDefault();\n const translate = useTranslate();\n\n const type = !showPassword ? 'password' : 'text';\n const endAdornment = <InputAdornment position=\"end\">\n <IconButton\n aria-label={translate('ra.input.password.toggle_visibility')}\n onClick={onClick}\n onMouseDown={onMouseDown}\n tabIndex=\"-1\"\n >\n {showPassword ? <Visibility /> : <VisibilityOutlined />}\n </IconButton>\n </InputAdornment>\n\n const InputProps = {\n endAdornment,\n autoComplete,\n }\n return <TextInput type={type} InputProps={InputProps} {...props} />\n}\n","import React from 'react';\nimport { TextInput, SimpleForm, useRecordContext, useRedirect } from 'react-admin';\n\nimport Toolbar from '../../common/ra/Toolbar';\nimport PasswordInput from '../../common/inputs/PasswordInput';\n\nconst validate = values => {\n const errors = {};\n if (!values.email) errors.email = 'ra.validation.required'\n return errors;\n}\n\nconst inputProps = {\n resource: 'accounts',\n basePath: '/accounts',\n variant: 'outlined',\n margin: 'none',\n fullWidth: true,\n}\n\nexport const AccountForm = props => {\n const account = useRecordContext();\n const redirect = useRedirect();\n\n if (account?.externalId) {\n redirect('/accounts');\n }\n\n return <SimpleForm toolbar={<Toolbar />} validate={validate} autoComplete=\"off\" {...props}>\n <TextInput source=\"email\" type=\"email\" autoComplete=\"off\" autoFocus {...inputProps} />\n <PasswordInput source=\"password\" autoComplete=\"new-password\" allowEmpty helperText=\"resources.accounts.helpers.password\" {...inputProps} />\n </SimpleForm>\n}\n","import React, { Fragment, useState } from 'react';\nimport { TextInput, SimpleForm, useRecordContext, useTranslate, useNotify } from 'react-admin';\nimport { Button, Dialog, DialogContent, DialogTitle } from '@material-ui/core';\nimport { Alert, AlertTitle } from '@material-ui/lab';\n\nimport { containsLowercase, containsNumber, containsSpecialCharacter, containsUppercase, meetsLength } from '@hisports/common/src/passwords';\n\nimport PasswordInput from '../../common/inputs/PasswordInput';\nimport { DialogFormToolbar } from '../../common/dialogs/DialogForm';\nimport { apiClient } from '../../http';\n\nconst MIN_PASS_LENGTH = 8;\n\nconst inputProps = {\n resource: 'accounts',\n basePath: '/accounts',\n variant: 'outlined',\n margin: 'none',\n fullWidth: true,\n}\n\nconst validate = (values, translate) => {\n const errors = {};\n\n if (!values.email) errors.email = 'ra.validation.required';\n\n if (values.externalId) {\n const password = values.password;\n if (!values.password) {\n errors.password = 'ra.validation.required';\n } else if (!meetsLength(password, MIN_PASS_LENGTH)) {\n errors.password = translate('resources.accounts.validations.must_be_length', { length: MIN_PASS_LENGTH })\n } else if (!containsNumber(password)) {\n errors.password = 'resources.accounts.validations.must_have_number'\n } else if (!containsSpecialCharacter(password)) {\n errors.password = 'resources.accounts.validations.must_have_special'\n } else if (!containsUppercase(password)) {\n errors.password = 'resources.accounts.validations.must_have_uppercase'\n } else if (!containsLowercase(password)) {\n errors.password = 'resources.accounts.validations.must_have_lowercase'\n }\n }\n\n return errors;\n}\n\nconst SMAResetAlert = () => {\n const translate = useTranslate();\n\n return <Alert severity=\"info\" fullWidth style={{ marginBottom: 24 }}>\n <AlertTitle>\n {translate('resources.accounts.alerts.sma_reset_title')}\n </AlertTitle>\n {translate('resources.accounts.alerts.sma_reset')}\n </Alert>\n}\n\nconst SMAResetPasswordForm = ({ onSubmit, onClose }) => {\n const translate = useTranslate();\n\n const toolbar = <DialogFormToolbar handleSubmit={onSubmit} onCancel={onClose} submitLabel=\"ra.action.reset\" />\n\n return <SimpleForm component={Fragment} toolbar={toolbar} validate={values => validate(values, translate)} autoComplete=\"off\" save={onSubmit}>\n <TextInput source=\"email\" {...inputProps} disabled />\n <PasswordInput source=\"password\" {...inputProps} />\n </SimpleForm>\n}\n\n\nconst SMAResetPasswordDialog = ({ open, setOpen }) => {\n const translate = useTranslate();\n const notify = useNotify();\n\n const onSubmit = ({ id: accountId, password }) => {\n return apiClient(`/accounts/${accountId}/ssoResetPassword`, {\n method: 'POST',\n params: { password }\n })\n .then(() => {\n notify('resources.accounts.notifications.sma_reset_success', 'info');\n })\n .catch(() => {\n notify('resources.accounts.notifications.sma_reset_error', 'error')\n })\n .finally(() => {\n setOpen(false);\n })\n }\n\n return <Dialog open={open} onClose={() => setOpen(false)} fullWidth maxWidth=\"sm\">\n <DialogTitle>{translate('resources.accounts.actions.sma_reset')}</DialogTitle>\n <DialogContent>\n <SMAResetAlert />\n <SMAResetPasswordForm onSubmit={onSubmit} onClose={() => setOpen(false)} />\n </DialogContent>\n </Dialog>\n}\n\nexport const SMAResetPasswordButton = ({ ...props }) => {\n const translate = useTranslate();\n const account = useRecordContext();\n const [open, setOpen] = useState(false);\n\n if (!account?.externalId) return null;\n return <>\n <Button color=\"primary\" label=\"resources.accounts.actions.sma_reset\" onClick={() => setOpen(true)} {...props}>\n {translate('resources.accounts.actions.sma_reset')}\n </Button>\n {open && <SMAResetPasswordDialog setOpen={setOpen} open={open} />}\n </>\n}\n","// SSO password validation\nexport const meetsLength = (password, length = 8) => password.length >= length;\nexport const containsNumber = password => /\\d/.test(password);\nexport const containsSpecialCharacter = password => /[!@#$%^&*(),.?\":{}|<>]/.test(password);\nexport const containsUppercase = password => /[A-Z]/.test(password);\nexport const containsLowercase = password => /[a-z]/.test(password);\n","import React from 'react';\nimport { EditButton, ShowButton, useEditContext, useResourceContext } from 'react-admin';\n\nimport { FF_SSO_RESET_PASSWORD } from '@hisports/common/featureFlags';\n\nimport { useFlag } from '../../http';\nimport { TopToolbar } from '../../common/cards/Card';\nimport { isAuthorized } from '../../common/Authorize';\n\nimport { SMAResetPasswordButton } from './SMAResetPassword';\n\nconst PLAY_ENVIRONMENT = process.env.PLAY_ENVIRONMENT || '';\n\nexport const AccountActions = ({ hasEdit, hasShow, ...props }) => {\n const resource = useResourceContext(props);\n const isEnabled = useFlag()\n const { basePath, record: account } = useEditContext(props);\n\n const canEditResource = isAuthorized(account, resource, 'edit');\n const canShowResource = isAuthorized(account, resource, 'show');\n\n const isSSOAccount = !!account?.externalId;\n\n return <TopToolbar>\n {hasEdit && canEditResource && (isSSOAccount ? <SMAResetPasswordButton disabled={!isEnabled(FF_SSO_RESET_PASSWORD) || PLAY_ENVIRONMENT == 'staging'} /> : <EditButton basePath={basePath} resource={resource} record={account} label=\"ra.action.edit\" />)}\n {hasShow && canShowResource && <ShowButton basePath={basePath} resource={resource} record={account} />}\n </TopToolbar>\n}\n","import React from 'react';\nimport { useTranslate } from 'react-admin';\nimport { Alert } from '@material-ui/lab';\nimport { Search } from '@material-ui/icons';\n\nimport { List, Show, Create, Edit, Pagination } from '../../common/ra';\nimport ResourceTitle from '../../common/ResourceTitle';\nimport { SMAChip } from '../../common/chips/SMAChip';\n\nimport { AccountGrid } from './AccountGrid';\nimport { AccountFilters } from './AccountFilters';\nimport { AccountShowLayout } from './AccountShow';\nimport { AccountForm } from './AccountForm';\nimport { AccountActions } from './AccountActions';\n\nconst AccountPagination = ({ total, ...props }) => {\n const translate = useTranslate();\n if (total < 0) return <Alert severity=\"info\" icon={<Search />}>{translate('resources.accounts.alerts.enter_email_above')}</Alert>\n return <Pagination total={total} {...props} />\n}\n\nexport const AccountList = props =>\n <List {...props}\n filters={<AccountFilters />}\n sort={{\n field: 'email',\n order: 'ASC'\n }}\n pagination={<AccountPagination />}\n >\n <AccountGrid rowClick=\"show\" />\n </List>\n\nexport const AccountShow = props =>\n <Show\n title={<ResourceTitle title={record => record.email} chip={record => record?.externalId && <SMAChip />} />}\n actions={<AccountActions />}\n {...props}\n >\n <AccountShowLayout />\n </Show>\n\nexport const AccountCreate = props => {\n const translate = useTranslate();\n return <Create\n title={<ResourceTitle title={record => translate('resources.accounts.labels.my')} />}\n {...props}\n >\n <AccountForm redirect=\"show\" />\n </Create>\n}\n\nexport const AccountEdit = props => {\n const translate = useTranslate();\n return <Edit\n title={<ResourceTitle title={record => translate('ra.page.editing', { name: record.email })} />}\n {...props}\n >\n <AccountForm redirect=\"show\" />\n </Edit>\n}\n","import React from 'react';\nimport { Datagrid, TextField } from 'react-admin';\nimport { makeStyles } from '@material-ui/core';\nimport moment from 'moment-timezone';\n\nimport FunctionField from '../../common/fields/FunctionField'\n\nconst renderDate = announcement => {\n const date = moment(announcement.updatedAt);\n return date.calendar({\n sameElse: 'LL',\n })\n}\n\nconst useStyles = makeStyles(theme => ({\n thead: {\n display: 'none'\n },\n row: {\n '& .column-title': {\n width: theme.spacing(100),\n },\n '& .column-updatedAt': {\n textAlign: 'right',\n },\n '& .column-updatedAt span': {\n color: '#333',\n fontStyle: 'italic',\n }\n }\n}))\n\nexport const AnnouncementGrid = props => {\n const classes = useStyles();\n return <Datagrid size=\"medium\" classes={classes} {...props}>\n <TextField source=\"title\" />\n <FunctionField source=\"updatedAt\" render={renderDate} />\n </Datagrid>\n}\n","import React from 'react';\nimport { Filter, TextInput } from 'react-admin';\n\nexport const AnnouncementFilters = props =>\n <Filter variant=\"outlined\" {...props}>\n <TextInput source=\"title\" alwaysOn />\n </Filter>\n","import React from 'react';\nimport { useRecordContext } from 'react-admin';\nimport { Typography, Link, Table, TableBody, TableRow, TableCell, Box, Card as MuiCard, CardHeader, styled } from '@material-ui/core';\nimport { GetApp } from '@material-ui/icons';\n\nconst Card = styled(MuiCard)(({ theme }) => ({\n marginBottom: theme.spacing(2),\n}))\n\nconst Image = styled('img')(({ theme }) => ({\n display: 'block',\n margin: `${theme.spacing(1)}px auto`,\n borderRadius: '4px',\n maxHeight: 450,\n}))\n\nconst hasContent = block =>\n block.type ? block.children.some(hasContent) : !!block.text;\n\nconst Block = ({ block, parentType = null }) => {\n if (!block.type) {\n if (!block.text) return null;\n\n return <Box\n component=\"span\"\n fontWeight={block.bold ? \"bold\" : undefined}\n fontStyle={block.italic ? 'italic' : undefined}\n style={block.underline ? { textDecoration: 'underline' } : undefined}\n >\n {block.text}\n </Box>\n }\n\n const children = block.children\n .filter(hasContent)\n .map(child => <Block block={child} parentType={block.type} />)\n\n if (!children.length && block.type !== 'attachment') return null;\n\n switch (block.type) {\n case 'attachment': {\n if (!block || !block.file || !block.file.url) return null;\n if (block.isImage) return <Image src={block.file.url} alt=\"\" />\n return <Link href={block.file.url} underline=\"none\">\n <Card variant=\"outlined\">\n <CardHeader avatar={<GetApp />} title={block.title} />\n </Card>\n </Link>\n }\n\n case 'heading-one':\n return <Typography variant=\"h4\" component=\"h1\">{children}</Typography>\n\n case 'heading-two':\n return <Typography variant=\"h5\" component=\"h2\">{children}</Typography>\n\n case 'link':\n return <Typography display=\"inline\">\n <Link href={block.url}>{children}</Link>\n </Typography>\n\n case 'bulleted-list':\n return <ul>{children}</ul>\n\n case 'numbered-list':\n return <ol>{children}</ol>\n\n case 'list-item':\n return <li>{children}</li>\n\n case 'block-quote':\n return <Typography paragraph component=\"blockquote\" align=\"center\">\n {children}\n </Typography>\n\n case 'table':\n return <Table>\n <TableBody>\n {children}\n </TableBody>\n </Table>\n\n case 'table-row':\n return <TableRow>{children}</TableRow>\n\n case 'table-cell':\n return <TableCell>{children}</TableCell>\n\n case 'paragraph':\n default:\n if (parentType === 'list-item') return <Typography display=\"inline\">{children}</Typography>;\n return <Typography paragraph>\n {children}\n </Typography>\n }\n}\n\nexport default ({ source, ...props }) => {\n const record = useRecordContext(props);\n if (!source || !record) return null;\n\n const content = record[source];\n if (!content) return null;\n\n const blocks = typeof content === 'string' ? JSON.parse(content) : content;\n return <p>\n {blocks.map(block => <Block block={block} />)}\n </p>\n}\n","import React from 'react';\nimport { EditButton, useRecordContext } from 'react-admin'\nimport { Table, TableBody } from '@material-ui/core';\n\nimport Row from '../../common/cards/TableRow';\nimport { isAuthorized } from '../../common/Authorize';\nimport InfoCard from '../../common/cards/InfoCard';\nimport ContentField from '../../common/fields/ContentField';\n\nimport { ParticipantField } from '../participants/ParticipantField';\nimport { TargetField } from '../targets/TargetField'\n\nexport const AnnouncementTable = props =>\n <Table>\n <TableBody>\n <Row>\n <ContentField source=\"content\" />\n </Row>\n <Row label=\"resources.announcements.fields.participantId\">\n <ParticipantField source=\"participantId\" filter={{ _scope: 'Tenant' }} />\n </Row>\n <Row label=\"resources.announcements.fields.targetId\">\n <TargetField source=\"officeId\" />\n </Row>\n </TableBody>\n </Table>\n\nexport const AnnouncementShowLayout = props => {\n const announcement = useRecordContext(props);\n const canEditAnnouncement = isAuthorized(announcement, 'announcements', 'edit')\n return <InfoCard actions={\n canEditAnnouncement && <EditButton label=\"resources.announcements.actions.edit\" basePath=\"/announcements\" record={announcement} />\n }>\n <AnnouncementTable />\n </InfoCard>\n}\n\nexport const AnnouncementExpand = props => {\n const announcement = useRecordContext(props);\n const canEditAnnouncement = isAuthorized(announcement, 'announcements', 'edit');\n return <>\n <AnnouncementTable />\n {canEditAnnouncement && <EditButton label=\"resources.announcements.actions.edit\" basePath=\"/announcements\" record={announcement} />}\n </>\n}\n","import React, { Suspense } from 'react';\nimport { useInput } from 'react-admin';\n\nimport { LazyBoundary } from '../../LazyBoundary';\n\nconst Editor = React.lazy(() => import('./Editor'))\n\nconst defaultValue = [\n { type: 'paragraph', children: [{ text: '' }] },\n]\n\nexport default props => {\n const {\n input: { value, onChange },\n } = useInput({ ...props, defaultValue });\n\n return <Suspense fallback={() => null}>\n <LazyBoundary>\n <Editor value={value} onChange={onChange} />\n </LazyBoundary>\n </Suspense>\n}\n","import React, { Fragment } from 'react';\nimport { TextInput, SimpleForm, useTranslate } from 'react-admin';\nimport { Grid } from '@material-ui/core'\nimport { useFormState } from 'react-final-form';\n\nimport Toolbar from '../../common/ra/Toolbar';\nimport EditorInput from '../../common/inputs/EditorInput';\nimport { AnnouncementTypeEnumInput, AnnouncementTargetTypeEnumInput, SeasonInput } from '../../common/inputs/EnumInputs'\n\nimport { TargetInput } from '../targets/TargetInput';\n\nconst validate = values => {\n const errors = {}\n\n if (!values.title) {\n errors.title = 'ra.validation.required'\n } else if (values.title.length > 80) {\n errors.title = 'ra.validation.title_too_long'\n }\n if (!values.seasonId) errors.seasonId = 'ra.validation.required'\n if (!values.type) errors.type = 'ra.validation.required'\n if (!values.content) errors.content = 'ra.validation.required'\n if (!values.targetType) errors.targetType = 'ra.validation.required'\n if (!values.targetId) errors.targetId = 'ra.validation.required'\n\n return errors;\n}\n\nconst recipients = {\n 'Office': {\n 'League': 'resources.announcements.messages.recipients.all_team_staff',\n 'Officiating': 'resources.announcements.messages.recipients.all_available_officials',\n 'General': 'resources.announcements.messages.recipients.all_team_staff_all_available_game_officials',\n },\n 'List': {\n 'League': 'resources.announcements.messages.recipients.all_list_members',\n 'Officiating': 'resources.announcements.messages.recipients.all_list_members',\n 'General': 'resources.announcements.messages.recipients.all_list_members',\n }\n};\n\nconst DestinationInputs = () => {\n const translate = useTranslate();\n const { values } = useFormState();\n const { id, type, targetType } = values;\n\n const helperText = !id && targetType && type\n ? translate('resources.announcements.helpers.destination_sent', { recipient: translate(recipients[targetType][type]) })\n : 'resources.announcements.helpers.destination_not_sent'\n\n const filter = targetType === 'List' ? { _scope: 'Parents' } : undefined;\n return <>\n <Grid item xs={12} md={3}>\n <AnnouncementTypeEnumInput source=\"type\" disabled {...inputProps} />\n </Grid>\n <Grid item xs={12} sm={4} md={3}>\n <AnnouncementTargetTypeEnumInput source=\"targetType\" {...inputProps} />\n </Grid>\n <Grid item xs={12} sm={8} md={6}>\n <TargetInput source=\"targetId\" label=\"resources.announcements.fields.officeId\" helperText={helperText} filter={filter} {...inputProps} />\n </Grid>\n </>\n}\n\nconst inputProps = {\n resource: 'announcements',\n basePath: '/announcements',\n variant: 'outlined',\n margin: 'none',\n fullWidth: true,\n}\n\nexport const AnnouncementForm = ({ initialValues = {}, ...props }) =>\n <SimpleForm toolbar={<Toolbar />} initialValues={{ type: 'Officiating', targetType: 'Office', ...initialValues }} validate={validate} {...props}>\n <Grid container spacing={2} fullWidth>\n <Grid item xs={12} md={9}>\n <TextInput source=\"title\" autoFocus {...inputProps} />\n </Grid>\n <Grid item xs={12} md={3}>\n <SeasonInput source=\"seasonId\" {...inputProps} />\n </Grid>\n <Grid item xs={12}>\n <EditorInput source=\"content\" {...inputProps} />\n </Grid>\n <DestinationInputs />\n </Grid>\n </SimpleForm>\n","import React from 'react';\nimport { ReferenceField, TextField } from 'react-admin';\n\nexport const SectionField = props =>\n <ReferenceField basePath=\"/sections\" resource=\"sections\" reference=\"sections\" link={false} allowEmpty {...props} >\n <TextField source=\"name\" />\n </ReferenceField>\n\nSectionField.defaultProps = {\n addLabel: true,\n}\n","import React from 'react';\nimport { Datagrid, TextField, NumberField } from 'react-admin';\nimport { OfficeField } from '../offices/OfficeField';\nimport { SectionField } from '../sections/SectionField';\n\nexport const PageGrid = props =>\n <Datagrid size=\"medium\" {...props}>\n <TextField source=\"title\" />\n <SectionField source=\"sectionId\" />\n <NumberField source=\"order\" />\n <OfficeField source=\"officeId\" />\n </Datagrid>\n","import React from 'react';\nimport { Filter, TextInput } from 'react-admin';\n\nexport const PageFilters = props =>\n <Filter variant=\"outlined\" {...props}>\n <TextInput source=\"title\" alwaysOn />\n </Filter>\n","import React from 'react';\nimport { NumberField, ImageField, EditButton, useRecordContext } from 'react-admin'\nimport { Table, TableBody } from '@material-ui/core';\n\nimport Row from '../../common/cards/TableRow';\nimport { isAuthorized } from '../../common/Authorize';\nimport InfoCard from '../../common/cards/InfoCard';\nimport ContentField from '../../common/fields/ContentField';\n\nimport { SectionField } from '../sections/SectionField'\nimport { OfficeField } from '../offices/OfficeField';\n\nexport const PageShowLayout = props => {\n const office = useRecordContext(props);\n const canEditPage = isAuthorized(office, 'pages', 'edit')\n return <InfoCard actions={\n canEditPage && <EditButton label=\"resources.pages.actions.edit\" record={office} />\n }>\n <Table>\n <TableBody>\n <Row>\n <ImageField source=\"cover.url\" />\n <ContentField source=\"content\" />\n </Row>\n <Row label=\"resources.pages.fields.sectionId\">\n <SectionField source=\"sectionId\" />\n </Row>\n <Row label=\"resources.pages.fields.order\" hidden={office?.order == null}>\n <NumberField source=\"order\" />\n </Row>\n <Row label=\"resources.pages.fields.officeId\">\n <OfficeField source=\"officeId\" />\n </Row>\n </TableBody>\n </Table>\n </InfoCard>\n}\n","import React from 'react';\nimport { ImageInput as RaImageInput, ImageField, useTranslate } from 'react-admin';\n\nexport default props => {\n const translate = useTranslate();\n return <RaImageInput\n accept=\"image/*\"\n multiple={false}\n placeholder={translate('ra.input.file.drop.image')}\n {...props}\n >\n <ImageField source=\"url\" />\n </RaImageInput>\n}\n","import React from 'react';\nimport { ReferenceInput } from 'react-admin';\n\nimport AutocompleteInput from '../../common/inputs/AutocompleteInput';\nimport AutocompleteSuggestion from '../../common/inputs/AutocompleteSuggestion'\n\nimport { SectionIcon } from '../icons';\n\nconst filterSection = name => ({ name })\n\nconst SectionSuggestion = ({ suggestion: section, query, isHighlighted, ...props }) =>\n <AutocompleteSuggestion\n icon={<SectionIcon />}\n primary={section.name}\n />\n\nexport const SectionInput = ({ helperText, ...props }) =>\n <ReferenceInput\n reference=\"sections\"\n filterToQuery={filterSection}\n sort={{\n field: ['order', 'name'],\n order: ['ASC', 'ASC'],\n }}\n perPage={25}\n {...props}\n >\n <AutocompleteInput\n optionText=\"name\"\n suggestionComponent={SectionSuggestion}\n helperText={helperText}\n />\n </ReferenceInput>\n","import React from 'react';\nimport { TextInput, NumberInput, SimpleForm } from 'react-admin';\nimport { Grid } from '@material-ui/core'\n\nimport Toolbar from '../../common/ra/Toolbar';\nimport EditorInput from '../../common/inputs/EditorInput';\nimport ImageInput from '../../common/inputs/ImageInput';\n\nimport { SectionInput } from '../sections/SectionInput'\n\nconst validate = values => {\n const errors = {}\n\n if (!values.title) {\n errors.title = 'ra.validation.required';\n } else if (values.title.length > 80) {\n errors.title = 'ra.validation.title_too_long'\n }\n if (!values.content) errors.content = 'ra.validation.required';\n if (!values.sectionId) errors.sectionId = 'ra.validation.required';\n\n return errors;\n}\n\nconst inputProps = {\n resource: 'pages',\n basePath: '/pages',\n variant: 'outlined',\n margin: 'none',\n fullWidth: true,\n}\n\nexport const PageForm = props =>\n <SimpleForm toolbar={<Toolbar />} validate={validate} {...props}>\n <Grid container spacing={2} fullWidth>\n <Grid item xs={12} sm={6} md={8}>\n <TextInput source=\"title\" autoFocus {...inputProps} />\n </Grid>\n <Grid item xs={12} sm={6} md={4}>\n <SectionInput source=\"sectionId\" {...inputProps} />\n </Grid>\n <Grid item xs={12}>\n <EditorInput source=\"content\" {...inputProps} />\n </Grid>\n <Grid item xs={12} md={6}>\n <ImageInput source=\"coverId\" helperText=\"ra.message.optional\" {...inputProps} />\n </Grid>\n <Grid item xs={12} md={6}>\n <NumberInput source=\"order\" helperText=\"resources.pages.helpers.order\" {...inputProps} />\n </Grid>\n </Grid>\n </SimpleForm>\n","import React from 'react';\nimport { Datagrid, TextField } from 'react-admin';\n\nimport DateField from '../../common/fields/DateField';\nimport { OfficeField } from '../offices/OfficeField';\n\nexport const PostGrid = props =>\n <Datagrid size=\"medium\" {...props}>\n <TextField source=\"title\" />\n <DateField source=\"date\" />\n <OfficeField source=\"officeId\" />\n </Datagrid>\n","import React from 'react';\nimport { Filter, TextInput } from 'react-admin';\n\nexport const PostFilters = props =>\n <Filter variant=\"outlined\" {...props}>\n <TextInput source=\"title\" alwaysOn />\n </Filter>\n","import React from 'react';\nimport { ImageField, EditButton, useRecordContext } from 'react-admin'\nimport { Grid, Table, TableBody } from '@material-ui/core';\n\nimport Row from '../../common/cards/TableRow';\nimport { isAuthorized } from '../../common/Authorize';\nimport InfoCard from '../../common/cards/InfoCard';\nimport DateField from '../../common/fields/DateField';\nimport ContentField from '../../common/fields/ContentField';\n\nimport { OfficeField } from '../offices/OfficeField'\n\nconst PostCard = props => {\n const post = useRecordContext(props);\n const canEditPost = isAuthorized(post, 'posts', 'edit')\n return <InfoCard actions={\n canEditPost && <EditButton label=\"resources.posts.actions.edit\" record={post} />\n }>\n <Table>\n <TableBody>\n <Row>\n <ImageField source=\"cover.url\" />\n <ContentField source=\"content\" />\n </Row>\n <Row label=\"resources.posts.fields.date\">\n <DateField source=\"date\" />\n </Row>\n <Row label=\"resources.posts.fields.officeId\">\n <OfficeField source=\"officeId\" />\n </Row>\n </TableBody>\n </Table>\n </InfoCard>\n}\n\nexport const PostShowLayout = props =>\n <Grid container spacing={3}>\n <Grid item xs={12}>\n <PostCard />\n </Grid>\n </Grid>\n","import React from 'react';\nimport { TextInput, SimpleForm } from 'react-admin';\nimport { Grid } from '@material-ui/core'\n\nimport Toolbar from '../../common/ra/Toolbar';\nimport { InlineDateInput } from '../../common/inputs/DateInput';\nimport EditorInput from '../../common/inputs/EditorInput'\nimport ImageInput from '../../common/inputs/ImageInput'\n\nimport { OfficeInput } from '../offices/OfficeInput';\n\nconst validate = values => {\n const errors = {}\n\n if (!values.title) {\n errors.title = 'ra.validation.required';\n } else if (values.title.length > 80) {\n errors.title = 'ra.validation.title_too_long';\n }\n if (!values.date) errors.date = 'ra.validation.required';\n if (!values.content) errors.content = 'ra.validation.required';\n if (!values.officeId) errors.officeId = 'ra.validation.required';\n\n return errors;\n}\n\nconst inputProps = {\n resource: 'posts',\n basePath: '/posts',\n variant: 'outlined',\n margin: 'none',\n fullWidth: true,\n}\n\nexport const PostForm = props =>\n <SimpleForm toolbar={<Toolbar />} validate={validate} {...props}>\n <Grid container spacing={2} fullWidth>\n <Grid item xs={12} sm={6} md={8}>\n <TextInput source=\"title\" autoFocus {...inputProps} />\n </Grid>\n <Grid item xs={12} sm={6} md={4}>\n <InlineDateInput source=\"date\" {...inputProps} />\n </Grid>\n <Grid item xs={12}>\n <EditorInput source=\"content\" {...inputProps} />\n </Grid>\n <Grid item xs={12}>\n <OfficeInput source=\"officeId\" filter={{ type: { neq: 'Historical' } }} {...inputProps} />\n </Grid>\n <Grid item xs={12}>\n <ImageInput source=\"coverId\" helperText=\"ra.message.optional\" {...inputProps} />\n </Grid>\n </Grid>\n </SimpleForm>\n","import React from 'react';\nimport { useTranslate } from 'react-admin';\n\nimport { List, Show, Create, Edit } from '../../common/ra';\nimport ResourceTitle from '../../common/ResourceTitle';\n\nimport { PostGrid } from './PostGrid';\nimport { PostFilters } from './PostFilters';\nimport { PostShowLayout } from './PostShow';\nimport { PostForm } from './PostForm';\n\nexport const PostList = props =>\n <List {...props}\n filters={<PostFilters />}\n sort={{\n field: ['officeId', 'date', 'title'],\n order: ['ASC', 'DESC', 'ASC'],\n }}\n >\n <PostGrid rowClick=\"show\" />\n </List>\n\nconst getTitle = post => post.title\n\nexport const PostShow = props =>\n <Show {...props}\n title={<ResourceTitle title={getTitle} />}\n >\n <PostShowLayout />\n </Show>\n\nexport const PostCreate = props => {\n const translate = useTranslate()\n return <Create\n title={<ResourceTitle title={record => translate('resources.posts.labels.add')} />}\n {...props}\n >\n <PostForm redirect=\"show\" />\n </Create>\n}\n\nexport const PostEdit = props => {\n const translate = useTranslate();\n return <Edit\n title={<ResourceTitle title={record => translate('ra.page.editing', { name: getTitle(record) })} />}\n {...props}\n >\n <PostForm redirect=\"show\" />\n </Edit>\n}\n","import React from 'react';\nimport { useLocale, useRecordContext } from 'react-admin';\nimport moment from 'moment-timezone';\nimport { Typography } from '@material-ui/core';\n\nconst getDateRange = (startTime, endTime, allDay, locale, timezone) => {\n const start = moment.tz(startTime, timezone);\n const end = moment.tz(endTime, timezone);\n\n if (locale.startsWith('en')) {\n if (allDay) {\n if (!endTime) return start.format('MMM D');\n if (!start.isSame(end, 'month')) return `${start.format('MMM D')} - ${end.format('MMM D')}`\n if (!start.isSame(end, 'day')) return `${start.format('MMM D')} - ${end.format('D')}`\n return start.format('MMM D');\n }\n\n if (!endTime) return start.format('MMM D HH:mm z');\n if (!start.isSame(end, 'year')) return `${start.format('MMM D HH:mm')} - ${end.format('MMM D, YYYY HH:mm z')}`\n if (!start.isSame(end, 'day')) return `${start.format('MMM D HH:mm')} - ${end.format('MMM D HH:mm z')}`\n return `${start.format('MMM D HH:mm')} - ${end.format('HH:mm z')}`\n } else {\n if (allDay) {\n if (!endTime) return start.format('D MMM');\n if (!start.isSame(end, 'month')) return `${start.format('D MMM')} - ${end.format('D MMM')}`\n if (!start.isSame(end, 'day')) return `${start.format('D')} - ${end.format('D MMM')}`\n return start.format('D MMM');\n }\n\n if (!endTime) return start.format('D MMM HH:mm z');\n if (!start.isSame(end, 'year')) return `${start.format('D MMM HH:mm')} - ${end.format('D MMM, YYYY HH:mm z')}`\n if (!start.isSame(end, 'day')) return `${start.format('D MMM HH:mm')} - ${end.format('D MMM HH:mm z')}`\n return `${start.format('D MMM HH:mm')} - ${end.format('HH:mm z')}`\n }\n}\n\nconst EventDateField = ({ className, ...props }) => {\n const locale = useLocale();\n const record = useRecordContext(props)\n if (!record) return null;\n const dateRange = getDateRange(record.startTime, record.endTime, record.allDay, locale, record.timezone);\n\n return <Typography\n component=\"span\"\n variant=\"body2\"\n noWrap\n className={className}\n >\n {dateRange}\n </Typography>\n}\n\nEventDateField.defaultProps = {\n label: 'Dates',\n addLabel: true,\n}\n\nexport default EventDateField;\n","import React from 'react';\nimport { Datagrid, TextField } from 'react-admin';\n\nimport { OfficeField } from '../offices/OfficeField';\nimport EventDateField from './EventDateField';\n\nexport const WebEventGrid = props =>\n <Datagrid size=\"medium\" {...props}>\n <TextField source=\"title\" />\n <EventDateField source=\"startTime\" label=\"resources.webevents.labels.dates\" />\n <OfficeField source=\"officeId\" />\n </Datagrid>\n","import React from 'react';\nimport { Filter, TextInput } from 'react-admin';\n\nexport const WebEventFilters = props =>\n <Filter variant=\"outlined\" {...props}>\n <TextInput source=\"title\" alwaysOn />\n </Filter>\n","import React from 'react';\nimport { TextField, EditButton, useRecordContext } from 'react-admin'\nimport { Grid, Table, TableBody } from '@material-ui/core';\n\nimport Row from '../../common/cards/TableRow';\nimport { isAuthorized } from '../../common/Authorize';\nimport InfoCard from '../../common/cards/InfoCard';\nimport ContentField from '../../common/fields/ContentField';\n\nimport { OfficeField } from '../offices/OfficeField'\n\nimport EventDateField from './EventDateField';\n\nconst WebEventCard = props => {\n const event = useRecordContext(props);\n\n const canEditWebEvent = isAuthorized(event, 'webevents', 'edit')\n return <InfoCard actions={\n canEditWebEvent && <EditButton label=\"resources.webevents.actions.edit\" record={event} />\n }>\n <Table>\n <TableBody>\n <Row>\n <ContentField source=\"content\" />\n </Row>\n <Row label=\"resources.webevents.labels.dates\">\n <EventDateField source=\"startTime\" />\n </Row>\n <Row label=\"resources.webevents.fields.location\">\n <TextField source=\"location\" />\n </Row>\n <Row label=\"resources.webevents.fields.officeId\">\n <OfficeField source=\"officeId\" />\n </Row>\n </TableBody>\n </Table>\n </InfoCard>\n}\n\nexport const WebEventShowLayout = props =>\n <Grid container spacing={3}>\n <Grid item xs={12}>\n <WebEventCard />\n </Grid>\n </Grid>\n","import React, { useRef } from 'react';\nimport { TextInput, BooleanInput, SimpleForm, useTranslate } from 'react-admin';\nimport { Grid } from '@material-ui/core'\nimport { useFormState } from 'react-final-form';\nimport { useSelector } from 'react-redux';\nimport createCalculator from 'final-form-calculate';\n\nimport { changeTimezone, isEmpty } from '@hisports/parsers';\n\nimport Toolbar from '../../common/ra/Toolbar';\nimport { InlineDateInput, InlineDateTimeInput, datePlaceholder, dateTimePlaceholder } from '../../common/inputs/DateInput';\nimport EditorInput from '../../common/inputs/EditorInput'\n\nimport { OfficeInput } from '../offices/OfficeInput';\nimport { TimezoneEnumInput } from '../../common/inputs/EnumInputs';\n\nconst validate = values => {\n const errors = {}\n\n if (!values.title) {\n errors.title = 'ra.validation.required';\n } else if (values.title.length > 80) {\n errors.title = 'ra.validation.title_too_long';\n }\n if (!values.content) errors.content = 'ra.validation.required';\n if (!values.startTime) errors.startTime = 'ra.validation.required';\n if (!values.officeId) errors.officeId = 'ra.validation.required';\n if (!values.timezone) errors.timezone = 'ra.validation.requred';\n\n return errors;\n}\n\nconst inputProps = {\n resource: 'webevents',\n basePath: '/webevents',\n variant: 'outlined',\n margin: 'none',\n fullWidth: true,\n}\n\nconst EventDateInput = ({ options, ...props }) => {\n const { values } = useFormState();\n const { allDay } = values;\n const Input = allDay ? InlineDateInput : InlineDateTimeInput;\n const dateOptions = {\n format: allDay ? 'YYYY-MM-DD' : 'YYYY-MM-DD HH:mm',\n placeholder: allDay ? datePlaceholder : dateTimePlaceholder,\n ampm: false,\n ...options,\n }\n return <Input options={dateOptions} {...props} />\n}\n\nexport const WebEventForm = props => {\n const translate = useTranslate()\n\n const offices = useSelector(store => store.admin.resources.offices.data);\n const officesRef = useRef({});\n officesRef.current = offices;\n\n const decorators = useRef([createCalculator({\n field: 'officeId',\n updates: {\n timezone: (officeId, values, prevValues) => {\n const office = officesRef.current[officeId];\n if (!office) return values.timezone;\n return office.timezone;\n },\n startTime: (timezone, values, prevValues) => {\n const { timezone: prevTimezone } = prevValues;\n if (!prevTimezone || !timezone || !values.startTime || isEmpty(prevValues) || timezone === prevTimezone) return values.startTime;\n return changeTimezone(values.startTime, prevTimezone, timezone)\n },\n endTime: (timezone, values, prevValues) => {\n const { timezone: prevTimezone } = prevValues;\n if (!prevTimezone || !timezone || !values.endTime || isEmpty(prevValues) || timezone === prevTimezone) return values.endTime;\n return changeTimezone(values.endTime, prevTimezone, timezone)\n },\n }\n })])\n\n return <SimpleForm toolbar={<Toolbar />} decorators={decorators.current} validate={validate} {...props}>\n <Grid container spacing={2} fullWidth>\n <Grid item xs={12}>\n <TextInput source=\"title\" autoFocus {...inputProps} />\n </Grid>\n <Grid item xs={12} md={6} lg={4}>\n <EventDateInput\n source=\"startTime\"\n options={{ label: translate('resources.webevents.fields.startTime') }}\n {...inputProps}\n />\n </Grid>\n <Grid item xs={12} md={6} lg={4}>\n <EventDateInput\n source=\"endTime\"\n options={{ label: translate('resources.webevents.fields.endTime') }}\n helperText=\"ra.message.optional\"\n {...inputProps}\n />\n </Grid>\n <Grid item xs={12} md={6} lg={4}>\n <BooleanInput source=\"allDay\" {...inputProps} />\n </Grid>\n <Grid item xs={12}>\n <TextInput source=\"location\" helperText=\"ra.message.optional\" {...inputProps} />\n </Grid>\n <Grid item xs={12}>\n <EditorInput source=\"content\" {...inputProps} />\n </Grid>\n <Grid item xs={12} md={6} lg={6}>\n <OfficeInput source=\"officeId\" filter={{ type: { neq: 'Historical' } }} {...inputProps} />\n </Grid>\n <Grid item xs={12} md={6} lg={6}>\n <TimezoneEnumInput source=\"timezone\" disabled {...inputProps} />\n </Grid>\n </Grid>\n </SimpleForm>\n}\n","import React from 'react';\nimport { useTranslate } from 'react-admin';\n\nimport { List, Show, Create, Edit } from '../../common/ra';\nimport ResourceTitle from '../../common/ResourceTitle';\n\nimport { WebEventGrid } from './WebEventGrid';\nimport { WebEventFilters } from './WebEventFilters';\nimport { WebEventShowLayout } from './WebEventShow';\nimport { WebEventForm } from './WebEventForm';\n\nexport const WebEventList = props =>\n <List {...props}\n filters={<WebEventFilters />}\n sort={{\n field: ['officeId', 'startTime', 'title'],\n order: ['ASC', 'DESC', 'ASC'],\n }}\n >\n <WebEventGrid rowClick=\"show\" />\n </List>\n\nconst getTitle = webevent => webevent.title\n\nexport const WebEventShow = props =>\n <Show {...props}\n title={<ResourceTitle title={getTitle} />}\n >\n <WebEventShowLayout />\n </Show>\n\nexport const WebEventCreate = props => {\n const translate = useTranslate();\n return <Create\n title={<ResourceTitle title={record => translate('resources.webevents.labels.add')} />}\n {...props}\n >\n <WebEventForm redirect=\"show\" />\n </Create>\n}\n\nexport const WebEventEdit = props => {\n const translate = useTranslate();\n return <Edit\n title={<ResourceTitle title={record => translate('ra.page.editing', { name: getTitle(record) })} />}\n {...props}\n >\n <WebEventForm redirect=\"show\" />\n </Edit>\n}\n","import React from 'react';\nimport moment from 'moment-timezone';\nimport { Chip, Tooltip } from '@material-ui/core';\nimport { Star, Create, Update } from '@material-ui/icons';\nimport { DatagridRow, TextField } from 'react-admin';\n\nimport GroupedView from '../../common/GroupedView';\nimport FunctionField from '../../common/fields/FunctionField'\n\nconst diff = time => moment.duration(moment(time).diff()).humanize(true)\n\nconst Status = ({ label, tooltip, ...props }) =>\n <Tooltip title={tooltip}>\n <Chip size=\"small\" variant=\"outlined\" label={label} {...props} />\n </Tooltip>\n\nconst renderStatus = (article, source, resource, translate) => {\n if (!article) return null;\n if (!article.isPublished) return <Status label={translate('ra.message.draft')} tooltip={translate('ra.message.not_published')} icon={<Create />} />\n\n const isNew = moment().subtract(1, 'week').isBefore(article.createdAt);\n if (isNew) return <Status color=\"primary\" variant=\"default\" label={translate('ra.action.new')} tooltip={`${translate('ra.message.created')} ${diff(article.createdAt)}`} icon={<Star />} />\n\n const isRecent = moment().subtract(3, 'days').isBefore(article.updatedAt);\n if (isRecent) return <Status color=\"primary\" label={translate('ra.message.updated')} tooltip={`${translate('ra.message.updated')} ${diff(article.updatedAt)}`} icon={<Update />} />\n\n return null;\n}\n\nconst ArticlesList = ({ records, basePath, resource, classes }) => {\n return records.map((record, rowIndex) =>\n <DatagridRow key={record.id} basePath={basePath} resource={resource} record={record} id={record.id} rowClick=\"show\" className={classes.row}>\n <TextField source=\"title\" />\n <FunctionField source=\"updatedAt\" render={renderStatus} textAlign=\"right\" />\n </DatagridRow>\n )\n}\n\nexport const ArticleView = () =>\n <GroupedView grouping={article => article.category}>\n <ArticlesList />\n </GroupedView>\n","import React from 'react';\nimport { Filter, TextInput } from 'react-admin';\n\nexport const ArticleFilters = props =>\n <Filter variant=\"outlined\" {...props}>\n <TextInput source=\"title\" alwaysOn />\n </Filter>\n","import React from 'react';\nimport { TextField, EditButton, useTranslate, useRecordContext } from 'react-admin'\nimport { Table, TableBody } from '@material-ui/core';\nimport { Alert } from '@material-ui/lab';\n\nimport FunctionField from '../../common/fields/FunctionField'\nimport Row from '../../common/cards/TableRow';\nimport { isAuthorized } from '../../common/Authorize';\nimport InfoCard from '../../common/cards/InfoCard';\nimport ContentField from '../../common/fields/ContentField';\nimport DateField from '../../common/fields/DateField';\n\nconst allroles = {\n 'super-admin': 'Super Admins',\n 'admin': 'Admins',\n 'registrar': 'Registrars',\n 'director': 'League Directors',\n 'manager': 'League Managers',\n 'organizer': 'Schedule Organizers',\n 'assigning-manager': 'Assigning Managers',\n 'assigner': 'Assigners',\n 'official': 'Officials',\n 'coach': 'Team Staff',\n 'assistant': 'Team Assistants',\n 'association': 'Associations',\n 'editor': 'Editors',\n 'scorekeeper': 'Scorekeepers',\n}\n\nconst renderRoles = (article, source) => {\n const roles = article[source];\n return roles.map(role => allroles[role]).join(', ')\n}\n\nexport const ArticleShowLayout = props => {\n const article = useRecordContext(props);\n const translate = useTranslate();\n\n const canEditArticle = isAuthorized(article, 'help', 'edit')\n return <InfoCard disableMaxHeight actions={\n canEditArticle && <EditButton label=\"resources.help.actions.edit\" record={article} />\n }>\n {!article?.isPublished && <Alert severity=\"info\">{translate('resources.help.alerts.article_not_published_yet')}</Alert>}\n <Table>\n <TableBody>\n <Row>\n <ContentField source=\"content\" />\n </Row>\n <Row label=\"resources.help.fields.updatedAt\">\n <DateField source=\"updatedAt\" />\n </Row>\n <Row label=\"resources.help.fields.category\">\n <TextField source=\"category\" />\n </Row>\n <Row label=\"resources.help.fields.roles\">\n <FunctionField source=\"roles\" render={renderRoles} />\n </Row>\n </TableBody>\n </Table>\n </InfoCard>\n}\n","import React from 'react';\nimport { TextInput, SimpleForm } from 'react-admin';\nimport { Grid } from '@material-ui/core'\n\nimport Toolbar from '../../common/ra/Toolbar';\nimport EditorInput from '../../common/inputs/EditorInput';\nimport { RoleEnumInput } from '../../common/inputs/EnumInputs';\nimport SwitchInput from '../../common/inputs/SwitchInput';\n\nconst validate = values => {\n const errors = {}\n\n if (!values.title) {\n errors.title = 'ra.validation.required';\n } else if (values.title.length > 80) {\n errors.title = 'ra.validation.title_too_long';\n }\n\n if (!values.content) errors.content = 'ra.validation.required';\n if (!values.category) errors.category = 'ra.validation.required';\n if (!values.roles || !values.roles.length) errors.roles = 'ra.validation.required';\n\n return errors;\n}\n\nconst inputProps = {\n resource: 'help',\n basePath: '/help',\n variant: 'outlined',\n margin: 'none',\n fullWidth: true,\n}\n\nexport const ArticleForm = props =>\n <SimpleForm toolbar={<Toolbar />} validate={validate} {...props}>\n <Grid container spacing={2} fullWidth>\n <Grid item xs={12} md={10}>\n <TextInput source=\"title\" autoFocus {...inputProps} />\n </Grid>\n <Grid item xs={12} md={2}>\n <SwitchInput source=\"isPublished\" {...inputProps} defaultValue={true} />\n </Grid>\n <Grid item xs={12}>\n <EditorInput source=\"content\" {...inputProps} />\n </Grid>\n <Grid item xs={12} sm={6} md={4}>\n <TextInput source=\"category\" {...inputProps} />\n </Grid>\n <Grid item xs={12} sm={6} md={8}>\n <RoleEnumInput source=\"roles\" multiple helperText=\"resources.help.helpers.roles\" {...inputProps} />\n </Grid>\n </Grid>\n </SimpleForm>\n","import React, { useContext, useEffect, useMemo, useState } from 'react';\nimport { useListContext, useTranslate } from 'react-admin';\nimport { FormControlLabel, IconButton, Menu, MenuItem, Checkbox, Divider } from \"@material-ui/core\"\nimport { MoreVert } from \"@material-ui/icons\"\n\n// import usePreferences from '../../common/usePreferences';\n\nexport const TransactionViewSettingsContext = React.createContext([false, value => {}]);\n\nexport const TransactionViewSettingsProvider = props => {\n // const groupGames = usePreferences('TransactionViewGroupGames', true);\n // const groupParticipants = usePreferences('TransactionViewGroupParticipant', false);\n const groupGames = useState(true);\n const groupParticipants = useState(false);\n\n const value = useMemo(() => ({\n groupGames,\n groupParticipants,\n }), [ groupGames, groupParticipants ])\n\n return <TransactionViewSettingsContext.Provider value={value} {...props} />\n}\n\nexport const useTransactionViewSettings = () =>\n useContext(TransactionViewSettingsContext);\n\nexport const useGroupGames = () => {\n const { groupGames } = useTransactionViewSettings();\n return groupGames;\n}\n\nexport const useGroupParticipants = () => {\n const { groupParticipants } = useTransactionViewSettings();\n return groupParticipants;\n}\n\nconst SelectAllInput = ({ ...props }) => {\n const translate = useTranslate();\n const { selectedIds = [], onSelect, total, data = {} } = useListContext()\n\n const checked = selectedIds.length === total;\n\n const handleChange = e => {\n const checked = e.target.checked;\n\n if (!checked) {\n // unselect all\n onSelect([]);\n } else {\n // select all\n const idsToSelect = Object.keys(data);\n onSelect(idsToSelect);\n }\n }\n\n return <FormControlLabel\n control={<Checkbox\n checked={checked}\n onChange={handleChange}\n name=\"selectAll\"\n />}\n label={translate(`resources.officialTransactions.messages.${checked ? 'unselect_all' : 'select_all'}`)}\n />\n}\n\n\nconst GroupGamesInput = ({ ...props }) => {\n const translate = useTranslate();\n const [ checked, setGroupGames ] = useGroupGames();\n const [ groupParticipants ] = useGroupParticipants();\n\n useEffect(() => {\n if (groupParticipants) {\n setGroupGames(false)\n }\n }, [ groupParticipants, setGroupGames ])\n\n const handleChange = e => {\n const checked = e.target.checked;\n setGroupGames(checked)\n }\n\n return <FormControlLabel\n control={<Checkbox\n checked={checked}\n disabled={checked}\n onChange={handleChange}\n name=\"groupGames\"\n />}\n label={translate('resources.officialTransactions.messages.group_by_game')}\n />\n}\n\nconst GroupParticipantsInput = ({ ...props }) => {\n const translate = useTranslate();\n const [ checked, setGroupParticipants ] = useGroupParticipants();\n const [ groupGames ] = useGroupGames();\n\n useEffect(() => {\n if (groupGames) {\n setGroupParticipants(false)\n }\n }, [ groupGames, setGroupParticipants ])\n\n const handleChange = e => {\n const checked = e.target.checked;\n setGroupParticipants(checked)\n }\n\n return <FormControlLabel\n control={<Checkbox\n checked={checked}\n disabled={checked}\n onChange={handleChange}\n name=\"groupParticipants\"\n />}\n label={translate('resources.officialTransactions.messages.group_by_participant')}\n />\n}\n\nexport const TransactionViewSettings = ({ ...props }) => {\n const [ anchor, setAnchor ] = useState(null)\n\n const toggle = e => setAnchor(anchor => anchor ? !anchor : e.currentTarget)\n const onClose = () => setAnchor(null)\n\n return <>\n <IconButton onClick={toggle} size=\"small\"><MoreVert /></IconButton>\n <Menu\n anchorEl={anchor}\n open={anchor != null}\n onClose={onClose}\n >\n <MenuItem dense onClick={onClose}>\n <SelectAllInput key=\"select-all\" />\n </MenuItem>\n <Divider />\n <MenuItem dense onClick={onClose}>\n <GroupGamesInput key=\"group-games\" />\n </MenuItem>\n <MenuItem dense onClick={onClose}>\n <GroupParticipantsInput key=\"group-participants\" />\n </MenuItem>\n </Menu>\n </>\n}\n","import React from 'react';\nimport { TextField, EditButton, useRecordContext } from 'react-admin';\nimport { Table, TableBody } from '@material-ui/core';\n\nimport InfoCard from '../../../common/cards/InfoCard';\nimport Row from '../../../common/cards/TableRow';\nimport { isAuthorized } from '../../../common/Authorize';\nimport DateRangeField from '../../../common/fields/DateRangeField';\n\nimport { OfficeField } from '../../offices/OfficeField';\n\nexport default props => {\n const payPeriod = useRecordContext(props);\n\n const canEditPayPeriod = isAuthorized(payPeriod, 'payPeriods', 'edit');\n const isClosed = payPeriod?.isClosed === true\n\n return <InfoCard\n title=\"resources.payPeriods.name\"\n actions={[\n !isClosed && canEditPayPeriod && <EditButton label=\"ra.action.edit\" record={payPeriod} />,\n ]}\n >\n <Table>\n <TableBody>\n <Row label=\"resources.payPeriods.fields.name\">\n <TextField source=\"name\" />\n </Row>\n <Row label=\"resources.payPeriods.labels.dates\">\n <DateRangeField startSource=\"startDate\" endSource=\"endDate\" />\n </Row>\n <Row label=\"resources.payPeriods.fields.officeId\">\n <OfficeField source=\"officeId\" />\n </Row>\n </TableBody>\n </Table>\n </InfoCard>\n}\n","import React from 'react';\nimport { Button, useListContext, useNotify, useRefresh, useUnselectAll } from 'react-admin';\n\nimport { apiClient } from '../../http';\n\n\nconst RemovePayPeriod = ({ selectedIds = [], resource, ...props }) => {\n const { data: officialTransactions } = useListContext() || {};\n const unselectAll = useUnselectAll(resource);\n const notify = useNotify();\n const refresh = useRefresh();\n\n const removeableIds = selectedIds.filter(id => officialTransactions?.[id]?.payPeriodId);\n\n const onClick = async () => {\n apiClient('/officialTransactions/assignPayPeriod', {\n method: 'POST',\n data: {\n transactionIds: removeableIds,\n }\n })\n .then(({ data }) => {\n unselectAll()\n refresh()\n notify('resources.officialTransactions.notifications.pay_period_removed')\n })\n .catch(err => {\n // eslint-disable-next-line no-console\n console.log(err);\n notify('resources.officialTransactions.notifications.remove_pay_period_error')\n })\n }\n\n return <Button label=\"resources.officialTransactions.actions.remove_pay_period\" onClick={onClick} disabled={!removeableIds?.length} {...props} />\n}\n\nexport const TransactionBulkActions = props =>\n <RemovePayPeriod {...props} />\n","import React, { useEffect, useState } from 'react';\nimport { DatagridRow, RecordContextProvider, useListContext } from 'react-admin'\nimport { useSelector } from 'react-redux';\nimport { makeStyles } from '@material-ui/core';\n\n\nimport GroupedView from '../../common/GroupedView';\nimport DateField from '../../common/fields/DateField';\n\nimport { OfficeField } from '../offices/OfficeField';\nimport { GameField } from '../games/GameField';\nimport { ParticipantField } from '../participants/ParticipantField';\nimport { PayPeriodField } from '../payPeriods/PayPeriodField';\n\nimport { useGroupGames, useGroupParticipants } from './TransactionViewSettings';\nimport { AddTransactionButton, EditTransactionDialog } from './TransactionModal';\nimport { AmountAndDescriptionField, TypeAndNoteField } from './TransactionsGrid';\n\nconst useStyles = makeStyles(theme => ({\n root: {\n '& .column-date': {\n width: theme.spacing(12),\n },\n '& .column-type': {\n width: theme.spacing(25),\n },\n '& .column-amount': {\n width: theme.spacing(12),\n },\n }\n}))\n\n\nconst isSelectable = (transactions, payPeriods = {}) => id => {\n const transaction = transactions?.[id]\n const payPeriod = payPeriods[transaction?.payPeriodId];\n if (!payPeriod) return true;\n return payPeriod.isClosed !== true;\n}\n\nconst OfficialTransactionTitle = ({ group: id }) => {\n const [ groupGames ] = useGroupGames();\n\n return <RecordContextProvider value={{ id }}>\n {groupGames ? <GameField source=\"id\" includeDate=\"inline\" includeTime includeSurface=\"inline\" /> : <ParticipantField source=\"id\" variant=\"subtitle2\" includeId=\"inline\" />}\n </RecordContextProvider>\n}\n\nconst AddTransactionFromGroupButton = ({ group: id, initialValues = {}, canAdd = true, ...props }) => {\n const [ groupGames ] = useGroupGames();\n\n if (!canAdd) return null;\n\n return <AddTransactionButton\n initialValues={{\n ...initialValues,\n ...(groupGames ? { gameId: id } : { participantId: id })\n }}\n target=\"officeId\"\n size=\"small\"\n {...props}\n />\n}\n\nconst GroupedTransactionList = ({ records = [], basePath, resource, classes: classesOverrides, hideOffice = false, hidePayPeriod = false, isRowSelectable, ...props }) => {\n const [ groupParticipants ] = useGroupParticipants();\n const [ groupGames ] = useGroupGames();\n const { onToggleItem, selectedIds } = useListContext()\n const [ isOpen, setIsOpen ] = useState(false);\n const [ rowClickId, setRowClickId ] = useState();\n const classes = useStyles({ classes: classesOverrides });\n\n const handleRowClick = (id) => {\n setRowClickId(id)\n setIsOpen(true);\n }\n const handleClose = () => {\n setIsOpen(false);\n }\n\n if (!records?.length) return null;\n\n return <>\n {records.map((record, rowIndex) => {\n const selected = selectedIds.includes(record?.id);\n const rowClick = record.type !== 'Base' ? handleRowClick : null;\n const selectable = isRowSelectable(record.id);\n\n const style = record.type !== 'Base' && selectable ? { cursor: 'pointer' } : undefined;\n\n return <DatagridRow selectable={selectable} onToggleItem={onToggleItem} rowClick={selectable ? rowClick : null} selected={selected} key={record.id} basePath={basePath} resource={resource} record={record} id={record.id} style={style} className={classes.root} {...props}>\n {!groupParticipants && <ParticipantField source=\"participantId\" link=\"show\" includeId=\"inline\" />}\n {!groupGames && <GameField source=\"gameId\" link=\"scoresheet\" includeDate=\"inline\" includeTime includeSurface=\"full\" />}\n {!hideOffice && <OfficeField source=\"officeId\" link={false} />}\n <DateField source=\"date\" />\n <TypeAndNoteField source=\"type\" />\n <AmountAndDescriptionField source=\"amount\" />\n {!hidePayPeriod && <PayPeriodField source=\"payPeriodId\" />}\n </DatagridRow>\n })}\n {isOpen && <EditTransactionDialog id={rowClickId} handleClose={handleClose} isOpen={isOpen} {...props} />}\n </>\n}\n\nexport const GroupedTransactionView = ({ office, ...props }) => {\n const [ groupGames ] = useGroupGames();\n const { data: transactions, selectedIds, onToggleItem } = useListContext();\n const payPeriods = useSelector(state => state?.admin?.resources?.payPeriods?.data)\n\n const groupingKey = groupGames ? 'gameId' : 'participantId'\n const isRowSelectable = isSelectable(transactions, payPeriods);\n\n useEffect(() => {\n selectedIds.forEach(id => {\n if (!isRowSelectable(id)) {\n onToggleItem(id)\n }\n })\n }, [ isRowSelectable, onToggleItem, selectedIds ])\n\n return <GroupedView\n grouping={transaction => transaction[groupingKey]}\n titleComponent={OfficialTransactionTitle}\n isRowSelectable={isRowSelectable}\n actionButton={AddTransactionFromGroupButton}\n {...props}\n >\n <GroupedTransactionList isRowSelectable={isRowSelectable} {...props} />\n </GroupedView>\n}\n","import React, { Fragment, useEffect, useState } from 'react';\nimport { Button, Datagrid, ListContextProvider, NullableBooleanInput, Pagination, SimpleForm, useDataProvider, useList, useNotify, useRecordContext, useRefresh, useTranslate } from 'react-admin';\nimport { useForm, useFormState } from 'react-final-form';\nimport { Dialog, DialogContent, DialogTitle, Grid, makeStyles, useMediaQuery } from '@material-ui/core';\nimport { Queue } from '@material-ui/icons';\n\nimport { apiClient } from '../../http';\nimport { DialogFormToolbar } from '../../common/dialogs/DialogForm';\nimport { InlineDateInput } from '../../common/inputs/DateInput';\nimport { OfficialTransactionTypeInput } from '../../common/inputs/EnumInputs';\nimport DateField from '../../common/fields/DateField';\n\nimport { ParticipantInput } from '../participants/ParticipantInput';\nimport { ParticipantField } from '../participants/ParticipantField';\nimport { GameField } from '../games/GameField';\nimport { GameInput } from '../games/GameInput';\nimport { AmountAndDescriptionField, TypeAndNoteField } from '../officialTransactions/TransactionsGrid';\n\nconst inputProps = {\n variant: 'outlined',\n margin: 'none',\n fullWidth: true,\n}\n\nconst useStyles = makeStyles(theme => ({\n certified: {\n width: '100%',\n }\n}))\n\nconst TransactionGrid = props => {\n return <Datagrid size=\"medium\" {...props}>\n <ParticipantField source=\"participantId\" label=\"resources.officialTransactions.fields.participantId\" link=\"show\" includeId=\"full\" sortable={false} />\n <GameField source=\"gameId\" includeDate=\"inline\" includeTime includeSurface=\"full\" />\n <DateField source=\"date\" format=\"LL\" label=\"resources.officialTransactions.fields.date\" />\n <TypeAndNoteField source=\"type\" label=\"resources.officialTransactions.fields.type\" />\n <AmountAndDescriptionField source=\"amount\" label=\"resources.officialTransactions.fields.amount\" />\n </Datagrid>\n}\n\nconst TransactionList = () => {\n const dataProvider = useDataProvider();\n const payPeriod = useRecordContext();\n const { values } = useFormState();\n const { officeId, startTime, endTime, gameId, participantId, type, isGameCertified } = values;\n\n const { change } = useForm();\n const [ loaded, setLoaded ] = useState(false);\n const [ loading, setLoading ] = useState(true);\n const [ transactions, setTransactions ] = useState([])\n\n const listContext = useList({\n data: transactions,\n loaded,\n loading,\n page: 1,\n perPage: 100\n })\n\n useEffect(() => {\n change('transactionIds', listContext?.selectedIds)\n }, [ listContext?.selectedIds, change ])\n\n useEffect(() => {\n setLoading(true);\n\n dataProvider.getList('officialTransactions', {\n filter: {\n officeId,\n effectiveOffices: false,\n startTime,\n endTime,\n gameId,\n participantId,\n type,\n isGameCertified,\n payPeriodId: null,\n 'game.seasonId': payPeriod.seasonId\n },\n sort: { field: ['date', 'participant.lastName', 'participant.firstName'], order: ['ASC', 'ASC', 'ASC'] },\n pagination: { page: 1, perPage: 999 }\n })\n .then(res => {\n setTransactions(res.data);\n setLoaded(true);\n setLoading(false);\n })\n .catch(() => {\n setTransactions([]);\n setLoaded(true);\n setLoading(false);\n })\n }, [ officeId, dataProvider, startTime, endTime, gameId, participantId, type, isGameCertified, payPeriod.seasonId ])\n\n return <ListContextProvider value={listContext}>\n <TransactionGrid\n {...listContext}\n hasBulkActions\n rowClick=\"toggleSelection\"\n isRowSelectable={() => true}\n isLoading={loading}\n />\n <Pagination rowsPerPageOptions={[50, 100, 250, 500]} />\n </ListContextProvider>\n}\n\nconst AddTransactionsForm = props => {\n const payPeriod = useRecordContext()\n const classes = useStyles();\n\n return <SimpleForm initialValues={{ startTime: payPeriod.startDate, endTime: payPeriod.endDate }} {...props} {...inputProps} >\n <Grid container spacing={2}>\n <Grid item xs={12} md={6}>\n <InlineDateInput\n source=\"startTime\"\n label=\"resources.officialTransactions.filters.startTime\"\n {...inputProps}\n />\n </Grid>\n <Grid item xs={12} md={6}>\n <InlineDateInput\n source=\"endTime\"\n label=\"resources.officialTransactions.filters.endTime\"\n {...inputProps}\n />\n </Grid>\n <Grid item xs={12} md={3}>\n <GameInput\n source=\"gameId\"\n label=\"resources.officialTransactions.fields.gameId\"\n filter={{ _scope: \"Tenant\", 'transactions.officeId': payPeriod?.officeId }}\n {...inputProps}\n />\n </Grid>\n <Grid item xs={12} md={3}>\n <ParticipantInput\n source=\"participantId\"\n label=\"resources.officialTransactions.fields.participantId\"\n {...inputProps}\n />\n </Grid>\n <Grid item xs={12} md={3}>\n <OfficialTransactionTypeInput\n source=\"type\"\n label=\"resources.officialTransactions.fields.type\"\n {...inputProps}\n />\n </Grid>\n <Grid item xs={12} md={3}>\n <NullableBooleanInput\n source=\"isGameCertified\"\n label=\"resources.games.filters.isCertified\"\n className={classes.certified}\n {...inputProps}\n />\n </Grid>\n </Grid>\n <br />\n <TransactionList {...props} />\n </SimpleForm>\n}\n\nconst AddTransactionModal = ({ open, handleClose, ...props }) => {\n const translate = useTranslate();\n const payPeriod = useRecordContext();\n const notify = useNotify();\n const refresh = useRefresh();\n const fullScreen = useMediaQuery(theme => theme.breakpoints.down('xs'));\n\n const onSubmit = async values => {\n const transactionIds = values?.transactionIds || [];\n if (!transactionIds.length || !payPeriod?.id) {\n handleClose();\n return;\n }\n\n apiClient('/officialTransactions/assignPayPeriod', {\n method: 'POST',\n data: {\n transactionIds,\n payPeriodId: payPeriod.id,\n }\n })\n .then(({ data }) => {\n handleClose();\n refresh();\n notify('resources.officialTransactions.notifications.assigned_pay_period');\n })\n .catch(err => {\n console.log(err) // eslint-disable-line no-console\n notify('resources.officialTransactions.notifications.assign_pay_period_error')\n })\n }\n\n return <Dialog open={open} onClose={handleClose} fullWidth maxWidth=\"lg\" fullScreen={fullScreen}>\n <DialogTitle>{translate('resources.payPeriods.labels.add_transactions')}</DialogTitle>\n <DialogContent>\n <AddTransactionsForm save={onSubmit} component={Fragment} toolbar={\n <DialogFormToolbar submitLabel=\"ra.action.add\" cancelLabel=\"ra.action.close\" onCancel={handleClose} />\n } />\n </DialogContent>\n </Dialog>\n}\n\nexport default ({ ...props }) => {\n const translate = useTranslate();\n const [ open, setOpen ] = useState(false);\n\n const handleClick = () => setOpen(true);\n\n return <>\n <Button label={translate('resources.payPeriods.actions.add_transactions')} onClick={handleClick}>\n <Queue />\n </Button>\n {open && <AddTransactionModal open={open} handleClose={() => setOpen(false)} />}\n </>\n}\n","import React from 'react';\nimport { Filter, useRecordContext } from 'react-admin';\nimport { Card, makeStyles, useMediaQuery } from '@material-ui/core';\n\nimport { ParticipantInput } from '../../participants/ParticipantInput';\nimport { OfficialTransactionTypeInput } from '../../../common/inputs/EnumInputs';\nimport { List, Pagination } from '../../../common/ra';\n\nimport TransactionsExporter from '../../officialTransactions/TransactionsExporter';\nimport { ScheduleInput } from '../../schedules/ScheduleInput';\nimport { TransactionBulkActions } from '../../officialTransactions/TransactionBulkActions';\nimport { GameInput } from '../../games/GameInput';\nimport { GroupedTransactionView } from '../../officialTransactions/TransactionView';\nimport AddTransactionsModal from '../AddTransactionsModal';\n\nconst useStyles = makeStyles(theme => ({\n cardHeader: {\n marginBottom: '0px'\n },\n listActions: {\n paddingLeft: theme.spacing(1.5),\n paddingRight: theme.spacing(1.5),\n }\n}))\n\nconst TransactionFilters = props => {\n const payPeriod = useRecordContext();\n\n return <Filter variant=\"outlined\" {...props}>\n <ParticipantInput source=\"participantId\" label=\"resources.officialTransactions.fields.participantId\" multiple variant=\"outlined\" alwaysOn />\n <OfficialTransactionTypeInput source=\"type\" label=\"resources.officialTransactions.fields.type\" multiple variant=\"outlined\" alwaysOn />\n <ScheduleInput source=\"gameScheduleId\" label=\"resources.officialTransactions.fields.gameScheduleId\" variant=\"outlined\" alwaysOn />\n <GameInput source=\"gameId\" label=\"resources.officialTransactions.fields.gameId\" variant=\"outlined\" filter={{ _scope: \"Tenant\", 'transactions.officeId': payPeriod?.officeId }} alwaysOn />\n </Filter>\n}\n\nexport default ({ ...props }) => {\n const isMobile = useMediaQuery(theme => theme.breakpoints.down('xs'));\n const payPeriod = useRecordContext();\n const classes = useStyles();\n\n const initialValues = { officeId: payPeriod?.officeId, payPeriodId: payPeriod?.id };\n const canAdd = payPeriod?.isClosed !== true;\n\n const actions = [\n canAdd && <AddTransactionsModal />,\n <TransactionsExporter showSummary />\n ].filter(Boolean)\n\n return <Card>\n <List\n title=\" \"\n customActions={actions}\n listActionsClass={classes.listActions}\n component={!isMobile ? \"div\" : undefined}\n filters={<TransactionFilters className={classes.listActions} />}\n filterDefaultValues={{ payPeriodId: payPeriod?.id }}\n perPage={50}\n pagination={<Pagination isMobile={isMobile} rowsPerPageOptions={[50, 100, 250, 500]} />}\n sort={{\n field: ['game.date', 'game.number', 'participant.lastName', 'participant.firstName'],\n order: ['ASC', 'ASC', 'ASC', 'ASC'],\n }}\n bulkActionButtons={canAdd && <TransactionBulkActions />}\n resource=\"officialTransactions\"\n basePath=\"/officialTransactions\"\n {...props}\n >\n <GroupedTransactionView initialValues={initialValues} canAdd={canAdd} hideOffice hidePayPeriod />\n </List>\n </Card>\n}\n","import React, { useState } from 'react';\nimport { Dialog, DialogActions, DialogContent, DialogContentText, DialogTitle, Button as MuiButton } from '@material-ui/core';\nimport { Lock } from '@material-ui/icons';\nimport { Button, useDataProvider, useNotify, useRecordContext, useRefresh, useTranslate } from 'react-admin';\n\nconst closePeriod = async (dataProvider, periodId) => {\n return dataProvider.update('payPeriods', { id: periodId, data: { isClosed: true } })\n}\n\nconst ClosePeriodModal = ({ open, handleClose, ...props }) => {\n const translate = useTranslate();\n const payPeriod = useRecordContext();\n const notify = useNotify();\n const refresh = useRefresh();\n const dataProvider = useDataProvider();\n\n const onSubmit = async () => {\n if (!payPeriod?.id) {\n handleClose();\n return;\n }\n\n closePeriod(dataProvider, payPeriod.id)\n .then(({ data }) => {\n handleClose();\n refresh();\n notify('resources.payPeriods.notifications.pay_period_close');\n })\n .catch(err => {\n console.log(err) // eslint-disable-line no-console\n notify('resources.payPeriods.notifications.close_pay_period_error')\n })\n }\n\n return <Dialog open={open} onClose={handleClose} maxWidth=\"medium\">\n <DialogTitle>{translate('resources.payPeriods.labels.close_period')}</DialogTitle>\n <DialogContent>\n <DialogContentText>\n {translate('resources.payPeriods.helpers.close_period')}\n </DialogContentText>\n </DialogContent>\n <DialogActions>\n <MuiButton onClick={handleClose}>{translate('ra.action.cancel')}</MuiButton>\n <MuiButton onClick={onSubmit} color=\"primary\">{translate('ra.action.close')}</MuiButton>\n </DialogActions>\n </Dialog>\n}\n\nexport default ({ ...props }) => {\n const translate = useTranslate();\n const [ open, setOpen ] = useState(false);\n\n const handleClick = () => setOpen(true);\n\n return <>\n <Button label={translate('ra.action.close')} onClick={handleClick}>\n <Lock />\n </Button>\n {open && <ClosePeriodModal open={open} handleClose={() => setOpen(false)} />}\n </>\n}\n","import React from 'react';\nimport { useRecordContext, useTranslate } from 'react-admin';\nimport { Grid } from '@material-ui/core'\nimport { Alert, AlertTitle } from '@material-ui/lab';\nimport { Lock, LockOpen } from '@material-ui/icons';\nimport moment from 'moment-timezone';\n\nimport { TransactionViewSettingsProvider } from '../officialTransactions/TransactionViewSettings';\nimport PayPeriodCard from './cards/PayPeriodCard';\nimport OfficialTransactionsCard from './cards/TransactionsCard';\nimport ClosePeriodModal from './ClosePeriodModal';\n\nconst PayPeriodStatus = () => {\n const translate = useTranslate();\n const { isClosed, closedAt } = useRecordContext();\n\n const title = translate(`resources.payPeriods.alerts.${isClosed ? 'period_closed' : 'period_active'}`);\n const message = translate(`resources.payPeriods.alerts.${isClosed ? 'period_closed_message' : 'period_active_message'}`, { date: moment.utc(closedAt, 'YYYY-MM-DD').format('LL') });\n\n return <Grid item xs={12}>\n <Alert icon={isClosed ? <Lock /> : <LockOpen />} color={isClosed ? \"warning\" : \"info\"} action={!isClosed && <ClosePeriodModal />}>\n <AlertTitle>{title}</AlertTitle>\n {message}\n </Alert>\n </Grid>\n}\nexport const PayPeriodShowLayout = props => {\n return <Grid container spacing={3}>\n <Grid item xs={12}>\n <PayPeriodCard />\n </Grid>\n <PayPeriodStatus />\n <Grid item xs={12}>\n <TransactionViewSettingsProvider>\n <OfficialTransactionsCard />\n </TransactionViewSettingsProvider>\n </Grid>\n </Grid>;\n}\n","import React from 'react';\n\nimport ResourceTitle from '../../common/ResourceTitle';\nimport { Create, Edit, Show } from \"../../common/ra\";\n\nimport { PayPeriodShowLayout } from './PayPeriodShow';\nimport { useTranslate } from 'react-admin';\nimport { PayPeriodForm } from './PayPeriodForm';\n\nconst getTitle = payPeriod => payPeriod.name\n\nexport const PayPeriodShow = props => {\n return <Show {...props}\n title={<ResourceTitle title={getTitle} />}\n >\n <PayPeriodShowLayout />\n </Show>\n}\n\nexport const PayPeriodCreate = props => {\n const translate = useTranslate()\n return <Create\n title={<ResourceTitle title={() => translate('resources.payPeriods.labels.add')} />}\n {...props}\n >\n <PayPeriodForm redirect=\"show\" />\n </Create>\n}\n\nexport const PayPeriodEdit = props => {\n const translate = useTranslate();\n return <Edit\n title={<ResourceTitle title={record => translate('ra.page.editing', { name: record?.name })} />}\n {...props}\n >\n <PayPeriodForm redirect=\"show\" />\n </Edit>\n}\n","import React from \"react\"\n\nimport { History } from '@material-ui/icons';\n\nimport ListCard from \"../../common/cards/ListCard\";\nimport { SuspensionGrid } from \"../scoresheet/suspension/SuspensionGrid\";\n\nexport const ParticipantSuspensionsCard = ({ hideAddButton = true, rowOptions, ...props }) => {\n return <ListCard\n title=\"resources.suspensions.labels.participant_history\"\n icon={<History />}\n reference=\"suspensions\"\n target=\"participantId\"\n sort={{ field: ['game.date'], order: ['DESC'] }}\n {...props}\n >\n <SuspensionGrid multipleGames hideParticipant hover={false} />\n </ListCard>\n}\n","import React, { useRef } from \"react\";\nimport { NumberInput, SimpleForm, TextInput, useTranslate } from \"react-admin\";\nimport { useFormState } from \"react-final-form\";\nimport { useSelector } from \"react-redux\";\nimport { Grid } from \"@material-ui/core\";\nimport { Alert } from \"@material-ui/lab\";\nimport createCalculator from 'final-form-calculate';\n\nimport { FieldDependency } from \"../../common/FieldDependency\";\nimport { DisciplineStatusInput, DurationTypeInput } from \"../../common/inputs/EnumInputs\";\n\nconst INDEFINITE = 'Indefinite';\nconst DEFINITE = 'Definite';\n\nconst validate = (values, requiredGames) => {\n const errors = {};\n\n if (values.durationType === DEFINITE) {\n if (values.additionalGames == null) {\n errors.additionalGames = 'ra.validation.required';\n } else if (requiredGames + values.additionalGames < 1) {\n errors.additionalGames = 'resources.suspensionDisciplines.validations.must_be_greater_than_zero';\n }\n } else if (values.durationType === INDEFINITE && values.additionalGames >= 0) {\n errors.additionalGames = 'resources.suspensionDisciplines.validations.must_be_empty';\n }\n\n if (!values.durationType) {\n errors.durationType = 'ra.validation.required';\n }\n\n if (!values.status) {\n errors.status = 'ra.validation.required';\n }\n\n return errors;\n}\n\nconst inputProps = {\n variant: 'outlined',\n margin: 'none',\n fullWidth: true,\n}\n\nconst AdditionalGamesField = ({ requiredGames }) => {\n const translate = useTranslate();\n const { values } = useFormState();\n\n const totalGames = values.durationType === DEFINITE\n ? requiredGames + (values?.additionalGames || 0)\n : '∞';\n\n return <FieldDependency fieldSource=\"durationType\" test={durationType => durationType !== INDEFINITE} disabled>\n <NumberInput\n source=\"additionalGames\"\n label=\"resources.suspensionDisciplines.fields.additionalGames\"\n helperText={translate('resources.suspensionDisciplines.helpers.totalGames', { totalGames })}\n {...inputProps}\n />\n </FieldDependency>\n}\n\nexport const SuspensionDisciplineForm = ({ initialValues, ...props }) => {\n const translate = useTranslate();\n const suspensions = useSelector(state => state?.admin?.resources?.suspensions?.data);\n\n const suspension = suspensions[initialValues?.suspensionId];\n const requiredGames = suspension?.requiredGames;\n\n const decorators = useRef([createCalculator({\n field: 'durationType',\n updates: {\n additionalGames: (durationType, values, prevValues) => {\n if (durationType === INDEFINITE) {\n return;\n }\n return values.additionalGames;\n }\n }\n })]);\n\n return <SimpleForm decorators={decorators.current} validate={values => validate(values, requiredGames)} initialValues={initialValues} {...props}>\n <Grid container spacing={2} fullWidth>\n <Grid item xs={12}>\n <Alert severity=\"info\" style={{ marginBottom: 8 }}>\n <span dangerouslySetInnerHTML={{ __html: translate('resources.suspensionDisciplines.alerts.additionalGames') }}></span>\n </Alert>\n </Grid>\n <Grid item xs={12}>\n <AdditionalGamesField requiredGames={requiredGames} />\n </Grid>\n <Grid item xs={12}>\n <DurationTypeInput source=\"durationType\" label=\"resources.suspensionDisciplines.fields.durationType\" radio helperText=\"\" {...inputProps} />\n </Grid>\n <Grid item xs={12}>\n <TextInput source=\"comments\" label=\"resources.suspensionDisciplines.fields.comments\" multiline minRows=\"3\" {...inputProps} />\n </Grid>\n <Grid item xs={12}>\n <DisciplineStatusInput source=\"status\" label=\"resources.suspensionDisciplines.fields.status\" {...inputProps} />\n </Grid>\n </Grid>\n </SimpleForm>\n}\n","import React, { useState } from \"react\";\nimport { useDataProvider, useNotify, useRecordContext, useRefresh, useTranslate } from \"react-admin\";\nimport { Button } from \"@material-ui/core\";\nimport { Add, Edit, GroupAdd } from \"@material-ui/icons\";\n\n\nimport { CreateResourceDialog, EditResourceDialog } from \"../../common/dialogs/ResourceDialog\";\nimport { DialogDatagrid } from \"../../common/dialogs/DialogDatagrid\";\nimport ConfirmDialog from \"../../common/dialogs/ConfirmDialog\";\n\nimport { SuspensionDisciplineForm } from \"./SuspensionDisciplineForm\";\n\nconst AddSuspensionDisciplineDialog = props =>\n <CreateResourceDialog label=\"resources.suspensionDisciplines.actions.add\" resource=\"suspensionDisciplines\" basePath=\"/suspensionDisciplines\" {...props}>\n <SuspensionDisciplineForm />\n </CreateResourceDialog>\n\nconst EditSuspensionDisciplineDialog = props =>\n <EditResourceDialog label=\"resources.suspensionDisciplines.labels.edit\" resource=\"suspensionDisciplines\" basePath=\"/suspensionDisciplines\" canDelete={false} {...props}>\n <SuspensionDisciplineForm />\n </EditResourceDialog>\n\nexport const AddSuspensionDisciplineButton = ({ size, variant, icon = <Add />, label = true, ...props }) => {\n const [ isOpen, setOpen ] = useState(false);\n const translate = useTranslate();\n return <>\n <Button color=\"primary\" size={size} variant={variant} startIcon={icon} onClick={() => setOpen(true)}>{label && translate('resources.suspensionDisciplines.actions.add')}</Button>\n <AddSuspensionDisciplineDialog isOpen={isOpen} handleClose={() => setOpen(false)} {...props} />\n </>\n}\n\nexport const EditSuspensionDisciplineButton = ({ size, variant, icon = <Edit />, label = true, ...props }) => {\n const [ isOpen, setOpen ] = useState(false);\n const translate = useTranslate();\n return <>\n <Button color=\"primary\" size={size} variant={variant} startIcon={icon} onClick={() => setOpen(true)}>{label && translate('resources.suspensionDisciplines.labels.edit')}</Button>\n <EditSuspensionDisciplineDialog isOpen={isOpen} handleClose={() => setOpen(false)} {...props} />\n </>\n}\n\nexport const TriggerSuspensionDiscplineButton = ({ size, variant, icon = <GroupAdd />, label = true, ...props }) => {\n const [ isOpen, setOpen ] = useState(false);\n const suspension = useRecordContext();\n const dataProvider = useDataProvider();\n const translate = useTranslate();\n const notify = useNotify();\n const refresh = useRefresh();\n\n const handleTrigger = async () =>\n await dataProvider.create('suspensionDisciplines', {\n data: { suspensionId: suspension.id, status: 'Pending', additionalGames: 0, durationType: 'Definite' }\n })\n .then(() => {\n notify('resources.suspensionDisciplines.notifications.trigger_success', 'success');\n setOpen(false)\n refresh();\n })\n .catch(() => {\n notify('resources.suspensionDisciplines.notifications.trigger_error', 'error');\n setOpen(false);\n })\n\n\n return <>\n <Button color=\"primary\" size={size} variant={variant} startIcon={icon} onClick={() => setOpen(true)}>{label && translate('resources.suspensionDisciplines.actions.trigger')}</Button>\n <ConfirmDialog\n open={isOpen}\n setOpen={setOpen}\n handleConfirm={handleTrigger}\n title={translate('resources.suspensionDisciplines.labels.confirm_trigger')}\n text={translate('resources.suspensionDisciplines.messages.confirm_trigger')}\n {...props}\n />\n </>\n}\n\nexport const SuspensionDisciplineDatagrid = props => <DialogDatagrid dialog={EditSuspensionDisciplineDialog} {...props} />\n","import React from \"react\"\nimport { GET_LIST, RecordContextProvider, TextField, useQuery, useRecordContext } from \"react-admin\"\nimport { makeStyles, Table, TableBody } from \"@material-ui/core\";\n\nimport { isAuthorized } from \"../../common/Authorize\";\nimport { EnumField } from \"../../common/inputs/EnumInputs\";\nimport InfoCard from \"../../common/cards/InfoCard\";\nimport Row from '../../common/cards/TableRow';\nimport FunctionField from \"../../common/fields/FunctionField\";\n\nimport { EditSuspensionDisciplineButton } from \"./SuspensionDisciplineModal\";\n\nconst useStyles = makeStyles(theme => ({\n comments: {\n whiteSpace: 'pre-line',\n }\n}));\n\nconst isIndefinite = (durationType) => durationType === 'Indefinite';\n\nconst useSuspensionDiscipline = (suspensionId) => {\n const { data, ...rest } = useQuery({\n type: GET_LIST,\n resource: 'suspensionDisciplines',\n payload: { filter: { suspensionId } },\n\n }, {\n enabled: !!suspensionId\n })\n\n return { data: data?.[0], ...rest };\n}\n\nconst renderDisciplineAdditionalGames = (record, source, resource, translate) => {\n const { disciplineAdditionalGames, disciplineDurationType } = record;\n\n return isIndefinite(disciplineDurationType) ? translate('resources.suspensions.values.durationType.Indefinite') : disciplineAdditionalGames;\n};\n\nexport const SuspensionDisciplineCard = () => {\n const classes = useStyles();\n const suspension = useRecordContext();\n const { data: suspensionDiscipline } = useSuspensionDiscipline(suspension?.id);\n\n const canEditSuspensionDiscipline = isAuthorized(suspensionDiscipline, 'suspensionDisciplines', 'edit');\n\n if (!suspensionDiscipline) return null;\n\n return <InfoCard\n title=\"resources.suspensionDisciplines.name\"\n actions={[\n canEditSuspensionDiscipline && <EditSuspensionDisciplineButton id={suspensionDiscipline?.id} size=\"small\" />\n ]}\n >\n <RecordContextProvider value={suspensionDiscipline}>\n <Table>\n <TableBody>\n <Row label=\"resources.suspensions.labels.disciplineAdditionalGames\">\n <RecordContextProvider value={suspension}>\n <FunctionField source=\"disciplineAdditionalGames\" render={renderDisciplineAdditionalGames} />\n </RecordContextProvider>\n </Row>\n <Row label=\"resources.suspensionDisciplines.fields.status\">\n <EnumField source=\"status\" />\n </Row>\n <Row label=\"resources.suspensionDisciplines.fields.comments\">\n <TextField source=\"comments\" className={classes.comments} />\n </Row>\n </TableBody>\n </Table>\n </RecordContextProvider>\n </InfoCard>\n}\n","import React from 'react';\nimport { ListContextProvider, useList, useRecordContext } from 'react-admin';\nimport { GroupOutlined } from '@material-ui/icons';\n\nimport InfoCard from '../../common/cards/InfoCard.js';\nimport { useHttpClient } from '../../http';\n\nimport { CommitteeRoleGrid } from \"../roles/RoleGrid.js\";\n\nconst useDisciplineCommittee = (suspensionId) => {\n return useHttpClient(`/suspensions/${suspensionId}/committee`, null, !!suspensionId);\n}\n\nexport default props => {\n const suspension = useRecordContext();\n const { data: committee, loading, loaded, error } = useDisciplineCommittee(suspension?.id);\n\n const listContext = useList({\n data: committee,\n ids: committee ? committee.map(c => c.id) : [],\n loading: loading,\n loaded: loaded,\n error: error,\n sort: {\n field: 'targetId',\n },\n });\n\n if (!committee) return null;\n\n return <ListContextProvider value={listContext}>\n <InfoCard\n title=\"resources.suspensionDisciplines.labels.discipline_committee\"\n icon={<GroupOutlined />}\n collapsable\n >\n <CommitteeRoleGrid />\n </InfoCard>\n </ListContextProvider>\n}\n","import React from 'react';\nimport { EditButton, useRecordContext, ReferenceField, TextField } from 'react-admin';\nimport { makeStyles, Table, TableBody, Typography } from '@material-ui/core';\n\nimport InfoCard from '../../common/cards/InfoCard';\nimport Row from '../../common/cards/TableRow';\nimport { EnumField } from '../../common/inputs/EnumInputs';\nimport { isAuthorized } from '../../common/Authorize';\nimport FunctionField from '../../common/fields/FunctionField';\n\nimport { ParticipantField } from '../participants/ParticipantField';\nimport { TeamField } from '../teams/TeamField';\nimport { ScheduleField } from '../schedules/ScheduleField';\nimport { GameField } from '../games/GameField';\nimport { PenaltyField } from '../scoresheet/gameIncidents/IncidentReportGrid';\nimport { SanctionField, SuspensionDetailsField } from '../scoresheet/suspension/SuspensionGrid';\nimport { AddSuspensionDisciplineButton, TriggerSuspensionDiscplineButton } from '../suspensionDiscipline/SuspensionDisciplineModal';\n\nconst useStyles = makeStyles(() => ({\n boldRow: {\n fontWeight: 'bold',\n }\n}))\n\nconst isIndefinite = (durationType) => durationType === 'Indefinite';\n\nconst renderDisciplineAdditionalGames = (record, source, resource, translate) => {\n const { disciplineDurationType, disciplineAdditionalGames, disciplineStatus } = record;\n const numOfGames = isIndefinite(disciplineDurationType) ? translate('resources.suspensionDisciplines.values.durationType.Indefinite') : disciplineAdditionalGames;\n const status = disciplineStatus ? ` (${translate(`resources.suspensionDisciplines.values.status.${disciplineStatus}`)})` : '';\n\n if (numOfGames == null) return translate('ra.page.not_available');\n\n return <Typography variant=\"body2\">\n {numOfGames}\n <Typography variant=\"body2\" component=\"span\" color=\"textSecondary\">{status}</Typography>\n </Typography>\n};\n\nconst renderRequiredGames = (record, source, resource, translate) => {\n const { requiredGames, durationType } = record;\n\n return isIndefinite(durationType) ? translate('resources.suspensions.values.durationType.Indefinite') : requiredGames;\n};\n\nconst renderEffectiveRequiredGames = (record, source, resource, translate) => {\n const { effectiveRequiredGames, effectiveDurationType } = record;\n\n return isIndefinite(effectiveDurationType) ? translate('resources.suspensions.values.durationType.Indefinite') : effectiveRequiredGames;\n};\n\nconst renderSuspensionType = (suspension, source, resource, translate) => {\n const type = (!!suspension?.code || !!suspension?.sanctionId) ? translate('resources.suspensions.labels.automatic') : translate('resources.suspensions.labels.manual')\n const sanctionName = suspension.sanctionId ? <SanctionField source=\"sanctionId\" /> : translate(`resources.suspensions.values.code.${suspension.code || 'supplemental'}`, { _: suspension.code })\n\n return <>\n <Typography variant=\"body2\" display=\"inline\">{type}</Typography>\n <div><Typography variant=\"body2\" display=\"inline\" color=\"textSecondary\"> {sanctionName}</Typography></div>\n </>\n}\n\nexport default ({ hasDiscipline, disciplinesEnabled, ...props }) => {\n const classes = useStyles();\n const suspension = useRecordContext(props);\n\n const canEditSuspension = isAuthorized(suspension, 'suspensions', 'edit');\n const canAddSuspensionDiscipline = disciplinesEnabled && isAuthorized(suspension, 'suspensionDisciplines', 'create') && !hasDiscipline;\n const canTriggerSuspensionDiscipline = disciplinesEnabled && isAuthorized(suspension, 'suspensionDisciplines', 'trigger') && !hasDiscipline;\n\n return <InfoCard\n title=\"resources.suspensions.name\"\n actions={[\n canEditSuspension && <EditButton label=\"resources.suspensions.labels.edit\" record={suspension} />,\n canAddSuspensionDiscipline && <AddSuspensionDisciplineButton initialValues={{ suspensionId: suspension.id, durationType: 'Definite', status: 'Pending' }} />,\n canTriggerSuspensionDiscipline && <TriggerSuspensionDiscplineButton />,\n ].filter(Boolean)}\n >\n <Table>\n <TableBody>\n <Row label=\"resources.suspensions.fields.participantId\">\n <ParticipantField source=\"participantId\" includeId=\"full\" />\n </Row>\n <Row label=\"resources.suspensions.fields.teamId\">\n <TeamField source=\"teamId\" includeId=\"full\" includeCategory=\"full\" includeSeason=\"full\" />\n </Row>\n <Row label=\"resources.suspensions.fields.additionalPurgingTeamId\">\n <TeamField source=\"additionalPurgingTeamId\" includeId=\"full\" includeCategory=\"full\" includeSeason=\"full\" noneLabel />\n </Row>\n <Row label=\"resources.games.fields.scheduleId\">\n <ReferenceField source=\"gameId\" reference=\"games\" resource=\"games\" basePath=\"/games\" label=\"resources.games.fields.scheduleId\" link={false}>\n <ScheduleField source=\"scheduleId\" includeCategory=\"full\" includeType=\"full\" />\n </ReferenceField>\n </Row>\n <Row label=\"resources.suspensions.fields.gameId\">\n <GameField source=\"gameId\" link=\"scoresheet\" includeDate=\"inline\" includeSurface=\"full\" />\n </Row>\n <Row label=\"resources.suspensions.fields.penaltyId\">\n <PenaltyField source=\"penaltyId\" />\n </Row>\n {!disciplinesEnabled\n ? <Row label=\"resources.suspensions.labels.details\">\n <SuspensionDetailsField source=\"suspensionId\" />\n </Row>\n : <>\n <Row label=\"resources.suspensions.fields.positionGroup\">\n <TextField source=\"positionGroup\" />\n </Row>\n <Row label=\"resources.suspensions.labels.type\">\n <FunctionField source=\"type\" render={renderSuspensionType} />\n </Row>\n <Row label=\"resources.suspensions.labels.requiredGames\">\n <FunctionField source=\"requiredGames\" render={renderRequiredGames} />\n </Row>\n <Row label=\"resources.suspensions.labels.disciplineAdditionalGames\">\n <FunctionField source=\"disciplineAdditionalGames\" render={renderDisciplineAdditionalGames} />\n </Row>\n <Row label=\"resources.suspensions.labels.effectiveRequiredGames\" cellClass={classes.boldRow}>\n <FunctionField source=\"effectiveRequiredGames\" className={classes.boldRow} render={renderEffectiveRequiredGames} />\n </Row>\n <Row label=\"resources.suspensions.fields.status\">\n <EnumField source=\"status\" />\n </Row>\n </>}\n </TableBody>\n </Table>\n </InfoCard>\n}\n","import React from 'react';\nimport { RecordContextProvider, useRecordContext } from 'react-admin';\nimport { Card, Grid } from '@material-ui/core'\n\nimport { isAuthorized } from '../../common/Authorize';\n\nimport { useGameWithStore } from '../games/useGame';\nimport { useBranchSettings } from '../branchOfficeSettings';\nimport { ScoresheetProvider } from '../scoresheet/ScoresheetContext';\nimport { GamePurgeList } from '../scoresheet/suspension/GamePurgeList';\nimport { IncidentReportCard } from '../scoresheet/gameIncidents/IncidentReportCard';\nimport { ParticipantSuspensionsCard } from './ParticipantSuspensionsCard';\nimport { SuspensionDisciplineCard } from '../suspensionDiscipline/SuspensionDisciplineCard';\nimport DisciplineCommitteeCard from '../suspensionDiscipline/DisciplineCommitteeCard';\nimport SuspensionCard from './SuspensionCard';\n\nexport const SuspensionShowLayout = props => {\n const suspension = useRecordContext();\n const { gameId, participantId, penaltyId, disciplineStatus } = suspension;\n\n const { data: game } = useGameWithStore(gameId);\n const { data: branchSettings } = useBranchSettings(game?.officeId);\n\n const hasDiscipline = !!disciplineStatus;\n const disciplinesEnabled = !!branchSettings?.ff_suspension_disciplines;\n const canViewSuspensionDiscipline = hasDiscipline && disciplinesEnabled && isAuthorized(suspension, 'suspensionDisciplines', 'show');\n const canViewDisciplineCommittee = hasDiscipline && disciplinesEnabled && isAuthorized(suspension, 'suspensionDisciplines', 'committee');\n\n if (!gameId) return null;\n\n return <ScoresheetProvider gameId={gameId} hideAlerts>\n <Grid container spacing={3}>\n <Grid item xs={12} lg={canViewSuspensionDiscipline ? 6 : 12}>\n <SuspensionCard hasDiscipline={hasDiscipline} disciplinesEnabled={disciplinesEnabled} />\n </Grid>\n {canViewSuspensionDiscipline && <Grid item xs={12} lg={6}>\n <SuspensionDisciplineCard />\n </Grid>}\n <Grid item xs={12}>\n <Card>\n <GamePurgeList />\n </Card>\n </Grid>\n {canViewDisciplineCommittee && <Grid item xs={12}>\n <DisciplineCommitteeCard />\n </Grid>}\n <Grid item xs={12}>\n <RecordContextProvider value={{ id: gameId, officeId: game?.officeId }}>\n <IncidentReportCard hideAddButton filter={{ participantId }} rowOptions={{ isRowSelectable: () => false }} />\n </RecordContextProvider>\n </Grid>\n <Grid item xs={12}>\n <RecordContextProvider value={{ id: participantId }}>\n <ParticipantSuspensionsCard filter={{ participantId }} />\n </RecordContextProvider>\n </Grid>\n </Grid>\n </ScoresheetProvider>\n}\n","import { GET_ONE, useQueryWithStore } from \"react-admin\";\nimport { useSelector } from 'react-redux';\n\nexport const useGameWithStore = (gameId, enabled = true) => {\n const gameInStore = useSelector(state => state?.admin?.resources?.games?.data?.[gameId])\n\n const { data, loading, error } = useQueryWithStore({\n type: GET_ONE,\n resource: 'games',\n payload: { id: gameId },\n }, {\n enabled: !gameInStore && !!gameId && !!enabled\n })\n return { data: gameInStore || data, loading, error };\n}\n","import React from 'react';\nimport { Filter, NullableBooleanInput } from 'react-admin';\n\nimport { ResetFiltersButton } from '../../common/ResetFiltersButton';\nimport { FilterCard } from '../../common/cards/FilterCard';\nimport { SavedSearches } from '../../common/SavedSearches';\nimport { DisciplineStatusInput, SuspensionStatusInput } from '../../common/inputs/EnumInputs';\n\nimport { GameInput } from '../games/GameInput';\nimport { ParticipantInput } from '../participants/ParticipantInput';\nimport { TeamInput } from '../teams/TeamInput';\nimport { ScheduleInput } from '../schedules/ScheduleInput';\n\nconst multipleProps = {\n multiple: true,\n alwaysOn: true,\n fullWidth: true,\n allowEmpty: false,\n}\n\nconst SuspensionFilters = props => {\n return <Filter variant=\"outlined\" margin=\"dense\" fullWidth {...props}>\n <ParticipantInput source=\"participantId\" {...multipleProps} />\n <TeamInput source=\"teamId\" {...multipleProps} />\n <GameInput source=\"gameId\" {...multipleProps} />\n <ScheduleInput source=\"game.scheduleId\" label=\"resources.games.fields.scheduleId\" {...multipleProps} multiple={false} />\n <SuspensionStatusInput source=\"status\" {...multipleProps} />\n <DisciplineStatusInput source=\"disciplineStatus\" {...multipleProps} />\n <NullableBooleanInput source=\"isAutomatic\" alwaysOn fullWidth />\n </Filter>\n}\n\nexport const SuspensionFilterList = () => {\n return <FilterCard>\n <SuspensionFilters />\n <ResetFiltersButton />\n <SavedSearches ignoredFilters={['seasonId']} />\n </FilterCard>\n}\n","import React from 'react';\nimport { Filter, NullableBooleanInput } from 'react-admin';\n\nimport { DisciplineStatusInput, SuspensionStatusInput } from '../../common/inputs/EnumInputs';\n\nimport { ParticipantInput } from '../participants/ParticipantInput';\nimport { GameInput } from '../games/GameInput';\nimport { TeamInput } from '../teams/TeamInput';\nimport { ScheduleInput } from '../schedules/ScheduleInput';\n\nconst multipleProps = {\n multiple: true,\n allowEmpty: false,\n}\n\nexport const SuspensionFilters = props => {\n return <Filter variant=\"outlined\" {...props}>\n <ParticipantInput source=\"participantId\" alwaysOn {...multipleProps} />\n <TeamInput source=\"teamId\" alwaysOn {...multipleProps} />\n <ScheduleInput source=\"game.scheduleId\" label=\"resources.games.fields.scheduleId\" alwaysOn {...multipleProps} multiple={false} />\n <GameInput source=\"gameId\" alwaysOn {...multipleProps} />\n <SuspensionStatusInput source=\"status\" {...multipleProps} />\n <DisciplineStatusInput source=\"disciplineStatus\" {...multipleProps} />\n <NullableBooleanInput source=\"isAutomatic\" />\n </Filter>\n}\n","import React from 'react';\nimport { useTranslate } from 'react-admin';\nimport { useMediaQuery } from '@material-ui/core';\n\nimport ResourceTitle from '../../common/ResourceTitle';\nimport { Create, Edit, List, Show } from \"../../common/ra\";\nimport { useSeason } from '../../common/inputs/SeasonSelector';\n\nimport { SuspensionForm } from '../scoresheet/suspension/SuspensionForm';\nimport { SuspensionGrid } from '../scoresheet/suspension/SuspensionGrid';\nimport { SuspensionShowLayout } from './SuspensionShow';\nimport { SuspensionFilterList } from './SuspensionFilterList';\nimport { SuspensionFilters } from './SuspensionFilters';\n\nexport const SuspensionList = props => {\n const seasonId = useSeason();\n const isSmall = useMediaQuery(theme => theme.breakpoints.down('sm'));\n return <List {...props}\n aside={!isSmall && <SuspensionFilterList />}\n filters={isSmall && <SuspensionFilters />}\n filter={{ seasonId }}\n sort={{\n field: 'game.date',\n order: 'DESC'\n }}\n resetFilters={isSmall}\n >\n <SuspensionGrid multipleGames rowClick=\"show\" canExpand={false} />\n </List>\n}\n\nexport const SuspensionShow = props => {\n const translate = useTranslate()\n return <Show {...props}\n title={<ResourceTitle title={() => translate('resources.suspensions.name', 1)} />}\n >\n <SuspensionShowLayout />\n </Show>\n}\n\nexport const SuspensionCreate = props => {\n const translate = useTranslate();\n return <Create\n title={<ResourceTitle title={() => translate('resources.suspensions.labels.add')} />}\n {...props}\n >\n <SuspensionForm redirect=\"show\" />\n </Create>\n}\n\nexport const SuspensionEdit = props => {\n const translate = useTranslate();\n return <Edit\n title={<ResourceTitle title={record => translate('ra.page.editing', { name: translate('resources.suspensions.name', 1) })} />}\n {...props}\n >\n <SuspensionForm redirect=\"show\" />\n </Edit>\n}\n","import React from 'react';\nimport { Resource, createAdminStore, registerResource } from 'react-admin'\n\nimport { isAuthorized } from '../common/Authorize';\n\nimport { ScheduleList, ScheduleShow, ScheduleCreate, ScheduleEdit } from './schedules';\nimport { GameList, GameShow, GameCreate, GameEdit } from './games';\nimport { PracticeList, PracticeShow, PracticeCreate, PracticeEdit } from './practices';\nimport { ActivityList, ActivityShow, ActivityCreate, ActivityEdit } from './activities';\n\nimport { TeamList, TeamShow, TeamCreate, TeamEdit } from './teams';\nimport { ParticipantList, ParticipantShow, ParticipantCreate, ParticipantEdit } from './participants';\nimport { OfficeList, OfficeShow, OfficeCreate, OfficeEdit } from './offices';\nimport { RulebookCreate, RulebookEdit } from './rulebooks';\n\nimport { LeagueList, LeagueShow, LeagueCreate, LeagueEdit } from './leagues';\nimport { TournamentList, TournamentShow, TournamentCreate, TournamentEdit } from './tournaments';\nimport { CupList, CupShow, CupCreate, CupEdit } from './cups';\nimport { VenueList, VenueShow, VenueCreate, VenueEdit } from './venues';\nimport { SurfaceList, SurfaceShow, SurfaceCreate, SurfaceEdit } from './surfaces';\nimport { AccountList, AccountShow, AccountCreate, AccountEdit } from './accounts';\n\nimport { AnnouncementList, AnnouncementShow, AnnouncementCreate, AnnouncementEdit } from './announcements';\nimport { PageList, PageShow, PageCreate, PageEdit } from './pages';\nimport { PostList, PostShow, PostCreate, PostEdit } from './posts';\nimport { WebEventList, WebEventShow, WebEventCreate, WebEventEdit } from './webevents';\nimport { ArticleList, ArticleShow, ArticleCreate, ArticleEdit } from './articles';\nimport { PayPeriodCreate, PayPeriodEdit, PayPeriodShow } from './payPeriods';\nimport { SuspensionEdit, SuspensionList, SuspensionShow } from './suspensions';\n\nimport { AccountIcon, AnnouncementIcon, SurfaceIcon, ArticleIcon, GameIcon, PracticeIcon, ActivityIcon, OfficeIcon, LeagueIcon, TournamentIcon, CupIcon, ScheduleIcon, TeamIcon, ParticipantIcon, PageIcon, PostIcon, WebEventIcon, RulebookIcon, VenueIcon, BalanceIcon, GavelIcon } from './icons';\n\nexport const allResources = [\n <Resource name=\"schedules\" icon={ScheduleIcon} list={ScheduleList} show={ScheduleShow} create={ScheduleCreate} edit={ScheduleEdit} />,\n <Resource name=\"games\" icon={GameIcon} list={GameList} show={GameShow} create={GameCreate} edit={GameEdit} />,\n <Resource name=\"teams\" icon={TeamIcon} list={TeamList} show={TeamShow} create={TeamCreate} edit={TeamEdit} />,\n <Resource name=\"practices\" icon={PracticeIcon} list={PracticeList} show={PracticeShow} create={PracticeCreate} edit={PracticeEdit} />,\n <Resource name=\"activities\" icon={ActivityIcon} list={ActivityList} show={ActivityShow} create={ActivityCreate} edit={ActivityEdit} />,\n <Resource name=\"participants\" icon={ParticipantIcon} list={ParticipantList} show={ParticipantShow} create={ParticipantCreate} edit={ParticipantEdit} />,\n <Resource name=\"webevents\" icon={WebEventIcon} list={WebEventList} show={WebEventShow} create={WebEventCreate} edit={WebEventEdit} />,\n <Resource name=\"posts\" icon={PostIcon} list={PostList} show={PostShow} create={PostCreate} edit={PostEdit} />,\n <Resource name=\"pages\" icon={PageIcon} list={PageList} show={PageShow} create={PageCreate} edit={PageEdit} />,\n <Resource name=\"leagues\" icon={LeagueIcon} list={LeagueList} show={LeagueShow} create={LeagueCreate} edit={LeagueEdit} />,\n <Resource name=\"tournaments\" icon={TournamentIcon} list={TournamentList} show={TournamentShow} create={TournamentCreate} edit={TournamentEdit} />,\n <Resource name=\"cups\" icon={CupIcon} list={CupList} show={CupShow} create={CupCreate} edit={CupEdit} />,\n <Resource name=\"offices\" icon={OfficeIcon} list={OfficeList} show={OfficeShow} create={OfficeCreate} edit={OfficeEdit} />,\n <Resource name=\"venues\" icon={VenueIcon} list={VenueList} show={VenueShow} create={VenueCreate} edit={VenueEdit} />,\n <Resource name=\"surfaces\" icon={SurfaceIcon} list={SurfaceList} show={SurfaceShow} create={SurfaceCreate} edit={SurfaceEdit} />,\n <Resource name=\"accounts\" icon={AccountIcon} list={AccountList} show={AccountShow} create={AccountCreate} edit={AccountEdit} />,\n <Resource name=\"announcements\" icon={AnnouncementIcon} list={AnnouncementList} show={AnnouncementShow} create={AnnouncementCreate} edit={AnnouncementEdit} />,\n <Resource name=\"help\" icon={ArticleIcon} list={ArticleList} show={ArticleShow} create={ArticleCreate} edit={ArticleEdit} />,\n <Resource name=\"rulebooks\" icon={RulebookIcon} create={RulebookCreate} edit={RulebookEdit} />,\n <Resource name=\"payPeriods\" icon={BalanceIcon} show={PayPeriodShow} create={PayPeriodCreate} edit={PayPeriodEdit} />,\n <Resource name=\"suspensions\" icon={GavelIcon} list={SuspensionList} show={SuspensionShow} edit={SuspensionEdit} />,\n <Resource name=\"rules\" />,\n <Resource name=\"ruleSections\" />,\n <Resource name=\"ruleOptions\" />,\n <Resource name=\"ruleOptionMembers\" />,\n <Resource name=\"infractions\" />,\n <Resource name=\"infractionTypes\" />,\n <Resource name=\"infractionAccumulations\" />,\n <Resource name=\"infractionAccumulationMembers\" />,\n <Resource name=\"divisions\" />,\n <Resource name=\"classes\" />,\n <Resource name=\"categories\" />,\n <Resource name=\"sections\" />,\n <Resource name=\"profiles\" />,\n <Resource name=\"members\" />,\n <Resource name=\"contacts\" />,\n <Resource name=\"addresses\" />,\n <Resource name=\"registrations\" />,\n <Resource name=\"qualifications\" />,\n <Resource name=\"qualificationCategories\" />,\n <Resource name=\"officialOffices\" />,\n <Resource name=\"officialConflicts\" />,\n <Resource name=\"officialClaims\" />,\n <Resource name=\"officialTransactions\" />,\n <Resource name=\"attributeTypes\" />,\n <Resource name=\"attributeValues\" />,\n <Resource name=\"permissions\" />,\n <Resource name=\"identities\" />,\n <Resource name=\"roles\" />,\n <Resource name=\"gameAffiliates\" />,\n <Resource name=\"gameOfficials\" />,\n <Resource name=\"availabilities\" />,\n <Resource name=\"officialAssignments\" />,\n <Resource name=\"availableOfficials\" />,\n <Resource name=\"gameStatuses\" />,\n <Resource name=\"gameAssignSettings\" />,\n <Resource name=\"officeAssignSettings\" />,\n <Resource name=\"assignSystems\" />,\n <Resource name=\"assignFees\" />,\n <Resource name=\"assignRules\" />,\n <Resource name=\"assignTargets\" />,\n <Resource name=\"lists\" />,\n <Resource name=\"listMembers\" />,\n <Resource name=\"gameEvents\" />,\n <Resource name=\"gameMessages\" />,\n <Resource name=\"gameDocuments\" />,\n <Resource name=\"officialClaimDocuments\" />,\n <Resource name=\"gameIncidents\" />,\n <Resource name=\"gamepenalties\" />,\n <Resource name=\"gamePurges\" />,\n <Resource name=\"groups\" />,\n <Resource name=\"pools\" />,\n <Resource name=\"arenaoffices\" />,\n <Resource name=\"arenaslots\" />,\n <Resource name=\"scheduleteams\" />,\n <Resource name=\"schedulesequences\" />,\n <Resource name=\"notifications\" />,\n <Resource name=\"officeSettings\" />,\n <Resource name=\"branchOfficeSettings\" />,\n <Resource name=\"effectiveBranchOfficeSettings\" />,\n <Resource name=\"scheduleSettings\" />,\n <Resource name=\"teamArenas\" />,\n <Resource name=\"teamContacts\" />,\n <Resource name=\"scheduleContacts\" />,\n <Resource name=\"drafts\" />,\n <Resource name=\"draftGames\" />,\n <Resource name=\"draftGameApprovals\" />,\n <Resource name=\"officemembers\" />,\n <Resource name=\"preferences\" />,\n <Resource name=\"schemas\" />,\n <Resource name=\"schedulingConstraints\" />,\n <Resource name=\"sanctions\" />,\n <Resource name=\"sanctionMembers\" />,\n <Resource name=\"sanctionOffenses\" />,\n <Resource name=\"gameBrackets\" />,\n <Resource name=\"externalProviders\" />,\n <Resource name=\"officeClaimsSettings\" />,\n <Resource name=\"suspensionDisciplines\" />,\n <Resource name=\"participantMemberTypes\" />,\n <Resource name=\"memberTypes\" />,\n]\n\nexport const authResources = scopes =>\n allResources\n .map(Resource => {\n const ResourceType = Resource.type\n const { name: resource, icon, ...props } = Resource.props;\n\n const allowedProps = ['list', 'show', 'create', 'edit'].reduce((methods, method) => {\n if (props[method] && isAuthorized(scopes, resource, method)) {\n methods[method] = props[method]\n }\n return methods;\n }, {});\n\n return <ResourceType name={resource} icon={icon} {...allowedProps} />\n }).sort((a, b) => {\n if (a.props.list && !b.props.list) return -1; // a first\n if (!a.props.list && b.props.list) return 1; // b first\n return 0;\n })\n\n// workaround to deal with resources not registering properly\nexport const registerResources = dispatch => {\n allResources.forEach(resource => {\n dispatch(registerResource({\n name: resource.props.name,\n hasList: false,\n hasEdit: false,\n hasShow: false,\n hasCreate: false,\n }))\n })\n}\n\nexport const getInitialState = history => {\n const store = createAdminStore({ history });\n registerResources(store.dispatch)\n return store.getState();\n}\n","import React from 'react';\nimport { useTranslate } from 'react-admin';\nimport { useMediaQuery } from '@material-ui/core'\nimport { useSelector } from 'react-redux';\n\nimport { List, Show, Create, Edit, Pagination } from '../../common/ra';\nimport { isAuthorized } from '../../common/Authorize';\nimport ResourceTitle from '../../common/ResourceTitle';\nimport { useSeason } from '../../common/inputs/SeasonSelector';\n\nimport { useEventSort } from '../events/EventViewSettings';\nimport { EventView } from '../events/EventView';\n\nimport { GameFilters } from './GameFilters';\nimport { GameFilterList } from './GameFilterList';\nimport { GameActions } from './GameActions';\nimport { GameShowLayout } from './GameShow';\nimport { GameForm } from './GameForm';\nimport { GameBulkActions, canManageAssignments, canCertify, canChangeStatus } from './GameBulkActions';\nimport GamesExporter from './GamesExporter';\n\nconst isSelectable = (statuses, games) => id => {\n const gameStatus = statuses[id];\n const game = games[id];\n return canManageAssignments(gameStatus) || canCertify(gameStatus) || canChangeStatus(game);\n}\n\nexport const GameList = props => {\n const isMobile = useMediaQuery(theme => theme.breakpoints.down('xs'));\n const isSmall = useMediaQuery(theme => theme.breakpoints.down('sm'));\n const statuses = useSelector(state => state.admin.resources.gameStatuses.data)\n const games = useSelector(state => state.admin.resources.games.data)\n const sort = useEventSort({ groupByDate: true });\n const seasonId = useSeason();\n\n const isRowSelectable = isSelectable(statuses, games);\n const showBulkActions = isAuthorized(props.permissions, 'games', 'bulkActions') && Object.keys(statuses).some(isRowSelectable)\n\n return <List {...props}\n exporter={GamesExporter}\n aside={!isSmall && <GameFilterList disableCalendar />}\n component={!isMobile ? \"div\" : undefined}\n filters={isSmall && <GameFilters />}\n filterDefaultValues={{ seasonId, _include: [\"gameBracket\"] }}\n pagination={<Pagination isMobile={isMobile} rowsPerPageOptions={[25, 50, 100]} />}\n sort={sort}\n bulkActionButtons={showBulkActions ? <GameBulkActions /> : false}\n resetFilters={isSmall}\n >\n <EventView\n groupByDate\n isRowSelectable={isRowSelectable}\n disableCalendar\n />\n </List>\n}\n\nexport const GameShow = props => {\n const translate = useTranslate();\n return <Show {...props}\n actions={<GameActions />}\n title={<ResourceTitle title={record => translate('resources.games.labels.game_number', { number: record.number || '' })} />}\n >\n <GameShowLayout />\n </Show>\n}\n\nexport const GameCreate = props => {\n const translate = useTranslate();\n return <Create\n actions={<GameActions />}\n title={<ResourceTitle title={record => translate('resources.games.labels.add')} />}\n {...props}\n >\n <GameForm redirect=\"show\" />\n </Create>\n}\n\nexport const GameEdit = props => {\n const translate = useTranslate();\n return <Edit\n actions={<GameActions />}\n title={<ResourceTitle title={record => translate('resources.games.labels.editing_game_number', { number: record.number || '' })} />}\n {...props}\n >\n <GameForm redirect=\"show\" />\n </Edit>\n}\n","import React from 'react';\nimport { useTranslate } from 'react-admin';\nimport { useMediaQuery } from '@material-ui/core';\n\nimport { List, Show, Create, Edit } from '../../common/ra';\nimport { useSeason } from '../../common/inputs/SeasonSelector';\nimport ResourceTitle from '../../common/ResourceTitle';\n\nimport { EventView } from '../events/EventView';\nimport { useEventSort } from '../events/EventViewSettings';\n\nimport { PracticeFilters } from './PracticeFilters';\nimport { PracticeFilterList } from './PracticeFilterList';\nimport { PracticeShowLayout } from './PracticeShow';\nimport { PracticeForm } from './PracticeForm';\nimport PracticesExporter from './PracticesExporter';\nimport { PracticeBulkActions } from './PracticeBulkActions';\nimport { isAuthorized } from '../../common/Authorize';\n\nexport const PracticeList = props => {\n const seasonId = useSeason();\n const isSmall = useMediaQuery(theme => theme.breakpoints.down('sm'));\n const sort = useEventSort();\n const showBulkActions = isAuthorized(props.permissions, 'practices', 'bulkActions')\n\n return <List {...props}\n exporter={PracticesExporter}\n aside={!isSmall && <PracticeFilterList />}\n filters={isSmall && <PracticeFilters />}\n filterDefaultValues={{ seasonId }}\n bulkActionButtons={showBulkActions ? <PracticeBulkActions /> : false}\n sort={sort}\n resetFilters={isSmall}\n >\n <EventView rowClick=\"show\" disableCalendar />\n </List>\n}\n\nconst getTitle = (practice, translate) => {\n const type = translate('resources.practices.name', 1)\n if (!practice.name?.length) return type;\n return `${type}: ${practice.name}`\n}\n\nexport const PracticeShow = props => {\n const translate = useTranslate();\n return <Show {...props}\n title={<ResourceTitle title={record => getTitle(record, translate)} />}\n >\n <PracticeShowLayout />\n </Show>\n}\n\nexport const PracticeCreate = props => {\n const translate = useTranslate()\n return <Create\n title={<ResourceTitle title={() => translate('resources.practices.labels.add')} />}\n {...props}\n >\n <PracticeForm redirect=\"show\" />\n </Create>\n}\n\nexport const PracticeEdit = props => {\n const translate = useTranslate();\n return <Edit\n title={<ResourceTitle title={record => translate('resources.practices.labels.edit')} />}\n {...props}\n >\n <PracticeForm redirect=\"show\" />\n </Edit>\n}\n","import React from 'react';\nimport { useTranslate } from 'react-admin';\n\nimport { List, Show, Create, Edit } from '../../common/ra';\nimport ResourceTitle from '../../common/ResourceTitle';\n\nimport { PageGrid } from './PageGrid';\nimport { PageFilters } from './PageFilters';\nimport { PageShowLayout } from './PageShow';\nimport { PageForm } from './PageForm';\n\nexport const PageList = props =>\n <List {...props}\n filters={<PageFilters />}\n sort={{\n field: ['officeId', 'section.name', 'order', 'title'],\n order: ['ASC', 'ASC', 'ASC', 'ASC'],\n }}\n >\n <PageGrid rowClick=\"show\" />\n </List>\n\nexport const PageShow = props =>\n <Show {...props}\n title={<ResourceTitle title={record => record.title} />}\n >\n <PageShowLayout />\n </Show>\n\nexport const PageCreate = props => {\n const translate = useTranslate();\n return <Create\n title={<ResourceTitle title={record => translate('resources.pages.labels.add')} />}\n {...props}\n >\n <PageForm redirect=\"show\" />\n </Create>\n}\n\nexport const PageEdit = props => {\n const translate = useTranslate();\n return <Edit\n title={<ResourceTitle title={record => translate('ra.page.editing', { name: record.title })} />}\n {...props}\n >\n <PageForm redirect=\"show\" />\n </Edit>\n}\n","import React, { useMemo } from 'react'\nimport { useTranslate } from 'react-admin';\nimport { useLocation } from 'react-router-dom';\n\nimport { List, Show, Create, Edit } from '../../common/ra';\nimport ResourceTitle from '../../common/ResourceTitle';\nimport { useSeason } from '../../common/inputs/SeasonSelector';\n\nimport { OfficeActions } from '../offices/OfficeActions';\nimport { OfficeShowHeader } from '../offices';\n\nimport { LeagueFilters } from './LeagueFilters';\nimport { LeagueView } from './LeagueView';\nimport { LeagueShowLayout } from './LeagueShow';\nimport { LeagueForm } from './LeagueForm';\n\nexport const LeagueList = props => {\n const seasonId = useSeason();\n\n return <List {...props}\n resource=\"offices\"\n component=\"div\"\n filters={<LeagueFilters />}\n filter={{ type: 'League' }}\n filterDefaultValues={{ seasonId }}\n sort={{\n field: ['parent.name', 'name'],\n order: ['ASC', 'ASC'],\n }}\n >\n <LeagueView rowClick=\"show\" />\n </List>\n}\n\nexport const LeagueShow = props => {\n const location = useLocation();\n const officeTab = useMemo(() => {\n return location?.pathname?.substring(location.pathname.lastIndexOf('/') + 1)\n }, [ location.pathname ])\n\n return <Show {...props}\n title={<OfficeShowHeader />}\n className={officeTab === 'scheduler' ? 'scheduler-tab-show' : ''}\n actions={<OfficeActions />}\n >\n <LeagueShowLayout />\n </Show>\n}\n\nexport const LeagueCreate = props => {\n const translate = useTranslate();\n return <Create\n title={<ResourceTitle title={record => translate('resources.leagues.labels.add')} />}\n {...props}\n >\n <LeagueForm redirect=\"show\" initialValues={{ type: 'League' }} hideType />\n </Create>\n}\n\nexport const LeagueEdit = props => {\n const translate = useTranslate();\n return <Edit\n title={<ResourceTitle title={record => translate('resources.leagues.labels.editing', { name: record.name })} />}\n {...props}\n >\n <LeagueForm redirect=\"show\" />\n </Edit>\n}\n","import React, { useMemo } from 'react'\nimport { useTranslate } from 'react-admin';\nimport { useLocation } from 'react-router-dom';\n\nimport { List, Show, Create, Edit } from '../../common/ra';\nimport ResourceTitle from '../../common/ResourceTitle';\n\nimport { OfficeActions } from '../offices/OfficeActions';\nimport { OfficeShowHeader } from '../offices';\n\nimport { TournamentFilters } from './TournamentFilters';\nimport { TournamentView } from './TournamentView';\nimport { TournamentShowLayout } from './TournamentShow';\nimport { TournamentForm } from './TournamentForm';\n\nexport const TournamentList = props =>\n <List {...props}\n resource=\"offices\"\n component=\"div\"\n filters={<TournamentFilters />}\n filter={{ type: 'Tournament' }}\n sort={{\n field: ['parent.name', 'name'],\n order: ['ASC', 'ASC'],\n }}\n >\n <TournamentView rowClick=\"show\" />\n </List>\n\nexport const TournamentShow = props => {\n const location = useLocation();\n const officeTab = useMemo(() => {\n return location?.pathname?.substring(location.pathname.lastIndexOf('/') + 1)\n }, [ location.pathname ])\n\n return <Show {...props}\n title={<OfficeShowHeader />}\n className={officeTab === 'scheduler' ? 'scheduler-tab-show' : ''}\n actions={<OfficeActions />}\n >\n <TournamentShowLayout />\n </Show>\n}\n\nexport const TournamentCreate = props => {\n const translate = useTranslate();\n return <Create\n title={<ResourceTitle title={record => translate('resources.tournaments.labels.add')} />}\n {...props}\n >\n <TournamentForm redirect=\"show\" initialValues={{ type: 'Tournament' }} hideType />\n </Create>\n}\n\nexport const TournamentEdit = props => {\n const translate = useTranslate();\n return <Edit\n title={<ResourceTitle title={record => translate('resources.tournaments.labels.editing', { name: record.name })} />}\n {...props}\n >\n <TournamentForm redirect=\"show\" />\n </Edit>\n}\n","import React from 'react';\nimport { useTranslate } from 'react-admin';\n\nimport { List, Show, Create, Edit, Pagination } from '../../common/ra';\nimport ResourceTitle from '../../common/ResourceTitle';\n\nimport { AnnouncementGrid } from './AnnouncementGrid';\nimport { AnnouncementFilters } from './AnnouncementFilters';\nimport { AnnouncementShowLayout } from './AnnouncementShow';\nimport { AnnouncementForm } from './AnnouncementForm';\n\nexport const AnnouncementList = props =>\n <List {...props}\n filters={<AnnouncementFilters />}\n sort={{\n field: 'createdAt',\n order: 'DESC'\n }}\n perPage={10}\n pagination={<Pagination rowsPerPageOptions={[]} />}\n >\n <AnnouncementGrid rowClick=\"show\" />\n </List>\n\nexport const AnnouncementShow = props =>\n <Show {...props}\n title={<ResourceTitle title={record => record.title} />}\n >\n <AnnouncementShowLayout />\n </Show>\n\nexport const AnnouncementCreate = props => {\n const translate = useTranslate()\n return <Create\n title={<ResourceTitle title={record => translate('resources.announcements.labels.add')} />}\n {...props}\n >\n <AnnouncementForm redirect=\"show\" />\n </Create>\n}\n\nexport const AnnouncementEdit = props => {\n const translate = useTranslate()\n return <Edit\n title={<ResourceTitle title={record => translate('ra.page.editing', { name: record.title })} />}\n {...props}\n >\n <AnnouncementForm redirect=\"show\" />\n </Edit>\n}\n","import React from 'react';\nimport { useTranslate } from 'react-admin';\n\nimport { List, Show, Create, Edit } from '../../common/ra';\nimport ResourceTitle from '../../common/ResourceTitle';\n\nimport { ArticleView } from './ArticleView';\nimport { ArticleFilters } from './ArticleFilters';\nimport { ArticleShowLayout } from './ArticleShow';\nimport { ArticleForm } from './ArticleForm';\n\nexport const ArticleList = props =>\n <List {...props}\n component=\"div\"\n filters={<ArticleFilters />}\n sort={{\n field: ['category', 'title'],\n order: ['ASC', 'ASC'],\n }}\n perPage={999}\n pagination={null}\n >\n <ArticleView />\n </List>\n\nexport const ArticleShow = props =>\n <Show {...props}\n title={<ResourceTitle title={record => record.title} />}\n >\n <ArticleShowLayout />\n </Show>\n\nexport const ArticleCreate = props => {\n const translate = useTranslate()\n return <Create\n title={<ResourceTitle title={record => translate('resources.help.labels.add')} />}\n {...props}\n >\n <ArticleForm redirect=\"show\" />\n </Create>\n}\n\nexport const ArticleEdit = props => {\n const translate = useTranslate()\n return <Edit\n title={<ResourceTitle title={record => translate('ra.page.editing', { name: record.title })} />}\n {...props}\n >\n <ArticleForm redirect=\"show\" />\n </Edit>\n}\n\n","import React from 'react';\nimport { useTranslate } from 'react-admin';\n\nimport { Create, Edit } from '../../common/ra';\nimport ResourceTitle from '../../common/ResourceTitle';\n\nimport { RulebookForm } from './RulebookForm';\n\nexport const RulebookCreate = props => {\n const translate = useTranslate()\n return <Create\n title={<ResourceTitle title={record => translate('resources.rulebooks.labels.add')} />}\n {...props}\n >\n <RulebookForm redirect=\"show\" />\n </Create>\n}\n\nexport const RulebookEdit = props => {\n const translate = useTranslate()\n return <Edit\n title={<ResourceTitle title={record => translate('ra.page.editing', { name: record.name })} />}\n {...props}\n >\n <RulebookForm redirect=\"show\" />\n </Edit>\n}\n","import React, { useEffect, useState } from 'react';\nimport { Route, Redirect } from 'react-router-dom';\nimport { matchPath, generatePath } from 'react-router';\nimport { useNotify, useDataProvider } from 'react-admin';\nimport qs from 'qs';\n\nimport { LazyBoundary } from '../../common/LazyBoundary';\n\nconst Scheduler = React.lazy(() => import('./Scheduler'))\n\nconst NewDraft = props => {\n const { location, history } = props;\n\n const { type } = qs.parse(location.search.substring(1))\n const { scheduleId } = history.location.state || {};\n\n return <LazyBoundary>\n <Scheduler type={type} scheduleId={scheduleId} {...props} />\n </LazyBoundary>\n}\n\nconst Draft = props => {\n const { match, history } = props;\n const { id } = match.params;\n\n const [ loading, setLoading ] = useState(true);\n const [ draft, setDraft ] = useState(null)\n const dataProvider = useDataProvider();\n const notify = useNotify();\n\n useEffect(() => {\n if (!id) return;\n setLoading(true)\n dataProvider.getOne('drafts', { id })\n .then(res => res.data)\n .then(draft => setDraft(draft))\n .catch(() => {\n notify('resources.drafts.notifications.unable_to_load_draft');\n history.push('/profile');\n })\n .finally(() => setLoading(false))\n }, [ id ]) // eslint-disable-line react-hooks/exhaustive-deps\n\n if (loading || !draft) return null;\n\n const limitedView = draft?._scopes?.includes('scheduling:drafts')\n && !draft?._scopes?.includes('scheduling:manage')\n && !draft?._scopes?.includes('scheduling:games')\n\n if (limitedView) {\n const stepMatch = matchPath(history.location.pathname, { path: `${props.match.path}/:step` })\n if (stepMatch?.params?.step !== 'games') {\n const path = generatePath(\"/drafts/:id/:step\", { id: draft.id, step: 'games' })\n return <Redirect to={path} />\n }\n }\n\n const { type } = draft;\n return <LazyBoundary>\n <Scheduler type={type} draft={draft} limitedView={limitedView} {...props} />\n </LazyBoundary>\n}\n\nexport const DraftRoutes = [\n <Route\n path=\"/drafts/:id\"\n render={props => {\n const { id } = props.match.params;\n if (id === 'create') return <NewDraft {...props} />\n return <Draft {...props} />\n }}\n />\n]\n","import React, { Fragment, useState } from 'react';\nimport { SimpleForm, useNotify, useTranslate } from 'react-admin';\nimport { Dialog, DialogTitle, DialogContent, Button } from '@material-ui/core';\nimport { Lock } from '@material-ui/icons';\nimport { FORM_ERROR } from 'final-form'\n\nimport { DialogFormToolbar } from '../../../common/dialogs/DialogForm';\nimport PasswordInput from '../../../common/inputs/PasswordInput';\nimport { apiClient } from '../../../http';\n\nconst validate = (values, translate) => {\n const errors = {};\n\n if (!values.oldPassword) errors.oldPassword = 'ra.validation.required'\n if (!values.newPassword) {\n errors.newPassword = 'ra.validation.required'\n } else if (values.newPassword.length < 8) {\n errors.newPassword = translate('ra.validation.minLength', { min: 8 })\n } else if (values.oldPassword === values.newPassword) {\n errors.newPassword = 'ra.validation.different'\n } else if (!values.confirmPassword) {\n errors.confirmPassword = 'ra.validation.required'\n } else if (values.newPassword !== values.confirmPassword) {\n errors.confirmPassword = 'ra.validation.match'\n }\n\n return errors;\n}\n\nconst inputProps = {\n variant: 'outlined',\n margin: 'normal',\n fullWidth: true,\n}\n\nconst ChangePasswordForm = props => {\n const translate = useTranslate();\n\n return <SimpleForm component={Fragment} {...props} validate={(values) => validate(values, translate)}>\n <PasswordInput source=\"oldPassword\" label=\"ra.input.password.old\" autoComplete=\"current-password\" autoFocus {...inputProps} />\n <PasswordInput source=\"newPassword\" label=\"ra.input.password.new\" autoComplete=\"new-password\" {...inputProps} />\n <PasswordInput source=\"confirmPassword\" label=\"ra.input.password.confirm\" autoComplete=\"new-password\" {...inputProps} />\n </SimpleForm>\n}\n\nexport default props => {\n const [ isOpen, setOpen ] = useState(false);\n const notify = useNotify();\n const translate = useTranslate();\n\n const handleError = (field, message) => ({\n [field]: message,\n [FORM_ERROR]: message,\n })\n\n const onSubmit = (values) => {\n return apiClient(`/accounts/change-password`, { method: 'POST', data: values })\n .then(res => res.data)\n .then(() => {\n setOpen(false)\n notify('ra.input.password.change_success', 'info')\n })\n .catch(err => {\n const code = err?.response?.data?.error?.code;\n switch (code) {\n case 'INVALID_PASSWORD':\n return handleError('oldPassword', translate('ra.input.password.invalid'))\n\n case 'PASSWORD_TOO_LONG':\n return handleError('newPassword', translate('ra.input.password.too_long'))\n\n default: {\n return handleError('confirmPassword', translate('ra.page.error_try_again'))\n }\n }\n })\n }\n\n return <>\n <Button color=\"primary\" startIcon={<Lock />} onClick={() => setOpen(true)}>\n {translate('ra.input.password.change')}\n </Button>\n <Dialog open={isOpen} maxWidth=\"xs\" fullWidth onClose={() => setOpen(false)}>\n <DialogTitle>{translate('ra.input.password.change')}</DialogTitle>\n <DialogContent>\n <ChangePasswordForm save={onSubmit} toolbar={\n <DialogFormToolbar submitLabel=\"ra.action.change\" />\n } />\n </DialogContent>\n </Dialog>\n </>\n}\n","import React, { forwardRef } from 'react';\nimport { TextField, useLogout, useTranslate } from 'react-admin';\nimport { Button, Table, TableBody } from '@material-ui/core'\nimport { PowerSettingsNew } from '@material-ui/icons';\n\nimport InfoCard from \"../../../common/cards/InfoCard\"\nimport Row from '../../../common/cards/TableRow';\n\nimport ChangePasswordModal from '../dialogs/ChangePasswordModal';\nimport { useAccount } from '../../../http';\n\nexport const LogoutButton = forwardRef((props, ref) => {\n const translate = useTranslate();\n const logout = useLogout();\n\n return <Button color=\"primary\" startIcon={<PowerSettingsNew />} onClick={() => logout()} ref={ref}>\n {translate('ra.auth.logout')}\n </Button>\n});\n\nconst inputProps = {\n resource: 'accounts',\n basePath: '/accounts',\n variant: 'outlined',\n margin: 'none',\n fullWidth: true,\n}\n\n\nexport default () => {\n const account = useAccount();\n\n return <InfoCard title=\"resources.accounts.labels.my\" actions={account && !account.externalId && [\n <ChangePasswordModal />,\n ]}>\n <Table>\n <TableBody>\n <Row label=\"ra.auth.username\">\n <TextField source=\"username\" {...inputProps} />\n </Row>\n </TableBody>\n </Table>\n </InfoCard>\n};\n","import React, { useState } from 'react';\nimport { Route, Redirect, Link, useHistory } from 'react-router-dom';\nimport { Stepper, Step, StepLabel, StepContent, Button, FormHelperText, styled } from '@material-ui/core';\nimport { FormInput as RAFormInput, TextInput, useLogin, useNotify, useTranslate } from 'react-admin';\nimport { Form, useFormState } from 'react-final-form';\nimport { FORM_ERROR } from 'final-form';\nimport qs from 'qs';\nimport Helmet from 'react-helmet';\n\nimport { useAccount, apiClient, useLoggedIn, useVolunteer } from '../http';\nimport PasswordInput from '../common/inputs/PasswordInput';\nimport { useWizard, withWizard } from '../common/Wizard';\n\nimport { LogoutButton } from './MyProfile/cards/AccountCard';\nimport BaseLayout from './BaseLayout';\n\nconst STEP_VERIFY = 0;\nconst STEP_ACCOUNT = 1;\nconst STEP_REVIEW = 2;\n\nconst inputProps = {\n variant: 'outlined',\n margin: 'normal',\n fullWidth: true,\n}\n\nconst FormInput = ({ children, ...props }) =>\n <RAFormInput input={children} />\n\nconst Error = styled(FormHelperText)(({ theme }) => ({\n color: theme.palette.error.main,\n margin: theme.spacing(1, 2),\n}))\n\nconst Meta = ({ isLoggedIn }) => {\n const translate = useTranslate()\n if (isLoggedIn) return <LogoutButton />;\n return <Button type=\"link\" component={Link} to=\"/login\">{translate('ra.auth.login')}</Button>;\n}\n\nconst getInvitation = search => {\n const { invitation } = qs.parse(search.substring(1));\n return invitation;\n}\n\nconst VerifyStep = ({ setStep, handleError, goBack, ...props }) => {\n const translate = useTranslate()\n const [loading, setLoading] = useState(false);\n\n const validateIdentity = values => {\n const errors = {}\n\n if (!values.participantId) errors.participantId = translate('ra.validation.required');\n if (!values.firstName) errors.lastName = translate('ra.validation.required');\n if (!values.lastName) errors.firstName = translate('ra.validation.required');\n\n return errors;\n }\n\n const verifyIdentity = ({ participantId, firstName, lastName }) => {\n setLoading(true)\n return apiClient('/accounts/validateIdentity', {\n method: \"POST\",\n data: { participantId, firstName, lastName },\n skipAuth: true,\n })\n .then(() => setStep(STEP_ACCOUNT))\n .catch(handleError)\n .finally(() => setLoading(false))\n }\n\n useWizard(validateIdentity, verifyIdentity);\n\n return <>\n <FormInput>\n <TextInput\n source=\"participantId\"\n label=\"components.register.participant\"\n autoFocus\n options={{ InputProps: { placeholder: translate('ra.message.digits', { number: '6-14' }) } }}\n {...inputProps}\n />\n </FormInput>\n\n <FormInput>\n <TextInput\n source=\"firstName\"\n label=\"resources.participants.fields.firstName\"\n {...inputProps}\n />\n </FormInput>\n\n <FormInput>\n <TextInput\n source=\"lastName\"\n label=\"resources.participants.fields.lastName\"\n {...inputProps}\n />\n </FormInput>\n\n <Button type=\"submit\" variant=\"contained\" color=\"primary\" disabled={loading}>Verify</Button>\n </>\n}\n\nconst AccountStep = ({ setStep, handleError, goBack, invitation, ...props }) => {\n const translate = useTranslate()\n const validate = (values, translate) => {\n const errors = {}\n\n if (!values.email) errors.email = translate('ra.validation.required');\n if (!values.password) {\n errors.password = translate('ra.validation.required')\n } else if (values.password.length < 8) {\n errors.password = translate('ra.validation.minLength', { min: 8 })\n } else if (!values.confirmPassword) {\n errors.confirmPassword = translate('ra.validation.required')\n } else if (values.password !== values.confirmPassword) {\n errors.confirmPassword = translate('ra.validation.match')\n }\n\n return errors;\n }\n\n const onSubmit = () => {\n setStep(STEP_REVIEW)\n }\n\n useWizard((values) => validate(values, translate), onSubmit);\n\n return <>\n <FormInput>\n <TextInput\n source=\"email\"\n label=\"ra.input.field.email\"\n type=\"email\"\n options={{\n InputProps: {\n placeholder: translate('ra.auth.your_username'),\n autoComplete: \"email username\"\n }\n }}\n {...inputProps}\n />\n </FormInput>\n\n <FormInput>\n <PasswordInput source=\"password\" label=\"ra.auth.password\" autoComplete=\"new-password\" {...inputProps} />\n </FormInput>\n\n <FormInput>\n <PasswordInput source=\"confirmPassword\" label=\"ra.input.password.confirm\" autoComplete=\"new-password\" {...inputProps} />\n </FormInput>\n\n <Button type=\"submit\" variant=\"contained\" color=\"primary\">{translate('ra.action.continue')}</Button>\n {invitation == null && <Button onClick={goBack}>{translate('ra.action.back')}</Button>}\n </>\n}\n\nconst ReviewStep = ({ setStep, handleError, goBack, invitation, ...props }) => {\n const translate = useTranslate();\n const history = useHistory();\n const notify = useNotify();\n const account = useAccount();\n const { values: registration } = useFormState();\n const [loading, setLoading] = useState(false)\n const login = useLogin();\n\n const validate = () => ({})\n\n const register = ({ participantId, firstName, lastName, email, password }) => {\n setLoading(true)\n return apiClient('/accounts/register', {\n method: \"POST\",\n data: {\n participantId,\n firstName,\n lastName,\n email,\n password,\n invitation,\n },\n skipAuth: !account,\n }).then(() => {\n if (account) {\n notify('Profile successfully linked')\n history.push('/profile');\n return;\n }\n return login({ type: 'member', username: email, password })\n })\n .catch(handleError)\n .finally(() => setLoading(false))\n }\n\n useWizard(validate, register);\n\n if (account) {\n return <>\n <p>{translate('components.register.messages.link')}</p>\n <p style={{ fontWeight: 'bold', wordBreak: 'break-word' }}>{account.username}</p>\n\n <Button type=\"submit\" variant=\"contained\" color=\"primary\" disabled={loading}>{translate('ra.action.continue')}</Button>\n\n <p>{translate('components.register.messages.correct_account')}</p>\n </>\n }\n\n return <>\n <p style={{ fontWeight: 'bold', wordBreak: 'break-word' }}>{registration.email}</p>\n <p>{translate('components.register.messages.email_login')}</p>\n\n <Button type=\"submit\" variant=\"contained\" color=\"primary\" disabled={loading}>{translate('ra.action.register')}</Button>\n <Button onClick={goBack} disabled={loading}>{translate('ra.action.change')}</Button>\n </>\n}\n\nconst RegistrationForm = ({ isLoggedIn, invitation, ...props }) => {\n const translate = useTranslate();\n let initialState = STEP_VERIFY;\n if (invitation) {\n initialState = !isLoggedIn ? STEP_ACCOUNT : STEP_REVIEW;\n }\n const [activeStep, setStep] = useState(initialState);\n const { submitError } = useFormState();\n\n const goBack = () => {\n setStep(step => step - 1);\n }\n\n const handleError = error => {\n switch (error?.response?.data?.error?.name) {\n case 'account_exists': {\n const message = translate('components.register.validation.account_exists');\n if (invitation) return { [FORM_ERROR]: message }\n setStep(STEP_VERIFY);\n return { participantId: message };\n }\n\n case 'email_exists': {\n const message = translate('components.register.validation.account_exists'); ;\n if (invitation) return { [FORM_ERROR]: message }\n setStep(STEP_ACCOUNT);\n return { email: message };\n }\n\n case 'already_linked':\n return { [FORM_ERROR]: translate('components.register.validation.already_linked') };\n\n case 'participant_invalid':\n setStep(STEP_VERIFY);\n return { participantId: translate('components.register.validation.participant_invalid') };\n\n case 'participant_mismatch':\n setStep(STEP_VERIFY);\n return { participantId: translate('components.register.validation.participant_mismatch') };\n\n case 'ineligible':\n setStep(STEP_VERIFY);\n return { participantId: translate('components.register.validation.ineligible') };\n\n case 'ValidationError':\n if (Object.keys(error.details.messages).some(err => ['participantId', 'firstName', 'lastName'].includes(err))) {\n setStep(STEP_VERIFY)\n } else {\n setStep(STEP_ACCOUNT);\n }\n return error.details.messages;\n\n case 'token_invalid':\n return { [FORM_ERROR]: translate('components.register.validation.token_invalid') }\n\n default:\n return { [FORM_ERROR]: translate('ra.page.error_try_again_refresh') };\n }\n }\n\n return <>\n <Stepper activeStep={activeStep} orientation=\"vertical\" {...props}>\n <Step disabled={!!invitation}>\n <StepLabel>{translate('components.register.hockey_identity')}</StepLabel>\n <StepContent>\n <VerifyStep setStep={setStep} handleError={handleError} goBack={goBack} />\n </StepContent>\n </Step>\n <Step>\n <StepLabel>{translate('components.register.registration')}</StepLabel>\n <StepContent>\n <AccountStep setStep={setStep} handleError={handleError} goBack={goBack} invitation={invitation} />\n </StepContent>\n </Step>\n <Step>\n <StepLabel>{!isLoggedIn ? translate('components.register.review') : translate('components.register.link_invitation')}</StepLabel>\n <StepContent>\n <ReviewStep setStep={setStep} handleError={handleError} goBack={goBack} invitation={invitation} />\n </StepContent>\n </Step>\n </Stepper>\n <Error>{submitError}</Error>\n </>\n}\n\nconst BaseRegister = props => {\n const { validate, onSubmit } = useWizard();\n const invitation = getInvitation(props.location.search);\n\n const isLoggedIn = useLoggedIn();\n const isVolunteer = useVolunteer();\n if (isLoggedIn && (!invitation || isVolunteer)) return <Redirect to=\"/\" />\n\n return <BaseLayout meta={<Meta isLoggedIn={isLoggedIn} />}>\n <Helmet title=\"Register\" />\n <Form validate={validate} onSubmit={onSubmit} render={({ handleSubmit }) =>\n <form onSubmit={handleSubmit}>\n <RegistrationForm isLoggedIn={isLoggedIn} invitation={invitation} {...props} />\n </form>\n } />\n </BaseLayout>\n}\n\nconst Register = withWizard(BaseRegister);\n\nexport default [\n <Route path=\"/register\" exact component={Register} noLayout />\n]\n","import React from 'react';\nimport { useRecordContext } from 'react-admin';\n\nimport ListCard from '../../../common/cards/ListCard';\n\nimport { ContactGrid } from '../../../resources/contacts/ContactGrid';\nimport { AddContactButton } from '../../../resources/contacts/ContactModal';\n\nexport default props => {\n const account = useRecordContext();\n if (!account?.participantId) return null;\n\n return <ListCard\n title=\"resources.contacts.labels.card.title\"\n reference=\"contacts\"\n target=\"participants\"\n sort={{ field: 'isPrimary', order: 'DESC' }}\n rowsPerPageOptions={[]}\n addButton={<AddContactButton initialValues={{ participantId: account?.participantId }} />}\n >\n <ContactGrid />\n </ListCard>\n}\n","import React from 'react';\nimport { useRecordContext } from 'react-admin';\n\nimport ListCard from '../../../common/cards/ListCard';\n\nimport { AddressGrid } from '../../../resources/addresses/AddressGrid';\nimport { AddAddressButton } from '../../../resources/addresses/AddressModal';\n\nexport default props => {\n const account = useRecordContext();\n if (!account?.participantId) return null;\n\n return <ListCard\n title=\"resources.addresses.labels.card.title\"\n reference=\"addresses\"\n target=\"participants\"\n sort={{ field: 'isPrimary', order: 'DESC' }}\n rowsPerPageOptions={[]}\n addButton={<AddAddressButton initialValues={{ participantId: account?.participantId }} />}\n >\n <AddressGrid />\n </ListCard>\n}\n","import React from 'react';\nimport { RecordContextProvider } from 'react-admin';\n\nimport InfoCard from '../../../common/cards/InfoCard';\nimport { useParticipant } from '../../../http';\n\nimport { ProfileField } from '../../../resources/profiles/ProfileField';\nimport { EditProfileButton } from '../../../resources/profiles/ProfileModal';\n\nexport default props => {\n const participantId = useParticipant();\n const profile = { id: participantId, participantId }\n\n return <RecordContextProvider value={profile}>\n <InfoCard actions={\n <EditProfileButton source=\"participantId\" />\n }>\n <ProfileField source=\"participantId\" />\n </InfoCard>\n </RecordContextProvider>\n}\n","import React, { Fragment, useState } from 'react';\nimport { useTranslate } from 'react-admin';\nimport { Button, Tooltip } from '@material-ui/core';\nimport { EmailOutlined } from '@material-ui/icons';\n\nimport { DialogDatagrid } from '../../common/dialogs/DialogDatagrid';\nimport { CreateResourceDialog, EditResourceDialog } from '../../common/dialogs/ResourceDialog';\n\nimport { AnnouncementForm } from './AnnouncementForm';\n\nconst AddAnnouncementDialog = props =>\n <CreateResourceDialog maxWidth=\"md\" label=\"resources.announcements.labels.add\" resource=\"announcements\" basePath=\"/announcements\" {...props}>\n <AnnouncementForm />\n </CreateResourceDialog>\n\n\nconst EditAnnouncementDialog = props =>\n <EditResourceDialog label=\"resources.announcements.labels.edit\" resource=\"announcements\" basePath=\"/announcements\" {...props}>\n <AnnouncementForm />\n </EditResourceDialog>\n\nexport const AddAnnouncementButton = ({ size, variant, ...props }) => {\n const [ isOpen, setOpen ] = useState(false);\n const translate = useTranslate();\n return <>\n <Tooltip title={translate('resources.announcements.labels.add')}>\n <Button color=\"primary\" size={size} variant={variant} startIcon={<EmailOutlined />} onClick={() => setOpen(true)}>\n {translate('ra.action.new')}\n </Button>\n </Tooltip>\n <AddAnnouncementDialog isOpen={isOpen} handleClose={() => setOpen(false)} {...props} />\n </>\n}\n\nexport const AnnouncementDatagrid = props => <DialogDatagrid dialog={EditAnnouncementDialog} {...props} />\n","import React from 'react';\nimport { useTranslate } from 'react-admin';\n\nimport { useScopes } from '../../../http';\nimport { isAuthorized } from '../../../common/Authorize';\nimport { useSeason } from '../../../common/inputs/SeasonSelector';\nimport ListCard from '../../../common/cards/ListCard';\n\nimport { AnnouncementGrid } from '../../../resources/announcements/AnnouncementGrid';\nimport { AddAnnouncementButton } from '../../../resources/announcements/AnnouncementModal';\nimport { AnnouncementExpand } from '../../../resources/announcements/AnnouncementShow'\n\nexport default props => {\n const scopes = useScopes();\n const translate = useTranslate();\n const seasonId = useSeason();\n\n const canAddAnnouncement = isAuthorized(scopes, 'announcements', 'create');\n const canListOffices = isAuthorized(scopes, 'offices', 'list');\n\n const addButton = canAddAnnouncement && <AddAnnouncementButton key=\"add-announcement\" initialValues={{ type: 'Officiating' }} variant=\"outlined\" />\n\n return <ListCard\n title={translate('resources.announcements.labels.officiating')}\n subtitle={canAddAnnouncement && translate('resources.announcements.messages.send_email_officials')}\n resource=\"announcements\"\n basePath=\"/announcements\"\n filter={{ _scope: 'Parents', seasonId }}\n sort={{ field: 'updatedAt', order: 'DESC' }}\n addButton={addButton}\n perPage={5}\n rowsPerPageOptions={[]}\n >\n <AnnouncementGrid rowClick=\"expand\" expand={<AnnouncementExpand />} />\n </ListCard>\n}\n","import React, { useState, useEffect, useRef } from 'react';\nimport { useTranslate } from 'react-admin';\nimport { Button, Dialog, DialogActions, DialogContent, DialogContentText, DialogTitle, IconButton, InputAdornment, TextField, Tooltip } from '@material-ui/core'\nimport { FileCopyOutlined } from '@material-ui/icons';\n\nimport { apiClient } from '../../../http';\n\nconst getFeedUrl = participantId => {\n return apiClient(`/participants/${participantId}/calendarFeed`)\n .then(res => res.data)\n}\n\nconst generateFeedUrl = participantId => {\n return apiClient(`/participants/${participantId}/calendarFeed`, { method: 'POST' })\n .then(res => res.data)\n}\n\nexport default ({ participantId, isOpen = false, onClose }) => {\n const translate = useTranslate()\n const inputRef = useRef()\n const [ loading, setLoading ] = useState(true);\n const [ feedUrl, setFeedUrl ] = useState(null);\n\n const hasFeed = feedUrl != null;\n const canCopy = document.queryCommandSupported('copy');\n\n useEffect(() => {\n if (!isOpen || hasFeed) return;\n setLoading(true);\n getFeedUrl(participantId)\n .then(setFeedUrl)\n .finally(() => setLoading(false))\n }, [ isOpen, hasFeed, participantId ]);\n\n const onCreate = () => {\n setLoading(true)\n generateFeedUrl(participantId)\n .then(setFeedUrl)\n .finally(() => setLoading(false))\n }\n\n const onCopy = () => {\n inputRef.current.select();\n document.execCommand('copy')\n }\n\n return <Dialog\n open={isOpen}\n onClose={() => onClose()}\n aria-labelledby=\"alert-dialog-title\"\n aria-describedby=\"alert-dialog-description\"\n >\n <DialogTitle id=\"alert-dialog-title\">{translate('resources.games.messages.calendar.subscribe')}</DialogTitle>\n <DialogContent>\n <DialogContentText id=\"alert-dialog-description\">\n {translate('resources.games.messages.calendar.subscribe_description')}\n <p dangerouslySetInnerHTML={{ __html: translate('resources.games.messages.calendar.subscribe_description_extra') }}></p>\n </DialogContentText>\n {hasFeed && <TextField\n label={translate('resources.profiles.labels.personal_calendar_feed')}\n variant=\"outlined\"\n fullWidth\n readonly\n value={loading ? translate('ra.page.loading') : feedUrl}\n InputProps={{\n inputRef,\n endAdornment: canCopy && <InputAdornment position=\"end\">\n <Tooltip title={translate('ra.action.copy_to_clipboard')}>\n <IconButton edge=\"end\" onClick={onCopy}>\n <FileCopyOutlined />\n </IconButton>\n </Tooltip>\n </InputAdornment>\n }}\n />}\n </DialogContent>\n <DialogActions>\n <Button onClick={() => onClose(false)}>{translate('ra.action.close')}</Button>\n {!hasFeed && <Button color=\"primary\" disabled={loading} onClick={onCreate}>{translate('ra.action.subscribe')}</Button>}\n </DialogActions>\n </Dialog>\n}\n","import React, { useState } from 'react';\nimport { useRecordContext, useTranslate } from 'react-admin';\nimport { Button } from '@material-ui/core';\nimport { RssFeed } from '@material-ui/icons';\n\nimport { useParticipant, useFilteredScopes } from '../../../http';\nimport { isAuthorized } from '../../../common/Authorize';\nimport ListCard from '../../../common/cards/ListCard';\n\nimport { EventReferenceManyField } from '../../../resources/events/EventReferenceField';\nimport { EventView } from '../../../resources/events/EventView';\nimport { useEventSort } from '../../../resources/events/EventViewSettings';\n\nimport CalendarDialog from '../dialogs/CalendarDialog';\n\nconst FeedButton = ({ color, size, variant }) => {\n const scopes = useFilteredScopes(['Participant']);\n const translate = useTranslate()\n const participantId = useParticipant()\n const [ isOpen, setOpen ] = useState(false);\n\n if (!isAuthorized(scopes, 'profile', 'feed')) return null;\n return <>\n <Button color={color} size={size} variant={variant} startIcon={<RssFeed />} onClick={() => setOpen(true)}>\n {translate('resources.games.messages.calendar.subscribe')}\n </Button>\n <CalendarDialog participantId={participantId} isOpen={isOpen} onClose={() => setOpen(false)} />\n </>\n}\n\nexport default ({ title, ...props }) => {\n const account = useRecordContext(props);\n const scopes = useFilteredScopes(['Team', 'Participant']);\n const sort = useEventSort();\n\n if (!account?.id) return null;\n if (!isAuthorized(scopes, 'profile', 'games')) return null;\n\n const actions = [\n <FeedButton size=\"small\" />,\n ]\n\n return <ListCard\n title={title}\n resource=\"games\"\n target=\"participants\"\n sort={sort}\n base={EventReferenceManyField}\n baseProps={{\n includeGames: true,\n includeDraftGames: false,\n includePractices: true,\n includeActivities: true,\n includeSlots: false,\n includeAvailabilities: false,\n }}\n actions={actions}\n rowsPerPageOptions={[10, 25, 50, 100]}\n {...props}\n >\n <EventView disableCalendar />\n </ListCard>\n}\n","import React from 'react';\n\nimport { isPastSeason } from '@hisports/common/src/seasons';\n\nimport ListCard from '../../../common/cards/ListCard';\nimport { useSeason } from '../../../common/inputs/SeasonSelector';\nimport { useDefaultSeason } from '../../../http';\n\nimport { QualificationGrid } from '../../../resources/qualifications/QualificationGrid';\nimport { ParticipantIcon } from '../../../resources/icons';\n\nconst expiry = new Date().toISOString()\n\nexport default props => {\n const seasonId = useSeason();\n const defaultSeason = useDefaultSeason();\n\n const filter = isPastSeason(seasonId, defaultSeason)\n ? { seasonId }\n : {\n or: [\n { seasonId },\n { expiry: { gte: expiry } },\n { expiry: { eq: null } },\n ]\n }\n\n return <ListCard\n title=\"resources.qualifications.labels.card.title\"\n icon={<ParticipantIcon />}\n reference=\"qualifications\"\n target=\"participants\"\n filter={{ _scope: 'Tenant', ...filter }}\n >\n <QualificationGrid rowClick={false} />\n </ListCard>\n}\n","import React, { useEffect } from 'react';\nimport { Alert } from '@material-ui/lab';\nimport { SupervisorAccountOutlined } from '@material-ui/icons';\nimport { Button, makeStyles } from '@material-ui/core';\nimport { useNotify, useRedirect, useTranslate } from 'react-admin';\nimport qs from 'qs';\n\nimport { apiClient, authService, useAccount } from '../../../http';\n\nconst useStyles = makeStyles(theme => ({\n alert: {\n marginBottom: theme.spacing(0.5),\n color: theme.palette.lightBlue[500],\n backgroundColor: theme.palette.lightBlue[50]\n },\n ssoIcon: {\n color: theme.palette.lightBlue[500]\n }\n}))\n\nexport default ({ ...props }) => {\n const account = useAccount()\n const translate = useTranslate();\n const classes = useStyles();\n const redirect = useRedirect();\n const notify = useNotify();\n\n useEffect(() => {\n if (account?.externalId) return;\n const smaAccessToken = qs.parse(window?.location?.search, { ignoreQueryPrefix: true }).accessToken;\n if (!smaAccessToken) return;\n\n // strip any url params\n redirect('/profile')\n\n const ssoLink = async () => {\n return apiClient('/accounts/ssoLinkAccount', {\n method: 'POST',\n data: { smaAccessToken }\n })\n .then(({ data }) => {\n if (data?.externalId) {\n notify('components.login.messages.sso.link_success', 'success')\n authService.refreshAccount();\n }\n })\n .catch(e => notify('components.login.messages.sso.link_error', 'error'))\n };\n\n ssoLink();\n }, [notify, redirect, account?.externalId])\n\n const handleClick = async () => {\n return apiClient('/accounts/ssoLinkAccountRedirect', {\n method: 'GET',\n params: { username: account?.username },\n })\n .then(({ data: redirectUrl }) => {\n if (!redirectUrl) return;\n\n window.location.href = redirectUrl\n })\n .catch(e => notify('components.login.messages.sso.link_error', 'error'))\n }\n\n return <Alert\n className={classes.alert}\n severity=\"info\"\n icon={<SupervisorAccountOutlined className={classes.ssoIcon} />}\n action={\n <Button color=\"inherit\" size=\"small\" onClick={handleClick}>\n {translate('components.login.actions.link_account')}\n </Button>\n }\n >\n <span style={{ fontWeight: \"500\" }}>{translate('components.login.alerts.sso_link')}</span>\n </Alert>\n}\n","import React from 'react';\nimport { useSelector } from 'react-redux';\nimport { useTranslate } from 'react-admin';\nimport { Alert } from '@material-ui/lab';\nimport { DraftsOutlined } from '@material-ui/icons';\nimport { makeStyles } from '@material-ui/core';\n\nimport { useParticipant } from '../../../http';\n\nconst useStyles = makeStyles(theme => ({\n alert: {\n marginBottom: theme.spacing(0.5),\n }\n}))\n\nexport default () => {\n const translate = useTranslate();\n const participantId = useParticipant();\n const classes = useStyles()\n const isLoading = useSelector(store => store.admin.loading > 0)\n const allContacts = useSelector(store => store.admin.resources.contacts?.data)\n if (isLoading || !allContacts) return null;\n\n const contacts = Object.keys(allContacts)\n .map(id => allContacts[id])\n .filter(contact => contact.participantId === participantId)\n\n if (!contacts.length) return <Alert className={classes.alert} severity=\"warning\" icon={<DraftsOutlined />}>\n {translate('resources.contacts.alerts.add_contact_email')}\n </Alert>\n\n const hasVerifiedContacts = contacts.some(contact => contact.type === 'Email' && contact.isVerified)\n if (hasVerifiedContacts) return null;\n\n return <Alert className={classes.alert} severity=\"warning\" icon={<DraftsOutlined />}>\n {translate('resources.contacts.alerts.verify_contact_email')}\n </Alert>\n}\n","import React from 'react';\nimport { useRecordContext, useTranslate } from 'react-admin';\nimport { Gavel } from '@material-ui/icons';\n\nimport ListCard from '../../../common/cards/ListCard';\nimport { SuspensionStatusInput } from '../../../common/inputs/EnumInputs';\nimport { SuspensionGrid } from '../../../resources/scoresheet/suspension/SuspensionGrid';\nimport { TeamInput } from '../../../resources/teams/TeamInput';\nimport { CategoryInput } from '../../../resources/categories/CategoryInput';\n\nexport default props => {\n const translate = useTranslate();\n const profile = useRecordContext(props);\n const participantId = profile?.participantId\n\n const filters = [\n <TeamInput source=\"teamId\" variant=\"outlined\" />,\n <CategoryInput source=\"game.categoryId\" label=\"resources.games.fields.categoryId\" variant=\"outlined\" />,\n <SuspensionStatusInput source=\"status\" variant=\"outlined\" multiple />,\n ]\n\n return <ListCard\n title={translate(\"resources.suspensions.name\", 2)}\n icon={<Gavel />}\n basePath=\"/suspensions\"\n resource=\"suspensions\"\n filter={{ participantId }}\n sort={{ field: ['game.date', 'participant.lastName', 'participant.firstName'], order: ['DESC', 'ASC', 'ASC'] }}\n filters={filters}\n {...props}\n >\n <SuspensionGrid multipleGames hideParticipant rowOptions={{ isRowSelectable: () => false }} rowClick={false} hover={false} />\n </ListCard>\n}\n","import React from 'react';\nimport { useTranslate } from 'react-admin';\nimport { SportsOutlined } from '@material-ui/icons';\n\nimport { isLegacyRulebookSeason } from '@hisports/scoresheet/src/util';\n\nimport ListCard from '../../../common/cards/ListCard';\nimport { useSeason } from '../../../common/inputs/SeasonSelector';\n\nimport { GamePenaltyGrid } from '../../../resources/gamepenalties/GamePenaltyGrid';\nimport { TeamInput } from '../../../resources/teams/TeamInput';\nimport { CategoryInput } from '../../../resources/categories/CategoryInput';\n\nexport default props => {\n const translate = useTranslate()\n const seasonId = useSeason();\n\n const isLegacy = isLegacyRulebookSeason(seasonId);\n\n const filters = [\n <TeamInput source=\"teamId\" variant=\"outlined\" />,\n <CategoryInput source=\"game.categoryId\" label=\"resources.games.fields.categoryId\" variant=\"outlined\" />,\n ]\n\n return <ListCard\n title={translate('resources.gamepenalties.name', 2)}\n icon={<SportsOutlined />}\n basePath=\"/gamepenalties\"\n reference=\"gamepenalties\"\n target=\"participantId\"\n filter={{ 'game.seasonId': seasonId, _options: { includeMeta: isLegacy } }}\n sort={{ field: ['game.date', 'participant.lastName', 'participant.firstName'], order: ['DESC', 'ASC', 'ASC'] }}\n filters={filters}\n {...props}\n >\n <GamePenaltyGrid seasonId={seasonId} multipleGames hideParticipant rowOptions={{ isRowSelectable: () => false }} />\n </ListCard>\n}\n","import React from 'react';\nimport { LocalAtm } from '@material-ui/icons';\n\nimport ListCard from '../../../common/cards/ListCard';\nimport { useSeason } from '../../../common/inputs/SeasonSelector';\nimport { TransactionsGrid } from '../../../resources/officialTransactions/TransactionsGrid';\nimport TransactionsExporter from '../../../resources/officialTransactions/TransactionsExporter';\n\nexport default ({ ...props }) => {\n const seasonId = useSeason();\n\n const actions = [\n <TransactionsExporter target=\"participantId\" showSummary />\n ]\n\n return <ListCard\n title=\"resources.officialTransactions.name\"\n icon={<LocalAtm />}\n reference=\"officialTransactions\"\n target=\"participantId\"\n actions={actions}\n filter={{ 'game.seasonId': seasonId }}\n sort={{ field: ['game.date', 'game.number'], order: ['DESC', 'ASC'] }}\n collapsable\n {...props}\n >\n <TransactionsGrid hideParticipant />\n </ListCard>\n}\n","import React from 'react';\nimport { useRecordContext } from 'react-admin';\nimport { EmojiPeople } from '@material-ui/icons';\n\nimport ListCard from '../../../common/cards/ListCard';\nimport { isAuthorized } from '../../../common/Authorize';\nimport { ClaimStatusEnumInput } from '../../../common/inputs/EnumInputs';\nimport { useSeason } from '../../../common/inputs/SeasonSelector';\nimport { ClaimBulkAction } from '../../../resources/officialClaims/ClaimBulkActions';\nimport { AddClaimButton } from '../../../resources/officialClaims/ClaimModal';\nimport { ClaimsGrid } from '../../../resources/officialClaims/ClaimsGrid';\n\nexport default ({ ...props }) => {\n const participant = useRecordContext(props);\n const seasonId = useSeason();\n\n const filters = [\n <ClaimStatusEnumInput source=\"status\" variant=\"outlined\" multiple alwaysOn />,\n ]\n\n const canAddClaims = isAuthorized(participant, 'officialClaims', 'create');\n const canBulkAction = isAuthorized(participant, 'officialClaims', 'changeStatus');\n\n return <ListCard\n title=\"resources.officialClaims.labels.card.title\"\n icon={<EmojiPeople />}\n reference=\"officialClaims\"\n target=\"participantId\"\n filters={filters}\n filter={{ 'game.seasonId': seasonId }}\n sort={{ field: ['status', 'participant.lastName', 'participant.firstName', 'game.startTime'], order: ['ASC', 'ASC', 'ASC', 'ASC'] }}\n bulkActionButtons={canBulkAction && <ClaimBulkAction />}\n addButton={canAddClaims && <AddClaimButton\n target=\"participantId\"\n initialValues={{\n participantId: participant?.id,\n }}\n />}\n collapsable\n >\n <ClaimsGrid />\n </ListCard>\n}\n","import React, { useMemo } from 'react';\nimport { useTranslate, useRecordContext, RecordContextProvider, ResourceContextProvider } from 'react-admin';\nimport { Accordion, AccordionDetails, AccordionSummary, Card, CardActions, Box, Grid, Typography, makeStyles, styled } from '@material-ui/core';\nimport { ExpandMore as ExpandMoreIcon } from '@material-ui/icons'\nimport moment from 'moment-timezone';\nimport Helmet from 'react-helmet';\n\nimport { FF_SSO } from '@hisports/common/featureFlags';\n\nimport { useAccount, useParticipant, useFilteredScopes, useFlag } from '../../http';\nimport { isAuthorized } from '../../common/Authorize';\nimport { useSeason } from '../../common/inputs/SeasonSelector';\nimport { TabbedShowLayout, Tab } from '../../common/ra/TabbedShowLayout';\nimport AvailabilityCard from '../../resources/availabilities/AvailabilityCard';\n\nimport AccountCard from './cards/AccountCard';\nimport ContactsCard from './cards/ContactsCard';\nimport AddressesCard from './cards/AddressesCard';\nimport ProfileCard from './cards/ProfileCard';\nimport AnnouncementsCard from './cards/AnnouncementsCard';\nimport EventsCard from './cards/EventsCard';\nimport QualificationsCard from './cards/QualificationsCard';\nimport SsoLinkAccount from './reminders/SsoLinkAccount';\nimport ChangePasswordModal from './dialogs/ChangePasswordModal';\nimport ContactsReminder from './reminders/ContactsReminder';\nimport SuspensionsCard from './cards/SuspensionsCard';\nimport GamePenaltiesCard from './cards/GamePenaltiesCard';\nimport TransactionsCard from './cards/TransactionsCard';\nimport ClaimsCard from './cards/ClaimsCard';\nimport { SMAChip } from '../../common/chips/SMAChip';\nimport OfficiatingActionsCard from '../../resources/officials/cards/OfficiatingActionsCard';\n\nconst Page = styled('div')(({ theme }) => ({\n width: '100%',\n maxWidth: theme.spacing(150),\n marginLeft: 'auto',\n marginRight: 'auto',\n}))\n\nconst useStyles = makeStyles(theme => ({\n title: {\n fontWeight: 500,\n fontSize: theme.typography.pxToRem(15),\n flexBasis: '25%',\n flexShrink: 0,\n },\n description: {\n fontSize: theme.typography.pxToRem(15),\n color: theme.palette.text.secondary,\n },\n ssoChip: {\n color: theme.palette.lightBlue[500],\n borderColor: theme.palette.lightBlue[500],\n backgroundColor: theme.palette.lightBlue[50],\n marginLeft: theme.spacing(1)\n },\n ssoIcon: {\n color: theme.palette.lightBlue[500]\n }\n}))\n\nconst Section = ({ title, description, defaultExpanded, children, actions }) => {\n const classes = useStyles();\n return <Accordion square defaultExpanded={defaultExpanded}>\n <AccordionSummary expandIcon={<ExpandMoreIcon />}>\n <Typography className={classes.title}>{title}</Typography>\n {description && <Typography className={classes.description}>{description}</Typography>}\n </AccordionSummary>\n {children && <AccordionDetails>\n {children}\n </AccordionDetails>}\n {actions}\n </Accordion>\n}\n\nconst SummaryTab = props => {\n const account = useRecordContext(props);\n const translate = useTranslate();\n const isEnabled = useFlag();\n const scopes = useFilteredScopes(['System', 'Tenant', 'Office', 'Schedule', 'Participant']);\n const classes = useStyles()\n\n const today = moment().startOf('day').toISOString()\n const future = moment().startOf('day').add(1, 'year').toISOString()\n const showAnnouncements = isAuthorized(scopes, 'announcements', 'list');\n\n if (!account?.participantId) return null;\n\n return <Tab {...props}>\n <Helmet title=\"Profile\" />\n\n <ContactsReminder />\n {isEnabled(FF_SSO) && !account?.externalId && <SsoLinkAccount />}\n <Card>\n <Section\n title={translate('resources.contacts.name', 1)}\n description={translate('resources.contacts.messages.description')}>\n <Grid container spacing={2}>\n <Grid item xs={12} sm={6}>\n <ContactsCard />\n </Grid>\n <Grid item xs={12} sm={6}>\n <AddressesCard />\n </Grid>\n </Grid>\n </Section>\n\n <Section\n title={translate('resources.profiles.name', 1)}\n description={translate('resources.profiles.messages.description')}>\n <Grid container spacing={2}>\n <Grid item xs={12}>\n <ProfileCard />\n </Grid>\n </Grid>\n </Section>\n\n <Section\n title={translate('resources.accounts.name', 1)}\n description={<>\n {translate('ra.auth.youre_logged_in_as', { user: account?.username })}\n {account?.externalId && <SMAChip />}\n </>}\n actions={account && !account.externalId &&\n <CardActions>\n <ChangePasswordModal />\n </CardActions>\n } />\n </Card>\n\n <br />\n <Grid container spacing={2}>\n {showAnnouncements && <Grid item xs={12}>\n <AnnouncementsCard />\n </Grid>}\n <Grid item xs={12}>\n <EventsCard\n title={translate('resources.events.labels.upcoming_schedule')}\n filter={{ startTime: today, endTime: future }}\n perPage={10}\n />\n </Grid>\n </Grid>\n </Tab>\n}\n\nconst OfficiatingTab = props => {\n const account = useRecordContext(props);\n const scopes = useFilteredScopes(['Participant']);\n\n if (!account?.participantId) return null;\n if (!isAuthorized(scopes, 'profile', 'official')) return null;\n\n const canViewTransactions = isAuthorized(account, 'officialTransactions', 'list');\n const canViewClaims = isAuthorized(scopes, 'officialClaims', 'show')\n\n return <Tab {...props}>\n <Grid container spacing={3}>\n <Grid item xs={12} md={8}>\n <QualificationsCard />\n </Grid>\n <Grid item xs={12} md={4}>\n <OfficiatingActionsCard />\n </Grid>\n <Grid item xs={12}>\n <Helmet title=\"Availability\" />\n <ResourceContextProvider value=\"participants\">\n <AvailabilityCard editable />\n </ResourceContextProvider>\n </Grid>\n {canViewTransactions && <Grid item xs={12}>\n <TransactionsCard collapsable />\n </Grid>}\n {canViewClaims && <Grid item xs={12}>\n <ClaimsCard collapsable />\n </Grid>}\n </Grid>\n </Tab>\n}\n\nconst LeagueTab = props => {\n const account = useRecordContext(props);\n const scopes = useFilteredScopes(['Team', 'Participant']);\n\n if (!account?.participantId) return null;\n if (!isAuthorized(scopes, 'profile', 'league')) return null;\n\n const showSuspensions = isAuthorized(scopes, 'suspensions', 'show')\n const showGamePenalties = isAuthorized(scopes, 'gamepenalties', 'show')\n\n return <Tab {...props}>\n <Grid container spacing={2}>\n {showGamePenalties && <Grid item xs={12}>\n <GamePenaltiesCard />\n </Grid>}\n {showSuspensions && <Grid item xs={12}>\n <SuspensionsCard />\n </Grid>}\n </Grid>\n </Tab>\n}\n\nconst GamesTab = props => {\n const account = useRecordContext(props);\n const scopes = useFilteredScopes(['Team', 'Participant']);\n const seasonId = useSeason();\n\n if (!account?.participantId) return null;\n if (!isAuthorized(scopes, 'profile', 'games')) return null;\n\n return <Tab {...props}>\n <Grid container spacing={2}>\n <Grid item xs={12}>\n <EventsCard\n title=\"resources.events.labels.card.title\"\n filter={{ seasonId, pastEvents: true }}\n />\n </Grid>\n </Grid>\n </Tab>\n}\n\nexport default props => {\n const participantId = useParticipant();\n const account = useAccount();\n const record = useMemo(() => ({\n ...account,\n participantId,\n id: participantId,\n }), [ account, participantId ])\n\n if (!account) return null;\n if (!participantId) return <Page>\n <Box mt={2}>\n <RecordContextProvider value={record}>\n <ResourceContextProvider value=\"accounts\">\n <AccountCard />\n </ResourceContextProvider>\n </RecordContextProvider>\n </Box>\n </Page>\n\n return <Page>\n <RecordContextProvider value={record}>\n <ResourceContextProvider value=\"accounts\">\n <TabbedShowLayout>\n <SummaryTab label=\"resources.profiles.labels.tabs.summary\" />\n <OfficiatingTab label=\"resources.profiles.labels.tabs.officiating\" path=\"officiating\" />\n <LeagueTab label=\"resources.profiles.labels.tabs.league\" path=\"league\" />\n <GamesTab label=\"resources.profiles.labels.tabs.schedule\" path=\"games\" />\n </TabbedShowLayout>\n </ResourceContextProvider>\n </RecordContextProvider>\n </Page>\n}\n","import React from 'react';\nimport { Route, Redirect } from 'react-router-dom';\n\nimport MyProfile from './MyProfile';\nimport Verify from './Verify';\n\nexport default [\n <Route path=\"/profile/verify\" exact component={Verify} noLayout />,\n <Route path=\"/profile\" component={MyProfile} />,\n <Redirect from=\"/accounts/my/verify\" exact to=\"/profile/verify\" />,\n <Redirect from=\"/accounts/my\" exact to=\"/profile\" />,\n]\n","import React, { useEffect } from 'react';\nimport { useNotify, useRefresh } from 'react-admin';\nimport { Redirect } from 'react-router-dom';\nimport qs from 'qs';\n\nimport { apiFetchPublic } from '../../http';\n\nexport default ({ location }) => {\n const { contact, token } = qs.parse(location.search.substring(1));\n const notify = useNotify();\n const refresh = useRefresh();\n useEffect(() => {\n apiFetchPublic(`/contacts/${contact}/verify`, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify({ verification: token })\n }).then((res) => {\n if (res.ok) {\n notify('ra.message.verified_email');\n refresh();\n } else {\n notify('resources.contacts.messages.error_verify', 'error');\n }\n }).catch(() => {\n notify('resources.contacts.messages.error_verify', 'error')\n })\n }, [contact, token, notify, refresh]);\n\n return <Redirect to=\"/profile\" />;\n}\n","import React, { Fragment, useState } from 'react';\nimport { Button, styled } from '@material-ui/core';\nimport { FormInput as RAFormInput, TextInput, useLocale, useNotify, useTranslate } from 'react-admin';\nimport { Route, Redirect, Link } from 'react-router-dom';\nimport { Form, useFormState } from 'react-final-form'\nimport { FORM_ERROR } from 'final-form';\nimport Helmet from 'react-helmet';\nimport qs from 'qs';\n\nimport { apiClient, useLoggedIn } from '../http';\nimport PasswordInput from '../common/inputs/PasswordInput';\n\nimport Layout from './BaseLayout';\n\nconst inputProps = {\n variant: 'outlined',\n margin: 'normal',\n fullWidth: true,\n}\n\nconst Meta = () => {\n const translate = useTranslate()\n\n return <>\n <Button type=\"link\" component={Link} to=\"/login\">{translate('ra.auth.login')}</Button>\n <Button type=\"link\" component={Link} to=\"/register\">{translate('ra.action.register')}</Button>\n </>\n}\n\nconst FormInput = ({ children, ...props }) =>\n <RAFormInput input={children} />\n\nconst Error = styled('p')(({ theme }) => ({\n color: theme.palette.error.main,\n margin: theme.spacing(2, 1),\n fontSize: '0.9rem',\n fontWeight: 400,\n}))\n\nconst FormError = () => {\n const { submitError } = useFormState();\n return <Error>{submitError}</Error>\n}\n\nconst getToken = search => {\n const { token } = qs.parse(search.substring(1));\n return token;\n}\n\nconst validate = (values, translate) => {\n const errors = {};\n\n if (!values.token) {\n if (!values.username) errors.username = 'ra.validation.required';\n } else if (!values.newPassword) {\n errors.newPassword = 'ra.validation.required'\n } else if (values.newPassword.length < 8) {\n errors.newPassword = translate('ra.validation.minLength', { min: 8 })\n } else if (!values.confirmPassword) {\n errors.confirmPassword = 'ra.validation.required'\n } else if (values.newPassword !== values.confirmPassword) {\n errors.confirmPassword = 'ra.validation.match'\n }\n\n return errors;\n}\n\nconst requestReset = ({ username }, locale) =>\n apiClient('/accounts/request-reset', {\n method: \"POST\",\n data: {\n username,\n language: locale\n },\n skipAuth: true,\n }).then(res => res.data)\n\nconst resetPassword = (token, { newPassword }, locale) =>\n apiClient('/accounts/reset-password', {\n method: \"POST\",\n headers: {\n 'Authorization': `Bearer ${token}`\n },\n data: {\n newPassword,\n language: locale\n },\n skipAuth: true,\n }).then(res => res.data)\n\nconst ResetPassword = ({ location }) => {\n const locale = useLocale();\n const translate = useTranslate();\n const notify = useNotify();\n const [ loading, setLoading ] = useState(false)\n\n const token = getToken(location.search)\n const [ complete, setComplete ] = useState(false);\n\n const isLoggedIn = useLoggedIn();\n if (isLoggedIn) return <Redirect to=\"/\" />\n\n const handleError = err => {\n const error = err?.response?.data?.error\n const status = err?.response?.status;\n if (error === 'invalid_grant' || status === 401 || status === 403) {\n return { [FORM_ERROR]: translate('components.reset_password.messages.invalid_reset_link') };\n }\n\n return { [FORM_ERROR]: translate('ra.page.error_try_again_refresh') }\n }\n\n const onSubmit = values => {\n setLoading(true);\n const request = token ? resetPassword(token, values, locale) : requestReset(values, locale);\n return request\n .then(() => {\n if (token) notify('ra.input.password.change_success', 'info')\n setComplete(true)\n })\n .catch(handleError)\n .finally(() => setLoading(false))\n }\n\n if (complete) {\n if (token) return <Redirect to=\"/login\" />\n return <Layout>\n <h3>{translate('components.reset_password.messages.check_email')}</h3>\n <p>{translate('components.reset_password.messages.check_email_error')}</p>\n </Layout>\n }\n\n return <Layout meta={<Meta />}>\n <Helmet title=\"Reset Password\" />\n <Form onSubmit={onSubmit} validate={(values) => validate(values, translate)} initialValues={{ token }} render={({ handleSubmit }) =>\n <form onSubmit={handleSubmit}>\n {!token && <FormInput>\n <TextInput\n source=\"username\"\n label=\"ra.input.field.email\"\n type=\"email\"\n autoFocus\n options={{ InputProps: { autoComplete: \"email username\" } }}\n {...inputProps}\n />\n </FormInput>}\n\n {token && <FormInput>\n <PasswordInput source=\"newPassword\" label=\"ra.input.password.new\" autoComplete=\"new-password\" {...inputProps} />\n </FormInput>}\n\n {token && <FormInput>\n <PasswordInput source=\"confirmPassword\" label=\"ra.input.password.confirm\" autoComplete=\"new-password\" {...inputProps} />\n </FormInput>}\n\n <FormError />\n <Button type=\"submit\" variant=\"contained\" color=\"primary\" fullWidth disabled={loading}>{!token ? translate('ra.auth.recovery_email') : translate('ra.input.password.change') }</Button>\n </form>\n } />\n </Layout>\n}\n\nexport default [\n <Route path=\"/reset\" exact component={ResetPassword} noLayout />\n]\n","import React, { Fragment, useState, useEffect } from 'react';\nimport { Form } from 'react-final-form';\nimport { Route } from 'react-router-dom';\nimport { ResourceContextProvider, useTranslate } from 'react-admin';\nimport { Card, CardContent, CardActions, Typography, styled } from '@material-ui/core'\nimport { TrendingUp } from '@material-ui/icons'\n\nimport { apiClient } from '../../http';\nimport { useSeason } from '../../common/inputs/SeasonSelector';\n\nimport ReportFilters from './ReportFilters';\nimport ReportFrame from './ReportFrame';\n\n\nconst ReportsIcon = styled(TrendingUp)({\n marginTop: -3,\n marginRight: 8,\n verticalAlign: 'middle',\n})\n\nconst validate = reports => values => {\n const errors = {};\n\n if (!values.reportId) errors.reportId = 'ra.validation.required'\n\n const report = reports.find(report => report.id === values.reportId)\n if (report && report.targetType === 'Office' && !values.officeId) errors.officeId = 'ra.validation.required'\n if (report && report.targetType === 'Participant' && !values.participantId) errors.participantId = 'ra.validation.required';\n if (report && report.targetType === 'Team' && !values.teamId) errors.teamId = 'ra.validation.required'\n\n return errors;\n}\n\nconst Report = () => {\n const seasonId = useSeason();\n const [ loading, setLoading ] = useState(true);\n const [ error, setError ] = useState(null);\n const [ reports, setReports ] = useState([]);\n const translate = useTranslate();\n\n useEffect(() => {\n setLoading(true);\n apiClient(`/reports`)\n .then(res => {\n if (!res || !res.data) return [];\n const reports = res.data;\n return reports.sort((a, b) => {\n const type = a.type.localeCompare(b.type);\n if (type !== 0) return type;\n\n const targetType = a.targetType.localeCompare(b.targetType);\n if (targetType !== 0) return targetType;\n\n return a.name.localeCompare(b.name);\n })\n })\n .catch(err => {\n setError(err?.response?.status || -1)\n return []\n })\n .then(setReports)\n .finally(() => {\n setLoading(false);\n })\n }, [])\n\n const header = <CardActions>\n <Typography variant=\"h6\" color=\"inherit\"><ReportsIcon />{translate('resources.reports.name', 2)}</Typography>\n </CardActions>\n\n let message;\n if (loading) {\n message = translate('ra.page.loading')\n } else if (error && error !== 403) {\n message = translate('resources.reports.messages.error', { error })\n } else if (!reports.length) {\n message = translate('resources.reports.messages.empty')\n }\n\n if (message) return <>\n {header}\n <Card>\n <CardContent>{message}</CardContent>\n </Card>\n </>\n\n return <ResourceContextProvider value=\"reports\" >\n <Form\n initialValues={{ seasonId }}\n onSubmit={() => ({})}\n validate={validate(reports)}\n render={({ handleSubmit }) =>\n <form onSubmit={handleSubmit}>\n {header}\n <ReportFilters reports={reports} />\n <ReportFrame reports={reports} />\n </form>\n } />\n </ResourceContextProvider>\n}\n\nexport default [\n <Route path=\"/reports\" exact component={Report} />\n]\n","import React from 'react';\nimport { Redirect } from 'react-router';\n\nimport { DraftRoutes } from '../resources/drafts';\n\nimport RegisterRoutes from './Register'\nimport MyProfileRoutes from './MyProfile';\nimport ResetPasswordRoutes from './ResetPassword';\nimport ReportRoutes from './Reports';\n\nconst ArenaRoutes = [\n <Redirect from=\"/arenas/:id/edit\" to=\"/surfaces/:id/edit\" />,\n <Redirect from=\"/arenas/:id/show\" to=\"/surfaces/:id/show\" />,\n <Redirect from=\"/arenas/:id\" to=\"/surfaces/:id\" />,\n <Redirect from=\"/arenas\" to=\"/surfaces\" />,\n]\n\nexport const customRoutes = [\n ...RegisterRoutes,\n ...ResetPasswordRoutes,\n ...MyProfileRoutes,\n ...DraftRoutes,\n ...ReportRoutes,\n ...ArenaRoutes,\n]\n","import React, { useEffect, Fragment, useState } from 'react';\nimport { Button } from '@material-ui/core';\nimport { SimpleForm, TextInput, RadioButtonGroupInput, useLogin, useNotify, useTranslate } from 'react-admin';\nimport { Redirect, Link } from 'react-router-dom';\nimport { useFormState } from 'react-final-form';\nimport { useDispatch } from 'react-redux';\nimport qs from 'qs';\n\nimport { authService, useLoggedIn, useVolunteer } from '../http';\nimport PasswordInput from '../common/inputs/PasswordInput';\nimport { registerResources } from '../resources';\nimport { hasBypassLogin } from '../common/has-bypass-login.constant.jsx';\nimport Layout from './BaseLayout';\n\nconst Meta = ({ showPasswordInput }) => {\n const translate = useTranslate()\n\n return <>\n {showPasswordInput && <Button type=\"link\" component={Link} to=\"/reset\">{translate('ra.input.password.forgot')}</Button>}\n <Button type=\"link\" component={Link} to=\"/register\">{translate('ra.action.register')}</Button>\n </>\n}\n\nconst validate = values => {\n const errors = {};\n\n if (values.type === 'member') {\n if (!values.username) errors.username = 'ra.validation.required';\n if (!values.password) errors.password = 'ra.validation.required';\n } else if (values.type === 'scorekeeper') {\n if (!values.game) errors.game = 'ra.validation.required';\n if (!values.team) errors.team = 'ra.validation.required';\n } else {\n errors.type = 'ra.validation.invalid';\n }\n\n return errors;\n}\n\nconst inputProps = {\n variant: 'outlined',\n margin: 'normal',\n fullWidth: true,\n}\n\nconst UserLoginForm = ({ showPasswordInput, handleEdit, onKeyDown, disabled }) => {\n const translate = useTranslate()\n\n return <>\n <TextInput\n source=\"username\"\n label=\"ra.input.field.email\"\n type=\"email\"\n autoFocus\n helperText={hasBypassLogin && '(Bypass enabled)'}\n options={{ InputProps: { autoComplete: \"email username\" } }}\n disabled={!!showPasswordInput || disabled}\n onKeyDown={onKeyDown}\n InputProps={{ endAdornment: showPasswordInput && <Button\n type=\"button\"\n style={{ backgroundColor: 'transparent' }}\n onClick={handleEdit}\n >\n {translate('components.login.edit')}\n </Button>\n }}\n {...inputProps}\n />\n {showPasswordInput &&\n <PasswordInput\n source=\"password\"\n label=\"ra.input.field.password\"\n autoComplete=\"curent-password\"\n helperText=\"\"\n onKeyDown={onKeyDown}\n {...inputProps}\n />}\n </>\n}\n\nconst ScorekeeperLoginForm = ({ onKeyDown }) => {\n const translate = useTranslate()\n\n return <>\n <TextInput\n source=\"game\"\n label=\"resources.games.fields.number\"\n helperText=\"\"\n autoFocus\n onKeyDown={onKeyDown}\n {...inputProps}\n />\n <TextInput\n source=\"team\"\n label=\"resources.teams.messages.home_team_hcr_id\"\n helperText=\"\"\n options={{ InputProps: { placeholder: translate('ra.message.digits', { number: 15 }) } }}\n onKeyDown={onKeyDown}\n {...inputProps}\n />\n </>\n}\n\nconst LoginForm = ({ showPasswordInput, handleEdit, disabled }) => {\n const translate = useTranslate()\n const { values } = useFormState();\n const isScorekeeper = values.type === 'scorekeeper';\n\n const helperText = !isScorekeeper\n ? translate('components.login.messages.helper.member')\n : translate('components.login.messages.helper.scorekeeper')\n\n const onKeyDown = (e) => {\n if (e.keyCode == '13') { // Enter\n const element = document.querySelector('button[name=\"loginNextButton\"]');\n const mouseClickEvents = ['mousedown', 'click', 'mouseup'];\n\n mouseClickEvents.forEach(mouseEventType =>\n element.dispatchEvent(\n new MouseEvent(mouseEventType, {\n view: window,\n bubbles: true,\n cancelable: true,\n buttons: 1\n })\n )\n );\n }\n }\n\n return <>\n <RadioButtonGroupInput source=\"type\" label=\"components.login.messages.im_a\" choices={[\n {\n id: 'member',\n name: `${translate('components.login.member')} / ${translate('components.login.admin')}`\n },\n { id: 'scorekeeper', name: translate('components.login.scorekeeper') },\n ]} helperText={helperText} disabled={disabled} />\n {!isScorekeeper ? <UserLoginForm showPasswordInput={showPasswordInput} handleEdit={handleEdit} disabled={disabled} onKeyDown={onKeyDown} /> : <ScorekeeperLoginForm onKeyDown={onKeyDown} />}\n </>\n}\n\nexport default (props) => {\n const translate = useTranslate();\n const login = useLogin();\n const notify = useNotify();\n const dispatch = useDispatch()\n const isLoggedIn = useLoggedIn();\n const isVolunteer = useVolunteer();\n const [showPasswordInput, setShowPasswordInput] = useState(false);\n const [loadingThirdParty, setLoadingThirdParty] = useState(false);\n\n useEffect(() => {\n const smaAccessToken = qs.parse(props.location.search, { ignoreQueryPrefix: true }).accessToken;\n let username = qs.parse(props.location.search, { ignoreQueryPrefix: true }).u;\n if (!smaAccessToken || !username) return;\n\n setLoadingThirdParty(true);\n\n // When the username is passed as a query parameter, the plus sign is converted to a space character. So we need to convert it back to a plus sign.\n username = username?.replace(/ +/g, '+');\n\n authService.loginWithSma(smaAccessToken, username)\n .catch((e) => notify('ra.auth.login_error', 'error'))\n .finally(() => setLoadingThirdParty(false));\n }, [notify, props.location.search])\n\n useEffect(() => {\n registerResources(dispatch)\n }, [ dispatch ])\n\n if (isLoggedIn) return <Redirect to=\"/\" />\n\n const handleNext = async (username) => {\n if (!username) {\n return { 'username': 'ra.validation.required' }\n }\n\n if (hasBypassLogin) {\n submit({ type: `member`, username, password: `${Date.now()}` });\n } else {\n authService.lookupSma(username)\n .then(({ data: redirectUrl }) => {\n if (redirectUrl) {\n window.location.href = redirectUrl\n } else {\n setShowPasswordInput(true)\n }\n })\n .catch(e => {\n // silently ignore\n setShowPasswordInput(true);\n })\n }\n }\n\n const handleEdit = () => {\n setShowPasswordInput(false)\n }\n\n const onEnterSubmit = (e) => {\n e.preventDefault();\n };\n\n const submit = ({ type, username, password, game, team }) => {\n return login({ type, username, password, game, team })\n .catch(res => {\n const { data, status } = res;\n const message = data?.error_description || data?.error\n\n switch (message) {\n case 'Invalid resource owner credentials':\n notify(`${translate('ra.validation.incorrect_email_password')}.`);\n return {\n 'username': translate('ra.validation.incorrect_email_password'),\n 'password': translate('ra.validation.incorrect_email_password'),\n }\n\n case 'Invalid game number':\n notify('components.login.validation.invalid_game_number_long')\n return {\n game: translate('components.login.validation.invalid_game_number')\n }\n\n case 'Invalid team ID':\n notify('components.login.validation.invalid_team_id_long')\n return {\n team: translate('components.login.validation.invalid_team_id')\n }\n\n case 'Missing home or away team':\n notify('components.login.validation.missing_home_or_away_team_long')\n return {\n team: translate('components.login.validation.missing_home_or_away_team')\n }\n\n case 'This game is cancelled':\n notify('components.login.validation.game_cancelled_long')\n return {\n game: translate('components.login.validation.game_cancelled')\n }\n\n case 'Unsupported sport':\n notify('components.login.validation.unsupported_sport_long')\n return {\n game: translate('components.login.validation.unsupported_sport')\n }\n\n case 'This game has already been completed':\n notify('components.login.validation.game_already_completed_long')\n return {\n game: translate('components.login.validation.game_already_completed_long')\n }\n\n default: {\n if (status === 503) {\n notify('ra.auth.login_error_retry')\n } else {\n notify('ra.auth.login_error')\n }\n }\n }\n })\n }\n\n const initialValues = {\n type: isVolunteer ? 'scorekeeper' : 'member',\n }\n if (!isVolunteer) {\n initialValues.username = authService.getUsername();\n }\n\n return <Layout meta={<Meta showPasswordInput={showPasswordInput} />}>\n <SimpleForm\n component={Fragment}\n validate={validate}\n save={submit}\n onSubmit={onEnterSubmit}\n toolbar={<Toolbar showPasswordInput={showPasswordInput} handleNext={handleNext} disabled={loadingThirdParty} />}\n initialValues={initialValues}\n {...inputProps}\n >\n <LoginForm showPasswordInput={showPasswordInput} handleEdit={handleEdit} disabled={loadingThirdParty} />\n </SimpleForm>\n </Layout>\n}\n\nconst Toolbar = ({ handleSubmit, showPasswordInput, handleNext, disabled }) => {\n const translate = useTranslate();\n const { submitting } = useFormState();\n const { values } = useFormState();\n const isScorekeeper = values.type === 'scorekeeper';\n\n return <Button\n name=\"loginNextButton\"\n type=\"button\"\n fullWidth\n variant=\"contained\"\n color=\"primary\"\n disabled={submitting || disabled}\n onClick={showPasswordInput || isScorekeeper ? handleSubmit : () => handleNext(values?.username)}\n >\n {isScorekeeper || showPasswordInput ? translate('ra.auth.login') : translate('ra.action.next')}\n </Button>\n}\n","/**\n * Check if bypass login is enable\n * @warn development only\n */\nexport const hasBypassLogin = process.env.BYPASS_LOGIN === `${true}` && process.env.NODE_ENV !== 'production';\n","import React, { Suspense, useEffect, useState } from 'react';\nimport { AdminContext, AdminUI, useTranslate, ReferenceInput, ReferenceArrayInput, List, ListView, Datagrid, DatagridHeader, ListToolbar } from 'react-admin';\nimport { DatagridHeaderCell } from 'ra-ui-materialui/esm/list/datagrid/DatagridHeaderCell'\nimport { createBrowserHistory as createHistory } from 'history';\nimport { Button, LinearProgress, styled } from '@material-ui/core';\nimport { MuiPickersUtilsProvider } from '@material-ui/pickers';\nimport MomentUtils from '@date-io/moment';\nimport { Redirect } from 'react-router-dom';\nimport Helmet from 'react-helmet';\n\nimport { restClient, authClient, AuthProvider, useReady } from './http'\nimport { useCreateTheme } from './theme';\nimport { LocaleProvider, useI18nProvider } from './locale';\nimport Layout from './layout/Layout';\nimport BaseLayout from './routes/BaseLayout';\nimport { SeasonProvider } from './common/inputs/SeasonSelector';\nimport { OfficeProvider } from './common/inputs/OfficeSelector';\nimport useOffline from './common/useOffline';\nimport { storageReady } from './http/deviceService';\n\nimport { authResources, getInitialState } from './resources';\nimport { EventViewSettingsProvider } from './resources/events/EventViewSettings';\n\nimport { customRoutes } from './routes'\nimport LoginPage from './routes/Login';\n\nimport { appName } from './flags';\n\n// alter propTypes to avoid console warnings\n// react-admin only handles a single sort by default, but rest client was made to support multiple\ndelete ReferenceInput.propTypes.sort;\ndelete ReferenceArrayInput.propTypes.sort;\ndelete List.propTypes.sort;\ndelete List.propTypes.filters;\ndelete ListToolbar.type.propTypes.filters;\ndelete ListView.propTypes.currentSort;\ndelete ListView.propTypes.filters;\ndelete Datagrid.propTypes.currentSort;\ndelete DatagridHeader.propTypes.currentSort;\ndelete DatagridHeaderCell.propTypes.currentSort;\n\nconst history = createHistory();\n\nconst initialState = getInitialState(history)\nconst Dashboard = () => <Redirect to=\"/profile\" />\n\nconst Progress = styled(LinearProgress)(({ theme }) => ({\n margin: theme.spacing(2, 1),\n}))\n\nexport const useStorageAvailable = () => {\n const [ isAvailable, setAvailable ] = useState(false);\n const [ loading, setLoading ] = useState(true)\n\n useEffect(() => {\n storageReady\n .then(() => setAvailable(true))\n .catch(() => setAvailable(false))\n .finally(() => setLoading(false))\n }, [])\n\n return [ isAvailable, loading ];\n}\n\nconst useTimeout = (length) => {\n const [ long, setLong ] = useState(false);\n useEffect(() => {\n const timeout = setTimeout(() => setLong(true), length)\n return () => clearTimeout(timeout)\n }, [ length ])\n return long;\n}\n\nconst Loading = () => {\n const long = useTimeout(500);\n const longer = useTimeout(1000);\n\n if (!long) return null;\n return <BaseLayout hideNotifications>\n <Progress color=\"primary\" variant={longer ? \"indeterminate\" : \"buffer\"} value={50} valueBuffer={75} />\n </BaseLayout>;\n}\n\nconst App = () => {\n const translate = useTranslate();\n const theme = useCreateTheme()\n const [ storageAvailable, storageLoading ] = useStorageAvailable()\n const isOffline = useOffline()\n const ready = useReady();\n\n if (!storageAvailable) {\n if (storageLoading) return <Loading />\n return <BaseLayout hideNotifications>\n <h3>{translate('components.login.messages.storage.unavailable')}</h3>\n <p>{translate('components.login.messages.storage.cookies_disabled')}</p>\n <p>{translate('components.login.messages.storage.use_browser_storage')}</p>\n <p>{translate('components.login.messages.storage.enable_cookies')}</p>\n <Button variant=\"text\" component=\"a\" href=\"https://www.whatismybrowser.com/guides/how-to-enable-cookies/auto\" target=\"_blank\" rel=\"noopener noreferrer\">{translate('ra.action.learn')}</Button>\n </BaseLayout>\n }\n\n if (isOffline) {\n return <BaseLayout hideNotifications>\n <h3>{translate('components.login.messages.offline.you')}</h3>\n <p>{translate('components.login.messages.offline.reconnect')}</p>\n </BaseLayout>\n }\n\n if (!ready) return <Loading />\n\n return <AdminUI\n title={appName}\n theme={theme}\n layout={Layout}\n loginPage={LoginPage}\n customRoutes={customRoutes}\n dashboard={Dashboard}\n disableTelemetry\n >\n {authResources}\n </AdminUI>\n}\n\nconst AppContext = ({ children }) => {\n const i18nProvider = useI18nProvider()\n return <AdminContext\n authProvider={authClient}\n dataProvider={restClient}\n i18nProvider={i18nProvider}\n history={history}\n initialState={initialState}\n >\n {children}\n </AdminContext>\n}\n\nexport default () =>\n <LocaleProvider>\n <AuthProvider>\n <SeasonProvider>\n <OfficeProvider>\n <EventViewSettingsProvider>\n <MuiPickersUtilsProvider utils={MomentUtils}>\n <Suspense fallback={() => null}>\n <AppContext>\n <Helmet defaultTitle={appName} titleTemplate={`%s - ${appName}`} />\n <App />\n </AppContext>\n </Suspense>\n </MuiPickersUtilsProvider>\n </EventViewSettingsProvider>\n </OfficeProvider>\n </SeasonProvider>\n </AuthProvider>\n </LocaleProvider>\n","import { useEffect, useState } from 'react';\n\nexport default function useOffline() {\n const [isOffline, setIsOffline] = useState(!navigator.onLine);\n\n useEffect(() => {\n const handleOffline = () => {\n setIsOffline(true);\n };\n const handleOnline = () => {\n setIsOffline(false);\n };\n window.addEventListener('offline', handleOffline);\n window.addEventListener('online', handleOnline);\n return () => {\n window.removeEventListener('offline', handleOffline);\n window.removeEventListener('online', handleOnline);\n };\n }, []);\n\n return isOffline;\n}\n","import 'react-app-polyfill/ie11';\nimport 'react-app-polyfill/stable';\nimport 'proxy-polyfill'\n\nimport React from 'react';\nimport ReactDOM from 'react-dom';\nimport { init as initSentry } from '@sentry/browser';\n// import { Integrations as TracingIntegrations } from \"@sentry/tracing\";\n\nimport './index.css';\nimport App from './App';\n\ninitSentry({\n dsn: process.env.SENTRY_DSN,\n release: process.env.SENTRY_RELEASE,\n environment: process.env.SENTRY_ENVIRONMENT,\n enabled: process.env.SENTRY_RELEASE != false,\n // integrations: [\n // new TracingIntegrations.BrowserTracing(),\n // ],\n sampleRate: 1,\n tracesSampleRate: 0,\n ignoreErrors: [\n 'ChunkLoadError',\n 'SyntaxError',\n 'No available storage method found.',\n /^ResizeObserver loop/,\n ],\n})\n\nReactDOM.render(<App />, document.getElementById('root'));\n","import React, { useCallback, useEffect, useRef, useState, useMemo } from 'react';\nimport { useLocale } from 'react-admin';\nimport { makeStyles } from '@material-ui/core';\nimport { UAParser } from 'ua-parser-js';\nimport { useSport, useTenant } from '../../http';\n\nconst ForeThoughtMobile = React.lazy(() => import('./ForeThoughtMobile'));\nconst ForeThoughtDesktop = React.lazy(() => import('./ForeThoughtDesktop'));\n\nexport const hideForeThoughtBubble = () => {\n document.body.classList.add(\"hide-forethought-bubble\");\n};\n\nexport const hideForeThoughtChat = () => {\n document.body.classList.add(\"hide-forethought-chat\");\n};\n\nexport const showForeThoughtBubble = () => {\n document.body.classList.remove(\"hide-forethought-bubble\");\n};\n\nexport const showForeThoughtChat = () => {\n document.body.classList.remove(\"hide-forethought-chat\");\n};\n\nconst useStyles = makeStyles(theme => ({\n block: {\n display: 'block',\n }\n}));\n\nconst ForeThought = ({ authenticated, fullName }) => {\n const [canShow, setCanShow] = useState(false);\n const [isOpen, setIsOpen] = useState(false);\n const timeout = useRef(false);\n const isMobile = useMemo(() => ['mobile', 'console', 'smarttv', 'wearable'].includes(new UAParser()?.getDevice?.()?.type), []);\n const classes = useStyles();\n const locale = useLocale();\n\n const onForethoughtMessage = useCallback((event) => {\n if (!event.isTrusted) {\n return;\n }\n\n if (event.origin !== \"https://solve-widget.forethought.ai\") {\n return;\n }\n\n if (!event.data) {\n return;\n }\n\n if (event.data.event === 'forethoughtWidgetError') {\n console.error(event.data.error);\n return;\n }\n\n // The widget needs to be loaded before we try to open it.\n if (event.data?.event === \"forethoughtWidgetLoaded\") {\n showForeThoughtBubble();\n hideForeThoughtChat();\n setCanShow(true);\n return;\n }\n\n // Makes sure the assistant is open before showing the iframe.\n // Avoids glitchy apparition of the forethought bubble.\n if (event.data?.event === \"forethoughtWidgetOpened\") {\n document.getElementById(\"forethought-chat\")?.classList.add(classes.block);\n return;\n }\n\n // The close button is inside the iFrame.\n // We need to listen to the messages to check if the assistant window has been closed.\n if (event.data?.event === \"forethoughtWidgetClosed\") {\n showForeThoughtBubble();\n hideForeThoughtChat();\n document.getElementById(\"forethought-chat\")?.classList.remove(classes.block);\n setIsOpen(false);\n }\n }, [classes.block]);\n\n const tenant = useTenant();\n const sport = useSport();\n\n const mountScript = () => {\n unmountScript();\n setIsOpen(false);\n setCanShow(false);\n window.addEventListener(\"message\", onForethoughtMessage);\n\n timeout.current = setTimeout(() => {\n const head = document.head || document.getElementsByTagName(\"head\")[0];\n const forethoughtScript = document.createElement(\"script\");\n\n forethoughtScript.setAttribute(\"id\", \"forethought-script\");\n forethoughtScript.setAttribute(\"src\", \"https://solve-widget.forethought.ai/embed.js\");\n forethoughtScript.setAttribute(\"type\", \"application/javascript\");\n forethoughtScript.setAttribute(\"data-api-key\", \"b912010e-9ccf-4f3c-a49a-241c7622ddb4\");\n forethoughtScript.setAttribute(\"data-ft-Spordle-Client\", tenant?.name || \"none\");\n forethoughtScript.setAttribute(\"data-ft-Spordle-Sport\", sport?.substring(0, 3).toUpperCase() || \"none\");\n forethoughtScript.setAttribute(\"data-ft-Spordle-Product\", \"PLY\");\n\n forethoughtScript.setAttribute(\"data-ft-authenticated\", !!authenticated);\n forethoughtScript.setAttribute(\"data-ft-Embed-Script-Language\", locale);\n forethoughtScript.setAttribute(\"data-ft-Full-Name\", fullName);\n forethoughtScript.setAttribute(\"data-ft-Provided-URL\", window.location.href);\n forethoughtScript.setAttribute(\"data-ft-userType\", \"mha\");\n forethoughtScript.setAttribute(\"data-ft-workflow-tag\", \"mha\");\n head.appendChild(forethoughtScript);\n }, 10);\n };\n\n const unmountScript = () => {\n clearTimeout(timeout.current);\n\n if (window.Forethought) {\n window.Forethought('widget', 'close');\n }\n\n document.getElementById(\"forethought-script\")?.remove();\n document.getElementById(\"forethought-chat\")?.remove();\n\n window.removeEventListener(\"message\", onForethoughtMessage);\n };\n\n const toggleChat = () => {\n if (!window.Forethought) {\n return;\n }\n hideForeThoughtBubble();\n showForeThoughtChat();\n window.Forethought('widget', 'open');\n setIsOpen(true);\n };\n\n useEffect(() => {\n mountScript();\n\n return unmountScript;\n }, [locale, authenticated, fullName]); // eslint-disable-line react-hooks/exhaustive-deps\n\n // The bubble will only be shown when forethought has loaded.\n if (!canShow) {\n return null;\n }\n\n if (isMobile) {\n return (\n <ForeThoughtMobile isOpen={isOpen} toggleChat={toggleChat} />\n );\n }\n\n return <ForeThoughtDesktop isOpen={isOpen} toggleChat={toggleChat} />;\n};\n\nexport default ForeThought;\n","import React, { useContext, useEffect } from 'react';\nimport moment from 'moment-timezone';\n\nimport 'moment/locale/fr';\n\nimport usePreferences from '../common/usePreferences';\n\nconst LocaleContext = React.createContext([]);\n\nexport const getGenericLocale = (locale) => {\n switch (locale) {\n case 'fr':\n case 'fr-ca':\n case 'fr-fr':\n return 'fr';\n\n case 'en':\n case 'en-ca':\n case 'en-us':\n default:\n return 'en';\n }\n}\n\nconst getDefaultLocale = () => {\n return window.navigator?.language?.toLowerCase()\n || window.navigator?.userLanguage?.toLowerCase()\n || 'en-ca';\n}\n\nexport const useLocale = () => useContext(LocaleContext);\n\nexport const LocaleProvider = (props) => {\n const state = usePreferences('locale', getGenericLocale(getDefaultLocale()));\n const [ locale, , ready ] = state;\n\n useEffect(() => {\n moment.locale(locale);\n }, [ locale ])\n\n if (!ready) return null; // wait for preference to finish loading to avoid moment issues\n\n moment.locale(locale, {\n week: {\n dow: 0, // first day of week is Sunday\n }\n });\n\n return <LocaleContext.Provider value={state} {...props} />\n}\n","import english from 'ra-language-english';\n\nimport { appName } from '../../flags';\n\nconst TYPES = {\n Exhibition: 'Exhibition',\n Placement: 'Placement',\n League: 'League',\n Playoffs: 'Playoffs',\n Tournament: 'Tournament',\n Championship: 'Championship',\n Cup: 'Cup',\n}\n\nconst STATUSES = {\n Active: 'Active',\n Rescheduled: 'Rescheduled',\n 'Rink Changed': 'Surface Changed',\n Cancelled: 'Cancelled',\n Postponed: 'Postponed',\n Conflict: 'Conflict',\n Forfeited: 'Forfeited',\n DoubleForfeit: 'Double Forfeit',\n Completed: 'Completed',\n Certified: 'Certified',\n}\n\nconst ACTIVITY_TYPES = {\n Practice: 'Practice',\n Training: 'Training',\n Meeting: 'Meeting',\n Meal: 'Meal',\n Accomodation: 'Accomodation',\n}\n\nconst REGIONS = {\n Canada: 'Canada',\n 'United States': 'United States',\n Europe: 'Europe',\n}\n\nconst messages = {\n ra: {\n ...english.ra,\n action: {\n ...english.ra.action,\n ok: 'Ok',\n yes: 'Yes',\n no: 'No',\n back: 'Back',\n ignore: 'Ignore',\n change: 'Change',\n register: 'Register',\n continue: 'Continue',\n subscribe: 'Subscribe',\n learn: 'Learn more',\n analyze: 'Analyze',\n accept: 'Accept',\n summary: 'Summary',\n switch: 'Switch',\n swap: 'Swap',\n delegate: 'Delegate',\n undelegate: 'Undelegate',\n generate: 'Generate',\n publish: 'Publish',\n finish: 'Finish',\n select: 'Select',\n discard: 'Discard',\n decline: 'Decline',\n cancel: 'Cancel',\n next: 'Next',\n skip: 'Skip',\n new: 'New',\n replace: 'Replace',\n request: 'Request',\n keep: 'Keep',\n send: 'Send',\n sign: 'Sign',\n directions: 'Directions',\n approve: 'Approve',\n assign: 'Assign',\n assign_anyway: 'Assign Anyway',\n reassign: 'Reassign',\n accept_other: 'Accept Other',\n click_here: 'Click here',\n click_to_verify: 'Click to verify',\n send_verification: 'Send Verification',\n copy_to_clipboard: 'Copy to clipboard',\n confirm_removal: 'Confirm Removal',\n tap_for_more: 'Tap for more',\n repeat: 'Repeat',\n invite: 'Invite',\n send_invite: 'Send Invite',\n retry: 'Retry',\n open_full_page: 'Open as full page',\n clear: 'Clear',\n clear_filters: 'Clear Filters',\n update: 'Update',\n import: 'Import',\n apply: 'Apply',\n save: 'Save',\n open: 'Open',\n upload: 'Upload',\n select_columns: 'Select Columns',\n review: 'Review',\n view: 'View',\n share: 'Share',\n unshare: 'Unshare',\n fix: 'Fix',\n search_in: 'Search in',\n open_in_id: 'Open in Spordle ID',\n certify: 'Certify',\n pend: 'Pend',\n undo: 'Undo',\n start: 'Start',\n respond: 'Respond',\n reset: 'Reset',\n load_more: 'Load More',\n click_to_refresh: 'Click Here to Refresh',\n show: 'Show',\n hide: 'Hide',\n manage: 'Manage',\n recalculate: 'Recalculate',\n active: 'Active',\n },\n auth: {\n ...english.ra.auth,\n login: 'Login',\n login_error: 'Unable to login at this time',\n login_error_retry: 'Unable to login at this time. Try again in a few minutes.',\n unauthorized: 'Unauthorized',\n unauthorized_long: 'Your account (%{user}) does not have any permissions at this time.',\n recovery_email: 'Send Recovery Email',\n your_username: 'This will be your username',\n youre_logged_in_as: \"You're logged in as %{user}\",\n },\n page: {\n ...english.ra.page,\n loading: `${english.ra.page.loading}...`,\n error_try_again: `${english.ra.page.error}, try again later`,\n error_try_again_refresh: `${english.ra.page.error}, try refreshing or try again later`,\n create: 'New %{name}',\n edit: `Edit %{name}`,\n editing: 'Editing %{name}',\n show: `%{name}`,\n not_available: 'N/A',\n },\n message: {\n ...english.ra.message,\n created: 'Created',\n updated: 'Updated',\n draft: 'Draft',\n not_published: 'Not Published',\n not_applicable: 'Not Applicable',\n delete_title: 'Confirm Deletion',\n delete_content: 'Are you sure you want to delete this %{name}?',\n discard_changes: 'Are you sure you want to discard your changes?',\n error: `This error has been automatically sent to ${appName}. You may need to go back or try again later.`,\n version_error: `Looks like you're running an older version of ${appName}. You'll need to clear your cache then try again.`,\n version_mismatch: `Looks like you're running an older version of ${appName}. Please refresh your browser.`,\n report_details: 'Report Details',\n digits: 'This is about %{number} digits',\n redirecting: 'Redirecting',\n optional: 'Optional',\n no_options: 'No options',\n none: 'None',\n unverified: 'Unverified',\n verified: 'Verified',\n unverified_email: 'Unverified email',\n verified_email: 'Verified email',\n verification_email: 'A verification email has been sent',\n available: 'Available',\n unavailable: 'Unavailable',\n unknown: 'Unknown',\n show_more: 'Show %{number} more...',\n no_results: 'No results',\n no_results_filtered: 'No results (%{smart_count} filtered)',\n no_rows: 'No rows',\n filters: 'Filters',\n filtered: '%{smart_count} filtered',\n filter_by_status: 'Filter by status',\n filter_by_attributes: 'Filter by attributes',\n filter_by_list: 'Filter by list',\n filter_by_name: 'Filter by name',\n filter_by_group: 'Filter by group',\n filter_by_pool: 'Filter by pool',\n filter_by_category: 'Filter by category',\n no_group: 'No Group',\n all: 'All',\n all_f: 'All',\n total: 'Total',\n settings: 'Settings',\n default: 'Default',\n select_columns: \"We've automatically matched your file's columns to the required fields as best we could. Please review the columns below and make the appropriate changes if necessary.\",\n no_valid_rows: 'This file does not contain any valid rows to import.',\n managed_by_id: 'Some fields are managed by Spordle ID',\n synced_with_id: 'Synced from Spordle ID',\n unsupported: 'Currently Unsupported',\n shared_slot: \"Shared\",\n enabled: 'Enabled',\n disabled: 'Disabled',\n click_search: \"Click 'Search' to see results\"\n },\n input: {\n ...english.ra.input,\n image: {\n upload_several: 'Drop some pictures to upload, or click to select one.',\n upload_single: 'Drop a picture to upload, or click to select it.',\n },\n field: {\n name: 'Name',\n email: 'Email',\n password: 'Password',\n },\n file: {\n ...english.ra.input.file,\n upload_several: 'Drop some files to upload, or click to select one.',\n upload_single: 'Drop a file to upload, or click to select it.',\n upload: 'Upload File',\n uploading: 'Uploading...',\n upload_csv: 'Upload a CSV file',\n download_template: 'Download Template',\n only_csv: 'Only CSV files are supported at this time.',\n error_parsing: 'There was an error parsing your file.',\n invalid_value: 'Some rows have an invalid value',\n enter_new_title: 'Enter a new title',\n confirm_remove_attachment: 'Are you sure you want to remove this attachment?',\n import: 'Import',\n importing: 'Importing...',\n columns: 'Columns',\n error_too_large: 'File exceeds size limit',\n drop: {\n logo: 'Drag & drop a new logo here',\n image: 'Drag & drop a new image here',\n },\n\n },\n autocomplete: {\n ...english.ra.input.autocomplete,\n type_to_search: 'Type to search...',\n none: 'None'\n },\n password: {\n ...english.ra.input.password,\n forgot: 'Forgot Password?',\n change: 'Change Password',\n change_success: 'Password successfully updated',\n old: 'Current Password',\n new: 'New Password',\n confirm: 'Confirm Password',\n invalid: 'Incorrect current password',\n too_long: 'New password is too long',\n toggle_visibility: 'Toggle password visibility'\n },\n adornments: {\n seconds: 'secs',\n minutes: 'mins',\n kilometers: 'km'\n },\n i18n: {\n label: 'Translation',\n values: {\n en: 'EN',\n fr: 'FR',\n }\n }\n },\n notification: {\n ...english.ra.notification,\n updated: 'Updated |||| %{smart_count} updated',\n created: 'Created',\n deleted: 'Deleted |||| %{smart_count} deleted',\n bad_item: 'Incorrect item',\n item_doesnt_exist: 'Item does not exist',\n cancelled: 'Cancelled',\n logged_out: 'Your authentication has expired, please log in again.',\n },\n validation: {\n ...english.ra.validation,\n email: 'Must be a valid email',\n invalid: 'Invalid',\n invalid_number: 'Invalid number',\n invalid_number_format: 'Invalid number format',\n invalid_email_format: 'Invalid email format',\n different: 'You cannot use the same password',\n match: 'This does not match the new password you entered',\n incorrect_email_password: 'Incorrect email or password',\n values_not_unique: 'Some values are not unique',\n spaces_not_allowed: 'Spaces are not allowed',\n more_characters: '%{smart_count} more character |||| %{smart_count} more characters',\n positive: 'Must be positive',\n positive_leave_empty: 'Must be postive. Leave empty for always.',\n negative: 'Must be negative',\n whole: 'Must be whole',\n longer_than: 'Cannot be longer than %{smart_count} characters (%{current_length})',\n greater_than_zero: 'Must be greater than 0',\n greater_than_or_equal_zero: 'Must be greater than or equal to 0',\n greater_than_zero_leave_empty: 'Must be greater than 0. Leave empty for always.',\n greater_than_zero_leave_empty_limit: 'Must be greater than 0. Leave empty for no limit.',\n title_too_long: 'Title must be less than 80 characters',\n min: 'Min',\n max: 'Max',\n absence: 'Must be unset',\n length: 'Invalid length',\n numericality: 'Must be a number',\n inclusion: 'Invalid selection',\n exclusion: 'Invalid selection',\n format: 'Invalid format',\n uniqueness: 'Must be unique',\n date: 'Date is not valid',\n already_exists: 'Already exists in the system',\n duplicate: 'Duplicate',\n end_after_start: 'End Date must be after Start Date',\n end_before_start: 'End Time must always be after Start Time',\n unauthorized: 'Unauthorized',\n unable_to_delete: 'Unable to delete',\n claim_maximum_amount: 'Must not be over the maximum amount: %{amount}',\n too_high: 'Too high',\n },\n date: {\n name: 'Date',\n minute: 'Minute |||| Minutes',\n hour: 'Hour |||| Hours',\n day: 'Day |||| Days',\n week: 'Week |||| Weeks',\n month: 'Month |||| Months',\n range: '%{date1} to %{date2}',\n time: 'Time',\n phrase: {\n minute: '%{smart_count} minute |||| %{smart_count} minutes',\n hour: 'an hour |||| %{smart_count} hours',\n week: '%{smart_count} week |||| %{smart_count} weeks',\n },\n lexical: {\n today: 'Today',\n all_day: 'All day',\n until_time: 'until %{time}',\n after_time: 'after %{time}',\n before: 'Before',\n between: 'Between',\n after: 'After',\n },\n days: {\n short: {\n All: 'All',\n Sun: 'Sun',\n Mon: 'Mon',\n Tue: 'Tue',\n Wed: 'Wed',\n Thu: 'Thu',\n Fri: 'Fri',\n Sat: 'Sat',\n },\n long: {\n All: 'All Days',\n Sun: 'Sunday',\n Mon: 'Monday',\n Tue: 'Tuesday',\n Wed: 'Wednesday',\n Thu: 'Thursday',\n Fri: 'Friday',\n Sat: 'Saturday',\n }\n },\n },\n function: {\n and: 'and',\n for: 'for',\n is: 'is',\n was: 'was',\n a: 'a',\n youre: \"You're\",\n by: 'by',\n or: 'or',\n }\n },\n resources: {\n categories: {\n name: 'Category |||| Categories',\n fields: {\n name: 'Name',\n divisionId: 'Division',\n gender: 'Gender Identity',\n classId: 'Class',\n officeId: 'Organization',\n },\n values: {\n gender: {\n Male: 'Male',\n Female: 'Female',\n Integrated: 'Mixed',\n },\n },\n actions: {\n add: 'Add Category',\n edit: 'Edit Category',\n scheduleCategory: 'Use Schedule Category',\n },\n labels: {\n card: {\n title: 'Categories',\n },\n edit: 'Add Category',\n add: 'New Category',\n },\n },\n divisions: {\n name: 'Division |||| Divisions',\n fields: {\n name: 'Name',\n shortName: 'Short Name',\n parentId: 'Parent Division',\n officeId: 'Organization',\n },\n actions: {\n add: 'Add Division',\n edit: 'Edit Division',\n },\n labels: {\n card: {\n title: 'Divisions',\n },\n edit: 'Add Division',\n add: 'New Division',\n },\n },\n classes: {\n name: 'Class |||| Classes',\n fields: {\n name: 'Name',\n shortName: 'Short Name',\n officeId: 'Organization',\n },\n actions: {\n add: 'Add Class',\n edit: 'Edit Class',\n },\n labels: {\n card: {\n title: 'Classes',\n },\n edit: 'Add Class',\n add: 'New Class',\n },\n },\n surfaces: {\n name: 'Surface |||| Surfaces',\n fields: {\n name: 'Name',\n city: 'City',\n country: 'Country',\n address: 'Address',\n alias: 'Alias',\n timezone: 'Timezone',\n sports: 'Sports',\n venueId: 'Venue',\n fraction: 'Split Name',\n type: 'Type',\n size: 'Size',\n parentId: 'Parent',\n split: 'Split'\n },\n values: {\n sports: {\n Hockey: 'Hockey',\n Soccer: 'Soccer',\n Baseball: 'Baseball'\n },\n type: {\n Ice: 'Ice',\n Grass: 'Grass',\n Synthetic: 'Synthetic',\n Wood: 'Wood',\n Gym: 'Gym',\n Clay: 'Clay',\n Dirt: 'Dirt',\n 'Grass/Clay': 'Grass/Clay',\n 'Grass/Dirt': 'Grass/Dirt',\n },\n size: {\n all_sizes: 'View all sizes',\n XL: 'Extra Large',\n L: 'Large',\n M: 'Medium',\n S: 'Small',\n XS: 'Extra Small'\n },\n },\n actions: {\n add: 'Add Surface',\n edit: 'Edit Surface',\n },\n labels: {\n card: {\n title: 'Surfaces',\n splitTitle: 'Surface Splits',\n splitSubtitle: 'A surface can be split to allow multiple events at the same time',\n },\n alerts: {\n message: \"This surface is a split of\"\n },\n tabs: {\n summary: 'Summary',\n games: 'Games',\n time_slots: 'Time Slots',\n },\n edit: 'Update Surface',\n add: 'New Surface',\n street_address: 'Street Address',\n name: 'Surface Name',\n availability: {\n card: {\n title: 'Availability',\n subtitle: 'Select the dates and times that are available, or block out times that are unavailable',\n },\n title: 'Organization Availability',\n note: 'Availability note',\n updated: 'Availability updated!',\n },\n },\n messages: {\n surfaces: 'surfaces',\n availability: {\n available: 'This surface %{input} be available',\n }\n },\n helpers: {\n alias: 'Optional - used for searching',\n fraction: 'Optional - defaults to a whole surface',\n availability: {\n note: 'This note will be visible when scheduling games during this time.',\n }\n }\n },\n venues: {\n name: 'Venue |||| Venues',\n fields: {\n name: 'Name',\n city: 'City',\n region: 'Region',\n country: 'Country',\n address: 'Address',\n alias: 'Alias',\n timezone: 'Timezone',\n },\n actions: {\n add: 'Add Venue',\n edit: 'Edit Venue',\n },\n labels: {\n name: 'Venue Name',\n street_address: 'Street Address',\n my: 'My Venues',\n },\n messages: {\n add_venues: 'Add venues',\n search_venue: 'Search by venue name or city',\n enter_name_city: 'Enter a name or city to start searching',\n },\n alerts: {\n loading_venues: 'Loading venues...',\n }\n },\n activities: {\n name: 'Activity |||| Activities',\n fields: {\n name: 'Name',\n teamId: 'Team',\n arenaId: 'Surface',\n officeId: 'Organization',\n location: 'Location',\n type: 'Type',\n status: 'Status',\n recurrence: 'Recurrence',\n startTime: 'Start Time',\n endTime: 'End Time',\n pastEvents: 'Past Activities',\n comments: 'Comments',\n },\n filters: {\n startTime: 'Scheduled Date',\n endTime: 'End Date',\n pastEvents: 'Show past activities',\n },\n actions: {\n add: 'Add Activity',\n },\n labels: {\n card: {\n name: 'Activity',\n },\n add: 'New Activity',\n edit: 'Update Activity',\n frequency: 'Frequency',\n interval: 'Interval',\n weekdays: 'Weekdays',\n end_date: 'End Date',\n },\n messages: {\n schedule_no_occurences: 'The recurrence schedule specified does not result in any activities',\n event_repeat: 'This recurrence schedule will result in %{smart_count} activity |||| This recurrence schedule will result in %{smart_count} activities',\n additional_instances: '... %{smart_count} additional activity ... |||| ... %{smart_count} additional activities ...',\n },\n helpers: {\n frequency: 'All other instances will be removed',\n },\n values: {\n type: ACTIVITY_TYPES,\n status: STATUSES,\n frequency: {\n Once: 'Does not repeat',\n Daily: 'Daily',\n Weekly: 'Weekly',\n Monthly: 'Monthly',\n }\n },\n alerts: {\n activity_explanation: 'Activities are solely off-surface events, not to be confused with games or practices.'\n }\n },\n practices: {\n name: 'Practice |||| Practices',\n fields: {\n name: 'Name',\n teamIds: 'Teams',\n arenaId: 'Surface',\n officeId: 'Organization',\n location: 'Location',\n type: 'Type',\n status: 'Status',\n recurrence: 'Recurrence',\n startTime: 'Start Time',\n endTime: 'End Time',\n pastEvents: 'Past Practices',\n comments: 'Comments',\n },\n filters: {\n startTime: 'Scheduled Date',\n endTime: 'End Date',\n pastEvents: 'Show past practices',\n },\n actions: {\n add: 'Add Practice',\n edit: 'Edit Practice',\n },\n labels: {\n card: {\n name: 'Practice',\n },\n add: 'New Practice',\n edit: 'Update Practice',\n frequency: 'Frequency',\n interval: 'Interval',\n weekdays: 'Weekdays',\n end_date: 'End Date',\n tbd: 'TBD',\n practice_status: 'Practice Status',\n set_practice_status: 'Set Practice Status',\n change_practice_status: 'Change Status',\n },\n messages: {\n schedule_no_occurences: 'The recurrence schedule specified does not result in any practices',\n event_repeat: 'This recurrence schedule will result in %{smart_count} practice |||| This recurrence schedule will result in %{smart_count} practices',\n additional_instances: '... %{smart_count} additional practice ... |||| ... %{smart_count} additional practices ...',\n },\n helpers: {\n frequency: 'All other instances will be removed',\n conflicts: 'Resolve conflicts or status will be enforced as Conflict',\n },\n values: {\n status: STATUSES,\n frequency: {\n Once: 'Does not repeat',\n Daily: 'Daily',\n Weekly: 'Weekly',\n Monthly: 'Monthly',\n }\n },\n notifications: {\n practice_status_changed: 'Practice status changed',\n change_practice_status: 'Changed %{smart_count} practice status to %{status} |||| Changed %{smart_count} practice statuses to %{status}',\n change_practice_status_error: 'Unable to change practice status |||| Unable to change practice statuses',\n },\n validations: {\n conflicts: 'Resolve conflicts or change to an inactive status',\n }\n },\n events: {\n name: 'Event |||| Events',\n fields: {\n arenaId: 'Surface',\n status: 'Status',\n startTime: 'Start Time',\n endTime: 'End Time',\n },\n labels: {\n card: {\n title: 'Schedule',\n },\n details: 'Details',\n location: 'Location',\n upcoming_schedule: 'Upcoming Schedule',\n team_events: 'Team Events',\n show_calendar: 'Show calendar',\n },\n },\n games: {\n name: 'Game |||| Games',\n fields: {\n id: 'ID',\n number: 'Game Number',\n seasonId: 'Season',\n scheduleId: 'Schedule',\n scheduleType: 'Type',\n crossScheduleId: 'Cross Schedule',\n categoryId: 'Category',\n homeTeamId: 'Home Team',\n awayTeamId: 'Away Team',\n date: 'Date',\n startTime: 'Start Time',\n endTime: 'End Time',\n arenaId: 'Surface',\n status: 'Status',\n comments: 'Comments',\n isApproved: 'Approved',\n officeId: 'Organization',\n groupId: 'Group',\n crossGroupId: 'Cross Group',\n pastEvents: 'Past Games',\n timezone: 'Timezone',\n effectiveSurfaces: 'Surface',\n resetAssigner: 'Reset Assigner',\n },\n filters: {\n startTime: 'Scheduled Date',\n endTime: 'End Date',\n scheduleOffices: 'Schedule Organization',\n teamOffices: 'Teams Organization',\n homeTeamOffices: 'Home Team Organization',\n awayTeamOffices: 'Away Team Organization',\n surfaceOffices: 'Surface Organization',\n assignOffices: 'Assigning Organization',\n isApproved: 'Completed',\n isCertified: 'Certified',\n pastEvents: 'Show past games',\n conflictsOnly: 'Show conflicts only',\n bracketGamesOnly: 'Show bracket games only',\n quickAssignLabel: 'Quick Assign',\n },\n actions: {\n add: 'Add Game',\n edit: 'Edit Game',\n edit_completed: \"Game cannot be modified since it's already marked as completed or certified\",\n internal: 'Internal Actions',\n applyAssignRules: 'Apply Assign Rules',\n recalculateStats: 'Recalculate stats',\n recalculateScoresheet: 'Recalculate scoresheet',\n recalculateTransactions: 'Recalculate transactions',\n },\n labels: {\n card: {\n title: 'Games',\n },\n tabs: {\n summary: 'Summary',\n officials: 'Officials',\n scoresheet: 'Scoresheet',\n bracket: 'Bracket',\n events: 'Events',\n },\n edit: 'Update Game',\n add: 'New Game',\n time: 'Game Time',\n report: 'Game Report',\n tbd: 'TBD',\n bracket_game: 'Bracket Game',\n quick_assign_dialog_title: 'Game %{gameNumber} - %{position}',\n game_number: 'Game %{number}',\n game_number_officials: 'Game %{number} Officials',\n game_number_lineup: 'Game %{number} Lineup',\n game_number_certify: 'Game %{number} Certification',\n editing_game_number: 'Editing Game %{number}',\n team_lineups: 'Team Lineups',\n all_games: 'All Games',\n scorekeeping: 'Scorekeeping App',\n forfeiting_team: 'Losing Team by forfeit',\n forfeit: 'Forfeit Game',\n score: 'Score',\n forfeitWin: 'Forfeit Win',\n forfeitLoss: 'Forfeit Loss',\n forfeitTie: 'Double Forfeit',\n home: 'Home',\n away: 'Away',\n game_number_history: 'Game %{number} History',\n notes: 'Note |||| Notes',\n scoresheet_notes: 'Game Notes',\n admin_notes: 'Official Notes',\n select_team: 'Select team',\n certify_game: 'Certify Game',\n view_scoresheet: 'View Scoresheet',\n active: 'Active',\n inactive: 'Inactive',\n confirm_changes: 'Confirm Changes',\n game_status: 'Game Status',\n set_game_status: 'Set Game Status',\n change_game_status: 'Change Status',\n view_options: 'View Options',\n draftUpdates: {\n create: 'Draft Update',\n request: 'Request Changes',\n card: {\n title: 'Draft Updates',\n subtitle: 'The following are unpublished draft games linked to this game. Once published, the changes will be applied to this game.',\n },\n tooltips: {\n create: 'Create a draft update to apply changes to this game',\n request: 'Submit a request to change this game',\n }\n },\n cross_scheduling_add: 'Add Cross Scheduling',\n cross_scheduling_remove: 'Remove Cross Scheduling',\n main_group: 'Main Group',\n lineup: {\n name: 'Lineup',\n approved: 'Lineup Approved',\n incomplete: 'Incomplete Lineup',\n game: 'Game Lineup',\n },\n assignment: {\n history: 'History',\n confirm: 'Confirm Assignment',\n decline: 'Decline Assignment',\n confirm_reassignment: 'Confirm Reassignment',\n confirm_request: 'Confirm Request',\n expired_qualification: 'Expired Qualification',\n flagged_official: 'Flagged Official',\n discard_changes: 'Discard Changes',\n request_game: 'Request this game',\n this_game: 'This Game',\n delegate: 'Assignment Delegation',\n swap_assignment: 'Swap Assignment',\n swap_assignment_official: \"Swap this official's assignment\",\n search_names: 'Search names',\n search_attributes: 'Search attributes',\n unassigned: 'Unassigned',\n hidden: 'Hidden',\n adhoc: 'Volunteer',\n update_availability: 'Update Availability',\n game_officials: 'Game Officials',\n assign_officials: 'Assign Officials',\n team_officials: 'Team Officials',\n assigners: 'Assigners',\n show_attributes: 'Show attributes',\n hide_attributes: 'Hide attributes',\n undo_no_show: 'Undo No Show',\n delegate_pay: 'Delegate pay also',\n status: {\n ready: 'Ready',\n confirmed: 'Confirmed',\n pending: 'Pending',\n declined: 'Declined',\n requested: 'Requested',\n no_show: 'No show',\n removed: 'Removed',\n expired: 'Expired',\n ineligible: 'Ineligible',\n conflicts: 'Conflicts',\n schedule: 'Schedule',\n travel: 'Travel',\n assigned_today: 'Assigned Today',\n available: 'Available',\n unavailable: 'Unavailable',\n account: 'Account',\n assigned: 'Assigned',\n local: 'Local',\n }\n },\n certification: 'Certification',\n general: 'General',\n summary: 'Summary',\n flags: {\n 'Referee Entered Result': 'Referee entered the results',\n 'Coach Entered Result': 'Coach entered the results',\n 'Unfinished': 'Game did not finish',\n 'Lineup Max Limit': 'Too many members',\n 'Lineup Min Limit': 'Not enough members',\n 'Extra': 'Extra member |||| Extra members',\n 'Serving': 'Suspended member serving |||| Suspended members serving',\n 'Secondary Team': 'Secondary team member |||| Secondary team members',\n 'Not Rostered': 'Member missing from lineup |||| Members missing from lineup',\n 'Not Serving': 'Suspended member who played |||| Suspended members who played',\n 'Missing Suspended Member': 'Suspended member missing from lineup',\n 'Low Severity Penalties': 'Low Severity Penalty |||| Low Severity Penalties',\n 'High Severity Penalties': 'High Severity Penalty |||| High Severity Penalties',\n 'Yellow': 'Yellow card |||| Yellow cards',\n 'Indirect Red': 'Indirect red card |||| Indirect red cards',\n 'Direct Red': 'Direct red card |||| Direct red cards',\n 'Notes': 'Game notes',\n 'Unvalidated Members': 'Unvalidated Member |||| Unvalidated Members',\n 'Faulty Players': 'Faulty Player |||| Faulty Players',\n 'Transferred': 'Transferred',\n 'Suspension': 'Suspension |||| Suspensions',\n },\n flagsDetails: {\n 'Missing Suspended Member': 'A suspended member must be in the lineup',\n 'Not Rostered': 'A member played without being added to the lineup prior to game start',\n 'Extra': 'This member is not rostered to this team',\n 'Transferred': 'This member has been transferred from another organization',\n 'Secondary Team': \"This team is not the member's primary team\",\n 'Unvalidated Members': 'This member needs to be validated in Spordle ID',\n 'Faulty Players': {\n 'hasInningsRest': 'This member was not allowed to pitch due to a rest caused by the innings pitched',\n 'hasThrowsRest': 'This member was not allowed to pitch due to a rest caused by the throws pitched',\n 'consecutiveDays': 'This member pitched too many consecutive days',\n 'dailyInnings': 'This member pitched too many innings this day',\n 'weeklyInnings': 'This member pitched too many innings this week',\n }\n }\n },\n messages: {\n forfeit_help: 'Forfeiting a game will complete the scoresheet. Select the team that forfeited the game.',\n show_assignments: 'Show assignments',\n show_flags: 'Show flags',\n reverse_home_away: 'Reverse teams',\n show_more_game_info: 'Show more game info',\n group_games_by_arena: 'Group games by surface',\n group_games_by_round: 'Group games by round',\n group_games_by_date: 'Group games by date',\n confirm_delegate: 'Games that do not have the selected position or have already assigned the position to an official will be ignored. If no position is selected, the games assigning organization will be changed instead.',\n and_more: 'And %{smart_count} more...',\n game_status: 'This will update the schedule and replace the current status and comments of the game.',\n calendar: {\n subscribe: 'Subscribe to Calendar',\n subscribe_description: 'You can subscribe to your personal calendar feed in most calendar apps.',\n subscribe_description_extra: 'This includes your <strong>official assignments only</strong>. Scheduling changes may be delayed in your calendar app.',\n },\n apply_assign_rules: 'Update the assign settings for this game by applying the assign rules.',\n assignment: {\n accept_game_assignment: 'Accept game assignment',\n decline_game_assignment: 'Decline game assignment',\n are_you_sure_accept_assignment: \"Are you sure you want to accept this assignment? You'll be unable to accept any assignment at this time until you decline this assignment.\",\n are_you_sure_accept_assignment_disabled: \"Are you sure you want to accept this assignment? You'll be unable to decline this assignment and accept any other assignment at this time.\",\n accepting_assignment: 'Accepting this assignment will also decline the following assignments:',\n you_cannot_accept_assignment: 'You cannot accept this assignment because you have other conflicting assignments:',\n consecutive_game: 'Consecutive Game',\n accept_consecutive_assignments: 'Accepting this assignment will also accept any consecutive assignments.',\n decline_consecutive_assignments: 'Declining this assignment will also decline any consecutive assignments.',\n already_assigned: '%{name} is already assigned to this position.',\n continuing_replacement: 'By continuing, %{name1} will be removed from this game and %{name2} will be assigned in their place.',\n invalid_qualification: '%{name} does not have a valid qualification at this time.',\n verified_eligibility: 'Ensure that you have verified eligibility before assigning.',\n unable_accept_assignment: '%{name} may be unable to accept this assignment due to reasons listed in the Summary tab.',\n assign_official_to_game: 'Assign official to this game',\n reason_for_declining: 'Reason for Declining',\n both_assignments: 'both assignments',\n assignments: 'this assignment |||| all %{smart_count} assignments',\n decline_as_unavailable: 'Decline %{assignments} as unavailable',\n decline_as_available: 'Decline %{assignments} as available',\n contact_assigner: 'This game requires you to contact an assigner to be removed.',\n decline_assignment: \"If you decline this assignment, you'll be able to change your mind until you're removed by an assigner.\",\n other_assignments: 'You also have other assignments at this time that conflict with this game.',\n accept_another_assignment: 'Accept another assignment at this time instead',\n removed_from_game: '%{name} will be removed from this game',\n request_removed: 'Your request will be removed',\n remove_request_from_game: 'Remove your request for this game',\n remove_official_from_assignment: 'Remove official from this assignment',\n assigners_will_be_notified: \"Assigners will be notified that you have requested this game. You'll still have to confirm your assignment if you've been assigned to this game.\",\n select_new_assignment: 'Select the new assignment for %{name}',\n swap_choice: '%{name} will be switched to %{position}',\n swap_current_position: 'This is the current position',\n swap_delegated: 'This assignment is delegated to another assigner',\n swap_settings_help: 'You can also change the available positions by changing the officiating system in the game settings below.',\n position_unassigned: 'This position is unassigned.',\n official_already_assigned: 'An official is already assigned to this position.',\n select_official_to_view_availability: 'Select an official to view their availability.',\n hidden_by_filter: 'officials are hidden by filters',\n official_from: 'official from',\n scorekeeper_from: 'scorekeeper from',\n contact_game_assigners_officials: \"Contact this game's assigners and officials\",\n all_assignments_confirmed: 'All assignments confirmed.',\n draft_status_description: 'Not visible to officials',\n assigned_by: `Assigned by %{name}`,\n time_display: `All times are shown in <strong>%{timezone}</strong>`,\n time_display_local: `Times are in your local timezone (%{timezone})`,\n time_display_other: `Times are in %{timezone}`,\n delegate: 'This position can be delegated to another assigner. As the game assigner, you can change or remove delegation at any time.',\n update_official_presence_status: \"Update official's presence status\",\n mark_as_no_show: 'Mark %{name} as no show',\n undo_no_show: \"This will restore %{name}'s status as confirmed.\"\n },\n },\n alerts: {\n loading_game_error: 'Error loading game history. You may need to refresh or try again later.',\n no_changes_made: 'No changes have been made to this game.',\n no_edit_permission: 'You do not have access to edit this game.',\n no_change_date_permission: \"The scheduling organization has disabled changing the date for shared draft games.\",\n loading: {\n assignments: 'Loading assignments...',\n assignment_history: 'Loading assignment history...',\n availability: 'Loading availability...',\n },\n status: {\n completed: 'This game has been completed.',\n assigning_not_configured: 'Assigning is not configured for this game.',\n integration: `This game is being assigned outside of ${appName}.`,\n conflict: 'This game has a scheduling conflict',\n cancelled: 'This game is cancelled',\n postponed: 'This game is postponed',\n incomplete: 'This is an incomplete game in the past',\n rescheduled: 'This game has been rescheduled',\n rink_changed: \"This game's rink has changed\",\n },\n assigning_reason: {\n no_office: 'Assigning is not possible for this game because no \"assigner determination\" could be resolved.',\n no_system: \"Assigning is not possible for this game because %{name} or any of its parent organizations does not have any assign systems for this category.\",\n assign_settings_disabled: 'Assigning is not possible for this game because assigning is disabled.',\n },\n assignment: {\n load_assignment_panel_error: 'Unable to load assignment panel',\n load_assignments_error: 'Unable to load assignments',\n status_of_assignments: 'Assignments are currently in %{status} status. Officials will not be notified yet.',\n official_history_error: 'Failed to load official history.',\n no_assignment: 'No assignments this season.',\n this_position_already_assigned: 'This position is already assigned to someone else.',\n already_assigned_to_game: \"You're already assigned to this game. You'll need to decline your current assignment before you can request this.\",\n official_details_error: 'Unable to load official details.',\n load_official_schedule_error: 'Failed to load official schedule.',\n no_game_and_availability: 'This official has no games and availability on this day.',\n missing_settings: 'Missing settings',\n no_pay_structure: 'This game does not have a pay structure configured. This can be changed in the settings below.',\n no_pay_structure_delegated: 'This delegated assignment does not have a pay structure configured.',\n assigned_by: 'This position is assigned by %{office} and paid by %{payOffice}',\n assigned_by_delegated: 'This position is delegated to be assigned by %{office} and paid by %{payOffice}',\n suggestions: {\n title: 'Suggestions',\n title_alt: 'No Suggestions',\n no_requests_or_ready_officials: 'There are no requests or ready officials for this game',\n officials_requested_this_game_already: 'Some officials have requested this game or are already at this venue',\n no_request_officials_ready: 'No requests, but some officials are ready',\n no_ready_officials: 'There are no ready officials for this game',\n officials_already_arena: 'Some officials are already at this venue',\n no_officials_this_arena: 'No officials are already at this venue, but some are ready',\n },\n no_officials_required: {\n title: 'No officials are required for this game',\n assign_official: 'To assign officials, change the Officiating System setting below',\n },\n assigner: {\n ready: {\n title: 'Ready',\n officiate_game: 'This official is able to officiate this game',\n },\n confirmed: {\n title: 'Confirmed',\n accepted: 'This official has accepted this position',\n accepted_other: 'This official has accepted another position for this game',\n },\n pending: {\n title: 'Pending',\n unconfirmed: 'This official has been assigned to this position and has not yet accepted',\n unconfirmed_other: 'This official has been assigned to another position for this game and has not yet accepted',\n },\n declined: {\n title: 'Declined',\n change_response: 'This official has <strong>declined</strong> this position. They can still change their mind and accept until you remove them',\n change_response_other: 'This official has <strong>declined</strong> another position for this game. They can still change their mind and accept until you remove them',\n },\n no_show: {\n title: 'No show',\n removed: 'The scorekeeper removed this official from the scoresheet as they did not show',\n },\n requested: {\n title: 'Requested',\n requested: 'This official requested this game',\n },\n removed: {\n title: 'Removed',\n removed: 'Official was removed after they previously %{message} this game',\n },\n expired: {\n title: 'Expired',\n expired: \"Official's qualification has <strong>expired</strong> at this time\",\n },\n suspended: {\n title: 'Suspended',\n suspended: \"This official is <strong>suspended</strong> as a %{positionGroup} since %{date} %{duration}\",\n duration: 'for %{smart_count} game |||| for %{smart_count} games',\n duration_expiry: ' or until %{date}',\n duration_indefinite: 'for an indefinite period'\n },\n eligibility: {\n title: 'Ineligible',\n minimum_level: '<strong>Minimum %{position} level</strong> has not been met for this game',\n no_grade: 'A grade has not yet been entered for this official',\n minimum_grade: '<strong>Minimum %{position} grade</strong> has not been met for this game',\n minimum_age: '<strong>Minimum Age</strong> has not been met for this game',\n no_age: 'Official has not specified their birthdate yet',\n limit_reached: 'Official has reached the daily limit of %{smart_count} game |||| Official has reached the daily limit of %{smart_count} games',\n category: 'Official is not eligible for this category',\n },\n conflicts: {\n title: 'Conflicts',\n team_conflict: 'Official has a <strong>team conflict</strong> for this game',\n rostered: 'Official is <strong>rostered</strong> to a team playing this game',\n },\n schedule: {\n title: 'Schedule',\n roster_conflict: 'Official is <strong>rostered</strong> to a team <strong>playing another game</strong> at this time',\n affiliate_conflict: 'Official is an <strong>affiliated player</strong> on a team <strong>playing another game</strong>',\n game_conflict: 'Official has <strong>accepted another assignment</strong> at this time',\n game_overlap: 'Official has another assignment at this time but has not yet responded',\n },\n travel: {\n title: 'Travel',\n title_assigned_today: 'Assigned Today',\n another_venue: 'This official will be <strong>at another venue</strong> within 1 hour of this game',\n this_venue: 'This official is assigned to this venue within 3 hours of this game',\n assigned_today: 'This official is assigned <strong>today</strong>',\n },\n available: {\n title: 'Available',\n assigned: \"Official has indicated that they're available during this time\",\n },\n unavailable: {\n title: 'Unavailable',\n unavailable: 'Official made themselves <strong>unavailable</strong> at this time',\n no_availability: 'Official has not set any availability at this time',\n no_availability_office: 'Official does not have this organization in their availability settings',\n no_availability_arena: 'Official does not have this venue in their availability settings',\n },\n account: {\n title: 'Account',\n unverified: 'This official has no verified contact emails and <strong>will not receive assignment notifications</strong>',\n invited: 'This official does not have an account and is <strong>unable to respond to assignments</strong>. An invite was sent to this official',\n unregistered: 'This official does not have an account and is <strong>unable to respond to assignments</strong>',\n },\n },\n assignee: {\n ready: {\n title: 'Ready',\n officiate_game: \"You're able to officiate this game\",\n },\n confirmed: {\n title: 'Confirmed',\n accepted: \"You've accepted this game assignment\",\n },\n pending: {\n title: 'Pending',\n confirm_conflict: \"You've been assigned to this game - accept or decline to acknowledge the scheduling change\",\n confirm: \"You've been assigned to this game - accept to confirm attendance\",\n },\n declined: {\n title: 'Declined',\n change_response: 'You are still assigned and can change your response until an assigner removes you from this game',\n change_response_other: 'You have declined <strong>declined</strong> another position for this game. You can still change your mind and accept until an assigner removes you from this game',\n },\n no_show: {\n title: 'No show',\n removed: 'The scorekeeper removed you from the scoresheet for not showing up',\n },\n requested: {\n title: 'Requested',\n requested: \"You've requested this game\",\n },\n removed: {\n title: 'Removed',\n removed: \"You've been removed after you %{message} this game\",\n },\n expired: {\n title: 'Expired',\n expired: \"Your officiating qualification has <strong>expired</strong> at this time\",\n },\n suspended: {\n title: 'Suspended',\n suspended: \"You've been <strong>suspended</strong> as a %{positionGroup} since %{date} %{duration}\",\n },\n eligibility: {\n title: 'Ineligible',\n minimum_level: \"You haven't met the <strong>minimum %{position} level</strong> for this game\",\n no_grade: 'A grade has not yet been entered for you',\n minimum_grade: \"You haven't met the <strong>minimum %{position} grade</strong> for this game\",\n minimum_age: \"You haven't met the <strong>Minimum Age</strong> for this game\",\n no_age: 'You have not set your birthday yet. Please update your profile',\n limit_reached: 'You have reached the daily limit of %{smart_count} game |||| You have reached the daily limit of %{smart_count} games',\n category: 'You are not eligible for this category',\n },\n conflicts: {\n title: 'Conflicts',\n team_conflict: 'You have a <strong>team conflict</strong> for this game',\n rostered: \"You're <strong>rostered</strong> to a team playing this game\",\n },\n schedule: {\n title: 'Schedule',\n roster_conflict: \"You're rostered to a team <strong>playing another game</strong> at this time\",\n game_conflict: \"You've <strong>accepted another assignment</strong> at this time\",\n game_overlap: \"You have another assignment at this time that you haven't responded to yet\",\n },\n travel: {\n title: 'Travel',\n title_assigned_today: 'Assigned Today',\n another_venue: \"You're <strong>assigned to another venue</strong> within 1 hour of this game\",\n this_venue: \"You're assigned to this venue within 3 hours of this game\",\n assigned_today: \"You're assigned <strong>today</strong>\",\n },\n available: {\n title: 'Available',\n assigned: \"Your calendar indicates that you're available at this time and venue\",\n },\n unavailable: {\n title: 'Unavailable',\n unavailable: \"You've made yourself <strong>unavailable</strong> at this time\",\n no_availability: \"You haven't set any availability at this time\",\n no_availability_office: \"You haven't included this assigner in your availability settings\",\n no_availability_arena: \"You haven't included this venue in your availability settings\",\n },\n account: {\n title: 'Account',\n unverified: 'You need to <strong>verify your contact email</strong> to receive assignment notifications',\n invited: \"You don't have an account and will be unable to respond to assignment. An invite was sent to you\",\n unregistered: \"You don't have an account and will be unable to respond to assignment\",\n }\n }\n }\n },\n helpers: {\n split: 'Optional - use to split surface',\n number: 'Generated by draft',\n team: 'Optional - TBD if no team is specified',\n comments: 'Optional - displayed on public schedule',\n conflicts: 'Resolve conflicts or status will be enforced as Conflict',\n reset_assigner: 'Replace the existing assigner based on the assigner determination rules',\n assignment: {\n delegated_tooltip: 'Delegated to %{office}',\n pay_delegated_tooltip: 'Paid by %{office}',\n notification_will_be_sent: \"A notification will be sent to this game's %{recipients} and assigned game officials.\",\n note_for_accepted_game: 'Optional - This note will be used for your accepted game.',\n delegated_pay_office: 'Pay will be handled by %{office}',\n },\n scoresheet_notes: 'Optional - these notes will be publicly visible on the scoresheet',\n admin_notes: 'Optional - these notes will be private to scorekeepers, officials, and administators only',\n using_slot: 'Using a time slot',\n use_next_sequence: 'Use next available game sequence number',\n },\n notifications: {\n assignment: {\n accepted_game: 'Accepted game %{number}',\n declined_game: 'Declined game %{number}',\n requested_game: 'Requested game %{number}',\n official_assigned_to_game: 'Official assigned to game %{number}',\n remove_official_from_game: 'Removed official from game %{number}',\n official_set_to_no_show: 'Official marked as no show',\n request_removed_from_game: 'Your request has been removed from game %{number}',\n status: {\n assignee: {\n requested: \"You've requested this game\",\n pending: 'Pending assignment, waiting for your response.',\n confirmed: 'Your assignment is confirmed.',\n declined: \"You've declined this assignment.\",\n }\n },\n errors: {\n accept_overlaps: 'Cannot accept due to overlapping assignment',\n accept_consecutive: 'Cannot accept due to consecutive assignment',\n accept_consecutive_overlaps: 'Cannot accept due to consecutive overlapping assignment',\n decline_consecutive: 'Cannot decline due to consecutive assignment'\n }\n },\n recalculating: 'Recalculating...',\n game_status_changed: 'Status Changed',\n change_game_status: 'Changed %{smart_count} game status to %{status} |||| Changed %{smart_count} game statuses to %{status}',\n change_game_status_error: 'Unable to change game status |||| Unable to change game statuses',\n delegated_games: 'Delegated %{smart_count} game successfully |||| Delegated %{smart_count} games successfully',\n delegated_games_error: 'Unable to delegate game |||| Unable to delegate games',\n changed_assigner_games: 'Changed assigner for %{smart_count} game successfully |||| Changed assigner for %{smart_count} games successfully',\n changed_assigner_games_error: 'Unable to change game assigner |||| Unable to change game assigners',\n certified_games: 'Certified %{smart_count} game |||| Certified %{smart_count} games',\n certified_games_error: 'Something went wrong while certifying the game |||| Something went wrong while certifying games',\n },\n validations: {\n invalid_date: 'Invalid date',\n invalid_time: 'Invalid time',\n must_have_date: 'Must always have a date if there is a time entered',\n must_have_date_both_times: 'Must always have both a Start Time and End Time if there is a time entered',\n end_before_start: 'End Time must always be after Start Time',\n invalid_time_check_am_pm: 'Invalid time - check AM/PM',\n invalid_must_be_same_day: 'Must be on the same day',\n spaces_not_allowed: 'Spaces are not allowed',\n after_start_time: 'Must be after start time',\n overlaps: 'This game overlaps with an existing game',\n number_exists: 'Already exists in this schedule',\n conflicts: 'Resolve conflicts or change to an inactive status',\n before_schedule_date: 'Before schedule start date',\n after_schedule_date: 'After schedule end date',\n team_not_in_cross_scheduling_groups: 'Team is not in any of the selected groups',\n team_in_both_cross_scheduling_groups: 'Team is in both selected groups',\n teams_in_same_cross_scheduling_group: 'Home and away team are both in one of the selected groups',\n unavailable_slot: 'This time slot is unavailable',\n overlapping_slot: 'Overlapping time slot',\n limit_date_change: 'You are unauthorized to change the date'\n },\n values: {\n status: STATUSES,\n assignment: {\n status: {\n Active: 'Active',\n Draft: 'Draft',\n },\n position: {\n Referee: 'Referee',\n Linesperson: 'Linesperson',\n LinespersonTwo: 'Linesperson 2',\n LinespersonThree: 'Linesperson 3',\n Official: 'Official',\n Scorekeeper: 'Scorekeeper',\n Timekeeper: 'Timekeeper',\n Supervisor: 'Supervisor',\n Participant: 'Participant',\n },\n position_short: {\n Referee: 'R',\n Linesperson: 'L',\n LinespersonTwo: 'L2',\n LinespersonThree: 'L3',\n Official: 'O',\n Scorekeeper: 'SK',\n Timekeeper: 'TK',\n Supervisor: 'S',\n }\n }\n },\n tooltips: {\n forfeited: 'This game was forfeited by %{team}',\n available_official: `\n <div>\n An official is available if:\n <ul>\n <li>\n They have not been assigned to another game at the same time\n </li>\n <li>\n They have set themselves as available for this time\n </li>\n <li>\n They have this organization in their availability settings\n </li>\n <li>\n They have this venue in their availability settings\n </li>\n <li>\n They do not have any travel conflicts\n </li>\n </ul>\n </div>\n `,\n eligible_official: `\n <div>\n An official is eligible if:\n <ul>\n <li>\n They have not confirmed another game assignment at the same time\n </li>\n <li>\n They have the minimum level required for this game\n </li>\n <li>\n They have the minimum grade required for this game\n </li>\n <li>\n They have met the minimum age requirement\n </li>\n <li>\n They have not reached the daily limit of games\n </li>\n <li>\n They are eligible for this game's category\n </li>\n </ul>\n </div>\n `,\n non_expired_official: 'Officials with non-expired qualifications',\n registered_official: 'Officials with a Spordle account',\n new_official: \"Officials with only qualifications from this game's season\",\n local_official: 'Officials with at least one qualification from or under this assignment organization',\n ignore_arena_availability: 'Exclude venue availability when using the \"Available officials\" filter',\n },\n },\n gameEvents: {\n name: 'Game Event |||| Game Events',\n fields: {\n eventType: 'Type',\n event: 'Event',\n meta: 'Metadata',\n },\n labels: {\n card: {\n title: 'Game Events',\n },\n event_id: 'Event ID',\n created: 'Created',\n account: 'Account',\n device: 'Device',\n transaction: 'Transaction',\n received: 'Received',\n game_number: 'Game Number',\n start_time: 'Start Time',\n end_time: 'End Time',\n signatory: 'Signatory',\n signature: 'Signature',\n scorekeeper: 'Scorekeeper',\n timekeeper: 'Timekeeper',\n position: 'Position |||| Positions',\n notes: 'Notes',\n game_time: 'Game Time',\n emails: 'Emails',\n system: 'System',\n history: 'History',\n homeScore: 'Home Score',\n awayScore: 'Away Score',\n goal: {\n id: 'Goal ID',\n scorer: 'Scorer',\n assists: 'Assist(s)',\n type: 'Type',\n powerplay: 'Powerplay',\n shorthanded: 'Shorthanded',\n empty_net: 'Empty Net',\n penalty_shot: 'Penalty Shot',\n own_goal: 'Own Goal'\n },\n penalty: {\n id: 'Penalty ID',\n infraction: 'Infraction',\n served_by: 'Served By',\n },\n goalie_change: {\n id: 'Goalie Change ID',\n goalie: 'Goalie',\n new_goalie: 'New goalie put in',\n },\n periods: {\n 1: '1st Period',\n 2: '2nd Period',\n 3: '3rd Period',\n OT: 'OT Period',\n SO: 'Shootouts',\n },\n delete_events: 'Delete Game Event |||| Delete Game Events'\n },\n messages: {\n offline_for_duration: 'Offline for %{duration}',\n time_skew_duration: 'Time skewed by %{duration}',\n game_cancelled: 'Game cancelled',\n game_completed: 'Scoresheet completed',\n game_disapproved: 'Scoresheet disapproved',\n game_certified: 'Scoresheet certified',\n game_decertified: 'Scoresheet decertified',\n game_deleted: 'Game has been deleted',\n game_reset: 'Scoresheet reset',\n requested: 'requested %{position}',\n assigned_as: 'assigned as %{position}',\n accepted_assignment: 'accepted assignment',\n declined_assignment: 'declined assignment',\n added_as: 'added as %{position}',\n changed_to: 'changed to %{position}',\n removed: 'removed',\n confirm_delete_events: 'Are you sure you want to delete this game event? |||| Are you sure you want to delete these game events?'\n },\n values: {\n eventType: {\n gameCreated: 'Game Created',\n gameRescheduled: 'Game Rescheduled',\n gameUpdated: 'Game Updated',\n gameDeleted: 'Game Deleted',\n gameForfeited: 'Game Forfeited',\n gameStarted: 'Game Started',\n gameEnded: 'Game Ended',\n assignSettingsUpdated: 'Assigning Settings Updated',\n lineupUpdated: 'Lineup Updated',\n lineupApproved: 'Lineup Approved',\n lineupExtraAdded: 'Lineup Extra Added',\n lineupExtraRemoved: 'lineup Extra Removed',\n officialDelegated: 'Official Delegated',\n officialRequested: 'Official Requested',\n officialAssigned: 'Official Assigned',\n officialAccepted: 'Official Accepted',\n officialDeclined: 'Official Declined',\n officialAdded: 'Official Added',\n officialUpdated: 'Official Updated',\n officialRemoved: 'Official Removed',\n keepersUpdated: 'Keepers Updated',\n goalScored: 'Goal Scored',\n goalEdited: 'Goal Edited',\n goalDeleted: 'Goal Deleted',\n penaltyStarted: 'Penalty Started',\n penaltyEnded: 'Penalty Ended',\n penaltyEdited: 'Penalty Edited',\n penaltyDeleted: 'Penalty Deleted',\n goalieChanged: 'goalie Changed',\n goalieChangeDeleted: 'Goalie Change Deleted',\n goalieChangeEdited: 'Goalie Change Edited',\n settingsUpdated: 'Settings Updated',\n notesUpdated: 'Notes Updated',\n goalieShotsUpdated: 'Goalie Shots Updated',\n scoreUpdated: 'Score Updated',\n scoresheetApproved: 'Scoresheet Completed',\n scoresheetDisapproved: 'Scoresheet Disapproved',\n throwsInningsUpdated: 'Throws and Innings Pitched Updated',\n certificationFlagsUpdated: 'Flags Updated',\n scoresheetCertified: 'Scoresheet Certified',\n scoresheetDecertified: 'Scoresheet Decertified',\n scoresheetReset: 'Scoresheet Reset'\n }\n },\n notifications: {\n deleted: '%{smart_count} game event deleted |||| %{smart_count} game events deleted',\n delete_error: 'Could not delete game events'\n }\n },\n gameAffiliates: {\n name: 'Affiliate |||| Affiliates',\n fields: {\n gameId: 'Game',\n teamId: 'Team',\n participantId: 'Participant',\n positions: 'Positions',\n number: 'Number',\n officeId: 'Organization'\n },\n actions: {\n add: 'Add Affiliate',\n },\n labels: {\n card: {\n title: 'Affiliates'\n },\n edit: 'Update Affiliate',\n }\n },\n participants: {\n name: 'Person |||| People',\n fields: {\n participantId: 'Person',\n fullName: 'Name',\n firstName: 'First Name',\n lastName: 'Last Name',\n name: 'Name',\n HCRId: 'Member ID',\n email: 'Email Address',\n accountEmail: 'Account Email',\n phone: 'Phone Number',\n isPrimary: 'Primary',\n },\n actions: {\n edit: 'Edit Participant',\n invite_sso: 'SMA Invite'\n },\n labels: {\n card: {\n title: 'Participant',\n },\n tabs: {\n summary: 'Summary',\n profile: 'Profile',\n schedule: 'Schedule',\n registrations: 'League',\n officiating: 'Officiating',\n settings: 'Settings',\n },\n tooltips: {\n create_participant: 'Participant will be created',\n picture_update_in_id: 'To change the picture, please update in Spordle ID'\n },\n add: 'New Participant',\n account_invitation: 'Account Invitation',\n account_invitation_sso: 'Spordle My Account Invitation',\n availability: {\n card: {\n title: 'Availability',\n subtitle: 'Select the dates and times that you are available to officiate games, or block out times that you are unavailable.',\n },\n title: 'My Availability',\n updated: 'Availability updated!',\n saved: 'Saved',\n saving: 'Saving...',\n note: 'Availability note',\n add_time: 'Add time',\n multiple: 'Multiple',\n settings: 'Availability Settings',\n add_associations: 'Add associations',\n assigners_updated: 'Assigners updated',\n assigners_error: 'Error updating assigners',\n venues_updated: 'Venues updated',\n venues_error: 'Error updating venues',\n categories_updated: 'Categories updated',\n categories_error: 'Error updating categories',\n assigner_availabilities: {\n own_profile: {\n title: 'My Assigners',\n select_associations: 'Select the associations to make yourself available to officiate games for.',\n },\n other_profile: {\n title: \"Official's Assigners\",\n select_associations: 'Select the associations that this official is available to officiate games for.',\n },\n },\n venues_availabilities: {\n own_profile: {\n title: 'My Venues',\n select_venues: \"Select the venues that you are willing to regularly travel to. If you don't select any, you'll be available for all venues.\",\n },\n other_profile: {\n title: \"Official's Venues\",\n select_venues: 'Select the venues that this official is available to officiate games at. If no venues are selected, the official will be available for all venues.',\n },\n },\n categories_availabilities: {\n own_profile: {\n title: 'My Categories',\n },\n other_profile: {\n title: \"Official's Categories\",\n },\n alerts: {\n available_to_all_title: 'Available to all categories',\n available_to_all_body: 'Add positions and categories to limit their eligibility to specific categories.',\n },\n chips: {\n all: 'Eligible To All',\n none: 'Not Eligible',\n },\n labels: {\n no_categories: 'No categories...'\n }\n }\n },\n status: {\n roles_title: 'Missing roles',\n roles_body: \"This participant cannot create an account until they're rostered to a team, are qualified as an official, or have an administrative role.\",\n roles_unauthorized: \"This participant cannot use their account until they're rostered to a team, are qualified as an official, or have an administrative role.\",\n account_title: 'No account',\n account_body: \"This participant hasn't registered an account yet. You can invite them to register.\",\n invited_title: 'Invited',\n invited_body: 'An invite has been sent to this participant. You can resend the invitation if necessary.',\n contacts_title: 'No contact',\n contacts_body: 'This participant cannot receive notifications until a contact is added and verified. This does not impact the ability to use their account.',\n unverified_title: 'Not receiving notifications',\n unverified_body: 'This participant will not receive notifications until they have a verified contact with notifications enabled. This does not impact the ability to use their account.',\n roles: 'Roles',\n types: {\n Admin: 'Admin',\n League: 'League',\n Assigner: 'Assigner',\n Staff: 'Staff',\n Player: 'Player',\n Official: 'Official',\n Coach: 'Coach',\n Scorekeeper: 'Scorekeeper',\n Monitor: 'Monitor',\n }\n },\n },\n messages: {\n search_by_name: 'Enter a name to start searching',\n send_link: 'This will send a link which may be used to create a new account or connect this profile to an existing account.',\n link_sso: 'This will create a new Play account and link it to Spordle My Account',\n create_sma: 'Do you want to also create a new Spordle My Account user with this email?',\n availability: {\n placeholder: `<strong>Pick a date on the calendar to <br /> view and update availability.</strong>\n <p>Select <em>Multiple</em> to set and copy the same times across multiple dates.</p>`,\n empty_slot: \"You haven't added any time yet\",\n save_for: 'Save for ',\n number_dates: '%{number} dates',\n available: 'I %{input} be available',\n thing_will: 'will',\n thing_will_not: 'will not',\n person_will: 'will',\n person_will_not: 'will not',\n to: 'to',\n search_by_association: 'Search by association name',\n enter_name_search: 'Enter a name to start searching',\n },\n },\n errors: {\n no_sma_user_found: 'No Spordle My Account user found',\n failed_sma_creation: 'Unable to create Spordle My Account user',\n failed_to_get_user: 'Failed to get Spordle My Account user',\n failed_sma_retrieval: 'Unable to retrieve Spordle My Account entity',\n email_exists: 'Email is already registered in Play',\n already_linked: 'A Play account is already linked to this participant',\n sma_exists: 'This Spordle My Account is already linked',\n },\n alerts: {\n search_by_name_hockeyid: 'Enter a name or Member ID above to start searching...',\n availability: {\n loading_associations: 'Loading associations...',\n selection: {\n title: 'Available to all venues',\n own_profile: {\n available_to_all_arenas: \"Search above if you would like to optionally limit which venues you're available to.\",\n },\n other_profile: {\n available_to_all_arenas: \"Search above if you would like to optionally limit which venues the official is available to.\",\n },\n },\n no_associations: {\n title: 'No associations selected',\n own_profile: {\n search_make_yourself_available: 'Search above to make yourself available to an association.',\n not_available_to_assigners: 'You will not be available to any assigners or able to view any games until you select an association.',\n },\n other_profile: {\n search_make_yourself_available: 'Search above to make the official available to an association.',\n not_available_to_assigners: 'The official will not be available to any assigners or able to view any games until an association is selected.',\n }\n },\n },\n limited_assigner_selection_title: 'Limited Assigner Selection',\n limited_assigner_selection_message: 'You have qualifications in multiple branch organizations, but some have disabled the ability to select your assigners. You can only select assigners from organizations where this setting is enabled.',\n no_assigner_selection_title: 'Assigner Selection Disabled',\n no_assigner_selection_message: 'All branch organizations have disabled the ability to select your assigners. You cannot select any assigners at this time.',\n },\n helpers: {\n note: 'Optional - will be included in the invitation',\n availability: {\n note: 'This note will be visible in the assignment panel for games during this time.',\n },\n alternateName: \"INTERNAL ONLY - This will modify the public name of the participant\",\n },\n notifications: {\n invitation_sent: 'Invitation sent!',\n sso_created_and_linked: 'Play Account created and linked to Spordle My Account successfully',\n sma_created_and_linked: 'Spordle My Account and Play account created and linked successfully'\n }\n },\n participantMemberTypes: {\n name: 'Membership Fee |||| Membership Fees',\n fields: {\n seasonId: 'Season',\n memberTypeId: 'Type',\n officeId: 'Organization',\n isActive: 'Active',\n },\n labels: {\n card: {\n title: 'Membership Fees',\n subtitle: 'Spordle ID Member Types'\n },\n affiliated: 'Membership Fee',\n }\n },\n qualifications: {\n name: 'Qualification |||| Qualifications',\n fields: {\n participantId: 'Participant',\n level: 'Level',\n grade: 'Grade',\n grades: {\n Referee: 'Referee Grade',\n Linesperson: 'Linesperson Grade',\n },\n qualificationCategory: {\n types: 'Qualification'\n },\n officeId: 'Organization',\n seasonId: 'Season',\n expiry: 'Expires',\n age: 'Age',\n qualificationCategoryId: 'Category',\n },\n actions: {\n add: 'Add Qualification',\n },\n labels: {\n card: {\n title: 'Qualifications',\n },\n edit: 'Update Qualification',\n grades_file: 'Grades File',\n qualifications_file: 'Qualifications File',\n import_qualifications: 'Import Qualifications',\n import_grades: 'Import Grades',\n official_level: 'Official Level',\n qualification_category: 'Qualification Category',\n },\n messages: {\n drop_qualifications_csv: 'Drop your qualifications file (.csv) here',\n drop_grades_csv: 'Drop your grades file (.csv) here',\n import_tool_grades: \"To use this import tool, upload a CSV file with columns for the official's unique Member ID, Referee Grade, and Linesperson Grade.\",\n import_tool_qualifications: \"To use this import tool, upload a CSV file with columns for the official's unique Member ID, First Name, Last Name, Official Level, Referee Grade (optional), Linesperson Grade (optional), and Expiry.\",\n },\n alerts: {\n create_new_participants: '<strong>Use with caution.</strong> This import tool will create new participants that do not match existing Member IDs.',\n },\n helpers: {\n select_columns: \"You'll be asked to select columns after selecting your file\",\n valid_grades: '%{number}/%{total} rows have valid grades',\n valid_qualifications: '%{number}/%{total} rows have valid qualifications',\n participant_not_matched: 'Participants will be ignored if a qualification is not found under this organization.',\n match_existing_participant: 'This Member ID is used to match an existing participant or create a new participant for this qualification.',\n },\n notifications: {\n grades_updated: '%{smart_count} official grade was updated. |||| %{smart_count} official grades were updated.',\n qualifications_updated: '%{smart_count} official qualification was updated. |||| %{smart_count} official qualifications were updated.',\n import_grades_error: 'Unable to import grades.',\n import_qualifications_error: 'Unable to import qualifications.',\n },\n validations: {\n invalid_grade: 'Some rows have an invalid grade',\n level: 'Must be greater than or equal to 0.',\n invalid_date: 'Some values do not include a valid date (YYYY-MM-DD)',\n },\n values: {\n level: {\n zero: '0',\n level_zero: 'Level 0',\n },\n },\n },\n qualificationCategories: {\n values: {\n types: {\n Official: 'Official',\n Scorekeeper: 'Scorekeeper'\n }\n }\n },\n officialOffices: {\n filters: {\n officialName: 'Official Name',\n effectiveOfficials: 'Include Sub-organizations'\n },\n fields: {\n types: 'Types',\n },\n labels: {\n add_officials: 'Add Qualified Officials to %{name}',\n },\n actions: {\n add_officials: 'Add Officials',\n },\n notifications: {\n officials_added: '%{smart_count} official was added to the office. |||| %{smart_count} officials were added to the office.',\n add_officials_error: 'Unable to add officials.',\n }\n },\n officials: {\n name: 'Official |||| Officials',\n fields: {\n participantId: 'Participant',\n officeId: 'Organization',\n payOfficeId: 'Pay Organization',\n seasonId: 'Season',\n includeSubOffices: 'Include Sub-Organizations',\n venueId: 'Official Venue',\n categoryId: 'Category',\n participant: 'Official',\n qualificationOrganization: 'Qualification Organization',\n },\n actions: {\n add: 'Add Official',\n remove_all: 'Remove All',\n },\n labels: {\n card: {\n title: 'Officials',\n subtitle: 'Available officials for assigning games.'\n },\n edit: 'Update Official',\n official_id: 'Official ID',\n position: 'Position',\n team: 'Team',\n file: 'Officials File',\n import: 'Import Officials',\n selected_officials: 'Selected Officials (%{smart_count})',\n },\n messages: {\n drop_csv: 'Drop your officials file (.csv) here',\n import_tool: \"To use this import tool, upload a CSV file with columns for the official's unique Member ID.\",\n no_officials_selected: 'No officials selected',\n },\n filters: {\n available: 'Available officials',\n eligible: 'Eligible officials',\n nonExpired: 'Non-expired officials',\n registered: 'Registered officials',\n new: 'New officials',\n local: 'Local officials',\n ignore_arena: 'Ignore venue availability',\n matchAllAttributes: 'Match all',\n matchAny: 'Match any',\n },\n helpers: {\n match_existing_participant: 'Participants will be ignored if they are not a qualified official.',\n optional: 'Optional - Name or Member ID',\n },\n notifications: {\n added: '%{smart_count} official was added. |||| %{smart_count} officials were added.',\n unqualified: '%{smart_count} failed because they were unqualified.',\n import_error: 'Unable to import qualifications.',\n },\n },\n scorekeepers: {\n name: 'Scorekeeper |||| Scorekeepers',\n labels: {\n card: {\n title: 'Scorekeepers',\n subtitle: 'Available scorekeepers for assigning games.'\n }\n }\n },\n officialConflicts: {\n name: 'Conflict |||| Conflicts',\n fields: {\n seasonId: 'Season',\n participantId: 'Participant',\n targetId: 'Conflict',\n },\n actions: {\n add: 'Add Conflict',\n },\n labels: {\n card: {\n title: 'Conflicts',\n subtitle: \"The following games are scheduled at the same time with the same teams or venue. If no active games are listed, this game's status may be changed to Active.\",\n },\n edit: 'Update Conflict',\n add_team: 'Add Team',\n }\n },\n offices: {\n name: 'Organization |||| Organizations',\n fields: {\n officeId: 'Organization',\n name: 'Name',\n type: 'Type',\n HCRId: 'Organization ID',\n parentId: 'Parent Organization',\n logo: 'Logo',\n timezone: 'Timezone',\n },\n actions: {\n add: 'Add Organization',\n edit: 'Edit Organization',\n internal: 'Internal Actions',\n syncOffices: 'Sync organizations',\n syncTeams: 'Sync teams',\n syncOfficials: 'Sync qualifications',\n syncRegistrations: 'Sync registrations',\n },\n labels: {\n card: {\n title: 'Organizations',\n sub_offices_title: 'Sub Organizations',\n },\n tabs: {\n summary: 'Summary',\n teams: 'Teams',\n surfaces: 'Surfaces',\n schedules: 'Schedules',\n people: 'People',\n assigning: 'Assigning',\n scheduler: 'Scheduler',\n rulebook: 'Rulebook',\n settings: 'Settings',\n },\n add: 'New Organization',\n edit: 'Update Organization',\n members: 'Organization Members',\n availability: {\n card: {\n title: 'Availability',\n subtitle: 'Select the dates and times that are available, or block out times that are unavailable',\n },\n title: 'Organization Availability',\n note: 'Availability note',\n updated: 'Availability updated!',\n },\n analyzeSchedules: 'Analyze Schedules'\n },\n messages: {\n availability: {\n available: 'This organization %{input} be available',\n }\n },\n helpers: {\n name: 'Organizations should generally not contain the division.',\n availability: {\n note: 'This note will be visible when scheduling games during this time.',\n }\n },\n validations: {\n same_office: 'Parent cannot be the same organization',\n },\n values: {\n type: {\n Branch: 'Branch',\n Region: 'Region',\n District: 'District',\n Association: 'Association',\n Administrative: 'Administrative',\n Historical: 'Historical',\n League: 'League',\n Tournament: 'Tournament',\n Zone: 'Zone',\n Organization: 'Federation',\n Cup: 'Cup',\n },\n scheduleType: TYPES,\n }\n },\n officeMembers: {\n name: 'Organization Member |||| Organization Members',\n fields: {\n officeId: 'Organization',\n },\n actions: {\n add: 'Add Organizations',\n },\n labels: {\n card: {\n title: 'Organization Members',\n },\n edit: 'Update Member',\n }\n },\n branchOfficeSettings: {\n name: 'Branch Organization Setting |||| Branch Organization Settings',\n fields: {\n certifiedOfficialChanges: 'Allow Change Officials on Certified Games',\n ff_suspensions: 'Suspensions',\n ff_suspension_disciplines: 'Suspension Disciplines',\n ff_incidents: 'Incidents',\n allowOfficialSetAssignOffices: 'Allow Officials Change Assign Organizations',\n },\n labels: {\n assignments: 'Official Assignments',\n tabs: {\n general: 'General',\n featureFlags: 'Feature Flags',\n },\n card: {\n title: 'Branch Settings'\n }\n },\n helpers: {\n certifiedOfficialChanges: 'Allow all organizations under this branch to change officials even if the game is certified by the league.',\n ff_suspensions: 'Allow the management of suspensions in games',\n ff_suspension_disciplines: 'Allow the management of additional discipline on suspensions (Discipline Committee)',\n ff_incidents: 'Allow incident reports in games',\n allowOfficialSetAssignOffices: 'Allow officials to change their assigners.',\n },\n actions: {\n edit: 'Edit Branch Settings'\n }\n },\n officeSettings: {\n name: 'Organization Setting |||| Organization Settings',\n fields: {\n skaterStatsHiddenDivisionIds: 'Player Stats Hidden Divisions',\n goalieStatsHiddenDivisionIds: 'Goalie Stats Hidden Divisions',\n standingsHiddenDivisionIds: 'Standings Hidden Divisions',\n boxScoreHiddenDivisionIds: 'Box Score Hidden Divisions',\n sportsmanshipPoints: 'Sportsmanship Points',\n contactsVisibility: 'Contacts Visibility',\n adminReports: 'Administrative Reports',\n teamReports: 'Team Reports',\n syncAttributes: 'HCR Sync Attributes',\n updateRosterFromLineups: 'Update Team Roster From Scoresheet',\n gameLength: 'Default Surface Reservation Time',\n surfaceOfficeId: \"Surface Organization\",\n conflictDrafts: 'Include draft games during enforcement',\n conflictLegacyDrafts: 'Include legacy draft games during enforcement',\n availabilityEnforcement: 'Availabilities',\n conflictEnforcement: 'Games',\n constraintEnforcement: 'Constraints',\n language: 'Default Language',\n homeTeamScorekeeping: 'Home Team Scorekeeping',\n awayTeamScorekeeping: 'Away Team Scorekeeping',\n scoringMode: 'Scoring Mode',\n penaltyMode: 'Penalty Mode',\n requireCertification: 'Game Certification',\n requireIncidentReports: 'Incident Reports',\n suspensionActivation: 'Suspension Activation',\n includeRegistrations: 'Include Registrations',\n allowExtras: 'Allow Extras',\n homeChangeStatus: 'Home Team Scheduling',\n maxScoreDiff: 'Max Score Differential',\n points: {\n Team: {\n win: 'Win',\n loss: 'Loss',\n tie: 'Tie',\n soWin: 'Shootout Win',\n soLoss: 'Shootout Loss',\n otWin: 'Overtime Win',\n otLoss: 'Overtime Loss',\n forfeitWin: 'Forfeit Win',\n forfeitLoss: 'Forfeit Loss',\n forfeitTie: 'Double Forfeit',\n sportsmanship: 'Sportsmanship',\n },\n Player: {\n goal: 'Goal',\n assist: 'Assist'\n },\n preview: `Win: %{win} Loss: %{loss} Tie: %{tie}`\n },\n enforcements: {\n preview: {\n conflictEnforcement: `Games: %{enforcementValue}`,\n availabilityEnforcement: `Availabilities: %{enforcementValue} `,\n constraintEnforcement: `Constraints: %{enforcementValue}`,\n }\n },\n deferDraftConflict: 'Defer conflict enforcement in drafts',\n deferLegacyDraftConflict: 'Defer conflict enforcement in legacy drafts',\n limitDateChange: 'Limit date change on shared draft games',\n rescheduleRequestsEnabled: 'Reschedule Requests',\n requiredRescheduleApprovals: 'Required Reschedule Approvals',\n groupingType: 'Team Grouping Type',\n },\n actions: {\n edit: 'Edit Settings',\n },\n labels: {\n card: {\n title: 'Organization Settings',\n },\n tabs: {\n general: 'General',\n scheduling: 'Scheduling',\n team_stats: 'Team Stats',\n player_stats: 'Player Stats',\n scoresheet: 'Scoresheet',\n advanced: 'Advanced',\n },\n schedule_stats: 'Schedule Stats',\n game_stats: 'Game Stats',\n stats_schema: {\n team: 'Team Stats Schema',\n skater: 'Player Stats Schema',\n goalie: 'Goalie Stats Schema',\n },\n standings_order: {\n team: 'Team Standings Order',\n skater: 'Player Standings Order',\n goalie: 'Goalie Standings Order',\n wins: 'Wins',\n losses: 'Losses',\n otl: 'Overtime Losses',\n ties: 'Ties',\n diff: 'Points Differential',\n points: 'Points',\n pointsPct: 'Points Percentage',\n pointsPerGame: 'Points Per Game',\n gamesPlayed: 'Games Played',\n goalAgainst: 'Goals Against',\n goalAgainstPerGame: 'Goals Against Per Game',\n goalFor: 'Goals For',\n goalForPerGame: 'Goals For Per Game',\n shotFor: 'Shots For',\n shotAgainst: 'Shots Against',\n sportsmanship: 'Sportsmanship Points',\n gaa: 'Goals Against Average',\n shutouts: 'Shutouts',\n gamesStarted: 'Games Started',\n minutesPlayed: 'Minutes Played',\n savePercentage: 'Save Percentage',\n goals: 'Goals',\n assists: 'Assists',\n gameTyingGoals: 'Game-Tying Goals',\n gameWinningGoals: 'Game-Winning Goals',\n powerplayGoals: 'Powerplay Goals',\n powerplayPoints: 'Powerplay Points',\n powerplayAssists: 'Powerplay Assists',\n shorthandedGoals: 'Shorthanded Goals',\n shorthandedPoints: 'Shorthanded Points',\n shorthandedAssists: 'Shorthanded Assists',\n pim: 'Penalty Minutes',\n pimPerGame: 'Penalty Minutes Per Game',\n penaltyOccurrences: 'Penalty Occurrences',\n throws: 'Pitch Count',\n inningsPitched: 'Innings Pitched',\n },\n standings_type: {\n 'All Games': 'All Games',\n 'Head-to-head': 'Head-to-head',\n },\n standings_subject: {\n team: 'Team',\n skater: 'Player',\n goalie: 'Goalie',\n },\n hidden_stats: {\n team: 'Hidden Team Stats',\n skater: 'Hidden Player Stats',\n goalie: 'Hidden Goalie Stats',\n },\n reports: 'Reports',\n contacts: 'Contacts',\n points: 'Points',\n standings: 'Standings',\n rosters: 'Rosters',\n scheduling: 'Scheduling',\n conflict_enforcement: 'Conflict Enforcement',\n public: 'Public Display',\n admin: 'Admin',\n integration: 'Integration',\n game_length: 'Default Game Length',\n teamScorekeeping: 'Scorekeeping',\n certification: 'Certification',\n suspensions: 'Suspensions',\n scorekeeping: 'Scorekeeping',\n periods: 'Default Periods',\n drafts: 'Drafts',\n points_system: 'Team Points System',\n admin_reports: 'Administrative Reports',\n team_reports: 'Team Reports',\n edit_office: 'Edit Organization Settings',\n },\n messages: {\n load_error: 'Unable to load the organization settings',\n },\n alerts: {\n new_schedules_only: 'These are defaults for newly created schedules. Existing schedules will not be affected.',\n advanced: 'These are advanced integration settings that determine how syncing is handled.',\n },\n helpers: {\n adminReports: 'Affects all administrative roles except Admin',\n teamReports: 'Team officials will only see team-based reports',\n sportsmanshipPoints: 'Additional points based on penalty infractions',\n statsVisibility: 'This setting determines which schedules will have the stats hidden from public pages',\n standingsVisibility: 'This setting determines which schedules will have the standings hidden from public pages',\n boxScoreVisibility: 'This setting determines which schedules will have the box score hidden from public pages',\n hiddenStats: 'Hide specific stat columns from public pages',\n updateRosterFromLineups: 'Submitting a game lineup will update jersey numbers on the team roster',\n gameLength: 'Optional - Total duration (in minutes) reserved on a playing surface for all games of that schedule',\n surfaceOfficeId: \"Optional - Surfaces will come from this organization instead of the home team's organization in the draft scheduler\",\n conflictDrafts: 'Draft games are excluded when searching for games to enforce against unless this setting is enabled',\n conflictLegacyDrafts: 'Legacy draft games are excluded when searching for games to enforce against unless this setting is enabled',\n homeTeamScorekeeping: 'Home team officials will have full access to edit the scoresheet until game completion',\n awayTeamScorekeeping: 'Away team officials will have full access to edit the scoresheet until game completion',\n scoringMode: 'How goals are entered for a game',\n penaltyMode: 'How penalties are entered for a game',\n certification: 'Games will require league certification after completion by game officials',\n incidentReports: 'Games will require incident reports for all major penalties prior to completion',\n suspensionActivation: 'When should a suspension automatically become active',\n includeRegistrations: \"Registered players based on the team's association, division and season will be included as lineup options.\",\n allowExtras: 'Scorekeepers and team officials will be allowed to add players that are not registered to their team roster. This setting does not affect league administrators/managers.',\n homeChangeStatus: \"Allow the home team's organization to reschedule games\",\n language: 'Default contact language for notifications',\n deferDraftConflict: 'Conflicts will only be enforced in drafts once published',\n deferLegacyDraftConflict: 'Conflicts will only be enforced in legacy drafts once published',\n limitDateChange: 'Associations will not be able to change the date on shared drafts games',\n rescheduleRequestsEnabled: 'Allow teams to request game changes',\n requiredRescheduleApprovals: 'Required parties to approve reschedule requests',\n required_approvals: {\n 'Team Staff': 'Requires approval from both teams',\n 'Team Organization': 'Requires approval from both team organizations',\n 'Schedule Organization': 'Requires approval from the schedule organization',\n },\n groupingType: 'The type of grouping used for teams in newly created schedules',\n },\n tooltips: {\n groupingType: `\n <div>\n <ul>\n <li>\n <strong>Pools:</strong> Organize teams together in a competition/schedule for scheduling and standing purposes.\n </li>\n <br/>\n <li>\n <strong>Groups:</strong> Also known as “Tiers“ or “Flights”, they give the ability to have schedules inside a schedule. They are used by some organizations to group teams by tiers and to avoid having hundreds of schedules.\n </li>\n </ul>\n </div>\n `,\n groupingTypeHint: 'If you are not an experienced user with groups or unsure which one to use, the answer is to use \"Pools\".'\n },\n values: {\n sportsmanship_points: {\n none: 'None',\n PCAHA: 'PCAHA Regulations',\n VIAHA: 'VIAHA Regulations',\n },\n sync_attributes: {\n position: 'Position only',\n all: 'Position and jersey numbers',\n },\n contacts: {\n profiles: 'Profiles only',\n schedules: 'Schedules and profiles',\n teams: 'Teams, schedules, and profiles',\n },\n reports: {\n penalty: 'Penalty',\n scoring: 'Scoring',\n ap: 'AP',\n },\n stats: {\n name: 'Stats',\n skater: 'Player stats',\n goalie: 'Goalie stats',\n },\n enforcement: {\n none: 'Do nothing',\n conflict: 'Save as Conflict',\n validation: 'Show a validation error',\n },\n suspension_activation: {\n manual: 'Manual',\n approval: 'On Game Approval',\n certification: 'On Game Certification',\n },\n scoring_mode: {\n detailed: 'Detailed',\n score: 'Score Only',\n },\n penalty_mode: {\n detailed: 'Detailed',\n },\n required_approvals: {\n 'Team Staff': 'Team Staff',\n 'Team Organization': 'Team Organization',\n 'Schedule Organization': 'Schedule Organization',\n },\n groupingType: {\n Pools: 'Pools',\n Groups: 'Groups',\n }\n }\n },\n leagues: {\n name: 'League |||| Leagues',\n fields: {\n officeId: 'League',\n name: 'Name',\n type: 'Type',\n HCRId: 'League ID',\n parentId: 'Organization',\n logo: 'Logo',\n },\n actions: {\n add: 'Add League',\n edit: 'Edit League',\n },\n labels: {\n card: {\n title: 'Leagues',\n },\n tabs: {\n summary: 'Summary',\n teams: 'Teams',\n surfaces: 'Surfaces',\n settings: 'Settings',\n },\n add: 'New League',\n edit: 'Update League',\n editing: 'Editing %{name}',\n availability: {\n card: {\n title: 'Availability',\n subtitle: 'Select the dates and times that are available, or block out times that are unavailable',\n },\n title: 'League Availability',\n note: 'Availability note',\n updated: 'Availability updated!',\n },\n },\n messages: {\n availability: {\n available: 'This league %{input} be available',\n }\n },\n helpers: {\n name: 'Leagues should generally not contain the division.',\n availability: {\n note: 'This note will be visible when scheduling games during this time.',\n }\n },\n },\n tournaments: {\n name: 'Tournament |||| Tournaments',\n fields: {\n officeId: 'Tournament',\n name: 'Name',\n type: 'Type',\n HCRId: 'Tournament ID',\n parentId: 'Organization',\n logo: 'Logo',\n },\n actions: {\n add: 'Add Tournament',\n edit: 'Edit Tournament',\n },\n labels: {\n card: {\n title: 'Tournaments',\n },\n tabs: {\n summary: 'Summary',\n teams: 'Teams',\n surfaces: 'Surfaces',\n settings: 'Settings',\n },\n add: 'New Tournament',\n edit: 'Update Tournament',\n editing: 'Editing %{name}',\n availability: {\n card: {\n title: 'Availability',\n subtitle: 'Select the dates and times that are available, or block out times that are unavailable',\n },\n title: 'Tournament Availability',\n note: 'Availability note',\n updated: 'Availability updated!',\n },\n },\n messages: {\n availability: {\n available: 'This tournament %{input} be available',\n }\n },\n helpers: {\n name: 'Tournament organizations should generally not contain the division.',\n availability: {\n note: 'This note will be visible when scheduling games during this time.',\n }\n },\n },\n cups: {\n name: 'Cup |||| Cups',\n fields: {\n officeId: 'Cup',\n name: 'Name',\n type: 'Type',\n HCRId: 'Cup ID',\n parentId: 'Organization',\n logo: 'Logo',\n },\n actions: {\n add: 'Add Cup',\n edit: 'Edit Cup',\n },\n labels: {\n card: {\n title: 'Cups',\n },\n tabs: {\n summary: 'Summary',\n teams: 'Teams',\n surfaces: 'Surfaces',\n settings: 'Settings',\n },\n add: 'New Cup',\n edit: 'Update Cup',\n editing: 'Editing %{name}',\n availability: {\n card: {\n title: 'Availability',\n subtitle: 'Select the dates and times that are available, or block out times that are unavailable',\n },\n title: 'Cup Availability',\n note: 'Availability note',\n updated: 'Availability updated!',\n },\n },\n messages: {\n availability: {\n available: 'This cup %{input} be available',\n }\n },\n helpers: {\n name: 'Cup organizations should generally not contain the division.',\n availability: {\n note: 'This note will be visible when scheduling games during this time.',\n }\n },\n },\n members: {\n name: 'Member |||| Members',\n fields: {\n participantId: 'Participant',\n teamId: 'Team',\n positions: 'Positions',\n number: 'Number',\n batter: 'Batter',\n extra: 'Extra',\n isCaptain: 'Captain',\n isAlternate: 'Alternate Captain',\n isAffiliate: 'Affiliate',\n isOverage: 'Over-age',\n isUnderage: 'Under-age',\n isReleased: 'Released',\n isStarter: 'Starter',\n status: 'Status',\n abbreviations: {\n isCaptain: 'C',\n isAlternate: 'A',\n isAffiliate: 'AP',\n isOverage: 'OA',\n isUnderage: 'UA',\n isReleased: 'Rls',\n isStarter: 'S',\n }\n },\n actions: {\n add: 'Add Member',\n add_members: 'Add Members',\n remove_all: 'Remove All',\n },\n labels: {\n edit: 'Update Member',\n starter_goalie: 'Starter Goalie',\n suspension: 'Suspension',\n suspension_abbreviation: 'SUS',\n suspended: 'Suspended',\n position: 'Position',\n jersey: 'Jersey',\n battingOrder: 'Batting Order',\n current_game: 'Current Game',\n total_games: 'Total Games',\n player: 'Player',\n staff: 'Staff',\n add_members: 'Add Members to %{name}',\n selected_members: 'Selected Members (%{smart_count})',\n },\n messages: {\n has_been_added: '%{name} has been added',\n no_members_selected: 'No members selected',\n },\n helpers: {\n isCaptain: 'Team Captain',\n isAlternate: 'Team Alternate Captain',\n name_or_id: 'Name or Member ID',\n },\n validations: {\n must_have_number: 'Players must have a number',\n },\n values: {\n positions: {\n F: 'F',\n C: 'C',\n D: 'D',\n G: 'G',\n Manager: 'Manager',\n 'Head Coach': 'Head Coach',\n 'Assistant Coach': 'Assistant Coach',\n 'Goaltending Coach': 'Goaltending Coach',\n 'Safety Person': 'Safety Person',\n Trainer: 'Trainer',\n }\n },\n notifications: {\n members_added: '%{smart_count} member was added to the team. |||| %{smart_count} members were added to the team.',\n add_members_error: 'Unable to add members.',\n }\n },\n schedules: {\n name: 'Schedule |||| Schedules',\n fields: {\n name: 'Name',\n seasonId: 'Season',\n startDate: 'Start Date',\n endDate: 'End Date',\n teamIds: 'Teams',\n officeId: 'Organization',\n categoryId: 'Category',\n type: 'Type',\n isPublic: 'Public',\n scheduleType: 'Schedule Type',\n pastEvents: 'Past Schedules',\n gameFormat: 'Format',\n comments: 'Comments',\n brackets: {\n totalTeams: 'Number of teams',\n format: 'Format',\n orientation: 'Orientation',\n bracketId: 'Bracket',\n groupId: 'Group'\n },\n },\n filters: {\n pastEvents: 'Show past schedules',\n },\n actions: {\n add: 'Add Schedule',\n edit: 'Edit Schedule',\n show: 'Show Schedule',\n internal: 'Internal Actions',\n recalculateStats: 'Recalculate stats',\n },\n labels: {\n card: {\n title: 'Schedules',\n },\n tabs: {\n summary: 'Summary',\n teams: 'Teams',\n games: 'Games',\n bracket: 'Bracket',\n scheduler: 'Scheduler',\n stats: 'Stats',\n standings: 'Standings',\n contacts: 'Contacts',\n settings: 'Settings',\n },\n steps: {\n schedule_info: 'Schedule Information',\n team_select: 'Select Teams',\n add_sequences: 'Add Game Number Sequences',\n schedule_settings: 'Schedule Settings'\n },\n matrix: {\n show_organisation: 'Show Teams Organization',\n show_full_names: 'Show Full Team Names',\n compact_mode: 'Compact Table',\n },\n brackets_viewer: {\n open_in_viewer: 'Open in viewer | Download',\n open_new_window: 'Open in a new window',\n download: 'Download',\n close: 'Close',\n zoom_in: 'Zoom in',\n zoom_out: 'Zoom out',\n no_preview: {\n text: 'No preview available',\n no_data: 'No data',\n }\n },\n add: 'New Schedule',\n generate: 'Generate Schedule',\n generate_legacy: 'Generate Schedule (Legacy)',\n upload: 'Upload Schedule',\n upload_legacy: 'Upload Schedule (Legacy)',\n draft: 'Draft Schedule',\n draft_legacy: 'Draft Schedule (Legacy)',\n league_contacts: 'League Contacts',\n dates: 'Dates',\n competitive: 'Competitive',\n recreational: 'Recreational',\n accredited_school: 'Accredited School',\n add_to_group: 'Add to group',\n add_to_pool: 'Add to pool',\n bracket_schedule: 'Bracket Schedule',\n bracket_reseed: 'Reseed Bracket Games',\n bracket_reseed_info: \"Add or update teams to bracket games with seeded positions according to their group team order\",\n group_bracket_reseed: \"Group bracket to reseed\",\n reseed_bracket: 'Reseed a bracket',\n bracket_info: 'Create games using a bracket schedule',\n create_bracket: 'Create Bracket Schedule',\n brackets_info: 'As games are completed, teams will automatically advance to subsequent games based on results.',\n brackets_na: 'No matching bracket templates',\n preview: 'Preview',\n analysis: 'Analysis',\n matchups: 'Matchups',\n current_matchups: 'Current Matchups',\n new_matchups: 'Draft Matchups',\n office_matchups: 'Organization Matchups',\n include_drafts: 'Include draft games',\n byes: 'Byes',\n team: 'Team',\n group: 'Group',\n pool: 'Pool',\n opponents: 'Opponents',\n conflicts: 'Conflicts',\n home: 'Home',\n away: 'Away',\n total: 'Total',\n week: 'Week',\n scheduled_events: 'Full Schedule',\n not_public: 'Not Public',\n },\n messages: {\n no_byes: 'No byes',\n no_matchups: 'No matchups',\n too_many_matchups: 'Too many matchups to display',\n unable_to_load: 'Unable to load analysis',\n additional_games: '+ %{smart_count} more',\n },\n notifications: {\n created: 'Schedule created',\n updated: \"Schedule updated\",\n recalculating: 'Recalculating...',\n bracket_games_created: 'Bracket games created',\n bracket_games_reseeded: 'Bracket games reseeded',\n before_schedule_date: 'Cannot schedule game before schedule start date (%{startDate})',\n after_schedule_date: 'Cannot schedule game after schedule end date (%{endDate})'\n },\n alerts: {\n missing_sequence: 'The game number sequence has not been set for this schedule',\n },\n tooltips: {\n hidden_to_public: 'This schedule is not publicly visible',\n },\n helpers: {\n cohorts: 'Cohorts can be created as groups under the league settings to keep everything in the same schedule.',\n gameFormat: 'Optional',\n isPublic: 'By activating this option, the schedule will be publicly available on Spordle PAGE'\n },\n validations: {\n end_after_start: 'End Date must be after Start Date',\n },\n errors: {\n brackets: {\n existing_brackets: 'Brackets already exist in this group',\n missing_seeded_games: 'No bracket games with seeded positions found',\n missing_schedule_teams: 'No teams found in this group for reseeding',\n missing_sequence: 'No sequence found for game numbering',\n },\n },\n values: {\n type: TYPES,\n orientations: {\n Portrait: 'Portrait',\n Landscape: 'Landscape',\n },\n gameFormat: {\n '3x3': '3x3',\n '4x4': '4x4',\n '5x5': '5x5',\n '6x6': '6x6',\n '7x7': '7x7',\n '9x9': '9x9',\n '11x11': '11x11',\n }\n },\n },\n scheduleSettings: {\n name: 'Setting |||| Settings',\n fields: {\n gameLength: 'Default Surface Reservation Time',\n surfaceOfficeId: \"Surface Organization\",\n surfaceSizes: 'Surface Sizes',\n includeRegistrations: 'Include Registrations',\n allowExtras: 'Allow Extras',\n sportsmanshipPoints: 'Sportsmanship Points',\n disableSportsmanshipCarry: 'Limit sportsmanship points to same group',\n maxScoreDiff: 'Max Score Differential',\n scoringMode: 'Scoring Mode',\n penaltyMode: 'Penalty Mode',\n points: {\n Team: {\n win: 'Win',\n loss: 'Loss',\n tie: 'Tie',\n soWin: 'Shootout Win',\n soLoss: 'Shootout Loss',\n otWin: 'Overtime Win',\n otLoss: 'Overtime Loss',\n forfeitWin: 'Forfeit Win',\n forfeitLoss: 'Forfeit Loss',\n forfeitTie: 'Double Forfeit',\n sportsmanship: 'Sportsmanship',\n },\n Player: {\n goal: 'Goal',\n assist: 'Assist'\n },\n preview: `Win: %{win} Loss: %{loss} Tie: %{tie}`\n },\n groupingType: 'Team Grouping Type',\n },\n actions: {\n edit: 'Edit Settings',\n },\n labels: {\n tabs: {\n scheduling: 'Scheduling',\n scoresheet: 'Scoresheet',\n team_stats: 'Team Stats',\n player_stats: 'Player Stats',\n advanced: 'Advanced',\n },\n schedule_stats: 'Schedule Stats',\n game_stats: 'Game Stats',\n stats_schema: {\n team: 'Team Stats Schema',\n skater: 'Player Stats Schema',\n goalie: 'Goalie Stats Schema',\n },\n standings_order: {\n team: 'Team Standings Order',\n skater: 'Player Standings Order',\n goalie: 'Goalie Standings Order',\n },\n points_system_ranking: {\n property: 'Property',\n order: 'Order',\n type: 'Type',\n },\n hidden_stats: {\n team: 'Hidden Team Stats',\n skater: 'Hidden Player Stats',\n goalie: 'Hidden Goalie Stats',\n },\n points: 'Points',\n edit_schedule: 'Edit Schedule Settings',\n game_length: 'Default Game Length',\n include_registrations: 'Registrations',\n allow_extras: 'Allow Lineup Extras',\n points_system: 'Team Points System',\n standings: 'Standings',\n scheduling: 'Scheduling',\n lineups: 'Lineups',\n public: 'Public Display',\n scorekeeping: 'Scorekeeping',\n },\n messages: {\n load_error: 'Unable to load the schedule settings',\n included: 'Included',\n allow_extras_default: 'League administrators & team officials',\n standard_description: 'W = 2, T = 1, OTL = 1',\n '3-2-1_description': 'Extra point awarded for wins during regulation time or forfeit',\n high_low: 'High to low',\n low_high: 'Low to high',\n },\n alerts: {\n advanced: 'These are advanced integration settings that determine how syncing is handled.',\n new_scoresheets_only: 'These are defaults for newly created scoresheets. Existing scoresheets will not be affected.',\n },\n validations: {\n game_length: 'Has to be more than 0',\n scoring_mode_change: 'Cannot change scoring mode while there are completed games',\n penalty_mode_change: 'Cannot change penalty mode while there are completed games'\n },\n helpers: {\n gameLength: 'Optional - Total duration (in minutes) reserved on a playing surface for all games of that schedule',\n surfaceOfficeId: \"Optional - Surfaces will come from this organization instead of the home team's organization in the draft scheduler\",\n surfaceSizes: 'Optional - Determines the default set of sizes filtered when scheduling',\n includeRegistrations: \"Registered players based on the team's association, division and season will be included as lineup options.\",\n allowExtras: 'Scorekeepers and team officials will be allowed to add players that are not registered to their team roster. This setting does not affect league administrators/managers.',\n sportsmanshipPoints: 'Additional points based on penalty infractions',\n disableSportsmanshipCarry: 'When a team is moved from one group to another, as applicable, sportsmanship points will be accumulated from all groups unless this setting is enabled.',\n schema: 'Schema required',\n statsVisibility: 'This setting determines which schedules will have the stats hidden from public pages',\n scoringMode: 'How goals are entered for a game',\n penaltyMode: 'How penalties are entered for a game',\n groupingType: 'The type of grouping used for teams in newly created schedules',\n },\n values: {\n includeRegistrations: 'Rostered players & extras only',\n allowExtras: 'League administrators only',\n disableSportsmanshipCarry: 'Sportsmanship points are limited to same group',\n ranking_type: {\n 'All Games': 'All Games',\n 'Head-to-head': 'Head-to-head'\n },\n ranking_order: {\n DESC: 'Descending',\n ASC: 'Ascending',\n },\n }\n },\n schedulingConstraints: {\n fields: {\n resource: 'Resource',\n periodType: 'Period Type',\n limit: 'Maximum games',\n categoryIds: \"Categories\",\n scheduleTypes: 'Schedule Types',\n period: {\n days: ' Total days',\n weekdays: 'Weekdays',\n dateRange: 'Date Range',\n startDate: 'Start Date',\n endDate: 'End Date'\n }\n },\n values: {\n scheduleTypes: TYPES,\n Team: 'Team',\n Schedule: 'Schedule',\n Arena: 'Arena'\n },\n actions: {\n add_constraint: 'Add Constraint',\n edit_constraint: 'Edit Constraint'\n },\n labels: {\n card: {\n title: 'Constraints',\n subtitle: 'Set constraints to limit the number of games played. This will mark games as conflicts if the constraints are not followed.'\n },\n restrictions: 'Restrictions',\n period: 'Period'\n },\n helpers: {\n schedules: 'Optional - All schedules if empty',\n limit: `Exceeds %{smart_count} game limit |||| Exceeds %{smart_count} game limit`,\n period: `on the same day |||| within a %{smart_count} day period.`\n },\n messages: {\n summary: `The %{resource}s in this organization are not to %{verb} more than %{smart_count} game |||| The %{resource}s in this organization are not to %{verb} more than %{smart_count} games`,\n days: `on the same day. |||| within a %{smart_count} day period.`,\n host: 'host',\n play: 'play',\n have: 'have',\n between: ' between %{start} - %{end}.',\n on: ' on %{weekdays}.'\n },\n validations: {\n end_after_start: 'End Date must be after Start Date',\n greater_than_zero: 'Must be greater than 0'\n },\n },\n teams: {\n name: 'Team |||| Teams',\n fields: {\n teamId: 'Team',\n name: 'Name',\n shortName: 'Short Name',\n HCRId: 'Team ID',\n seasonId: 'Season',\n categoryId: 'Category',\n officeId: 'Organization',\n logo: 'Logo',\n arenaId: 'Surface',\n isPublic: 'Public',\n isSanctioned: 'Official Team',\n },\n actions: {\n add: 'Add Team',\n edit: 'Edit Team',\n internal: 'Internal Actions',\n sync: 'Sync',\n },\n labels: {\n card: {\n title: 'Teams',\n unsanctioned_title: 'Temporary Teams',\n },\n calendar: {\n teamNames: 'Team Names'\n },\n tabs: {\n summary: 'Summary',\n roster: 'Roster',\n schedule: 'Schedule',\n settings: 'Settings',\n },\n edit: 'Update Team',\n add: 'New Team',\n contacts: 'Team Contacts',\n team_roster: 'Team Roster',\n import_roster: 'Import Roster',\n import_profiles: 'Import Profiles',\n roster_file: 'Roster File',\n profile_file: 'Profile File',\n availability: {\n card: {\n title: 'Availability',\n subtitle: 'Select the dates and times that are available, or block out times that are unavailable',\n },\n title: 'Team Availability',\n note: 'Availability note',\n updated: 'Availability updated!',\n },\n unsanctioned: 'Temporary Team',\n },\n messages: {\n home_team_hcr_id: 'Home Team ID',\n valid_members: '%{number}/%{total} rows have valid members',\n drop_roster_file: 'Drop your roster file (.csv) here',\n drop_profile_file: 'Drop your profile file (.csv) here',\n import_tool_roster: \"To use this import tool, upload a CSV file with columns for the participant's unique Member ID, first name, last name, position and jersey number.\",\n import_tool_profile: \"To use this import tool, upload a CSV file with columns for the participant's unique Member ID, birthdate, height (ft), weight (lbs), hometown, and dexterity.\",\n import_tool_warning: 'This import tool will create new participants that do not match existing Member IDs.',\n availability: {\n available: 'This team %{input} be available',\n },\n no_teams: 'No teams selected'\n },\n helpers: {\n select_columns: \"You'll be asked to select columns after selecting your file\",\n valid_profiles: '%{number}/%{total} rows have valid profiles',\n participant_not_matched: 'Participants will be ignored if not rostered to this team.',\n match_existing_participant: 'This Member ID is used to match an existing participant or create a new participant for this roster.',\n availability: {\n note: 'This note will be visible when scheduling games during this time.',\n },\n isPublic: \"INTERNAL ONLY - This setting allows a team to be visible on Spordle PAGE\"\n },\n alerts: {\n caution: 'Use with caution',\n creating_unsanctioned: 'You are creating a temporary team. These are teams that are often used for training groups and tryout games.',\n },\n notifications: {\n import_roster_success: 'Roster successfully imported. Refresh to see changes.',\n import_roster_error: 'Unable to import your roster',\n import_profiles_error: 'Unable to import your profiles',\n profiles_updated: '%{smart_count} profile was updated. |||| %{smart_count} profiles were updated.',\n },\n values: {\n types: {\n home: 'Home Team',\n away: 'Away Team',\n }\n },\n chips: {\n unsanctioned: 'Temporary Team',\n },\n tooltips: {\n unsanctioned: 'This team is not an official team and are often used for training groups and tryout games.',\n }\n },\n teamArenas: {\n name: 'Home Surface |||| Home Surfaces',\n fields: {\n order: 'Order',\n arenaId: 'Surface',\n slot: 'Time Slot',\n day: 'Day',\n startTime: 'Start Time',\n endTime: 'End Time',\n },\n actions: {\n edit: 'Edit Home Surfaces'\n },\n labels: {\n card: {\n title: 'Home Surfaces',\n subtitle: 'Team home surfaces will be used when drafting a schedule.'\n },\n not_set: 'Not set',\n },\n messages: {\n load_error: 'Unable to load the team settings',\n },\n validations: {\n end_before_start: 'End Time must be after Start Time',\n invalid_time_check_am_pm: 'Invalid time - check AM/PM',\n },\n values: {\n order: {\n '1': 'Primary'\n }\n }\n },\n scheduleteams: {\n name: 'Team |||| Teams',\n fields: {\n scheduleId: 'Schedule',\n dates: 'Dates',\n groupId: 'Group',\n officeId: 'Organization',\n teamId: 'Team',\n teamIds: 'Teams',\n type: 'Type',\n categoryId: 'Category',\n order: 'Order'\n },\n actions: {\n add: 'Add Teams',\n edit: 'Edit Order'\n },\n labels: {\n card: {\n title: 'Schedules & Contacts',\n },\n edit: 'Update Team',\n coach: 'Coach',\n manager: 'Manager',\n rank: 'Rank',\n import_teams: 'Select Teams',\n replace_existing_teams: 'Replace Existing Teams'\n },\n messages: {\n replace_existing_teams: \"You've selected more teams than the total number of teams that you've configured for your draft. Do you want to replace the teams already selected in the draft with this selection?\",\n team_order: 'This order will be used when generating games and have no impact on stats.',\n synced_by_id: 'This schedule is synced by Spordle ID. To add new teams, approve them via Spordle ID.'\n },\n },\n schedulesequences: {\n name: 'Game Number Sequence |||| Game Number Sequences',\n fields: {\n scheduleId: 'Schedule',\n groupId: 'Group',\n prefix: 'Prefix',\n start: 'Starting Number',\n suffix: 'Suffix',\n current: 'Current',\n max: 'End Number',\n },\n labels: {\n starting_sequence: 'Starting Sequence',\n edit: 'Edit Game Number Sequence',\n add: 'Add Game Number Sequence',\n },\n actions: {\n add: 'Add Sequence',\n go_to: 'Go to Sequence',\n },\n messages: {\n starting_sequence: 'Starting Sequence: %{sequence}',\n },\n alerts: {\n sequence_in_use: 'This game number sequence is currently in use and cannot be edited',\n sequence_info: \"Game number sequences are used to automatically number games as they're created and when drafts are published.\",\n },\n validations: {\n too_many_characters: 'Too many characters',\n cannot_contain_consecutive_dashes: 'Cannot contain consecutive dashes',\n cannot_contain_special_characters: 'Cannot contain special characters or spaces',\n must_contain_a_number: 'Must contain a number',\n sequence_in_use: 'Cannot edit a game number sequence that is being used',\n delete_sequence_in_use: 'Cannot delete a sequence that is being used',\n delete_scheduleteam: 'Cannot delete a team that is scheduled in games or draft games',\n unique_prefix_suffix: 'Can only have one sequence prefix/suffix pattern per schedule',\n prefix_cant_end_in_number: 'Prefix cannot end in a number',\n greater_than_current: 'Must be greater than the current number',\n schedule_has_sequence: 'This schedule already has a game number sequence',\n group_has_sequence: 'This group already has a game number sequence',\n sequence_overlaps: 'This game number sequence overlaps with an existing sequence range',\n sequence_exhausted: 'The sequence used to generate the game number is exhausted',\n excessive_pad_length: \"End Number exceeds Starting Number format\"\n }\n },\n arenaoffices: {\n name: 'Organization |||| Organizations',\n fields: {\n arenaId: 'Surface',\n officeId: 'Organization',\n isPrimary: 'Primary',\n leagueIds: 'Leagues',\n divisionIds: 'Divisions'\n },\n labels: {\n restrictions: 'Restrictions',\n },\n },\n arenaslots: {\n name: 'Time Slot |||| Time Slots',\n fields: {\n name: 'Name',\n arenaId: 'Surface',\n startTime: 'Start Time',\n endTime: 'End Time',\n categoryIds: 'Categories',\n officeId: 'Organization',\n comments: 'Comments',\n types: 'Types',\n leagueIds: 'Leagues',\n isShared: 'Share this slot to all organizations'\n },\n values: {\n types: {\n Practice: 'Practice',\n ...TYPES,\n },\n },\n labels: {\n card: {\n title: 'Time Slots',\n subtitle: 'Record your surface reservations to see your available time',\n game_slots: 'Game Time Slots',\n practice_slots: 'Practice Time Slots',\n },\n tooltips: {\n slot_replace: `This slot overlaps with an existing slot:\n %{timeRange1} |||| This slot overlaps with existing slots:\n %{timeRange1}\n %{timeRange2}`,\n },\n restrictions: 'Restrictions',\n recurrence: 'Recurrence',\n import_slots: 'Import Slots',\n slots_file: 'Slots File',\n slot_splits: 'Slot Splits',\n slot_duration: 'Slot Duration',\n break_duration: 'Break Duration',\n edit: 'Update Time Slot',\n frequency: 'Frequency',\n interval: 'Interval',\n weekdays: 'Weekdays',\n end_date: 'End Date',\n delete_slots: 'Delete Time Slot |||| Delete Time Slots',\n slots_restrictions: 'Time Slots Restrictions',\n set_slots_restrictions: 'Set restrictions',\n restricted: 'Restricted',\n Type: 'Type',\n League: 'League',\n Category: 'Category'\n },\n messages: {\n drop_slots_csv: 'Drop your slots file (.csv) here',\n import_tool_slots: \"To use this import tool, upload a CSV file with columns for the slot's Start Time and End Time.\",\n import_slot_warning: 'Rows that overlap with existing slots will not be imported.',\n schedule_no_occurences: 'The recurrence schedule specified does not result in any time slots',\n event_repeat: 'This recurrence schedule will result in %{smart_count} day |||| This recurrence schedule will result in %{smart_count} days',\n slot_splits: 'This will result in %{smart_count} time slot on %{date} between %{startTime} - %{endTime} |||| This will result in %{smart_count} time slots on %{date} between %{startTime} - %{endTime}',\n additional_instances: '... %{smart_count} additional time slot ... |||| ... %{smart_count} additional time slots ...',\n confirm_delete: 'Are you sure you want to delete this time slot? |||| Are you sure you want to delete these %{smart_count} time slots?',\n available_slots: '%{smart_count} available slot |||| %{smart_count} available slots',\n slots: '%{smart_count} slot |||| %{smart_count} slots',\n home_available_slots: '%{smart_count} home slot |||| %{smart_count} home slots',\n away_available_slots: '%{smart_count} away slot |||| %{smart_count} away slots'\n },\n helpers: {\n categoryIds: 'Optional - All categories if empty',\n types: 'Optional - All types if empty',\n leagueIds: 'Optional - All leagues if empty',\n },\n notifications: {\n import_slots_success: '%{number} time slot imported. |||| %{number} time slots were imported.',\n import_slots_error: 'Unable to import slots.',\n delete_slots_success: 'Deleted %{smart_count} time slot |||| Deleted %{smart_count} time slots',\n delete_slots_error: 'Something went wrong while deleting the time slot |||| Something went wrong while deleting time slots',\n update_restrictions_success: 'Updated restrictions for %{smart_count} time slot |||| Updated restrictions for %{smart_count} time slots',\n update_restrictions_error: 'Something went wrong while updating the time slot restrictions |||| Something went wrong while updating the time slots restrictions',\n },\n actions: {\n add: 'Add Time Slots',\n },\n validations: {\n import_slots_overlaps: 'Some rows overlapping times',\n overlaps: 'This time slot overlaps with an existing time slot',\n import_slots_end_before_start: 'Some rows have end time before start time',\n end_before_start: 'End Time must be after Start Time',\n duration_exceeds_range: 'Duration cannot exceed time range',\n total_duration: 'Total duration results in an uneven amount of slots',\n include_start_day: 'Must include %{day}'\n },\n alerts: {\n bulk_slots_restrictions: 'Check the restrictions you want to change. A checked restriction with no value will clear the current value.',\n overlaps_title: 'Overlaps',\n overlaps: 'This timeslot range has some overlaps. Modify the start and end times and try again.'\n }\n },\n availabilities: {\n name: 'Availability |||| Availabilities',\n fields: {\n officeId: 'Organization',\n isAvailable: 'Status',\n },\n values: {\n isAvailable: {\n available: 'Available',\n notAvailable: 'Not available',\n }\n },\n labels: {\n available: 'Available',\n unavailable: 'Unavailable',\n conflicts: `%{smart_count} conflict |||| %{smart_count} conflicts`,\n team_conflicts: 'Team Conflicts',\n surface_conflicts: 'Surface Conflicts',\n constraints: 'Constraints',\n slots: 'Time Slots',\n more: '+ %{smart_count} more |||| + %{smart_count} more'\n },\n },\n blockedSurfaces: {\n name: 'Blocked by',\n },\n accounts: {\n name: 'Account |||| Accounts',\n fields: {\n email: 'Email Address',\n password: 'Password',\n participantId: 'Person'\n },\n actions: {\n add: 'Add Account',\n sma_reset: 'Reset Password',\n },\n labels: {\n card: {\n title: 'Accounts',\n subtitle: 'Participants may be linked to one or more accounts through identities.'\n },\n my: 'My Account',\n edit: 'Update Account',\n },\n messages: {\n enter_email: 'Enter an email address to start searching',\n },\n alerts: {\n enter_email_above: 'Enter an email address above to start searching...',\n sma_reset_title: 'Spordle My Account Password Reset',\n sma_reset: \"The temporary password given is valid for 14 days. When the user logs in with the temporary password, they'll be asked to enter a new password. Afterwards the new password becomes the account's password.\",\n },\n helpers: {\n password: 'Optional unless new account',\n },\n validations: {\n must_be_length: 'Must be at least %{length} characters',\n must_have_number: 'Must contain at least one number',\n must_have_uppercase: 'Must contain at least one uppercase letter',\n must_have_lowercase: 'Must contain at least one lowercase letter',\n must_have_special: 'Must contain at least one special character',\n },\n notifications: {\n sma_reset_success: 'Password reset successfully',\n sma_reset_error: 'Failed to reset password',\n }\n },\n permissions: {\n name: 'Permission |||| Permissions',\n fields: {\n principalType: 'Principal Type',\n principalId: 'Participant',\n roleId: 'Role',\n targetType: 'Resource Type',\n targetId: 'Organization / Schedule / Team',\n categoryIds: 'Categories',\n groupIds: 'Groups',\n expiry: 'Expiry',\n reportsDisabled: 'Disallow Reports',\n scorekeepingDisabled: 'Disallow Scoresheet Editing',\n },\n actions: {\n add: 'Add Role',\n },\n labels: {\n card: {\n title: 'Roles',\n subtitles: {\n office: 'Organization roles grant access to resources in and under this organization. You can further restrict access using groups.',\n schedule: 'Schedule roles grant access to resources related to this schedule only. You can further restrict access with groups.',\n team: 'Team roles grant access to this team only.',\n }\n },\n edit: 'Update Role',\n roles: 'Roles',\n legacy: 'Administrative Roles (Legacy)',\n administrative: 'Administrative Roles',\n expired: 'Expired',\n },\n messages: {\n roles: 'Administrative roles are now managed on the participant.',\n },\n helpers: {\n principalId: 'This is a legacy role - link this account to a person to convert it',\n categoryIds: 'Optional - All categories if empty',\n groupIds: 'Optional - All groups if empty',\n expiry: 'Optional - Access will be revoked as of this date',\n },\n values: {\n targetType: {\n Participant: 'Participant',\n Office: 'Organization',\n Schedule: 'Schedule',\n Team: 'Team',\n },\n context: {\n Administrative: 'Administrative',\n League: 'League',\n Officiating: 'Officiating',\n },\n },\n validations: {\n role_not_activated: 'This role has not been activated for the selected organization',\n }\n },\n profiles: {\n name: 'Profile |||| Profiles',\n fields: {\n id: 'Participant',\n birthdate: 'Birthdate',\n height: 'Height (ft)',\n weight: 'Weight (lbs)',\n hometown: 'Hometown',\n dexterity: 'Handed',\n isPublic: 'Public Profile',\n },\n actions: {\n edit: 'Edit Profile',\n },\n labels: {\n card: {\n title: 'Profile',\n },\n tabs: {\n summary: 'My Profile',\n officiating: 'Officiating',\n league: 'League',\n schedule: 'Schedule',\n },\n edit: 'Update Profile',\n picture: 'Picture',\n personal_calendar_feed: 'Personal Calendar Feed',\n },\n messages: {\n description: 'Name, birthdate, and more',\n },\n alerts: {\n public_profile: 'This profile will publicly appear on league websites where stats are shown. You can make this information private by editing the profile.',\n private_profile: 'This profile will only appear to authorized league and association administrators, and will not appear on league websites.',\n },\n helpers: {\n isPublic: 'Optional - Allow profile information to be shown publicly on league websites',\n },\n validations: {\n invalid_birthdate: 'Some values do not include a valid date (YYYY-MM-DD)',\n invalid_height: 'Some rows have an invalid height',\n invalid_weight: 'Some rows have an invalid weight',\n invalid_hometown: 'Some rows have an invalid hometown',\n invalid_dexterity: 'Some rows have an invalid handedness'\n },\n values: {\n dexterity: {\n Right: 'Right',\n Left: 'Left',\n }\n }\n },\n contacts: {\n name: 'Contact |||| Contacts',\n fields: {\n type: 'Type',\n value: 'Value',\n isPrimary: 'Primary',\n isEmergency: 'Emergency',\n isNotification: 'Receive notifications',\n isVerified: 'Verified',\n notes: 'Notes',\n participantId: 'Person',\n language: 'Language'\n },\n actions: {\n add: 'Add Contact',\n },\n labels: {\n card: {\n title: 'Address Book',\n },\n edit: 'Update Contact',\n unverified: 'Unverified Contact',\n information: 'Additional information',\n notifications: 'Notifications',\n },\n messages: {\n contacts: 'Contacts may be used to send you game notifications and are available to help authorized users reach you, but do not affect your account login.',\n description: 'Emails, phone numbers, and addresses',\n already_received_email: 'If you have already received a verification email, you will need to click on that link to verify, or click below to resend. The link will expire after 1 week.',\n only_participant_verify: 'Only the participant can verify their email.',\n has_not_been_verified: '%{contact} has not been verified.',\n unverified_explain: 'To receive notifications, this contact must be verified. Verification is optional and does not limit the account.',\n error_verify: 'Unable to verify your email',\n },\n alerts: {\n contact_accounts: 'Contacts do not affect accounts',\n create_via_invite_button: 'To create a new account, use the \"Invite\" button on the profile page.',\n change_login: 'To change the username, see the accounts section on the profile page.',\n add_contact_email: 'Please add a contact email below to receive notifications.',\n verify_contact_email: 'Please verify your contact email to receive notifications.',\n },\n notifications: {\n not_registered: 'Participant needs to be registered before this contact can be verified'\n },\n helpers: {\n value: 'A notification will be sent to validate this address',\n isPrimary: 'Notifications will go to this contact by default',\n isEmergency: 'Use this contact in case of emergency',\n language: 'Language for notifications',\n isNotification: 'Use this contact to receive notifications',\n },\n tooltips: {\n isPrimary: 'Primary contact',\n isEmergency: 'Emergency contact',\n isVerified: 'Verified',\n notificationsActive: 'Receiving notifications',\n notificationsDisabled: 'Notifications disabled',\n },\n values: {\n type: {\n Email: 'Email',\n Mobile: 'Mobile',\n Home: 'Home',\n },\n language: {\n en: 'English',\n fr: 'French'\n }\n }\n },\n addresses: {\n name: 'Address |||| Addresses',\n fields: {\n label: 'Label',\n address: 'Address',\n address2: 'Address 2',\n city: 'City',\n province: 'Province',\n postal: 'Postal Code',\n type: 'Type',\n isPrimary: 'Primary'\n },\n actions: {\n add: 'Add Address',\n },\n labels: {\n card: {\n title: 'Addresses',\n },\n edit: 'Update Address',\n },\n helpers: {\n label: 'Optional - Nickname for this address',\n address2: 'Optional - Unit/Suite/etc.',\n },\n values: {\n type: {\n Home: 'Home',\n Work: 'Work',\n Other: 'Other',\n },\n province: {\n AB: 'Alberta',\n BC: 'British Columbia',\n MB: 'Manitoba',\n NB: 'New Brunswick',\n NL: 'Newfoundland & Labrador',\n NT: 'Northwest Territories',\n NS: 'Nova Scotia',\n NU: 'Nunavut',\n ON: 'Ontario',\n PEI: 'Prince Edward Island',\n QC: 'Quebec',\n SK: 'Saskatchewan',\n YT: 'Yukon',\n }\n }\n },\n notifications: {\n name: 'Notification |||| Notifications',\n fields: {\n participantId: 'Person',\n contactId: 'Destination Contact',\n email: 'Email (Legacy)',\n targetId: 'Resource',\n categoryIds: 'Categories',\n groupIds: 'Groups',\n gameReport: 'Game Reports',\n majorPenalty: 'Major Penalties',\n suspension: 'Suspensions',\n assigning: 'Assigning',\n scheduling: 'Scheduling',\n activities: 'Activities',\n drafts: 'Draft Sharing',\n origin: 'Origin'\n },\n actions: {\n add: 'Add Notification',\n },\n labels: {\n card: {\n title: 'Notifications',\n subtitles: {\n office: \"Organization notifications apply to all games in and under this organization. Notifications can be added to anyone, even if they don't have a role.\",\n schedule: \"Schedule notifications apply to all games in this schedule. Notifications can be added to anyone, even if they don't have a role.\",\n team: 'Team notifications apply to games played by this team.',\n }\n },\n sources: 'Notification Sources',\n update_source: 'Update Notification Source',\n types: 'Types',\n },\n alerts: {\n role_origin: 'Categories and potentially groups are inherited from the role.',\n },\n helpers: {\n participantId: 'Reminder: Must have at least one contact in profile to receive emails',\n contactId: 'Optional - Notifications will go to contacts with notifications enabled, unless overridden by this option',\n email: 'This is a legacy notification. Please connect it to a participant above.',\n scheduling: 'A digest email is sent when there have been any game changes in the past hour',\n activities: 'A digest email is sent when there are new or updated activities for this team',\n drafts: 'An email is sent when access to a draft has been shared',\n assigning: 'An email is immediately sent when an assignment is declined',\n gameReport: 'Game report are sent after game completion',\n majorPenalty: 'Scoresheets with major penalties will be sent after game completion',\n suspension: 'Suspensions will be sent after game completion and on discipline committee changes',\n categoryIds: 'Optional - All categories if empty',\n groupIds: 'Optional - All groups if empty',\n origin: 'Notification sources are derived from having an administrator role, being rostered on a team, or being manually created'\n },\n validations: {\n duplicate_notification: 'This notification already exists. Modify the original notification to add or remove notification types.',\n },\n values: {\n origin: {\n 'Manual': 'Manual',\n 'Role': 'Role',\n 'RosterMember': 'Rostered Member',\n }\n }\n },\n draftGames: {\n name: 'Draft Game |||| Draft Games',\n fields: {\n id: 'ID',\n round: 'Round',\n seasonId: 'Season',\n scheduleId: 'Schedule',\n crossScheduleId: 'Cross Schedule',\n categoryId: 'Category',\n homeTeamId: 'Home Team',\n awayTeamId: 'Away Team',\n date: 'Date',\n startTime: 'Start Time',\n endTime: 'End Time',\n arenaId: 'Surface',\n status: 'Status',\n comments: 'Comments',\n requestReason: 'Reason for Request',\n officeId: 'Organization',\n groupId: 'Group',\n crossGroupId: 'Cross Group',\n timezone: 'Timezone',\n isShared: 'Shared',\n sharedAt: 'Shared At',\n sharedUntil: 'Shared Until',\n isPublished: 'Published',\n publishedAt: 'Published At',\n requested_by: 'Requested by',\n },\n filters: {\n startTime: 'Scheduled Date',\n endTime: 'End Date',\n },\n actions: {\n create: 'Create',\n request: 'Request Changes',\n add: 'Add Draft Game',\n generate: 'Generate Schedule',\n upload: 'Upload File',\n set_date: 'Set Date',\n clear_date: 'Clear Date',\n change_status: 'Change Status',\n delete_draft_game: 'Delete Draft Game |||| Delete Draft Games',\n duplicate_game: 'Duplicate Game'\n },\n labels: {\n card: {\n title: 'Draft Games'\n },\n edit: 'Update Draft Game',\n edit_number: 'Update Draft Game %{number}',\n draft_request: 'Draft Game Request %{number}',\n generate_automatically: 'Generate automatically',\n method: 'Method',\n type: 'Type',\n round_type: 'Round Type',\n games_per_team: 'Total Games',\n total_rounds: 'Total Rounds',\n limit_byes: 'Limit Round Byes',\n weekdays: 'Days of the week',\n weekdays_type: 'Distribution Mode',\n start_date: 'Start Date',\n start_round: 'Start Round',\n breaks: 'Breaks',\n total_weeks: 'Total Weeks',\n no_round: 'No round',\n no_date: 'No date',\n no_time: 'No time',\n no_venue: 'No surface',\n drafts_file: 'Draft Games File',\n import_drafts: 'Import Drafts',\n date_format: 'Date Format',\n publish: 'Publish',\n share: 'Share',\n home: 'Home',\n away: 'Away',\n total: 'Total',\n main_schedule: 'Main Schedule',\n main_group: 'Main Group',\n cross_schedule: 'Cross Schedule',\n cross_group: 'Cross Group',\n cross_pool: 'Cross Pool Only',\n cross_team: 'Cross Team',\n add_cross_team: 'Add Cross Group Team',\n steps: {\n matchups: 'Matchups',\n matrix: 'Matrix',\n scheduling: 'Scheduling',\n preview: 'Preview',\n },\n number_of_teams: 'Total Teams',\n updateExistingGames: 'Update Existing Games',\n confirm_publish_with_conflicts: 'Confirm Publish with Conflicts',\n isShared: {\n true: 'Shared',\n false: 'Not Shared'\n }\n },\n messages: {\n drop_drafts_csv: 'Drop your draft games file (.csv) here',\n generate_single_double: 'Generate a single or double rotation schedule',\n no_results: 'No draft games',\n no_teams_alert: 'Teams need to be added to the schedule before games can be generated.',\n one_team_alert: 'The schedule only contains one team.',\n gaps_alert: 'Gaps were found in the orders of the teams in the schedule. This may result in unexpected balancing.',\n no_teams_group_alert: 'Teams need to be added to the schedule group before games can be generated.',\n one_team_group_alert: 'The schedule group only contains one team.',\n gaps_group_alert: 'Gaps were found in the team orders of the schedule group. This may result in unexpected balancing.',\n no_teams_pool_alert: 'Teams need to be added to the schedule pools before games can be generated.',\n one_team_pool_alert: 'The schedule pools only contains one team.',\n gaps_pool_alert: 'Gaps were found in the team orders of the schedule pools. This may result in unexpected balancing.',\n unslotted_matchups_alert: 'Due to a combination of Double Rotation and an odd number of teams, some teams will have to play twice on the same day. These games will be generated without dates.',\n match_columns: 'Select the corresponding teams and surfaces to match with your selected columns.',\n match_teams: 'Selected teams not found in the schedule will be added to the schedule. All unmatched teams will be marked as TBD on games.',\n import_tool_drafts: 'To use this import tool, upload a file containing draft games and then select the schedule group (if applicable).',\n publish_help: 'Publishing a draft will make the game public and available for scorekeeping. Published games require a date, time and surface to be set and must have a sequence available for game numbering.',\n share_help: 'Sharing a draft will make the game available for the home team organization. Shared games require both teams to be allocated',\n confirm_clear_date: 'Are you sure you want to clear the date on %{smart_count} selected draft game? This will also reset the time and surface. |||| Are you sure you want to clear the date on %{smart_count} selected draft games? This will also reset the time and surface on these draft games.',\n confirm_delete: 'Are you sure you want to delete %{smart_count} draft game? |||| Are you sure you want to delete %{smart_count} draft games?',\n schedule_dates: 'Schedule Dates: %{startDate} to %{endDate}',\n change_dates_dialog: 'Changing the date will reset time and surface on these draft games.',\n teams_to_import: 'Importing these draft games will add %{teams} teams to the schedule',\n confirm_publish_with_conflicts: 'Some of the games you are about to publish have conflicts. Are you sure you want to continue?',\n duplicate_game_success: 'Game duplicate has been created as a draft game successfully. Go to schedule draft games to view.'\n },\n alerts: {\n update_game: 'Publishing this draft game will update %{game}',\n duplicate_game: 'Duplicating this game will create a new draft game. Once created, it will be available in the schedule.'\n },\n helpers: {\n round: 'Optional',\n comments: 'Optional - displayed on public schedule',\n request_reason: 'Only visible to approvers and will not be displayed on public schedule',\n limit_byes: 'Each round may have a team play twice when there are an odd number of teams.',\n start_round: 'Optional - specify if continuing an existing schedule',\n latest_round: 'Round %{smart_count} is the latest round from previous generated draft games',\n round_type: {\n 'Home Slots': 'Games will be scheduled using time slots from the home team settings (if available)',\n 'Weekdays': 'Games will be spread within the week (Monday, Tuesday, Wednesday of week 1, and so on)',\n },\n weekdays_type: {\n 'Rotating': 'Games will be alternating on weekdays (Monday week 1, Tuesday week 2, Wednesday week 3, and so on)',\n 'Consecutive': 'Games will be spread within the week (Monday, Tuesday, Wednesday of week 1, and so on)',\n },\n weekdays: 'Weekdays will alternate each week',\n weekdays_double: 'Weekdays will alternate within each week',\n start_date: 'New rounds will start on %{date}s',\n date_format: 'Select the date format used in your file',\n updateExistingGames: 'Update existing games in the schedule by matching on game numbers',\n isShared: 'Shares the game to the home team organization',\n cross_pool: 'Enabling Cross Pool Only will generate matchups strictly between teams that are not in the same pool. This option is only available when exactly 2 pools are selected, method is Total Rounds, and type is Single Rotation.',\n },\n validations: {\n must_start_on_day: 'Must start on a %{day}',\n must_be_after: 'Must be after %{date}',\n must_be_before_schedule_end_date: 'Must be before the schedule end date (%{date})',\n max_weekdays: 'Max %{smart_count} days of the week for Double Rotation',\n even_number: 'Must be an even amount',\n invalid_date_format: 'Some rows do not include a valid date (%{format})',\n start_without_end: 'Some rows have start time without end time',\n end_without_start: 'Some rows have end time without start time',\n date_without_date: 'Some rows have time without date',\n end_before_start: 'Some rows have end time before start time',\n manual_odd_numbers: 'Number of teams and number of games per team are both odd',\n same_group: 'Must be a team from a different group then the main group',\n matrix_team_duplicate: 'Team already in the matrix',\n },\n notifications: {\n added: '%{smart_count} draft game generated |||| %{smart_count} draft games generated',\n not_added: 'Unable to generate drafts',\n uploaded: '%{smart_count} draft game uploaded |||| %{smart_count} draft games uploaded',\n uploaded_teams_error: '%{smart_count} draft uploaded but failed to add teams to schedule |||| %{smart_count} drafts uploaded but failed to add teams to schedule',\n not_uploaded: 'Unable to import the draft games',\n slow_upload_warning: 'This process might take a while. Please wait patiently.',\n generator_load_error: 'Unable to load generator',\n published_games: 'Published %{smart_count} game successfully |||| Published %{smart_count} games successfully',\n published_games_error: 'Unable to publish game |||| Unable to publish games',\n publish_failed: 'Unable to publish %{smart_count} game |||| Unable to publish %{smart_count} games',\n missing_sequence: 'No sequence found for game numbering',\n invalid_games: 'The game is invalid |||| %{smart_count} games are invalid',\n sequence_exhausted: 'Not enough numbers left in the game number sequence to publish',\n shared_games: 'Shared %{smart_count} game successfully |||| Shared %{smart_count} games successfully',\n shared_games_error: 'Unable to share game |||| Unable to share games',\n set_date: 'Date on %{smart_count} draft game successfully set |||| Date on %{smart_count} draft games successfully set',\n set_date_error: 'Unable to set date on %{smart_count} draft game |||| Unable to set date on %{smart_count} draft games',\n delete_draft: '%{smart_count} draft game successfully deleted |||| %{smart_count} draft games successfully deleted',\n delete_draft_error: 'Error deleting %{smart_count} draft game |||| Error deleting %{smart_count} draft games',\n clear_date: 'Date cleared on %{smart_count} draft game |||| Date cleared on %{smart_count} draft games',\n clear_date_error: 'Error clearing date on %{smart_count} draft game |||| Error clearing date on %{smart_count} draft games',\n change_status: 'Status changed on %{smart_count} draft game |||| Status changed on %{smart_count} draft games',\n change_status_error: 'Status change error',\n },\n values: {\n methods: {\n 'Games per Team': 'Games per Team',\n 'Total Rounds': 'Total Rounds'\n },\n types: {\n 'Single Rotation': 'Single Rotation',\n 'Double Rotation': 'Double Rotation',\n 'Matrix': 'Matrix',\n },\n round_types: {\n 'Home Slots': 'Home Slots',\n 'Weekdays': 'Weekdays',\n },\n weekdays_types: {\n 'Rotating': 'Rotating',\n 'Consecutive': 'Consecutive'\n },\n dates: {\n 'YYYY-MM-DD': 'YYYY-MM-DD',\n 'MM-DD-YYYY': 'MM-DD-YYYY',\n 'DD-MM-YYYY': 'DD-MM-YYYY',\n 'MM/DD/YYYY': 'MM/DD/YYYY',\n 'DD/MM/YYYY': 'DD/MM/YYYY'\n }\n },\n steps: {\n match_columns: 'Match Columns',\n },\n },\n draftGameApprovals: {\n name: 'Approval |||| Approvals',\n labels: {\n approvals: 'Approvals',\n approve_request: 'Approve Request',\n decline_request: 'Decline Request',\n },\n messages: {\n request_reschedule: 'Once all required teams and organizations approve this request, the game will be automatically rescheduled with the draft update.',\n confirm_approve_request: 'Are you sure you want to approve these changes?',\n confirm_decline_request: 'Are you sure you want to decline these changes?',\n },\n alerts: {\n publish_game: 'Approving this request will automatically reschedule %{game}',\n request_changes: 'This request will need to be approved by all required parties in order to be rescheduled',\n cancel_draft: 'Declining this request will mark the draft game as cancelled',\n },\n helpers: {\n approval_comments: 'Optional - displayed on approvals list'\n },\n notifications: {\n approved_and_published: 'Request approved and game rescheduled',\n declined_and_cancelled: 'Request declined and draft game cancelled',\n request_approved: 'Request approved',\n request_declined: 'Request declined',\n respond_error: 'Error responding to request',\n },\n values: {\n Approved: 'Approved',\n Declined: 'Declined',\n Pending: 'Pending',\n }\n },\n drafts: {\n name: 'Draft |||| Drafts',\n name_legacy: 'Legacy Draft |||| Legacy Drafts',\n fields: {\n scheduleId: 'Schedule',\n groupId: 'Group',\n startDate: 'Start Date',\n totalWeeks: 'Total Weeks',\n totalRounds: 'Total Rounds',\n file: 'Schedule File',\n isPublished: 'Published',\n updatedAt: 'Updated At',\n publishedAt: 'Published At',\n options: {\n type: 'Type',\n limitByes: 'Limit round byes',\n crossGroup: 'Cross-group',\n roundType: 'Round Type',\n method: 'Method',\n weekdays: 'Days of the week',\n startDate: 'Start Date',\n totalWeeks: 'Total Weeks',\n totalRounds: 'Total Rounds',\n gamesPerTeam: 'Games Per Team',\n startNumber: 'Starting Number',\n breaks: 'Breaks',\n previousDraftId: 'Previous Draft',\n },\n columns: {\n homeTeamId: 'Home Team',\n awayTeamId: 'Away Team',\n arenaId: 'Surface',\n date: 'Date',\n startTime: 'Start Time',\n endTime: 'End Time',\n status: 'Status',\n number: 'Game Number',\n comments: 'Comments',\n }\n },\n actions: {\n add: 'New Draft',\n },\n labels: {\n card: {\n title: 'Saved Drafts',\n title_legacy: 'Saved Drafts (Legacy)'\n },\n analysis: 'Analysis',\n current_matchups: 'Current Matchups',\n new_matchups: 'New Matchups',\n office_matchups: 'Organization Matchups',\n byes: 'Byes',\n team: 'Team',\n group: 'Group',\n opponents: 'Opponents',\n conflicts: 'Conflicts',\n home: 'Home',\n away: 'Away',\n total: 'Total',\n shuffle: 'Shuffle',\n swap_matchups: 'Swap Matchups',\n set_active: 'Set Active',\n set_conflict: 'Set Conflict',\n generate_automatically: 'Generate automatically',\n generate_automatically_legacy: 'Generate automatically (Legacy)',\n manual_entry: 'Manual entry',\n previous_schedule: 'Previous schedule',\n add_team: 'Add Team',\n import_teams: 'Select Teams',\n previous_draft_alert: 'Restarting schedule',\n cross_group_alert: 'Cross-group Scheduling',\n replace_teams_alert: 'Replace Teams',\n use_previous_teams: 'Use Previous Draft Teams',\n unused_breaks: 'Unused Breaks',\n unscheduled_games: 'Unscheduled Games',\n changed_games: 'Changed Games',\n new_games: 'New Games',\n columns: 'Columns',\n round: 'Round |||| Rounds',\n week: 'Week',\n no_round: 'No round',\n no_date: 'No date',\n no_time: 'No time',\n no_venue: 'No surface',\n set_date: 'Set Date',\n clear_date: 'Clear Date',\n saved: 'Saved',\n shared: 'Shared',\n conflict_resolution: {\n title: 'Resolve Draft Conflict',\n subtitle: {\n modified: 'Someone else made changes at the same time as you. Do you want to accept their changes?',\n removed: 'Someone else removed the game you made changes to. Do you want to accept their changes?',\n added: 'Someone else made changes to the game you removed. Do you want to accept their changes?'\n },\n keep_mine: 'Keep mine',\n accept_theirs: 'Accept theirs',\n accept_delete: 'Accept delete',\n keep_delete: 'Keep delete',\n },\n steps: {\n info: 'Schedule Info',\n teams: 'Select Teams',\n games: 'Review Games',\n review: 'Publish',\n },\n types: {\n scheduler: 'Scheduler',\n schedule_upload: 'Schedule Upload',\n draft_schedule: 'Draft Schedule',\n },\n general: 'General',\n matchups: 'Matchups',\n scheduling: 'Scheduling',\n },\n messages: {\n no_byes: 'No byes',\n show_conflicts_only: 'Show conflicts only',\n games_selected: 'One game selected |||| %{smart_count} games selected',\n generate_single_double: 'Generate a single or double rotation schedule',\n draft_multiple_games: 'Individually draft multiple games at once',\n generate_new_schedule: 'Generate new schedule?',\n draft_already_has_games: 'This draft already has games. Generating a new schedule will replace these.',\n draft_already_has_games_share: 'This draft already has games. Generating a new schedule will replace these and unshare the draft.',\n want_generate_new_schedule: 'Do you want to generate a new schedule?',\n drop_your_schedule_file: 'Drop your schedule file (.csv) here',\n drop_another_schedule_file: '%{num} rows parsed. Drop another schedule file (.csv) here to replace.',\n replace_existing_games: 'Replace existing games?',\n draft_already_has_games_uploader: \"This draft already has games. If you've made changes to the schedule or teams, you should replace the existing games.\",\n want_replace_existing_games: 'Do you want to replace the existing games?',\n number_of_play: '%{smart_count} round of play |||| %{smart_count} rounds of play',\n number_of_games_per_team: '%{smart_count} game per team |||| %{smart_count} games per team',\n number_of_break: '%{smart_count} week of break |||| %{smart_count} weeks of break',\n publish_schedule: 'Publish schedule?',\n same_game_number_be_updated: 'Schedule changes described in the summary will be applied. Any existing games with the same game number will be updated.',\n discard_draft: 'Discard draft?',\n discard_unsaved_draft: 'Leaving will discard this unsaved draft.',\n save_changes: 'Save changes?',\n save_changes_before_leaving: 'Would you like to save changes before leaving?',\n number_teams_added: '%{number} teams will be added',\n number_existing_games: '%{number} out of %{total} existing games will be changed',\n number_games_added: '%{number} new games will be added',\n no_changes_number_games: 'No changes to %{number} existing games',\n no_changes_number_teams: 'No changes to %{number} existing teams',\n no_additional_games: 'No additional games will be added',\n previous_draft_alert: 'Another draft was previously published but not selected. This schedule will not continue from the last round in the previous draft.',\n cross_group_alert: 'Do you want to create a cross-group schedule?',\n replace_teams_alert: \"Do you want to replace the teams you've already selected in this draft?\",\n use_previous_teams: \"Do you want to replace this draft's teams with the teams from the previously selected draft?\",\n unused_breaks: 'Some of your breaks will be after when games will be scheduled to end. Breaks after %{date} will be ignored.',\n unscheduled_games: 'This draft will generate more games than can be scheduled prior to the schedule end date. Games generated after %{date} will not have dates assigned as a result.',\n unbalanced_schedule: {\n title: 'Unbalanced Schedule',\n message: \"With %{totalTeams} and %{totalRoundsOrGamesPerTeam}, this schedule will result in:\",\n games_per_total_teams: '%{totalTeams} with %{totalGames}',\n suggestions: \"To schedule an even amount of games per team, set the <strong>total number %{method} to %{suggestion}</strong>, or use an even number of teams.\",\n round: 'of round |||| of rounds',\n game_per_team: 'of game per team |||| of games per team',\n },\n review_errors: {\n title: 'Review Errors',\n message: 'The following games have validation errors that must be corrected:',\n },\n share: {\n title: 'Confirm Share',\n title_shared: 'Draft Shared',\n messages: {\n list: 'This draft will be shared with the following associations:',\n list_shared: 'This draft has already been shared with the following associations:',\n info: 'Associations will only be able to edit times and surfaces for their own games and will not be able to publish the draft.'\n }\n },\n renumber_games: {\n title: 'Renumber Games',\n actions: {\n renumber_games: 'Renumber Games',\n },\n messages: {\n description: 'Games will be renumbered by start time and any game number sequence gaps will be eliminated.',\n }\n }\n },\n alerts: {\n dated_in_past: '%{smart_count} game is dated in the past |||| %{smart_count} games are dated in the past',\n },\n helpers: {\n limitByes: 'Each round may have a team play twice when there are an odd number of teams.',\n crossGroup: 'The matches will be generated between the teams of the groups.',\n roundType: {\n 'Home Slots': 'Games will be scheduled using time slots from the home team settings (if available)',\n 'Weekdays': 'Games will be scheduled using a weekly rotation based on weekdays',\n },\n weekdays: 'Weekdays will alternate each week',\n weekdays_double: 'Weekdays will alternate within each week',\n startNumber: 'Warning: Previous schedule includes %{number}',\n totalWeeks: '%{smart_count} week |||| %{smart_count} weeks',\n totalGames: '%{smart_count} game |||| %{smart_count} games',\n totalRounds: '%{smart_count} game per team |||| %{smart_count} games per team',\n totalRounds_odd: '%{smart_count} if odd number of teams',\n previousDraftId: 'New schedule will start on round %{round}',\n startDate: 'New rounds will start on %{date}s',\n startDate_previous: 'Previous rounds started on %{date}s',\n previousDraftId_optional: 'Optional - use when continuing a schedule',\n no_team_time_slots: 'No team time slot'\n },\n validations: {\n must_contain_a_number: 'Must contain a number',\n must_start_on_day: 'Must start on a %{day}',\n must_be_after: 'Must be after %{date}',\n must_be_before: 'Must be before %{date}',\n must_be_before_schedule_end_date: 'Must be before the schedule end date (%{date})',\n break_last_week: 'Cannot break in the last week',\n max_weeks: 'Max %{smart_count} week (%{date}) |||| Max %{smart_count} weeks (%{date})',\n max_weekdays: 'Max %{smart_count} days of the week for Double Rotation',\n valid_date: 'Some values do not include a valid date (YYYY-MM-DD)',\n valid_time: 'Some values do not include a valid time (HH:mm)',\n same_column_start_time: 'Cannot use the same column as the start time',\n cross_group_teams: 'Cross-group require teams in 2 groups',\n same_game_number: 'This game number already exists within this draft'\n },\n notifications: {\n generating_schedule: 'Generating schedule...',\n unable_generate_schedule: 'Unable to generate schedule',\n unable_to_load_draft: 'Unable to load draft',\n unable_to_share_draft: 'Unable to share draft',\n unable_to_publish_draft: 'Unable to publish draft',\n unable_to_publish_draft_games: 'Unable to publish draft due to invalid games',\n schedule_published: 'Schedule published',\n draft_shared: 'Draft Shared',\n },\n values: {\n type: {\n Upload: 'Upload',\n Generated: 'Generated',\n Manual: 'Manual',\n },\n draft_type: {\n 'Single Rotation': 'Single Rotation',\n 'Double Rotation': 'Double Rotation',\n },\n round_type: {\n 'Home Slots': 'Home Slots',\n 'Weekdays': 'Weekdays'\n }\n }\n },\n officeAssignSettings: {\n name: 'Setting |||| Settings',\n fields: {\n officeId: 'Assigning Organization',\n declineReason: 'Reason required',\n declineHours: 'Minimum Hours',\n visibleDaysEnabled: 'Allow officials to view unassigned games',\n visibleDays: 'Visible Days',\n dailyLimit: 'Daily Limit',\n requestsEnabled: 'Allow officials to request games',\n declineEnabled: 'Allow officials to decline assignments',\n declineConfirmedDisabled: 'Disable once confirmed',\n removeAfterDecline: 'Remove officials when they decline',\n removeAfterRescheduled: 'Remove officials when a game is rescheduled',\n removeOnDateChange: 'Remove officials only if the date changed',\n assignmentVisibility: 'Assignment Visibility',\n assignerVisible: 'Show assigner name to officials',\n supervisorVisible: \"Show supervisor to officials\",\n claimableDriver: 'Driver',\n claimablePassenger: 'Passenger',\n claimableBreakfast: 'Breakfast',\n claimableLunch: 'Lunch',\n claimableDinner: 'Dinner',\n driverAmount: 'Rate ($/km)',\n passengerAmount: 'Rate ($/km)',\n breakfastAmount: 'Breakfast Amount',\n lunchAmount: 'Lunch Amount',\n dinnerAmount: 'Dinner Amount',\n driverExcludedDistance: 'Excluded Distance',\n passengerExcludedDistance: 'Excluded Distance',\n enforceConsecutive: 'Enforce consecutive assignments',\n allowEarlyClaims: 'Allow early claims',\n effectiveOfficialsList: 'Show officials lists from sub organizations'\n },\n actions: {\n edit: 'Edit Settings',\n },\n labels: {\n card: {\n title: 'Assigning Settings',\n },\n edit_assigning: 'Edit Assigning Settings',\n general: 'General',\n requests: 'Requests',\n declines: 'Declines',\n travel_claimables: 'Travel Expenses',\n per_diem_claimables: 'Per Diem Expenses',\n claims: 'Claims',\n },\n messages: {\n load_error: 'Unable to load the assigning settings',\n visible_days_disabled: 'Officials cannot view unassigned games',\n visible_same_day: 'Officials can only view same day games',\n visible_days_on: 'Officials can view up to %{number} days in future',\n visible_days_off: 'All active games visible',\n requests_enabled_on: 'Enabled',\n requests_enabled_off: 'Assignments only',\n decline_enabled_on: 'Decline before %{number} hours',\n decline_enabled_on_anytime: 'Decline anytime',\n decline_enabled_off: 'Disabled',\n reason_required: 'reason is required',\n reason_not_required: 'reason not required',\n disabled_after_confirmation: 'disabled after confirmation',\n },\n alerts: {\n assigning_not_enabled: 'Assigning is not enabled for this organization',\n visibleDaysEnabled: 'Visible days must be enabled for officials to request games'\n },\n helpers: {\n declineReason: 'Require officials to specify a reason when declining',\n declineHours: 'Number of hours prior to the game start time that an official is able to decline',\n visibleDaysEnabled: 'If disabled, officials will not be able to view unassigned games',\n visibleDays: 'Number of advance days that officials will be able to view active games',\n dailyLimit: 'Maximum number of games an official can be assigned to in a day',\n requestsEnabled: 'If disabled, officials will be able to view active games but not request',\n declineEnabled: 'If disabled, officials will be instructed to contact an assigner to be removed',\n declineConfirmedDisabled: 'Officals will be unable to decline after they accept',\n removeAfterDecline: 'Officials will skip the declined state and be immediately removed',\n removeAfterRescheduled: 'Changes to the date, time or surface will remove all officials',\n removeOnDateChange: 'Overrides the setting above to remove officials only if date has changed. Changes to time or surface only will not remove officials',\n assignmentVisibility: \"Visibility of an assigned official's name and status in the assigning panel\",\n assignerVisible: \"Officials will be able to see who assigned them\",\n supervisorVisible: \"Officials will be able to see the supervisor assignment\",\n excludedDistance: 'Distance that will be calculated at a rate of $0/km',\n enforceConsecutive: 'Officials will be required to either accept or decline all assignments within an hour from each other',\n allowEarlyClaims: 'Officials will be authorized to enter claims early prior to the end of the game',\n effectiveOfficialsList: 'Officials lists from all the sub organizations will be able to be selected and shown from this organization'\n },\n values: {\n assignmentVisibility: {\n Visible: 'Name and Status',\n Status: 'Status Only',\n Hidden: 'Hidden'\n }\n }\n },\n officeClaimsSettings: {\n fields: {\n name: 'Name',\n type: 'Type',\n amount: 'Amount',\n rate: 'Rate',\n excludedDistance: 'Excluded Distance'\n },\n labels: {\n name: 'Claims Settings'\n },\n helpers: {\n amount: {\n Expense: 'Maximum amount',\n 'Per Diem': 'Flat rate',\n },\n rate: 'Rate ($) per KM',\n excludedDistance: 'Excluded distance for a travel claim',\n no_options: 'No Claim Available - Contact your Assigner'\n },\n actions: {\n add: 'Add Claim Setting'\n },\n values: {\n secondaryText: {\n 'Travel': 'Rate per KM',\n 'Per Diem': 'Amount',\n 'Expense': 'Maximum Amount'\n }\n }\n },\n gameAssignSettings: {\n name: 'Setting |||| Settings',\n fields: {\n gameId: 'Game',\n systemId: 'Officiating System',\n officeId: 'Assigning Organization',\n feesId: 'Pay Structure',\n minReferee: 'Minimum Referee Level',\n minLinesperson: 'Minimum Linesperson Level',\n minOfficial: 'Minimum Official Level',\n minScorekeeper: 'Minimum Scorekeeper Level',\n minTimekeeper: 'Minimum Timekeeper Level',\n minGrade: 'Minimum Official Grade',\n minRefereeGrade: 'Minimum Referee Grade',\n minLinespersonGrade: 'Minimum Linesperson Grade',\n minAge: 'Minimum Age',\n fees: 'Fees',\n status: 'Status',\n },\n labels: {\n referee: 'Referee Level',\n linesperson: 'Linesperson Level',\n official: 'Official Level',\n scorekeeper: 'Scorekeeper Level',\n timekeeper: 'Timekeeper Level',\n grade: 'Official Grade',\n referee_grade: 'Referee Grade',\n linesperson_grade: 'Linesperson Grade',\n set_assigning_settings: 'Set Assigning Settings',\n set_assigner: 'Set Assigner',\n assigning_settings: 'Assigning Settings',\n change_assigner: 'Change Assigner',\n },\n helpers: {\n status_draft: \"Changing status from active to draft will notify assigned officials that they've been removed from the game\"\n },\n messages: {\n change_assigner: 'To change the assigner for all positions, select the organization of the new assigner and do not select a position.',\n change_assigner_partial: 'To partially delegate assignments to another assigner, select the organization and position. Games that do not have the selected position or have already assigned the position to an official will be ignored.',\n },\n notifications: {\n updated_game_settings: 'Updated settings for %{smart_count} game |||| Updated settings for %{smart_count} games',\n updating_settings_error: 'Something went wrong while updating settings',\n errors: {\n invalid_fees: 'Invalid pay structure',\n }\n },\n alerts: {\n bulk_assign_settings: 'Check the settings you want to change. A checked setting with no value will clear the current value.'\n }\n },\n assignFees: {\n name: 'Pay Structure |||| Pay Structures',\n fields: {\n name: 'Name',\n officeId: 'Organization',\n Referee: 'Referee',\n Linesperson: 'Linesperson',\n LinespersonTwo: 'Linesperson 2',\n LinespersonThree: 'Linesperson 3',\n Official: 'Official',\n Scorekeeper: 'Scorekeeper',\n Timekeeper: 'Timekeeper',\n Supervisor: 'Supervisor',\n fees: 'Fees',\n isArchived: 'Archived',\n },\n actions: {\n add: 'Add Pay Structure',\n },\n labels: {\n card: {\n title: 'Pay Structures',\n subtitle: 'Some pay structures may also come from the parent organization.',\n },\n edit: 'Update Pay Structure',\n },\n values: {\n isArchived: {\n archived: 'Archived',\n notArchived: 'Active'\n }\n },\n validations: {\n assign_fee_in_use: 'The pay structure is being used. Create a new structure to make modifications',\n delete_assign_fee_in_use: 'Cannot delete a pay structure that is being used',\n cannot_archive: 'Assign rules must be removed before archiving this pay structure'\n },\n alerts: {\n cannot_update_amounts: 'In order to modify the amounts, you must create a new pay structure. You can then archive this pay structure after moving its assign rules to the new pay structure.'\n }\n },\n assignRules: {\n name: 'Assign Rule |||| Assign Rules',\n fields: {\n categoryIds: 'Categories',\n types: 'Schedule Types',\n groupIds: 'Groups',\n attributes: {\n duration: 'Game Length',\n days: 'Days',\n time: 'Before Time (24h)',\n effectiveDate: 'Effective Date'\n },\n order: 'Order',\n officeId: 'Organization',\n value: 'Value',\n type: 'Type',\n stopInheritance: 'Stop rule inheritance'\n },\n options: {\n Active: 'Active',\n Draft: 'Draft',\n Arena: 'Venue',\n 'Arena Primary': \"Venue's Primary Organization\",\n Schedule: 'Schedule',\n Home: 'Home Team Organization',\n Office: 'Organization',\n 'Home Parent': 'Home Team Parent Organization',\n Zone: 'Zone',\n systemId: 'Assign System',\n feesId: 'Pay Structure',\n officeId: 'Assigned by',\n minReferee: 'Referee Level',\n minLinesperson: 'Linesperson Level',\n minOfficial: 'Official Level',\n minScorekeeper: 'Scorekeeper Level',\n minTimekeeper: 'Timekeeper Level',\n minRefereeGrade: 'Referee Grade',\n minLinespersonGrade: 'Linesperson Grade',\n minAge: 'Minimum Age',\n assignType: 'Assigned via',\n status: 'Initial status',\n },\n actions: {\n add: 'Add Assign Rule',\n },\n labels: {\n card: {\n title: 'Game Specifications',\n subtitle: \"When a game is created or updated, these rules are processed to determine the official requirements.\"\n },\n alt_card: {\n title: 'Assigner Determination',\n subtitle: \"When a game is created or updated, these rules are processed to determine which organization will assign the games.\"\n },\n edit: 'Update Assign Rule',\n rule: 'Rule',\n default_rules: 'Default Rules',\n criteria: 'Game Criteria',\n duration: 'Duration: >= %{duration} min',\n days: 'Days: %{days}',\n time_before: 'Time: Before %{time}',\n effective: 'Effective: %{date}',\n rules: {\n feesId: 'Fees',\n officeId: 'Assigned by',\n minReferee: 'Referee Level: %{value}',\n minLinesperson: 'Linesperson Level: %{value}',\n minOfficial: 'Official Level: %{value}',\n minScorekeeper: 'Scorekeeper Level: %{value}',\n minTimekeeper: 'Timekeeper Level: %{value}',\n minGrade: 'Official Grade: %{value}',\n minRefereeGrade: 'Referee Grade: %{value}',\n minLinespersonGrade: 'Linesperson Grade: %{value}',\n minAge: 'Minimum Age: %{value}',\n assignType: 'Assigned via %{value}',\n status: 'Initial status: %{value}',\n },\n apply_rules: 'Apply Assigning Rules',\n applied_settings: 'Applied Settings',\n assignOffices: 'Apply Game Assign Settings',\n scheduleOffices: \"Update Game Officials Assigners\"\n },\n helpers: {\n assignType: 'The assigner will be automatically determined based on the related organization',\n assignTypes: {\n Arena: \"The assigner will be automatically determined based on the related venue's organization\",\n 'Arena Primary': \"The assigner will be automatically determined based on the venue's primary organization\",\n Schedule: 'The assigner will be automatically determined based on the schedule organization',\n Home: 'The assigner will be automatically determined based on the home teams organization',\n 'Home Parent': 'The assigner will be automatically determined based on the home temas parent organization',\n Office: 'The assigner will be automatically determined based on the games organization',\n Zone: 'The assigner will be automatically determined based on the zone',\n },\n officeId: 'Games will be assigned by the selected organization',\n scheduledBy: 'This rule applies to games scheduled by or under this organization',\n assignedBy: 'This rule applies to games assigned by or under this organization',\n categoryIds: 'Optional - All categories if empty',\n types: 'Optional - All schedule types if empty',\n groupIds: 'Optional - All groups if empty',\n duration: 'Optional - In minutes',\n stopInheritance: 'If enabled, this rule will supersede any matching rules in sub organizations',\n applied_settings: 'Optional - select a subset of settings to apply, otherwise if none are selected, all settings will be applied'\n },\n values: {\n types: TYPES,\n },\n validations: {\n conflicts: 'Change order to resolve overlapping criteria',\n inheritance: 'Criteria overlaps with a higher preceding rule that prevents overriding',\n archived_fee: 'Cannot add or edit an assign rule in an archived pay structure',\n },\n alerts: {\n existing_games: 'Select the games to apply assigning rules for. Existing settings will be overwritten.',\n scheduleOffices: 'This will redetermine the assigner based on game details, and determine assign settings based on that assigner.',\n assignOffices: 'This will determine settings based on the existing assigner.',\n new_games_only_title: 'Assigning rules are only applied when games are created or rescheduled',\n new_games_only: 'To reapply assigning rules on existing games, click <strong>Apply Assigning Rules</strong> in the actions menu.',\n determined_by: 'Assigning organization was determined by \"%{rule}\" from %{office}',\n },\n notifications: {\n apply_rules_success: 'Assigning rules have been applied to %{smart_count} game. |||| Assigning rules have been applied to %{smart_count} games.'\n },\n tooltips: {\n determine_via: `\n <div>\n <h3>The assigner can be determined via the following game properties:</h3>\n <ul>\n <li>\n <strong>Venue</strong>\n <ul>\n <li>Based on the venue organizations.</li>\n <li>If the home team is any of these organizations, that team’s organization will become the assigner.</li>\n <li>If not, it'll look for an organization from the league restrictions of the venue organization.</li>\n <li>Otherwise, the primary venue organization will become the assigner.</li>\n </ul>\n </li>\n <li>\n <strong>Venue Primary Organization</strong>\n <ul>\n <li>The venue's primary organization will become the assigner.</li>\n <li>Otherwise, no assigner will be chosen.</li>\n </ul>\n </li>\n <li>\n <strong>Schedule</strong>\n <ul>\n <li>The schedule organization will become the assigner.</li>\n </ul>\n </li>\n <li>\n <strong>Home Team Organization</strong>\n <ul>\n <li>The home team’s organization will become the assigner.</li>\n <li>If TBA/TBD, this falls back to Venue assigner determination above.</li>\n </ul>\n </li>\n <li>\n <strong>Home Team Parent Organization</strong>\n <ul>\n <li>Same as Home Team Organization, but based on the parent organization of the home team organization.</li>\n </ul>\n </li>\n <li>\n <strong>Zone</strong>\n <ul>\n <li>Based on the venue organizations, if a Zone organization is available it’ll be used as the assigner.</li>\n <li>Otherwise, this falls back to the primary venue organization.</li>\n </ul>\n </li>\n </ul>\n <p>\n If the determined organization is a League, Tournament or Cup organization, from any of these rules, the parent organization will be selected instead.\n </p>\n </div>\n `\n }\n },\n assignSettings: {\n name: 'Setting |||| Settings',\n labels: {\n required_level: 'Required Level',\n required_grade: 'Required Grade',\n required_age: 'Required Age',\n },\n messages: {\n assigned_by: 'Assigned by %{name}',\n },\n helpers: {\n systemId: 'Current assignments do not match the available positions',\n },\n validations: {\n invalid_level: 'Invalid Level',\n invalid_grade: 'Invalid Grade',\n invalid_age: 'Invalid Age',\n min_setting_range: 'Must be greater than or equal to 0.',\n },\n },\n assignSystems: {\n name: 'Assign System |||| Assign Systems',\n fields: {\n name: 'Name',\n referees: 'Referees',\n linespersons: 'Linespersons',\n linespersonsTwo: 'Linespersons 2',\n linespersonsThree: 'Linespersons 3',\n officials: 'Officials',\n scorekeepers: 'Scorekeepers',\n timekeepers: 'Timekeepers',\n supervisors: 'Supervisors',\n },\n actions: {\n add: 'Add Assign System',\n },\n labels: {\n card: {\n title: 'Assign Systems',\n subtitle: 'Assign Systems determine how many officials are needed for a game.',\n },\n edit: 'Update Assign System',\n },\n },\n assignTargets: {\n name: 'Assigner Override |||| Assigner Overrides',\n fields: {\n targetType: 'Type',\n targetId: 'Source',\n groupIds: 'Groups',\n officeId: 'Assigner',\n },\n actions: {\n add: 'Add Assigner Override',\n },\n labels: {\n card: {\n title: 'Assigner Overrides',\n subtitle: 'Override assigning rules to use a specific assigner for a schedule or instead of another assigner, optionally limited by groups.',\n },\n edit: 'Update Assigner Override',\n add_override: 'Add Override',\n },\n validations: {\n missing_type: 'Missing Type',\n unique_target: 'An override is already defined',\n unique_group: 'An override is already defined with the same group',\n }\n },\n pages: {\n name: 'Page |||| Pages',\n fields: {\n title: 'Title',\n slug: 'Slug',\n order: 'Order',\n content: 'Content',\n sectionId: 'Section',\n coverId: 'Cover Image',\n officeId: 'Organization',\n },\n actions: {\n edit: 'Edit Page',\n },\n labels: {\n add: 'New Page',\n },\n helpers: {\n order: 'Optional - defaults to alphabetical order',\n },\n },\n posts: {\n name: 'Post |||| News',\n fields: {\n title: 'Title',\n slug: 'Slug',\n date: 'Date',\n content: 'Content',\n coverId: 'Cover Image',\n officeId: 'Organization',\n },\n actions: {\n edit: 'Edit Post',\n },\n labels: {\n add: 'New Post',\n },\n messages: {\n start_writing_here: 'Start writing here...',\n }\n },\n registrations: {\n name: 'Registration |||| Registrations',\n fields: {\n seasonId: 'Season',\n divisionId: 'Division',\n participantId: 'Participant',\n officeId: 'Organization',\n },\n actions: {\n add: 'Add Registration',\n },\n labels: {\n card: {\n title: 'Registrations',\n },\n edit: 'Update Registration',\n import: 'Import Registrations',\n file: 'Registrations File',\n },\n messages: {\n drop_registrations_csv: 'Drop your registrations file (.csv) here',\n use_import_tool: \"To use this import tool, upload a CSV file with columns for the participant's unique Member ID, first name, last name, and registered division.\",\n },\n alerts: {\n create_new_participants: '<strong>Use with caution.</strong> This import tool will create new participants that do not match existing Member IDs.',\n },\n helpers: {\n select_columns: \"You'll be asked to select columns after selecting your file\",\n valid_registrations: '%{number}/%{total} rows have valid registrations',\n match_existing_participant: 'This Member ID is used to match an existing participant or create a new participant for this registration.',\n },\n notifications: {\n registrations_updated: '%{number} registrations were updated.',\n import_registrations_error: 'Unable to import registrations.',\n },\n },\n sections: {\n name: 'Section |||| Sections',\n fields: {\n name: 'Name',\n order: 'Order',\n officeId: 'Organization',\n },\n actions: {\n add: 'Add Section',\n },\n labels: {\n card: {\n title: 'Sections',\n subtitle: 'Website header sections to organize pages.',\n },\n edit: 'Update Section',\n }\n },\n webevents: {\n name: 'Event |||| Events',\n fields: {\n title: 'Title',\n content: 'Content',\n startTime: 'Start Time',\n endTime: 'End Time',\n allDay: 'All Day',\n location: 'Location',\n officeId: 'Organization'\n },\n actions: {\n edit: 'Edit Event',\n },\n labels: {\n card: {\n title: 'Events',\n },\n add: 'New Event',\n dates: 'Dates',\n },\n },\n announcements: {\n name: 'Announcement |||| Announcements',\n fields: {\n title: 'Title',\n seasonId: 'Season',\n type: 'Type',\n content: 'Content',\n targetType: 'Recipients Type',\n targetId: 'Recipients',\n participantId: 'Author',\n officeId: 'Organization',\n },\n actions: {\n edit: 'Edit Announcement',\n },\n labels: {\n officiating: 'Officiating Announcements',\n add: 'New Announcement',\n edit: 'Update Announcement',\n },\n messages: {\n send_email_officials: 'Send an email to officials',\n recipients: {\n all_team_staff: 'all team staff',\n all_available_officials: 'all available officials',\n all_team_staff_all_available_game_officials: 'all team staff & available game officials',\n all_list_members: 'all list members',\n }\n },\n helpers: {\n destination_sent: 'An email will be sent to %{recipient} that have a verified contact',\n destination_not_sent: 'Notifications are not sent for updates.'\n },\n values: {\n type: {\n General: 'General',\n League: 'League',\n Officiating: 'Officiating',\n },\n targetType: {\n Office: 'Organization',\n List: 'List',\n },\n }\n },\n lists: {\n name: 'List |||| Lists',\n fields: {\n name: 'List Name',\n officeId: 'Organization',\n members: 'Members'\n },\n actions: {\n add: 'Add list',\n edit: 'Edit list',\n },\n labels: {\n card: {\n title: 'Lists',\n subtitle: 'Assigners can use lists as a filter when assigning games.',\n },\n official: 'Official Lists',\n import_list_members: 'Import List Members',\n list_members_file: 'List Members File',\n },\n messages: {\n drop_list_members_csv: 'Drop your list members file (.csv) here',\n import_tool_list_members: \"To use this import tool, upload a CSV file with a column for the official's unique Member ID.\",\n },\n validation: {\n already_exists: 'Already in this list',\n },\n helpers: {\n match_existing_participant: 'Participants will be ignored if they are not a qualified official.',\n create_list: 'A list needs to be created prior to importing members.',\n quick_assign_tooltip: 'This filter is designated for assigning. Select an assigning organization to use it.',\n },\n },\n listMembers: {\n name: 'List Members',\n fields: {\n listId: 'List',\n },\n actions: {\n add_officials: 'Add Officials',\n },\n labels: {\n add_member: 'Add Members',\n add_officials: 'Add Qualified Officials to %{name}',\n },\n notifications: {\n list_members_added: '%{smart_count} member was added to the list. |||| %{smart_count} members were added to the list.',\n list_officials_added: '%{smart_count} official was added to the list. |||| %{smart_count} officials were added to the list.',\n add_list_members_error: 'Unable to add members to the list.',\n add_list_officials_error: 'Unable to add officials to the list.',\n list_members_removed: 'Removed %{smart_count} member from the list. |||| Removed %{smart_count} members from the list.',\n list_officials_removed: 'Removed %{smart_count} official from the list. |||| Removed %{smart_count} officials from the list.',\n remove_list_members_error: 'Unable to remove members to the list.',\n remove_list_officials_error: 'Unable to remove officials to the list.',\n import_list_members_error: 'Unable to import list members.',\n import_list_officials_error: 'Unable to import list officials.',\n }\n },\n infractions: {\n name: 'Infraction |||| Infractions',\n fields: {\n seasonId: 'Season',\n officeId: 'Organization',\n ruleId: 'Rule',\n code: 'Code',\n typeId: 'Type',\n severity: 'Severity',\n parentId: 'Parent Infraction',\n externalId: 'External ID',\n legacyName: 'Legacy Name',\n legacyDuration: 'Legacy Duration'\n },\n actions: {\n add: 'Add Infraction',\n },\n labels: {\n card: {\n title: 'Infractions',\n subtitle: 'A penalty is the result of an infraction.',\n },\n add: 'New Infraction',\n edit: 'Update Infraction',\n parent_code: 'Parent Code',\n parent_office: 'Parent Organization'\n },\n helpers: {\n parentId: 'Optional - Link this infraction with a parent organization infraction',\n },\n values: {\n severity: {\n Low: 'Low',\n Medium: 'Medium',\n High: 'High',\n Severe: 'Severe',\n },\n }\n },\n infractionTypes: {\n name: 'Infraction Type |||| Infraction Types',\n fields: {\n officeId: 'Organization',\n name: 'Name',\n abbreviation: 'Abbreviation',\n description: 'Description',\n duration: 'Duration',\n isShorthanded: 'Team Shorthanded',\n isEjection: 'Offender Ejected',\n order: 'Display Order',\n servingOrder: 'Serving Order',\n },\n helpers: {\n isShorthanded: 'Whether the team becomes shorthanded or a substitution is allowed',\n isEjection: 'Penalty results in the offending player being ejected from the game',\n },\n actions: {\n add: 'Add Type',\n },\n labels: {\n card: {\n title: 'Infraction Types',\n subtitle: 'Types determine the behaviour of penalties.',\n },\n add: 'New Type',\n edit: 'Update Type',\n }\n },\n ruleSections: {\n name: 'Rule Section |||| Rule Sections',\n fields: {\n seasonId: 'Season',\n officeId: 'Organization',\n name: 'Name',\n code: 'Code',\n order: 'Display Order',\n },\n actions: {\n add: 'Add Rule Section',\n },\n labels: {\n card: {\n title: 'Playing Rules',\n subtitle: 'Set of rules detailing infractions and corresponding rule options available for scorekeeping.',\n },\n add: 'New Section',\n edit: 'Update Section',\n },\n },\n rules: {\n name: 'Rule |||| Rules',\n fields: {\n seasonId: 'Season',\n officeId: 'Organization',\n sectionId: 'Section',\n name: 'Name',\n code: 'Code',\n order: 'Display Order',\n },\n actions: {\n add: 'Add Rule',\n },\n labels: {\n add: 'New Rule',\n edit: 'Update Rule',\n },\n },\n ruleOptions: {\n name: 'Rule Option |||| Rule Options',\n fields: {\n seasonId: 'Season',\n officeId: 'Organization',\n ruleId: 'Rule',\n members: 'Members',\n parentId: 'Parent Option',\n order: 'Display Order',\n },\n actions: {\n add: 'Add Rule Option'\n },\n labels: {\n card: {\n title: 'Rule Options',\n subtitle: 'The choices available when scorekeeping.',\n },\n add: 'New Rule Option',\n edit: 'Update Rule Option',\n },\n },\n ruleOptionMembers: {\n name: 'Option Member |||| Option Members',\n fields: {\n optionId: 'Rule Option',\n infractionId: 'Infraction',\n order: 'Serving Order',\n },\n actions: {\n add: 'Add Infraction'\n },\n labels: {\n add: 'Add Rule Option',\n edit: 'Update Rule Option',\n },\n },\n infractionAccumulations: {\n name: 'Automatic Infraction |||| Automatic Infractions',\n fields: {\n seasonId: 'Season',\n officeId: 'Organization',\n name: 'Name',\n count: 'Accumulation Count',\n members: 'Accumulating Infractions',\n infractionId: 'Resulting Infraction',\n isReplacement: 'Replacement'\n },\n actions: {\n add: 'Add Automatic Infraction Rule'\n },\n labels: {\n card: {\n title: 'Automatic Infraction Rules',\n subtitle: 'Accumulation rules to trigger an infraction when conditions are met within the same game.',\n },\n add: 'New Automatic Infraction Rule',\n edit: 'Update Automatic Infraction Rule',\n },\n helpers: {\n isReplacement: 'If enabled, the resulting infraction will replace the original penalty instead of creating a new one.'\n }\n },\n infractionAccumulatiomMembers: {\n name: 'Accumulation Member |||| Accumulation Members',\n fields: {\n accumulationId: 'Accumulation',\n infractionId: 'Infraction',\n },\n actions: {\n add: 'Add Infraction'\n },\n labels: {\n add: 'New Member',\n edit: 'Update Member',\n },\n },\n rulebooks: {\n name: 'Rulebook |||| Rulebooks',\n fields: {\n name: 'Name',\n infractions: 'Infractions',\n ejections: 'Automatic Game Ejections',\n doubleminors: 'Double Minors',\n variances: 'Variances',\n officeId: 'Organization',\n seasonId: 'Season',\n category: 'Category',\n categoryIds: 'Categories',\n code: 'Code',\n choices: 'Choices',\n durations: 'Durations',\n duration: 'Duration',\n isStick: 'Stick infraction',\n isArchived: 'Archived',\n description: 'Short Description',\n length: 'Length (seconds)',\n requireIncidentReport: 'Require Incident Report',\n timed: 'Timed Duration',\n lineup_limits: 'Lineup Limits',\n scheduleTypes: \"Schedule Types\",\n pitcherLimits: 'Pitcher Limits',\n throwsLimits: \"Throws Rests\",\n inningsPitchedLimits: \"Innings Pitched Limits\",\n inningsPitchedRests: \"Innings Pitched Rests\",\n limitType: 'Limit Type',\n restingDays: \"Rest\",\n startDate: \"Start Date\",\n endDate: \"End Date\",\n },\n actions: {\n add: 'Add Rulebook',\n add_infraction: 'Add Infraction',\n add_duration: 'Add Duration',\n add_variance: 'Add Variance',\n add_limits: \"Add Limits\",\n },\n labels: {\n card: {\n title: 'Lineup Limits',\n baseball_title: 'Lineup / Pitching Limits',\n subtitle: 'Policies to enforce the minimum / maximum members allowed on games.',\n baseball_subtitle: 'Policies to enfore pitching limits and the minimum / maximum members allowed on games.',\n },\n add: 'New Rulebook',\n add_limits: 'Add Limits',\n edit: 'Update Rulebook',\n edit_infraction: 'Update Infraction',\n edit_duration: 'Update Duration',\n edit_variance: 'Edit Variance',\n edit_limits: 'Edit Limits',\n position: 'Position',\n players: 'Players',\n skaters: 'Skaters',\n goalies: 'Goalies',\n staff: 'Staff',\n durations: 'Durations',\n infractions: 'Infractions',\n lineup_limits: 'Lineup Limits',\n pitcher_limits: 'Pitcher Limits',\n variances: 'Variances',\n additional_policies: 'Additional Policies',\n throws_limits: \"Throws Rests\",\n innings_pitched_limits: \"Innings Pitched Limits\",\n innings_pitched_rests: \"Innings Pitched Rests\"\n },\n alerts: {\n durations: 'Durations are used to create Infractions',\n infractions: 'Infractions in rulebooks from parent organizations will be inherited (but are not shown here). This organization may replace them by using the same infraction name.',\n lineup_limits: 'Default is unlimited unless specified otherwise or inherited from the parent organization(s).',\n pitcher_limits: 'Default is unlimited unless specified otherwise or inherited from the parent organization(s).',\n additional_policies: 'Additional policies may be left blank to be inherited from parent organization(s) where applicable.',\n rulebook_independence: 'If no rules are set at the branch level, games will inherit the rules from the federation.'\n },\n helpers: {\n ejections: 'A Game Ejection infraction will be automatically added after 3 penalties of the selected types',\n name: 'Note: Name cannot be changed once rulebook is saved',\n abbreviation: 'Replaces the time duration of penalties in the Official Game Report',\n requireIncidentReport: 'An incident report will be required for penalties of this duration.',\n timed: 'Penalties with timed durations take into consideration the serving time of the player',\n isStick: 'Infraction will be counted towards stick game ejection policy, if applicable',\n isArchived: 'Archived infractions are not shown when adding a penalty. Use this to retire an infraction instead of deleting.',\n },\n validation: {\n min: \"Min must be lower than max\",\n max: \"Max must be higher than min\",\n startDate: \"Start Date must be before End Date\",\n endDate: \"End Date must be after Start Date\",\n },\n values: {\n lineupLimits: {\n between: 'Between %{min} and %{max} %{position}',\n min: 'At least %{min} %{position}',\n max: 'Up to %{max} %{position}',\n },\n pitcherLimits: {\n scheduleTypes: {\n ...TYPES,\n League: 'Regular Season'\n },\n limitType: {\n Daily: 'Daily',\n Weekly: 'Weekly',\n },\n throwsLimits: {\n between: 'Between %{min} and %{max} throw(s) = %{restingDays} resting day(s)',\n },\n inningsPitchedLimits: {\n always: '%{limitType}: %{limit} inning(s) max',\n from: '%{limitType}: %{limit} inning(s) max from %{startDate}',\n between: '%{limitType}: %{limit} inning(s) max between %{startDate} and %{endDate}',\n until: \"%{limitType}: %{limit} inning(s) max until %{endDate}\",\n },\n inningsPitchedRests: {\n between: 'Between %{min} and %{max} inning(s) = %{restingDays} resting day(s)',\n },\n },\n ejections: {\n None: 'None',\n Contact: 'Head Contact & Stick Infractions',\n All: 'All Infractions',\n },\n severity: {\n low: 'Low',\n medium: 'Medium',\n high: 'High',\n severe: 'Severe',\n }\n }\n },\n help: {\n name: 'Article |||| Help',\n fields: {\n title: 'Title',\n content: 'Content',\n category: 'Category',\n roles: 'Applies To',\n isPublished: 'Published',\n updatedAt: 'Last Updated',\n },\n actions: {\n edit: 'Edit Article',\n },\n labels: {\n add: 'New Article',\n documentation: 'Documentation',\n help_center: 'Help Center',\n },\n alerts: {\n article_not_published_yet: 'This article has not yet been published.',\n },\n helpers: {\n roles: 'Article will only be visible to the selected roles',\n },\n values: {\n roles: {\n 'super-admin': 'Super Admins',\n admin: 'Admins',\n registrar: 'Registrars',\n director: 'League Directors',\n manager: 'League Managers',\n organizer: 'Schedule Organizers',\n 'assigning-manager': 'Assigning Managers',\n assigner: 'Assigners',\n official: 'Officials',\n player: 'Players',\n coach: 'Team Staff',\n assistant: 'Team Assistants',\n association: 'Associations',\n editor: 'Website Editors',\n scorekeeper: 'Scorekeepers',\n }\n }\n },\n reports: {\n name: 'Report |||| Reports',\n messages: {\n empty: 'Your league has not made any reports available.',\n error: 'Unable to load your reports (%{error}). You may need to try again later.',\n },\n values: {\n scheduleType: TYPES,\n types: {\n AP: \"AP\",\n Admin: \"Admin\",\n Assigning: \"Assigning\",\n Penalty: \"Penalty\",\n Scoring: \"Scoring\"\n },\n }\n },\n seasons: {\n name: 'Season |||| Seasons',\n fields: {\n seasonId: 'Season',\n },\n alerts: {\n viewing_inactive_season: \"You are currently managing %{season} season, which is not the current season.\",\n },\n values: {\n seasonId: {\n '2025-26': '2025-26',\n '2024-25': '2024-25',\n '2023-24': '2023-24',\n '2022-23': '2022-23',\n '2021-22': '2021-22',\n '2020-21': '2020-21',\n '2019-20': '2019-20',\n '2018-19': '2018-19',\n }\n }\n },\n identities: {\n name: 'Identity |||| Identities',\n fields: {\n accountId: 'Account',\n participantId: 'Participant',\n isPrimary: 'Primary',\n },\n actions: {\n add: 'Add Identity',\n },\n labels: {\n edit: 'Update Identity',\n },\n helpers: {\n isPrimary: 'The primary identity is the default participant the account will see after logging in.',\n }\n },\n groups: {\n name: 'Group |||| Groups',\n fields: {\n seasonId: 'Season',\n name: 'Name',\n type: 'Type',\n categoryIds: 'Categories',\n },\n actions: {\n add: 'Add Group',\n },\n labels: {\n card: {\n title: 'Groups',\n subtitle: \"Split schedules into multiple cohorts within this league. When adding teams or games to a schedule, you'll be asked to select a group.\",\n },\n edit: 'Update Group',\n },\n messages: {\n all_groups: 'All Groups',\n },\n helpers: {\n categoryIds: 'Optional - All categories if empty',\n },\n values: {\n type: {\n ...TYPES,\n Jamboree: 'Jamboree',\n Challenge: 'Challenge',\n Invitational: 'Invitational',\n 'Program Of Excellence': 'Program Of Excellence',\n 'Evaluation Camp': 'Evaluation Camp',\n },\n },\n },\n suspensions: {\n name: 'Suspension |||| Suspensions',\n fields: {\n penaltyId: 'Penalty',\n teamId: 'Team',\n participantId: 'Participant',\n requiredGames: 'Games To Serve',\n positionGroup: 'Position',\n code: 'Code',\n gameId: 'Game',\n status: 'Status',\n durationType: 'Duration Type',\n expiry: 'Expiry Date',\n additionalPurgingTeamId: 'Additional Team Eligible To Purge',\n disciplineStatus: 'Discipline Status',\n isAutomatic: 'Automatic',\n },\n labels: {\n edit: 'Edit Suspension',\n playing: 'Playing',\n played: 'Played',\n purging: 'Purging',\n purged: 'Purged',\n not_serving: 'Not serving',\n suspended: 'Suspended',\n not_suspended: 'Not suspended',\n admin: 'Administrative',\n indefinite: 'Indefinite',\n manual_direct: 'Other',\n type: 'Type',\n manual: 'Manual Suspension',\n automatic: 'Automatic Suspension',\n details: 'Details',\n participant_history: 'Participant Suspensions History',\n requiredGames: 'Initial Game(s)',\n disciplineAdditionalGames: 'Additional Game(s)',\n effectiveRequiredGames: 'Total Game(s)'\n },\n actions: {\n add: 'Add Suspension',\n },\n messages: {\n playing: 'Playing while suspended',\n unpurgeable: 'Serving, not purging due to different team',\n required_games: '%{smart_count} Game |||| %{smart_count} Games'\n },\n alerts: {\n automatic: {\n title: 'Automatic Suspension',\n message: 'This suspension has been automatically assessed by a sanction rule and cannot be modified. Supplemental games can be added by the discipline committee or adding a new suspension onto the same participant and game.',\n },\n },\n values: {\n positionGroup: {\n Player: 'Player',\n Staff: 'Staff'\n },\n code: {\n 'Game Red': '2nd Game Caution',\n 'Game Red Direct': 'Game Ejection',\n 'Game Ejection': 'Game Ejection',\n 'Schedule Yellow': '3rd Schedule Caution',\n supplemental: 'Supplemental',\n supplemental_long: 'Supplemental Suspension'\n },\n status: {\n Pending: 'Pending',\n Appealed: 'Appealed',\n Active: 'Active',\n Completed: 'Completed',\n Cancelled: 'Cancelled'\n },\n durationType: {\n Definite: 'Definite',\n Indefinite: 'Indefinite'\n }\n }\n },\n suspensionDisciplines: {\n name: 'Discipline |||| Disciplines',\n fields: {\n suspensionId: 'Suspension',\n additionalGames: 'Additional Games',\n status: 'Status',\n durationType: 'Duration Type',\n comments: 'Comments',\n },\n labels: {\n edit: 'Edit Discipline',\n confirm_trigger: 'Trigger Discipline Committee',\n discipline_committee: 'Discipline Committee',\n },\n messages: {\n confirm_trigger: 'This will trigger the discipline committee to review this suspension and act on it. Are you sure you want to do this?',\n },\n alerts: {\n additionalGames: 'Additonal games are only applied when status is set to <strong>Active</strong>. To reduce the total number of games, use a negative value.',\n },\n actions: {\n add: 'Additional Discipline',\n trigger: 'Trigger Discipline Committee',\n },\n values: {\n status: {\n Pending: 'Pending',\n Active: 'Active',\n Inactive: 'Inactive',\n },\n durationType: {\n Definite: 'Definite',\n Indefinite: 'Indefinite'\n }\n },\n validations: {\n must_be_empty: 'This field must be empty when duration type is indefinite',\n must_be_greater_than_zero: 'Total games must be greater than 0',\n },\n notifications: {\n trigger_success: 'The discipline committee has been triggered',\n trigger_error: 'Unable to trigger the discipline committee',\n },\n helpers: {\n totalGames: 'Total games: %{totalGames}',\n }\n },\n sanctions: {\n name: 'Sanction |||| Sanctions',\n fields: {\n name: 'Name',\n code: 'Code',\n order: 'Display Order',\n priority: 'Priority',\n sectionId: 'Section',\n parentId: 'Parent Sanction',\n accumulationCount: 'Accumulation Count',\n positionGroups: 'Position Groups',\n isActive: 'Active',\n },\n labels: {\n card: {\n title: 'Sanction Rules',\n subtitle: 'Accumulation rules to trigger an automatic suspension when conditions are met across one or multiple games.'\n },\n edit: 'Edit Sanction',\n parent_code: 'Parent Code',\n parent_office: 'Parent Organization'\n },\n actions: {\n add: 'Add Sanction',\n },\n helpers: {\n parentId: 'Optional - Link this sanction with a parent organization sanction',\n priority: 'Allows overtaking a lower-priority sanction within the same game and for the same participant. If multiple sanctions with the same priority are found, they will all generate suspensions. The default priority is 1 (highest).'\n },\n values: {\n positionGroup: {\n Player: 'Player',\n Staff: 'Staff'\n },\n durationType: {\n Definite: 'Definite',\n Indefinite: 'Indefinite'\n }\n }\n },\n sanctionMembers: {\n name: 'Sanction Member |||| Sanction Members',\n fields: {\n sanctionId: 'Sanction',\n optionId: 'Rule Option',\n infractionId: 'Infraction'\n },\n labels: {\n card: {\n title: 'Accumulations',\n subtitle: 'Rule options or infractions that will trigger an offense.'\n },\n edit: 'Edit Rule',\n rule: 'Rule',\n code: 'Code',\n },\n actions: {\n add: 'Add Rule',\n },\n },\n sanctionOffenses: {\n name: 'Sanction Offense |||| Sanction Offenses',\n fields: {\n offense: 'Offense Number',\n sanctionId: 'Sanction',\n durationType: 'Duration Type',\n games: 'Games',\n lastMinutesGames: 'Last Minute Games',\n injuryGames: 'Injury Additional Games',\n injuryDays: 'Injury Additional Days',\n days: 'Days',\n lastMinutesDays: 'Last Minutes Days',\n requireDisciplineCommittee: 'Requires Discipline Committee',\n },\n labels: {\n card: {\n title: 'Offenses',\n subtitle: 'Number of games on the suspension generated.'\n },\n edit: 'Edit Offense',\n\n },\n actions: {\n add: 'Add Offense',\n },\n helpers: {\n games: 'Number of games on the suspension generated.',\n days: 'Number of days to calculate the expiry date on the suspension generated.',\n lastMinutesGames: 'Number of games on the suspension generated if the infraction occurred in the last %{minutes} minutes of the game.',\n lastMinutesDays: 'Number of days to calculate the expiry date on the suspension generated if the infraction occurred in the last %{minutes} minutes of the game.',\n injuryGames: 'Number of additional games on the suspension generated if an injury occurred during the infraction.',\n injuryDays: 'Number of additional days to calculate the expiry date on the suspension generated if an injury occurred during the infraction.'\n },\n values: {\n durationType: {\n Definite: 'Definite',\n Indefinite: 'Indefinite'\n }\n }\n },\n officialClaimDocuments: {\n name: 'Claim Documents',\n fields: {\n gameId: 'Game',\n },\n labels: {\n delete: 'Delete'\n },\n notifications: {\n deleted: 'This document has been deleted'\n },\n messages: {\n info_creating_claim: 'To add documents, please complete, save, and open your claim.'\n },\n },\n officialClaims: {\n name: 'Claims',\n fields: {\n participantId: 'Participant',\n gameId: 'Game',\n officeId: 'Organization',\n amount: 'Amount',\n distance: 'Distance',\n type: 'Type',\n note: 'Note',\n status: 'Status',\n roundtrip: 'Roundtrip',\n addressId: 'Address',\n createdAt: 'Claimed on',\n addressFrom: 'Address From',\n addressTo: 'Address To',\n intermediateStop: 'Intermediate Stop',\n hasIntermediateStop: 'Intermediate Stop',\n calculateDistance: 'Calculate Distance',\n claimSettingId: 'Claim Setting',\n },\n labels: {\n card: {\n title: 'Claims'\n },\n edit: 'Edit Claim |||| Edit Claims',\n 'Pending': 'Pend Claim |||| Pend Claims',\n 'Approved': 'Approve Claim |||| Approve Claims',\n 'Declined': 'Decline Claim |||| Decline Claims',\n },\n values: {\n type: {\n 'Driver': 'Driver',\n 'Passenger': 'Passenger',\n 'Breakfast': 'Breakfast',\n 'Lunch': 'Lunch',\n 'Dinner': 'Dinner',\n 'Travel': 'Travel',\n 'Expense': 'Expense',\n 'Per Diem': 'Per Diem'\n },\n status: {\n 'Approved': 'Approved',\n 'Pending': 'Pending',\n 'Declined': 'Declined',\n }\n },\n actions: {\n add: 'Add Claim',\n 'Pending': 'Pend',\n 'Approved': 'Approve',\n 'Declined': 'Decline'\n },\n notifications: {\n 'Pending': 'Claim pending |||| Claims pending',\n 'Approved': 'Claim approved |||| Claims approved',\n 'Declined': 'Claim declined |||| Claims declined',\n pending_error: 'Unable to make claim pending |||| Unable to make claims pending',\n approved_error: 'Unable to approve the claim |||| Unable to approve claims',\n declined_error: 'Unable to decline the claim |||| Unable to decline claims'\n },\n helpers: {\n 'Pending': 'Are you sure you want to make this claim pending?',\n 'Approved': 'Approving a claim will create a corresponding transaction.',\n 'Declined': 'Are you sure you want to decline this claim?',\n no_claim_types: 'No available claim types for this assigner',\n distance: 'Distance will be calculated automatically when clicking calculate distance; first %{smart_count} km are automatically excluded',\n excluded_amount: 'after %{distance} km',\n },\n validations: {\n claim_approved: 'Cannot edit an approved claim',\n },\n messages: {\n claim_unavailable: 'Claims can only be made after the game has ended'\n }\n },\n officialTransactions: {\n name: 'Transactions',\n fields: {\n participantId: 'Participant',\n gameId: 'Game',\n officeId: 'Organization',\n date: 'Date',\n type: 'Type',\n subtype: 'Subtype',\n amount: 'Amount',\n payPeriodId: 'Pay Period',\n description: 'Description',\n gameScheduleId: 'Schedule',\n },\n values: {\n type: {\n \"Base\": 'Base',\n \"Travel\": 'Travel',\n \"Per Diem\": 'Per Diem',\n \"Evaluation\": 'Evaluation',\n \"Exhibition Game\": 'Exhibition Game',\n \"Internship\": 'Internship',\n \"Withhold\": 'Payment Withhold',\n \"Other\": 'Other',\n },\n subtype: {\n 'Driver': 'Driver',\n 'Passenger': 'Passenger',\n 'Breakfast': 'Breakfast',\n 'Lunch': 'Lunch',\n 'Dinner': 'Dinner',\n 'Travel': 'Travel',\n 'Expense': 'Expense',\n 'Per Diem': 'Per Diem'\n }\n },\n messages: {\n select_all: 'Select all',\n unselect_all: 'Unselect all',\n group_by_game: 'Group by game',\n group_by_participant: 'Group by participant',\n },\n filters: {\n startTime: 'Start Date',\n endTime: 'End Date',\n },\n notifications: {\n assigned_pay_period: 'Transactions added to the pay period',\n assign_pay_period_error: 'Unable to assign the pay period',\n pay_period_removed: 'Pay period removed',\n remove_pay_period_error: 'Unable to remove the pay period',\n },\n actions: {\n add: 'Add Transaction',\n edit: 'Update Transaction',\n assign_pay_period: 'Assign Pay Period',\n remove_pay_period: 'Remove Pay Period',\n },\n validations: {\n from_pay_period_closed: \"Can't move transaction out of a closed pay period\",\n pay_period_closed: \"Can't move transaction into a closed pay period\"\n }\n },\n payPeriods: {\n name: 'Pay Period |||| Pay Periods',\n fields: {\n officeId: 'Organization',\n name: 'Name',\n startDate: 'Start Date',\n endDate: 'End Date',\n isClosed: 'Closed',\n closedAt: 'Closing Date',\n },\n labels: {\n add_transactions: 'Add Transactions',\n close_period: 'Close Period',\n dates: 'Dates',\n card: {\n title: 'Pay Periods',\n },\n status: 'Status',\n active: 'Active',\n closed: 'Closed (%{date})',\n },\n actions: {\n add: 'Add Pay Period',\n edit: 'Edit Pay Period',\n add_transactions: 'Add Transactions',\n },\n filters: {\n isClosed: 'Closed',\n },\n alerts: {\n period_closed: 'Closed Period',\n period_active: 'Active Period',\n period_closed_message: 'This period was closed on %{date} and can no longer be modified.',\n period_active_message: 'Once all transactions have been added, close the period to prevent changes.',\n },\n helpers: {\n close_period: 'Closing the period is irreversible and transactions will be locked.',\n },\n notifications: {\n pay_period_close: 'Period locked',\n close_pay_period_error: 'Unable to lock period'\n },\n validations: {\n pay_period_closed: \"Can't make changes to a closed pay period\"\n },\n values: {\n type: {\n \"Base\": 'Base',\n \"Travel\": 'Travel',\n \"Per Diem\": 'Per Diem',\n \"Evaluation\": 'Evaluation',\n \"Exhibition Game\": 'Exhibition Game',\n \"Internship\": 'Internship',\n \"Withhold\": 'Payment Withhold',\n \"Other\": 'Other',\n },\n subtype: {\n 'Driver': 'Driver',\n 'Passenger': 'Passenger',\n 'Breakfast': 'Breakfast',\n 'Lunch': 'Lunch',\n 'Dinner': 'Dinner',\n }\n },\n },\n gameIncidents: {\n name: 'Incident Reports',\n fields: {\n penaltyId: 'Penalty',\n description: 'Description',\n injured: 'Injured',\n returnedToGame: 'Returned to game',\n status: 'Status',\n createdAt: 'Created',\n updatedAt: 'Updated'\n },\n labels: {\n participantId: 'Participant',\n edit: 'Edit Incident',\n injury: 'Injury',\n returned: 'Returned',\n notInjured: 'Not Injured',\n },\n actions: {\n add: 'Add Incident',\n },\n },\n gamePurges: {\n name: 'Game Purges',\n fields: {\n gameId: 'Game',\n teamId: 'Team',\n participantId: 'Participant',\n suspensionId: 'Suspension'\n },\n labels: {\n games_purged: 'Games Purged'\n },\n messages: {\n no_results: 'No games purged'\n }\n },\n gamepenalties: {\n name: 'Penalty |||| Penalties',\n fields: {\n gameId: 'Game',\n teamId: 'Team',\n participantId: 'Participant',\n infraction: 'Infraction',\n gameTime: 'Game Time',\n },\n },\n gameMessages: {\n name: 'Message |||| Messages',\n fields: {\n type: 'Type',\n },\n labels: {\n delete: 'Delete message',\n },\n messages: {\n no_messages: 'No messages yet',\n },\n helpers: {\n notification_sent_to: \"A notification will be sent to this game's %{recipients} and assigned game officials.\",\n },\n notifications: {\n send_messages_error: 'Unable to send message',\n deleted: 'Message deleted',\n delete_error: 'Unable to delete message',\n },\n values: {\n type: {\n League: 'League',\n Officiating: 'Officiating',\n }\n }\n },\n scoresheets: {\n name: 'Scoresheet |||| Scoresheets',\n fields: {\n gameId: 'Game',\n scoresheet: 'Scoresheet',\n },\n actions: {\n add_penalties: 'Add Penalties',\n add_goals: 'Add Goals',\n },\n labels: {\n print: 'Print',\n print_roster: 'Print Roster',\n add_extra: 'Add Extra',\n add_extra_same_office: 'Same Organization',\n photos: 'Photos',\n suspended: 'Suspended',\n summary: 'Summary',\n transferred: 'Transferred',\n add_penalties: 'Add Penalties',\n add_goals: 'Add Goals',\n edit_penalty: 'Edit Penalty',\n edit_goal: 'Edit Goal',\n penalties: 'Penalies',\n goals: 'Goals',\n players: 'Players',\n goalies: 'Goalies',\n coach: 'Coach',\n bench_staff: 'Bench Staff',\n official: 'Official',\n complete: 'Complete',\n undo_approval: 'Disapprove',\n signatory: 'Signatory',\n sign_and_approve: 'Sign & Approve Lineup',\n start_game: 'Start Game',\n approve_game: 'Approve Game',\n undo_certify: 'Decertify',\n certify: 'Certify Game |||| Certify Games',\n more_info: 'More info',\n less_info: 'Less info',\n signed: 'Signed',\n start: 'Start',\n ended: 'Ended',\n period: 'Period',\n official_attendance: 'Official Attendance',\n additional_emails: 'Additional Emails',\n clock: 'Clock',\n reset_scoresheet: 'Reset Scoresheet',\n home: {\n lineup: 'Home Lineup',\n goal: 'Home Goal',\n penalty: 'Home Penalty',\n goalie: 'Home Goalie',\n },\n away: {\n lineup: 'Away Lineup',\n goal: 'Away Goal',\n penalty: 'Away Penalty',\n goalie: 'Away Goalie',\n },\n penalty: {\n offender: 'Offender',\n served_by: 'Served By',\n infraction: 'Infraction',\n duration: 'Duration',\n game_time: 'Game Time',\n start_time: 'Start Time',\n inning: 'Inning',\n half: 'Half',\n delete: 'Delete Penalty',\n delete_additional: 'Delete Penalties',\n accumulation: 'Accumulation Rule',\n },\n goal: {\n type: 'Type',\n scored_by: 'Scored By',\n assisted_by: 'Assisted By',\n game_time: 'Game Time',\n delete: 'Delete Goal',\n },\n edit_score: 'Edit Score',\n add_notes_title: 'Add notes',\n add_notes: 'Add Notes',\n edit_notes_title: 'Edit Notes',\n edit_notes: 'Edit Notes',\n scoresheet_notes: 'Game Notes',\n admin_notes: 'Official Notes',\n period_settings: 'Periods',\n periods: {\n 1: '1st',\n 2: '2nd',\n 3: '3rd',\n OT: 'OT',\n },\n },\n messages: {\n your_team_roster: 'your team roster',\n lineup_change_apply: 'Any changes to the lineup will only apply to this game, and will not affect',\n lineup_change_apply_part_2: 'or other scoresheets.',\n select_all: 'Select all',\n unselect_all: 'Unselect all',\n show_more: 'Show more',\n show_registrations: 'Show registrations',\n minimum_not_met: 'Minimum not met',\n over_limit: 'Over limit',\n lineup_approved_by: 'Lineup approved by',\n start_game: 'Are you sure you want to start the game?',\n end_game: 'At what time in the match did the game end at?',\n confirm_sign: 'By signing, I confirm that my lineup is complete and conforms to regulations.',\n confirm_sign_game: 'By approving, I confirm that the game has been completed correctly.',\n additional_emails: 'Scoresheets are automatically sent to team staff, league administrators and registered game officials',\n confirm_certify: 'Are you sure you want to certify this game? |||| Are you sure you want to certify these games?',\n undo_approval: {\n title: 'Disapprove scoresheet',\n message: 'The scoresheet will be reverted to incomplete and scorekeepers will be able to make changes.',\n },\n undo_certify: {\n title: 'Decertify scoresheet',\n message: 'This will allow changes to be made to the scoresheet by the league and allow the official to undo approval.',\n },\n reset_scoresheet: 'This will revert the scoresheet back to its starting state. Officials and scheduling will not be affected.',\n put_in_goalie: 'Put in',\n empty_net: 'Empty net',\n assist_abbr: 'Asst',\n served_abbr: 'Serv',\n shg: 'SHG',\n ppg: 'PPG',\n eng: 'ENG',\n psg: 'PENALTY SHOT',\n og: 'OWN GOAL',\n successful_game_end: 'Game ended',\n successful_game_approve: 'Game approved',\n successful_game_undo_approval: 'Game disapproved',\n successful_game_undo_certified: 'Game decertified',\n successful_game_certify: 'Game certified',\n successful_game_start: 'Game started',\n successful_save_flags: 'Flags saved',\n successful_save_score: 'Score saved',\n successful_save_notes: 'Notes saved',\n successful_update_settings: 'Settings updated',\n loading_flags: 'Loading flags',\n penalty: {\n added: `Penalty added |||| %{smart_count} penalties added`,\n not_added: 'No penalties were added',\n updated: `Penalty updated |||| %{smart_count} penalties updated`,\n not_updated: 'Penalty was not updated',\n delete_confirm: 'Are you sure you want to delete this penalty?',\n delete_additional: '%{smart_count} additional penalty will be removed. |||| %{smart_count} additional penalties will be removed.',\n subsequent_penalties: 'Existing subsequent penalties will be affected',\n subsequent_penalties_edit: 'Only the time can be edited for subsequent penalties'\n },\n goal: {\n added: `Goal added |||| %{smart_count} goals added`,\n not_added: 'No goals were added',\n updated: `Goal updated |||| %{smart_count} goals updated`,\n not_updated: 'Goal was not updated',\n delete_confirm: 'Are you sure you want to delete this goal?'\n }\n },\n alerts: {\n early_lineup_entry: \"This lineup cannot be entered until the prior game is completed or after %{date}. You may print your full roster lineup in advance.\",\n duplicate_batting_order: \"Some players have the same batting order\",\n unselected_suspended_players: 'Suspended members must be selected',\n cannot_remove_members: 'Cannot remove members that have goals, penalties or new suspensions',\n lineup: 'To enter the scoresheet, lineups must be completed.',\n start: 'Game has not been started yet.',\n approve: 'Game has not been completed yet.',\n completed: 'This scoresheet has been completed.',\n not_certified: 'This scoresheet has not been certified.',\n certified: 'This scoresheet has been certified.',\n missing_incidents: 'There are major penalties that are missing incident reports',\n not_authorized: 'You are not authorized to manage lineups for this game.',\n load_error: 'Unable to load scoresheet',\n lineup_change_post_game_started: 'Lineup cannot be changed once game has started, except by the scorekeeper.',\n unauthorized_manage_lineup: 'You are not authorized to manage this lineup.',\n team_has_no_members: 'This team has no members',\n or_registrations: 'or registrations',\n no_members_match_filters: 'No members match your filter',\n cannot_reset: 'Completed scoresheets cannot be reset',\n lineup_throwsinnings: \"To enter the innings and pitch counts, this team's lineup must be completed and signed.\",\n lineup_throwsinnings_certified: \"Innings and pitch counts cannot be modified after game has been certified.\",\n missingIncidents: {\n title: 'Missing Incident Reports',\n message: 'Some penalties require an incident report which must be submitted before the game can be completed.',\n },\n loading: {\n scoresheet: 'Loading scoresheet...',\n validatingMembers: 'Validating members'\n },\n requirements: {\n title: 'Lineup Requirements',\n players: {\n min: 'At least %{min} players',\n max: 'Up to %{max} players',\n missing_jersey_number: 'Some players are missing a jersey number',\n duplicate_jersey_number: 'Some players have the same jersey number',\n },\n skaters: {\n min: 'At least %{min} players',\n max: 'Up to %{max} players',\n },\n goalies: {\n min: 'At least %{min} goalies',\n max: 'Up to %{max} goalies',\n },\n staff: {\n min: 'At least %{min} bench staff members',\n max: 'Up to %{max} bench staff members',\n }\n },\n },\n values: {\n periods: {\n 1: '1',\n 2: '2',\n 3: '3',\n OT: 'Overtime',\n SO: 'Shootout',\n },\n half: {\n first: 'First half',\n second: 'Second half',\n }\n },\n validations: {\n too_many_assists: 'Too many assists',\n out_of_range: 'Time not within range',\n invalid_extra: 'Extra minutes is an invalid number',\n start_time_before_game_time: 'Start Time is before the Off Time',\n confirm: 'I understand this action cannot be undone'\n },\n helpers: {\n scoresheet_notes: 'These notes will be publicly visible on the scoresheet',\n admin_notes: 'These notes will be private to scorekeepers, officials, and administators only',\n },\n notifications: {\n reset: 'Scoresheet has been successfully reset',\n reset_error: 'Could not reset scoresheet',\n errors: {\n cannot_reset: 'Completed scoresheets cannot be reset',\n }\n }\n },\n gameDocuments: {\n name: 'Document |||| Documents',\n fields: {\n name: 'Name',\n type: 'Type'\n },\n values: {\n type: {\n Lineup: 'Lineup',\n Scoresheet: 'Scoresheet',\n Other: 'Other',\n }\n },\n labels: {\n file: 'File',\n delete: 'Delete Document'\n },\n actions: {\n add: 'Add Document',\n edit: 'Edit Document',\n },\n messages: {\n max_size: 'Maximum upload file size: 10 MB'\n },\n notifications: {\n deleted: 'Document deleted',\n delete_error: 'Unable to delete document',\n }\n },\n gameBrackets: {\n name: 'Bracket',\n labels: {\n edit: 'Modify seeds'\n },\n actions: {\n edit: 'Modify seeds'\n },\n messages: {\n edit_seeds: 'Modifying the seeds will update the game comments to match the new positions.'\n },\n fields: {\n bracket: {\n view: 'View Bracket',\n link: 'Bracket',\n },\n seeds: {\n title: 'Seeds',\n away: 'Away Team',\n home: 'Home Team'\n }\n }\n },\n attributeTypes: {\n name: 'Attribute Type |||| Attribute Types',\n fields: {\n name: 'Name',\n officeId: 'Organization',\n type: 'Attribute Type',\n targetType: 'Target Type',\n valueType: 'Value Type',\n options: 'Options',\n min: 'Minimum',\n max: 'Maximum',\n },\n helpers: {\n valueType: {\n has_data: \"Cannot change value type when there is bound data\",\n },\n optional: \"Optional\"\n },\n validation: {\n min: \"Minimum must be lower than maximum\",\n max: \"Maximum must be higher than minimum\",\n no_dropdown_options: \"At least 1 option is required\",\n },\n type: {\n Officiating: 'Officiating',\n League: 'League',\n },\n targetType: {\n Participant: 'Participant',\n Venue: 'Venue',\n Surface: 'Surface',\n Team: 'Team',\n },\n valueType: {\n Dropdown: 'Dropdown',\n Number: 'Number',\n Text: 'Text',\n },\n actions: {\n add: 'Add Attribute Type',\n },\n labels: {\n card: {\n title: 'Attributes',\n subtitle: \"Assigners can use attributes as a filter when assigning games.\",\n },\n edit: 'Update Attribute Type',\n },\n },\n attributeValues: {\n name: 'Attribute |||| Attributes',\n fields: {\n attributeId: 'Attribute',\n officeId: 'Organization',\n value: 'Value',\n },\n actions: {\n add: 'Add Attribute',\n },\n labels: {\n card: {\n title: 'Attributes',\n subtitle: \"\",\n },\n edit: 'Update Attribute',\n attributes_file: 'Attributes File',\n import_attributes: 'Import Attributes'\n },\n validations: {\n types: {\n Number: 'Some rows have invalid number values',\n Dropdown: 'Some rows have values that are not in the dropdown options'\n }\n },\n helpers: {\n match_existing_participant: 'This Member ID is used to match an existing participant.',\n },\n messages: {\n drop_attributes_csv: 'Drop your attributes file (.csv) here',\n import_tool_attributes: \"To use this import tool, upload a CSV file with columns for the official's unique Member ID, and the respective organization Attribute Types.\",\n import_tool_warning: 'This import tool will update existing official attribute values in your organization.',\n },\n alerts: {\n caution: 'Use with caution',\n },\n notifications: {\n import_attributes_error: 'Unable to import attributes',\n attributes_updated: '%{smart_count} attribute was updated. |||| %{smart_count} attributes were updated.',\n }\n },\n externalProviders: {\n name: 'External Providers',\n fields: {\n service: 'Service',\n provider: 'Provider Name',\n link: 'Link',\n externalId: 'External ID',\n },\n actions: {\n add: 'Add Provider',\n },\n labels: {\n edit: 'Edit Provider',\n services: {\n Streaming: 'Streaming',\n Ticketing: 'Ticketing',\n Stats: 'Stats',\n }\n },\n messages: {\n no_results: 'No providers found',\n deleted: 'Provider deleted',\n }\n },\n pools: {\n name: 'Pool |||| Pools',\n fields: {\n name: 'Name',\n },\n actions: {\n add: 'Add Pool',\n },\n labels: {\n card: {\n title: 'Pools',\n },\n edit: 'Edit Pool',\n },\n messages: {\n all_pools: 'All Pools',\n select_highlight: 'Select a pool to highlight it in the matrix',\n },\n tooltips: {\n pools_unavailable: '“Pools” are not enabled in this organization. This organization uses “Groups” as their Team Grouping Type.',\n groups_unavailable: '“Groups” are not enabled in this organization. This organization uses “Pools” as their Team Grouping Type.'\n }\n }\n },\n components: {\n calendar: {\n values: {\n views: {\n Day: 'Day',\n Week: 'Week',\n Month: 'Month',\n Season: 'Season',\n },\n game_list_filters: {\n drafts_only: 'Draft games only',\n drafts_no_dates: 'Draft games without dates',\n drafts_no_times: 'Draft games without times',\n all_published_games: 'All published games',\n all_games: 'All games'\n }\n },\n labels: {\n unschedule: 'Unschedule Game',\n selected_game: 'Selected Game',\n remove_date: 'Remove Date',\n },\n settings: {\n arena_slots: 'Show Time Slots',\n away_arena_slots: 'Show Away Time Slots',\n team_names: 'Show Team Names',\n condensed_view: 'Show Condensed View'\n },\n messages: {\n select_game: 'Select a game from the list on your left',\n no_home_surface: 'No home surfaces have been configured for this team',\n no_result: 'No surfaces found with the selected surface size filter',\n schedule_game: 'A date has not been scheduled for the selected game',\n unschedule_game: 'Are you sure you want to unschedule this game?',\n remove_time_field: 'Are you sure you want to remove the time and surface from this game?',\n remove_date: 'Are you sure you want to remove the date from this game?',\n no_schedule_teams: 'No teams found in this schedule',\n },\n tooltips: {\n scheduled_games: '%{count} Games scheduled',\n not_scheduled_games: '%{count} Games not scheduled',\n scheduled_away_games: '%{count}/%{totalCount} Away games scheduled',\n scheduled_home_games: '%{count}/%{totalCount} Home games scheduled',\n schedule: 'Schedule Game',\n unschedule: 'Unschedule Game',\n both_teams: 'Both Teams',\n home_team: 'Home Team',\n away_team: 'Away Team',\n draft_game: 'Draft Game',\n game: 'Game',\n },\n validations: {\n end_before_start: 'End date must be after start date',\n start_after_end: 'Start date must be before end date',\n }\n },\n search: {\n title: 'My Searches',\n save: 'Save current search',\n remove: 'Remove saved search',\n specify_name: 'Specify a name for your search',\n loading_error: \"Something went wrong loading your searches\",\n },\n login: {\n scorekeeper: 'Scorekeeper',\n member: 'Member',\n admin: 'Admin',\n edit: 'Edit',\n messages: {\n im_a: \"I'm a...\",\n unauthorized: 'Please contact your league administrator for further information.',\n redirect: \"If you're not redirected to the scoresheet, you can \",\n helper: {\n scorekeeper: \"Use the game number and home team's ID to access the scoresheet without an account\",\n member: \"Use your account login to manage your game lineups, team rosters, assignments, and more...\",\n },\n offline: {\n you: \"You're Offline\",\n reconnect: \"Once you reconnect your device online, you'll be able to login here.\",\n },\n storage: {\n unavailable: 'Storage unavailable',\n cookies_disabled: 'Looks like your cookies may be disabled.',\n use_browser_storage: `${appName} uses browser storage for scoresheet integrity and authentication.`,\n enable_cookies: 'To continue, please enable cookies/storage in your browser settings then try again.',\n },\n sso: {\n link_error: 'Something went wrong while linking your account',\n link_success: 'Account successfully linked'\n }\n },\n validation: {\n invalid_game_number: 'Game Number could not be found',\n invalid_game_number_long: 'Game Number could not be found. Please check the schedule to confirm.',\n invalid_team_id: 'Incorrect home team ID',\n invalid_team_id_long: 'Incorrect home team ID. Make sure you have the right game number and team.',\n missing_home_or_away_team: 'Missing a home or away team on the game',\n missing_home_or_away_team_long: 'Missing a home or away team on the game.',\n game_cancelled: 'Game cancelled',\n game_cancelled_long: 'This game has been cancelled. Please check the schedule to confirm.',\n unsupported_sport: 'Unsupported sport',\n unsupported_sport_long: 'Scorekeeping is only available for Hockey.',\n game_already_completed: 'Game already completed',\n game_already_completed_long: 'This game has already been completed. For corrections, please contact your association.',\n },\n alerts: {\n sso_link: 'Link Spordle My Account',\n },\n actions: {\n link_account: 'Link Account',\n },\n chip: {\n sso: 'Spordle My Account'\n },\n tooltips: {\n sso: 'Account registered with Spordle My Account',\n }\n },\n register: {\n participant: 'Participant Member ID',\n hockey_identity: 'Your Identity',\n registration: `${appName} Registration`,\n review: 'Review',\n link_invitation: 'Link Invitation',\n messages: {\n link: \"You're linking a participant to the following account:\",\n correct_account: 'If this is not the correct account, you can log out below.',\n email_login: `Your email will be your login to access ${appName}.`,\n },\n validation: {\n account_exists: 'You already have an account. You may reset your password below or contact your league or assigner',\n already_linked: 'An account is already linked to this participant. You may need to contact your league or assigner',\n participant_invalid: 'Unable to find you by this ID. You may need to try again later',\n participant_mismatch: 'Unable to match your ID and name. You may need to contact your league or assigner',\n ineligible: 'Only officials and team staff are eligible to register',\n token_invalid: 'Your invitation is invalid. Please request a new invitation from your league or assigner',\n },\n },\n reset_password: {\n messages: {\n invalid_reset_link: 'Your password reset link is no longer valid.',\n check_email: 'Check your email inbox',\n check_email_error: \"If you don't receive an email shortly, you may need to try a different email address or contact your league for assistance.\",\n },\n },\n goalie_shots_against: {\n name: 'Goalie Shots Against',\n labels: {\n goalie: 'Goalie',\n shots: 'Shots',\n edit_shots: 'Edit Shots',\n periods: {\n 1: '1st Period',\n 2: '2nd Period',\n 3: '3rd Period',\n OT: 'Overtime',\n }\n },\n messages: {\n enter_shots: 'Enter the shots against each goalie that has played this game. All games played must be entered for the SV% statistic to show to avoid incorrectly skewing stats.',\n blank: 'Periods may be left blank if the goalie did not play in that period.',\n error_loading_goalies: 'Something went wrong while loading goalies.',\n },\n notifications: {\n updated: 'Shots updated',\n }\n },\n throws_innings: {\n name: 'Throws and innings pitched',\n labels: {\n player: 'Player',\n throws: 'Throws',\n innings: 'Innings Pitched',\n edit: 'Edit throws and innings pitched',\n throws_today: 'TPD',\n throws_weekly: 'TP7D',\n innings_today: 'IPD',\n innings_weekly: 'IP7D',\n innings_remaining: '⚾ %{count} inning(s) remaining',\n cannot_throw: '🚫 Cannot throw this game',\n resting: '💤 Resting',\n consecutive_days: 'Over 2 consecutive days',\n over_innings_limit: 'Over innings limit by'\n },\n messages: {\n error_saving: 'Something went wrong while saving throws and innings pitched.',\n },\n notifications: {\n updated: 'Throws and innings pitched updated',\n }\n },\n office_selector: {\n labels: {\n title: 'Select Organization',\n },\n actions: {\n open: 'Select Organization',\n },\n },\n exporter: {\n actions: {\n details_csv: 'Details as CSV',\n details_xlsx: 'Details as Excel',\n summary_csv: 'Summary as CSV',\n summary_xlsx: 'Summary as Excel',\n export_csv: 'Export as CSV',\n export_xlsx: 'Export as Excel'\n },\n transactions_exporter: {\n labels: {\n transactions: 'Transactions',\n },\n reports: {\n details: {\n title: 'Transaction Details',\n columns: {\n pay_period: 'Pay Period',\n game_number: 'Game Number',\n game_time: 'Game Time',\n surface: 'Surface',\n schedule_name: 'Schedule Name',\n schedule_office_name: 'League',\n first_name: 'First Name',\n last_name: 'Last Name',\n member_id: 'Member ID',\n position: 'Position',\n assigner: 'Assigner',\n transaction_date: 'Transaction Date',\n type: 'Type',\n subtype: 'Subtype',\n amount: 'Amount'\n }\n },\n summary: {\n title: 'Transaction Summary',\n columns: {\n first_name: 'First Name',\n last_name: 'Last Name',\n member_id: 'Member ID',\n travel_fees: 'Travel Fees',\n officiating_fees: 'Officiating Fees',\n other_fees: 'Other Fees',\n total_fees: 'Total Fees'\n }\n }\n },\n },\n penalties_exporter: {\n labels: {\n penalties: 'Penalties',\n },\n reports: {\n summary: {\n title: 'Penalties Summary',\n columns: {\n first_name: 'First Name',\n last_name: 'Last Name',\n member_id: 'Member ID',\n team_name: 'Team Name',\n team_id: 'Team ID',\n schedule_name: 'Schedule Name',\n game_number: 'Game Number',\n game_date: 'Game Date',\n infraction_code: 'Code',\n infraction: 'Infraction',\n game_time: 'Game Time',\n start_time: 'Start Time',\n end_time: 'End Time',\n served_by_name: 'Served By',\n served_by_id: 'Served By (Member ID)',\n }\n }\n },\n }\n },\n feature_flags: {\n title: 'Feature Flags',\n alerts: {\n branch_level: 'Spordle Play also has Feature Flags at the branch level. These flags can be found in the Branch Settings of a branch organization.',\n }\n },\n roles_and_permissions: {\n title: 'Roles and Permissions',\n labels: {\n scopes: 'Scopes',\n automatic: 'Automatic',\n },\n alerts: {\n account_permissions: \"Account permissions are made up of a principal (participants), target (organization, schedule, or team) and a role. All three parts are necessary to be considered when evaluating access. For example, if you have access to manage schedules, you cannot manage all schedules, only the schedules within your permission’s target.\",\n }\n },\n scheduleStats: {\n titles: {\n ParticipantScheduleStats: 'Player Stats',\n TeamScheduleStats: 'Team Standings',\n },\n labels: {\n type: 'Type',\n ranking: 'Rank',\n ranking_og: 'Original Rank',\n poolRanking: 'Rank',\n poolRanking_og: 'Original Rank',\n manualRanking: 'Manual Rank',\n manualPoolRanking: 'Manual Rank',\n standingsType: 'Standings Type',\n no_pools: 'Not in Pool',\n },\n values: {\n type: {\n Skater: 'Skaters',\n Goalie: 'Goalies',\n },\n standingsType: {\n Overall: 'Overall',\n Pools: 'Pools',\n }\n },\n alerts: {\n manual_standings: 'Using manual standings will replace the regular standings displayed on public pages.'\n },\n actions: {\n edit_manual_standings: 'Edit Manual Standings',\n },\n notifications: {\n manual_standings_updated: 'Manual standings updated',\n manual_pool_standings_updated: 'Manual pool standings updated',\n manual_standings_error: 'Unable to update manual standings',\n manual_pool_standings_error: 'Unable to update manual pool standings',\n }\n }\n },\n common: {\n regions: REGIONS,\n },\n}\n\nexport default messages;\n","import french from 'ra-language-french';\n\nimport { appName } from '../../flags';\n\nconst TYPES = {\n Exhibition: 'Hors Concours',\n Placement: 'Évaluation',\n League: 'Ligue',\n Playoffs: 'Séries Éliminatoires',\n Tournament: 'Tournoi',\n Championship: 'Championnat',\n Cup: 'Coupe',\n}\n\nconst STATUSES = {\n Active: 'Actif',\n Rescheduled: 'Reprogrammé',\n 'Rink Changed': 'Patinoire changée',\n Cancelled: 'Annulé',\n Postponed: 'Reporté',\n Conflict: 'Conflit',\n Forfeited: 'Forfait',\n DoubleForfeit: 'Double forfait',\n Completed: 'Complété',\n Certified: 'Certifié',\n}\n\nconst ACTIVITY_TYPES = {\n Practice: 'Pratique',\n Training: 'Entrainement',\n Meeting: 'Réunion',\n Meal: 'Repas',\n Accomodation: 'Hébergement',\n}\n\nconst REGIONS = {\n Canada: 'Canada',\n 'United States': 'États Unis',\n Europe: 'Europe',\n}\n\nconst messages = {\n ra: {\n ...french.ra,\n action: {\n ...french.ra.action,\n ok: 'Ok',\n yes: 'Oui',\n no: 'Non',\n back: 'Retour',\n ignore: 'Ignorer',\n change: 'Modifier',\n register: \"S'inscrire\",\n continue: 'Continuer',\n subscribe: \"S'abonner\",\n learn: 'En apprendre plus',\n analyze: 'Analyser',\n accept: 'Accepter',\n summary: 'Sommaire',\n switch: 'Changer',\n swap: 'Échanger',\n delegate: 'Déléguer',\n undelegate: 'supprimer la délégation',\n generate: 'Générer',\n publish: 'Publier',\n finish: 'Finir',\n select: 'Sélectionner',\n discard: 'Annuler',\n decline: 'Refuser',\n cancel: 'Annuler',\n next: 'Suivant',\n skip: 'Sauter',\n new: 'Nouveau',\n replace: 'Remplacer',\n request: 'Demander',\n keep: 'Garder',\n send: 'Envoyer',\n sign: 'Signer',\n directions: 'Directions',\n approve: 'Approuver',\n assign: 'Assigner',\n assign_anyway: 'Assigner quand même',\n reassign: 'Réassigner',\n accept_other: \"Accepter l'Autre\",\n click_here: 'Cliquez ici',\n click_to_verify: 'Cliquez pour vérifier',\n send_verification: 'Envoyer la vérification',\n copy_to_clipboard: 'Copier dans le presse-papiers',\n confirm_removal: 'Confirmer la suppression',\n tap_for_more: 'Appuyez pour plus',\n repeat: 'Répéter',\n invite: 'Inviter',\n send_invite: 'Envoyer une invitation',\n retry: 'Réessayer',\n open_full_page: 'Ouvrir en pleine page',\n clear: 'Effacer',\n clear_filters: 'Effacer les filtres',\n update: 'Mise à jour',\n import: 'Importer',\n save: 'Sauvegarder',\n apply: 'Appliquer',\n open: 'Ouvrir',\n upload: 'Transférer',\n select_columns: 'Sélectionner les colonnes',\n review: 'Réviser',\n view: 'Afficher',\n share: 'Partager',\n unshare: 'Annuler le partage',\n fix: 'Réparer',\n search_in: 'Rechercher dans',\n open_in_id: 'Ouvrir dans Spordle ID',\n certify: 'Certifier',\n pend: 'En attente',\n undo: 'Annuler',\n start: 'Démarrer',\n respond: 'Répondre',\n reset: 'Réinitialiser',\n load_more: 'Charger plus',\n refresh: 'Cliquez ici pour rafraîchir',\n show: 'Afficher',\n hide: 'Cacher',\n manage: 'Gérer',\n recalculate: 'Recalculer',\n active: 'Actif',\n },\n auth: {\n ...french.ra.auth,\n login: 'Se connecter',\n login_error: 'Impossible de se connecter pour le moment',\n login_error_retry: 'Impossible de se connecter pour le moment. Réessayez dans quelques minutes.',\n unauthorized: 'Non autorisé',\n unauthorized_long: \"Votre compte (%{user}) ne dispose d'aucune autorisation pour le moment.\",\n recovery_email: 'Envoyer un courriel de récupération',\n your_username: \"Ceci sera votre nom d'utilisateur\",\n youre_logged_in_as: 'Vous êtes connecté en tant que %{user}',\n },\n page: {\n ...french.ra.page,\n loading: `${french.ra.page.loading}...`,\n error_try_again: `${french.ra.page.error}, réessayez plus tard`,\n error_try_again_refresh: `${french.ra.page.error}, essayez d'actualiser ou réessayez plus tard`,\n create: 'Créer %{name}',\n edit: `Éditer %{name}`,\n editing: 'Éditer %{name}',\n show: `%{name}`,\n not_available: 'N/A',\n },\n message: {\n ...french.ra.message,\n created: 'Créer',\n updated: 'A été mis à jour',\n draft: 'Brouillon',\n not_published: 'Non publié',\n not_applicable: \"N'est pas applicable\",\n delete_title: \"Confirmer la suppression\",\n delete_content: 'Voulez-vous vraiment supprimer le/la %{name}?',\n discard_changes: 'Voulez-vous vraiment annuler vos modifications?',\n error: `Cette erreur a été automatiquement envoyée à ${appName}. Vous devrez peut-être revenir en arrière ou réessayer plus tard.`,\n version_error: `Il semble que vous utilisiez une ancienne version de ${appName}. Vous devrez vider votre cache puis réessayer.`,\n version_mismatch: `Il semble que vous utilisez une ancienne version de ${appName}. Veuillez rafraîchir votre navigateur.`,\n report_details: 'Rapport détaillé',\n digits: \"C'est environ %{number} chiffres\",\n redirecting: 'Redirection',\n optional: 'Optionnel',\n no_options: 'Aucune option',\n none: 'Aucun(e)',\n unverified: 'Non vérifié',\n verified: 'Vérifié',\n unverified_email: 'Adresse courriel non vérifiée',\n verified_email: 'Adresse courriel vérifiée',\n verification_email: 'Un courriel de vérification a été envoyé',\n available: 'Disponible',\n unavailable: 'Indisponible',\n unknown: 'Inconnue',\n show_more: 'Afficher %{number} de plus...',\n no_results: 'Aucun résultat',\n no_results_filtered: 'Aucun résultat (%{smart_count} filtré) |||| Aucun résultat (%{smart_count} filtrés)',\n no_rows: 'Aucune rangée',\n filters: 'Filtres',\n filtered: '%{smart_count} filtré |||| %{smart_count} filtrés',\n filter_by_status: 'Filtrer par statut',\n filter_by_attributes: 'Filtrer par attributs',\n filter_by_list: 'Filtrer par liste',\n filter_by_name: 'Filtrer par nom',\n filter_by_group: 'Filtrer par groupe',\n filter_by_pool: 'Filtrer par pool',\n filter_by_category: 'Filtrer par catégorie',\n no_group: 'Aucun groupe',\n total: 'Total',\n all: 'Tout',\n all_f: 'Toutes',\n settings: 'Paramètres',\n default: 'Défaut',\n select_columns: \"Nous avons automatiquement fait correspondre les colonnes de votre fichier aux champs obligatoires, dans la mesure du possible. Veuillez examiner les colonnes ci-dessous et apporter les modifications appropriées si nécessaire.\",\n no_valid_rows: 'Ce fichier ne contient pas de lignes valides à importer.',\n managed_by_id: 'Certains champs sont gérés par Spordle ID',\n synced_with_id: 'Synchronisé de Spordle ID',\n unsupported: 'Fonctionnalité indisponible',\n shared_slot: 'Partagée',\n enabled: 'Activé',\n disabled: 'Désactivé',\n click_search: \"Cliquez sur 'Rechercher' pour voir les résultats\"\n },\n input: {\n ...french.ra.input,\n image: {\n upload_several: 'Déposez les images à télécharger ou cliquez pour en sélectionner une',\n upload_single: \"Déposez l'image à télécharger ou cliquez pour la sélectionner.\",\n },\n field: {\n name: 'Nom',\n email: 'Adresse courriel',\n password: 'Mot de passe',\n },\n file: {\n ...french.ra.input.file,\n upload_several: 'Déposez les fichiers à télécharger ou cliquer pour en sélectionner un',\n upload_single: 'Déposez le fichier à télécharger ou cliquez pour le sélectionner',\n upload: 'Télécharger un fichier',\n uploading: 'Téléchargement...',\n upload_csv: 'Télécharger un fichier CSV',\n download_template: 'Télécharger le modèle',\n only_csv: 'Seuls les fichiers CSV sont pris en charge pour le moment.',\n error_parsing: \"Une erreur s'est produite lors de l'analyse de votre fichier.\",\n invalid_value: 'Certaines lignes ont des valeurs non valides',\n enter_new_title: 'Entrez un nouveau titre',\n confirm_remove_attachment: 'Voulez-vous vraiment supprimer cette pièce jointe?',\n import: 'Importer',\n importing: 'Importation...',\n columns: 'Colonnes',\n error_too_large: 'Le fichier dépasse la limite de taille',\n drop: {\n logo: 'Déposez un nouveau logo ici',\n image: 'Déposez une nouvelle image ici',\n }\n },\n autocomplete: {\n ...french.ra.input.autocomplete,\n type_to_search: 'Écrire pour rechercher...',\n none: 'Aucun'\n },\n password: {\n ...french.ra.input.password,\n forgot: 'Mot de passe oublié?',\n change: 'Changer le mot de passe',\n change_success: 'Mot de passe mis à jour avec succès',\n old: 'Mot de passe actuel',\n new: 'Nouveau mot de passe',\n confirm: 'Confirmez le mot de passe',\n invalid: 'Mot de passe actuel incorrect',\n too_long: 'Le nouveau mot de passe est trop long',\n toggle_visibility: 'Afficher le mot de passe'\n },\n adornments: {\n seconds: 'secs',\n minutes: 'mins',\n kilometers: 'km'\n },\n i18n: {\n label: 'Traduction',\n values: {\n en: 'EN',\n fr: 'FR',\n }\n }\n },\n notification: {\n ...french.ra.notification,\n updated: 'Mise à jour |||| %{smart_count} mise à jour',\n created: 'Créer',\n deleted: 'Supprimé |||| %{smart_count} supprimé',\n bad_item: 'Article incorrect',\n item_doesnt_exist: \"L'article n'existe pas\",\n cancelled: 'Annulé',\n logged_out: 'Votre authentification a expiré, veuillez vous reconnecter.',\n },\n validation: {\n ...french.ra.validation,\n email: 'Doit être un courriel',\n invalid: 'Non valide',\n invalid_number: 'Nombre non valide',\n invalid_number_format: 'Format de nombre non valide',\n invalid_email_format: 'Format de courriel non valide',\n different: 'Vous ne pouvez pas utiliser le même mot de passe',\n match: 'Cela ne correspond pas au nouveau mot de passe que vous avez entré',\n incorrect_email_password: 'Courriel ou mot de passe incorrect',\n values_not_unique: 'Certaines valeurs ne sont pas uniques',\n spaces_not_allowed: 'Les espaces ne sont pas autorisées',\n more_characters: 'Manque %{smart_count} caractère |||| Manque %{smart_count} caractères',\n positive: 'Doit être positif',\n positive_leave_empty: 'Doit être positif. Laissez vide pour toujours.',\n negative: 'Doit être negatif',\n whole: 'Doit être entier',\n longer_than: 'Ne peut pas contenir plus que %{smart_count} caractères (%{current_length})',\n greater_than_zero: 'Doit être supérieur à 0',\n greater_than_or_equal_zero: 'Doit être supérieur ou égal à 0',\n greater_than_zero_leave_empty: 'Doit être supérieur à 0. Laissez vide pour toujours.',\n greater_than_zero_leave_empty_limit: 'Doit être supérieur à 0. Laissez vide pour aucune de limite.',\n title_too_long: 'Le titre doit comporter moins de 80 caractères',\n min: 'Min',\n max: 'Max',\n absence: 'Doit être retiré',\n length: 'Longueur invalide',\n numericality: 'Doit être un nombre',\n inclusion: 'Selection invalide',\n exclusion: 'Selection invalide',\n format: 'Format invalide',\n uniqueness: 'Doit être unique',\n date: \"La date n'est pas valide\",\n already_exists: 'Existe déjà dans le système',\n duplicate: 'Doublon',\n end_after_start: 'La date de fin doit être après la date de début',\n end_before_start: \"l'heure de fin doit être après l'heure de début\",\n unauthorized: 'Non autorisé',\n unable_to_delete: 'Impossible de supprimer',\n claim_maximum_amount: 'Ne doit pas dépasser le montant maximum: %{amount}',\n too_high: 'Trop élevé',\n },\n date: {\n name: 'Date',\n minute: 'Minute |||| Minutes',\n hour: 'Heure |||| Heures',\n day: 'Jour |||| Jours',\n week: 'Semaine |||| Semaines',\n month: 'Mois |||| Mois',\n range: '%{date1} à %{date2}',\n time: 'Heure',\n phrase: {\n minute: '%{smart_count} minute |||| %{smart_count} minutes',\n hour: 'une heure |||| %{smart_count} heures',\n week: '%{smart_count} semaine |||| %{smart_count} semaines',\n },\n lexical: {\n today: \"Aujourd'hui\",\n all_day: 'Toute la journée',\n until_time: \"jusqu'à %{time}\",\n after_time: 'après %{time}',\n before: 'Avant',\n between: 'Entre',\n after: 'Après',\n },\n days: {\n short: {\n All: 'Tous',\n Sun: 'Dim',\n Mon: 'Lun',\n Tue: 'Mar',\n Wed: 'Mer',\n Thu: 'Jeu',\n Fri: 'Ven',\n Sat: 'Sam',\n },\n long: {\n All: 'Tous les jours',\n Sun: 'Dimanche',\n Mon: 'Lundi',\n Tue: 'Mardi',\n Wed: 'Mercredi',\n Thu: 'Jeudi',\n Fri: 'Vendredi',\n Sat: 'Samedi',\n }\n },\n },\n function: {\n and: 'et',\n for: 'pour',\n is: 'est',\n was: 'était',\n a: 'un',\n youre: 'Tu es',\n by: 'par',\n or: 'ou',\n }\n },\n resources: {\n categories: {\n name: 'Catégorie |||| Catégorie',\n fields: {\n name: 'Nom',\n divisionId: 'Division',\n gender: 'Identité de genre',\n classId: 'Class',\n officeId: 'Organisation',\n },\n values: {\n gender: {\n Male: 'Masculin',\n Female: 'Féminin',\n Integrated: 'Mixte',\n },\n },\n actions: {\n add: 'Ajouter une catégorie',\n edit: 'Modifier la catégorie',\n scheduleCategory: \"Utiliser la catégorie de l'horaire\",\n },\n labels: {\n card: {\n title: 'Categories',\n },\n edit: 'Ajouter une catégorie',\n add: 'Nouvelle catégorie',\n },\n },\n divisions: {\n name: 'Division |||| Divisions',\n fields: {\n name: 'Nom',\n shortName: 'Nom court',\n parentId: 'Division parente',\n officeId: 'Organisation',\n },\n actions: {\n add: 'Ajouter une division',\n edit: 'Modifier la division',\n },\n labels: {\n card: {\n title: 'Divisions',\n },\n edit: 'Ajouter une division',\n add: 'Nouvelle division',\n },\n },\n classes: {\n name: 'Class |||| Classes',\n fields: {\n name: 'Nom',\n shortName: 'Nom court',\n officeId: 'Organisation',\n },\n actions: {\n add: 'Ajouter une classe',\n edit: 'Modifier la classe',\n },\n labels: {\n card: {\n title: 'Classes',\n },\n edit: 'Ajouter une classe',\n add: 'Nouvelle classe',\n },\n },\n surfaces: {\n name: 'Surface |||| Surfaces',\n fields: {\n name: 'Nom',\n city: 'Ville',\n country: 'Pays',\n address: 'Adresse',\n alias: 'Alias',\n timezone: 'Fuseau Horaire',\n sports: 'Sports',\n venueId: 'Lieu',\n fraction: 'Nom de la séparation',\n type: 'Type',\n size: 'Taille',\n parentId: 'Parent',\n split: 'Séparation'\n },\n values: {\n sports: {\n Hockey: 'Hockey',\n Soccer: 'Soccer',\n Baseball: 'Baseball'\n },\n type: {\n Ice: 'Glace',\n Grass: 'Gazon',\n Synthetic: 'Synthétique',\n Wood: 'Bois',\n Gym: 'Gym',\n Clay: 'Terre Battue',\n Dirt: 'Poussière de Brique',\n 'Grass/Clay': 'Gazon/Terre Battue',\n 'Grass/Dirt': 'Gazon/Poussière de Brique',\n },\n size: {\n all_sizes: 'Voir toutes les tailles',\n XL: 'Extra Large',\n L: 'Large',\n M: 'Moyenne',\n S: 'Petite',\n XS: 'Très Petite'\n },\n },\n actions: {\n add: 'Ajouter une surface',\n edit: \"Modifier la surface\",\n },\n labels: {\n card: {\n title: 'Surfaces',\n splitTitle: 'Séparations de surface',\n splitSubtitle: 'Une surface peut être séparée pour permettre plusieurs événements simultanément',\n },\n alerts: {\n message: \"Cette surface est une séparation de\"\n },\n tabs: {\n summary: 'Sommaire',\n games: 'Matchs',\n time_slots: 'Plages Horaires',\n },\n edit: \"Mettre à jour la surface\",\n add: 'Nouvelle surface',\n street_address: 'Adresse de la rue',\n name: \"Nom de la surface\",\n availability: {\n card: {\n title: 'Disponibilité',\n subtitle: \"Sélectionnez les dates et les heures disponibles, ou bloquez les heures non disponibles.\",\n },\n title: \"Disponibilités de l'organisation\",\n note: 'Note de disponibilité',\n updated: 'Disponibilité mise à jour!',\n },\n },\n messages: {\n surfaces: 'surfaces',\n availability: {\n available: 'Cette surface %{input} disponible',\n }\n },\n helpers: {\n alias: 'Optionnel - utilisé pour la recherche',\n fraction: 'Optionnel - par défaut une surface entière',\n availability: {\n note: \"Cette note sera visible lorsqu'une partie est déjà prévue dans cette plage horaire.\",\n }\n }\n },\n venues: {\n name: 'Lieu |||| Lieux',\n fields: {\n name: 'Nom',\n city: 'Ville',\n region: \"Région\",\n country: 'Pays',\n address: 'Adresse',\n alias: 'Alias',\n timezone: 'Fuseau Horaire',\n },\n actions: {\n add: 'Ajouter un lieu',\n edit: \"Modifier le lieu\",\n },\n labels: {\n name: 'Nom du lieu',\n street_address: 'Adresse de la rue',\n my: 'Mes lieux',\n },\n messages: {\n add_venues: 'Ajouter des lieux',\n search_venue: \"Recherche par nom de lieu ou par ville\",\n enter_name_city: 'Entrez un nom ou une ville pour lancer la recherche',\n },\n alerts: {\n loading_venues: 'Chargement des lieux...',\n }\n },\n activities: {\n name: 'Activité |||| Activités',\n fields: {\n name: 'Nom',\n teamId: 'Équipe',\n arenaId: 'Surface',\n officeId: 'Organisation',\n location: 'localisation',\n type: 'Type',\n status: 'Statut',\n recurrence: 'Récurrence',\n startTime: 'Heure de début',\n endTime: 'Heure de fin',\n pastEvents: 'Activités passées',\n comments: 'Commentaires',\n },\n filters: {\n startTime: 'Date prévue',\n endTime: 'Date de fin',\n pastEvents: 'Afficher les activités passées',\n },\n actions: {\n add: 'Ajouter une activité',\n },\n labels: {\n card: {\n name: 'Activité',\n },\n add: 'Nouvelle activité',\n edit: \"Mettre à jour l'activité\",\n frequency: 'Fréquence',\n interval: 'Intervalle',\n weekdays: 'Jours de la semaine',\n end_date: 'Date de fin',\n },\n messages: {\n schedule_no_occurences: \"Les paramètres de récurrence spécifiés n'entraînent aucune activité\",\n event_repeat: 'Ces paramètres de récurrence entraîneront %{smart_count} activité |||| Ces paramètres de récurrence entraîneront %{smart_count} activités',\n additional_instances: '... %{smart_count} activité additionnelle ... |||| ... %{smart_count} activités additionnelles ...',\n },\n helpers: {\n frequency: 'Toutes les autres instances seront supprimées',\n },\n values: {\n status: STATUSES,\n type: ACTIVITY_TYPES,\n frequency: {\n Once: 'Ne se répète pas',\n Daily: 'Quotidienne',\n Weekly: 'Hebdomadaire',\n Monthly: 'Mensuelle',\n }\n },\n alerts: {\n activity_explanation: 'Les activités sont uniquement des événements hors-surface, à ne pas confondre avec des matchs ou des pratiques.'\n }\n },\n practices: {\n name: 'Pratique |||| Pratiques',\n fields: {\n name: 'Nom',\n teamIds: 'Équipes',\n arenaId: 'Surface',\n officeId: 'Organisation',\n location: 'localisation',\n type: 'Type',\n status: 'Statut',\n recurrence: 'Récurrence',\n startTime: 'Heure de début',\n endTime: 'Heure de fin',\n pastEvents: 'Pratiques passées',\n comments: 'Commentaires',\n },\n filters: {\n startTime: 'Date prévue',\n endTime: 'Date de fin',\n pastEvents: 'Afficher les pratiques passées',\n },\n actions: {\n add: 'Ajouter la pratique',\n edit: 'Modifier la pratique',\n },\n labels: {\n card: {\n name: 'Pratique',\n },\n add: 'Nouvelle pratique',\n edit: 'Mettre à jour la pratique',\n frequency: 'Fréquence',\n interval: 'Intervalle',\n weekdays: 'Jours de la semaine',\n end_date: 'Date de fin',\n tbd: 'À déterminer',\n practice_status: 'Statut de pratique',\n set_practice_status: 'Changer le statut des pratiques',\n change_practice_status: 'Changer le statut',\n },\n messages: {\n schedule_no_occurences: \"Les paramètres de récurrence spécifiés n'entraînent aucune pratique\",\n event_repeat: 'Ces paramètres de récurrence entraîneront %{smart_count} pratique |||| Ces paramètres de récurrence entraîneront %{smart_count} pratiques',\n additional_instances: '... %{smart_count} pratique additionnelle ... |||| ... %{smart_count} pratiques additionnelles ...',\n },\n helpers: {\n frequency: 'Toutes les autres instances seront supprimées',\n conflicts: 'Résoudre les conflits ou le statut passera à Conflit',\n },\n values: {\n status: STATUSES,\n frequency: {\n Once: 'Ne se répète pas',\n Daily: 'Quotidienne',\n Weekly: 'Hebdomadaire',\n Monthly: 'Mensuelle',\n }\n },\n notifications: {\n game_status_changed: 'Statut changé',\n change_game_status: 'Changement de %{smart_count} pratique au statut %{status} |||| Changement de %{smart_count} pratiques au statut %{status}',\n change_game_status_error: \"Impossible de changer le statut |||| Impossible de changer les statuts\",\n },\n validations: {\n conflicts: 'Résoudre les conflits ou passer à un statut inactif',\n }\n },\n events: {\n name: 'Événement |||| Événements',\n fields: {\n arenaId: 'Surface',\n status: 'Statut',\n startTime: 'Heure de début',\n endTime: 'Heure de fin',\n },\n labels: {\n card: {\n title: 'Horaire',\n },\n details: 'Détails',\n location: 'Lieu',\n upcoming_schedule: 'Horaire à venir',\n team_events: \"Événements d'équipe\",\n show_calendar: 'Afficher le calendrier',\n },\n },\n games: {\n name: 'Match |||| Matchs',\n fields: {\n id: 'ID',\n number: 'Numéro de match',\n seasonId: 'Saison',\n scheduleId: 'Horaire',\n scheduleType: 'Type',\n crossScheduleId: 'Horaire croisée',\n categoryId: 'Catégorie',\n homeTeamId: 'Local',\n awayTeamId: 'Visiteur',\n date: 'Date',\n startTime: 'Heure de début',\n endTime: 'Heure de fin',\n arenaId: 'Surface',\n status: 'Statut',\n comments: 'Commentaires',\n isApproved: 'Approuvé',\n officeId: 'Organisation',\n groupId: 'Groupe',\n crossGroupId: 'Groupe croisée',\n pastEvents: 'Parties Passées',\n timezone: 'Fuseau Horaire',\n effectiveSurfaces: 'Surface',\n resetAssigner: \"Réinitialiser l'assignateur\",\n },\n filters: {\n startTime: 'Date de début',\n endTime: 'Date de fin',\n scheduleOffices: \"Organisation d'horaire\",\n teamOffices: \"Organisation des équipes\",\n homeTeamOffices: 'Organisation locale',\n awayTeamOffices: \"Organisation visiteuse\",\n surfaceOffices: 'Organisation de la surface',\n assignOffices: \"Organisation d'assignation\",\n isApproved: 'Complété',\n isCertified: 'Certifié',\n pastEvents: 'Afficher les parties passées',\n conflictsOnly: 'Afficher uniquement les conflits',\n bracketGamesOnly: 'Afficher uniquement les matchs de bracket',\n quickAssignLabel: 'Assignation rapide',\n },\n actions: {\n add: 'Ajouter un match',\n edit: 'Modifier le match',\n edit_completed: 'Le match ne peut être modifié, car celui-ci est déjà complété ou certifié',\n internal: 'Actions internes',\n applyAssignRules: \"Appliquer les règles d'assignation\",\n recalculateStats: 'Recalculer les statistiques',\n recalculateScoresheet: 'Recalculer la feuille de match',\n recalculateTransactions: 'Recalculer les transactions',\n },\n labels: {\n card: {\n title: 'Matchs',\n },\n tabs: {\n summary: 'Sommaire',\n officials: 'Officiels',\n scoresheet: 'Feuille de match',\n bracket: 'Bracket',\n events: 'Événements',\n },\n edit: 'Mettre à jour le match',\n add: 'Nouveau match',\n time: 'Heure du match',\n report: 'Rapport de match',\n tbd: 'À déterminer',\n bracket_game: 'Match de bracket',\n quick_assign_dialog_title: 'Match %{gameNumber} - %{position}',\n game_number: 'Match %{number}',\n game_number_officials: 'Officiels du Match %{number}',\n game_number_lineup: 'Alignement du Match %{number}',\n game_number_certify: 'Certification du Match %{number}',\n editing_game_number: 'Modification du match %{number}',\n team_lineups: \"Alignements d'équipe\",\n all_games: 'Tous les matchs',\n score: 'Pointage',\n scorekeeping: 'Appli marqueur',\n forfeiting_team: 'Équipe qui perd par forfait',\n forfeit: 'Match par forfait',\n forfeitWin: 'Victoire par forfait',\n forfeitLoss: 'Défaite par forfait',\n forfeitTie: 'Double Forfait',\n home: 'Local',\n away: 'Visiteur',\n game_number_history: 'Historique du match %{number}',\n notes: 'Note |||| Notes',\n scoresheet_notes: 'Notes de match',\n admin_notes: \"Notes d'officiels\",\n select_team: 'Sélectionner une équipe',\n certify_game: 'Certifier le match',\n view_scoresheet: 'Afficher la feuille de match',\n active: 'Actif',\n inactive: 'Inactif',\n confirm_changes: 'Confirmer les changements',\n game_status: 'Statut de match',\n set_game_status: 'Changer le statut des matchs',\n change_game_status: 'Changer le statut',\n view_options: \"Options d'affichage\",\n draftUpdates: {\n create: 'Brouillon de mises à jour',\n request: 'Demander un changement',\n card: {\n title: 'Brouillons de mises à jour',\n subtitle: 'Les suivants sont des matchs brouillons non-publiés qui sont liee a ce match. Une fois publiées, les modifications seront appliquées à ce match.'\n },\n tooltips: {\n create: 'Créez un brouillon de mises à jour pour appliquer des modifications à ce match.',\n request: 'Soumettez une demande de modifications à ce match.',\n }\n },\n cross_scheduling_add: 'Ajouter un horaire croisée',\n cross_scheduling_remove: \"Supprimer l'horaire croisée\",\n lineup: {\n name: 'Alignement',\n approved: 'Alignement approuvé',\n incomplete: 'Alignement incomplet',\n game: 'Alignement du match',\n },\n assignment: {\n history: 'Histoire',\n confirm: \"Confirmer l'assignation\",\n decline: \"Refuser l'assignation\",\n confirm_reassignment: 'Confirmer la réassignation',\n confirm_request: 'Confirmer la demande',\n expired_qualification: 'Qualification expirée',\n flagged_official: 'Officiel signalé',\n discard_changes: 'Annuler les modifications',\n request_game: 'Demander ce match',\n this_game: 'Ce match',\n delegate: \"Délégation de l'assignation\",\n swap_assignment: \"Échanger un assignation\",\n swap_assignment_official: \"Changer l'assignation de cet officiel\",\n search_names: 'Recherche par noms',\n search_attributes: 'Recherche par attributs',\n unassigned: 'Non assigné',\n hidden: 'Cachée',\n adhoc: 'Bénévole',\n update_availability: 'Disponibilité de la mise à jour',\n game_officials: 'Officiels du match',\n assign_officials: 'Assigner des officiels',\n team_officials: \"Officiels d'équipe\",\n assigners: 'Assignateurs',\n show_attributes: 'Afficher les attributs',\n hide_attributes: 'Cacher les attributs',\n undo_no_show: 'Annuler pas présenté',\n delegate_pay: 'Déléguez également la paie',\n status: {\n ready: 'Prêt',\n confirmed: 'Confirmé',\n pending: 'En attente',\n declined: 'Refusé',\n requested: 'Demandé',\n no_show: 'Pas présenté',\n removed: 'Supprimé',\n expired: 'Expiré',\n ineligible: 'Inéligible',\n conflicts: 'Conflits',\n schedule: 'Horaire',\n travel: 'En déplacement',\n assigned_today: \"Assigné aujourd'hui\",\n available: 'Disponible',\n unavailable: 'Indisponible',\n account: 'Compte',\n assigned: 'Assigné',\n local: 'Locaux',\n }\n },\n certification: 'Certification',\n general: 'General',\n summary: 'Sommaire',\n flags: {\n 'Referee Entered Result': \"L'arbitre a inscrit les résultats\",\n 'Coach Entered Result': \"L'entraîneur a inscrit les résultats\",\n 'Unfinished': \"Le match ne s'est pas terminé\",\n 'Lineup Max Limit': 'Trop de joueurs',\n 'Lineup Min Limit': 'Pas assez de joueurs',\n 'Extra': 'Membre additionnel |||| Membres additionnels',\n 'Serving': 'Membre suspendu purgeant |||| Membres suspendus purgeant',\n 'Secondary Team': \"Membre d'équipe secondaire |||| Membres d'équipes secondaires\",\n 'Not Rostered': \"Membre manquant sur l'alignement |||| Membres manquants sur l'alignement\",\n 'Not Serving': 'Membre suspendus qui a joué |||| Membres suspendus qui ont joués',\n 'Missing Suspended Member': \"Membre suspendus manquant sur l'alignement\",\n 'Low Severity Penalties': 'Pénalité avec sévérité faible |||| Pénalités avec sévérité faible',\n 'High Severity Penalties': 'Pénalité avec sévérité élevé |||| Pénalités avec sévérité élevé',\n 'Yellow': 'Carton jaune |||| Cartons jaunes',\n 'Indirect Red': 'Carton rouge indirect |||| Cartons rouges indirects',\n 'Direct Red': 'Carton rouge direct |||| Cartons rouges directs',\n 'Notes': 'Notes de match',\n 'Unvalidated Members': 'Membre non validé |||| Membres non validés',\n 'Faulty Players': 'Joueur fautif |||| Joueurs fautifs',\n 'Transferred': 'Muté',\n 'Suspension': 'Suspension |||| Suspensions',\n },\n flagsDetails: {\n 'Missing Suspended Member': \"Un membre suspendu doit être ajouté sur l'alignement pour purger un match\",\n 'Not Rostered': \"Un membre a joué sans être sur l'alignement initial\",\n 'Extra': 'Membre additionnel',\n 'Transferred': \"Ce membre a été muté d'une autre organisation\",\n 'Secondary Team': \"Cette équipe n'est pas l'équipe principale de ce membre\",\n 'Unvalidated Members': \"Ce membre doit être validé dans Spordle ID\",\n 'Faulty Players': {\n 'hasInningsRest': \"Ce membre n'avait pas le droit de lancer en raison d'un repos causé par les manches lancées\",\n 'hasThrowsRest': \"Ce membre n'avait pas le droit de lancer en raison d'un repos causé par les balles lancées\",\n 'consecutiveDays': 'Ce membre a lancé trop de jours consécutifs',\n 'dailyInnings': 'Ce membre a lancé trop de manches cette journée',\n 'weeklyInnings': 'Ce membre a lancé trop de manches cette semaine',\n }\n }\n },\n messages: {\n forfeit_help: \"L'abandon d'un match complètera la feuille de match. Sélectionnez l'équipe qui a perdu le match.\",\n show_assignments: 'Afficher les assignations',\n show_flags: 'Afficher les notifications',\n reverse_home_away: \"Inverser les équipes\",\n show_more_game_info: \"Afficher plus d'informations sur le match\",\n group_games_by_arena: 'Grouper les matchs par surface',\n group_games_by_round: 'Grouper les matchs par étape',\n group_games_by_date: 'Grouper les matchs par date',\n confirm_delegate: \"Les matchs dont les officiels ne sont pas assignés sur certains rôles ou les matchs qui ont été assignés seront ignorés. Si aucune position n'est sélectionnée, l'organisation d'assignation des matchs sera changée.\",\n and_more: 'Et %{smart_count} autre... |||| Et %{smart_count} autres...',\n game_status: \"Cela mettra à jour l'horaire et remplacera le statut actuel ainsi que les commentaires du match.\",\n calendar: {\n subscribe: 'Abonnez-vous au calendrier',\n subscribe_description: 'Vous pouvez vous abonner à votre flux de calendrier personnel dans la plupart des applications de calendrier.',\n subscribe_description_extra: \"Cela inclut vos <strong>assignations officielles uniquement</strong>. Les changements de l'horaire peuvent être retardés dans votre application de calendrier.\",\n },\n apply_assign_rules: \"Mettre à jour les paramètres d'assignation pour ce match en appliquant les règles d'assignation.\",\n assignment: {\n accept_game_assignment: \"Accepter l'assignation du match\",\n decline_game_assignment: \"Refuser l'assignation du match\",\n are_you_sure_accept_assignment: \"Voulez-vous vraiment accepter cette assignation? Vous ne pourrez accepter aucune assignation tant que vous n'aurez pas refusé cette assignation.\",\n are_you_sure_accept_assignment_disabled: \"Voulez-vous vraiment accepter cette assignation? Vous ne pourrez pas refuser cette assignation et accepter toute autre assignation.\",\n accepting_assignment: \"L'acceptation de cette assignation entraînera également le refus des assignations suivantes:\",\n you_cannot_accept_assignment: \"Vous ne pouvez pas accepter cette assignation, car vous avez d'autres assignations en conflit:\",\n consecutive_game: 'Matchs consécutifs',\n accept_consecutive_assignments: \"L'acceptation de cette assignation entraîne l'acceptation de toutes les assignations consécutives.\",\n decline_consecutive_assignments: 'Le refus de cette assignation entraîne le refus de toute autre assignations consécutive.',\n already_assigned: '%{name} est déjà assigné à ce poste.',\n continuing_replacement: 'Si vous continuez, %{name1} sera supprimé de ce match et %{name2} sera assigné à sa place.',\n invalid_qualification: \"%{name} n'a pas de qualification valide pour le moment.\",\n verified_eligibility: \"Assurez-vous d'avoir vérifié l'éligibilité avant d'assigner.\",\n unable_accept_assignment: \"%{name} peut ne pas être en mesure d'accepter cette assignation pour les raisons répertoriées dans l'onglet Sommaire.\",\n assign_official_to_game: 'Assigner un officiel à ce match',\n reason_for_declining: 'Raison du refus',\n both_assignments: 'les deux assignations',\n assignments: 'cette assignation |||| toutes les %{smart_count} assignations',\n decline_as_unavailable: 'Refuser %{assignments} comme indisponible',\n decline_as_available: 'Refuser %{assignments} comme disponible',\n contact_assigner: 'Ce match vous oblige à contacter un assignateur pour être supprimé.',\n decline_assignment: \"Si vous refusez cette assignation, vous pourrez changer d'avis jusqu'à ce que vous soyez supprimé par un assignateur\",\n other_assignments: \"Vous avez également d'autres assignation en ce moment qui entrent en conflit avec ce match.\",\n accept_another_assignment: 'Acceptez une autre tâche à ce moment-là à la place',\n removed_from_game: '%{name} sera supprimé de ce match',\n request_removed: 'Votre demande sera supprimée',\n remove_request_from_game: \"Supprimer l'officiel de cette assignation\",\n remove_official_from_assignment: \"Supprimer l'agent de cette assignation\",\n assigners_will_be_notified: \"Les assignateurs seront informés que vous avez demandé ce match. Vous devrez toujours confirmer votre assignation si vous avez été assigné à ce match.\",\n select_new_assignment: 'Sélectionnez la nouvelle assignation pour %{name}',\n swap_choice: '%{name} deviendra %{position}',\n swap_current_position: \"C'est la position actuelle\",\n swap_delegated: 'Cette assignation est déléguée à un autre assignateur',\n swap_settings_help: \"Vous pouvez également modifier les positions disponibles en modifiant le système d'arbitrage dans les paramètres du match ci-dessous.\",\n position_unassigned: \"Ce poste n'est pas assigné.\",\n official_already_assigned: 'Un officiel est déjà assigné à ce poste.',\n select_official_to_view_availability: 'Sélectionnez un officiel pour voir sa disponibilité.',\n hidden_by_filter: 'officiels sont masqués par des filtres',\n official_from: 'officiel de',\n scorekeeper_from: 'marqueur de',\n contact_game_assigners_officials: \"Contactez les assignateur et les officiels de ce match\",\n all_assignments_confirmed: 'Toutes les assignations sont confirmées.',\n draft_status_description: 'Non visible pour les officiels',\n assigned_by: `Assigné par %{name}`,\n time_display: `Toutes les heures sont affichées en <strong>%{timezone}</strong>`,\n time_display_local: `Les heures sont dans votre fuseau horaire local (%{timezone})`,\n time_display_other: `Les heures sont dans %{timezone}`,\n delegate: \"Ce poste peut être délégué à un autre assignateur. En tant qu'assignateur du match, vous pouvez modifier ou supprimer la délégation à tout moment.\",\n update_official_presence_status: 'Mettre à jour le statut de présence',\n mark_as_no_show: 'Marquer %{name} comme non présent',\n undo_no_show: \"Cela restaurera le statut de %{name} comme confirmé.\"\n }\n },\n alerts: {\n loading_game_error: \"Erreur lors du chargement de l'historique du match. Vous devrez peut-être actualiser ou réessayer plus tard.\",\n no_changes_made: \"Aucune modification n'a été apportée à ce match.\",\n no_edit_permission: \"Vous n'êtes pas autorisé à modifier ce match.\",\n no_change_date_permission: \"L'organisation de l'horaire a désactivé le changement de date pour les matchs en brouillon partagés.\",\n loading: {\n assignments: 'Chargement des assignations...',\n assignment_history: \"Chargement de l'historique des assignations...\",\n availability: 'Chargement de la disponibilité...',\n },\n status: {\n completed: 'Ce match est terminé.',\n assigning_not_configured: \"L'assignation n'est pas configurée pour ce match\",\n integration: `Ce match est assigné en dehors de ${appName}.`,\n conflict: \"Ce match a un conflit d'horaire\",\n cancelled: 'Ce match est annulé',\n postponed: 'Ce match est reporté',\n incomplete: 'Ceci est un match incomplet dans le passé',\n rescheduled: 'Ce match est reprogrammé',\n rink_changed: \"La surface de ce match a changé\",\n },\n assigning_reason: {\n no_office: \"L'assignation n'est pas possible pour ce match car aucune \\\"détermination des assignateurs\\\" n'a pu être résolue.\",\n no_system: \"L'assignation n'est pas possible pour ce match car %{name} ou l'un de ses organisations parentaux ne dispose d'aucun système d'assignation pour cette catégorie.\",\n assign_settings_disabled: \"L'assignation n'est pas possible pour ce match car l'assignation est désactivée\",\n },\n assignment: {\n load_assignment_panel_error: \"Impossible de télécharger le panneau d'assignation\",\n load_assignments_error: 'Impossible de télécharger les assignations',\n status_of_assignments: \"Les assignations sont actuellement à l'état %{status}. Les responsables ne seront pas encore informés.\",\n official_history_error: \"Échec du chargement de l'historique de l'officiel.\",\n no_assignment: 'Aucune assignation cette saison.',\n this_position_already_assigned: \"Ce poste est déjà assigné à quelqu'un d'autre.\",\n already_assigned_to_game: 'Vous êtes déjà assigné à ce match. Vous devrez refuser votre assignation actuelle avant de pouvoir en faire la demande.',\n official_details_error: \"Impossible de télécharger les détails de l'officiels.\",\n load_official_schedule_error: \"Échec du chargement de l'horaire de l'officiel.\",\n no_game_and_availability: \"Cet officiel n'a pas de matchs et de disponibilités ce jour-là.\",\n missing_settings: 'Paramètres manquants',\n no_pay_structure: \"Ce match n'a pas de structure de rémunération configurée. Cela peut être modifié dans les paramètres ci-dessous.\",\n no_pay_structure_delegated: \"Cette assignation déléguée n'a pas de structure de rémunération configurée.\",\n assigned_by: 'Ce poste est assigné par %{office} et payé par %{payOffice}',\n assigned_by_delegated: 'Ce poste est délégué pour être assigné par %{office} et payé par %{payOffice}',\n suggestions: {\n title: 'Suggestions',\n title_alt: 'Pas de suggestions',\n no_requests_or_ready_officials: \"Il n'y a pas de demandes ou d'officiels prêts pour ce match\",\n officials_requested_this_game_already: 'Certains officiels ont demandé ce match ou sont déjà dans ce lieu',\n no_request_officials_ready: 'Pas de demande, mais certains officiels sont prêts',\n no_ready_officials: \"Il n'y a pas d'officiel prêt pour ce match\",\n officials_already_arena: 'Certains officiels sont déjà dans ce lieu',\n no_officials_this_arena: \"Aucun officiel n'est déjà dans ce lieu, mais certains sont prêts\",\n },\n no_officials_required: {\n title: \"Aucun officiel n'est requis pour ce match\",\n assign_official: \"Pour assigner des officiels, modifiez le paramètre Système d'arbitrage ci-dessous\",\n },\n assigner: {\n ready: {\n title: 'Prêt',\n officiate_game: \"Cet officiel est capable d'arbitrer ou marquer ce match\",\n },\n confirmed: {\n title: 'Confirmé',\n accepted: 'Cet officiel a accepté ce poste',\n accepted_other: 'Cet officiel a accepté un autre poste pour ce match',\n },\n pending: {\n title: 'En attente',\n unconfirmed: \"Cet officiels a été assigné à cette position et n'a pas encore accepté\",\n unconfirmed_other: \"Cet officiels a été assigné à un autre poste pour ce match et n'a pas encore accepté\",\n },\n declined: {\n title: 'Refusé',\n change_response: \"Cet officiel a <strong>refusé</strong> ce poste. Ils peuvent toujours changer d'avis et accepter jusqu'à ce que vous les supprimiez\",\n change_response_other: \"Cet officiel a <strong>refusé</strong> un autre poste pour ce match. Ils peuvent toujours changer d'avis et accepter jusqu'à ce que vous les supprimiez\",\n },\n no_show: {\n title: 'Pas présenté',\n removed: \"Le marqueur a retiré cet officiel de la feuille de match car il ne s'est pas présenté\",\n },\n requested: {\n title: 'Demandé',\n requested: 'Cet officiel a demandé ce match',\n },\n removed: {\n title: 'Supprimé',\n removed: 'Officiel a été supprimé après avoir précédemment %{message} ce match',\n },\n expired: {\n title: 'Expiré',\n expired: \"La qualification d'officiel a <strong>expiré</strong> pour le moment\",\n },\n suspended: {\n title: 'Suspendu',\n suspended: \"Cet officiel est <strong>suspendu</strong> en tant que %{positionGroup} depuis le %{date} %{duration}\",\n duration: 'pour %{smart_count} match |||| pour %{smart_count} matchs',\n duration_expiry: \" ou jusqu'au %{date}\",\n duration_indefinite: 'pour une durée indéterminée'\n },\n eligibility: {\n title: 'Inéligible',\n minimum_level: \"Le <strong>niveau minimum de %{position}</strong> n'a pas été atteint pour ce match\",\n no_grade: \"Aucune qualification n'a encore été saisie pour cet officiel\",\n minimum_grade: \"La <strong>qualification minimale de %{position}</strong> n'a pas été atteinte pour ce match\",\n minimum_age: \"<strong>L'âge minimum</strong> n'a pas été atteint pour ce match\",\n no_age: \"L'officiel n'a pas encore précisé sa date de naissance\",\n limit_reached: \"L'officiel a atteint la limite quotidienne de %{smart_count} match |||| L'officiel a atteint la limite quotidienne de %{smart_count} matchs\",\n category: \"L'officiel n'est pas éligible pour cette catégorie\",\n },\n conflicts: {\n title: 'Conflits',\n team_conflict: \"L'officiel a un <strong>conflit d'équipe</strong> pour ce match\",\n rostered: \"L'officiel est <strong>inscrit</strong> dans une équipe jouant à ce match\",\n },\n schedule: {\n title: 'Horaire',\n roster_conflict: \"L'officiel est <strong>inscrit</strong> dans une équipe <strong>jouant un autre match</strong> en ce moment.\",\n affiliate_conflict: \"L'officiel est un <strong>joueur affilié</strong> dans une équipe <strong>jouant un autre match</strong> en ce moment.\",\n game_conflict: \"L'officiel a <strong>accepté une autre assignation</strong> pour le moment\",\n game_overlap: \"L'officiel a une autre assignation en ce moment mais n'a pas encore répondu\",\n },\n travel: {\n title: 'En déplacement',\n title_assigned_today: \"Assigné aujourd'hui\",\n another_venue: \"Cet officiel sera <strong>dans un autre lieu</strong> dans l'heure qui suit ce match\",\n this_venue: 'Cet officiel est assigné à ce lieu dans les 3 heures suivant ce match',\n assigned_today: \"Cet officiel est assigné sur un match <strong>aujourd'hui</strong>\",\n },\n available: {\n title: 'Disponible',\n assigned: \"L'officiel a indiqué qu'il est disponible pendant cette période\",\n },\n unavailable: {\n title: 'Indisponible',\n unavailable: \"L'officiel s'est rendu <strong>indisponible</strong> pour le moment\",\n no_availability: \"L'officiel n'a défini aucune disponibilité pour le moment\",\n no_availability_office: \"L'officiel n'a pas cette organisation dans ses paramètres de disponibilité\",\n no_availability_arena: \"L'officiel n'a pas ce lieu dans ses paramètres de disponibilité\",\n },\n account: {\n title: 'Compte',\n unverified: \"Cet officiel n'a pas d'adresse courriel de contact vérifiée et <strong>ne recevra pas de notifications d'assignation</strong>\",\n invited: \"Cet officiel n'a pas de compte et est <strong>incapable de répondre aux assignations</strong>. Une invitation a été envoyée à cet officiel\",\n unregistered: \"Cet officiel n'a pas de compte et est <strong>incapable de répondre aux assignations</strong>\",\n }\n },\n assignee: {\n ready: {\n title: 'Prêt',\n officiate_game: \"Vous êtes capable d'arbitrer ou marquer ce match\",\n },\n confirmed: {\n title: 'Confirmé',\n accepted: 'Vous avez accepté cette assignation de match',\n },\n pending: {\n title: 'En attente',\n confirm_conflict: \"Vous avez été assigné à ce match - acceptez ou refusez afin de confirmer le changement d'horaire\",\n confirm: 'Vous avez été assigné à ce match - acceptez pour confirmer la participation',\n },\n declined: {\n title: 'Refusé',\n change_response: \"Vous êtes toujours assigné et pouvez modifier votre réponse jusqu'à ce qu'un assignateur vous retire de ce match\",\n change_response_other: \"Vous avez <strong>refusé</strong> un autre poste pour ce match. Vous pouvez toujours changer d'avis et accepter jusqu'à ce qu'un assignateur vous retire de ce match\",\n },\n no_show: {\n title: 'Pas présenté',\n removed: 'Le marqueur vous a retiré de la feuille de match comme vous ne vous êtes pas présenté',\n },\n requested: {\n title: 'Demandé',\n requested: 'Vous avez demandé ce match',\n },\n removed: {\n title: 'Supprimé',\n removed: 'Vous avez été supprimé après avoir %{message} ce match',\n },\n expired: {\n title: 'Expired',\n expired: \"Votre qualification d'arbitre a <strong>expiré</strong> à ce moment\",\n },\n suspended: {\n title: 'Suspendu',\n suspended: \"Vous avez été <strong>suspendu</strong> en tant que %{positionGroup} depuis %{date} %{duration}\",\n },\n eligibility: {\n title: 'Inéligible',\n minimum_level: \"Vous n'avez pas atteint le <strong>niveau minimum %{position}</strong> pour ce match\",\n no_grade: \"Aucune qualification n'a encore été saisie pour vous\",\n minimum_grade: \"Vous n'avez pas atteint le <strong>sous-niveau minimale de %{position}</strong> pour ce match\",\n minimum_age: \"Vous n'avez pas atteint <strong>l'âge minimum</strong> pour ce match\",\n no_age: \"Vous n'avez pas encore défini votre date de naissance. Veuillez mettre à jour votre profil\",\n limit_reached: \"Vous avez atteint la limite quotidienne de %{smart_count} match |||| Vous avez atteint la limite quotidienne de %{smart_count} matchs\",\n category: \"Vous n'êtes pas éligible pour cette catégorie\",\n },\n conflicts: {\n title: 'Conflits',\n team_conflict: \"Vous avez un <strong>conflit d'équipe</strong> pour ce match\",\n rostered: \"Vous êtes <strong>inscrit</strong> dans une équipe qui joue à ce match\",\n },\n schedule: {\n title: 'Horaire',\n roster_conflict: \"Vous êtes inscrit dans une équipe <strong>jouant à un autre match</strong> en ce moment\",\n game_conflict: \"Vous avez <strong>accepté un autre assignation</strong> pour le moment\",\n game_overlap: \"Vous avez actuellement une autre assignation auquel vous n'avez pas encore répondu\",\n },\n travel: {\n title: 'En déplacement',\n title_assigned_today: \"Assigné aujourd'hui\",\n another_venue: \"Vous êtes <strong>assigné à un autre lieu</strong> dans l'heure qui suit ce match\",\n this_venue: \"Vous êtes assigné à ce lieu dans les 3 heures suivant ce match\",\n assigned_today: \"Vous êtes assigné sur un match <strong>aujourd'hui</strong>\",\n },\n available: {\n title: 'Disponible',\n assigned: \"Votre calendrier indique que vous êtes disponible à cette heure et lieu\",\n },\n unavailable: {\n title: 'Indisponible',\n unavailable: \"Vous vous êtes rendu <strong>indisponible</strong> pour le moment\",\n no_availability: \"Vous n'avez défini aucune disponibilité pour le moment\",\n no_availability_office: \"Vous n'avez pas inclus cette assignation dans vos paramètres de disponibilité\",\n no_availability_arena: \"Vous n'avez pas inclus ce lieu dans vos paramètres de disponibilité\",\n },\n account: {\n title: 'Compte',\n unverified: \"Vous devez <strong>valider votre adresse courriel de contact</strong> pour recevoir des notifications d'assignation\",\n invited: \"Vous n'avez pas de compte et ne serez pas en mesure de répondre à l'assignation. Une invitation vous a été envoyée\",\n unregistered: \"Vous n'avez pas de compte et vous ne pourrez pas répondre aux assignations\",\n }\n }\n }\n },\n helpers: {\n split: 'Optionnel - utiliser pour diviser la surface',\n number: 'Généré par le brouillon',\n team: \"Optionnel - À déterminer si aucune équipe n'est spécifiée\",\n comments: 'Optionnel - affiché sur le calendrier public',\n conflicts: 'Résoudre les conflits ou le statut passera à Conflit',\n reset_assigner: \"Remplacer l'assignateur existant en fonction des règles de détermination des assignateurs\",\n assignment: {\n delegated_tooltip: 'Délégué à %{office}',\n pay_delegated_tooltip: 'Payé par %{office}',\n notification_will_be_sent: \"Une notification sera envoyée aux %{recipients} de ce match et aux officiels du match assignés.\",\n note_for_accepted_game: 'Cette note sera utilisée pour vos matchs acceptés',\n delegated_pay_office: 'Le paiement sera géré par %{office}',\n },\n scoresheet_notes: 'Optionnel - ces notes seront visibles publiquement sur la feuille de match',\n admin_notes: 'Optionnel - ces notes seront réservées aux marqueurs, aux officiels et aux administrateurs uniquement',\n using_slot: \"Utilisation d'une plage horaire\",\n use_next_sequence: 'Utiliser le prochain numéro de séquence disponible',\n },\n notifications: {\n assignment: {\n accepted_game: 'Match %{number} accepté',\n declined_game: 'Match %{number} refusé',\n requested_game: 'Match %{number} demandé',\n official_assigned_to_game: 'Officiel assigné au match %{number}',\n remove_official_from_game: 'Officiel retiré du match %{number}',\n official_set_to_no_show: 'Officiel marqué comme non présent',\n request_removed_from_game: 'Votre demande a été supprimée du match %{number}',\n status: {\n assignee: {\n requested: 'Vous avez demandé ce match',\n pending: \"Assignation en attente, en attente de votre réponse.\",\n confirmed: 'Votre assignation est confirmée.',\n declined: 'Vous avez refusé cette assignation.',\n }\n },\n errors: {\n accept_overlaps: \"Impossible d'accepter en raison d'une assignation qui se chevauche\",\n accept_consecutive: \"Impossible d'accepter en raison d'une assignation consécutive\",\n accept_consecutive_overlaps: \"Impossible d'accepter en raison d'une assignation consécutive qui se chevauche\",\n decline_consecutive: \"Impossible de refuser en raison d'une assignation consécutive\",\n }\n },\n recalculating: 'Recalculer...',\n game_status_changed: 'Statut changé',\n change_game_status: 'Changement de %{smart_count} match au statut %{status} |||| Changement de %{smart_count} matchs au statut %{status}',\n change_game_status_error: \"Impossible de changer le statut |||| Impossible de changer les statuts\",\n delegated_games: '%{smart_count} match délégués avec succès |||| %{smart_count} matchs délégués avec succès',\n delegated_games_error: 'Impossible de déléguer les match |||| Impossible de déléguer les matchs',\n changed_assigner_games: \"Changement d'assignateur pour %{smart_count} match avec succès |||| Changement d'assignateur pour %{smart_count} matchs avec succès\",\n changed_assigner_games_error: \"Impossible de changer l'assignateur de match |||| Impossible de changer les assignateurs de match.\",\n certified_games: '%{smart_count} match certifié |||| %{smart_count} matchs certifiés',\n certified_games_error: \"Une erreur s'est produite lors de la certification du match |||| Une erreur s'est produite lors de la certification des matchs\",\n },\n validations: {\n invalid_date: 'Date non valide',\n invalid_time: 'Heure non valide',\n must_have_date: \"Doit toujours avoir une date s'il y a une heure\",\n must_have_date_both_times: \"Doit toujours avoir à la fois une heure de début et une heure de fin s'il y a une heure\",\n end_before_start: \"L'heure de fin doit toujours être après l'heure de début\",\n invalid_time_check_am_pm: 'Heure non valide - vérifier AM/PM',\n invalid_must_be_same_day: 'Doit être la même date',\n spaces_not_allowed: 'Les espaces ne sont pas autorisés',\n after_start_time: \"Doit être après l'heure de début\",\n overlaps: 'Ce match chevauche un match existant',\n number_exists: 'Existe déjà dans cet horaire',\n conflicts: 'Résoudre les conflits ou passer à un statut inactif',\n before_schedule_date: \"Avant la date de début de l'horaire\",\n after_schedule_date: \"Après la date de fin de l'horaire\",\n team_not_in_cross_scheduling_groups: \"L'équipe ne fait partie d'aucun des groupes sélectionnés\",\n team_in_both_cross_scheduling_groups: \"L'équipe est dans les deux groupes sélectionnés\",\n teams_in_same_cross_scheduling_group: \"L'équipe local et visiteur sont toutes les deux dans un des groupes sélectionnés\",\n unavailable_slot: \"Cette plage horaire n'est pas disponible\",\n overlapping_slot: 'Plage horaire chevauchant',\n limit_date_change: \"Vous n'êtes pas autorisé à modifier la date\"\n },\n values: {\n status: STATUSES,\n assignment: {\n status: {\n Active: 'Actif',\n Draft: 'Brouillon',\n },\n position: {\n Referee: 'Arbitre',\n Linesperson: 'Juge de lignes',\n LinespersonTwo: 'Juge de lignes 2',\n LinespersonThree: 'Juge de lignes 3',\n Official: 'Officiel',\n Scorekeeper: 'Marqueur',\n Timekeeper: 'Chronométreur',\n Supervisor: 'Superviseur',\n Participant: 'Participant',\n },\n position_short: {\n Referee: 'A',\n Linesperson: 'JL',\n LinespersonTwo: 'JL2',\n LinespersonThree: 'JL3',\n Official: 'O',\n Scorekeeper: 'M',\n Timekeeper: 'C',\n Supervisor: 'S',\n },\n }\n },\n tooltips: {\n forfeited: 'Ce match a été déclaré forfait par %{team}',\n available_official: `\n <div>\n Un officiel est disponible si :\n <ul>\n <li>\n Il n'a pas été assigné à un autre match au même moment\n </li>\n <li>\n Il s'est déclaré disponible pour cette période de temps\n </li>\n <li>\n Il a cette organisation dans ses paramètres de disponibilité\n </li>\n <li>\n Il a ce lieu dans ses paramètres de disponibilité\n </li>\n <li>\n Il n'a aucun conflit de déplacement\n </li>\n </ul>\n </div>\n `,\n eligible_official: `\n <div>\n Un officiel est éligible si :\n <ul>\n <li>\n Il n'a pas confirmé une autre assignation de match au même moment\n </li>\n <li>\n Il possède le niveau minimum requis pour ce match\n </li>\n <li>\n Il possède la classification minimale requise pour ce match\n </li>\n <li>\n Il remplit l'exigence d'âge minimum\n </li>\n <li>\n Il n'a pas atteint la limite quotidienne de matchs\n </li>\n <li>\n Il est éligible pour la catégorie de ce match\n </li>\n </ul>\n </div>\n `,\n non_expired_official: 'Officiels avec des qualifications non expirées',\n registered_official: 'Officiels avec un compte Spordle',\n new_official: 'Officiels ayant uniquement des qualifications de la saison de ce match',\n local_official: \"Officiels ayant au moins une qualification provenant de ou sous cette organisation d'assignation\",\n ignore_arena_availability: `Exclure la disponibilité de lieu lors de l'utilisation du filtre \"Officiels disponibles\"`,\n },\n },\n gameEvents: {\n name: 'Événement du match |||| Événements du match',\n fields: {\n eventType: 'Type',\n event: 'Événement',\n meta: 'Métadonnées',\n },\n labels: {\n card: {\n title: 'Événements du match',\n },\n event_id: \"ID d'événement\",\n created: 'Créer',\n account: 'Compte',\n device: 'Appareil',\n transaction: 'Transaction',\n received: 'Reçu',\n game_number: 'Numéro de match',\n start_time: 'Heure de début',\n end_time: 'Heure de fin',\n signatory: 'Signataire',\n signature: 'Signature',\n scorekeeper: 'Marqueur',\n timekeeper: 'Chronométreur',\n position: 'Position |||| Positions',\n notes: 'Notes',\n game_time: 'Temps de jeu',\n emails: 'Adresses courriel',\n system: 'Système',\n history: 'Historique',\n homeScore: 'Pointage - Local',\n awayScore: 'Pointage - Visiteur',\n goal: {\n id: 'ID du but',\n scorer: 'Buteur',\n assists: 'Aide(s)',\n type: 'Type',\n powerplay: 'Jeu de puissance',\n shorthanded: 'Désavantage numérique',\n empty_net: 'Filet vide',\n penalty_shot: 'Tir de pénalité',\n own_goal: 'But contre son camp'\n },\n penalty: {\n id: 'ID de pénalité',\n infraction: 'Infraction',\n served_by: 'Servi par',\n },\n goalie_change: {\n id: 'ID du changement de gardien de but',\n goalie: 'Gardien de but',\n new_goalie: 'Nouveau gardien mis en place',\n },\n periods: {\n 1: '1re période',\n 2: '2e période',\n 3: '3e période',\n OT: 'Période de prolongation',\n SO: 'Tirs de barrage',\n },\n delete_events: \"Supprimer l'événement du match |||| Supprimer les événements du match\"\n },\n messages: {\n offline_for_duration: 'Hors ligne pendant %{duration}',\n time_skew_duration: 'Temps décalé de %{duration}',\n game_cancelled: 'Match annulé',\n game_completed: 'Feuille de match complétée',\n game_disapproved: 'Feuille de match désapprouvée',\n game_certified: 'Feuille de match certifiée',\n game_decertified: 'Feuille de match décertifié',\n game_deleted: 'Le match a été supprimé',\n game_reset: 'Feuille de match réinitialisée',\n requested: 'demandé %{position}',\n assigned_as: 'assigné en tant que %{position}',\n accepted_assignment: 'assignation acceptée',\n declined_assignment: 'assignation refusée',\n added_as: 'ajouté en tant que %{position}',\n changed_to: 'changé en %{position}',\n removed: 'supprimé',\n confirm_delete_events: 'Voulez-vous vraiment supprimer cet événement du match? |||| Voulez-vous vraiment supprimer ces événements du match?'\n },\n values: {\n eventType: {\n gameCreated: 'Match créé',\n gameRescheduled: 'Match reprogrammé',\n gameUpdated: 'Match mis à jour',\n gameDeleted: 'Match supprimé',\n gameForfeited: 'Match forfait',\n gameStarted: 'Match commencé',\n gameEnded: 'Match terminé',\n assignSettingsUpdated: \"Paramètres d'assignation mis à jour\",\n lineupUpdated: \"Alignement mis à jour\",\n lineupApproved: 'Alignement approuvé',\n lineupExtraAdded: 'Alignement extra ajouté',\n lineupExtraRemoved: 'Alignement extra supprimé',\n officialDelegated: 'Official délégué',\n officialRequested: 'Officiel demandé',\n officialAssigned: 'Officiel assigné',\n officialAccepted: 'Officiel accepté',\n officialDeclined: 'Officiel refusé',\n officialAdded: 'Officiel ajouté',\n officialUpdated: \"Mise à jour de l'officiel\",\n officialRemoved: 'Officiel supprimé',\n keepersUpdated: 'Mise à jour des gardiens',\n goalScored: 'But marqué',\n goalEdited: 'But mis à jour',\n goalDeleted: 'But supprimé',\n penaltyStarted: 'Pénalité commencée',\n penaltyEnded: 'Pénalité terminée',\n penaltyEdited: 'Pénalité mise à jour',\n penaltyDeleted: 'Pénalité supprimée',\n goalieChanged: 'Changement de gardien',\n goalieChangeDeleted: 'Changement de gardien supprimé',\n goalieChangeEdited: 'Changement de gardien mis à jour',\n settingsUpdated: 'Paramètres mis à jour',\n notesUpdated: 'Notes mises à jour',\n goalieShotsUpdated: 'Tirs contre mis à jour',\n scoreUpdated: 'Pointage mis à jour',\n scoresheetApproved: 'Feuille de match complétée',\n scoresheetDisapproved: 'Feuille de match désapprouvée',\n throwsInningsUpdated: 'Mise à jour des balles et manches lancées',\n certificationFlagsUpdated: 'Mise à jour des notifications',\n scoresheetCertified: 'Feuille de match certifiée',\n scoresheetDecertified: 'Feuille de match décertifiée',\n scoresheetReset: 'Feuille de match réinitialisée'\n }\n },\n notifications: {\n deleted: '%{smart_count} événement du match supprimé |||| %{smart_count} événements du match supprimés',\n delete_error: 'Impossible de supprimer les événements du match'\n }\n },\n gameAffiliates: {\n name: 'Affilié |||| Affiliés',\n fields: {\n gameId: 'Match',\n teamId: 'Équipe',\n participantId: 'Participant',\n positions: 'Position',\n number: 'Numéro',\n officeId: 'Organisation'\n },\n actions: {\n add: 'Ajouter un affilié',\n },\n labels: {\n card: {\n title: 'Affiliés'\n },\n edit: \"Mettre à jour l'affilié\",\n }\n },\n participants: {\n name: 'Participant |||| Participants',\n fields: {\n participantId: 'Participant',\n fullName: 'Prénom et Nom',\n firstName: 'Prénom',\n lastName: 'Nom',\n name: 'Nom',\n HCRId: 'Numéro de membre',\n email: 'Adresse courriel',\n accountEmail: 'Courriel du compte',\n phone: 'Numéro de Téléphone',\n isPrimary: 'Primaire',\n },\n actions: {\n edit: 'Modifier le participant',\n invite_sso: 'Inviter SMA',\n },\n labels: {\n card: {\n title: 'Participant',\n },\n tabs: {\n summary: 'Sommaire',\n profile: 'Profil',\n schedule: 'Horaire',\n registrations: 'Ligue',\n officiating: 'Officiel',\n settings: 'Paramètres',\n },\n tooltips: {\n create_participant: 'Le participant sera créé',\n picture_update_in_id: 'Pour modifier la photo, veuillez mettre à jour dans Spordle ID'\n },\n add: 'Nouveau participant',\n account_invitation: 'Invitation de compte',\n account_invitation_sso: 'Invitation de compte Spordle My Account',\n availability: {\n card: {\n title: 'Disponibilité',\n subtitle: \"Sélectionnez les dates et les heures auxquelles vous êtes disponible pour arbitrer ou marquer des matchs, ou bloquez les heures où vous n'êtes pas disponible.\",\n },\n title: 'Mes disponibilités',\n updated: 'Disponibilité mise à jour!',\n saved: 'Sauvegardé',\n saving: 'Sauvegarde en cours...',\n note: 'Note de disponibilité',\n add_time: 'Ajouter des disponibilités',\n multiple: 'Plusieurs',\n settings: 'Paramètres de disponibilité',\n add_associations: 'Ajouter des associations',\n assigners_updated: 'Assignateurs mis à jour',\n assigners_error: 'Impossible de mettre à jour les assignateurs',\n venues_updated: 'Lieux mis à jour',\n venues_error: 'Impossible de mettre à jour les lieux',\n categories_updated: 'Catégories mises à jour',\n categories_error: 'Impossible de mettre à jour les catégories',\n assigner_availabilities: {\n own_profile: {\n title: 'Mes assignateurs',\n select_associations: 'Sélectionnez les associations pour lesquelles vous vous rendrez disponible pour arbitrer ou marquer des matchs.',\n },\n other_profile: {\n title: \"Assignateurs de l'officiel\",\n select_associations: 'Sélectionnez les associations pour lesquelles cet arbitre est disponible pour arbitrer des matchs.',\n },\n },\n venues_availabilities: {\n own_profile: {\n title: 'Mes lieux',\n select_venues: \"Sélectionnez les lieux où vous êtes prêt à vous rendre régulièrement. Si vous n'en sélectionnez aucun, vous serez disponible pour tous les lieux.\",\n },\n other_profile: {\n title: \"Lieux de l'officiel\",\n select_venues: \"Sélectionnez les lieux où cet arbitre est disponible pour officier des matchs. Si aucun lieu n'est sélectionné, l'arbitre sera disponible pour tous les lieux.\",\n },\n },\n categories_availabilities: {\n own_profile: {\n title: 'Mes Catégories',\n },\n other_profile: {\n title: \"Catégories de l'officiel\",\n },\n alerts: {\n available_to_all_title: \"Disponible pour toutes les catégories\",\n available_to_all_body: \"Ajoutez des positions et des catégories pour limiter leur éligibilité à des catégories spécifiques.\",\n },\n chips: {\n all: \"Éligible à tous\",\n none: \"Non éligible\",\n },\n labels: {\n no_categories: \"Aucune catégorie...\"\n }\n }\n },\n status: {\n roles_title: 'Rôles manquants',\n roles_body: \"Ce participant ne peut pas créer de compte tant qu'il n'est pas inscrit dans une équipe, qu'il n'a pas de qualification à titre d'officiel ou qu'il n'a pas un rôle administratif.\",\n roles_unauthorized: \"Ce participant ne peut pas utiliser son compte tant qu'il n'est pas inscrit dans une équipe, qu'il n'a pas de qualification à titre d'officiel ou qu'il n'a pas un rôle administratif.\",\n account_title: 'Pas de compte',\n account_body: \"Ce participant n'a pas encore créé de compte. Vous pouvez l'inviter à s'inscrire.\",\n invited_title: 'Invité',\n invited_body: \"Une invitation a été envoyée à ce participant. Si nécessaire, vous pouvez retourner l'invitation.\",\n contacts_title: 'Pas de contact',\n contacts_body: \"Ce participant ne peut pas recevoir de notifications tant qu'un contact n'aura pas été ajouté et vérifié. Cela n'affecte pas la capacité d'utiliser leur compte.\",\n unverified_title: 'Ne pas recevoir de notifications',\n unverified_body: \"Ce participant ne recevra pas de notifications tant qu'il n'aura pas un contact vérifié avec les notifications activées. Cela n'affecte pas sa capacité à utiliser son compte.\",\n roles: 'Rôles',\n types: {\n Admin: 'Administrateur',\n League: 'Ligue',\n Assigner: 'Assignateur',\n Staff: \"Personnel d'équipe\",\n Player: 'Joueur',\n Official: 'Officiel',\n Coach: 'Entraîneur',\n Scorekeeper: 'Marqueur',\n Monitor: 'Monitor',\n }\n },\n },\n messages: {\n search_by_name: 'Entrez un nom pour lancer la recherche',\n send_link: 'Cela enverra un lien qui pourra être utilisé pour créer un nouveau compte ou connecter ce profil à un compte existant.',\n link_sso: 'Cela créera un nouveau compte Play et le reliera à Spordle My Account',\n create_sma: 'Voulez-vous aussi créer un nouveau utilisateur Spordle My Account avec ce courriel?',\n availability: {\n placeholder: `<strong>Choisissez une date sur le calendrier pour voir et mettre à jour la disponibilité.</strong>\n <p>Sélectionnez <em>Plusieurs</em> pour définir et copier les mêmes heures sur plusieurs dates.</p>`,\n empty_slot: \"Vous n'avez pas encore ajouté de disponibilité\",\n save_for: 'Sauvegarder pour ',\n number_dates: '%{number} dates',\n available: 'Je %{input} disponible',\n thing_will: 'sera',\n thing_will_not: 'ne sera pas',\n person_will: 'serai',\n person_will_not: 'ne serai pas',\n to: 'à',\n search_by_association: \"Recherche par nom d'association\",\n enter_name_search: 'Entrez un nom pour lancer la recherche',\n },\n },\n errors: {\n no_sma_user_found: 'Aucun utilisateur Spordle My Account trouvé',\n failed_sma_creation: 'Impossible de créer un utilisateur Spordle My Account',\n failed_to_get_user: \"Impossible de récupérer l'utilisateur Spordle My Account\",\n failed_sma_retrieval: \"Impossible de récupérer l'entité Spordle My Account\",\n email_exists: 'Ce courriel est déjà enregistré dans Play',\n already_linked: 'Un compte Play est déjà lié à ce participant',\n sma_exists: 'Cet utilisateur Spordle My Account est déjà lié',\n },\n alerts: {\n search_by_name_hockeyid: 'Entrez un nom ou un numéro de membre ci-dessus pour lancer la recherche...',\n availability: {\n loading_associations: 'Chargement des associations...',\n selection: {\n title: 'Disponible dans tous les lieux',\n own_profile: {\n available_to_all_arenas: \"Recherchez ci-dessus si vous souhaitez éventuellement limiter les lieux auxquelles vous êtes disponible.\",\n },\n other_profile: {\n available_to_all_arenas: \"Recherchez ci-dessus si vous souhaitez éventuellement limiter les lieux auxquelles l'officiel est disponible.\",\n },\n },\n no_associations: {\n title: 'Aucune association sélectionnée',\n own_profile: {\n search_make_yourself_available: \"Faites une recherche ci-dessus pour vous mettre disponible pour une association.\",\n not_available_to_assigners: \"Vous ne serez pas disponible pour les assignateurs ou ne pourrez voir aucun match tant que vous n'aurez pas sélectionné une association.\",\n },\n other_profile: {\n search_make_yourself_available: \"Faites une recherche ci-dessus pour mettre l'officiel disponible pour une association.\",\n not_available_to_assigners: \"L'officiel ne sera pas disponible pour les assignateurs et ne pourra voir aucun match tant qu'une association n'aura pas été sélectionnée.\",\n }\n }\n },\n limited_assigner_title: 'Sélection limitée des assignateurs',\n limited_assigner_message: 'Vous avez des qualifications dans plusieurs organisations de branche, mais certaines ont désactivé la possibilité de sélectionner vos assignateurs. Vous ne pouvez sélectionner des assignateurs que dans les organisations où ce paramètre est activé.',\n no_assigner_selection_title: 'Sélection des assignateurs désactivée',\n no_assigner_selection_message: 'Toutes les organisations de branche ont désactivé la possibilité de sélectionner vos assignateurs. Vous ne pouvez sélectionner aucun assignateur pour le moment.',\n },\n helpers: {\n note: \"Optionnel - sera inclus dans l'invitation\",\n availability: {\n note: \"Cette note sera visible dans le panneau d'assignation des matchs pendant cette période.\",\n },\n alternateName: \"INTERNE SEULEMENT - Ce champ modifie le nom public du participant\",\n },\n notifications: {\n invitation_sent: 'Invitation envoyée!',\n sso_created_and_linked: 'Compte Play créé et lié à Spordle My Account avec succès',\n sma_created_and_linked: 'Les comptes Spordle My Account et Play ont été créés et liés avec succès'\n }\n },\n participantMemberTypes: {\n name: \"Frais d'affiliation\",\n fields: {\n seasonId: 'Saison',\n memberTypeId: 'Type',\n officeId: 'Organisation',\n isActive: 'Actif',\n },\n labels: {\n card: {\n title: \"Frais d'affiliation\",\n subtitle: 'Types de membres Spordle ID'\n },\n affiliated: \"Frais d'affiliation\",\n }\n },\n qualifications: {\n name: 'Qualification |||| Qualifications',\n fields: {\n participantId: 'Participant',\n level: 'Niveau',\n grade: 'Grade',\n grades: {\n Referee: \"Grade d'arbitre\",\n Linesperson: 'Grade de juge de ligne',\n },\n qualificationCategory: {\n types: 'Qualification'\n },\n officeId: 'Organisation',\n seasonId: 'Saison',\n expiry: \"Date d'expiration\",\n age: 'Âge',\n qualificationCategoryId: 'Catégorie',\n },\n actions: {\n add: 'Ajouter une qualification',\n },\n labels: {\n card: {\n title: 'Qualifications',\n },\n edit: 'Mettre à jour la qualification',\n grades_file: 'Fichier des grades',\n qualifications_file: 'Fichier de qualifications',\n import_grades: 'Importer des grades',\n import_qualifications: 'Importer des qualifications',\n official_level: 'Niveau officiel',\n qualification_category: 'Catégorie de la qualification',\n },\n messages: {\n drop_qualifications_csv: 'Déposez votre fichier de qualifications (.csv) ici',\n drop_grades_csv: 'Déposez votre fichier de grade (.csv) ici',\n import_tool_qualifications: \"Pour utiliser cet outil d'importation, téléchargez un fichier CSV avec des colonnes pour le numéro de membre unique de l'officiel, le prénom, le nom de famille, le niveau officiel, grade d'arbitre (optionnel), grade de juge de ligne (optionnel) et l'expiration.\",\n import_tool_grades: \"Pour utiliser cet outil d'importation, téléchargez un fichier CSV avec des colonnes pour le numéro de membre unique de l'officiel, le grade de l'arbitre et le grade du juge de ligne.\",\n },\n alerts: {\n create_new_participants: \"<strong>Utiliser avec précaution.</strong> Cet outil d'importation créera de nouveaux participants qui ne correspondent pas aux numéros de membre existants.\",\n },\n helpers: {\n select_columns: \"Il vous sera demandé de sélectionner des colonnes après avoir sélectionné votre fichier\",\n valid_grades: '%{number}/%{total} lignes ont des grades valides',\n valid_qualifications: '%{number}/%{total} lignes ont des qualifications valides',\n participant_not_matched: \"Les participants seront ignorés si une qualification n'est pas trouvée sous cette organisation.\",\n match_existing_participant: 'Ce numéro de membre est utilisé pour correspondre à un participant existant ou créer un nouveau participant pour cette qualification.',\n },\n notifications: {\n grades_updated: \"%{smart_count} grade d'officiel a été mis à jour. |||| %{smart_count} grades d'officiel ont été mis à jour.\",\n qualifications_updated: \"%{smart_count} qualification d'officiel a été mis à jour. |||| %{smart_count} qualifications d'officiel ont été mis à jour.\",\n import_grades_error: \"Impossible d'importer les grades.\",\n import_qualifications_error: \"Impossible d'importer les qualifications.\",\n },\n validations: {\n invalid_grade: 'Certaines lignes ont des grades non valide',\n level: 'Doit être supérieur ou égal à 0.',\n invalid_date: \"Certaines valeurs n'incluent pas de date valide (YYYY-MM-DD)\",\n },\n values: {\n level: {\n zero: '0',\n level_zero: 'Niveau 0',\n },\n },\n },\n qualificationCategories: {\n values: {\n types: {\n Official: 'Officiel',\n Scorekeeper: 'Marqueur'\n }\n }\n },\n officialOffices: {\n filters: {\n officialName: \"Nom de l'officiel\",\n effectiveOfficials: \"Inclure les sous-organisations\"\n },\n fields: {\n types: 'Types',\n },\n labels: {\n add_officials: 'Ajouter des officiels qualifiés dans %{name}',\n },\n actions: {\n add_officials: 'Ajouter des officiels',\n },\n notifications: {\n officials_added: \"%{smart_count} officiel a été ajouté de l'organisation. |||| %{smart_count} officiels ont été ajoutés de l'organisation.\",\n add_officials_error: \"Impossible d'ajouter des officiels.\",\n }\n },\n officials: {\n name: 'Officiel |||| Officiels',\n fields: {\n participantId: 'Participant',\n payOfficeId: 'Organisation responsable de la paye',\n officeId: 'Organisation',\n seasonId: 'Saison',\n includeSubOffices: 'Inclure les sous-organisations',\n venueId: 'Lieu officiel',\n categoryId: 'Catégorie',\n participant: \"Officiel\",\n qualificationOrganization: 'Organisation de la qualification',\n },\n actions: {\n add: 'Ajouter un officiel',\n remove_all: 'Retirer tous'\n },\n labels: {\n card: {\n title: 'Officiels',\n subtitle: \"Officiels disponibles pour l'assignation des matchs.\"\n },\n edit: 'Mettre à jour un officiel',\n official_id: \"ID de l'officiel\",\n position: 'Position',\n team: 'Équipe',\n file: 'Fichier des officiels',\n import: 'Importer des officiels',\n selected_officials: 'Officiels sélectionnés (%{smart_count})',\n },\n messages: {\n drop_csv: \"Déposez votre fichier d'officiel (.csv) ici\",\n import_tool: \"Pour utiliser cet outil d'importation, téléchargez un fichier CSV avec des colonnes pour le numéro de membre unique de l'officiel.\",\n no_officials_selected: 'Aucun officiel sélectionné',\n },\n filters: {\n available: 'Officiels disponibles',\n eligible: 'Officiels éligibles',\n nonExpired: 'Officiels non expirés',\n registered: 'Officiels enregistrés',\n new: 'Nouveaux officiels',\n local: 'Officiels locaux',\n ignore_arena: \"Ignorer les disponibilités du lieu\",\n matchAllAttributes: \"Tous\",\n matchAny: \"Au moins un\",\n },\n helpers: {\n match_existing_participant: \"Les participants seront ignorés s'ils ne sont pas des officiels qualifiés.\",\n optional: 'Optionnel - Nom ou numéro de membre',\n },\n notifications: {\n added: \"%{smart_count} officiel a été ajouté. |||| %{smart_count} officiels ont été ajouté.\",\n unqualified: \"%{smart_count} ont échoué parce qu'ils n'étaient pas qualifiés.\",\n import_error: \"Impossible d'importer les officiels.\",\n },\n },\n scorekeepers: {\n name: 'Marqueur |||| Marqueurs',\n labels: {\n card: {\n title: 'Marqueurs',\n subtitle: \"Marqueurs disponibles pour l'assignation des matchs.\"\n }\n }\n },\n officialConflicts: {\n name: 'Conflit |||| Conflits',\n fields: {\n seasonId: 'Saison',\n participantId: 'Participant',\n targetId: 'Conflit',\n },\n actions: {\n add: 'Ajouter un conflit',\n },\n labels: {\n card: {\n title: 'Conflits',\n subtitle: \"Les matchs suivants sont programmés en même temps avec les mêmes équipes ou le même lieu. Si aucun match actif n'est répertorié, le statut de ce match peut être changé en Actif.\",\n },\n edit: \"Mise à jour d'un conflit\",\n add_team: 'Ajouter une équipe',\n }\n },\n offices: {\n name: 'Organisation |||| Organisations',\n fields: {\n officeId: 'Organisation',\n name: 'Nom',\n type: 'Type',\n HCRId: \"Numéro d'organisation\",\n parentId: 'Organisation parent',\n logo: 'Logo',\n timezone: 'Fuseau Horaire'\n },\n actions: {\n add: 'Ajouter une organisation',\n edit: \"Modifier l'organisation\",\n internal: 'Actions internes',\n syncOffices: 'Sync organisations',\n syncTeams: 'Sync équipes',\n syncOfficials: 'Sync qualifications',\n syncRegistrations: 'Sync inscriptions',\n },\n labels: {\n card: {\n title: 'Organisations',\n sub_offices_title: 'Sous-organisations',\n },\n tabs: {\n summary: 'Sommaire',\n teams: 'Équipes',\n surfaces: 'Surfaces',\n schedules: 'Horaires',\n people: 'Participants',\n assigning: 'Assignation',\n scheduler: 'Céduleur',\n rulebook: 'Livre des règlements',\n settings: 'Paramètres',\n },\n add: 'Nouvelle organisation',\n edit: \"Mettre à jour l'organisation\",\n members: \"Membres de l'organisation\",\n availability: {\n card: {\n title: 'Disponibilité',\n subtitle: \"Sélectionnez les dates et les heures disponibles, ou bloquez les heures non disponibles.\",\n },\n title: \"Disponibilités de l'organisation\",\n note: 'Note de disponibilité',\n updated: 'Disponibilité mise à jour!',\n },\n analyzeSchedules: 'Analyser les horaires'\n },\n messages: {\n availability: {\n available: 'Cette organisation %{input} disponible',\n }\n },\n helpers: {\n name: 'Les organisations ne doivent généralement pas contenir la division.',\n availability: {\n note: \"Cette note sera visible lorsqu'une partie est déjà prévue dans cette plage horaire.\",\n }\n },\n validations: {\n same_office: 'Le parent ne peut pas être la même organisation',\n },\n values: {\n type: {\n Branch: 'Département',\n Region: 'Région',\n District: 'District',\n Association: 'Association',\n Administrative: 'Administratif',\n Historical: 'Historique',\n League: 'Ligue',\n Tournament: 'Tournoi',\n Zone: 'Zone',\n Organization: 'Fédération',\n Cup: 'Coupe',\n },\n scheduleType: TYPES,\n }\n },\n officeMembers: {\n name: \"Membre de l'organisation |||| Membres de l'organisation\",\n fields: {\n officeId: 'Organisation',\n },\n actions: {\n add: 'Ajouter des organisations',\n },\n labels: {\n card: {\n title: \"Membres de l'organisation\",\n },\n edit: 'Mettre à jour le membre',\n }\n },\n branchOfficeSettings: {\n name: 'Paramètre du département |||| Paramètres du département',\n fields: {\n certifiedOfficialChanges: 'Autoriser le changement des officiels sur un match certifié',\n ff_suspensions: 'Suspensions',\n ff_suspension_disciplines: 'Suspension Disciplines',\n ff_incidents: 'Incidents',\n allowOfficialSetAssignOffices: 'Autoriser les changements officiels à affecter des organisations',\n },\n labels: {\n assignments: \"Assignation d'officiels\",\n tabs: {\n general: 'Général',\n featureFlags: 'Feature Flags',\n },\n card: {\n title: 'Paramètres du département'\n }\n },\n helpers: {\n certifiedOfficialChanges: 'Autorise les organisations sous cette branch à changer les officiels même si un match est certifié par la ligue',\n ff_suspensions: 'Active la gestion des suspensions dans les matchs',\n ff_suspension_disciplines: 'Permettre la gestion de mesures disciplinaires supplémentaires sur les suspensions (Comité de discipline)',\n ff_incidents: \"Active les rapports d'incident dans les matchs\",\n allowOfficialSetAssignOffices: 'Autoriser les officiels à changer leurs assignateurs.',\n },\n actions: {\n edit: 'Modifier les paramètres du département'\n }\n },\n officeSettings: {\n name: 'Paramètre |||| Paramètres',\n fields: {\n skaterStatsHiddenDivisionIds: 'Division à cacher pour les statistiques des joueurs',\n goalieStatsHiddenDivisionIds: 'Division à cacher pour les statistiques des gardiens',\n standingsHiddenDivisionIds: 'Division à cacher pour les classements',\n boxScoreHiddenDivisionIds: 'Division à cacher pour les statistiques détaillées des matchs',\n sportsmanshipPoints: \"Points d'esprit sportif\",\n contactsVisibility: 'Visibilité des contacts',\n adminReports: 'Rapports administratifs',\n teamReports: \"Rapports d'équipe\",\n syncAttributes: 'Attributs de synchronisation HCR',\n updateRosterFromLineups: \"Modifier le cahier d'équipe à partir de la feuille de match\",\n gameLength: 'Temps de réservation de la surface de jeu',\n surfaceOfficeId: \"L'organisation des surfaces\",\n conflictDrafts: \"Inclure les matchs en brouillon lors de l'application\",\n conflictLegacyDrafts: \"Inclure les matchs en brouillon ancien lors de l'application\",\n availabilityEnforcement: \"Disponibilités\",\n conflictEnforcement: 'Matchs',\n constraintEnforcement: 'Contraintes',\n language: 'Langage par défaut',\n homeTeamScorekeeping: \"Entrée des résultats par l'équipe à domicile\",\n awayTeamScorekeeping: \"Entrée des résultats par l'équipe visiteur\",\n scoringMode: 'Entrée des résultats',\n penaltyMode: 'Entrée des pénalités',\n requireCertification: 'Certification des matchs',\n requireIncidentReports: \"Rapports d'incident\",\n suspensionActivation: 'Activation des suspensions',\n includeRegistrations: 'Inclure les inscriptions',\n allowExtras: 'Autoriser les participants supplémentaires',\n homeChangeStatus: \"Planification des horaires par l'équipe à domicile\",\n maxScoreDiff: 'Différentiel du pointage maximum',\n points: {\n Team: {\n win: 'Victoire',\n loss: 'Défaite ',\n tie: 'Nulle',\n soWin: 'Victoire en fusillade',\n soLoss: 'Défaite en fusillade',\n otWin: 'Victoire en prolongation',\n otLoss: 'Défaite en prolongation',\n forfeitWin: 'Victoire par forfait',\n forfeitLoss: 'Défaite par forfait',\n forfeitTie: 'Double Forfait',\n sportsmanship: 'Esprit sportif',\n },\n Player: {\n goal: 'But',\n assist: 'Passe'\n },\n preview: `Victoire: %{win} Défaite: %{loss} Nulle: %{tie}`\n },\n enforcements: {\n preview: {\n conflictEnforcement: `Matchs: %{enforcementValue}`,\n availabilityEnforcement: `Disponibilités: %{enforcementValue} `,\n constraintEnforcement: `Contraintes: %{enforcementValue}`,\n }\n },\n deferDraftConflict: \"Reporter l'application des conflits dans les brouillons\",\n deferLegacyDraftConflict: \"Reporter l'application des conflits dans les brouillons anciens\",\n limitDateChange: 'Limiter le changement de date sur les matchs en brouillon partagés',\n rescheduleRequestsEnabled: \"Demandes de changements d'horaire\",\n requiredRescheduleApprovals: \"Approbateurs requis\",\n groupingType: \"Type de regroupement d'équipes\",\n },\n actions: {\n edit: 'Modifier les paramètres',\n },\n labels: {\n card: {\n title: \"Paramètres de l'organisation\",\n },\n tabs: {\n general: 'Général',\n scheduling: 'Horaires',\n team_stats: \"Statistiques d'équipe\",\n player_stats: 'Statistiques de joueur',\n scoresheet: 'Feuille de match',\n advanced: 'Avancé',\n },\n schedule_stats: 'Statistiques de calendrier',\n game_stats: 'Statistiques de match',\n stats_schema: {\n team: \"Schéma des statistiques d'équipe\",\n skater: 'Schéma des statistiques de joueur',\n goalie: 'Schéma des statistiques de gardiens de but',\n },\n standings_order: {\n team: 'Ordre du classement des équipes',\n skater: 'Ordre du classement des joueurs',\n goalie: 'Ordre du classement des gardiens de but',\n wins: 'Victoires',\n losses: 'Défaites',\n otl: 'Défaites en prolongation',\n ties: 'Nulles',\n diff: 'Différentiel de points',\n points: 'Points',\n pointsPct: 'Pourcentage de points',\n pointsPerGame: 'Points par match joué',\n gamesPlayed: 'Matchs joués',\n goalAgainst: 'Buts contre',\n goalAgainstPerGame: 'Buts contre par match joué',\n goalFor: 'Buts pour',\n goalForPerGame: 'Buts pour par match joué',\n shotFor: 'Tirs pour',\n shotAgainst: 'Tirs contre',\n sportsmanship: \"Points d'esprit sportif\",\n gaa: 'Moyenne de buts alloués par match',\n shutouts: 'Blanchissages',\n gamesStarted: 'Matchs amorcés',\n minutesPlayed: 'Minutes jouées',\n savePercentage: \"Pourcentage d'arrêts\",\n goals: 'Buts',\n assists: 'Aides',\n gameTyingGoals: 'But égalisateur',\n gameWinningGoals: 'Buts gagnants',\n powerplayGoals: 'Buts en avantage numérique',\n powerplayPoints: 'Points en avantage numérique',\n powerplayAssists: 'Aides en avantage numérique',\n shorthandedGoals: 'Buts en infériorité numérique',\n shorthandedPoints: 'Points en infériorité numérique',\n shorthandedAssists: 'Aides en infériorité numérique',\n pim: 'Minutes de pénalités',\n pimPerGame: 'Minutes de pénalités par match joué',\n penaltyOccurrences: 'Nombre de punition',\n throws: 'Lancés total',\n inningsPitched: 'Manches lancés',\n },\n standings_type: {\n 'All Games': 'Tous les matchs',\n 'Head-to-head': 'Tête à tête',\n },\n standings_subject: {\n team: 'Équipe',\n skater: 'Joueur',\n goalie: 'Gardien',\n },\n hidden_stats: {\n team: 'Statistiques cachées des équipes',\n skater: 'Statistiques cachées des joueurs',\n goalie: 'Statistiques cachées des gardiens de but',\n },\n reports: 'Rapports',\n contacts: 'Contacts',\n points: 'Points',\n standings: 'Classement',\n rosters: \"Cahier d'équipe\",\n scheduling: 'Horaires',\n conflict_enforcement: 'Application des conflits',\n public: 'Affichage publique',\n admin: 'Administrateur',\n integration: 'Intégration',\n game_length: 'Durée de match par défaut',\n teamScorekeeping: \"Entrée des résultats\",\n certification: 'Certification',\n suspensions: 'Suspensions',\n scorekeeping: 'Entrée des résultats',\n periods: 'Périodes par défaut',\n drafts: 'Brouillons',\n points_system: \"Système de points d'équipe\",\n admin_reports: 'Rapports administratifs',\n team_reports: \"Rapports d'équipe\",\n edit_office: \"Modifier les paramètres de l'organisation\",\n },\n messages: {\n load_error: \"Impossible de télécharger les paramètres de l'organisation\",\n },\n alerts: {\n new_schedules_only: \"Il s'agit des valeurs par défaut pour les nouveaux horaires créés. Les horaires existants ne seront pas affectés.\",\n advanced: \"Il s'agit de paramètres d'intégration avancés qui déterminent la manière dont la synchronisation est gérée.\",\n },\n helpers: {\n adminReports: 'Affecte tous les rôles administratifs sauf Admin',\n teamReports: \"Les officiels d'équipe ne verront que les rapports basés sur l'équipe\",\n sportsmanshipPoints: 'Points supplémentaires basés sur les pénalités',\n statsVisibility: 'Ce paramètre détermine quels horaires auront leurs statistiques masquées sur les pages publiques',\n standingsVisibility: 'Ce paramètre détermine quels horaires auront leurs classements masquées sur les pages publiques',\n boxScoreVisibility: 'Ce paramètre détermine quels horaires auront leurs statistiques détaillées masquées sur les pages publiques',\n hiddenStats: \"Masquer des colonnes de statistiques spécifiques sur les pages publiques\",\n updateRosterFromLineups: \"L'envoi de l'alignement mettra à jour les numéros de chandail dans le cahier d'équipe\",\n gameLength: \"Optionnel - Temps de réservation total (en minutes) sur la surface de jeu pour tous les matchs de cet horaire\",\n surfaceOfficeId: \"Optionnel - Les surfaces proviendront de cette organisation au lieu de l'organisation de l'équipe à domicile dans le planificateur de brouillon\",\n conflictDrafts: 'Les matchs en brouillon sont exclus lors de la recherche de matchs contre lesquels appliquer, sauf si ce paramètre est activé',\n conflictLegacyDrafts: 'Les matchs en brouillon ancien sont exclus lors de la recherche de matchs contre lesquels appliquer, sauf si ce paramètre est activé',\n homeTeamScorekeeping: \"Le personnel d'équipe à domicile pourront modifier la feuille de match jusqu'à l'homologation\",\n awayTeamScorekeeping: \"Le personnel d'équipe visiteur pourront modifier la feuille de match jusqu'à l'homologation\",\n scoringMode: 'Comment les buts sont entrés pour un match',\n penaltyMode: 'Comment les pénalités sont entrées pour un match',\n certification: \"Les matchs devront être homologués par la ligue après l'entrée des résultats par les responsables de match\",\n incidentReports: \"Les matchs nécessiteront des rapports d'incident pour toutes les pénalités majeures avant d'être terminés\",\n suspensionActivation: \"Quand est-ce qu'une suspension doit devenir automatiquement active?\",\n includeRegistrations: \"Les participants inscrits en fonction de l'association, de la division et de la saison de l'équipe seront inclus comme options d'alignement.\",\n allowExtras: \"Les marqueurs et les officiels d'équipe seront autorisés à ajouter des joueurs qui ne sont pas inscrits à leur alignement d'équipe. Ce paramètre n'affecte pas les administrateurs/gestionnaires de la ligue.\",\n homeChangeStatus: \"Autorise l'organisation de l'équipe locale à reprogrammé les matchs\",\n language: 'Langue du contact par défaut pour les notifications',\n deferDraftConflict: \"Les conflits ne seront appliqués dans les brouillons qu'une fois publiés\",\n deferLegacyDraftConflict: \"Les conflits ne seront appliqués dans les brouillons anciens qu'une fois publiés\",\n limitDateChange: 'Les associations ne pourront pas changer la date sur les matchs en brouillon partagés',\n rescheduleRequestsEnabled: \"Permet aux équipes de demander des changements d'horaire\",\n requiredRescheduleApprovals: \"Intervenants requis pour approuver les demandes de changement d'horaire\",\n required_approvals: {\n 'Team Staff': \"Nécessite l'approbation des deux équipes\",\n 'Team Organization': \"Nécessite l'approbation des deux organisations d'équipe\",\n 'Schedule Organization': \"Nécessite l'approbation de l'organisation de l'horaire\",\n },\n groupingType: 'Le type de regroupement utilisé pour les équipes dans les horaires nouvellement créés'\n },\n tooltips: {\n groupingType: `\n <div>\n <ul>\n <li>\n <strong>Pools:</strong> Regroupent les équipes au sein d'une compétition ou d'un horaire pour la planification du calendrier et l'affichage des classements.\n </li>\n <br/>\n <li>\n <strong>Groupes:</strong> Également connus sous les noms de « Tiers » ou « Flights », ils permettent de diviser les horaires en plusieurs sous-horaires. Ils sont utilisés par certaines organisations pour regrouper les équipes par niveau de compétence et éviter d'avoir des centaines d'horaires.\n </li>\n </ul>\n </div>\n `,\n groupingTypeHint: \"Si vous n'êtes pas un utilisateur expérimenté avec les groupes ou si vous ne savez pas quel choix utiliser, la meilleure option est « Pools ».\"\n },\n values: {\n sportsmanship_points: {\n none: 'Aucun',\n PCAHA: 'Règlement PCAHA',\n VIAHA: 'Règlement VIAHA',\n },\n sync_attributes: {\n position: 'Position seulement',\n all: 'Position et numéros de chandail',\n },\n contacts: {\n profiles: 'Profils seulement',\n schedules: 'Horaires et profils',\n teams: 'Équipes, horaires et profils',\n },\n reports: {\n penalty: 'Pénalité',\n scoring: 'Pointage',\n ap: 'Joueur affilié',\n },\n stats: {\n name: 'Statistiques',\n skater: 'Statistiques des joueurs',\n goalie: 'Statistiques des gardiens',\n },\n enforcement: {\n none: 'Ne rien faire',\n conflict: 'Enregistrer en tant que conflit',\n validation: 'Afficher une erreur de validation',\n },\n suspension_activation: {\n manual: 'Manuel',\n approval: 'Après match approuvé',\n certification: 'Après match certifié',\n },\n scoring_mode: {\n detailed: 'Détaillé',\n score: 'Pointage seulement',\n },\n penalty_mode: {\n detailed: 'Détaillé',\n },\n required_approvals: {\n 'Team Staff': \"Personnel d'équipe\",\n 'Team Organization': \"Organisation d'équipe\",\n 'Schedule Organization': \"Organisation de l'horaire\",\n },\n groupingType: {\n Pools: 'Pools',\n Groups: 'Groupes',\n }\n }\n },\n leagues: {\n name: 'Ligue |||| Ligues',\n fields: {\n officeId: 'Ligue',\n name: 'Nom',\n type: 'Type',\n HCRId: 'Numéro de ligue',\n parentId: 'Organisation',\n logo: 'Logo',\n },\n actions: {\n add: 'Ajouter une ligue',\n edit: 'Modifier la ligue',\n },\n labels: {\n card: {\n title: 'Ligues',\n },\n tabs: {\n summary: 'Sommaire',\n teams: 'Équipes',\n surfaces: 'Surfaces',\n settings: 'Paramètres',\n },\n add: 'Nouvelle ligue',\n edit: 'Mettre à jour la ligue',\n editing: 'Modification de la ligue %{name}',\n availability: {\n card: {\n title: 'Disponibilité',\n subtitle: \"Sélectionnez les dates et les heures disponibles, ou bloquez les heures non disponibles.\",\n },\n title: \"Disponibilités de la ligue\",\n note: 'Note de disponibilité',\n updated: 'Disponibilité mise à jour!',\n }\n },\n messages: {\n availability: {\n available: 'Cette ligue %{input} disponible',\n }\n },\n helpers: {\n name: 'Les ligues ne doivent généralement pas contenir la division.',\n availability: {\n note: \"Cette note sera visible lorsqu'une partie est déjà prévue dans cette plage horaire.\",\n }\n },\n },\n tournaments: {\n name: 'Tournoi |||| Tournois',\n fields: {\n officeId: 'Tournoi',\n name: 'Nom',\n type: 'Type',\n HCRId: 'Numéro de tournoi',\n parentId: 'Organisation',\n logo: 'Logo',\n },\n actions: {\n add: 'Ajouter un tournoi',\n edit: 'Modifier le tournoi',\n },\n labels: {\n card: {\n title: 'Tournois',\n },\n tabs: {\n summary: 'Sommaire',\n teams: 'Équipes',\n surfaces: 'Surfaces',\n settings: 'Paramètres',\n },\n add: 'Nouveau tournoi',\n edit: 'Mettre à jour le tournoi',\n editing: 'Modification du tournoi %{name}',\n availability: {\n card: {\n title: 'Disponibilité',\n subtitle: \"Sélectionnez les dates et les heures disponibles, ou bloquez les heures non disponibles.\",\n },\n title: \"Disponibilités du tournoi\",\n note: 'Note de disponibilité',\n updated: 'Disponibilité mise à jour!',\n }\n },\n messages: {\n availability: {\n available: 'Ce tournoi %{input} disponible',\n }\n },\n helpers: {\n name: 'Les tournois ne doivent généralement pas contenir la division.',\n availability: {\n note: \"Cette note sera visible lorsqu'une partie est déjà prévue dans cette plage horaire.\",\n }\n },\n },\n cups: {\n name: 'Coupe |||| Coupes',\n fields: {\n officeId: 'Coupe',\n name: 'Nom',\n type: 'Type',\n HCRId: 'Numéro de coupe',\n parentId: 'Organisation',\n logo: 'Logo',\n },\n actions: {\n add: 'Ajouter une coupe',\n edit: 'Modifier la coupe',\n },\n labels: {\n card: {\n title: 'Coupes',\n },\n tabs: {\n summary: 'Sommaire',\n teams: 'Équipes',\n surfaces: 'Surfaces',\n settings: 'Paramètres',\n },\n add: 'Nouveau coupe',\n edit: 'Mettre à jour la coupe',\n editing: 'Modification de la coupe %{name}',\n availability: {\n card: {\n title: 'Disponibilité',\n subtitle: \"Sélectionnez les dates et les heures disponibles, ou bloquez les heures non disponibles.\",\n },\n title: \"Disponibilités de la coupe\",\n note: 'Note de disponibilité',\n updated: 'Disponibilité mise à jour!',\n }\n },\n messages: {\n availability: {\n available: 'Cette coupe %{input} disponible',\n }\n },\n helpers: {\n name: 'Les coupes ne doivent généralement pas contenir la division.',\n availability: {\n note: \"Cette note sera visible lorsqu'une partie est déjà prévue dans cette plage horaire.\",\n }\n },\n },\n members: {\n name: 'Membre |||| Membres',\n fields: {\n participantId: 'Participant',\n teamId: 'Équipe',\n positions: 'Positions',\n number: 'Numéro',\n batter: 'Frappeur',\n extra: 'Extra',\n isCaptain: 'Capitaine',\n isAlternate: 'Capitaine adjoint',\n isAffiliate: 'Affilié',\n isOverage: 'Sous-classé',\n isUnderage: 'Surclassé',\n isReleased: 'Libéré',\n isStarter: 'Partant',\n status: 'Statut',\n abbreviations: {\n isCaptain: 'C',\n isAlternate: 'A',\n isAffiliate: 'JA',\n isOverage: 'SuC',\n isUnderage: 'SoC',\n isReleased: 'L',\n isStarter: 'P',\n }\n },\n actions: {\n add: 'Ajouter un membre',\n add_members: 'Ajouter des membres',\n remove_all: 'Retirer tous'\n },\n labels: {\n edit: 'Mettre à jour le membre',\n starter_goalie: 'Gardien de but partant',\n suspension: 'Suspension',\n suspension_abbreviation: 'SUS',\n suspended: 'Suspendu',\n position: 'Position',\n jersey: 'Chandail',\n battingOrder: 'Ordre de frappe',\n current_game: 'Match en cours',\n total_games: 'Matchs total',\n player: 'Joueur',\n staff: 'Personnel',\n add_members: 'Ajouter des membres à %{name}',\n selected_members: 'Membres sélectionnés (%{smart_count})',\n },\n messages: {\n has_been_added: '%{name} a été ajouté',\n no_members_selected: 'Aucun membre sélectionné',\n },\n helpers: {\n isCaptain: \"Capitaine d'équipe\",\n isAlternate: \"Capitaine adjoint de l'équipe\",\n name_or_id: 'Nom ou numéro de membre',\n },\n validations: {\n must_have_number: 'Les joueurs doivent avoir un numéro',\n },\n values: {\n positions: {\n F: 'A',\n C: 'C',\n D: 'D',\n G: 'G',\n Manager: 'Gérant',\n 'Head Coach': \"Entraîneur-chef\",\n 'Assistant Coach': \"Entraîneur-adjoint\",\n 'Goaltending Coach': 'Entraîneur des gardiens',\n 'Safety Person': 'Soigneur',\n Trainer: \"Préposé à l'équipement\",\n }\n },\n notifications: {\n members_added: \"%{smart_count} membre a été ajouté à l'équipe. |||| %{smart_count} membres ont été ajoutés à l'équipe.\",\n add_members_error: \"Impossible d'ajouter des membres.\",\n }\n },\n schedules: {\n name: 'Horaire |||| Horaires',\n fields: {\n name: 'Nom',\n seasonId: 'Saison',\n startDate: 'Date de début',\n endDate: 'Date de fin',\n teamIds: 'Équipes',\n officeId: 'Organisation',\n categoryId: 'Catégorie',\n type: 'Type',\n isPublic: 'Public',\n scheduleType: \"Type d'horaire\",\n pastEvents: 'Ancien horaire',\n gameFormat: 'Format',\n comments: 'Commentaires',\n brackets: {\n totalTeams: \"Nombre d'équipes\",\n format: 'Format',\n orientation: 'Orientation',\n bracketId: 'Bracket',\n groupId: 'Groupe',\n },\n },\n filters: {\n pastEvents: 'Afficher les horaires passés',\n },\n actions: {\n add: 'Ajouter un horaire',\n edit: \"Modifier l'horaire\",\n show: \"Afficher l'horaire\",\n internal: 'Actions internes',\n recalculateStats: 'Recalculer les statistiques',\n },\n labels: {\n card: {\n title: 'Horaires',\n },\n tabs: {\n summary: 'Sommaire',\n teams: 'Équipes',\n games: 'Matchs',\n bracket: 'Bracket',\n scheduler: 'Céduleur',\n stats: 'Statistiques',\n standings: 'Classements',\n contacts: 'Contacts',\n settings: 'Paramètres',\n },\n steps: {\n schedule_info: \"Informations de l'horaire\",\n team_select: 'Sélectionnez des équipes',\n add_sequences: 'Ajouter des séquences de numéros de match',\n schedule_settings: \"Paramètres de l'horaire\"\n },\n matrix: {\n show_organisation: 'Afficher les organisations',\n show_full_names: 'Afficher les noms complets',\n compact_mode: 'Affichage réduit',\n },\n brackets_viewer: {\n open_in_viewer: \"Ouvrir l'aperçu | Télécharger\",\n open_new_window: 'Ouvrir dans une nouvelle fenêtre',\n download: 'Télécharger',\n close: 'Fermer',\n zoom_in: 'Zoom avant',\n zoom_out: 'Zoom arrière',\n no_preview: {\n text: 'Aucun aperçu disponible',\n no_data: 'Aucune donnée',\n }\n },\n add: 'Nouveau horaire',\n generate: 'Générer un horaire',\n generate_legacy: 'Générer un horaire (ancien)',\n upload: 'Importer un horaire',\n upload_legacy: 'Importer un horaire (ancien)',\n draft: \"Ébaucher un horaire\",\n draft_legacy: \"Ébaucher un horaire (ancien)\",\n league_contacts: 'Coordonnées de la ligue',\n dates: 'Dates',\n competitive: 'Compétitif',\n recreational: 'Récréatif',\n accredited_school: 'École accréditée',\n add_to_group: 'Ajouter au groupe',\n add_to_pool: 'Ajouter au pool',\n bracket_schedule: 'Générer une bracket',\n bracket_reseed: 'Remplir une bracket',\n bracket_reseed_info: \"Ajouter ou modifier les équipes sur les matchs avec des positions attribuées en fonction de leur ordre dans le groupe\",\n group_bracket_reseed: \"Groupe contenant la bracket à remplir\",\n reseed_bracket: \"Remplissage d'une bracket\",\n bracket_info: \"Créer des matchs a l'aide d'une bracket\",\n create_bracket: \"Génération d'une bracket\",\n brackets_info: 'Au fur et à mesure que les matchs sont terminés, les équipes passeront automatiquement aux matchs suivants en fonction des résultats.',\n brackets_na: 'Aucun modèle de bracket correspondant',\n preview: 'Aperçu',\n analysis: 'Analyse',\n matchups: 'Affrontements',\n current_matchups: 'Affrontements actuels',\n new_matchups: 'Affrontements des brouillons',\n office_matchups: 'Affrontements par organisation',\n include_drafts: 'Inclure les brouillons',\n byes: 'Byes',\n team: 'Équipe',\n group: 'Groupe',\n pool: 'Pool',\n opponents: 'Adversaires',\n conflicts: 'Conflits',\n home: 'Local',\n away: 'Visiteur',\n total: 'Total',\n week: 'Semaine',\n scheduled_events: \"Horaire complet\",\n not_public: 'Non public'\n },\n messages: {\n no_byes: 'Pas de byes',\n no_matchups: \"Pas d'affrontements\",\n too_many_matchups: `Trop de d'affrontements à afficher`,\n unable_to_load: \"Impossible de charger l'analyse\",\n additional_games: '+ %{smart_count} autres'\n },\n notifications: {\n created: \"L'horaire a été créé\",\n updated: \"L'horaire a été mis à jour\",\n recalculating: 'Recalculer...',\n bracket_games_created: 'Matchs de bracket créés',\n bracket_games_reseeded: 'Les matchs de bracket ont été remplis',\n before_schedule_date: \"Impossible de programmer un match avant la date de début de l'horaire (%{startDate})\",\n after_schedule_date: \"Impossible de programmer un match avant la date de fin de l'horaire (%{endDate})\"\n },\n alerts: {\n missing_sequence: \"La séquence de numéros de match n'a pas été définie pour cet horaire\",\n },\n tooltips: {\n hidden_to_public: \"Cet horaire n'est pas visible par le public\",\n },\n helpers: {\n cohorts: 'Les cohortes peuvent être créées en tant que groupes sous les paramètres de la ligue pour que tout reste dans le même horaire.',\n gameFormat: 'Optionnel',\n isPublic: \"En activant cette option, l'horaire sera visible sur Spordle PAGE\",\n },\n validations: {\n end_after_start: 'La date de fin doit être après la date de début',\n },\n errors: {\n brackets: {\n existing_brackets: 'Ce groupe a déjà des brackets',\n missing_seeded_games: 'Aucun match avec des positions attribuées trouvé',\n missing_schedule_teams: 'Aucune équipe trouvé dans ce groupe pour le remplissage',\n missing_sequence: 'Aucune séquence trouvée pour la numérotation des matchs',\n },\n },\n values: {\n type: TYPES,\n orientations: {\n Portrait: 'Portrait',\n Landscape: 'Paysage',\n },\n gameFormat: {\n '3x3': '3x3',\n '4x4': '4x4',\n '5x5': '5x5',\n '6x6': '6x6',\n '7x7': '7x7',\n '9x9': '9x9',\n '11x11': '11x11',\n }\n },\n },\n scheduleSettings: {\n name: 'Paramètre |||| Paramètres',\n fields: {\n gameLength: 'Temps de réservation de la surface de jeu',\n surfaceOfficeId: \"L'organisation des surfaces\",\n surfaceSizes: 'Taille des surfaces',\n includeRegistrations: 'Inclure les inscriptions',\n allowExtras: 'Autoriser les participants supplémentaires',\n sportsmanshipPoints: \"Points d'esprit sportif\",\n disableSportsmanshipCarry: \"Limiter les points d'esprit sportif au même groupe\",\n maxScoreDiff: 'Différentiel Maximum',\n scoringMode: \"Mode d'entrée des buts\",\n penaltyMode: \"Mode d'entrée des pénalités\",\n points: {\n Team: {\n win: 'Victoire',\n loss: 'Défaite ',\n tie: 'Nulle',\n soWin: 'Victoire en fusillade',\n soLoss: 'Défaite en fusillade',\n otWin: 'Victoire en prolongation',\n otLoss: 'Défaite en prolongation',\n forfeitWin: 'Victoire par forfait',\n forfeitLoss: 'Défaite par forfait',\n forfeitTie: 'Double Forfait',\n sportsmanship: 'Esprit sportif',\n },\n Player: {\n goal: 'But',\n assist: 'Passe'\n },\n preview: `Victoire: %{win} Défaite: %{loss} Nulle: %{tie}`\n },\n groupingType: \"Type de regroupement d'équipes\",\n },\n actions: {\n edit: 'Modifier les paramètres',\n },\n labels: {\n tabs: {\n scheduling: 'Horaires',\n scoresheet: 'Feuille de match',\n team_stats: \"Statistiques d'équipe\",\n player_stats: 'Statistiques de joueur',\n advanced: 'Avancé',\n },\n schedule_stats: 'Statistiques de calendrier',\n game_stats: 'Statistiques de match',\n stats_schema: {\n team: \"Schéma des statistiques d'équipe\",\n skater: 'Schéma des statistiques de joueur',\n goalie: 'Schéma des statistiques de gardiens de but',\n },\n standings_order: {\n team: 'Ordre du classement des équipes',\n skater: 'Ordre du classement des joueurs',\n goalie: 'Ordre du classement des gardiens de but',\n },\n points_system_ranking: {\n property: 'Attribut',\n order: 'Ordre',\n type: 'Type',\n },\n hidden_stats: {\n team: 'Statistiques cachées des équipes',\n skater: 'Statistiques cachées des joueurs',\n goalie: 'Statistiques cachées des gardiens de but',\n },\n points: 'Points',\n edit_schedule: \"Modifier les paramètres d'horaire\",\n game_length: 'Durée de match par défaut',\n include_registrations: 'Inscriptions',\n allow_extras: 'Autoriser les participants supplémentaires',\n points_system: \"Système de points d'équipe\",\n standings: 'Classement',\n scheduling: 'Horaires',\n lineups: 'Alignements',\n public: 'Affichage publique',\n scorekeeping: 'Entrée des résultats'\n },\n messages: {\n load_error: \"Impossible de télécharger les paramètres d'horaire\",\n included: 'Inclus',\n allow_extras_default: \"Administrateurs de ligue et officiels d'équipe\",\n standard_description: 'V = 2, D = 1, DP = 1',\n '3-2-1_description': 'Point supplémentaire attribué pour les victoires pendant le temps réglementaire ou forfait',\n high_low: 'De haut en bas',\n low_high: 'De bas en haut',\n },\n alerts: {\n advanced: \"Il s'agit de paramètres d'intégration avancés qui déterminent la manière dont la synchronisation est gérée.\",\n new_scoresheets_only: \"Il s'agit des valeurs par défaut pour les nouvelles feuilles de match créés. Les feuilles de match existants ne seront pas affectées.\",\n },\n validations: {\n game_length: 'Doit être supérieur à 0',\n scoring_mode_change: \"Impossible de changer le mode d'entrée des buts tant qu'il y a des matchs approuvées\",\n penalty_mode_change: \"Impossible de changer le mode d'entrée des pénalités tant qu'il y a des matchs approuvées\"\n },\n helpers: {\n gameLength: \"Optionnel - Durée du début à la fin de l'heure planifiée en minutes\",\n surfaceOfficeId: \"Optionnel - Les surfaces proviendront de cette organisation au lieu de l'organisation de l'équipe à domicile dans le planificateur de brouillon\",\n surfaceSizes: \"Optionnel - Détermine l'ensemble par défaut de tailles filtrées lors de la planification d'horaire\",\n includeRegistrations: \"Les participants inscrits en fonction de l'association, de la division et de la saison de l'équipe seront inclus comme options d'alignement.\",\n allowExtras: \"Les marqueurs et les officiels d'équipe seront autorisés à ajouter des joueurs qui ne sont pas inscrits à leur alignement d'équipe. Ce paramètre n'affecte pas les administrateurs/gestionnaires de la ligue.\",\n sportsmanshipPoints: 'Points supplémentaires basés sur les infractions aux pénalités',\n disableSportsmanshipCarry: \"Lorsqu'une équipe est déplacée d'un groupe à un autre, selon le cas, des points d'esprit sportif seront accumulés pour tous les groupes, sauf si ce paramètre est activé.\",\n schema: 'Schéma requis',\n statsVisibility: 'Ce paramètre détermine quels horaires auront leurs statistiques masquées sur les pages publiques',\n scoringMode: 'Comment les buts sont entrés pour un match',\n penaltyMode: 'Comment les penalités sont entrés pour un match',\n groupingType: 'Le type de regroupement utilisé pour les équipes dans les horaires nouvellement créés'\n },\n values: {\n includeRegistrations: 'Participants inscrits et participants supplémentaires',\n allowExtras: 'Administrateurs de ligue uniquement',\n disableSportsmanshipCarry: \"Les points d'esprit sportif sont limités au même groupe\",\n ranking_type: {\n 'All Games': 'Tous les matchs',\n 'Head-to-head': 'Tête à tête'\n },\n ranking_order: {\n DESC: 'Descendant',\n ASC: 'Ascendant',\n },\n }\n },\n schedulingConstraints: {\n fields: {\n resource: 'Ressource',\n periodType: 'Type de période',\n limit: 'Limite',\n categoryIds: \"Catégories\",\n scheduleTypes: \"Type d'horaire\",\n period: {\n days: 'Jours',\n weekdays: 'Jours de la semaine',\n dateRange: 'Plage de dates',\n startDate: 'Date de début',\n endDate: 'Date de fin'\n }\n },\n values: {\n scheduleTypes: TYPES,\n Team: 'Équipe',\n Schedule: 'Horaire',\n Arena: 'Lieu'\n },\n actions: {\n add_constraint: 'Ajouter une contrainte',\n edit_constraint: 'Modifier la contrainte'\n },\n labels: {\n card: {\n title: 'Contraintes',\n subtitle: 'Définissez les contraintes pour limiter le nombre de matchs joués. Cela marquera les matchs comme des conflits si les contraintes ne sont pas suivies.'\n },\n restrictions: 'Restrictions',\n period: 'Période'\n },\n helpers: {\n schedules: 'Optionnel - Si vide, tous les horaires',\n limit: `Dépasse %{smart_count} limite de match |||| Dépasse la limite de %{smart_count} matchs`,\n period: `le même jour |||| dans un délai de %{smart_count} jours.`\n\n },\n messages: {\n summary: `Les %{resource}s de cette organisation ne peuvent pas %{verb} plus de %{smart_count} match |||| Les %{resource}s de cette organisation ne peuvent pas %{verb} plus de %{smart_count} matchs`,\n days: `le même jour. |||| dans un délai de %{smart_count} jours.`,\n host: 'héberger',\n play: 'jouer',\n have: 'avoir',\n between: ' entre %{start} - %{end}.',\n on: ' au %{weekdays}.'\n },\n validations: {\n end_after_start: 'La date de fin doit être après la date de début',\n },\n },\n teams: {\n name: 'Équipe |||| Équipes',\n fields: {\n teamId: 'Équipe',\n name: 'Nom',\n shortName: 'Nom court',\n HCRId: \"Numéro d'équipe\",\n seasonId: 'Saison',\n categoryId: 'Catégorie',\n officeId: 'Organisation',\n logo: 'Logo',\n arenaId: 'Surface',\n isPublic: 'Public',\n isSanctioned: 'Équipe officielle',\n },\n actions: {\n add: 'Ajouter une équipe',\n edit: \"Modifier l'équipe\",\n internal: 'Actions internes',\n sync: 'Sync',\n },\n labels: {\n card: {\n title: 'Équipes',\n unsanctioned_title: 'Équipes Temporaire',\n },\n calendar: {\n teamNames: \"Noms d'équipe\"\n },\n tabs: {\n summary: 'Sommaire',\n roster: \"Cahier d'équipe\",\n schedule: 'Horaire',\n settings: 'Paramètres',\n },\n edit: \"Mettre à jour l'équipe\",\n add: 'Nouvelle équipe',\n contacts: \"Coordonnées de l'équipe\",\n team_roster: \"Cahier d'équipe\",\n import_roster: \"Importer un cahier d'équipe\",\n import_profiles: \"Importer des profils\",\n roster_file: \"Fichier de cahier d'équipe\",\n profile_file: 'Fichier de profil',\n availability: {\n card: {\n title: 'Disponibilité',\n subtitle: \"Sélectionnez les dates et les heures disponibles, ou bloquez les heures non disponibles.\",\n },\n title: \"Disponibilités de l'équipe\",\n note: 'Note de disponibilité',\n updated: 'Disponibilité mise à jour!',\n },\n unsanctioned: 'Équipe temporaire',\n },\n messages: {\n home_team_hcr_id: \"Numéro de l'équipe local\",\n valid_members: '%{number}/%{total} lignes ont des membres valides',\n drop_roster_file: \"Déposez votre fichier de cahier d'équipe (.csv) ici\",\n drop_profile_file: 'Déposez votre fichier de profil (.csv) ici',\n import_tool_roster: \"Pour utiliser cet outil d'importation, téléchargez un fichier CSV avec des colonnes pour le numéro de membre du participant, son prénom, son nom, sa position et son numéro de chandail.\",\n import_tool_profile: \"Pour utiliser cet outil d'importation, téléchargez un fichier CSV avec des colonnes pour le numéro de membre unique du participant, la date de naissance, la hauteur (ft), le poids (lbs), la ville natale et la dextérité.\",\n import_tool_warning: \"Cet outil d'importation créera de nouveaux participants qui ne correspondent pas aux numéros de membre existants.\",\n availability: {\n available: 'Cette équipe %{input} disponible',\n },\n no_teams: 'Aucune équipe sélectionnée'\n },\n helpers: {\n select_columns: \"On vous demandera de sélectionner des colonnes après avoir sélectionné votre fichier\",\n valid_profiles: '%{number}/%{total} les lignes ont des profils valides',\n participant_not_matched: \"Les participants seront ignorés s'ils ne sont pas ajoutés à cette équipe.\",\n match_existing_participant: 'Ce numéro de membre est utilisé pour correspondre à un participant existant ou créer un nouveau participant pour cette liste.',\n availability: {\n note: \"Cette note sera visible lorsqu'une partie est déjà prévue dans cette plage horaire.\",\n },\n isPublic: \"INTERNE SEULEMENT - Ce paramètre permet de rendre cette équipe visible sur Spordle PAGE\"\n },\n alerts: {\n caution: 'Utiliser avec précaution',\n creating_unsanctioned: \"Vous êtes en train de créer une équipe temporaire. Ces équipes sont souvent utilisées pour les groupes d'entraînement et les matchs d'évaluation.\"\n },\n notifications: {\n import_roster_success: \"Cahier d'équipe importé avec succès. Actualisez pour voir les modifications.\",\n import_roster_error: \"Impossible d'importer votre cahier d'équipe\",\n import_profiles_error: \"Impossible d'importer vos profils\",\n profiles_updated: '%{smart_count} profil a été mis à jour. |||| %{smart_count} profils ont été mis à jour.',\n },\n values: {\n types: {\n home: 'Équipe à domicile',\n away: 'Équipe visiteur',\n }\n },\n chips: {\n unsanctioned: 'Équipe Temporaire',\n },\n tooltips: {\n unsanctioned: \"Cette équipe n'est pas une équipe officielle et est souvent utilisée pour les groupes d'entraînement et les matchs d'évaluation.\"\n }\n },\n teamArenas: {\n name: \"Surface à domicile |||| Surfaces à domicile\",\n fields: {\n order: 'Ordre',\n arenaId: 'Surface',\n slot: 'Plage horaire',\n day: 'Jour',\n startTime: 'Heure de début',\n endTime: 'Heure de fin',\n },\n actions: {\n edit: \"Modifier les surfaces à domicile\",\n },\n labels: {\n card: {\n title: 'Surfaces à domicile',\n subtitle: \"Les surfaces à domicile de l'équipe seront utilisées lors de la création d'un horaire.\"\n },\n not_set: 'Pas encore défini',\n },\n messages: {\n load_error: \"Impossible de télécharger les paramètres de l'équipe\",\n },\n validations: {\n end_before_start: \"L'heure de fin doit être après l'heure de début\",\n invalid_time_check_am_pm: 'Heure non valide - vérifier AM/PM',\n },\n values: {\n order: {\n '1': 'Principal'\n }\n }\n },\n scheduleteams: {\n name: 'Équipe |||| Équipes',\n fields: {\n scheduleId: 'Horaire',\n dates: 'Dates',\n groupId: 'Groupe',\n officeId: 'Organisation',\n teamId: 'Équipe',\n teamIds: 'Équipes',\n type: 'Type',\n categoryId: 'Catégorie',\n order: 'Ordre'\n },\n actions: {\n add: 'Ajouter des équipes',\n edit: \"Modifier l'ordre\",\n },\n labels: {\n card: {\n title: 'Horaires & Coordonnées',\n },\n edit: \"Mettre à jour l'équipe\",\n coach: 'Entraîneur',\n manager: 'Gérant',\n rank: 'Rang',\n import_teams: \"Sélectionnez des équipes\",\n replace_existing_teams: 'Remplacer les équipes existantes'\n },\n messages: {\n replace_existing_teams: \"Vous avez sélectionné plus d'équipes que le nombre total d'équipes que vous avez configurées. Voulez-vous remplacer les équipes déjà sélectionnées dans votre brouillon?\",\n team_order: \"L'ordre des équipes sera utilisé pour générer les matchs et n'aura aucun impact sur les statistiques.\",\n synced_by_id: 'Cet horaire est synchronisée via Spordle ID. Pour ajouter de nouvelles équipes, approuvez-les par Spordle ID.'\n },\n },\n schedulesequences: {\n name: 'Séquence de numéros de match |||| Séquences de numéros de match',\n fields: {\n scheduleId: 'Horaire',\n groupId: 'Groupe',\n prefix: 'Préfixe',\n start: 'Numéro de départ',\n suffix: 'Suffixe',\n current: 'Actuel',\n max: 'Numéro de fin',\n },\n labels: {\n starting_sequence: 'Séquence de départ',\n edit: \"Mettre à jour la séquence de numéros de match\",\n add: 'Ajouter une séquence de numéros de match',\n },\n actions: {\n add: 'Ajouter une séquence',\n go_to: 'Aller à la séquence',\n },\n messages: {\n starting_sequence: 'Séquence de départ: %{sequence}'\n },\n alerts: {\n sequence_in_use: 'Cette séquence de numéros de match est actuellement utilisée et ne peut pas être modifiée',\n sequence_info: 'Les séquences de numéros de match sont utilisées pour numéroter automatiquement les matchs au fur et à mesure de leur création et lors de la publication des brouillons.',\n },\n validations: {\n too_many_characters: 'Trop de caractères',\n cannot_contain_consecutive_dashes: 'Ne peut contenir des tirets consécutifs',\n cannot_contain_special_characters: 'Ne peut contenir des caractères spéciaux ou des espaces',\n must_contain_a_number: 'Doit contenir un nombre',\n sequence_in_use: \"Impossible de modifier une séquence de numéros de match en cours d'utilisation\",\n delete_scheduleteam: \"Impossible de supprimer une équipe inscrite dans des matchs ou des matchs brouillons\",\n delete_sequence_in_use: \"Impossible de supprimer une séquence en cours d'utilisation\",\n unique_prefix_suffix: \"Ne peut avoir qu'un seul modèle de préfixe/suffixe de séquence par horaire\",\n prefix_cant_end_in_number: 'Le préfixe ne peut pas se terminer par un chiffre',\n greater_than_current: 'Doit être supérieur au nombre actuel',\n schedule_has_sequence: 'Cet horaire a déjà une séquence de numéros de match',\n group_has_sequence: 'Ce groupe a déjà une séquence de numéros de match',\n sequence_overlaps: 'Cette séquence de numéros de match chevauche une plage de séquences existante',\n sequence_exhausted: 'La séquence utilisée pour générer le numéro de match est épuisée',\n excessive_pad_length: 'Le numéro de fin dépasse le format du numéro de départ',\n }\n },\n arenaoffices: {\n name: 'Organisation |||| Organisations',\n fields: {\n arenaId: 'Surface',\n officeId: 'Organisation',\n isPrimary: 'Primaire',\n leagueIds: 'Ligues',\n divisionIds: 'Divisions'\n },\n labels: {\n restrictions: 'Restrictions',\n },\n },\n arenaslots: {\n name: 'Plage horaire |||| Plages horaires',\n fields: {\n name: 'Nom',\n arenaId: 'Surface',\n startTime: 'Date et heure de début',\n endTime: 'Date et heure de fin',\n categoryIds: 'Catégories',\n officeId: 'Organisation',\n comments: 'Commentaires',\n types: 'Types',\n leagueIds: 'Ligues',\n isShared: 'Partager cette plage avec toutes les organisations'\n },\n values: {\n types: {\n Practice: 'Pratique',\n ...TYPES,\n },\n },\n labels: {\n card: {\n title: 'Plages Horaires',\n subtitle: 'Enregistrez vos réservations de surface pour voir vos plages disponible',\n game_slots: 'Plages horaires des matchs',\n practice_slots: 'Plages horaires des pratiques',\n },\n tooltips: {\n slot_replace: `Cette plage horaire chevauche une plage horaire existante:\n %{timeRange1} |||| Cette plage horaire chevauche des plages horaire existantes:\n %{timeRange1}\n %{timeRange2}`,\n },\n restrictions: 'Restrictions',\n recurrence: 'Récurrence',\n import_slots: 'Importer des plages horaires',\n slots_file: 'Fichier de plages horaires',\n slot_splits: 'Séparations de plages horaires',\n slot_duration: 'Durées des plages horaires',\n break_duration: 'Pauses des plages horaires',\n edit: 'Mettre à jour la plage horaire',\n frequency: 'Fréquence',\n interval: 'Intervalle',\n weekdays: 'Jours de la semaine',\n end_date: 'Date de fin',\n delete_slots: 'Supprimer la plage horaire |||| Supprimer les plages horaires',\n slots_restrictions: 'Restrictions des plages horaires',\n set_slots_restrictions: \"Modifier les restrictions\",\n restricted: 'Restrictions',\n Type: 'Type',\n League: 'Ligue',\n Category: 'Catégorie'\n },\n messages: {\n drop_slots_csv: 'Déposez votre fichier de plages horaires (.csv) ici',\n import_tool_slots: \"Pour utiliser cet outil d'importation, téléchargez un fichier CSV avec des colonnes pour l'heure de début et l'heure de fin de la plage horaire.\",\n import_slot_warning: 'Les lignes qui chevauchent des plages horaires existantes ne seront pas importées.',\n schedule_no_occurences: \"Les paramètres de récurrence spécifiés n'entraînent aucune plage horaire\",\n event_repeat: 'Ces paramètres de récurrence générera %{smart_count} journée |||| Ces paramètres de récurrence générera %{smart_count} journées',\n slot_splits: 'Cela générera une plage horaire le %{date} entre %{startTime} et %{endTime} |||| Cela générera %{smart_count} plages horaires le %{date} entre %{startTime} et %{endTime}.',\n additional_instances: '... %{smart_count} plage horaire additionnelle ... |||| ... %{smart_count} plages horaires additionnelles ...',\n confirm_delete: 'Voulez-vous vraiment supprimer cette plage horaire? |||| Voulez-vous vraiment supprimer ces %{smart_count} plages horaires?',\n available_slots: '%{smart_count} plage disponible |||| %{smart_count} plages disponibles',\n slots: '%{smart_count} plage |||| %{smart_count} plages',\n home_available_slots: '%{smart_count} plage locale |||| %{smart_count} plages locales',\n away_available_slots: '%{smart_count} plage visiteuse |||| %{smart_count} plages visiteuses'\n },\n helpers: {\n categoryIds: 'Optionnel - Si vide, toutes les catégories',\n types: 'Optionnel - Si vide, toutes les types',\n leagueIds: 'Optionnel - Si vide, toutes les ligues',\n },\n notifications: {\n import_slots_success: '%{number} plage horaire importée. |||| %{number} plages horaires ont été importées.',\n import_slots_error: \"Impossible d'importer les plages horaires.\",\n delete_slots_success: '%{smart_count} plage horaire supprimée |||| %{smart_count} plages horaires ont été supprimées',\n delete_slots_error: \"Une erreur s'est produite lors de la suppression de la plage horaire |||| Une erreur s'est produite lors de la suppression des plages horaires\",\n update_restrictions_success: 'Mise à jour des restrictions pour %{smart_count} plage horaire |||| Mise à jour des restrictions pour %{smart_count} plages horaires',\n update_restrictions_error: \"Une erreur s'est produite lors de la mise à jour des restrictions de la plage horaire |||| Une erreur s'est produite lors de la mise à jour des restrictions des plages horaires\",\n },\n actions: {\n add: 'Ajouter des plages horaires',\n },\n validations: {\n import_slots_overlaps: 'Certaines lignes contiennent des heures qui se chevauchent',\n overlaps: 'Le temps choisi chevauche une plage horaire existante',\n import_slots_end_before_start: 'Certaines lignes contiennent une heure de fin avant une heure de début',\n end_before_start: \"Une heure de fin doit être après l'heure de début\",\n duration_exceeds_range: \"La durée ne peut pas dépasser l'intervalle entre l'heure de début et l'heure de fin\",\n total_duration: 'La durée totale entraîne un nombre inégal de plages horaires',\n include_start_day: 'Doit inclure %{day}'\n },\n alerts: {\n bulk_slots_restrictions: 'Cochez les restrictions que vous souhaitez modifier. Une restriction cocher sans valeur effacera la valeur actuelle.',\n overlaps_title: 'Chevauchements',\n overlaps: 'Cette période de temps présente certains chevauchements. Modifiez les heures de début et de fin et réessayez.'\n }\n },\n availabilities: {\n name: 'Disponibilité |||| Disponibilités',\n fields: {\n officeId: 'Organisation',\n isAvailable: 'Statut',\n },\n values: {\n isAvailable: {\n available: 'Disponible',\n notAvailable: 'Non disponible',\n }\n },\n labels: {\n available: 'Disponible',\n unavailable: 'Non disponible',\n conflicts: `%{smart_count} conflit |||| %{smart_count} conflits`,\n team_conflicts: \"Conflits d'équipe\",\n surface_conflicts: 'Conflits de surface',\n constraints: 'Contraintes',\n slots: 'Plages horaires',\n more: '+ %{smart_count} supplémentaire |||| + %{smart_count} supplémentaires'\n },\n },\n blockedSurfaces: {\n name: 'Bloqué par',\n },\n accounts: {\n name: 'Compte |||| Comptes',\n fields: {\n email: 'Adresse courriel',\n password: 'Mot de passe',\n participantId: 'Participant'\n },\n actions: {\n add: 'Ajouter un compte',\n sma_reset: 'Réinitialiser mot de passe',\n },\n labels: {\n card: {\n title: 'Comptes',\n subtitle: \"Les participants peuvent être liés à un ou plusieurs comptes par des identités.\"\n },\n my: 'Mon Compte',\n edit: 'Mise à jour du compte',\n },\n messages: {\n enter_email: 'Entrez une adresse courriel pour lancer la recherche',\n },\n alerts: {\n enter_email_above: 'Entrez une adresse courriel ci-dessus pour lancer la recherche...',\n sma_reset_title: 'Réinitialisation de mot de passe Spordle My Account',\n sma_reset: \"Le mot de passe temporaire donné est valable pendant 14 jours. Lorsque l'utilisateur se connecte avec le mot de passe temporaire, il lui est demandé de saisir un nouveau mot de passe. Ce nouveau mot de passe devient ensuite le mot de passe du compte.\",\n },\n helpers: {\n password: 'Optionnel sauf pour les nouveaux comptes',\n },\n validations: {\n must_be_length: 'Doit être au moins %{length} caractères',\n must_have_number: 'Doit contenir au moins un chiffre',\n must_have_uppercase: 'Doit contenir au moins une lettre majuscule',\n must_have_lowercase: 'Doit contenir au moins une lettre minuscule',\n must_have_special: 'Doit contenir au moins un caractère spécial',\n },\n notifications: {\n sma_reset_success: 'Mot de passe réinitialisé avec succès',\n sma_reset_error: 'Échec de la réinitialisation du mot de passe',\n }\n },\n permissions: {\n name: 'Autorisation |||| Autorisations',\n fields: {\n principalType: 'Type de principal',\n principalId: 'Participant',\n roleId: 'Rôle',\n targetType: 'Type de ressource',\n targetId: 'Organisation / Horaire / Équipe',\n categoryIds: 'Catégories',\n groupIds: 'Groupes',\n expiry: 'Expiration',\n reportsDisabled: 'Désactiver les rapports',\n scorekeepingDisabled: 'Désactiver la modification des feuilles de match',\n },\n actions: {\n add: 'Ajouter un rôle',\n },\n labels: {\n card: {\n title: 'Rôles',\n subtitles: {\n office: \"Les rôles de l'organisation accordent l'accès aux ressources dans et sous cette organisation. Vous pouvez restreindre davantage l'accès en créant des groupes.\",\n schedule: \"Les rôles pour les horaires donnent l'accès aux ressources liées à ces horaires uniquement. Vous pouvez restreindre davantage l'accès en créant des groupes.\",\n team: \"Les rôles d'équipe accordent l'accès à cette équipe uniquement.\",\n }\n },\n edit: 'Mettre à jour le rôle',\n roles: 'Rôles',\n legacy: 'Rôles administratifs (ancien)',\n administrative: 'Rôles administratifs',\n expired: 'Expiré',\n },\n messages: {\n roles: 'Les rôles administratifs sont désormais gérés sur le participant.',\n },\n helpers: {\n principalId: \"Il s'agit d'un ancien rôle - associez ce compte à une personne pour le convertir\",\n categoryIds: 'Optionnel - Si vide, toutes les catégories',\n groupIds: 'Optionnel - Si vide, tous les groupes',\n expiry: \"Optionnel - L'accès sera révoqué à compter de cette date\",\n },\n values: {\n targetType: {\n Participant: 'Participant',\n Office: 'Organisation',\n Schedule: 'Horaire',\n Team: 'Équipe',\n },\n context: {\n Administrative: 'Administratif',\n League: 'Ligue',\n Officiating: 'Officiel',\n },\n },\n validations: {\n role_not_activated: \"Ce rôle n'a pas été activé pour l'organisation sélectionné\"\n }\n },\n profiles: {\n name: 'Profil |||| Profils',\n fields: {\n id: 'Participant',\n birthdate: 'Date de naissance',\n height: 'Hauteur (pi)',\n weight: 'Poids en livres',\n hometown: 'Ville natale',\n dexterity: 'Gaucher/Droitier',\n isPublic: 'Profil public',\n },\n actions: {\n edit: 'Editer le profil',\n },\n labels: {\n card: {\n title: 'Profil',\n },\n tabs: {\n summary: 'Mon profil',\n officiating: 'Disponibilité',\n league: 'Ligue',\n schedule: 'Horaire',\n },\n edit: 'Mettre à jour le profil',\n picture: 'Image',\n personal_calendar_feed: 'Flux de calendrier personnel',\n },\n messages: {\n description: 'Nom, date de naissance et plus',\n },\n alerts: {\n public_profile: 'Ce profil apparaîtra publiquement sur le site Web de la ligue où les statistiques sont affichées. Vous pouvez rendre ces informations privées en modifiant le profil.',\n private_profile: \"Ce profil n'apparaîtra qu'aux administrateurs autorisés de la ligue et de l'association et n'apparaîtra pas sur le site Web de la ligue.\",\n },\n helpers: {\n isPublic: \"Optionnel - Autoriser l'affichage publique des informations de profil sur le site Web de la ligue\",\n },\n validations: {\n invalid_birthdate: \"Certaines valeurs n'incluent pas de date valide (YYYY-MM-DD)\",\n invalid_height: 'Certaines lignes ont une hauteur non valide',\n invalid_weight: 'Certaines lignes ont un poids invalide',\n invalid_hometown: 'Certaines lignes ont une ville natale non valide',\n invalid_dexterity: 'Certaines lignes ont une latéralité non valide'\n },\n values: {\n dexterity: {\n Right: 'Droitier',\n Left: 'Gaucher',\n }\n }\n },\n contacts: {\n name: 'Coordonnées |||| Coordonnées',\n fields: {\n type: 'Type',\n value: 'Valeur',\n isPrimary: 'Primaire',\n isEmergency: \"Urgence\",\n isNotification: 'Recevoir des notifications',\n isVerified: 'Vérifié',\n notes: 'Notes',\n participantId: 'Personne',\n language: 'Langue'\n },\n actions: {\n add: 'Ajouter un contact',\n },\n labels: {\n card: {\n title: \"Carnet d'adresses\",\n },\n edit: 'Mettre à jour le contact',\n unverified: 'Contact non vérifié',\n information: 'Informations supplémentaires',\n notifications: 'Notifications',\n },\n messages: {\n contacts: \"Les contacts peuvent être utilisés pour vous envoyer des notifications de match et sont disponibles pour aider les utilisateurs autorisés à vous joindre, mais ils n'affectent pas votre connexion à votre compte.\",\n description: 'Courriels, numéros de téléphone et adresses',\n already_received_email: 'Si vous avez déjà reçu un courriel de vérification, vous devrez cliquer sur le lien pour vérifier, ou cliquer ci-dessous pour le renvoyer. Le lien expirera après 1 semaine.',\n only_participant_verify: 'Seul le participant peut vérifier son adresse courriel.',\n has_not_been_verified: \"%{contact} n'a pas été vérifié.\",\n unverified_explain: 'Pour recevoir des notifications, ce contact doit être vérifié. La vérification est non obligatoire et ne limite pas le compte.',\n error_verify: 'Impossible de vérifier votre courriel',\n },\n alerts: {\n contact_accounts: \"Les contacts n'affectent pas les comptes.\",\n create_via_invite_button: 'Pour créer un nouveau compte, utilisez le bouton \"Inviter\" sur la page de profil.',\n change_login: \"Pour changer le nom d'utilisateur, rendez-vous dans la section des comptes sur la page de profil.\",\n add_contact_email: 'Veuillez ajouter un courriel de contact ci-dessous pour recevoir des notifications.',\n verify_contact_email: 'Veuillez vérifier votre courriel de contact pour recevoir des notifications.',\n },\n notifications: {\n not_registered: 'Le participant doit être enregistré avant que ce contact puisse être vérifié'\n },\n helpers: {\n value: 'Une notification sera envoyée pour valider cette adresse',\n isPrimary: 'Les notifications iront à ce contact par défaut',\n isEmergency: \"Utilisez ce contact en cas d'urgence\",\n language: 'Langue des notifications',\n isNotification: 'Utilisez ce contact pour recevoir des notifications',\n },\n tooltips: {\n isPrimary: 'Contact primaire',\n isEmergency: \"Contact d'urgence\",\n isVerified: 'Vérifié',\n notificationsActive: 'Reçoit des notifications',\n notificationsDisabled: 'Notifications désactivées',\n },\n values: {\n type: {\n Email: 'Adresse courriel',\n Mobile: 'Portable',\n Home: 'Domicile',\n },\n language: {\n en: 'Anglais',\n fr: 'Français'\n }\n }\n },\n addresses: {\n name: 'Adresse |||| Adresses',\n fields: {\n label: 'Nom',\n address: 'Adresse',\n address2: 'Adresse 2',\n city: 'Ville',\n province: 'Province',\n postal: 'Code Postal',\n type: 'Type',\n isPrimary: 'Primaire'\n },\n actions: {\n add: 'Ajoutez une adresse',\n },\n labels: {\n card: {\n title: 'Adresses',\n },\n edit: \"Mettre à jour l'adresse\",\n },\n helpers: {\n label: 'Optionnel - Surnom pour cette adresse',\n address2: 'Optionnel - Unité/Suite/etc.',\n },\n values: {\n type: {\n Home: 'Domicile',\n Work: 'Travail',\n Other: 'Autre',\n },\n province: {\n AB: 'Alberta',\n BC: 'Colombie-Britannique',\n MB: 'Manitoba',\n NB: 'Nouveau-Brunswick',\n NL: 'Terre-Neuve-et-Labrador',\n NT: 'Territoires du Nord-Ouest',\n NS: 'Nouvelle-Écosse',\n NU: 'Nunavut',\n ON: 'Ontario',\n PEI: 'Île-du-Prince-Édouard',\n QC: 'Québec',\n SK: 'Saskatchewan',\n YT: 'Yukon',\n }\n }\n },\n notifications: {\n name: 'Notification |||| Notifications',\n fields: {\n participantId: 'Participant',\n contactId: 'Coordonnées des destinataires',\n email: 'Adresse courriel (Ancien)',\n targetId: 'Ressource',\n categoryIds: 'Catégories',\n groupIds: 'Groupes',\n gameReport: 'Feuille de match',\n majorPenalty: 'Sanctions majeures',\n suspension: 'Suspensions',\n assigning: 'Assignation',\n scheduling: 'Horaires',\n activities: 'Activités',\n drafts: 'Partage de brouillon',\n origin: 'Origine'\n },\n actions: {\n add: 'Ajouter une notification',\n },\n labels: {\n card: {\n title: 'Notifications',\n subtitles: {\n office: \"Les notifications de l'organisation s'appliquent à tous les matchs dans et sous cette organisation. Les notifications peuvent être ajoutées à n'importe qui, même s'il n'a pas de rôle.\",\n schedule: \"Les notifications d'horaire s'appliquent à tous les matchs de ce calendrier. Les notifications peuvent être ajoutées à n'importe qui, même s'il n'a pas de rôle.\",\n team: \"Les notifications d'équipe s'appliquent aux matchs joués par cette équipe.\",\n }\n },\n sources: 'Sources de notification',\n update_source: 'Mettre à jour la source de notification',\n types: 'Types',\n },\n alerts: {\n role_origin: 'Les catégories et potentiellement les groupes sont hérités du rôle.',\n },\n helpers: {\n participantId: 'Rappel: Doit avoir au moins un contact dans le profil pour recevoir des courriels',\n contactId: \"Optionnel - Les notifications iront aux contacts dont les notifications sont activées, à moins qu'elles ne soient remplacées par cette option\",\n email: \"Il s'agit d'une ancienne notification. Veuillez le connecter à un participant ci-dessus.\",\n scheduling: \"Un résumé est envoyé par courriel lorsqu'il y a eu des changements de match au cours de la dernière heure\",\n activities: \"Un résumé est envoyé par courriel lorsqu'il y a des activités nouvelles ou mises à jour pour cette équipe\",\n drafts: \"Un courriel est envoyé lorsque l'accès à un brouillon a été partagé\",\n assigning: \"Un courriel est immédiatement envoyé lorsqu'un assignation est refusée\",\n gameReport: 'Le rapport de match est envoyé après la fin du match',\n majorPenalty: 'Les feuilles de match avec les pénalités majeures seront envoyées après la fin du match',\n suspension: 'Les suspensions seront envoyées après la fin du match et en cas de changement du comité de discipline',\n categoryIds: 'Optionnel - Si vide, toutes les catégories',\n groupIds: 'Optionnel - Si vide, tous les groupes',\n origin: \"Les notifications proviennent soit d'un rôle, soit d'une inscription dans une équipe, ou soit d'une création manuelle.\"\n },\n validations: {\n duplicate_notification: 'Cette notification existe déjà. Modifiez la notification originale pour ajouter ou supprimer des types de notifications.',\n },\n values: {\n origin: {\n 'Manual': 'Manuel',\n 'Role': 'Rôle',\n 'RosterMember': \"Membre d'un équipe\",\n }\n }\n },\n draftGames: {\n name: 'Match Brouillon |||| Matchs Brouillon',\n fields: {\n id: 'ID',\n round: 'Étape',\n seasonId: 'Saison',\n scheduleId: 'Horaire',\n crossScheduleId: 'Horaire croisée',\n categoryId: 'Catégorie',\n homeTeamId: 'Local',\n awayTeamId: 'Visiteur',\n date: 'Date',\n startTime: 'Heure de début',\n endTime: 'Heure de fin',\n arenaId: 'Surface',\n status: 'Statut',\n comments: 'Commentaires',\n requestReason: 'Raison de la demande',\n officeId: 'Organisation',\n groupId: 'Groupe',\n crossGroupId: 'Groupe croisée',\n timezone: 'Fuseau Horaire',\n isShared: 'Partagé',\n sharedAt: 'Date du partage',\n sharedUntil: \"Date d'expiration du partage\",\n isPublished: 'Publié',\n publishedAt: 'Date de publication',\n requested_by: 'Demande par',\n },\n filters: {\n startTime: 'Date de début',\n endTime: 'Date de fin',\n },\n actions: {\n create: 'Créer',\n request: 'Demander un changement',\n add: 'Ajouter un match brouillon',\n generate: 'Générer un horaire',\n upload: 'Importer un fichier',\n set_date: 'Définir une date',\n clear_date: 'Effacer la date',\n change_status: 'Changer le statut',\n delete_draft_game: 'Supprimer un match brouillon |||| Supprimer plusieurs matchs brouillons',\n duplicate_game: 'Dupliquer le match'\n },\n labels: {\n card: {\n title: 'Matchs Brouillon'\n },\n edit: 'Modifier le match brouillon',\n edit_number: 'Modifier le match brouillon %{number}',\n draft_request: 'Demande de match brouillon %{number}',\n generate_automatically: 'Générer automatiquement',\n method: 'Méthode',\n type: 'Type',\n round_type: \"Type d'étape\",\n games_per_team: 'Nombre total de matchs',\n total_rounds: \"Nombre total d'étapes\",\n limit_byes: 'Limiter les byes',\n weekdays: 'Jours de la semaine',\n weekdays_type: \"Mode de distribution\",\n start_date: 'Date de début',\n start_round: 'Étape de départ',\n breaks: 'Pauses',\n total_weeks: 'Nombre total de semaines',\n no_round: \"Pas d'étape\",\n no_date: 'Pas de date',\n no_time: \"Pas d'heure\",\n no_venue: 'Pas de surface',\n drafts_file: 'Fichier des matchs brouillons',\n import_drafts: 'Importer des matchs brouillons',\n date_format: 'Format de date',\n publish: 'Publier',\n share: 'Partager',\n home: 'Local',\n away: 'Visiteur',\n total: 'Total',\n main_schedule: 'Horaire principal',\n main_group: 'Groupe principal',\n cross_schedule: 'Horaire croisée',\n cross_group: 'Groupe croisée',\n cross_pool: 'Pools croisées seulement',\n cross_team: 'Équipe croisée',\n add_cross_team: 'Ajouter une équipe intergroupe',\n steps: {\n matchups: 'Affrontements',\n matrix: 'Matrice',\n scheduling: 'Horaires',\n preview: 'Aperçu',\n },\n number_of_teams: \"Nombre total d'équipes\",\n updateExistingGames: 'Mettre à jour les matchs existants',\n confirm_publish_with_conflicts: 'Confirmer la publication avec des conflits',\n isShared: {\n true: 'Partagé',\n false: 'Non Partagé'\n }\n },\n messages: {\n drop_drafts_csv: 'Déposez votre fichier des matchs brouillons (.csv) ici',\n generate_single_double: 'Générer un horaire de rotation simple ou double',\n no_results: 'Aucun match brouillon',\n no_teams_alert: \"Des équipes doivent être ajoutées a l'horaire avant que des matchs puissent être générés.\",\n one_team_alert: \"L'horaire ne contient qu'une seule équipe.\",\n gaps_alert: \"Des écarts sont présents dans l'ordres des équipes de l'horaire. Cela pourrait entraîner un déséquilibre avec les affrontements.\",\n no_teams_group_alert: \"Des équipes doivent être ajoutées au groupe de l'horaire avant que des matchs puissent être générés.\",\n one_team_group_alert: \"Le groupe de l'horaire ne contient qu'une seule équipe.\",\n gaps_group_alert: \"Des écarts sont présents dans l'ordres des équipes du groupe de l'horaire. Cela pourrait entraîner un déséquilibre avec les affrontements.\",\n no_teams_pool_alert: \"Des équipes doivent être ajoutées au pools de l'horaire avant que des matchs puissent être générés.\",\n one_team_pool_alert: \"Les pools de l'horaire ne contiennent qu'une seule équipe.\",\n gaps_pool_alert: \"Des écarts sont présents dans l'ordres des équipes du des pools de l'horaire. Cela pourrait entraîner un déséquilibre avec les affrontements.\",\n unslotted_matchups_alert: \"En raison d'une combinaison de Double Rotation et d'un nombre impair d'équipes, certaines équipes devront jouer deux fois le même jour. Ces matchs seront générés sans dates.\",\n match_columns: 'Choissisez les équipes et les lieux correspondants à vos colonnes sélectionnées.',\n match_teams: 'Les équipes sélectionnées qui n\\'ont pas été trouvés dans l\\'horaire, seront ajoutées à l\\'horaire. Toutes les équipes qui n\\'ont pas été sélectionées seront marqués \"à déterminer\" sur les matchs.',\n import_tool_drafts: \"Pour utiliser cet outil d'importation, téléchargez un fichier contenant des matchs brouillons, puis sélectionnez un groupe d'horaire (le cas échéant).\",\n publish_help: \"La publication d'un brouillon rendra le match publique et donnera accès à la feuille de pointage. Les matchs publiés doivent avoir une date, une heure et une surface définies, et ils doivent disposer d'une séquence disponible pour le numéro de match.\",\n share_help: \"Le partage d'un brouillon donnera accès au match à l'organisation de l'équipe locale. Les matchs partagés nécessitent que les deux équipes soient attribuées\",\n confirm_clear_date: 'Êtes-vous sûr de vouloir supprimer la date de ce match brouillon? Cette action réinitialisera également les heures et le terrain. |||| Êtes-vous sûr de vouloir supprimer la date de ces matchs brouillons? Cette action réinitialisera également les heures et le terrain.',\n confirm_delete: 'Êtes-vous sûr de vouloir supprimer %{smart_count} match brouillon? |||| Êtes-vous sûr de vouloir supprimer %{smart_count} matchs brouillons?',\n schedule_dates: \"Dates de l'horaire: %{startDate} au %{endDate}\",\n change_dates_dialog: 'Changer la date réinitialisera également les heures et le terrain des matchs brouillons.',\n teams_to_import: 'L\\'importation de ces parties de repêchage ajoutera %{teams} équipes à l\\'horaire',\n confirm_publish_with_conflicts: 'Certaines des parties que vous êtes sur le point de publier ont des conflits. Êtes-vous sûr de vouloir continuer?',\n duplicate_game_success: 'Le doublon du match a été créé avec succès en tant que match brouillon. Allez dans les matchs brouillons de la cédule pour voir le nouveau match.'\n },\n alerts: {\n update_game: 'La publication de ce match brouillon mettra à jour %{game}',\n duplicate_game: 'Ce nouveau match sera créé comme un match brouillon. Une fois créé, il sera disponible dans la cédule.'\n },\n helpers: {\n round: 'Optionnel',\n comments: 'Optionnel - affiché sur le calendrier public',\n request_reason: 'Visible uniquement par les approbateurs et ne sera pas affiché sur le calendrier public',\n limit_byes: \"Chaque étape peut avoir une équipe qui joue deux fois lorsqu'il y a un nombre impair d'équipes.\",\n start_round: 'Optionnel - préciser si vous continuez un horaire existant',\n latest_round: \"L'étape %{smart_count} est la dernière étape des matchs brouillons générés précédents\",\n round_type: {\n 'Home Slots': \"Les matchs seront générés en utilisant les plages horaires des paramètres de l'équipe à domicile (si disponible)\",\n 'Weekdays': 'Les matchs seront générés en utilisant une rotation hebdomadaire basée sur les jours de la semaine',\n },\n weekdays_type: {\n 'Rotating': 'Les matchs alterneront en semaine (lundi de la semaine 1, mardi de la semaine 2, mercredi de la semaine 3, et ainsi de suite)',\n 'Consecutive': 'Les matchs seront répartis dans la semaine (lundi, mardi, mercredi de la semaine 1, et ainsi de suite)'\n },\n weekdays: 'Les jours de la semaine alterneront chaque semaine',\n weekdays_double: \"Les jours de la semaine alterneront à l'intérieur de chaque semaine\",\n start_date: \"Les nouvelles étapes d'horaire commencera les %{date}s\",\n date_format: 'Sélectionnez le format de date utilisé dans votre fichier',\n updateExistingGames: `Mettre à jour les matchs existants dans l'horaire en faisant correspondre les numéros de match`,\n isShared: \"Partage le match à l'organisation de l'équipe locale\",\n cross_pool: `L'activation de l'option \"Pool croisées seulement\" générera des affrontements strictement entre des équipes qui ne sont pas dans le même pool. Cette option n'est disponible que lorsque exactement 2 pools sont sélectionnées, que la méthode est \"Nombre total d'étapes\" et que le type est \"Simple\".`\n },\n validations: {\n must_start_on_day: 'Doit commencer un %{day}',\n must_be_after: 'Doit être après %{date}',\n must_be_before_schedule_end_date: \"Doit être avant la date de fin de l'horaire (%{date})\",\n max_weekdays: \"Max %{smart_count} jours de la semaine pour un type d'affrontement double\",\n even_number: 'Doit être un montant pair',\n invalid_date_format: \"Certaines lignes n'ont pas un format de date valide (%{format})\",\n start_without_end: 'Certaines lignes ont une heure de début, mais sans heure de fin',\n end_without_start: 'Certaines lignes ont une heure de fin, mais sans heure de début',\n date_without_date: 'Certaines lignes ont une heure, mais sans date',\n end_before_start: \"Certaines lignes ont l'heure de fin avant l'heure de début\",\n manual_odd_numbers: \"Le nombre d'équipes et le nombre de matchs par équipe sont tous deux impairs\",\n same_group: \"Doit être une équipe d'un groupe différent du groupe principal\",\n matrix_team_duplicate: 'Équipe déjà dans la matrice',\n },\n notifications: {\n added: '%{smart_count} match brouillon généré |||| %{smart_count} matchs brouillons générés',\n not_added: \"Impossible de générer les matchs brouillons\",\n uploaded: '%{smart_count} match brouillon importé |||| %{smart_count} matchs brouillons importés',\n not_uploaded: \"Impossible d'importer les matchs brouillons\",\n slow_upload_warning: \"Ce processus peut prendre un certain temps. Veuillez patienter s'il vous plaît.\",\n generator_load_error: 'Impossible de télécharger le générateur',\n published_games: '%{smart_count} match publiés avec succès |||| %{smart_count} matchs publiés avec succès',\n published_games_error: 'Impossible de publier le match |||| Impossible de publier les matchs',\n publish_failed: 'Impossible de publier %{smart_count} match |||| Impossible de publier %{smart_count} matchs',\n missing_sequence: 'Aucune séquence trouvée pour la numérotation des matchs',\n invalid_games: 'Le match est invalide |||| %{smart_count} matchs sont invalides',\n sequence_exhausted: 'Il ne reste pas assez de numéros dans la séquence de numéros de match pour publier',\n shared_games: '%{smart_count} match partagé avec succès |||| %{smart_count} matchs partagés avec succès',\n shared_games_error: 'Impossible de partager le match |||| Impossible de partager les matchs',\n set_date: 'La date a été appliquée avec succès sur %{smart_count} match brouillon |||| La date a été appliquée avec succès sur %{smart_count} matchs brouillons',\n set_date_error: 'Erreur de changement de date sur %{smart_count} match brouillon |||| Erreur de changement de date sur %{smart_count} matchs brouillons',\n delete_draft: '%{smart_count} match brouillon supprimé |||| %{smart_count} matchs brouillons supprimés',\n delete_draft_error: 'Erreur de suppression de %{smart_count} match brouillon |||| Erreur de suppression de %{smart_count} matchs brouillons',\n clear_date: 'Date effacée sur %{smart_count} match brouillon |||| Date effacée sur %{smart_count} matchs brouillons',\n clear_date_error: 'Erreur de suppression de la date sur %{smart_count} match brouillon |||| Erreur de suppression de la date sur %{smart_count} matchs brouillons',\n change_status: 'Statut changé sur %{smart_count} match brouillon |||| Statut changé sur %{smart_count} matchs brouillons',\n change_status_error: 'Erreur de changement de statut',\n },\n values: {\n methods: {\n 'Games per Team': 'Matchs par équipe',\n 'Total Rounds': \"Nombre total d'étapes\"\n },\n types: {\n 'Single Rotation': 'Simple',\n 'Double Rotation': 'Double',\n 'Matrix': 'Matrice',\n },\n round_types: {\n 'Home Slots': \"Plages horaires de l'équipe locale\",\n 'Weekdays': 'Hebdomadaire'\n },\n weekdays_types: {\n 'Rotating': 'Rotatif',\n 'Consecutive': 'Consécutif'\n },\n dates: {\n 'YYYY-MM-DD': 'YYYY-MM-DD',\n 'MM-DD-YYYY': 'MM-DD-YYYY',\n 'DD-MM-YYYY': 'DD-MM-YYYY',\n 'MM/DD/YYYY': 'MM/DD/YYYY',\n 'DD/MM/YYYY': 'DD/MM/YYYY'\n }\n },\n steps: {\n match_columns: 'Faire correspondre les colonnes',\n }\n },\n draftGameApprovals: {\n name: 'Approbation |||| Approbations',\n labels: {\n approvals: 'Approbations',\n approve_request: 'Approuver la demande',\n decline_request: 'Refuser la demande',\n },\n messages: {\n request_reschedule: 'Une fois que toutes les équipes et toutes les organisations concernées auront approuvé cette demande, le match sera automatiquement modifié',\n confirm_approve_request: 'Êtes-vous sûr de vouloir approuver ces changements ?',\n confirm_decline_request: 'Êtes-vous sûr de vouloir refuser ces changements ?',\n },\n alerts: {\n publish_game: \"L'approbation de cette demande entraînera automatiquement la modification %{game}\",\n request_changes: 'Cette demande devra être approuvée par tous les intervenants concernés afin de pouvoir être reprogrammée',\n cancel_draft: \"Le refus de cette demande entraînera l'annulation du match brouillon\",\n },\n helpers: {\n approval_comments: 'Optionnel - affiché dans la liste des approbations'\n },\n notifications: {\n approved_and_published: 'Demande approuvée et match modifié',\n declined_and_cancelled: 'Demande refusée et match brouillon annulé',\n request_approved: 'Demande approuvée',\n request_declined: 'Demande refusée',\n respond_error: 'Erreur dans le traitement de la demande',\n },\n values: {\n Approved: 'Approuvé',\n Declined: 'Refusé',\n Pending: 'En attente',\n }\n },\n drafts: {\n name: 'Brouillon |||| Brouillons',\n name_legacy: 'Ancien brouillon |||| Anciens brouillons',\n fields: {\n scheduleId: 'Horaire',\n groupId: 'Groupe',\n startDate: 'Date de début',\n totalWeeks: 'Nombre total de semaines',\n totalRounds: \"Nombre total d'étapes\",\n file: \"Fichier d'horaire\",\n isPublished: 'Publié',\n updatedAt: 'Dernière mise à jour',\n publishedAt: 'Date de publication',\n options: {\n type: 'Type',\n limitByes: 'Limiter les byes',\n crossGroup: 'Groupes croisés',\n roundType: \"Type d'étape\",\n method: 'Méthode',\n weekdays: 'Jours de la semaine',\n startDate: 'Date de début',\n totalWeeks: 'Nombre total de semaines',\n totalRounds: \"Nombre total d'étapes\",\n gamesPerTeam: 'Matchs par équipe',\n startNumber: 'Numéro de départ',\n breaks: 'Pauses',\n previousDraftId: 'Brouillon précédent',\n },\n columns: {\n homeTeamId: 'Local',\n awayTeamId: 'Visiteur',\n arenaId: 'Surface',\n date: 'Date',\n startTime: 'Heure de début',\n endTime: 'Heure de fin',\n status: 'Statut',\n number: 'Numéro du match',\n comments: 'Commentaires',\n }\n },\n actions: {\n add: 'Nouveau brouillon',\n },\n labels: {\n card: {\n title: 'Brouillons enregistrés',\n title_legacy: 'Brouillons enregistrés (ancien)'\n },\n analysis: 'Analyse',\n current_matchups: 'Affrontements actuels',\n new_matchups: 'Nouveaux affrontements',\n office_matchups: 'Affrontements par organisation',\n byes: 'Byes',\n team: 'Équipe',\n group: 'Groupe',\n opponents: 'Adversaires',\n conflicts: 'Conflits',\n home: 'Local',\n away: 'Visiteur',\n total: 'Total',\n shuffle: 'Mélanger',\n swap_matchups: 'Échanger les matchs',\n set_active: 'Activer',\n set_conflict: 'Définir le conflit',\n generate_automatically: 'Générer automatiquement',\n generate_automatically_legacy: 'Générer automatiquement (ancien)',\n manual_entry: 'Saisie manuelle',\n previous_schedule: 'Horaire précédent',\n add_team: 'Ajouter une équipe',\n import_teams: \"Sélectionnez des équipes\",\n previous_draft_alert: \"Recommencer l'horaire\",\n cross_group_alert: \"Groupes croisés pour l'horaire\",\n replace_teams_alert: 'Remplacer les équipes',\n use_previous_teams: 'Utiliser les équipes du brouillon précédent',\n unused_breaks: 'Pauses non utilisées',\n unscheduled_games: 'Matchs non programmés',\n changed_games: 'Matchs modifiés',\n new_games: 'Nouveaux matchs',\n columns: 'Colonnes',\n round: 'Étape |||| Étapes',\n week: 'Semaine',\n no_round: \"Pas d'étape\",\n no_date: 'Pas de date',\n no_time: \"Pas d'heure\",\n no_venue: 'Pas de surface',\n set_date: 'Définir une date',\n clear_date: 'Effacer la date',\n saved: 'Sauvegardé',\n shared: 'Partagé',\n conflict_resolution: {\n title: 'Conflit à resoudre',\n subtitle: {\n modified: \"Quelqu'un d'autre a apporté des modifications en même temps que vous. Voulez-vous accepter leurs modifications?\",\n removed: \"Quelqu'un d'autre a supprimé le match auquel vous avez apporté des modifications. Voulez-vous accepter la suppression?\",\n added: \"Quelqu'un d'autre a apporté des modifications au match que vous avez supprimé. Voulez-vous accepter leurs modifications?\"\n },\n keep_mine: 'Garder le mien',\n accept_theirs: 'Accepter les modifications',\n accept_delete: 'Accepter la suppression',\n keep_delete: 'Garder la suppression',\n },\n steps: {\n info: \"Informations sur l'horaire\",\n teams: 'Sélectionnez les équipes',\n games: 'Réviser les matchs',\n review: 'Publier',\n },\n types: {\n scheduler: \"Assignateur d'horaire\",\n schedule_upload: \"Téléchargement d'horaire\",\n draft_schedule: \"Ébauche d'horaire\",\n },\n general: \"Général\",\n matchups: 'Affrontements',\n scheduling: 'Horaires',\n },\n messages: {\n no_byes: 'Pas de byes',\n show_conflicts_only: 'Afficher uniquement les conflits',\n games_selected: 'Un match sélectionné |||| %{smart_count} matchs sélectionnés',\n generate_single_double: 'Générer un horaire de rotation simple ou double',\n draft_multiple_games: 'Rédigez individuellement plusieurs matchs à la fois',\n generate_new_schedule: 'Générer un nouvel horaire?',\n draft_already_has_games: \"Ce brouillon a déjà des matchs. La génération d'un nouvel horaire les remplacera.\",\n draft_already_has_games_share: \"Ce brouillon a déjà des matchs. La génération d'un nouvel horaire les remplacera et va annuler le partage du brouillon.\",\n want_generate_new_schedule: 'Voulez-vous générer un nouvel horaire?',\n drop_your_schedule_file: \"Déposez votre fichier d'horaire (.csv) ici\",\n drop_another_schedule_file: \"%{num} lignes analysées. Déposez un autre fichier d'horaire (.csv) ici pour le remplacer.\",\n replace_existing_games: 'Remplacer les matchs existants?',\n draft_already_has_games_uploader: \"Ce brouillon a déjà des matchs. Si vous avez apporté des modifications a le horaire ou aux équipes, vous devez remplacer les matchs existants.\",\n want_replace_existing_games: 'Vous souhaitez remplacer les matchs existants?',\n number_of_play: '%{smart_count} étape de jeu |||| %{smart_count} étapes de jeu',\n number_of_games_per_team: '%{smart_count} match par équipe |||| %{smart_count} matchs par équipe',\n number_of_break: '%{smart_count} semaine de pause |||| %{smart_count} semaines de pause',\n publish_schedule: \"Publier l'horaire?\",\n same_game_number_be_updated: \"Les changements d'horaire décrits dans le sommaire seront appliqués. Tous les matchs existants avec le même numéro de match seront mis à jour.\",\n discard_draft: 'Supprimer le brouillon?',\n discard_unsaved_draft: 'Quitter supprimera ce brouillon non enregistré.',\n save_changes: 'Sauvegarder les modifications?',\n save_changes_before_leaving: 'Souhaitez-vous enregistrer les modifications avant de quitter?',\n number_teams_added: '%{number} équipes seront ajoutées',\n number_existing_games: '%{number} sur %{total} matchs existants seront modifiés',\n number_games_added: '%{number} nouveaux matchs seront ajoutés',\n no_changes_number_games: 'Aucun changement pour %{number} matchs existants',\n no_changes_number_teams: 'Aucun changement pour %{number} équipes existantes',\n no_additional_games: 'Aucun match supplémentaire ne sera ajouté',\n previous_draft_alert: \"Un autre brouillon a déjà été publié mais n'a pas été sélectionné. Cet horaire ne se poursuivra pas à partir de la dernière étape du brouillon précédent.\",\n cross_group_alert: \"Vous souhaitez créer un horaire à groupes croisés?\",\n replace_teams_alert: 'Voulez-vous remplacer les équipes que vous avez déjà sélectionnées dans ce brouillon',\n use_previous_teams: \"Voulez-vous remplacer les équipes de ce brouillon par les équipes du brouillon précédent sélectionné?\",\n unused_breaks: 'Certaines de vos pauses auront lieu après la fin de tout les matchs. Les pauses après %{date} seront ignorées.',\n unscheduled_games: \"Ce brouillon génère plus de matchs qu'il n'est possible d'en programmer avant la date de fin de l'horaire. Les matchs générés après %{date} n'auront donc pas de date attribuée.\",\n unbalanced_schedule: {\n title: 'Horaire déséquilibré',\n message: 'Avec %{totalTeams} et %{totalRoundsOrGamesPerTeam}, cet horaire résultera en:',\n games_per_total_teams: '%{totalTeams} avec %{totalGames}',\n suggestions: \"Afin de générer un nombre égal de matchs pour chacune des équipes, mettez le <strong>nombre total %{method} à %{suggestion}</strong>, ou utilisez un nombre pair d'équipes.\",\n round: \"d'étape |||| d'étapes\",\n game_per_team: 'de match par équipe |||| de matchs par équipe',\n },\n review_errors: {\n title: 'Corrigez vos erreurs',\n message: 'Les matchs suivants ont des erreurs de validation qui doivent être corrigées:',\n },\n share: {\n title: 'Confirmer le partage',\n title_shared: 'Brouillon partagé',\n messages: {\n list: 'Ce brouillon sera partagé avec les associations suivantes:',\n list_shared: 'Ce brouillon a déjà été partagé avec les associations suivantes:',\n info: 'Les associations ne pourront modifier que les temps et les surfaces de leurs propres matchs et ne pourront pas publier le brouillon.'\n }\n },\n renumber_games: {\n title: 'Renuméroter les matchs',\n actions: {\n renumber_games: 'Renuméroter les matchs',\n },\n messages: {\n description: 'Les matchs seront renumérotés basé sur leur heure de début et les écarts de séquence de numéros de match seront éliminés.',\n }\n }\n },\n alerts: {\n dated_in_past: '%{smart_count} match est daté du passé |||| %{smart_count} matchs sont datés du passé',\n },\n helpers: {\n limitByes: \"Chaque étape peut avoir une équipe qui joue deux fois lorsqu'il y a un nombre impair d'équipes.\",\n crossGroup: 'Les matchs seront générés entre les équipes des groupes.',\n roundType: {\n 'Home Slots': \"Les matchs seront générés en utilisant les plages horaires des paramètres de l'équipe à domicile (si disponible)\",\n 'Weekdays': 'Les matchs seront générés en utilisant une rotation hebdomadaire basée sur les jours de la semaine',\n },\n weekdays: 'Les jours de la semaine alterneront chaque semaine',\n weekdays_double: \"Les jours de la semaine alterneront à l'intérieur de chaque semaine\",\n startNumber: \"Attention: l'horaire précédent comprend %{number}\",\n totalWeeks: '%{smart_count} semaine |||| %{smart_count} semaines',\n totalGames: '%{smart_count} match |||| %{smart_count} matchs',\n totalRounds: '%{smart_count} match par équipe |||| %{smart_count} matchs par équipe',\n totalRounds_odd: \"%{smart_count} si nombre impair d'équipes\",\n previousDraftId: \"Le nouvel horaire commencera à l'étape %{round}\",\n startDate: \"Les nouvelles étapes d'horaire commencera les %{date}s\",\n startDate_previous: 'Les étapes précédentes ont commencé les %{date}s',\n previousDraftId_optional: \"Optionnel - à utiliser lors de la poursuite d'un horaire\",\n no_team_time_slots: \"Pas de plage horaire d'équipe définie\"\n },\n validations: {\n must_contain_a_number: 'Doit contenir un nombre',\n must_start_on_day: 'Doit commencer un %{day}',\n must_be_after: 'Doit être après %{date}',\n must_be_before: 'Doit être avant %{date}',\n must_be_before_schedule_end_date: \"Doit être avant la date de fin de l'horaire (%{date})\",\n break_last_week: 'Ne peut pas mettre une pause à la semaine dernière',\n max_weeks: 'Max %{smart_count} semaine (%{date}) |||| Max %{smart_count} semaines (%{date})',\n max_weekdays: \"Max %{smart_count} jours de la semaine pour un type d'affrontement double\",\n valid_date: \"Certaines valeurs n'incluent pas de date valide (AAAA-MM-JJ)\",\n valid_time: \"Certaines valeurs n'incluent pas d'heure valide (HH:mm)\",\n same_column_start_time: \"Impossible d'utiliser la même colonne que l'heure de début\",\n cross_group_teams: 'Groupes croisés nécessite des équipes dans 2 groupes',\n same_game_number: 'Ce numéro de match existe déjà dans ce brouillon'\n },\n notifications: {\n generating_schedule: \"Génération de l'horaire...\",\n unable_generate_schedule: \"Impossible de générer l'horaire\",\n unable_to_load_draft: 'Impossible de télécharger le brouillon',\n unable_to_share_draft: 'Impossible de partager le brouillon',\n unable_to_publish_draft: 'Impossible de publier le brouillon',\n unable_to_publish_draft_games: 'Impossible de publier le brouillon en raison de matchs invalides',\n schedule_published: 'Horaire publié',\n draft_shared: 'Brouillon partagé',\n },\n values: {\n type: {\n Upload: 'Télécharger',\n Generated: 'Généré',\n Manual: 'Manuel',\n },\n draft_type: {\n 'Single Rotation': 'Simple',\n 'Double Rotation': 'Double',\n },\n round_type: {\n 'Home Slots': \"Plages horaires de l'équipe locale\",\n 'Weekdays': 'Hebdomadaire'\n }\n }\n },\n officeAssignSettings: {\n name: 'Paramètre |||| Paramètres',\n fields: {\n officeId: \"Organisation d'assignation\",\n declineReason: 'Raison requise',\n declineHours: 'Heures minimales',\n visibleDaysEnabled: 'Autoriser les officiels à voir les matchs non assignés',\n visibleDays: 'Jours visibles',\n dailyLimit: 'Limite quotidienne',\n requestsEnabled: 'Autoriser les officiels à demander des matchs',\n declineEnabled: 'Autoriser les officiels à refuser des assignations',\n declineConfirmedDisabled: 'Désactiver les refus une fois confirmé',\n removeAfterDecline: \"Supprimer les officiels lorsqu'ils refusent\",\n removeAfterRescheduled: \"Supprimer les officiels lorsqu'un match est reprogrammé\",\n removeOnDateChange: \"Supprimer les officiels seulement si la date est changée\",\n assignmentVisibility: 'Visibilité des assignations',\n assignerVisible: \"Afficher le nom de l'assignateur aux officiels\",\n supervisorVisible: \"Afficher le superviseur aux officiels\",\n claimableDriver: 'Conducteur',\n claimablePassenger: 'Passager',\n claimableBreakfast: 'Déjeuner',\n claimableLunch: 'Dîner',\n claimableDinner: 'Souper',\n driverAmount: 'Taux ($/km)',\n passengerAmount: 'Taux ($/km)',\n breakfastAmount: 'Montant du déjeuner',\n lunchAmount: 'Montant du dîner',\n dinnerAmount: 'Montant du souper',\n driverExcludedDistance: 'Distance exclue',\n passengerExcludedDistance: 'Distance exclue',\n enforceConsecutive: 'Appliquer des assignations consécutives',\n allowEarlyClaims: 'Autoriser les réclamations avant la fin du match.',\n effectiveOfficialsList: \"Afficher les listes d'officiels des sous-organisations\"\n },\n actions: {\n edit: 'Modifier les paramètres',\n },\n labels: {\n card: {\n title: \"Paramètres des assignations\",\n },\n edit_assigning: \"Modifier les paramètres d'assignations\",\n general: 'Général',\n requests: 'Demandes',\n declines: 'Refus',\n travel_claimables: 'Frais de déplacement',\n per_diem_claimables: 'Per diem',\n claims: 'Réclamations',\n },\n messages: {\n load_error: \"Impossible de télécharger les paramètres d'assignations\",\n visible_days_disabled: 'Les officiels ne peuvent pas voir les matchs non assignés',\n visible_same_days: 'Les officiels ne peuvent voir que les matchs du jour même',\n visible_days_on: \"Les officiels peuvent voir jusqu'à %{number} jours à l'avenir\",\n visible_days_off: 'Tous les matchs actifs visibles',\n requests_enabled_on: 'Activé',\n requests_enabled_off: 'Assignation uniquement',\n decline_enabled_on: 'Refuser avant %{number} heures',\n decline_enabled_on_anytime: 'Refuser à tout moment',\n decline_enabled_off: 'Désactivé',\n reason_required: 'la raison est requise',\n reason_not_required: 'raison non requise',\n disabled_after_confirmation: 'désactivé après confirmation',\n },\n alerts: {\n assigning_not_enabled: \"L'assignation n'est pas activée pour cette organisation\",\n visibleDaysEnabled: 'Les jours visibles doivent être activés pour que les officiels puissent demander des matchs'\n },\n helpers: {\n declineReason: \"Exiger des officiels qu'ils précisent une raison lorsqu'ils refusent\",\n declineHours: \"Nombre d'heures avant le début du match qu'un officiel peut refuser\",\n visibleDaysEnabled: \"S'il est désactivé, les officiels ne pourront pas voir les matchs non assignés\",\n visibleDays: \"Nombre de jours d'avance pendant lesquels les officiels pourront voir les matchs actifs\",\n dailyLimit: 'Nombre maximum de matchs auxquels un officiel peut être assigné en une journée',\n requestsEnabled: \"S'il est désactivé, les officiels pourront voir les matchs actifs mais pas faire de demande\",\n declineEnabled: \"S'il est désactivé, les officiels seront invités à contacter un assignateur pour être retirer\",\n declineConfirmedDisabled: 'Les officiels ne pourront pas refuser après avoir accepté',\n removeAfterDecline: \"Les officiels ignoreront l'état refusé et seront immédiatement supprimés\",\n removeAfterRescheduled: \"Des changements a la date, l'heure ou la surface supprimeront tous les officiels\",\n removeOnDateChange: \"Remplace le paramètre ci-dessus pour supprimer les officiels uniquement si la date a été changée. Les modifications de l'heure ou de la surface uniquement n'entraîneront pas la suppression des officiels\",\n assignmentVisibility: \"Visibilité du nom et du statut d'un officiel affecté dans le panneau d'assignations\",\n assignerVisible: \"Les officiels pourront voir qui les a assignés\",\n supervisorVisible: \"Les officiels pourront voir l'assignation du superviseur\",\n excludedDistance: 'Distance qui sera calculée au taux de $0/km',\n enforceConsecutive: \"Les officiels seront tenus d'accepter ou de refuser toutes les assignations dans un délai d'une heure\",\n allowEarlyClaims: \"Les officiels seront autorisés à faire des réclamations avant la fin du match\",\n effectiveOfficialsList: \"Les listes d'officiels des sous-organisations seront disponibles et visibles pour l'assignation\"\n },\n values: {\n assignmentVisibility: {\n Visible: 'Nom et statut',\n Status: 'Statut uniquement',\n Hidden: \"Cachée\"\n }\n }\n },\n officeClaimsSettings: {\n fields: {\n name: 'Nom',\n type: 'Type',\n amount: 'Montant',\n rate: 'Taux',\n excludedDistance: 'Distance exclue'\n },\n labels: {\n name: 'Paramètres de réclamation'\n },\n helpers: {\n amount: {\n Expense: 'Montant maximal',\n 'Per Diem': 'Taux fixe',\n },\n rate: 'Taux ($) par KM',\n excludedDistance: 'Distance exclue pour une réclamation de déplacement',\n no_options: 'Aucune réclamation disponible - Contactez votre assignateur'\n },\n actions: {\n add: 'Paramètre de réclamation'\n },\n values: {\n type: {\n 'Expense': 'Dépense',\n 'Travel': 'Déplacement',\n 'Per Diem': 'Per Diem'\n },\n secondaryText: {\n 'Travel': 'Rate per KM',\n 'Per Diem': 'Amount',\n 'Expense': 'Maximum Amount'\n }\n\n }\n },\n gameAssignSettings: {\n name: 'Paramètre |||| Paramètres',\n fields: {\n gameId: 'Match',\n systemId: \"Système d'arbitrage\",\n officeId: \"Organisation d'assignation\",\n feesId: 'Structure de rémunération',\n minReferee: \"Niveau minimum d'arbitre\",\n minLinesperson: 'Niveau minimum de juge de ligne',\n minOfficial: \"Niveau minimum d'officiel\",\n minScorekeeper: 'Niveau minimum de marqueur',\n minTimekeeper: 'Niveau minimum de chronométreur',\n minGrade: \"Grade minimale d'officiel\",\n minRefereeGrade: \"Grade minimale d'arbitre\",\n minLinespersonGrade: 'Grade minimale de juge de ligne',\n minAge: 'Âge minimum',\n fees: 'Frais',\n status: 'Statut',\n },\n labels: {\n referee: \"Niveau d'arbitre\",\n linesperson: 'Niveau de juge de ligne',\n official: \"Niveau d'officiel\",\n scorekeeper: 'Niveau de marqueur',\n timekeeper: 'Niveau de chronométreur',\n grade: \"Grade d'officiel\",\n referee_grade: \"Grade d'arbitre\",\n linesperson_grade: 'Grade du juge de ligne',\n set_assigning_settings: \"Modifier les paramètres d'assignation\",\n set_assigner: \"Modifier l'assignateur\",\n assigning_settings: \"Paramètres d'assignation\",\n change_assigner: \"Modifier l'assignateur\",\n },\n helpers: {\n status_draft: \"Changer le statut de l'assignation d'actif vers brouillon notifiera les officiels assignés qu'ils ont été enlevés du match\"\n },\n messages: {\n change_assigner: \"Pour changer l'assignateur de tous les positions, sélectionnez l'organisation du nouveau assignateur et ne sélectionnez pas de position.\",\n change_assigner_partial: \"Pour déléguer partiellement des assignations à un autre responsable, sélectionnez l'organisation et la position. Les matchs pour lesquels il n'y a pas la position sélectionné ou qui ont déjà attribué la position à un officiel seront ignorés.\",\n },\n notifications: {\n updated_game_settings: 'Mise à jour des paramètres pour %{smart_count} match |||| Mise à jour des paramètres pour %{smart_count} matchs',\n updating_settings_error: \"Une erreur s'est produite lors de la mise à jour des paramètres\",\n errors: {\n invalid_fees: 'Structure de rénumération non valide',\n }\n },\n alerts: {\n bulk_assign_settings: 'Cochez les paramètres que vous souhaitez modifier. Un paramètre cocher sans valeur effacera la valeur actuelle.'\n }\n },\n assignFees: {\n name: 'Structure de rémunération |||| Structures de rémunération',\n fields: {\n name: 'Nom',\n officeId: 'Organisation',\n Referee: 'Arbitre',\n Linesperson: 'Juge de ligne',\n LinespersonTwo: 'Juge de ligne 2',\n LinespersonThree: 'Juge de ligne 3',\n Official: 'Officiel',\n Scorekeeper: 'Marqueur',\n Timekeeper: 'Chronométreur',\n Supervisor: 'Superviseur',\n fees: 'Frais',\n isArchived: 'Archivé',\n },\n actions: {\n add: 'Ajouter une structure de rémunération',\n },\n labels: {\n card: {\n title: 'Structures de rémunération',\n subtitle: \"Certaines structures salariales peuvent également provenir de l'organisme parent\",\n },\n edit: 'Modifier la structure de rémunération',\n },\n values: {\n isArchived: {\n archived: 'Archivé',\n notArchived: 'Actif'\n }\n },\n validations: {\n assign_fee_in_use: 'La structure de rémunération est utilisée. Créer une nouvelle structure pour apporter des modifications',\n delete_assign_fee_in_use: \"Impossible de supprimer une structure de rémunération en cours d'utilisation\",\n cannot_archive: \"Les règles d'assignation doivent être supprimées avant d'archiver cette structure de paie.\",\n },\n alerts: {\n cannot_update_amounts: \"Afin de modifier les montants, vous devez créer une nouvelle structure de paie. Vous pouvez ensuite archiver cette structure de paie après avoir déplacé ses règles d'assignation vers la nouvelle structure de paie.\"\n }\n },\n assignRules: {\n name: \"Règle d'assignation |||| Règles d'assignation\",\n fields: {\n categoryIds: 'Catégories',\n types: \"Types d'horaires\",\n groupIds: 'Groupes',\n attributes: {\n duration: 'Durée de match',\n days: 'Jours',\n time: 'Avant quelle heure (24h)',\n effectiveDate: \"Date d'entrée en vigueur\"\n },\n order: 'Ordre',\n officeId: 'Organisation',\n value: 'Valeur',\n type: 'Type',\n stopInheritance: \"Arrêter l'héritage des règles\"\n },\n options: {\n Active: 'Actif',\n Draft: 'Brouillon',\n Arena: 'Lieu',\n 'Arena Primary': \"Organisation primaire du lieu\",\n Schedule: 'Horaire',\n Home: \"Organisation de l'équipe locale\",\n Office: 'Organisation',\n 'Home Parent': \"Organisation parent de l'équipe locale\",\n Zone: 'Zone',\n systemId: \"Système d'assignation\",\n feesId: 'Structure de rémunération',\n officeId: 'Assigné par',\n minReferee: \"Niveau d'arbitre\",\n minLinesperson: 'Niveau de juge de ligne',\n minOfficial: \"Niveau d'officiel\",\n minScorekeeper: 'Niveau de marqueur',\n minTimekeeper: 'Niveau de chronométreur',\n minRefereeGrade: \"Grade d'arbitre\",\n minLinespersonGrade: 'Grade de juge de ligne',\n minAge: 'Âge minimum',\n assignType: \"Assigné via\",\n status: 'Statut initial',\n },\n actions: {\n add: \"Ajouter une règle d'assignation\",\n },\n labels: {\n card: {\n title: 'Spécifications du match',\n subtitle: \"Lorsqu'un match est créé ou mis à jour, ces règles sont traitées pour déterminer les conditions des officiels.\"\n },\n alt_card: {\n title: 'Détermination des assignateurs',\n subtitle: \"Lorsqu'un match est créé ou mis à jour, ces règles sont traitées pour déterminer quel organisation assignera les matchs.\"\n },\n edit: \"Modifier une règle d'assignation\",\n rule: 'Règle',\n default_rules: 'Règles par défaut',\n criteria: 'Critère de match',\n duration: 'Durée: >= %{duration} min',\n days: 'Jours: %{days}',\n time_before: 'Heure: Avant %{time}',\n effective: 'En vigueur: %{date}',\n rules: {\n feesId: 'Frais',\n officeId: 'Assigné par',\n minReferee: \"Niveau d'arbitre: %{value}\",\n minLinesperson: 'Niveau de juge de lignes: %{value}',\n minOfficial: \"Niveau d'officiel: %{value}\",\n minScorekeeper: 'Niveau de marqueur: %{value}',\n minTimekeeper: 'Niveau de chronométreur: %{value}',\n minGrade: \"Grade d'officiel: %{value}\",\n minRefereeGrade: \"Grade d'arbitre: %{value}\",\n minLinespersonGrade: 'Grade de juge de ligne: %{value}',\n minAge: 'Âge minimum: %{value}',\n assignType: 'Assigné via %{value}',\n status: 'Statut initial: %{value}',\n },\n apply_rules: \"Appliquer les règles d'assignation\",\n applied_settings: 'Paramètres appliqués',\n assignOffices: \"Appliquer les paramètres d'assignation\",\n scheduleOffices: 'Mettre à jour les assignateurs de match'\n },\n helpers: {\n assignType: \"L'assignateur sera automatiquement déterminé en fonction de l'organisation apparentée\",\n assignTypes: {\n Arena: \"L'assignateur sera automatiquement déterminé en fonction de l'organisation du lieu apparenté\",\n 'Arena Primary': \"L'assignateur sera automatiquement déterminé en fonction de l'organisation principal du lieu\",\n Schedule: \"L'assignateur sera automatiquement déterminé en fonction de l'organisation de l'horaire\",\n Home: \"L'assignateur sera automatiquement déterminé en fonction de l'organisation de l'équipe à domicile\",\n 'Home Parent': \"L'assignateur sera automatiquement déterminé en fonction de l'organisation parent de l'équipe à domicile\",\n Office: \"L'assignateur sera automatiquement déterminé en fonction de l'organisation du match\",\n Zone: \"L'assignateur sera automatiquement déterminé en fonction de la zone\",\n },\n officeId: \"Les matchs seront attribués par l'organisation sélectionnée\",\n scheduledBy: \"Cette règle s'applique aux matchs programmés par ou sous cette organisation\",\n assignedBy: \"Cette règle s'applique aux matchs attribués par ou sous cette organisation\",\n categoryIds: 'Optionel - Si vide, toutes les catégories',\n types: \"Optionel - Si vide, tous les types d'horaires\",\n groupIds: 'Optionel - Si vide, tous les groupes',\n duration: 'Optionel - En minutes',\n stopInheritance: \"Si cette règle est activée, elle l'emportera sur n'importe quelle règle correspondante des sous-organizations\",\n applied_settings: \"Optionnel - sélectionnez un sous-ensemble de paramètres à appliquer, sinon, si aucun n'est sélectionné, tous les paramètres seront appliqués\"\n },\n values: {\n types: TYPES,\n },\n validations: {\n conflicts: \"Modifier l'ordre pour résoudre les critères qui se chevauchent\",\n inheritance: \"Ce critère chevauche une règle avec une plus grande priorité qui l'empêche d'être remplacé\",\n archived_fee: \"Impossible d'ajouter ou de modifier une règle d'assignation dans une structure de paie archivée\",\n },\n alerts: {\n existing_games: \"Sélectionnez les matchs auxquels appliquer les règles d'assignation. Les configurations existantes seront écrasées.\",\n scheduleOffices: \"Cette action redéfinira l'assignateur en fonction des détails du match et définit les paramètres d'assignation en fonction de cet assignateur.\",\n assignOffices: \"Cette action définira les paramètres en fonction de l'assignateur existant.\",\n new_games_only_title: \"Les règles d'assignation ne s'appliquent qu'aux matchs nouvellement créés et reprogrammées\",\n new_games_only: \"Pour réappliquer les règles d'assignation aux matchs existants, cliquez sur Appliquer les règles d'assignation dans le menu des actions.\",\n determined_by: \"L'organisation d'assignation a été déterminé par \\\"%{rule}\\\" de %{office}.\"\n },\n notifications: {\n apply_rules_success: \"Les règles d'assignation ont été appliquées à %{smart_count} match. |||| Les règles d'assignation ont été appliquées à %{smart_count} matchs.\"\n },\n tooltips: {\n determine_via: `\n <div>\n <h3>L'assignateur peut être déterminé via les propriétés suivantes du match:</h3>\n <ul>\n <li>\n <strong>Lieu</strong>\n <ul>\n <li>Basé sur les organisations du lieu.</li>\n <li>Si l'équipe locale appartient à l'un de ces organisations, l'organisation de cette équipe deviendra l'assignateur.</li>\n <li>Sinon, ca recherchera un organisation à partir des restrictions de ligue de l'organisation du lieu.</li>\n <li>Autrement, l'organisation principal du lieu deviendra l'assignateur.</li>\n </ul>\n </li>\n <li>\n <strong>Organisation primaire du lieu</strong>\n <ul>\n <li>L'organisation principal du lieu deviendra l'assignateur.</li>\n <li>Sinon, aucun assignateur ne sera choisi.</li>\n </ul>\n </li>\n <li>\n <strong>Horaire</strong>\n <ul>\n <li>L'organisation de l'horaire deviendra l'assignateur.</li>\n </ul>\n </li>\n <li>\n <strong>Organisation de l'équipe locale</strong>\n <ul>\n <li>L'organisation de l'équipe locale deviendra l'assignateur.</li>\n <li>Si indéterminé (TBA/TBD), cela revient à la détermination de l'assignateur par le \"Lieu\" ci-dessus.</li>\n </ul>\n </li>\n <li>\n <strong>Organisation parent de l'équipe locale</strong>\n <ul>\n <li>Identique a \"Organisation de l'Équipe Locale\", mais basé sur l'organisaton parent de l'organisation de l'équipe locale.</li>\n </ul>\n </li>\n <li>\n <strong>Zone</strong>\n <ul>\n <li>Basé sur les organisations du lieu, si un organisation de type Zone est disponible, il sera utilisé comme assignateur.</li>\n <li>Autrement, cela revient a l'organisation principal du lieu.</li>\n </ul>\n </li>\n </ul>\n <p>\n Si l'organisation déterminé est un organisation de type Ligue, Tournoi ou Coupe, selon l'une de ces règles, l'organisation parent sera sélectionné à la place.\n </p>\n </div>\n `\n }\n },\n assignSettings: {\n name: 'Paramètre |||| Paramètres',\n labels: {\n required_level: 'Niveau requis',\n required_grade: 'Grade requis',\n required_age: 'Âge requis',\n },\n messages: {\n assigned_by: 'Assigné par %{name}',\n },\n helpers: {\n systemId: 'Les assignation actuelles ne correspondent pas aux postes disponibles',\n },\n validations: {\n invalid_level: 'Niveau non valide',\n invalid_grade: 'Note non valide',\n invalid_age: 'Âge invalide',\n min_setting_range: 'Doit être supérieur ou égal à 0.',\n },\n },\n assignSystems: {\n name: \"Système d'assignation |||| Systèmes d'assignation\",\n fields: {\n name: 'Nom',\n referees: 'Arbitres',\n linespersons: 'Juges de ligne',\n linespersonsTwo: 'Juges de ligne 2',\n linespersonsThree: 'Juges de ligne 3',\n officials: 'Officiels',\n scorekeepers: 'Marqueurs',\n timekeepers: 'Chronométreurs',\n supervisors: 'Superviseurs',\n },\n actions: {\n add: \"Ajouter un système d'assignation\",\n },\n labels: {\n card: {\n title: \"Système d'assignation\",\n subtitle: \"Les systèmes d'assignation déterminent le nombre d'officiels nécessaires pour un match.\",\n },\n edit: \"Modifier un système d'assignation\",\n },\n },\n assignTargets: {\n name: \"Règle de remplacement de l'assignateur |||| Règles de remplacement de l'assignateur\",\n fields: {\n targetType: 'Type',\n targetId: 'Source',\n groupIds: 'Groupes',\n officeId: 'Cédant',\n },\n actions: {\n add: \"Ajouter une règle de remplacement de l'assignateur\",\n },\n labels: {\n card: {\n title: \"Règles de remplacement de l'assignateur\",\n subtitle: \"Remplacer les règles de remplacement d'assignation pour utiliser un assignateur spécifique pour un horaire ou à la place d'un autre assignateur, éventuellement limité par des groupes.\",\n },\n edit: \"Mettre à jour une règle de remplacement de l'assignateur\",\n add_override: 'Ajouter une règle de remplacement',\n },\n validations: {\n missing_type: 'Type manquant',\n unique_target: 'Une règle de remplacement est déjà définie',\n unique_group: 'Une règle de remplacement est déjà définie pour ce groupe',\n }\n },\n pages: {\n name: 'Page |||| Pages',\n fields: {\n title: 'Titre',\n slug: 'Slug',\n order: 'Ordre',\n content: 'Contenu',\n sectionId: 'Section',\n coverId: 'Image de couverture',\n officeId: 'Organisation',\n },\n actions: {\n edit: 'Modifier la page',\n },\n labels: {\n add: 'Nouvelle page',\n },\n helpers: {\n order: \"Optionnel: par défaut, ordre alphabétique\",\n },\n },\n posts: {\n name: 'Publications |||| Nouvelles',\n fields: {\n title: 'Titre',\n slug: 'Slug',\n date: 'Date',\n content: 'Contenu',\n coverId: 'Image de couverture',\n officeId: 'Organisation',\n },\n actions: {\n edit: 'Modifier le poste',\n },\n labels: {\n add: 'Nouveau poste',\n },\n messages: {\n start_writing_here: 'Commencez à écrire ici...',\n }\n },\n registrations: {\n name: 'Inscription |||| Inscriptions',\n fields: {\n seasonId: 'Saison',\n divisionId: 'Division',\n participantId: 'Participant',\n officeId: 'Organisation',\n },\n actions: {\n add: 'Ajouter une inscription',\n },\n labels: {\n card: {\n title: 'Inscriptions',\n },\n edit: \"Mettre à jour l'inscription\",\n import: 'Importer des inscriptions',\n file: \"Fichier d'inscriptions\",\n },\n messages: {\n drop_registrations_csv: \"Déposez ici votre fichier d'inscriptions (.csv)\",\n use_import_tool: \"Pour utiliser cet outil d'importation, téléchargez un fichier CSV avec des colonnes pour le numéro de membre, le prénom, le nom et la division enregistrée du participant.\",\n },\n alerts: {\n create_new_participants: \"<strong>Utiliser avec précaution.</strong> Cet outil d'importation créera de nouveaux participants qui ne correspondent pas aux numéros de membre existants.\",\n },\n helpers: {\n select_columns: \"Il vous sera demandé de sélectionner des colonnes après avoir sélectionné votre fichier\",\n valid_registrations: '%{number}/%{total} lignes ont des inscriptions valides',\n match_existing_participant: 'Ce numéro de membre est utilisé pour faire correspondre un participant existant ou créer un nouveau participant pour cette inscription.',\n },\n notifications: {\n registrations_updated: '%{number} inscriptions ont été mises à jour.',\n import_registrations_error: \"Impossible d'importer les inscriptions.\",\n },\n },\n sections: {\n name: 'Section |||| Sections',\n fields: {\n name: 'Nom',\n order: 'Ordre',\n officeId: 'Organisation',\n },\n actions: {\n add: 'Ajouter une section',\n },\n labels: {\n card: {\n title: 'Sections',\n subtitle: \"Sections d'en-tête du site Web pour organiser les pages.\",\n },\n edit: 'Mise à jour de la section',\n }\n },\n webevents: {\n name: 'Événement |||| Événements',\n fields: {\n title: 'Titre',\n content: 'Contenu',\n startTime: 'Heure de début',\n endTime: 'Heure de fin',\n allDay: 'Toute la journée',\n location: 'Lieu',\n officeId: 'Organisation'\n },\n actions: {\n edit: \"Modifier l'événement\",\n },\n labels: {\n card: {\n title: 'Événements',\n },\n add: 'Nouvel événement',\n dates: 'Dates',\n },\n },\n announcements: {\n name: 'Annonce |||| Annonces',\n fields: {\n title: 'Titre',\n seasonId: 'Saison',\n type: 'Type',\n content: 'Contenu',\n targetType: 'Type de destinataires',\n targetId: 'Destinataires',\n participantId: 'Auteur',\n officeId: 'Organisation',\n },\n actions: {\n edit: \"Modifier l'annonce\",\n },\n labels: {\n officiating: 'Annonces des officiels',\n add: 'Nouvelle annonce',\n edit: \"Mise à jour d'une annonce\",\n },\n messages: {\n send_email_officials: 'Envoyer un courriel aux officiels',\n recipients: {\n all_team_staff: \"tout le personnel de l'équipe\",\n all_available_officials: 'tous les officiels disponibles',\n all_team_staff_all_available_game_officials: \"tout le personnel de l'équipe et les officiels de match disponibles\",\n all_list_members: 'tous les membres de la liste',\n }\n },\n helpers: {\n destination_sent: 'Un courriel sera envoyé à %{recipient} qui ont un contact vérifié',\n destination_not_nsent: 'Les notifications ne sont pas envoyées pour les mises à jour.',\n },\n values: {\n type: {\n General: 'Général',\n League: 'Ligue',\n Officiating: 'Officiel',\n },\n targetType: {\n Office: 'Organisation',\n List: 'Liste',\n },\n }\n },\n lists: {\n name: 'Liste |||| Listes',\n fields: {\n name: 'Nom de la liste',\n officeId: 'Organisation',\n members: 'Membres'\n },\n actions: {\n add: 'Ajouter une liste',\n edit: \"Modifier la liste\",\n },\n labels: {\n card: {\n title: 'Listes',\n subtitle: \"Les assignateurs peuvent utiliser des listes comme filtre lors de l'assignation de matchs.\",\n },\n official: 'Liste des officiels',\n import_list_members: \"Importer la liste de membres\",\n list_members_file: 'Fichier de la liste de membres',\n },\n messages: {\n drop_list_members_csv: 'Déposez le fichier de la liste de membres (.csv) ici',\n import_tool_list_members: \"Pour utiliser cet outil d'importation, téléchargez un fichier CSV avec des colonnes pour le numéro de membre des officiels.\",\n },\n validation: {\n already_exists: 'Déjà dans cette liste',\n },\n helpers: {\n match_existing_participant: \"Les participants seront ignorés s'ils ne sont pas des officiels qualifiés.\",\n create_list: \"Une liste doit être créée avant d'importer des membres.\",\n quick_assign_tooltip: `Ce filtre est utilisé pour l'assignation. Sélectionnez un organisation d'assignation pour l'utiliser.`,\n },\n },\n listMembers: {\n name: 'Liste de membres',\n fields: {\n listId: 'Nom de la liste',\n },\n actions: {\n add_officials: 'Ajouter des officiels',\n },\n labels: {\n add_member: 'Ajouter des membres',\n add_officials: 'Ajouter des officiels qualifiés dans %{name}',\n },\n notifications: {\n list_members_added: \"%{smart_count} membre a été ajouté à la liste. |||| %{smart_count} membres ont été ajoutés à la liste.\",\n list_officials_added: \"%{smart_count} officiel a été ajouté à la liste. |||| %{smart_count} officiels ont été ajoutés à la liste.\",\n add_list_members_error: \"Impossible d'ajouter des membres à la liste.\",\n add_list_officials_error: \"Impossible d'ajouter des officiels à la liste.\",\n list_members_removed: \"%{smart_count} membre a été retiré de la liste. |||| %{smart_count} membres ont été retirés de la liste.\",\n list_officials_removed: \"%{smart_count} officiel a été retiré de la liste. |||| %{smart_count} officiels ont été retirés de la liste.\",\n remove_list_members_error: \"Impossible de retirer des membres de la liste.\",\n remove_list_officials_error: \"Impossible de retirer des officiels de la liste.\",\n import_list_members_error: \"Impossible d'importer la liste de membres.\",\n import_list_officials_error: \"Impossible d'importer la liste d'officiels.\",\n }\n },\n infractions: {\n name: 'Infraction |||| Infractions',\n fields: {\n seasonId: 'Saison',\n officeId: 'Organisation',\n ruleId: 'Règle',\n code: 'Code',\n typeId: 'Type',\n severity: 'Sévérité',\n parentId: 'Infraction parente',\n externalId: 'ID externe',\n legacyName: 'Ancien nom',\n legacyDuration: 'Ancienne durée'\n },\n actions: {\n add: 'Ajouter une infraction',\n },\n labels: {\n card: {\n title: 'Infractions',\n subtitle: \"Une pénalité est le résultat d'une infraction.\",\n },\n add: 'Nouvelle infraction',\n edit: 'Modifier une infraction',\n parent_code: 'Code parent',\n parent_office: 'Organisation parent'\n },\n helpers: {\n parentId: \"Optionnel - Lier cette infraction à une infraction de l'organisation parent\",\n },\n values: {\n severity: {\n Low: 'Basse',\n Medium: 'Moyenne',\n High: 'Haute',\n Severe: 'Sévère',\n },\n }\n },\n infractionTypes: {\n name: \"Type d'infraction |||| Types d'infractions\",\n fields: {\n officeId: 'Organisation',\n name: 'Nom',\n abbreviation: 'Abbréviation',\n description: 'Description',\n duration: 'Durée',\n isShorthanded: 'Équipe en infériorité numérique',\n isEjection: 'Joueur fautif éjecté',\n order: \"Ordre d'affichage\",\n servingOrder: \"Ordre d'exécution\",\n },\n helpers: {\n isShorthanded: \"Si l'équipe se retrouve en infériorité numérique ou si une substitution est autorisée\",\n isEjection: \"La pénalité entraîne l'expulsion du joueur fautif du match.\",\n },\n actions: {\n add: 'Ajouter un type',\n },\n labels: {\n card: {\n title: \"Types d'infraction\",\n subtitle: 'Les types déterminent le comportement des infractions.',\n },\n add: 'Nouveau type',\n edit: 'Modifier le type',\n },\n },\n ruleSections: {\n name: 'Section de règle |||| Sections de régle',\n fields: {\n seasonId: 'Saison',\n officeId: 'Organisation',\n name: 'Nom',\n code: 'Code',\n order: \"Ordre d'affichage\",\n },\n actions: {\n add: 'Ajouter une section de règle',\n },\n labels: {\n card: {\n title: 'Règles de jeu',\n subtitle: \"Ensemble de règles détaillant les infractions et les options correspondantes disponibles pour l'entrée des résultats.\",\n },\n add: 'Nouvelle section',\n edit: 'Modifer une section',\n },\n },\n rules: {\n name: 'Règle |||| Règles',\n fields: {\n seasonId: 'Saison',\n officeId: 'Organisation',\n sectionId: 'Section',\n name: 'Nom',\n code: 'Code',\n order: \"Ordre d'affichage\",\n },\n actions: {\n add: 'Ajouter une règle',\n },\n labels: {\n add: 'Nouvelle règle',\n edit: 'Modifier une règle',\n },\n },\n ruleOptions: {\n name: 'Option de règle |||| Options de règle',\n fields: {\n seasonId: 'Saison',\n officeId: 'Organisation',\n ruleId: 'Règle',\n members: 'Membres',\n parentId: 'Option parente',\n order: \"Ordre d'affichage\",\n },\n actions: {\n add: 'Ajouter une option de règle'\n },\n labels: {\n card: {\n title: 'Options de règles',\n subtitle: \"Les choix disponibles lors de l'entrée des résultats.\",\n },\n add: 'Nouvelle option de règle',\n edit: 'Modifier une option de règle',\n },\n },\n ruleOptionMembers: {\n name: \"Membre d'une option |||| Membres d'une option\",\n fields: {\n optionId: 'Option de règle',\n infractionId: 'Infraction',\n order: 'Ordre',\n },\n actions: {\n add: 'Ajouter une infraction'\n },\n labels: {\n add: 'Ajouter une option de règle',\n edit: 'Modifier une option de règle',\n },\n },\n infractionAccumulations: {\n name: 'Infraction automatique |||| Infractions automatiques',\n fields: {\n seasonId: 'Saison',\n officeId: 'Organisation',\n name: 'Nom',\n count: \"Compte d'accumulation\",\n members: \"Infractions cumulatives\",\n infractionId: 'Infraction résultante',\n isReplacement: 'Remplacement'\n },\n actions: {\n add: \"Ajouter une règle d'infraction automatique\"\n },\n labels: {\n card: {\n title: \"Règles d'infraction automatique\",\n subtitle: \"Règles d'accumulation pour déclencher une infraction lorsque les conditions sont remplies au cours du même match.\",\n },\n add: \"Ajouter une règle d'infraction automatique\",\n edit: \"Modifier une règle d'infraction automatique\",\n },\n helpers: {\n isReplacement: \"Si activé, l'infraction résultante remplacera la pénalité originale au lieu d'en créer une nouvelle.\"\n }\n },\n infractionAccumulatiomMembers: {\n name: \"Membre d'une accumulation |||| Membres d'une accumulation\",\n fields: {\n accumulationId: 'Accumulation',\n infractionId: 'Infraction',\n },\n actions: {\n add: 'Ajouter une infraction'\n },\n labels: {\n add: 'Ajouter un membre',\n edit: 'Modifier un membre',\n },\n },\n rulebooks: {\n name: 'Livre des règlements |||| Livre des règlements',\n fields: {\n name: 'Nom',\n infractions: 'Infractions',\n ejections: 'Expulsion automatiques du match',\n doubleminors: 'Doubles Mineurs',\n variances: \"Changements\",\n officeId: 'Organisation',\n seasonId: 'Saison',\n category: 'Catégorie',\n categoryIds: 'Catégories',\n code: 'Code',\n choices: 'Choix',\n durations: 'Durées',\n duration: 'Durée',\n isStick: 'Infraction au bâton',\n isArchived: 'Archivé',\n description: 'Brève description',\n length: 'Durée (secondes)',\n requireIncidentReport: \"Rapport d'incident requis\",\n timed: 'Durée temporisée',\n lineupLimits: \"Limites d'alignement\",\n scheduleTypes: \"Types d'horaire\",\n pitcherLimits: \"Limites des lanceurs\",\n throwsLimits: \"Repos des balles lancées\",\n inningsPitchedLimits: \"Limites des manches lancées\",\n inningsPitchedRests: \"Repos des manches lancées\",\n limitType: 'Type de limite',\n restingDays: \"Repos\",\n startDate: \"Date de début\",\n endDate: \"Date de fin\",\n },\n actions: {\n add: 'Ajouter un livre des règlements',\n add_infraction: 'Ajouter une infraction',\n add_duration: 'Ajouter une durée',\n add_variance: 'Ajouter un changement',\n add_limits: \"Ajouter des limites\",\n },\n labels: {\n card: {\n title: \"Limites d'alignement\",\n baseball_title: \"Limites d'alignement / manches\",\n subtitle: \"Politiques pour le nombre minimum / maximum de membres autorisés lors des matchs.\",\n baseball_subtitle: \"Politiques pour les limites de lancer et le nombre minimum / maximum de membres autorisés lors des matchs.\",\n },\n add: 'Nouveau livre des règlements',\n add_limits: 'Ajouter des limits',\n edit: 'Mettre à jour le livre des règlements',\n edit_infraction: \"Mise à jour de l'infraction\",\n edit_duration: 'Mise à jour de la durée',\n edit_variance: 'Mise à jour du changement',\n edit_limits: \"Mise à jour des limites\",\n position: 'Position',\n players: 'Joueurs',\n skaters: 'Patineurs',\n goalies: 'Gardiens de but',\n staff: 'Personnel',\n durations: 'Durées',\n infractions: 'Infractions',\n lineup_limits: \"Limites d'alignement\",\n pitcher_limits: \"Limites des lanceurs\",\n variances: 'Changements',\n additional_policies: 'Politiques supplémentaires',\n throws_limits: \"Repos des balles lancées\",\n innings_pitched_limits: \"Limites des manches lancées\",\n innings_pitched_rests: \"Repos des manches lancées\"\n },\n alerts: {\n durations: 'Les durées sont utilisées pour créer des infractions',\n infractions: \"Les infractions dans les livres des règlements des organisations parents seront héritées (mais ne sont pas affichées ici). Cette organisation peut les remplacer en utilisant le même nom d'infraction.\",\n lineup_limits: 'La valeur par défaut est illimitée, sauf indication contraire ou héritée des organisations parents.',\n pitcher_limits: 'La valeur par défaut est illimitée, sauf indication contraire ou héritée des organisations parents.',\n additional_policies: 'Les politiques supplémentaires peuvent être laissées en blanc pour être héritées des organisations parents, le cas échéant.',\n rulebook_independence: \"Si aucune règle n'est définie au niveau de cette organisation, les matchs hériteront des règles de la fédération.\"\n },\n helpers: {\n ejections: 'Une infraction \"Expulsion du match\" sera automatiquement ajoutée après 3 pénalités des types sélectionnés',\n name: 'Remarque: Le nom ne peut pas être modifié une fois le livre des règlements enregistré',\n abbreviation: 'Remplace la durée des pénalités dans la feuille de match officielle',\n requireIncidentReport: \"Un rapport d'incident sera nécessaire pour les pénalités de cette durée.\",\n timed: 'Les pénalités avec des durées temporisées prend en consideration le temps que le joueur dois servire',\n isStick: \"L'infraction sera comptabilisée dans la politique d'expulsion d'infraction de bâton, le cas échéant.\",\n isArchived: \"Les infractions archivées ne sont pas affichées lors de l'ajout d'une pénalité. Utilisez cette option pour retirer une infraction au lieu de la supprimer.\",\n },\n validation: {\n min: \"Min doit être plus petit que max\",\n max: \"Max doit être plus grand que min\",\n startDate: \"La date de début doit être avant la date de fin\",\n endDate: \"La date de fin doit être après la date de début\",\n },\n values: {\n lineupLimits: {\n between: 'Entre %{min} et %{max} %{position}',\n min: 'Minimum de %{min} %{position}',\n max: \"Maximum de %{max} %{position}\",\n },\n pitcherLimits: {\n scheduleTypes: {\n ...TYPES,\n League: 'Saison régulière'\n },\n limitType: {\n Daily: 'Journalière',\n Weekly: 'Hebdomadaire',\n },\n throwsLimits: {\n between: 'Entre %{min} et %{max} lancers = %{restingDays} jour(s) de repos',\n },\n inningsPitchedLimits: {\n always: '%{limitType}: %{limit} manche(s) max',\n from: '%{limitType}: %{limit} manche(s) max à partir du %{startDate}',\n between: '%{limitType}: %{limit} manche(s) max entre %{startDate} et %{endDate}',\n until: \"%{limitType}: %{limit} manche(s) max jusqu'au %{endDate}\",\n },\n inningsPitchedRests: {\n between: 'Entre %{min} et %{max} manche(s) = %{restingDays} jour(s) de repos',\n },\n },\n ejections: {\n None: 'Rien',\n Contact: 'Contact à la tête et infractions de bâton',\n All: 'Toutes les infractions',\n },\n severity: {\n low: 'Faible',\n medium: 'Moyen',\n high: 'Élevé',\n severe: 'Sévère',\n }\n }\n },\n help: {\n name: 'Article |||| Aide',\n fields: {\n title: 'Titre',\n content: 'Contenu',\n category: 'Catégorie',\n roles: \"S'applique à\",\n isPublished: 'Publié',\n updatedAt: 'Dernière mise à jour',\n },\n actions: {\n edit: \"Modifier l'article\",\n },\n labels: {\n add: 'Nouvel article',\n documentation: 'Documentation',\n help_center: \"Centre d'aide\",\n },\n alerts: {\n article_not_published_yet: \"Cet article n'a pas encore été publié.\",\n },\n helpers: {\n roles: \"L'article ne sera visible que pour les rôles sélectionnés\",\n },\n values: {\n roles: {\n 'super-admin': 'Super Administrateurs',\n admin: 'Administrateurs',\n registrar: 'Registraires',\n director: 'Directeurs de ligue',\n manager: 'Gestionnaires de ligue',\n organizer: 'Organisateurs de cédule',\n 'assigning-manager': 'Gestionnaires des assignateurs',\n assigner: 'Assignateurs',\n official: 'Arbitres',\n player: 'Joueurs',\n coach: \"Personnel d'équipe\",\n assistant: \"Assistants d'équipe\",\n association: 'Associations',\n editor: 'Editeurs de Site Web',\n scorekeeper: 'Marqueurs',\n }\n }\n },\n reports: {\n name: 'Rapport |||| Rapports',\n messages: {\n empty: \"Votre ligue n'a rendu aucun rapport disponible.\",\n error: 'Impossible de télécharger vos rapports (%{error}). Vous devrez réessayer plus tard.',\n },\n values: {\n scheduleType: TYPES,\n types: {\n AP: \"Affiliation\",\n Admin: \"Administration\",\n Assigning: \"Assignation\",\n Penalty: \"Pénalité\",\n Scoring: \"Statistique\"\n },\n }\n },\n seasons: {\n name: 'Saison |||| Saisons',\n fields: {\n seasonId: 'Saison',\n },\n alerts: {\n viewing_inactive_season: \"Vous êtes présentement en train de voir la saison %{season}, qui n'est pas la saison courante.\",\n },\n values: {\n seasonId: {\n '2025-26': '2025-26',\n '2024-25': '2024-25',\n '2023-24': '2023-24',\n '2022-23': '2022-23',\n '2021-22': '2021-22',\n '2020-21': '2020-21',\n '2019-20': '2019-20',\n '2018-19': '2018-19',\n }\n }\n },\n identities: {\n name: 'Identité |||| Identités',\n fields: {\n accountId: 'Compte',\n participantId: 'Participant',\n isPrimary: 'Primaire',\n },\n actions: {\n add: 'Ajouter une identité',\n },\n labels: {\n edit: \"Mettre à jour l'identité\",\n },\n helpers: {\n isPrimary: \"L'identité primaire est le participant par défaut que le compte verra après s'être connecté.\",\n }\n },\n groups: {\n name: 'Groupe |||| Groupes',\n fields: {\n seasonId: 'Saison',\n name: 'Nom',\n type: 'Type',\n categoryIds: 'Catégories',\n },\n actions: {\n add: 'Ajouter un groupe',\n },\n labels: {\n card: {\n title: 'Groupes',\n subtitle: \"Divisez les horaires en plusieurs cohortes au sein de cette ligue. Lors de l'ajout d'équipes ou de matchs à un horaire, il vous sera demandé de sélectionner un groupe.\",\n },\n edit: 'Mettre à jour le groupe',\n },\n messages: {\n all_groups: 'Tous les groupes',\n },\n helpers: {\n categoryIds: 'Optionel - Si vide, toutes les catégories',\n },\n values: {\n type: {\n ...TYPES,\n Jamboree: 'Jamboree',\n Challenge: 'Défi',\n Invitational: 'Invitation',\n 'Program Of Excellence': \"Programme d'excellence\",\n 'Evaluation Camp': \"Camp d'évaluation\",\n },\n },\n },\n suspensions: {\n name: 'Suspension |||| Suspensions',\n fields: {\n penaltyId: 'Pénalité',\n teamId: 'Équipe',\n participantId: 'Participant',\n requiredGames: 'Matchs à servir',\n positionGroup: 'Position',\n code: 'Code',\n gameId: 'Match',\n status: 'Statut',\n durationType: 'Type',\n expiry: \"Date d'expiration\",\n additionalPurgingTeamId: 'Équipe additionnelle éligible de purger',\n disciplineStatus: 'Statut de discipline',\n isAutomatic: 'Automatique',\n },\n labels: {\n edit: 'Modifier la suspension',\n playing: 'Joue quand même',\n played: 'Joué quand même',\n purging: 'Purge',\n purged: 'Purgé',\n not_serving: 'Ne purge pas',\n suspended: 'Suspendu',\n not_suspended: 'Non suspendu',\n admin: 'Administrative',\n indefinite: 'Indéterminée',\n manual_direct: 'Autre',\n type: 'Type',\n manual: 'Suspension manuel',\n automatic: 'Suspension automatique',\n details: 'Détails',\n participant_history: 'Historique des suspensions du participant',\n requiredGames: 'Match(s) Initial(aux)',\n disciplineAdditionalGames: 'Match(s) supplémentaire(s)',\n effectiveRequiredGames: 'Match(s) total(aux)'\n },\n actions: {\n add: 'Suspension',\n },\n messages: {\n playing: 'Joue quand même en étant suspendu',\n unpurgeable: \"Ne purge pas en raison d'une équipe différente\",\n required_games: '%{smart_count} Match |||| %{smart_count} Matchs'\n },\n alerts: {\n automatic: {\n title: 'Suspension automatique',\n message: 'Cette suspension a été automatiquement attribuée par une règle de sanction et ne peut pas être modifiée. Des matchs supplémentaires peuvent être ajoutés par le comité de discipline ou en ajoutant une nouvelle suspension pour le même participant et le même match.',\n },\n },\n values: {\n positionGroup: {\n Player: 'Joueur',\n Staff: 'Personnel'\n },\n code: {\n 'Game Red': '2e Avertissement du match',\n 'Game Red Direct': 'Expulsion du match',\n 'Game Ejection': '1ere Expulsion du match',\n 'Schedule Yellow': \"3e Avertissement dans l'horaire\",\n supplemental: 'Supplémentaire',\n supplemental_long: 'Suspension supplémentaire'\n },\n status: {\n Pending: 'En attente',\n Appealed: 'En contestation',\n Active: 'Actif',\n Completed: 'Complété',\n Cancelled: 'Annulé'\n },\n durationType: {\n Definite: 'Définie',\n Indefinite: 'Indéterminée'\n }\n }\n },\n suspensionDisciplines: {\n name: 'Discipline |||| Disciplines',\n fields: {\n suspensionId: 'Suspension',\n additionalGames: 'Match supplémentaires',\n status: 'Statut',\n durationType: 'Type de durée',\n comments: 'Commentaires',\n },\n labels: {\n edit: 'Modifier la discipline',\n confirm_trigger: 'Déclencher le comité de discipline',\n discipline_committee: 'Comité de discipline',\n },\n messages: {\n confirm_trigger: \"Cela déclenchera le comité de discipline pour qu'il examine cette suspension et prenne les mesures nécessaires. Êtes-vous sûr de vouloir faire cela?\",\n },\n alerts: {\n additionalGames: 'Les matchs supplémentaires ne sont appliqués que lorsque le statut est défini à <strong>Actif</strong>. Pour réduire le nombre total de matchs, utilisez une valeur négative.',\n },\n actions: {\n add: 'Discipline supplémentaire',\n trigger: 'Déclencher le comité de discipline',\n },\n values: {\n status: {\n Pending: 'En attente',\n Active: 'Actif',\n Inactive: 'Inactif',\n },\n durationType: {\n Definite: 'Définie',\n Indefinite: 'Indéterminée'\n }\n },\n validations: {\n must_be_empty: \"Ce champ doit être vide quand type de durée est indéterminée\",\n must_be_greater_than_zero: 'Le nombre total de matchs doit être supérieur à 0',\n },\n notifications: {\n trigger_success: 'Le comité de discipline a été déclenché',\n trigger_error: 'Impossible de déclencher le comité de discipline',\n },\n helpers: {\n totalGames: 'Matchs total: %{totalGames}',\n }\n },\n sanctions: {\n name: 'Sanction |||| Sanctions',\n fields: {\n name: 'Nom',\n code: 'Code',\n order: \"Ordre d'affichage\",\n priority: 'Priorité',\n sectionId: 'Section',\n parentId: 'Parent',\n accumulationCount: \"Compte d'accumulation\",\n positionGroups: 'Groupes de position',\n isActive: 'Actif',\n },\n labels: {\n card: {\n title: \"Règles de sanction\",\n subtitle: \"Règles d'accumulations de sanction pour déclencher une suspension automatique lorsque les conditions sont remplies sur un ou plusieurs matchs.\"\n },\n edit: 'Modifer la sanction',\n parent_code: 'Code parent',\n parent_office: 'Organisation parent'\n },\n actions: {\n add: 'Ajouter une sanction',\n },\n helpers: {\n parentId: \"Optionnel - Lier cette sanction à une sanction de l'organisation parent\",\n priority: 'Permet de remplacer une sanction de priorité inférieure au sein du même match et pour le même participant. Si plusieurs sanctions ayant la même priorité sont trouvées, elles généreront toutes des suspensions. La priorité par défaut est 1 (la plus élevée).'\n },\n values: {\n positionGroup: {\n Player: 'Joueur',\n Staff: 'Personnel'\n },\n durationType: {\n Definite: 'Définie',\n Indefinite: 'Indéterminée'\n }\n }\n },\n sanctionMembers: {\n name: 'Sanction Member |||| Sanction Members',\n fields: {\n sanctionId: 'Sanction',\n optionId: \"Option de règle\",\n infractionId: 'Infraction'\n },\n labels: {\n card: {\n title: \"Accumulations\",\n subtitle: 'Options de règles ou infractions qui déclenchent une offense.'\n },\n edit: \"Modifier une règle\",\n rule: 'Règle',\n code: 'Code',\n },\n actions: {\n add: 'Ajouter une règle',\n },\n },\n sanctionOffenses: {\n name: 'Offense de sanction |||| Offenses de sanction',\n fields: {\n offense: \"Numéro d'offense\",\n sanctionId: 'Sanction',\n durationType: 'Type de durée',\n games: 'Matchs',\n lastMinutesGames: 'Matchs dernières minutes',\n injuryGames: 'Matchs additionnel blessures',\n injuryDays: 'Jours additionnel blessures',\n days: 'Jours',\n lastMinutesDays: 'Jours dernières minutes',\n requireDisciplineCommittee: 'Nécessite le comité de discipline',\n },\n labels: {\n card: {\n title: 'Offenses',\n subtitle: 'Nombre de matchs pour la suspension générée.'\n },\n edit: 'Modifier une offense',\n },\n actions: {\n add: 'Ajouter une offense',\n },\n helpers: {\n games: 'Nombre de matchs pour la suspension générée.',\n days: \"Nombre de jours pour calculer la date d'expiration de la suspension générée.\",\n lastMinutesGames: \"Nombre de matchs pour la suspension générée si l'infraction s'est produite dans les %{minutes} dernières minutes du match\",\n lastMinutesDays: \"Nombre de jours pour calculer la date d'expiration de la suspension générée si l'infraction s'est produite dans les %{minutes} dernières minutes du match\",\n injuryGames: \"Nombre de matchs additionnel pour la suspension générée si une blessure est survenue lors de l'infraction\",\n injuryDays: \"Nombre de jours additionnel pour calculer la date d'expiration de la suspension générée si une blessure est survenue lors de l'infraction\"\n },\n values: {\n durationType: {\n Definite: 'Définie',\n Indefinite: 'Indéterminée'\n }\n }\n },\n officialClaimDocuments: {\n name: 'Documents de réclamation',\n fields: {\n gameId: 'Match',\n name: 'Nom du document',\n file: 'Fichier'\n },\n labels: {\n delete: 'Supprimer'\n },\n notifications: {\n deleted: 'Ce fichier a été supprimé'\n },\n messages: {\n info_creating_claim: 'Pour ajouter des documents, veuillez compléter, sauvegarder et ouvrir la réclamation.'\n },\n },\n officialClaims: {\n name: 'Réclamations',\n fields: {\n participantId: 'Participant',\n gameId: 'Match',\n officeId: 'Organisation',\n amount: 'Montant',\n distance: 'Distance',\n type: 'Type',\n note: 'Note',\n status: 'Statut',\n roundtrip: 'Aller-retour',\n addressId: 'Adresse',\n createdAt: 'Réclamé le',\n addressFrom: 'Adresse de départ',\n addressTo: \"Adresse d'arrivée\",\n intermediateStop: 'Adresse intermédiaire',\n hasIntermediateStop: 'Arrêt intermédiaire',\n calculateDistance: 'Calculer la distance',\n claimSettingId: 'Paramètre de réclamation'\n },\n labels: {\n card: {\n title: 'Réclamations'\n },\n edit: 'Modifier la réclamation |||| Modifier les réclamations',\n 'Pending': 'Rendre la réclamation en attente |||| Rendre les réclamations en attente',\n 'Approved': 'Approuver la réclamation |||| Approuver les réclamations',\n 'Declined': 'Refuser la réclamation |||| Refuser les réclamations',\n },\n values: {\n type: {\n 'Driver': 'Conducteur',\n 'Passenger': 'Passager',\n 'Breakfast': 'Déjeuner',\n 'Lunch': 'Dîner',\n 'Dinner': 'Souper',\n 'Travel': 'Déplacement',\n 'Expense': 'Dépense',\n 'Per Diem': 'Per Diem'\n },\n status: {\n 'Approved': 'Approuvée',\n 'Pending': 'En attente',\n 'Declined': 'Refusée',\n }\n },\n actions: {\n add: 'Réclamation',\n 'Pending': 'En attente',\n 'Approved': 'Approuver',\n 'Declined': 'Refuser'\n },\n notifications: {\n 'Pending': 'Réclamation en attente |||| Réclamations en attentes',\n 'Approved': 'Réclamation approuvée |||| Réclamations approuvées',\n 'Declined': 'Réclamation refusée |||| Réclamations refusées',\n pending_error: 'Impossible de rendre la réclamation en attente |||| Impossible de rendre les réclamations en attentes',\n approved_error: \"Impossible d'approuver la réclamation |||| Impossible d'approuver les réclamations\",\n declined_error: 'Impossible de refuser la réclamation |||| Impossible de refuser les réclamations'\n },\n helpers: {\n 'Pending': 'Voulez-vous vraiment mettre cette réclamation en attente?',\n 'Approved': \"Approuver une réclamation créera une transaction correspondante.\",\n 'Declined': \"Voulez-vous vraiment refuser cette réclamation?\",\n no_claim_types: 'Aucun type de réclamations disponible pour cet assignateur',\n distance: 'La distance sera automatiquement calculée lorsque vous cliquerez sur calculer la distance; les %{smart_count} premiers km sont automatiquement exclus',\n excluded_amount: 'après %{distance} km',\n },\n validations: {\n claim_approved: 'Impossible de modifier une réclamation approuvée',\n },\n messages: {\n claim_unavailable: 'Les réclamations seront activées seulement après la partie'\n }\n },\n officialTransactions: {\n name: \"Transactions\",\n fields: {\n participantId: 'Participant',\n gameId: 'Match',\n officeId: 'Organisation',\n date: 'Date',\n type: 'Type',\n subtype: 'Sous-type',\n amount: 'Montant',\n payPeriodId: 'Période de paie',\n description: 'Description',\n gameScheduleId: 'Horaire',\n },\n values: {\n type: {\n \"Base\": 'Base',\n \"Travel\": 'Frais de déplacement',\n \"Per Diem\": 'Per diem',\n \"Evaluation\": \"Frais d'évaluation\",\n \"Exhibition Game\": 'Match hors concours',\n \"Internship\": 'Frais de stage',\n \"Withhold\": 'Retenue de paiement',\n \"Other\": 'Autre paiement'\n },\n subtype: {\n 'Driver': 'Conducteur',\n 'Passenger': 'Passager',\n 'Breakfast': 'Déjeuner',\n 'Lunch': 'Dîner',\n 'Dinner': 'Souper',\n 'Travel': 'Déplacement',\n 'Expense': 'Dépense',\n 'Per Diem': 'Per Diem'\n }\n },\n messages: {\n select_all: 'Tout sélectionner',\n unselect_all: 'Tout déselectionner',\n group_by_game: 'Grouper par match',\n group_by_participant: 'Grouper par participant',\n },\n filters: {\n startTime: 'Date de début',\n endTime: 'Date de fin',\n },\n notifications: {\n assigned_pay_period: 'Transactions ajoutées à la période de paie',\n assign_pay_period_error: \"Impossible d'ajouter à la période de paie\",\n pay_period_removed: 'Période de paie retirée',\n remove_pay_period_error: 'Impossible de retirer la période de paie',\n },\n actions: {\n add: 'Transaction',\n edit: 'Modifier la transaction',\n assign_pay_period: 'Attribuer une période de paie',\n remove_pay_period: 'Retirer la période de paie'\n },\n validations: {\n from_pay_period_closed: \"Impossible de déplacer une transaction hors d'une période de paie fermée\",\n pay_period_closed: \"Impossible de déplacer une transaction dans une période de paie fermée\"\n }\n },\n payPeriods: {\n name: 'Période de paie |||| Périodes de paie',\n fields: {\n officeId: 'Organisation',\n name: 'Nom',\n startDate: 'Date de début',\n endDate: 'Date de fin',\n isClosed: 'Fermé',\n closedAt: 'Date de fermeture',\n },\n labels: {\n add_transactions: 'Ajouter des transactions',\n close_period: 'Fermer la période de paie',\n dates: 'Dates',\n card: {\n title: 'Périodes de paie',\n },\n status: 'Statut',\n active: 'Actif',\n closed: 'Fermé (%{date})',\n },\n actions: {\n add: 'Période de paie',\n edit: 'Modifier la période de paie',\n add_transactions: 'Transactions',\n },\n filters: {\n isClosed: 'Fermé',\n },\n alerts: {\n period_closed: 'Période fermée',\n period_active: 'Période active',\n period_closed_message: 'Cette période a été clôturée le %{date} et ne peut plus être modifiée.',\n period_active_message: 'Lorsque toutes les transactions sont ajoutées, fermez la période pour empêcher les modifications.',\n },\n helpers: {\n close_period: 'La fermeture de la période de paie est irréversible et les transactions seront verrouillées.',\n },\n notifications: {\n pay_period_close: 'Period fermé',\n close_pay_period_error: 'Impossible de fermer la période de paie'\n },\n validations: {\n pay_period_closed: \"Impossible d'apporter des modifications à une période de paie fermée\"\n },\n values: {\n type: {\n \"Base\": 'Base',\n \"Travel\": 'Frais de déplacement',\n \"Per Diem\": 'Per diem',\n \"Evaluation\": \"Frais d'évaluation\",\n \"Exhibition Game\": 'Match hors concours',\n \"Internship\": 'Frais de stage',\n \"Withhold\": 'Retenue de paiement',\n \"Other\": 'Autre paiement'\n },\n subtype: {\n 'Driver': 'Conducteur',\n 'Passenger': 'Passager',\n 'Breakfast': 'Déjeuner',\n 'Lunch': 'Dîner',\n 'Dinner': 'Souper',\n }\n }\n },\n gameIncidents: {\n name: \"Rapport d'incident\",\n fields: {\n penaltyId: 'Pénalité',\n description: 'Description',\n injured: 'Blessé',\n returnedToGame: 'Retourné au match',\n status: 'Statut',\n createdAt: 'Création',\n updatedAt: 'Mise à jour'\n },\n labels: {\n participantId: 'Participant',\n edit: 'Modifier un incident',\n injury: 'Blessure',\n returned: 'Retourné',\n notInjured: \"Pas blessé\"\n },\n actions: {\n add: 'Ajouter un incident',\n },\n },\n gamePurges: {\n name: 'Matchs purgés',\n fields: {\n gameId: 'Match',\n teamId: 'Équipe',\n participantId: 'Participant',\n suspensionId: 'Suspension'\n },\n labels: {\n games_purged: 'Matchs purgés'\n },\n messages: {\n no_results: 'Aucun matchs purgés'\n }\n },\n gamepenalties: {\n name: 'Pénalité |||| Pénalités',\n fields: {\n gameId: 'Match',\n teamId: 'Équipe',\n participantId: 'Participant',\n infraction: 'Infraction',\n gameTime: 'Temps',\n },\n },\n gameMessages: {\n name: 'Message |||| Messages',\n fields: {\n type: 'Type',\n },\n labels: {\n delete: 'Supprimer le message',\n },\n messages: {\n no_messages: 'Aucun message pour le moment',\n },\n helpers: {\n notification_sent_to: 'Une notification sera envoyée aux %{recipients} de ce match et aux officiels du match assignés.',\n },\n notifications: {\n send_messages_error: \"Impossible d'envoyer le message\",\n deleted: 'Message supprimé',\n delete_error: 'Impossible de supprimer le message',\n },\n values: {\n type: {\n League: 'Ligue',\n Officiating: 'Officiel',\n }\n }\n },\n scoresheets: {\n name: 'Feuille de match |||| Feuilles de match',\n fields: {\n gameId: 'Match',\n scoresheet: 'Feuille de match',\n },\n actions: {\n add_penalties: 'Pénalités',\n add_goals: 'Buts',\n },\n labels: {\n print: 'Imprimer',\n add_extra: 'Ajouter un extra',\n add_extra_same_office: 'Même organisation',\n photos: 'Photos',\n suspended: 'Suspendu',\n summary: 'Sommaire',\n transferred: 'Muté',\n add_penalties: 'Ajouter pénalités',\n add_goals: 'Ajouter buts',\n edit_penalty: 'Modifier pénalité',\n edit_goal: 'Modifier but',\n penalties: 'Pénalités',\n goals: 'Buts',\n players: 'Joueurs',\n goalies: 'Gardiens de but',\n coach: 'Entraîneur',\n bench_staff: 'Personnel de banc',\n official: 'Officiel',\n complete: 'Compléter',\n undo_approval: 'Désapprouver',\n signatory: 'Signataire',\n sign_and_approve: \"Signer et approuver l'alignement\",\n start_game: 'Démarrer le match',\n approve_game: 'Approuver le match',\n certify: 'Certifier le match |||| Certifier les matchs',\n undo_certify: 'Décertifier',\n more_info: \"Plus d'infos\",\n less_info: \"Moins d'infos\",\n signed: 'Signé',\n start: 'Début',\n ended: 'Terminé',\n period: 'Période',\n official_attendance: 'Présence des officiels',\n additional_emails: 'Adresse courriels additionnels',\n clock: 'Temps',\n reset_scoresheet: 'Réinitialiser la feuille de match',\n home: {\n lineup: 'Local',\n goal: 'But - Local',\n penalty: 'Pénalité - Local',\n goalie: 'Gardien - Local',\n },\n away: {\n lineup: 'Visiteur',\n goal: 'But - Visiteur',\n penalty: 'Pénalité - Visiteur',\n goalie: 'Gardien - Visiteur',\n },\n penalty: {\n offender: 'Joueur fautif',\n served_by: 'Servi par',\n infraction: 'Infraction',\n duration: 'Durée',\n game_time: 'Temps',\n start_time: 'Temps de début',\n inning: 'Manche',\n half: 'Demi',\n delete: 'Supprimer la penalité',\n delete_additional: 'Supprimer les penalités',\n accumulation: \"Règle d'accumulation\",\n },\n goal: {\n type: 'Type',\n scored_by: 'Marqué par',\n assisted_by: 'Assisté par',\n game_time: 'Temps',\n delete: 'Supprimer le but',\n },\n edit_score: 'Éditer le pointage',\n add_notes_title: 'Ajouter des notes',\n add_notes: 'Notes',\n edit_notes_title: 'Éditer les notes',\n edit_notes: 'Notes',\n scoresheet_notes: 'Notes de match',\n admin_notes: \"Notes d'officiels\",\n period_settings: 'Périodes',\n periods: {\n 1: '1re',\n 2: '2e',\n 3: '3e',\n OT: 'Prolongation',\n },\n },\n messages: {\n your_team_roster: \"votre cahier d'équipe\",\n lineup_change_apply: \"Toute modification de l'alignement ne s'appliquera qu'à ce match et n'affectera pas les prochains matchs de\",\n lineup_change_apply_part_2: \"ou d'autres feuilles de match.\",\n select_all: 'Tout sélectionner',\n unselect_all: 'Tout déselectionner',\n show_more: 'Afficher plus',\n show_registrations: 'Afficher les inscriptions',\n minimum_not_met: 'Minimum non atteint',\n over_limit: 'Au-dessus de la limite',\n lineup_approved_by: 'Alignement approuvé par',\n start_game: 'Êtes-vous sûr de vouloir commencer le match?',\n end_game: \"A quelle temps dans le match la partie a t'elle terminée?\",\n confirm_sign: 'En signant, je confirme que mon alignement est complet et conforme à la réglementation.',\n confirm_sign_game: 'En approuvant, je confirme que le match a été rempli correctement.',\n additional_emails: \"Les feuilles de match sont automatiquement envoyées au personnel de l'équipe, aux administrateurs de la ligue et aux officiels du match\",\n confirm_certify: 'Voulez-vous vraiment certifier ce match? |||| Voulez-vous vraiment certifier ces matchs?',\n undo_approval: {\n title: 'Désapprouver la feuille de match',\n message: 'La feuille de match redeviendra incomplète et le marqueur pourra apporter des modifications.',\n },\n undo_certify: {\n title: 'Décertifier la feuille de match',\n message: \"Cela permettra à la ligue d'apporter des modifications à la feuille de match et permettra à l'officiel d'annuler l'approbation.\",\n },\n reset_scoresheet: \"Ceci réinitialisera la feuille de match. Les officiels et l'horaire ne seront pas affectés.\",\n put_in_goalie: 'Mis dans le filet',\n empty_net: 'Filet vide',\n assist_abbr: 'Passes',\n served_abbr: 'Servi',\n shg: 'IN',\n ppg: 'AN',\n eng: 'FD',\n psg: 'Tir de pénalité',\n og: 'But contre son camp',\n successful_game_end: 'Match terminé',\n successful_game_approve: 'Match approuvé',\n successful_game_undo_approval: 'Match désapprouvé',\n successful_game_undo_certified: 'Match décertifié',\n successful_game_certify: 'Match certifié',\n successful_game_start: 'Match commencé',\n successful_save_flags: 'Notifications sauvegardées',\n successful_save_score: 'Pointage sauvegardé',\n successful_save_notes: 'Notes sauvegardé',\n successful_update_settings: 'Paramètres mis à jour',\n loading_flags: 'Chargement des notifications',\n penalty: {\n added: `Pénalité ajoutée |||| %{smart_count} pénalités ajoutés`,\n not_added: \"Aucune pénalité n'a été ajoutée\",\n updated: `La pénalité a été mis à jour |||| %{smart_count} pénalités ont été mis à jour`,\n not_updated: \"La pénalité n'a pas été mis à jour\",\n delete_confirm: 'Voulez-vous vraiment supprimer cette pénalité?',\n delete_additional: '%{smart_count} pénalité supplémentaire sera supprimée. |||| %{smart_count} pénalités supplémentaires seront supprimées.',\n subsequent_penalties: 'Les pénalités subséquentes existantes seront affectées',\n subsequent_penalties_edit: 'Seul le temps peut être modifié pour les pénalités subséquentes'\n },\n goal: {\n added: `But ajouté |||| %{smart_count} buts ajoutés`,\n not_added: \"Aucun but n'a été ajouté\",\n updated: `Le but a été mis à jour |||| %{smart_count} buts ont été mis à jour`,\n not_updated: \"Le but n'a pas été mis à jour\",\n delete_confirm: 'Voulez-vous vraiment supprimer ce but?'\n }\n },\n alerts: {\n early_lineup_entry: \"L'alignement ne peut pas être entré tant que le match précédent n'est pas terminé ou après le %{date}. Vous pouvez imprimer votre cahier d'équipe en avance.\",\n duplicate_batting_order: \"Certains joueurs possèdent le même ordre de frappe\",\n unselected_suspended_players: 'Les membres suspendus doivent être sélectionnés',\n cannot_remove_members: 'Impossible de retirer les membres qui ont des buts, des pénalités ou des nouvelles suspensions',\n lineup: 'Pour pouvoir remplir la feuille de match, les alignements doivent être complétés.',\n start: \"Le match n'est pas encore commencé.\",\n approve: \"Le match n'est pas encore complété.\",\n completed: 'Feuille de match complétée.',\n not_certified: \"Cette feuille de match n'a pas été certifiée.\",\n certified: 'Feuille de match certifiée.',\n missing_incidents: \"Il y a des pénalités majeures qui manquent des rapports d'incident\",\n not_authorized: \"Vous n'êtes pas autorisé à gérer les alignements pour ce match.\",\n load_error: 'Impossible de charger la feuille de match',\n lineup_change_post_game_started: \"L'alignement ne peut pas être changé une fois que le match a commencé, sauf par le marqueur.\",\n unauthorized_manage_lineup: \"Vous n'êtes pas autorisé à gérer cet alignement.\",\n team_has_no_members: \"Cette équipe n'a pas de membres\",\n lineup_throwsinnings: \"Pour pouvoir remplir les manches et balles lancées, l'alignement de cette équipe doit être complété et signé.\",\n lineup_throwsinnings_certified: \"Les manches et balles lancées ne peuvent plus être modifiées après la certification d'un match\",\n or_registrations: 'ou inscriptions',\n no_members_match_filters: 'Aucun membre ne correspond à votre filtre',\n cannot_reset: 'Les feuilles de match complétées ne peuvent pas être réinitialisées',\n missingIncidents: {\n title: \"Rapports d'incident manquants\",\n message: \"Certaines pénalités nécessitent un rapport d'incident qui doit être soumis avant que le match ne puisse être terminé.\",\n },\n loading: {\n scoresheet: 'Chargement de la feuille de match...',\n validatingMembers: 'Validation des membres'\n },\n requirements: {\n title: \"Exigences d'alignement\",\n players: {\n min: 'Minimum de %{min} joueurs',\n max: \"Maximum de %{max} joueurs\",\n missing_jersey_number: \"Il manque à certains joueurs un numéro de chandail\",\n duplicate_jersey_number: \"Certains joueurs ont le même numéro de chandail\",\n },\n skaters: {\n min: 'Minimum de %{min} joueurs',\n max: \"Maximum de %{max} joueurs\",\n },\n goalies: {\n min: 'Minimum de %{min} gardiens',\n max: \"Maximum de %{max} gardiens\",\n },\n staff: {\n min: 'Minimum de %{min} membres du personnel',\n max: \"Maximum de %{max} membres du personnel\",\n }\n },\n },\n values: {\n periods: {\n 1: '1',\n 2: '2',\n 3: '3',\n OT: 'Prolongation',\n SO: 'Fusillade'\n },\n half: {\n first: 'Première moitié',\n second: 'Deuxième moitié',\n }\n },\n validations: {\n too_many_assists: 'Numéro de passes est trop élevé',\n out_of_range: 'Temps hors de la période',\n invalid_extra: 'Les minutes supplémentaires sont un nombre invalide',\n start_time_before_game_time: \"Le temps de début est avant le temps de la penalité\",\n confirm: 'Je comprends que cette action ne peut pas être annulée'\n },\n helpers: {\n scoresheet_notes: 'Ces notes seront visibles publiquement sur la feuille de match',\n admin_notes: 'Ces notes seront réservées aux marqueurs, aux officiels et aux administrateurs uniquement',\n },\n notifications: {\n reset: 'La feuille de match a été réinitialisée avec succès',\n reset_error: \"La reinitialisation de la feuille de match n'a pas fonctionné\",\n errors: {\n cannot_reset: 'Les feuilles de match complétées ne peuvent pas être réinitialisées',\n }\n }\n },\n gameDocuments: {\n name: 'Document |||| Documents',\n fields: {\n name: 'Nom',\n type: 'Type'\n },\n values: {\n type: {\n Lineup: \"Alignement d'équipe\",\n Scoresheet: 'Feuille de match',\n Other: 'Autre',\n }\n },\n labels: {\n file: 'Fichier',\n delete: 'Supprimer le document',\n },\n actions: {\n add: 'Ajouter un document',\n edit: \"Modifier le document\",\n },\n messages: {\n max_size: 'Taille maximale de téléchargement du fichier: 10 Mo'\n },\n notifications: {\n deleted: 'Document supprimé',\n delete_error: 'Impossible de supprimer le document',\n }\n },\n attributeTypes: {\n name: \"Type d'attribut |||| Types d'attributs\",\n fields: {\n name: 'Nom',\n officeId: 'Organisation',\n type: \"Type d'attribut\",\n targetType: 'Type cible',\n valueType: 'Type de valeur',\n options: 'Options',\n min: 'Minimum',\n max: 'Maximum',\n },\n helpers: {\n valueType: {\n has_data: \"Impossible de modifier le type de valeur lorsqu'il y a des données liés\",\n },\n optional: \"Optionnel\"\n },\n validation: {\n min: \"Le minimum doit être plus petit que le maximum\",\n max: \"Le maximum doit être plus grand que le minimum\",\n no_dropdown_options: \"Au moins une option est requise\",\n },\n type: {\n Officiating: 'Officiel',\n League: 'Ligue',\n },\n targetType: {\n Participant: 'Participant',\n Venue: 'Complexe',\n Surface: 'Surface',\n Team: 'Équipe',\n },\n valueType: {\n Dropdown: 'Liste déroulante',\n Number: 'Numéro',\n Text: 'Champ texte',\n },\n actions: {\n add: \"Ajouter un type d'attribut\",\n },\n labels: {\n card: {\n title: \"Attributs\",\n subtitle: \"Les assignateurs peuvent utiliser des attributs comme filtre lors d'assignation de match.\",\n },\n edit: \"Modifier l'attribut\",\n },\n },\n gameBrackets: {\n name: 'Bracket',\n labels: {\n edit: 'Modifier les têtes'\n },\n actions: {\n edit: 'Modifier les têtes'\n },\n messages: {\n edit_seeds: \"La modification des têtes de séries mettra à jour les commentaires du match pour l'adapter aux nouvelles positions.\"\n },\n fields: {\n bracket: {\n view: 'Voir la bracket',\n link: 'Bracket',\n },\n seeds: {\n title: 'Têtes de série',\n away: 'Équipe Visiteuse',\n home: 'Équipe Locale'\n }\n }\n },\n attributeValues: {\n name: 'Attribut |||| Attributs',\n fields: {\n attributeId: \"Nom\",\n officeId: 'Organisation',\n value: \"Valeur\",\n },\n actions: {\n add: 'Ajouter un attribut',\n },\n labels: {\n card: {\n title: \"Attributs\",\n subtitle: \"\",\n },\n edit: \"Modifier la valeur de l'attribut\",\n attributes_file: \"Fichier d'attributs\",\n import_attributes: 'Importer des attributs'\n },\n validations: {\n types: {\n Number: 'Certaines lignes ont des nombre non valide',\n Dropdown: 'Certaines lignes ont des valeurs qui ne sont pas dans les options de la liste déroulante'\n }\n },\n helpers: {\n match_existing_participant: 'Ce numéro de membre est utilisé pour correspondre à un participant existant.',\n },\n messages: {\n drop_attributes_csv: \"Déposez votre fichier d'attributs (.csv) ici\",\n import_tool_attributes: \"Pour utiliser cet outil d'importation, téléchargez un fichier CSV avec des colonnes pour le numéro de membre unique de l'officiel, et les types d'attributs de l'organisation respectifs.\",\n import_tool_warning: \"Cet outil d'importation mettra à jour les valeurs d'attribut officielles existantes dans votre organisation.\",\n },\n alerts: {\n caution: 'Utiliser avec précaution',\n },\n notifications: {\n import_attributes_error: \"Impossible d'importer les attributs\",\n attributes_updated: \"%{smart_count} attribut a été mis à jour. |||| %{smart_count} attributs ont été mis à jour.\",\n }\n },\n externalProviders: {\n name: 'Fournisseurs externes',\n fields: {\n service: 'Service',\n provider: 'Nom du fournisseur',\n link: 'Lien',\n externalId: 'ID externe',\n },\n actions: {\n add: 'Ajouter un fournisseur',\n },\n labels: {\n edit: 'Modifier le fournisseur',\n services: {\n Streaming: 'Diffusion',\n Ticketing: 'Billetterie',\n Stats: 'Statistiques',\n }\n },\n messages: {\n no_results: 'Aucun fournisseur trouvé',\n deleted: 'Fournisseur supprimé',\n }\n },\n pools: {\n name: 'Pool |||| Pools',\n fields: {\n name: 'Nom',\n },\n actions: {\n add: 'Ajouter un pool',\n },\n labels: {\n card: {\n title: 'Pools',\n },\n edit: 'Modifier le pool',\n },\n messages: {\n all_pools: 'Tout les pools',\n select_highlight: 'Sélectionnez un pool pour la mettre en surbrillance dans la matrice'\n },\n tooltips: {\n pools_unavailable: \"Les « Pools » ne sont pas activés dans cette organisation. Cette organisation utilise les « Groupes » comme type de regroupement d'équipes.\",\n groups_unavailable: \"Les « Groupes » ne sont pas activés dans cette organisation. Cette organisation utilise les « Pools » comme type de regroupement d'équipes.\",\n }\n }\n },\n components: {\n calendar: {\n values: {\n views: {\n Day: 'Jour',\n Week: 'Semaine',\n Month: 'Mois',\n Season: 'Saison',\n },\n game_list_filters: {\n drafts_only: 'Matchs brouillons seulement',\n drafts_no_dates: 'Matchs brouillons sans dates',\n drafts_no_times: 'Matchs brouillons sans heures',\n all_published_games: 'Tous les matchs publié',\n all_games: 'Tous les matchs'\n }\n },\n labels: {\n unschedule: 'Déprogrammer le match',\n selected_game: 'Match sélectionné',\n remove_date: 'Supprimer la date',\n },\n settings: {\n arena_slots: 'Plages horaires',\n away_arena_slots: 'Plages horaires (Visiteur)',\n team_names: \"Noms d'équipe\",\n condensed_view: 'Afficher la vue condensée'\n },\n messages: {\n select_game: 'Sélectionnez un match dans la liste sur votre gauche',\n no_home_surface: \"Aucune surface locale n'a été configurée pour cette équipe\",\n no_result: 'Aucune surface trouvée avec le filtre de taille de surface sélectionné',\n schedule_game: \"Aucune date n'a été programmée pour le match sélectionné\",\n unschedule_game: 'Etes-vous sûr de vouloir annuler la programmation de ce match?',\n remove_time_field: \"Êtes-vous sûr de vouloir supprimer l'heure et la surface de ce match?\",\n remove_date: 'Êtes-vous sûr de vouloir supprimer la date de ce match?',\n no_schedule_teams: `Aucune équipe trouvée dans l'horaire`,\n },\n tooltips: {\n scheduled_games: '%{count} Match planifié',\n not_scheduled_games: '%{count} Match non planifié',\n scheduled_away_games: '%{count}/%{totalCount} Match visiteur planifié',\n scheduled_home_games: '%{count}/%{totalCount} Match local planifié',\n schedule: 'Programmer le match',\n unschedule: 'Déprogrammer le match',\n both_teams: 'Les deux équipes',\n home_team: 'Équipe locale',\n away_team: 'Équipe visiteuse',\n draft_game: 'Match brouillon',\n game: 'Match',\n },\n validations: {\n end_before_start: \"La date de fin doit être après la date de début\",\n start_after_end: \"La date de début doit être avant la date de fin\",\n }\n },\n search: {\n title: 'Mes Recherches',\n save: 'Enregistrer la recherche en cours',\n remove: 'Supprimer la recherche enregistrée',\n specify_name: 'Spécifiez un nom pour votre recherche',\n loading_error: \"Une erreur s'est produite lors du chargement de vos recherches\",\n },\n login: {\n scorekeeper: 'Marqueur',\n member: 'Membre',\n admin: 'Administrateur',\n edit: 'Modifier',\n messages: {\n im_a: 'Je suis...',\n unauthorized: \"Veuillez contacter votre administrateur de ligue pour plus d'informations.\",\n redirect: \"Si vous n'êtes pas redirigé vers la feuille de match, vous pouvez \",\n helper: {\n scorekeeper: \"Utilisez le numéro du match et l'identifiant de l'équipe locale pour accéder à la feuille de match sans votre compte\",\n member: \"Utilisez votre compte pour gérer vos listes de match, vos alignements d'équipes, et plus encore...\",\n },\n offline: {\n you: \"Vous n'êtes pas connecté\",\n reconnect: 'Une fois que vous aurez reconnecté votre appareil en ligne, vous pourrez vous connecter ici.',\n },\n storage: {\n unavailable: 'Stockage indisponible',\n cookies_disabled: 'Il semble que vos cookies soient désactivés.',\n use_browser_storage: `${appName} utilise le stockage du navigateur pour l'intégrité et l'authentification de la feuille de match.`,\n enable_cookies: 'Pour continuer, veuillez activer les cookies/le stockage dans les paramètres de votre navigateur, puis réessayez.',\n },\n sso: {\n link_error: \"Une erreur s'est produite lors de la liaison de votre compte\",\n link_success: 'Compte lié avec succès',\n }\n },\n validation: {\n invalid_game_number: 'Le numéro de match est introuvable',\n invalid_game_number_long: \"Le numéro de match est introuvable. Veuillez vérifier l'horaire pour confirmer.\",\n invalid_team_id: \"Le numéro de l'équipe locale est incorrect\",\n invalid_team_id_long: \"Le numéro de l'équipe locale est incorrect. Assurez-vous d'avoir le bon numéro de match et la bonne équipe.\",\n missing_home_or_away_team: 'Équipe locale ou visiteur manquante pour le match',\n missing_home_or_away_team_long: 'Équipe locale ou visiteur manquante pour le match.',\n game_cancelled: 'Match annulé',\n game_cancelled_long: \"Ce match a été annulé. Veuillez vérifier l'horaire pour confirmer.\",\n unsupported_sport: 'Sport non supporté',\n unsupported_sport_long: 'La comptabilisation des points ne concerne que le hockey.',\n game_already_completed: 'Match déjà terminé',\n game_already_completed_long: 'Ce match est déjà terminé. Pour les corrections, veuillez contacter votre association.',\n },\n alerts: {\n sso_link: 'Lier mon compte Spordle My Account',\n },\n actions: {\n link_account: 'Lier mon compte',\n },\n chip: {\n sso: 'Spordle My Account'\n },\n tooltips: {\n sso: 'Compte enregistré avec Spordle My Account',\n }\n },\n register: {\n participant: 'Numéro de membre du Participant',\n hockey_identity: 'Votre Identité',\n registration: `Inscription ${appName}`,\n review: 'Révision',\n link_invitation: 'Invitation pour créer le lien',\n messages: {\n link: 'Vous associez un participant au compte suivant:',\n correct_account: \"S'il ne s'agit pas du bon compte, vous pouvez vous déconnecter ci-dessous.\",\n email_login: `Votre adresse courriel sera votre login pour accéder ${appName}.`,\n },\n validation: {\n account_exists: 'Vous avez déjà un compte. Vous pouvez réinitialiser votre mot de passe ci-dessous ou contacter votre ligue ou assignateur',\n already_linked: 'Un compte est déjà lié à ce participant. Vous devrez peut-être contacter votre ligue ou votre assignateur',\n participant_invalid: 'Impossible de vous trouver avec cet ID. Vous devrez peut-être réessayer plus tard',\n participant_mismatch: 'Impossible de faire correspondre votre identifiant et votre nom. Vous devrez peut-être contacter votre ligue ou votre assignateur',\n ineligible: \"Seuls les officiels et le personnel de l'équipe peuvent s'inscrire\",\n token_invalid: 'Votre invitation est non valide. Veuillez demander une nouvelle invitation à votre ligue ou à votre assignateur',\n },\n },\n reset_password: {\n messages: {\n invalid_reset_link: \"Votre lien de réinitialisation de mot de passe n'est plus valide.\",\n check_email: 'Vérifiez votre boîte de réception',\n check_email_error: \"Si vous ne recevez pas de courriel sous peu, vous devrez peut-être essayer avec une autre adresse courriel ou contacter votre ligue pour obtenir de l'aide.\",\n },\n },\n goalie_shots_against: {\n name: 'Gardiens - Tirs contre',\n labels: {\n goalie: 'Gardien',\n shots: 'Tirs',\n edit_shots: 'Éditer les tirs',\n periods: {\n 1: '1re période',\n 2: '2e période',\n 3: '3e période',\n OT: 'Prolongation',\n }\n },\n messages: {\n enter_shots: \"Entrez les tirs contre chaque gardien de but qui a joué ce match. Tous les matchs joués doivent être saisis pour que la statistique %Arr s'affiche afin d'éviter de fausser les statistiques de manière incorrecte.\",\n blank: \"Les périodes peuvent être laissées vide si le gardien n'a pas joué pendant cette période.\",\n error_loading_goalies: \"Une erreur s'est produite lors du chargement des gardiens.\",\n },\n notifications: {\n updated: 'Les tirs ont été mis à jour',\n }\n },\n throws_innings: {\n name: 'Balles et manches lancées',\n labels: {\n player: 'Joueur',\n throws: 'Balles lancées',\n innings: 'Manches lancées',\n edit: 'Modifier les balles et manches lancées',\n throws_today: 'BLJ',\n throws_weekly: 'BL7J',\n innings_today: 'MLJ',\n innings_weekly: 'ML7J',\n innings_remaining: '⚾ %{count} manche(s) restante(s)',\n cannot_throw: '🚫 Ne peut lancer dans ce match',\n resting: '💤 Repos',\n consecutive_days: 'Limite 2 jours consécutif dépassée',\n over_innings_limit: 'Limite de manche dépassée par'\n },\n messages: {\n error_saving: \"Une erreur s'est produite lors de la sauvegarde des balles et manches lancées.\",\n },\n notifications: {\n updated: 'Les balles et manches lancées ont été mis à jour',\n }\n },\n office_selector: {\n labels: {\n title: 'Sélectionnez un organisation',\n },\n actions: {\n open: 'Sélectionnez un organisation',\n }\n },\n exporter: {\n actions: {\n details_csv: 'Détails en CSV',\n details_xlsx: 'Détails en Excel',\n summary_csv: 'Sommaire en CSV',\n summary_xlsx: 'Sommaire en Excel',\n export_csv: 'Exporter en CSV',\n export_xlsx: 'Exporter en Excel'\n },\n transactions_exporter: {\n labels: {\n transactions: 'Transactions',\n },\n reports: {\n details: {\n title: 'Détails des transactions',\n columns: {\n pay_period: 'Période de paie',\n game_number: 'Numéro de match',\n game_time: 'Date du match',\n surface: 'Surface',\n schedule_name: 'Horaire',\n schedule_office_name: 'Ligue',\n first_name: 'Prénom',\n last_name: 'Nom',\n member_id: 'Numéro de membre',\n position: 'Position',\n assigner: 'Assignateur',\n transaction_date: 'Date de transaction',\n type: 'Type',\n subtype: 'Sous-type',\n amount: 'Montant'\n }\n },\n summary: {\n title: 'Sommaire des transactions',\n columns: {\n first_name: 'Prénom',\n last_name: 'Nom',\n member_id: 'Numéro de membre',\n travel_fees: 'Frais de déplacement',\n officiating_fees: \"Frais d'arbitrage\",\n other_fees: 'Autres frais',\n total_fees: 'Total des frais'\n }\n }\n }\n },\n penalties_exporter: {\n labels: {\n penalties: 'Pénalités',\n },\n reports: {\n summary: {\n title: 'Sommaire des Pénalités',\n columns: {\n first_name: 'Prénom',\n last_name: 'Nom',\n member_id: 'Numéro de membre',\n team_name: 'Équipe',\n team_id: \"Numéro de l'équipe\",\n schedule_name: 'Horaire',\n game_number: 'Numéro de match',\n game_date: 'Date du match',\n infraction_code: 'Code',\n infraction: 'Infraction',\n game_time: 'Temps',\n start_time: 'Heure de début',\n end_time: 'Heure de fin',\n served_by_name: 'Servi par',\n served_by_id: 'Servi par (numéro de membre)',\n }\n }\n },\n },\n },\n feature_flags: {\n title: 'Feature Flags',\n alerts: {\n branch_level: 'Spordle Play a aussi des Feature Flags au niveau de la branche. Ces flags peuvent être trouvés sur les paramètres de la branche sur l\\'organisation.',\n }\n },\n roles_and_permissions: {\n title: 'Rôles et Permissions',\n labels: {\n scopes: 'Scopes',\n automatic: 'Automatique',\n },\n alerts: {\n account_permissions: \"Les autorisations de compte sont composées d'un principal (participants), d'une cible (organisation, horaire, ou équipe) et d'un rôle. Ces trois parties doivent être prises en compte lors de l'évaluation de l'accès. Par exemple, si vous avez accès à la gestion des horaires, vous ne pouvez pas gérer tous les horaires, uniquement les horaires compris dans la cible de votre autorisation.\",\n }\n },\n scheduleStats: {\n titles: {\n ParticipantScheduleStats: 'Statistiques des joueurs',\n TeamScheduleStats: 'Classement des équipes',\n },\n labels: {\n type: 'Type',\n ranking: 'Rang',\n ranking_og: \"Rang d'origine\",\n poolRanking: 'Rang',\n poolRanking_og: \"Rang d'origine\",\n manualRanking: 'Rang manuel',\n manualPoolRanking: 'Rang manuel',\n standingsType: 'Type de classement',\n no_pools: 'Aucun pool',\n },\n values: {\n type: {\n Skater: 'Joueurs',\n Goalie: 'Gardiens',\n },\n standingsType: {\n Overall: 'Général',\n Pools: 'Pools',\n }\n },\n alerts: {\n manual_standings: \"L'utilisation du classement manuel remplacera le classement régulier affiché sur les pages web publics.\"\n },\n actions: {\n edit_manual_standings: 'Modifier le classement manuel',\n },\n notifications: {\n manual_standings_updated: 'Classement manuel mis à jour',\n manual_pool_standings_updated: 'Classement manuel des pools mis à jour',\n manual_standings_error: 'Impossible de mettre à jour le classement manuel',\n manual_pool_standings_error: 'Impossible de mettre à jour le classement manuel des pools',\n }\n },\n },\n common: {\n regions: REGIONS,\n },\n}\n\nexport default messages;\n","const messages = {\n Hockey: {\n resources: {\n surfaces: {\n name: 'Rink |||| Rinks',\n fields: {\n venueId: 'Arena'\n },\n values: {\n size: {\n XL: 'Olympic',\n M: 'NHL',\n XS: '3 on 3',\n },\n },\n actions: {\n add: 'Add Rink',\n edit: 'Edit Rink',\n },\n labels: {\n card: {\n title: 'Rinks',\n splitTitle: 'Rink Splits',\n splitSubtitle: 'A rink can be split to allow multiple events at the same time',\n },\n alerts: {\n message: \"This rink is a split of\"\n },\n edit: 'Update Rink',\n add: 'New Rink',\n name: 'Rink Name',\n },\n messages: {\n surfaces: 'rinks',\n availability: {\n available: 'This rink %{input} be available',\n }\n },\n },\n venues: {\n name: 'Arena |||| Arenas',\n actions: {\n add: 'Add Arena',\n edit: 'Edit Arena',\n },\n labels: {\n name: 'Arena Name',\n my: 'My Arenas'\n },\n messages: {\n add_venues: 'Add arenas',\n search_venue: 'Search by arena name or city',\n },\n alerts: {\n loading_venues: 'Loading arenas...',\n }\n },\n activities: {\n fields: {\n arenaId: 'Rink'\n },\n alerts: {\n activity_explanation: 'Activities are solely off-ice events, not to be confused with games or practices.'\n }\n },\n practices: {\n fields: {\n arenaId: 'Rink'\n }\n },\n events: {\n fields: {\n arenaId: 'Rink'\n }\n },\n draftGames: {\n fields: {\n arenaId: 'Rink',\n },\n messages: {\n match_columns: 'Select the corresponding teams and rinks to match with your selected columns.',\n publish_help: 'Publishing a draft will make the game public and available for scorekeeping. Published games require a date, time and rink to be set and must have a sequence available for game numbering.',\n confirm_clear_date: 'Are you sure you want to clear the date on %{smart_count} selected draft game? This will also reset the time and rink. |||| Are you sure you want to clear the date on %{smart_count} selected draft games? This will also reset the time and rink on these draft games.',\n change_dates_dialog: 'Changing the date will reset time and rink on these drafts.'\n },\n },\n games: {\n fields: {\n arenaId: 'Rink',\n effectiveSurfaces: 'Rink'\n },\n filters: {\n surfaceOffices: 'Rink Organization',\n },\n labels: {\n flags: {\n 'Low Severity Penalties': 'Minor Penalty |||| Minor Penalties',\n 'High Severity Penalties': 'Major Penalty |||| Major Penalties',\n }\n },\n messages: {\n group_games_by_arena: 'Group games by rink',\n },\n alerts: {\n assignment: {\n suggestions: {\n officials_requested_this_game_already: 'Some officials have requested this game or are already at this arena',\n officials_already_arena: 'Some officials are already at this arena',\n no_officials_this_arena: 'No officials are already at this arena, but some are ready',\n },\n assigner: {\n travel: {\n another_venue: 'This official will be <strong>at another arena</strong> within 1 hour of this game',\n this_venue: 'This official is assigned to this arena within 3 hours of this game',\n },\n unavailable: {\n no_availability_arena: 'Official has not included this arena in their availability settings',\n },\n },\n assignee: {\n travel: {\n another_venue: \"You're <strong>assigned to another arena</strong> within 1 hour of this game\",\n this_venue: \"You're assigned to this arena within 3 hours of this game\",\n },\n available: {\n assigned: \"Your calendar indicates that you're available at this time and arena\",\n },\n unavailable: {\n no_availability_arena: \"You haven't included this arena in your availability settings\",\n },\n }\n }\n },\n values: {\n status: {\n 'Rink Changed': 'Rink Changed',\n },\n assignment: {\n position: {\n LinespersonTwo: 'Video Judge',\n LinespersonThree: 'Other Off-Ice Official',\n },\n position_short: {\n LinespersonTwo: 'VJ',\n LinespersonThree: 'OI',\n }\n }\n },\n tooltips: {\n available_official: `\n <div>\n An official is available if:\n <ul>\n <li>\n They have not been assigned to another game at the same time\n </li>\n <li>\n They have set themselves as available for this time\n </li>\n <li>\n They have this organization in their availability settings\n </li>\n <li>\n They have this arena in their availability settings\n </li>\n <li>\n They do not have any travel conflicts\n </li>\n </ul>\n </div>\n `,\n ignore_arena_availability: 'Exclude rink availability when using the \"Available officials\" filter',\n }\n },\n participants: {\n labels: {\n availability: {\n venues_updated: 'Arenas updated',\n venues_error: 'Error updating arenas',\n venues_availabilities: {\n own_profile: {\n title: 'My Arenas',\n select_venues: \"Select the arenas that you are willing to regularly travel to. If you don't select any, you'll be available for all arenas.\",\n },\n other_profile: {\n title: \"Official's Arenas\",\n select_venues: 'Select the arenas that this official is available to officiate games at. If no arenas are selected, the official will be available for all arenas.',\n },\n }\n }\n },\n alerts: {\n availability: {\n selection: {\n title: 'Available to all arenas',\n own_profile: {\n available_to_all_arenas: \"Search above if you would like to optionally limit which arenas you're available to.\",\n },\n other_profile: {\n available_to_all_arenas: \"Search above if you would like to optionally limit which arenas the official is available to.\",\n },\n },\n }\n }\n },\n qualifications: {\n validations: {\n level: 'Must be greater than or equal to 0. \"U9\" is level 0.',\n },\n values: {\n level: {\n zero: 'U9',\n level_zero: 'U9',\n }\n }\n },\n assignSettings: {\n validations: {\n min_setting_range: 'Must be greater than or equal to 0. \"U9\" is level 0.',\n }\n },\n assignFees: {\n fields: {\n LinespersonTwo: 'Video Judge',\n LinespersonThree: 'Other Off-Ice Official',\n }\n },\n assignSystems: {\n fields: {\n linespersonsTwo: 'Video Judge',\n linespersonsThree: 'Other Off-Ice Official',\n }\n },\n officials: {\n filters: {\n ignore_arena: 'Ignore arena availability'\n }\n },\n officialConflicts: {\n labels: {\n card: {\n subtitle: \"The following games are scheduled at the same time with the same teams or arena. If no active games are listed, this game's status may be changed to Active.\",\n }\n }\n },\n offices: {\n labels: {\n tabs: {\n surfaces: 'Rinks'\n }\n }\n },\n leagues: {\n labels: {\n tabs: {\n surfaces: 'Rinks'\n }\n }\n },\n tournaments: {\n labels: {\n tabs: {\n surfaces: 'Rinks'\n }\n }\n },\n cups: {\n labels: {\n tabs: {\n surfaces: 'Rinks'\n }\n }\n },\n officeSettings: {\n fields: {\n skaterStatsHiddenDivisionIds: 'Skater Stats Hidden Divisions',\n gameLength: 'Default Rink Reservation Time',\n surfaceOfficeId: 'Rink Organization',\n },\n labels: {\n stats_schema: {\n skater: 'Skater Stats Schema',\n },\n standings_order: {\n skater: 'Skater Standings Order',\n diff: 'Goal Differential',\n minutesPlayed: 'Time On Ice',\n },\n hidden_stats: {\n skater: 'Hidden Skater Stats',\n },\n },\n helpers: {\n gameLength: 'Optional - Total duration (in minutes) reserved on a rink for all games of that schedule',\n surfaceOfficeId: \"Optional - Rinks will come from this organization instead of the home team's organization in the draft scheduler\",\n },\n values: {\n stats: {\n skater: 'Skater stats'\n }\n }\n },\n scheduleSettings: {\n fields: {\n surfaceSizes: 'Rink Sizes',\n gameLength: 'Default Rink Reservation Time',\n surfaceOfficeId: 'Rink Organization',\n },\n labels: {\n stats_schema: {\n skater: 'Skater Stats Schema',\n },\n standings_order: {\n skater: 'Skater Standings Order',\n },\n hidden_stats: {\n skater: 'Hidden Skater Stats',\n },\n },\n helpers: {\n gameLength: 'Optional - Total duration (in minutes) reserved on a rink for all games of that schedule',\n surfaceOfficeId: \"Optional - Rinks will come from this organization instead of the home team's organization in the draft scheduler\",\n },\n },\n teams: {\n fields: {\n arenaId: 'Rink'\n }\n },\n teamArenas: {\n name: 'Home Rink |||| Home Rinks',\n fields: {\n arenaId: 'Rink'\n },\n actions: {\n edit: 'Edit Home Rinks'\n },\n labels: {\n card: {\n title: 'Home Rinks',\n subtitle: 'Team home rinks will be used when drafting a schedule.'\n },\n },\n },\n arenaoffices: {\n fields: {\n arenaId: 'Rink'\n }\n },\n arenaslots: {\n fields: {\n arenaId: 'Rink'\n },\n labels: {\n card: {\n subtitle: 'Record your rink reservations to see your available time'\n }\n }\n },\n availabilities: {\n labels: {\n surface_conflicts: 'Arena Conflicts',\n }\n },\n drafts: {\n fields: {\n columns: {\n arenaId: 'Rink'\n }\n },\n labels: {\n no_venue: 'No rink'\n },\n messages: {\n share: {\n messages: {\n info: 'Associations will only be able to edit times and arenas for their own games and will not be able to publish the draft.'\n }\n }\n }\n },\n rulebooks: {\n labels: {\n skaters: 'Skaters',\n },\n values: {\n lineup_variances: {\n HC: 'Additional skater for U18 AAA, Junior, Senior'\n },\n }\n },\n scoresheets: {\n labels: {\n clock: 'Clock',\n penalty: {\n game_time: 'Off Time',\n start_time: 'Start Time',\n },\n goal: {\n game_time: 'Game Time',\n }\n },\n alerts: {\n requirements: {\n skaters: {\n min: 'At least %{min} skaters',\n max: 'Up to %{max} skaters',\n }\n }\n }\n }\n },\n components: {\n calendar: {\n messages: {\n no_home_surface: 'No home rinks have been configured for this team',\n no_result: 'No rinks found with the selected surface size filter',\n remove_time_field: 'Are you sure you want to remove the time and rink from this game?',\n }\n },\n exporter: {\n transactions_exporter: {\n reports: {\n details: {\n columns: {\n surface: \"Rink\"\n }\n }\n }\n }\n }\n },\n },\n Soccer: {\n resources: {\n surfaces: {\n name: 'Field |||| Fields',\n values: {\n size: {\n XL: 'XL (11x11)',\n L: 'L (11x11 or 9x9)',\n M: 'M (7x7 or 9x9)',\n S: 'S (7x7)',\n XS: 'XS (4x4)'\n },\n },\n actions: {\n add: 'Add Field',\n edit: 'Edit Field',\n },\n labels: {\n card: {\n title: 'Fields',\n splitTitle: 'Field Splits',\n splitSubtitle: 'A field can be split to allow multiple events at the same time',\n },\n alerts: {\n message: \"This field is a split of\"\n },\n edit: 'Update Field',\n add: 'New Field',\n name: 'Field Name',\n },\n messages: {\n surfaces: 'fields',\n availability: {\n available: 'This field %{input} be available',\n }\n },\n },\n activities: {\n fields: {\n arenaId: 'Field'\n },\n alerts: {\n activity_explanation: 'Activities are solely off-field events, not to be confused with games or practices.'\n }\n },\n practices: {\n fields: {\n arenaId: 'Field'\n }\n },\n events: {\n fields: {\n arenaId: 'Field'\n }\n },\n groups: {\n values: {\n type: {\n 'League': 'Championship',\n }\n }\n },\n schedules: {\n values: {\n type: {\n 'League': 'Championship',\n }\n }\n },\n schedulingConstraints: {\n values: {\n scheduleTypes: {\n 'League': 'Championship',\n }\n }\n },\n assignRules: {\n values: {\n types: {\n 'League': 'Championship',\n }\n },\n options: {\n minLinesperson: 'Assistant Level',\n minOfficial: '4th Referee Level',\n },\n labels: {\n rules: {\n minLinesperson: 'Assistant Level: %{value}',\n minOfficial: '4th Referee Level: %{value}',\n }\n }\n },\n reports: {\n values: {\n scheduleType: {\n 'League': 'Championship',\n }\n }\n },\n draftGames: {\n fields: {\n arenaId: 'Field',\n },\n messages: {\n match_columns: 'Select the corresponding teams and fields to match with your selected columns.',\n publish_help: 'Publishing a draft will make the game public and available for scorekeeping. Published games require a date, time and field to be set and must have a sequence available for game numbering.',\n confirm_clear_date: 'Are you sure you want to clear the date on %{smart_count} selected draft game? This will also reset the time and field. |||| Are you sure you want to clear the date on %{smart_count} selected draft games? This will also reset the time and field on these draft games.',\n change_dates_dialog: 'Changing the date will reset the time and field on these drafts.'\n },\n },\n games: {\n fields: {\n arenaId: 'Field',\n effectiveSurfaces: 'Field'\n },\n filters: {\n surfaceOffices: 'Field Organization',\n },\n messages: {\n group_games_by_arena: 'Group games by field',\n },\n values: {\n status: {\n 'Rink Changed': 'Field Changed',\n },\n assignment: {\n position: {\n Linesperson: 'Assistant 1',\n LinespersonTwo: 'Assistant 2',\n LinespersonThree: 'Assistant 3',\n Official: '4th Referee'\n },\n position_short: {\n Linesperson: 'A1',\n LinespersonTwo: 'A2',\n LinespersonThree: 'A3',\n }\n }\n }\n },\n gameAssignSettings: {\n fields: {\n minLinesperson: 'Minimum Assistant Level',\n minOfficial: 'Minimum 4th Referee Level',\n },\n labels: {\n linesperson: 'Assistant Level',\n official: '4th Referee Level'\n }\n },\n participants: {\n labels: {\n availability: {\n add_associations: 'Add organizations',\n assigner_availabilities: {\n own_profile: {\n select_associations: 'Select the organizations to make yourself available to officiate games for.',\n },\n other_profile: {\n select_associations: 'Select the organizations that this official is available to officiate games for.',\n },\n }\n }\n },\n messages: {\n availability: {\n search_by_association: 'Search by organization name',\n }\n },\n alerts: {\n availability: {\n loading_associations: 'Loading organizations...',\n no_associations: {\n title: 'No organizations selected',\n own_profile: {\n search_make_yourself_available: 'Search above to make yourself available to an organization.',\n not_available_to_assigners: 'You will not be available to any assigners or able to view any games until you select an organization.',\n },\n other_profile: {\n search_make_yourself_available: 'Search above to make the official available to an organization.',\n not_available_to_assigners: 'The official will not be available to any assigners or able to view any games until an organization is selected.',\n }\n },\n }\n }\n },\n assignFees: {\n fields: {\n Linesperson: 'Assistant 1',\n LinespersonTwo: 'Assistant 2',\n LinespersonThree: 'Assistant 3',\n Official: '4th Referee'\n }\n },\n assignSystems: {\n fields: {\n linespersons: 'Assistants 1',\n linespersonsTwo: 'Assistants 2',\n linespersonsThree: 'Assistants 3',\n officials: '4th Referee'\n }\n },\n offices: {\n labels: {\n tabs: {\n surfaces: 'Fields'\n }\n },\n values: {\n type: {\n Association: 'Club',\n Cup: 'Cup'\n }\n }\n },\n leagues: {\n labels: {\n tabs: {\n surfaces: 'Fields'\n }\n },\n values: {\n type: {\n Association: 'Club',\n }\n }\n },\n tournaments: {\n labels: {\n tabs: {\n surfaces: 'Fields'\n }\n },\n values: {\n type: {\n Association: 'Club',\n }\n }\n },\n cups: {\n labels: {\n tabs: {\n surfaces: 'Fields'\n }\n },\n values: {\n type: {\n Association: 'Club',\n }\n }\n },\n officeSettings: {\n fields: {\n skaterStatsHiddenDivisionIds: 'Outfield Player Stats Hidden Divisions',\n gameLength: 'Default Field Reservation Time',\n surfaceOfficeId: 'Field Organization',\n },\n labels: {\n stats_schema: {\n skater: 'Outfield Player Stats Schema',\n },\n standings_order: {\n skater: 'Outfield Player Standings Order',\n penaltyOccurrences: 'Total Number of Cards',\n diff: 'Goal Differential',\n },\n hidden_stats: {\n skater: 'Hidden Outfield Player Stats',\n },\n },\n helpers: {\n gameLength: 'Optional - Total duration (in minutes) reserved on a field for all games of that schedule',\n surfaceOfficeId: \"Optional - Fields will come from this organization instead of the home team's organization in the draft scheduler\",\n },\n values: {\n stats: {\n skater: 'Outfield Player stats'\n }\n }\n },\n scheduleSettings: {\n fields: {\n surfaceSizes: 'Field Sizes',\n gameLength: 'Default Field Reservation Time',\n surfaceOfficeId: 'Field Organization',\n },\n labels: {\n stats_schema: {\n skater: 'Outfield Player Stats Schema',\n },\n standings_order: {\n skater: 'Outfield Player Standings Order',\n },\n hidden_stats: {\n skater: 'Hidden Outfield Player Stats',\n },\n },\n helpers: {\n gameLength: 'Optional - Total duration (in minutes) reserved on a field for all games of that schedule',\n includeRegistrations: \"Registered players based on the team's club, division and season will be included as lineup options.\",\n surfaceOfficeId: \"Optional - Fields will come from this organization instead of the home team's organization in the draft scheduler\",\n }\n },\n teams: {\n fields: {\n arenaId: 'Field'\n }\n },\n teamArenas: {\n name: 'Home Field |||| Home Fields',\n fields: {\n arenaId: 'Field'\n },\n actions: {\n edit: 'Edit Home Fields'\n },\n labels: {\n card: {\n title: 'Home Fields',\n subtitle: 'Team home fields will be used when drafting a schedule.'\n },\n },\n },\n arenaoffices: {\n fields: {\n arenaId: 'Field'\n }\n },\n arenaslots: {\n fields: {\n arenaId: 'Field'\n },\n labels: {\n card: {\n subtitle: 'Record your field reservations to see your available time',\n }\n }\n },\n availabilities: {\n labels: {\n surface_conflicts: 'Field Conflicts',\n }\n },\n profiles: {\n alerts: {\n private_profile: 'This profile will only appear to authorized league and club administrators, and will not appear on league websites.',\n }\n },\n drafts: {\n fields: {\n columns: {\n arenaId: 'Field'\n }\n },\n labels: {\n no_venue: 'No field'\n },\n messages: {\n share: {\n messages: {\n list: 'This draft will be shared with the following clubs:',\n info: 'Clubs will only be able to edit times and venues for their own games and will not be able to publish the draft.'\n }\n }\n }\n },\n rulebooks: {\n labels: {\n skaters: 'Outfield Players',\n },\n values: {\n lineup_variances: {\n HC: 'Additional outfield player for U18 AAA, Junior, Senior'\n },\n }\n },\n help: {\n values: {\n roles: {\n association: 'Clubs'\n }\n }\n },\n scoresheets: {\n actions: {\n add_penalties: 'Add Cards',\n },\n labels: {\n add_penalties: 'Add Cards',\n clock: 'Minute',\n penalty: {\n game_time: 'Minute'\n },\n goal: {\n game_time: 'Minute',\n },\n home: {\n penalty: 'Home Card',\n },\n away: {\n penalty: 'Away Card',\n },\n },\n messages: {\n end_game: 'At what minute did the game end at?'\n },\n alerts: {\n requirements: {\n skaters: {\n min: 'At least %{min} outfield Players',\n max: 'Up to %{max} outfield players',\n }\n }\n }\n },\n gamepenalties: {\n name: 'Cards',\n fields: {\n gameTime: 'Minute',\n },\n },\n suspensions: {\n fields: {\n penaltyId: 'Card',\n }\n },\n gameIncidents: {\n fields: {\n penaltyId: 'Card',\n },\n },\n gameEvents: {\n values: {\n eventType: {\n penaltyStarted: 'Card Added',\n penaltyEdited: 'Card Updated',\n penaltyDeleted: 'Card Deleted',\n }\n }\n },\n members: {\n values: {\n positions: {\n 'F': 'Player',\n }\n }\n }\n },\n components: {\n login: {\n validation: {\n game_already_completed_long: 'This game has already been completed. For corrections, please contact your club.',\n }\n },\n calendar: {\n messages: {\n no_home_surface: 'No home fields have been configured for this team',\n no_result: 'No fields found with the selected surface size filter',\n remove_time_field: 'Are you sure you want to remove the time and field from this game?',\n }\n },\n exporter: {\n transactions_exporter: {\n reports: {\n details: {\n columns: {\n surface: \"Field\"\n }\n }\n }\n },\n penalties_exporter: {\n reports: {\n summary: {\n columns: {\n game_time: 'Minute'\n }\n }\n },\n }\n }\n }\n },\n Baseball: {\n resources: {\n surfaces: {\n name: 'Field |||| Fields',\n values: {\n size: {\n XL: 'XL (18U+)',\n L: 'L (15U)',\n M: 'M (13U)',\n S: 'S (11U)',\n XS: 'XS (9U)'\n },\n },\n actions: {\n add: 'Add Field',\n edit: 'Edit Field',\n },\n labels: {\n card: {\n title: 'Fields',\n splitTitle: 'Field Splits',\n splitSubtitle: 'A field can be split to allow multiple events at the same time',\n },\n alerts: {\n message: \"This field is a split of\"\n },\n edit: 'Update Field',\n add: 'New Field',\n name: 'Field Name',\n },\n messages: {\n surfaces: 'fields',\n availability: {\n available: 'This field %{input} be available',\n }\n },\n },\n activities: {\n fields: {\n arenaId: 'Field'\n },\n alerts: {\n activity_explanation: 'Activities are solely off-field events, not to be confused with games or practices.'\n }\n },\n practices: {\n fields: {\n arenaId: 'Field'\n }\n },\n events: {\n fields: {\n arenaId: 'Field'\n }\n },\n schedules: {\n values: {\n type: {\n 'League': 'Regular Season',\n }\n }\n },\n schedulingConstraints: {\n values: {\n scheduleTypes: {\n 'League': 'Regular Season',\n }\n }\n },\n assignRules: {\n values: {\n types: {\n 'League': 'Regular Season',\n }\n },\n options: {\n minReferee: 'Plate Umpire Level',\n minLinesperson: 'Base Umpire Level',\n },\n labels: {\n rules: {\n minReferee: 'Plate Umpire Level: %{value}',\n minLinesperson: 'Base Umpire Level: %{value}',\n }\n }\n },\n reports: {\n values: {\n scheduleType: {\n 'League': 'Regular Season',\n }\n }\n },\n seasons: {\n values: {\n seasonId: {\n '2025-26': '2025',\n '2024-25': '2024',\n '2023-24': '2023',\n '2022-23': '2022',\n '2021-22': '2021',\n '2020-21': '2020',\n '2019-20': '2019',\n '2018-19': '2018',\n }\n }\n },\n draftGames: {\n fields: {\n arenaId: 'Field',\n },\n messages: {\n match_columns: 'Select the corresponding teams and fields to match with your selected columns.',\n publish_help: 'Publishing a draft will make the game public and available for scorekeeping. Published games require a date, time and field to be set and must have a sequence available for game numbering.',\n confirm_clear_date: 'Are you sure you want to clear the date on %{smart_count} selected draft game? This will also reset the time and field. |||| Are you sure you want to clear the date on %{smart_count} selected draft games? This will also reset the time and field on these draft games.',\n change_dates_dialog: 'Changing the date will reset the time and field on these drafts.'\n },\n },\n games: {\n fields: {\n arenaId: 'Field',\n effectiveSurfaces: 'Field'\n },\n filters: {\n surfaceOffices: 'Field Organization',\n },\n labels: {\n flags: {\n 'High Severity Penalties': 'Ejection |||| Ejections',\n }\n },\n messages: {\n group_games_by_arena: 'Group games by field',\n },\n values: {\n status: {\n 'Rink Changed': 'Field Changed',\n },\n assignment: {\n position: {\n Referee: 'Plate Umpire',\n Linesperson: 'Base Umpire',\n LinespersonTwo: '2nd Base Umpire',\n LinespersonThree: '3rd Base Umpire',\n },\n position_short: {\n Referee: 'PU',\n Linesperson: 'BU',\n LinespersonTwo: 'BU2',\n LinespersonThree: 'BU3',\n }\n }\n }\n },\n offices: {\n labels: {\n tabs: {\n surfaces: 'Fields'\n }\n }\n },\n leagues: {\n labels: {\n tabs: {\n surfaces: 'Fields'\n }\n }\n },\n tournaments: {\n labels: {\n tabs: {\n surfaces: 'Fields'\n }\n }\n },\n cups: {\n labels: {\n tabs: {\n surfaces: 'Fields'\n }\n }\n },\n officeSettings: {\n fields: {\n gameLength: 'Default Field Reservation Time',\n surfaceOfficeId: 'Field Organization',\n },\n helpers: {\n gameLength: 'Optional - Total duration (in minutes) reserved on a field for all games of that schedule',\n surfaceOfficeId: \"Optional - Fields will come from this organization instead of the home team's organization in the draft scheduler\",\n incidentReports: 'Games will require incident reports for all ejections prior to completion'\n }\n },\n scheduleSettings: {\n fields: {\n surfaceSizes: 'Field Sizes',\n gameLength: 'Default Field Reservation Time',\n surfaceOfficeId: 'Field Organization',\n },\n helpers: {\n gameLength: 'Optional - Total duration (in minutes) reserved on a field for all games of that schedule',\n surfaceOfficeId: \"Optional - Fields will come from this organization instead of the home team's organization in the draft scheduler\",\n }\n },\n teams: {\n fields: {\n arenaId: 'Field'\n }\n },\n teamArenas: {\n name: 'Home Field |||| Home Fields',\n fields: {\n arenaId: 'Field'\n },\n actions: {\n edit: 'Edit Home Fields'\n },\n labels: {\n card: {\n title: 'Home Fields',\n subtitle: 'Team home fields will be used when drafting a schedule.'\n },\n },\n },\n arenaoffices: {\n fields: {\n arenaId: 'Field'\n }\n },\n arenaslots: {\n fields: {\n arenaId: 'Field'\n },\n labels: {\n card: {\n subtitle: 'Record your field reservations to see your available time',\n }\n }\n },\n availabilities: {\n labels: {\n surface_conflicts: 'Field Conflicts',\n }\n },\n drafts: {\n values: {\n draft_type: {\n 'Single Rotation': 'One Game Per Round',\n 'Double Rotation': 'Two Games Per Round',\n },\n },\n fields: {\n columns: {\n arenaId: 'Field'\n }\n },\n labels: {\n no_venue: 'No field'\n },\n },\n gameAssignSettings: {\n fields: {\n minReferee: 'Minimum Plate Umpire Level',\n minLinesperson: 'Minimum Base Umpire Level',\n },\n labels: {\n referee: 'Plate Umpire Level',\n linesperson: 'Base Umpire Level',\n }\n },\n assignFees: {\n fields: {\n Referee: 'Plate Umpire',\n Linesperson: 'Base Umpire',\n LinespersonTwo: '2nd Base Umpire',\n LinespersonThree: '3rd Base Umpire',\n }\n },\n assignSystems: {\n fields: {\n referees: 'Plate Umpire',\n linespersons: 'Base Umpire',\n linespersonsTwo: '2nd Base Umpire',\n linespersonsThree: '3rd Base Umpire',\n }\n },\n scoresheets: {\n actions: {\n add_penalties: 'Add Ejections',\n },\n labels: {\n add_penalties: 'Add Ejections',\n home: {\n penalty: 'Home Ejection',\n },\n away: {\n penalty: 'Away Ejection',\n }\n },\n messages: {\n end_game: 'At what inning did the game end at?'\n },\n values: {\n half: {\n first: 'Top',\n second: 'Bottom'\n }\n },\n alerts: {\n missingIncidents: {\n message: 'Some ejections require an incident report which must be submitted before the game can be completed.',\n }\n }\n },\n members: {\n values: {\n positions: {\n 'F': 'Player',\n }\n }\n },\n notifications: {\n fields: {\n majorPenalty: 'Ejections',\n },\n helpers: {\n majorPenalty: 'Scoresheets with ejections will be sent after game completion',\n }\n },\n gamepenalties: {\n name: \"Ejection |||| Ejections\",\n },\n suspensions: {\n fields: {\n penaltyId: 'Ejection',\n },\n },\n gameIncidents: {\n fields: {\n penaltyId: 'Ejection',\n },\n labels: {\n penaltyId: 'Ejection',\n },\n },\n },\n components: {\n calendar: {\n messages: {\n no_home_surface: 'No home fields have been configured for this team',\n no_result: 'No fields found with the selected surface size filter',\n remove_time_field: 'Are you sure you want to remove the time and field from this game?',\n }\n },\n exporter: {\n transactions_exporter: {\n reports: {\n details: {\n columns: {\n surface: \"Field\"\n }\n }\n }\n }\n }\n }\n }\n}\n\nexport default messages;\n","const messages = {\n Hockey: {\n resources: {\n surfaces: {\n name: 'Patinoire |||| Patinoires',\n fields: {\n venueId: 'Aréna'\n },\n values: {\n size: {\n XL: 'Olympique',\n M: 'LNH',\n XS: '3 contre 3',\n },\n },\n actions: {\n add: 'Ajouter une patinoire',\n edit: 'Modifier la patinoire',\n },\n labels: {\n card: {\n title: 'Patinoires',\n splitTitle: 'Séparations de patinoire',\n splitSubtitle: 'Une patinoire peut être séparée pour permettre plusieurs événements simultanément',\n },\n alerts: {\n message: \"Cette patinoire est une séparation de\"\n },\n edit: 'Mettre à jour la patinoire',\n add: 'Nouvelle patinoire',\n name: 'Nom de la patinoire',\n },\n messages: {\n surfaces: 'patinoires',\n availability: {\n available: 'Cette patinoire %{input} disponible',\n }\n },\n },\n venues: {\n name: 'Aréna |||| Arénas',\n actions: {\n add: 'Ajouter un aréna',\n edit: \"Modifier l'aréna\",\n },\n labels: {\n name: \"Nom de l'aréna\",\n my: 'Mes arénas'\n },\n messages: {\n add_venues: 'Ajouter des arénas',\n search_venue: \"Recherche par nom d'aréna ou par ville\",\n },\n alerts: {\n loading_venues: 'Chargement des arénas...',\n }\n },\n activities: {\n fields: {\n arenaId: 'Patinoire'\n },\n alerts: {\n activity_explanation: 'Les activités sont uniquement des événements hors-glace, à ne pas confondre avec des matchs ou des pratiques.'\n }\n },\n practices: {\n fields: {\n arenaId: 'Patinoire'\n }\n },\n events: {\n fields: {\n arenaId: 'Patinoire',\n }\n },\n draftGames: {\n fields: {\n arenaId: 'Patinoire',\n },\n messages: {\n match_columns: 'Choissisez les équipes et les patinoires correspondants à vos colonnes sélectionnées.',\n publish_help: \"La publication d'un brouillon rendra le match publique et donnera accès à la feuille de pointage. Les matchs publiés doivent avoir une date, une heure et une patinoire définies, et ils doivent disposer d'une séquence disponible pour le numéro de match.\",\n confirm_clear_date: 'Êtes-vous sûr de vouloir supprimer la date de ce match brouillon? Cette action réinitialisera également les heures et la patinoire. |||| Êtes-vous sûr de vouloir supprimer la date de ces matchs brouillons? Cette action réinitialisera également les heures et la patinoire.',\n change_dates_dialog: 'Changer la date réinitialisera également les heures et la patinoire des brouillons.',\n },\n },\n games: {\n fields: {\n arenaId: 'Patinoire',\n effectiveSurfaces: 'Patinoire'\n },\n filters: {\n surfaceOffices: 'Organisation de la patinoire',\n },\n labels: {\n flags: {\n 'Low Severity Penalties': 'Pénalité mineure |||| Pénalités mineures',\n 'High Severity Penalties': 'Pénalité majeure |||| Pénalités majeures',\n }\n },\n messages: {\n group_games_by_arena: 'Grouper les matchs par patinoire',\n },\n alerts: {\n assignment: {\n suggestions: {\n officials_requested_this_game_already: 'Certains officiels ont demandé ce match ou sont déjà dans cet aréna',\n officials_already_arena: 'Certains officiels sont déjà dans cet aréna',\n no_officials_this_arena: \"Aucun officiel n'est déjà dans cet aréna, mais certains sont prêts\",\n },\n assigner: {\n travel: {\n another_venue: \"Cet officiel sera <strong>dans un autre aréna</strong> dans l'heure qui suit ce match\",\n this_venue: 'Cet officiel est assigné à cet aréna dans les 3 heures suivant ce match',\n },\n unavailable: {\n no_availability_arena: \"L'officiel n'a pas inclus cet aréna dans ses paramètres de disponibilité\",\n },\n },\n assignee: {\n travel: {\n another_venue: \"Vous êtes <strong>assigné à un autre aréna</strong> dans l'heure qui suit ce match\",\n this_venue: \"Vous êtes assigné à cet aréna dans les 3 heures suivant ce match\",\n },\n available: {\n assigned: \"Votre calendrier indique que vous êtes disponible à cette heure et aréna\",\n },\n unavailable: {\n no_availability_arena: \"Vous n'avez pas inclus cet aréna dans vos paramètres de disponibilité\",\n },\n }\n }\n },\n values: {\n status: {\n 'Rink Changed': 'La patinoire de ce match a changé',\n },\n assignment: {\n position: {\n LinespersonTwo: 'Juge vidéo',\n LinespersonThree: 'Autre officiel hors glace',\n },\n position_short: {\n LinespersonTwo: 'JV',\n LinespersonThree: 'HG',\n }\n }\n },\n tooltips: {\n available_official: `\n <div>\n Un officiel est disponible si :\n <ul>\n <li>\n Il n'a pas été assigné à un autre match au même moment\n </li>\n <li>\n Il s'est déclaré disponible pour cette période de temps\n </li>\n <li>\n Il a cette organisation dans ses paramètres de disponibilité\n </li>\n <li>\n Il a cette aréna dans ses paramètres de disponibilité\n </li>\n <li>\n Il n'a aucun conflit de déplacement\n </li>\n </ul>\n </div>\n `,\n ignore_arena_availability: `Exclure la disponibilité d'aréna lors de l'utilisation du filtre \"Officiels disponibles\"`,\n }\n },\n participants: {\n labels: {\n availability: {\n venues_updated: 'Arénas mis à jour',\n venues_error: 'Impossible de mettre à jour les arénas',\n venues_availabilities: {\n own_profile: {\n title: 'Mes arénas',\n select_venues: \"Sélectionnez les arénas où vous êtes prêt à vous rendre régulièrement. Si vous n'en sélectionnez aucun, vous serez disponible pour tous les arénas.\",\n },\n other_profile: {\n title: 'Arénas de l’arbitre',\n select_venues: 'Sélectionnez les arénas où cet arbitre est disponible pour officier des matchs. Si aucun aréna n’est sélectionné, l’arbitre sera disponible pour tous les arénas.',\n },\n }\n }\n },\n alerts: {\n availability: {\n selection: {\n title: 'Disponible dans toutes les arénas',\n own_profile: {\n available_to_all_arenas: \"Recherchez ci-dessus si vous souhaitez éventuellement limiter les arénas auxquelles vous êtes disponible.\",\n },\n other_profile: {\n available_to_all_arenas: \"Recherchez ci-dessus si vous souhaitez éventuellement limiter les arénas auxquelles l'officiel est disponible.\",\n }\n },\n }\n }\n },\n qualifications: {\n validations: {\n level: 'Doit être supérieur ou égal à 0. \"M9\" correspond au niveau 0.'\n },\n values: {\n level: {\n zero: 'M9',\n level_zero: 'M9',\n }\n }\n },\n assignSettings: {\n validations: {\n min_setting_range: 'Doit être supérieur ou égal à 0. \"M9\" correspond au niveau 0.',\n }\n },\n assignFees: {\n fields: {\n LinespersonTwo: 'Juge vidéo',\n LinespersonThree: 'Autre officiel hors glace',\n }\n },\n assignSystems: {\n fields: {\n linespersonsTwo: 'Juge vidéo',\n linespersonsThree: 'Autre officiel hors glace',\n }\n },\n officials: {\n filters: {\n ignore_arena: \"Ignorer les disponibilités de l'aréna\",\n }\n },\n officialConflicts: {\n labels: {\n card: {\n subtitle: \"Les matchs suivants sont programmés en même temps avec les mêmes équipes ou le même aréna. Si aucun match actif n'est répertorié, le statut de ce match peut être changé en Actif.\",\n }\n }\n },\n offices: {\n labels: {\n tabs: {\n surfaces: 'Patinoires'\n }\n }\n },\n leagues: {\n labels: {\n tabs: {\n surfaces: 'Patinoires'\n }\n }\n },\n tournaments: {\n labels: {\n tabs: {\n surfaces: 'Patinoires'\n }\n }\n },\n cups: {\n labels: {\n tabs: {\n surfaces: 'Patinoires'\n }\n }\n },\n officeSettings: {\n fields: {\n skaterStatsHiddenDivisionIds: 'Division à cacher pour les statistiques des patineurs',\n gameLength: 'Temps de réservation de la patinoire',\n surfaceOfficeId: \"L'organisation des patinoires\"\n },\n labels: {\n stats_schema: {\n skater: 'Schéma des statistiques de patineur',\n },\n standings_order: {\n skater: 'Ordre du classement des patineurs',\n diff: 'Différentiel de but',\n minutesPlayed: 'Temps de glace',\n },\n hidden_stats: {\n skater: 'Statistiques cachées des patineurs',\n },\n },\n helpers: {\n gameLength: \"Optionnel - Temps de réservation total (en minutes) sur la patinoire pour tous les matchs de cet horaire\",\n surfaceOfficeId: \"Optionnel - Les patinoires proviendront de cette organisation au lieu de l'organisation de l'équipe à domicile dans le planificateur de brouillon\",\n },\n values: {\n stats: {\n skater: 'Statistiques des patineurs',\n }\n }\n },\n scheduleSettings: {\n fields: {\n surfaceSizes: 'Taille des patinoires',\n gameLength: 'Temps de réservation de la patinoire',\n surfaceOfficeId: \"L'organisation des patinoires\"\n },\n labels: {\n stats_schema: {\n skater: 'Schéma des statistiques de patineur',\n },\n standings_order: {\n skater: 'Ordre du classement des patineurs',\n },\n hidden_stats: {\n skater: 'Statistiques cachées des patineurs',\n },\n },\n helpers: {\n gameLength: \"Optionnel - Temps de réservation total (en minutes) sur la patinoire pour tous les matchs de cet horaire\",\n surfaceOfficeId: \"Optionnel - Les patinoires proviendront de cette organisation au lieu de l'organisation de l'équipe à domicile dans le planificateur de brouillon\",\n },\n },\n teams: {\n fields: {\n arenaId: 'Patinoire'\n }\n },\n teamArenas: {\n name: 'Patinoire à domicile |||| Patinoires à domicile',\n fields: {\n arenaId: 'Patinoire'\n },\n actions: {\n edit: 'Mettre à jour la patinoire à domicile'\n },\n labels: {\n card: {\n title: 'Patinoires à domicile',\n subtitle: \"Les patinoires à domicile de l'équipe seront utilisées lors de la création d'un horaire.\"\n },\n },\n },\n arenaoffices: {\n fields: {\n arenaId: 'Patinoire'\n }\n },\n arenaslots: {\n fields: {\n arenaId: 'Patinoire'\n },\n labels: {\n card: {\n subtitle: 'Enregistrez vos réservations de patinoire pour voir vos plages disponible'\n }\n }\n },\n availabilities: {\n labels: {\n surface_conflicts: 'Conflits de patinoire',\n }\n },\n drafts: {\n fields: {\n columns: {\n arenaId: 'Patinoire'\n }\n },\n labels: {\n no_venue: 'Pas de patinoire'\n },\n messages: {\n share: {\n messages: {\n info: 'Les associations ne pourront modifier que les temps et les patinoires de leurs propres matchs et ne pourront pas publier le brouillon.'\n }\n }\n }\n },\n rulebooks: {\n labels: {\n skaters: 'Patineurs',\n },\n values: {\n lineup_variances: {\n HC: 'Patineur supplémentaire pour M18 AAA, Junior, Sénior',\n },\n }\n },\n scoresheets: {\n labels: {\n clock: 'Temps',\n penalty: {\n game_time: 'Temps',\n start_time: 'Début'\n },\n goal: {\n game_time: 'Temps',\n }\n },\n alerts: {\n requirements: {\n skaters: {\n min: 'Minimum de %{min} patineurs',\n max: \"Maximum de %{max} patineurs\",\n }\n }\n }\n }\n },\n components: {\n calendar: {\n messages: {\n no_home_surface: \"Aucune patinoire locale n'a été configurée pour cette équipe\",\n no_result: 'Aucune patinoire trouvée avec le filtre de taille de surface sélectionné',\n remove_time_field: \"Êtes-vous sûr de vouloir supprimer l'heure et la patinoire de ce match?\",\n }\n },\n exporter: {\n transactions_exporter: {\n reports: {\n details: {\n columns: {\n surface: \"Patinoire\"\n }\n }\n }\n }\n }\n }\n },\n Soccer: {\n ra: {\n action: {\n certify: 'Homologuer',\n }\n },\n resources: {\n surfaces: {\n name: 'Terrain |||| Terrains',\n values: {\n size: {\n XL: 'XL (11x11)',\n L: 'L (11x11 ou 9x9)',\n M: 'M (7x7 ou 9x9)',\n S: 'S (7x7)',\n XS: 'XS (4x4)'\n },\n },\n actions: {\n add: 'Ajouter un terrain',\n edit: 'Modifier le terrain',\n },\n labels: {\n card: {\n title: 'Terrains',\n splitTitle: 'Séparations de terrain',\n splitSubtitle: 'Un terrain peut être séparé pour permettre plusieurs événements simultanément',\n },\n alerts: {\n message: \"Ce terrain est une séparation de\"\n },\n edit: 'Mettre à jour le terrain',\n add: 'Nouveau terrain',\n name: 'Nom du terrain',\n },\n messages: {\n surfaces: 'terrains',\n availability: {\n available: 'Ce terrain %{input} disponible',\n }\n },\n },\n activities: {\n fields: {\n arenaId: 'Terrain'\n },\n alerts: {\n activity_explanation: 'Les activités sont uniquement des événements hors-terrain, à ne pas confondre avec des matchs ou des pratiques.'\n }\n },\n practices: {\n fields: {\n arenaId: 'Terrain'\n }\n },\n events: {\n fields: {\n arenaId: 'Terrain'\n }\n },\n groups: {\n values: {\n type: {\n 'League': 'Championnat',\n }\n }\n },\n schedules: {\n values: {\n type: {\n 'League': 'Championnat',\n }\n }\n },\n schedulingConstraints: {\n values: {\n scheduleTypes: {\n 'League': 'Championnat',\n }\n }\n },\n assignRules: {\n values: {\n types: {\n 'League': 'Championnat',\n },\n options: {\n minLinesperson: \"Niveau d'arbitre assistant\",\n minOfficial: 'Niveau de 4ème arbitre',\n },\n labels: {\n rules: {\n minLinesperson: \"Niveau d'arbitre assistant: %{value}\",\n minOfficial: 'Niveau de 4ème arbitre: %{value}',\n }\n }\n }\n },\n reports: {\n values: {\n scheduleType: {\n 'League': 'Championnat',\n }\n }\n },\n draftGames: {\n fields: {\n arenaId: 'Terrain',\n },\n messages: {\n match_columns: 'Choissisez les équipes et les terrains correspondants à vos colonnes sélectionnées.',\n publish_help: \"La publication d'un brouillon rendra le match publique et donnera accès à la feuille de pointage. Les matchs publiés doivent avoir une date, une heure et un terrain définies, et ils doivent disposer d'une séquence disponible pour le numéro de match.\",\n confirm_clear_date: 'Êtes-vous sûr de vouloir supprimer la date de ce match brouillon? Cette action réinitialisera également les heures et le terrain. |||| Êtes-vous sûr de vouloir supprimer la date de ces matchs brouillons? Cette action réinitialisera également les heures et le terrain.',\n change_dates_dialog: 'Changer la date réinitialisera également les heures et le terrain des brouillons.',\n },\n },\n games: {\n fields: {\n arenaId: 'Terrain',\n effectiveSurfaces: 'Terrain'\n },\n filters: {\n surfaceOffices: 'Organisation du terrain',\n isCertified: 'Homologuée'\n },\n messages: {\n group_games_by_arena: 'Grouper les matchs par terrain',\n },\n values: {\n status: {\n 'Rink Changed': 'Le terrain de ce match a changé',\n },\n assignment: {\n position: {\n Linesperson: 'Assistant 1',\n LinespersonTwo: 'Assistant 2',\n LinespersonThree: 'Assistant 3',\n Official: '4ème arbitre'\n },\n position_short: {\n Linesperson: 'A1',\n LinespersonTwo: 'A2',\n LinespersonThree: 'A3'\n }\n }\n },\n labels: {\n game_number_certify: 'Homologation du Match %{number}',\n certify_game: 'Homologuer le match',\n certification: 'Homologation',\n },\n notifications: {\n certified_games: '%{smart_count} match homologué |||| %{smart_count} matchs homologués',\n certified_games_error: \"Une erreur s'est produite lors de l'homologation' du match |||| Une erreur s'est produite lors de l'homologation' des matchs\",\n }\n },\n gameEvents: {\n messages: {\n game_certified: 'Feuille de match homologuée'\n },\n values: {\n eventType: {\n scoresheetCertified: 'Feuille de match homologuée',\n penaltyStarted: 'Carton ajoutée',\n penaltyEdited: 'Carton mise à jour',\n penaltyDeleted: 'Carton supprimée',\n }\n }\n },\n gameAssignSettings: {\n fields: {\n minLinesperson: \"Niveau minimum d'arbitre assistant\",\n minOfficial: 'Niveau minimum de 4ème arbitre',\n },\n labels: {\n linesperson: \"Niveau de l'assistant\",\n official: 'Niveau de 4ème arbitre'\n }\n },\n participants: {\n labels: {\n availability: {\n add_associations: 'Ajouter des organisations',\n assigner_availabilities: {\n own_profile: {\n select_associations: 'Sélectionnez les organisations pour lesquelles vous vous rendrez disponible pour arbitrer ou marquer des matchs.',\n },\n other_profile: {\n select_associations: 'Sélectionnez les organisations pour lesquelles cet arbitre est disponible pour arbitrer des matchs.',\n },\n }\n }\n },\n messages: {\n availability: {\n search_by_association: \"Recherche par nom d'organisation\",\n }\n },\n alerts: {\n availability: {\n loading_associations: 'Chargement des organisations...',\n no_associations: {\n title: 'Aucunne organisation sélectionnée',\n own_profile: {\n search_make_yourself_available: \"Faites une recherche ci-dessus pour vous mettre disponible pour une organisation.\",\n not_available_to_assigners: \"Vous ne serez pas disponible pour les assignateurs ou ne pourrez voir aucun match tant que vous n'aurez pas sélectionné une organisation.\",\n },\n other_profile: {\n search_make_yourself_available: \"Faites une recherche ci-dessus pour mettre l'officiel disponible pour une organisation.\",\n not_available_to_assigners: \"L'officiel ne sera pas disponible pour les assignateurs et ne pourra voir aucun match tant qu'une organisation n'aura pas été sélectionnée.\",\n }\n }\n }\n }\n },\n assignFees: {\n fields: {\n Linesperson: 'Assistant 1',\n LinespersonTwo: 'Assistant 2',\n LinespersonThree: 'Assistant 3',\n Official: '4ème arbitre'\n }\n },\n assignSystems: {\n fields: {\n linespersons: 'Assistants 1',\n linespersonsTwo: 'Assistants 2',\n linespersonsThree: 'Assistants 3',\n officials: '4ème arbitres'\n }\n },\n offices: {\n labels: {\n tabs: {\n surfaces: 'Terrains'\n }\n },\n values: {\n type: {\n Association: 'Club',\n Club: 'Coupe'\n }\n }\n },\n leagues: {\n labels: {\n tabs: {\n surfaces: 'Terrains'\n }\n },\n values: {\n type: {\n Association: 'Club',\n }\n }\n },\n tournaments: {\n labels: {\n tabs: {\n surfaces: 'Terrains'\n }\n },\n values: {\n type: {\n Association: 'Club',\n }\n }\n },\n cups: {\n labels: {\n tabs: {\n surfaces: 'Terrains'\n }\n },\n values: {\n type: {\n Association: 'Club',\n }\n }\n },\n officeSettings: {\n fields: {\n skaterStatsHiddenDivisionIds: 'Division à cacher pour les statistiques des joueurs de champ',\n gameLength: 'Temps de réservation du terrain',\n surfaceOfficeId: \"L'organisation des terrains\",\n requireCertification: 'Homologation des matchs',\n },\n labels: {\n stats_schema: {\n skater: 'Schéma des statistiques de joueur de champ',\n },\n standings_order: {\n skater: 'Ordre du classement des joueurs de champ',\n penaltyOccurrences: 'Nombre Total de Cartons',\n diff: 'Différentiel de but',\n },\n hidden_stats: {\n skater: 'Statistiques cachées des joueurs de champ',\n },\n certification: 'Homologation'\n },\n helpers: {\n gameLength: \"Optionnel - Temps de réservation total (en minutes) sur le terrain pour tous les matchs de cet horaire\",\n surfaceOfficeId: \"Optionnel - Les terrains proviendront de cette organisation au lieu de l'organisation de l'équipe à domicile dans le planificateur de brouillon\",\n },\n values: {\n stats: {\n skater: 'Statistiques des joueurs de champ',\n },\n suspension_activation: {\n certification: 'Après match homologué',\n }\n }\n },\n scheduleSettings: {\n fields: {\n surfaceSizes: 'Taille des terrains',\n gameLength: 'Temps de réservation du terrain',\n surfaceOfficeId: \"L'organisation des terrains\",\n },\n labels: {\n stats_schema: {\n skater: 'Schéma des statistiques de joueur de champ',\n },\n standings_order: {\n skater: 'Ordre du classement des joueurs de champ',\n },\n hidden_stats: {\n skater: 'Statistiques cachées des joueurs de champ',\n },\n },\n helpers: {\n gameLength: \"Optionnel - Temps de réservation total (en minutes) sur le terrain pour tous les matchs de cet horaire\",\n includeRegistrations: \"Les participants inscrits en fonction du club, de la division et de la saison de l'équipe seront inclus comme options d'alignement.\",\n surfaceOfficeId: \"Optionnel - Les terrains proviendront de cette organisation au lieu de l'organisation de l'équipe à domicile dans le planificateur de brouillon\",\n }\n },\n teams: {\n fields: {\n arenaId: 'Terrain'\n }\n },\n teamArenas: {\n name: 'Terrain à domicile |||| Terrains à domicile',\n fields: {\n arenaId: 'Terrain'\n },\n actions: {\n edit: 'Mettre à jour le terrain à domicile'\n },\n labels: {\n card: {\n title: 'Terrains à domicile',\n subtitle: \"Les terrains à domicile de l'équipe seront utilisées lors de la création d'un horaire.\"\n },\n },\n },\n arenaoffices: {\n fields: {\n arenaId: 'Terrain'\n }\n },\n arenaslots: {\n fields: {\n arenaId: 'Terrain'\n },\n labels: {\n card: {\n subtitle: 'Enregistrez vos réservations de terrain pour voir vos plages disponibles'\n }\n }\n },\n availabilities: {\n labels: {\n surface_conflicts: 'Conflits de terrain',\n }\n },\n profiles: {\n alerts: {\n private_profile: \"Ce profil n'apparaîtra qu'aux administrateurs autorisés de la ligue et du club et n'apparaîtra pas sur le site Web de la ligue.\",\n }\n },\n drafts: {\n fields: {\n columns: {\n arenaId: 'Terrain'\n }\n },\n labels: {\n no_venue: 'Pas de terrain'\n },\n messages: {\n share: {\n messages: {\n list: 'Ce brouillon sera partagé avec les clubs suivants:',\n info: 'Les clubs ne pourront modifier que les temps et les lieux de leurs propres matchs et ne pourront pas publier le brouillon.'\n }\n }\n }\n },\n rulebooks: {\n labels: {\n skaters: 'Joueurs de champ',\n },\n values: {\n lineup_variances: {\n HC: 'Joueurs de champ supplémentaire pour M18 AAA, Junior, Sénior',\n },\n }\n },\n help: {\n values: {\n roles: {\n association: 'Clubs'\n }\n }\n },\n scoresheets: {\n actions: {\n add_penalties: 'Cartons',\n },\n labels: {\n add_penalties: 'Ajouter des cartons',\n certify: 'Homologuer le match |||| Homologuer les matchs',\n undo_certify: {\n title: 'Déshomologuer la feuille de match'\n },\n clock: 'Minute',\n penalty: {\n game_time: 'Minute'\n },\n goal: {\n game_time: 'Minute',\n },\n home: {\n penalty: 'Carton - Local',\n },\n away: {\n penalty: 'Carton - Visiteur',\n },\n },\n messages: {\n end_game: \"À quelle minute la partie s'est-elle terminée?\",\n confirm_certify: 'Voulez-vous vraiment homologuer ce match? |||| Voulez-vous vraiment homologuer ces matchs?',\n successful_game_certify: 'Match Homologué',\n },\n alerts: {\n requirements: {\n skaters: {\n min: 'Minimum de %{min} joueurs de champ',\n max: \"Maximum de %{max} joueurs de champ\",\n }\n },\n not_certified: \"Cette feuille de match n'a pas été homologuée.\",\n certified: 'Feuille de match homologuée.'\n },\n },\n gamepenalties: {\n name: 'Cartons',\n fields: {\n gameTime: 'Minute',\n },\n },\n suspensions: {\n fields: {\n penaltyId: 'Carton',\n }\n },\n gameIncidents: {\n fields: {\n penaltyId: 'Carton',\n },\n },\n members: {\n values: {\n positions: {\n 'F': 'Joueur',\n }\n }\n }\n },\n components: {\n login: {\n validation: {\n game_already_completed_long: 'Ce match est déjà terminé. Pour les corrections, veuillez contacter votre club.',\n }\n },\n calendar: {\n messages: {\n no_home_surface: \"Aucun terrain locale n'a été configurée pour cette équipe\",\n no_result: 'Aucun terrain trouvée avec le filtre de taille de surface sélectionné',\n remove_time_field: \"Êtes-vous sûr de vouloir supprimer l'heure et le terrain de ce match?\",\n }\n },\n exporter: {\n transactions_exporter: {\n reports: {\n details: {\n columns: {\n surface: \"Terrain\"\n }\n }\n }\n },\n penalties_exporter: {\n reports: {\n summary: {\n columns: {\n game_time: 'Minute'\n }\n }\n },\n }\n }\n }\n },\n Baseball: {\n resources: {\n surfaces: {\n name: 'Terrain |||| Terrains',\n values: {\n size: {\n XL: 'XL (18U+)',\n L: 'L (15U)',\n M: 'M (13U)',\n S: 'S (11U)',\n XS: 'XS (9U)'\n },\n },\n actions: {\n add: 'Ajouter un terrain',\n edit: 'Modifier le terrain',\n },\n labels: {\n card: {\n title: 'Terrains',\n splitTitle: 'Séparations de terrain',\n splitSubtitle: 'Un terrain peut être séparé pour permettre plusieurs événements simultanément',\n },\n alerts: {\n message: \"Ce terrain est une séparation de\"\n },\n edit: 'Mettre à jour le terrain',\n add: 'Nouveau terrain',\n name: 'Nom du terrain',\n },\n messages: {\n surfaces: 'terrains',\n availability: {\n available: 'Ce terrain %{input} disponible',\n }\n },\n },\n activities: {\n fields: {\n arenaId: 'Terrain'\n },\n alerts: {\n activity_explanation: 'Les activités sont uniquement des événements hors-terrain, à ne pas confondre avec des matchs ou des pratiques.'\n }\n },\n practices: {\n fields: {\n arenaId: 'Terrain'\n }\n },\n events: {\n fields: {\n arenaId: 'Terrain'\n }\n },\n schedules: {\n values: {\n type: {\n 'League': 'Saison régulière',\n }\n }\n },\n schedulingConstraints: {\n values: {\n scheduleTypes: {\n 'League': 'Saison régulière',\n }\n }\n },\n assignRules: {\n values: {\n types: {\n 'League': 'Saison régulière',\n }\n },\n options: {\n minReferee: \"Niveau de l'arbitre au marbre\",\n minLinesperson: \"Niveau de l'arbitre sur les buts\",\n },\n labels: {\n rules: {\n minReferee: \"Niveau de l'arbitre au marbre: %{value}\",\n minLinesperson: \"Niveau de l'arbitre sur les buts: %{value}\",\n }\n }\n },\n reports: {\n values: {\n scheduleType: {\n 'League': 'Saison régulière',\n }\n }\n },\n seasons: {\n values: {\n seasonId: {\n '2025-26': '2025',\n '2024-25': '2024',\n '2023-24': '2023',\n '2022-23': '2022',\n '2021-22': '2021',\n '2020-21': '2020',\n '2019-20': '2019',\n '2018-19': '2018',\n }\n }\n },\n draftGames: {\n fields: {\n arenaId: 'Terrain',\n },\n messages: {\n match_columns: 'Choissisez les équipes et les terrains correspondants à vos colonnes sélectionnées.',\n publish_help: \"La publication d'un brouillon rendra le match publique et donnera accès à la feuille de pointage. Les matchs publiés doivent avoir une date, une heure et un terrain définies, et ils doivent disposer d'une séquence disponible pour le numéro de match.\",\n confirm_clear_date: 'Êtes-vous sûr de vouloir supprimer la date de ce match brouillon? Cette action réinitialisera également les heures et le terrain. |||| Êtes-vous sûr de vouloir supprimer la date de ces matchs brouillons? Cette action réinitialisera également les heures et le terrain.',\n change_dates_dialog: 'Changer la date réinitialisera également les heures et le terrain des brouillons.',\n },\n },\n games: {\n fields: {\n arenaId: 'Terrain',\n effectiveSurfaces: 'Terrain'\n },\n filters: {\n surfaceOffices: 'Organisation du terrain',\n },\n labels: {\n flags: {\n 'High Severity Penalties': 'Expulsion |||| Expulsions',\n }\n },\n messages: {\n group_games_by_arena: 'Grouper les matchs par terrain',\n },\n values: {\n status: {\n 'Rink Changed': 'Le terrain de ce match a changé',\n },\n assignment: {\n position: {\n Referee: 'Arbitre au marbre',\n Linesperson: 'Arbitre sur les buts',\n LinespersonTwo: 'Arbitre au 2e but',\n LinespersonThree: 'Arbitre au 3e but',\n },\n position_short: {\n Referee: 'AM',\n Linesperson: 'AB',\n LinespersonTwo: 'AB2',\n LinespersonThree: 'AB3',\n }\n }\n }\n },\n offices: {\n labels: {\n tabs: {\n surfaces: 'Terrains'\n }\n }\n },\n leagues: {\n labels: {\n tabs: {\n surfaces: 'Terrains'\n }\n },\n },\n tournaments: {\n labels: {\n tabs: {\n surfaces: 'Terrains'\n }\n }\n },\n cups: {\n labels: {\n tabs: {\n surfaces: 'Terrains'\n }\n },\n },\n officeSettings: {\n fields: {\n gameLength: 'Temps de réservation du terrain',\n surfaceOfficeId: \"L'organisation des terrains\",\n },\n helpers: {\n gameLength: \"Optionnel - Temps de réservation total (en minutes) sur le terrain pour tous les matchs de cet horaire\",\n surfaceOfficeId: \"Optionnel - Les terrains proviendront de cette organisation au lieu de l'organisation de l'équipe à domicile dans le planificateur de brouillon\",\n incidentReports: \"Les matchs nécessiteront des rapports d'incident pour tous les expulsions avant d'être terminés\"\n },\n },\n scheduleSettings: {\n fields: {\n surfaceSizes: 'Taille des terrains',\n gameLength: 'Temps de réservation du terrain',\n surfaceOfficeId: \"L'organisation des terrains\",\n },\n helpers: {\n gameLength: \"Optionnel - Temps de réservation total (en minutes) sur le terrain pour tous les matchs de cet horaire\",\n surfaceOfficeId: \"Optionnel - Les terrains proviendront de cette organisation au lieu de l'organisation de l'équipe à domicile dans le planificateur de brouillon\",\n }\n },\n teams: {\n fields: {\n arenaId: 'Terrain'\n }\n },\n teamArenas: {\n name: 'Terrain à domicile |||| Terrains à domicile',\n fields: {\n arenaId: 'Terrain'\n },\n actions: {\n edit: 'Mettre à jour le terrain à domicile'\n },\n labels: {\n card: {\n title: 'Terrains à domicile',\n subtitle: \"Les terrains à domicile de l'équipe seront utilisés lors de la création d'un horaire.\"\n },\n },\n },\n arenaoffices: {\n fields: {\n arenaId: 'Terrain'\n }\n },\n arenaslots: {\n fields: {\n arenaId: 'Terrain'\n },\n labels: {\n card: {\n subtitle: 'Enregistrez vos réservations de terrain pour voir vos plages disponibles'\n }\n }\n },\n availabilities: {\n labels: {\n surface_conflicts: 'Conflits de terrain',\n }\n },\n drafts: {\n values: {\n draft_type: {\n 'Single Rotation': 'Une partie par étape',\n 'Double Rotation': 'Deux parties par étape',\n },\n },\n fields: {\n columns: {\n arenaId: 'Terrain'\n }\n },\n labels: {\n no_venue: 'Pas de terrain'\n },\n },\n gameAssignSettings: {\n fields: {\n minReferee: \"Niveau minimum de l'arbitre au marbre\",\n minLinesperson: \"Niveau minimum de l'arbitre sur les buts\",\n },\n labels: {\n referee: \"Niveau de l'arbitre au marbre\",\n linesperson: \"Niveau de l'arbitre sur les buts\",\n }\n },\n assignFees: {\n fields: {\n Referee: 'Arbitre au marbre',\n Linesperson: 'Arbitre sur les buts',\n LinespersonTwo: 'Arbitre au 2e but',\n LinespersonThree: 'Arbitre au 3e but',\n }\n },\n assignSystems: {\n fields: {\n referees: 'Arbitre au marbre',\n linespersons: 'Arbitre sur les buts',\n linespersonsTwo: 'Arbitre au 2e but',\n linespersonsThree: 'Arbitre au 3e but',\n }\n },\n scoresheets: {\n actions: {\n add_penalties: 'Expulsions',\n },\n labels: {\n add_penalties: 'Ajouter des expulsions',\n home: {\n penalty: 'Expulsion - Local',\n },\n away: {\n penalty: 'Expulsion - Visiteur',\n }\n },\n messages: {\n end_game: \"A quelle manche la partie a t'elle terminée?\",\n },\n values: {\n half: {\n first: 'Début',\n second: 'Fin'\n }\n },\n alerts: {\n missingIncidents: {\n message: \"Certains expulsions nécessitent un rapport d'incident qui doit être soumis avant que le match ne puisse être terminé.\",\n }\n }\n },\n suspensions: {\n fields: {\n penaltyId: 'Expulsion',\n },\n },\n gameIncidents: {\n fields: {\n penaltyId: 'Expulsion',\n },\n labels: {\n penaltyId: 'Expulsion',\n },\n },\n gamepenalties: {\n name: 'Expulsion |||| Expulsions',\n },\n members: {\n values: {\n positions: {\n 'F': 'Joueur',\n }\n }\n },\n notifications: {\n fields: {\n majorPenalty: 'Expulsions',\n },\n helpers: {\n majorPenalty: 'Les feuilles de match avec les expulsions seront envoyées après la fin du match',\n }\n }\n },\n components: {\n calendar: {\n messages: {\n no_home_surface: \"Aucun terrain locale n'a été configurée pour cette équipe\",\n no_result: 'Aucun terrain trouvée avec le filtre de taille de surface sélectionné',\n remove_time_field: \"Êtes-vous sûr de vouloir supprimer l'heure et le terrain de ce match?\",\n }\n },\n exporter: {\n transactions_exporter: {\n reports: {\n details: {\n columns: {\n surface: \"Terrain\"\n }\n }\n }\n }\n }\n }\n }\n}\n\nexport default messages;\n","import Polyglot from 'node-polyglot';\n\nimport englishMessages from './messages/en';\nimport frenchMessages from './messages/fr';\n\nimport englishSportsMessages from './messages/sports/en'\nimport frenchSportsMessages from './messages/sports/fr'\n\nimport { useLocale } from './LocaleProvider';\nimport { useTenant } from '../http';\n\nexport { LocaleProvider, useLocale } from './LocaleProvider';\n\nexport const locales = {\n en: englishMessages,\n fr: frenchMessages,\n}\n\nconst sports = {\n en: englishSportsMessages,\n fr: frenchSportsMessages,\n}\n\nconst getPolyglot = (locale, sport) => {\n const polygot = new Polyglot({ locale, phrases: { '': '', ...locales[locale] } })\n\n // overwrite base dictionary with any sport specific translations\n const sportPhrases = sports?.[locale]?.[sport];\n if (sportPhrases) polygot.extend(sportPhrases);\n\n return polygot;\n}\n\n// provide admin-react messages based on the locale set, defaults to the users browser language setting\nexport const useI18nProvider = () => {\n const [ locale ] = useLocale()\n const { sport } = useTenant() || {};\n\n let polyglot = getPolyglot(locale, sport);\n let translate = polyglot.t.bind(polyglot);\n\n return {\n getLocale: () => locale,\n async changeLocale(locale, sport) {\n polyglot = getPolyglot(locale, sport);\n translate = polyglot.t.bind(polyglot)\n },\n translate: (key, options = {}) => translate(key, options),\n }\n}\n\nexport const formatCurrency = (amount, locale, allowZero = false) => {\n amount = Number(amount || 0);\n if (!allowZero && (isNaN(amount) || !amount)) {\n if (locale === 'fr') return '– $';\n return '$ –';\n }\n return new Intl.NumberFormat(`${locale || 'en'}-CA`, { style: 'currency', currency: 'CAD' }).format(amount);\n}\n\nexport const formatDistance = (amount, locale) => {\n amount = amount || 0;\n return `${amount} km`;\n}\n\nexport const formatList = (values, locale) =>\n new Intl.ListFormat(locale, {\n localeMatcher: 'best fit',\n type: 'conjunction',\n style: 'long',\n }).format(values)\n","import { useEffect, useMemo, useRef, useState } from \"react\";\nimport { apiClient } from \"../../http\"\n\nexport const useSlotsInUse = (slotIds = []) => {\n const [ data, setData ] = useState({});\n const [ loading, setLoading ] = useState(false);\n const [ error, setError ] = useState(null);\n\n const prevSlotIdsRef = useRef();\n\n const slotIdsToFetch = useMemo(() => slotIds.filter(slotId => typeof data[slotId] === 'undefined'), [slotIds, data])\n\n useEffect(() => {\n const currentSlotIdsToFetch = JSON.stringify(slotIdsToFetch);\n\n if (prevSlotIdsRef.current === currentSlotIdsToFetch) {\n return;\n }\n\n prevSlotIdsRef.current = currentSlotIdsToFetch;\n\n const fetchData = async () => {\n setLoading(true);\n setError(null);\n\n try {\n const response = await apiClient({\n method: 'GET',\n url: '/arenaslots/isInUse',\n params: { slotIds: slotIdsToFetch },\n })\n setData(data => ({ ...data, ...response.data }));\n } catch (err) {\n setError(err);\n } finally {\n setLoading(false);\n }\n };\n\n\n if (!slotIdsToFetch?.length) return;\n\n fetchData();\n }, [ slotIdsToFetch ])\n\n return { data, loading, error };\n}\n","import React from 'react';\nimport { ReferenceField, TextField, ReferenceInput, useTranslate, useLocale } from 'react-admin';\n\nimport AutocompleteInput from '../../common/inputs/AutocompleteInput';\nimport AutocompleteSuggestion from '../../common/inputs/AutocompleteSuggestion';\nimport { formatCurrency } from '../../locale';\n\nexport const AssignFeesField = props =>\n <ReferenceField basePath=\"/assignFees\" resource=\"assignFees\" reference=\"assignFees\" link={false} {...props}>\n <TextField source=\"name\" />\n </ReferenceField>\n\nconst AssignFeesSuggestion = ({ suggestion: fee }) => {\n const locale = useLocale();\n const fees = [ fee.Referee, fee.Linesperson, fee.Supervisor ]\n .map(value => formatCurrency(value, locale))\n .join(' / ')\n return <AutocompleteSuggestion primary={fee.name} secondary={fees} />\n}\n\nexport const AssignFeesInput = props => {\n const translate = useTranslate()\n return <ReferenceInput\n reference=\"assignFees\"\n perPage={999}\n filterToQuery={() => null}\n sort={{ field: 'name', order: 'ASC' }}\n {...props}\n >\n <AutocompleteInput\n optionText=\"name\" {...props}\n suggestionComponent={AssignFeesSuggestion}\n alwaysGroup\n groupBy={({ isArchived }) => translate(`resources.assignFees.values.isArchived.${isArchived ? 'archived' : 'notArchived'}`)}\n />\n </ReferenceInput>\n}\n","import React from 'react';\nimport { NumberField, ResourceContextProvider } from 'react-admin';\nimport moment from 'moment';\nimport { Typography } from '@material-ui/core';\n\nimport Toolbar from '../../common/ra/Toolbar';\nimport FunctionField from '../../common/fields/FunctionField'\n\nimport { OfficeField } from '../offices/OfficeField';\nimport { AssignSystemField } from '../assignSystems';\nimport { AssignFeesField } from '../assignFees';\nimport { CategoriesField } from '../categories/CategoriesField';\nimport { GroupsField } from '../groups/GroupsField';\n\nimport { AssignRuleDatagrid } from './AssignRuleModal';\n\nconst renderRule = (rule, source, resource, translate) => {\n const { value, type } = rule;\n\n switch (type) {\n case 'systemId':\n return <AssignSystemField source=\"value\" />\n case 'officeId':\n return <>\n {translate('resources.assignRules.labels.rules.officeId')} <OfficeField source=\"value\" />\n </>\n case 'feesId':\n return <>\n {translate('resources.assignRules.labels.rules.feesId')}: <AssignFeesField source=\"value\" />\n </>\n case 'minReferee':\n case 'minLinesperson':\n case 'minOfficial':\n case 'minScorekeeper':\n case 'minTimekeeper':\n case 'minGrade':\n case 'minRefereeGrade':\n case 'minLinespersonGrade':\n case 'minAge':\n return translate(`resources.assignRules.labels.rules.${type}`, { value })\n case 'assignType':\n case 'status':\n return translate(`resources.assignRules.labels.rules.${type}`, { value: translate(`resources.assignRules.options.${value}`) })\n default:\n return null\n }\n}\n\nconst renderAttributes = (rule, source, resource, translate) => {\n if (!rule) return null;\n\n const attributes = [];\n const { categoryIds, types, groupIds } = rule;\n const { duration, days, time, effectiveDate } = rule.attributes || {};\n\n if (types && types.length) {\n attributes.push(<Typography variant=\"subtitle2\">{translate('resources.assignRules.fields.types')}</Typography>)\n attributes.push(<Typography variant=\"body2\">{\n types.map(type => translate(`resources.assignRules.values.types.${type}`)).join(', ')\n }</Typography>)\n }\n\n if (groupIds && groupIds.length) {\n attributes.push(<Typography variant=\"subtitle2\">{translate('resources.assignRules.fields.groupIds')}</Typography>)\n attributes.push(<GroupsField source=\"groupIds\" showType allowEmpty />)\n }\n\n if (duration) {\n attributes.push(<Typography variant=\"body2\">{\n translate('resources.assignRules.labels.duration', { duration })\n }</Typography>)\n }\n\n if (days && Array.isArray(days) && days.length) {\n attributes.push(<Typography variant=\"body2\">{\n translate('resources.assignRules.labels.days', { days: days.join(', ') })\n }</Typography>)\n }\n\n if (time) {\n attributes.push(<Typography variant=\"body2\">{\n translate('resources.assignRules.labels.time_before', { time })\n }</Typography>)\n }\n\n if (categoryIds?.length) {\n attributes.push(<Typography variant=\"subtitle2\">{translate('resources.assignRules.fields.categoryIds')}</Typography>)\n attributes.push(<CategoriesField source=\"categoryIds\" showType allowEmpty />)\n }\n\n if (effectiveDate) {\n attributes.push(<Typography variant=\"body2\">{\n translate('resources.assignRules.labels.effective', { date: moment.utc(effectiveDate).format('LL') })\n }</Typography>)\n }\n\n return attributes;\n}\n\nexport const AssignOfficeField = ({ source, ...props }) =>\n <ResourceContextProvider value=\"offices\">\n <OfficeField source={source} {...props} />\n </ResourceContextProvider>\n\nexport const AssignRuleField = props =>\n <FunctionField label=\"resources.assignRules.labels.rule\" render={renderRule} />\n\nexport const AssignRuleGrid = props =>\n <AssignRuleDatagrid size=\"medium\" toolbar={<Toolbar />} {...props}>\n <AssignRuleField />\n <FunctionField label=\"resources.assignRules.labels.criteria\" render={renderAttributes} />\n <NumberField source=\"order\" />\n <AssignOfficeField source=\"officeId\" />\n </AssignRuleDatagrid>\n\nexport const AssignRuleAltGrid = props =>\n <AssignRuleDatagrid size=\"medium\" toolbar={<Toolbar />} {...props}>\n <FunctionField label=\"resources.assignRules.labels.criteria\" render={renderAttributes} />\n <NumberField source=\"order\" />\n <AssignOfficeField source=\"officeId\" />\n </AssignRuleDatagrid>\n\n","import React, { useRef } from 'react';\nimport { NumberInput, SimpleForm, TextInput, useTranslate } from 'react-admin';\nimport { Grid, Typography } from '@material-ui/core';\nimport { Alert, AlertTitle } from '@material-ui/lab';\nimport { Restore } from '@material-ui/icons';\nimport { useFormState } from 'react-final-form';\nimport createCalculator from 'final-form-calculate';\n\nimport { isEmpty } from '@hisports/parsers';\nimport { GAME_OFFICE_TYPES } from '@hisports/common/src/constants';\n\nimport Toolbar from '../../common/ra/Toolbar';\nimport TimeInput from '../../common/inputs/BasicTimeInput';\nimport { AssignRuleStatusEnumInput, AssignRuleTypeEnumInput, AssignTypeEnumInput, DayEnumInput, ScheduleTypeEnumInput } from '../../common/inputs/EnumInputs';\n\nimport { OfficeInput } from '../offices/OfficeInput';\nimport { OfficeGroupInput } from '../groups/GroupInput';\nimport { CategoryInput } from '../categories/CategoryInput';\nimport { AssignSystemInput } from '../assignSystems';\nimport { AssignFeesInput } from '../assignFees';\nimport SwitchInput from '../../common/inputs/SwitchInput';\nimport { DateInput } from '../../common/inputs/DateInput';\nimport { InformationTooltip } from '../../common/InformationTooltip';\nimport { useRichTranslate } from '../../common/useRichTranslate';\n\nconst inputProps = {\n resource: 'assignRules',\n basePath: '/assignRules',\n variant: 'outlined',\n margin: 'none',\n fullWidth: true,\n}\n\nconst validate = values => {\n const errors = {};\n switch (values.type) {\n case 'minReferee':\n case 'minLinesperson':\n case 'minOfficial':\n case 'minScorekeeper':\n case 'minTimekeeper':\n case 'minRefereeGrade':\n case 'minLinespersonGrade':\n case 'minAge': {\n if (values.value <= 0) errors.value = 'ra.validation.greater_than_zero'\n }\n }\n if (values.type == null) errors.type = 'ra.validation.required'\n if (values.value == null) errors.value = 'ra.validation.required'\n\n if (values.order == null) {\n errors.order = 'ra.validation.required'\n } else if (values.order <= 0) {\n errors.order = 'ra.validation.greater_than_zero'\n }\n return errors;\n}\n\nexport const AssignRuleValueInput = ({ ...props }) => {\n const { values = {} } = useFormState();\n const { value: assignValue } = values\n\n switch (values.type) {\n case 'assignType':\n return <AssignTypeEnumInput helperText={`resources.assignRules.helpers.${assignValue ? `assignTypes.${assignValue}` : 'assignType'}`} {...inputProps} {...props} />\n\n case 'officeId':\n return <OfficeInput filter={{ type: { nin: [...GAME_OFFICE_TYPES, 'Historical'] }, isAssigner: true }} helperText=\"resources.assignRules.helpers.officeId\" {...inputProps} {...props} />\n\n case 'systemId':\n return <AssignSystemInput {...inputProps} {...props} />\n\n case 'feesId':\n return <AssignFeesInput {...inputProps} {...props} />\n\n case 'minReferee':\n case 'minLinesperson':\n case 'minOfficial':\n case 'minScorekeeper':\n case 'minTimekeeper':\n case 'minRefereeGrade':\n case 'minLinespersonGrade':\n case 'minAge':\n return <NumberInput {...inputProps} {...props} />\n\n case 'status':\n return <AssignRuleStatusEnumInput {...inputProps} {...props} />\n\n default:\n return <TextInput {...inputProps} {...props} disabled />\n }\n}\n\nexport const AssignRuleOfficeInput = props => {\n const { values } = useFormState();\n let helperText;\n switch (values.type) {\n case 'assignType':\n case 'officeId':\n helperText = 'resources.assignRules.helpers.scheduledBy';\n break;\n default:\n if (!values.type) break;\n helperText = 'resources.assignRules.helpers.assignedBy';\n break;\n }\n return <OfficeInput helperText={helperText} {...props} />\n}\n\nconst RuleValueInput = props => {\n const translate = useRichTranslate()\n const { values: { type } } = useFormState();\n\n const isAssignVia = type === 'assignType';\n\n return <Grid container spacing={2}>\n <Grid item xs={isAssignVia ? 11 : 12}>\n <AssignRuleValueInput source=\"value\" {...inputProps} />\n </Grid>\n {isAssignVia && <Grid item xs={1} container style={{ paddingTop: 22 }}>\n <InformationTooltip\n text={<div dangerouslySetInnerHTML={{ __html: translate('resources.assignRules.tooltips.determine_via') } } />}\n fontSize=\"medium\"\n placement=\"top\"\n width={1000}\n />\n </Grid>}\n </Grid>\n}\n\nexport const AssignRuleForm = ({ types, ...props }) => {\n const { type, value } = props.initialValues || {}\n\n const translate = useTranslate();\n const decorators = useRef([createCalculator({\n field: 'type',\n updates: {\n value: (type, values, prevValues) => {\n if (!isEmpty(prevValues) && prevValues.type != type) {\n // Weird behavior when saving if we dont reset the value initialValues\n props.initialValues.value = null;\n return null;\n }\n\n return values.value;\n }\n }\n })])\n\n return <>\n <Alert severity=\"info\" icon={<Restore />} fullWidth>\n <AlertTitle>{translate('resources.assignRules.alerts.new_games_only_title')}</AlertTitle>\n <span dangerouslySetInnerHTML={{ __html: translate('resources.assignRules.alerts.new_games_only') }}></span>\n </Alert>\n <br />\n <SimpleForm toolbar={<Toolbar />} decorators={decorators.current} validate={validate} {...props}>\n <Grid container spacing={2} fullWidth>\n <Grid item xs={12} md={4}>\n <AssignRuleTypeEnumInput source=\"type\" types={types} {...inputProps} />\n </Grid>\n\n <Grid item xs={12} md={8}>\n <RuleValueInput />\n </Grid>\n\n <Grid item xs={12}>\n <Typography variant=\"subtitle2\">{translate('resources.assignRules.labels.criteria')}</Typography>\n </Grid>\n <Grid item xs={12}>\n <CategoryInput source=\"categoryIds\" multiple allowEmpty emptyLabel=\"All\" helperText=\"resources.assignRules.helpers.categoryIds\" {...inputProps} />\n </Grid>\n\n <Grid item xs={12}>\n <ScheduleTypeEnumInput source=\"types\" multiple allowEmpty emptyLabel=\"All\" helperText=\"resources.assignRules.helpers.types\" {...inputProps} />\n </Grid>\n\n <Grid item xs={12}>\n <OfficeGroupInput source=\"groupIds\" multiple allowEmpty helperText=\"resources.assignRules.helpers.groupIds\" {...inputProps} />\n </Grid>\n\n <Grid item xs={12} sm={4}>\n <NumberInput source=\"attributes.duration\" helperText=\"resources.assignRules.helpers.duration\" {...inputProps} />\n </Grid>\n\n <Grid item xs={12} sm={4}>\n <DayEnumInput source=\"attributes.days\" multiple helperText=\"ra.message.optional\" {...inputProps} />\n </Grid>\n\n <Grid item xs={12} sm={4}>\n <TimeInput source=\"attributes.time\" helperText=\"ra.message.optional\" {...inputProps} />\n </Grid>\n\n <Grid item xs={12} md={4}>\n <NumberInput source=\"order\" initialValue={1} {...inputProps} />\n </Grid>\n\n <Grid item xs={12} md={4}>\n <AssignRuleOfficeInput source=\"officeId\" disabled {...inputProps} />\n </Grid>\n\n <Grid item xs={12} sm={4}>\n <DateInput source=\"attributes.effectiveDate\" helperText=\"ra.message.optional\" {...inputProps} />\n </Grid>\n\n <Grid item xs={12}>\n <SwitchInput source=\"stopInheritance\" helperText=\"resources.assignRules.helpers.stopInheritance\" {...inputProps} />\n </Grid>\n </Grid>\n </SimpleForm>\n </>\n}\n","import React, { useState } from 'react';\nimport { useTranslate } from 'react-admin';\nimport { Button } from '@material-ui/core';\nimport { Add } from '@material-ui/icons';\n\nimport { DialogDatagrid } from '../../common/dialogs/DialogDatagrid';\nimport { CreateResourceDialog, EditResourceDialog } from '../../common/dialogs/ResourceDialog';\n\nimport { AssignRuleForm } from './AssignRuleForm';\n\nconst AddAssignRuleDialog = ({ types, ...props }) =>\n <CreateResourceDialog label=\"resources.assignRules.actions.add\" resource=\"assignRules\" basePath=\"/assignRules\" maxWidth=\"md\" {...props}>\n <AssignRuleForm types={types} />\n </CreateResourceDialog>\n\nconst EditAssignRuleDialog = props =>\n <EditResourceDialog label=\"resources.assignRules.labels.edit\" resource=\"assignRules\" basePath=\"/assignRules\" maxWidth=\"md\" {...props}>\n <AssignRuleForm />\n </EditResourceDialog>\n\nexport const AddAssignRuleButton = ({ size, variant, ...props }) => {\n const [ isOpen, setOpen ] = useState(false);\n const translate = useTranslate();\n return <>\n <Button color=\"primary\" size={size} variant={variant} startIcon={<Add />} onClick={() => setOpen(true)}>\n {translate('resources.assignRules.actions.add')}\n </Button>\n <AddAssignRuleDialog isOpen={isOpen} handleClose={() => setOpen(false)} {...props} />\n </>\n}\n\nexport const AssignRuleDatagrid = props => <DialogDatagrid dialog={EditAssignRuleDialog} {...props} />\n","import React from 'react';\nimport { ReferenceField, TextField, ReferenceInput, useLocale } from 'react-admin';\n\nimport { translateApiProperty } from '@hisports/common';\n\nimport AutocompleteInput from '../../common/inputs/AutocompleteInput';\n\nexport const AssignSystemField = props =>\n <ReferenceField basePath=\"/assignSystem\" resource=\"assignSystems\" reference=\"assignSystems\" link={false} {...props}>\n <TextField source=\"name\" />\n </ReferenceField>\n\nexport const AssignSystemInput = props => {\n const locale = useLocale();\n\n return <ReferenceInput\n reference=\"assignSystems\"\n perPage={999}\n sort={{ field: 'name', order: 'ASC' }}\n filterToQuery={() => null}\n {...props}\n >\n <AutocompleteInput optionText={name => translateApiProperty(name, 'name', locale)} {...props} />\n </ReferenceInput>\n}\n","import React from 'react';\nimport { ReferenceField, TextField, useRecordContext } from 'react-admin';\n\nexport const AttributeTypeField = ({ variant = 'body2', ...props }) => {\n const attributeType = useRecordContext(props);\n\n return <ReferenceField basePath=\"/attributeTypes\" resource=\"attributeTypes\" reference=\"attributeTypes\" link={false} {...props}>\n <TextField source=\"name\" variant={variant} />\n </ReferenceField>\n}\n\nAttributeTypeField.defaultProps = {\n addLabel: true,\n}\n","import { GET_LIST, useQueryWithStore } from \"react-admin\"\n\nimport { useSelector } from 'react-redux';\n\nexport const useBranchSettings = officeId => {\n const settingsInStore = useSelector(state => state?.admin?.resources?.effectiveBranchOfficeSettings?.data?.[officeId])\n\n const { data, loading, error, refetch } = useQueryWithStore({\n type: GET_LIST,\n resource: 'effectiveBranchOfficeSettings',\n payload: {\n filter: { officeId, effectiveOffices: false },\n } }, {\n enabled: !settingsInStore && !!officeId,\n })\n\n return { data: settingsInStore || data?.[0], loading, error, refetch }\n}\n","import React from 'react';\nimport { ReferenceArrayField, useListContext, useLocale, useTranslate } from 'react-admin';\nimport { groupBy, orderBy } from 'lodash';\n\nimport { dedupeBy } from '@hisports/parsers';\nimport { translateApiProperty } from '@hisports/common';\n\nimport { formatList } from '../../locale';\n\nconst format = (locale, categories, source, translate) => {\n const values = categories.map(category => {\n let value = translateApiProperty(category, source, locale);\n if (category?.gender) {\n value += ` ${translate(`resources.categories.values.gender.${category.gender}`)}`\n }\n return value\n })\n\n return formatList(values, locale);\n}\n\nconst CategoriesList = ({ source, emptyText }) => {\n const translate = useTranslate()\n const locale = useLocale();\n const { ids = [], data } = useListContext();\n\n const categories = orderBy(dedupeBy('id', ids.map(id => data?.[id])), 'order')\n if (categories.length <= 5) return format(locale, categories, source, translate) || translate(emptyText, { _: emptyText }) || null;\n\n const divisions = groupBy(categories, 'divisionId')\n return Object.keys(divisions).map(divisionId => {\n const categories = divisions[divisionId]\n const value = format(locale, categories, source, translate) || translate(emptyText, { _: emptyText })\n if (!value) return null;\n return <div>{value}</div>;\n })\n}\n\nexport const CategoriesField = ({ authMethod = \"show\", showId = false, showSeason = false, link = 'show', variant = 'body2', emptyText, ...props }) => {\n return <ReferenceArrayField basePath=\"/categories\" resource=\"categories\" reference=\"categories\" allowEmpty {...props} >\n <CategoriesList source=\"name\" emptyText={emptyText} />\n </ReferenceArrayField>\n}\n\nCategoriesField.defaultProps = {\n addLabel: true,\n}\n","import React from 'react';\nimport { ReferenceField, useTranslate } from 'react-admin';\nimport { Typography } from '@material-ui/core';\n\nimport FunctionField from '../../common/fields/FunctionField';\nimport { TextLocaleField } from '../../common/fields/TextLocaleField';\n\nexport const CategoryField = ({ variant = 'body2', includeGender = \"inline\", ...props }) => {\n const translate = useTranslate()\n return <ReferenceField basePath=\"/categories\" resource=\"categories\" reference=\"categories\" {...props} link={false}>\n <FunctionField source=\"name\" render={category => {\n const inline = [\n includeGender === 'inline' && translate(`resources.categories.values.gender.${category.gender}`),\n ].filter(Boolean).flatMap(e => [e, ' • ']).slice(0, -1)\n const full = [\n includeGender === 'full' && translate(`resources.categories.values.gender.${category.gender}`),\n ].filter(Boolean).flatMap(e => [e, ' • ']).slice(0, -1)\n return <>\n <TextLocaleField source=\"name\" variant={variant} />\n {inline.length > 0 && <span><Typography variant={variant} display=\"inline\" color=\"textSecondary\"> {inline}</Typography></span>}\n {full.length > 0 && <div><Typography variant={variant} display=\"inline\" color=\"textSecondary\">{full}</Typography></div>}\n </>\n }} variant={variant} />\n </ReferenceField>\n}\n\nCategoryField.defaultProps = {\n addLabel: true,\n}\n","import React from 'react';\nimport { ReferenceInput, ReferenceArrayInput, useLocale, useTranslate } from 'react-admin';\nimport { useSelector } from 'react-redux'\nimport { useFormState } from 'react-final-form';\nimport { get } from 'lodash';\n\nimport AutocompleteInput from '../../common/inputs/AutocompleteInput';\nimport AutocompleteSuggestion from '../../common/inputs/AutocompleteSuggestion'\nimport { ilike } from '../../http/restClient/filters';\n\nimport { translateApiProperty } from '@hisports/common';\n\nconst filterCategory = (name, locale) => {\n if (!name) return;\n const inputs = name.split(' ');\n return { or: inputs.flatMap(input => ([\n { name: ilike(input) },\n { [`i18n.${locale}.name`]: ilike(input) },\n { 'division.name': ilike(input) },\n { 'gender': ilike(input) },\n { 'class.name': ilike(input) },\n ])) }\n}\n\nconst getValues = (result, property) => {\n const values = [];\n if (result?.[property]) values.push(result[property]);\n if (!result.i18n) return values;\n Object.keys(result.i18n).forEach(locale => {\n if (result.i18n[locale][property]) values.push(result.i18n[locale][property])\n })\n return values;\n}\n\nconst matches = (left, right) => `${left}`.trim().toLowerCase().includes(`${right}`.trim().toLowerCase());\nconst equals = (left, right) => `${left}`.trim().toLowerCase() === `${right}`.trim().toLowerCase()\nconst matchCategory = (translate) => (input, result) => {\n if (!input || !result) return false;\n return input.split(' ')\n .every(input =>\n (getValues(result, 'name').some(value => matches(value, input))) ||\n (equals(result.gender, input) || equals(translate(`resources.categories.values.gender.${result.gender}`), input)) ||\n (getValues(result.division, 'name').some(value => matches(value, input))) ||\n (getValues(result.class, 'name').some(value => matches(value, input)))\n )\n}\n\nexport const CategorySuggestion = ({ suggestion: category, query, isHighlighted, ...props }) => {\n const locale = useLocale();\n const translate = useTranslate()\n return <AutocompleteSuggestion primary={translateApiProperty(category, 'name', locale)} secondary={translate(`resources.categories.values.gender.${category.gender}`)} />\n}\n\nexport const CategoryInput = ({ helperText, multiple, options, ...props }) => {\n const locale = useLocale();\n const translate = useTranslate();\n const { values } = useFormState();\n const categories = useSelector(state => state.admin.resources.categories.data);\n\n const Input = multiple ? ReferenceArrayInput : ReferenceInput;\n const categoryId = !multiple && get(values, props.source);\n const gender = categoryId && categories?.[categoryId]?.gender;\n\n return <Input\n label=\"resources.categories.name\"\n reference=\"categories\"\n filterToQuery={name => filterCategory(name, locale)}\n sort={{ field: ['order', 'name'], order: ['ASC', 'ASC'] }}\n perPage={999}\n {...props}\n >\n <AutocompleteInput\n optionText={category => (multiple && category) ? `${translateApiProperty(category, 'name', locale)} ${translate(`resources.categories.values.gender.${category.gender}`)}` : translateApiProperty(category, 'name', locale)}\n suggestionComponent={CategorySuggestion}\n disableSort\n groupBy={category => translateApiProperty(category.division, 'name', locale)}\n inputValueMatcher={matchCategory(translate)}\n emptyOptionsText=\"ra.input.autocomplete.type_to_search\"\n multiple={multiple}\n helperText={gender ? translate(`resources.categories.values.gender.${gender}`) : helperText}\n options={options}\n />\n </Input>\n}\n","import React, { useState } from 'react';\nimport { useNotify } from 'react-admin';\nimport { Button, Dialog, DialogActions, DialogContent, DialogContentText, DialogTitle } from '@material-ui/core'\n\nimport { apiClient } from '../../http';\nimport { isAuthorized } from '../../common/Authorize';\nimport { useRichTranslate } from '../../common/useRichTranslate';\n\nexport default ({ isOpen = false, contact, onClose }) => {\n const notify = useNotify();\n const translate = useRichTranslate();\n const [ sending, setSending ] = useState(false);\n if (!isOpen || !contact) return null;\n\n const canSendVerification = isAuthorized(contact, 'contacts', 'verify');\n const onClick = () => {\n if (!canSendVerification) return;\n\n setSending(true)\n apiClient(`/contacts/${contact.id}/sendVerification`, { method: 'POST' })\n .then(() => {\n onClose(true)\n notify('ra.message.verification_email');\n })\n .catch(err => {\n const errorMessage = translate(`resources.contacts.notifications.${err?.response?.data?.error?.name}`, { _: err?.response?.data?.error?.message || 'ra.page.error' })\n notify(errorMessage, 'error');\n })\n .finally(() => {\n setSending(false)\n })\n }\n\n const action = canSendVerification\n ? translate('resources.contacts.messages.already_received_email')\n : translate('resources.contacts.messages.only_participant_verify')\n\n return <Dialog\n open={isOpen}\n onClose={() => onClose()}\n aria-labelledby=\"alert-dialog-title\"\n aria-describedby=\"alert-dialog-description\"\n disableBackdropClick={canSendVerification}\n >\n <DialogTitle id=\"alert-dialog-title\">{translate('ra.message.unverified')}</DialogTitle>\n <DialogContent>\n <DialogContentText id=\"alert-dialog-description\">\n {translate('resources.contacts.messages.has_not_been_verified', { contact: <strong>{contact.value}</strong> })}\n <p>{translate('resources.contacts.messages.unverified_explain')}</p>\n\n <p>{action}</p>\n </DialogContentText>\n </DialogContent>\n <DialogActions>\n <Button onClick={() => onClose(false)}>\n {translate('ra.action.close')}\n </Button>\n {canSendVerification && <Button onClick={onClick} color=\"primary\" autoFocus disabled={sending}>\n {translate('ra.action.send_verification')}\n </Button>}\n </DialogActions>\n </Dialog>\n}\n","import React, { useState } from 'react';\nimport { useTranslate } from 'react-admin';\nimport { Tooltip, Button } from '@material-ui/core';\nimport { AlternateEmail, Check, Home, LocalHospital, NotificationImportantOutlined, NotificationsActiveOutlined, NotificationsOffOutlined, PhoneAndroidOutlined, Star } from '@material-ui/icons';\nimport { makeStyles } from '@material-ui/styles';\n\nimport { isAuthorized } from '../../common/Authorize';\nimport FunctionField from '../../common/fields/FunctionField'\n\nimport { ContactDatagrid } from './ContactModal';\nimport ContactVerifyDialog from './ContactVerifyDialog';\n\nconst useStyles = makeStyles({\n thead: {\n display: 'none',\n },\n icons: {\n display: 'flex',\n gap: 8,\n justifyContent: 'flex-end'\n }\n})\n\nconst useInfoStyles = makeStyles(theme => ({\n root: {\n display: 'block',\n lineHeight: '24px',\n },\n icon: {\n marginRight: theme.spacing(1),\n },\n value: {\n display: 'inline-block',\n verticalAlign: 'top',\n },\n verified: {\n fontSize: 'inherit',\n verticalAlign: 'text-top',\n },\n notes: {\n fontStyle: 'italic',\n paddingLeft: theme.spacing(4),\n color: theme.palette.text.secondary,\n }\n}))\n\nconst TypeIcon = ({ type, className }) => {\n if (type === 'Email') return <AlternateEmail className={className} fontSize=\"small\" />\n if (type === 'Mobile') return <PhoneAndroidOutlined className={className} fontSize=\"small\" />\n if (type === 'Home') return <Home className={className} fontSize=\"small\" />\n return null;\n}\n\nconst numberRegex = /\\d+/g;\nconst parseValue = (value, type) => {\n if (type === 'Email') return value;\n const numbers = value.match(numberRegex).join('');\n if (numbers.length !== 10) return value;\n return `(${numbers.substring(0, 3)}) ${numbers.substring(3, 6)}-${numbers.substring(6)}`\n}\n\nconst InfoField = props => {\n const classes = useInfoStyles();\n return <FunctionField {...props} render={contact => {\n const { type, value, notes, isVerified } = contact;\n return <div className={classes.root}>\n <TypeIcon type={type} className={classes.icon} />\n <div className={classes.value}>{parseValue(value, type)} {isVerified && type === 'Email' && <TooltipIcon title=\"resources.contacts.tooltips.isVerified\" icon={<Check htmlColor=\"green\" className={classes.verified} />} />}</div>\n <div className={classes.notes}>{notes}</div>\n </div>\n }} />\n}\n\nconst TooltipIcon = ({ title, icon }) => {\n const translate = useTranslate();\n return <Tooltip title={translate(title)}>\n {icon}\n </Tooltip>\n}\n\n\nconst StatusField = ({ className, ...props }) => {\n return <FunctionField {...props} render={contact => {\n const { type, isPrimary, isEmergency, isNotification, isVerified } = contact;\n const icons = [];\n if (type === 'Email') {\n if (isNotification && isVerified) icons.push(<TooltipIcon title=\"resources.contacts.tooltips.notificationsActive\" icon={<NotificationsActiveOutlined />} />)\n if (!isNotification) icons.push(<TooltipIcon title=\"resources.contacts.tooltips.notificationsDisabled\" icon={<NotificationsOffOutlined htmlColor=\"gray\" />} />)\n }\n if (isEmergency) icons.push(<TooltipIcon title=\"resources.contacts.tooltips.isEmergency\" icon={<LocalHospital htmlColor=\"red\" />} />)\n if (isPrimary) icons.push(<TooltipIcon title=\"resources.contacts.tooltips.isPrimary\" icon={<Star htmlColor=\"orange\" />} />)\n return <div className={className}>{icons}</div>\n }} />\n}\n\nconst VerifiedField = ({ setDialogContact, ...props }) => {\n return <FunctionField {...props} render={(contact, source, resource, translate) => {\n if (contact.type !== 'Email' || contact.isVerified || !contact.isNotification) return null;\n\n const canSendVerification = isAuthorized(contact, 'contacts', 'verify');\n\n const onClick = e => {\n e.preventDefault();\n e.stopPropagation();\n setDialogContact(contact);\n }\n\n return <Tooltip title={canSendVerification ? translate('ra.action.click_to_verify') : translate('ra.message.unverified')}>\n <Button size=\"small\" onClick={onClick} startIcon={<NotificationImportantOutlined fontSize=\"small\" />}>\n {translate('ra.message.unverified')}\n </Button>\n </Tooltip>\n }} />\n}\n\nexport const ContactGrid = props => {\n const classes = useStyles();\n const [ dialogContact, setDialogContact ] = useState(null);\n\n return <>\n <ContactDatagrid size=\"medium\" classes={classes} {...props}>\n <InfoField source=\"value\" />\n <VerifiedField source=\"isVerified\" setDialogContact={setDialogContact} textAlign=\"right\" />\n <StatusField source=\"isPrimary\" textAlign=\"right\" className={classes.icons} />\n </ContactDatagrid>\n <ContactVerifyDialog isOpen={!!dialogContact} contact={dialogContact} onClose={() => setDialogContact(null)} />\n </>\n}\n","import React, { useRef } from 'react';\nimport { TextInput, SimpleForm, useTranslate, useLocale } from 'react-admin';\nimport { useFormState } from 'react-final-form';\nimport createCalculator from 'final-form-calculate';\nimport { Grid, Typography } from '@material-ui/core'\nimport { Check, Warning } from '@material-ui/icons';\nimport { Alert, AlertTitle } from \"@material-ui/lab\"\n\nimport { ContactTypeEnumInput, LanguageTypeEnum } from '../../common/inputs/EnumInputs';\nimport Toolbar from '../../common/ra/Toolbar';\nimport SwitchInput from '../../common/inputs/SwitchInput';\nimport { isAuthorized } from '../../common/Authorize';\n\n// simple email regex to require at least: a@a.a\nconst emailRegex = /^[^@\\s]+@[^@\\s]+\\.[^@\\s]+$/i;\nconst phoneRegex = /^[\\d-()\\s]*$/\n\nconst validate = values => {\n const errors = {};\n\n if (!values.type) errors.type = 'ra.validation.required'\n if (!values.value) errors.value = 'ra.validation.required'\n if (!values.language) errors.language = 'ra.validation.required'\n\n if (values.value && values.type === 'Email' && !emailRegex.test(values.value)) {\n errors.value = 'ra.validation.invalid_email_format';\n }\n if (values.value && values.type !== 'Email' && !phoneRegex.test(values.value)) {\n errors.value = 'ra.validation.invalid_number_format';\n }\n return errors;\n}\n\nconst inputProps = {\n resource: 'contacts',\n basePath: '/contacts',\n variant: 'outlined',\n margin: 'none',\n fullWidth: true,\n}\n\nconst ValueInput = props => {\n const { initialValues: { value: initialValue, isVerified }, values: { type, value } } = useFormState();\n if (type !== 'Email' || !value?.length) return <TextInput {...props} />\n\n const changed = initialValue !== value;\n const helperText = changed\n ? 'resources.contacts.helpers.value'\n : isVerified ? 'ra.message.verified_email' : 'ra.message.unverified_email'\n\n return <TextInput {...props} helperText={helperText} InputProps={{\n endAdornment: !changed && isVerified && <Check />\n }} />\n}\n\nconst FormContent = props => {\n const translate = useTranslate();\n const { values, initialValues } = useFormState();\n const { type, isVerified } = values || {};\n\n const showAccountAlert = values.type === 'Email' && isAuthorized([], 'participants', 'invite', true);\n\n return <>\n <Grid container spacing={1} fullWidth>\n <Grid item xs={12}>\n <Typography variant=\"body1\" color=\"textSecondary\">{translate('resources.contacts.messages.contacts')}</Typography>\n </Grid>\n {showAccountAlert && <Grid item xs={12}>\n <Alert severity=\"error\" icon={<Warning />} variant=\"outlined\">\n <AlertTitle>{translate('resources.contacts.alerts.contact_accounts')}</AlertTitle>\n {translate(!initialValues?.id ? 'resources.contacts.alerts.create_via_invite_button' : 'resources.contacts.alerts.change_login') }\n </Alert>\n </Grid>}\n <Grid item xs={12}>\n <ContactTypeEnumInput source=\"type\" helperText=\"\" disabled={isVerified} {...inputProps} />\n </Grid>\n <Grid item xs={12}>\n <ValueInput source=\"value\" autoFocus disabled={isVerified} {...inputProps} />\n </Grid>\n </Grid>\n <br />\n <Typography variant=\"subtitle2\">{translate('resources.contacts.labels.information')}</Typography>\n <Grid container spacing={1} fullWidth>\n <Grid item xs={12}>\n <SwitchInput source=\"isPrimary\" helperText=\"\" {...inputProps} />\n </Grid>\n <Grid item xs={12}>\n <SwitchInput source=\"isEmergency\" helperText=\"\" {...inputProps} />\n </Grid>\n <Grid item xs={12}>\n <TextInput source=\"notes\" helperText=\"ra.message.optional\" multiline rows=\"2\" {...inputProps} />\n </Grid>\n </Grid>\n\n {type === 'Email' && <>\n <br />\n <Typography variant=\"subtitle2\">{translate('resources.contacts.labels.notifications')}</Typography>\n <Grid container spacing={1} fullWidth>\n <Grid item xs={12}>\n <SwitchInput source=\"isNotification\" helperText=\"\" {...inputProps} />\n </Grid>\n <Grid item xs={12}>\n <LanguageTypeEnum source=\"language\" label=\"resources.contacts.fields.language\" helperText=\"\" {...inputProps} />\n </Grid>\n </Grid>\n </>}\n </>\n}\n\nexport const ContactForm = ({ initialValues = {}, ...props }) => {\n const locale = useLocale();\n\n const decorators = useRef([createCalculator({\n field: 'type',\n updates: {\n isNotification: (type, values, prevValues) => {\n if (type !== 'Email') return false;\n if (prevValues.type !== 'Email') return initialValues.isNotification ?? true;\n\n return values.isNotification;\n }\n }\n })])\n\n return <SimpleForm\n toolbar={<Toolbar />}\n validate={validate}\n decorators={decorators.current}\n initialValues={{ type: 'Email', isPrimary: false, language: locale, isNotification: true, ...initialValues }}\n {...props}\n >\n <FormContent {...props} />\n </SimpleForm>\n}\n","import React, { Fragment, useState } from 'react';\nimport { useTranslate } from 'react-admin';\nimport { Button } from '@material-ui/core';\nimport { Add } from '@material-ui/icons';\n\nimport { DialogDatagrid } from '../../common/dialogs/DialogDatagrid';\nimport { CreateResourceDialog, EditResourceDialog } from '../../common/dialogs/ResourceDialog';\n\nimport { ContactForm } from './ContactForm';\n\nconst AddContactDialog = props =>\n <CreateResourceDialog label=\"resources.contacts.actions.add\" resource=\"contacts\" basePath=\"/contacts\" {...props}>\n <ContactForm />\n </CreateResourceDialog>\n\nconst EditContactDialog = props =>\n <EditResourceDialog label=\"resources.contacts.labels.edit\" resource=\"contacts\" basePath=\"/contacts\" {...props}>\n <ContactForm />\n </EditResourceDialog>\n\nexport const AddContactButton = ({ size, variant, ...props }) => {\n const [ isOpen, setOpen ] = useState(false);\n const translate = useTranslate()\n return <>\n <Button color=\"primary\" size={size} variant={variant} startIcon={<Add />} onClick={() => setOpen(true)}>{translate('resources.contacts.actions.add')}</Button>\n <AddContactDialog isOpen={isOpen} handleClose={() => setOpen(false)} {...props} />\n </>\n}\n\nexport const ContactDatagrid = props => <DialogDatagrid dialog={EditContactDialog} {...props} />\n","import React, { useState } from 'react';\nimport { useSelector } from 'react-redux';\nimport { useNotify, useRecordContext, useRefresh, useTranslate } from 'react-admin';\nimport { Button, Dialog, DialogActions, DialogContent, DialogTitle, useMediaQuery } from '@material-ui/core';\nimport { DoneAll } from '@material-ui/icons';\n\nimport { EventChanges } from '../../common/EventChanges';\nimport { apiClient } from '../../http';\nimport ScheduleSequenceError from '../schedulesequences/ScheduleSequenceError';\n\nconst PublishDraftGameDialog = ({ isOpen, setOpen, gameToUpdate, ...props }) => {\n const translate = useTranslate();\n const fullScreen = useMediaQuery(theme => theme.breakpoints.down('xs'));\n const refresh = useRefresh();\n const notify = useNotify();\n const record = useRecordContext()\n\n const handleClick = (e) => e.stopPropagation(); // needed to prevent edit dialog from opening when clicking inside the dialog\n\n const handleClose = (e) => {\n e.stopPropagation();\n e.preventDefault()\n setOpen(false);\n }\n\n const handleConfirm = async (e) => {\n apiClient(`/schedules/${record?.scheduleId}/publish`, {\n method: 'POST',\n data: {\n draftGameIds: [record?.id]\n },\n })\n .then(({ data }) => {\n const count = data?.count || 0;\n const failed = data?.failed || 0;\n const invalid = data?.invalid || 0;\n\n refresh();\n notify(translate('resources.draftGames.notifications.published_games', count));\n\n if (failed) {\n notify(translate('resources.draftGames.notifications.publish_failed', failed), 'error');\n }\n if (invalid) {\n notify(translate('resources.draftGames.notifications.invalid_games', invalid), 'error')\n }\n })\n .catch(err => {\n const name = err?.response?.data?.error?.name\n if (['missing_sequence', 'sequence_exhausted'].includes(name)) {\n const errorMsg = translate(`resources.draftGames.notifications.${name}`)\n notify(<ScheduleSequenceError errorMsg={errorMsg} scheduleId={gameToUpdate?.scheduleId} />, 'error')\n } else {\n notify(translate('resources.draftGames.notifications.published_games_error', 1), 'error')\n }\n })\n\n handleClose(e)\n }\n\n return <Dialog open={isOpen} onClose={handleClose} fullScreen={fullScreen} fullWidth maxWidth=\"sm\" onClick={handleClick}>\n <DialogTitle>{translate('resources.games.labels.confirm_changes')}</DialogTitle>\n <DialogContent>\n <EventChanges previousEvent={gameToUpdate} />\n </DialogContent>\n <DialogActions>\n <Button onClick={handleClose} color=\"secondary\">{translate('ra.action.cancel')}</Button>\n <Button onClick={handleConfirm} color=\"primary\">{translate('ra.action.confirm')}</Button>\n </DialogActions>\n </Dialog>\n}\n\nexport const PublishDraftGameAction = ({ size = \"small\", hideLabel = false, ...props }) => {\n const translate = useTranslate();\n const draftGame = useRecordContext()\n const [ isOpen, setOpen ] = useState(false);\n const games = useSelector(store => store.admin.resources.games.data);\n\n const gameToUpdate = games?.[draftGame?.updatedGameId];\n\n const handleClick = (e) => {\n e.preventDefault();\n e.stopPropagation();\n setOpen(true);\n }\n\n if (!gameToUpdate) return null;\n return <>\n <Button color=\"primary\" size={size} startIcon={<DoneAll />} onClick={handleClick}>{!hideLabel && translate('ra.action.publish')}</Button>\n {isOpen && <PublishDraftGameDialog isOpen={isOpen} setOpen={setOpen} gameToUpdate={gameToUpdate} {...props} />}\n </>\n}\n","import React from 'react';\nimport { GET_LIST, useQuery, useRecordContext } from 'react-admin';\nimport { makeStyles } from '@material-ui/core';\n\nimport { isAuthorized } from '../../common/Authorize';\n\nimport { PublishDraftGameAction } from './DraftGamePublishModal';\nimport { DraftGameApprovalAction } from './DraftGameApprovalModal';\n\nconst useFieldStyles = makeStyles(theme => ({\n root: {\n display: 'flex',\n justifyContent: 'flex-end',\n alignItems: 'center',\n [theme.breakpoints.down('sm')]: {\n alignItems: 'flex-end',\n flexDirection: 'column',\n }\n }\n}))\n\nexport const useDraftGameApprovals = draftGameId => useQuery({\n type: GET_LIST,\n resource: 'draftGameApprovals',\n payload: {\n filter: { draftGameId },\n sort: { field: ['targetType', 'targetId'], order: ['ASC', 'ASC'] }\n }\n}, { enabled: draftGameId != null })\n\nconst isDraftValid = (draftGame) => {\n const { isPublished, date, startTime, endTime, timezone, arenaId } = draftGame || {}\n return isPublished === false && date && startTime && endTime && timezone && arenaId;\n}\n\nexport const DraftGameActions = ({ hideLabel }) => {\n const draftGame = useRecordContext()\n const classes = useFieldStyles();\n const { data: approvals, loading } = useDraftGameApprovals(draftGame?.id);\n\n const canPublish = isAuthorized(draftGame, 'draftGames', 'publish') && isDraftValid(draftGame);\n const canApprove = isAuthorized(draftGame, 'draftGames', 'approve', false, false) && approvals?.length > 0;\n\n if (!draftGame || (!canPublish && !canApprove) || loading) return null;\n\n return <span className={classes.root}>\n {canApprove\n ? <DraftGameApprovalAction hideLabel={hideLabel} />\n : canPublish && <PublishDraftGameAction hideLabel={hideLabel} />\n }\n </span>\n}\n","import React, { useState } from 'react';\nimport { RecordContextProvider, SimpleForm, TextInput, useNotify, useRecordContext, useRefresh, useTranslate } from 'react-admin';\nimport { Badge, Button, Dialog, DialogActions, DialogContent, DialogContentText, DialogTitle, Divider, LinearProgress, List, ListItem, ListItemIcon, ListItemText, makeStyles, styled, Typography, useMediaQuery, withTheme } from '@material-ui/core';\nimport { Cancel, CheckCircle, PeopleOutline, Business, Inbox } from '@material-ui/icons';\nimport { useSelector } from 'react-redux';\nimport moment from 'moment';\n\nimport { apiClient, usePermissions } from '../../http';\n\nimport { DialogFormToolbar } from '../../common/dialogs/DialogForm';\nimport { EventChanges } from '../../common/EventChanges';\nimport { useRichTranslate } from '../../common/useRichTranslate';\nimport FunctionField from '../../common/fields/FunctionField';\n\nimport { useDraftGameApprovals } from './DraftGameActions';\nimport { UpdateGameAlert } from './DraftGameForm';\nimport { TeamField } from '../teams/TeamField';\nimport { OfficeField } from '../offices/OfficeField';\nimport { GameField } from '../games/GameField';\n\nconst APPROVED = 'Approved';\nconst DECLINED = 'Declined';\n\nconst useStyles = makeStyles(theme => ({\n deleteButton: {\n '& button[type=\"submit\"]': {\n color: theme.palette.error.main,\n },\n },\n actions: {\n display: 'flex',\n [theme.breakpoints.down('xs')]: {\n flexDirection: 'column',\n },\n alignItems: 'center',\n marginLeft: theme.spacing(1),\n },\n alert: {\n marginBottom: theme.spacing(2),\n },\n reasonTitle: {\n fontWeight: 500,\n },\n reasonContainer: {\n marginTop: theme.spacing(2),\n marginBottom: theme.spacing(1),\n marginInline: theme.spacing(2),\n }\n}))\n\nconst hasRespondPermission = (permissions, approval) => {\n if (permissions.some(p => p?.roleType === 'System')) return true;\n\n const { targetType, targetId } = approval;\n const approvePermissions = permissions.filter(p => p.scopes.includes('scheduling:approve'));\n\n if (targetType === 'Office') {\n return approvePermissions.some(p => p.roleType === 'Office' && p.officeIds?.includes(targetId));\n } else if (targetType === 'Team') {\n return approvePermissions.some(p => p.roleType === 'Team' && p?.teamIds?.includes(targetId));\n }\n\n return false;\n}\n\nconst ApproveIcon = styled(withTheme(CheckCircle))(props => ({\n color: props.theme.palette.success.main,\n}))\n\nconst StatusIcon = ({ status }) => {\n switch (status) {\n case APPROVED:\n return <ApproveIcon fontSize=\"small\" />\n case DECLINED:\n return <Cancel color=\"error\" fontSize=\"small\" />\n default:\n return null;\n }\n}\n\nexport const RequestReasonField = () => {\n const translate = useTranslate();\n const classes = useStyles();\n\n const renderReason = request => {\n if (!request?.requestReason) return null;\n return <div className={classes.reasonContainer}>\n <Typography className={classes.reasonTitle}>{translate(\"resources.draftGames.fields.requestReason\")}</Typography>\n <Typography variant=\"body1\" color=\"textSecondary\">{request.requestReason}</Typography>\n </div>\n }\n\n return <FunctionField source=\"requestReason\" label=\"\" render={renderReason} />\n}\n\nexport const RequestCreatedByField = () => {\n const translate = useTranslate();\n const classes = useStyles();\n\n const renderCreatedByAuthor = request => {\n if (!request?.createdByAuthor || !request?.createdAt) return null;\n return <div className={classes.reasonContainer}>\n <Typography className={classes.reasonTitle}>{translate(\"resources.draftGames.fields.requested_by\")}</Typography>\n <Typography variant=\"body1\" color=\"textSecondary\">{request.createdByAuthor} - {moment.tz(request.createdAt, request.timezone).format('LLLL')}</Typography>\n </div>\n }\n\n return <FunctionField source=\"createdByAuthor\" label=\"\" render={renderCreatedByAuthor} />\n}\n\nconst TargetLabel = ({ targetId, targetType, link = false }) => {\n const TargetField = targetType === 'Team' ? TeamField : OfficeField;\n return <RecordContextProvider value={{ targetId }}>\n <TargetField source=\"targetId\" link={link} />\n </RecordContextProvider>\n}\n\nconst ApprovalRow = ({ approval, handleClick, loading }) => {\n const translate = useTranslate();\n const classes = useStyles();\n const permissions = usePermissions();\n\n const { targetType, targetId, status, comments } = approval;\n\n const approvalStatus = translate(`resources.draftGameApprovals.values.${status}`);\n const secondary = [ approvalStatus, comments ].filter(Boolean).join(' - ');\n const canRespond = hasRespondPermission(permissions, approval);\n\n const onClick = responseType => handleClick({ ...approval, responseType });\n\n return <>\n <ListItem>\n <ListItemIcon>\n <Badge badgeContent={<StatusIcon status={status} />} anchorOrigin={{ vertical: 'bottom', horizontal: 'right' }}>\n {targetType === 'Team' ? <PeopleOutline /> : <Business />}\n </Badge>\n </ListItemIcon>\n <ListItemText\n primary={<TargetLabel targetId={targetId} targetType={targetType} link={canRespond} />}\n secondary={<span>{secondary}</span>}\n />\n {canRespond && <div className={classes.actions}>\n <Button onClick={() => onClick(DECLINED)} disabled={status === DECLINED || loading}>{translate('ra.action.decline')}</Button>\n <Button onClick={() => onClick(APPROVED)} color=\"primary\" disabled={status === APPROVED || loading}>{translate('ra.action.approve')}</Button>\n </div>}\n </ListItem>\n <Divider />\n </>\n}\n\nconst ConfirmModel = ({ approval, willPublish, willCancel, gameToUpdate, handleClose, refetch, setShouldRefresh }) => {\n const translate = useRichTranslate();\n const notify = useNotify();\n const refresh = useRefresh();\n const classes = useStyles();\n\n const handleClick = (e) => e.stopPropagation(); // needed to prevent edit dialog from opening when clicking inside the dialog\n\n const handleRespond = async (values) => {\n const { id, responseType, comments } = values;\n\n apiClient(`/draftGameApprovals/${id}/respond`, {\n method: 'POST',\n data: {\n status: responseType,\n comments: comments || '',\n scheduleId: gameToUpdate?.scheduleId,\n }\n })\n .then(({ data }) => {\n const { isPublished, isCancelled, isActive } = data;\n if (isPublished) {\n notify(translate(`resources.draftGameApprovals.notifications.approved_and_published`), 'info');\n refresh();\n } else if (isCancelled) {\n notify(translate(`resources.draftGameApprovals.notifications.declined_and_cancelled`), 'info');\n refetch();\n setShouldRefresh(true);\n } else {\n const action = responseType.toLowerCase();\n notify(translate(`resources.draftGameApprovals.notifications.request_${action}`), 'info');\n refetch();\n isActive && setShouldRefresh(true);\n }\n })\n .catch(() => {\n notify(translate(`resources.draftGameApprovals.notifications.respond_error`), 'error');\n })\n\n handleClose();\n }\n\n const declined = approval?.responseType === DECLINED;\n const action = declined ? 'decline' : 'approve';\n\n const showGameAlert = willPublish || willCancel;\n const alertLabel = declined\n ? translate('resources.draftGameApprovals.alerts.cancel_draft')\n : translate('resources.draftGameApprovals.alerts.publish_game', { game: <GameField source=\"updatedGameId\" record={{ updatedGameId: gameToUpdate?.id }} includeDate=\"full\" includeTime=\"full\" includeSurface=\"full\" /> })\n\n // if cancelled and will publish, show Active status on EventChanges component (will change to Active after approval is submitted)\n if (gameToUpdate?.status === 'Cancelled' && willPublish) {\n gameToUpdate.status = 'Active';\n }\n\n return <Dialog open={approval} onClose={handleClose} fullWidth maxWidth=\"sm\" onClick={handleClick}>\n <DialogTitle>{translate(`resources.draftGameApprovals.labels.${action}_request`)}</DialogTitle>\n <DialogContent>\n {showGameAlert\n ? <div className={classes.alert}>\n <UpdateGameAlert updatedGameId={gameToUpdate?.id} alertLabel={alertLabel} severity={declined ? 'warning' : 'info'} />\n </div>\n : <DialogContentText>{translate(`resources.draftGameApprovals.messages.confirm_${action}_request`)}</DialogContentText>\n }\n <EventChanges previousEvent={gameToUpdate} indicateChangeRemoval={declined} hideAlert />\n <RecordContextProvider value={approval}>\n <SimpleForm\n save={handleRespond}\n initialValues={{ comments: '' }}\n toolbar={<DialogFormToolbar className={declined ? classes.deleteButton : undefined} submitLabel={`ra.action.${action}`} onCancel={handleClose} />}\n >\n {!willPublish && <TextInput source=\"comments\" helperText=\"resources.draftGameApprovals.helpers.approval_comments\" multiline minRows=\"3\" fullWidth variant=\"outlined\" />}\n </SimpleForm>\n </RecordContextProvider>\n </DialogContent>\n </Dialog>\n}\n\nconst DraftGameApprovalDialog = ({ isOpen, setOpen, gameToUpdate }) => {\n const fullScreen = useMediaQuery(theme => theme.breakpoints.down('xs'));\n const draftGame = useRecordContext();\n const refresh = useRefresh();\n const translate = useTranslate();\n const [approval, setApproval] = useState(null);\n const [shouldRefresh, setShouldRefresh] = useState(false);\n const { data: approvals, loading, refetch } = useDraftGameApprovals(draftGame?.id);\n\n const willPublish = approval && approvals?.filter(a => a.id !== approval?.id).every(a => a.status === APPROVED) && approval.responseType === APPROVED;\n const willCancel = approval && approvals?.filter(a => a.id !== approval?.id).every(a => a.status !== DECLINED) && approval.responseType === DECLINED;\n\n const handleClick = (e) => e.stopPropagation(); // needed to prevent edit dialog from opening when clicking inside the dialog\n const handleClose = () => {\n if (shouldRefresh) refresh();\n setOpen(false);\n };\n\n return <>\n <Dialog open={isOpen} onClose={handleClose} fullScreen={fullScreen} fullWidth maxWidth=\"sm\" onClick={handleClick}>\n <DialogTitle>{translate('resources.draftGameApprovals.labels.approvals')}</DialogTitle>\n <DialogContent>\n <DialogContentText>{translate('resources.draftGameApprovals.messages.request_reschedule')}</DialogContentText>\n <List>\n {loading && <LinearProgress color=\"primary\" variant=\"indeterminate\" />}\n <Divider />\n {(approvals || []).map(approval => <ApprovalRow key={approval.id} approval={approval} handleClick={setApproval} loading={loading} />)}\n </List>\n <RequestReasonField />\n </DialogContent>\n <DialogActions>\n <Button onClick={handleClose} color=\"secondary\">{translate('ra.action.cancel')}</Button>\n </DialogActions>\n </Dialog>\n {approval && <ConfirmModel\n approval={approval}\n willPublish={willPublish}\n willCancel={willCancel}\n gameToUpdate={gameToUpdate}\n refetch={refetch}\n setShouldRefresh={setShouldRefresh}\n handleClose={() => setApproval(null)}\n />}\n </>\n}\n\nexport const DraftGameApprovalAction = ({ size = \"small\", hideLabel = false, ...props }) => {\n const translate = useTranslate();\n const draftGame = useRecordContext();\n const [ isOpen, setOpen ] = useState(false);\n const games = useSelector(store => store.admin.resources.games.data);\n\n const gameToUpdate = games?.[draftGame?.updatedGameId];\n\n const handleClick = (e) => {\n e.preventDefault();\n e.stopPropagation();\n setOpen(true);\n }\n\n if (!gameToUpdate) return null;\n return <>\n <Button color=\"primary\" size={size} startIcon={<Inbox />} onClick={handleClick}>{!hideLabel && translate('resources.draftGameApprovals.labels.approvals')}</Button>\n {isOpen && <DraftGameApprovalDialog isOpen={isOpen} setOpen={setOpen} gameToUpdate={gameToUpdate} {...props} />}\n </>\n}\n","import React, { Fragment, useRef } from 'react';\nimport { TextInput, SimpleForm, useTranslate, NumberInput, useRecordContext, BooleanInput } from 'react-admin';\nimport moment from 'moment-timezone';\nimport { Grid } from '@material-ui/core'\nimport { Alert as MuiAlert } from '@material-ui/lab';\nimport { Info } from '@material-ui/icons';\nimport { useSelector } from 'react-redux';\nimport { useFormState } from 'react-final-form';\nimport createCalculator from 'final-form-calculate';\n\nimport { FF_CROSS_SCHEDULING } from '@hisports/common/featureFlags';\nimport { changeTimezone, isEmpty } from '@hisports/parsers';\n\nimport { SquareAlert } from '../../common/SquareAlert';\nimport { InlineDateTimeInput, dateTimePlaceholder } from '../../common/inputs/DateInput';\nimport { TimezoneEnumInput } from '../../common/inputs/EnumInputs';\nimport { EndTimeInput as InlineEndTimeInput } from '../../common/inputs/EndTimeInput';\nimport { FieldDependency } from '../../common/FieldDependency';\nimport { DialogFormToolbar } from '../../common/dialogs/DialogForm';\nimport { useRichTranslate } from '../../common/useRichTranslate';\nimport { isAuthorized } from '../../common/Authorize';\nimport { useFlag, usePermissions } from '../../http';\n\nimport { useIsHomeFirst } from '../events/EventViewSettings';\nimport { TeamInput } from '../teams/TeamInput';\nimport { SurfaceInput } from '../surfaces/SurfaceInput';\nimport { ScheduleGroupInput } from '../groups/GroupInput';\nimport { GameAvailabilityInfo } from '../games/GameAvailabilityInfo';\nimport { GameAvailabilityContextProvider } from '../games/GameAvailabilityContext';\nimport { GameField } from '../games/GameField';\nimport { CrossSchedulingInput, GameStatusInput } from '../games/GameForm';\nimport { useScheduleSettingsWithStore } from '../scheduleSettings';\n\nconst validate = (values, schedules, initialDate, limitDateChange, requestChanges, translate) => {\n const errors = {};\n const schedule = schedules?.[values?.scheduleId]\n\n if (!values.scheduleId) errors.scheduleId = 'ra.validation.required'\n if (values.id && !values.categoryId) errors.categoryId = 'ra.validation.required'\n\n if (values.round != null && values.round < 1) {\n errors.round = translate('ra.validation.minValue', { min: 1 });\n }\n\n if (values.endTime && !values.startTime) errors.startTime = 'ra.validation.required'\n if (values.startTime && !values.endTime) errors.endTime = 'ra.validation.required'\n\n if (values.startTime && values.endTime) {\n if (!moment.tz(values.startTime, values.timezone).isValid()) {\n errors.startTime = 'resources.games.validations.invalid_time'\n } else if (!moment.tz(values.endTime, values.timezone).isValid()) {\n errors.endTime = 'resources.games.validations.invalid_time'\n } else if (moment.tz(values.endTime, values.timezone).isBefore(values.startTime, 'minute')) {\n errors.endTime = 'resources.games.validations.end_before_start'\n } else if (moment.tz(values.endTime, values.timezone).diff(values.startTime, 'hours') > 6) {\n errors.endTime = 'resources.games.validations.invalid_time_check_am_pm'\n } else if (values.startTime === values.endTime) {\n errors.endTime = 'ra.validation.end_before_start'\n }\n }\n\n if (limitDateChange && ((!initialDate && values?.date) || !moment.utc(initialDate).isSame(values?.date, 'D'))) {\n errors.startTime = 'resources.games.validations.limit_date_change';\n } else if (values.date && schedule?.startDate && moment.utc(schedule.startDate).isAfter(values.date)) {\n errors.startTime = 'resources.games.validations.before_schedule_date'\n } else if (values.date && schedule?.endDate && moment.utc(schedule.endDate).add(1, 'day').isBefore(values.date)) {\n errors.startTime = 'resources.games.validations.after_schedule_date'\n }\n\n if (requestChanges && !values.requestReason) errors.requestReason = 'ra.validation.required';\n\n return errors;\n}\n\nconst inputProps = {\n resource: 'draftGames',\n basePath: '/draftgames',\n variant: 'outlined',\n margin: 'none',\n fullWidth: true,\n}\n\nconst TimezoneInput = ({ surfaces, ...props }) => {\n const { values } = useFormState();\n\n const surface = surfaces?.[values?.arenaId];\n const disabled = !['TBA', 'NDA'].includes(surface?.alias)\n\n return <TimezoneEnumInput disabled={disabled} {...props} />\n}\n\nexport const UpdateGameAlert = ({ updatedGameId, square = false, severity = 'info', alertLabel }) => {\n const translate = useRichTranslate();\n\n const Alert = square ? SquareAlert : MuiAlert;\n\n if (!updatedGameId) return null;\n\n return <Alert icon={<Info />} severity={severity}>\n {alertLabel || translate('resources.draftGames.alerts.update_game', {\n game: <GameField source=\"updatedGameId\" record={{ updatedGameId }} includeDate=\"full\" includeTime=\"full\" includeSurface=\"full\" />\n })}\n </Alert>\n}\n\nconst DraftRequestFields = ({ surfaces }) => {\n const translate = useTranslate();\n const draftGame = useRecordContext();\n\n return <>\n <Grid item xs={12}>\n <TextInput source=\"requestReason\" label=\"Reason for Request\" multiline minRows=\"3\" helperText=\"resources.draftGames.helpers.request_reason\" {...inputProps} />\n </Grid>\n <Grid item xs={12} sm={6}>\n <SurfaceInput source=\"arenaId\" {...inputProps} />\n </Grid>\n <Grid item xs={12} sm={6} >\n <TimezoneInput source=\"timezone\" surfaces={surfaces} {...inputProps} />\n </Grid>\n\n <Grid item xs={12} sm={6}>\n <FieldDependency fieldSource=\"arenaId\" disabled>\n <InlineDateTimeInput\n source=\"startTime\"\n options={{\n label: translate('resources.draftGames.fields.startTime'),\n format: 'YYYY-MM-DD HH:mm',\n placeholder: dateTimePlaceholder,\n ampm: false,\n openTo: 'hours',\n initialFocusedDate: draftGame?.date,\n }}\n {...inputProps}\n />\n </FieldDependency>\n </Grid>\n <Grid item xs={12} sm={6}>\n <FieldDependency fieldSource=\"arenaId\" disabled>\n <InlineEndTimeInput\n source=\"endTime\"\n maxHours={6}\n options={{\n label: translate('resources.draftGames.fields.endTime'),\n format: 'YYYY-MM-DD HH:mm',\n placeholder: dateTimePlaceholder,\n ampm: false,\n openTo: 'hours',\n initialFocusedDate: draftGame?.date,\n }}\n {...inputProps}\n />\n </FieldDependency>\n </Grid>\n <GameAvailabilityInfo />\n\n <Grid item xs={12}>\n <TextInput source=\"comments\" multiline minRows=\"3\" helperText=\"resources.draftGames.helpers.comments\" {...inputProps} />\n </Grid>\n </>\n}\n\nconst DraftFormFields = ({ surfaces, hideRounds, disableTimeFields, ...props }) => {\n const translate = useTranslate();\n const isEnabled = useFlag();\n const draftGame = useRecordContext(props);\n const isHomeFirst = useIsHomeFirst();\n const permissions = usePermissions();\n\n const hasDirectOrParentPermission = (permissions\n .filter(p => p.inherited === false || p.parentInherited === true)\n .some(p => {\n if (p.roleType === 'Office' && p.officeIds?.includes(draftGame?.officeId)) return true;\n if (p.roleType === 'Schedule' && p.scheduleIds?.includes(draftGame?.scheduleId)) return true;\n return false;\n }) || permissions.some(p => {\n if (p.roleType === 'System') return true;\n return false\n }));\n\n return <>\n <Grid item xs={12} sm={12}>\n <ScheduleGroupInput source=\"groupId\" showNone={translate('ra.message.no_group')} {...inputProps} />\n </Grid>\n {isEnabled(FF_CROSS_SCHEDULING) && <Grid item xs={12}>\n <CrossSchedulingInput />\n </Grid>}\n\n <Grid item xs={12} sm={6}>\n <TeamInput source={isHomeFirst ? 'homeTeamId' : 'awayTeamId'} helperText=\"resources.games.helpers.team\" {...inputProps} />\n </Grid>\n <Grid item xs={12} sm={6}>\n <TeamInput source={isHomeFirst ? 'awayTeamId' : 'homeTeamId'} helperText=\"resources.games.helpers.team\" {...inputProps} />\n </Grid>\n <Grid item xs={12} md={4}>\n <SurfaceInput source=\"arenaId\" {...inputProps} />\n </Grid>\n\n <Grid item xs={12} md={4}>\n <FieldDependency fieldSource=\"arenaId\" disabled>\n <InlineDateTimeInput\n source=\"startTime\"\n options={{\n label: translate('resources.draftGames.fields.startTime'),\n format: 'YYYY-MM-DD HH:mm',\n placeholder: dateTimePlaceholder,\n ampm: false,\n openTo: 'hours',\n initialFocusedDate: draftGame?.date,\n disabled: disableTimeFields\n }}\n {...inputProps}\n />\n </FieldDependency>\n </Grid>\n <Grid item xs={12} md={4}>\n <FieldDependency fieldSource=\"arenaId\" disabled>\n <InlineEndTimeInput\n source=\"endTime\"\n maxHours={6}\n options={{\n label: translate('resources.draftGames.fields.endTime'),\n format: 'YYYY-MM-DD HH:mm',\n placeholder: dateTimePlaceholder,\n ampm: false,\n openTo: 'hours',\n initialFocusedDate: draftGame?.date,\n disabled: disableTimeFields\n }}\n {...inputProps}\n />\n </FieldDependency>\n </Grid>\n <GameAvailabilityInfo />\n\n <Grid item xs={12} sm={6} lg={4}>\n <GameStatusInput source=\"status\" defaultValue=\"Active\" {...inputProps} />\n </Grid>\n {!hideRounds && <Grid item xs={12} sm={6} lg={4}>\n <NumberInput source=\"round\" helperText=\"resources.draftGames.helpers.round\" {...inputProps} />\n </Grid>}\n <Grid item xs={12} sm={6} md={4}>\n <TimezoneInput source=\"timezone\" surfaces={surfaces} {...inputProps} />\n </Grid>\n\n <Grid item xs={12}>\n <TextInput source=\"comments\" multiline minRows=\"3\" helperText=\"resources.draftGames.helpers.comments\" {...inputProps} />\n </Grid>\n\n <Grid item xs={12}>\n <BooleanInput source=\"isShared\" disabled={!hasDirectOrParentPermission} helperText=\"resources.draftGames.helpers.isShared\" {...inputProps} />\n </Grid>\n </>\n}\n\nconst InnerDraftGameForm = ({ initialValues, hideRounds, requestChanges = false, duplicateGame = false, ...props }) => {\n const translate = useTranslate();\n const draftGame = useRecordContext(props);\n const { data: scheduleSettings, loading: scheduleSettingsLoading } = useScheduleSettingsWithStore(draftGame?.scheduleId || initialValues?.scheduleId);\n\n // must use ref for roles to get current value, otherwise value in calculator is stale\n const schedules = useSelector(store => store.admin.resources.schedules.data);\n const schedulesRef = useRef({});\n schedulesRef.current = schedules;\n\n const surfaces = useSelector(store => store.admin.resources.surfaces.data);\n const surfacesRef = useRef({});\n surfacesRef.current = surfaces;\n\n // decorators must be wrapped in useRef otherwise SimpleForm prop will register duplicates\n // this bug seems to be triggered by use of hooks (useSelector)\n const decorators = useRef([createCalculator({\n field: 'crossScheduleId',\n updates: {\n crossGroupId: (crossScheduleId, values, prevValues) => {\n if (!isEmpty(prevValues) && prevValues.crossScheduleId !== crossScheduleId) return\n return values?.crossGroupId\n }\n }\n }, {\n field: 'startTime',\n updates: {\n date: (startTime, values) => {\n if (!startTime) return values.date;\n if (!startTime || !values.timezone) return startTime;\n return moment.tz(startTime, values.timezone).format('YYYY-MM-DD');\n },\n endTime: async (startTime, values, prevValues) => {\n const { scheduleId, endTime, timezone } = values;\n if (!startTime || !scheduleId || isEmpty(prevValues) || startTime === prevValues.startTime) return endTime;\n const { gameLength } = scheduleSettings;\n if (!gameLength) return endTime;\n return moment.tz(startTime, timezone).add(gameLength, 'minutes').toISOString();\n }\n }\n }, {\n field: 'arenaId',\n updates: {\n timezone: (arenaId, values, prevValues) => {\n const surface = surfacesRef.current[arenaId];\n if (['TBA', 'NDA'].includes(surface?.alias)) {\n return values?.timezone || prevValues?.timezone;\n }\n return surface?.timezone || values?.timezone;\n }\n }\n }, {\n field: 'timezone',\n updates: {\n startTime: (timezone, values, prevValues) => {\n const { timezone: prevTimezone } = prevValues;\n if (!prevTimezone || !timezone || !values.startTime || isEmpty(prevValues) || timezone === prevTimezone) return values.startTime;\n return changeTimezone(values.startTime, prevTimezone, timezone)\n },\n endTime: (timezone, values, prevValues) => {\n const { timezone: prevTimezone } = prevValues;\n if (!prevTimezone || !timezone || !values.endTime || isEmpty(prevValues) || timezone === prevTimezone) return values.endTime;\n return changeTimezone(values.endTime, prevTimezone, timezone)\n },\n }\n })])\n\n const hasDateChangeAccess = isAuthorized(draftGame, 'draftGames', 'edit');\n const limitDateChange = !requestChanges && draftGame?.isShared && scheduleSettings?.limitDateChange && !hasDateChangeAccess;\n const disableTimeFields = scheduleSettingsLoading || (limitDateChange && !initialValues?.date);\n const updatedGameId = draftGame?.updatedGameId || initialValues?.updatedGameId;\n\n if (duplicateGame) initialValues.id = null;\n\n return <SimpleForm\n toolbar={<DialogFormToolbar submitLabel=\"ra.action.save\" />}\n decorators={decorators.current}\n validate={values => validate(values, schedulesRef.current, initialValues?.date, limitDateChange, requestChanges, translate)}\n validateOnBlur\n initialValues={{ status: 'Active', ...initialValues }}\n component={Fragment}\n {...props}>\n <Grid container spacing={2} fullWidth>\n {duplicateGame && <Grid item xs={12}>\n <MuiAlert severity=\"info\">{translate(\"resources.draftGames.alerts.duplicate_game\")}</MuiAlert>\n </Grid>}\n {!!updatedGameId && <Grid item xs={12}>\n <UpdateGameAlert\n updatedGameId={updatedGameId}\n alertLabel={requestChanges && translate(\"resources.draftGameApprovals.alerts.request_changes\")}\n />\n </Grid>}\n {requestChanges\n ? <DraftRequestFields surfaces={surfaces} />\n : <DraftFormFields\n surfaces={surfaces}\n hideRounds={hideRounds}\n disableTimeFields={disableTimeFields}\n />\n }\n </Grid>\n </SimpleForm>\n}\n\nexport const DraftGameForm = props =>\n <GameAvailabilityContextProvider>\n <InnerDraftGameForm {...props} />\n </GameAvailabilityContextProvider>\n","import React, { Fragment, useState } from 'react';\nimport { RecordContextProvider, SimpleForm, useNotify, useTranslate } from 'react-admin';\nimport { useSelector } from 'react-redux';\nimport { Button, ListItemIcon, ListItemText } from '@material-ui/core';\nimport { Add } from '@material-ui/icons';\n\nimport { CreateResourceDialog, EditResourceDialog } from '../../common/dialogs/ResourceDialog';\nimport { ActionMenuItem } from '../../common/ActionMenu';\nimport { EventChanges } from '../../common/EventChanges';\n\nimport { DraftGameForm } from './DraftGameForm';\nimport { RequestCreatedByField, RequestReasonField } from './DraftGameApprovalModal';\nimport { isAuthorized } from '../../common/Authorize';\nimport { useAccount } from '../../http';\n\nconst EventChangesDialog = ({ draftGameId, previousEvent, ...props }) => {\n const translate = useTranslate();\n const draftGame = useSelector(state => state.admin.resources.draftGames.data[draftGameId]);\n const account = useAccount();\n\n const canDelete = isAuthorized(draftGame, 'draftGames', 'remove') || account?.id === draftGame?.createdBy;\n\n return <RecordContextProvider value={draftGame}>\n <EditResourceDialog label={translate('resources.draftGames.labels.draft_request', { number: draftGameId })} canDelete={canDelete} maxWidth=\"sm\" resource=\"draftGames\" basePath=\"/draftgames\" hideSubmit {...props}>\n <SimpleForm component={Fragment} {...props}>\n <EventChanges previousEvent={previousEvent} alertLabel={translate(\"resources.draftGameApprovals.alerts.request_changes\")} />\n <RequestReasonField />\n <RequestCreatedByField />\n </SimpleForm>\n </EditResourceDialog>\n </RecordContextProvider>\n}\n\nexport const AddDraftGameDialog = ({ hideRounds, requestChanges, ...props }) =>\n <CreateResourceDialog label={`resources.draftGames.actions.${requestChanges ? 'request' : 'add'}`} maxWidth=\"md\" resource=\"draftGames\" basePath=\"/draftgames\" {...props}>\n <DraftGameForm hideRounds={hideRounds} requestChanges={requestChanges} />\n </CreateResourceDialog>\n\nexport const DuplicateGameDialog = ({ hideRounds, ...props }) => {\n const translate = useTranslate();\n const notify = useNotify();\n\n const onSuccess = () => notify(translate('resources.draftGames.messages.duplicate_game_success'), 'success');\n\n return <CreateResourceDialog label=\"resources.draftGames.actions.duplicate_game\" maxWidth=\"md\" resource=\"draftGames\" basePath=\"/draftgames\" onSuccess={onSuccess} skipRefresh {...props}>\n <DraftGameForm hideRounds={hideRounds} duplicateGame />\n </CreateResourceDialog>\n}\n\nexport const EditDraftGameDialog = ({ hideRounds, gameToUpdate, ...props }) => {\n const translate = useTranslate();\n const approvals = useSelector(state => state.admin.resources.draftGameApprovals.data);\n\n const draftGameId = props?.id;\n const hasApprovals = draftGameId && Object.keys(approvals).some(approvalId => approvals[approvalId]?.draftGameId === draftGameId);\n\n if (hasApprovals) return <EventChangesDialog draftGameId={draftGameId} previousEvent={gameToUpdate} {...props} />\n\n return <EditResourceDialog label={translate('resources.draftGames.labels.edit_number', { number: props.id })} maxWidth={hasApprovals ? 'sm' : 'md'} resource=\"draftGames\" basePath=\"/draftgames\" {...props}>\n <DraftGameForm hideRounds={hideRounds} />\n </EditResourceDialog>\n}\n\nexport const AddDraftGameButton = ({ size, variant, ...props }) => {\n const translate = useTranslate();\n const [ isOpen, setOpen ] = useState(false);\n return <>\n <Button color=\"primary\" size={size} variant={variant} startIcon={<Add />} onClick={() => setOpen(true)}>{translate('resources.draftGames.actions.add')}</Button>\n <AddDraftGameDialog isOpen={isOpen} handleClose={() => setOpen(false)} {...props} />\n </>\n}\n\nexport const AddDraftGameAction = ({ onClick, ...props }) => {\n const translate = useTranslate();\n const [ isOpen, setOpen ] = useState(false);\n const handleClick = () => {\n onClick();\n setOpen(true);\n }\n return <>\n <ActionMenuItem color=\"primary\" size=\"small\" onClick={handleClick}>\n <ListItemIcon><Add fontSize=\"small\" /></ListItemIcon>\n <ListItemText>{translate('resources.draftGames.actions.add')}</ListItemText>\n </ActionMenuItem>\n {isOpen && <AddDraftGameDialog isOpen={isOpen} handleClose={() => setOpen(false)} {...props} />}\n </>\n}\n","import React from 'react'\nimport { useTranslate } from 'react-admin'\nimport {\n CardHeader as muiCardHeader,\n styled\n} from '@material-ui/core'\n\nconst CardHeader = styled(muiCardHeader)(({ theme }) => ({\n marginBottom: theme.spacing(-2),\n}))\n\nexport default ({ title, ...props }) => {\n const translate = useTranslate()\n return <CardHeader\n title={title && translate(title, { _: title, smart_count: 1 })}\n {...props}\n />\n}\n","import React, { Fragment, useState } from 'react'\nimport { Button, FormWithRedirect, useListContext, useRecordContext } from 'react-admin';\nimport { Dialog, makeStyles } from '@material-ui/core';\nimport moment from 'moment-timezone';\nimport { changeDate } from '@hisports/parsers';\n\nimport { InlineDateInput } from '../../../common/inputs/DateInput';\n\nconst useStyles = makeStyles(theme => ({\n date: {\n borderRadius: 0\n }\n}))\n\nconst SetDateButton = ({ selectedIds, ...props }) => {\n const draft = useRecordContext();\n const classes = useStyles();\n const [open, setOpen] = useState(false);\n\n const onClick = () => {\n if (props.handleClick) props.handleClick();\n setOpen(true)\n };\n\n const onChange = date => {\n if (props.handleChange) props.handleChange(date);\n setOpen(false);\n };\n\n const startDate = draft?.options?.startDate;\n const initialValue = startDate && moment.utc(startDate, 'YYYY-MM-DD').format('YYYY-MM-DD')\n\n return <>\n <Button label=\"resources.drafts.labels.set_date\" onClick={onClick} {...props} />\n <Dialog\n open={open}\n maxWidth=\"lg\"\n onEscapeKeyDown={() => setOpen(false)}\n onBackdropClick={() => setOpen(false)}\n PaperProps={{ className: classes.date }}\n >\n <InlineDateInput\n source=\"date\"\n initialValue={initialValue}\n options={{ variant: 'static' }}\n orientation=\"landscape\"\n openTo=\"date\"\n variant=\"outlined\"\n alwaysOn\n onChange={onChange}\n />\n </Dialog>\n </>\n}\n\nexport default ({ updateGames }) => {\n const draft = useRecordContext();\n const { selectedIds = [], data: games } = useListContext();\n\n const showSwap = selectedIds.length === 2;\n const selectedGames = selectedIds.map(id => games?.[id]).filter(Boolean);\n const showClearDate = selectedGames.some(game => game && game.date);\n const showMarkActive = selectedGames.some(game => game && game.status === 'Conflict');\n const showMarkConflict = selectedGames.some(game => game && game.status !== 'Conflict');\n\n const handleSetDateChange = date => {\n const dateSelected = moment.utc(date).format('YYYY-MM-DD')\n const updatedGames = (draft?.games || []).map(game => {\n const gameSelected = selectedIds.find(selectedId => selectedId === game.id)\n return {\n ...game,\n date: gameSelected ? dateSelected : game?.date,\n startTime: gameSelected && game?.startTime ? changeDate(game.startTime, dateSelected, game?.timezone) : game?.startTime,\n endTime: gameSelected && game?.endTime ? changeDate(game.endTime, dateSelected, game?.timezone) : game?.endTime,\n }\n })\n\n updateGames(updatedGames);\n }\n\n const handleClearDate = () => {\n const updatedGames = (draft?.games || []).map(game => {\n const gameSelected = selectedIds.find(selectedId => selectedId === game.id)\n return {\n ...game,\n date: gameSelected ? undefined : game?.date,\n startTime: gameSelected ? undefined : game?.startTime,\n endTime: gameSelected ? undefined : game?.endTime,\n arenaId: gameSelected ? undefined : game?.arenaId\n }\n })\n\n updateGames(updatedGames);\n }\n\n const handleSwap = () => {\n const game1 = { ...draft.games.find(game => game.id === selectedIds[0]) };\n const game2 = { ...draft.games.find(game => game.id === selectedIds[1]) };\n\n const updatedGames = draft.games\n .map(game => {\n const updatedGame = { ...game }\n if (game.id === selectedIds[0]) {\n updatedGame.homeTeamId = game2.homeTeamId;\n updatedGame.awayTeamId = game2.awayTeamId;\n } else if (game.id === selectedIds[1]) {\n updatedGame.homeTeamId = game1.homeTeamId;\n updatedGame.awayTeamId = game1.awayTeamId;\n }\n return updatedGame\n })\n\n updateGames(updatedGames)\n }\n\n const handleMarkConflicts = () => {\n updateGames(draft.games.map(game => {\n if (!selectedIds.includes(game.id)) return game;\n return { ...game, status: 'Conflict' }\n }))\n }\n\n const handleMarkActive = () => {\n updateGames(draft.games.map(game => {\n if (!selectedIds.includes(game.id)) return game;\n return { ...game, status: 'Active' }\n }))\n }\n\n return <FormWithRedirect render={props => <Fragment {...props} />}> {/* eslint-disable-line react/jsx-no-useless-fragment */}\n <SetDateButton color=\"primary\" handleChange={handleSetDateChange} />\n {showClearDate && <Button color=\"primary\" onClick={handleClearDate} label=\"resources.drafts.labels.clear_date\" />}\n {showSwap && <Button color=\"primary\" onClick={handleSwap} label=\"resources.drafts.labels.swap_matchups\" />}\n {showMarkActive && <Button color=\"primary\" onClick={handleMarkActive} label=\"resources.drafts.labels.set_active\" />}\n {showMarkConflict && <Button color=\"primary\" onClick={handleMarkConflicts} label=\"resources.drafts.labels.set_conflict\" />}\n </FormWithRedirect>\n}\n","import React from 'react';\nimport { useTranslate } from 'react-admin';\nimport { Alert } from '@material-ui/lab'\nimport moment from 'moment-timezone';\n\nexport default ({ games = [] }) => {\n const count = games\n .filter(game => moment().isAfter(game.startTime, 'day'))\n .length\n\n if (count <= 0) return null;\n\n const translate = useTranslate()\n const alert = translate('resources.drafts.alerts.dated_in_past', count);\n return <Alert severity=\"warning\">{alert}</Alert>\n}\n","import React, { Fragment, useEffect, useMemo, useState } from 'react';\nimport { ListContextProvider, useDataProvider, useListContext, useTranslate } from 'react-admin';\nimport { useForm } from 'react-final-form';\nimport { Card, Button, FormControlLabel, Switch, Grid } from '@material-ui/core';\nimport { Add, Search } from '@material-ui/icons';\nimport moment from 'moment-timezone';\nimport { v4 as uuid } from 'uuid';\nimport { sortBy } from 'lodash';\n\nimport { isEmpty } from '@hisports/parsers';\nimport { GAME_NUMBER_REGEX } from '@hisports/scheduler';\n\nimport { useAuthContext, useFlag } from '../../../http/AuthContext';\nimport { useList } from '../../../common/ra/useList';\nimport { DateInput } from '../../../common/inputs/DateInput';\nimport { ListView } from '../../../common/cards/ListCard';\nimport { useSchedulingContext } from '../../../common/calendar/SchedulingContext';\nimport { CalendarProvider } from '../../../common/calendar/CalendarContext';\n\nimport { TeamInput } from '../../teams/TeamInput';\nimport { SurfaceInput } from '../../surfaces/SurfaceInput';\nimport { BaseEventView } from '../../events/EventView';\nimport { CALENDAR_VIEWS, EventViewSettingsMenu, useShowCalendar } from '../../events/EventViewSettings';\n\nimport GameDialog from '../dialogs/GameDialog';\nimport AnalyzeDialog from '../dialogs/AnalyzeDialog';\nimport DraggableGameList from '../draggables/DraggableGameList';\nimport DraggableEvent from '../draggables/DraggableEvent';\nimport GameToolbar from './GameToolbar';\nimport PastGamesAlert from './PastGamesAlert';\n\nexport const isConflicted = (games = [], game) => {\n // teams cannot play more than one game per day\n if (game.status === 'Conflict') return true;\n if (!game.date) return false\n const gameDate = moment.tz(game.date, 'YYYY-MM-DD', game.timezone)\n const sameDay = games.filter(g => g.id !== game.id && g.date && gameDate.isSame(moment.tz(g.date, 'YYYY-MM-DD', g.timezone)) && g.status !== 'Conflict')\n return sameDay.some(g =>\n g.homeTeamId === game.homeTeamId ||\n g.homeTeamId === game.awayTeamId ||\n g.awayTeamId === game.homeTeamId ||\n g.awayTeamId === game.awayTeamId\n )\n}\n\n\nexport const renumberGames = (games, numberingPattern) => {\n if (!numberingPattern) return games\n const [ , prefix, start, suffix ] = GAME_NUMBER_REGEX.exec(numberingPattern);\n const startNumber = Number(start) || 0;\n const padLength = Math.max(start.length, String(startNumber + games.length - 1).length);\n return games.map((game, index) => {\n const id = `${startNumber + index}`.padStart(padLength, '0');\n let number;\n if (prefix && suffix) {\n number = `${prefix}${id}${suffix}`;\n } else if (prefix && !suffix) {\n number = `${prefix}${id}`\n } else if (!prefix && suffix) {\n number = `${id}${suffix}`\n } else {\n number = id;\n }\n return { ...game, number }\n })\n}\n\nconst getNextNumber = ({ games = [], options = {} }) => {\n let { startNumber } = options;\n let startOffset = 0;\n\n if (!startNumber) return;\n\n if (games.length) {\n const gameNumbers = games.map(game => {\n if (!game?.number) return;\n\n const [ , prefix, start, suffix ] = GAME_NUMBER_REGEX.exec(game?.number);\n return Number(start)\n }).filter(number => number != null)\n\n const maxNumber = Math.max(...gameNumbers);\n const [ , prefix = '', start, suffix = '' ] = GAME_NUMBER_REGEX.exec(startNumber);\n\n startNumber = prefix + maxNumber + suffix;\n startOffset = 1;\n }\n\n const [ , prefix, start, suffix ] = GAME_NUMBER_REGEX.exec(startNumber);\n const lastNumber = Number(start) || 0;\n\n const padLength = Math.max(start.length, String(lastNumber + startOffset).length);\n const id = `${lastNumber + startOffset}`.padStart(padLength, '0');\n let number;\n if (prefix && suffix) {\n number = `${prefix}${id}${suffix}`;\n } else if (prefix && !suffix) {\n number = `${prefix}${id}`\n } else if (!prefix && suffix) {\n number = `${id}${suffix}`\n } else {\n number = id;\n }\n\n return number;\n}\n\nconst sort = { field: ['round', 'date', 'number'], order: ['ASC', 'ASC', 'ASC'] }\nexport const useDraftGamesController = ({ draft, schedule, limitedView, existingGames, resetNumbering = false }) => {\n const [ showCalendar ] = useShowCalendar();\n const { permissions } = useAuthContext();\n const dataProvider = useDataProvider();\n const { change } = useForm();\n const [ game, setGame ] = useState(null);\n const [ conflictsOnly, setConflictsOnly ] = useState(false);\n const [ permittedHomeTeamIds, setPermittedHomeTeamIds ] = useState([])\n\n useEffect(() => {\n if (!draft?.games) return;\n\n if (!limitedView) {\n setPermittedHomeTeamIds([]);\n return;\n }\n\n const permittedOfficeIds = permissions\n .filter(permission => permission.scopes.includes('scheduling:drafts'))\n .flatMap(permission => permission.officeIds)\n\n dataProvider.getMany('teams', { ids: draft.games.map(game => game.homeTeamId) })\n .then(res => res.data)\n .then(teams => teams.filter(team => permittedOfficeIds.includes(team.officeId)).map(team => team.id))\n .then(setPermittedHomeTeamIds)\n }, [ draft, limitedView, permissions, dataProvider ])\n\n const data = useMemo(() => {\n if (!draft?.games) return [];\n return draft.games.map(game => {\n game.scheduleId = draft.scheduleId;\n if (schedule) {\n game.categoryId = schedule.categoryId;\n }\n return game;\n })\n }, [ draft, schedule ])\n\n let perPage = showCalendar ? 1000 : 25;\n if (draft?.options?.type === 'Double Rotation' || draft?.options?.type === 'Single Rotation') {\n // fit as many rounds in a page while being below or equal to 25 games per page\n const totalTeams = draft?.teams?.length || 0\n const gamesPerRound = (totalTeams - (totalTeams % 2)) * (draft?.options?.type === 'Single Rotation' ? 0.5 : 1);\n const roundsPerPage = Math.floor(perPage / gamesPerRound);\n perPage = gamesPerRound * roundsPerPage;\n }\n\n const context = useList({\n data,\n resource: 'games',\n ids: data.map(event => event.id),\n sort,\n loaded: true,\n loading: false,\n page: 1,\n perPage,\n filter: {\n ...(conflictsOnly ? { id: data.filter(game => isConflicted(draft?.games, game)).map(game => game.id) } : {}),\n ...(limitedView ? { homeTeamId: permittedHomeTeamIds } : {})\n }\n })\n\n const updateGames = games => {\n change('games', games);\n context.onUnselectItems();\n }\n\n const handleSave = game => {\n let updatedGames = [...draft.games];\n\n if (!game.id) {\n // add new game\n game.id = uuid();\n updatedGames.push(game);\n } else {\n // replace update\n updatedGames = updatedGames.map(g => {\n if (g.id !== game.id) return g;\n return game;\n })\n }\n\n updatedGames = sortBy(updatedGames, ['round', 'date', 'startTime'])\n\n if (resetNumbering) {\n updatedGames = renumberGames(updatedGames, draft?.options?.startNumber);\n }\n\n updateGames([...updatedGames])\n }\n\n const handleDelete = game => {\n let updatedGames = [...draft.games]\n .filter(existing => existing.id !== game.id)\n\n if (resetNumbering) {\n updatedGames = renumberGames(updatedGames, draft?.options?.startNumber);\n }\n\n updateGames([...updatedGames])\n }\n\n return {\n context: {\n basePath: '/games',\n resource: 'games',\n ...context,\n },\n draft,\n schedule,\n existingGames,\n updateGames,\n onSave: handleSave,\n onDelete: handleDelete,\n game,\n setGame,\n conflictsOnly,\n setConflictsOnly,\n }\n}\n\nconst AnalyzeButton = ({ draft, existingGames, size, variant }) => {\n const translate = useTranslate();\n const [ open, setOpen ] = useState(false);\n\n return <>\n <Button color=\"primary\" size={size} variant={variant} startIcon={<Search />} onClick={() => setOpen(true)}>{translate('ra.action.analyze')}</Button>\n <AnalyzeDialog\n draft={draft}\n existingGames={existingGames}\n isOpen={open}\n onClose={() => setOpen(false)}\n />\n </>\n}\n\nconst GameListContext = ({ children, ...props }) => {\n const { data, ids, ...listContext } = useListContext()\n\n const games = useMemo(() => {\n return ids.map(id => data[id])\n }, [ data, ids ])\n\n const context = useList({\n ...listContext,\n data: games,\n ids: games.map(game => game.id),\n loaded: true,\n loading: false,\n page: 1,\n perPage: 25,\n })\n\n return <ListContextProvider value={context}>\n {children}\n </ListContextProvider>\n}\n\nconst CalendarListContext = ({ children, ...props }) => {\n const baseListContext = useListContext()\n const { data, ids, ...listContext } = baseListContext\n const [ showCalendar ] = useShowCalendar();\n\n const games = useMemo(() => {\n return ids.map(id => data[id])\n }, [data, ids])\n\n const calendarContext = useList({\n ...listContext,\n data: games,\n ids: games.map(game => game.id),\n loaded: true,\n loading: false,\n page: 1,\n perPage: 99999,\n })\n\n return <ListContextProvider value={showCalendar ? calendarContext : baseListContext}>\n {children}\n </ListContextProvider>\n}\n\nexport default ({\n draft,\n schedule,\n existingGames,\n updateGames,\n onSave,\n onDelete,\n start,\n popoverActions,\n\n game,\n setGame,\n conflictsOnly,\n setConflictsOnly,\n\n showAddGame = false,\n showDelete = false,\n hideNumber = false,\n hideAvailabilities = true,\n}) => {\n const isEnabled = useFlag();\n const translate = useTranslate()\n const [ showCalendar ] = useShowCalendar();\n const { setSelectedGame } = useSchedulingContext();\n\n const isGeneratedDraft = draft?.type === 'Generated';\n\n const initialValues = useMemo(() => {\n const values = {}\n\n if (schedule) {\n values.scheduleId = schedule.id;\n values.categoryId = schedule.categoryId;\n }\n if (!isEmpty(draft)) {\n values.number = getNextNumber(draft)\n }\n\n return values;\n }, [ schedule, draft ])\n\n const handleConflictsChange = event => setConflictsOnly(event.target.checked)\n const handleRowClick = (id, basePath, game) => setGame(game);\n const handleRowSelect = (id, basePath, game) => setSelectedGame(game);\n const handleClose = () => setGame(null)\n const handleSave = game => {\n onSave(game)\n handleClose();\n }\n const handleDelete = game => {\n onDelete(game);\n handleClose();\n }\n\n const filters = [\n !showCalendar && <DateInput source=\"startTime\" label={translate('resources.games.filters.startTime')} variant=\"outlined\" alwaysOn />,\n !showCalendar && <DateInput source=\"endTime\" label={translate('resources.games.filters.endTime')} variant=\"outlined\" disabled={showCalendar} alwaysOn />,\n !showCalendar && <TeamInput source=\"teamId\" filter={{ seasonId: schedule?.seasonId }} multiple variant=\"outlined\" />,\n !showCalendar && <SurfaceInput source=\"arenaId\" multiple variant=\"outlined\" />,\n !showCalendar && <FormControlLabel\n label={translate('resources.drafts.messages.show_conflicts_only')}\n control={\n <Switch value={conflictsOnly} onChange={handleConflictsChange} color=\"primary\" />\n }\n alwaysOn\n />,\n ].filter(Boolean);\n\n const addButton = showAddGame && <Button color=\"primary\" startIcon={<Add />} onClick={() => setGame(initialValues)}>{translate('resources.games.actions.add')}</Button>\n const deleteButton = showDelete && game?.id && <Button color=\"secondary\" onClick={() => handleDelete(game)}>{translate('ra.action.delete')}</Button>\n const actions = [\n <AnalyzeButton draft={draft} existingGames={existingGames} size=\"small\" />,\n <EventViewSettingsMenu\n disableAssignments\n disableGroupRounds={!isGeneratedDraft}\n disableGroupArenas={false}\n alwaysOn\n showTeamEvents\n showSlots\n showAvailabilties\n showSurfaceSizes\n showFlagsInput={false}\n showRenumber\n />,\n ]\n\n return <Grid container fullWidth spacing={1}>\n {showCalendar && <Grid item md={3}>\n <GameListContext>\n <DraggableGameList rowClick={handleRowSelect} dragComponent={DraggableEvent} />\n </GameListContext>\n </Grid>}\n <CalendarListContext>\n <CalendarProvider initialStart={start} disableAuth hideArena popoverActions={popoverActions} strictView={CALENDAR_VIEWS.DAY}>\n <Grid item md={showCalendar ? 9 : 12}>\n <Card>\n <ListView\n filters={filters}\n addButton={addButton}\n actions={actions}\n alert={<PastGamesAlert games={draft.games} />}\n bulkActionButtons={<GameToolbar updateGames={updateGames} />}\n open\n noResultsText={!showCalendar}\n >\n <BaseEventView\n rowClick={handleRowClick}\n hasBulkActions\n hideGroup\n hideStatus\n hideArena\n disableAssignments\n component={Fragment}\n disableCalendar={false}\n />\n </ListView>\n <GameDialog\n game={game}\n schedule={schedule}\n isOpen={!!game}\n hideNumber={hideNumber}\n hideAvailabilities={hideAvailabilities}\n deleteButton={deleteButton}\n onClose={handleClose}\n onSave={handleSave}\n />\n </Card>\n </Grid>\n </CalendarProvider>\n </CalendarListContext>\n </Grid>\n}\n","import React, { Fragment } from 'react';\nimport { RecordContextProvider, useTranslate, useQueryWithStore, GET_MANY } from 'react-admin';\nimport {\n styled,\n Button,\n Dialog,\n DialogTitle,\n DialogActions,\n Typography,\n Accordion,\n AccordionSummary,\n AccordionDetails as MuiAccordionDetails,\n CircularProgress,\n Table,\n TableHead,\n TableBody,\n TableRow,\n TableCell,\n makeStyles,\n} from '@material-ui/core';\nimport { ExpandMore } from '@material-ui/icons'\nimport moment from 'moment-timezone';\n\nimport { dedupe } from '@hisports/parsers';\n\nimport { TeamField } from '../../teams/TeamField';\nimport { OfficeField } from '../../offices/OfficeField';\nimport { GroupField } from '../../groups/GroupField';\n\nconst AccordionDetails = styled(MuiAccordionDetails)({\n padding: 0,\n overflowX: 'auto',\n overflowY: 'hidden',\n})\n\nconst Heading = props => <Typography variant=\"body2\" gutterBottom {...props} />\n\nconst getAllGames = (draftGames = [], existingGames = []) => {\n return [...draftGames, ...existingGames].reduce((games, game) => {\n if (games.some(g => game.number == g.number)) return games;\n games.push(game);\n return games;\n }, []).sort((a = {}, b = {}) => new Date(a.startTime || a.date) - new Date(b.startTime || b.date))\n}\n\nconst hasRounds = (draft) => {\n return draft?.games?.some(game => game.round != null)\n}\n\nconst getByes = (draft, games) => {\n const draftHasRounds = hasRounds(draft);\n\n let rotations = [];\n if (draftHasRounds) {\n const rounds = games.map(game => game.round).filter(Boolean)\n const min = rounds.reduce((a, b) => Math.min(a, b))\n const max = rounds.reduce((a, b) => Math.max(a, b))\n rotations = Array.from({ length: max - min + 1 }, (_, i) => i + min)\n } else {\n const startDate = draft.options?.startDate\n ? moment.utc(draft.options.startDate, 'YYYY-MM-DD')\n : moment.tz(games[0].startTime, games[0].timezone).format('YYYY-MM-DD');\n\n const end = moment.tz(games[games.length - 1].startTime, games[games.length - 1].timezone);\n const totalWeeks = end.diff(startDate, 'weeks') + 1;\n\n for (let weekNumber = 0; weekNumber < totalWeeks; weekNumber++) {\n rotations.push({\n start: moment.utc(startDate, 'YYYY-MM-DD').add(weekNumber * 7, 'days').format(),\n end: moment.utc(startDate, 'YYYY-MM-DD').add(weekNumber * 7 + 6, 'days').format(),\n });\n }\n }\n\n const byes = rotations.map(round => {\n const teamIds = [];\n games.forEach(game => {\n const areTeamsPlaying = draftHasRounds\n ? game.round === round\n : moment.tz(moment.tz(game.startTime, game.timezone).format('YYYY-MM-DD'), game.timezone).isBetween(round.start, round.end, 'day', '[]')\n\n if (!areTeamsPlaying) return;\n teamIds.push(game.homeTeamId, game.awayTeamId);\n })\n\n return dedupe(teamIds);\n });\n\n return byes.map(bye => draft.teams.filter(team => !bye.includes(team.teamId)))\n}\n\nconst Summary = ({ draft, existingGames }) => {\n const translate = useTranslate()\n\n const allGames = getAllGames(draft.games, existingGames)\n const byes = getByes(draft, allGames);\n\n const teams = draft.teams.map(team => {\n const { teamId } = team;\n const home = allGames.filter(game => game.homeTeamId === teamId)\n const away = allGames.filter(game => game.awayTeamId === teamId)\n const conflicts = allGames.filter(game => (game.homeTeamId === teamId || game.awayTeamId === teamId) && game.status === 'Conflict')\n const byesCount = byes.reduce((total, bye) => {\n if (bye.map(team => team.teamId).includes(teamId)) total++;\n return total;\n }, 0)\n const opponents = allGames.reduce((teams, game) => {\n if (game.homeTeamId === teamId) teams.add(game.awayTeamId);\n if (game.awayTeamId === teamId) teams.add(game.homeTeamId);\n return teams;\n }, new Set())\n\n return {\n teamId: team.teamId,\n day: team.day,\n opponents: opponents.size,\n conflicts: conflicts.length,\n byes: byesCount,\n home: home.length,\n away: away.length,\n total: home.length + away.length,\n }\n })\n\n const showDay = teams.some(t => t.day);\n\n return <Table padding=\"dense\">\n <TableHead>\n <TableRow>\n <TableCell>{translate('resources.drafts.labels.total')}</TableCell>\n {showDay && <TableCell>{translate('ra.date.day', 1)}</TableCell>}\n <TableCell numeric>{translate('resources.drafts.labels.opponents')}</TableCell>\n <TableCell numeric>{translate('resources.drafts.labels.conflicts')}</TableCell>\n <TableCell numeric>{translate('resources.drafts.labels.byes')}</TableCell>\n <TableCell numeric>{translate('resources.drafts.labels.home')}</TableCell>\n <TableCell numeric>{translate('resources.drafts.labels.away')}</TableCell>\n <TableCell numeric>{translate('resources.drafts.labels.total')}</TableCell>\n </TableRow>\n </TableHead>\n <TableBody>\n {teams.map(team =>\n <RecordContextProvider value={team}>\n <TableRow key={team.teamId}>\n <TableCell component=\"th\" scope=\"row\">\n <TeamField source=\"teamId\" includeId=\"inline\" />\n </TableCell>\n {showDay && <TableCell>{team.day}</TableCell>}\n <TableCell numeric>{team.opponents}</TableCell>\n <TableCell numeric>{team.conflicts}</TableCell>\n <TableCell numeric>{team.byes}</TableCell>\n <TableCell numeric>{team.home}</TableCell>\n <TableCell numeric>{team.away}</TableCell>\n <TableCell numeric>{team.total}</TableCell>\n </TableRow>\n </RecordContextProvider>\n )}\n </TableBody>\n </Table>\n}\n\nconst Matchups = ({ draft, games }) => {\n const translate = useTranslate()\n\n const teams = draft.teams.map((team, index) => {\n const { teamId, groupId } = team;\n const opponents = draft.teams\n .reduce((opponents, opponent, index) => {\n if (opponent.teamId === teamId) {\n opponents[index] = { home: 0, away: 0 }\n return opponents;\n }\n\n const home = games\n .filter(game => game.homeTeamId === teamId && game.awayTeamId === opponent.teamId)\n .length;\n const away = games\n .filter(game => game.homeTeamId === opponent.teamId && game.awayTeamId === teamId)\n .length;\n\n opponents[index] = { home, away }\n return opponents;\n }, [])\n return {\n id: index + 1,\n teamId,\n groupId,\n day: team.day,\n opponents,\n }\n })\n\n const showGroups = draft?.options?.crossGroup && teams.some(team => team.groupId);\n\n return <Table padding=\"dense\">\n <TableHead>\n <TableRow>\n <TableCell numeric />\n {showGroups && <TableCell>{translate('resources.drafts.labels.team')}</TableCell>}\n <TableCell>{translate('resources.drafts.labels.group')}</TableCell>\n {teams.map(team => <TableCell numeric>{team.id}</TableCell>)}\n </TableRow>\n </TableHead>\n <TableBody>\n {teams.map(team =>\n <RecordContextProvider value={team} key={team.id}>\n <TableRow hover>\n <TableCell component=\"th\" scope=\"row\" numeric>{team.id}</TableCell>\n <TableCell><TeamField source=\"teamId\" /></TableCell>\n {showGroups && <TableCell><GroupField source=\"groupId\" /></TableCell>}\n {team.opponents.map(({ home, away }) => <TableCell numeric>\n {(home + away === 0) ? null : `${home}/${away}`}\n </TableCell>)}\n </TableRow>\n </RecordContextProvider>\n )}\n </TableBody>\n </Table>\n}\n\nconst useStyles = makeStyles(theme => ({\n status: {\n width: '100%',\n margin: theme.spacing(2),\n textAlign: 'center',\n },\n table: {\n // add margin to minimize scrolling\n marginRight: theme.spacing(15),\n },\n officeHeader: {\n width: theme.spacing(3),\n height: theme.spacing(15),\n textOverflow: 'ellipsis',\n whiteSpace: 'nowrap',\n },\n rotate: {\n transform: 'translate(25px, 58px) rotate(315deg)',\n width: theme.spacing(1.5),\n },\n rotateInner: {\n borderBottom: `1px solid ${theme.palette.divider}`,\n paddingBottom: theme.spacing(.5),\n },\n officeCell: {\n borderRight: `1px solid ${theme.palette.divider}`,\n textAlign: 'center',\n width: theme.spacing(3),\n height: theme.spacing(3),\n },\n link: {\n display: 'inline-block',\n width: theme.spacing(21),\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n },\n}));\n\nconst OfficeMatchups = ({ draft, existingGames }) => {\n const classes = useStyles();\n const translate = useTranslate();\n\n const games = getAllGames(draft.games, existingGames)\n const teamIds = dedupe(games.flatMap(game => [game.homeTeamId, game.awayTeamId]))\n\n const { data: teams = [], loading, error } = useQueryWithStore({\n type: GET_MANY,\n resource: 'teams',\n payload: {\n ids: teamIds,\n _scope: 'Tenant',\n }\n });\n\n if (error) return <div className={classes.status}>\n {translate('ra.page.error_try_again_refresh')}\n </div>\n if (loading) return <div className={classes.status}>\n <CircularProgress color=\"primary\" variant=\"indeterminate\" />\n </div>\n\n const teamOfficeMatchups = teams.map(team => {\n const officeMatchups = games.reduce((matchups, game) => {\n if (![game.homeTeamId, game.awayTeamId].includes(team.id)) return matchups;\n\n if (game.homeTeamId === team.id) {\n const awayTeam = teams.find(team => team.id === game.awayTeamId);\n if (awayTeam) {\n matchups[awayTeam.officeId] = (matchups[awayTeam.officeId] || 0) + 1;\n }\n }\n\n if (game.awayTeamId === team.id) {\n const homeTeam = teams.find(team => team.id === game.homeTeamId);\n if (homeTeam) {\n matchups[homeTeam.officeId] = (matchups[homeTeam.officeId] || 0) + 1;\n }\n }\n\n return matchups;\n }, {})\n\n return {\n teamId: team.id,\n officeMatchups,\n }\n })\n\n const officeIds = dedupe(teams.map(team => team.officeId))\n return <Table padding=\"dense\" className={classes.table}>\n <TableHead>\n <TableRow>\n <TableCell />\n {officeIds.map(officeId => <TableCell className={classes.officeHeader}>\n <div className={classes.rotate}>\n <span className={classes.rotateInner}>\n <RecordContextProvider value={{ officeId }}>\n <OfficeField source=\"officeId\" classes={{ link: classes.link }} />\n </RecordContextProvider>\n </span>\n </div>\n </TableCell>)}\n </TableRow>\n </TableHead>\n <TableBody>\n {teamOfficeMatchups.map(team =>\n <TableRow hover>\n <TableCell component=\"th\" scope=\"row\">\n <RecordContextProvider value={team}>\n <TeamField source=\"teamId\" />\n </RecordContextProvider>\n </TableCell>\n {officeIds.map(officeId => <TableCell numeric className={classes.officeCell}>\n {team?.officeMatchups?.[officeId] || 0}\n </TableCell>)}\n </TableRow>\n )}\n </TableBody>\n </Table>\n}\n\nconst ByesList = styled('ul')({\n margin: 0,\n padding: 0,\n listStyleType: 'none',\n})\n\nconst Byes = ({ draft, existingGames }) => {\n const translate = useTranslate();\n\n const games = getAllGames(draft.games, existingGames)\n const byes = getByes(draft, games)\n const byeLabel = hasRounds(draft) ? translate('resources.drafts.labels.round', 1) : translate('resources.drafts.labels.week')\n const rounds = games?.map(game => game.round)?.filter(Boolean);\n const minRound = (rounds.length ? rounds : [1]).reduce((a, b) => Math.min(a, b));\n\n if (!byes.some(teams => teams.length > 0)) return <MuiAccordionDetails>{translate('resources.drafts.messages.no_byes')}</MuiAccordionDetails>\n return <Table padding=\"dense\">\n <TableHead>\n <TableRow>\n <TableCell numeric align=\"right\">{byeLabel}</TableCell>\n <TableCell>{translate('resources.drafts.labels.team')}</TableCell>\n </TableRow>\n </TableHead>\n <TableBody>\n {byes.map((teams, index) =>\n <TableRow>\n <TableCell component=\"th\" scope=\"row\" numeric align=\"right\">{index + minRound}</TableCell>\n <TableCell>{!teams.length\n ? 'None'\n : <ByesList>\n {teams.map(team =>\n <RecordContextProvider value={team} key={team.id}>\n <li>\n <TeamField source=\"teamId\" />\n </li>\n </RecordContextProvider>\n )}\n </ByesList>}\n </TableCell>\n </TableRow>\n )}\n </TableBody>\n </Table>\n}\n\nexport default ({ draft, existingGames, isOpen, onClose }) => {\n const translate = useTranslate()\n return <Dialog\n scroll=\"body\"\n maxWidth=\"md\"\n open={isOpen}\n onClose={onClose}\n >\n {isOpen && <>\n <DialogTitle>{translate('resources.drafts.labels.analysis')}</DialogTitle>\n <Accordion>\n <AccordionSummary expandIcon={<ExpandMore />}>\n <Heading>{translate('ra.action.summary')}</Heading>\n </AccordionSummary>\n <AccordionDetails>\n <Summary draft={draft} existingGames={existingGames} />\n </AccordionDetails>\n </Accordion>\n\n {existingGames.length ? <Accordion>\n <AccordionSummary expandIcon={<ExpandMore />}>\n <Heading>{translate('resources.drafts.labels.current_matchups')}</Heading>\n </AccordionSummary>\n <AccordionDetails>\n <Matchups draft={draft} games={existingGames} />\n </AccordionDetails>\n </Accordion> : null}\n\n <Accordion>\n <AccordionSummary expandIcon={<ExpandMore />}>\n <Heading>{translate('resources.drafts.labels.new_matchups')}</Heading>\n </AccordionSummary>\n <AccordionDetails>\n <Matchups draft={draft} games={draft.games} />\n </AccordionDetails>\n </Accordion>\n\n <Accordion>\n <AccordionSummary expandIcon={<ExpandMore />}>\n <Heading>{translate('resources.drafts.labels.office_matchups')}</Heading>\n </AccordionSummary>\n <AccordionDetails>\n <OfficeMatchups draft={draft} existingGames={existingGames} />\n </AccordionDetails>\n </Accordion>\n\n <Accordion>\n <AccordionSummary expandIcon={<ExpandMore />}>\n <Heading>{translate('resources.drafts.labels.byes')}</Heading>\n </AccordionSummary>\n <AccordionDetails>\n <Byes draft={draft} existingGames={existingGames} />\n </AccordionDetails>\n </Accordion>\n\n <DialogActions>\n <Button color=\"primary\" onClick={onClose}>{translate('ra.action.close')}</Button>\n </DialogActions>\n </>}\n </Dialog>\n}\n","import React, { Fragment } from 'react';\nimport { RecordContextProvider, useRecordContext, useTranslate } from 'react-admin';\nimport { Dialog, DialogTitle, DialogContent } from '@material-ui/core';\nimport moment from 'moment-timezone';\n\nimport { validateGameNumber } from '@hisports/scheduler';\nimport { getGameNumberValidationError } from '@hisports/scheduler/src/sequences/sequences';\n\nimport { DialogFormToolbar } from '../../../common/dialogs/DialogForm';\nimport { useSchedulingContext } from '../../../common/calendar/SchedulingContext';\nimport { GameForm } from '../../games/GameForm';\nimport { draftLabel } from '../../games/GameAvailabilityInfo';\nimport { useFlag } from '../../../http';\n\nexport const validate = (values, schedule, draft, limitedView, translate) => {\n const errors = {};\n\n if (values.arenaId || values.startTime || values.endTime) {\n if (!values.arenaId) errors.arenaId = 'ra.validation.required'\n if (!values.startTime) errors.startTime = 'ra.validation.required'\n if (!values.endTime) errors.endTime = 'ra.validation.required'\n }\n\n if (draft?.type === 'Generated') {\n if (values.round == undefined) {\n errors.round = 'ra.validation.required';\n } else if (values.round < 1) {\n errors.round = translate('ra.validation.minValue', { min: 1 });\n }\n }\n\n if (!values.homeTeamId && values.isApproved) errors.homeTeamId = 'ra.validation.required'\n if (!values.awayTeamId && values.isApproved) errors.awayTeamId = 'ra.validation.required'\n\n if (values.startTime && values.endTime) {\n if (!moment.tz(values.startTime, values.timezone).isValid()) {\n errors.startTime = 'resources.games.validations.invalid_time'\n } else if (!moment.tz(values.endTime, values.timezone).isValid()) {\n errors.endTime = 'resources.games.validations.invalid_time'\n } else if (moment.tz(values.endTime, values.timezone).isBefore(values.startTime, 'minute')) {\n errors.endTime = 'resources.games.validations.end_before_start'\n } else if (moment.tz(values.endTime, values.timezone).diff(values.startTime, 'hours') > 6) {\n errors.endTime = 'resources.games.validations.invalid_time_check_am_pm'\n }\n\n if (limitedView) {\n const previousGame = draft?.games?.find(game => game.id === values.id);\n if (previousGame) {\n if (!moment.tz(values.startTime, values.timezone).isSame(previousGame.date, 'day') || !moment.tz(values.date, values.timezone).isSame(previousGame.date, 'day')) {\n errors.startTime = 'resources.games.validations.invalid_date'\n }\n }\n }\n }\n\n if (values.date && schedule?.startDate && moment.utc(schedule.startDate).isAfter(values.date)) {\n errors.startTime = 'resources.games.validations.before_schedule_date'\n } else if (values.date && schedule?.endDate && moment.utc(schedule.endDate).add(1, 'day').isBefore(values.date)) {\n errors.startTime = 'resources.games.validations.after_schedule_date'\n }\n\n if (!values.status) errors.status = 'ra.validation.required'\n\n if (!validateGameNumber(String(values.number), schedule.seasonId)) {\n const gameNumberError = getGameNumberValidationError(String(values.number), schedule.seasonId);\n errors.number = `resources.schedulesequences.validations.${gameNumberError}`\n }\n\n if (draft?.games.find(game => game.number === values?.number && game.id !== values?.id)) {\n errors.number = 'resources.drafts.validations.same_game_number'\n }\n\n return errors;\n}\n\nexport const GameTitle = ({ game, isDraft }) => {\n const translate = useTranslate();\n const isEnabled = useFlag()\n\n let title = translate('resources.games.actions.add');\n\n if (game?.number != null || game?.id) {\n title = translate('resources.games.labels.game_number', { number: game?.number != null ? game.number : game.id })\n if (isDraft) {\n title = `${title} (${draftLabel(isEnabled, translate, game?.type)})`\n }\n if (game.date) {\n title = `${moment(game.date).format('ll')} / ${title}`\n }\n if (game.round) {\n title = `${translate('resources.drafts.labels.round', 1)} ${game.round} / ${title}`\n }\n }\n\n return <>{title}</> // eslint-disable-line react/jsx-no-useless-fragment\n}\n\nexport default ({ game, schedule, isOpen, hideNumber, hideAvailabilities, deleteButton, onClose, onSave }) => {\n const translate = useTranslate();\n const draft = useRecordContext();\n const { limitedView, deferDraftConflict } = useSchedulingContext();\n let teamIds = [];\n\n if (draft && draft.teams) {\n teamIds = draft.teams.map(team => team.teamId)\n }\n const teamFilter = { id: { inq: teamIds } }\n const timeOptions = {};\n if (game?.date && !(game?.startTime || game?.endTime)) {\n timeOptions.openTo = 'hours'\n timeOptions.initialFocusedDate = game.date\n }\n\n return <Dialog\n open={isOpen}\n maxWidth=\"md\"\n onClose={onClose}\n disableBackdropClick\n >\n {isOpen && <>\n <DialogTitle><GameTitle game={game} /></DialogTitle>\n <DialogContent>\n <RecordContextProvider value={game}>\n <GameForm\n validate={values => validate(values, schedule, draft, limitedView, translate)}\n draft={draft}\n destroyOnUnmount\n save={onSave}\n hideSchedule\n hideNumber={hideNumber}\n hideAvailabilities={hideAvailabilities}\n skipStatusValidation={deferDraftConflict}\n teamProps={{ filter: teamFilter, forceSelect: true, ignoreSchedule: true }}\n resetDate={false}\n timeOptions={timeOptions}\n component={Fragment}\n toolbar={\n <DialogFormToolbar submitLabel=\"ra.action.save\" deleteButton={deleteButton} onCancel={onClose} />\n }\n />\n </RecordContextProvider>\n </DialogContent>\n </>}\n </Dialog>\n}\n","import React from 'react';\nimport { styled } from '@material-ui/core';\n\nimport { useDragContext } from '../../../common/calendar/DragContext';\n\nconst Draggable = styled('div')({\n cursor: 'pointer',\n userSelect: 'none',\n})\n\nexport default ({ children, event, draggable = true }) => {\n const { setDroppingEvent, dragging, setDragging } = useDragContext();\n return <Draggable\n draggable={draggable}\n unselectable=\"on\"\n onDragStart={e => {\n if (!dragging) {\n setDragging(true);\n }\n\n setDroppingEvent(event);\n // this is a hack for Firefox\n // Firefox requires some kind of initialization\n // which we can do by adding this attribute\n // @see https://bugzilla.mozilla.org/show_bug.cgi?id=568313\n return e.dataTransfer.setData(\"text/plain\", \"\");\n }}\n onDragEnd={() => {\n if (dragging) {\n setDragging(false);\n }\n }}\n >\n {children}\n </Draggable>\n}\n","import { Card, makeStyles } from '@material-ui/core';\nimport React from 'react';\n\nimport { ListView } from '../../../common/cards/ListCard';\nimport EventGroupedGrid from '../../events/EventGroupedGrid';\n\nconst useDraggableListStyles = makeStyles(theme => ({\n card: {\n maxHeight: '100vh',\n overflow: 'auto',\n }\n}))\n\nconst DivComponent = ({ children, className, ...props }) => {\n return (\n <div className={className} {...props}>\n {children}\n </div>\n );\n};\n\nexport default ({ rowClick, dragComponent, className, listViewProps = {}, hideActions, showPools }) => {\n const classes = useDraggableListStyles();\n\n return <Card className={className}>\n <ListView open {...listViewProps}>\n <EventGroupedGrid\n className={classes.card}\n hideTime\n hideGroup\n hideStatus\n disableAssignments\n component={DivComponent}\n disableCalendar\n rowClick={rowClick}\n dragComponent={dragComponent}\n hideActions={hideActions}\n showPools={showPools}\n />\n </ListView>\n </Card>\n}\n","import React from 'react';\nimport { ReferenceInput, useTranslate } from 'react-admin';\nimport moment from 'moment-timezone';\n\nimport AutocompleteInput from '../../common/inputs/AutocompleteInput';\nimport AutocompleteSuggestion from '../../common/inputs/AutocompleteSuggestion';\n\nconst draftText = (record, translate) => {\n if (!record) return null;\n const draft = record.draft;\n const startDate = moment.utc(draft.options.startDate).format('YYYY-MM-DD');\n\n const summary = [];\n const breaks = draft.options?.breaks?.reduce((total, brk) => total + brk.totalWeeks, 0) || 0;\n\n const totalPlay = draft.options.totalRounds;\n const gamesPerTeam = draft.options.gamesPerTeam;\n if (totalPlay) summary.push(translate('resources.drafts.messages.number_of_play', totalPlay))\n if (gamesPerTeam) summary.push(translate('resources.drafts.messages.number_of_games_per_team', gamesPerTeam))\n if (breaks) summary.push(translate('resources.drafts.messages.number_of_break', breaks))\n\n return `${startDate} - ${draft.options.type} (${summary.join(', ')})`\n}\n\nconst draftSecondary = (draft, translate) => {\n const { isPublished, publishedAt, publishedBy, updatedAt } = draft;\n if (!isPublished) return moment.utc(updatedAt).calendar();\n\n const date = moment.utc(publishedAt).calendar();\n return `${translate('resources.drafts.fields.isPublished')}: ${date} ${translate('ra.function.by')} ${publishedBy}`;\n}\n\nconst DraftSuggestion = ({ suggestion: draft }) => {\n const translate = useTranslate();\n return <AutocompleteSuggestion primary={draftText(draft, translate)} secondary={draftSecondary(draft, translate)} />\n}\n\nexport default ({ helperText, ...props }) => {\n const translate = useTranslate();\n return <ReferenceInput\n reference=\"drafts\"\n sort={{\n field: 'id',\n order: 'ASC'\n }}\n perPage={999}\n filterToQuery={() => null}\n {...props}\n >\n <AutocompleteInput\n optionText={draft => draftText(draft, translate)}\n suggestionComponent={DraftSuggestion}\n helperText={helperText}\n {...props}\n />\n </ReferenceInput>\n}\n","import React, { useEffect, useRef, useState } from 'react';\nimport { TextInput, NumberInput, ArrayInput, useQueryWithStore, GET_ONE, useTranslate } from 'react-admin';\nimport { useForm } from 'react-final-form';\nimport { useStore, useSelector } from 'react-redux';\nimport { Card, CardContent, Grid } from '@material-ui/core';\nimport moment from 'moment-timezone';\n\nimport { createRange } from '@hisports/common';\nimport { FF_DRAFT_DEFAULT_ROUNDS, FF_DRAFT_DEFAULT_SLOTS, FF_DRAFT_LIMIT_BYES } from '@hisports/common/featureFlags';\nimport { validateGameNumber } from '@hisports/scheduler';\nimport { getGameNumberValidationError } from '@hisports/scheduler/src/sequences/sequences';\n\nimport { useFlag } from '../../../http';\nimport { useWizard } from '../../../common/Wizard';\nimport { DateInput, InlineDateInput } from '../../../common/inputs/DateInput';\nimport { DraftTypeEnumInput, DayEnumInput, DraftRoundTypeEnumInput, DraftMethodEnumInput } from '../../../common/inputs/EnumInputs';\nimport HorizontalFormIterator, { TransitionProps } from '../../../common/ra/HorizontalFormIterator';\nimport AlertDialog from '../../../common/dialogs/AlertDialog';\nimport SwitchInput from '../../../common/inputs/SwitchInput';\nimport CardHeader from '../common/CardHeader';\n\nimport { hasGroups, ScheduleGroupInput } from '../../groups/GroupInput';\nimport { ScheduleInput } from '../../schedules/ScheduleInput';\nimport DraftInput from '../DraftInput';\n\nexport const ROUND_TYPES = {\n HOME_SLOTS: 'Home Slots',\n WEEKDAYS: 'Weekdays',\n DATES: 'Dates'\n}\n\nconst validate = (values, schedule, translate) => {\n const errors = {\n options: {}\n };\n\n if (!values.scheduleId) errors.scheduleId = 'ra.validation.required';\n\n const hasOption = property => values.options && values.options[property] != null;\n if (!hasOption('type')) errors.options.type = 'ra.validation.required';\n if (values.options.method === 'totalRounds' && !hasOption('totalRounds')) errors.options.totalRounds = 'ra.validation.required'\n if (values.options.method === 'gamesPerTeam' && !hasOption('gamesPerTeam')) errors.options.gamesPerTeam = 'ra.validation.required'\n if (!hasOption('startNumber')) {\n errors.options.startNumber = 'ra.validation.required'\n } else if (!validateGameNumber(values.options.startNumber, schedule?.seasonId)) {\n const gameNumberError = getGameNumberValidationError(values.options.startNumber, schedule?.seasonId);\n errors.options.startNumber = `resources.schedulesequences.validations.${gameNumberError}`\n }\n\n const { roundType, weekdays, breaks, type } = values?.options || {}\n\n if (roundType === ROUND_TYPES.WEEKDAYS) {\n if (!weekdays?.length) errors.options.weekdays = 'ra.validation.required'\n if (type === 'Double Rotation' && weekdays?.length > 2) errors.options.weekdays = translate('resources.drafts.validations.max_weekdays', 2)\n }\n\n if (roundType === ROUND_TYPES.HOME_SLOTS || roundType === ROUND_TYPES.WEEKDAYS) {\n if (!hasOption('startDate')) errors.options.startDate = 'ra.validation.required'\n let day, startDate;\n if (hasOption('startDate')) {\n startDate = moment.utc(values.options.startDate, 'YYYY-MM-DD')\n day = startDate.format('dddd');\n }\n\n const earliestDate = startDate && moment.utc(startDate, 'YYYY-MM-DD').add(1, 'week');\n\n if (hasOption('breaks')) {\n errors.options.breaks = breaks?.map((brk, index, breaks) => {\n if (!brk) return {};\n const error = {}\n\n const brkStart = moment.utc(brk.startDate, 'YYYY-MM-DD')\n if (!brk.startDate || !brkStart.isValid()) {\n error.startDate = 'ra.validation.required';\n } else {\n if (day && brkStart.format('dddd') !== day) error.startDate = translate('resources.drafts.validations.must_start_on_day', { day });\n if (earliestDate && brkStart.isBefore(earliestDate, 'day')) error.startDate = translate('resources.drafts.validations.must_be_after', { date: moment(earliestDate).subtract(1, 'day').format('YYYY-MM-DD') });\n }\n\n if (!brk.totalWeeks) {\n error.totalWeeks = 'ra.validation.required'\n } else if (brk.totalWeeks <= 0) {\n error.totalWeeks = 'ra.validation.invalid_number';\n }\n\n if (brk.startDate && brk.totalWeeks > 0 && !error.startDate) {\n const brkEnd = moment.utc(brkStart).add(brk.totalWeeks + 1, 'weeks')\n\n if (schedule?.endDate) {\n const scheduleEndDate = moment.utc(schedule.endDate, 'YYYY-MM-DD')\n if (brkEnd.isAfter(scheduleEndDate, 'day')) error.startDate = translate('resources.drafts.validations.must_be_before_schedule_end_date', { date: moment(scheduleEndDate).format('YYYY-MM-DD') })\n }\n if (index > 0) {\n const prev = breaks[index - 1];\n const brkRange = createRange(brkStart, brkEnd);\n if (prev?.startDate && prev?.totalWeeks) {\n const prevBrkStart = moment.utc(prev.startDate, 'YYYY-MM-DD');\n const prevBrkEnd = moment.utc(prev.startDate, 'YYYY-MM-DD').add(prev.totalWeeks + 1, 'weeks')\n const prevBrkRange = createRange(prevBrkStart, prevBrkEnd)\n if (brkRange.overlaps(prevBrkRange)) error.startDate = translate('resources.drafts.validations.must_be_after', { date: prevBrkEnd.subtract(1, 'day').format('YYYY-MM-DD') })\n }\n }\n }\n\n return error;\n })\n }\n }\n\n return errors;\n}\n\nconst inputProps = {\n resource: 'drafts',\n basePath: '/drafts',\n variant: 'outlined',\n margin: 'none',\n fullWidth: true,\n}\n\nexport default ({ draft = {}, schedule, preloadTeams, save, onNext, existingTeams, existingPreviousDraftTeams, loading, classes }) => {\n const isEnabled = useFlag();\n const translate = useTranslate()\n const store = useStore()\n const form = useForm();\n const [ alert, setAlert ] = useState({ isOpen: false })\n const existingTeamsRef = useRef(existingTeams);\n const existingPreviousDraftTeamsRef = useRef(existingPreviousDraftTeams);\n const scheduleRef = useRef(schedule)\n const groupsData = useSelector(state => state.admin.resources.groups.data);\n const { options = {}, groupId, scheduleId } = draft;\n const { roundType, type, previousDraftId, startRound, startNumber, method, totalRounds, gamesPerTeam, limitByes, crossGroup, weekdays } = options;\n\n const scheduleHasGroups = hasGroups(groupsData, schedule?.officeId, schedule?.type)\n\n const showCrossGroup = scheduleHasGroups && groupId === null // \"No Groups\" selected\n const showLimitByes = type === 'Single Rotation' && (isEnabled(FF_DRAFT_LIMIT_BYES) || limitByes != null)\n\n useEffect(() => {\n scheduleRef.current = schedule\n existingTeamsRef.current = existingTeams;\n existingPreviousDraftTeamsRef.current = existingPreviousDraftTeams;\n }, [ schedule, existingTeams, existingPreviousDraftTeams ])\n\n useWizard((values) => validate(values, scheduleRef.current, translate), async draft => {\n if (!await confirmPrevious(draft)) return\n if (!await confirmCrossGroup(draft)) return\n return confirmTeamListOverwrite(draft)\n .then(draft => save(draft))\n .then(draft => preloadTeams(draft))\n .then(draft => onNext(draft))\n }, { disableBack: true })\n\n useEffect(() => {\n if (method === 'gamesPerTeam' && type === 'Double Rotation') {\n form.change('options.method', 'totalRounds')\n }\n if (type === 'Double Rotation') {\n form.change('options.weekdaysType', 'Consecutive')\n } else {\n form.change('options.weekdaysType', 'Rotating')\n }\n }, [type]) // eslint-disable-line react-hooks/exhaustive-deps\n\n useEffect(() => {\n if (weekdays?.length && roundType !== ROUND_TYPES.WEEKDAYS) {\n form.change('options.weekdays', [])\n }\n }, [roundType]) // eslint-disable-line react-hooks/exhaustive-deps\n\n useEffect(() => {\n if (type !== 'Single Rotation' && crossGroup) {\n form.change('options.type', 'Single Rotation')\n }\n }, [crossGroup]) // eslint-disable-line react-hooks/exhaustive-deps\n\n useEffect(() => {\n if (!crossGroup && scheduleHasGroups && groupId == null) { // default to cross-group if no group selected\n form.change('options.crossGroup', true)\n }\n if (crossGroup && groupId != null) { // reset cross-group if no group not selected\n form.change('options.crossGroup')\n }\n }, [groupId]) // eslint-disable-line react-hooks/exhaustive-deps\n\n useEffect(() => {\n if (method === 'totalRounds' && gamesPerTeam != null) {\n form.batch(() => {\n form.change('options.gamesPerTeam')\n form.change('options.totalRounds', gamesPerTeam)\n })\n }\n if (method === 'gamesPerTeam' && totalRounds != null) {\n form.batch(() => {\n form.change('options.totalRounds')\n form.change('options.gamesPerTeam', totalRounds)\n })\n }\n }, [method]) // eslint-disable-line react-hooks/exhaustive-deps\n\n const { data: previousDraft } = useQueryWithStore({\n type: GET_ONE,\n resource: 'drafts',\n payload: {\n id: previousDraftId,\n }\n })\n\n const confirmPrevious = async (draft) => {\n if (draft?.options?.previousDraftId) return true\n const state = store.getState();\n const drafts = state?.admin?.resources?.drafts?.data || {};\n const hasPreviousDraft = Object.values(drafts)\n .filter(previous => draft.scheduleId == previous.scheduleId && draft.groupId == previous.groupId && (!draft.id || draft.id !== previous.id))\n .some(draft => draft.isPublished)\n\n if (!hasPreviousDraft) return true;\n return new Promise(resolve => {\n setAlert({\n title: translate('resources.drafts.labels.previous_draft_alert'),\n message: translate('resources.drafts.messages.previous_draft_alert'),\n reject: 'ra.action.cancel',\n accept: 'ra.action.ok',\n isOpen: true,\n onClose: result => {\n resolve(result)\n setAlert(alert => ({ ...alert, isOpen: false }))\n }\n })\n })\n }\n\n const confirmCrossGroup = async (draft) => {\n const schedule = scheduleRef.current;\n const state = store.getState();\n const groups = state?.admin?.resources?.groups?.data || {};\n const scheduleHasGroups = hasGroups(groups, schedule?.officeId, schedule?.type)\n\n if (!scheduleHasGroups || draft?.groupId != null || draft?.options?.crossGroup !== undefined) return true\n return new Promise(resolve => {\n setAlert({\n title: translate('resources.drafts.labels.cross_group_alert'),\n message: translate('resources.drafts.messages.cross_group_alert'),\n reject: 'ra.action.cancel',\n accept: 'ra.action.no',\n extraButton: 'ra.action.yes',\n isOpen: true,\n onExtraButtonClose: result => {\n draft.options.crossGroup = true\n resolve(result)\n setAlert(alert => ({ ...alert, isOpen: false }))\n },\n onClose: result => {\n resolve(result)\n setAlert(alert => ({ ...alert, isOpen: false }))\n }\n })\n })\n }\n\n const confirmTeamListOverwrite = async (draft) => {\n const existingTeams = existingTeamsRef.current.filter(team => !draft?.groupId || team.groupId === draft?.groupId)\n const existingPreviousDraftTeams = existingPreviousDraftTeamsRef.current;\n const newTeams = existingPreviousDraftTeams?.length ? existingPreviousDraftTeams : existingTeams;\n const currentTeams = (draft?.teams || []).map(({ teamId, groupId }) => ({ teamId, groupId }))\n\n if (!newTeams?.length) return draft;\n\n const isEqualTeamList = JSON.stringify([...currentTeams].sort()) === JSON.stringify([...newTeams].sort());\n\n if (isEqualTeamList) return draft;\n\n if (currentTeams?.length) {\n const confirm = await new Promise(resolve => {\n setAlert({\n title: translate('resources.drafts.labels.replace_teams_alert'),\n message: translate('resources.drafts.messages.replace_teams_alert'),\n reject: 'ra.action.keep',\n accept: 'ra.action.replace',\n isOpen: true,\n onClose: result => {\n resolve(result)\n setAlert(alert => ({ ...alert, isOpen: false }))\n }\n })\n })\n\n if (!confirm) return draft\n }\n\n return { ...draft, teams: newTeams.map(({ teamId, groupId }) => ({ teamId, groupId })) }\n }\n\n const previousDraftHelperText = (() => {\n if (!startRound) return 'resources.drafts.helpers.previousDraftId_optional';\n return translate('resources.drafts.helpers.previousDraftId', { round: startRound+1 })\n })()\n\n const startNumberHelperText = (() => {\n if (!previousDraft?.draft) return false;\n\n const gameNumbers = previousDraft.draft?.games.map(game => game.number);\n gameNumbers.sort();\n\n if (startNumber) {\n const exists = gameNumbers.includes(startNumber);\n if (exists) return translate('resources.drafts.helpers.startNumber', { number: startNumber })\n }\n\n const previousDraftStartNumber = previousDraft.draft?.options?.startNumber;\n const endNumber = gameNumbers[gameNumbers.length - 1];\n return `${translate('resources.drafts.labels.previous_schedule')}: ${previousDraftStartNumber} - ${endNumber}`\n })()\n\n const weekdaysHelperText = (() => {\n if (type === 'Double Rotation') return 'resources.drafts.helpers.weekdays_double';\n return 'resources.drafts.helpers.weekdays'\n })()\n\n const startDateHelperText = (() => {\n let draftStart, previousDraftStart;\n\n const { startDate, method, totalRounds, breaks = [] } = draft?.options || {};\n if (startDate) {\n draftStart = moment.utc(startDate, 'YYYY-MM-DD').format('dddd');\n }\n\n const previousStartDate = previousDraft?.draft?.options?.startDate;\n if (previousStartDate) {\n previousDraftStart = moment.utc(previousStartDate).format('dddd');\n }\n\n if (!startDate && !previousStartDate) return false;\n\n const helperText = [];\n if (draftStart) {\n let message = translate('resources.drafts.helpers.startDate', { date: draftStart });\n\n if (method === 'gamesPerTeam') return message\n\n if (startDate && totalRounds) {\n const draftStart = moment.utc(startDate, 'YYYY-MM-DD');\n const endDay = (breaks || []).filter(Boolean).reduce((endDate, brk) => {\n if (brk.startDate && moment.utc(brk.startDate, 'YYYY-MM-DD').isAfter(endDate, 'day')) return endDate;\n return endDate.add(brk?.totalWeeks || 0, 'weeks');\n }, moment.utc(startDate, 'YYYY-MM-DD').add(totalRounds, 'weeks'))\n const range = translate('ra.date.range', { date1: draftStart.format('YYYY-MM-DD'), date2: endDay.subtract(1, 'day').format('YYYY-MM-DD') })\n const rangeTotalWeeks = translate('ra.date.phrase.week', totalRounds)\n message += ` (${rangeTotalWeeks}, ${range})`;\n }\n helperText.push(message)\n }\n if (previousDraftStart) helperText.push(translate('resources.drafts.helpers.startDate_previous', { date: previousDraftStart }))\n return helperText.join('\\n')\n })()\n\n return <>\n <Grid container spacing={2} direction=\"column\">\n <Grid item xs={12}>\n <Card>\n <CardHeader title=\"resources.drafts.labels.general\" titleTypographyProps={{ variant: 'subtitle2', gutterBottom: false }} />\n <CardContent>\n <Grid container spacing={2} fullWidth>\n <Grid item xs={12}>\n <ScheduleInput\n source=\"scheduleId\"\n {...inputProps}\n />\n <ScheduleGroupInput\n source=\"groupId\"\n showNone={`${translate('resources.drafts.fields.options.crossGroup')} / ${translate('ra.message.no_group')}`}\n {...inputProps}\n />\n </Grid>\n\n {scheduleId && <Grid item xs={12}>\n <DraftInput\n source=\"options.previousDraftId\"\n helperText={previousDraftHelperText}\n filter={{\n isPublished: true,\n type: 'Generated',\n scheduleId,\n groupId\n }}\n {...inputProps}\n />\n </Grid>}\n </Grid>\n </CardContent>\n </Card>\n </Grid>\n\n <Grid item xs={12}>\n <Card>\n <CardHeader title=\"resources.drafts.labels.matchups\" titleTypographyProps={{ variant: 'subtitle2', gutterBottom: false }} />\n <CardContent>\n <Grid container spacing={2} fullWidth>\n <Grid item xs={12}>\n <DraftTypeEnumInput\n source=\"options.type\"\n initialValue=\"Single Rotation\"\n getOptionDisabled={option => crossGroup && option.id === 'Double Rotation'}\n {...inputProps} />\n </Grid>\n\n <Grid item xs={12} sm={6} md={6}>\n <DraftMethodEnumInput\n source=\"options.method\"\n initialValue={isEnabled(FF_DRAFT_DEFAULT_ROUNDS) ? 'totalRounds' : 'gamesPerTeam'}\n helperText=\"\"\n {...inputProps} />\n </Grid>\n\n <Grid item xs={12} sm={6} md={6}>\n <>\n {method === 'totalRounds' && <NumberInput\n source=\"options.totalRounds\"\n helperText=\"\"\n {...inputProps}\n />}\n {method === 'gamesPerTeam' && <NumberInput\n source=\"options.gamesPerTeam\"\n helperText=\"\"\n {...inputProps}\n />}\n </>\n </Grid>\n <Grid item xs={12} sm={12} md={12}>\n <TextInput\n source=\"options.startNumber\"\n helperText={startNumberHelperText}\n placeholder=\"XY001\"\n {...inputProps}\n />\n </Grid>\n\n {showLimitByes && <Grid item xs={12}>\n <SwitchInput\n source=\"options.limitByes\"\n label=\"resources.drafts.fields.options.limitByes\"\n helperText=\"resources.drafts.helpers.limitByes\"\n defaultValue={isEnabled(FF_DRAFT_LIMIT_BYES) || undefined}\n disabled={crossGroup}\n />\n </Grid>}\n\n {showCrossGroup && <Grid item xs={12}>\n <SwitchInput\n source=\"options.crossGroup\"\n label=\"resources.drafts.fields.options.crossGroup\"\n helperText=\"resources.drafts.helpers.crossGroup\"\n disabled={type === 'Double Rotation'}\n />\n </Grid>}\n </Grid>\n </CardContent>\n </Card>\n </Grid>\n\n <Grid item xs={12}>\n <Card>\n <CardHeader title=\"resources.drafts.labels.scheduling\" titleTypographyProps={{ variant: 'subtitle2', gutterBottom: false }} />\n <CardContent>\n <Grid container spacing={2} fullWidth>\n <Grid item xs={12}>\n <DraftRoundTypeEnumInput\n source=\"options.roundType\"\n initialValue={isEnabled(FF_DRAFT_DEFAULT_SLOTS) ? ROUND_TYPES.HOME_SLOTS : ROUND_TYPES.WEEKDAYS }\n helperText=\"ra.message.optional\"\n {...inputProps}\n />\n </Grid>\n {roundType === ROUND_TYPES.WEEKDAYS && <Grid item xs={12}>\n <DayEnumInput\n source=\"options.weekdays\"\n helperText={weekdaysHelperText}\n select\n multiple\n abbreviation={false}\n sortValues={false}\n {...inputProps}\n />\n </Grid>}\n\n {(roundType === ROUND_TYPES.HOME_SLOTS || roundType === ROUND_TYPES.WEEKDAYS) && <>\n <Grid item xs={12}>\n <DateInput\n source=\"options.startDate\"\n helperText={startDateHelperText}\n initialValue={schedule?.startDate}\n {...inputProps}\n />\n </Grid>\n <Grid item xs={12}>\n <ArrayInput source=\"options.breaks\" {...inputProps}>\n <HorizontalFormIterator hideIndex TransitionProps={TransitionProps}>\n <InlineDateInput source=\"startDate\" {...inputProps} />\n <NumberInput source=\"totalWeeks\" {...inputProps} />\n </HorizontalFormIterator>\n </ArrayInput>\n </Grid>\n </>}\n </Grid>\n </CardContent>\n </Card>\n </Grid>\n </Grid>\n <AlertDialog {...alert} />\n </>\n}\n","import React, { useState } from 'react';\nimport { ArrayInput, useRecordContext, useTranslate } from 'react-admin';\nimport { useForm, useFormState } from 'react-final-form';\nimport { Card, CardContent, CardActions, Button } from '@material-ui/core';\nimport { Add, PlaylistAdd, Shuffle } from '@material-ui/icons';\nimport { shuffle, isEmpty, isEqual } from 'lodash';\n\nimport SortedFormIterator from '../../../common/ra/SortedFormIterator';\nimport { useWizard } from '../../../common/Wizard';\n\nimport { TeamInput } from '../../teams/TeamInput';\n\nimport { TeamImportDialog } from '../../schedules/dialogs/TeamImportDialog';\nimport CardHeader from '../common/CardHeader';\n\nconst validate = values => {\n const errors = {}\n errors.teams = values.teams.map((team, index) => {\n const error = {};\n if (!team.teamId) {\n error.teamId = 'ra.validation.required'\n } else if (values.teams.slice(0, index).some(({ teamId }) => teamId === team.teamId)) {\n error.teamId = 'ra.validation.duplicate'\n }\n return error;\n })\n return errors;\n}\n\nconst inputProps = {\n resource: 'drafts',\n basePath: '/drafts',\n variant: 'outlined',\n margin: 'none',\n fullWidth: true,\n}\n\nexport const TeamImportButton = ({ label, officeId, scheduleIdForGroupInput, ...props }) => {\n const draft = useRecordContext();\n const { mutators } = useForm();\n const { values: { scheduleId, groupId } } = useFormState();\n const [modalOpen, setModalOpen] = useState(false);\n\n const onSubmit = (values = {}) => {\n const { teamIds = [], groupId } = values;\n const teams = [...(draft?.teams || [])]\n\n teamIds.forEach(teamId => {\n if (teams.some(team => team.teamId === teamId)) return;\n const emptyTeamSlotIndex = teams.findIndex(team => isEmpty(team))\n if (emptyTeamSlotIndex >= 0) {\n teams[emptyTeamSlotIndex] = { teamId, groupId }\n mutators.update('teams', emptyTeamSlotIndex, { teamId, groupId })\n } else {\n teams.push({ teamId, groupId })\n mutators.push('teams', { teamId, groupId })\n }\n })\n\n setModalOpen(false);\n }\n\n return <>\n <Button onClick={() => setModalOpen(true)} color=\"primary\" startIcon={<PlaylistAdd />} {...props}>{label}</Button>\n <TeamImportDialog\n title={label}\n isOpen={modalOpen}\n onSubmit={onSubmit}\n onClose={() => setModalOpen(false)}\n initialValues={{ officeId, scheduleId, groupId }}\n scheduleIdForGroupInput={scheduleIdForGroupInput}\n />\n </>\n}\n\nexport default ({ draft, schedule, preloadTeams, save, loading, onBack, onNext }) => {\n const translate = useTranslate();\n const { change, mutators } = useForm();\n\n useWizard(validate, draft => {\n return save(draft)\n .then(onNext)\n }, { hideDelete: true })\n\n const shuffleTeams = () => {\n // requires atleast 2 teams to shuffle\n if (draft?.teams?.filter(team => !isEmpty(team)).length < 2) return;\n\n const teams = shuffle(draft.teams)\n\n // sort empty team slots last\n teams.sort((a, b) => {\n if (a.teamId && !b.teamId) return -1\n });\n\n if (!isEqual(teams, draft.teams)) {\n change('teams', teams);\n } else {\n shuffleTeams();\n }\n }\n\n return <Card>\n <CardHeader title=\"resources.teams.labels.card.title\" titleTypographyProps={{ variant: 'subtitle2', gutterBottom: false }} />\n <CardContent>\n <ArrayInput source=\"teams\" label={null} {...inputProps}>\n <SortedFormIterator disableAdd {...inputProps}>\n <TeamInput source=\"teamId\" filter={{ _scope: 'Tenant' }} label=\"resources.teams.name\" ignoreSchedule {...inputProps} />\n </SortedFormIterator>\n </ArrayInput>\n </CardContent>\n <CardActions>\n <Button color=\"primary\" startIcon={<Add />} onClick={() => mutators.push('teams', {})}>{translate('resources.drafts.labels.add_team')}</Button>\n <TeamImportButton label={translate('resources.drafts.labels.import_teams')} officeId={schedule?.officeId} />\n <Button color=\"primary\" startIcon={<Shuffle />} onClick={() => shuffleTeams()}>{translate('resources.drafts.labels.shuffle')}</Button>\n </CardActions>\n </Card>\n}\n","import React, { useRef, forwardRef, cloneElement, Children, useMemo } from 'react';\nimport { Table, TableBody, TableRow, TableCell, styled } from '@material-ui/core'\nimport moment from 'moment-timezone';\n\nimport { dedupe } from '@hisports/parsers';\n\nimport { CALENDAR_VIEWS } from '../../../resources/events/EventViewSettings';\nimport { useElementSize } from '../../useElementSize';\nimport { useCalendarContext } from '../CalendarContext';\n\nconst ScheduleView = styled('div')({\n maxHeight: '100vh',\n overflowY: 'auto',\n position: 'relative',\n '& .react-grid-item.react-grid-placeholder': {\n background: 'grey',\n }\n})\n\nconst HeaderTable = styled(Table)({\n tableLayout: 'fixed',\n})\n\nconst DayCell = styled(TableCell)(({ theme }) => ({\n textAlign: 'center',\n padding: theme.spacing(1),\n}))\n\nconst HourCell = styled(TableCell)(({ theme }) => ({\n height: theme.spacing(4),\n borderRight: `1px solid ${theme.palette.divider}`,\n position: 'relative',\n}))\n\nconst HourInfoCell = styled(TableCell)(({ theme }) => ({\n width: theme.spacing(5),\n height: theme.spacing(4),\n borderRight: `1px solid ${theme.palette.divider}`,\n borderBottom: 0,\n textAlign: 'center',\n}))\n\nconst TimezoneCell = styled(TableCell)(({ theme }) => ({\n width: theme.spacing(5),\n height: theme.spacing(4),\n fontSize: '0.75rem',\n textAlign: 'center',\n color: theme.palette.text.secondary,\n verticalAlign: 'bottom',\n}))\n\nconst HourInfo = styled('span')(({ theme }) => ({\n fontSize: '12px',\n position: 'relative',\n top: theme.spacing(-3.5),\n color: theme.palette.grey[500],\n}))\n\nconst getOffsetDifference = (timezoneA, timezoneB) => {\n const now = moment.utc();\n\n const offsetA = moment.tz.zone(timezoneA).utcOffset(now);\n const offsetB = moment.tz.zone(timezoneB).utcOffset(now);\n return Math.floor(offsetA - offsetB) / 60\n}\n\nconst Row = ({ index, offset }) => {\n const { columns, getColumnKey, timezones } = useCalendarContext();\n const primaryTimezone = timezones[0];\n\n return <TableRow>\n {dedupe(timezones).map(timezone => {\n const offsetFromPrimaryTimezone = getOffsetDifference(primaryTimezone, timezone)\n const hour = index + offset + offsetFromPrimaryTimezone\n return <HourInfoCell>\n <HourInfo>{index !== 0 && moment().hours(hour).minutes(0).format('h A')}</HourInfo>\n </HourInfoCell>\n })}\n {columns.map(column => <HourCell key={getColumnKey(column)} />)}\n </TableRow>\n}\n\n// Time grid\nconst ScheduleTable = forwardRef(({ hours, offset }, ref) => {\n return <Table>\n <TableBody ref={ref}>\n {hours.map((_, index) => {\n return <Row index={index} offset={offset} />\n })\n }\n </TableBody>\n </Table>\n})\n\nconst ColumnHeaders = props => {\n const { getColumnKey, getColumnHeading, columns, start, timezones, type } = useCalendarContext();\n\n return <HeaderTable>\n <TableBody>\n <TableRow>\n {timezones.map(timezone => <TimezoneCell>{moment.tz(start, timezone).format('z')}</TimezoneCell>)}\n {columns?.map(value => <DayCell key={getColumnKey(value)}>\n {getColumnHeading(value)}\n </DayCell>)}\n </TableRow>\n </TableBody>\n </HeaderTable>\n}\n\nexport default ({ offsetHours, children }) => {\n const { start, timezones = [], type, columns } = useCalendarContext();\n const bodyRef = useRef(null);\n\n // the top row is shorter than usual (TODO: why?) and the first columns (depending on timezones) are the time column\n const cellRef = useRef(null);\n cellRef.current = bodyRef?.current?.querySelector(`tr:nth-child(${timezones.length + 1}) td:nth-child(${timezones.length + 1})`)\n\n const timeColumnRef = useRef(null);\n timeColumnRef.current = bodyRef?.current?.querySelector('td')\n\n const size = useElementSize(cellRef.current);\n const timeColumnSize = useElementSize(timeColumnRef.current);\n const isMeasured = size.height > 0 && size.width > 0\n\n const offset = useMemo(() => ({\n width: timeColumnSize.width * timezones.length,\n height: 0,\n }), [timeColumnSize, timezones])\n\n const startDate = moment(start);\n const totalHours = 24 - offsetHours;\n const hours = totalHours > 0 ? Array(totalHours).fill(null) : [];\n\n if (type === CALENDAR_VIEWS.WEEK && columns?.length !== 7) return null;\n\n return <>\n <ColumnHeaders />\n <ScheduleView>\n <ScheduleTable hours={hours} offset={offsetHours} ref={bodyRef} />\n {isMeasured && Children.map(children, child => {\n if (!child) return null;\n return cloneElement(child, { ...child.props, size, offset, startDate, offsetHours });\n })}\n </ScheduleView>\n </>\n}\n","import React, { Children, cloneElement, forwardRef, memo, useMemo, useRef } from 'react';\nimport { useSelector } from 'react-redux';\nimport { Table, TableHead, TableBody, TableRow, TableCell, styled, IconButton, useTheme, Typography, Tooltip } from '@material-ui/core';\nimport { makeStyles } from '@material-ui/styles';\nimport moment from 'moment-timezone';\nimport { RecordContextProvider, useListContext, useTranslate } from 'react-admin';\nimport { Check as AvailableIcon, Clear as UnavailableIcon, Warning, Home as HomeIcon, CardTravel, StarBorder } from '@material-ui/icons';\n\nimport { CALENDAR_VIEWS, useCalendarView, useIsHomeFirst, useShowSlots, useShowAwaySlots, useShowTeamName } from '../../../resources/events/EventViewSettings';\nimport { TeamField } from '../../../resources/teams/TeamField';\nimport { draftLabel } from '../../../resources/games/GameAvailabilityInfo';\nimport { useFlag } from '../../../http';\nimport { useElementSize } from '../../useElementSize';\nimport { useSchedulingContext } from '../SchedulingContext';\nimport { useCalendarContext } from '../CalendarContext';\nimport { GameDetailsPopover, AvailableSlotsPopover, AvailabilityDetailsListPopover } from '../EventDetailsPopover';\nimport { CalendarGameIcon, isDraft } from '../EventDetails';\n\nconst getAvailabilityBg = (theme, availability, isHovered) => {\n switch (availability) {\n case AVAILABILITY_STATUS.unavailable:\n return isHovered ? theme.palette.error[200] : theme.palette.error[100]\n\n case AVAILABILITY_STATUS.mixed :\n return isHovered ? theme.palette.warning[200] : theme.palette.warning[100]\n\n default:\n return isHovered ? theme.palette.action.hover : null\n }\n}\nconst getAvailabilityColor = (theme, availability) => {\n switch (availability) {\n case AVAILABILITY_STATUS.unavailable:\n return `color-mix(in srgb, ${theme.palette.error.main} 30%, #000)`;\n\n case AVAILABILITY_STATUS.mixed :\n return `color-mix(in srgb, ${theme.palette.warning.main} 30%, #000)`;\n\n default:\n return null\n }\n}\n\nconst useDayStyles = makeStyles(theme => ({\n root: {\n position: 'relative',\n color: theme.palette.common.black,\n border: `1px solid ${theme.palette.divider}`,\n zIndex: 1,\n padding: 0,\n },\n day: {\n fontWeight: props => props.today ? 'bold' : undefined,\n userSelect: 'none',\n height: theme.spacing(20),\n overflow: 'hidden',\n\n [theme.breakpoints.down('sm')]: {\n fontSize: '.75rem',\n },\n },\n list: {\n listStyleType: 'none',\n margin: 0,\n padding: 0,\n marginBottom: theme.spacing(1),\n marginInline: theme.spacing(1),\n },\n event: {\n fontSize: '85%',\n alignItems: 'center',\n paddingBlock: theme.spacing(0.5),\n '&:hover': {\n backgroundColor: theme.palette.grey[100],\n cursor: 'pointer',\n }\n },\n eventRow: {\n display: 'flex',\n gap: theme.spacing(.5),\n '&:not(:last-child)': {\n marginBottom: theme.spacing(0.5),\n }\n },\n iconColumn: {\n flexShrink: 0,\n flexBasis: theme.spacing(1.5),\n },\n icon: {\n width: theme.spacing(1.5),\n height: theme.spacing(1.5),\n alignSelf: 'flex-start',\n marginTop: theme.spacing(0.5),\n },\n time: {},\n gameLabel: {\n fontWeight: 500,\n wordBreak: 'break-all'\n },\n teamName: {\n fontStyle: 'italic',\n fontSize: theme.spacing(1.25),\n },\n dayNumber: {\n marginTop: theme.spacing(1),\n marginInline: theme.spacing(1),\n position: 'relative',\n zIndex: 1,\n alignItems: 'center',\n justifyContent: 'center',\n height: '2em',\n aspectRatio: 1,\n fontSize: '1rem',\n },\n additional: {\n fontSize: '85%',\n },\n tournamentContainer: {\n display: 'flex',\n flexDirection: 'column',\n gap: 1,\n },\n tournament: {\n backgroundColor: theme.palette.warning[100],\n fontWeight: 'normal',\n paddingInline: theme.spacing(1),\n display: 'flex',\n alignItems: 'center',\n },\n tournamentIcon: {\n width: theme.spacing(1.5),\n height: theme.spacing(1.5),\n alignSelf: 'center',\n marginTop: 0,\n paddingRight: theme.spacing(0.7),\n },\n ellipsis: {\n whiteSpace: 'nowrap',\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n display: 'block',\n },\n}))\n\nconst useAvailabilityStyles = makeStyles((theme) => ({\n availabilityDiv: {\n paddingBlock: theme.spacing(.5),\n paddingInline: theme.spacing(0.5),\n transition: 'background-color .1s ease-in-out',\n backgroundColor: ({ availabilityStatus }) => getAvailabilityBg(theme, availabilityStatus, false),\n\n '&:hover': {\n cursor: 'pointer',\n backgroundColor: ({ availabilityStatus }) => getAvailabilityBg(theme, availabilityStatus, true),\n }\n },\n awayAvailabilityDiv: {\n paddingBlock: theme.spacing(.5),\n paddingInline: theme.spacing(1),\n transition: 'background-color .1s ease-in-out',\n backgroundColor: () => getAvailabilityBg(theme, null, false),\n\n '&:hover': {\n cursor: 'pointer',\n backgroundColor: () => getAvailabilityBg(theme, null, true),\n }\n },\n availabilities: {\n display: 'flex',\n flexWrap: 'wrap',\n alignItems: 'center',\n columnGap: theme.spacing(1),\n fontSize: '85%',\n marginBottom: theme.spacing(0.5),\n color: ({ availabilityStatus }) => getAvailabilityColor(theme, availabilityStatus),\n },\n awayAvailabilities: {\n display: 'flex',\n flexWrap: 'wrap',\n columnGap: theme.spacing(1),\n fontSize: '85%',\n marginBottom: theme.spacing(0.5),\n color: () => getAvailabilityColor(),\n },\n availabilityIcon: {\n verticalAlign: 'middle'\n }\n}))\n\nconst ScheduleView = styled('div')({\n maxHeight: '100vh',\n overflowY: 'auto',\n position: 'relative',\n '& .react-grid-item.react-grid-placeholder': {\n background: 'grey',\n }\n})\n\nconst AVAILABILITY_STATUS = {\n available: 'available',\n unavailable: 'unavailable',\n mixed: 'mixed',\n}\n\nconst getAvailabilityStatus = (available = [], unavailable = []) => {\n if (available.length && unavailable.length) return AVAILABILITY_STATUS.mixed;\n if (unavailable.length) return AVAILABILITY_STATUS.unavailable;\n return AVAILABILITY_STATUS.available;\n}\n\nconst getAvailabilityIcon = (availabilityStatus) => {\n if (availabilityStatus === AVAILABILITY_STATUS.mixed) return Warning;\n if (availabilityStatus === AVAILABILITY_STATUS.unavailable) return UnavailableIcon;\n return AvailableIcon;\n}\n\n\nexport const AvailabilityDetailsList = ({\n availableSlots = [],\n showSlots = true,\n awaySlots = [],\n showAwaySlots = true,\n availabilities = [],\n}) => {\n const translate = useTranslate();\n\n const available = availabilities.filter(availability => availability.isAvailable);\n const unavailable = availabilities.filter(availability => !availability.isAvailable);\n const onlyAvailable = !!available.length && !unavailable.length;\n const availabilityLabel = onlyAvailable ?\n (!showSlots || !availableSlots.length ? translate('resources.availabilities.labels.available') : null)\n : translate('resources.availabilities.labels.unavailable')\n\n const availabilityStatus = getAvailabilityStatus(available, unavailable)\n const classes = useAvailabilityStyles({ availabilityStatus })\n const Icon = getAvailabilityIcon(availabilityStatus);\n\n return <>\n {(!!availabilities.length || (showSlots && !!availableSlots.length)) &&\n <AvailabilityDetailsListPopover slots={availableSlots} availabilities={availabilities}>\n {(onClick) => {\n return <div onClick={onClick} className={classes.availabilityDiv}>\n <Typography className={classes.availabilities}>\n <Icon className={classes.availabilityIcon} fontSize=\"small\" />\n {!!availabilities.length &&\n <b>{availabilityLabel}</b>}\n {showSlots && !!availableSlots.length &&\n <span>{translate(`resources.arenaslots.messages.${showAwaySlots ? 'home_available_slots' : 'slots'}`, { smart_count: availableSlots.length })}</span>}\n </Typography>\n </div>\n }}\n </AvailabilityDetailsListPopover>}\n {showSlots && showAwaySlots && !!awaySlots.length && <AvailabilityDetailsListPopover slots={awaySlots}>\n {(onClick) => {\n return <div onClick={onClick} className={classes.awayAvailabilityDiv}>\n <Typography className={classes.awayAvailabilities}>\n <span>{translate('resources.arenaslots.messages.away_available_slots', { smart_count: awaySlots.length })}</span>\n </Typography>\n </div>\n }}\n </AvailabilityDetailsListPopover>}\n </>\n}\n\nexport const AvailableSlots = ({ slots = [], date, readOnly, label }) => {\n const { timezone } = useCalendarContext();\n const translate = useTranslate()\n\n const today = moment.tz(date, timezone).isSame(undefined, 'day');\n const classes = useDayStyles({ date, today })\n\n return <AvailableSlotsPopover slots={slots} isEditable={false} readOnly={readOnly}>\n {(onClick) => {\n return <Typography onClick={onClick} className={classes.slots}>{translate(label || 'resources.arenaslots.messages.available_slots', { smart_count: slots.length })}</Typography>\n }}\n </AvailableSlotsPopover>\n}\n\nconst TruncatedEventList = ({ events = [], max = 5 }) => {\n const [ showTeamName ] = useShowTeamName();\n const isHomeFirst = useIsHomeFirst();\n const isEnabled = useFlag()\n const translate = useTranslate()\n\n const classes = useDayStyles()\n\n const total = events.length;\n const visibleEvents = events.slice(0, max);\n\n return <>\n {visibleEvents\n .map(game => {\n const homeTeam = <TeamField source=\"homeTeamId\" link={false} variant=\"inherit\" />\n const awayTeam = <TeamField source=\"awayTeamId\" link={false} variant=\"inherit\" />\n return <RecordContextProvider value={game}>\n <GameDetailsPopover isEditable={false} disableLaunch={isDraft(game)}>\n {(onClick) => {\n return <li onClick={onClick} className={classes.event}>\n <div className={`${classes.title} ${classes.eventRow}`}>\n <div className={classes.iconColumn}>\n <CalendarGameIcon game={game} className={classes.icon} />\n </div>\n <div>\n {game?.startTime && <span className={classes.time}>{moment.tz(game.startTime, game.timezone).format('HH:mm')}</span>}\n {' '}\n <span className={classes.gameLabel}>\n {!showTeamName && isDraft(game) && `${draftLabel(isEnabled, translate, game?.type)} `}\n {game?.number || game?.id}\n </span>\n </div>\n </div>\n {showTeamName && (\n <div className={classes.teamName}>\n <div className={classes.eventRow}>\n <span className={classes.iconColumn}></span>\n <span className={classes.teamName}>{isHomeFirst ? homeTeam : awayTeam}</span>\n </div>\n <div className={classes.eventRow}>\n <span className={classes.iconColumn}>{isHomeFirst ? 'vs' : '@'}</span>\n <span className={classes.teamName}>{isHomeFirst ? awayTeam : homeTeam}</span>\n </div>\n </div>\n )}\n </li>\n }}\n </GameDetailsPopover>\n </RecordContextProvider>\n })}\n {total > max && <span className={classes.additional}>{translate('resources.schedules.messages.additional_games', { smart_count: total - max })}</span>}\n </>\n}\n\nconst Day = memo(({ date }) => {\n const { timezone, setNavigateToDate, header, filterEvents } = useCalendarContext();\n const { selectedGame, surfaceOfficeId, availability } = useSchedulingContext() || {};\n const [ _, setView ] = useCalendarView();\n const [ showSlots ] = useShowSlots();\n const [ showAwaySlots ] = useShowAwaySlots();\n const theme = useTheme()\n const { data = {} } = useListContext()\n\n const today = moment.tz(date, timezone).isSame(undefined, 'day');\n const classes = useDayStyles({ date, today })\n\n const homeTeam = useSelector(store => store.admin.resources.teams.data[selectedGame?.homeTeamId]);\n const awayTeam = useSelector(store => store.admin.resources.teams.data[selectedGame?.awayTeamId]);\n\n const homeTeamTournaments = availability?.schedules?.filter(\n schedule => schedule.teams.find(team => team.id == selectedGame?.homeTeamId)\n ) || []\n\n const awayTeamTournaments = availability?.schedules?.filter(\n schedule => schedule.teams.find(team => team.id == selectedGame?.awayTeamId)\n ) || []\n\n const bothTeamTournaments = awayTeamTournaments.filter(awayTournament => homeTeamTournaments.includes(awayTournament));\n\n const isWithinTournamentPeriod = (teamTournament) => {\n const formattedDate = new Date(teamTournament.startDate);\n const tournamentStartDate = formattedDate.toISOString().split('T')[0];\n return (date >= tournamentStartDate && date <= teamTournament.endDate);\n };\n\n const bothTeamTournamentsPerDay = bothTeamTournaments.filter(tournament => isWithinTournamentPeriod(tournament));\n\n const homeTeamTournamentsPerDay = homeTeamTournaments.filter(tournament => (\n !bothTeamTournamentsPerDay.includes(tournament) && isWithinTournamentPeriod(tournament)\n ))\n\n const awayTeamTournamentsPerDay = awayTeamTournaments.filter(tournament => (\n !bothTeamTournamentsPerDay.includes(tournament) && isWithinTournamentPeriod(tournament)\n ))\n\n const listGames = useMemo(() => {\n return Object.values(data).filter(event => event.date == date);\n }, [data, date])\n\n const availabilityGames = useMemo(() => {\n const dayGames = (availability?.games || []).filter(event => event.date == date);\n return filterEvents(dayGames);\n }, [availability?.games, date, filterEvents])\n\n const events = useMemo(() => {\n return [...(selectedGame ? availabilityGames : listGames)]\n .sort((a, b) => {\n if (!a.startTime || !b.startTime) return -1;\n return new Date(a.startTime) - new Date(b.startTime)\n })\n }, [availabilityGames, listGames, selectedGame])\n\n const slots = useMemo(() => {\n return (availability?.slots || [])\n }, [availability?.slots])\n\n const availabilities = useMemo(() => {\n return (availability?.availabilities || [])\n }, [availability?.availabilities])\n\n const thisMonth = moment.tz(date, timezone).isSame(moment(header, 'MMMM YYYY'), 'month')\n const day = moment.tz(date, timezone).date();\n\n const handleDayClick = (date) => {\n setView(CALENDAR_VIEWS.WEEK);\n setNavigateToDate(date)\n }\n\n const dayAvailabilities = availabilities.filter(availability => availability.date == date)\n\n const availableSlots = slots.filter(slot => slot.date == date && (surfaceOfficeId || homeTeam?.officeId == slot.officeId))\n const awayAvailableSlots = slots.filter(slot => slot.date == date && awayTeam?.officeId == slot.officeId)\n\n const canShowAwaySlots = showAwaySlots && !surfaceOfficeId && homeTeam?.officeId !== awayTeam?.officeId;\n\n return (\n <TableCell padding=\"none\" class={classes.root} style={{ backgroundColor: !thisMonth ? theme.palette.grey[100] : undefined }}>\n <div className={classes.day}>\n <IconButton onClick={() => handleDayClick(date)} size=\"small\" className={classes.dayNumber}>{day}</IconButton>\n <AvailabilityDetailsList\n availableSlots={availableSlots}\n showSlots={showSlots}\n awaySlots={awayAvailableSlots}\n showAwaySlots={canShowAwaySlots}\n availabilities={dayAvailabilities}\n date={date}\n />\n <div className={classes.tournamentContainer}>\n {bothTeamTournamentsPerDay.length > 0 && (\n bothTeamTournamentsPerDay.map(tournament => (\n <div className={classes.tournament}>\n <StarBorder className={classes.tournamentIcon} />\n <Tooltip title={tournament.name}><span className={classes.ellipsis}>{tournament.name}</span></Tooltip>\n </div>\n ))\n )}\n\n {homeTeamTournamentsPerDay.length > 0 && (\n homeTeamTournamentsPerDay.map(tournament => (\n <div className={classes.tournament}>\n <HomeIcon className={classes.tournamentIcon} />\n <Tooltip title={tournament.name}><span className={classes.ellipsis}>{tournament.name}</span></Tooltip>\n </div>\n ))\n )}\n\n {awayTeamTournamentsPerDay.length > 0 && (\n awayTeamTournamentsPerDay.map(tournament => (\n <div className={classes.tournament}>\n <CardTravel className={classes.tournamentIcon} />\n <Tooltip title={tournament.name}><span className={classes.ellipsis}>{tournament.name}</span></Tooltip>\n </div>\n ))\n )}\n </div>\n <ul className={classes.list}>\n <TruncatedEventList events={events} />\n </ul>\n </div>\n </TableCell>\n )\n})\n\nconst Week = memo(({ dates }) => {\n return <TableRow>\n {dates.map(date => (\n <Day key={date} date={date} />\n ))}\n </TableRow>\n})\n\nconst useMonthStyles = makeStyles(theme => ({\n root: {\n tableLayout: 'fixed',\n }\n}))\n\nconst Month = forwardRef((props, ref) => {\n const classes = useMonthStyles();\n const { columns, rows } = useCalendarContext();\n\n return <Table size=\"small\" className={classes.root} ref={ref}>\n <TableHead>\n <TableRow>\n {(columns || []).map(day => (\n <TableCell key={day} align=\"center\">{day}</TableCell>)\n )}\n </TableRow>\n </TableHead>\n <TableBody>\n {(rows || []).map(datesPerWeek => (\n <Week key={datesPerWeek[0]} dates={datesPerWeek} />\n ))}\n </TableBody>\n </Table>\n})\n\nexport default memo(({ children }) => {\n const bodyRef = useRef(null);\n\n const cellRef = useRef(null);\n cellRef.current = bodyRef?.current?.querySelector(`tr:nth-child(1) td:nth-child(1)`);\n const cellSize = useElementSize(cellRef.current);\n\n const monthHeader = useRef(null);\n monthHeader.current = bodyRef?.current?.querySelector('th');\n const monthHeaderSize = useElementSize(monthHeader.current);\n\n const isMeasured = cellSize.height > 0 && cellSize.width > 0\n\n const offset = useMemo(() => ({\n width: 0,\n height: monthHeaderSize.height,\n }), [ monthHeaderSize ])\n\n return <ScheduleView>\n <Month ref={bodyRef} />\n {isMeasured && Children.map(children, child => {\n if (!child) return null;\n return cloneElement(child, { ...child.props, size: cellSize, offset });\n })}\n </ScheduleView>\n})\n","import React, { Children, cloneElement, forwardRef, memo, useMemo, useRef } from 'react';\nimport { RecordContextProvider, useListContext, useTranslate } from 'react-admin';\nimport { Button, Table, TableBody, TableRow, TableCell, TableHead, makeStyles, styled, Tooltip, IconButton } from '@material-ui/core';\nimport { CardTravel, ChevronLeft, ChevronRight, Home as HomeIcon, KeyboardArrowDown } from \"@material-ui/icons\";\nimport moment from 'moment';\n\nimport { TeamField } from '../../../resources/teams/TeamField';\nimport DateField from '../../fields/DateField';\nimport { CALENDAR_VIEWS, useCalendarView, useIsHomeFirst, useShowAwaySlots, useShowCondensedView, useShowOfficeName } from '../../../resources/events/EventViewSettings';\n\nimport { useCalendarContext } from '../CalendarContext';\nimport { useSchedulingContext } from '../SchedulingContext';\nimport { EventDetails } from '../Events';\nimport { AvailabilityDetailsList } from './MonthGrid';\nimport { isDraft, isGame } from '../EventDetails';\nimport { useElementSize } from '../../useElementSize';\n\nconst TheadCell = styled(TableCell)(({ theme }) => ({\n verticalAlign: 'bottom',\n}))\nconst TopLeftCell = styled(TableCell)(({ theme }) => ({\n width: theme.spacing(14),\n padding: theme.spacing(1),\n}))\nconst Home = styled(HomeIcon)(({ theme }) => ({\n fontSize: '90%',\n color: theme.palette.grey[500],\n marginInline: theme.spacing(0.5),\n marginBottom: theme.spacing(0.5),\n verticalAlign: 'middle',\n}))\n\nconst SeasonView = styled('div')({\n maxHeight: '100vh',\n overflowY: 'auto',\n position: 'relative',\n '& .react-grid-item.react-grid-placeholder': {\n background: 'grey',\n }\n})\n\nconst useSeasonStyles = makeStyles(theme => ({\n root: {\n tableLayout: 'fixed',\n },\n TeamNameColor: {\n color: 'black',\n },\n thead: {\n lineHeight: 1.5,\n paddingBlock: theme.spacing(1),\n },\n buttonContainer: {\n display: 'flex',\n justifyContent: 'center',\n marginBlock: theme.spacing(1),\n },\n}))\n\nconst useCellStyles = makeStyles(theme => ({\n root: {\n position: 'relative',\n color: theme.palette.common.black,\n border: `1px solid ${theme.palette.divider}`,\n zIndex: 1,\n verticalAlign: 'top',\n borderTop: props => props?.separator ? `4px solid ${theme.palette.divider}` : undefined\n },\n thead: {\n lineHeight: 1.5,\n paddingBlock: theme.spacing(1),\n },\n teamEventCell: {\n userSelect: 'none',\n minHeight: theme.spacing(8),\n padding: theme.spacing(1),\n overflow: 'hidden',\n\n [theme.breakpoints.down('sm')]: {\n fontSize: '.75rem',\n },\n },\n date: {\n cursor: 'pointer',\n },\n dateField: {\n whiteSpace: 'normal',\n },\n list: {\n listStyleType: 'none',\n margin: 0,\n padding: 0,\n display: 'flex',\n flexDirection: 'column',\n gap: '4px'\n },\n hide: {\n backgroundColor: theme.palette.grey[300],\n },\n tournament: {\n backgroundColor: theme.palette.warning[100],\n fontWeight: 'normal',\n paddingInline: theme.spacing(1),\n display: 'flex',\n alignItems: 'center',\n },\n tournamentIcon: {\n width: theme.spacing(1.5),\n height: theme.spacing(1.5),\n alignSelf: 'center',\n marginTop: 0,\n paddingRight: theme.spacing(0.7),\n },\n ellipsis: {\n whiteSpace: 'nowrap',\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n display: 'block',\n },\n tournamentContainer: {\n display: 'flex',\n flexDirection: 'column',\n gap: 1,\n },\n showMoreButton: {\n display: 'flex',\n alignItems: 'center',\n marginInline: 'auto',\n zIndex: 9999, // Fix to avoid grid offset issue\n },\n}))\n\nconst useScheduledGamesStyles = makeStyles(theme => ({\n scheduledGames: {\n marginTop: 'auto',\n paddingTop: theme.spacing(1.5),\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n flexWrap: 'wrap',\n flexDirection: ({ isHomeFirst }) => isHomeFirst ? 'row' : 'row-reverse',\n columnGap: theme.spacing(2),\n rowGap: theme.spacing(.5),\n fontSize: 12,\n },\n flexCenter: {\n display: 'flex',\n alignItems: 'center',\n gap: theme.spacing(.5),\n },\n icon: {\n fontSize: '1.5em',\n opacity: .8,\n },\n colorWarning: {\n color: theme.palette.warning.dark\n }\n}))\n\nconst LoadMoreButton = ({ columns }) => {\n const classes = useCellStyles();\n const translate = useTranslate();\n const { dateFilter, setDateFilter, schedule, loading } = useSchedulingContext();\n\n const scheduleEndDate = schedule?.endDate ? moment(schedule.endDate) : null;\n const dateFilterEndDate = dateFilter?.endDate ? moment(dateFilter.endDate) : null;\n\n if (!scheduleEndDate || !dateFilterEndDate || dateFilterEndDate.isSameOrAfter(scheduleEndDate, 'day')) return null;\n\n const handleDateFilter = () => {\n setDateFilter(({ endDate, ...prev }) => {\n const newEnd = moment(endDate).add(1, 'month');\n return {\n ...prev,\n endDate: newEnd.isAfter(scheduleEndDate, 'day') ? scheduleEndDate.toISOString() : newEnd.toISOString(),\n type: CALENDAR_VIEWS.SEASON,\n };\n });\n };\n\n return <TableCell colSpan={columns?.length + 1}>\n <Button className={classes.showMoreButton} color=\"primary\" size=\"small\" onClick={handleDateFilter} disabled={loading}>\n {translate('ra.action.load_more')}\n <KeyboardArrowDown fontSize=\"small\" />\n </Button>\n </TableCell>\n}\n\nconst EventCard = ({ event, ...props }) => {\n return <RecordContextProvider value={event}>\n <EventDetails event={event} {...props} />\n </RecordContextProvider>\n}\n\nconst TeamEventCell = memo(({ date, team, separator }) => {\n const classes = useCellStyles({ separator });\n const { availability, surfaceOfficeId, selectedGame, scheduleTeams } = useSchedulingContext();\n const [ showAwaySlots ] = useShowAwaySlots();\n\n const teams = (scheduleTeams || []).map(scheduleTeam => scheduleTeam.team);\n const teamOfficeIds = teams.map(team => team.officeId);\n\n const teamTournaments = availability?.schedules?.filter(\n schedule => schedule.teams.find(scheduleteam => scheduleteam.id == team?.id)\n ) || []\n\n const isWithinTournamentPeriod = (teamTournament) => {\n const formattedDate = new Date(teamTournament.startDate);\n const tournamentStartDate = formattedDate.toISOString().split('T')[0];\n return (date >= tournamentStartDate && date <= teamTournament.endDate);\n };\n\n const teamTournamentsPerDay = teamTournaments.filter(tournament => isWithinTournamentPeriod(tournament))\n\n const games = useMemo(() => {\n return (availability?.games || [])\n .filter(game => game.date == date && [game.homeTeamId, game.awayTeamId].filter(Boolean).includes(team?.id))\n }, [availability?.games, date, team?.id])\n const practices = useMemo(() => {\n return (availability?.practices || [])\n .filter(practice => practice.date == date && practice.teamIds.includes(team?.id))\n }, [availability?.practices, date, team?.id])\n const activities = useMemo(() => {\n return (availability?.activities || [])\n .filter(activity => activity.date == date && activity.teamId === team?.id)\n }, [availability?.activities, date, team?.id])\n const slots = useMemo(() => {\n return (availability?.slots || [])\n .filter(slot => slot.date == date)\n }, [availability?.slots, date])\n\n const availabilities = useMemo(() => {\n const canShowAvailability = availability => {\n const { targetType, targetId } = availability;\n if (targetType === 'Team' && targetId !== team.id) return false;\n if (targetType === 'Office' && teamOfficeIds.includes(targetId) && targetId !== team.officeId) return false;\n return true;\n }\n\n return (availability?.availabilities || [])\n .filter(availability => availability.date == date && canShowAvailability(availability))\n }, [availability?.availabilities, date, team.id, team.officeId, teamOfficeIds])\n\n const events = useMemo(() => {\n const byTimeAscending = (a = {}, b = {}) => {\n if (!a.startTime && !b.startTime) return 0;\n if (!a.startTime) return 1;\n if (!b.startTime) return -1;\n return new Date(a.startTime) - new Date(b.startTime);\n };\n\n return [...games, ...practices, ...activities].sort(byTimeAscending);\n }, [activities, games, practices])\n\n\n const homeSlots = slots.filter(slot => (surfaceOfficeId || slot?.officeId === team?.officeId))\n const awaySlots = slots.filter(slot => slot?.officeId !== team?.officeId)\n\n const canShowAwaySlots = showAwaySlots && !surfaceOfficeId\n\n const hideCell = selectedGame && ![selectedGame?.homeTeamId, selectedGame?.awayTeamId].includes(team?.id);\n const className = hideCell ? `${classes.root} ${classes.hide}` : classes.root\n\n return <TableCell padding=\"none\" className={className}>\n {(!!availabilities.length || !!homeSlots.length) &&\n <AvailabilityDetailsList\n availableSlots={homeSlots}\n awaySlots={awaySlots}\n showAwaySlots={canShowAwaySlots}\n availabilities={availabilities}\n />}\n\n <div className={classes.tournamentContainer}>\n {teamTournamentsPerDay.length > 0 && (\n teamTournamentsPerDay.map(tournament => (\n <Tooltip title={tournament.name}><span className={`${classes.ellipsis} ${classes.tournament}`}>{tournament.name}</span></Tooltip>\n ))\n )}\n </div>\n\n <div className={classes.teamEventCell}>\n <ul className={classes.list}>\n {events.map(event => {\n if (isGame(event) || isDraft(event)) {\n return <EventCard event={event} teamId={team?.id} showOpponent />\n }\n return <EventCard event={event} />\n })}\n </ul>\n </div>\n </TableCell>\n})\n\nconst DayCell = memo(({ date, separator }) => {\n const [ view, setView ] = useCalendarView();\n const { setNavigateToDate } = useCalendarContext();\n const classes = useCellStyles({ separator })\n\n const handleDayClick = () => {\n setView(CALENDAR_VIEWS.WEEK);\n setNavigateToDate(date)\n }\n\n return <TableCell className={classes.root}>\n <div onClick={handleDayClick} className={classes.date}>\n <DateField source=\"date\" format=\"dddd,\" yearFormat=\"dddd,\" record={{ date }} className={classes.dateField} />\n <br />\n <DateField source=\"date\" format=\"ll\" yearFormat=\"ll\" record={{ date }} className={classes.dateField} />\n </div>\n </TableCell>\n})\n\nconst DayRow = memo(({ date, separator }) => {\n const { columns } = useCalendarContext()\n\n return <TableRow>\n <DayCell date={date} separator={separator} />\n {(columns || []).map(team => <TeamEventCell team={team} date={date} separator={separator} />)}\n </TableRow>\n})\n\nconst TotalScheduledGames = ({ team }) => {\n const { data } = useListContext();\n const isHomeFirst = useIsHomeFirst();\n const classes = useScheduledGamesStyles(isHomeFirst);\n const translate = useTranslate()\n\n const games = Object.values(data)\n\n if (!games?.length) return null;\n\n const homeGames = games.filter(game => game.homeTeamId === team?.id);\n const awayGames = games.filter(game => game.awayTeamId === team?.id);\n\n const scheduledHomeGames = homeGames.filter(game => game?.date);\n const scheduledAwayGames = awayGames.filter(game => game?.date);\n\n const homeTooltip = translate('components.calendar.tooltips.scheduled_home_games', { count: scheduledHomeGames.length, totalCount: homeGames.length });\n const awayTooltip = translate('components.calendar.tooltips.scheduled_away_games', { count: scheduledAwayGames.length, totalCount: awayGames.length });\n\n const isIncompleteHome = scheduledHomeGames.length !== homeGames.length\n const isIncompleteAway = scheduledAwayGames.length !== awayGames.length\n\n return (\n <div className={classes.scheduledGames}>\n <Tooltip title={homeTooltip} placement=\"top\">\n <div className={`${classes.flexCenter} ${isIncompleteHome ? classes.colorWarning : ''}`}>\n <HomeIcon className={classes.icon} />\n <span style={{ whiteSpace: 'nowrap' }}>{scheduledHomeGames.length} / {homeGames.length}</span>\n </div>\n </Tooltip>\n <Tooltip title={awayTooltip} placement=\"top\">\n <div className={`${classes.flexCenter} ${isIncompleteAway ? classes.colorWarning : ''}`}>\n <CardTravel className={classes.icon} />\n <span style={{ whiteSpace: 'nowrap' }}>{scheduledAwayGames.length} / {awayGames.length}</span>\n </div>\n </Tooltip>\n </div>\n )\n}\n\nconst TeamHeaderCell = memo(({ team }) => {\n const [ showOfficeName ] = useShowOfficeName();\n const { selectedGame } = useSchedulingContext()\n const classes = useCellStyles()\n\n const hideCell = selectedGame && ![selectedGame?.homeTeamId, selectedGame?.awayTeamId].includes(team?.id);\n const isHome = selectedGame?.homeTeamId === team?.id\n\n return <TheadCell className={hideCell ? classes.hide : undefined} key={team?.id} align=\"center\">\n <div className={classes.thead}>\n <span>\n <TeamField source=\"id\" includeOffice={showOfficeName && 'full'} className={classes.TeamNameColor} record={team} />\n {isHome && <Home />}\n </span>\n <TotalScheduledGames team={team} />\n </div>\n </TheadCell>\n})\n\nconst SeasonTableBody = memo((props) => {\n const translate = useTranslate();\n const [ showCondensedView ] = useShowCondensedView();\n const { rows, allrows, columns } = useCalendarContext();\n\n const selectedRows = showCondensedView ? rows : allrows;\n\n return <TableBody>\n {selectedRows?.length\n ? selectedRows.map((date, i) => {\n const prevWeek = selectedRows[i - 1] && moment(selectedRows[i - 1]).week()\n const week = moment(date).week();\n\n return <DayRow date={date} separator={prevWeek && prevWeek !== week} />\n })\n : <TableRow>\n <TableCell colSpan={columns?.length + 1} align=\"center\" style={{ paddingBlock: '16px' }}>\n {translate('ra.message.no_rows')}\n </TableCell>\n </TableRow>}\n <LoadMoreButton columns={columns} />\n </TableBody>\n})\n\nconst OffsetNavigation = ({ size }) => {\n const { columns, onNext, onBack, maxColumns, colOffset, totalColumns } = useCalendarContext();\n\n if (!totalColumns || columns.length >= totalColumns) return null;\n\n return <span>\n <IconButton size={size} onClick={onBack} disabled={colOffset === 0}><ChevronLeft /></IconButton>\n <IconButton size={size} onClick={onNext} disabled={(totalColumns - colOffset) <= maxColumns}><ChevronRight /></IconButton>\n </span>\n}\n\nconst SeasonTable = forwardRef((props, ref) => {\n const classes = useSeasonStyles();\n const { columns } = useCalendarContext()\n\n if (!columns?.length) return null;\n return <Table ref={ref} size=\"small\" className={classes.root} stickyHeader>\n <TableHead>\n <TopLeftCell align=\"center\" ><OffsetNavigation /></TopLeftCell>\n {(columns || []).map(team => <TeamHeaderCell key={team?.id} team={team} />)}\n </TableHead>\n <SeasonTableBody />\n </Table>\n})\n\nexport default memo(({ children }) => {\n const tableRef = useRef(null);\n\n const rowRefs = tableRef?.current?.querySelectorAll('tr');\n const rowHeights = rowRefs && Array.from(rowRefs).map(row => {\n return row.getBoundingClientRect().height;\n });\n\n const cellRef = useRef(null);\n cellRef.current = tableRef?.current?.querySelector('tr:nth-child(1)');\n const cellSize = useElementSize(cellRef.current);\n\n const teamHeader = useRef(null);\n teamHeader.current = tableRef?.current?.querySelector('th');\n const teamHeaderSize = useElementSize(teamHeader.current);\n\n const isMeasured = cellSize.height > 0 && cellSize.width > 0\n\n const offset = useMemo(() => ({\n width: 0,\n height: teamHeaderSize.height,\n }), [ teamHeaderSize ])\n\n return <SeasonView>\n <SeasonTable ref={tableRef} />\n {isMeasured && Children.map(children, child => {\n if (!child) return null;\n return cloneElement(child, { ...child.props, size: cellSize, offset, rowHeights });\n })}\n </SeasonView>\n})\n","import React, { useEffect, useState } from 'react';\nimport { useListContext, useRecordContext, useTranslate } from 'react-admin';\nimport { Button, IconButton } from '@material-ui/core'\nimport { ChevronLeft, ChevronRight } from '@material-ui/icons';\nimport moment from 'moment-timezone';\n\nimport { createRange } from '@hisports/common';\n\nimport { CALENDAR_VIEWS } from '../../resources/events/EventViewSettings';\n\nimport { useCalendarContext } from './CalendarContext';\nimport { useSchedulingContext } from './SchedulingContext';\n\nconst TODAY = moment.utc().format('YYYY-MM-DD')\n\nexport const getRangeStart = (type, date = TODAY) => {\n if (type === CALENDAR_VIEWS.WEEK) {\n return moment.utc(date, 'YYYY-MM-DD').startOf('week').format('YYYY-MM-DD');\n } else if (type === CALENDAR_VIEWS.MONTH) {\n return moment.utc(date, 'YYYY-MM-DD').startOf('month').startOf('week').format('YYYY-MM-DD');\n }\n}\n\nexport const getRangeEnd = (type, date = TODAY) => {\n if (type === CALENDAR_VIEWS.WEEK) {\n return moment.utc(date, 'YYYY-MM-DD').endOf('week').format('YYYY-MM-DD');\n } else if (type === CALENDAR_VIEWS.MONTH) {\n return moment.utc(date, 'YYYY-MM-DD').endOf('month').endOf('week').format('YYYY-MM-DD');\n }\n}\n\nexport const DateNavigation = ({ size }) => {\n const record = useRecordContext()\n const translate = useTranslate();\n const { initialStart, timezone, type, navigateToDate, setNavigateToDate } = useCalendarContext();\n const { selectedGame } = useSchedulingContext();\n const { filterValues, setFilters, setPerPage, perPage } = useListContext();\n const [ initialDate, setInitialDate ] = useState({ reset: filterValues?.startTime == null });\n\n useEffect(() => {\n let date = initialStart || TODAY;\n\n if (selectedGame?.date) {\n date = selectedGame.date\n } else if (record?.startDate) {\n date = record.startDate\n // check if today's range overlaps with schedule range\n const startDate = getRangeStart(type, record.startDate);\n const endDate = getRangeEnd(type, record.startDate)\n\n const todaysRangeStart = getRangeStart(type)\n const todaysRangeEnd = getRangeEnd(type)\n if (createRange(todaysRangeStart, todaysRangeEnd).overlaps(createRange(startDate, record?.endDate || endDate))) {\n date = TODAY;\n }\n }\n\n setNavigateToDate(date)\n }, [ record?.startDate, record?.endDate, initialStart, timezone, type, selectedGame?.date, setNavigateToDate ])\n\n useEffect(() => {\n // initialize navigation date range\n if (navigateToDate) {\n const startTime = getRangeStart(type, navigateToDate);\n const endTime = getRangeEnd(type, navigateToDate);\n\n setFilters({\n startTime,\n endTime,\n })\n setPerPage(99999)\n setNavigateToDate(null);\n }\n }, [ filterValues, setFilters, setPerPage, navigateToDate, setNavigateToDate, type ])\n\n useEffect(() => {\n // on unmount reset date if there wasn't a date set initially\n return () => {\n if (!initialDate.reset) return;\n const { _include } = filterValues;\n setFilters({ _include, startTime: undefined, endTime: undefined })\n setPerPage(perPage)\n }\n }, []) // eslint-disable-line react-hooks/exhaustive-deps\n\n useEffect(() => {\n const { startTime, endTime } = filterValues;\n if (!startTime || !moment.utc(startTime).isValid()) return;\n\n if (moment.utc(startTime, 'YYYY-MM-DD').day() !== 0) {\n // is not start of week, set new range\n setFilters({\n ...filterValues,\n startTime: getRangeStart(type, startTime),\n endTime: getRangeEnd(type, startTime)\n })\n return;\n }\n\n if (!endTime) {\n setFilters({\n ...filterValues,\n endTime: getRangeEnd(type, startTime),\n })\n return;\n }\n if (record?.endDate && moment.utc(endTime, 'YYYY-MM-DD').isSame(record.endDate, 'day')) return;\n const diff = moment.utc(startTime, 'YYYY-MM-DD').diff(moment.utc(endTime, 'YYYY-MM-DD').format('YYYY-MM-DD'), 'days')\n if ((Math.abs(diff) + 1) % 7 === 0) return;\n\n setFilters({ ...filterValues, endTime: getRangeEnd(type, startTime) })\n }, [ record?.endDate, filterValues, setFilters, type ])\n\n const onToday = () => {\n const today = moment().format('YYYY-MM-DD')\n\n const startTime = getRangeStart(type, today)\n const endTime = getRangeEnd(type, today)\n\n setFilters({ ...filterValues, startTime, endTime })\n }\n\n const onBack = () => {\n const duration = type === CALENDAR_VIEWS.MONTH ? 'month' : 'week';\n\n let date = moment.utc(filterValues.startTime, 'YYYY-MM-DD')\n if (type === CALENDAR_VIEWS.MONTH) {\n date = date.add(1, 'week')\n }\n date = date.subtract(1, duration).format('YYYY-MM-DD')\n const startTime = getRangeStart(type, date)\n const endTime = getRangeEnd(type, date)\n setFilters({ ...filterValues, startTime, endTime })\n }\n\n const onNext = () => {\n const duration = type === CALENDAR_VIEWS.MONTH ? 'month' : 'week';\n\n let date = moment.utc(filterValues.startTime, 'YYYY-MM-DD')\n if (type === CALENDAR_VIEWS.MONTH) {\n date = date.add(1, 'week')\n }\n date = date.add(1, duration).format('YYYY-MM-DD')\n const startTime = getRangeStart(type, date)\n const endTime = getRangeEnd(type, date)\n setFilters({ ...filterValues, startTime, endTime })\n }\n\n const { startTime, endTime } = filterValues;\n const todayDisabled = startTime && endTime && moment.utc().isSameOrAfter(startTime, 'day') && moment.utc().isSameOrBefore(endTime, 'day')\n\n return <span>\n <Button variant=\"outlined\" size={size} onClick={onToday} disabled={todayDisabled}>{translate('ra.date.lexical.today')}</Button>\n <IconButton size={size} onClick={onBack}><ChevronLeft /></IconButton>\n <IconButton size={size} onClick={onNext}><ChevronRight /></IconButton>\n </span>\n}\n\nconst OffsetNavigation = ({ size }) => {\n const { columns, onNext, onBack, maxColumns, colOffset, totalColumns } = useCalendarContext();\n\n if (!totalColumns || columns.length >= totalColumns) return null;\n\n return <span>\n <IconButton size={size} onClick={onBack} disabled={colOffset === 0}><ChevronLeft /></IconButton>\n <IconButton size={size} onClick={onNext} disabled={(totalColumns - colOffset) <= maxColumns}><ChevronRight /></IconButton>\n </span>\n}\n\nexport const CalendarNavigation = props => {\n const { type } = useCalendarContext();\n if ([CALENDAR_VIEWS.DAY].includes(type)) return <OffsetNavigation {...props} />;\n return <DateNavigation {...props} />\n}\n","import React, { useState } from 'react';\nimport { InputHelperText } from 'react-admin';\nimport { KeyboardDatePicker } from '@material-ui/pickers';\nimport moment from 'moment'\n\nimport { datePlaceholder } from '../DateInput';\n\nconst defaultOptions = {\n variant: 'outlined',\n showTodayButton: true,\n autoOk: true,\n format: 'YYYY-MM-DD',\n placeholder: datePlaceholder,\n minutesStep: 5,\n hideTabs: true,\n}\nconst getOptions = options => Object.assign({}, defaultOptions, options);\n\nconst DatePicker = (props) => {\n const [ focused, setFocused ] = useState(false);\n const [ value, setValue ] = useState(null);\n\n const {\n name,\n label,\n error,\n helperText,\n className,\n variant = 'outlined',\n margin = 'dense',\n options,\n onChange\n } = props;\n\n const onDateChange = date => {\n // remove any timezone and truncate time\n const dateStr = moment(date).utc(true).format('YYYY-MM-DD');\n // adjust to selected timezone\n const dateISO = moment.tz(dateStr, 'YYYY-MM-DD', 'UTC').toISOString();\n\n setValue(dateISO);\n onChange(dateISO);\n }\n\n const onDateFocus = () => {\n setFocused(true);\n }\n\n const onDateBlur = (e) => {\n if (e.target.value == null && !value) {\n onDateChange(e.target.value);\n }\n setFocused(false);\n }\n\n const allOptions = getOptions(options);\n const inputValue = moment(value).isValid() ? moment.tz(value, 'UTC').format(allOptions.format || 'YYYY-MM-DD HH:mm') : null;\n\n return <KeyboardDatePicker\n {...props}\n name={name}\n label={label}\n inputVariant={variant}\n margin={margin}\n error={!!error}\n helperText={error || helperText ? (\n <InputHelperText\n touched={focused}\n error={error}\n helperText={error || helperText}\n />\n ) : null\n }\n className={className}\n value={value || null} // null avoids an error in rifm (no longer necessary in v4)\n inputValue={inputValue}\n onChange={onDateChange}\n onFocus={onDateFocus}\n onBlur={onDateBlur}\n InputLabelProps={{\n shrink: focused || !!value,\n }}\n {...allOptions}\n />\n}\n\nexport default DatePicker;\n","import React, { useState } from 'react';\nimport { styled, Typography, makeStyles, Box, Tooltip, Chip } from '@material-ui/core'\nimport { useListContext, useTranslate } from 'react-admin';\nimport moment from 'moment-timezone';\n\nimport { CALENDAR_VIEWS } from '../../../resources/events/EventViewSettings';\nimport DayGrid from './DayGrid';\nimport MonthGrid from './MonthGrid';\nimport { useCalendarContext } from '../CalendarContext';\nimport { useSchedulingContext } from '../SchedulingContext';\nimport SeasonGrid from './SeasonGrid';\nimport { CalendarNavigation } from '../CalendarNavigation';\nimport DatePicker from '../../inputs/MuiInputs/DatePicker';\n\nconst useStyle = makeStyles((theme) => ({\n disabled: {\n opacity: 0.3,\n pointerEvents: 'none',\n },\n filtersContainer: {\n display: 'flex',\n flexWrap: 'wrap',\n justifyContent: 'space-between',\n alignItems: 'center',\n padding: theme.spacing(1),\n gap: theme.spacing(1),\n },\n dateInputContainer: {\n display: 'flex',\n flexWrap: 'wrap',\n gap: theme.spacing(1),\n },\n weekdayChips: {\n display: 'flex',\n gap: theme.spacing(0.5),\n },\n}))\n\nconst useScheduledGamesStyle = makeStyles((theme) => ({\n scheduledGames: {\n display: 'flex',\n alignItems: 'center',\n gap: theme.spacing(1),\n cursor: 'default',\n },\n progress: {\n display: 'flex',\n width: theme.spacing(20),\n gap: theme.spacing(.5),\n borderRadius: theme.spacing(.5),\n overflow: 'hidden',\n fontSize: theme.typography.body2.fontSize,\n lineHeight: 1.5,\n height: '1.5em',\n },\n progressCompleted: {\n textAlign: 'center',\n backgroundColor: theme.palette.success.main,\n },\n progressNotCompleted: {\n textAlign: 'center',\n backgroundColor: theme.palette.grey[300],\n },\n\n}))\n\nconst Header = styled('div')(({ theme }) => ({\n display: 'flex',\n justifyContent: 'space-between',\n alignItems: 'center',\n padding: theme.spacing(1, 2),\n borderBottom: '1px solid rgba(224, 224, 224, 1)',\n height: '41px',\n}))\n\nconst TotalScheduledGames = ({ games }) => {\n const classes = useScheduledGamesStyle();\n const translate = useTranslate();\n\n if (!games) return null\n\n const totalGames = games.length;\n const totalScheduledGames = games.filter(game => game?.date).length\n const totalMissingGames = totalGames - totalScheduledGames\n const percentCompleted = (totalScheduledGames / totalGames).toFixed(2)\n\n const completedTooltip = translate('components.calendar.tooltips.scheduled_games', { count: totalScheduledGames, totalCount: 5 });\n const notCompletedTooltip = translate('components.calendar.tooltips.not_scheduled_games', { count: totalMissingGames });\n\n\n const completedStyles = {\n width: `${percentCompleted * 100}%`,\n flexShrink: 1 - percentCompleted, /* make sure that it skrinks equally on both sides of the gap */\n }\n\n const notCompletedStyles = {\n width: `${(1 - percentCompleted) * 100}%`,\n flexShrink: percentCompleted, /* make sure that it skrinks equally on both sides of the gap */\n }\n\n return (\n <div className={classes.scheduledGames}>\n <div className={classes.progress}>\n <Tooltip title={completedTooltip}>\n <div className={classes.progressCompleted} style={completedStyles}></div>\n </Tooltip>\n <Tooltip title={notCompletedTooltip}>\n <div className={classes.progressNotCompleted} style={notCompletedStyles}></div>\n </Tooltip>\n </div>\n {totalGames !== 0 && (\n <Tooltip title={`${totalScheduledGames} / ${totalGames}`}>\n <div className={classes.percent}>{percentCompleted * 100}%</div>\n </Tooltip>\n )}\n </div>\n )\n}\n\nexport const WeekdaySelect = () => {\n const translate = useTranslate();\n const classes = useStyle();\n const { dateFilter, setDateFilter } = useSchedulingContext();\n const weekdays = dateFilter?.weekdays || [];\n\n const handleToggle = (value) => () => {\n if (value === null) {\n setDateFilter(prev => ({ ...prev, weekdays: [] }));\n return;\n }\n\n const currentIndex = weekdays.indexOf(value);\n const newWeekdays = [...weekdays];\n\n if (currentIndex === -1) {\n newWeekdays.push(value);\n } else {\n newWeekdays.splice(currentIndex, 1);\n }\n\n setDateFilter(prev => ({ ...prev, weekdays: newWeekdays }));\n };\n\n return (\n <div className={classes.weekdayChips}>\n <Tooltip title={translate('ra.date.days.long.All')}>\n <Chip variant={weekdays.length === 0 ? 'default' : 'outlined'} onClick={handleToggle(null)} label={translate('ra.date.days.short.All')} />\n </Tooltip>\n {[ 'Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat' ].map((value) => {\n return (\n <Tooltip key={value} title={translate(`ra.date.days.long.${value}`)}>\n <Chip\n variant={weekdays.includes(value) ? 'default' : 'outlined'}\n onClick={handleToggle(value)}\n label={translate(`ra.date.days.short.${value}`)?.charAt(0)}\n />\n </Tooltip>\n );\n })}\n </div>\n );\n}\n\nconst DateInputs = () => {\n const classes = useStyle();\n const translate = useTranslate();\n const { schedule, dateFilter, setDateFilter } = useSchedulingContext();\n const [pendingDates, setPendingDates] = useState(null); // used to store the dates after violation\n const [error, setError] = useState(false);\n\n const handleChange = (property) => (value) => {\n if (!property) return;\n setError(false);\n\n const newDate = moment.utc(value).format('YYYY-MM-DD');\n\n if (property === 'startDate' && moment.utc(value).isAfter(pendingDates?.endDate || dateFilter?.endDate, 'day')) {\n setPendingDates((prev) => ({ ...prev, startDate: newDate }))\n return setError({ startDate: translate('components.calendar.validations.start_after_end') });\n } else if (property === 'endDate' && moment.utc(value).isBefore(pendingDates?.startDate || dateFilter?.startDate, 'day')) {\n setPendingDates((prev) => ({ ...prev, endDate: newDate }))\n return setError({ endDate: translate('components.calendar.validations.end_before_start') });\n }\n\n if (!value) {\n const scheduleStartDate = moment.utc(schedule.startDate);\n const scheduleEndDate = moment.utc(schedule.endDate);\n const oneMonthFromStartDate = scheduleStartDate.clone().add(1, 'month');\n\n const endDate = oneMonthFromStartDate.isAfter(scheduleEndDate, 'day')\n ? scheduleEndDate\n : oneMonthFromStartDate;\n\n return setDateFilter(prev => ({\n ...prev,\n startDate: property === 'startDate' ? scheduleStartDate.format('YYYY-MM-DD') : prev.startDate,\n endDate: property === 'endDate' ? endDate.format('YYYY-MM-DD') : prev.endDate,\n }));\n }\n\n setDateFilter(prev => ({ ...prev, ...pendingDates, [property]: newDate }));\n setPendingDates(null);\n }\n\n return <div className={classes.dateInputContainer}>\n <DatePicker label={translate('resources.schedules.fields.startDate')} onChange={handleChange('startDate')} error={error?.startDate} />\n <DatePicker label={translate('resources.schedules.fields.endDate')} onChange={handleChange('endDate')} error={error?.endDate} />\n </div>\n}\n\nconst CalendarHeader = ({ header }) => {\n const classes = useStyle();\n const { data } = useListContext();\n const { type } = useCalendarContext();\n\n const games = Object.values(data)\n\n return <>\n <Header>\n <Box sx={{ paddingBlock: 8 }}><Typography variant=\"h6\">{header}</Typography></Box>\n <Box sx={{ display: 'flex', alignItems: 'center', gridGap: 8 }}>\n {type === CALENDAR_VIEWS.SEASON && <TotalScheduledGames games={games} />}\n {type !== CALENDAR_VIEWS.SEASON && <span><CalendarNavigation /></span>}\n </Box>\n </Header>\n {type === CALENDAR_VIEWS.SEASON && <Box className={classes.filtersContainer}>\n <WeekdaySelect />\n <DateInputs />\n </Box>}\n </>\n}\n\nexport default ({ offsetHours, children }) => {\n const { type, disabled, header, alert } = useCalendarContext();\n const classes = useStyle();\n\n return <div style={{ position: 'relative' }}>\n {alert}\n <div className={disabled ? classes.disabled : ''}>\n <CalendarHeader header={header} />\n {[CALENDAR_VIEWS.DAY, CALENDAR_VIEWS.WEEK].includes(type) && <DayGrid offsetHours={offsetHours} >\n {children}\n </DayGrid>}\n {type === CALENDAR_VIEWS.MONTH && <MonthGrid>\n {children}\n </MonthGrid>}\n {type === CALENDAR_VIEWS.SEASON && <SeasonGrid>\n {children}\n </SeasonGrid>}\n </div>\n </div>\n}\n","import React from 'react';\n\nimport { useShowAvailabilities, useShowSlots, useShowTeamEvents } from '../../resources/events/EventViewSettings';\n\nimport { Availabilities, Slots, TeamEvents } from './Events';\nimport CalendarGrid from './grid'\n\nexport default ({ offsetHours = 6, events, ...props }) => {\n const [ showTeamEvents ] = useShowTeamEvents();\n const [ showSlots ] = useShowSlots();\n const [ showAvailabilities ] = useShowAvailabilities();\n\n return <CalendarGrid offsetHours={offsetHours}>\n {showTeamEvents && <TeamEvents events={events} {...props} />}\n {showSlots && <Slots events={events} {...props} />}\n {showAvailabilities && <Availabilities events={events} {...props} />}\n </CalendarGrid>\n}\n","import React, { useMemo } from 'react';\nimport { useListContext, useResourceContext } from 'react-admin';\n\nimport Calendar from '../../common/calendar';\nimport { useSchedulingContext } from '../../common/calendar/SchedulingContext';\nimport { useCalendarContext } from '../../common/calendar/CalendarContext';\nimport { CALENDAR_VIEWS } from './EventViewSettings';\n\nexport const gameResource = type => {\n switch (type) {\n case 'Draft Game':\n return 'draftGames'\n case 'Draft':\n return 'drafts'\n case 'Game':\n default:\n return 'games'\n }\n}\n\nexport default ({ rowClick }) => {\n const { resource: schedulingResource, availability } = useSchedulingContext();\n const resource = useResourceContext();\n const { dates, type } = useCalendarContext()\n const { ids = [], data } = useListContext();\n\n const events = useMemo(() => {\n if (type === CALENDAR_VIEWS.SEASON) return [];\n\n let tempEvents = ids.map(id => data[id])\n .filter(e => e && e.startTime && e.endTime)\n .map(event => ({\n ...event,\n resource: event.resource || schedulingResource || resource\n }));\n\n if (availability) {\n const { games = [], practices = [], slots = [], availabilities = [] } = availability;\n const availabilityEvents = [\n ...games.map(game => ({ ...game, isEditable: false, resource: gameResource(game.type) })),\n ...practices.map(practice => ({ ...practice, isEditable: false, resource: 'practices', type: 'Practice' })),\n ...slots.map(slot => ({ ...slot, isEditable: false, resource: 'arenaslots', type: 'Slot' })),\n ...availabilities.map(availability => ({ ...availability, isEditable: false, resource: 'availabilities', type: 'Availability' })),\n ];\n\n tempEvents = [...tempEvents, ...availabilityEvents.filter(event => !tempEvents.some(e => e.id === event.id && e.resource === event.resource))];\n }\n\n return dates?.length ? tempEvents.filter(event => dates.includes(event.date)) : tempEvents;\n }, [availability, data, dates, ids, resource, schedulingResource, type]);\n\n return <Calendar events={events} rowClick={rowClick} />\n}\n\n","import React from 'react';\nimport { Datagrid, DatagridBody, DatagridRow, ReferenceField, TextField, useRecordContext, useResourceContext, useTranslate } from 'react-admin';\nimport { Tooltip, Typography, makeStyles, styled } from '@material-ui/core'\nimport { MergeType as MergeTypeIcon, Home as HomeIcon, UpdateOutlined } from '@material-ui/icons';\n\nimport { useRichTranslate } from '../../common/useRichTranslate';\nimport DateField from '../../common/fields/DateField';\nimport TimeRangeField from '../../common/fields/TimeRangeField';\nimport FunctionField from '../../common/fields/FunctionField';\n\nimport { ScheduleField } from '../schedules/ScheduleField';\nimport { GroupField } from '../groups/GroupField';\nimport { TeamField } from '../teams/TeamField';\nimport { TeamsField } from '../teams/TeamsField';\nimport { SurfaceField } from '../surfaces/SurfaceField';\nimport { StatusField, GameStatusField } from '../gameStatus';\nimport { CategoryField } from '../categories/CategoryField';\nimport { GameStatusIcon } from '../games/GameNumberField';\nimport { useGroupRounds, useIsHomeFirst, useShowAssignments, useShowFlags, useShowGameInfo } from './EventViewSettings';\nimport { AssignmentsRow, FlagsRow } from './EventGroupedGrid';\nimport { DraftGameActions } from '../draftgames/DraftGameActions';\nimport { useScheduleTeamsWithPools } from '../schedules/dialogs/generator/GeneratorContext';\nimport { useScheduleGroupingType } from '../scheduleSettings';\n\nconst useStyles = makeStyles(theme => ({\n root: {\n '& .column-startTime': {\n width: theme.spacing(15),\n },\n '& .column-scheduleId': {\n width: theme.spacing(25),\n },\n '& .column-arenaId': {\n width: theme.spacing(40),\n },\n '& .column-status': {\n width: theme.spacing(10),\n textAlign: 'right',\n },\n },\n crossTooltip: {\n verticalAlign: '-15%'\n }\n}))\n\nconst Home = styled(HomeIcon)(({ theme }) => ({\n fontSize: '90%',\n color: theme.palette.grey[500],\n verticalAlign: 'middle',\n}))\n\nconst Type = styled('span')({\n fontSize: '85%',\n fontVariant: 'small-caps',\n})\n\nconst Number = styled('span')({\n fontWeight: 500,\n})\n\nconst Details = styled('div')(({ theme }) => ({\n padding: theme.spacing(.25, 1),\n}))\n\nconst Pools = styled('div')(({ theme }) => ({\n display: 'flex',\n justifyContent: 'space-between',\n gap: theme.spacing(1),\n maxWidth: theme.spacing(80),\n '@media(max-width: 900px)': {\n maxWidth: 'calc(100% - 64px)',\n }\n}))\n\nconst Teams = styled('div')(({ theme, spacing = 1 }) => ({\n display: 'flex',\n alignItems: 'center',\n maxWidth: theme.spacing(80),\n gap: theme.spacing(spacing),\n '@media(max-width: 900px)': {\n maxWidth: 'calc(100% - 64px)',\n }\n}))\n\nconst Team = styled('span')(({ textAlign }) => ({\n flex: 1,\n textAlign,\n}))\n\nconst Versus = styled('span')(({ theme }) => ({\n fontSize: '80%',\n fontVariant: 'small-caps',\n verticalAlign: 'text-top',\n}))\n\nconst TruncatedTypography = styled(Typography)(({ theme }) => ({\n fontStyle: 'italic',\n display: '-webkit-box',\n '-webkit-line-clamp': 1,\n '-webkit-box-orient': 'vertical',\n overflow: 'hidden',\n maxWidth: theme.spacing(80),\n}))\n\nexport const rowClick = (id, basePath, record) => {\n if (!record) return;\n if (!record.type || record.type === 'Game') return `/games/${id}/show`\n if (record.type === 'Practice') return `/practices/${id}/show`\n return `/activities/${id}/show`\n}\n\nconst SeperatorDot = () => <span>•</span>\n\nconst Time = props => {\n const record = useRecordContext(props)\n if (!record?.startTime) return null;\n return <>\n <SeperatorDot />\n <TimeRangeField startSource=\"startTime\" endSource=\"endTime\" />\n </>\n}\n\nconst Date = props => {\n const record = useRecordContext(props)\n if (!record?.date) return null;\n return <>\n <SeperatorDot />\n <DateField source=\"date\" />\n </>\n}\n\nconst Group = props => {\n const record = useRecordContext(props)\n if (!record?.groupId || record?.crossGroupId || record?.crossScheduleId) return null;\n return <>\n <SeperatorDot />\n <GroupField source=\"groupId\" />\n </>\n}\n\nconst Shared = props => {\n const translate = useTranslate();\n const record = useRecordContext(props)\n\n if (record?.isShared == null) return null;\n return <>\n <SeperatorDot />\n {translate(`resources.draftGames.labels.isShared.${record.isShared}`)}\n </>\n}\n\nconst Round = props => {\n const translate = useTranslate();\n const record = useRecordContext(props);\n const [ groupRounds ] = useGroupRounds();\n\n if (record?.round == null || groupRounds) return null\n return ` • ${translate('resources.draftGames.fields.round')} ${record.round}`\n}\n\nconst Schedule = props => {\n const record = useRecordContext(props)\n if (!record?.scheduleId || record?.crossGroupId || record?.crossScheduleId) return null;\n return <>\n <SeperatorDot />\n <ScheduleField source=\"scheduleId\" />\n </>\n}\n\nconst Category = props => {\n const record = useRecordContext(props)\n if (!record?.categoryId) return null;\n return <>\n <SeperatorDot />\n <CategoryField source=\"categoryId\" />\n </>\n}\n\nconst useIconStyles = makeStyles(theme => ({\n icon: {\n verticalAlign: 'middle'\n }\n}))\n\nconst TootipGameDetails = ({ ...props }) => {\n const details = [\n <TimeRangeField startSource=\"startTime\" endSource=\"endTime\" showDate variant=\"inherit\" />,\n <SurfaceField source=\"arenaId\" link={false} variant=\"inherit\" />,\n ].flatMap(e => [e, ' • ']).slice(0, -1)\n\n return <ReferenceField basePath=\"/games\" resource=\"games\" reference=\"games\" link={false} variant=\"inherit\" {...props}>\n <FunctionField source=\"name\" render={game => {\n return <span>\n {game.number}\n <br />{details}\n </span>\n }} />\n </ReferenceField>\n}\n\nconst UpdateGameIcon = ({ game }) => {\n const classes = useIconStyles()\n const translate = useRichTranslate()\n\n if (!game?.updatedGameId) return null;\n\n return <Tooltip\n title={translate('resources.draftGames.alerts.update_game', {\n game: <TootipGameDetails source=\"updatedGameId\" record={game} />\n })}\n >\n <UpdateOutlined fontSize=\"small\" className={classes.icon} />\n </Tooltip>\n}\n\nconst CrossSchedulingTooltip = props => {\n const translate = useTranslate();\n const classes = useStyles()\n const record = useRecordContext(props);\n const { groupId, crossScheduleId, crossGroupId } = record || {}\n if (!crossGroupId && !crossScheduleId) return null;\n\n const CrossSchedulingDetails = <span>\n {translate('resources.draftGames.labels.main_schedule')}: <ScheduleField source=\"scheduleId\" link={false} variant=\"inherit\" />\n {groupId && <><br />{translate('resources.draftGames.labels.main_group')}: <GroupField source=\"groupId\" link={false} variant=\"inherit\" /></>}\n {crossScheduleId && <><br />{translate('resources.draftGames.labels.cross_schedule')}: <ScheduleField source=\"crossScheduleId\" link={false} variant=\"inherit\" /></>}\n {crossGroupId && <><br />{translate('resources.draftGames.labels.cross_group')}: <GroupField source=\"crossGroupId\" link={false} variant=\"inherit\" /></>}\n </span>\n\n return <Tooltip title={CrossSchedulingDetails} placement=\"top\" className={classes.crossTooltip}>\n <MergeTypeIcon fontSize=\"small\" />\n </Tooltip>\n}\n\nconst PoolsField = ({ isHomeFirst, homeTeamPool, awayTeamPool }) => {\n if (!homeTeamPool && !awayTeamPool) return null;\n return <Pools>\n <Typography variant=\"caption\" color=\"textSecondary\">{isHomeFirst ? homeTeamPool : awayTeamPool}</Typography>\n <Typography variant=\"caption\" color=\"textSecondary\">{isHomeFirst ? awayTeamPool : homeTeamPool}</Typography>\n </Pools>\n}\n\nexport const EventNameField = props => {\n const record = useRecordContext(props)\n\n if (!record?.name) return null\n return <div>{record.name}</div>\n}\n\nexport const EventCommentsField = props => {\n const record = useRecordContext(props)\n\n if (!record?.comments) return null\n return <TruncatedTypography variant=\"body2\" color=\"textSecondary\">{record.comments.split('\\n')[0]}</TruncatedTypography>\n}\n\nexport const EventTeamsField = ({ team, showPools = false, ...props }) => {\n const record = useRecordContext(props)\n const isHomeFirst = useIsHomeFirst();\n const { isPools } = useScheduleGroupingType(record?.scheduleId);\n\n const { data: scheduleTeams } = useScheduleTeamsWithPools(record?.scheduleId, showPools && isPools);\n\n if (!record) return null;\n if (record.type === 'Practice') {\n if (team && record.teamIds.length === 1) return null;\n return <TeamsField {...props} source=\"teamIds\" includeCategory=\"inline\" />\n }\n\n if (['Training', 'Meeting', 'Meal', 'Accomodation'].includes(record.type)) {\n if (team) return null;\n return <TeamField {...props} source=\"teamId\" includeCategory=\"inline\" />\n }\n\n const homeTeamPool = scheduleTeams?.find(t => t.teamId === record?.homeTeamId)?.pool?.name;\n const awayTeamPool = scheduleTeams?.find(t => t.teamId === record?.awayTeamId)?.pool?.name;\n\n if (team) { // viewing a team schedule\n const isHome = record.homeTeamId === team?.id;\n const source = isHome ? 'awayTeamId' : 'homeTeamId'\n return <>\n {showPools && <PoolsField isHomeFirst={isHomeFirst} homeTeamPool={homeTeamPool} awayTeamPool={awayTeamPool} />}\n <Teams>\n <Versus>{isHome ? ' vs ' : ' @ '}</Versus>\n <Team><TeamField {...props} source={source} /> {!isHome && <Home />}</Team>\n </Teams>\n </>\n }\n\n // general game list\n return <>\n {showPools && <PoolsField isHomeFirst={isHomeFirst} homeTeamPool={homeTeamPool} awayTeamPool={awayTeamPool} />}\n <Teams spacing={2}>\n <Team>{isHomeFirst && <Home />} <TeamField {...props} source={isHomeFirst ? \"homeTeamId\" : \"awayTeamId\"} /></Team>\n <Versus>{isHomeFirst ? 'vs' : '@'}</Versus>\n <Team textAlign=\"right\"><TeamField {...props} source={isHomeFirst ? \"awayTeamId\" : \"homeTeamId\"} /> {!isHomeFirst && <Home />}</Team>\n </Teams>\n </>\n}\n\nconst useDescriptionStyles = makeStyles(theme => ({\n header: {\n paddingBottom: props => props.padHeader ? theme.spacing(1.5) : undefined,\n display: 'flex',\n alignItems: 'center',\n flexWrap: 'wrap',\n gap: theme.spacing(0.25)\n }\n}))\n\nexport const DescriptionField = ({ team, showTime = false, hideNumber = false, showDate = false, padHeader = false, ...props }) => {\n const translate = useTranslate();\n const record = useRecordContext(props);\n const resource = useResourceContext(props);\n const [ showGameInfo ] = useShowGameInfo();\n const classes = useDescriptionStyles({ padHeader });\n\n if (!record) return null;\n\n if (['Practice', 'Training', 'Meeting', 'Meal', 'Accomodation'].includes(record.type)) {\n const type = translate(`resources.activities.values.type.${record.type}`, { _: record.type });\n\n let header = <>{type}</> // eslint-disable-line react/jsx-no-useless-fragment\n if (record.name) {\n header = <div className={classes.header}>\n <Type>{type}</Type>\n {' '}\n {record.name}\n </div>\n }\n\n return <>\n {header}\n <Details>\n <EventTeamsField team={team} {...props} link=\"show\" />\n </Details>\n <EventCommentsField />\n </>\n }\n\n const isDraftGame = resource === 'draftGames' || record?.type === 'Draft Game';\n let typeToDisplay = isDraftGame ? translate(`resources.draftGames.name`, 1) : translate(`resources.games.name`, 1);\n\n if (record?.gameBracket) {\n typeToDisplay = translate('resources.games.labels.bracket_game');\n }\n\n const numberToDisplay = isDraftGame ? record.id : record.number\n\n return <>\n <div className={classes.header}>\n <div>\n <Type>{typeToDisplay}</Type>\n {!hideNumber && ' '}\n {!hideNumber && <Number>{numberToDisplay}</Number>}\n </div>\n <Group />\n <CrossSchedulingTooltip />\n <Round />\n {isDraftGame && <Shared />}\n {showGameInfo && <>\n <Category />\n <Schedule />\n </>}\n {showDate && <Date />}\n {showTime && <Time />}\n <GameStatusIcon game={record} />\n <UpdateGameIcon game={record} />\n </div>\n <EventTeamsField team={team} {...props} link=\"show\" authMethod=\"gameTeams\" />\n <EventCommentsField />\n </>\n}\n\nexport const LocationField = ({ includeAttributes = false, includeCity = 'full', ...props }) => {\n const record = useRecordContext(props);\n if (!record) return null;\n if (['Training', 'Meeting', 'Meal', 'Accomodation'].includes(record.type)) return <TextField {...props} source=\"location\" />\n return <SurfaceField {...props} source=\"arenaId\" includeAttributes={includeAttributes} includeCity={includeCity} />\n}\n\nexport const StatusesField = props => {\n const record = useRecordContext(props);\n if (!record) return null;\n if (record.type && record.type !== 'Game') return <StatusField {...props} />;\n return <GameStatusField {...props} source=\"id\" label=\"\" />\n}\n\nconst EventDatagridRow = ({ columns, ...props }) => {\n const event = useRecordContext(props);\n const [ showAssignments ] = useShowAssignments();\n const [ showFlags ] = useShowFlags();\n return <>\n <DatagridRow {...props} />\n {showAssignments && <AssignmentsRow event={event} columns={columns} offset={2} />}\n {showFlags && <FlagsRow event={event} columns={columns} offset={2} />}\n </>\n}\n\nconst EventDatagridBody = ({ columns, ...props }) => <DatagridBody {...props} row={<EventDatagridRow columns={columns} />} />\nconst EventDatagrid = ({ hideAssignments, columns, ...props }) => {\n if (hideAssignments) return <Datagrid {...props} />\n return <Datagrid {...props} body={<EventDatagridBody columns={columns} />} />\n}\n\nexport const EventGrid = ({ hideGroup = false, hideArena = false, hideStatus = false, hideNumber = false, showSchedule = false, showDraftActions = false, showPools, includeVenue = true, team, hideAssignments, component, ...props }) => {\n const translate = useTranslate();\n const classes = useStyles()\n const columns = 3 + (showSchedule ? 1 : 0) + (hideArena ? 0 : 1) + (hideStatus ? 0 : 1);\n return <EventDatagrid size=\"medium\" rowClick={rowClick} className={classes.root} columns={columns} hideAssignments={hideAssignments} {...props}>\n <DateField source=\"date\" label=\"ra.date.name\" emptyText={`(${translate('resources.drafts.labels.no_date')})`} />\n <TimeRangeField source=\"startTime\" startSource=\"startTime\" endSource=\"endTime\" label=\"ra.date.time\" emptyText={`(${translate('resources.drafts.labels.no_time')})`} />\n <DescriptionField source=\"number\" label=\"resources.events.labels.details\" team={team} hideGroup={hideGroup} hideNumber={hideNumber} showPools={showPools} />\n {showSchedule && <ScheduleField source=\"scheduleId\" />}\n {!hideArena && <LocationField source=\"arenaId\" label=\"resources.events.labels.location\" emptyText={`(${translate('resources.drafts.labels.no_venue')})`} includeVenue={includeVenue} />}\n {!hideStatus && <StatusesField source=\"status\" label=\"\" />}\n {showDraftActions && <DraftGameActions />}\n </EventDatagrid>\n}\n","import React, { createContext, useContext, useEffect, useMemo, useState } from 'react';\n\nimport { filterOfficialsByPositionType } from '@hisports/scoresheet/src/util';\n\nimport { apiClient } from '../../../../../http';\n\nconst OfficialsContext = createContext();\n\nexport const OfficialsContextProvider = ({ gameId, assignments, listId, effectiveOfficials, children }) => {\n const [officials, setOfficials] = useState({}); // { [listId]: { [officeId]: { loading: bool, data: [official], error: '' } } }\n\n const value = useMemo(() => {\n const cacheKey = `${listId || 'noListId'}-${effectiveOfficials}`;\n\n const fetchOfficials = (abortControllerSignal, officeId) => {\n if (!abortControllerSignal || !officeId) throw new Error('missing abortControllerSignal or officeId');\n\n if (officials?.[cacheKey]?.[officeId]) return; // data already fetched\n\n setOfficials((data = {}) => ({ ...data, [cacheKey]: { ...data[cacheKey], [officeId]: { loading: true } } }))\n\n apiClient(`/games/${gameId}/availableOfficials`, {\n method: 'GET',\n params: { officeId, listId, effectiveOffices: effectiveOfficials },\n signal: abortControllerSignal\n }).then(({ data: officials }) => {\n setOfficials((data = {}) => ({ ...data, [cacheKey]: { ...data[cacheKey], [officeId]: { loading: false, data: officials, error: '' } } }))\n }).catch(e => {\n setOfficials((data = {}) => ({ ...data, [cacheKey]: { ...data[cacheKey], [officeId]: { loading: false, data: [], error: e } } }))\n })\n }\n\n return {\n officials: officials[cacheKey],\n fetchOfficials,\n assignments,\n };\n }, [ gameId, officials, assignments, listId, effectiveOfficials ]);\n\n return (\n <OfficialsContext.Provider value={value}>\n {children}\n </OfficialsContext.Provider>\n );\n};\n\nexport const useOfficialsContext = (assignment, mainAssignOfficeId) => {\n const contextValues = useContext(OfficialsContext)\n if (!contextValues) throw new Error('useOfficialsContext must be used within an OfficialsContextProvider');\n\n const { officials, fetchOfficials, assignments = [] } = contextValues;\n const officeId = assignment?.officeId || mainAssignOfficeId\n if (!officeId) throw new Error('useOfficialsContext needs officeId');\n\n useEffect(() => {\n const abortController = new AbortController();\n\n if (!officials?.[officeId]) {\n fetchOfficials(abortController.signal, officeId);\n }\n\n return () => {\n if (!officials?.[officeId] || officials[officeId].loading) return;\n abortController.abort();\n }\n }, [officials, fetchOfficials, officeId]);\n\n const participantIds = assignments.map(assignment => assignment.participantId).filter(Boolean)\n const scopedOfficials = officials?.[officeId] || null;\n const data = filterOfficialsByPositionType(scopedOfficials?.data, assignment)\n .filter(official => !participantIds.includes(official.participantId))\n\n return {\n officials: data || [],\n isLoading: scopedOfficials?.loading,\n error: scopedOfficials?.error,\n }\n};\n","import React, { forwardRef, useEffect, useState } from 'react';\nimport { useNotify, useRecordContext, useTranslate, RecordContextProvider } from 'react-admin';\nimport { Button, Checkbox, Dialog, DialogActions, DialogContent, DialogContentText, DialogTitle, FormControlLabel, IconButton, TextField, makeStyles, Tooltip, Paper, ListSubheader } from '@material-ui/core';\nimport { Autocomplete } from '@material-ui/lab';\nimport CloseIcon from '@material-ui/icons/Close';\nimport { GroupAddOutlined } from '@material-ui/icons'\nimport { FixedSizeList } from 'react-window';\nimport classnames from 'classnames';\n\nimport { isDelegated } from '@hisports/assigning';\nimport { OFFICIAL_STATUS_CONFIRMED, OFFICIAL_STATUS_ASSIGNED, OFFICIAL_STATUS_DECLINED, OFFICIAL_STATUS_NO_SHOW, OFFICIAL_STATUS_UNASSIGNED } from '@hisports/scoresheet/src/constants';\n\nimport { apiClient, useParticipant, usePermissions } from '../../http';\nimport { useRichTranslate } from '../../common/useRichTranslate';\nimport useSyncedPreferences from '../../common/useSyncedPreferences';\n\nimport { AssignmentStatusIcon } from '../games/cards/OfficialsCard/Assignment/AssignmentStatus';\nimport { assign } from '../games/cards/OfficialsCard/Assignment/AssignToolbar/AssignButton';\nimport { QuickAssignmentDialog } from '../gameStatus/AssignmentsDialog';\nimport { OfficialsContextProvider, useOfficialsContext } from '../games/cards/OfficialsCard/Assignment/OfficialsContext';\nimport { OfficialListItem } from '../games/cards/OfficialsCard/Assignment/OfficialList/OfficialList';\nimport { OfficeField } from '../offices/OfficeField';\nimport { useOfficialList } from './EventViewSettings';\n\nconst useStyles = makeStyles(theme => ({\n assignment: {\n marginRight: theme.spacing(3),\n fontSize: '.95em',\n whiteSpace: 'nowrap',\n display: 'inline-flex',\n alignItems: 'center',\n '& svg': {\n verticalAlign: 'middle',\n }\n },\n position: {\n fontWeight: 'bold',\n marginRight: theme.spacing(.5),\n },\n name: {\n display: 'flex',\n alignItems: 'center',\n\n // we simulate the mui outlined input on hover\n paddingBlock: 10.5,\n paddingInline: 4, // this is smaller to fit the clear btn\n borderRadius: 4,\n border: '1px solid transparent',\n fontFamily: 'inherit',\n backgroundColor: 'transparent',\n },\n buttonHover: {\n // add the name hover only if the user can assign\n '&:hover': {\n borderColor: 'black',\n backgroundColor: 'white',\n cursor: 'pointer',\n }\n },\n input: {\n marginBlock: 0,\n minWidth: theme.spacing(35),\n\n '& [class*=\"MuiFormControl\"]': {\n marginBlock: 0,\n }\n },\n option: {\n padding: 0,\n },\n unassigned: {\n fontStyle: 'italic',\n color: theme.palette.grey[500],\n },\n declined: {\n textDecoration: 'line-through',\n },\n status: {\n marginLeft: theme.spacing(.5),\n verticalAlign: 'middle',\n },\n self: {\n backgroundColor: 'yellow',\n borderBottom: '2px solid black',\n padding: 2,\n },\n listSubheader: {\n paddingTop: theme.spacing(2),\n lineHeight: theme.spacing(0.25),\n }\n}))\n\nconst hasPermission = (permissions, officeId) => {\n if (!officeId) return false;\n const scopes = permissions.filter(p => p.roleType === 'System' || (p.roleType === 'Office' && p.officeIds.includes(officeId))).flatMap(p => p.scopes);\n return scopes.includes('assigning:assign')\n}\n\nconst removeAssignmentApi = (gameId, participantId, isNoShow = false, officialId) => {\n return apiClient(`/games/${gameId}/removeAssignment`, {\n method: 'POST',\n data: {\n participantId,\n isNoShow,\n officialId,\n },\n })\n}\n\nconst OfficialsDropdown = forwardRef(function CustomPaper(props, ref) {\n const classes = useStyles();\n const [officialList] = useOfficialList();\n\n return (\n <Paper ref={ref} {...props}>\n {officialList && <ListSubheader className={classes.listSubheader}>\n {officialList?.name}\n </ListSubheader>}\n {props.children}\n </Paper>\n );\n});\n\nconst VirtualizedListboxComponent = forwardRef(function VirtualizedListboxComponent(props, ref) {\n const { children, ...other } = props;\n const itemData = React.Children.toArray(children);\n const ITEM_SIZE = 38;\n\n const height = Math.min(ITEM_SIZE * itemData.length, ITEM_SIZE * 8);\n\n return (\n <div ref={ref} {...other}>\n <FixedSizeList\n height={height}\n width=\"100%\"\n itemSize={ITEM_SIZE}\n itemCount={itemData.length}\n itemData={itemData}\n outerElementType={props.ListboxComponent}\n >\n {({ index, style }) => (\n <div style={style}>\n {itemData[index]}\n </div>\n )}\n </FixedSizeList>\n </div>\n );\n});\n\nconst OfficialInput = ({ toggleNameView, onOfficialSelection, assignment, mainAssignOfficeId }) => {\n const { officials, isLoading, error: officialsError } = useOfficialsContext(assignment, mainAssignOfficeId);\n const [autocompleteOpen, setAutocompleteOpen] = useState(false);\n const [inputValue, setInputValue] = useState('');\n const [error, setError] = useState(false);\n const classes = useStyles();\n\n // when a dropdown item is clicked\n const handleAutocompleteChange = (event, newValue) => {\n setInputValue(newValue);\n onOfficialSelection(newValue)\n toggleNameView();\n }\n\n // when the user type something in the input\n const handleInputChange = (event) => {\n setError(false);\n setInputValue(event.target.value);\n }\n\n const handleSubmit = (event) => {\n event.preventDefault();\n\n const matchingOfficial = officials.find(official => official.participant.fullName.toLowerCase() === inputValue.toLowerCase());\n\n if (matchingOfficial) {\n onOfficialSelection(matchingOfficial);\n toggleNameView();\n } else {\n setError(true);\n }\n }\n\n return (\n <form onSubmit={handleSubmit}>\n <Autocomplete\n open={autocompleteOpen}\n onOpen={() => setAutocompleteOpen(true)}\n onClose={() => setAutocompleteOpen(false)}\n options={officials}\n loading={isLoading && !officialsError}\n getOptionLabel={official => official?.participant?.fullName}\n className={classes.input}\n onChange={handleAutocompleteChange}\n PaperComponent={OfficialsDropdown}\n ListboxComponent={VirtualizedListboxComponent}\n renderOption={option => <OfficialListItem official={option} assignment={assignment} onSelect={() => {}} />}\n renderInput={(params) => (\n <TextField\n autoFocus\n error={error}\n onFocus={() => setAutocompleteOpen(true)}\n onBlur={toggleNameView}\n margin=\"dense\"\n variant=\"outlined\"\n value={inputValue}\n onChange={handleInputChange}\n {...params} />\n )}\n classes={{ option: classes.option }}\n />\n </form>\n )\n}\n\nconst ConfirmRemoveDialog = ({ open, setOpen, handleConfirm, assignment }) => {\n const translate = useTranslate();\n const participantId = useParticipant();\n const game = useRecordContext();\n const [markAsNoShow, setMarkAsNoShow] = useState(false);\n\n const onClose = (e) => {\n e.stopPropagation();\n setOpen(false);\n }\n\n const showNoShow = game?.isApproved && assignment?.status !== OFFICIAL_STATUS_NO_SHOW;\n\n return (\n <Dialog open={open} onClose={onClose} fullWidth maxWidth=\"sm\">\n <DialogTitle>{translate('ra.action.confirm_removal')}</DialogTitle>\n <DialogContent>\n <DialogContentText>\n {assignment.participantId !== participantId\n ? translate('resources.games.messages.assignment.removed_from_game', { name: assignment?.participant?.fullName })\n : translate('resources.games.messages.assignment.request_removed')}\n </DialogContentText>\n {showNoShow && <DialogContentText>\n <FormControlLabel\n label={translate('resources.games.messages.assignment.mark_as_no_show', { name: assignment?.participant?.fullName })}\n control={<Checkbox color=\"primary\" checked={markAsNoShow} onChange={() => setMarkAsNoShow(prevState => !prevState)} />}\n />\n </DialogContentText>}\n </DialogContent>\n <DialogActions>\n <Button onClick={onClose} autoFocus>{translate('ra.action.cancel')}</Button>\n <Button onClick={handleConfirm} color=\"primary\">{translate('ra.action.confirm')}</Button>\n </DialogActions>\n </Dialog>\n )\n}\n\nconst ClearAssignmentButton = ({ assignment, canAssign, onClear }) => {\n const translate = useTranslate();\n const notify = useNotify();\n const game = useRecordContext();\n const [confirmModalOpen, setConfirmModalOpen] = useState(false);\n\n const handleConfirm = () => {\n removeAssignmentApi(game.id, assignment.participantId, false, assignment.id)\n .then(res => {\n const message = canAssign\n ? translate('resources.games.notifications.assignment.remove_official_from_game', { number: game.number })\n : translate('resources.games.notifications.assignment.request_removed_from_game', { number: game.number })\n setConfirmModalOpen(false);\n notify(message, 'success')\n onClear(assignment);\n })\n .catch(err => {\n const message = err?.response?.data?.error?.message\n notify(message || 'ra.page.error_try_again', 'error')\n });\n }\n\n return <>\n <IconButton aria-label=\"Clear\" size=\"small\" onClick={() => setConfirmModalOpen(true)}>\n <CloseIcon fontSize=\"small\" />\n </IconButton>\n <ConfirmRemoveDialog open={confirmModalOpen} setOpen={setConfirmModalOpen} handleConfirm={handleConfirm} assignment={assignment} />\n </>\n}\n\n// quick component used to conditionally render a button vs span when we can vs cannot assign\nconst OfficialName = ({ canAssign, onClick: handleClick, className, children }) => {\n if (!canAssign) return <span className={className}>{children}</span>;\n return <button className={className} onClick={handleClick}>{children}</button>\n}\n\nexport const EventAssignment = ({ assignment, mainAssignOfficeId, onOfficialSelection, onClear }) => {\n const translate = useTranslate();\n const richTranslate = useRichTranslate();\n const [showInput, setShowInput] = useState(false);\n const classes = useStyles();\n const participantId = useParticipant();\n const game = useRecordContext();\n const permissions = usePermissions();\n\n const isAssigned = !!assignment.participant;\n const isDeclined = assignment.status === OFFICIAL_STATUS_DECLINED;\n const isSelf = participantId && assignment.participantId === participantId;\n\n const delegatedOffice = isDelegated(assignment) && <RecordContextProvider value={{ assignment }}>\n <OfficeField source=\"assignment.officeId\" link={false} variant=\"inherit\" />\n </RecordContextProvider>\n\n const payOfficeId = assignment?.payOfficeId || mainAssignOfficeId\n const delegatedPayOffice = <RecordContextProvider value={{ officeId: payOfficeId }}>\n <OfficeField source=\"officeId\" link={false} variant=\"inherit\" />\n </RecordContextProvider>\n\n const canAssign = hasPermission(permissions, assignment.officeId || mainAssignOfficeId) && !game.isCertified\n\n const position = assignment.position;\n const name = isAssigned ? assignment.participant?.fullName : `(${translate('resources.games.labels.assignment.unassigned')})`;\n\n const handleOfficialSelection = (official = null) => {\n setShowInput(false);\n\n if (!!official) {\n onOfficialSelection({\n selectedAssignment: assignment,\n selectedOfficial: official,\n });\n } else {\n onClear(assignment);\n }\n }\n\n const handleNameClick = () => {\n setShowInput(true);\n }\n\n let official;\n if (showInput) {\n official = <OfficialInput\n toggleNameView={() => setShowInput(false)}\n onOfficialSelection={handleOfficialSelection}\n assignment={assignment}\n mainAssignOfficeId={mainAssignOfficeId}\n />\n } else {\n official = <OfficialName\n canAssign={canAssign}\n className={classnames(classes.name, {\n [classes.unassigned]: !isAssigned,\n [classes.declined]: isDeclined,\n [classes.self]: isSelf,\n }, classes.buttonHover)}\n onClick={handleNameClick}\n >\n {name}\n <span className={classes.status}>\n <AssignmentStatusIcon assignment={assignment} showUnassigned />\n {isDelegated(assignment) && <Tooltip\n title={<>\n {richTranslate(\"resources.games.helpers.assignment.delegated_tooltip\", { office: delegatedOffice })}\n <br />\n {richTranslate(\"resources.games.helpers.assignment.pay_delegated_tooltip\", { office: delegatedPayOffice })}\n </>}\n >\n <GroupAddOutlined />\n </Tooltip>}\n </span>\n </OfficialName>\n\n if (isAssigned && canAssign) {\n official = <>\n {official}\n <ClearAssignmentButton assignment={assignment} canAssign={canAssign} onClear={onClear} />\n </>\n }\n }\n\n return <span className={classes.assignment}>\n <span className={classes.position}>{translate(`resources.games.values.assignment.position_short.${position}`)}:</span>\n {official}\n </span>\n};\n\nexport const EventAssignmentList = ({ assignments, mainAssignOfficeId, assignSettingStatus }) => {\n const game = useRecordContext();\n const notify = useNotify();\n const translate = useTranslate();\n const [listId] = useOfficialList();\n const [effectiveOfficials] = useSyncedPreferences('effectiveOfficials', false);\n const [dialogOpen, setDialogOpen] = useState(false);\n const [assignmentData, setAssignmentData] = useState({\n selectedAssignment: null,\n selectedOfficial: {},\n displayedAssignments: assignments, // updated when we post data\n });\n\n // update displayedAssignments if assignments are refetched\n useEffect(() => {\n setAssignmentData(prevAssignmentData => ({\n ...prevAssignmentData,\n displayedAssignments: assignments\n }))\n }, [assignments, setAssignmentData])\n\n const handleOfficialSelection = ({ selectedAssignment, selectedOfficial = null }) => {\n if (!selectedAssignment) throw new Error('Cannot update official without providing an Assignment');\n\n setAssignmentData(prevAssignmentData => ({\n ...prevAssignmentData,\n selectedAssignment,\n selectedOfficial,\n }));\n\n if (selectedOfficial) {\n setDialogOpen(true)\n }\n\n if (assignSettingStatus == 'Draft') {\n assign(selectedAssignment.id, game.id, selectedOfficial.participantId, selectedAssignment.position, selectedAssignment.participantId)\n .then(() => {\n notify(translate('resources.games.notifications.assignment.official_assigned_to_game', { number: game.number }), 'success')\n })\n .catch(err => {\n const message = err?.response?.data?.error?.message\n notify(message || 'ra.page.error_try_again', 'error')\n })\n\n setAssignmentData(prevAssignmentData => ({\n selectedAssignment: null,\n selectedOfficial: {},\n displayedAssignments: prevAssignmentData.displayedAssignments.map(assignment => ({\n ...assignment,\n participantId: prevAssignmentData.selectedAssignment.id === assignment.id ? selectedOfficial.participantId : assignment.participantId,\n participant: prevAssignmentData.selectedAssignment.id === assignment.id ? selectedOfficial.participant : assignment.participant,\n status: prevAssignmentData.selectedAssignment.id === assignment.id ? (game.isApproved ? OFFICIAL_STATUS_CONFIRMED : OFFICIAL_STATUS_ASSIGNED) : assignment.status,\n })),\n }))\n }\n };\n\n const handleClear = (clearedAssignment) => {\n if (!clearedAssignment) throw new Error('Cannot remove official without providing an Assignment');\n\n setAssignmentData(prevAssignmentData => ({\n ...prevAssignmentData,\n selectedAssignment: null,\n selectedOfficial: {},\n displayedAssignments: prevAssignmentData.displayedAssignments.map(prevAssignment => ({\n ...prevAssignment,\n participantId: prevAssignment.id === clearedAssignment.id ? null : prevAssignment.participantId,\n participant: prevAssignment.id === clearedAssignment.id ? null : prevAssignment.participant,\n status: prevAssignment.id === clearedAssignment.id ? OFFICIAL_STATUS_UNASSIGNED : prevAssignment.status,\n })),\n }));\n }\n\n const handleOnAssign = (official) => {\n setAssignmentData(prevAssignmentData => ({\n selectedAssignment: null,\n selectedOfficial: {},\n displayedAssignments: prevAssignmentData.displayedAssignments.map(assignment => ({\n ...assignment,\n participantId: prevAssignmentData.selectedAssignment.id === assignment.id ? official.participantId : assignment.participantId,\n participant: prevAssignmentData.selectedAssignment.id === assignment.id ? official.participant : assignment.participant,\n status: prevAssignmentData.selectedAssignment.id === assignment.id ? OFFICIAL_STATUS_ASSIGNED : assignment.status,\n })),\n }))\n setDialogOpen(false)\n }\n\n const { displayedAssignments, selectedAssignment, selectedOfficial } = assignmentData;\n\n // From this point, the Assignment var is the assignment state that we manually update when posting data (not the actual assignment fetched)\n return <div>\n <OfficialsContextProvider gameId={game.id} assignments={displayedAssignments} listId={listId} effectiveOfficials={effectiveOfficials}>\n {displayedAssignments.map(displayedAssignment =>\n <EventAssignment\n key={displayedAssignment.id}\n assignment={displayedAssignment}\n mainAssignOfficeId={mainAssignOfficeId}\n onOfficialSelection={handleOfficialSelection}\n onClear={handleClear} />\n )}\n </OfficialsContextProvider>\n <QuickAssignmentDialog\n open={dialogOpen}\n onClose={() => setDialogOpen(false)}\n selectedAssignment={selectedAssignment}\n selectedOfficial={selectedOfficial}\n displayedAssignment={displayedAssignments.find(assignment => assignment?.id === selectedAssignment?.id)}\n onAssign={handleOnAssign}\n />\n </div>\n}\n","import React, { memo, useMemo, useRef, useState } from 'react';\nimport { DatagridRow, RecordContextProvider, useListContext, useNotify, useRecordContext, useTranslate } from 'react-admin';\nimport { Typography, Card, Table, TableBody, TableRow, TableCell, makeStyles, Checkbox, darken, Grid, IconButton, Tooltip, Box, Popover as MuiPopover, Divider, useTheme } from '@material-ui/core';\nimport { Check, DoneAll, EventBusy, Flag as FlagIcon, Event as EventIcon } from '@material-ui/icons';\nimport { DatePicker } from '@material-ui/pickers';\nimport { useSelector } from 'react-redux';\nimport { groupBy, orderBy } from 'lodash';\nimport moment from 'moment-timezone'\n\nimport { dedupe, isEmpty } from '@hisports/parsers';\n\nimport { usePermissions, useScopes } from '../../http';\nimport DateField from '../../common/fields/DateField';\nimport TimeRangeField from '../../common/fields/TimeRangeField';\nimport ConfirmDialog from '../../common/dialogs/ConfirmDialog';\nimport { useSchedulingContext } from '../../common/calendar/SchedulingContext';\nimport { isDraft, isGame } from '../../common/calendar/EventDetails';\nimport { validateEvent } from '../../common/calendar/DragAndDropGrid';\nimport { hasAnyScope } from '../../common/Authorize';\n\nimport { SurfaceField } from '../surfaces/SurfaceField';\nimport { ScheduleField } from '../schedules/ScheduleField';\nimport { GameStatusField } from '../gameStatus';\n\nimport { DescriptionField, LocationField } from './EventGrid';\nimport { useGroupDates, useGroupArenas, useGroupRounds, useShowAssignments, useShowFlags, CALENDAR_VIEWS, useCalendarView } from './EventViewSettings';\nimport { EventAssignmentList } from './EventAssignment';\nimport { DraftGameActions } from '../draftgames/DraftGameActions';\n\n// const stripes = (r, g, b) => `repeating-linear-gradient(\n// -55deg,\n// rgba(${r}, ${g}, ${b}, .015),\n// rgba(${r}, ${g}, ${b}, .015) 8px,\n// rgba(${r}, ${g}, ${b}, .030) 8px,\n// rgba(${r}, ${g}, ${b}, .030) 16px\n// )`\n\n// const getStripes = game => {\n// if (!game || game.isApproved) return\n// switch (game.status) {\n// case 'Cancelled':\n// case 'Conflict':\n// return stripes(244, 67, 54);\n// case 'Postponed':\n// return stripes(255, 245, 59)\n// default:\n// return;\n// }\n// }\n\nconst useEventStyles = makeStyles(theme => ({\n root: {\n // background: game => getStripes(game),\n '& .column-date': {\n width: theme.spacing(10),\n },\n '& .column-time': {\n width: theme.spacing(10),\n },\n '& .column-arenaId': {\n width: theme.spacing(40),\n },\n '& .column-status': {\n width: theme.spacing(10),\n textAlign: 'right',\n }\n },\n selected: {\n backgroundColor: theme.palette.primary[50],\n },\n icon: {\n color: theme.palette.success.main,\n },\n selectedTitle: {\n display: 'flex',\n alignItems: 'center'\n },\n actions: {\n marginLeft: 'auto'\n },\n divider: {\n marginBlock: theme.spacing(1)\n }\n}))\n\nconst useInfoStyles = makeStyles(theme => ({\n row: {\n backgroundColor: '#fdfdfd',\n boxShadow: '0 5px 8px #eee inset',\n '& + $row': {\n boxShadow: 'none',\n }\n },\n column: {\n padding: theme.spacing(1),\n },\n}))\n\nconst useFlagStyles = makeStyles(theme => ({\n column: {\n padding: theme.spacing(1, 1, 1, .5),\n },\n flag: {\n marginRight: theme.spacing(2),\n paddingLeft: 0,\n fontSize: '.95em',\n whiteSpace: 'nowrap',\n },\n label: {\n fontStyle: 'italic',\n color: theme.palette.grey[500],\n },\n icon: {\n color: 'rgba(0, 0, 0, 0.54)',\n verticalAlign: 'middle',\n paddingRight: theme.spacing(1)\n },\n}))\n\nexport const useLimitDateChange = (draggingGame) => {\n const { selectedGame, limitDateChange } = useSchedulingContext();\n const permissions = usePermissions();\n\n const game = draggingGame || selectedGame;\n\n if (!isDraft(game) || !game?.isShared || !limitDateChange) return false\n\n const hasAccess = permissions.some(p =>\n p.roleType === 'System' ||\n (\n hasAnyScope(p.scopes, ['leagues:manage'])\n && p.roleType === 'Office'\n && !p.inherited\n && (p.officeIds || []).includes(game.officeId)\n )\n );\n\n return !hasAccess;\n}\n\nconst Flag = ({ event, flag, ...props }) => {\n const classes = useFlagStyles();\n const translate = useTranslate();\n\n const label = [translate(`resources.games.labels.flags.${flag}`, 2)];\n\n return <span className={classes.flag}>\n <span className={classes.icon}>\n <FlagIcon fontSize=\"small\" />\n </span>\n <span>{label}</span>\n </span>\n}\n\nexport const ScheduleButton = ({ size = 'medium', ...props }) => {\n const [ datePickerOpen, setDatePickerOpen ] = useState(false);\n const anchorRef = useRef();\n const record = useRecordContext();\n const translate = useTranslate();\n const notify = useNotify()\n const { setSelectedGame, onSave, schedule } = useSchedulingContext();\n const disableDateChange = useLimitDateChange();\n\n if (disableDateChange) return null;\n\n const handleDateChange = async (date) => {\n if (!onSave || !record || !date) return;\n const newDate = date.format('YYYY-MM-DD');\n\n const { grouping, ...newGame } = record;\n const newEvent = { ...newGame, date: newDate }\n\n const error = validateEvent(newEvent, schedule, translate);\n if (error) {\n return notify(error, 'error');\n }\n\n await onSave({ ...newGame, date: newDate });\n setSelectedGame((selectedGame) => ({\n ...selectedGame,\n date: newDate,\n }));\n\n setDatePickerOpen(false);\n };\n\n const onClick = (e) => {\n e.stopPropagation();\n setDatePickerOpen(true);\n }\n\n return (\n <>\n <Tooltip title={translate('components.calendar.tooltips.schedule')}>\n <IconButton size={size} onClick={onClick} ref={anchorRef}>\n <EventIcon />\n </IconButton>\n </Tooltip>\n <MuiPopover\n open={datePickerOpen}\n anchorEl={anchorRef.current}\n onClose={() => setDatePickerOpen(false)}\n anchorOrigin={{\n vertical: 'top',\n horizontal: 'right',\n }}\n transformOrigin={{\n vertical: 'bottom',\n horizontal: 'left',\n }}\n onClick={e => e.stopPropagation()}\n >\n <DatePicker\n autoOk\n variant=\"static\"\n openTo=\"date\"\n value={new Date()}\n onChange={handleDateChange}\n />\n </MuiPopover>\n </>\n )\n}\n\nexport const UnscheduleButton = ({ size = 'medium', ...props }) => {\n const translate = useTranslate();\n const record = useRecordContext(props);\n const { setSelectedGame, onSave, setRefreshAvailability } = useSchedulingContext();\n const disableDateChange = useLimitDateChange();\n const [ view ] = useCalendarView();\n const [ open, setOpen ] = useState(false);\n\n if (disableDateChange) return null;\n\n const handleConfirm = async (e) => {\n e.stopPropagation();\n if (!onSave || !record) return;\n // sanitize and save record\n const { grouping, ...newGame } = record;\n await onSave({ ...newGame, date: null });\n // update selected game\n setSelectedGame((selectedGame) => ({\n ...selectedGame,\n date: null,\n }));\n\n if (view === CALENDAR_VIEWS.SEASON) {\n setRefreshAvailability(true)\n }\n }\n\n const onClick = (e) => {\n e.stopPropagation();\n setOpen(!open)\n }\n\n return <>\n <Tooltip title={translate('components.calendar.tooltips.unschedule')}>\n <IconButton size={size} onClick={onClick}>\n <EventBusy fontSize=\"medium\" />\n </IconButton>\n </Tooltip>\n <ConfirmDialog\n title={translate('components.calendar.labels.unschedule')}\n text={translate('components.calendar.messages.remove_date')}\n open={open}\n setOpen={setOpen}\n handleConfirm={handleConfirm}\n />\n </>\n}\n\nexport const AssignmentsRow = ({ event, columns, offset = 1 }) => {\n const classes = useInfoStyles();\n\n const scopes = useScopes();\n const gameStatus = useSelector(state => event && state.admin.resources.gameStatuses.data[event.id])\n\n if (!scopes.includes('assigning:assign')) return null;\n if (!gameStatus || !gameStatus.officials) return null;\n\n const { assignments, officeId, status: assignSettingStatus } = gameStatus.officials;\n if (!assignments || !assignments.length) return null;\n\n return <TableRow className={classes.row}>\n {offset >= 1 && <TableCell />}\n {offset >= 2 && <TableCell />}\n <TableCell colSpan={Number(columns) - 1} className={classes.column}>\n <RecordContextProvider value={event}>\n <EventAssignmentList assignments={assignments} mainAssignOfficeId={officeId} assignSettingStatus={assignSettingStatus} />\n </RecordContextProvider>\n </TableCell>\n </TableRow>\n}\n\nexport const FlagsRow = ({ event, columns, offset = 1 }) => {\n const baseClasses = useInfoStyles();\n const classes = useFlagStyles();\n\n const status = useSelector(state => event && state.admin.resources.gameStatuses.data?.[event.id])\n if (!status || isEmpty(status.flags)) return null;\n\n const flags = dedupe(status.flags.map(flag => flag.name));\n\n return <TableRow className={baseClasses.row}>\n {offset >= 1 && <TableCell />}\n {offset >= 2 && <TableCell />}\n <TableCell colSpan={Number(columns) - 1} className={classes.column}>\n {flags.map(flag => <Flag event={event} flag={flag} />)}\n </TableCell>\n </TableRow>\n}\n\nconst DraggableEvent = memo(({ isScheduled, groupByDate, hideActions = false, showPools = false, actions, classes }) => {\n const record = useRecordContext();\n const translate = useTranslate();\n const { selectedGame, showSchedule } = useSchedulingContext();\n const eventClasses = useEventStyles();\n const theme = useTheme();\n\n const showChecked = isScheduled;\n const showClear = !hideActions && !isScheduled && record?.date && selectedGame?.id === record?.id;\n const showCalendar = !hideActions && !isScheduled && !record?.date;\n const showDate = (actions?.length && selectedGame?.id === record?.id) || !groupByDate\n\n const CheckIcon = isGame(record) ? DoneAll : Check\n\n return <Grid container fullWidth alignItems=\"center\">\n {actions?.length && <Grid item xs={12}>\n <div className={eventClasses.selectedTitle}>\n <Typography variant=\"subtitle2\">{translate('components.calendar.labels.selected_game')}</Typography>\n <div className={eventClasses.actions}>{actions.map(action => action)}</div>\n </div>\n <Divider className={classes.divider} />\n </Grid>}\n <Grid item xs>\n <DescriptionField source=\"homeTeamId\" authMethod=\"gameTeams\" link={false} showTime showDate={showDate} showPools={showPools} padHeader />\n <SurfaceField source=\"arenaId\" emptyText={`(${translate('resources.drafts.labels.no_venue')})`} link={false} includeAttributes=\"inline\" />\n {showSchedule && <div style={{ paddingTop: theme.spacing(1.5) }}>\n <ScheduleField source=\"scheduleId\" link={false} includeCategory=\"inline\" />\n </div>}\n </Grid>\n {!actions?.length && showCalendar && <Grid item xs={2} style={{ textAlign: \"end\" }}>\n <ScheduleButton />\n </Grid>\n }\n {showChecked && <Grid item xs={2} style={{ textAlign: \"end\" }}>\n <Box padding={1}><CheckIcon className={classes.icon} /></Box>\n </Grid>}\n {!actions?.length && showClear && <Grid item xs={2} style={{ textAlign: \"end\" }}>\n <UnscheduleButton />\n </Grid>}\n </Grid>\n})\n\nexport const DraggableEventRow = memo(({ event, groupByDate, groupByArena, isRowSelectable, hideTime, hideArena, hideStatus, hideActions, showPools, dragComponent: DragComponent, actions, ...props }) => {\n const classes = useEventStyles();\n const { selectedGame } = useSchedulingContext();\n\n const isSelected = selectedGame?.id === event.id;\n const isScheduled = event.startTime != null && event.endTime != null && event.arenaId != null;\n const hasDate = !!event?.date\n\n let className = classes.root;\n if (isSelected) {\n className = `${className} ${classes.selected}`;\n }\n\n return <DatagridRow {...props} record={event} id={event.id} className={className} hover={!isSelected}>\n <DragComponent event={event} draggable={isSelected && (!isScheduled || !hasDate)}>\n <DraggableEvent isScheduled={isScheduled} classes={classes} actions={actions} hideActions={hideActions} groupByDate={groupByDate} showPools={showPools} />\n </DragComponent>\n </DatagridRow>\n})\n\nconst EventRow = memo(({ event, groupByDate, groupByArena, isRowSelectable, hideGroup = false, hideStatus, hideNumber = false, showDraftActions = false, showPools, team, rowClick = 'show', ...props }) => {\n const translate = useTranslate();\n const { selectedIds, onToggleItem } = useListContext();\n const [ showAssignments ] = useShowAssignments();\n const [ showFlags ] = useShowFlags();\n const classes = useEventStyles(event);\n\n const selected = selectedIds.includes(event.id);\n const selectable = !isRowSelectable || isRowSelectable(event.id)\n\n const style = { cursor: rowClick ? 'pointer' : 'default', ...props.style }\n const columns = 5 + (groupByArena ? 0 : 1) + (props.hasBulkActions ? 1 : 0);\n\n return <>\n <DatagridRow {...props} record={event} id={event.id} style={style} rowClick={rowClick} className={classes.root} selected={selected} selectable={selectable} onToggleItem={onToggleItem}>\n {!groupByDate && <DateField source=\"date\" label=\"ra.date.name\" emptyText={`(${translate('resources.drafts.labels.no_date')})`} />}\n <TimeRangeField source=\"time\" startSource=\"startTime\" endSource=\"endTime\" emptyText={`(${translate('resources.drafts.labels.no_time')})`} />\n <DescriptionField source=\"homeTeamId\" authMethod=\"gameTeams\" team={team} hideGroup={hideGroup} hideNumber={hideNumber} showPools={showPools} />\n {!groupByArena && <LocationField source=\"arenaId\" emptyText={`(${translate('resources.drafts.labels.no_venue')})`} />}\n {!hideStatus && <GameStatusField source=\"status\" />}\n {showDraftActions && <DraftGameActions />}\n </DatagridRow>\n\n {showAssignments && <AssignmentsRow event={event} columns={columns} offset={1} />}\n {showFlags && <FlagsRow event={event} columns={columns} offset={1} />}\n </>\n})\n\nexport const SelectAllCheckbox = ({ ids, hasBulkActions, isRowSelectable, className, disableCheckboxes, ...props }) => {\n const { selectedIds, onSelect } = useListContext(props);\n if (!hasBulkActions) return null;\n\n const all = isRowSelectable ? ids.filter(id => isRowSelectable(id)) : ids\n if (!all.length) return null;\n\n const checked = selectedIds.length > 0 && all.length > 0 && all.every(id => selectedIds.includes(id))\n\n const handleSelectAll = event => {\n if (event.target.checked) {\n let selection = ids\n .filter(id => !selectedIds.includes(id))\n .concat(selectedIds)\n\n if (isRowSelectable) {\n selection = selection.filter(id => isRowSelectable(id))\n }\n\n onSelect(selection)\n } else {\n const selection = selectedIds\n .filter(id => !ids.includes(id))\n\n onSelect(selection);\n }\n }\n\n return <Checkbox color=\"primary\" checked={checked} onChange={handleSelectAll} className={className} />\n}\n\nconst useGroupStyles = makeStyles(theme => ({\n header: {\n position: 'sticky',\n top: 0,\n zIndex: 1, // neccesary for game buttons\n padding: theme.spacing(0, 2),\n display: 'flex',\n alignItems: 'center',\n height: props => theme.spacing(props.level ? 6 : 7),\n backgroundColor: props => darken(theme.palette.background.default, props.level * 0.025)\n },\n checkbox: {\n display: 'inline-block',\n minWidth: theme.spacing(3),\n paddingLeft: 0,\n marginLeft: -3,\n },\n heading: {\n paddingLeft: props => theme.spacing(props.level + 1),\n },\n}))\n\nconst EventGroup = ({ group, dragComponent, ...props }) => {\n const { level, heading, showHeading, ids, data: events } = group;\n const classes = useGroupStyles({ level });\n\n const Row = dragComponent ? DraggableEventRow : EventRow\n\n return <div>\n {showHeading && <div className={classes.header}>\n <SelectAllCheckbox {...props} className={classes.checkbox} ids={ids} />\n <Typography variant=\"subtitle2\" display=\"inline\" className={classes.heading}>{heading}</Typography>\n </div>}\n <Table size=\"medium\">\n <TableBody>\n {events?.map(event => <Row key={event.id} {...props} event={event} dragComponent={dragComponent} />)}\n </TableBody>\n </Table>\n </div>\n}\n\nconst useGroupingStyles = makeStyles(theme => ({\n root: {\n marginTop: theme.spacing(1),\n },\n}))\n\nexport default ({ component: Component = Card, className, ...props }) => {\n const translate = useTranslate();\n const classes = useGroupingStyles();\n const [ groupRounds ] = useGroupRounds();\n const [ groupDates ] = useGroupDates();\n const [ groupArenas ] = useGroupArenas();\n const { ids: listIds = [], data: listData } = useListContext(props);\n\n const ids = useMemo(() => {\n return listIds;\n }, [listIds])\n const data = useMemo(() => {\n return listData\n }, [listData])\n\n // combine event view settings and prop, allow prop disabling with false\n const groupByRound = props.groupByRound !== false && (props.groupByRound || groupRounds);\n const groupByDate = props.groupByDate !== false && (props.groupByDate || groupDates);\n const groupByArena = props.groupByArena !== false && (props.groupByArena || groupArenas);\n\n // generate grouped object with the following key pattern: \"{round}+{date}\" ex. '1+2022-11-01', '1+2022-11-02', '1+_TBD_'\n const groups = useMemo(() => {\n if (!ids?.length) return;\n\n const TBD = '_TBD_';\n const SPLIT = '+'\n const types = [];\n if (groupByRound) types.push('round')\n if (groupByDate) types.push('date')\n if (groupByArena) types.push('arena')\n\n const events = ids.map(id => data?.[id]).filter(Boolean);\n const groupedEvents = groupBy(events, event => {\n const groups = []\n if (groupByRound) groups.push(event.round || TBD)\n if (groupByDate) groups.push(event.date ? moment.tz(event.date, event.timezone).format('YYYY-MM-DD') : TBD)\n if (groupByArena) groups.push(event.arenaId || TBD)\n\n return groups.join(SPLIT);\n })\n\n const groupKeys = Object.keys(groupedEvents);\n\n let groups = groupKeys.flatMap((groupKey, index, groupKeys) => {\n const prevGroupKey = groupKeys[index - 1] || ''\n const prevGroupValues = prevGroupKey.split(SPLIT) || [];\n const groupValues = groupKey.split(SPLIT)\n return groupValues.map((value, level) => {\n let heading = null;\n switch (types[level]) {\n case 'round': {\n if (value === TBD) {\n heading = `(${translate('resources.drafts.labels.no_round')})`;\n } else {\n heading = `${translate('resources.drafts.labels.round', 1)} ${value}`;\n }\n break;\n }\n case 'date': {\n const date = moment.utc(value, 'YYYY-MM-DD')\n if (value === TBD || !date.isValid()) {\n heading = `(${translate('resources.drafts.labels.no_date')})`\n } else {\n heading = date.format('dddd, LL')\n }\n break;\n }\n case 'arena': {\n if (value === TBD) {\n heading = `(${translate('resources.drafts.labels.no_venue')})`;\n } else {\n heading = <RecordContextProvider value={{ arenaId: value }}>\n <SurfaceField source=\"arenaId\" link={false} includeAttributes=\"inline\" includeCity=\"inline\" />\n </RecordContextProvider>\n }\n break;\n }\n }\n\n const criteria = types.filter((type, typeIndex) => typeIndex <= level)\n const events = ids.map(id => data?.[id]).filter(event => {\n if (!event) return false;\n return criteria.every(type => {\n const typeIndex = types.findIndex(t => t === type);\n const groupValue = groupValues[typeIndex];\n\n switch (type) {\n case 'round': {\n if (groupValue === TBD) return !event.round;\n return event.round == groupValue;\n }\n case 'date': {\n const date = moment.utc(groupValue, 'YYYY-MM-DD')\n if (!date.isValid()) return !event.date\n return date.format('YYYY-MM-DD') == moment.utc(event.date, 'YYYY-MM-DD').format('YYYY-MM-DD')\n }\n case 'arena': {\n if (groupValue === TBD) return !event.arenaId;\n return event.arenaId == groupValue;\n }\n }\n return false;\n })\n })\n\n const groupKey = groupValues.slice(0, level + 1).join(SPLIT);\n return {\n groupKey,\n topGroup: groupValues[0],\n level,\n heading,\n showHeading: groupKey != prevGroupValues.slice(0, level + 1).join(SPLIT),\n data: level === (types.length - 1) || types.length === 0 ? events : [],\n ids: events.map(event => event.id),\n }\n })\n })\n\n // maintain sort order from context\n groups = orderBy(groups, group => ids.indexOf(group.ids[0]))\n const topGroups = groupBy(groups, 'topGroup')\n const topGroupKeys = orderBy(Object.keys(topGroups), topGroup => groups.findIndex(group => group.topGroup === topGroup))\n return topGroupKeys.map(key => topGroups[key])\n }, [ translate, ids, data, groupByRound, groupByDate, groupByArena ])\n\n if (!groups?.length) return null;\n return <div className={className}>\n {groups.map(groups => {\n const key = groups?.[0]?.topGroup;\n return <Component className={classes.root} key={key}>\n {groups.map(group => <EventGroup key={group.groupKey} {...props} group={group} groupByDate={groupByDate} groupByArena={groupByArena} />)}\n </Component>\n })}\n </div>\n}\n","import React, { useCallback, useEffect, useState } from 'react';\nimport { useRecordContext, ListContextProvider, ResourceContextProvider, useGetManyReference, useResourceContext } from 'react-admin';\nimport { get, orderBy, pickBy } from 'lodash';\n\nimport { isEmpty } from '@hisports/parsers';\n\nimport { useList } from '../../common/ra/useList';\nimport { useGroupArenas } from './EventViewSettings';\nimport { isAuthorized } from '../../common/Authorize';\nimport { useScopes } from '../../http';\n\n// forked from useReferenceManyFieldController\n\nconst useEventReferenceController = ({ includeGames = true, includeDraftGames = false, includePractices = true, includeActivities = false, includeSlots = false, includeAvailabilities = false, ...props }) => {\n const scopes = useScopes()\n const record = useRecordContext(props);\n const resource = useResourceContext(props);\n const [ groupArena ] = useGroupArenas();\n const [ serverFilters, setServerFilters ] = useState({});\n\n const { reference = resource, target, filter: initialFilter = {}, source = 'id', basePath, page: initialPage, perPage: initialPerPage = 25, sort: initialSort = { field: 'startTime', order: 'ASC' } } = props;\n const referenceId = get(record, source);\n\n // Authorization check for data inclusion\n const enableGames = includeGames && isAuthorized(scopes, 'games', 'list');\n const enableDraftGames = includeDraftGames && isAuthorized(scopes, 'draftGames', 'list');\n const enablePractices = includePractices && isAuthorized(scopes, 'practices', 'list');\n const enableActivities = includeActivities && isAuthorized(scopes, 'activities', 'list');\n const enableSlots = includeSlots && isAuthorized(scopes, 'arenaslots', 'list');\n const enableAvailabilities = includeAvailabilities && isAuthorized(scopes, 'availabilities', 'list');\n\n const include = groupArena ? [\"surface\"] : [];\n const filter = { ...initialFilter, ...serverFilters, _include: include } // necessary so that loopback-filter sorts in useList correctly\n const gameFilter = { ...filter, _include: { ...include, gameBracket: true } }\n\n const { data: games, ids: gamesIds, ...gamesStatus } = useGetManyReference('games', target, referenceId, { page: 1, perPage: 999999 }, initialSort, gameFilter, resource, { enabled: enableGames })\n const { data: draftGames, ids: draftGamesIds, ...draftGamesStatus } = useGetManyReference('draftGames', target, referenceId, { page: 1, perPage: 999999 }, initialSort, { ...filter, isPublished: false, updatedGameId: null }, resource, { enabled: enableDraftGames })\n const { data: practices, ids: practicesIds, ...practicesStatus } = useGetManyReference('practices', target, referenceId, { page: 1, perPage: 999999 }, initialSort, filter, resource, { enabled: enablePractices })\n const { data: activities, ids: activitiesIds, ...activitiesStatus } = useGetManyReference('activities', target, referenceId, { page: 1, perPage: 999999 }, initialSort, filter, resource, { enabled: enableActivities })\n const { data: slots, ids: slotsIds, ...slotsStatus } = useGetManyReference('arenaslots', target, referenceId, { page: 1, perPage: 999999 }, initialSort, filter, resource, { enabled: enableSlots })\n const { data: availabilities, ids: availabilitiesIds, ...availabilitiesStatus } = useGetManyReference('availabilities', target, referenceId, { page: 1, perPage: 999999 }, initialSort, filter, resource, { enabled: enableAvailabilities })\n\n const [ ids, setIds ] = useState([]);\n const [ data, setData ] = useState([]);\n useEffect(() => {\n let data = [\n ...(enableGames ? gamesIds.map(id => {\n if (!games[id]) return;\n games[id].resource = 'games';\n games[id].type = 'Game';\n return games[id];\n }).filter(Boolean) : []),\n\n ...(enableDraftGames ? draftGamesIds.map(id => {\n if (!draftGames[id]) return;\n draftGames[id].resource = 'draftGames';\n draftGames[id].type = 'Draft Game';\n return draftGames[id];\n }).filter(Boolean) : []),\n\n ...(enablePractices ? practicesIds.map(id => {\n if (!practices[id]) return;\n practices[id].resource = 'practices';\n return practices[id];\n }).filter(Boolean) : []),\n\n ...(enableActivities ? activitiesIds.map(id => {\n if (!activities[id]) return;\n activities[id].resource = 'activities';\n return activities[id];\n }).filter(Boolean) : []),\n\n ...(enableSlots ? slotsIds.map(id => {\n if (!slots[id]) return;\n slots[id].resource = 'arenaslots';\n slots[id].type = 'Slot';\n return slots[id];\n }).filter(Boolean) : []),\n\n ...(enableAvailabilities ? availabilitiesIds.map(id => {\n if (!availabilities[id]) return;\n availabilities[id].resource = 'availabilities';\n availabilities[id].type = 'Availability';\n return availabilities[id];\n }).filter(Boolean) : []),\n ]\n\n if (!isEmpty(initialSort)) {\n const order = Array.isArray(initialSort.order) ? initialSort.order.map(order => order.toLowerCase()) : initialSort.order.toLowerCase();\n data = orderBy(data, initialSort.field, order);\n }\n\n const ids = data.map(event => event.id).filter(Boolean);\n setData(data);\n setIds(ids);\n }, [ gamesIds, games, enableGames, draftGamesIds, draftGames, enableDraftGames, practicesIds, practices, enablePractices, activitiesIds, activities, enableActivities, slotsIds, slots, enableSlots, availabilitiesIds, availabilities, enableAvailabilities, initialSort ])\n\n const gamesLoaded = enableGames ? gamesStatus.loaded : true;\n const gamesLoading = enableGames ? gamesStatus.loading : false;\n const gamesError = enableGames ? gamesStatus.error : null;\n const draftGamesLoaded = enableDraftGames ? draftGamesStatus.loaded : true;\n const draftGamesLoading = enableDraftGames ? draftGamesStatus.loading : false;\n const draftGamesError = enableDraftGames ? draftGamesStatus.error : null;\n const practicesLoaded = enablePractices ? practicesStatus.loaded : true;\n const practicesLoading = enablePractices ? practicesStatus.loading : false;\n const practicesError = enablePractices ? practicesStatus.error : null;\n const activitiesLoaded = enableActivities ? activitiesStatus.loaded : true;\n const activitiesLoading = enableActivities ? activitiesStatus.loading : false;\n const activitiesError = enableActivities ? activitiesStatus.error : null;\n const slotsLoaded = enableSlots ? slotsStatus.loaded : true;\n const slotsLoading = enableSlots ? slotsStatus.loading : false;\n const slotsError = enableSlots ? slotsStatus.error : null;\n const availabilitiesLoaded = enableAvailabilities ? availabilitiesStatus.loaded : true;\n const availabilitiesLoading = enableAvailabilities ? availabilitiesStatus.loading : false;\n const availabilitiesError = enableAvailabilities ? availabilitiesStatus.error : null;\n\n const context = useList({\n data,\n ids,\n sort: initialSort,\n page: initialPage,\n perPage: initialPerPage,\n loaded: gamesLoaded && draftGamesLoaded && practicesLoaded && activitiesLoaded && slotsLoaded && availabilitiesLoaded,\n loading: gamesLoading || draftGamesLoading || practicesLoading || activitiesLoading || slotsLoading || availabilitiesLoading,\n error: gamesError || draftGamesError || practicesError || activitiesError || slotsError || availabilitiesError,\n })\n\n const setFilters = (filterValues, displayedFilters) => {\n const { effectiveSurfaces, scheduleOffices, teamOffices, homeTeamOffices, awayTeamOffices, surfaceOffices, ...rest } = filterValues\n const serverFilters = pickBy({ effectiveSurfaces, scheduleOffices, teamOffices, homeTeamOffices, awayTeamOffices, surfaceOffices }, value => typeof value !== 'undefined')\n setServerFilters(serverFilters)\n context.setFilters(filterValues, displayedFilters)\n }\n\n const refetch = useCallback(() => {\n gamesStatus.refetch();\n draftGamesStatus.refetch();\n practicesStatus.refetch()\n activitiesStatus.refetch();\n slotsStatus.refetch();\n availabilitiesStatus.refetch();\n }, [ gamesStatus, draftGamesStatus, practicesStatus, activitiesStatus, slotsStatus, availabilitiesStatus ])\n\n return {\n basePath: basePath ? basePath.replace(resource, reference) : `/${reference}`,\n resource,\n ...context,\n refetch,\n setFilters\n }\n}\n\nexport const EventReferenceManyBase = ({ children, ...props }) =>\n <ListContextProvider value={useEventReferenceController(props)}>\n { children }\n </ListContextProvider>\n\nexport const EventReferenceManyField = ({ children, ...props }) => {\n const controllerProps = useEventReferenceController(props);\n return <ResourceContextProvider value=\"games\">\n <ListContextProvider value={controllerProps}>\n { children }\n </ListContextProvider>\n </ResourceContextProvider>\n}\n","import React from 'react';\nimport { SimpleList, useListContext } from 'react-admin'\n\nimport TimeRangeField from '../../common/fields/TimeRangeField';\n\nimport { GroupField } from '../groups/GroupField';\nimport { GameStatusIcon } from '../games/GameNumberField';\nimport { DraftGameActions } from '../draftgames/DraftGameActions';\n\nimport { LocationField, EventTeamsField, StatusesField, rowClick, EventCommentsField, EventNameField } from './EventGrid';\n\nexport default ({ hideGroup = false, hideStatus = false, hideNumber = false, team, ...props }) => {\n const { ids, data } = useListContext(props);\n if (!ids || !data) return null;\n\n return <SimpleList\n primaryText={record => record && <>\n {!hideNumber && <strong>{record.number || record.type} </strong>}\n <GameStatusIcon game={record} />\n <TimeRangeField source=\"time\" startSource=\"startTime\" endSource=\"endTime\" showDate />\n {!hideGroup && <> <GroupField source=\"groupId\" /></>}\n </>}\n secondaryText={record => <>\n <LocationField link={false} /><br />\n <EventTeamsField source=\"homeTeamId\" link={false} team={team} />\n <EventNameField />\n <EventCommentsField />\n </>}\n rightIcon={record => {\n if (record?.updatedGameId) return <DraftGameActions hideLabel />\n if (hideStatus) return null;\n return <StatusesField {...props} />\n }}\n linkType={(record, id) => {\n if (record?.updatedGameId) return null;\n return rowClick(id, null, record)\n }}\n />\n}\n","import React from 'react';\nimport { useResourceContext } from 'react-admin';\nimport { useMediaQuery } from '@material-ui/core';\n\nimport { useGroupArenas, useGroupDates, useGroupRounds, useShowCalendar } from './EventViewSettings';\nimport EventCalendar from './EventCalendar';\nimport EventList from './EventList';\nimport EventGroupedGrid from './EventGroupedGrid';\nimport { EventGrid } from './EventGrid';\nimport { DragProvider } from '../../common/calendar/DragContext';\nimport { SchedulingProvider } from '../../common/calendar/SchedulingContext';\nimport { CalendarProvider } from '../../common/calendar/CalendarContext';\n\nexport const BaseEventView = ({ isRowSelectable, disableCalendar, ...props }) => {\n const isMobile = useMediaQuery(theme => theme.breakpoints.down('xs'));\n const [ showCalendar ] = useShowCalendar();\n const [ groupDates ] = useGroupDates();\n const [ groupRounds ] = useGroupRounds();\n const [ groupArenas ] = useGroupArenas();\n\n // combine event view settings and prop, allow prop disabling with false\n const groupByRound = props.groupByRound !== false && (props.groupByRound || groupRounds);\n const groupByDate = props.groupByDate !== false && (props.groupByDate || groupDates);\n const groupByArena = props.groupByArena !== false && (props.groupByArena || groupArenas);\n\n if (isMobile) return <EventList {...props} />\n if (showCalendar && !disableCalendar) return <EventCalendar {...props} />\n if (groupByRound || groupByDate || groupByArena) return <EventGroupedGrid isRowSelectable={isRowSelectable} {...props} />\n return <EventGrid isRowSelectable={isRowSelectable} {...props} />\n}\n\nexport const EventView = ({ initialStart, hideArena, includeVenue, strictView, disableScheduling, ...props }) => {\n const resource = useResourceContext();\n\n return <SchedulingProvider resource={resource} disableScheduling={disableScheduling}>\n <DragProvider>\n <CalendarProvider initialStart={initialStart} hideArena={hideArena} includeVenue={includeVenue} strictView={strictView}>\n <BaseEventView hideArena={hideArena} includeVenue={includeVenue} {...props} />\n </CalendarProvider>\n </DragProvider>\n </SchedulingProvider>\n}\n","import React, { Fragment } from 'react';\nimport { Dialog, DialogContent, DialogContentText, DialogTitle } from '@material-ui/core';\nimport { SimpleForm, TextInput, useRecordContext, useTranslate } from 'react-admin';\nimport { useForm } from 'react-final-form';\nimport { sortBy } from 'lodash';\n\nimport { validateGameNumber } from '@hisports/scheduler';\nimport { getGameNumberValidationError } from '@hisports/scheduler/src/sequences/sequences';\n\nimport { DialogFormToolbar } from '../../../common/dialogs/DialogForm';\nimport { renumberGames } from '../common/GamesView';\n\nconst inputProps = {\n variant: 'outlined',\n margin: 'none',\n fullWidth: true,\n}\n\nconst validateStartNumber = (startNumber, seasonId) => {\n if (!startNumber) {\n return { message: 'ra.validation.required' }\n } else if (!validateGameNumber(startNumber, seasonId)) {\n const gameNumberError = getGameNumberValidationError(startNumber, seasonId);\n return { message: `resources.schedulesequences.validations.${gameNumberError}` }\n }\n}\n\nconst RenumberGamesForm = ({ onSubmit, ...props }) => {\n const translate = useTranslate();\n const draft = useRecordContext();\n\n const { options } = draft || {};\n const { startNumber } = options || {};\n\n const onKeyDown = e => {\n // prevent autofocus on menu items\n e.stopPropagation()\n }\n\n return <SimpleForm save={onSubmit} initialValues={{ startNumber }} {...props}>\n <DialogContentText fullWidth>\n {translate('resources.drafts.messages.renumber_games.messages.description')}\n </DialogContentText>\n <br />\n <TextInput onKeyDown={onKeyDown} validate={(startNumber) => validateStartNumber(startNumber, draft?.seasonId)} source=\"options.startNumber\" placeholder=\"XY001\" label=\"resources.drafts.fields.options.startNumber\" {...inputProps} />\n </SimpleForm>\n}\n\nexport default ({ isOpen, onClose }) => {\n const translate = useTranslate();\n const { change } = useForm();\n\n const onSubmit = async values => {\n const { games, options } = values || {}\n const { startNumber } = options || {};\n if (!games || !startNumber) return\n\n const sortedGames = sortBy(games, ['round', 'date', 'startTime'])\n const renumberedGames = renumberGames(sortedGames, startNumber)\n\n change('games', renumberedGames)\n change('options', { ...options, startNumber })\n\n if (typeof onClose === 'function') {\n onClose()\n }\n }\n\n return <Dialog open={isOpen} onClose={onClose} maxWidth=\"sm\" fullWidth>\n <DialogTitle>{translate('resources.drafts.messages.renumber_games.title')}</DialogTitle>\n <DialogContent>\n <RenumberGamesForm\n component={Fragment}\n onSubmit={onSubmit}\n toolbar={<DialogFormToolbar submitLabel=\"ra.action.confirm\" cancelLabel=\"ra.action.cancel\" onCancel={onClose} />}\n />\n </DialogContent>\n </Dialog>\n}\n","import { downloadCSV } from 'react-admin';\nimport moment from 'moment-timezone';\nimport Papa from 'papaparse'\n\nimport { appName } from '../../flags';\nimport { getSurfaceName } from '../surfaces/util';\n\nconst draftGamesExporter = data => {\n const draftGames = data.map(draftGame => {\n const timezone = draftGame.timezone;\n const homeTeam = draftGame.homeTeam;\n const awayTeam = draftGame.awayTeam;\n const schedule = draftGame.schedule;\n const surface = draftGame.surface;\n const category = draftGame.category;\n\n return [\n schedule?.name,\n category?.name,\n draftGame.id,\n homeTeam?.name,\n homeTeam?.HCRId,\n awayTeam?.name,\n awayTeam?.HCRId,\n draftGame.date ? moment.utc(draftGame.date, 'YYYY-MM-DD').format('dddd') : '',\n draftGame.date ? moment.utc(draftGame.date, 'YYYY-MM-DD').format('YYYY-MM-DD') : '',\n draftGame.startTime ? moment.tz(draftGame.startTime, timezone).format(\"HH:mm\") : '',\n draftGame.endTime ? moment.tz(draftGame.endTime, timezone).format(\"HH:mm\") : '',\n timezone,\n getSurfaceName(surface, true),\n draftGame.status,\n draftGame.comments,\n ]\n })\n\n const csv = Papa.unparse({\n fields: [\"Schedule Name\", \"Category\", \"Draft Number\", \"Home Team Name\", \"Home Team Registry ID\", \"Away Team Name\", \"Away Team Registry ID\", \"Day\", \"Date\", \"Start Time\", \"End Time\", \"Timezone\", \"Venue\", \"Status\", \"Comments\"],\n data: draftGames\n });\n downloadCSV(csv, `${appName} - Draft Games - ${moment().format('YYYYMMDDHHmmss')}`);\n};\n\ndraftGamesExporter._include = [\n 'homeTeam',\n 'awayTeam',\n 'schedule',\n 'surface',\n 'category',\n]\n\nexport default draftGamesExporter;\n","import React, { useContext, useState, useMemo, useEffect } from 'react';\nimport { useListContext, useRecordContext, useTranslate } from 'react-admin';\nimport { FormControlLabel, Checkbox, IconButton, Menu, MenuItem, Box, useMediaQuery, ListItemIcon, ListItemText, Divider, Typography, makeStyles, Button, ListItemSecondaryAction } from '@material-ui/core';\nimport { ArrowDropDown, CalendarToday, Dashboard, DateRange, FormatListNumbered, MoreVert, RadioButtonChecked, RadioButtonUnchecked, ViewDay, ViewList, ViewWeek } from '@material-ui/icons';\n\nimport { isHomeFirst } from '@hisports/scoresheet/src/util';\n\nimport usePreferences from '../../common/usePreferences';\nimport { useScopes, useSport, useTenant } from '../../http';\nimport { isAuthorized } from '../../common/Authorize';\nimport ExportButton from '../../common/ra/ExportButton';\n\nimport RenumberDialog from '../drafts/dialogs/RenumberDialog';\nimport draftGamesExporter from '../draftgames/DraftGameExporter';\n\n\nexport const CALENDAR_VIEWS = {\n DAY: 'Day',\n WEEK: 'Week',\n MONTH: 'Month',\n SEASON: 'Season',\n}\n\nexport const GAME_LIST_FILTERS = {\n ALL_DRAFT_GAMES: 'drafts_only',\n DRAFT_GAMES_NO_DATES: 'drafts_no_dates',\n DRAFT_GAMES_NO_TIMES: 'drafts_no_times',\n ALL_PUBLISHED_GAMES: 'all_published_games',\n ALL_GAMES: 'all_games'\n}\n\nconst useStyles = makeStyles(theme => ({\n menu: {\n minWidth: theme.spacing(32),\n },\n menuButton: {\n marginLeft: theme.spacing(1.5),\n },\n label: {\n display: 'block',\n marginTop: theme.spacing(2)\n },\n controlLabel: {\n minWidth: '200px',\n }\n}))\n\nexport const EventViewSettingsContext = React.createContext([false, value => {}]);\n\nconst groupRounds = [false, () => null];\nexport const EventViewSettingsProvider = props => {\n // CAUTION: there's an identical provider for this context in Scheduler.js and DraftGamesCard.js\n // when adding new settings, add it in that provider as well to avoid a crash\n const groupDates = usePreferences('GameViewGroupDates', false);\n const groupArenas = usePreferences('GameViewGroupArenas', false);\n const assignments = usePreferences('GameViewAssignments', false);\n const gameInfo = usePreferences('GameViewInformation', false);\n const flags = usePreferences('GameViewFlags', false);\n const reverseHomeAway = usePreferences('GameViewReverseHomeAway', false);\n const calendar = usePreferences('GameViewCalendar', false);\n const calendarView = usePreferences('GameViewCalendarView', CALENDAR_VIEWS.WEEK);\n const datelessView = usePreferences('GameViewDatelessView', CALENDAR_VIEWS.MONTH);\n const teamEvents = useState(true);\n const slots = usePreferences('GameViewSlots', true);\n const awaySlots = usePreferences('GameViewAwaySlots', false);\n const teamNames = usePreferences('GameViewTeamNames', false);\n const officeNames = usePreferences('GameViewOfficeNames', false);\n const condensedView = usePreferences('GameViewCondensedView', true);\n const availabilities = usePreferences('GameViewAvailabilities', true);\n const surfaceSizes = useState([]);\n const gameListFilter = usePreferences('GameViewGameListFilter', GAME_LIST_FILTERS.ALL_GAMES);\n const officialList = usePreferences('OfficialList');\n const value = useMemo(() => ({\n calendar,\n calendarView,\n datelessView,\n teamEvents,\n slots,\n awaySlots,\n teamNames,\n officeNames,\n condensedView,\n availabilities,\n gameInfo,\n flags,\n reverseHomeAway,\n groupDates,\n groupArenas,\n groupRounds,\n assignments,\n surfaceSizes,\n gameListFilter,\n officialList\n }), [calendar, calendarView, datelessView, teamEvents, slots, awaySlots, teamNames, officeNames, availabilities, gameInfo, flags, reverseHomeAway, groupDates, groupArenas, assignments, surfaceSizes, gameListFilter, condensedView, officialList])\n\n return <EventViewSettingsContext.Provider value={value} {...props} />\n}\n\nexport const useEventViewSettings = () =>\n useContext(EventViewSettingsContext);\n\nexport const useGroupDates = (initialValue) => {\n const { groupDates } = useEventViewSettings();\n return groupDates;\n}\n\nexport const useGroupArenas = () => {\n const { groupArenas } = useEventViewSettings();\n return groupArenas;\n}\n\nexport const useGroupRounds = () => {\n const { groupRounds } = useEventViewSettings();\n return groupRounds;\n}\n\nexport const useSurfaceSizes = () => {\n const { surfaceSizes } = useEventViewSettings();\n return surfaceSizes;\n}\n\nexport const useEventSort = ({ groupByDate, groupByArena, groupByRound } = {}) => {\n const [ groupDates ] = useGroupDates();\n const [ groupArenas ] = useGroupArenas();\n const [ groupRounds ] = useGroupRounds();\n const isMobile = useMediaQuery(theme => theme.breakpoints.down('xs'));\n\n const fields = [];\n const orders = [];\n\n if ((groupByDate || groupDates) && !isMobile && groupByDate !== false) {\n fields.push('date')\n orders.push('ASC')\n }\n if ((groupByArena || groupArenas) && !isMobile && groupByArena !== false) {\n fields.push('surface.venue.country', 'surface.venue.region', 'surface.venue.city', 'surface.venue.name', 'surface.name')\n orders.push('ASC', 'ASC', 'ASC', 'ASC', 'ASC')\n }\n if ((groupByRound || groupRounds) && !isMobile && groupByRound !== false) {\n fields.push('round')\n orders.push('ASC')\n }\n fields.push('startTime', 'number')\n orders.push('ASC', 'ASC')\n\n return {\n field: fields,\n order: orders,\n }\n}\n\nexport const useShowAssignments = () => {\n const { assignments } = useEventViewSettings();\n return assignments;\n}\n\nexport const useShowCalendar = () => {\n const { calendar } = useEventViewSettings();\n return calendar;\n}\n\nexport const useCalendarView = () => {\n const { calendarView } = useEventViewSettings();\n return calendarView;\n}\n\nexport const useDatelessView = () => {\n const { datelessView } = useEventViewSettings();\n return datelessView;\n}\n\nexport const useShowTeamEvents = () => {\n const { teamEvents } = useEventViewSettings();\n return teamEvents;\n}\n\nexport const useShowSlots = () => {\n const { slots } = useEventViewSettings();\n return slots;\n}\n\nexport const useShowAwaySlots = () => {\n const { awaySlots } = useEventViewSettings();\n return awaySlots;\n}\n\nexport const useShowTeamName = () => {\n const { teamNames } = useEventViewSettings();\n return teamNames;\n}\n\nexport const useShowOfficeName = () => {\n const { officeNames } = useEventViewSettings();\n return officeNames;\n}\n\nexport const useShowCondensedView = () => {\n const { condensedView } = useEventViewSettings();\n return condensedView;\n}\n\nexport const useShowGameInfo = () => {\n const { gameInfo } = useEventViewSettings();\n return gameInfo;\n}\n\nexport const useShowFlags = () => {\n const { flags } = useEventViewSettings();\n return flags;\n}\n\nexport const useReverseHomeAway = () => {\n const { reverseHomeAway } = useEventViewSettings();\n return reverseHomeAway;\n}\n\nexport const useIsHomeFirst = () => {\n const sport = useSport();\n const [ reverseHomeAway ] = useReverseHomeAway();\n\n return reverseHomeAway ? !isHomeFirst(sport) : isHomeFirst(sport);\n}\n\nexport const useShowAvailabilities = () => {\n const { availabilities } = useEventViewSettings();\n return availabilities;\n}\n\nexport const useGameListFilter = () => {\n const { gameListFilter } = useEventViewSettings();\n return gameListFilter;\n}\n\nexport const useOfficialList = () => {\n const { officialList } = useEventViewSettings();\n return officialList;\n}\n\nconst ShowGameInfoInput = ({ disableCalendar }) => {\n const translate = useTranslate();\n const classes = useStyles();\n const [ checked, setGameInfo ] = useShowGameInfo();\n const [ showCalendar ] = useShowCalendar();\n\n const handleChange = e => {\n const checked = e.target.checked;\n setGameInfo(checked);\n }\n\n return <FormControlLabel\n className={classes.controlLabel}\n control={<Checkbox checked={checked} indeterminate={checked && showCalendar && !disableCalendar} disabled={showCalendar && !disableCalendar} onChange={handleChange} name=\"showGameInfo\" />}\n label={translate('resources.games.messages.show_more_game_info')}\n />\n}\n\nconst ShowFlagsInput = ({ disableCalendar }) => {\n const translate = useTranslate();\n const classes = useStyles();\n const [ checked, setFlags ] = useShowFlags();\n const [ showCalendar ] = useShowCalendar();\n\n const handleChange = e => {\n const checked = e.target.checked;\n setFlags(checked);\n }\n\n return <FormControlLabel\n className={classes.controlLabel}\n control={<Checkbox checked={checked} indeterminate={checked && showCalendar && !disableCalendar} disabled={showCalendar && !disableCalendar} onChange={handleChange} name=\"showFlags\" />}\n label={translate('resources.games.messages.show_flags')}\n />\n}\n\nconst ReverseHomeAway = ({ disableCalendar }) => {\n const translate = useTranslate();\n const classes = useStyles();\n const [ checked, setReverseHomeAway ] = useReverseHomeAway();\n const [ showCalendar ] = useShowCalendar();\n\n const handleChange = e => {\n const checked = e.target.checked;\n setReverseHomeAway(checked);\n }\n\n return <FormControlLabel\n className={classes.controlLabel}\n control={<Checkbox checked={checked} indeterminate={checked && showCalendar && !disableCalendar} disabled={showCalendar && !disableCalendar} onChange={handleChange} name=\"reverseHomeAway\" />}\n label={translate('resources.games.messages.reverse_home_away')}\n />\n}\n\nconst ShowAssignmentsInput = ({ disableCalendar }) => {\n const translate = useTranslate();\n const classes = useStyles();\n const [ checked, setAssignments ] = useShowAssignments();\n const [ showCalendar ] = useShowCalendar();\n\n const handleChange = e => {\n const checked = e.target.checked;\n setAssignments(checked);\n }\n\n return <FormControlLabel\n className={classes.controlLabel}\n control={<Checkbox checked={checked} indeterminate={checked && showCalendar && !disableCalendar} disabled={showCalendar && !disableCalendar} onChange={handleChange} name=\"showAssignments\" />}\n label={translate('resources.games.messages.show_assignments')}\n />\n}\n\nconst GroupDatesInput = ({ disableCalendar }) => {\n const translate = useTranslate();\n const [ checked, setGroupDates ] = useGroupDates();\n const [ showCalendar ] = useShowCalendar();\n const { setSort } = useListContext();\n\n const handleChange = e => {\n const checked = e.target.checked;\n setGroupDates(checked)\n setSort(\"date\", \"ASC\")\n }\n\n return <FormControlLabel\n label={translate('resources.games.messages.group_games_by_date')}\n control={<Checkbox\n checked={checked}\n indeterminate={checked && showCalendar && !disableCalendar}\n disabled={showCalendar && !disableCalendar}\n onChange={handleChange}\n name=\"groupDates\"\n />}\n />\n}\n\nconst GroupRoundsInput = ({ disableCalendar }) => {\n const translate = useTranslate();\n const classes = useStyles();\n const [ checked, setGroupRounds ] = useGroupRounds();\n const [ showCalendar ] = useShowCalendar();\n const { setSort } = useListContext();\n\n const handleChange = e => {\n const checked = e.target.checked;\n setGroupRounds(checked)\n setSort([\"rounds\", \"date\"], [\"ASC\", \"ASC\"])\n }\n\n return <FormControlLabel\n className={classes.controlLabel}\n control={<Checkbox\n checked={checked}\n indeterminate={checked && showCalendar && !disableCalendar}\n disabled={showCalendar && !disableCalendar}\n onChange={handleChange}\n name=\"groupRounds\"\n />}\n label={translate('resources.games.messages.group_games_by_round')}\n />\n}\n\nconst GroupArenasInput = ({ disableCalendar }) => {\n const translate = useTranslate();\n const [ showCalendar ] = useShowCalendar();\n const [ checked, setGroupArenas ] = useGroupArenas();\n\n const { setSort } = useListContext();\n\n const handleChange = e => {\n const checked = e.target.checked;\n setGroupArenas(checked)\n\n if (checked && !showCalendar) {\n setSort([\"date\", \"surface.venue.city\", \"surface.venue.name\", \"surface.name\", \"startTime\"], [\"ASC\", \"ASC\", \"ASC\", \"ASC\", \"ASC\"])\n } else {\n setSort(\"startTime\", \"ASC\")\n }\n }\n\n return <FormControlLabel\n label={translate('resources.games.messages.group_games_by_arena')}\n control={<Checkbox\n checked={checked}\n indeterminate={checked && showCalendar && !disableCalendar}\n disabled={showCalendar && !disableCalendar}\n onChange={handleChange}\n name=\"groupArenas\"\n />}\n />\n}\n\nconst ShowTeamEvents = () => {\n const translate = useTranslate();\n const classes = useStyles();\n const [ checked, setShowTeamEvents ] = useShowTeamEvents();\n\n const handleChange = e => {\n const checked = e.target.checked;\n setShowTeamEvents(checked);\n }\n\n return <FormControlLabel\n className={classes.controlLabel}\n label={translate('resources.events.labels.team_events')}\n control={<Checkbox checked={checked} onChange={handleChange} />}\n />\n}\n\nconst ShowSlots = () => {\n const translate = useTranslate();\n const classes = useStyles();\n const [ checked, setShowSlots ] = useShowSlots();\n\n const handleChange = e => {\n const checked = e.target.checked;\n setShowSlots(checked);\n }\n\n return <FormControlLabel\n className={classes.controlLabel}\n label={translate('components.calendar.settings.arena_slots', 2)}\n control={<Checkbox checked={checked} onChange={handleChange} />}\n />\n}\n\nconst ShowAwaySlots = () => {\n const translate = useTranslate();\n const classes = useStyles();\n const [ checked, setShowAwaySlots ] = useShowAwaySlots();\n\n const handleChange = e => {\n const checked = e.target.checked;\n setShowAwaySlots(checked);\n }\n\n return <FormControlLabel\n className={classes.controlLabel}\n label={translate('components.calendar.settings.away_arena_slots', 2)}\n control={<Checkbox checked={checked} onChange={handleChange} />}\n />\n}\n\nconst ShowOfficeNames = () => {\n const translate = useTranslate();\n const classes = useStyles();\n const [ checked, setShowOfficeNames ] = useShowOfficeName();\n\n const handleChange = e => {\n const checked = e.target.checked;\n setShowOfficeNames(checked);\n }\n\n return <FormControlLabel\n className={classes.controlLabel}\n label={translate('resources.schedules.labels.matrix.show_organisation', 2)}\n control={<Checkbox checked={checked} onChange={handleChange} />}\n />\n}\n\nconst ShowCondensedView = () => {\n const translate = useTranslate();\n const classes = useStyles();\n const [ checked, setShowCondensedView ] = useShowCondensedView();\n\n const handleChange = e => {\n const checked = e.target.checked;\n setShowCondensedView(checked);\n }\n\n return <FormControlLabel\n className={classes.controlLabel}\n label={translate('components.calendar.settings.condensed_view', 2)}\n control={<Checkbox checked={checked} onChange={handleChange} />}\n />\n}\n\nconst ShowTeamNames = () => {\n const translate = useTranslate();\n const classes = useStyles();\n const [ checked, setShowTeamNames ] = useShowTeamName();\n\n const handleChange = e => {\n const checked = e.target.checked;\n setShowTeamNames(checked);\n }\n\n return <FormControlLabel\n className={classes.controlLabel}\n label={translate('components.calendar.settings.team_names', 2)}\n control={<Checkbox checked={checked} onChange={handleChange} />}\n />\n}\n\nconst ShowAvailabilties = () => {\n const translate = useTranslate();\n const classes = useStyles();\n const [ checked, setShowAvailabilities ] = useShowAvailabilities();\n\n const handleChange = e => {\n const checked = e.target.checked;\n setShowAvailabilities(checked);\n }\n\n return <FormControlLabel\n className={classes.controlLabel}\n label={translate('resources.availabilities.name', 2)}\n control={<Checkbox checked={checked} onChange={handleChange} />}\n />\n}\n\nexport const CalendarToggle = () => {\n const [ showCalendar, setShowCalendar ] = useShowCalendar();\n const toggle = () => setShowCalendar(shown => !shown)\n return <IconButton onClick={toggle}>\n {showCalendar ? <ViewList /> : <DateRange />}\n </IconButton>\n}\n\nconst ShowCalendarInput = () => {\n const translate = useTranslate();\n const [ checked, setShowCalendar ] = useShowCalendar();\n\n const handleChange = e => {\n const checked = e.target.checked;\n setShowCalendar(checked)\n }\n\n return <FormControlLabel\n label={translate('resources.events.labels.show_calendar')}\n control={<Checkbox checked={checked} onChange={handleChange} name=\"calendar\" />}\n />\n}\n\nconst viewIcons = {\n [CALENDAR_VIEWS.DAY]: <ViewDay fontSize=\"small\" />,\n [CALENDAR_VIEWS.WEEK]: <ViewWeek fontSize=\"small\" />,\n [CALENDAR_VIEWS.MONTH]: <CalendarToday fontSize=\"small\" />,\n [CALENDAR_VIEWS.SEASON]: <Dashboard fontSize=\"small\" />\n}\n\nconst View = ({ view, onClose }) => {\n const translate = useTranslate();\n const [ calendarView, setCalendarView ] = useCalendarView();\n const checked = calendarView === view;\n\n const handleChange = e => {\n setCalendarView(view)\n onClose()\n }\n\n const icon = viewIcons[view]\n return <MenuItem onClick={handleChange}>\n <ListItemIcon>{icon}</ListItemIcon>\n <ListItemText primary={translate(`components.calendar.values.views.${view}`)} />\n <ListItemSecondaryAction>\n {checked ? <RadioButtonChecked fontSize=\"small\" /> : <RadioButtonUnchecked fontSize=\"small\" />}\n </ListItemSecondaryAction>\n </MenuItem>\n}\n\nconst SurfaceSize = ({ size }) => {\n const translate = useTranslate();\n const [ sizes, setSizes ] = useSurfaceSizes();\n const checked = sizes.includes(size);\n\n const handleChange = e => {\n setSizes(prevSizes => {\n const newSizes = prevSizes.filter(s => s !== size);\n if (e.target.checked) {\n newSizes.push(size);\n }\n return newSizes;\n });\n }\n\n return <FormControlLabel\n label={translate(`resources.surfaces.values.size.${size}`)}\n control={<Checkbox checked={checked} onChange={handleChange} />}\n />\n}\n\nconst SurfaceSizes = () => {\n const { sport } = useTenant() || {};\n const sportSizes = {\n Hockey: ['XL', 'M', 'XS'],\n Soccer: ['XL', 'L', 'M', 'S', 'XS'],\n Baseball: ['XL', 'L', 'M', 'S', 'XS'],\n }\n\n return <Box sx={{ display: 'flex', flexDirection: 'column', ml: 4 }}>\n {sportSizes[sport].map(value => <SurfaceSize key={value} size={value} />)}\n </Box>\n}\n\nconst AllSizes = () => {\n const translate = useTranslate();\n const classes = useStyles();\n const [ sizes, setSizes ] = useSurfaceSizes();\n const checked = !sizes?.length;\n\n const handleChange = e => {\n if (e.target.checked) {\n setSizes([]);\n }\n }\n\n return <FormControlLabel\n className={classes.controlLabel}\n label={translate('resources.surfaces.values.size.all_sizes')}\n control={<Checkbox checked={checked} onChange={handleChange} name=\"sizes\" />}\n />\n}\n\nconst RenumberGames = ({ onClose, ...props }) => {\n const translate = useTranslate()\n const [ open, setOpen ] = useState(false);\n const draft = useRecordContext();\n\n const { games } = draft || {};\n\n const onCloseDialog = () => {\n setOpen(false);\n onClose()\n }\n\n return <MenuItem onClick={() => setOpen(true)} disabled={!games?.length} disableRipple>\n <ListItemIcon>\n <FormatListNumbered />\n </ListItemIcon>\n <ListItemText primary={translate('resources.drafts.messages.renumber_games.actions.renumber_games')} />\n {open && <RenumberDialog isOpen={open} onClose={onCloseDialog} />}\n </MenuItem>\n}\n\nexport const EventViewSettingsForm = ({ disableCalendar, disableAssignments, showLabel = false }) => {\n const classes = useStyles();\n const translate = useTranslate();\n const scopes = useScopes()\n const canViewAssignments = isAuthorized(scopes, 'games', 'assign');\n const canViewFlags = isAuthorized(scopes, 'scoresheets', 'full');\n\n return <>\n {showLabel && <Typography className={classes.label} variant=\"overline\">{translate('resources.games.labels.view_options')}</Typography>}\n {!disableCalendar && <ShowCalendarInput />}\n <GroupArenasInput disableCalendar={disableCalendar} />\n <ShowGameInfoInput disableCalendar={disableCalendar} />\n {!disableAssignments && canViewAssignments && <ShowAssignmentsInput disableCalendar={disableCalendar} />}\n {canViewFlags && <ShowFlagsInput disableCalendar={disableCalendar} />}\n <ReverseHomeAway disableCalendar={disableCalendar} />\n </>\n}\n\nconst CalendarSettingsMenu = ({ disableSeasonView, showTeamEvents, showSlots, showAwaySlots, showTeamNames, showOfficeNames, showCondensedView, showAvailabilties, showViewToggle, showSurfaceSizes, showRenumber, showExporter, resource, filterValues, anchor, toggle, onClose }) => {\n const classes = useStyles()\n const translate = useTranslate()\n const [ calendarView ] = useCalendarView();\n\n const disabled = !showTeamEvents && !showSlots && !showTeamNames && !showViewToggle && !showAvailabilties && !showSurfaceSizes\n const showDivider = showViewToggle && (showSurfaceSizes || showTeamEvents || showSlots || showTeamNames || showAvailabilties || showRenumber || showExporter)\n return <>\n {showViewToggle && <Button onClick={toggle} color=\"secondary\" variant=\"outlined\" endIcon={<ArrowDropDown />} className={classes.menuButton}>\n {translate(`components.calendar.values.views.${calendarView}`)}\n </Button>}\n {!showViewToggle && <IconButton onClick={toggle} size=\"small\" disabled={disabled}><MoreVert /></IconButton>}\n <Menu\n classes={{ paper: classes.menu }}\n anchorEl={anchor}\n open={anchor != null}\n onClose={onClose}\n >\n {showViewToggle && <>\n <View view={CALENDAR_VIEWS.DAY} onClose={onClose} />\n <View view={CALENDAR_VIEWS.WEEK} onClose={onClose} />\n <View view={CALENDAR_VIEWS.MONTH} onClose={onClose} />\n {!disableSeasonView && <View view={CALENDAR_VIEWS.SEASON} onClose={onClose} />}\n </>}\n {showDivider && <Divider />}\n {showSurfaceSizes && <>\n <MenuItem dense>\n <AllSizes key=\"all-sizes\" />\n </MenuItem>\n <SurfaceSizes />\n </>}\n {showTeamEvents && <MenuItem dense>\n <ShowTeamEvents />\n </MenuItem>}\n {showSlots && <MenuItem dense>\n <ShowSlots />\n </MenuItem>}\n {showAwaySlots && <MenuItem dense>\n <ShowAwaySlots />\n </MenuItem>}\n {showTeamNames && <MenuItem dense>\n <ShowTeamNames />\n </MenuItem>}\n {showOfficeNames && <MenuItem dense>\n <ShowOfficeNames />\n </MenuItem>}\n {showCondensedView && <MenuItem dense>\n <ShowCondensedView />\n </MenuItem>}\n {showAvailabilties && <MenuItem dense>\n <ShowAvailabilties />\n </MenuItem>}\n {showRenumber && <>\n <Divider />\n <RenumberGames onClose={onClose} />\n </>}\n {showExporter && <>\n <Divider />\n <ExportButton menuItem exporter={draftGamesExporter} resource={resource} filterValues={filterValues} onClick={onClose} />\n </>}\n </Menu>\n </>\n}\n\nconst ListSettingsMenu = ({ disableCalendar, disableGroupRounds, disableGroupArenas, showGameInfoInput, showFlagsInput, showAssignmentsInput, showRenumber, showExporter, resource, filterValues, anchor, toggle, onClose }) => {\n return <>\n <IconButton onClick={toggle} size=\"small\"><MoreVert /></IconButton>\n <Menu\n anchorEl={anchor}\n open={anchor != null}\n onClose={onClose}\n >\n {!disableGroupRounds && <MenuItem dense onClick={onClose}>\n <GroupRoundsInput key=\"group-rounds\" disableCalendar={disableCalendar} />\n </MenuItem>}\n <MenuItem dense onClick={onClose}>\n <GroupDatesInput key=\"group-dates\" disableCalendar={disableCalendar} />\n </MenuItem>\n {!disableGroupArenas && <MenuItem dense onClick={onClose}>\n <GroupArenasInput key=\"group-arenas\" disableCalendar={disableCalendar} />\n </MenuItem>}\n {showGameInfoInput && <MenuItem dense onClick={onClose}>\n <ShowGameInfoInput key=\"show-game-info\" disableCalendar={disableCalendar} />\n </MenuItem>}\n {showAssignmentsInput && <MenuItem dense onClick={onClose}>\n <ShowAssignmentsInput key=\"show-assignment\" disableCalendar={disableCalendar} />\n </MenuItem>}\n {showFlagsInput && <MenuItem dense onClick={onClose}>\n <ShowFlagsInput key=\"show-flags\" disableCalendar={disableCalendar} />\n </MenuItem>}\n {showRenumber && <>\n <Divider />\n <RenumberGames onClose={onClose} />\n </>}\n {showExporter && <>\n <Divider />\n <ExportButton menuItem exporter={draftGamesExporter} resource={resource} filterValues={filterValues} onClick={onClose} />\n </>}\n </Menu>\n </>\n}\n\nexport const EventViewSettingsMenu = ({\n disableCalendar = false,\n disableAssignments = false,\n disableGroupRounds = true,\n disableGroupArenas = false,\n disableSeasonView = false,\n showTeamEvents = false,\n showSlots = false,\n showAwaySlots = false,\n showTeamNames = false,\n showOfficeNames = false,\n showCondensedView = true,\n showAvailabilties = false,\n showViewToggle = false,\n showSurfaceSizes = false,\n showGameInfoInput = true,\n showFlagsInput = true,\n showRenumber = false,\n showExporter = false\n}) => {\n const scopes = useScopes();\n const [ showCalendar ] = useShowCalendar();\n const [ groupArenas, setGroupArenas ] = useGroupArenas();\n const canViewAssignments = isAuthorized(scopes, 'games', 'assign');\n\n // Authorization check for calendar setting menu\n const canListTeamEvents = isAuthorized(scopes, 'games', 'list') || isAuthorized(scopes, 'practices', 'list') || isAuthorized(scopes, 'activities', 'list');\n const canListSlots = isAuthorized(scopes, 'arenaslots', 'list');\n const canListAvailabilties = isAuthorized(scopes, 'availabilities', 'list');\n\n const [ anchor, setAnchor ] = useState(null)\n const toggle = e => setAnchor(anchor => anchor ? !anchor : e.currentTarget)\n const onClose = () => setAnchor(null)\n\n const showCalendarInput = !disableCalendar;\n const showAssignmentsInput = !disableAssignments && canViewAssignments;\n\n useEffect(() => {\n if (disableGroupArenas === true) {\n setGroupArenas(false);\n }\n }, [ disableGroupArenas, setGroupArenas ])\n\n return <>\n {showCalendarInput && <CalendarToggle />}\n {showCalendar\n ? <CalendarSettingsMenu\n disableSeasonView={disableSeasonView}\n showTeamEvents={showTeamEvents && canListTeamEvents}\n showSlots={showSlots && canListSlots}\n showAwaySlots={showAwaySlots && canListSlots}\n showTeamNames={showTeamNames}\n showOfficeNames={showOfficeNames}\n showCondensedView={showCondensedView}\n showAvailabilties={showAvailabilties && canListAvailabilties}\n showViewToggle={showViewToggle}\n showSurfaceSizes={showSurfaceSizes}\n showRenumber={showRenumber}\n showExporter={showExporter}\n anchor={anchor}\n toggle={toggle}\n onClose={onClose}\n />\n : <ListSettingsMenu\n disableCalendar={disableCalendar}\n disableGroupRounds={disableGroupRounds}\n disableGroupArenas={disableGroupArenas}\n showGameInfoInput={showGameInfoInput}\n showFlagsInput={showFlagsInput}\n showAssignmentsInput={showAssignmentsInput}\n showRenumber={showRenumber}\n showExporter={showExporter}\n anchor={anchor}\n toggle={toggle}\n onClose={onClose}\n />}\n </>\n}\n","import { GET_LIST, useQuery } from \"react-admin\";\n\nexport const useScheduleSeeds = scheduleId => {\n const { data, loading, error, refetch } = useQuery({\n type: GET_LIST,\n resource: 'gameBrackets',\n payload: {\n filter: { 'game.scheduleId': scheduleId },\n } }, {\n enabled: scheduleId != null,\n })\n\n if (data?.[0]) return true\n\n return false\n}\n\nexport const useSeeds = gameId => {\n const { data, loading, error, refetch } = useQuery({\n type: GET_LIST,\n resource: 'gameBrackets',\n payload: {\n filter: { gameId },\n } }, {\n enabled: gameId != null,\n })\n\n return { data: data?.[0], loading, error, refetch }\n}\n","import React, { useEffect } from 'react';\nimport { useRecordContext, useTranslate } from 'react-admin';\nimport { Link, useHistory } from 'react-router-dom';\nimport { Dialog, DialogTitle, DialogActions, IconButton, Tooltip, makeStyles, useMediaQuery } from '@material-ui/core';\nimport { Launch, Close } from '@material-ui/icons';\n\nimport LoadingAlert from '../../common/LoadingAlert';\nimport { LazyBoundary } from '../../common/LazyBoundary';\nimport { useHttpClient } from '../../http';\n\nimport { AssignmentsProvider, useAssignmentsContext } from '../games/cards/OfficialsCard/AssignmentsContext';\nimport { AssignmentProvider } from '../games/cards/OfficialsCard/Assignment/AssignmentContext';\nimport OfficialDetails from '../games/cards/OfficialsCard/Assignment/OfficialDetails';\nimport AssignToolbar from '../games/cards/OfficialsCard/Assignment/AssignToolbar';\n\nconst Assignments = React.lazy(() => import('../games/cards/OfficialsCard'))\n\nconst useStyles = makeStyles(theme => ({\n buttons: {\n position: 'absolute',\n top: theme.spacing(1),\n right: theme.spacing(1),\n },\n quickAssignToolbar: {\n borderTop: `1px solid ${theme.palette.divider}`,\n textAlign: 'right',\n padding: 8,\n }\n}))\n\nconst useOfficialStatus = (gameId, participantId, enabled) =>\n useHttpClient(`/games/${gameId}/availableOfficials/${participantId}`, null, enabled)\n\nconst AssignmentDialogHeader = ({ gameId, onClose, title }) => {\n const translate = useTranslate();\n const classes = useStyles();\n\n return <>\n <DialogTitle>{title}</DialogTitle>\n <div className={classes.buttons}>\n <Tooltip title={translate('ra.action.open_full_page')}>\n <IconButton component={Link} to={`/games/${gameId}/show/officials`} onClick={onClose}>\n <Launch fontSize=\"small\" />\n </IconButton>\n </Tooltip>\n <Tooltip title={translate('ra.action.close')}>\n <IconButton onClick={onClose}>\n <Close fontSize=\"small\" />\n </IconButton>\n </Tooltip>\n </div>\n </>\n}\n\nconst QuickAssignmentBody = ({ game, selectedAssignment, selectedOfficial, onClose, onAssign }) => {\n const classes = useStyles();\n const translate = useTranslate();\n const { assignments = [] } = useAssignmentsContext();\n const {\n data: selectedOfficialWithFlags,\n loaded\n } = useOfficialStatus(game.id, selectedOfficial.participantId, !!game.id && !!selectedOfficial.participantId);\n\n const assignment = assignments.find(officialAssignment => officialAssignment?.id === selectedAssignment?.id) || selectedAssignment;\n const official = selectedOfficialWithFlags || selectedOfficial;\n\n const title = translate('resources.games.labels.quick_assign_dialog_title', {\n participantName: official?.participant?.fullName,\n position: translate(`resources.games.values.assignment.position.${assignment?.position}`),\n gameNumber: game.number,\n });\n\n if (!loaded) return <LoadingAlert square>{translate('resources.games.alerts.loading.assignments')}</LoadingAlert>\n\n return <>\n <AssignmentDialogHeader gameId={game.id} onClose={onClose} title={title} />\n <AssignmentProvider assignment={assignment} selectedOfficial={official}>\n <OfficialDetails />\n <AssignToolbar className={classes.quickAssignToolbar} onAssign={onAssign} quickAssign />\n </AssignmentProvider>\n </>\n}\n\nexport const QuickAssignmentDialog = ({ open, onClose, selectedAssignment, selectedOfficial, onAssign }) => {\n const game = useRecordContext();\n const isMobile = useMediaQuery(theme => theme.breakpoints.down('xs'));\n\n const onClick = e => e.stopPropagation();\n\n if (!game || !selectedAssignment) return null;\n\n return (\n <Dialog\n open={open}\n fullWidth\n fullScreen={isMobile}\n maxWidth={isMobile ? \"xs\" : \"md\"}\n onClick={onClick}\n onClose={onClose}\n >\n <AssignmentsProvider gameId={game.id}>\n <QuickAssignmentBody\n game={game}\n selectedAssignment={selectedAssignment}\n selectedOfficial={selectedOfficial}\n onClose={onClose}\n onAssign={onAssign}\n />\n </AssignmentsProvider>\n </Dialog>\n )\n}\n\nexport default ({ open, onClose, ...props }) => {\n const translate = useTranslate();\n const game = useRecordContext(props)\n const history = useHistory();\n const isMobile = useMediaQuery(theme => theme.breakpoints.down('xs'));\n\n const title = translate('resources.games.labels.game_number_officials', { number: game.number })\n\n useEffect(() => {\n return history.listen(() => {\n if (!open) return;\n onClose();\n })\n }, [history, onClose, open])\n\n if (!game) return null;\n\n const onClick = e => e.stopPropagation();\n return <Dialog\n open={open}\n fullWidth\n fullScreen={isMobile}\n maxWidth={isMobile ? \"xs\" : \"md\"}\n onClick={onClick}\n onClose={onClose}\n >\n <AssignmentDialogHeader gameId={game.id} onClose={onClose} title={title} />\n <LazyBoundary>\n <Assignments gameId={game.id} />\n </LazyBoundary>\n <DialogActions />\n </Dialog>\n}\n","import React, { useEffect } from 'react';\nimport { useRecordContext, useTranslate } from 'react-admin';\nimport { Dialog, DialogTitle, IconButton, Tooltip, makeStyles, useMediaQuery } from '@material-ui/core';\nimport { Close } from '@material-ui/icons';\nimport { useHistory } from 'react-router-dom';\n\nimport { ScoresheetProvider } from '../scoresheet/ScoresheetContext';\nimport { LazyBoundary } from '../../common/LazyBoundary';\n\nconst LineupCardBody = React.lazy(() => import('../scoresheet/lineup/LineupCard'))\n\nconst useStyles = makeStyles(theme => ({\n buttons: {\n position: 'absolute',\n top: theme.spacing(1),\n right: theme.spacing(1),\n }\n}))\n\nconst DialogHeader = ({ game, onClose }) => {\n const translate = useTranslate();\n const classes = useStyles();\n\n return <>\n <DialogTitle>\n {translate('resources.games.labels.game_number_lineup', { number: game.number })}\n </DialogTitle>\n <div className={classes.buttons}>\n <Tooltip title={translate('ra.action.close')}>\n <IconButton onClick={onClose}>\n <Close fontSize=\"small\" />\n </IconButton>\n </Tooltip>\n </div>\n </>\n}\n\nexport default ({ open, teamId, onClose }) => {\n const game = useRecordContext()\n const history = useHistory();\n const fullScreen = useMediaQuery(theme => theme.breakpoints.down('sm'));\n\n useEffect(() => {\n return history.listen(() => {\n if (!open) return;\n onClose();\n })\n }, [history, onClose, open])\n\n if (!game) return null;\n\n const onClick = e => e.stopPropagation();\n return <Dialog\n open={open}\n fullWidth\n fullScreen={fullScreen}\n maxWidth=\"sm\"\n onClick={onClick}\n onClose={onClose}\n disableBackdropClick\n >\n <DialogHeader game={game} onClose={onClose} />\n <LazyBoundary>\n <ScoresheetProvider gameId={game.id}>\n <LineupCardBody teamId={teamId} showCompleted />\n </ScoresheetProvider>\n </LazyBoundary>\n </Dialog>\n}\n","import React, { useEffect } from 'react';\nimport { useRecordContext, useTranslate } from 'react-admin';\nimport { DialogTitle, IconButton, Tooltip, makeStyles } from '@material-ui/core';\nimport { Close, Launch } from '@material-ui/icons';\nimport { Link, useHistory } from 'react-router-dom';\n\nimport { ScoresheetProvider } from '../scoresheet/ScoresheetContext';\nimport { CertificationModal } from '../scoresheet/certification/CertificationModal';\n\nconst useStyles = makeStyles(theme => ({\n buttons: {\n position: 'absolute',\n top: theme.spacing(1),\n right: theme.spacing(1),\n }\n}))\n\nconst DialogHeader = ({ game, onClose }) => {\n const translate = useTranslate();\n const classes = useStyles();\n\n return <>\n <DialogTitle>\n {translate('resources.games.labels.game_number_certify', { number: game.number })}\n </DialogTitle>\n <div className={classes.buttons}>\n <Tooltip title={translate('ra.action.open_full_page')}>\n <IconButton component={Link} to={`/games/${game.id}/show/scoresheet`} onClick={onClose}>\n <Launch fontSize=\"small\" />\n </IconButton>\n </Tooltip>\n <Tooltip title={translate('ra.action.close')}>\n <IconButton onClick={onClose}>\n <Close fontSize=\"small\" />\n </IconButton>\n </Tooltip>\n </div>\n </>\n}\n\nexport default ({ open, onClose }) => {\n const game = useRecordContext()\n const history = useHistory();\n\n useEffect(() => {\n return history.listen(() => {\n if (!open) return;\n onClose();\n })\n }, [history, onClose, open])\n\n if (!game) return null;\n\n const onClick = e => e.stopPropagation();\n\n return <ScoresheetProvider gameId={game.id}>\n <CertificationModal\n open={open}\n onClick={onClick}\n onClose={onClose}\n customHeader={<DialogHeader game={game} onClose={onClose} />}\n hideCancel\n />\n </ScoresheetProvider>\n}\n","import React, { Suspense, useState, useContext } from 'react';\nimport { RecordContextProvider } from 'react-admin';\nimport { useSelector } from 'react-redux';\n\nimport AssignmentsDialog from './AssignmentsDialog';\nimport LineupDialog from './LineupDialog';\nimport CertifyDialog from './CertifyDialog';\n\n// this is necessary to keep the dialog from disappearing on refresh\n// as <List> unmounts the GameGrid component and <Layout> is high enough to avoid this\n\nconst GameContext = React.createContext(null);\n\nexport const useGameContext = () => useContext(GameContext);\n\nexport default ({ children }) => {\n const [ state, setGame ] = useState(null);\n const onClose = () => setGame(null);\n\n const open = !!state;\n\n const { gameId, type, teamId } = state || {}\n const game = useSelector(state => gameId && state.admin.resources.games.data[gameId]);\n\n return <GameContext.Provider value={setGame}>\n {children}\n <RecordContextProvider value={game}>\n <Suspense fallback={() => null}>\n {game && type === 'assign' && <AssignmentsDialog open={open} onClose={onClose} />}\n {game && type === 'lineup' && <LineupDialog open={open} teamId={teamId} onClose={onClose} />}\n {game && type === 'certify' && <CertifyDialog open={open} onClose={onClose} />}\n </Suspense>\n </RecordContextProvider>\n </GameContext.Provider>\n}\n","import React, { useState } from 'react';\nimport { useSelector } from 'react-redux';\nimport { ReferenceField, useLocale, useRecordContext, useResourceContext, useTranslate } from 'react-admin';\nimport moment from 'moment-timezone';\nimport { IconButton, Tooltip, Badge, makeStyles, Button, Dialog, DialogTitle, List, ListItem, ListItemText, ListItemIcon, Chip, Typography, useMediaQuery } from '@material-ui/core';\nimport {\n AssignmentOutlined as AssignmentIcon,\n NotificationsOffOutlined as DraftIcon,\n AssignmentInd as SelfAssignmentIcon,\n Assignment as ScoresheetIcon,\n\n FlagOutlined as RequestedIcon,\n MoreHoriz as PendingIcon,\n Check as AssignedIcon,\n DoneAll as ConfirmedIcon,\n NotInterested as DeclinedIcon,\n LocationOff as NoShowIcon,\n\n People as LineupIcon,\n Check as CompleteIcon,\n Flag as CertifyIcon,\n} from '@material-ui/icons';\n\nimport FunctionField from '../../common/fields/FunctionField'\nimport { isAuthorized } from '../../common/Authorize';\n\nimport { TeamField } from '../teams/TeamField';\n\nimport { useGameContext } from './GameContext';\nimport { useIsHomeFirst } from '../events/EventViewSettings';\n\nconst getGameConflict = game => {\n if (game?.isApproved) return 'resources.games.messages.status.completed';\n switch (game.status) {\n case 'Conflict': return 'resources.games.messages.status.conflict';\n case 'Cancelled': return 'resources.games.messages.status.cancelled';\n case 'Postponed': return 'resources.games.messages.status.postponed';\n default: break;\n }\n}\n\nconst useBadgeStyles = makeStyles(theme => ({\n badge: {\n border: '2px solid #fff',\n maxWidth: '1em',\n '& > .MuiSvgIcon-root': {\n fontSize: '1.25em',\n color: 'white'\n },\n },\n colorSuccess: {\n backgroundColor: theme.palette.success.main,\n color: 'white',\n }\n}))\nconst IconBadge = ({ icon, badge, color = \"secondary\" }) => {\n const classes = useBadgeStyles();\n return <Badge overlap=\"circle\" anchorOrigin={{ vertical: 'bottom', horizontal: 'right' }} badgeContent={badge} color={badge ? color : undefined} classes={badge ? classes : undefined}>\n {icon}\n </Badge>\n}\n\nconst useStatusStyles = makeStyles(theme => ({\n root: {\n display: 'inline',\n textAlign: 'right',\n },\n}))\nconst StatusIcon = ({ title, disabled, onClick, ...icon }) => {\n const classes = useStatusStyles();\n const handleClick = e => {\n e.preventDefault();\n e.stopPropagation();\n if (disabled) return;\n if (typeof onClick === 'function') onClick();\n }\n\n return <div className={classes.root}>\n <Tooltip title={title}><span>\n <IconButton disabled={disabled} onClick={handleClick}>\n <IconBadge classes={{ badge: classes.badge }} {...icon} />\n </IconButton></span>\n </Tooltip>\n </div>\n}\n\nconst AssignStatus = ({ game, status }) => {\n const translate = useTranslate();\n const setGame = useGameContext();\n\n if (!status) return null;\n\n const openDialog = () => setGame({ gameId: game.id, type: 'assign' })\n\n const isActive = status?.status === 'Active';\n const isConflict = game && ['Cancelled', 'Conflict', 'Postponed'].includes(game.status);\n\n const R = translate(`resources.games.values.assignment.position_short.Referee`)\n const L = translate(`resources.games.values.assignment.position_short.Linesperson`)\n\n const tooltip = [];\n if (isActive) {\n tooltip.push(`${status.referees}${R}/${status.linespersons}${L} ${translate('resources.games.labels.assignment.status.confirmed').toLowerCase()}.`)\n } else {\n tooltip.push(`${status.status}.`)\n }\n\n const selfIcon = <SelfAssignmentIcon />\n const assignmentIcon = isActive ? <AssignmentIcon /> : <DraftIcon />\n\n if (status.self === 'requested' && !status.allAssigned) return <StatusIcon title={translate('resources.games.notifications.assignment.status.assignee.requested')} icon={assignmentIcon} badge={<RequestedIcon />} onClick={openDialog} />\n if (status.self === 'assigned') return <StatusIcon title={translate('resources.games.notifications.assignment.status.assignee.pending')} icon={selfIcon} badge=\"!\" onClick={openDialog} />\n if (status.self === 'confirmed') return <StatusIcon title={translate('resources.games.notifications.assignment.status.assignee.confirmed')} icon={selfIcon} badge={<AssignedIcon />} color=\"success\" onClick={openDialog} />\n if (status.self === 'declined') return <StatusIcon title={translate('resources.games.notifications.assignment.status.assignee.declined')} icon={selfIcon} badge={<DeclinedIcon />} color=\"error\" onClick={openDialog} />\n if (status.self === 'no-show') return <StatusIcon title={translate('resources.games.labels.assignment.status.no_show')} icon={selfIcon} badge={<NoShowIcon />} color=\"error\" onClick={openDialog} />\n\n const canAssign = isAuthorized(game, 'games', 'assign')\n if (isConflict && !canAssign) return <StatusIcon title={`Officials - ${translate(getGameConflict(game))}`} icon={assignmentIcon} disabled />;\n\n if (canAssign && status.declined > 0) {\n tooltip.unshift(`${status.declined} ${translate('resources.games.labels.assignment.status.declined').toLowerCase()}.`)\n return <StatusIcon title={tooltip.join('\\n')} icon={assignmentIcon} badge={<DeclinedIcon />} color=\"error\" onClick={openDialog} />\n }\n\n if (status.allConfirmed) return <StatusIcon title={translate('resources.games.messages.assignment.all_assignments_confirmed')} icon={assignmentIcon} badge={<ConfirmedIcon />} color=\"success\" onClick={openDialog} />\n\n if (status.allAssigned) {\n tooltip.unshift(`${status.pending} ${translate('resources.games.labels.assignment.status.pending').toLowerCase()}.`)\n const badge = isActive ? <AssignedIcon /> : <PendingIcon />\n return <StatusIcon title={tooltip.join('\\n')} icon={assignmentIcon} badge={badge} onClick={openDialog} />\n }\n\n const isUnassigned = !Number(status.referees) && !Number(status.linespersons) && !Number(status.supervisors)\n if (isConflict && isUnassigned) return <StatusIcon title={`${translate('resources.officials.name', 2)} - ${translate(getGameConflict(game))}`} icon={assignmentIcon} disabled />\n\n if (canAssign && status.requests > 0) {\n tooltip.unshift(`${status.unassigned} ${translate('resources.games.labels.assignment.unassigned').toLowerCase()} - ${status.requests} ${translate('resources.games.labels.assignment.status.requested').toLowerCase()}.`)\n } else {\n tooltip.unshift(`${status.unassigned} ${translate('resources.games.labels.assignment.unassigned').toLowerCase()}.`)\n }\n\n return <StatusIcon title={tooltip.join('\\n')} icon={assignmentIcon} badge={status.unassigned} onClick={openDialog} />\n}\n\nconst TeamSelectDialog = ({ status, teamIds, onClose }) => {\n const translate = useTranslate();\n const handleClose = (e, teamId) => {\n e.preventDefault();\n e.stopPropagation();\n onClose(teamId)\n }\n\n return <Dialog open fullWidth maxWidth=\"sm\" onClose={e => handleClose(e)}>\n <DialogTitle>{translate('resources.games.labels.select_team')}</DialogTitle>\n <List>\n {teamIds.map(teamId => {\n const approved = status[teamId]?.approved;\n const badge = approved ? <CompleteIcon /> : '!';\n const color = approved ? 'success' : 'secondary'\n return <ListItem button onClick={e => handleClose(e, teamId)} key={teamId}>\n <ListItemIcon>\n <IconBadge icon={<LineupIcon />} badge={badge} color={color} />\n </ListItemIcon>\n <ListItemText primary={<TeamField record={{ id: teamId }} source=\"id\" link={false} />} />\n </ListItem>\n })}\n </List>\n </Dialog>\n}\n\nconst LineupStatus = ({ game, status }) => {\n const translate = useTranslate();\n const setGame = useGameContext();\n const [ dialogOpen, setDialogOpen ] = useState(null)\n if (!status) return null;\n\n const conflict = getGameConflict(game);\n if (conflict) return <StatusIcon title={`${translate('resources.games.labels.lineup.name')} - ${translate(conflict)}`} icon={<LineupIcon />} disabled />\n\n const teamIds = Object.keys(status).map(teamId => parseInt(teamId, 10));\n const approved = teamIds.map(teamId => status[teamId]).every(lineup => lineup.approved);\n\n const openDialog = teamId => {\n if (dialogOpen) setDialogOpen(false);\n if (!teamId) return;\n setGame({ gameId: game.id, type: 'lineup', teamId })\n }\n\n const handleClick = () => {\n if (teamIds.length === 1) return openDialog(teamIds[0]);\n setDialogOpen(true)\n }\n\n let button;\n const upcoming = moment().isSameOrAfter(moment.tz(game.startTime, game.timezone).subtract(2, 'days'), 'day') && moment().isBefore(moment.tz(game.endTime, game.timezone).endOf('day'), 'hour')\n if (approved) {\n button = <StatusIcon title={translate('resources.games.labels.lineup.approved')} icon={<LineupIcon />} badge={<CompleteIcon />} color=\"success\" onClick={handleClick} />\n } else if (upcoming) {\n button = <StatusIcon title={translate('resources.games.labels.lineup.incomplete')} icon={<LineupIcon />} badge=\"!\" onClick={handleClick} />\n } else {\n button = <StatusIcon title={translate('resources.games.labels.lineup.game')} icon={<LineupIcon />} onClick={handleClick} />\n }\n\n return <>\n {button}\n {dialogOpen && <TeamSelectDialog status={status} teamIds={teamIds} onClose={openDialog} />}\n </>\n}\n\nexport const ReportButton = ({ label = \"resources.reports.name\", ...props }) => {\n const game = useRecordContext(props);\n const locale = useLocale();\n const translate = useTranslate()\n\n if (!game?.isApproved) return null;\n return <Button color=\"primary\" variant=\"contained\" size=\"small\" startIcon={<ScoresheetIcon fontSize=\"small\" />} href={`${process.env.PDF_URL}/game/${game.id}?locale=${locale}`} target=\"_blank\" onClick={e => e.stopPropagation()}>\n {translate(label, { _: label, smart_count: 1 })}\n </Button>\n}\n\nconst Forfeit = ({ teamId }) => {\n const translate = useTranslate();\n const team = useSelector(store => store.admin.resources.teams.data[teamId]) || {};\n const { name: teamName } = team;\n\n const tooltipTitle = translate('resources.games.tooltips.forfeited', { team: teamName });\n\n return (\n <Tooltip title={teamName ? tooltipTitle : ''}>\n <Typography variant=\"overline\" style={{ fontWeight: 'bold' }}>\n {translate('resources.games.values.status.Forfeited')}\n </Typography>\n </Tooltip>\n );\n};\n\nconst Score = ({ score }) => {\n const isHomeFirst = useIsHomeFirst();\n const homeScore = score?.home;\n const awayScore = score?.away;\n\n const scores = isHomeFirst ? [homeScore, awayScore] : [awayScore, homeScore];\n\n if (homeScore == null || awayScore == null) return null;\n return <Typography variant=\"overline\" style={{ minWidth: 'max-content', fontWeight: 'bold' }}>\n {score?.forfeit ? <Forfeit teamId={score.forfeit} /> : `${scores[0]} - ${scores[1]}`}\n </Typography>\n}\n\nconst CertifyStatus = ({ flags = [], ...props }) => {\n const game = useRecordContext()\n const translate = useTranslate()\n const setGame = useGameContext();\n\n const openDialog = () => setGame({ gameId: game.id, type: 'certify' })\n\n const badge = flags.length > 0 ? '!' : <CompleteIcon />\n const color = flags.length > 0 ? 'error' : 'secondary'\n\n return <StatusIcon title={translate('resources.games.labels.certify_game')} icon={<CertifyIcon />} badge={badge} color={color} onClick={openDialog} />\n}\n\nconst useFieldStyles = makeStyles(theme => ({\n root: {\n display: 'flex',\n justifyContent: 'flex-end',\n alignItems: 'center',\n gap: props => props.isCertify ? theme.spacing(1) : theme.spacing(2),\n [theme.breakpoints.down('sm')]: {\n alignItems: 'flex-end',\n flexDirection: 'column',\n gap: 0,\n }\n },\n}))\n\nexport const StatusField = props => {\n const game = useRecordContext(props);\n const classes = useFieldStyles();\n const translate = useTranslate();\n\n if (!game) return null;\n if (!['Cancelled', 'Conflict', 'Postponed'].includes(game.status)) return null;\n return <span className={classes.root}>\n <Chip label={translate(`resources.games.values.status.${game.status}`, { _: game.status })} size=\"small\" color=\"secondary\" />\n </span>\n}\n\nconst CertifyField = ({ score, flags, ...props }) => {\n const classes = useFieldStyles({ isCertify: true });\n\n return <div className={classes.root}>\n <Score score={score} />\n <CertifyStatus flags={flags} {...props} />\n </div>\n}\n\nconst ReportField = ({ score, ...props }) => {\n const translate = useTranslate();\n const classes = useFieldStyles();\n const isMobile = useMediaQuery(theme => theme.breakpoints.down('xs'));\n\n return <div className={classes.root}>\n <Score score={score} />\n {!isMobile && <ReportButton {...props} label={translate('resources.reports.name', 1)} />}\n </div>\n}\n\nexport const GameStatusField = props => {\n const game = useRecordContext(props);\n const resource = useResourceContext(props)\n const translate = useTranslate();\n const classes = useFieldStyles();\n\n if (!game) return null;\n\n if (resource !== 'games' || (game.type && game.type !== 'Game')) return null;\n return <ReferenceField {...props} basePath=\"/gameStatuses\" source=\"id\" resource=\"gameStatuses\" reference=\"gameStatuses\" link={false}>\n <FunctionField render={({ lineups, officials, flags, requireCertification, score }) => {\n if (['Cancelled', 'Conflict', 'Postponed'].includes(game.status)) {\n return <StatusField {...props} />\n }\n if (game.isApproved) {\n if (flags && !game.isCertified && requireCertification) {\n return <CertifyField score={score} flags={flags} {...props} />\n }\n\n return <ReportField score={score} {...props} />\n }\n\n return <span className={classes.root}>\n <LineupStatus game={game} status={lineups} />\n <AssignStatus game={game} status={officials} />\n </span>\n }\n } />\n </ReferenceField>\n}\n","import React, { useContext, useMemo, useState } from 'react';\n\nconst GameAvailabilityContext = React.createContext();\n\nexport const useGameAvailabilityContext = () => useContext(GameAvailabilityContext);\n\nexport const GameAvailabilityContextProvider = ({ children }) => {\n const availabilityInfo = useState({});\n const settings = useState({});\n const slot = useState(null);\n const loading = useState(false);\n\n const context = useMemo(() => ({\n availabilityInfo,\n settings,\n slot,\n loading\n }), [ availabilityInfo, settings, slot, loading ])\n\n return <GameAvailabilityContext.Provider value={context}>\n {children}\n </GameAvailabilityContext.Provider>\n}\n","import React, { useEffect } from 'react';\nimport { RecordContextProvider, useRecordContext, useTranslate } from 'react-admin';\nimport { useSelector } from 'react-redux';\nimport { Accordion, AccordionDetails, AccordionSummary, Typography, List, ListItem, ListItemIcon, ListItemText, ListSubheader, makeStyles, Badge, styled, Grid, Tooltip, LinearProgress } from '@material-ui/core';\nimport { ExpandMore, Check as AvailableIcon, Clear as UnavailableIcon, PeopleOutline, PlaceOutlined, LockOutlined, ReportProblemOutlined, Schedule, Check, ErrorOutline as Warning } from '@material-ui/icons';\nimport { useForm, useFormState } from 'react-final-form';\nimport moment from 'moment-timezone';\nimport { sortBy } from 'lodash';\n\nimport { FF_DRAFT_GAMES } from '@hisports/common/featureFlags';\nimport { createRange, isSameTime } from '@hisports/common';\nimport { isEmpty } from '@hisports/parsers';\n\nimport { apiClient, useFlag } from '../../http';\nimport { GameDetailsPopover, PracticeDetailsPopover, SlotDetailsPopover } from '../../common/calendar/EventDetailsPopover';\nimport { isDraft, isDraftGameType, isGame, isPractice } from '../../common/calendar/EventDetails';\nimport TimeRangeField from '../../common/fields/TimeRangeField';\nimport { useCalendarContext } from '../../common/calendar/CalendarContext';\n\nimport { CALENDAR_VIEWS } from '../events/EventViewSettings';\nimport { TargetField } from '../targets/TargetField';\nimport { OfficeField } from '../offices/OfficeField';\nimport { TargetTypeField } from '../targets/TargetTypeField';\nimport { SurfaceField } from '../surfaces/SurfaceField';\nimport { TeamField } from '../teams/TeamField';\nimport { TeamsField } from '../teams/TeamsField';\nimport { useScheduleSettingsWithStore } from '../scheduleSettings';\nimport { useSlotsInUse } from '../arenaslots/useSlotsInUse';\n\nimport { useGameAvailabilityContext } from './GameAvailabilityContext';\n\nconst CONFLICT_TYPES = {\n surface: 'Surface',\n team: 'Team',\n}\n\nconst isSurfaceConflict = ({ conflictTypes }) => {\n if (!conflictTypes?.length) return false;\n return conflictTypes.includes(CONFLICT_TYPES.surface);\n}\n\nconst isTeamConflict = ({ conflictTypes }) => {\n if (!conflictTypes?.length) return false;\n return conflictTypes.includes(CONFLICT_TYPES.team);\n}\n\nexport const isTournamentConflict = ({ schedule }) => {\n if (!schedule) return false;\n return schedule.type == 'Tournament';\n}\n\nexport const draftLabel = (isEnabled, translate, gameType) => {\n if (!isEnabled(FF_DRAFT_GAMES)) return translate('resources.drafts.name');\n return translate(`resources.drafts.${gameType === 'Draft' ? 'name_legacy' : 'name'}`, 1)\n}\n\nexport const isSlotInUse = (slotsInUse, slotId, record) => {\n const slotOverlaps = slotsInUse?.[slotId];\n if (!slotOverlaps?.length) return false;\n\n // ignore own record overlap\n return slotOverlaps.some(overlap => {\n if (!record) return true;\n if (isDraft(overlap) && isDraft(record) && overlap.id === record.id) return false;\n if (isGame(overlap) && isGame(record) && overlap.id === record.id) return false;\n if (isPractice(overlap) && isPractice(record) && overlap.id === record.id) return false;\n return true;\n });\n}\n\nconst useAvailabilityContext = (game, draftId, enabled) => {\n const { batch, change } = useForm();\n const { type } = useCalendarContext();\n const {\n availabilityInfo: [ gameAvailabilities, setAvailabilities ],\n settings: [ settings, setSettings ],\n slot: [ selectedSlot, setSelectedSlot ],\n loading: [ isLoading, setLoading ]\n } = useGameAvailabilityContext();\n\n const { date, startTime, endTime, timezone, categoryId, homeTeamId, awayTeamId, arenaId, officeId, id: gameId, scheduleId, number, updatedGameId } = game;\n const { data: scheduleSettings, loading: scheduleSettingsLoading } = useScheduleSettingsWithStore(scheduleId, enabled)\n\n useEffect(() => {\n if (!enabled) return;\n\n setLoading(true);\n apiClient('/games/availabilities', {\n method: 'GET',\n params: {\n date,\n startTime,\n endTime,\n timezone,\n categoryId,\n homeTeamId,\n awayTeamId,\n arenaId,\n officeId,\n gameId,\n scheduleId,\n draftId,\n number,\n updatedGameId,\n homeSlotsOnly: [CALENDAR_VIEWS.SEASON, CALENDAR_VIEWS.MONTH].includes(type),\n }\n })\n .then(res => res.data)\n .then(data => setAvailabilities(data))\n .finally(() => setLoading(false))\n }, [enabled, date, startTime, endTime, timezone, categoryId, homeTeamId, awayTeamId, arenaId, officeId, gameId, scheduleId, draftId, number, setAvailabilities, setLoading, updatedGameId, type])\n\n useEffect(() => {\n if (!enabled || !scheduleId || !scheduleSettings || scheduleSettingsLoading) return;\n\n setSettings(scheduleSettings)\n }, [ enabled, scheduleSettings, scheduleSettingsLoading, setSettings, scheduleId ])\n\n useEffect(() => {\n if (!gameAvailabilities?.slots?.length) return setSelectedSlot(null);\n\n const overlap = gameAvailabilities.slots.find(slot => moment.tz(startTime, timezone).isBetween(moment.tz(slot.startTime, slot.timezone), moment.tz(slot.endTime, slot.timezone), 'minutes', '[)') && arenaId == slot.arenaId)\n if (overlap) {\n batch(() => {\n change('startTime', overlap.startTime)\n change('endTime', overlap.endTime)\n change('timezone', overlap.timezone)\n })\n return setSelectedSlot(overlap)\n }\n\n const selected = gameAvailabilities.slots.find(slot => isSameTime(slot, game))\n if (!selected) {\n return setSelectedSlot(null)\n }\n setSelectedSlot(selected)\n }, [batch, change, gameAvailabilities.slots, setSelectedSlot, game, startTime, endTime, timezone, arenaId])\n\n return gameAvailabilities;\n}\n\nexport const useAvailabilities = game => {\n const { availabilityInfo: [ gameAvailabilities ], settings: [ settings ] } = useGameAvailabilityContext();\n\n const availabilities = gameAvailabilities?.availabilities || [];\n const conflicts = gameAvailabilities?.conflicts || [];\n const constraints = gameAvailabilities?.constraints || [];\n const slots = gameAvailabilities?.slots || [];\n\n let timeAvailabilities = []\n const eventRange = createRange(moment.tz(game.startTime, game.timezone), moment.tz(game.endTime, game.timezone))\n if (availabilities) {\n timeAvailabilities = availabilities.filter(availability => {\n const availabilityRange = createRange(moment.tz(availability.startTime, availability.timezone), moment.tz(availability.endTime, availability.timezone));\n return availabilityRange.overlaps(eventRange)\n })\n\n timeAvailabilities = sortBy(timeAvailabilities, ({ targetType }) => {\n if (targetType === 'Surface') return 1;\n if (targetType === 'Team') return 2;\n if (targetType === 'Office') return 3;\n return 3;\n })\n }\n\n if (constraints) {\n constraints.sort((a, b) => moment(a.date) - moment(b.date));\n }\n\n return {\n availabilities: timeAvailabilities,\n conflicts,\n constraints,\n slots,\n settings,\n };\n}\n\nexport const GameAvailabilityInfo = ({ draftId, ...props }) => {\n const { values: game, errors } = useFormState();\n const hasTimeslotError = Object.keys(errors).includes('timeslot');\n const hasErrors = Object.keys(errors).some(key => key !== 'status') && !hasTimeslotError;\n const enabled = game.date != null && !hasErrors;\n\n const data = useAvailabilityContext(game, draftId, enabled);\n const { availabilities, conflicts, constraints, slots } = useAvailabilities(game);\n if (isEmpty(data)) return null;\n\n if (!enabled || (!availabilities.length && !conflicts.length && !constraints.length && !slots.length)) return null;\n\n return <Grid item xs={12}>\n <AvailabilityDetails availabilities={availabilities} conflicts={conflicts} constraints={constraints} slots={slots} />\n </Grid>\n}\n\nconst useStyles = makeStyles(theme => ({\n icon: {\n marginRight: theme.spacing(1),\n },\n conflicted: {\n border: `${theme.spacing(.25)}px solid ${theme.palette.error.dark}`,\n },\n conflicted_info: {\n border: `${theme.spacing(.25)}px solid ${theme.palette.secondary.light}`,\n },\n details: {\n overflowX: 'auto', // allow horizontal scroll in small dialogs\n padding: theme.spacing(0, 3, 2, 3),\n [theme.breakpoints.down('sm')]: {\n flexDirection: 'column',\n }\n }\n}))\n\nexport const AvailabilityDetails = ({ availabilities = [], conflicts = [], constraints = [], slots = [] }) => {\n const { values } = useFormState();\n const schedules = useSelector(store => store.admin.resources.schedules.data);\n const schedule = schedules[values.scheduleId];\n const classes = useStyles();\n const translate = useTranslate();\n\n const available = availabilities.filter(availability => availability.isAvailable);\n const unavailable = availabilities.filter(availability => !availability.isAvailable);\n\n const allAvailable = availabilities.every(availability => availability.isAvailable);\n const onlyAvailable = allAvailable && !conflicts.length && !constraints.length;\n const onlySlots = slots.length && !conflicts.length && !constraints.length;\n\n const teamConflicts = conflicts.filter(conflict => isTeamConflict(conflict));\n const surfaceConflicts = conflicts.filter(conflict => isSurfaceConflict(conflict));\n const conflictTotal = [...teamConflicts, ...surfaceConflicts, ...constraints].length;\n const hasConflicts = unavailable.length > 0 || conflictTotal > 0;\n\n const isTournamentSchedule = schedule && schedule.type == 'Tournament';\n const tournamentConflicts = conflicts.filter(conflict => isTournamentConflict(conflict));\n const warningConflict = isTournamentSchedule && isEmpty(tournamentConflicts);\n const conflictAccordionStyle = warningConflict ? classes.conflicted_info : classes.conflicted;\n\n let Icon = Schedule\n if (!onlySlots && onlyAvailable) Icon = AvailableIcon\n if (!onlySlots && !onlyAvailable) Icon = warningConflict ? Warning : UnavailableIcon\n\n const title = []\n if (availabilities.length) title.push(translate(`resources.availabilities.labels.${onlyAvailable ? 'available' : 'unavailable'}`))\n if (slots.length) title.push(translate('resources.availabilities.labels.slots'))\n if (conflictTotal > 0) title.push(translate('resources.availabilities.labels.conflicts', { smart_count: conflictTotal }));\n\n return <Accordion classes={{ root: hasConflicts && conflictAccordionStyle }}>\n <AccordionSummary expandIcon={<ExpandMore />}>\n <Icon fontSize=\"small\" className={classes.icon} />\n <Typography variant=\"subtitle2\">{title.join(', ')}</Typography>\n </AccordionSummary>\n <AccordionDetails classes={{ root: classes.details }}>\n <AvailabilityList unavailabilities={unavailable} availabilities={available} />\n <SlotsList slots={slots} />\n <ConflictList teamConflicts={teamConflicts} surfaceConflicts={surfaceConflicts} />\n <ConstraintList constraints={constraints} />\n </AccordionDetails>\n </Accordion>\n}\n\nexport const AvailabilityList = ({ unavailabilities, availabilities }) => {\n const translate = useTranslate();\n if (!unavailabilities.length && !availabilities.length) return null;\n return <List dense disablePadding>\n {unavailabilities.length > 0 && <ListSubheader disableGutters>{translate('resources.availabilities.labels.unavailable')}</ListSubheader>}\n {unavailabilities.map(unavailability => <RecordContextProvider value={unavailability} key={unavailability.id}>\n <AvailabilityItem />\n </RecordContextProvider>)}\n {availabilities.length > 0 && <ListSubheader disableGutters>{translate('resources.availabilities.labels.available')}</ListSubheader>}\n {availabilities.map(availability => <RecordContextProvider value={availability} key={availability.id}>\n <AvailabilityItem />\n </RecordContextProvider>)}\n </List>\n}\n\nconst SlotsList = ({ slots = [] }) => {\n const translate = useTranslate();\n const classes = useItemStyles();\n const { batch, change } = useForm();\n const { slot } = useGameAvailabilityContext() || {};\n const [ selectedSlot, setSelectedSlot ] = slot || [];\n const record = useRecordContext();\n const { data: slotsInUse, loading, error } = useSlotsInUse(slots.map(slot => slot.id))\n\n const handleChange = slot => {\n if (!slot) return;\n\n if (\n record?.startTime == slot.startTime &&\n record?.endTime == slot.endTime &&\n record?.timezone == slot.timezone &&\n record?.arenaId == slot.arenaId\n ) {\n // clear if selecting same slot\n setSelectedSlot(null);\n batch(() => {\n change('arenaId', null)\n change('startTime', null)\n change('endTime', null)\n change('timezone', null)\n })\n } else {\n setSelectedSlot(slot);\n batch(() => {\n const { startTime, endTime, timezone, arenaId } = slot;\n change('arenaId', arenaId)\n change('startTime', startTime)\n change('endTime', endTime)\n change('timezone', timezone)\n })\n }\n }\n\n if (!slots?.length) return null;\n return <List dense disablePadding>\n <ListSubheader disableGutters>{translate('resources.availabilities.labels.slots')}</ListSubheader>\n {loading ?\n <LinearProgress className={classes.loading} />\n :\n slots.map(slot => {\n return <RecordContextProvider value={slot} key={slot.id}>\n <SlotItem isSelected={selectedSlot?.id === slot?.id} handleChange={handleChange} isInUse={isSlotInUse(slotsInUse, slot.id, record)} />\n </RecordContextProvider>\n })\n }\n </List>\n}\n\nconst ConflictList = ({ teamConflicts, surfaceConflicts }) => {\n const translate = useTranslate();\n if (!teamConflicts.length && !surfaceConflicts.length) return null;\n return <List dense disablePadding>\n {surfaceConflicts.length > 0 && <ListSubheader disableGutters>{translate('resources.availabilities.labels.surface_conflicts')}</ListSubheader>}\n {surfaceConflicts.map(conflict => <RecordContextProvider value={conflict} key={conflict.id}>\n <ConflictItem type=\"arena\" />\n </RecordContextProvider>)}\n {teamConflicts.length > 0 && <ListSubheader disableGutters>{translate('resources.availabilities.labels.team_conflicts')}</ListSubheader>}\n {teamConflicts.map(conflict => <RecordContextProvider value={conflict} key={conflict.id}>\n <ConflictItem type=\"team\" />\n </RecordContextProvider>)}\n </List>\n}\n\nconst ConstraintList = ({ constraints }) => {\n const translate = useTranslate();\n if (!constraints.length) return null;\n return <List dense disablePadding>\n {constraints.length > 0 && <ListSubheader disableGutters>{translate('resources.availabilities.labels.constraints')}</ListSubheader>}\n {constraints.map(constraint => <RecordContextProvider value={constraint} key={constraint.id}>\n <ConstraintItem />\n </RecordContextProvider>)}\n </List>\n}\n\nconst useItemStyles = makeStyles(theme => ({\n icon: {\n alignSelf: 'start',\n paddingTop: theme.spacing(1.5),\n },\n notes: {\n whiteSpace: 'pre',\n padding: theme.spacing(.5, 1),\n },\n badge: {\n top: 'initial',\n left: 'initial',\n right: 'initial',\n transform: 'scale(1) translate(250%, 250%)',\n transition: 'none'\n },\n selectedBadge: {\n top: 'initial',\n left: 'initial',\n right: 'initial',\n transform: 'scale(1) translate(50%, 50%)',\n transition: 'none'\n },\n conflictItem: {\n cursor: 'pointer',\n },\n slotItem: {\n cursor: props => !props?.readOnly ? 'pointer' : null,\n '&:hover': {\n backgroundColor: props => !props?.readOnly ? theme.palette.action.hover : null,\n borderRadius: 4\n },\n '&:active': {\n backgroundColor: props => !props?.readOnly ? theme.palette.action.selected : null,\n borderRadius: 4,\n }\n },\n loading: {\n minWidth: theme.spacing(24)\n }\n}))\n\nconst styleIcon = Icon => styled(Icon)({\n fontSize: '1.5em',\n marginRight: '-1em',\n verticalAlign: 'middle',\n})\n\nconst WarningIcon = styled(ReportProblemOutlined)({\n position: 'relative',\n top: 3,\n left: 4,\n fontSize: '1rem',\n})\n\nconst TeamIcon = styleIcon(PeopleOutline)\nconst ArenaIcon = styleIcon(PlaceOutlined)\nconst ConstraintIcon = styleIcon(LockOutlined)\nconst SlotIcon = styleIcon(Schedule)\nconst SelectedIcon = styleIcon(Check)\n\nconst AvailabilityItem = () => {\n const classes = useItemStyles();\n const translate = useTranslate();\n const { startTime, endTime, timezone, isAvailable, targetType, notes, isPrimary } = useRecordContext();\n const start = moment.tz(startTime, timezone).format('HH:mm')\n const end = moment.tz(endTime, timezone).format('HH:mm z')\n const color = isAvailable ? \"primary\" : \"error\";\n\n const secondary = [\n `${start} - ${end}`,\n ]\n if (targetType === 'Surface') {\n secondary.unshift(<>\n <OfficeField source=\"officeId\" link={false} />\n {isPrimary && <> ({translate('resources.arenaoffices.fields.isPrimary')})</>}\n </>)\n }\n if (notes) secondary.push(<div className={classes.notes}>{notes}</div>)\n\n return <ListItem dense>\n <ListItemIcon classes={{ root: classes.icon }}>\n <Badge color={color} badgeContent=\" \" variant=\"dot\" classes={{ badge: classes.badge }}>\n <TargetTypeField source=\"targetType\" fontSize=\"large\" />\n </Badge>\n </ListItemIcon>\n <ListItemText\n primary={<TargetField source=\"targetId\" includeSeason={false} link={false} />}\n secondary={secondary}\n />\n </ListItem>\n}\n\nexport const SlotItem = ({ isSelected, handleChange, readOnly = false, isInUse = false }) => {\n const translate = useTranslate();\n const classes = useItemStyles({ readOnly });\n const slot = useRecordContext();\n const isRestricted = slot?.restrictions?.length;\n const color = isSelected ? 'default' : (isRestricted || isInUse) ? 'error' : 'primary';\n\n const secondary = [<TimeRangeField startSource=\"startTime\" endSource=\"endTime\" label=\"ra.date.time\" />];\n\n if (isRestricted) {\n secondary.push(<br />, <Typography variant=\"p\">{`${translate('resources.arenaslots.labels.restricted')}: `}</Typography>);\n const restrictions = slot.restrictions.map(restriction => translate(`resources.arenaslots.labels.${restriction}`));\n secondary.push(<Typography variant=\"p\">{restrictions.join(', ')}</Typography>);\n }\n\n return <ListItem dense onClick={!readOnly ? () => handleChange(slot) : null} className={classes.slotItem}>\n <ListItemIcon classes={{ root: classes.icon }}>\n <Badge\n color={color}\n badgeContent={isSelected ? <SelectedIcon color={(isRestricted || isInUse) ? 'error' : 'primary'} fontSize=\"large\" /> : \" \"}\n variant={isSelected ? 'standard' : 'dot'}\n classes={{ badge: isSelected ? classes.selectedBadge : classes.badge }}\n >\n <SlotIcon fontSize=\"large\" />\n </Badge>\n </ListItemIcon>\n <ListItemText\n primary={<SurfaceField source=\"arenaId\" link={false} />}\n secondary={secondary}\n />\n </ListItem>\n}\n\nconst ConflictItem = ({ type }) => {\n const translate = useTranslate();\n const classes = useItemStyles();\n const isEnabled = useFlag();\n const { id, startTime, endTime, timezone, number, name, resource: conflictResource, teamIds, homeTeamId, awayTeamId, type: gameType, schedule } = useRecordContext();\n\n const start = moment.tz(startTime, timezone).format('HH:mm')\n const end = moment.tz(endTime, timezone).format('HH:mm z')\n\n const icon = type === \"arena\" ? <ArenaIcon fontSize=\"large\" /> : <TeamIcon fontSize=\"large\" />\n let PopoverComponent = null;\n let title;\n switch (conflictResource) {\n case 'practices':\n title = `${translate('resources.practices.name', 1)}${name ? `: ${name}` : ''}`;\n PopoverComponent = PracticeDetailsPopover;\n break;\n case 'arenaslots':\n title = `${translate('resources.arenaslots.name', 1)}${name ? `: ${name}` : ''}`;\n PopoverComponent = SlotDetailsPopover;\n break;\n case 'games':\n default:\n title = `${number != null ? number : id}${isDraftGameType(gameType) ? ` (${draftLabel(isEnabled, translate, gameType)})` : ''}`;\n PopoverComponent = GameDetailsPopover;\n break;\n }\n\n const secondary = [\n `${start} - ${end}`,\n ]\n if (type === \"arena\") secondary.unshift(<SurfaceField source=\"arenaId\" link={false} />, <br />)\n if (type === \"team\") {\n if (teamIds) {\n secondary.unshift(<TeamsField source=\"teamIds\" link={false} />, <br />)\n } else {\n if (homeTeamId) {\n secondary.unshift(<TeamField source=\"homeTeamId\" link={false} />, <br />)\n }\n if (awayTeamId) {\n secondary.unshift(<TeamField source=\"awayTeamId\" link={false} />, <br />)\n }\n }\n }\n if (schedule) {\n secondary.unshift(translate(`resources.schedules.values.type.${schedule.type}`), <br />)\n }\n\n return <PopoverComponent isEditable={false} disableLaunch popRight>\n {(onClick) => {\n return <ListItem onClick={onClick} className={classes.conflictItem} dense>\n <ListItemIcon classes={{ root: classes.icon }}>\n <Badge color=\"error\" badgeContent=\" \" variant=\"dot\" classes={{ badge: classes.badge }} >\n {icon}\n </Badge>\n </ListItemIcon>\n <ListItemText\n primary={<Typography variant=\"body2\" display=\"inline\">{title}</Typography>}\n secondary={secondary}\n />\n </ListItem>\n }}\n </PopoverComponent>\n}\n\nconst ConstraintItem = () => {\n const classes = useItemStyles();\n const translate = useTranslate();\n const isEnabled = useFlag();\n const { date, number, id, constraint: { limit, period }, type } = useRecordContext();\n\n const title = `${number != null ? number : id}${isDraftGameType(type) ? ` (${draftLabel(isEnabled, translate, type)})` : ''}`\n const info = `${translate('resources.schedulingConstraints.helpers.limit', { smart_count: limit })} ${translate('resources.schedulingConstraints.helpers.period', { smart_count: period })}`\n const primary = [\n <Typography variant=\"body2\" display=\"inline\">{title}</Typography>,\n <Tooltip title={<Typography variant=\"body2\" display=\"inline\">{info}</Typography>}>\n <WarningIcon />\n </Tooltip>]\n\n const secondary = [\n <TeamField source=\"constraint.teamId\" link={false} />,\n <Typography variant=\"body2\">{date}</Typography>\n ]\n\n return <ListItem dense>\n <ListItemIcon classes={{ root: classes.icon }}>\n <Badge color=\"error\" badgeContent=\" \" variant=\"dot\" classes={{ badge: classes.badge }} >\n <ConstraintIcon fontSize=\"large\" />\n </Badge>\n </ListItemIcon>\n <ListItemText\n primary={primary}\n secondary={secondary}\n />\n </ListItem>\n}\n","import React from 'react';\nimport { FunctionField, ReferenceField, useRecordContext } from 'react-admin';\nimport { Typography } from '@material-ui/core';\n\nimport { isAuthorized } from '../../common/Authorize';\nimport TimeRangeField from '../../common/fields/TimeRangeField';\nimport DateField from '../../common/fields/DateField';\n\nimport { CategoryField } from '../categories/CategoryField';\nimport { SurfaceField } from '../surfaces/SurfaceField';\nimport { SeasonField } from \"../seasons/SeasonField\";\n\nconst GameDateField = ({ showTime, ...props }) => {\n if (!showTime) return <DateField source=\"date\" showLocal {...props} />\n return <TimeRangeField startSource=\"startTime\" endSource=\"endTime\" showDate />\n}\n\nexport const GameField = ({ includeSeason = false, includeDate = false, includeTime = false, includeCategory = false, includeSurface = false, link = 'show', variant = 'body2', className, ...props }) => {\n const record = useRecordContext(props);\n\n if (isAuthorized(record, 'games', 'show')) {\n if (link === 'scoresheet') {\n link = (record, reference) => `/${reference}/${record[props.source]}/show/scoresheet`\n }\n } else {\n link = false;\n }\n\n return <ReferenceField basePath=\"/games\" resource=\"games\" reference=\"games\" link={link} {...props}>\n <FunctionField source=\"name\" render={game => {\n const inline = [\n includeSeason === 'inline' && <SeasonField source=\"seasonId\" variant=\"inherit\" />,\n includeDate === 'inline' && <GameDateField showTime={includeTime} />,\n includeCategory === 'inline' && <CategoryField source=\"categoryId\" variant=\"inherit\" />,\n includeSurface === 'inline' && <SurfaceField source=\"arenaId\" variant=\"inherit\" link={false} />,\n ].filter(Boolean).flatMap(e => [e, ' • ']).slice(0, -1)\n const full = [\n includeSeason === 'full' && <SeasonField source=\"seasonId\" variant=\"inherit\" />,\n includeDate === 'full' && <GameDateField showTime={includeTime} />,\n includeCategory === 'full' && <CategoryField source=\"categoryId\" variant=\"inherit\" />,\n includeSurface === 'full' && <SurfaceField source=\"arenaId\" variant=\"inherit\" link={false} />,\n ].filter(Boolean).flatMap(e => [e, ' • ']).slice(0, -1)\n return <>\n <Typography variant={variant} display=\"inline\">{game.number}</Typography>\n {inline.length > 0 && <span><Typography variant={variant} display=\"inline\" color=\"textSecondary\"> {inline}</Typography></span>}\n {full.length > 0 && <div><Typography variant={variant} display=\"inline\" color=\"textSecondary\">{full}</Typography></div>}\n </>\n }} variant={variant} className={className} />\n </ReferenceField>\n}\n\nGameField.defaultProps = {\n addLabel: true,\n}\n","import React, { useCallback, useEffect, useMemo, useRef, useState } from 'react';\nimport { TextInput, SimpleForm, useTranslate, useRecordContext, NumberInput, GET_LIST, useQuery, useNotify } from 'react-admin';\nimport moment from 'moment-timezone';\nimport { Button, Card, CardContent, Grid, IconButton, InputAdornment, makeStyles, Tooltip } from '@material-ui/core'\nimport { ExpandMore as ExpandMoreIcon, ExpandLess as ExpandLessIcon, FormatListNumbered } from '@material-ui/icons';\nimport { useSelector } from 'react-redux';\nimport { useForm, useFormState } from 'react-final-form';\nimport createCalculator from 'final-form-calculate';\n\nimport { changeTimezone, isEmpty } from '@hisports/parsers';\nimport { isSameTime } from '@hisports/common';\nimport { FF_CROSS_SCHEDULING } from '@hisports/common/featureFlags';\nimport { validateGameNumber } from '@hisports/scheduler';\nimport { getGameNumberValidationError, getNextNumber } from '@hisports/scheduler/src/sequences/sequences';\n\nimport { useSchedulingContext } from '../../common/calendar/SchedulingContext';\nimport { InlineDateTimeInput, dateTimePlaceholder } from '../../common/inputs/DateInput';\nimport { GameStatusEnumInput, TimezoneEnumInput } from '../../common/inputs/EnumInputs';\nimport { EndTimeInput as InlineEndTimeInput } from '../../common/inputs/EndTimeInput';\nimport { useSeason } from '../../common/inputs/SeasonSelector';\nimport { FieldDependency } from '../../common/FieldDependency';\nimport Toolbar from '../../common/ra/Toolbar';\nimport { apiClient, useFlag } from '../../http';\n\nimport { useIsHomeFirst } from '../events/EventViewSettings';\nimport { ScheduleInput } from '../schedules/ScheduleInput';\nimport { TeamInput } from '../teams/TeamInput';\nimport { SurfaceInput } from '../surfaces/SurfaceInput';\nimport { ScheduleGroupInput } from '../groups/GroupInput';\nimport { CategoryInput } from '../categories/CategoryInput';\n\nimport { GameAvailabilityInfo, isTournamentConflict, useAvailabilities } from './GameAvailabilityInfo';\nimport { GameAvailabilityContextProvider, useGameAvailabilityContext } from './GameAvailabilityContext';\n\nconst useStyles = makeStyles(theme => ({\n crossSchedulingCard: {\n border: `1px solid rgba(0, 0, 0, 0.23)`,\n borderRadius: 6\n },\n crossSchedulingCardContent: {\n '&:last-child': {\n paddingBottom: theme.spacing(2),\n }\n }\n}))\n\nconst useSequences = (scheduleId) => useQuery({\n type: GET_LIST,\n resource: 'schedulesequences',\n payload: {\n filter: { scheduleId },\n }\n}, { enabled: scheduleId != null })\n\nconst validate = (values, schedules, slots = []) => {\n const errors = {};\n const schedule = schedules?.[values?.scheduleId]\n\n if (!values.scheduleId) errors.scheduleId = 'ra.validation.required'\n if (values.id && !values.categoryId) errors.categoryId = 'ra.validation.required'\n\n if (!values.arenaId) errors.arenaId = 'ra.validation.required'\n\n if (!values.homeTeamId && values.isApproved) errors.homeTeamId = 'ra.validation.required'\n if (!values.awayTeamId && values.isApproved) errors.awayTeamId = 'ra.validation.required'\n\n const { startTime, endTime, timezone } = values;\n\n if (!startTime) errors.startTime = 'ra.validation.required'\n if (!endTime) errors.endTime = 'ra.validation.required'\n if (!timezone) errors.timezone = 'ra.validation.required'\n\n if (startTime && endTime) {\n const selectedSlot = slots.find(slot => isSameTime(slot, { startTime, endTime, timezone }));\n const overlappingSlot = slots.some(slot => slot.isOverlap);\n\n if (selectedSlot?.restrictions?.length) {\n errors.startTime = 'resources.games.validations.unavailable_slot';\n errors.endTime = 'resources.games.validations.unavailable_slot';\n errors.timeslot = 'resources.games.validations.unavailable_slot';\n } else if (overlappingSlot) {\n errors.startTime = 'resources.games.validations.overlapping_slot';\n errors.endTime = 'resources.games.validations.overlapping_slot';\n errors.timeslot = 'resources.games.validations.overlapping_slot';\n } else if (!moment.tz(startTime, timezone).isValid()) {\n errors.startTime = 'resources.games.validations.invalid_time'\n } else if (!moment.tz(endTime, timezone).isValid()) {\n errors.endTime = 'resources.games.validations.invalid_time'\n } else if (moment.tz(endTime, timezone).isBefore(startTime, 'minute')) {\n errors.endTime = 'resources.games.validations.end_before_start'\n } else if (moment.tz(endTime, timezone).diff(startTime, 'hours') > 6) {\n errors.endTime = 'resources.games.validations.invalid_time_check_am_pm'\n } else if (startTime === endTime) {\n errors.endTime = 'ra.validation.end_before_start'\n }\n }\n\n if (values.date && schedule?.startDate && moment.utc(schedule.startDate).isAfter(values.date)) {\n errors.startTime = 'resources.games.validations.before_schedule_date'\n } else if (values.date && schedule?.endDate && moment.utc(schedule.endDate).add(1, 'day').isBefore(values.date)) {\n errors.startTime = 'resources.games.validations.after_schedule_date'\n }\n\n if (!values.status) errors.status = 'ra.validation.required'\n if (values.number && !validateGameNumber(String(values.number))) {\n const gameNumberError = getGameNumberValidationError(String(values.number));\n errors.number = `resources.schedulesequences.validations.${gameNumberError}`\n }\n\n return errors;\n}\n\nconst inputProps = {\n resource: 'games',\n basePath: '/games',\n variant: 'outlined',\n margin: 'none',\n fullWidth: true,\n}\n\nexport const hasConflicts = (availabilities, status, enforcementLevels = []) => {\n if (['Conflict', 'Cancelled', 'Postponed'].includes(status)) return false;\n\n const unavailabilities = availabilities?.availabilities?.filter(availability => !availability.isAvailable) || []\n if (enforcementLevels.includes(availabilities?.settings?.availabilityEnforcement) && unavailabilities.length > 0) return true\n if (enforcementLevels.includes(availabilities?.settings?.conflictEnforcement) && availabilities.conflicts?.length > 0) return true;\n if (enforcementLevels.includes(availabilities?.settings?.constraintEnforcement) && availabilities.constraints?.length > 0) return true;\n return false;\n}\n\nexport const validateStatus = (availabilities, enforcementLevels = ['Validation']) => status => {\n if (!status) return 'ra.validation.required';\n if (hasConflicts(availabilities, status, enforcementLevels)) return 'resources.games.validations.conflicts';\n}\n\nexport const GameStatusInput = ({ skipStatusValidation, ...props }) => {\n const { values } = useFormState();\n const schedules = useSelector(store => store.admin.resources.schedules.data);\n const schedule = schedules[values.scheduleId];\n const availabilities = useAvailabilities(values);\n const isTournamentSchedule = schedule && schedule.type == 'Tournament';\n const tournamentConflicts = availabilities.conflicts.filter(conflict => isTournamentConflict(conflict));\n const warningConflict = isTournamentSchedule && isEmpty(tournamentConflicts);\n\n const helperText = hasConflicts(availabilities, values.status, ['Conflict']) ? 'resources.games.helpers.conflicts' : '';\n\n return <GameStatusEnumInput validate={!skipStatusValidation && !warningConflict && validateStatus(availabilities)} helperText={!skipStatusValidation && !warningConflict && helperText} {...props} />\n}\n\nexport const CrossSchedulingInput = () => {\n const translate = useTranslate();\n const classes = useStyles();\n const { change, batch } = useForm();\n const { values = {} } = useFormState();\n const { crossScheduleId, crossGroupId, scheduleId } = values\n\n const [ showCrossSchedulingInput, setShowCrossSchedulingInput ] = useState(crossScheduleId || crossGroupId);\n const onClick = () => {\n if (showCrossSchedulingInput) {\n batch(() => {\n change('crossScheduleId', null)\n change('crossGroupId', null)\n })\n }\n setShowCrossSchedulingInput(showCrossSchedulingInput => !showCrossSchedulingInput)\n }\n const ExpandIcon = showCrossSchedulingInput ? ExpandLessIcon : ExpandMoreIcon\n\n return <Grid container spacing={1} fullWidth>\n {showCrossSchedulingInput && <Grid item xs={12}>\n <Card variant=\"outlined\" className={classes.crossSchedulingCard}>\n <CardContent className={classes.crossSchedulingCardContent}>\n <ScheduleInput source=\"crossScheduleId\" helperText=\"ra.message.optional\" {...inputProps} />\n <ScheduleGroupInput\n source=\"crossGroupId\"\n scheduleId={crossScheduleId || scheduleId}\n showNone={translate('ra.message.no_group')}\n {...inputProps}\n />\n </CardContent>\n </Card>\n </Grid>}\n <Grid item xs={12} sm={12}>\n <Button onClick={onClick} startIcon={<ExpandIcon />} color=\"primary\" size=\"small\">{translate(`resources.games.labels.cross_scheduling_${showCrossSchedulingInput ? 'remove' : 'add'}`)}</Button>\n </Grid>\n </Grid>\n}\n\nconst TimezoneInput = ({ surfaces, ...props }) => {\n const { values } = useFormState();\n\n const surface = surfaces?.[values?.arenaId];\n const disabled = !['TBA', 'NDA'].includes(surface?.alias);\n\n return <TimezoneEnumInput disabled={disabled} {...props} />\n}\n\nconst GameNumberInput = ({ disabled, ...props }) => {\n const { values } = useFormState();\n const { change } = useForm();\n const seasonId = useSeason();\n const translate = useTranslate();\n const notify = useNotify();\n\n const { scheduleId, groupId, number } = values;\n const { data: sequences, loading, refetch: refetchSequences } = useSequences(scheduleId);\n\n const sequence = !!sequences?.length && sequences.find(sequence => sequence.groupId == groupId);\n const sequenceNumber = useMemo(() => {\n if (!sequence) return;\n\n const nextNumber = getNextNumber(sequence, seasonId, sequences)\n return nextNumber;\n }, [sequence, seasonId, sequences]);\n\n const initialNumber = useRef(number);\n\n const setSequenceNumber = useCallback((shouldRefetch = false, showError = false) => {\n if (shouldRefetch) refetchSequences();\n if (sequence && !sequenceNumber && showError) {\n return notify('resources.schedulesequences.validations.sequence_exhausted', 'warning');\n }\n change('number', sequenceNumber);\n }, [refetchSequences, sequence, sequenceNumber, change, notify]);\n\n useEffect(() => {\n if (initialNumber?.current || !sequence) return;\n setSequenceNumber();\n }, [sequence, sequenceNumber, setSequenceNumber]);\n\n const endAdornment = sequence && (\n <InputAdornment position=\"end\">\n <Tooltip title={translate('resources.games.helpers.use_next_sequence')}>\n <IconButton onClick={() => setSequenceNumber(true, true)} >\n <FormatListNumbered />\n </IconButton>\n </Tooltip>\n </InputAdornment>\n );\n\n return <TextInput disabled={disabled || loading} InputProps={{ endAdornment }} {...props} />\n};\n\nconst InnerGameForm = ({\n teamProps = {},\n timeOptions = {},\n hideSchedule = false,\n hideNumber = false,\n hideAvailabilities,\n skipStatusValidation = false,\n resetDate = true,\n initialValues = {},\n draft,\n ...props\n}) => {\n const { limitedView } = useSchedulingContext();\n const translate = useTranslate();\n const game = useRecordContext(props);\n const isHomeFirst = useIsHomeFirst();\n const isEnabled = useFlag();\n const {\n availabilityInfo: [ gameAvailabilities ],\n slot: [ selectedSlot ],\n loading: [ isLoading ]\n } = useGameAvailabilityContext();\n\n // must use ref for roles to get current value, otherwise value in calculator is stale\n const schedules = useSelector(store => store.admin.resources.schedules.data);\n const schedulesRef = useRef({});\n schedulesRef.current = schedules;\n\n const surfaces = useSelector(store => store.admin.resources.surfaces.data);\n const surfacesRef = useRef({});\n surfacesRef.current = surfaces;\n\n const scheduleSettings = useSelector(store => store.admin.resources.scheduleSettings.data);\n const settingsRef = useRef({})\n settingsRef.current = scheduleSettings\n\n const getScheduleSettings = async scheduleId => {\n if (!settingsRef.current[scheduleId]) {\n settingsRef.current[scheduleId] = await apiClient(`/schedules/${scheduleId}/settings`, { method: 'GET' })\n .then(res => res.data)\n .then(data => {\n settingsRef.current[scheduleId] = data;\n return data;\n })\n }\n return settingsRef.current[scheduleId];\n }\n\n const selectSlotRef = useRef({});\n selectSlotRef.current = selectedSlot;\n\n // decorators must be wrapped in useRef otherwise SimpleForm prop will register duplicates\n // this bug seems to be triggered by use of hooks (useSelector)\n const decorators = useRef([createCalculator({\n field: 'scheduleId',\n updates: {\n categoryId: (scheduleId, values, prevValues) => {\n const schedule = schedulesRef.current[scheduleId];\n if (!schedule) return values.categoryId;\n return schedule.categoryId;\n },\n endTime: async (scheduleId, values, prevValues) => {\n const { startTime, endTime, timezone } = values;\n if (!startTime || !scheduleId || isEmpty(prevValues)) return endTime;\n const { gameLength } = await getScheduleSettings(scheduleId);\n if (!gameLength) return endTime;\n return moment.tz(startTime, timezone).add(gameLength, 'minutes').toISOString();\n }\n }\n }, {\n field: 'crossScheduleId',\n updates: {\n crossGroupId: (crossScheduleId, values, prevValues) => {\n if (!isEmpty(prevValues) && prevValues.crossScheduleId !== crossScheduleId) return\n return values?.crossGroupId\n }\n }\n }, {\n field: 'startTime',\n updates: {\n date: (startTime, values) => {\n if (!resetDate && !startTime) return values.date;\n if (!startTime || !values.timezone) return startTime;\n return moment.tz(startTime, values.timezone).format('YYYY-MM-DD');\n },\n endTime: async (startTime, values, prevValues) => {\n const { scheduleId, endTime, timezone } = values;\n if (!startTime || !scheduleId || isEmpty(prevValues) || startTime === prevValues.startTime) return endTime;\n const { gameLength } = await getScheduleSettings(scheduleId);\n if (!gameLength || selectSlotRef.current) return endTime;\n return moment.tz(startTime, timezone).add(gameLength, 'minutes').toISOString();\n }\n }\n }, {\n field: 'arenaId',\n updates: {\n timezone: (arenaId, values, prevValues) => {\n const surface = surfacesRef.current[arenaId];\n if (['TBA', 'NDA'].includes(surface?.alias)) {\n return values?.timezone || prevValues?.timezone;\n }\n return surface?.timezone || values?.timezone;\n }\n }\n }, {\n field: 'timezone',\n updates: {\n startTime: (timezone, values, prevValues) => {\n const { timezone: prevTimezone } = prevValues;\n if (!prevTimezone || !timezone || !values.startTime || isEmpty(prevValues) || timezone === prevTimezone) return values.startTime;\n return changeTimezone(values.startTime, prevTimezone, timezone)\n },\n endTime: (timezone, values, prevValues) => {\n const { timezone: prevTimezone } = prevValues;\n if (!prevTimezone || !timezone || !values.endTime || isEmpty(prevValues) || timezone === prevTimezone) return values.endTime;\n return changeTimezone(values.endTime, prevTimezone, timezone)\n },\n }\n })])\n\n return <SimpleForm toolbar={<Toolbar disabled={isLoading} />} decorators={decorators.current} validate={values => validate(values, schedulesRef.current, gameAvailabilities?.slots)} validateOnBlur initialValues={{ status: 'Active', ...initialValues }} {...props}>\n <Grid container spacing={2} fullWidth>\n {!hideSchedule && <Grid item xs={12}>\n <ScheduleInput source=\"scheduleId\" autoFocus {...inputProps} />\n <ScheduleGroupInput source=\"groupId\" showNone={translate('ra.message.no_group')} {...inputProps} />\n </Grid>}\n {isEnabled(FF_CROSS_SCHEDULING) &&<Grid item xs={12}>\n <CrossSchedulingInput />\n </Grid>}\n <FieldDependency fieldSource=\"scheduleId\">\n {!hideSchedule && <Grid item xs={12}>\n <CategoryInput source=\"categoryId\" disabled {...inputProps} />\n </Grid>}\n\n {draft?.type === 'Generated' && <Grid item xs={12}>\n <NumberInput disabled={limitedView} source=\"round\" label={translate('resources.drafts.labels.round', 1)} helperText=\"\" {...inputProps} />\n </Grid>}\n\n <Grid item xs={12} sm={6}>\n <TeamInput disabled={limitedView} source={isHomeFirst ? 'homeTeamId' : 'awayTeamId'} helperText={!game?.isApproved ? 'resources.games.helpers.team' : ''} {...teamProps} {...inputProps} />\n </Grid>\n <Grid item xs={12} sm={6}>\n <TeamInput disabled={limitedView} source={isHomeFirst ? 'awayTeamId' : 'homeTeamId'} helperText={!game?.isApproved ? 'resources.games.helpers.team' : ''} {...teamProps} {...inputProps} />\n </Grid>\n </FieldDependency>\n\n <Grid item xs={12} md={4}>\n <SurfaceInput source=\"arenaId\" {...inputProps} />\n </Grid>\n <Grid item xs={12} md={4}>\n <FieldDependency fieldSource=\"arenaId\" disabled>\n <InlineDateTimeInput\n source=\"startTime\"\n helperText={selectedSlot ? 'resources.games.helpers.using_slot' : ''}\n options={{\n label: translate('resources.games.fields.startTime'),\n format: 'YYYY-MM-DD HH:mm',\n placeholder: dateTimePlaceholder,\n ampm: false,\n openTo: limitedView ? 'hours' : undefined,\n ...timeOptions,\n }}\n {...inputProps}\n />\n </FieldDependency>\n </Grid>\n <Grid item xs={12} md={4}>\n <FieldDependency fieldSource=\"arenaId\" disabled>\n <InlineEndTimeInput\n source=\"endTime\"\n maxHours={6}\n helperText={selectedSlot ? 'resources.games.helpers.using_slot' : ''}\n disabled={selectedSlot}\n options={{\n label: translate('resources.games.fields.endTime'),\n format: 'YYYY-MM-DD HH:mm',\n placeholder: dateTimePlaceholder,\n ampm: false,\n openTo: limitedView ? 'hours' : undefined,\n ...timeOptions,\n }}\n {...inputProps}\n />\n </FieldDependency>\n </Grid>\n <GameAvailabilityInfo draftId={draft?.id} />\n <Grid item xs={12} sm={6} lg={4}>\n <GameStatusInput source=\"status\" defaultValue=\"Active\" skipStatusValidation={skipStatusValidation} {...inputProps} />\n </Grid>\n <Grid item xs={12} sm={6} lg={4}>\n <GameNumberInput source=\"number\" disabled={hideNumber || limitedView} helperText={hideNumber ? 'resources.games.helpers.number' : ''} {...inputProps} />\n </Grid>\n <Grid item xs={12} sm={4} md={4}>\n <TimezoneInput source=\"timezone\" surfaces={surfaces} {...inputProps} />\n </Grid>\n <Grid item xs={12} lg={12}>\n <TextInput source=\"comments\" multiline rows=\"3\" helperText=\"resources.games.helpers.comments\" {...inputProps} />\n </Grid>\n </Grid>\n </SimpleForm>\n}\n\nexport const GameForm = props =>\n <GameAvailabilityContextProvider>\n <InnerGameForm {...props} />\n </GameAvailabilityContextProvider>\n","import React from 'react';\nimport { ReferenceInput, ReferenceArrayInput, RecordContextProvider } from 'react-admin';\nimport moment from 'moment-timezone';\n\nimport { useFormSeason } from '../../common/inputs/SeasonSelector';\nimport AutocompleteInput from '../../common/inputs/AutocompleteInput';\nimport AutocompleteSuggestion from '../../common/inputs/AutocompleteSuggestion'\nimport { GameIcon } from '../icons';\nimport { CategoryField } from '../categories/CategoryField';\nimport { SurfaceField } from '../surfaces/SurfaceField';\n\nconst filterGames = filter => number => ({ ...filter, number })\n\nconst GameSuggestions = ({ suggestion: game, query, isHighlighted, ...props }) => {\n if (!game?.id) return null;\n\n const primary = `${game.number} - ${moment.tz(game.date, game.timezone).format('LL')}`\n\n const secondaryComponent = <RecordContextProvider value={game}>\n <CategoryField source=\"categoryId\" link={false} />\n {' - '}\n <SurfaceField source=\"arenaId\" includeVenue link={false} />\n </RecordContextProvider>\n\n return <AutocompleteSuggestion icon={<GameIcon />} primary={primary} secondary={secondaryComponent} />\n}\n\nexport const GameInput = ({ allowEmpty, multiple, helperText, ...props }) => {\n const seasonId = useFormSeason();\n const Input = multiple ? ReferenceArrayInput : ReferenceInput;\n return <Input\n reference=\"games\"\n filterToQuery={filterGames({ seasonId, pastEvents: true })}\n sort={{\n field: ['number'],\n order: ['ASC'],\n }}\n perPage={100}\n {...props}\n >\n <AutocompleteInput\n optionText=\"number\"\n suggestionComponent={GameSuggestions}\n multiple={multiple}\n helperText={helperText}\n resettable\n allowEmpty\n />\n </Input>\n}\n","import React, { Fragment, useState } from 'react';\nimport { useTranslate } from 'react-admin';\nimport { Button, ListItemIcon, ListItemText } from '@material-ui/core';\nimport { Add } from '@material-ui/icons';\n\nimport { DialogDatagrid } from '../../common/dialogs/DialogDatagrid';\nimport { CreateResourceDialog, EditResourceDialog } from '../../common/dialogs/ResourceDialog';\nimport { ActionMenuItem } from '../../common/ActionMenu';\n\nimport { GameForm } from './GameForm';\n\nconst AddGameDialog = props =>\n <CreateResourceDialog label=\"resources.games.actions.add\" maxWidth=\"md\" resource=\"games\" basePath=\"/games\" {...props}>\n <GameForm />\n </CreateResourceDialog>\n\nexport const EditGameDialog = props =>\n <EditResourceDialog label=\"resources.games.labels.edit\" maxWidth=\"md\" resource=\"games\" basePath=\"/games\" {...props}>\n <GameForm />\n </EditResourceDialog>\n\nexport const AddGameButton = ({ size, variant, ...props }) => {\n const translate = useTranslate();\n const [ isOpen, setOpen ] = useState(false);\n return <>\n <Button color=\"primary\" size={size} variant={variant} startIcon={<Add />} onClick={() => setOpen(true)}>{translate('resources.games.actions.add')}</Button>\n <AddGameDialog isOpen={isOpen} handleClose={() => setOpen(false)} {...props} />\n </>\n}\n\nexport const AddGameAction = ({ onClick, ...props }) => {\n const translate = useTranslate();\n const [ isOpen, setOpen ] = useState(false);\n const handleClick = () => {\n onClick();\n setOpen(true);\n }\n return <>\n <ActionMenuItem color=\"primary\" size=\"small\" onClick={handleClick}>\n <ListItemIcon><Add fontSize=\"small\" /></ListItemIcon>\n <ListItemText>{translate('resources.games.actions.add')}</ListItemText>\n </ActionMenuItem>\n {isOpen && <AddGameDialog isOpen={isOpen} handleClose={() => setOpen(false)} {...props} />}\n </>\n}\n\nexport const GameDatagrid = props => <DialogDatagrid dialog={EditGameDialog} {...props} />\n","import React from 'react';\nimport { styled, Tooltip } from '@material-ui/core';\nimport { ReportProblemOutlined, Schedule, LocationOnOutlined, Shuffle } from '@material-ui/icons';\n\nimport FunctionField from '../../common/fields/FunctionField'\n\nconst Info = styled('div')({\n display: 'inline-block',\n verticalAlign: 'middle',\n whiteSpace: 'nowrap'\n})\n\nconst icons = {\n 'Cancelled': <ReportProblemOutlined fontSize=\"small\" color=\"error\" style={{ verticalAlign: 'middle' }} />,\n 'Postponed': <ReportProblemOutlined fontSize=\"small\" color=\"error\" style={{ verticalAlign: 'middle' }} />,\n 'Conflict': <Shuffle fontSize=\"small\" color=\"error\" style={{ verticalAlign: 'middle' }} />,\n 'Rescheduled': <Schedule fontSize=\"small\" style={{ verticalAlign: 'middle' }} />,\n 'Rink Changed': <LocationOnOutlined fontSize=\"small\" style={{ verticalAlign: 'middle' }} />,\n}\n\nexport const GameStatusIcon = ({ game }) => {\n if (!game) return null;\n const icon = icons[game.status]\n if (!icon) return null;\n return <Tooltip title={game.status}>\n {icon}\n </Tooltip>\n}\n\nexport const GameNumberField = props =>\n <FunctionField {...props} render={game => {\n if (!game) return null;\n if (game.isApproved) return game.number;\n\n const icon = icons[game.status];\n if (icon) {\n return <Info>\n {game.number}\n <GameStatusIcon game={game} />\n </Info>\n }\n\n return game.number;\n }} />\n","import React, { Fragment, useRef, useState } from 'react';\nimport { TextInput, NumberInput, SimpleForm, useRefresh, useNotify, useTranslate, useRecordContext, RecordContextProvider } from 'react-admin';\nimport { Dialog, DialogTitle, DialogContent, DialogContentText, Button, Grid, makeStyles, Typography, useMediaQuery } from '@material-ui/core';\nimport { FlagOutlined } from '@material-ui/icons';\nimport { FORM_ERROR } from 'final-form';\nimport { useFormState } from 'react-final-form';\nimport createCalculator from 'final-form-calculate';\n\nimport { FF_DOUBLE_FORFEIT } from '@hisports/common/featureFlags';\n\nimport { apiClient, useFlag } from '../../http';\nimport { isAuthorized } from '../../common/Authorize';\nimport { DialogFormToolbar } from '../../common/dialogs/DialogForm';\nimport CheckboxInput from '../../common/inputs/CheckboxInput';\nimport { useIsHomeFirst } from '../events/EventViewSettings';\n\nimport { TeamField } from '../teams/TeamField';\n\nconst useStyles = makeStyles(theme => ({\n checkbox: {\n paddingLeft: theme.spacing(1),\n marginTop: theme.spacing(1),\n },\n teams: {\n display: 'flex',\n justifyContent: 'flex-start',\n flexWrap: 'wrap',\n marginTop: theme.spacing(1),\n paddingLeft: theme.spacing(1),\n },\n label: {\n paddingLeft: theme.spacing(0.5),\n },\n input: {\n marginTop: theme.spacing(1),\n }\n}))\nconst validate = values => {\n const errors = {};\n\n if (!values.homeForfeit && !values.awayForfeit) {\n errors.homeForfeit ='ra.validation.required';\n errors.awayForfeit ='ra.validation.required';\n }\n\n if (values.homeScore) {\n if (values.homeScore < 0) errors.homeScore = 'ra.validation.greater_than_or_equal_zero'\n if (values.awayScore == null) errors.awayScore = 'ra.validation.required'\n }\n\n if (values.awayScore) {\n if (values.awayScore < 0) errors.awayScore = 'ra.validation.greater_than_or_equal_zero'\n if (values.homeScore == null) errors.homeScore = 'ra.validation.required'\n }\n\n return errors;\n}\n\nconst inputProps = {\n variant: 'outlined',\n margin: 'normal',\n fullWidth: true,\n}\n\nconst ForfeitCheckBox = ({ source, ...props }) => {\n const translate = useTranslate();\n const { values } = useFormState();\n const { homeForfeit, awayForfeit } = values;\n\n let label = translate('resources.games.values.status.Forfeited');\n if (homeForfeit && awayForfeit) {\n label = translate('resources.games.labels.forfeitTie');\n } else if (homeForfeit || awayForfeit) {\n if (values[source]) {\n label = translate('resources.games.labels.forfeitLoss');\n }\n if (!values[source]) {\n label = translate('resources.games.labels.forfeitWin');\n }\n }\n\n return <CheckboxInput\n source={source}\n label={label}\n helperText=\"\"\n {...props} />\n}\n\nconst GameForfeitForm = ({ game, ...props }) => {\n const isEnabled = useFlag();\n const translate = useTranslate();\n const classes = useStyles();\n const isHomeFirst = useIsHomeFirst();\n\n const canDoubleForfeit = isEnabled(FF_DOUBLE_FORFEIT)\n const canEditAdminNotes = isAuthorized(game, 'scoresheets', 'adminNotes')\n\n const decorators = useRef([createCalculator({\n field: 'homeForfeit',\n updates: {\n awayForfeit: (homeForfeit, values, prevValues) => {\n if (homeForfeit && !canDoubleForfeit) return false;\n return values.awayForfeit\n }\n }\n }, {\n field: 'awayForfeit',\n updates: {\n homeForfeit: (awayForfeit, values, prevValues) => {\n if (awayForfeit && !canDoubleForfeit) return false;\n return values.homeForfeit\n }\n }\n })])\n\n return <SimpleForm {...props} {...inputProps} decorators={decorators.current} validate={validate}>\n <RecordContextProvider value={game}>\n <Grid container spacing={2} fullWidth>\n <Grid item xs={12}>\n <Grid container spacing={2} fullWidth>\n <Grid item xs={8} sm={9}>\n <div className={classes.teams}>\n <TeamField source={isHomeFirst ? \"homeTeamId\" : \"awayTeamId\"} link={false} />\n <Typography className={classes.label} variant=\"body2\" color=\"textSecondary\" display=\"inline\">{`(${translate(`resources.games.labels.${isHomeFirst ? 'home' : 'away'}`)})`}</Typography>\n </div>\n <div>\n <ForfeitCheckBox source={isHomeFirst ? \"homeForfeit\" : \"awayForfeit\"} className={classes.checkbox} canDoubleForfeit={canDoubleForfeit} />\n </div>\n </Grid>\n <Grid item xs={4} sm={3}>\n <NumberInput source={isHomeFirst ? \"homeScore\" : \"awayScore\"} label=\"resources.games.labels.score\" className={classes.input} min={0} max={999} helperText=\"ra.message.optional\" {...inputProps} />\n </Grid>\n </Grid>\n </Grid>\n <Grid item xs={12}>\n <Grid container spacing={2} fullWidth>\n <Grid item xs={8} sm={9}>\n <div className={classes.teams}>\n <TeamField source={isHomeFirst ? \"awayTeamId\" : \"homeTeamId\"} link={false} />\n <Typography className={classes.label} variant=\"body2\" color=\"textSecondary\" display=\"inline\">{`(${translate(`resources.games.labels.${isHomeFirst ? 'away' : 'home'}`)})`}</Typography>\n </div>\n <div>\n <ForfeitCheckBox source={isHomeFirst ? \"awayForfeit\" : \"homeForfeit\"} className={classes.checkbox} canDoubleForfeit={canDoubleForfeit} />\n </div>\n </Grid>\n <Grid item xs={4} sm={3}>\n <NumberInput source={isHomeFirst ? \"awayScore\" : \"homeScore\"} label=\"resources.games.labels.score\" className={classes.input} min={0} max={999} helperText=\"ra.message.optional\" {...inputProps} />\n </Grid>\n </Grid>\n </Grid>\n </Grid>\n <TextInput\n source=\"notes\"\n label=\"resources.games.labels.scoresheet_notes\"\n multiline\n rows={2}\n helperText=\"resources.games.helpers.scoresheet_notes\"\n {...inputProps}\n />\n {canEditAdminNotes && <TextInput\n source=\"adminNotes\"\n label=\"resources.games.labels.admin_notes\"\n multiline\n rows={2}\n helperText=\"resources.games.helpers.admin_notes\"\n {...inputProps}\n />}\n </RecordContextProvider>\n </SimpleForm>\n}\n\nexport default ({ size, variant, ...props }) => {\n const game = useRecordContext(props)\n const [ isOpen, setOpen ] = useState(false);\n const refresh = useRefresh();\n const notify = useNotify();\n const translate = useTranslate();\n const fullScreen = useMediaQuery(theme => theme.breakpoints.down('xs'));\n\n const onSubmit = (values) => {\n const { teamId, homeForfeit, awayForfeit, notes, adminNotes, homeScore, awayScore } = values;\n\n let forfeitId = teamId;\n if (!teamId) {\n if (homeForfeit && awayForfeit) {\n forfeitId = -1;\n } else if (homeForfeit) {\n forfeitId = game.homeTeamId;\n } else if (awayForfeit) {\n forfeitId = game.awayTeamId;\n }\n }\n\n return apiClient(`/games/${game.id}/forfeit`, {\n method: 'POST',\n data: {\n teamId: forfeitId,\n notes,\n adminNotes,\n score: {\n [game.homeTeamId]: homeScore,\n [game.awayTeamId]: awayScore\n }\n }\n })\n .then(res => res.data)\n .then(() => {\n setOpen(false)\n refresh();\n notify('resources.gameEvents.values.eventType.gameForfeited', 'info')\n })\n .catch(err => ({\n [FORM_ERROR]: translate('ra.page.error_try_again')\n }))\n }\n\n return <>\n <Button color=\"primary\" size={size} variant={variant} startIcon={<FlagOutlined />} onClick={() => setOpen(true)}>\n {translate('resources.games.labels.forfeit')}\n </Button>\n <Dialog open={isOpen} fullWidth maxWidth=\"sm\" fullScreen={fullScreen} onClose={() => setOpen(false)}>\n <DialogTitle>{translate('resources.games.labels.forfeit')}</DialogTitle>\n <DialogContent>\n <DialogContentText>\n {translate('resources.games.messages.forfeit_help')}\n </DialogContentText>\n <RecordContextProvider value={null}>\n <GameForfeitForm game={game} save={onSubmit} component={Fragment} toolbar={\n <DialogFormToolbar submitLabel=\"ra.action.save\" onCancel={() => setOpen(false)} />\n } />\n </RecordContextProvider>\n </DialogContent>\n </Dialog>\n </>\n}\n","import React, { Fragment, useState } from 'react';\nimport { TextInput, SimpleForm, useRefresh, useNotify, useTranslate, useRecordContext, RecordContextProvider } from 'react-admin';\nimport { Dialog, DialogTitle, DialogContent, Button } from '@material-ui/core';\nimport { UpdateOutlined } from '@material-ui/icons';\n\nimport { apiClient } from '../../http';\nimport { DialogFormToolbar } from '../../common/dialogs/DialogForm';\nimport { GameStatusEnumInput } from '../../common/inputs/EnumInputs';\n\nconst inputProps = {\n variant: 'outlined',\n margin: 'normal',\n fullWidth: true,\n}\n\nconst GameStatusForm = props =>\n <SimpleForm {...props} {...inputProps} >\n <GameStatusEnumInput source=\"status\" defaultValue=\"Active\" {...inputProps} />\n <TextInput source=\"comments\" multiline minRows=\"3\" helperText=\"resources.games.helpers.comments\" {...inputProps} />\n </SimpleForm>\n\nexport default ({ size, variant, ...props }) => {\n const game = useRecordContext(props)\n const [ isOpen, setOpen ] = useState(false);\n const refresh = useRefresh();\n const notify = useNotify();\n const translate = useTranslate();\n\n const onSubmit = (values) => {\n const { status, comments } = values;\n\n return apiClient(`/games/${game.id}/changeStatus`, {\n method: 'POST',\n data: {\n status,\n comments\n }\n })\n .then(() => {\n setOpen(false)\n refresh();\n notify('resources.games.notifications.game_status_changed')\n }).catch(err =>\n notify('ra.page.error_try_again', 'error')\n )\n }\n\n return <>\n <Button color=\"primary\" size={size} variant={variant} startIcon={<UpdateOutlined />} onClick={() => setOpen(true)}>\n {translate('resources.games.labels.change_game_status')}\n </Button>\n <Dialog open={isOpen} fullWidth maxWidth=\"sm\" onClose={() => setOpen(false)}>\n <DialogTitle>{translate('resources.games.labels.change_game_status')}</DialogTitle>\n <DialogContent>\n <RecordContextProvider value={null}>\n <GameStatusForm save={onSubmit} initialValues={{ status: game.status, comments: game.comments }} component={Fragment} toolbar={\n <DialogFormToolbar submitLabel=\"resources.games.labels.change_game_status\" onCancel={() => setOpen(false)} />\n } />\n </RecordContextProvider>\n </DialogContent>\n </Dialog>\n </>\n}\n","import React, { Fragment, useState } from 'react';\nimport { useTranslate, useRecordContext } from 'react-admin';\nimport { Button, Tooltip } from '@material-ui/core';\n\nimport { GameIcon } from '../icons';\nimport { AddDraftGameDialog } from '../draftgames/DraftGameModal';\n\nexport default ({ requestChanges, size, variant, ...props }) => {\n const game = useRecordContext(props)\n const translate = useTranslate();\n const [ isOpen, setOpen ] = useState(false);\n\n const { id: updatedGameId, ...rest } = game\n const initialValues = { updatedGameId, isPublished: false, ...rest }\n\n // Needed for api to determine if this is a request for changes. Gets removed before saving.\n if (requestChanges) {\n initialValues.requestChanges = true;\n }\n\n return <>\n <Tooltip title={translate(`resources.games.labels.draftUpdates.tooltips.${requestChanges ? 'request' : 'create'}`)} arrow>\n <Button color=\"primary\" size={size} variant={variant} startIcon={<GameIcon />} onClick={() => setOpen(true)}>\n {translate(`resources.games.labels.draftUpdates.${requestChanges ? 'request' : 'create'}`)}\n </Button>\n </Tooltip>\n <AddDraftGameDialog initialValues={initialValues} isOpen={isOpen} component={Fragment} handleClose={() => setOpen(false)} hideRounds requestChanges={requestChanges} />\n </>\n}\n","import React, { Fragment, useState } from 'react';\nimport { useTranslate, useRecordContext } from 'react-admin';\nimport { Button } from '@material-ui/core';\nimport { FileCopyOutlined } from '@material-ui/icons';\n\nimport { isAuthorized } from '../../common/Authorize';\n\nimport { DuplicateGameDialog } from '../draftgames/DraftGameModal';\n\nexport default ({ size, variant, ...props }) => {\n const game = useRecordContext(props)\n const translate = useTranslate();\n const [ isOpen, setOpen ] = useState(false);\n\n const canCreateGame = isAuthorized(game, 'games', 'create');\n\n if (!canCreateGame) return null;\n\n return <>\n <Button color=\"primary\" size={size} variant={variant} startIcon={<FileCopyOutlined />} onClick={() => setOpen(true)}>\n {translate('resources.draftGames.actions.duplicate_game')}\n </Button>\n <DuplicateGameDialog initialValues={{ isPublished: false, ...game }} isOpen={isOpen} component={Fragment} handleClose={() => setOpen(false)} hideRounds />\n </>\n}\n","import React from 'react';\nimport { SimpleForm, useTranslate, NumberInput, useRefresh } from 'react-admin';\nimport { DialogContentText, Grid } from '@material-ui/core'\n\nimport Toolbar from '../../common/ra/Toolbar';\n\nconst validate = values => {\n const errors = {};\n if (!values.awaySeed) errors.awaySeed = 'ra.validation.required'\n if (!values.homeSeed) errors.homeSeed = 'ra.validation.required'\n return errors;\n}\n\nconst inputProps = {\n resource: 'gameBrackets',\n basePath: '/gameBrackets',\n variant: 'outlined',\n margin: 'none',\n fullWidth: true,\n}\n\nexport const SeedsForm = props => {\n const translate = useTranslate();\n const refresh = useRefresh(true);\n\n return <SimpleForm toolbar={<Toolbar />} validate={validate} onSubmit={refresh} {...props}>\n <Grid container spacing={2} fullWidth>\n <Grid item xs={12} >\n <DialogContentText>\n {translate('resources.gameBrackets.messages.edit_seeds')}\n </DialogContentText>\n </Grid>\n <Grid item xs={12} lg={6}>\n <NumberInput source=\"awaySeed\" label={translate('resources.gameBrackets.fields.seeds.away')} {...inputProps} />\n </Grid>\n <Grid item xs={12} lg={6}>\n <NumberInput source=\"homeSeed\" label={translate('resources.gameBrackets.fields.seeds.home')} {...inputProps} />\n </Grid>\n </Grid>\n </SimpleForm>\n}\n","import React, { useState } from 'react';\nimport { useTranslate } from 'react-admin';\nimport { Button } from '@material-ui/core';\nimport { EmojiEventsOutlined } from '@material-ui/icons';\n\nimport { EditResourceDialog } from '../../common/dialogs/ResourceDialog';\n\nimport { SeedsForm } from './SeedsForm';\n\nconst EditSeedsDialog = props =>\n <EditResourceDialog label=\"resources.gameBrackets.labels.edit\" resource=\"gameBrackets\" basePath=\"/gameBrackets\" {...props}>\n <SeedsForm />\n </EditResourceDialog>\n\nexport const EditSeedsButton = ({ size, variant, seeds, ...props }) => {\n const translate = useTranslate();\n const [ isOpen, setOpen ] = useState(false);\n\n if (!seeds) return null;\n return <>\n <Button color=\"primary\" size={size} variant={variant} startIcon={<EmojiEventsOutlined />} onClick={() => setOpen(true)}>{translate('resources.gameBrackets.actions.edit')}</Button>\n <EditSeedsDialog id={seeds?.id} isOpen={isOpen} handleClose={() => setOpen(false)} {...props} />\n </>\n}\n","import React from 'react';\nimport { EditButton, useRecordContext, useTranslate } from 'react-admin';\nimport { Table, TableBody, Tooltip, Typography } from '@material-ui/core';\nimport { useSelector } from 'react-redux';\n\nimport { FF_DRAFT_GAMES } from '@hisports/common/featureFlags';\n\nimport { useFlag, usePermissions } from '../../../http';\nimport { getFilteredScopes } from '../../../http/restClient/response';\nimport FunctionField from '../../../common/fields/FunctionField'\nimport UserTextField from '../../../common/fields/UserTextField';\nimport InfoCard from '../../../common/cards/InfoCard';\nimport Row from '../../../common/cards/TableRow';\nimport TimeRangeField from '../../../common/fields/TimeRangeField';\nimport { isAuthorized } from '../../../common/Authorize';\n\nimport { useIsHomeFirst } from '../../events/EventViewSettings';\nimport { CategoryField } from '../../categories/CategoryField';\nimport { ScheduleField } from '../../schedules/ScheduleField';\nimport { GroupField } from '../../groups/GroupField';\nimport { TeamField } from '../../teams/TeamField';\nimport { SurfaceField } from '../../surfaces/SurfaceField';\nimport { SeasonField } from '../../seasons/SeasonField';\nimport { useSeeds } from '../../gameBrackets/useSeeds';\n\nimport GameForfeitModal from '../GameForfeitModal';\nimport GameStatusModel from '../GameStatusModel';\nimport { GameStatusIcon } from '../GameNumberField';\nimport DraftUpdateModal from '../DraftUpdateModal';\nimport DuplicateGameModal from '../DuplicateGameModal';\nimport { OfficeField } from '../../offices/OfficeField';\nimport { EditSeedsButton } from '../../gameBrackets/SeedsModal';\n\nexport const GameEditButton = ({ game, ...props }) => {\n const translate = useTranslate();\n if (game?.isApproved || game?.isCertified) {\n return <Tooltip title={translate(\"resources.games.actions.edit_completed\")}>\n <div>\n <EditButton label=\"resources.games.actions.edit\" record={game} disabled />\n </div>\n </Tooltip>\n }\n return <EditButton label=\"resources.games.actions.edit\" record={game} />\n}\n\nexport const GameStatusField = ({ gameStatus }) =>\n <FunctionField render={(game, source, resource, translate) => {\n if (gameStatus?.status === 'forfeited') return translate('resources.games.values.status.Forfeited');\n if (gameStatus?.status === 'double-forfeit') return translate('resources.games.values.status.DoubleForfeit');\n\n if (game.isCertified) return translate('resources.games.values.status.Certified');\n if (game.isApproved) return translate('resources.games.values.status.Completed');\n return <>\n {translate(`resources.games.values.status.${game.status}`, { _: game.status })}\n <GameStatusIcon game={game} />\n </>\n }} />\n\nexport default ({ status, ...props }) => {\n const game = useRecordContext(props);\n const isHomeFirst = useIsHomeFirst();\n const isEnabled = useFlag();\n const homeTeam = useSelector(store => store.admin.resources.teams.data[game?.homeTeamId]);\n const permissions = usePermissions();\n const translate = useTranslate();\n\n const { scorekeeping = false, status: gameStatus, rescheduleRequests } = status || {};\n\n const filteredScopes = getFilteredScopes(permissions, game?.officeId, game?.scheduleId, homeTeam?.officeId);\n\n const { data: seeds } = useSeeds(game?.id)\n const isSeeded = seeds?.homeSeed && seeds?.awaySeed\n\n const canEditGame = isAuthorized(filteredScopes, 'games', 'edit')\n const canEditSeeds = isAuthorized(filteredScopes, 'gameBrackets', 'edit') && isSeeded;\n const canChangeStatus = isAuthorized(filteredScopes, 'games', 'changeStatus') && !game.isApproved;\n const canForfeitGame = scorekeeping && isAuthorized(filteredScopes, 'games', 'forfeit') && !['forfeited', 'double-forfeit'].includes(gameStatus) && !!game.homeTeamId && !!game.awayTeamId;\n const canRequestChanges = isEnabled(FF_DRAFT_GAMES) && rescheduleRequests && isAuthorized(game, 'games', 'approve', false, false);\n const canDraftUpdate = isEnabled(FF_DRAFT_GAMES) && isAuthorized(game, 'games', 'create');\n const canDuplicateGame = isEnabled(FF_DRAFT_GAMES) && isAuthorized(game, 'games', 'create');\n\n const homeTeamRow = <Row label=\"resources.games.fields.homeTeamId\">\n <TeamField source=\"homeTeamId\" authMethod=\"gameTeams\" includeId=\"full\" includeCategory=\"full\" />\n </Row>\n const awayTeamRow = <Row label=\"resources.games.fields.awayTeamId\">\n <TeamField source=\"awayTeamId\" authMethod=\"gameTeams\" includeId=\"full\" includeCategory=\"full\" />\n </Row>\n\n return <InfoCard\n title=\"resources.games.name\"\n actions={[\n canEditGame && <GameEditButton game={game} />,\n canEditSeeds && <EditSeedsButton seeds={seeds} />,\n canChangeStatus && <GameStatusModel />,\n canForfeitGame && <GameForfeitModal />,\n canDraftUpdate && <DraftUpdateModal />,\n canDuplicateGame && <DuplicateGameModal />,\n canRequestChanges && <DraftUpdateModal requestChanges={canRequestChanges} />,\n ]}\n >\n <Table>\n <TableBody>\n <Row label=\"resources.games.fields.officeId\">\n <OfficeField source=\"officeId\" />\n </Row>\n <Row label=\"resources.games.fields.scheduleId\">\n <ScheduleField source=\"scheduleId\" includeCategory=\"full\" />\n </Row>\n <Row label=\"resources.games.fields.groupId\" hidden={!game?.groupId}>\n <GroupField source=\"groupId\" />\n </Row>\n <Row label=\"resources.games.fields.crossScheduleId\" hidden={!game?.crossScheduleId}>\n <ScheduleField source=\"crossScheduleId\" includeCategory=\"full\" />\n </Row>\n <Row label=\"resources.games.fields.crossGroupId\" hidden={!game?.crossGroupId}>\n <GroupField source=\"crossGroupId\" />\n </Row>\n <Row label=\"resources.games.labels.time\">\n <TimeRangeField startSource=\"startTime\" endSource=\"endTime\" showDate showLocal />\n </Row>\n {isHomeFirst ? <>{homeTeamRow}{awayTeamRow}</> : <>{awayTeamRow}{homeTeamRow}</>}\n <Row label=\"resources.games.fields.arenaId\">\n <SurfaceField source=\"arenaId\" includeAttributes=\"full\" includeCity=\"full\" />\n </Row>\n <Row label=\"resources.games.fields.categoryId\">\n <CategoryField source=\"categoryId\" includeGender=\"full\" />\n </Row>\n <Row label=\"resources.games.fields.seasonId\">\n <SeasonField source=\"seasonId\" />\n </Row>\n <Row label=\"resources.games.fields.status\">\n <GameStatusField source=\"status\" gameStatus={status} />\n </Row>\n <Row label=\"resources.games.fields.comments\" hidden={!game?.comments}>\n <UserTextField source=\"comments\" />\n </Row>\n <Row label=\"resources.gameBrackets.fields.seeds.title\" hidden={!isSeeded} >\n <Typography variant=\"inherit\" >{translate('resources.gameBrackets.fields.seeds.away')} : Position #{seeds?.awaySeed}\n <br />\n {translate('resources.gameBrackets.fields.seeds.home')} : Position #{seeds?.homeSeed}</Typography>\n </Row>\n </TableBody>\n </Table>\n </InfoCard>\n}\n","import React, { useState } from 'react';\nimport { useNotify } from 'react-admin';\nimport { Dialog, DialogTitle, DialogContent, DialogContentText, DialogActions, Button, Tooltip, Checkbox, FormControlLabel } from '@material-ui/core'\nimport { Assignment } from '@material-ui/icons';\n\nimport { apiClient } from '../../../../../../http';\nimport { useRichTranslate } from '../../../../../../common/useRichTranslate';\nimport { ParticipantField } from '../../../../../participants/ParticipantField';\n\nimport { isExpired, isIneligible, isUnavailable, filterFlags } from '../util';\nimport { useAssignmentContext } from '../AssignmentContext';\nimport { useAssignmentsContext } from '../../AssignmentsContext';\nimport { AdhocOfficial } from '..';\n\nexport const assign = (assignmentId, gameId, participantId, position, existingId, replacedIsNoShow = false) =>\n apiClient(`/games/${gameId}/assign`, {\n method: 'POST',\n data: {\n assignmentId,\n participantId,\n replacedParticipantId: existingId,\n replacedIsNoShow,\n position,\n },\n })\n\nconst ReassignDialog = ({ assignment = {}, official, open, onClose, game }) => {\n const [ checked, setChecked ] = useState(false);\n const translate = useRichTranslate();\n const { meta } = useAssignmentContext();\n const { isAdhoc } = meta || {};\n\n const oldOfficial = isAdhoc ? <AdhocOfficial participant={assignment.participant} /> : <ParticipantField record={assignment} source=\"participantId\" variant=\"inherit\" link={false} />\n const newOfficial = <ParticipantField record={official} source=\"participantId\" variant=\"inherit\" link={false} />\n\n const handleCancel = () => onClose(false);\n const handleConfirm = () => onClose(true, checked);\n const handleSelect = () => setChecked(!checked);\n\n return <Dialog open={open} onClose={handleCancel} maxWidth=\"sm\" fullWidth>\n <DialogTitle>{translate('resources.games.labels.assignment.confirm_reassignment')}</DialogTitle>\n <DialogContent>\n <DialogContentText>\n {translate('resources.games.messages.assignment.already_assigned', { name: oldOfficial })}\n </DialogContentText>\n <DialogContentText>\n {translate('resources.games.messages.assignment.continuing_replacement', { name1: oldOfficial, name2: newOfficial })}\n </DialogContentText>\n {game?.isApproved && !isAdhoc && <DialogContentText>\n <FormControlLabel\n label={translate('resources.games.messages.assignment.mark_as_no_show', { name: oldOfficial })}\n control={<Checkbox color=\"primary\" checked={checked} onChange={handleSelect} />}\n />\n </DialogContentText>}\n </DialogContent>\n <DialogActions>\n <Button onClick={handleCancel} autoFocus>{translate('ra.action.cancel')}</Button>\n <Button onClick={handleConfirm} color=\"primary\">{translate('ra.action.remove')} & {translate('ra.action.assign')}</Button>\n </DialogActions>\n </Dialog>\n}\n\nconst ConflictDialog = ({ assignment, official, flags, open, onClose }) => {\n const translate = useRichTranslate();\n const participant = <ParticipantField record={official} source=\"participantId\" variant=\"inherit\" />\n const handleCancel = () => onClose(false);\n const handleConfirm = () => onClose(true);\n\n const expired = isExpired(flags);\n if (expired) {\n return <Dialog open={open} onClose={handleCancel} maxWidth=\"sm\" fullWidth>\n <DialogTitle>{translate('resources.games.labels.assignment.expired_qualification')}</DialogTitle>\n <DialogContent>\n <DialogContentText>\n {translate('resources.games.messages.assignment.invalid_qualification', { name: participant })}\n </DialogContentText>\n <DialogContentText>\n {translate('resources.games.messages.assignment.verified_eligibility')}\n </DialogContentText>\n </DialogContent>\n <DialogActions>\n <Button onClick={handleCancel} autoFocus>{translate('ra.action.cancel')}</Button>\n <Button onClick={handleConfirm}>{translate('ra.action.assign_anyway')}</Button>\n </DialogActions>\n </Dialog>\n }\n\n return <Dialog open={open} onClose={handleCancel} maxWidth=\"sm\" fullWidth>\n <DialogTitle>{translate('resources.games.labels.assignment.flagged_official')}</DialogTitle>\n <DialogContent>\n <DialogContentText>\n {translate('resources.games.messages.assignment.unable_accept_assignment', { name: participant })}\n </DialogContentText>\n </DialogContent>\n <DialogActions>\n <Button onClick={handleCancel} autoFocus>{translate('ra.action.cancel')}</Button>\n <Button onClick={handleConfirm} color=\"primary\">{translate('ra.action.assign_anyway')}</Button>\n </DialogActions>\n </Dialog>\n}\n\nexport default ({ game, assignment, official, filters, disabled, onClose, onAssign = () => {} }) => {\n const [ dialog, setDialog ] = useState(null); // [reassign ->] [conflict ->] assign\n const [ assigned, setAssigned ] = useState(false);\n const [ inFlight, setInFlight ] = useState(false); // prevent double requests\n const notify = useNotify();\n const translate = useRichTranslate();\n const { meta } = useAssignmentContext();\n const { refetch, setOpenAssignmentIndexes } = useAssignmentsContext();\n const { isAdhoc } = meta || {};\n\n if (!game || !official || !assignment) return null;\n if (!official.participantId || !assignment.position) return null;\n\n const flags = filterFlags(official.flags, assignment.position, filters, official.meta)\n const flagged = isIneligible(flags) || isExpired(flags) || isUnavailable(flags);\n const empty = assignment.participantId == null && !isAdhoc;\n\n const handleAssign = (isNoShow) => {\n if (inFlight) return;\n\n const replacedIsNoShow = isNoShow && !isAdhoc;\n\n setAssigned(true);\n setInFlight(true);\n assign(assignment.id, game.id, official.participantId, assignment.position, assignment.participantId, replacedIsNoShow)\n .then(res => {\n if (replacedIsNoShow) {\n setOpenAssignmentIndexes([]);\n setTimeout(() => refetch(), 750)\n } else {\n onClose(assignment);\n }\n setAssigned(false);\n onAssign(official);\n notify(translate('resources.games.notifications.assignment.official_assigned_to_game', { number: game.number }), 'success')\n })\n .catch(err => {\n setAssigned(false);\n const message = err?.response?.data?.error?.message\n notify(message || 'ra.page.error_try_again', 'error')\n })\n .finally(() => {\n setInFlight(false)\n })\n }\n\n const handleClick = () => {\n if (!empty) {\n setDialog('reassign')\n return;\n }\n\n if (flagged) {\n setDialog('conflict');\n return;\n }\n\n handleAssign();\n }\n\n const handleDialog = (confirmed, isNoShow) => {\n if (!confirmed) {\n setDialog(null);\n return;\n }\n\n if (dialog === 'reassign' && flagged && !game.isApproved) {\n setDialog('conflict');\n return;\n }\n\n setDialog(null);\n handleAssign(isNoShow);\n }\n\n return <>\n <Tooltip title={translate('resources.games.messages.assignment.assign_official_to_game')}>\n <Button\n color=\"primary\"\n startIcon={<Assignment fontSize=\"small\" />}\n disabled={disabled || assigned}\n onClick={handleClick}\n >\n {empty ? translate('ra.action.assign') : translate('ra.action.reassign')}\n </Button>\n </Tooltip>\n <ReassignDialog assignment={assignment} official={official} open={dialog === 'reassign'} onClose={handleDialog} game={game} />\n <ConflictDialog assignment={assignment} official={official} flags={flags} open={dialog === 'conflict'} onClose={handleDialog} />\n </>\n}\n","import React, { Fragment, useState } from 'react';\nimport { useNotify, useTranslate } from 'react-admin';\nimport { Dialog, DialogTitle, DialogContent, DialogContentText, DialogActions, Button, Tooltip, Checkbox, FormControlLabel } from '@material-ui/core'\nimport { Clear } from '@material-ui/icons';\n\nimport { apiClient, useParticipant } from '../../../../../../http';\nimport { useRichTranslate } from '../../../../../../common/useRichTranslate';\nimport { isAuthorized } from '../../../../../../common/Authorize';\nimport { ParticipantField } from '../../../../../participants/ParticipantField';\n\nimport { useAssignmentContext } from '../AssignmentContext';\n\nconst remove = (gameId, participantId, isNoShow = false, officialId) =>\n apiClient(`/games/${gameId}/removeAssignment`, {\n method: 'POST',\n data: {\n participantId,\n isNoShow,\n officialId,\n },\n })\n\nconst ConfirmDialog = ({ assignment, official, assigner, open, onClose, game }) => {\n const [ checked, setChecked ] = useState(false);\n const translate = useRichTranslate()\n const participantId = useParticipant()\n const { meta } = useAssignmentContext();\n const { isAdhoc } = meta || {};\n\n const handleCancel = () => onClose(false);\n const handleConfirm = () => onClose(true, checked);\n const handleSelect = () => setChecked(!checked);\n\n const showNoShow = game?.isApproved && !isAdhoc && assignment?.status !== 'no-show';\n const officialName = <ParticipantField record={official} source=\"participantId\" variant=\"inherit\" link={false} />\n\n const message = official.participantId !== participantId\n ? translate('resources.games.messages.assignment.removed_from_game', { name: official.participant.fullName })\n : translate('resources.games.messages.assignment.request_removed')\n return <Dialog open={open} onClose={handleCancel} fullWidth maxWidth=\"xs\">\n <DialogTitle>{translate('ra.action.confirm_removal')}</DialogTitle>\n <DialogContent>\n <DialogContentText>\n {message}\n </DialogContentText>\n {showNoShow && <DialogContentText>\n <FormControlLabel\n label={translate('resources.games.messages.assignment.mark_as_no_show', { name: officialName })}\n control={<Checkbox color=\"primary\" checked={checked} onChange={handleSelect} />}\n />\n </DialogContentText>}\n </DialogContent>\n <DialogActions>\n <Button onClick={handleCancel} autoFocus>{translate('ra.action.cancel')}</Button>\n <Button onClick={handleConfirm} color=\"primary\">{translate('ra.action.remove')}</Button>\n </DialogActions>\n </Dialog>\n}\n\nexport default ({ game, assignment, official, disabled, onClose }) => {\n const [ removed, setRemoved ] = useState(false);\n const [ showConfirm, setConfirm ] = useState(false);\n const notify = useNotify();\n const translate = useTranslate();\n const participantId = useParticipant();\n const { meta } = useAssignmentContext();\n const { isUnassigned } = meta || {};\n const isSelf = official?.participantId === participantId;\n\n if (!game || !assignment || !official) return null;\n if (!official.participantId) return null;\n\n const canAssign = isAuthorized(game, 'games', 'assign');\n\n const handleConfirm = (confirmed, isNoShow) => {\n setConfirm(false);\n if (!confirmed) return;\n\n setRemoved(true)\n remove(game.id, official.participantId, isNoShow, !isUnassigned ? assignment.id : null).then(res => {\n onClose(assignment, isSelf && !canAssign ? participantId : null)\n const message = canAssign\n ? translate('resources.games.notifications.assignment.remove_official_from_game', { number: game.number })\n : translate('resources.games.notifications.assignment.request_removed_from_game', { number: game.number })\n notify(message, 'success')\n }).catch(err => {\n setRemoved(false);\n const message = err?.response?.data?.error?.message\n notify(message || 'ra.page.error_try_again', 'error')\n })\n }\n\n const tooltip = canAssign\n ? translate('resources.games.messages.assignment.remove_official_from_assignment')\n : translate('resources.games.messages.assignment.remove_request_from_game')\n return <>\n <Tooltip title={tooltip}>\n <Button\n color=\"secondary\"\n startIcon={<Clear fontSize=\"small\" />}\n disabled={disabled || removed}\n onClick={() => setConfirm(true)}\n >\n {translate('ra.action.remove')}\n </Button>\n </Tooltip>\n <ConfirmDialog assignment={assignment} official={official} assigner={canAssign} open={showConfirm} onClose={handleConfirm} game={game} />\n </>\n}\n","import React, { useState } from 'react';\nimport { useNotify, useTranslate } from 'react-admin';\nimport { Dialog, DialogTitle, DialogContent, DialogContentText, DialogActions, Button, RadioGroup, FormControlLabel, Radio, Tooltip, Typography, makeStyles } from '@material-ui/core'\nimport { Cached as SwapIcon } from '@material-ui/icons';\n\nimport { isDelegated } from '@hisports/assigning';\n\nimport { apiClient } from '../../../../../../http';\n\nimport { useAssignmentsContext } from '../../AssignmentsContext';\n\nconst useStyles = makeStyles(theme => ({\n choiceSubtitle: {\n paddingLeft: '31px',\n marginTop: '-10px'\n },\n bottomText: {\n marginTop: theme.spacing(1.5)\n }\n}))\n\nconst updatePosition = (gameId, participantId, position) =>\n apiClient(`/games/${gameId}/switchAssignment`, {\n method: 'POST',\n data: { participantId, position },\n }).then(res => res.data);\n\nconst SwitchDialog = ({ assignment, assignments, official, open, onClose }) => {\n const translate = useTranslate()\n const classes = useStyles()\n const [ selected, setSelected ] = useState()\n const handleCancel = () => onClose();\n const handleChange = e => setSelected(e.target.value)\n const handleConfirm = () => onClose(selected);\n\n return <Dialog open={open} onClose={handleCancel} fullWidth maxWidth=\"sm\">\n <DialogTitle>{translate('resources.games.labels.assignment.swap_assignment')}</DialogTitle>\n <DialogContent>\n <DialogContentText>\n {translate('resources.games.messages.assignment.select_new_assignment', { name: official.participant.fullName })}:\n </DialogContentText>\n <RadioGroup aria-label=\"assignment\" name=\"assignment\" value={selected} onChange={handleChange}>\n {assignments.map(choice => {\n const isCurrentPosition = choice.position === assignment.position\n const isSameAssignOffice = isDelegated(assignment) ? assignment.officeId === choice?.officeId : !choice?.officeId\n const label = translate(`resources.assignFees.fields.${choice.position}`, { _: choice.position })\n let subLabel;\n\n if (isCurrentPosition) {\n subLabel = translate('resources.games.messages.assignment.swap_current_position')\n } else if (!isSameAssignOffice) {\n subLabel = translate('resources.games.messages.assignment.swap_delegated')\n } else if (choice?.participant?.fullName) {\n subLabel = translate('resources.games.messages.assignment.swap_choice', { name: choice.participant.fullName, position: assignment.position })\n }\n\n return <>\n <FormControlLabel key={choice.id} label={label} value={choice.id} disabled={isCurrentPosition || !isSameAssignOffice} control={<Radio />} />\n {subLabel && <Typography variant=\"body2\" color=\"textSecondary\" className={classes.choiceSubtitle}>{subLabel}</Typography> }\n </>\n })}\n <DialogContentText className={classes.bottomText}>\n {translate('resources.games.messages.assignment.swap_settings_help')}\n </DialogContentText>\n </RadioGroup>\n </DialogContent>\n <DialogActions>\n <Button onClick={handleCancel} autoFocus>{translate('ra.action.cancel')}</Button>\n <Button onClick={handleConfirm} color=\"primary\" disabled={!selected}>{translate('ra.action.swap')}</Button>\n </DialogActions>\n </Dialog>\n}\n\nexport default ({ game, assignment, official, disabled, onClose }) => {\n const [ showConfirm, setConfirm ] = useState(false);\n const { assignments, refetch, setOpenAssignmentIndexes } = useAssignmentsContext();\n const notify = useNotify();\n const translate = useTranslate();\n\n if (!game || !assignment || !official) return null;\n if (!official.participantId) return null;\n\n const handleConfirm = assignmentId => {\n setConfirm(false);\n\n const withAssignment = assignments.find(assignment => assignment.id === assignmentId)\n\n if (!withAssignment) return;\n\n Promise.all([\n assignment.participantId && updatePosition(game.id, assignment.participantId, withAssignment.position),\n withAssignment.participantId && updatePosition(game.id, withAssignment.participantId, assignment.position)\n ]).then(res => {\n setOpenAssignmentIndexes([]);\n }).catch(err => {\n notify('ra.page.error_try_again', 'error')\n }).finally(() => {\n refetch();\n })\n }\n\n return <>\n <Tooltip title={translate('resources.games.labels.assignment.swap_assignment_official')}>\n <Button\n color=\"secondary\"\n startIcon={<SwapIcon fontSize=\"small\" />}\n disabled={disabled}\n onClick={() => setConfirm(true)}\n >\n {translate('ra.action.swap')}\n </Button>\n </Tooltip>\n <SwitchDialog assignment={assignment} assignments={assignments} official={official} open={showConfirm} onClose={handleConfirm} />\n </>\n}\n","import React, { Fragment, useState } from 'react';\nimport { useNotify, useTranslate } from 'react-admin';\nimport { Dialog, DialogTitle, DialogContent, DialogContentText, DialogActions, Button, Tooltip, TextField } from '@material-ui/core'\nimport { Feedback } from '@material-ui/icons';\n\nimport { apiClient } from '../../../../../../http';\n\nconst request = (gameId, position, notes) =>\n apiClient(`/games/${gameId}/requestAssignment`, {\n method: 'POST',\n data: { position, notes },\n })\n\nconst ConfirmDialog = ({ assignment, official, open, onClose }) => {\n const translate = useTranslate();\n const [ notes, setNotes ] = useState('');\n const handleCancel = () => onClose(false);\n const handleConfirm = () => onClose(true, notes);\n const handleNotes = event => setNotes(event.target.value);\n\n return <Dialog open={open} onClose={handleCancel} fullWidth maxWidth=\"sm\">\n <DialogTitle>{translate('resources.games.labels.assignment.confirm_request')}</DialogTitle>\n <DialogContent>\n <DialogContentText>\n {translate('resources.games.messages.assignment.assigners_will_be_notified')}\n </DialogContentText>\n <TextField\n margin=\"dense\"\n fullWidth\n multiline\n rows={2}\n label={translate('resources.games.labels.notes', 1)}\n helperText={translate('ra.message.optional')}\n value={notes}\n onChange={handleNotes}\n />\n </DialogContent>\n <DialogActions>\n <Button onClick={handleCancel} autoFocus>{translate('ra.action.cancel')}</Button>\n <Button onClick={handleConfirm} color=\"primary\">{translate('ra.action.request')}</Button>\n </DialogActions>\n </Dialog>\n}\n\nexport default ({ game, assignment, official, disabled, onClose }) => {\n const [ requested, setRequested ] = useState(false);\n const [ showConfirm, setConfirm ] = useState(false);\n const notify = useNotify();\n const translate = useTranslate();\n\n if (!game || !assignment || !official) return null;\n\n const handleConfirm = (confirmed, notes) => {\n setConfirm(false);\n if (!confirmed) return;\n\n setRequested(true)\n request(game.id, assignment.position, notes).then(res => {\n onClose(assignment, official.participantId)\n notify(translate('resources.games.notifications.assignment.requested_game', { number: game.number }), 'success')\n }).catch(err => {\n setRequested(false)\n const message = err?.response?.data?.error?.message\n notify(message || 'ra.page.error_try_again', 'error')\n })\n }\n\n return <>\n <Tooltip title={translate('resources.games.labels.assignment.request_game')}>\n <Button\n color=\"primary\"\n startIcon={<Feedback fontSize=\"small\" />}\n disabled={disabled || requested}\n onClick={() => setConfirm(true)}\n >\n {translate('ra.action.request')}\n </Button>\n </Tooltip>\n <ConfirmDialog assignment={assignment} official={official} open={showConfirm} onClose={handleConfirm} />\n </>\n}\n","import React from 'react';\nimport { ReferenceField, TextField, useRecordContext } from 'react-admin';\n\nimport { isAuthorized } from '../../common/Authorize';\nimport TimeRangeField from '../../common/fields/TimeRangeField';\nimport DateField from '../../common/fields/DateField';\n\nimport { SurfaceField } from '../surfaces/SurfaceField';\n\nconst GameDetails = ({ hideSurface, hideGameTime, ...props }) => {\n const date = hideGameTime ? <DateField source=\"date\" showLocal /> : <TimeRangeField startSource=\"startTime\" endSource=\"endTime\" showDate />\n\n return <>\n <TextField source=\"number\" />: {date}{!hideSurface && <>@ <SurfaceField source=\"arenaId\" link={false} /></>}\n </>\n}\n\nexport const GameDetailsField = ({ includeCity = false, hideSurface = false, hideGameTime = false, link = 'show', ...props }) => {\n const game = useRecordContext(props)\n\n return <ReferenceField\n basePath=\"/games\"\n resource=\"games\"\n reference=\"games\"\n link={isAuthorized(game, 'games', 'show') ? link : false}\n {...props}\n >\n <GameDetails hideSurface={hideSurface} hideGameTime={hideGameTime} />\n </ReferenceField>\n}\n\nGameDetailsField.defaultProps = {\n addLabel: true,\n}\n","import React, { Fragment, useState } from 'react';\nimport { useNotify, useTranslate } from 'react-admin';\nimport { Dialog, DialogTitle, DialogContent, DialogContentText, DialogActions, Button, TextField, Tooltip } from '@material-ui/core'\nimport { DoneAll } from '@material-ui/icons';\n\nimport { apiClient } from '../../../../../../http';\nimport { useAssignmentsContext } from '../../AssignmentsContext';\nimport { GameDetailsField } from '../../../../../games/GameDetailsField';\n\nconst accept = (gameId, notes, isAvailable) =>\n apiClient(`/games/${gameId}/respondAssignment`, {\n method: 'POST',\n data: { accepted: true, notes, isAvailable },\n })\n\nconst getIds = (official, flag) => {\n const meta = official.meta[flag];\n if (!meta) return [];\n return meta.ids || [];\n}\n\nconst ConfirmDialog = ({ assignment, official, open, onClose }) => {\n const translate = useTranslate();\n const { settings } = useAssignmentsContext()\n const [ notes, setNotes ] = useState('')\n const handleCancel = () => onClose(false);\n const handleConfirm = () => onClose(true, notes);\n const handleNotes = event => setNotes(event.target.value);\n\n const conflicts = getIds(official, 'Game Conflict'); // accepted games, require manual decline first\n const overlaps = getIds(official, 'Game Overlap'); // unconfirmed games\n const consecutives = getIds(official, 'Consecutive');\n const hasConflicts = conflicts.length > 0;\n const hasOverlaps = overlaps.length > 0;\n const hasConsecutives = consecutives.length > 0 && settings.enforceConsecutive;\n\n return <Dialog open={open} onClose={handleCancel} fullWidth maxWidth=\"sm\">\n <DialogTitle>{translate('resources.games.labels.assignment.confirm')}</DialogTitle>\n <DialogContent>\n {!hasConflicts && <DialogContentText>\n {translate(`resources.games.messages.assignment.are_you_sure_accept_assignment${settings?.declineConfirmedDisabled ? '_disabled' : ''}`)}\n </DialogContentText>}\n {!hasConflicts && hasOverlaps && <DialogContentText>\n {translate('resources.games.messages.assignment.accepting_assignment')}\n <ul>\n {overlaps.map(id => <li><GameDetailsField record={{ id }} source=\"id\" /></li>)}\n </ul>\n </DialogContentText>}\n {hasConflicts && <DialogContentText>\n {translate('resources.games.messages.assignment.you_cannot_accept_assignment')}\n <ul>\n {conflicts.map(id => <li><GameDetailsField record={{ id }} source=\"id\" /></li>)}\n </ul>\n </DialogContentText>}\n {!hasConflicts && hasConsecutives && <DialogContentText>\n {translate('resources.games.messages.assignment.accept_consecutive_assignments')}\n <ul>\n {consecutives.map(id => <li><GameDetailsField record={{ id }} source=\"id\" /></li>)}\n </ul>\n </DialogContentText>}\n\n <TextField\n margin=\"dense\"\n fullWidth\n multiline\n rows={2}\n label={translate('resources.games.labels.notes', 1)}\n helperText={translate(\"ra.message.optional\")}\n value={notes}\n onChange={handleNotes}\n />\n </DialogContent>\n <DialogActions>\n <Button onClick={handleCancel} autoFocus>{translate('ra.action.cancel')}</Button>\n <Button onClick={handleConfirm} color=\"primary\" disabled={hasConflicts}>{translate('ra.action.accept')}</Button>\n </DialogActions>\n </Dialog>\n}\n\nexport default ({ game, assignment, official, disabled, onClose }) => {\n const [ accepted, setAccepted ] = useState(false);\n const [ showConfirm, setConfirm ] = useState(false);\n const notify = useNotify();\n const translate = useTranslate();\n\n if (!game || !assignment || !official) return null;\n\n const isUnavailable = official.flags.includes('Unavailable') || official.flags.includes('Availability');\n\n const handleConfirm = (confirmed, notes) => {\n setConfirm(false);\n if (!confirmed) return;\n\n const isAvailable = isUnavailable ? true : undefined;\n setAccepted(true);\n accept(game.id, notes, isAvailable)\n .then(res => {\n onClose(assignment, official.participantId)\n notify(translate('resources.games.notifications.assignment.accepted_game', { number: game.number }), 'success')\n }).catch(err => {\n setAccepted(false);\n const errorName = err?.response?.data?.error?.name;\n const errorMessage = errorName && translate(`resources.games.notifications.assignment.errors.${errorName}`);\n notify(errorMessage || 'ra.page.error_try_again', 'error')\n })\n }\n\n return <>\n <Tooltip title={translate('resources.games.messages.assignment.accept_game_assignment')}>\n <Button\n color=\"primary\"\n startIcon={<DoneAll fontSize=\"small\" />}\n disabled={disabled || accepted}\n onClick={() => setConfirm(true)}\n >\n {translate('ra.action.accept')}\n </Button>\n </Tooltip>\n <ConfirmDialog assignment={assignment} official={official} open={showConfirm} onClose={handleConfirm} />\n </>\n}\n","import React, { Fragment, useState } from 'react';\nimport { useNotify, useTranslate } from 'react-admin';\nimport { Dialog, DialogTitle, DialogContent, DialogContentText, DialogActions, Button, TextField, Tooltip, FormControl, FormControlLabel, RadioGroup, Radio } from '@material-ui/core'\nimport { Clear } from '@material-ui/icons';\nimport moment from 'moment-timezone';\n\nimport { apiClient } from '../../../../../../http';\nimport { GameDetailsField } from '../../../../../games/GameDetailsField';\n\nconst DECLINE_AVAILABLE = -1;\nconst DECLINE_UNAVAILABLE = 0;\nconst REPEATING_REGEX = /([^a-zA-Z0-9])\\1{1,}/;\nconst MIN_REASON_LENGTH = 15;\n\nconst respond = (gameId, accepted, notes, isAvailable) =>\n apiClient(`/games/${gameId}/respondAssignment`, {\n method: 'POST',\n data: { accepted, notes, isAvailable },\n })\n\nconst getIds = (official, flag) => {\n const meta = official.meta[flag];\n if (!meta) return [];\n return meta.ids || [];\n}\n\nconst ConfirmDialog = ({ assignment, official, settings, disabled, open, onClose }) => {\n const translate = useTranslate();\n const isUnavailable = official.flags.includes('Unavailable') || official.flags.includes('Availability');\n const conflicts = getIds(official, 'Game Conflict'); // accepted games, require manual decline first\n const overlaps = getIds(official, 'Game Overlap'); // unconfirmed games\n const consecutives = getIds(official, 'Consecutive');\n const hasConflicts = conflicts.length > 0;\n const hasOverlaps = overlaps.length > 0;\n const hasConsecutives = consecutives.length > 0 && settings.enforceConsecutive;\n\n const [ option, setOption ] = useState(isUnavailable ? DECLINE_UNAVAILABLE : DECLINE_AVAILABLE);\n const [ reason, setReason ] = useState('');\n\n const handleCancel = () => onClose(false);\n const handleConfirm = () => onClose(true, reason, option);\n const handleOption = event => setOption(Number(event.target.value));\n const handleReason = event => setReason(event.target.value)\n\n const acceptingOther = option > 0;\n const reasonRequired = settings.declineReason;\n const reasonLength = reason ? reason.replace(REPEATING_REGEX, '$1').length : 0; // counts repeating characters as 1\n const reasonValid = !reasonRequired || reasonLength >= MIN_REASON_LENGTH;\n const isValid = option !== null && (acceptingOther || reasonValid)\n\n let label = translate('resources.games.messages.assignment.reason_for_declining');\n let helperText;\n\n if (acceptingOther) {\n label = translate('resources.games.labels.notes', 1)\n helperText = translate('resources.games.helpers.assignment.note_for_accepted_game')\n } else if (reasonRequired) {\n if (reasonLength > 0 && reasonLength < MIN_REASON_LENGTH) {\n const remaining = MIN_REASON_LENGTH - reasonLength\n helperText = `${translate('ra.validation.required')} - ${translate('ra.validation.more_characters', remaining)}`\n } else {\n helperText = translate('ra.validation.required')\n }\n }\n\n const assignments = overlaps.length === 1\n ? translate('resources.games.messages.assignment.both_assignments')\n : translate('resources.games.messages.assignment.assignments', overlaps.length + 1)\n\n return <Dialog open={open} onClose={handleCancel} fullWidth maxWidth=\"sm\">\n <DialogTitle>{translate('resources.games.labels.assignment.decline')}</DialogTitle>\n <DialogContent>\n {disabled && <DialogContentText>\n {translate('resources.games.messages.assignment.contact_assigner')}\n </DialogContentText>}\n\n {!disabled && <>\n <DialogContentText>{translate('resources.games.messages.assignment.decline_assignment')}</DialogContentText>\n\n {!hasConflicts && hasOverlaps && <DialogContentText>{translate('resources.games.messages.assignment.other_assignments')}</DialogContentText>}\n {!hasConflicts && <FormControl>\n <RadioGroup value={option} onChange={handleOption}>\n <FormControlLabel value={DECLINE_UNAVAILABLE} control={<Radio />} label={translate('resources.games.messages.assignment.decline_as_unavailable', { assignments })} />\n <FormControlLabel value={DECLINE_AVAILABLE} control={<Radio />} label={translate('resources.games.messages.assignment.decline_as_available', { assignments })} />\n {hasOverlaps && <>\n <br />\n <DialogContentText>{translate('resources.games.messages.assignment.accept_another_assignment')}:</DialogContentText>\n {overlaps.map(id =>\n <FormControlLabel value={id} control={<Radio />} label={<GameDetailsField record={{ id }} source=\"id\" />} />\n )}\n </>}\n </RadioGroup>\n </FormControl>}\n {!hasConflicts && hasConsecutives && !acceptingOther && <DialogContentText>\n <br />\n {translate('resources.games.messages.assignment.decline_consecutive_assignments')}\n <ul>\n {consecutives.map(id => <li><GameDetailsField record={{ id }} source=\"id\" /></li>)}\n </ul>\n </DialogContentText>}\n\n <TextField\n margin=\"dense\"\n fullWidth\n multiline\n rows={3}\n label={label}\n helperText={helperText}\n value={reason}\n onChange={handleReason}\n />\n </>}\n </DialogContent>\n <DialogActions>\n <Button onClick={handleCancel} autoFocus>{translate('ra.action.cancel')}</Button>\n <Button onClick={handleConfirm} color=\"primary\" disabled={disabled || !isValid}>{!acceptingOther ? translate('ra.action.decline') : translate('ra.action.accept_other')}</Button>\n </DialogActions>\n </Dialog>\n}\n\nexport default ({ game, assignment, official, settings, disabled, onClose }) => {\n const [ declined, setDeclined ] = useState(false);\n const [ showConfirm, setConfirm ] = useState(false);\n const notify = useNotify();\n const translate = useTranslate();\n\n if (!game || !assignment || !official || !settings) return null;\n\n const hours = moment.tz(game.startTime, game.timezone).diff(moment(), 'hours', true)\n const declineAllowed = settings.declineEnabled && (settings.declineHours == null || hours >= settings.declineHours) && !(settings.declineConfirmedDisabled && assignment.status === 'confirmed');\n\n const handleConfirm = (confirmed, notes, option) => {\n setConfirm(false);\n if (!confirmed) return;\n\n // options 0 and -1 decline this game, otherwise (>0) game id to accept instead\n const acceptingOther = option > 0;\n const gameId = acceptingOther ? option : game.id;\n const isAvailable = option !== DECLINE_UNAVAILABLE;\n setDeclined(true)\n respond(gameId, acceptingOther, notes, isAvailable).then(res => {\n onClose(assignment, official.participantId)\n notify(translate('resources.games.notifications.assignment.declined_game', { number: game.number }), 'success')\n }).catch(err => {\n setDeclined(false)\n const errorName = err?.response?.data?.error?.name;\n const errorMessage = errorName && translate(`resources.games.notifications.assignment.errors.${errorName}`);\n notify(errorMessage || 'ra.page.error_try_again', 'error')\n })\n }\n\n return <>\n <Tooltip title={translate('resources.games.messages.assignment.decline_game_assignment')}>\n <Button\n color=\"secondary\"\n startIcon={<Clear fontSize=\"small\" />}\n disabled={disabled || declined}\n onClick={() => setConfirm(true)}\n >\n {translate('ra.action.decline')}\n </Button>\n </Tooltip>\n <ConfirmDialog assignment={assignment} official={official} settings={settings} disabled={!declineAllowed} open={showConfirm} onClose={handleConfirm} />\n </>\n}\n","import React from 'react';\nimport { useTranslate } from 'react-admin';\nimport { Button, Tooltip } from '@material-ui/core';\n\nimport { useAssignmentsContext } from '../../AssignmentsContext';\nimport { useAssignmentContext } from '../AssignmentContext';\nimport { filterFlags, isAssigned, isUnconfirmed, isIneligible, isRequested, isConflict, isDeclined, isExpired } from '../util';\n\nimport AssignButton from './AssignButton';\nimport RemoveButton from './RemoveButton';\nimport SwapButton from './SwapButton';\nimport RequestButton from './RequestButton';\nimport AcceptButton from './AcceptButton';\nimport DeclineButton from './DeclineButton';\n\n\nexport default ({ className: classProps, onAssign, quickAssign = false }) => {\n const { game, settings, branchSettings, assignments, refresh } = useAssignmentsContext();\n const { assignment, meta, official, filters, selectedId, selectOfficial, closePanel } = useAssignmentContext();\n const translate = useTranslate();\n\n if (!game || !assignment || !settings || !meta) return null;\n\n const { canAssign, canRequest, isAssignedSelf, isUnassigned, isOfficialSelf, isCompleted, isCertified } = meta;\n\n const changed = assignment.participantId !== selectedId\n const isNoShow = assignment.status === 'no-show';\n const isDraft = settings.status === 'Draft'\n\n const flags = official ? filterFlags(official.flags, assignment.position, filters, official.meta) : [];\n\n const assigned = ['assigned', 'confirmed'].includes(assignment.status);\n const assignedOther = isAssigned(flags);\n const unconfirmed = isUnconfirmed(flags);\n const ineligible = isIneligible(flags);\n const expired = isExpired(flags);\n const requested = isRequested(flags);\n const declined = isDeclined(flags);\n const conflicted = isConflict(flags);\n\n const showRequest = canRequest && !assigned && !declined && !isNoShow && isOfficialSelf && !quickAssign;\n const showAccept = isAssignedSelf && (assigned || declined || isNoShow) && isOfficialSelf && !quickAssign;\n const showDecline = isAssignedSelf && (assigned || declined || isNoShow) && isOfficialSelf && !quickAssign;\n\n const showAssign = canAssign && !isNoShow;\n const showDiscard = canAssign && !isNoShow && !quickAssign;\n const showSwap = canAssign && !isUnassigned && !isNoShow && assignments.length > 1 && !quickAssign;\n const showRemove = (canAssign && !isUnassigned) || (canRequest && requested) && !quickAssign;\n\n const onDiscard = () => {\n selectOfficial(assignment.participantId);\n }\n\n const handleClose = (assignment, participantId) => {\n refresh(assignment, participantId)\n }\n\n return <div className={classProps}>\n {showDiscard && <Tooltip title={translate('resources.games.labels.assignment.discard_changes')}>\n <Button\n disabled={!changed}\n onClick={() => onDiscard()}\n >\n {translate('ra.action.discard')}\n </Button>\n </Tooltip>}\n {showRemove && <RemoveButton\n game={game}\n assignment={assignment}\n official={official}\n filters={filters}\n settings={settings}\n disabled={changed || (isCertified && !branchSettings?.certifiedOfficialChanges)}\n onClose={handleClose}\n />}\n {showSwap && <SwapButton\n game={game}\n assignment={assignment}\n official={official}\n filters={filters}\n settings={settings}\n disabled={changed || isCompleted}\n onClose={handleClose}\n />}\n\n {showDecline && <DeclineButton\n game={game}\n assignment={assignment}\n official={official}\n filters={filters}\n settings={settings}\n disabled={declined || isNoShow || isDraft || isCompleted}\n onClose={handleClose}\n />}\n {showAccept && <AcceptButton\n game={game}\n assignment={assignment}\n official={official}\n filters={filters}\n settings={settings}\n disabled={(!unconfirmed && !declined) || isNoShow || isDraft || isCompleted}\n onClose={handleClose}\n />}\n\n {showRequest && <RequestButton\n game={game}\n assignment={assignment}\n official={official}\n filters={filters}\n settings={settings}\n disabled={requested || ineligible || expired || conflicted || assignedOther || isDraft || isCompleted}\n onClose={handleClose}\n />}\n {showAssign && <AssignButton\n game={game}\n assignment={assignment}\n official={official}\n filters={filters}\n settings={settings}\n disabled={!changed || (isCertified && !branchSettings?.certifiedOfficialChanges)}\n onClose={handleClose}\n onAssign={onAssign}\n />}\n </div>\n}\n","import React, { createContext, useContext, useMemo, useState, useEffect } from 'react';\nimport moment from 'moment-timezone';\n\nimport { dedupe } from '@hisports/parsers';\nimport { isAdhoc, isDelegated, isDelegatedPay } from '@hisports/assigning';\nimport { filterOfficialsByPositionType } from '@hisports/scoresheet/src/util';\n\nimport { useParticipant, useAuthContext } from '../../../../../http';\nimport { isAuthorized } from '../../../../../common/Authorize';\nimport usePreferences from '../../../../../common/usePreferences';\n\nimport { useAssignmentsContext } from '../AssignmentsContext';\nimport { getAssignmentIndex } from './util';\n\nconst AssignmentContext = createContext(null);\n\nconst useAllOfficials = assignment => {\n const { settings, allOfficials } = useAssignmentsContext();\n const officeId = assignment?.officeId || settings?.officeId;\n\n const state = { ...allOfficials?.[officeId] }\n\n if (state?.data?.length) {\n state.data = filterOfficialsByPositionType(state.data, assignment);\n }\n\n return state\n}\n\nconst useOfficialLists = assignment => {\n const { settings, lists } = useAssignmentsContext();\n const officeId = assignment?.officeId || settings?.officeId;\n\n return lists?.[officeId] || {}\n}\n\nconst useOfficialAttributeTypes = assignment => {\n const { settings, attributeTypes } = useAssignmentsContext();\n const officeId = assignment?.officeId || settings?.officeId;\n\n return attributeTypes?.[officeId] || {}\n}\n\nconst useCurrentOfficial = () => {\n const { currentOfficial } = useAssignmentsContext();\n return currentOfficial || {};\n}\n\n// selectedOfficial prop used when we open the quickAssign panel to avoid loading all officials and use only the selected 1\nexport function AssignmentProvider({ assignment, children, selectedOfficial }) {\n const { game, settings, branchSettings, openAssignmentIndexes, setOpenAssignmentIndexes, officialEnabled, assignments } = useAssignmentsContext();\n const { permissions } = useAuthContext();\n const participantId = useParticipant();\n const assignmentIndex = getAssignmentIndex(assignments, assignment?.id);\n\n const { data: allOfficials = [], loading: officialsLoading, error: officialsError } = useAllOfficials(assignment);\n const { data: lists = [], loading: listsLoading, error: listsError } = useOfficialLists(assignment);\n const { data: attributeTypes = [], loading: attributeTypesLoading, error: attributeTypesError } = useOfficialAttributeTypes(assignment);\n const { data: currentOfficial, loading: officialLoading, error: officialError } = useCurrentOfficial();\n\n const isPanelLoading = (officialEnabled ? officialLoading : officialsLoading) ||\n (isAuthorized(game, 'games', 'assign', false, false) && listsLoading) ||\n (isAuthorized(game, 'games', 'assign', false, false) && attributeTypesLoading)\n\n const [ isPanelOpen, setPanelOpen ] = useState(openAssignmentIndexes.includes(assignmentIndex) || assignment?.participantId === participantId);\n const [ selectedId, setSelected ] = useState(selectedOfficial?.id || currentOfficial?.id || assignment?.participantId); // current user if official || assigner's selected official\n const [ official, setOfficial ] = useState(selectedOfficial || currentOfficial); // gets updated when the assigner selects a new official\n\n useEffect(() => {\n setOpenAssignmentIndexes(indexes => {\n if (isPanelOpen) return dedupe([...indexes, assignmentIndex])\n return indexes.filter(index => index !== assignmentIndex)\n })\n }, [ isPanelOpen, assignmentIndex, setOpenAssignmentIndexes, assignment, settings ])\n\n useEffect(() => {\n const foundOfficial = allOfficials?.find(official => official.participantId === selectedId);\n const official = currentOfficial || selectedOfficial || foundOfficial; // if the user is an official, he can only assign itself\n setOfficial(official)\n }, [ currentOfficial, allOfficials, selectedId, setOfficial, selectedOfficial ])\n\n const [ isMenuOpen, setMenuOpen ] = useState(false)\n const [ isFilterMenuOpen, setFilterMenuOpen ] = useState(false);\n const [ filters, setFilters ] = usePreferences('OfficialFilters', {\n available: true,\n eligible: true,\n nonExpired: true,\n registered: true,\n new: false,\n local: false,\n ignoreArena: false,\n matchAllAttributes: false,\n listId: null,\n });\n\n const meta = useMemo(() => {\n const meta = {};\n\n // assignment can be null when the quick assign modal is initiated before opened\n if (!assignment) return meta;\n\n const isSystemUser = permissions.some(p => p.roleType === 'System');\n const permittedAssignOfficeIds = permissions.filter(p => p.roleType === 'Office' && p.scopes.includes('assigning:assign')).flatMap(p => p.officeIds).filter(Boolean)\n const permittedOfficialOfficeIds = permissions.filter(p => p.roleType === 'Participant' && p.scopes.includes('assigning:official')).flatMap(p => p.officeIds).filter(Boolean)\n const permittedAssignScheduleIds = permissions.filter(p => p.roleType === 'Schedule' && p.scopes.includes('assigning:assign')).flatMap(p => p.scheduleIds).filter(Boolean)\n\n const isPermittedAssignOffice = permittedAssignOfficeIds.includes(settings?.officeId) || permittedAssignOfficeIds.includes(assignment?.officeId)\n const isPermittedOfficialOffice = permittedOfficialOfficeIds.includes(settings?.officeId) || permittedOfficialOfficeIds.includes(assignment?.officeId)\n const isPermittedAssignSchedule = permittedAssignScheduleIds.includes(game.scheduleId)\n\n meta.isAdhoc = isAdhoc(assignment) && assignment.status === 'confirmed';\n meta.enabled = settings?.enabled && settings?.mode !== 'Integration'\n meta.certifiedOfficialChanges = branchSettings?.certifiedOfficialChanges\n meta.isDelegated = isDelegated(assignment)\n meta.isDelegatedPay = isDelegatedPay(assignment)\n\n meta.isPastGame = moment().isAfter(game.startTime, 'day');\n meta.isConflict = ['Conflict', 'Cancelled', 'Postponed'].includes(game.status);\n\n meta.isAssignedGame = assignments.some(assignment => assignment.participantId === participantId)\n meta.isUnassigned = assignment.status === 'unassigned';\n meta.isAssignedSelf = participantId && assignment.participantId === participantId;\n meta.isSupervisor = assignment.position === 'Supervisor';\n\n meta.isOfficial = isAuthorized(game, 'games', 'request', false, false);\n\n meta.canAssign = isAuthorized(game, 'games', 'assign', false, false) && (isPermittedAssignOffice || isPermittedAssignSchedule || isSystemUser)\n meta.canRequest = meta.isOfficial && ((isPermittedOfficialOffice && !meta.isSupervisor) || isSystemUser) && meta.isUnassigned && settings?.requestsEnabled && !meta.isConflict && !meta.isPastGame;\n meta.canRespond = meta.isOfficial && meta.isAssignedSelf;\n\n meta.isOfficialSelf = official && official.participantId === participantId\n meta.hideSupervisor = meta.isSupervisor && !meta.canAssign && !meta.isAssignedSelf && !settings.supervisorVisible\n meta.showPanel = meta.enabled && (meta.canAssign || (!game?.isApproved && (meta.canRequest || meta.canRespond))) && !isPanelLoading\n\n const fees = meta.isDelegatedPay ? assignment?.fees : settings?.fees\n meta.fee = fees?.[assignment.position];\n meta.isCompleted = game.isApproved || game.isCertified\n meta.isCertified = game.isCertified\n\n return meta;\n }, [ game, assignment, settings, branchSettings, official, participantId, permissions, isPanelLoading, assignments ])\n\n const value = useMemo(() => {\n const selectOfficial = participantId => {\n setSelected(selectedId => {\n if (selectedId === participantId) return null;\n return participantId;\n })\n }\n\n const toggleMenu = () => {\n setMenuOpen(open => !open);\n }\n\n const closeMenu = () => {\n setMenuOpen(false);\n }\n\n const togglePanel = () => {\n if (!meta.showPanel) return;\n setPanelOpen(open => !open)\n }\n\n const closePanel = () => {\n setPanelOpen(false)\n }\n\n const toggleFilterMenu = () => {\n setFilterMenuOpen(isOpen => !isOpen);\n }\n\n const toggleFilter = (filter, value, menuOpen = false) => {\n setFilters(filters => ({\n ...filters,\n [filter]: typeof value === 'undefined' ? !filters[filter] : value,\n }));\n setFilterMenuOpen(menuOpen)\n }\n\n return {\n assignment,\n meta,\n official,\n allOfficials,\n lists,\n attributeTypes,\n selectedId,\n selectOfficial,\n isMenuOpen, toggleMenu, closeMenu,\n filters, toggleFilter,\n isFilterMenuOpen, toggleFilterMenu,\n isPanelOpen, isPanelLoading, togglePanel, closePanel,\n }\n }, [ assignment, meta, official, allOfficials, lists, attributeTypes, selectedId, setSelected, isMenuOpen, setMenuOpen, filters, setFilters, isFilterMenuOpen, setFilterMenuOpen, isPanelOpen, isPanelLoading, setPanelOpen ])\n\n if (!game || !assignment || !meta || !filters) return null;\n return <AssignmentContext.Provider value={value}>\n {children}\n </AssignmentContext.Provider>\n}\n\nexport const useAssignmentContext = () => useContext(AssignmentContext);\n","import React from 'react';\nimport { useTranslate } from 'react-admin';\nimport { styled, Tooltip, useTheme } from \"@material-ui/core\"\nimport { DoneAll, Inbox, Feedback, Clear, SportsHockey, LocationOff, GroupAddOutlined, ReportProblemOutlined } from '@material-ui/icons';\n\nimport { isDelegated } from '@hisports/assigning';\n\nimport { useRichTranslate } from '../../../../../common/useRichTranslate';\nimport { useAssignmentsContext } from '../AssignmentsContext';\nimport { AssigningOfficeField } from './OfficialDetails/SummaryTab';\n\nconst DelegatedIcon = styled(GroupAddOutlined)(({ theme }) => ({\n marginLeft: theme.spacing(1),\n color: theme.palette.grey[600],\n}))\n\nconst DelegatedStatus = ({ assignment }) => {\n const translate = useRichTranslate();\n const { settings } = useAssignmentsContext()\n\n const payOfficeId = assignment?.payOfficeId || settings?.officeId\n\n const assigningOffice = <AssigningOfficeField officeId={assignment?.officeId} />\n const payOffice = <AssigningOfficeField officeId={payOfficeId} />\n\n if (!isDelegated(assignment) || !payOfficeId) return null;\n\n return <Tooltip\n title={<>\n {translate(\"resources.games.helpers.assignment.delegated_tooltip\", { office: assigningOffice }) }\n <br />\n {translate(\"resources.games.helpers.assignment.pay_delegated_tooltip\", { office: payOffice }) }\n </>}\n >\n <DelegatedIcon />\n </Tooltip>\n}\n\n// displayedStatus used when we assign a new official, we update the status in the front-end instead of re-fetching status\nexport const AssignmentStatusIcon = ({ assignment, fontSize = \"small\", style = {}, showUnassigned = false }) => {\n const theme = useTheme();\n const translate = useTranslate();\n\n if (assignment.position === 'Participant') {\n return <Tooltip title={translate('resources.participants.name', 1)}>\n <SportsHockey fontSize={fontSize} />\n </Tooltip>\n }\n\n const status = assignment.status\n\n switch (status) {\n case 'confirmed':\n return <Tooltip title={translate('resources.games.labels.assignment.status.confirmed')}>\n <DoneAll fontSize={fontSize} style={style} htmlColor={theme.palette.success.main} />\n </Tooltip>\n case 'assigned':\n return <Tooltip title={translate('resources.games.labels.assignment.status.pending')}>\n <Inbox fontSize={fontSize} style={style} />\n </Tooltip>\n case 'declined':\n return <Tooltip title={translate('resources.games.labels.assignment.status.declined')}>\n <Clear color=\"error\" fontSize={fontSize} style={style} />\n </Tooltip>\n case 'requested':\n return <Tooltip title={translate('resources.games.labels.assignment.status.requested')}>\n <Feedback fontSize={fontSize} style={style} />\n </Tooltip>\n case 'no-show':\n return <Tooltip title={translate('resources.games.labels.assignment.status.no_show')}>\n <LocationOff fontSize={fontSize} style={style} />\n </Tooltip>\n case 'unassigned': {\n if (!showUnassigned) return null\n return <Tooltip title={translate('resources.games.labels.assignment.unassigned')}>\n <ReportProblemOutlined fontSize={fontSize} style={style} htmlColor={theme.palette.warning.main} />\n </Tooltip>\n }\n default:\n return null;\n }\n}\n\nexport const AssignmentStatus = ({ assignment, showDelegated }) => {\n const translate = useTranslate();\n let status;\n if (assignment.status === 'confirmed') status = <strong>{translate('resources.games.labels.assignment.status.confirmed')}</strong>;\n if (assignment.status === 'assigned') status = translate('resources.games.labels.assignment.status.pending')\n if (assignment.status === 'declined') status = <strong>{translate('resources.games.labels.assignment.status.declined')}</strong>\n if (assignment.status === 'no-show') status = translate('resources.games.labels.assignment.status.no_show')\n\n return <div style={{ display: 'inline-flex', alignItems: 'center' }}>\n {status}\n <AssignmentStatusIcon assignment={assignment} fontSize=\"default\" style={{ marginLeft: 2 }} />\n {showDelegated && <DelegatedStatus assignment={assignment} />}\n </div>\n}\n\nexport const AssignmentPosition = ({ assignment, showUnassigned = false }) => {\n const translate = useTranslate();\n return <div style={{ display: 'inline-flex', alignItems: 'center' }}>\n {translate(`resources.games.values.assignment.position.${assignment.position}`)}\n <AssignmentStatusIcon assignment={assignment} fontSize=\"default\" style={{ marginLeft: 4 }} showUnassigned={showUnassigned} />\n </div>\n}\n","import React, { useState } from 'react';\nimport { BooleanInput, RecordContextProvider, SimpleForm, useNotify, useTranslate } from 'react-admin';\nimport { useFormState } from 'react-final-form';\nimport { Dialog, DialogTitle, DialogContent, DialogContentText, Button, Grid, makeStyles, alpha } from '@material-ui/core'\n\nimport { GAME_OFFICE_TYPES } from '@hisports/common/src/constants';\n\nimport { DialogFormToolbar } from '../../../../../../common/dialogs/DialogForm';\nimport { OfficeInput } from '../../../../../offices/OfficeInput';\nimport { AssignFeesInput } from '../../../../../assignFees';\nimport { apiClient } from '../../../../../../http';\nimport { useOfficeWithStore } from '../../../../../offices/useOffice';\nimport { useAssignmentsContext } from '../../AssignmentsContext';\nimport { useAssignmentContext } from '../AssignmentContext';\n\nconst useStyles = makeStyles(theme => ({\n deleteButton: {\n color: theme.palette.error.main,\n marginRight: 'auto',\n '&:hover': {\n backgroundColor: alpha(theme.palette.error.main, 0.12),\n // Reset on mouse devices\n '@media (hover: none)': {\n backgroundColor: 'transparent',\n },\n },\n }\n}))\n\nconst validate = values => {\n const errors = {};\n\n if (!values.officeId) errors.officeId = 'ra.validation.required';\n\n return errors;\n}\n\nconst inputProps = {\n variant: 'outlined',\n margin: 'none',\n fullWidth: true,\n}\n\nconst delegateAssigning = async (gameId, assignmentId, position, officeId, payOfficeId, feesId) =>\n apiClient(`/games/${gameId}/delegateAssignment`, {\n method: 'POST',\n data: { assignmentId, position, officeId, payOfficeId, feesId },\n }).then(res => res.data);\n\nconst FeesInput = ({ game, ...props }) => {\n const { values } = useFormState();\n const { officeId, isDelegatedPay } = values;\n const seasonId = game?.seasonId;\n\n if (!isDelegatedPay) return null;\n return <AssignFeesInput {...props} filter={{ seasonId, effectiveOffices: officeId, includeParents: true, _scope: 'Parents' }} />\n}\n\nconst DelegateFormBody = ({ game }) => {\n const { values } = useFormState();\n const { meta } = useAssignmentContext();\n const { settings } = useAssignmentsContext();\n const { isDelegated } = meta || {};\n const translate = useTranslate();\n\n const delegatedPayOfficeId = values.isDelegatedPay ? values.officeId : settings?.officeId\n const { data: delegatedPayOffice } = useOfficeWithStore(delegatedPayOfficeId)\n\n return <Grid container spacing={2}>\n <Grid item xs={12}>\n <OfficeInput source=\"officeId\" filter={{ type: { nin: [...GAME_OFFICE_TYPES, 'Historical'] }, isAssigner: true, _scope: 'Tenant' }} {...inputProps} />\n </Grid>\n {values.officeId && <Grid item xs={12}>\n <BooleanInput\n source=\"isDelegatedPay\"\n label=\"resources.games.labels.assignment.delegate_pay\"\n helperText={delegatedPayOffice && translate('resources.games.helpers.assignment.delegated_pay_office', { office: delegatedPayOffice.name })}\n />\n </Grid>}\n {isDelegated && !!values?.isDelegatedPay && <Grid item xs={12}>\n <FeesInput source=\"feesId\" allowEmpty label=\"resources.gameAssignSettings.fields.feesId\" helperText=\"ra.message.optional\" game={game} {...inputProps} />\n </Grid>}\n </Grid>\n}\n\nconst DelegateForm = ({ handleSubmit, handleCancel, handleDelete, assignment, game, ...props }) => {\n const translate = useTranslate();\n const classes = useStyles();\n\n const deleteButton = <Button color=\"secondary\" onClick={handleDelete} className={classes.deleteButton}>{translate('ra.action.undelegate')}</Button>\n const toolbar = <DialogFormToolbar handleSubmit={handleSubmit} onCancel={handleCancel} submitLabel=\"ra.action.delegate\" deleteButton={deleteButton} />\n\n return <SimpleForm toolbar={toolbar} validate={validate} save={handleSubmit} {...props}>\n <DelegateFormBody game={game} />\n </SimpleForm>\n}\n\nconst DelegateDialog = ({ assignment, game, open, onClose, closeModal }) => {\n const translate = useTranslate();\n const notify = useNotify();\n const { refetch } = useAssignmentsContext();\n\n const { officeId, feesId, payOfficeId } = assignment\n\n const handleCancel = () => closeModal();\n const handleSubmit = values => {\n const { officeId, isDelegatedPay, feesId } = values;\n const { id, position } = assignment;\n const payOfficeId = isDelegatedPay ? officeId : null\n\n delegateAssigning(game.id, id, position, officeId, payOfficeId, feesId).then(res => {\n closeModal()\n }).catch(err => {\n const message = err?.response?.data?.error?.message\n notify(message || 'ra.page.error_try_again', 'error')\n }).finally(() => {\n setTimeout(refetch, 500)\n })\n }\n const handleDelete = () => handleSubmit({})\n\n return <Dialog open={open} fullWidth maxWidth=\"sm\">\n <DialogTitle>{translate('resources.games.labels.assignment.delegate')}</DialogTitle>\n <DialogContent>\n <DialogContentText>\n {translate('resources.games.messages.assignment.delegate')}\n </DialogContentText>\n <RecordContextProvider value={null}>\n <DelegateForm\n initialValues={{ officeId, feesId, isDelegatedPay: (!!payOfficeId || !officeId) }}\n handleSubmit={handleSubmit}\n handleCancel={handleCancel}\n handleDelete={handleDelete}\n assignment={assignment}\n game={game} />\n </RecordContextProvider>\n </DialogContent>\n </Dialog>\n}\n\nexport default ({ game, assignment, disabled, onClose, ...props }) => {\n const [ showDelegateDialog, setShowDelegateDialog ] = useState(false);\n const translate = useTranslate();\n const { meta } = useAssignmentContext();\n\n if (!game || !assignment) return null;\n\n return <>\n <Button\n disabled={disabled}\n onClick={() => setShowDelegateDialog(true)}\n {...props}\n >\n {!meta.isDelegated ? translate('ra.action.delegate') : translate('ra.message.settings')}\n </Button>\n <DelegateDialog assignment={assignment} game={game} open={showDelegateDialog} onClose={onClose} closeModal={() => setShowDelegateDialog(false)} />\n </>\n}\n","import React, { useState } from 'react';\nimport { useNotify, useTranslate } from 'react-admin';\nimport { Button, Dialog, DialogActions, DialogContent, DialogContentText, DialogTitle } from '@material-ui/core';\nimport { Replay } from '@material-ui/icons';\n\nimport { useRichTranslate } from '../../../../../../common/useRichTranslate';\nimport { useAssignmentsContext } from '../../AssignmentsContext';\nimport { ParticipantField } from '../../../../../participants/ParticipantField';\n\nimport { assign } from './AssignButton';\n\nconst UndoDialog = ({ official, open, onClose, handleUndo }) => {\n const translate = useRichTranslate()\n const officialName = <ParticipantField record={official} source=\"participantId\" variant=\"inherit\" link={false} />\n\n return <Dialog open={open} onClose={onClose} maxWidth=\"sm\" fullWidth>\n <DialogTitle>{translate('resources.games.labels.assignment.undo_no_show')}</DialogTitle>\n <DialogContent>\n <DialogContentText>\n {translate('resources.games.messages.assignment.undo_no_show', { name: officialName })}\n </DialogContentText>\n </DialogContent>\n <DialogActions>\n <Button onClick={onClose} autoFocus>{translate('ra.action.cancel')}</Button>\n <Button onClick={handleUndo} color=\"primary\">{translate('ra.action.confirm')}</Button>\n </DialogActions>\n </Dialog>\n}\n\nexport default ({ game, assignment, official }) => {\n const translate = useTranslate();\n const notify = useNotify();\n const { refresh, refetch } = useAssignmentsContext();\n const [ open, setOpen ] = useState();\n\n const onClick = () => setOpen(true);\n const handleClose = () => setOpen(false);\n const handleClick = async () => {\n const { id, participantId, position } = assignment;\n assign(id, game.id, participantId, position, participantId)\n .then(() => {\n notify(translate('resources.games.notifications.assignment.official_assigned_to_game', { number: game.number }), 'success')\n refresh(assignment);\n })\n .catch(err => {\n const message = err?.response?.data?.error?.message\n notify(message || 'ra.page.error_try_again', 'error')\n refetch()\n })\n }\n\n return <>\n <Button startIcon={<Replay fontSize=\"small\" />} size=\"small\" color=\"inherit\" onClick={onClick}>\n {translate('ra.action.undo')}\n </Button>\n <UndoDialog open={open} onClose={handleClose} handleUndo={handleClick} assignment={assignment} official={official} />\n </>\n}\n","import React, { useState } from 'react';\nimport { RecordContextProvider, TextField, useTranslate } from 'react-admin';\nimport { useSelector } from 'react-redux';\nimport { Link } from 'react-router-dom'\nimport { Button, Collapse, Link as MuiLink, styled, Table, TableBody, TableCell, TableHead, TableRow, Tooltip, Typography } from '@material-ui/core';\nimport { Alert as MuiAlert, AlertTitle } from '@material-ui/lab';\nimport {\n PlaylistAddCheck as ReadyIcon,\n Inbox as AssignedIcon,\n Clear as DeclinedIcon,\n LocationOff as NoShowIcon,\n Announcement as RequestedIcon,\n RemoveCircleOutline as RemovedIcon,\n Warning as ExpiredIcon,\n Block as EligibilityIcon,\n Group as ConflictIcon,\n Schedule as ScheduleIcon,\n DirectionsRun as TravelIcon,\n Today as AssignedSameDayIcon,\n EventAvailable as AvailableIcon,\n EventBusy as UnavailableIcon,\n Voicemail as AccountIcon,\n Gavel as SuspendedIcon,\n SupervisorAccount,\n Group,\n ExpandLess,\n ExpandMore,\n AccountBalance,\n CompareArrows,\n} from '@material-ui/icons';\nimport moment from 'moment-timezone';\n\nimport { isEmpty } from '@hisports/parsers';\nimport { KEEPER_POSITIONS } from '@hisports/scoresheet/src/constants';\nimport { isKeeper } from '@hisports/scoresheet/src/util';\n\nimport { useRichTranslate } from '../../../../../../common/useRichTranslate';\nimport { InviteDialog } from '../../../../../participants/InviteDialog';\nimport { OfficeField } from '../../../../../offices/OfficeField';\nimport { ParticipantField } from '../../../../../participants/ParticipantField';\nimport { AttributeTypeField } from '../../../../../attributeTypes/AttributeTypeField';\n\nimport { useAssignmentsContext } from '../../AssignmentsContext';\nimport { hasFlag, filterFlags, getMeta, isReady } from '../util';\nimport { useAssignmentContext } from '../AssignmentContext';\nimport DelegateButton from '../AssignToolbar/DelegateButton';\nimport UndoButton from '../AssignToolbar/UndoButton';\n\n\nconst Alert = styled(MuiAlert)({\n marginBottom: 8,\n})\n\nconst Flag = styled('div')({\n marginBottom: 4,\n})\n\nconst Note = styled('p')(({ theme }) => ({\n margin: theme.spacing(1),\n fontStyle: 'italic',\n whiteSpace: 'pre-line',\n}))\n\nconst AssignerIcon = styled(SupervisorAccount)({\n position: 'relative',\n top: '5px',\n paddingRight: '4px',\n paddingTop: '8px'\n})\n\nconst ConsecutiveIcon = styled(CompareArrows)({\n position: 'relative',\n top: '5px',\n paddingLeft: '4px',\n})\n\nconst Assigner = ({ participantId }) => {\n const richTranslate = useRichTranslate();\n if (!participantId) return null;\n\n const assigner = <AssignerField participantId={participantId} />\n return <Typography display=\"block\" variant=\"overline\">\n <AssignerIcon fontSize=\"small\" />\n {richTranslate('resources.games.messages.assignment.assigned_by', { name: assigner })}\n </Typography>\n}\n\nconst listLevel = (levels, position, translate) => {\n const level = levels && levels[position];\n if (level == null) return;\n if (level === 0) return translate('resources.qualifications.values.level.level_zero')\n return `${translate('resources.qualifications.fields.level')} ${level}`\n}\n\nconst listGrade = (grades, position, translate) => {\n const grade = grades && grades[position];\n if (!grade) return;\n return ` / ${translate('resources.qualifications.fields.grade')} ${grade}`\n}\n\nconst InviteButton = ({ participantId }) => {\n const translate = useTranslate();\n const [ open, setOpen ] = useState(false);\n\n return <>\n <Button color=\"inherit\" size=\"small\" onClick={() => setOpen(true)}>{translate('ra.action.send_invite')}</Button>\n <InviteDialog open={open} participantId={participantId} onClose={() => setOpen(false)} />\n </>\n}\n\nconst Notes = ({ notes }) => {\n if (!notes) return null;\n return <Note>{notes}</Note>\n}\n\nconst GameDetailsList = ({ meta, filterAffiliate = false, filterRostered = false }) => {\n const translate = useTranslate();\n if (!meta) return;\n\n let games = [];\n if (meta.games?.length) games.push(...meta.games)\n if (meta.practices?.length) games.push(...meta.practices);\n if (meta.activities?.length) games.push(...meta.activities);\n\n if (filterAffiliate) {\n games = games.filter(game => !game?.isAffiliate)\n }\n if (filterRostered) {\n games = games.filter(game => game?.isAffiliate)\n }\n\n if (!games.length) return null;\n return <ul>\n {games.map(game => <li key={game.id}>\n {game.summary}\n {game.consecutive && <Tooltip fontSize=\"small\" title={translate('resources.games.messages.assignment.consecutive_game')}><ConsecutiveIcon /></Tooltip>}\n </li>)}\n </ul>\n}\n\nconst OfficialInfo = ({ official, flags, assignment, role }) => {\n const translate = useTranslate();\n if (!official) return null;\n const isKeeperAssignment = isKeeper(assignment);\n const hasScorekeeperType = official?.types?.find(type => KEEPER_POSITIONS.includes(type))\n\n const officialType = isKeeperAssignment && hasScorekeeperType ? 'Scorekeeper' : 'Official'\n\n const location = official.city ? official.city : <OfficeField source=\"officeId\" addLabel={false} allowEmpty />\n const isExpired = hasFlag(flags, 'Expired')\n const participant = <Link to={`/participants/${official.participantId}/show`} component={MuiLink}>{official.participant.fullName.toUpperCase()}</Link>\n const roleMessage = role === 'assigner'\n ? <>{participant} {!isExpired ? translate('ra.function.is') : translate('ra.function.was')} {translate('ra.function.a')}</>\n : <>{translate('ra.function.youre')} {translate('ra.function.a')}</>\n return <p>{roleMessage} <strong>{listLevel(official.levels, officialType, translate)}{listGrade(official.grades, assignment.position, translate)}</strong> {translate(`resources.games.messages.assignment.${officialType.toLowerCase()}_from`)} {location}.</p>\n}\n\nconst ReadyAlert = ({ flags, role }) => {\n const translate = useTranslate();\n if (!isReady(flags)) return null;\n\n return <Alert icon={<ReadyIcon />} severity=\"info\">\n <AlertTitle>{translate(`resources.games.alerts.assignment.${role}.ready.title`)}</AlertTitle>\n {translate(`resources.games.alerts.assignment.${role}.ready.officiate_game`)}\n </Alert>\n}\n\nexport const AssigningOfficeField = ({ officeId }) => {\n const cachedOffice = useSelector(state => state?.admin?.resources?.offices?.data?.[officeId])\n\n if (cachedOffice?.name) return cachedOffice?.name\n\n return <RecordContextProvider value={{ officeId }}>\n <OfficeField source=\"officeId\" link={false} variant=\"inherit\" />\n </RecordContextProvider>\n}\n\nconst AssignerField = ({ participantId }) => {\n return <RecordContextProvider value={{ participantId }}>\n <ParticipantField source=\"participantId\" link={false} variant=\"inherit\" />\n </RecordContextProvider>\n}\n\nconst SettingsAlert = props => {\n const { assignment, filters, meta: { canAssign, fee, isDelegated } } = useAssignmentContext();\n const { game, settings, refetch } = useAssignmentsContext();\n const translate = useTranslate();\n\n if (!canAssign || fee != null) return null;\n return <Alert\n severity=\"warning\"\n icon={<AccountBalance />}\n action={isDelegated && <DelegateButton\n game={game}\n assignment={assignment}\n filters={filters}\n settings={settings}\n onClose={refetch}\n color=\"inherit\"\n size=\"small\"\n />}\n >\n <AlertTitle>{translate('resources.games.alerts.assignment.missing_settings')}</AlertTitle>\n {translate(`resources.games.alerts.assignment.no_pay_structure${isDelegated ? '_delegated' : ''}`)}\n </Alert>\n}\n\nexport const AssignerAlert = props => {\n const { assignment, filters, meta } = useAssignmentContext();\n const { game, settings, refetch } = useAssignmentsContext();\n const translate = useRichTranslate()\n const { isDelegated, isDelegatedPay, canAssign } = meta;\n const assigningOfficeId = isDelegated ? assignment.officeId : settings.officeId\n const payOfficeId = isDelegatedPay ? assignment.payOfficeId : settings.officeId;\n\n const assigningOffice = <AssigningOfficeField officeId={assigningOfficeId} />\n const payOffice = <AssigningOfficeField officeId={payOfficeId} />\n\n if (!assigningOfficeId) return null\n\n return <Alert icon={<Group />} severity=\"info\" variant=\"outlined\" action={\n canAssign && <DelegateButton\n game={game}\n assignment={assignment}\n filters={filters}\n settings={settings}\n onClose={refetch}\n color=\"inherit\"\n size=\"small\"\n />} {...props}>\n {translate(`resources.games.alerts.assignment.assigned_by${isDelegated && canAssign ? '_delegated' : ''}`, { office: assigningOffice, payOffice })}\n </Alert>\n}\n\nconst StatusAlert = ({ official, flags, assignment, game, role }) => {\n const translate = useTranslate();\n\n const isAssigned = hasFlag(flags, 'Assigned');\n const isDeclined = hasFlag(flags, 'Declined');\n const isNoShow = hasFlag(flags, 'No Show');\n const isRequested = hasFlag(flags, 'Requested');\n const isRemoved = hasFlag(flags, 'Removed');\n const isConfirmed = assignment.status === 'confirmed'\n const otherPosition = assignment.participantId !== official.participantId\n\n if (isAssigned) {\n const assigner = getMeta(official.meta, 'Assigned', 'assigner')\n if (isConfirmed) return <Alert severity=\"success\">\n <AlertTitle>{translate(`resources.games.alerts.assignment.${role}.confirmed.title`)}</AlertTitle>\n {translate(`resources.games.alerts.assignment.${role}.confirmed.${otherPosition ? 'accepted_other' : 'accepted'}`)}\n <Notes notes={getMeta(official.meta, 'Assigned', 'notes')} />\n <Assigner participantId={assigner} />\n </Alert>\n\n const isConflict = ['Conflict', 'Cancelled', 'Postponed'].includes(game.status);\n let message = null;\n if (role === 'assignee') {\n message = isConflict ? translate('resources.games.alerts.assignment.assignee.pending.confirm_conflict') : translate('resources.games.alerts.assignment.assignee.pending.confirm')\n } else if (role === 'assigner') {\n message = otherPosition ? translate('resources.games.alerts.assignment.assigner.pending.unconfirmed_other') : translate('resources.games.alerts.assignment.assigner.pending.unconfirmed')\n }\n\n return <Alert icon={<AssignedIcon />} severity=\"info\">\n <AlertTitle>{translate(`resources.games.alerts.assignment.${role}.pending.title`)}</AlertTitle>\n {message}\n <Notes notes={getMeta(official.meta, 'Unconfirmed', 'notes')} />\n <Assigner participantId={assigner} />\n </Alert>\n }\n\n if (isDeclined) {\n const assigner = getMeta(official.meta, 'Declined', 'assigner')\n return <Alert icon={<DeclinedIcon />} severity=\"error\">\n <AlertTitle>{translate(`resources.games.alerts.assignment.${role}.declined.title`)}</AlertTitle>\n <div dangerouslySetInnerHTML={{ __html: translate(`resources.games.alerts.assignment.${role}.declined.${otherPosition ? 'change_response_other' : 'change_response'}`) }} />\n <Notes notes={getMeta(official.meta, 'Declined', 'notes')} />\n <Assigner participantId={assigner} />\n </Alert>\n }\n\n if (isNoShow) {\n return <Alert icon={<NoShowIcon />} severity=\"error\" action={role === \"assigner\" && <UndoButton game={game} assignment={assignment} official={official} />} >\n <AlertTitle>{translate(`resources.games.alerts.assignment.${role}.no_show.title`)}</AlertTitle>\n {translate(`resources.games.alerts.assignment.${role}.no_show.removed`)}\n </Alert>\n }\n\n if (isRequested) {\n const position = getMeta(official.meta, 'Requested', 'position')\n const request = translate(`resources.games.values.assignment.position.${position}`, { _: position })\n const timestamp = getMeta(official.meta, 'Requested', 'timestamp');\n const ago = timestamp ? moment.duration(moment(timestamp).diff()).humanize(true) : '';\n return <Alert icon={<RequestedIcon />} severity=\"info\">\n <AlertTitle>{translate(`resources.games.alerts.assignment.${role}.requested.title`)}</AlertTitle>\n {translate(`resources.games.alerts.assignment.${role}.requested.requested`)} {request ? `(${request})` : ''} {ago}\n <Notes notes={getMeta(official.meta, 'Requested', 'notes')} />\n </Alert>\n }\n\n if (isRemoved) {\n const response = getMeta(official.meta, 'Removed', 'response') || 'Declined';\n return <Alert icon={<RemovedIcon />} severity=\"warning\">\n <AlertTitle>{translate(`resources.games.alerts.assignment.${role}.removed.title`)}</AlertTitle>\n {translate(`resources.games.alerts.assignment.${role}.removed.removed`, { message: response.toLowerCase() })}\n <Notes notes={getMeta(official.meta, 'Removed', 'notes')} />\n </Alert>\n }\n\n return null;\n}\n\nconst ExpiredAlert = ({ flags, role }) => {\n const translate = useTranslate();\n\n const isExpired = hasFlag(flags, 'Expired');\n if (!isExpired) return null;\n\n return <Alert icon={<ExpiredIcon />} severity=\"error\">\n <AlertTitle>{translate(`resources.games.alerts.assignment.${role}.expired.title`)}</AlertTitle>\n <Flag dangerouslySetInnerHTML={{ __html: translate(`resources.games.alerts.assignment.${role}.expired.expired`) }} />\n </Alert>\n}\n\nconst EligibilityAlert = ({ official, flags, assignment, role }) => {\n const translate = useTranslate();\n\n const isLevel = hasFlag(flags, 'Referee Level') || hasFlag(flags, 'Linesperson Level') || hasFlag(flags, 'Official Level') || hasFlag(flags, 'Scorekeeper Level') || hasFlag(flags, 'Timekeeper Level');\n const isGrade = hasFlag(flags, 'Referee Grade') || hasFlag(flags, 'Linesperson Grade');\n const isUnderage = hasFlag(flags, 'Underage');\n const isCategory = hasFlag(flags, 'Category')\n const reachedDailyLimit = hasFlag(flags, 'Daily Limit');\n const { position } = assignment;\n\n const reasons = [];\n if (isLevel && official.level != null) {\n reasons.push(<Flag dangerouslySetInnerHTML={{ __html: translate(`resources.games.alerts.assignment.${role}.eligibility.minimum_level`, { position: translate(`resources.games.values.assignment.position.${position}`) }) }} />)\n }\n\n if (isGrade) {\n const grade = official.grades && official.grades[position]\n if (!grade) {\n reasons.push(<Flag>{translate(`resources.games.alerts.assignment.${role}.eligibility.no_grade`)}</Flag>)\n } else {\n reasons.push(<Flag dangerouslySetInnerHTML={{ __html: translate(`resources.games.alerts.assignment.${role}.eligibility.minimum_grade`, { position: translate(`resources.games.values.assignment.position.${position}`) }) }} />)\n }\n }\n\n if (isUnderage) {\n const missingAge = getMeta(official.meta, 'Underage', 'missing')\n if (missingAge) {\n reasons.push(<Flag>{translate(`resources.games.alerts.assignment.${role}.eligibility.no_age`)}</Flag>)\n } else {\n reasons.push(<Flag dangerouslySetInnerHTML={{ __html: translate(`resources.games.alerts.assignment.${role}.eligibility.minimum_age`) }} />)\n }\n }\n\n if (reachedDailyLimit) {\n const limit = getMeta(official.meta, 'Daily Limit', 'dailyLimit');\n reasons.push(<Flag>{translate(`resources.games.alerts.assignment.${role}.eligibility.limit_reached`, { smart_count: limit })}</Flag>)\n }\n\n if (isCategory) {\n reasons.push(<Flag>{translate(`resources.games.alerts.assignment.${role}.eligibility.category`)}</Flag>)\n }\n\n if (!reasons.length) return null;\n\n return <Alert icon={<EligibilityIcon />} severity=\"error\">\n <AlertTitle>{translate(`resources.games.alerts.assignment.${role}.eligibility.title`)}</AlertTitle>\n {reasons}\n </Alert>\n}\n\nconst ConflictAlert = ({ flags, role }) => {\n const translate = useTranslate();\n\n const isConflict = hasFlag(flags, 'Team Conflict');\n const isRoster = hasFlag(flags, 'Roster');\n\n const reasons = [];\n if (isConflict) reasons.push(<Flag dangerouslySetInnerHTML={{ __html: translate(`resources.games.alerts.assignment.${role}.conflicts.team_conflict`) }} />)\n if (isRoster) reasons.push(<Flag dangerouslySetInnerHTML={{ __html: translate(`resources.games.alerts.assignment.${role}.conflicts.rostered`) }} />)\n\n if (!reasons.length) return null;\n\n return <Alert icon={<ConflictIcon />} severity=\"error\">\n <AlertTitle>{translate(`resources.games.alerts.assignment.${role}.conflicts.title`)}</AlertTitle>\n {reasons}\n </Alert>\n}\n\nconst ScheduleAlert = ({ official, flags, role }) => {\n const translate = useTranslate();\n\n const isPlaying = hasFlag(flags, 'Roster Conflict');\n const isConflict = hasFlag(flags, 'Game Conflict');\n const isOverlap = hasFlag(flags, 'Game Overlap');\n\n let isPlayingRostered = false;\n const reasons = [];\n if (isPlaying) {\n const meta = getMeta(official.meta, 'Roster Conflict');\n const conflicts = [...(meta.games || []), ...(meta.practices || []), ...(meta.activities || [])];\n const hasRosteredConflict = conflicts.some(conflict => !conflict?.isAffiliate);\n const hasAffiliateConflict = conflicts.some(conflict => conflict?.isAffiliate);\n\n if (hasRosteredConflict) {\n reasons.push(<Flag>\n <div dangerouslySetInnerHTML={{ __html: translate(`resources.games.alerts.assignment.${role}.schedule.roster_conflict`) }} />\n <GameDetailsList meta={meta} filterAffiliate />\n </Flag>)\n }\n if (hasAffiliateConflict) {\n reasons.push(<Flag>\n <div dangerouslySetInnerHTML={{ __html: translate(`resources.games.alerts.assignment.${role}.schedule.affiliate_conflict`) }} />\n <GameDetailsList meta={meta} filterRostered />\n </Flag>)\n }\n\n isPlayingRostered = hasRosteredConflict;\n }\n if (isConflict) reasons.push(<Flag>\n <div dangerouslySetInnerHTML={{ __html: translate(`resources.games.alerts.assignment.${role}.schedule.game_conflict`) }} />\n <GameDetailsList meta={getMeta(official.meta, 'Game Conflict')} />\n </Flag>)\n if (isOverlap) reasons.push(<Flag>\n {translate(`resources.games.alerts.assignment.${role}.schedule.game_overlap`)}\n <GameDetailsList meta={getMeta(official.meta, 'Game Overlap')} />\n </Flag>)\n\n if (!reasons.length) return null;\n\n const isError = isPlayingRostered || isConflict;\n return <Alert icon={<ScheduleIcon />} severity={isError ? \"error\" : \"warning\"}>\n <AlertTitle>{translate(`resources.games.alerts.assignment.${role}.schedule.title`)}</AlertTitle>\n {reasons}\n </Alert>\n}\n\nconst TravelAlert = ({ official, flags, role }) => {\n const translate = useTranslate();\n\n const isTravel = hasFlag(flags, 'Travel');\n const isArena = hasFlag(flags, 'At Arena');\n\n const reasons = [];\n if (isTravel) reasons.push(<Flag>\n <div dangerouslySetInnerHTML={{ __html: translate(`resources.games.alerts.assignment.${role}.travel.another_venue`) }} />\n <GameDetailsList meta={getMeta(official.meta, 'Travel')} />\n </Flag>)\n\n if (isArena) reasons.push(<Flag>\n {translate(`resources.games.alerts.assignment.${role}.travel.this_venue`)}\n <GameDetailsList meta={getMeta(official.meta, 'At Arena')} />\n </Flag>)\n\n if (!reasons.length) return null;\n\n const isWarning = isTravel;\n return <Alert icon={<TravelIcon />} severity={isWarning ? \"warning\" : \"info\"}>\n <AlertTitle>{translate(`resources.games.alerts.assignment.${role}.travel.title`)}</AlertTitle>\n {reasons}\n </Alert>\n}\n\nconst AssignedSameDayAlert = ({ official, flags, role }) => {\n const translate = useTranslate();\n\n const isAssignedSameDay = hasFlag(flags, 'Assigned Today');\n const isTravel = hasFlag(flags, 'Travel');\n const isArena = hasFlag(flags, 'At Arena');\n const isConflict = hasFlag(flags, 'Game Conflict');\n\n if (!isAssignedSameDay || isTravel || isArena || isConflict) return null;\n return <Alert icon={<AssignedSameDayIcon />} severity=\"info\">\n <AlertTitle>{translate(`resources.games.alerts.assignment.${role}.travel.title_assigned_today`)}</AlertTitle>\n <Flag>\n <div dangerouslySetInnerHTML={{ __html: translate(`resources.games.alerts.assignment.${role}.travel.assigned_today`) }} />\n <GameDetailsList meta={getMeta(official.meta, 'Assigned Today')} />\n </Flag>\n </Alert>\n}\n\nconst AvailabilityAlert = ({ official, flags, ignoreArena, role }) => {\n const translate = useTranslate()\n\n const isAssigned = hasFlag(flags, 'Assigned');\n const isUnavailable = hasFlag(flags, 'Unavailable')\n const isUnknown = hasFlag(flags, 'Availability')\n const isOffice = hasFlag(flags, 'Office')\n const isArena = hasFlag(flags, 'Arena')\n\n const reasons = []\n if (isUnavailable) reasons.push(<Flag>\n <div dangerouslySetInnerHTML={{ __html: translate(`resources.games.alerts.assignment.${role}.unavailable.unavailable`) }} />\n <Notes notes={getMeta(official.meta, 'Unavailable', 'notes')} />\n </Flag>)\n if (isUnknown) reasons.push(<Flag>{translate(`resources.games.alerts.assignment.${role}.unavailable.no_availability`)}</Flag>)\n if (isOffice) reasons.push(<Flag>{translate(`resources.games.alerts.assignment.${role}.unavailable.no_availability_office`)}</Flag>)\n if (isArena && !ignoreArena) reasons.push(<Flag>{translate(`resources.games.alerts.assignment.${role}.unavailable.no_availability_arena`)}</Flag>)\n\n if (!reasons.length) {\n if (isAssigned) return null;\n return <Alert icon={<AvailableIcon />} severity=\"info\">\n <AlertTitle>{translate(`resources.games.alerts.assignment.${role}.available.title`)}</AlertTitle>\n {translate(`resources.games.alerts.assignment.${role}.available.assigned`)}\n <Notes notes={getMeta(official.meta, 'Availability', 'notes')} />\n </Alert>;\n }\n\n const isError = isUnavailable || isOffice;\n return <Alert icon={<UnavailableIcon />} severity={isError ? 'error' : 'warning'}>\n <AlertTitle>{translate(`resources.games.alerts.assignment.${role}.unavailable.title`)}</AlertTitle>\n {reasons}\n <Notes notes={getMeta(official.meta, 'Availability', 'notes')} />\n </Alert>\n}\n\nconst AccountAlert = ({ official, flags, role }) => {\n const translate = useTranslate();\n\n const unverified = hasFlag(flags, 'Not Verified');\n const invited = hasFlag(flags, 'Invited');\n const unregistered = hasFlag(flags, 'Not Registered');\n\n const reasons = [];\n if (unverified) reasons.push(<Flag dangerouslySetInnerHTML={{ __html: translate(`resources.games.alerts.assignment.${role}.account.unverified`) }} />)\n if (invited) reasons.push(<Flag dangerouslySetInnerHTML={{ __html: translate(`resources.games.alerts.assignment.${role}.account.invited`) }} />)\n if (unregistered) reasons.push(<Flag dangerouslySetInnerHTML={{ __html: translate(`resources.games.alerts.assignment.${role}.account.unregistered`) }} />)\n\n if (!reasons.length) return null;\n\n const isError = invited || unregistered;\n const showInvite = role === \"assigner\" && isError;\n return <Alert\n icon={<AccountIcon />}\n severity={isError ? \"error\" : \"warning\"}\n >\n <AlertTitle>{translate(`resources.games.alerts.assignment.${role}.account.title`)}</AlertTitle>\n {reasons}\n {showInvite && <InviteButton participantId={official.participantId} />}\n </Alert>\n}\n\nconst SuspendedAlert = ({ official, flags, role }) => {\n const translate = useTranslate();\n\n const isSuspended = hasFlag(flags, 'Suspended');\n if (!isSuspended) return null;\n\n const suspension = getMeta(official.meta, 'Suspended').suspension;\n const { effectiveRequiredGames, expiry, effectiveDurationType, positionGroup, date } = suspension;\n\n const durationMessage = effectiveDurationType === 'Indefinite'\n ? translate('resources.games.alerts.assignment.assigner.suspended.duration_indefinite')\n : `${translate('resources.games.alerts.assignment.assigner.suspended.duration', effectiveRequiredGames)}${expiry ? translate('resources.games.alerts.assignment.assigner.suspended.duration_expiry', { date: moment.utc(expiry).format('LL') }) : ''}`\n\n return <Alert icon={<SuspendedIcon />} severity=\"error\">\n <AlertTitle>{translate(`resources.games.alerts.assignment.${role}.suspended.title`)}</AlertTitle>\n <Flag dangerouslySetInnerHTML={{ __html: translate(`resources.games.alerts.assignment.${role}.suspended.suspended`, {\n duration: durationMessage,\n positionGroup: translate(`resources.participants.labels.status.types.${positionGroup}`, { _: positionGroup }).toLowerCase(),\n date: moment.utc(date).format('LL') })\n }} />\n </Alert>\n}\n\nconst AttributesTable = ({ official, role }) => {\n const translate = useTranslate();\n const showAttributeValues = role === 'assigner'\n const [ showAttributes, setVisible ] = useState(false);\n\n const { attributeValues: values } = official;\n if (isEmpty(values) || !showAttributeValues) return null\n\n return <p>\n <Collapse in={showAttributes}>\n <Table size=\"small\">\n <TableHead>\n <TableRow>\n <TableCell>{translate(`resources.attributeValues.fields.attributeId`)}</TableCell>\n <TableCell>{translate(`resources.attributeValues.fields.value`)}</TableCell>\n <TableCell>{translate(`resources.attributeValues.fields.officeId`)}</TableCell>\n </TableRow>\n </TableHead>\n <TableBody>\n {values.map(value =>\n <TableRow>\n <RecordContextProvider value={value}>\n <TableCell><AttributeTypeField source=\"attributeId\" /></TableCell>\n <TableCell><TextField source=\"value\" /></TableCell>\n <TableCell><OfficeField source=\"officeId\" link={false} /></TableCell>\n </RecordContextProvider>\n </TableRow>\n )}\n </TableBody>\n </Table>\n </Collapse>\n <Button\n variant=\"text\"\n size=\"small\"\n startIcon={showAttributes ? <ExpandLess /> : <ExpandMore />}\n onClick={() => setVisible(visible => !visible)}\n >\n {translate(showAttributes ? 'resources.games.labels.assignment.hide_attributes' : 'resources.games.labels.assignment.show_attributes')}\n </Button>\n </p>\n}\n\nexport default ({ role }) => {\n const { assignment, official, filters } = useAssignmentContext();\n const { game } = useAssignmentsContext();\n\n if (!assignment || !official) return null;\n\n const flags = filterFlags(official.flags, assignment.position, filters, official.meta)\n\n return <RecordContextProvider value={official}>\n <OfficialInfo official={official} flags={flags} assignment={assignment} role={role} />\n <AttributesTable official={official} role={role} />\n\n <ReadyAlert official={official} flags={flags} assignment={assignment} role={role} />\n\n <StatusAlert official={official} flags={flags} assignment={assignment} game={game} role={role} />\n <ExpiredAlert official={official} flags={flags} assignment={assignment} role={role} />\n <SuspendedAlert official={official} flags={flags} role={role} />\n <EligibilityAlert official={official} flags={flags} assignment={assignment} role={role} />\n <ConflictAlert official={official} flags={flags} role={role} />\n <ScheduleAlert official={official} flags={flags} role={role} />\n <TravelAlert official={official} flags={flags} role={role} />\n <AssignedSameDayAlert official={official} flags={flags} role={role} />\n <AvailabilityAlert official={official} flags={flags} ignoreArena={filters.ignoreArena} role={role} />\n <AccountAlert official={official} flags={flags} role={role} />\n <SettingsAlert official={official} flags={flags} role={role} />\n <AssignerAlert />\n </RecordContextProvider>\n}\n","import React, { useState, useEffect, useRef, useLayoutEffect } from 'react';\nimport { RecordContextProvider, useTranslate } from 'react-admin';\nimport { Table, TableBody, TableRow, TableCell, IconButton, makeStyles, styled, useMediaQuery } from \"@material-ui/core\"\nimport { ExpandLess, ExpandMore } from '@material-ui/icons';\nimport { grey } from '@material-ui/core/colors';\nimport { Alert } from '@material-ui/lab'\nimport moment from 'moment-timezone';\n\nimport red from '@material-ui/core/colors/red';\nimport green from '@material-ui/core/colors/green';\n\nimport { apiClient } from '../../../../../../http';\nimport LoadingAlert from '../../../../../../common/LoadingAlert';\nimport { TeamField } from '../../../../../teams/TeamField';\nimport { SurfaceField } from '../../../../../surfaces/SurfaceField';\n\nimport { AssignmentPosition } from '../AssignmentStatus';\nimport { useAssignmentContext } from '../AssignmentContext';\nimport { useAssignmentsContext } from '../../AssignmentsContext';\n\nconst useAssignmentStyles = makeStyles(theme => ({\n cell: {\n border: 0,\n },\n timeCell: {\n width: theme.spacing(14),\n maxWidth: theme.spacing(14),\n border: 0,\n },\n fixedCell: {\n whiteSpace: 'pre',\n border: 0,\n },\n small: {\n width: '100%',\n border: 0,\n }\n}))\n\nconst Assignment = ({ assignment }) => {\n const classes = useAssignmentStyles();\n const small = useMediaQuery(theme => theme.breakpoints.down('sm'))\n\n const { game } = assignment;\n if (!game) return <TableCell colSpan={4} className={classes.cell} />\n\n const start = moment.tz(game.startTime, game.timezone);\n const end = moment.tz(game.endTime, game.timezone);\n const timeRange = `${start.format('HH:mm')} - ${end.format('HH:mm')}`\n\n let details;\n if (small) {\n details = <TableCell colSpan={4} className={classes.small}>\n <p>{game.number}</p>\n <p>H: <TeamField source=\"game.homeTeamId\" /></p>\n <p>A: <TeamField source=\"game.awayTeamId\" /></p>\n <p>V: <SurfaceField source=\"game.arenaId\" /></p>\n <p>\n <AssignmentPosition assignment={assignment} />\n </p>\n </TableCell>\n } else {\n details = <>\n <TableCell className={classes.fixedCell}>\n {game.number}\n </TableCell>\n <TableCell className={classes.cell}>\n <TeamField source=\"game.homeTeamId\" />\n <br />\n <TeamField source=\"game.awayTeamId\" />\n </TableCell>\n <TableCell className={classes.cell}>\n <SurfaceField source=\"game.arenaId\" />\n </TableCell>\n <TableCell className={classes.fixedCell} align=\"right\">\n <AssignmentPosition assignment={assignment} />\n </TableCell>\n </>\n }\n\n return <>\n <TableCell className={classes.timeCell}>\n {timeRange}\n </TableCell>\n {details}\n </>\n}\n\nconst getAvailabilityMessage = (slot, duration, translate, timezone) => {\n let availability = (slot.isAvailable === true && translate('ra.message.available'))\n || (slot.isAvailable === false && translate('ra.message.unavailable'))\n || translate('ra.message.unknown')\n\n if (duration === 1439) { // 23h59m\n availability += ` ${translate('ra.date.lexical.all_day')}`\n return availability;\n }\n\n const startOfDay = moment.tz(slot.startTime, timezone).hour() === 0\n if (startOfDay) {\n const endTime = moment.tz(slot.endTime, timezone).format('HH:mm');\n availability += ` ${translate('ra.date.lexical.until_time', { time: endTime })}`\n return availability;\n }\n\n const endOfDay = moment.tz(slot.endTime, timezone).minutes() === 59\n if (endOfDay) { // end of day slot\n const startTime = moment.tz(slot.startTime, timezone).format('HH:mm');\n availability += ` ${translate('ra.date.lexical.after_time', { time: startTime })}`\n return availability;\n }\n\n const hours = Math.floor(duration / 60);\n const minutes = duration % 60;\n availability += ` ${translate('ra.function.for')}`\n if (hours > 0) {\n availability += ` ${translate('ra.date.phrase.hour', hours)}`\n }\n if (hours >= 1 && minutes > 0) {\n availability += ` ${translate('ra.function.and')}`\n }\n if (minutes > 0) {\n availability += ` ${translate('ra.date.phrase.minute', minutes)}`\n }\n\n return availability;\n}\n\nconst Note = styled('p')(({ theme }) => ({\n margin: theme.spacing(1),\n fontStyle: 'italic',\n whiteSpace: 'pre-line',\n}))\n\nconst Notes = ({ slot }) => {\n if (!slot.notes) return null;\n return <Note>{slot.notes}</Note>\n}\n\nconst EmptySlot = ({ slot, duration, game }) => {\n const translate = useTranslate();\n const classes = useAssignmentStyles();\n\n const availability = getAvailabilityMessage(slot, duration, translate, game.timezone);\n return <TableCell className={classes.cell} colSpan={4}>\n {availability}\n <Notes slot={slot} />\n </TableCell>\n}\n\nconst getSlotColor = ({ slot }) => {\n if (!slot) return 'transparent'\n if (slot.isAvailable == null) return grey[500];\n return slot.isAvailable ? green[500] : red[500];\n}\n\nconst stripes = (r, g, b) => `repeating-linear-gradient(\n -55deg,\n rgba(${r}, ${g}, ${b}, .025),\n rgba(${r}, ${g}, ${b}, .025) 8px,\n rgba(${r}, ${g}, ${b}, .05) 8px,\n rgba(${r}, ${g}, ${b}, .05) 16px\n)`\n\nconst getSlotBackground = ({ slot, duration }) => {\n if (slot.assignments.length) return 'inherit';\n if (slot.isAvailable == null) return stripes(158, 158, 158); // grey, unknown\n if (!slot.isAvailable) return stripes(244, 67, 54); // red, unavailable\n if (duration < 60) return stripes(255, 152, 0); // orange, warning <1h\n return stripes(76, 175, 80) // green, available\n}\n\nconst useSlotStyles = makeStyles(theme => ({\n slot: {\n borderLeftWidth: theme.spacing(1),\n borderLeftStyle: 'solid',\n borderLeftColor: props => getSlotColor(props),\n height: props => theme.spacing(props.size),\n background: props => getSlotBackground(props),\n margin: theme.spacing(0, 1),\n },\n timeCell: {\n width: theme.spacing(12),\n minWidth: theme.spacing(7),\n border: 0,\n [theme.breakpoints.up('sm')]: {\n minWidth: theme.spacing(12),\n }\n }\n}))\n\nconst AvailabilitySlot = ({ game, slot }) => {\n const start = moment.tz(slot.startTime, game.timezone);\n const end = moment.tz(slot.endTime, game.timezone);\n\n const duration = end.diff(start, 'minutes');\n const size = Math.max(4, Math.min(duration / 15, 16));\n\n const classes = useSlotStyles({ duration, size, slot });\n const timeRange = `${start.format('HH:mm')} - ${end.format('HH:mm')}`\n\n if (!slot.assignments.length) {\n return <TableRow className={classes.slot}>\n <TableCell className={classes.timeCell}>\n {timeRange}\n </TableCell>\n <EmptySlot slot={slot} duration={duration} game={game} />\n </TableRow>\n }\n\n return slot.assignments.map((assignment, index) =>\n <RecordContextProvider value={assignment} key={assignment.gameId}>\n <TableRow className={classes.slot}>\n <Assignment assignment={assignment} />\n </TableRow>\n </RecordContextProvider>\n )\n}\n\nconst AlertCell = styled(TableCell)({ border: 0 })\nconst Availabilities = ({ game, official, date }) => {\n const translate = useTranslate();\n const [ availabilities, setAvailabilities ] = useState([]);\n const [ loading, setLoading ] = useState(true);\n const [ error, setError ] = useState(false);\n\n useEffect(() => {\n setLoading(true);\n apiClient(`/participants/${official.participantId}/assignAvailability`, { params: { date, timezone: game.timezone } })\n .then(res => res.data)\n .then(data => setAvailabilities(data))\n .catch(() => setError(true))\n .finally(() => setLoading(false))\n }, [ date, game.startTime, game.timezone, official.participantId ])\n\n if (loading) {\n return <TableRow>\n <AlertCell colSpan={5}>\n <LoadingAlert>{translate('resources.games.alerts.loading.availability')}</LoadingAlert>\n </AlertCell>\n </TableRow>\n }\n\n if (error) {\n return <TableRow>\n <AlertCell colSpan={5}>\n <Alert severity=\"error\">{translate('resources.games.alerts.assignment.load_official_schedule_error')}</Alert>\n </AlertCell>\n </TableRow>\n }\n\n if (!loading && !availabilities.length) {\n return <TableRow>\n <AlertCell colSpan={5}>\n <Alert severity=\"info\">{translate('resources.games.alerts.assignment.no_game_and_availability')}</Alert>\n </AlertCell>\n </TableRow>\n }\n\n return availabilities.map(slot => <AvailabilitySlot key={slot.startTime} game={game} slot={slot} />)\n}\n\nconst useDateStyles = makeStyles(theme => ({\n row: {\n position: 'sticky',\n top: 0,\n backgroundColor: theme.palette.common.white,\n },\n content: {\n display: 'flex',\n alignItems: 'center',\n },\n date: {\n flex: 1,\n },\n diff: {\n color: theme.palette.secondary.light\n },\n footnote: {\n position: 'sticky',\n bottom: 0,\n backgroundColor: theme.palette.common.white,\n }\n}))\n\nconst DateRow = ({ game, official, date, onNext, onPrev, onInit }) => {\n const classes = useDateStyles();\n const translate = useTranslate();\n\n const ref = useRef(null);\n useEffect(() => {\n onInit(date, ref.current)\n }, [ ref, date, onInit ])\n\n const header = moment.tz(date, 'YYYY-MM-DD', game.timezone).format('dddd, LL')\n const diff = moment.tz(game.startTime, game.timezone).startOf('day').diff(date, 'days') * -1\n\n let diffText;\n\n if (diff !== 0) {\n diffText = ` (${diff > 0 ? `+${diff}` : diff} ${translate('ra.date.day', diff).toLowerCase()})`\n }\n\n return <>\n <span ref={ref} id={date}></span>\n <TableRow className={classes.row}>\n <TableCell colSpan={5}>\n <div className={classes.content}>\n <div className={classes.date}>{header}<span className={classes.diff}>{diffText}</span></div>\n <IconButton size=\"small\" onClick={() => onPrev(date, game)}>\n <ExpandLess />\n </IconButton>\n <IconButton size=\"small\" onClick={() => onNext(date, game)}>\n <ExpandMore />\n </IconButton>\n </div>\n </TableCell>\n </TableRow>\n <Availabilities game={game} official={official} date={date} />\n </>\n}\n\nconst FooterRow = ({ game }) => {\n const classes = useDateStyles();\n const translate = useTranslate();\n\n const timezoneAbbr = moment.tz(game.startTime, game.timezone).zoneAbbr();\n return <TableRow className={classes.footnote}>\n <TableCell colSpan={5}>\n <div dangerouslySetInnerHTML={{ __html: translate('resources.games.messages.assignment.time_display', { timezone: timezoneAbbr }) }} />\n </TableCell>\n </TableRow>\n}\n\nconst Spacer = styled('div')({ height: 160 })\nexport default ({ panelRef }) => {\n const { game } = useAssignmentsContext();\n const { official } = useAssignmentContext();\n\n const refs = useRef({})\n const initialDate = moment.tz(game.startTime, game.timezone).format('YYYY-MM-DD')\n const [ dates, setDates ] = useState([ initialDate ])\n const [ selection, setSelection ] = useState(null);\n\n useLayoutEffect(() => {\n if (selection == null) return;\n\n const ref = refs.current[selection];\n if (panelRef && ref) {\n panelRef.current.scroll({ top: ref.offsetTop, behaviour: 'smooth' })\n }\n\n setSelection(null)\n }, [ selection, panelRef ])\n\n if (!official) return null;\n\n const handleInit = (date, ref) => {\n refs.current[date] = ref;\n setSelection(date);\n }\n\n const handleNext = (date, game) => {\n const next = moment.tz(date, 'YYYY-MM-DD', game.timezone).add(1, 'day').format('YYYY-MM-DD')\n if (!dates.includes(next)) {\n setDates([...dates, next])\n } else {\n setSelection(next)\n }\n }\n\n const handlePrev = (date, game) => {\n const prev = moment.tz(date, 'YYYY-MM-DD', game.timezone).subtract(1, 'day').format('YYYY-MM-DD')\n if (!dates.includes(prev)) {\n setDates([prev, ...dates])\n } else {\n setSelection(prev)\n }\n }\n\n return <>\n <Table>\n <TableBody>{\n dates.map(date =>\n <DateRow key={date} game={game} official={official} date={date} onNext={handleNext} onPrev={handlePrev} onInit={handleInit} />\n )}\n <FooterRow game={game} />\n </TableBody>\n </Table>\n <Spacer />\n </>\n}\n\n","import React, { useState, useEffect } from 'react';\nimport { RecordContextProvider, useTranslate } from 'react-admin';\nimport { Table, TableHead, TableBody, TableRow, TableCell, Link, Tooltip, Typography, makeStyles, useMediaQuery } from \"@material-ui/core\"\nimport { Flag } from '@material-ui/icons';\nimport { Alert } from '@material-ui/lab';\nimport { Link as RouterLink } from 'react-router-dom'\nimport moment from 'moment-timezone';\n\nimport { FF_OFFICIALS, FF_SCOREKEEPERS, FF_TIMEKEEPERS, FF_ADDITIONAL_LINESPERSONS } from '@hisports/common/featureFlags';\nimport { getSeasonDisplayName } from '@hisports/common/src/seasons';\n\nimport { apiClient, useFlag, useSport } from '../../../../../../http';\nimport LoadingAlert from '../../../../../../common/LoadingAlert';\nimport { TeamField } from '../../../../../teams/TeamField';\nimport { SurfaceField } from '../../../../../surfaces/SurfaceField';\n\nimport { AssignmentPosition } from '../AssignmentStatus'\nimport { useAssignmentsContext } from '../../AssignmentsContext';\nimport { useAssignmentContext } from '../AssignmentContext';\n\nconst useStyles = makeStyles(theme => ({\n titleRow: {\n paddingTop: theme.spacing(1.5),\n },\n}))\n\nconst getSlotBackground = ({ assignmentGame, panelGame }) => {\n if (!assignmentGame || !panelGame) return 'inherit';\n if (assignmentGame.id !== panelGame.id) return 'inherit';\n return `repeating-linear-gradient(\n -55deg,\n rgba(97, 97, 97, .025),\n rgba(97, 97, 97, .025) 8px,\n rgba(97, 97, 97, .05) 8px,\n rgba(97, 97, 97, .05) 16px\n )`\n}\n\nconst useAssignmentStyles = makeStyles(theme => ({\n row: {\n // borderLeftWidth: theme.spacing(.5),\n // borderLeftStyle: 'solid',\n // borderLeftColor: props => getSlotColor(props),\n background: props => getSlotBackground(props),\n },\n cell: {\n border: 0,\n },\n fixedCell: {\n whiteSpace: 'pre',\n border: 0,\n },\n date: {\n position: 'sticky',\n top: 0,\n backgroundColor: theme.palette.common.white,\n },\n flag: {\n fontSize: '.75rem',\n marginLeft: 4,\n }\n}))\n\nconst GameFlag = ({ game, panelGame, className }) => {\n const translate = useTranslate();\n\n if (game.id !== panelGame.id) return null;\n return <span>\n <Tooltip title={translate('resources.games.labels.assignment.this_game')}>\n <Flag className={className} />\n </Tooltip>\n </span>\n}\n\nconst TeamFlag = ({ teamId, game, panelGame, title, className }) => {\n const translate = useTranslate();\n\n if (game.id === panelGame.id) return null;\n\n const teamIds = [panelGame.homeTeamId, panelGame.awayTeamId];\n if (!teamIds.includes(teamId)) return null;\n\n return <span>\n <Tooltip title={translate('ra.action.repeat')}>\n <Flag className={className} />\n </Tooltip>\n </span>\n}\n\nconst Assignment = ({ game: panelGame, assignment, showDate }) => {\n const { game } = assignment;\n const classes = useAssignmentStyles({ assignment, assignmentGame: game, panelGame });\n const small = useMediaQuery(theme => theme.breakpoints.down('sm'))\n\n if (!game) return null;\n\n const date = moment.tz(game.startTime, game.timezone).format('LL')\n\n let details;\n if (small) {\n details = <TableCell colSpan={3}>\n <p>\n <Link component={RouterLink} to={`/games/${game.id}/show/officials`}>\n {game.number}\n </Link>\n <GameFlag game={game} panelGame={panelGame} className={classes.flag} />\n </p>\n <p>\n H: <TeamField source=\"game.homeTeamId\" />\n <TeamFlag teamId={game.homeTeamId} game={game} panelGame={panelGame} className={classes.flag} />\n </p>\n <p>\n A: <TeamField source=\"game.awayTeamId\" />\n <TeamFlag teamId={game.awayTeamId} game={game} panelGame={panelGame} className={classes.flag} />\n </p>\n <p>V: <SurfaceField source=\"game.arenaId\" /></p>\n <p><AssignmentPosition assignment={assignment} /></p>\n </TableCell>\n } else {\n details = <>\n <TableCell className={classes.fixedCell}>\n <Link component={RouterLink} to={`/games/${game.id}/show/officials`}>\n {game.number}\n </Link>\n <GameFlag game={game} panelGame={panelGame} className={classes.flag} />\n </TableCell>\n <TableCell className={classes.cell}>\n <TeamField source=\"game.homeTeamId\" />\n <TeamFlag teamId={game.homeTeamId} game={game} panelGame={panelGame} className={classes.flag} title=\"Home team\" />\n <br />\n <TeamField source=\"game.awayTeamId\" />\n <TeamFlag teamId={game.awayTeamId} game={game} panelGame={panelGame} className={classes.flag} title=\"Away team\" />\n </TableCell>\n <TableCell className={classes.cell}>\n <SurfaceField source=\"game.arenaId\" />\n </TableCell>\n <TableCell className={classes.fixedCell} align=\"right\">\n <AssignmentPosition assignment={assignment} />\n </TableCell>\n </>\n }\n return <>\n {showDate && <TableRow className={classes.date}>\n <TableCell colSpan={4}>\n {date}\n </TableCell>\n </TableRow>}\n <TableRow className={classes.row}>\n {details}\n </TableRow>\n </>\n}\n\nconst countAssignments = (date, assignments, timezone) => {\n const yesterday = moment.tz(date, timezone).subtract(1, 'day');\n const week = [\n moment.tz(date, timezone).startOf('week').add(1, 'day'),\n moment.tz(date, timezone).endOf('week').add(1, 'day'),\n ]\n const lastWeek = [\n moment(date).subtract(1, 'week').startOf('week').add(1, 'day'),\n moment(date).subtract(1, 'week').endOf('week').add(1, 'day'),\n ]\n const lastMonth = moment.tz(date, timezone).subtract(1, 'month');\n\n return assignments.reduce((history, assignment) => {\n const gameTime = moment.tz(assignment.game.startTime, timezone)\n\n if (gameTime.isSame(date, 'day')) history.day++;\n if (gameTime.isSame(yesterday, 'day')) history.lastDay++;\n\n if (gameTime.isBetween(...week, 'day', '[]')) history.week++;\n if (gameTime.isBetween(...lastWeek, 'day', '[]')) history.lastWeek++;\n\n if (gameTime.isSame(date, 'month')) history.month++;\n if (gameTime.isSame(lastMonth, 'month')) history.lastMonth++;\n\n return history;\n }, {\n 'day': 0, 'week': 0, 'month': 0,\n 'lastDay': 0, 'lastWeek': 0, 'lastMonth': 0,\n 'season': assignments.length,\n })\n}\n\nconst HistoryRow = ({ history, id, title }) => {\n const translate = useTranslate()\n const classes = useStyles();\n\n if (!id && title) {\n return <TableRow>\n <TableCell variant=\"head\" component=\"th\" scope=\"row\" className={classes.titleRow}>{translate(title, { _: title })}</TableCell>\n <TableCell />\n <TableCell />\n <TableCell />\n <TableCell />\n </TableRow>\n }\n\n const total = history[id];\n if (!total) return null\n return <TableRow>\n <TableCell component=\"th\" scope=\"row\">{translate(title, { _: title })}</TableCell>\n <TableCell align=\"right\">{total.day} <Typography display=\"inline\" variant=\"body2\" color=\"textSecondary\">({total.lastDay})</Typography></TableCell>\n <TableCell align=\"right\">{total.week} <Typography display=\"inline\" variant=\"body2\" color=\"textSecondary\">({total.lastWeek})</Typography></TableCell>\n <TableCell align=\"right\">{total.month} <Typography display=\"inline\" variant=\"body2\" color=\"textSecondary\">({total.lastMonth})</Typography></TableCell>\n <TableCell align=\"right\">{total.season}</TableCell>\n </TableRow>\n}\n\nconst DateRangeTitle = ({ current, last, title }) =>\n <Tooltip title={<>\n <Typography variant=\"body1\">{current}</Typography>\n {last && <Typography variant=\"body2\">({last})</Typography>}\n </>}>\n <span>\n {title}\n </span>\n </Tooltip>\n\nconst useHistoryStyles = makeStyles(theme => ({\n root: {\n overflowY: 'auto',\n },\n value: {\n minWidth: theme.spacing(5),\n }\n}))\n\nconst History = ({ history, game, tableTitle, tableRows = [] }) => {\n const translate = useTranslate()\n const sport = useSport()\n const classes = useHistoryStyles()\n\n if (!tableRows.length) return null;\n\n const date = moment.tz(game.startTime, game.timezone);\n\n const day = date.format('YYYY-MM-DD');\n const lastDay = `${moment(date).subtract(1, 'day').format('YYYY-MM-DD')}`\n\n const week = [\n moment(date).startOf('week').add(1, 'day').format('YYYY-MM-DD'),\n moment(date).endOf('week').add(1, 'day').format('YYYY-MM-DD'),\n ].join(' - ')\n const lastWeek = [\n moment(date).subtract(1, 'week').startOf('week').add(1, 'day').format('YYYY-MM-DD'),\n moment(date).subtract(1, 'week').endOf('week').add(1, 'day').format('YYYY-MM-DD'),\n ].join(' - ')\n\n const month = [\n moment(date).startOf('month').format('YYYY-MM-DD'),\n moment(date).endOf('month').format('YYYY-MM-DD')\n ].join(' - ')\n const lastMonth = [\n moment(date).subtract(1, 'month').startOf('month').format('YYYY-MM-DD'),\n moment(date).subtract(1, 'month').endOf('month').format('YYYY-MM-DD'),\n ].join(' - ')\n\n return <div className={classes.root}>\n <Table size=\"small\">\n <TableHead>\n <TableRow>\n <TableCell>{translate(tableTitle, { _: tableTitle })}</TableCell>\n <TableCell align=\"right\" className={classes.value}>\n <DateRangeTitle title={translate('ra.date.day', 1)} current={day} last={lastDay} />\n </TableCell>\n <TableCell align=\"right\" className={classes.value}>\n <DateRangeTitle title={translate('ra.date.week', 1)} current={week} last={lastWeek} />\n </TableCell>\n <TableCell align=\"right\" className={classes.value}>\n <DateRangeTitle title={translate('ra.date.month', 1)} current={month} last={lastMonth} />\n </TableCell>\n <TableCell align=\"right\" className={classes.value}>\n <DateRangeTitle title={translate('resources.qualifications.fields.seasonId')} current={getSeasonDisplayName(game.seasonId, sport)} />\n </TableCell>\n </TableRow>\n </TableHead>\n <TableBody>\n {tableRows.map(({ id, title }) => <HistoryRow history={history} id={id} title={title} />)}\n </TableBody>\n </Table>\n </div>\n}\n\nconst AssignmentHistory = ({ game, official }) => {\n const isEnabled = useFlag()\n const translate = useTranslate();\n const [ assignments, setAssignments ] = useState([]);\n const [ history, setHistory ] = useState(null);\n const [ loading, setLoading ] = useState(true);\n const [ error, setError ] = useState(false);\n\n useEffect(() => {\n setError(false)\n setLoading(true)\n\n apiClient(`/participants/${official.participantId}/assignHistory`, {\n params: {\n seasonId: game.seasonId,\n },\n })\n .then(res => res.data)\n .then(assignments => {\n setError(false)\n setAssignments(assignments)\n\n const date = moment.tz(game.startTime, game.timezone);\n setHistory({\n 'Referee': countAssignments(date, assignments.filter(assignment => assignment.position === 'Referee'), game.timezone),\n 'Linesperson': countAssignments(date, assignments.filter(assignment => assignment.position === 'Linesperson'), game.timezone),\n ...(isEnabled(FF_ADDITIONAL_LINESPERSONS) ? { 'LinespersonTwo': countAssignments(date, assignments.filter(assignment => assignment.position === 'LinespersonTwo'), game.timezone) } : {}),\n ...(isEnabled(FF_ADDITIONAL_LINESPERSONS) ? { 'LinespersonThree': countAssignments(date, assignments.filter(assignment => assignment.position === 'LinespersonThree'), game.timezone) } : {}),\n ...(isEnabled(FF_OFFICIALS) ? { 'Official': countAssignments(date, assignments.filter(assignment => assignment.position === 'Official'), game.timezone) } : {}),\n ...(isEnabled(FF_SCOREKEEPERS) ? { 'Scorekeeper': countAssignments(date, assignments.filter(assignment => assignment.position === 'Scorekeeper'), game.timezone) } : {}),\n ...(isEnabled(FF_TIMEKEEPERS) ? { 'Timekeeper': countAssignments(date, assignments.filter(assignment => assignment.position === 'Timekeeper'), game.timezone) } : {}),\n 'Supervisor': countAssignments(date, assignments.filter(assignment => assignment.position === 'Supervisor'), game.timezone),\n 'total': countAssignments(date, assignments, game.timezone),\n [game.homeTeamId]: countAssignments(date, assignments.filter(assignment => [assignment.game.homeTeamId, assignment.game.awayTeamId].includes(game.homeTeamId)), game.timezone),\n [game.awayTeamId]: countAssignments(date, assignments.filter(assignment => [assignment.game.homeTeamId, assignment.game.awayTeamId].includes(game.awayTeamId)), game.timezone)\n })\n })\n .catch(e => setError(true))\n .finally(() => setLoading(false))\n }, [ game.startTime, game.seasonId, game.timezone, game.homeTeamId, game.awayTeamId, official.participantId, isEnabled ])\n\n if (loading) {\n return <LoadingAlert>{translate('resources.games.alerts.loading.assignment_history')}</LoadingAlert>\n }\n\n if (error) {\n return <Alert severity=\"error\">{translate('resources.games.alerts.assignment.official_history_error')}</Alert>\n }\n\n if (!loading && !assignments.length) {\n return <Alert severity=\"info\">{translate('resources.games.alerts.assignment.no_assignment')}</Alert>\n }\n\n return <>\n <History\n game={game}\n history={history}\n tableTitle=\"resources.officials.labels.position\"\n tableRows={[\n { id: 'Referee', title: 'resources.games.values.assignment.position.Referee' },\n { id: 'Linesperson', title: 'resources.games.values.assignment.position.Linesperson' },\n { id: 'LinespersonTwo', title: 'resources.games.values.assignment.position.LinespersonTwo' },\n { id: 'LinespersonThree', title: 'resources.games.values.assignment.position.LinespersonThree' },\n { id: 'Official', title: 'resources.games.values.assignment.position.Official' },\n { id: 'Scorekeeper', title: 'resources.games.values.assignment.position.Scorekeeper' },\n { id: 'Timekeeper', title: 'resources.games.values.assignment.position.Timekeeper' },\n { id: 'Supervisor', title: 'resources.games.values.assignment.position.Supervisor' },\n { id: 'total', title: 'ra.message.total' },\n\n ...(game.homeTeamId || game.awayTeamId ? [{ title: 'resources.officials.labels.team' }] : []),\n ...(game.homeTeamId ? [{ id: game.homeTeamId, title: <TeamField source=\"homeTeamId\" variant=\"inherit\" /> }] : []),\n ...(game.awayTeamId ? [{ id: game.awayTeamId, title: <TeamField source=\"awayTeamId\" variant=\"inherit\" /> }] : [])\n ]}\n />\n <br />\n <Table>\n <TableBody>\n {assignments.map((assignment, index) => {\n let showDate = false;\n const prevAssignment = assignments[index - 1];\n if (!prevAssignment) {\n showDate = true;\n } else {\n const prevGame = prevAssignment.game;\n const thisGame = assignment.game;\n\n if (prevGame && thisGame) {\n const thisDate = moment.tz(thisGame.startTime, thisGame.timezone).format('YYYY-MM-DD')\n const prevDate = moment.tz(prevGame.startTime, prevGame.timezone).format('YYYY-MM-DD')\n showDate = thisDate !== prevDate;\n }\n }\n return <RecordContextProvider value={assignment} key={assignment.gameId}>\n <Assignment key={assignment.gameId} game={game} assignment={assignment} showDate={showDate} />\n </RecordContextProvider>\n })}\n </TableBody>\n </Table>\n </>\n}\n\nexport default () => {\n const { game } = useAssignmentsContext();\n const { official } = useAssignmentContext();\n\n if (!game || !official) return null;\n return <AssignmentHistory game={game} official={official} />\n}\n\n","import React from 'react';\nimport { RecordContextProvider, ReferenceManyField, Pagination } from 'react-admin';\n\nimport { ContactGrid } from '../../../../../contacts/ContactGrid';\n\nimport { useAssignmentContext } from '../AssignmentContext';\n\nexport default () => {\n const { official } = useAssignmentContext();\n\n if (!official) return null;\n return <RecordContextProvider value={official}>\n <ReferenceManyField\n basePath=\"/contacts\"\n resource=\"contacts\"\n reference=\"contacts\"\n target=\"participants\"\n pagination={<Pagination rowsPerPageOptions={[]} />}\n >\n <ContactGrid />\n </ReferenceManyField>\n </RecordContextProvider>\n}\n","import React, { useState } from 'react';\nimport { useTranslate } from 'react-admin';\nimport { Button, makeStyles, styled } from '@material-ui/core'\nimport { Announcement, CompareArrows, DirectionsRun, EmojiObjectsOutlined, HomeOutlined, PlaylistAddCheck } from '@material-ui/icons';\nimport { Alert as MuiAlert, AlertTitle } from '@material-ui/lab'\n\nimport { useAssignmentsContext } from '../../AssignmentsContext';\nimport { useAssignmentContext } from '../AssignmentContext';\nimport { isRequested, isAtArena, isLocal, isReady, isConsecutive, getMeta } from '../util';\nimport { AssignerAlert as UnstyledAssigningAlert } from './SummaryTab';\n\nconst AssignerAlert = styled(UnstyledAssigningAlert)({\n margin: '8px 16px',\n})\n\nconst Alert = styled(MuiAlert)({\n margin: '8px 16px',\n})\n\nconst hasRequestedConflict = meta => getMeta(meta, 'Requested', 'conflict');\n\nconst OfficialList = ({ officials, selectOfficial }) => {\n const translate = useTranslate();\n const [ limited, setLimited ] = useState(officials.length > 5);\n const list = limited ? officials.slice(0, 5) : officials;\n return <>\n {list.map(official => {\n const icon = isRequested(official.flags) ? <Announcement />\n : isConsecutive(official.flags) ? <CompareArrows />\n : isAtArena(official.flags) ? <DirectionsRun />\n : isLocal(official.flags) ? <HomeOutlined />\n : <PlaylistAddCheck />;\n return <div key={official.participantId}>\n <Button size=\"small\" startIcon={icon} onClick={() => selectOfficial(official.participantId)}>\n {official.participant.fullName.toUpperCase()}\n </Button>\n </div>\n })}\n {limited && <Button size=\"small\" onClick={() => setLimited(false)}>{translate('ra.message.show_more', { number: officials.length - 5 })}</Button>}\n </>\n}\n\nconst useStyles = makeStyles(theme => ({\n root: {\n overflow: 'auto',\n flexGrow: 1,\n maxHeight: theme.spacing(52),\n width: '100%',\n },\n info: {\n padding: theme.spacing(1, 2),\n [theme.breakpoints.down('sm')]: {\n marginTop: theme.spacing(5)\n },\n },\n alert: {\n margin: theme.spacing(1, 0),\n }\n}))\n\nexport default () => {\n const { settings } = useAssignmentsContext();\n const { meta, allOfficials, selectOfficial } = useAssignmentContext();\n const classes = useStyles();\n const translate = useTranslate();\n\n const { isUnassigned } = meta;\n\n const info = [\n isUnassigned\n ? translate('resources.games.messages.assignment.position_unassigned')\n : translate('resources.games.messages.assignment.official_already_assigned'),\n translate('resources.games.messages.assignment.select_official_to_view_availability')\n ]\n\n const suggestions = allOfficials.filter(official => (isRequested(official.flags) || isAtArena(official.flags) || isConsecutive(official.flags)) && !hasRequestedConflict(official.meta))\n const ready = allOfficials.filter(official => isReady(official.flags))\n const officials = [...suggestions, ...ready];\n\n let text;\n if (settings.requestsEnabled) {\n text = !officials.length\n ? translate('resources.games.alerts.assignment.suggestions.no_requests_or_ready_officials')\n : suggestions.length > 0\n ? translate('resources.games.alerts.assignment.suggestions.officials_requested_this_game_already')\n : translate('resources.games.alerts.assignment.suggestions.no_request_officials_ready')\n } else {\n text = !officials.length\n ? translate('resources.games.alerts.assignment.suggestions.no_ready_officials')\n : suggestions.length > 0\n ? translate('resources.games.alerts.assignment.suggestions.officials_already_arena')\n : translate('resources.games.alerts.assignment.suggestions.no_officials_this_arena')\n }\n const title = officials.length\n ? translate('resources.games.alerts.assignment.suggestions.title')\n : translate('resources.games.alerts.assignment.suggestions.title_alt')\n const severity = officials.length ? 'success' : 'warning'\n\n return <div className={classes.root}>\n <p className={classes.info}>{info.join(' ')}</p>\n\n <Alert variant=\"outlined\" severity={severity} icon={<EmojiObjectsOutlined />}>\n <AlertTitle>{title}</AlertTitle>\n <p className={classes.alert}>{text}</p>\n <OfficialList officials={officials} selectOfficial={selectOfficial} />\n </Alert>\n <AssignerAlert />\n </div>\n}\n","import React, { cloneElement, useState, useRef } from 'react';\nimport { useTranslate } from 'react-admin';\nimport { Box, Tabs, Tab, makeStyles, styled } from \"@material-ui/core\"\nimport { Alert as MuiAlert } from '@material-ui/lab'\n\nimport { useAssignmentContext } from '../AssignmentContext';\nimport { filterFlags, isAssigned } from '../util';\n\nimport SummaryTab from './SummaryTab';\nimport ScheduleTab from './ScheduleTab';\nimport HistoryTab from './HistoryTab';\nimport ContactsTab from './ContactsTab';\nimport Suggestions from './Suggestions';\n\nconst Alert = styled(MuiAlert)({\n margin: 16,\n})\n\nconst TabPanel = ({ children, value, index, padding = 1, ...other }) => {\n const ref = useRef(null);\n return <div\n ref={ref}\n role=\"tabpanel\"\n hidden={value !== index}\n {...other}\n >\n {value === index && <Box padding={padding}>\n {cloneElement(children, { panelRef: ref })}\n </Box>}\n </div>\n}\n\nconst useStyles = makeStyles(theme => ({\n menu: {\n [theme.breakpoints.down('sm')]: {\n paddingLeft: theme.spacing(6),\n },\n },\n panel: {\n overflow: 'auto',\n flexGrow: 1,\n maxHeight: theme.spacing(52 - 6),\n width: '100%',\n },\n message: {\n padding: theme.spacing(1, 3),\n },\n}))\n\nexport default () => {\n const { assignment, meta, selectedId, official, filters } = useAssignmentContext();\n const classes = useStyles();\n const translate = useTranslate();\n\n const [ currentTab, setCurrentTab ] = useState(0);\n const handleTabChange = (event, newValue) => {\n setCurrentTab(newValue);\n }\n\n const { canAssign, canRequest, isUnassigned, isAssignedSelf, isOfficialSelf } = meta;\n\n if (!canAssign) {\n if (!isUnassigned && !isAssignedSelf) return <Alert severity=\"warning\">\n {translate('resources.games.alerts.assignment.this_position_already_assigned')}\n </Alert>\n\n if (canRequest && official) {\n const flags = filterFlags(official.flags, assignment.position, filters, official.meta);\n const assigned = isAssigned(flags);\n\n if (!isOfficialSelf && assigned) return <Alert severity=\"warning\">\n {translate('resources.games.alerts.assignment.already_assigned_to_game')}\n </Alert>\n }\n }\n\n if (canAssign && !selectedId) return <Suggestions />\n\n if (!official) return <Alert severity=\"warning\">\n {translate('resources.games.alerts.assignment.official_details_error')}\n </Alert>\n\n return <>\n <Tabs\n className={canAssign ? classes.menu : undefined}\n variant=\"scrollable\"\n scrollButtons=\"auto\"\n value={currentTab}\n onChange={handleTabChange}\n >\n <Tab label={translate('ra.action.summary')} />\n <Tab label={translate('resources.schedules.name', 1)} />\n <Tab label={translate('resources.games.labels.assignment.history')} />\n <Tab label={translate('resources.contacts.name', 1)} />\n </Tabs>\n <TabPanel value={currentTab} index={0} className={classes.panel} padding={2}>\n <SummaryTab role={canAssign && !isOfficialSelf ? 'assigner' : 'assignee'} />\n </TabPanel>\n <TabPanel value={currentTab} index={1} className={classes.panel} padding={0}>\n <ScheduleTab />\n </TabPanel>\n <TabPanel value={currentTab} index={2} className={classes.panel} padding={0}>\n <HistoryTab />\n </TabPanel>\n <TabPanel value={currentTab} index={3} className={classes.panel} padding={0}>\n <ContactsTab />\n </TabPanel>\n </>\n}\n","import React, { useRef, useLayoutEffect } from 'react';\nimport { useTranslate } from 'react-admin';\nimport { ListItem, ListItemText, ListItemIcon, Tooltip, makeStyles, useTheme } from '@material-ui/core';\nimport {\n CheckCircleOutline as AssignedIcon,\n Announcement as RequestedIcon,\n RemoveCircleOutline as RemovedIcon,\n ReportProblemOutlined as ExpiredIcon,\n Block as EligibilityIcon,\n Group as ConflictIcon,\n Schedule as ScheduleIcon,\n DirectionsRun as TravelIcon,\n Today as AssignedSameDayIcon,\n EventBusy as UnavailableIcon,\n Voicemail as AccountIcon,\n HomeOutlined as LocalIcon,\n} from '@material-ui/icons';\nimport { FixedSizeList as List } from 'react-window';\n\nimport { hasAnyFlag, isIneligible, filterFlags, isExpired, getMeta } from '../util';\nimport { useAssignmentContext } from '../AssignmentContext';\n\nconst useOfficialStyles = makeStyles(theme => ({\n icon: {\n minWidth: theme.spacing(4),\n },\n inset: {\n paddingLeft: theme.spacing(4),\n },\n ineligible: {\n color: theme.palette.grey[400],\n }\n}))\n\nconst OfficialIcon = ({ flags, meta }) => {\n const translate = useTranslate()\n const theme = useTheme()\n\n const isUnavailable = hasAnyFlag(flags, ['Unavailable', 'Availability', 'Office', 'Arena'])\n const isAssigned = hasAnyFlag(flags, ['Assigned'])\n const isRequested = hasAnyFlag(flags, ['Requested'])\n const isRemoved = hasAnyFlag(flags, ['Removed'])\n const isExpired = hasAnyFlag(flags, ['Expired'])\n const isIneligible = hasAnyFlag(flags, ['Scorekeeper Level', 'Timekeeper Level', 'Official Level', 'Referee Level', 'Linesperson Level', 'Referee Grade', 'Linesperson Grade', 'Category'])\n const isConflict = hasAnyFlag(flags, ['Team Conflict', 'Roster'])\n const isSchedule = hasAnyFlag(flags, ['Roster Conflict', 'Game Conflict', 'Game Overlap'])\n const isTravel = hasAnyFlag(flags, ['Travel', 'At Arena'])\n const isAssignedSameDay = hasAnyFlag(flags, ['Assigned Today'])\n const isAccount = hasAnyFlag(flags, ['Not Verified', 'Invited', 'Not Registered'])\n const isLocal = hasAnyFlag(flags, ['Local'])\n const hasRequestedConflict = getMeta(meta, 'Requested', 'conflict')\n\n const types = [];\n if (isAssigned) types.push(translate('resources.games.labels.assignment.status.assigned'))\n if (isRequested && !hasRequestedConflict) types.push(translate('resources.games.labels.assignment.status.requested'))\n if (isRemoved) types.push(translate('resources.games.labels.assignment.status.removed'))\n if (isExpired) types.push(translate('resources.games.labels.assignment.status.expired'))\n if (isIneligible) types.push(translate('resources.games.labels.assignment.status.ineligible'))\n if (isConflict) types.push(translate('resources.games.labels.assignment.status.conflicts'))\n if (isSchedule) types.push(translate('resources.games.labels.assignment.status.schedule'))\n if (isTravel) types.push(translate('resources.games.labels.assignment.status.travel'))\n if (!isTravel && !isSchedule && isAssignedSameDay) types.push(translate('resources.games.labels.assignment.status.assigned_today'))\n if (isUnavailable) types.push(translate('resources.games.labels.assignment.status.unavailable'))\n if (isAccount) types.push(translate('resources.games.labels.assignment.status.account'))\n if (isLocal) types.push(translate('resources.games.labels.assignment.status.local'))\n\n let icon;\n if (isAssigned) {\n icon = <AssignedIcon fontSize=\"small\" htmlColor={theme.palette.success.main} />\n } else if (isRequested && !hasRequestedConflict) {\n icon = <RequestedIcon fontSize=\"small\" />\n } else if (isRemoved) {\n icon = <RemovedIcon fontSize=\"small\" />\n } else if (isExpired) {\n icon = <ExpiredIcon fontSize=\"small\" />\n } else if (isIneligible) {\n icon = <EligibilityIcon fontSize=\"small\" />\n } else if (isConflict) {\n icon = <ConflictIcon fontSize=\"small\" />\n } else if (isSchedule) {\n icon = <ScheduleIcon fontSize=\"small\" />\n } else if (isTravel) {\n icon = <TravelIcon fontSize=\"small\" />\n } else if (!isTravel && !isSchedule && isAssignedSameDay) {\n icon = <AssignedSameDayIcon fontSize=\"small\" />\n } else if (isUnavailable) {\n icon = <UnavailableIcon fontSize=\"small\" />\n } else if (isAccount) {\n icon = <AccountIcon fontSize=\"small\" />\n } else if (isLocal) {\n icon = <LocalIcon fontSize=\"small\" />\n }\n\n if (!icon) return null;\n return <Tooltip title={types.join(', ')}>{icon}</Tooltip>\n}\n\nexport const OfficialListItem = React.memo(({ filters, assignment, official, current, selected, onSelect, style }) => {\n const classes = useOfficialStyles();\n\n const flags = filterFlags(official.flags, assignment.position, filters, official.meta);\n\n const ineligible = isIneligible(flags) || isExpired(flags);\n const isNoShow = assignment.status === 'no-show'\n\n let icon = <OfficialIcon flags={flags} meta={official.meta} />\n if (icon) icon = <ListItemIcon className={classes.icon}>{icon}</ListItemIcon>\n\n const handleClick = () => {\n onSelect(official.participantId)\n }\n\n return <ListItem dense button\n selected={selected}\n disabled={isNoShow && !current}\n onClick={handleClick}\n style={style}\n >\n {icon}\n <ListItemText\n primary={official.participant.fullName?.toUpperCase()}\n primaryTypographyProps={{\n classes: {\n root: ineligible ? classes.ineligible : null,\n },\n }}\n classes={{\n inset: classes.inset,\n }}\n inset={!icon}\n />\n </ListItem>\n})\n\nconst OfficialRow = ({ index, style, data }) => {\n const { officials, assignment, selectedId, onSelect, filters } = data;\n\n const official = officials[index];\n const isSelected = official && official.participantId === selectedId\n const isCurrent = assignment && assignment.participantId === official.participantId\n\n return <OfficialListItem key={index} style={style} assignment={assignment} official={official} current={isCurrent} selected={isSelected} onSelect={onSelect} filters={filters} />\n}\n\nconst useListStyles = makeStyles(theme => ({\n empty: {\n margin: theme.spacing(.5, 5),\n fontStyle: 'italic',\n }\n}))\n\nexport const OfficialList = ({ officials, onSelect }) => {\n const { assignment, selectedId, filters, allOfficials } = useAssignmentContext()\n const classes = useListStyles();\n const translate = useTranslate();\n const ref = useRef()\n\n useLayoutEffect(() => {\n if (!selectedId || !ref || !ref.current) return;\n const index = officials.findIndex(official => official.participantId === selectedId);\n ref.current.scrollToItem(index, 'smart')\n }, [ officials, selectedId, ref ])\n\n if (!officials.length) return <div className={classes.empty}>\n {translate('ra.message.no_results_filtered', allOfficials.length)}\n </div>;\n\n return <List\n ref={ref}\n height={8 * (52 - 7)} // theme.spacing * (panel height - official search input)\n width={8 * 38}\n itemSize={36}\n itemCount={officials.length}\n itemData={{ officials, assignment, selectedId, onSelect, filters }}\n >\n {OfficialRow}\n </List>\n}\n","import React, { useMemo, useState } from 'react';\nimport { useTranslate } from 'react-admin';\nimport { TextField, IconButton, Input, InputAdornment, FormControl, FormGroup, InputLabel, FormControlLabel, Select, MenuItem, Checkbox, makeStyles, ClickAwayListener, Radio, Typography } from '@material-ui/core';\nimport { Search, Clear } from '@material-ui/icons';\n\nimport { DividerWithText } from '../../../../../../common/DividerWithText';\nimport { InformationTooltip } from '../../../../../../common/InformationTooltip';\nimport { useAssignmentContext } from '../AssignmentContext';\nimport { EffectiveOfficialsBoolean } from '../..';\nimport { filterFlags, isExpired, isIneligible, isLocal, isNew, isUnavailable, isUnregistered } from '../util';\n\nexport const useSearch = (initialState = '') => {\n const [ search, setSearch ] = useState(initialState);\n\n const onSearch = e => {\n setSearch(e.target.value);\n }\n const onClear = () => {\n setSearch('');\n }\n\n return { search, onSearch, onClear }\n}\n\nexport const SearchInput = ({ label, className, value, placeholder, autoFocus, onChange, onClear }) => {\n return <TextField\n label={label}\n className={className}\n placeholder={placeholder}\n value={value}\n onChange={onChange}\n size=\"small\"\n fullWidth\n autoFocus={autoFocus}\n InputProps={{\n startAdornment: (\n <InputAdornment position=\"start\">\n <Search />\n </InputAdornment>\n ),\n endAdornment: (\n value && <InputAdornment position=\"end\">\n <IconButton onClick={onClear}>\n <Clear fontSize=\"small\" />\n </IconButton>\n </InputAdornment>\n )\n }}\n />\n}\n\nconst useSelectStyles = makeStyles(theme => ({\n root: {\n width: '100%',\n },\n attributes: {\n width: '100%',\n marginTop: theme.spacing(0.75),\n marginBottom: theme.spacing(0.75),\n fontSize: '12px',\n },\n breakSpace: {\n whiteSpace: 'break-spaces'\n },\n search: {\n marginTop: theme.spacing(0.75),\n marginBottom: theme.spacing(0.75),\n },\n filterLabel: {\n display: 'flex',\n gap: 4,\n },\n divider: {\n marginTop: theme.spacing(1.5),\n marginBottom: theme.spacing(1.5),\n color: theme.palette.secondary[500],\n }\n}))\n\nconst ListSelect = ({ name, label, lists, value, onChange }) => {\n const classes = useSelectStyles();\n if (!lists.length) return null;\n\n const handleChange = e => onChange(e.target.value)\n return <FormControl className={classes.root}>\n <InputLabel id={`${name}-label`}>{label}</InputLabel>\n <Select\n labelId={`${name}-label`}\n id={name}\n value={value}\n onChange={handleChange}\n input={<Input />}\n MenuProps={{\n disablePortal: true // required for ClickOverListener\n }}\n >\n <MenuItem value={null}><em>All officials</em></MenuItem>\n {lists.map(list => <MenuItem key={list.id} value={list.id}>{list.name}</MenuItem>)}\n </Select>\n </FormControl>\n}\n\nconst AttributeValueSelect = ({ name, attributeTypes, toggleFilter, filters }) => {\n const translate = useTranslate();\n const classes = useSelectStyles();\n if (!attributeTypes.length) return null;\n\n const valueSelection = attributeTypes.map(attributeType => {\n switch (attributeType.valueType) {\n case 'Dropdown':\n return <FormControl className={classes.attributes} key={attributeType.id}>\n <InputLabel id={`${attributeType.name}-label`} shrink>{attributeType.name}</InputLabel>\n <Select\n labelId={`${name}-label`}\n id={`attributeValues[${attributeType.id}]`}\n name={`attributeValues[${attributeType.id}]`}\n multiple\n value={ !filters[`attributeValues[${attributeType.id}]`] ? [] : filters[`attributeValues[${attributeType.id}]`]}\n onChange={e => toggleFilter(`attributeValues[${attributeType.id}]`, e.target.value, true)}\n input={<Input />}\n inputProps={{ className: classes.breakSpace }}\n MenuProps={{ disablePortal: true /* required for ClickOverListener*/ }}\n >\n {attributeType.options.values.map(optionValue => <MenuItem key={optionValue} value={optionValue}>{optionValue}</MenuItem>)}\n </Select>\n </FormControl>\n case 'Text':\n return <SearchInput\n label={attributeType.name}\n className={classes.search}\n key={attributeType.id}\n autoFocus={false}\n name={`attributeValues[${attributeType.id}]`}\n value={!filters[`attributeValues[${attributeType.id}]`] ? '' : filters[`attributeValues[${attributeType.id}]`]}\n placeholder={translate('resources.games.labels.assignment.search_attributes')}\n onChange={e => toggleFilter(`attributeValues[${attributeType.id}]`, e.target.value, true)}\n onClear={() => toggleFilter(`attributeValues[${attributeType.id}]`, '', true)}\n />\n case 'Number':\n return <TextField\n className={classes.attributes}\n key={attributeType.id}\n id={`attributeValues[${attributeType.id}]`}\n label={attributeType.name}\n InputLabelProps={{ shrink: true }}\n name={`attributeValues[${attributeType.id}]`}\n type=\"number\"\n value={!filters[`attributeValues[${attributeType.id}]`] ? '' : filters[`attributeValues[${attributeType.id}]`]}\n onChange={e => toggleFilter(`attributeValues[${attributeType.id}]`, e.target.value, true)}\n />\n default:\n return null;\n }\n })\n\n return valueSelection;\n}\n\nconst FilterLabel = ({ label, count = 0, toolTipText }) => {\n const classes = useSelectStyles();\n\n return <div className={classes.filterLabel}>\n {label}\n {toolTipText && <InformationTooltip text={toolTipText} />}\n {count !== false && <Typography variant=\"body2\" color=\"textSecondary\">{`(${count})`}</Typography>}\n </div>\n}\n\nexport const OfficialFilters = ({ className, filteredOfficials = [] }) => {\n const { lists = [], attributeTypes = [], filters, isFilterMenuOpen, toggleFilter, toggleFilterMenu, assignment } = useAssignmentContext()\n const translate = useTranslate()\n const classes = useSelectStyles()\n\n const totals = useMemo(() => {\n return filteredOfficials.reduce((acc, official) => {\n const officialFlags = filterFlags(official.flags, assignment.position, filters, official.meta);\n\n if (!isUnavailable(officialFlags)) acc.available++;\n if (!isIneligible(officialFlags)) acc.eligible++;\n if (!isExpired(officialFlags)) acc.nonExpired++;\n if (!isUnregistered(officialFlags)) acc.registered++;\n if (isNew(officialFlags)) acc.new++;\n if (isLocal(officialFlags)) acc.local++;\n return acc;\n }, {\n available: 0,\n eligible: 0,\n nonExpired: 0,\n registered: 0,\n new: 0,\n local: 0\n });\n }, [assignment.position, filteredOfficials, filters]);\n\n if (!isFilterMenuOpen) return null;\n return <ClickAwayListener onClickAway={toggleFilterMenu}>\n <div className={className}>\n <FormGroup row>\n <EffectiveOfficialsBoolean />\n <ListSelect\n label={translate('ra.message.filter_by_list')}\n lists={lists} value={filters.listId} name=\"listId\" onChange={value => toggleFilter('listId', value, true)}\n />\n <DividerWithText label=\"ra.message.filter_by_status\" className={classes.divider} />\n <FormControlLabel\n label={<FilterLabel\n label={translate('resources.officials.filters.available')}\n count={totals?.available}\n toolTipText={<div dangerouslySetInnerHTML={{ __html: translate('resources.games.tooltips.available_official') }} />}\n />}\n control={<Checkbox checked={filters.available} name=\"available\" size=\"small\" color=\"primary\" onClick={() => toggleFilter('available', undefined, true)} />}\n />\n <FormControlLabel\n label={<FilterLabel\n label={translate('resources.officials.filters.eligible')}\n count={totals?.eligible}\n toolTipText={<div dangerouslySetInnerHTML={{ __html: translate('resources.games.tooltips.eligible_official') }} />}\n />}\n control={<Checkbox checked={filters.eligible} name=\"eligible\" size=\"small\" color=\"primary\" onClick={() => toggleFilter('eligible', undefined, true)} />}\n />\n <FormControlLabel\n label={<FilterLabel\n label={translate('resources.officials.filters.nonExpired')}\n count={totals?.nonExpired}\n toolTipText={translate('resources.games.tooltips.non_expired_official')}\n />}\n control={<Checkbox checked={filters.nonExpired} name=\"expired\" size=\"small\" color=\"primary\" onClick={() => toggleFilter('nonExpired', undefined, true)} />}\n />\n <FormControlLabel\n label={<FilterLabel\n label={translate('resources.officials.filters.registered')}\n count={totals?.registered}\n toolTipText={translate('resources.games.tooltips.registered_official')}\n />}\n control={<Checkbox checked={filters.registered} name=\"registered\" size=\"small\" color=\"primary\" onClick={() => toggleFilter('registered', undefined, true)} />}\n />\n <FormControlLabel\n label={<FilterLabel\n label={translate('resources.officials.filters.new')}\n count={totals?.new}\n toolTipText={translate('resources.games.tooltips.new_official')}\n />}\n control={<Checkbox checked={filters.new} name=\"new\" size=\"small\" color=\"primary\" onClick={() => toggleFilter('new', undefined, true)} />}\n />\n <FormControlLabel\n label={<FilterLabel\n label={translate('resources.officials.filters.local')}\n count={totals?.local}\n toolTipText={translate('resources.games.tooltips.local_official')}\n />}\n control={<Checkbox checked={filters.local} name=\"local\" size=\"small\" color=\"primary\" onClick={() => toggleFilter('local', undefined, true)} />}\n />\n {(lists.length > 0 || filters.ignoreArena) && <FormControlLabel\n label={<FilterLabel\n label={translate('resources.officials.filters.ignore_arena')}\n count={false}\n toolTipText={translate('resources.games.tooltips.ignore_arena_availability')}\n />}\n control={<Checkbox checked={filters.ignoreArena} name=\"ignoreArena\" size=\"small\" color=\"primary\" onClick={() => toggleFilter('ignoreArena', undefined, true)} />}\n />}\n {attributeTypes.length > 0 && <>\n <DividerWithText label=\"ra.message.filter_by_attributes\" className={classes.divider} />\n <FormControlLabel label={translate('resources.officials.filters.matchAllAttributes')}\n control={<Radio checked={filters.matchAllAttributes} name=\"matchAllAttributes\" size=\"small\" color=\"primary\" onClick={() => toggleFilter('matchAllAttributes', true, true)} />}\n />\n <FormControlLabel label={translate('resources.officials.filters.matchAny')}\n control={<Radio checked={!filters.matchAllAttributes} name=\"matchAnyAttributes\" size=\"small\" color=\"primary\" onClick={() => toggleFilter('matchAllAttributes', false, true)} />}\n />\n <AttributeValueSelect attributeTypes={attributeTypes} toggleFilter={toggleFilter} filters={filters} />\n </>}\n </FormGroup>\n </div>\n </ClickAwayListener>\n}\n","import React, { useEffect } from 'react';\nimport { useTranslate } from 'react-admin';\nimport { makeStyles, IconButton, Tooltip, Badge, useMediaQuery, ClickAwayListener } from '@material-ui/core';\nimport { FilterList, Menu, MenuOpen } from '@material-ui/icons';\nimport cn from 'classnames';\n\nimport { isIneligible, isAssigned, isUnavailable, isUnregistered, filterFlags, isNew, isLocal, isExpired, hasMatchingAttributeValues, hasAttributeValuesFilter } from '../util';\nimport { useAssignmentContext } from '../AssignmentContext';\n\nimport { SearchInput, useSearch, OfficialFilters } from './OfficialFilters';\nimport { OfficialList } from './OfficialList';\n\nconst useStyles = makeStyles(theme => ({\n root: {\n width: theme.spacing(38),\n minWidth: theme.spacing(38),\n maxHeight: theme.spacing(52),\n position: 'relative',\n },\n open: {\n position: 'absolute',\n zIndex: 10,\n backgroundColor: theme.palette.common.white,\n boxShadow: '10px 0px 5px -5px #ddd',\n },\n closed: {\n position: 'absolute',\n backgroundColor: theme.palette.common.white,\n width: 'calc(100% - 16px)',\n paddingTop: theme.spacing(.5),\n },\n filters: {\n display: 'flex',\n height: theme.spacing(7),\n },\n search: {\n marginTop: theme.spacing(2),\n marginBottom: theme.spacing(2),\n paddingLeft: theme.spacing(1),\n paddingRight: theme.spacing(1),\n },\n filtersPanel: {\n position: 'absolute',\n top: theme.spacing(6),\n maxHeight: theme.spacing(72),\n overflowY: 'auto',\n zIndex: 1,\n backgroundColor: `#fff`,\n borderRight: `1px solid ${theme.palette.divider}`,\n padding: `${theme.spacing(1)}px ${theme.spacing(2)}px`,\n boxShadow: '0 15px 20px -15px #000',\n },\n tabs: {\n borderRight: `1px solid ${theme.palette.divider}`,\n minWidth: theme.spacing(20),\n },\n panel: {\n overflow: 'auto',\n flexGrow: 1,\n maxHeight: theme.spacing(52),\n width: '100%',\n },\n}))\n\nexport default () => {\n const { assignment, allOfficials, lists, attributeTypes, isMenuOpen, toggleMenu, closeMenu, selectOfficial, filters, isFilterMenuOpen, toggleFilter, toggleFilterMenu } = useAssignmentContext()\n const { search, onSearch, onClear } = useSearch();\n const small = useMediaQuery(theme => theme.breakpoints.down('sm'))\n const classes = useStyles();\n const translate = useTranslate();\n\n useEffect(() => {\n if (!lists) return;\n const listIds = lists.map(list => list.id)\n if (!filters.listId || listIds.includes(filters.listId)) return;\n toggleFilter('listId', null, true)\n }, [ lists, filters, toggleFilter ])\n\n const listIds = lists?.map(list => list.id) || [];\n\n const filteredOfficials = allOfficials.filter(official => {\n // ignore assigned officials in other positions\n if (isAssigned(official.flags) && assignment.participantId !== official.participantId) return false;\n\n // search ignores other filters\n if (search) return official.participant.fullName.toUpperCase().includes(search.toUpperCase())\n\n const flags = filterFlags(official.flags, assignment.position, filters, official.meta);\n\n if (filters.new && !isNew(flags)) return false;\n if (filters.local && !isLocal(flags)) return false;\n\n // always include the currently selected official ignoring the below filters\n if (assignment.participantId === official.participantId) return true;\n\n if (filters.listId && listIds.includes(filters.listId)) {\n if (!official.listIds || !official.listIds.includes(filters.listId)) return false;\n }\n\n // Attribute values filters\n if (hasAttributeValuesFilter(filters, attributeTypes)) {\n if (!hasMatchingAttributeValues(filters, official.attributeValues, attributeTypes)) {\n return false\n }\n }\n\n if (filters.available && isUnavailable(flags)) return false;\n if (filters.eligible && isIneligible(flags)) return false;\n if (filters.nonExpired && isExpired(flags)) return false;\n if (filters.registered && isUnregistered(flags)) return false;\n return true;\n });\n\n const toggle = <IconButton onClick={toggleMenu}>\n {isMenuOpen ? <MenuOpen /> : <Menu /> }\n </IconButton>\n\n if (!isMenuOpen && small) {\n return <div className={classes.closed}>\n {toggle}\n </div>\n }\n\n const handleSelect = participantId => {\n selectOfficial(participantId)\n if (small) closeMenu()\n }\n\n const isFiltered = filteredOfficials.length !== allOfficials.length;\n const menu = <div className={cn(classes.root, { [classes.open]: isMenuOpen })}>\n <div className={classes.filters}>\n {small && toggle}\n <SearchInput\n className={classes.search}\n autoFocus\n value={search}\n placeholder={translate('resources.games.labels.assignment.search_names')}\n onChange={onSearch}\n onClear={onClear}\n />\n <Tooltip title={isFiltered ? `${allOfficials.length - filteredOfficials.length}/${allOfficials.length} ${translate('resources.games.messages.assignment.hidden_by_filter')}` : ''}>\n <IconButton onClick={toggleFilterMenu}>\n <Badge color=\"primary\" variant=\"dot\" invisible={!isFiltered}>\n <FilterList color={isFilterMenuOpen ? 'primary' : 'secondary'} />\n </Badge>\n </IconButton>\n </Tooltip>\n </div>\n <OfficialFilters className={classes.filtersPanel} filteredOfficials={filteredOfficials} />\n <OfficialList officials={filteredOfficials} onSelect={handleSelect} />\n </div>\n\n if (small) return <ClickAwayListener onClickAway={closeMenu}>{menu}</ClickAwayListener>\n return menu;\n}\n","import React, { useMemo } from 'react';\nimport { GET_MANY_REFERENCE, useLocale, useQueryWithStore, useTranslate } from 'react-admin';\nimport { TableRow, TableCell, IconButton, Collapse, makeStyles, LinearProgress, useMediaQuery, Tooltip } from \"@material-ui/core\"\nimport { KeyboardArrowDown, KeyboardArrowUp } from '@material-ui/icons';\n\nimport { formatCurrency } from '../../../../../locale';\n\nimport { useAssignmentsContext } from '../AssignmentsContext';\nimport { AssignmentProvider, useAssignmentContext } from './AssignmentContext';\nimport { AssignmentStatus } from './AssignmentStatus';\nimport OfficialList from './OfficialList';\nimport OfficialDetails from './OfficialDetails';\nimport AssignToolbar from './AssignToolbar';\n\nconst useStyles = makeStyles(theme => ({\n toggleCell: {\n width: theme.spacing(22),\n whiteSpace: 'nowrap',\n [theme.breakpoints.down('sm')]: {\n width: 30,\n }\n },\n feeCell: {\n width: '7ch',\n },\n statusCell: {\n width: theme.spacing(16),\n },\n status: {\n fontStyle: 'italic',\n fontColor: theme.palette.text.disabled,\n },\n panelCell: {\n padding: 0,\n borderBottom: 0,\n },\n panel: {\n flexGrow: 1,\n backgroundColor: theme.palette.background.paper,\n height: theme.spacing(52),\n [theme.breakpoints.down('sm')]: {\n width: '100vw',\n },\n [theme.breakpoints.up('sm')]: {\n display: 'flex',\n }\n },\n details: {\n flexGrow: 1,\n },\n toolbar: {\n textAlign: 'right',\n padding: 8,\n backgroundColor: theme.palette.grey[100]\n }\n}))\n\nconst useOfficialContacts = (officialId, types = [], isPrimary) => useQueryWithStore({\n type: GET_MANY_REFERENCE,\n resource: 'contacts',\n payload: {\n target: 'participants',\n id: officialId,\n filter: { _scope: 'Tenant', type: { inq: types }, isPrimary }\n },\n}, {\n action: 'CUSTOM_QUERY',\n enabled: !!officialId\n})\n\nexport const AdhocOfficial = ({ participant }) => {\n const translate = useTranslate();\n if (!participant) return;\n return `${participant.fullName.toUpperCase()} (${translate('resources.games.labels.assignment.adhoc')})`;\n}\n\nconst Participant = ({ hideOfficial, hideStatus, hideContacts, assignment, settings }) => {\n const classes = useStyles();\n const translate = useTranslate();\n const isMobile = useMediaQuery(theme => theme.breakpoints.down('md'));\n\n const { status, participantId, participant } = assignment;\n\n const { data: contacts } = useOfficialContacts(participantId, ['Email', 'Mobile'], true)\n const [ email, mobile ] = useMemo(() => [\n contacts?.find(contact => contact.type === 'Email'),\n contacts?.find(contact => contact.type === 'Mobile')\n ], [contacts])\n\n const tooltipTitle = <span>{[email ? `Email: ${email.value}` : '', email ? <br /> : '', mobile ? `Mobile: ${mobile.value}` : '']}</span>\n const tooltipTitleMobile = <span>{[email ? email.value : '', email ? <br /> : '', mobile ? mobile.value : '']}</span>\n\n if (hideStatus) return <div className={classes.status}>\n {translate('resources.games.labels.assignment.hidden')}\n </div>\n\n if (hideOfficial && status && status !== \"unassigned\") return <div className={classes.status}>\n {translate('resources.games.labels.assignment.status.assigned')}\n </div>\n\n if (participantId && !hideOfficial && isMobile && !hideContacts) return <span>{participant.fullName.toUpperCase()} <br /> {tooltipTitleMobile} </span>\n if (participantId && !hideOfficial && !hideContacts) return (email || mobile) ? <Tooltip title={tooltipTitle}><span>{participant.fullName.toUpperCase()}</span></Tooltip> : <span>{participant.fullName.toUpperCase()}</span>\n if (participantId && !hideOfficial) return <span>{participant.fullName.toUpperCase()}</span>\n if (participant && !hideOfficial) return <div className={classes.status}>\n <AdhocOfficial participant={participant} />\n </div>\n\n if (settings?.mode === 'Integration') return <div className={classes.status}>{translate('ra.page.not_available')}</div>\n return <div className={classes.status}>\n {translate('resources.games.labels.assignment.unassigned')}\n </div>\n}\n\nconst AssignmentSummaryRow = () => {\n const { assignment, meta, isPanelOpen, togglePanel } = useAssignmentContext();\n const { game, settings } = useAssignmentsContext();\n const translate = useTranslate();\n const classes = useStyles();\n const small = useMediaQuery(theme => theme.breakpoints.down('sm'))\n const locale = useLocale();\n\n const showFeeAndContacts = meta.canAssign || meta.isOfficial;\n const hideOfficial = !game.isApproved && settings?.assignmentVisibility !== \"Visible\" && !meta.isAssignedGame && !meta.canAssign;\n const hideStatus = !game.isApproved && settings?.assignmentVisibility === \"Hidden\" && !meta.isOfficial && !meta.canAssign;\n\n const toggle = meta.enabled && <IconButton aria-label=\"expand row\" size=\"small\" disabled={!meta.showPanel}>\n {(isPanelOpen && meta.showPanel) ? <KeyboardArrowUp /> : <KeyboardArrowDown />}\n </IconButton>\n\n const assignmentStatus = !hideStatus\n ? <AssignmentStatus assignment={assignment} showDelegated />\n : <div className={classes.status}>\n {translate('resources.games.labels.assignment.hidden')}\n </div>\n\n if (small) {\n return <TableRow onClick={togglePanel}>\n <TableCell className={classes.toggleCell}>\n {toggle}\n </TableCell>\n <TableCell colSpan={2}>\n <div>{translate(`resources.games.values.assignment.position.${assignment.position}`)}</div>\n <Participant hideOfficial={hideOfficial} hideStatus={hideStatus} hideContacts={!showFeeAndContacts} assignment={assignment} settings={settings} />\n </TableCell>\n <TableCell align=\"right\" className={classes.statusCell}>\n {showFeeAndContacts && <div>{formatCurrency(meta.fee, locale)}</div>}\n {assignmentStatus}\n </TableCell>\n </TableRow>\n }\n\n return <TableRow onClick={togglePanel}>\n <TableCell className={classes.toggleCell}>\n {toggle}\n {' '}\n {translate(`resources.games.values.assignment.position.${assignment.position}`, { _: assignment.position })}\n </TableCell>\n <TableCell>\n <Participant hideOfficial={hideOfficial} hideStatus={hideStatus} hideContacts={!showFeeAndContacts} assignment={assignment} settings={settings} />\n </TableCell>\n {showFeeAndContacts && <TableCell className={classes.feeCell} align=\"right\" >{formatCurrency(meta.fee, locale)}</TableCell>}\n <TableCell className={classes.statusCell} align=\"right\" colSpan={showFeeAndContacts ? 1 : 2}>{assignmentStatus}</TableCell>\n </TableRow>\n}\n\nconst AssignmentPanelRow = () => {\n const { meta, isPanelOpen, isPanelLoading } = useAssignmentContext();\n const classes = useStyles();\n\n return <>\n {isPanelOpen && isPanelLoading && <TableRow>\n <TableCell colSpan={4} className={classes.panelCell}>\n <LinearProgress />\n </TableCell>\n </TableRow>}\n\n {meta.showPanel && <TableRow>\n <TableCell colSpan={4} className={classes.panelCell}>\n <Collapse in={isPanelOpen}>\n {isPanelOpen && <>\n <div className={classes.panel}>\n {meta.canAssign && (!meta.isCertified || meta.certifiedOfficialChanges) && <OfficialList />}\n <div className={classes.details}>\n <OfficialDetails />\n </div>\n </div>\n <AssignToolbar className={classes.toolbar} />\n </>}\n </Collapse>\n </TableCell>\n </TableRow>}\n </>\n}\n\nconst AssignmentRow = () => {\n const { game } = useAssignmentsContext();\n const { assignment, meta } = useAssignmentContext();\n\n if (!game || !assignment || !meta) return null;\n if (meta.hideSupervisor) return null;\n\n return <>\n <AssignmentSummaryRow />\n <AssignmentPanelRow />\n </>\n}\n\nexport const Assignment = ({ assignment }) => {\n return <AssignmentProvider assignment={assignment}>\n <AssignmentRow />\n </AssignmentProvider>\n}\n","import React from 'react';\nimport { Box, CircularProgress } from \"@material-ui/core\";\n\nimport { isEmpty } from '@hisports/parsers';\n\nconst byPosition = (position, meta) => flag => {\n if (!position) return true;\n if (flag === 'Scorekeeper Level' && position !== 'Scorekeeper') return false;\n if (flag === 'Timekeeper Level' && position !== 'Timekeeper') return false;\n if (flag === 'Official Level' && position !== 'Official') return false;\n if (flag === 'Referee Level' && position !== 'Referee') return false;\n if (flag === 'Referee Grade' && position !== 'Referee') return false;\n if (flag === 'Linesperson Level' && !['Linesperson', 'LinespersonTwo', 'LinespersonThree'].includes(position)) return false;\n if (flag === 'Linesperson Grade' && !['Linesperson', 'LinespersonTwo', 'LinespersonThree'].includes(position)) return false;\n if (flag === 'Category') {\n const unavailablePositions = getMeta(meta, 'Category', 'unavailablePositions');\n return !!unavailablePositions && unavailablePositions.includes(position);\n }\n return true;\n}\n\nconst byFilters = filters => flag => {\n if (!filters) return true;\n if (flag === 'Arena' && filters.ignoreArena) return false;\n return true;\n}\n\nexport const filterFlags = (flags = [], position, filters, meta) =>\n flags\n .filter(byPosition(position, meta))\n .filter(byFilters(filters))\n\nexport const getAssignmentIndex = (assignments, assignmentId) => assignments.findIndex(assignment => assignment.id === assignmentId) + 1;\n\nexport const ineligibleFlags = [\n 'Scorekeeper Level',\n 'Timekeeper Level',\n 'Official Level',\n 'Referee Level',\n 'Linesperson Level',\n 'Referee Grade',\n 'Linesperson Grade',\n 'Underage',\n 'Team',\n 'Roster',\n 'Schedule',\n 'Group',\n 'Game Conflict',\n 'Daily Limit',\n 'Category',\n]\n\nexport const unavailableFlags = [\n 'Game Overlap',\n 'Unavailable',\n 'Availability',\n 'Office',\n 'Arena',\n 'Travel',\n]\n\nconst unregisteredFlags = [\n 'Not Registered',\n 'Invited',\n]\n\nconst metaFlags = [\n 'Local',\n 'New',\n]\n\nexport const hasFlag = (flags, flag) => flags.includes(flag);\nexport const hasAnyFlag = (officialFlags, flags) => flags.some(flag => officialFlags.includes(flag));\n\nexport const isIneligible = flags => hasAnyFlag(flags, ineligibleFlags);\nexport const isUnavailable = flags => hasAnyFlag(flags, unavailableFlags);\nexport const isUnregistered = flags => hasAnyFlag(flags, unregisteredFlags);\nexport const isExpired = flags => hasFlag(flags, 'Expired')\nexport const isConflict = flags => hasFlag(flags, 'Game Conflict');\nexport const isAtArena = flags => hasFlag(flags, 'At Arena');\nexport const isAssigned = flags => hasFlag(flags, 'Assigned');\nexport const isAssignedSameDay = flags => hasFlag(flags, 'Assigned Today')\nexport const isRequested = flags => hasFlag(flags, 'Requested');\nexport const isUnconfirmed = flags => hasFlag(flags, 'Unconfirmed');\nexport const isDeclined = flags => hasFlag(flags, 'Declined');\nexport const isNoShow = flags => hasFlag(flags, 'No Show');\nexport const isNew = flags => hasFlag(flags, 'New');\nexport const isLocal = flags => hasFlag(flags, 'Local');\nexport const isRemoved = flags => hasFlag(flags, 'Removed');\nexport const isConsecutive = flags => hasFlag(flags, 'Consecutive');\n\nexport const isReady = flags =>\n flags.filter(flag => !metaFlags.includes(flag)).length === 0\n\nexport const getMeta = (meta, flag, attribute) => {\n if (!meta || !flag || !meta[flag]) return;\n if (!attribute) return meta[flag];\n return meta[flag][attribute]\n}\n\nexport const hasAttributeValuesFilter = (filters, attributeTypes) => {\n return attributeTypes.some(attributeType => !isEmpty(filters[`attributeValues[${attributeType.id}]`]))\n}\n\nexport const hasMatchingAttributeValues = (filters, officialAttributeValues, attributeTypes) => {\n if (isEmpty(officialAttributeValues)) return false;\n\n const results = [];\n attributeTypes.forEach((attributeType, index) => {\n const { id, valueType } = attributeType;\n if (isEmpty(filters[`attributeValues[${id}]`])) return;\n results[index] = false;\n\n officialAttributeValues.forEach(officialAttributeValue => {\n const { attributeId, value } = officialAttributeValue;\n if (attributeId !== id) return;\n\n switch (valueType) {\n case 'Dropdown':\n if (filters[`attributeValues[${id}]`].includes(value)) {\n results[index] = true;\n }\n break;\n\n case 'Text':\n if (value.toUpperCase().includes(filters[`attributeValues[${id}]`].toUpperCase())) {\n results[index] = true;\n }\n break;\n\n case 'Number':\n if (value == filters[`attributeValues[${id}]`]) {\n results[index] = true;\n }\n break;\n\n default:\n results[index] = false;\n }\n })\n })\n\n const method = filters.matchAllAttributes ? 'every' : 'some';\n return results[method](matching => matching)\n}\n\nexport const LoadingSpinner = props =>\n <Box display=\"flex\" alignItems=\"center\" justifyContent=\"center\" flex={1} {...props}>\n <CircularProgress />\n </Box>\n","import React, { createContext, useContext, useEffect, useMemo, useState } from 'react';\nimport { useQuery, useTranslate, GET_ONE, GET_MANY_REFERENCE, useDataProvider } from 'react-admin';\nimport { Button } from '@material-ui/core'\nimport { Alert } from '@material-ui/lab'\nimport { v4 as uuid } from 'uuid';\n\nimport { dedupe, isEmpty } from '@hisports/parsers';\n\nimport { useAuthContext, apiClient, useHttpClient, useParticipant } from '../../../../http';\nimport LoadingAlert from '../../../../common/LoadingAlert';\nimport { isAuthorized } from '../../../../common/Authorize';\nimport useSyncedPreferences from '../../../../common/useSyncedPreferences';\n\nimport { useBranchSettings } from '../../../branchOfficeSettings';\n\nimport { getAssignmentIndex } from './Assignment/util';\n\nconst AssignmentsContext = createContext(null);\n\nconst useGame = (gameId) => useQuery({\n type: GET_ONE,\n resource: 'games',\n payload: { id: gameId }\n}, {\n enabled: gameId != null,\n})\n\nconst useAssignments = (gameId) => useQuery({\n type: GET_MANY_REFERENCE,\n resource: 'officialAssignments',\n payload: {\n target: 'games',\n id: gameId,\n pagination: { page: 1, perPage: 100 },\n sort: { field: 'gameId', order: 'ASC' },\n filter: {},\n }\n}, {\n enabled: gameId != null,\n})\n\nconst useSettings = (gameId) => useQuery({\n type: GET_ONE,\n resource: 'gameAssignSettings',\n payload: { id: gameId }\n}, {\n enabled: gameId != null,\n})\n\nconst useCurrentOfficial = (gameId, participantId, enabled) =>\n useHttpClient(`/games/${gameId}/availableOfficials/${participantId}`, null, enabled)\n\nconst useAllOfficials = (game, officeIds = [], effectiveOfficials = false, enabled) => {\n const [ data, setData ] = useState();\n\n useEffect(() => {\n if (!enabled || !game?.id) return;\n\n officeIds.forEach(officeId => {\n const cacheKey = `${officeId}-${effectiveOfficials}`;\n\n if (data?.[cacheKey]) return;\n\n setData((data = {}) => ({ ...data, [cacheKey]: { loading: true } }))\n\n apiClient(`/games/${game.id}/availableOfficials`, {\n method: 'GET',\n params: { officeId, effectiveOffices: effectiveOfficials }\n }).then(({ data: officials }) => {\n setData((data = {}) => ({ ...data, [cacheKey]: { loading: false, data: officials } }))\n }).catch(e => {\n setData((data = {}) => ({ ...data, [cacheKey]: { loading: false, error: e } }))\n })\n })\n }, [data, officeIds, game, effectiveOfficials, enabled])\n\n // strips effectiveOfficials from the key\n const officials = useMemo(() => {\n return Object.fromEntries(\n Object.entries(data || {}).filter(([key]) => {\n const [, keyEffectiveOfficials] = key.split('-');\n return keyEffectiveOfficials === String(effectiveOfficials);\n }).map(([key, value]) => [key.split('-')[0], value])\n );\n }, [data, effectiveOfficials]);\n\n return {\n data: officials,\n refetch: () => setData()\n }\n}\n\nconst useOfficialLists = (officeIds = [], effectiveOfficialLists = false, enabled) => {\n const [ data, setData ] = useState()\n const dataProvider = useDataProvider()\n\n useEffect(() => {\n if (!enabled) return;\n\n officeIds.forEach(officeId => {\n const cacheKey = `${officeId}-${effectiveOfficialLists}`;\n\n if (data?.[cacheKey]) return;\n\n const listFilter = effectiveOfficialLists ? { effectiveOffices: officeId, includeParents: false, _scope: 'Parents' } : { officeId, effectiveOffices: false }\n\n setData((data = {}) => ({ ...data, [cacheKey]: { loading: true } }))\n\n dataProvider.getList('lists', {\n filter: listFilter,\n pagination: { page: 0, perPage: 9999 },\n sort: { field: 'name', order: 'ASC' },\n }).then(({ data: officialList }) => {\n setData((data = {}) => ({ ...data, [cacheKey]: { loading: false, data: officialList } }))\n }).catch(e => {\n setData((data = {}) => ({ ...data, [cacheKey]: { loading: false, error: e } }))\n })\n })\n }, [data, effectiveOfficialLists, officeIds, enabled, dataProvider])\n\n // strips effectiveOfficialLists from the key\n const officialLists = useMemo(() => {\n return Object.fromEntries(\n Object.entries(data || {}).filter(([key]) => {\n const [, keyEffectiveOfficialLists] = key.split('-');\n return keyEffectiveOfficialLists === String(effectiveOfficialLists);\n }).map(([key, value]) => [key.split('-')[0], value])\n );\n }, [data, effectiveOfficialLists]);\n\n return { data: officialLists }\n}\n\nconst useOfficialAttributeTypes = (officeIds = [], enabled) => {\n const [ data, setData ] = useState()\n const dataProvider = useDataProvider()\n\n useEffect(() => {\n if (!enabled) return;\n\n officeIds.forEach(officeId => {\n if (data?.[officeId]) return;\n\n setData((data = {}) => ({ ...data, [officeId]: { loading: true } }))\n\n dataProvider.getList('attributetypes', {\n filter: { type: 'Officiating', targetType: 'Participant', effectiveOffices: officeId, includeParents: true, _scope: 'Parents' },\n pagination: { page: 0, perPage: 9999 },\n sort: { field: 'name', order: 'ASC' },\n }).then(({ data: officialAttributeTypes }) => {\n setData((data = {}) => ({ ...data, [officeId]: { loading: false, data: officialAttributeTypes } }))\n }).catch(e => {\n setData((data = {}) => ({ ...data, [officeId]: { loading: false, error: e } }))\n })\n })\n }, [data, officeIds, enabled, dataProvider])\n\n return { data }\n}\n\nconst updateAssignments = (gameId) => {\n return apiClient(`/games/${gameId}/officialAssignments`, {\n method: 'GET',\n })\n}\n\nconst updateOfficials = (gameId, officeId) => {\n return apiClient(`/games/${gameId}/availableOfficials`, {\n method: 'GET',\n params: { officeId }\n })\n}\n\nconst updateOfficial = (gameId, participantId) => {\n return apiClient(`/games/${gameId}/availableOfficials/${participantId}`)\n}\n\nexport function AssignmentsProvider({ gameId, gameOfficeId, children }) {\n const translate = useTranslate();\n const participantId = useParticipant();\n const { permissions } = useAuthContext();\n\n const [ assignments, setAssignments ] = useState([])\n const [ allOfficials, setAllOfficials ] = useState({});\n const [ currentOfficial, setCurrentOfficial ] = useState({})\n const [ openAssignmentIndexes, setOpenAssignmentIndexes ] = useState([])\n const [ effectiveOfficials ] = useSyncedPreferences('effectiveAssigningOfficials', false);\n\n // base game/assignment data\n const { data: game, loading: gameLoading, error: gameError } = useGame(gameId)\n const { data: settings, loading: settingsLoading, error: settingsError, refetch: refetchSettings } = useSettings(gameId)\n const { data: branchSettings, loading: branchSettingsLoading, error: branchSettingsError, refetch: refetchBranchSettings } = useBranchSettings(gameOfficeId)\n const { data: fetchedAssignments, loading: assignmentsLoading, error: assignmentsError, refetch: refetchAssignments } = useAssignments(gameId)\n\n const settingsFailure = settingsError && !(settingsError?.response?.status === 404)\n const branchSettingsFailure = branchSettingsError && !(branchSettingsError?.response?.status === 404)\n const loading = gameLoading || assignmentsLoading || (settingsLoading && !settingsError) || (branchSettingsLoading && !branchSettingsError)\n const error = gameError || assignmentsError || settingsFailure || branchSettingsFailure;\n\n // if not assigner, load own availability, and load full official list for assigners\n const canAssign = isAuthorized(game, 'games', 'assign', false, false);\n const officialEnabled = game != null && participantId != null && !canAssign\n\n const officeIds = dedupe((assignments || [])\n .filter(assignment => openAssignmentIndexes.includes(getAssignmentIndex(assignments, assignment?.id)))\n .map(assignment => assignment.officeId || settings?.officeId))\n\n // panel data\n const { data: lists } = useOfficialLists(officeIds, effectiveOfficials, gameId != null && canAssign)\n const { data: attributeTypes } = useOfficialAttributeTypes(officeIds, gameId != null && canAssign)\n const { data: fetchedOfficials, refetch: refetchOfficials } = useAllOfficials(game, officeIds, effectiveOfficials, gameId != null && canAssign)\n const { data: fetchedCurrentOfficial, loading: currentOfficialLoading, loaded: currentOfficialLoaded, error: currentOfficialError, refetch: refetchCurrentOfficial } = useCurrentOfficial(gameId, participantId, officialEnabled)\n\n useEffect(() => {\n if (!fetchedAssignments?.length) return;\n setAssignments(fetchedAssignments)\n }, [ fetchedAssignments ])\n\n useEffect(() => {\n if (isEmpty(fetchedOfficials)) return;\n setAllOfficials(fetchedOfficials)\n }, [ fetchedOfficials ])\n\n useEffect(() => {\n if (isEmpty(fetchedCurrentOfficial) && !currentOfficialLoading) return;\n setCurrentOfficial({ data: fetchedCurrentOfficial, loading: currentOfficialLoading, loaded: currentOfficialLoaded, error: currentOfficialError })\n }, [ fetchedCurrentOfficial, currentOfficialLoading, currentOfficialLoaded, currentOfficialError ])\n\n const canManage = useMemo(() => {\n const isSystemUser = permissions.some(p => p.roleType === 'System');\n const permittedOfficeIds = permissions.filter(p => p.roleType === 'Office' && p.scopes.includes('assigning:assign')).flatMap(p => p.officeIds).filter(Boolean)\n const permittedScheduleIds = permissions.filter(p => p.roleType === 'Schedule' && p.scopes.includes('assigning:assign')).flatMap(p => p.scheduleIds).filter(Boolean)\n\n return isAuthorized(game, 'games', 'assignSettings', false, false) && (isSystemUser || permittedOfficeIds.includes(settings?.officeId) || permittedScheduleIds.includes(game?.scheduleId))\n }, [ game, settings, permissions ])\n\n const refetch = useMemo(() => () => {\n refetchAssignments();\n refetchSettings();\n refetchBranchSettings();\n refetchOfficials();\n refetchCurrentOfficial();\n }, [ refetchAssignments, refetchSettings, refetchBranchSettings, refetchOfficials, refetchCurrentOfficial ]);\n\n const value = useMemo(() => {\n const refresh = async (assignment, participantId = null) => {\n const { id, position, officeId: assignmentOfficeId, _scopes } = assignment;\n const officeId = assignmentOfficeId || settings.officeId;\n\n participantId && await updateOfficial(game.id, participantId)\n .then(official => setCurrentOfficial(official))\n\n !participantId && await updateOfficials(game.id, officeId)\n .then(({ data: officials }) => setAllOfficials((data = {}) => ({ ...data, [officeId]: { loading: false, data: officials } })))\n\n await updateAssignments(game.id)\n .then(({ data }) =>\n setAssignments(prev => {\n const newAssignments = [...prev];\n const updatedAssignment = data.find(assignment => assignment.id === id);\n const assignmentIndex = newAssignments.findIndex(assignment => assignment.id === id);\n\n if (!updatedAssignment) {\n newAssignments[assignmentIndex] = { id: uuid(), position, status: \"unassigned\", _scopes }\n return newAssignments;\n }\n\n newAssignments[assignmentIndex] = updatedAssignment;\n return newAssignments;\n }))\n }\n\n return {\n game,\n assignments,\n settings,\n branchSettings,\n lists,\n attributeTypes,\n allOfficials,\n currentOfficial,\n openAssignmentIndexes,\n setOpenAssignmentIndexes,\n officialEnabled,\n canManage,\n refetch,\n refresh,\n }\n }, [ game, assignments, settings, branchSettings, lists, attributeTypes, allOfficials, currentOfficial, openAssignmentIndexes, officialEnabled, canManage, refetch ])\n\n const retryAction = <Button color=\"inherit\" disabled={loading && !error} onClick={refetch}>{translate('ra.action.retry')}</Button>\n\n if (error) {\n return <Alert severity=\"error\" action={retryAction}>{translate('resources.games.alerts.assignment.load_assignment_panel_error')}</Alert>\n }\n\n if (loading) {\n return <LoadingAlert square>{translate('resources.games.alerts.loading.assignments')}</LoadingAlert>\n }\n\n if (!game || !assignments) {\n return <Alert severity=\"error\" action={retryAction}>{translate('resources.games.alerts.assignment.load_assignments_error')}</Alert>\n }\n\n return <AssignmentsContext.Provider value={value}>\n {children}\n </AssignmentsContext.Provider>\n}\n\nexport const useAssignmentsContext = () => useContext(AssignmentsContext)\n","import React from 'react';\nimport { Grid } from '@material-ui/core'\nimport { GET_ONE, NumberInput, RecordContextProvider, SimpleForm, useQuery, useRecordContext } from 'react-admin';\nimport { useFormState } from 'react-final-form';\nimport { useSelector } from 'react-redux';\n\nimport { FF_GRADES, FF_OFFICIALS, FF_SCOREKEEPERS, FF_TIMEKEEPERS } from '@hisports/common/featureFlags';\n\nimport Toolbar from '../../common/ra/Toolbar';\nimport { AssignmentStatusEnumInput } from '../../common/inputs/EnumInputs';\nimport { FieldDependency } from '../../common/FieldDependency';\nimport { useRichTranslate } from '../../common/useRichTranslate';\nimport { SquareAlert } from '../../common/SquareAlert';\nimport { useFlag } from '../../http';\n\nimport { OfficeInput } from '../offices/OfficeInput';\nimport { AssignSystemInput } from '../assignSystems';\nimport { AssignFeesInput } from '../assignFees';\nimport { useAssignmentsContext } from '../games/cards/OfficialsCard/AssignmentsContext';\nimport { AssignOfficeField, AssignRuleField } from '../assignRules/AssignRuleGrid';\n\nconst validate = values => {\n const errors = {};\n\n if (!values.officeId) errors.officeId = 'ra.validation.required';\n if (!values.systemId) errors.systemId = 'ra.validation.required';\n if (!values.status) errors.status = 'ra.validation.required';\n\n if (values.minReferee != null) {\n if (values.minReferee < 0) {\n errors.minReferee = 'resources.assignSettings.validations.min_setting_range';\n } else if (values.minReferee % 1 > 0) {\n errors.minReferee = 'resources.assignSettings.validations.invalid_level';\n }\n }\n\n if (values.minLinesperson != null) {\n if (values.minLinesperson < 0) {\n errors.minLinesperson = 'resources.assignSettings.validations.min_setting_range';\n } else if (values.minLinesperson % 1 > 0) {\n errors.minLinesperson = 'resources.assignSettings.validations.invalid_level';\n }\n }\n\n if (values.minOfficial != null) {\n if (values.minOfficial < 0) {\n errors.minOfficial = 'resources.assignSettings.validations.min_setting_range';\n } else if (values.minOfficial % 1 > 0) {\n errors.minOfficial = 'resources.assignSettings.validations.invalid_level';\n }\n }\n\n if (values.minScorekeeper != null) {\n if (values.minScorekeeper < 0) {\n errors.minScorekeeper = 'resources.assignSettings.validations.min_setting_range';\n } else if (values.minScorekeeper % 1 > 0) {\n errors.minScorekeeper = 'resources.assignSettings.validations.invalid_level';\n }\n }\n\n if (values.minTimekeeper != null) {\n if (values.minTimekeeper < 0) {\n errors.minTimekeeper = 'resources.assignSettings.validations.min_setting_range';\n } else if (values.minTimekeeper % 1 > 0) {\n errors.minTimekeeper = 'resources.assignSettings.validations.invalid_level';\n }\n }\n\n if (values.minRefereeGrade != null && (values.minRefereeGrade % 1 > 0 || values.minRefereeGrade < 0)) {\n errors.minRefereeGrade = 'resources.assignSettings.validations.invalid_grade';\n }\n if (values.minLinespersonGrade != null && (values.minLinespersonGrade % 1 > 0 || values.minLinespersonGrade < 0)) {\n errors.minLinespersonGrade = 'resources.assignSettings.validations.invalid_grade';\n }\n\n if (values.minAge != null && (values.minAge % 1 > 0 || values.minAge < 1)) {\n errors.minAge = 'resources.assignSettings.validations.invalid_age';\n }\n\n return errors;\n}\n\nconst inputProps = {\n resource: 'gameAssignSettings',\n basePath: '/gameAssignSettings',\n variant: 'outlined',\n margin: 'none',\n fullWidth: true,\n}\n\nconst SystemInput = props => {\n let helperText;\n const { values } = useFormState();\n const system = useSelector(state => state.admin.resources.assignSystems.data[values?.systemId])\n const { assignments } = useAssignmentsContext();\n\n if (assignments?.length) {\n const referees = assignments.filter(assignment => assignment.position === 'Referee').length\n const linespersons = assignments.filter(assignment => assignment.position === 'Linesperson').length\n const linespersonsTwo = assignments.filter(assignment => assignment.position === 'LinespersonTwo').length\n const linespersonsThree = assignments.filter(assignment => assignment.position === 'LinespersonThree').length\n const officials = assignments.filter(assignment => assignment.position === 'Official').length\n const scorekeepers = assignments.filter(assignment => assignment.position === 'Scorekeeper').length\n const timekeepers = assignments.filter(assignment => assignment.position === 'Timekeeper').length\n const supervisors = assignments.filter(assignment => assignment.position === 'Supervisor').length\n\n const mismatch = system && (\n referees > system.referees\n || linespersons > system.linespersons\n || linespersonsTwo > system.linespersonsTwo\n || linespersonsThree > system.linespersonsThree\n || officials > system.officials\n || scorekeepers > system.scorekeepers\n || timekeepers > system.timekeepers\n || supervisors > system.supervisors\n )\n if (mismatch) {\n helperText = 'resources.assignSettings.helpers.systemId'\n }\n }\n\n return <AssignSystemInput helperText={helperText} {...props} />\n}\n\nconst FeesInput = props => {\n const offices = useSelector(store => store.admin.resources.offices.data)\n const games = useSelector(state => state.admin.resources.games.data);\n const { values } = useFormState();\n const { officeId, gameId } = values;\n if (!offices || !officeId || !games || !gameId) return null;\n\n const office = offices[officeId]\n const game = gameId && games && games[gameId]\n if (!office || !game) return null;\n\n const seasonId = game.seasonId;\n return <AssignFeesInput {...props} filter={{ seasonId, effectiveOffices: officeId, includeParents: true, _scope: 'Parents' }} />\n}\n\nexport const hasPosition = (systems, position) => value => {\n if (!value) return false;\n const system = systems[value];\n if (!system) return false;\n return system[position] > 0;\n}\n\nconst AssignerDeterminationAlert = ({ systems }) => {\n const assignSettings = useRecordContext();\n const translate = useRichTranslate();\n const { data: assignRule } = useQuery({\n type: GET_ONE,\n resource: 'assignRules',\n payload: {\n id: assignSettings?.ruleId,\n }\n }, {\n enabled: !!assignSettings?.ruleId,\n })\n\n if (!assignRule) return null;\n return <SquareAlert severity=\"info\">\n <RecordContextProvider value={assignRule}>\n {translate('resources.assignRules.alerts.determined_by', { rule: <AssignRuleField />, office: <AssignOfficeField source=\"officeId\" link={false} /> })}\n </RecordContextProvider>\n </SquareAlert>\n}\n\nexport const AssignSettingsForm = ({ onClose, ...props }) => {\n const isEnabled = useFlag();\n const systems = useSelector(state => state.admin.resources.assignSystems.data);\n\n return <>\n <AssignerDeterminationAlert systems={systems} />\n <SimpleForm toolbar={<Toolbar />} validate={validate} {...props} {...inputProps}>\n <Grid container spacing={1} fullWidth>\n <Grid item xs={12} md={4}>\n <SystemInput source=\"systemId\" {...inputProps} />\n </Grid>\n <Grid item xs={12} md={4}>\n <OfficeInput source=\"officeId\" filter={{ type: { neq: 'Historical' }, isAssigner: true, _scope: 'Tenant' }} {...inputProps} />\n </Grid>\n <Grid item xs={12} md={4}>\n <AssignmentStatusEnumInput source=\"status\" {...inputProps} />\n </Grid>\n <FieldDependency fieldSource=\"systemId\" test={hasPosition(systems, 'referees')}>\n <Grid item xs={12} md={4}>\n <NumberInput source=\"minReferee\" min={0} step={1} helperText=\"ra.message.optional\" {...inputProps} />\n </Grid>\n </FieldDependency>\n <FieldDependency fieldSource=\"systemId\" test={hasPosition(systems, 'linespersons')}>\n <Grid item xs={12} md={4}>\n <NumberInput source=\"minLinesperson\" min={0} step={1} helperText=\"ra.message.optional\" {...inputProps} />\n </Grid>\n </FieldDependency>\n {isEnabled(FF_OFFICIALS) && <FieldDependency fieldSource=\"systemId\" test={hasPosition(systems, 'officials')}>\n <Grid item xs={12} md={4}>\n <NumberInput source=\"minOfficial\" min={0} step={1} helperText=\"ra.message.optional\" {...inputProps} />\n </Grid>\n </FieldDependency>}\n {isEnabled(FF_SCOREKEEPERS) && <FieldDependency fieldSource=\"systemId\" test={hasPosition(systems, 'scorekeepers')}>\n <Grid item xs={12} md={4}>\n <NumberInput source=\"minScorekeeper\" min={0} step={1} helperText=\"ra.message.optional\" {...inputProps} />\n </Grid>\n </FieldDependency>}\n {isEnabled(FF_TIMEKEEPERS) && <FieldDependency fieldSource=\"systemId\" test={hasPosition(systems, 'timekeepers')}>\n <Grid item xs={12} md={4}>\n <NumberInput source=\"minTimekeeper\" min={0} step={1} helperText=\"ra.message.optional\" {...inputProps} />\n </Grid>\n </FieldDependency>}\n {isEnabled(FF_GRADES) && <FieldDependency fieldSource=\"systemId\" test={hasPosition(systems, 'referees')}>\n <Grid item xs={12} md={4}>\n <NumberInput source=\"minRefereeGrade\" min={0} step={1} helperText=\"ra.message.optional\" {...inputProps} />\n </Grid>\n </FieldDependency>}\n {isEnabled(FF_GRADES) && <FieldDependency fieldSource=\"systemId\" test={hasPosition(systems, 'linespersons')}>\n <Grid item xs={12} md={4}>\n <NumberInput source=\"minLinespersonGrade\" min={0} step={1} helperText=\"ra.message.optional\" {...inputProps} />\n </Grid>\n </FieldDependency>}\n <Grid item xs={12} md={4}>\n <NumberInput source=\"minAge\" min={1} step={1} helperText=\"ra.message.optional\" {...inputProps} />\n </Grid>\n <Grid item xs={12} md={4}>\n <FeesInput source=\"feesId\" allowEmpty helperText=\"ra.message.optional\" {...inputProps} />\n </Grid>\n </Grid>\n </SimpleForm>\n </>\n}\n","import React, { useState } from 'react';\nimport { useRefresh, GET_MANY, useQueryWithStore, useTranslate, RecordContextProvider, ResourceContextProvider, EditController } from 'react-admin';\nimport { TableRow, TableCell, Collapse, IconButton, Typography, makeStyles, useMediaQuery } from '@material-ui/core'\nimport { KeyboardArrowUp, KeyboardArrowDown, InfoOutlined } from '@material-ui/icons';\nimport { sortBy } from 'lodash';\n\nimport { AssignSettingsForm } from '../../../assignSettings/AssignSettingsForm';\nimport { useAssignmentsContext } from './AssignmentsContext';\n\nconst getRequirement = (referee, linesperson, official, scorekeeper, timekeeper, translate) => {\n const R = translate(`resources.games.values.assignment.position_short.Referee`)\n const L = translate(`resources.games.values.assignment.position_short.Linesperson`)\n const O = translate(`resources.games.values.assignment.position_short.Official`)\n const S = translate(`resources.games.values.assignment.position_short.Scorekeeper`)\n const T = translate(`resources.games.values.assignment.position_short.Timekeeper`)\n\n if (referee == null && linesperson == null && official == null && scorekeeper == null && timekeeper == null) return\n if (referee === linesperson === official) return referee\n if (referee === linesperson && official == null) return referee\n\n const requirement = [];\n if (referee != null) {\n requirement.push(`${referee}${R}`)\n }\n if (linesperson != null) {\n requirement.push(`${linesperson}${L}`)\n }\n if (official != null) {\n requirement.push(`${official}${O}`)\n }\n if (scorekeeper != null) {\n requirement.push(`${scorekeeper}${S}`)\n }\n if (timekeeper != null) {\n requirement.push(`${timekeeper}${T}`)\n }\n\n return requirement.join(' / ')\n}\n\nconst getSettingsSummary = (settings, offices, translate) => {\n const info = [];\n\n const level = getRequirement(settings.minReferee, settings.minLinesperson, settings.minOfficial, settings.minScorekeeper, settings.minTimekeeper, translate);\n if (level) {\n info.push(`${translate('resources.assignSettings.labels.required_level')}: ${level}`)\n }\n\n const grade = getRequirement(settings.minRefereeGrade, settings.minLinespersonGrade, null, null, null, translate);\n if (grade) {\n info.push(`${translate('resources.assignSettings.labels.required_grade')}: ${grade}`)\n }\n\n const age = settings.minAge;\n if (age) {\n info.push(`${translate('resources.assignSettings.labels.required_age')}: ${age}`)\n }\n\n if (settings.status !== 'Active') {\n info.push(settings.status)\n }\n\n if (offices?.length) {\n const names = sortBy(offices, office => office.id !== settings.officeId).map(office => office.name).filter(Boolean)\n if (names.length) {\n info.push(translate('resources.assignSettings.messages.assigned_by', { name: names.join(' / ') }))\n }\n }\n\n return info.join(' • ')\n}\n\nconst useSettingsStyles = makeStyles(theme => ({\n toggleCell: {\n width: theme.spacing(22),\n whiteSpace: 'nowrap',\n borderBottom: 0,\n [theme.breakpoints.down('sm')]: {\n width: 30,\n }\n },\n cell: {\n borderBottom: 0,\n },\n icon: {\n display: 'inline',\n marginLeft: 4,\n marginRight: 10,\n verticalAlign: 'middle',\n }\n}))\n\nconst Summary = ({ settings, assignments = [], isOpen, canManage, toggle }) => {\n const translate = useTranslate();\n const classes = useSettingsStyles();\n const small = useMediaQuery(theme => theme.breakpoints.down('sm'))\n\n const { data: offices } = useQueryWithStore({\n type: GET_MANY,\n resource: 'offices',\n payload: { ids: [settings.officeId, ...assignments.map(({ officeId }) => officeId)], _scope: 'Tenant' }\n })\n\n if (!canManage) {\n return <TableRow onClick={toggle}>\n <TableCell colSpan={2} className={classes.cell}>\n <div className={classes.icon}>\n <InfoOutlined fontSize=\"small\" />\n </div>\n <Typography variant=\"inherit\" color=\"textSecondary\">{getSettingsSummary(settings, offices, translate)}</Typography>\n </TableCell>\n </TableRow>\n }\n\n return <TableRow onClick={toggle}>\n <TableCell className={classes.toggleCell}>\n <IconButton aria-label=\"expand row\" size=\"small\" onClick={toggle}>\n {isOpen ? <KeyboardArrowUp /> : <KeyboardArrowDown />}\n </IconButton>\n {!small ? ` ${translate('resources.assignSettings.name', 2)}` : ''}\n </TableCell>\n <TableCell className={classes.cell}>\n {small && <div>{translate('resources.assignSettings.name', 2)}</div>}\n {!isOpen && <Typography variant=\"inherit\">{getSettingsSummary(settings, offices, translate)}</Typography>}\n </TableCell>\n </TableRow>\n}\n\nexport default () => {\n const { game, settings, assignments, canManage } = useAssignmentsContext()\n const [ isOpen, setOpen ] = useState(false);\n const refresh = useRefresh()\n\n const enabled = settings && settings.enabled\n if (!enabled) return null;\n\n const toggle = () => {\n if (!canManage) return;\n setOpen(!isOpen);\n }\n const onClose = () => {\n setOpen(false);\n }\n\n const editProps = {\n basePath: '/gameAssignSettings',\n hasEdit: true,\n id: game.id,\n resource: 'gameAssignSettings',\n undoable: false,\n onSuccess() {\n onClose();\n refresh();\n },\n }\n return <>\n <Summary settings={settings} assignments={assignments} isOpen={isOpen} canManage={canManage} toggle={toggle} />\n <TableRow>\n <TableCell colSpan={2} style={{ padding: 0 }}>\n <Collapse in={isOpen}>\n {isOpen && <RecordContextProvider value={settings}>\n <ResourceContextProvider value=\"gameAssignSettings\">\n <EditController {...editProps}>{controller =>\n <AssignSettingsForm onClose={onClose} {...controller} />\n }</EditController>\n </ResourceContextProvider>\n </RecordContextProvider>}\n </Collapse>\n </TableCell>\n </TableRow>\n </>\n}\n","import React, { useState } from 'react';\nimport { RecordContextProvider, ReferenceManyField, ResourceContextProvider, useRefresh, useTranslate } from 'react-admin';\nimport { TableRow, TableCell, Collapse, IconButton, CardContent, CardActions, makeStyles, useMediaQuery } from '@material-ui/core'\nimport { KeyboardArrowUp, KeyboardArrowDown } from '@material-ui/icons';\n\nimport { isAuthorized } from '../../../../common/Authorize';\n\nimport { MessageGrid } from '../../../messages/MessageGrid';\nimport { MessageForm } from '../../../messages/MessageForm';\nimport { useParticipant } from '../../../../http';\nimport { useAssignmentsContext } from './AssignmentsContext';\n\nconst useStyles = makeStyles(theme => ({\n actions: {\n padding: 0,\n },\n form: {\n width: '100%',\n }\n}))\n\nconst GameMessages = ({ game, settings, type = 'Officiating', showCreate = false, ...props }) => {\n const classes = useStyles();\n const translate = useTranslate();\n\n if (!game) return null;\n\n const recipients = type === 'League'\n ? translate('resources.games.labels.assignment.team_officials').toLowerCase()\n : translate('resources.games.labels.assignment.assigners').toLowerCase();\n const helperText = translate('resources.games.helpers.assignment.notification_will_be_sent', { recipients })\n\n return <>\n <CardContent>\n <ReferenceManyField\n reference=\"gameMessages\"\n target=\"games\"\n label={translate('resources.gameMessages.name', 2)}\n filter={{ type }}\n sort={{ field: 'createdAt', order: 'ASC' }}\n >\n <MessageGrid type={type} />\n </ReferenceManyField>\n </CardContent>\n {showCreate && <CardActions className={classes.actions}>\n <ResourceContextProvider value=\"gameMessages\">\n <RecordContextProvider value={null}>\n <MessageForm className={classes.form} initialValues={{ gameId: game.id, type }} helperText={helperText} />\n </RecordContextProvider>\n </ResourceContextProvider>\n </CardActions>}\n </>\n}\n\nconst useMessagesStyles = makeStyles(theme => ({\n toggleCell: {\n width: theme.spacing(22),\n whiteSpace: 'nowrap',\n [theme.breakpoints.down('sm')]: {\n width: 30,\n },\n borderBottom: 0,\n },\n cell: {\n borderBottom: 0,\n },\n}))\n\nexport default () => {\n const translate = useTranslate();\n const { game, assignments, settings } = useAssignmentsContext()\n const participantId = useParticipant()\n const [ isOpen, setOpen ] = useState(false);\n const small = useMediaQuery(theme => theme.breakpoints.down('sm'))\n const refresh = useRefresh()\n const classes = useMessagesStyles();\n\n const enabled = settings && settings.enabled && settings.status === 'Active'\n\n const isAssigned = assignments.some(assignment => assignment.participantId === participantId && ['assigned', 'confirmed'].includes(assignment.status))\n const canViewMessages = isAuthorized(game, 'gameMessagesOfficiating', 'list');\n const canCreateMessages = isAuthorized(game, 'gameMessagesOfficiating', 'create') || isAssigned;\n if (!canViewMessages || !enabled) return null;\n\n const onClose = () => {\n setOpen(false);\n }\n\n const editProps = {\n basePath: '/gameMessages',\n hasEdit: true,\n id: game.id,\n resource: 'gameMessages',\n undoable: false,\n onSuccess() {\n onClose();\n refresh();\n },\n }\n return <>\n <TableRow onClick={() => setOpen(!isOpen)}>\n <TableCell className={classes.toggleCell}>\n <IconButton aria-label=\"expand row\" size=\"small\" onClick={() => setOpen(!isOpen)}>\n {isOpen ? <KeyboardArrowUp /> : <KeyboardArrowDown />}\n </IconButton>\n {!small ? ` ${translate('resources.gameMessages.name', 2)}` : ''}\n </TableCell>\n <TableCell className={classes.cell}>\n {small && <div>{translate('resources.gameMessages.name', 2)}</div>}\n {!isOpen && translate('resources.games.messages.assignment.contact_game_assigners_officials')}\n </TableCell>\n </TableRow>\n <TableRow>\n <TableCell colSpan={2} style={{ padding: 0 }}>\n <Collapse in={isOpen}>\n {isOpen && <GameMessages game={game} settings={settings} showCreate={canCreateMessages} {...editProps} onClose={onClose} />}\n </Collapse>\n </TableCell>\n </TableRow>\n </>\n}\n","import React, { useState } from 'react';\nimport { useGetMany, useTranslate } from 'react-admin';\nimport { Box, Chip, Tooltip, styled } from '@material-ui/core';\nimport { Event, PlaceOutlined, EmojiEventsOutlined } from '@material-ui/icons'\nimport moment from 'moment-timezone';\n\nimport { getSurfaceCity, getSurfaceName } from '../../../surfaces/util';\nimport { TeamIcon } from '../../../icons';\nimport { useAssignmentsContext } from './AssignmentsContext';\n\nconst InfoChip = styled(Chip)({\n margin: 2,\n})\n\nconst DateChip = ({ game }) => {\n const [ alternateFormat, setAlternateFormat ] = useState(false);\n const timeFormat = alternateFormat ? 'h:mmA' : 'HH:mm';\n const start = moment.tz(game.startTime, game.timezone).format(`dddd, LL, ${timeFormat}`)\n const end = moment.tz(game.endTime, game.timezone).format(`${timeFormat} z`)\n const date = `${start} - ${end}`\n\n const toggle = e => {\n e.stopPropagation();\n setAlternateFormat(show => !show);\n }\n return <InfoChip variant=\"outlined\" label={date} icon={<Event fontSize=\"small\" />} onClick={toggle} />\n}\n\nconst SurfaceChip = ({ game }) => {\n const [ showAddress, setShowAddress ] = useState(false);\n const { data: surfaceData } = useGetMany('surfaces', [ game.arenaId ])\n const surface = surfaceData && surfaceData[0]\n if (!surface) return <InfoChip variant=\"outlined\" label=\"...\" icon={<PlaceOutlined fontSize=\"small\" />} />\n\n const toggle = e => {\n e.stopPropagation();\n setShowAddress(show => !show);\n }\n const label = !showAddress ? getSurfaceName(surface) : getSurfaceCity(surface);\n return <InfoChip variant=\"outlined\" label={label} icon={<PlaceOutlined fontSize=\"small\" />} onClick={toggle} />\n}\n\nconst ScheduleChip = ({ game }) => {\n const [ showName, setShowName ] = useState(true);\n const { data: scheduleData } = useGetMany('schedules', [ game?.scheduleId ], { enabled: game?.scheduleId != null })\n const schedule = scheduleData?.[0]\n const categoryId = schedule?.categoryId;\n const { data: categories } = useGetMany('categories', [ categoryId ], { enabled: categoryId != null })\n const category = categories?.[0]\n if (!schedule) return <InfoChip variant=\"outlined\" label=\"...\" icon={<EmojiEventsOutlined fontSize=\"small\" />} />;\n\n const toggle = e => {\n e.stopPropagation();\n setShowName(show => !show);\n }\n const label = showName ? schedule.name : category?.name ? `${category.name} ${schedule.type}` : schedule.type;\n return <InfoChip variant=\"outlined\" label={label} icon={<EmojiEventsOutlined fontSize=\"small\" />} onClick={toggle} />\n}\n\nconst TeamsChip = ({ game }) => {\n const translate = useTranslate();\n const teamIds = [game.homeTeamId, game.awayTeamId].filter(Boolean);\n const hasTeam = teamIds.length;\n const { data: teams, loading, error } = useGetMany('teams', teamIds, { enabled: hasTeam })\n\n if (error) return null;\n if (loading) return <InfoChip variant=\"outlined\" label=\"...\" icon={<TeamIcon fontSize=\"small\" />} />;\n if (!game || !hasTeam || !teams || !teams.filter(Boolean).length) return null;\n\n const tbd = translate('resources.games.labels.tbd');\n const homeTeam = teams.find(team => team.id === game.homeTeamId);\n const awayTeam = teams.find(team => team.id === game.awayTeamId);\n return <InfoChip variant=\"outlined\" label={`${awayTeam?.name || tbd} @ ${homeTeam?.name || tbd}`} icon={<TeamIcon fontSize=\"small\" />} />\n}\n\nconst ExpandChip = ({ onClick }) => {\n const translate = useTranslate();\n return <Tooltip title={translate('ra.action.tap_for_more')}>\n <InfoChip variant=\"outlined\" label=\"...\" onClick={onClick} />\n </Tooltip>\n}\n\nexport default () => {\n const { game, settings } = useAssignmentsContext()\n const [ expanded, setExpand ] = useState(false);\n const expand = () => setExpand(true);\n if (!game || !settings?.enabled) return null;\n\n return <Box padding={1} onClick={expand}>\n <DateChip game={game} />\n <SurfaceChip game={game} />\n {!expanded && <ExpandChip onClick={expand} />}\n {expanded && <ScheduleChip game={game} />}\n {expanded && <TeamsChip game={game} />}\n </Box>\n}\n","import React from 'react';\nimport { useHistory } from 'react-router-dom';\nimport { useNotify, useRefresh, useTranslate } from 'react-admin';\nimport { Button, FormControlLabel, Switch, Table, TableBody, makeStyles } from \"@material-ui/core\"\nimport { NotificationsOffOutlined, Restore } from '@material-ui/icons';\nimport { AlertTitle } from '@material-ui/lab';\nimport moment from 'moment-timezone';\n\nimport { apiClient, useHttpClient } from '../../../../http';\nimport { isAuthorized } from '../../../../common/Authorize';\nimport { SquareAlert as Alert } from '../../../../common/SquareAlert';\nimport useSyncedPreferences from '../../../../common/useSyncedPreferences';\n\nimport { useOfficeWithStore } from '../../../offices/useOffice';\nimport { CompletedAlert } from '../../../scoresheet/actions/alerts/CompletedAlert';\nimport { AssignmentsProvider, useAssignmentsContext } from './AssignmentsContext';\nimport { Assignment } from './Assignment';\nimport AssignSettings from './AssignSettings';\nimport GameMessages from './GameMessages';\nimport GameChips from './GameChips';\n\n\nconst useStyles = makeStyles(theme => ({\n table: {\n tableLayout: 'fixed',\n }\n}))\n\nexport const EffectiveOfficialsBoolean = (props) => {\n const translate = useTranslate();\n const [effectiveOfficials, setEffectiveOfficials] = useSyncedPreferences('effectiveAssigningOfficials', false);\n\n return <FormControlLabel\n label={translate('resources.officials.fields.includeSubOffices')}\n control={<Switch checked={effectiveOfficials} onChange={e => setEffectiveOfficials(e.target.checked)} color=\"primary\" />}\n {...props}\n />\n}\n\nconst ResetAssignerButton = ({ game }) => {\n const refresh = useRefresh();\n const notify = useNotify();\n const translate = useTranslate();\n\n const canResetAssignRules = isAuthorized(game, 'games', 'resetAssignRules');\n\n const onClick = async () => {\n await apiClient(`/games/${game.id}/applyAssignRules`, {\n method: 'POST',\n data: {\n resetAssigner: true,\n }\n }).then(() => {\n refresh();\n notify('ra.message.updated');\n }).catch(err => {\n notify('ra.page.error_try_again', 'error')\n })\n }\n\n return <Button color=\"primary\" size=\"small\" startIcon={<Restore />} onClick={onClick} disabled={!canResetAssignRules}>\n {translate('resources.games.fields.resetAssigner')}\n </Button>\n}\n\nconst ManageButton = ({ office, focus, scrollTo, ...props }) => {\n const history = useHistory();\n const translate = useTranslate();\n\n const onClick = () => {\n const getPath = () => {\n if (office?.type === 'League') return `/leagues/${office?.id}/show/settings`\n if (office?.type === 'Tournament') return `/tournaments/${office?.id}/show/settings`\n if (office?.type === 'Cup') return `/cups/${office?.id}/show/settings`\n return `/offices/${office?.id}/show/assigning`\n }\n\n history.push({\n pathname: getPath(),\n state: { focus, scrollTo }\n });\n }\n\n return <Button color=\"primary\" size=\"small\" onClick={onClick} {...props}>\n {translate('ra.action.manage')}\n </Button>\n}\n\nconst NotConfiguredAlert = ({ game }) => {\n const translate = useTranslate();\n const { data: assignSettingReason, loading } = useHttpClient(`/games/${game?.id}/generateAssignSettings?returnReason=true`, null, !!game?.id);\n const { data: office } = useOfficeWithStore(assignSettingReason?.officeId)\n\n const canViewAssignSystems = isAuthorized(office, 'assignSystems', 'list');\n const canViewAssignRules = isAuthorized(office, 'assignRules', 'list')\n\n const gameAlertKey = assignSettingReason ? `assigning_reason.${assignSettingReason.code}` : 'status.assigning_not_configured'\n\n const getAction = () => {\n if (!assignSettingReason) {\n return <ResetAssignerButton game={game} />\n }\n if (assignSettingReason?.code === 'no_system') {\n return <ManageButton office={office} disabled={!canViewAssignSystems || !office} focus=\"assignSystems\" scrollTo=\"assignSystems\" />\n }\n if (assignSettingReason?.code === 'no_office') {\n return <ManageButton office={office} disabled={!canViewAssignRules || !office} focus=\"assignRules\" scrollTo=\"assignRules\" />\n }\n return null;\n }\n\n if (loading) return null;\n return <Alert action={getAction()} severity=\"info\">{translate(`resources.games.alerts.${gameAlertKey}`, { name: assignSettingReason?.officeName })}</Alert>\n}\n\n\nconst GameStatus = () => {\n const { game, settings, assignments } = useAssignmentsContext()\n const translate = useTranslate()\n\n if (game?.isApproved) return <CompletedAlert square />\n\n if (!settings) {\n return <NotConfiguredAlert game={game} />\n }\n\n if (settings.mode === 'Integration') {\n return <Alert severity=\"info\">{translate('resources.games.alerts.status.integration')}</Alert>\n }\n\n switch (game.status) {\n case 'Conflict':\n return <Alert severity=\"error\">{translate('resources.games.alerts.status.conflict')}</Alert>\n case 'Cancelled':\n return <Alert severity=\"error\">{translate('resources.games.alerts.status.cancelled')}</Alert>\n case 'Postponed':\n return <Alert severity=\"error\">{translate('resources.games.alerts.status.postponed')}</Alert>\n default: break;\n }\n\n if (moment().isAfter(game.endTime, 'minute')) {\n return <Alert severity=\"warning\">{translate('resources.games.alerts.status.incomplete')}</Alert>\n }\n\n switch (game.status) {\n case 'Rescheduled':\n return <Alert severity=\"info\">{translate('resources.games.alerts.status.rescheduled')}</Alert>\n case 'Rink Changed':\n return <Alert severity=\"info\">{translate('resources.games.alerts.status.rink_changed')}</Alert>\n default: break;\n }\n\n if (!assignments?.length) {\n const canManage = isAuthorized(game, 'games', 'assignSettings')\n if (!canManage) return <Alert severity=\"info\">{translate('resources.games.alerts.assignment.no_officials_required.title')}</Alert>\n return <Alert severity=\"info\">\n <AlertTitle>{translate('resources.games.alerts.assignment.no_officials_required.title')}</AlertTitle>\n {translate('resources.games.alerts.assignment.no_officials_required.assign_official')}\n </Alert>\n }\n\n return null;\n}\n\nconst AssignmentVisibility = () => {\n const translate = useTranslate();\n const { settings } = useAssignmentsContext();\n if (!settings || settings.status === 'Active') return null;\n\n return <Alert severity=\"warning\" icon={<NotificationsOffOutlined />}>\n {translate('resources.games.alerts.assignment.status_of_assignments', { status: settings.status })}\n </Alert>\n}\n\nconst AssignmentsTable = ({ hideMessages = false }) => {\n const { assignments } = useAssignmentsContext()\n const classes = useStyles();\n\n return <>\n <GameChips />\n <GameStatus />\n <AssignmentVisibility />\n <Table className={classes.table}>\n <TableBody>\n {assignments.map((assignment) => <Assignment key={assignment.id} assignment={assignment} />)}\n </TableBody>\n </Table>\n <Table className={classes.table}>\n <TableBody>\n {!hideMessages && <GameMessages />}\n <AssignSettings />\n </TableBody>\n </Table>\n </>\n}\n\nexport default ({ gameId, gameOfficeId, hideMessages }) => {\n return <AssignmentsProvider gameId={gameId} gameOfficeId={gameOfficeId}>\n <AssignmentsTable hideMessages={hideMessages} />\n </AssignmentsProvider>\n}\n","import React from 'react';\nimport { ReferenceField, TextField } from 'react-admin';\n\nimport FunctionField from '../../common/fields/FunctionField'\n\nexport const GroupField = ({ showType = false, ...props }) =>\n <ReferenceField basePath=\"/groups\" resource=\"groups\" reference=\"groups\" link={false} allowEmpty {...props} >\n { showType\n ? <FunctionField render={({ name, type }) => `${name} (${type})`} />\n : <TextField source=\"name\" />\n }\n </ReferenceField>\n\nGroupField.defaultProps = {\n addLabel: true,\n}\n","import React from 'react';\nimport { ReferenceInput, ReferenceArrayInput, SelectArrayInput, ChipField, useTranslate } from 'react-admin';\nimport { makeStyles } from '@material-ui/styles';\nimport { useSelector } from 'react-redux';\nimport { useFormState } from 'react-final-form';\nimport { intersection } from 'lodash'\n\nimport { dedupeBy } from '@hisports/parsers';\n\nimport ChipSelectInput from '../../common/inputs/ChipSelectInput';\nimport { useSeason, useFormSeason } from '../../common/inputs/SeasonSelector';\nimport { useDefaultSeason } from '../../http';\n\nimport { useScheduleGroupingType } from '../scheduleSettings';\n\nconst validate = (value, translate) => {\n if (typeof value === 'undefined') return translate('ra.validation.required')\n}\n\nconst toArray = groups => Object.keys(groups).map(id => groups[id]);\nexport const hasGroups = (data, officeId, scheduleType) =>\n toArray(data).some(group =>\n group && group.officeId === officeId && group.type === scheduleType\n )\n\nconst hasValues = arr => arr && arr.length;\nconst intersects = (left, right) => intersection(left, right).length > 0;\nconst filterAttributes = categoryIds => group => {\n if (!group) return false;\n if (hasValues(categoryIds) && hasValues(group.categoryIds) && !intersects(categoryIds, group.categoryIds)) return false\n return true;\n}\n\nconst filterNone = () => true\nconst FilteredChoiceInput = ({ choiceFilter = filterNone, choices, showNone, allowEmpty = showNone, children, ...props }) => {\n const filteredChoices = dedupeBy('id', choices).filter(choiceFilter);\n if (!filteredChoices.length) return null;\n return React.cloneElement(children, { ...props, choices: filteredChoices, allowEmpty })\n}\n\nconst useStyles = makeStyles(theme => ({\n selectArrayInput: {\n // add half of the label's line-height top, + bottom for v-alignment\n paddingBlock: 'calc(1rem * .75 / 2)',\n\n '& .MuiFormHelperText-root:empty': {\n margin: 0,\n }\n },\n}))\n\nexport const GroupInput = ({ select = false, multiple, officeId, scheduleType, scheduleId, categoryIds, showNone, filter = {}, helperText, defaultValue, margin = 'dense', ...props }) => {\n const translate = useTranslate();\n const appSeason = useSeason();\n const defaultSeason = useDefaultSeason();\n const seasonId = useFormSeason()\n const groupsData = useSelector(state => state.admin.resources.groups.data);\n const { isGroups } = useScheduleGroupingType(scheduleId);\n const classes = useStyles();\n\n if (scheduleId && !isGroups) return null;\n\n const choiceFilter = filterAttributes(categoryIds);\n const groups = toArray(groupsData).filter(choiceFilter);\n const shouldValidate = showNone && hasGroups(groups, officeId, scheduleType);\n\n const optionText = group => {\n if (!group) return;\n const attributes = []\n if (group.seasonId && (group.seasonId !== defaultSeason || seasonId !== appSeason)) attributes.push(group.seasonId);\n if (!scheduleType) attributes.push(group.type)\n if (!attributes.length) return group.name\n return `${group.name} (${attributes.join(' ')})`\n }\n\n let input = null;\n if (select && multiple) {\n input = <SelectArrayInput optionText={optionText} allowEmpty={showNone} helperText={helperText} {...props}>\n <ChipField source={optionText} />\n </SelectArrayInput>\n } else {\n input = <ChipSelectInput multiple={multiple} optionText={optionText} showNone={showNone} helperText={helperText} emptyText=\"resources.groups.messages.all_groups\" {...props} />\n }\n\n const Reference = multiple ? ReferenceArrayInput : ReferenceInput;\n return <div className={select && multiple ? classes.selectArrayInput : null}>\n <Reference\n {...props}\n reference=\"groups\"\n filter={{ seasonId, officeId, type: scheduleType, effectiveOffices: false, ...filter }}\n filterToQuery={() => null}\n sort={{\n field: 'name',\n order: 'ASC'\n }}\n perPage={9999}\n defaultValue={defaultValue}\n validate={shouldValidate ? (value) => validate(value, translate) : null}\n margin={margin}\n >\n <FilteredChoiceInput choiceFilter={choiceFilter} showNone={showNone}>\n {input}\n </FilteredChoiceInput>\n </Reference>\n </div>\n}\n\nexport const OfficeGroupInput = ({ filterByCategories = true, ...props }) => {\n const { values } = useFormState();\n\n if (!values) return null;\n let officeId = props.officeId || values.officeId;\n if (!officeId && values.targetType === 'Office') {\n officeId = values.targetId\n }\n if (!officeId) return null;\n\n return <GroupInput {...props}\n officeId={officeId}\n categoryIds={filterByCategories ? values.categoryIds : []}\n />\n}\n\nexport const ScheduleGroupInput = props => {\n const { values } = useFormState()\n const schedules = useSelector(state => state.admin.resources.schedules);\n\n if (!values) return null;\n let scheduleId = props.scheduleId || values.scheduleId;\n if (!scheduleId && values.targetType === 'Schedule') {\n scheduleId = values.targetId\n }\n if (!scheduleId) return null;\n\n const schedule = schedules.data[scheduleId]\n if (!schedule) return null;\n const { officeId, type, categoryId } = schedule;\n\n return <GroupInput {...props}\n scheduleId={scheduleId}\n officeId={officeId}\n scheduleType={type}\n categoryIds={[categoryId]}\n />\n}\n","import React from 'react';\nimport { ReferenceArrayField, useRecordContext, useTranslate } from 'react-admin';\n\nimport FunctionField from '../../common/fields/FunctionField'\nimport { useSeason } from '../../common/inputs/SeasonSelector';\nimport { SingleFieldList } from '../../common/ra/SingleFieldList';\nimport { useDefaultSeason } from '../../http';\n\nexport const GroupsField = ({ showType = false, emptyText, ...props }) => {\n const translate = useTranslate();\n const record = useRecordContext(props);\n const appSeason = useSeason();\n const defaultSeason = useDefaultSeason();\n\n const values = record?.[props.source]\n if (!values?.length && emptyText) return translate(emptyText)\n\n const getGroupName = (group, showType) => {\n const { name, type, seasonId } = group;\n const meta = [];\n if (seasonId != appSeason || seasonId !== defaultSeason) meta.push(seasonId);\n if (showType) meta.push(translate(`resources.schedules.values.type.${type}`));\n if (meta.length) return `${name} (${meta.join(' ')})`\n return name;\n }\n\n return <ReferenceArrayField basePath=\"/groups\" resource=\"groups\" reference=\"groups\" allowEmpty {...props} >\n <SingleFieldList linkType={false}>\n <FunctionField render={group => getGroupName(group, showType)} />\n </SingleFieldList>\n </ReferenceArrayField>\n}\n\nGroupsField.defaultProps = {\n addLabel: true,\n}\n","import React from 'react';\nimport { ReferenceField, TextField } from 'react-admin';\n\nexport const ListField = props =>\n <ReferenceField basePath=\"/lists\" resource=\"lists\" reference=\"lists\" link={false} allowEmpty {...props} >\n <TextField source=\"name\" />\n </ReferenceField>\n\nListField.defaultProps = {\n addLabel: true,\n}\n","import React from 'react';\nimport { ReferenceInput } from 'react-admin';\nimport { Group as ListIcon } from '@material-ui/icons'\n\nimport AutocompleteInput from '../../common/inputs/AutocompleteInput';\nimport AutocompleteSuggestion from '../../common/inputs/AutocompleteSuggestion'\n\nconst filterList = name => ({ name })\n\nconst ListSuggestion = ({ suggestion: list, query, isHighlighted, ...props }) =>\n <AutocompleteSuggestion\n icon={<ListIcon />}\n primary={list.name}\n />\n\nexport const ListInput = ({ helperText, ...props }) =>\n <ReferenceInput\n reference=\"lists\"\n filterToQuery={filterList}\n sort={{\n field: ['name'],\n order: ['ASC'],\n }}\n perPage={25}\n {...props}\n >\n <AutocompleteInput\n optionText=\"name\"\n suggestionComponent={ListSuggestion}\n helperText={helperText}\n />\n </ReferenceInput>\n","import React from 'react';\nimport { SimpleForm, TextInput, useNotify, useMutation, useRefresh, CREATE, useTranslate } from 'react-admin';\nimport { Button, makeStyles } from '@material-ui/core';\nimport { Send } from '@material-ui/icons';\n\nimport Toolbar from '../../common/ra/Toolbar';\nimport { useParticipant } from '../../http';\n\nconst useStyles = makeStyles(theme => ({\n toolbar: {\n marginTop: theme.spacing(1),\n },\n spacer: {\n height: 0,\n }\n}))\n\nconst validate = values => {\n const errors = {};\n if (!values.body) errors.body = 'ra.validation.required';\n return errors;\n}\n\nconst inputProps = {\n resource: 'games',\n basePath: '/games',\n variant: 'outlined',\n margin: 'none',\n fullWidth: true,\n}\n\nconst SaveButton = ({ saving, invalid, redirect, handleSubmitWithRedirect }) => {\n const notify = useNotify()\n const translate = useTranslate()\n\n const onClick = event => {\n if (event) event.preventDefault();\n if (saving) return;\n if (invalid) {\n notify('ra.message.invalid_form', 'warning');\n }\n handleSubmitWithRedirect(redirect)\n }\n\n return <Button color=\"primary\" startIcon={<Send />} onClick={onClick}>{translate('ra.action.send')}</Button>\n}\n\nexport const MessageForm = ({ helperText, ...props }) => {\n const participantId = useParticipant();\n const classes = useStyles();\n const [ send ] = useMutation()\n const refresh = useRefresh()\n const notify = useNotify();\n const translate = useTranslate();\n\n if (!participantId) return null;\n\n const submit = data => {\n send({\n type: CREATE,\n resource: 'gameMessages',\n payload: { data }\n }, {\n onSuccess() {\n refresh()\n },\n onFailure() {\n notify('resources.gameMessages.notifications.send_messages_error', 'error');\n }\n })\n }\n\n const toolbar = <Toolbar classes={classes} width=\"lg\">\n <SaveButton />\n </Toolbar>\n\n return <SimpleForm toolbar={toolbar} validate={validate} save={submit} {...props} keepDirtyOnReinitialize={false}>\n <TextInput source=\"body\" multiline rows=\"2\" {...inputProps} label={translate('resources.gameMessages.name', 1)} helperText={helperText} />\n </SimpleForm>\n}\n","import React from 'react';\nimport { useMutation, useRefresh, useNotify, DELETE, useTranslate, RecordContextProvider, useRecordContext, useLocale } from 'react-admin';\nimport { Divider, Typography, Tooltip, IconButton, makeStyles } from '@material-ui/core';\nimport { Delete } from '@material-ui/icons';\nimport moment from 'moment-timezone';\n\nimport { isAuthorized } from '../../common/Authorize';\nimport { getDateFormat } from '../../common/fields/DateField';\n\nimport { ParticipantField } from '../participants/ParticipantField';\n\nconst DeleteButton = ({ className }) => {\n const message = useRecordContext();\n const [ mutate, { loading } ] = useMutation();\n const notify = useNotify();\n const refresh = useRefresh();\n const translate = useTranslate();\n\n const canDelete = isAuthorized(message, `gameMessages${message?.type}`, 'remove');\n if (!canDelete) return null;\n\n const onClick = event => {\n if (event) event.preventDefault();\n if (loading) return;\n mutate({\n type: DELETE,\n resource: 'gameMessages',\n payload: {\n id: message.id,\n data: message\n }\n }, {\n undoable: true,\n onSuccess() {\n notify('resources.gameMessages.notifications.deleted', 'info', {}, true);\n refresh()\n },\n onFailure() {\n notify('resources.gameMessages.notifications.delete_error', 'error')\n }\n })\n }\n\n return <Tooltip title={translate('resources.gameMessages.labels.delete')}>\n <IconButton size=\"small\" className={className} disabled={loading} onClick={onClick}>\n <Delete />\n </IconButton>\n </Tooltip>\n}\n\nconst useStyles = makeStyles(theme => ({\n empty: {\n color: theme.palette.grey[500],\n fontStyle: 'italic',\n },\n participant: {\n fontWeight: 500,\n },\n message: {\n margin: theme.spacing(.5),\n },\n body: {\n margin: theme.spacing(0, 1, 1),\n whiteSpace: 'pre-line',\n },\n buttons: {\n float: 'right',\n }\n}))\n\nexport const MessageGrid = ({ ids, data, type }) => {\n const locale = useLocale();\n const classes = useStyles();\n const translate = useTranslate();\n if (!data || !ids || !ids.length) return <Typography variant=\"body2\" className={classes.empty}>{translate('resources.gameMessages.messages.no_messages')}</Typography>;\n\n const dateFormat = getDateFormat(locale)\n const messages = ids.map(id => data[id]).filter(Boolean);\n return messages.map(message => {\n const timestamp = moment(message.createdAt)\n\n return <RecordContextProvider value={message}>\n <div className={classes.message}>\n <DeleteButton className={classes.buttons} />\n\n <ParticipantField source=\"participantId\" link={false} className={classes.participant} />\n\n <Typography variant=\"overline\"> - {\n moment().isSame(timestamp, 'day') ? `${translate('ra.date.lexical.today')}, ${timestamp.format('HH:mm z')}` :\n moment().isSame(timestamp, 'year') ? timestamp.format(`${dateFormat}, HH:mm z`) :\n timestamp.format('ll')\n }</Typography>\n\n <Typography variant=\"body2\" paragraph className={classes.body}>{message.body}</Typography>\n\n <Divider />\n </div>\n </RecordContextProvider>\n })\n}\n","import { useQueryWithStore, GET_ONE } from 'react-admin';\nimport { useSelector } from 'react-redux';\n\nexport const useOfficeSettings = officeId =>\n useQueryWithStore({\n type: GET_ONE,\n resource: 'officeSettings',\n payload: { id: officeId },\n })\n\n// force check in cache (use with caution, data may have changed since last load)\nexport const useOfficeSettingsWithStore = (officeId, enabled = true) => {\n const officeSettingsInStore = useSelector(state => state?.admin?.resources?.officeSettings?.data?.[officeId])\n\n const { data, loading, error } = useQueryWithStore({\n type: GET_ONE,\n resource: 'officeSettings',\n payload: { id: officeId },\n }, {\n enabled: !officeSettingsInStore && !!officeId && !!enabled\n })\n return { data: officeSettingsInStore || data, loading, error };\n}\n","import React from 'react';\nimport { ReferenceField, FunctionField, useTranslate, useRecordContext } from 'react-admin';\nimport { Typography } from '@material-ui/core';\n\nimport { isAuthorized } from '../../common/Authorize';\n\nexport const OfficeField = ({ variant = 'body2', includeType = false, ...props }) => {\n const translate = useTranslate();\n const record = useRecordContext(props);\n const showLink = isAuthorized(record, 'offices', 'show') ? 'show' : false;\n return <ReferenceField basePath=\"/offices\" resource=\"offices\" reference=\"offices\" link={showLink} {...props}>\n <FunctionField source=\"name\" variant={variant} render={office => {\n const type = translate(`resources.offices.values.type.${office.type}`)\n const inline = [\n includeType === 'inline' && type,\n ].filter(Boolean).join(' • ')\n const full = [\n includeType === 'full' && type,\n ].filter(Boolean).join(' • ')\n return <>\n <Typography variant={variant} display=\"inline\">{office.name}</Typography>\n {inline && <Typography variant={variant} display=\"inline\" color=\"textSecondary\"> {inline}</Typography>}\n {full && <div><Typography variant={variant} display=\"inline\" color=\"textSecondary\">{full}</Typography></div>}\n </>\n }} />\n </ReferenceField>\n}\n\nOfficeField.defaultProps = {\n addLabel: true,\n}\n","import React from 'react';\nimport { ReferenceInput, ReferenceArrayInput, useTranslate } from 'react-admin';\n\nimport AutocompleteInput from '../../common/inputs/AutocompleteInput';\nimport AutocompleteSuggestion from '../../common/inputs/AutocompleteSuggestion'\n\nimport { LeagueIcon, OfficeIcon } from '../icons';\n\nconst filterOffice = name => ({ name })\n\nexport const OfficeSuggestion = ({ suggestion: office, query, isHighlighted, ...props }) => {\n const translate = useTranslate();\n const type = translate(`resources.offices.values.type.${office.type}`, { _: office.type, smart_count: 1 })\n return <AutocompleteSuggestion\n icon={['League', 'Tournament', 'Cup'].includes(office.type) ? <LeagueIcon /> : <OfficeIcon />}\n primary={office.name}\n secondary={!office.HCRId ? type : `${type} - HCR ID: ${office.HCRId}`}\n />\n}\n\nexport const OfficeInput = ({ helperText, multiple, ...props }) => {\n const Input = multiple ? ReferenceArrayInput : ReferenceInput;\n const translate = useTranslate();\n return <Input\n reference=\"offices\"\n filterToQuery={filterOffice}\n sort={{\n field: ['type', 'name'],\n order: ['DESC', 'ASC'],\n }}\n perPage={25}\n {...props}\n >\n <AutocompleteInput\n optionText=\"name\"\n groupBy={({ type }) => translate(`resources.offices.values.type.${type}`)}\n suggestionComponent={OfficeSuggestion}\n filterKeys={['name', 'HCRId']}\n multiple={multiple}\n helperText={helperText}\n />\n </Input>\n}\n","import React from 'react';\nimport { ReferenceArrayField, TextField, useRecordContext, useTranslate } from 'react-admin';\n\nimport { SingleFieldList } from '../../common/ra/SingleFieldList';\nimport { isAuthorized } from '../../common/Authorize';\n\nexport const OfficesField = ({ emptyText, ...props }) => {\n const translate = useTranslate();\n const record = useRecordContext(props);\n\n const values = record?.[props.source];\n if (!values?.length && emptyText) return translate(emptyText)\n\n const showLink = isAuthorized(record, 'offices', 'show') ? 'show' : false;\n return <ReferenceArrayField basePath=\"/offices\" resource=\"offices\" reference=\"offices\" {...props}>\n <SingleFieldList link={showLink} {...props}>\n <TextField source=\"name\" />\n </SingleFieldList>\n </ReferenceArrayField>\n}\n","import { useQueryWithStore, GET_ONE, useQuery } from 'react-admin';\nimport { useSelector } from 'react-redux';\n\nexport const useOffice = officeId => useQuery({\n type: GET_ONE,\n resource: 'offices',\n payload: {\n id: officeId,\n }\n}, {\n enabled: officeId != null,\n})\n\n// force check in cache (use with caution, data may have changed since last load)\nexport const useOfficeWithStore = officeId => {\n const officeInStore = useSelector(state => state?.admin?.resources?.offices?.data?.[officeId])\n\n const { data, loading, error } = useQueryWithStore({\n type: GET_ONE,\n resource: 'offices',\n payload: { id: officeId },\n }, {\n enabled: !officeInStore && !!officeId\n })\n return { data: officeInStore || data, loading, error };\n}\n\n","import React, { Fragment } from 'react';\nimport { SimpleForm, FormInput, TextInput, useNotify, useTranslate } from 'react-admin';\nimport { Dialog, DialogTitle, DialogContent, DialogContentText } from '@material-ui/core'\nimport { FORM_ERROR } from 'final-form';\n\nimport { apiClient } from '../../http';\nimport { DialogFormToolbar } from '../../common/dialogs/DialogForm';\n\nconst validate = values => {\n const errors = {};\n if (!values.email) errors.email = 'ra.validation.required';\n return errors;\n}\n\nconst InviteForm = props =>\n <SimpleForm component={Fragment} validate={validate} variant=\"outlined\" margin=\"normal\" {...props}>\n <FormInput fullWidth input={\n <TextInput source=\"email\" type=\"email\" autoComplete=\"off\" />\n } />\n <FormInput fullWidth input={\n <TextInput source=\"note\" type=\"text\" helperText=\"resources.participants.helpers.note\" multiline rows=\"3\" />\n } />\n </SimpleForm>\n\nexport const InviteDialog = ({ participantId, open, onClose }) => {\n const translate = useTranslate();\n const notify = useNotify()\n\n const handleCancel = () => onClose()\n const handleSubmit = values => {\n return apiClient(`/participants/${participantId}/invite`, {\n method: 'POST',\n data: {\n email: values.email,\n note: values.note,\n },\n })\n .then(() => {\n onClose();\n notify('resources.participants.notifications.invitation_sent')\n })\n .catch(err => {\n const error = err?.response?.data?.error?.message\n return { [FORM_ERROR]: error || 'ra.page.error' }\n })\n }\n\n return <Dialog open={open} onClose={handleCancel} fullWidth maxWidth=\"sm\">\n <DialogTitle>{translate('resources.participants.labels.account_invitation')}</DialogTitle>\n <DialogContent>\n <DialogContentText>{translate('resources.participants.messages.send_link')}</DialogContentText>\n <InviteForm initialValues={{ participantId }} save={handleSubmit} toolbar={\n <DialogFormToolbar submitLabel=\"ra.action.send\" onCancel={handleCancel} />\n } />\n </DialogContent>\n </Dialog>\n}\n","import React from 'react';\nimport { Link, ReferenceField, useRecordContext } from 'react-admin';\nimport { Typography } from '@material-ui/core';\n\nimport { isAuthorized } from '../../common/Authorize';\nimport FunctionField from '../../common/fields/FunctionField'\n\nconst ParticipantLinkField = ({ record, variant, participant, showLink = false, openInNewTab = true }) => {\n const { id, fullName } = participant || {};\n\n const name = fullName?.toUpperCase();\n\n let linkTo = null;\n if (typeof showLink === 'function') {\n linkTo = showLink(record, 'participants');\n } else if (showLink) {\n linkTo = `/participants/${id}/${showLink}`;\n }\n\n if (!linkTo) {\n return <Typography variant={variant} display=\"inline\">{name}</Typography>;\n }\n\n return (\n <Link\n to={linkTo}\n target={openInNewTab ? '_blank' : undefined}\n rel={openInNewTab ? 'noopener noreferrer' : undefined}\n onClick={e => e.stopPropagation()}\n >\n <Typography variant={variant} display=\"inline\">{name}</Typography>\n </Link>\n );\n};\n\nexport const ParticipantField = ({ includeId = false, link = 'show', className, variant = 'body2', openInNewTab, ...props }) => {\n const record = useRecordContext(props);\n\n const showLink = isAuthorized(record, 'participants', 'show') ? link : false;\n return <ReferenceField basePath=\"/participants\" resource=\"participants\" reference=\"participants\" link={false} {...props}>\n <FunctionField render={participant => {\n const id = participant?.HCRId;\n return <>\n <ParticipantLinkField record={record} variant={variant} participant={participant} showLink={showLink} openInNewTab={openInNewTab} />\n {id && includeId === 'inline' && <span><Typography variant={variant} display=\"inline\" color=\"textSecondary\"> ({id})</Typography></span>}\n {id && includeId === 'full' && <div><Typography variant={variant} display=\"inline\" color=\"textSecondary\"> {id}</Typography></div>}\n </>\n }} variant={variant} className={className} />\n </ReferenceField>\n}\n\nParticipantField.defaultProps = {\n addLabel: true,\n}\n","import React from 'react';\nimport { ReferenceInput, ReferenceArrayInput } from 'react-admin';\n\nimport AutocompleteInput from '../../common/inputs/AutocompleteInput';\nimport AutocompleteSuggestion from '../../common/inputs/AutocompleteSuggestion'\n\nimport { ParticipantIcon } from '../icons'\n\nconst filterParticipants = name => ({ name })\n\nconst ParticipantSuggestion = ({ suggestion: participant, query, isHighlighted, ...props }) =>\n <AutocompleteSuggestion icon={<ParticipantIcon />} primary={participant.fullName} secondary={participant.HCRId} />\n\nexport const ParticipantInput = ({ allowEmpty, helperText, multiple, ...props }) => {\n const Input = multiple ? ReferenceArrayInput : ReferenceInput;\n return <Input\n reference=\"participants\"\n filterToQuery={filterParticipants}\n sort={{\n field: 'lastName',\n order: 'ASC'\n }}\n perPage={25}\n {...props}\n >\n <AutocompleteInput\n optionText=\"fullName\"\n groupBy={p => p.lastName[0]}\n suggestionComponent={ParticipantSuggestion}\n filterKeys={['lastName', 'firstName', 'fullName', 'HCRId']}\n multiple={multiple}\n helperText={helperText}\n emptyOptionsText=\"resources.participants.messages.search_by_name\"\n resettable\n allowEmpty\n />\n </Input>\n}\n","import React from 'react';\nimport { ChipField, ReferenceArrayInput, ReferenceInput, SelectArrayInput, useTranslate } from \"react-admin\";\nimport { makeStyles } from '@material-ui/core';\nimport { useFormState } from 'react-final-form';\n\nimport { dedupeBy } from '@hisports/parsers';\n\nimport ChipSelectInput from '../../common/inputs/ChipSelectInput';\n\nimport { useScheduleGroupingType } from '../scheduleSettings';\n\nconst useStyles = makeStyles(theme => ({\n selectArrayInput: {\n // add half of the label's line-height top, + bottom for v-alignment\n paddingBlock: 'calc(1rem * .75 / 2)',\n\n '& .MuiFormHelperText-root:empty': {\n margin: 0,\n }\n },\n}))\n\nconst validate = (value, translate) => {\n if (typeof value === 'undefined') return translate('ra.validation.required')\n}\n\nconst optionText = group => group.name;\n\nconst ChoiceInput = ({ choices, showNone, allowEmpty = showNone, children, ...props }) => {\n const dedupedChoices = dedupeBy('id', choices);\n if (!dedupedChoices.length) return null;\n return React.cloneElement(children, { ...props, choices: dedupedChoices, allowEmpty })\n}\n\nexport const PoolInput = ({ select = false, multiple, showNone, filter = {}, helperText, defaultValue, ...props }) => {\n const translate = useTranslate();\n const classes = useStyles();\n const { values } = useFormState();\n\n const scheduleId = props?.scheduleId || values?.scheduleId;\n\n const { isPools } = useScheduleGroupingType(scheduleId);\n\n if (!scheduleId || !isPools) return null;\n\n let input = null;\n if (select && multiple) {\n input = <SelectArrayInput optionText={optionText} allowEmpty={showNone} helperText={helperText} {...props}>\n <ChipField source={optionText} />\n </SelectArrayInput>\n } else {\n input = <ChipSelectInput multiple={multiple} optionText={optionText} showNone={showNone} helperText={helperText} emptyText=\"resources.pools.messages.all_pools\" {...props} />\n }\n\n const Reference = multiple ? ReferenceArrayInput : ReferenceInput;\n return <div className={select && multiple ? classes.selectArrayInput : null}>\n <Reference\n {...props}\n reference=\"pools\"\n filter={{ scheduleId, ...filter }}\n filterToQuery={() => null}\n sort={{\n field: 'name',\n order: 'ASC'\n }}\n perPage={9999}\n defaultValue={defaultValue}\n validate={showNone ? (value) => validate(value, translate) : null}\n margin=\"none\"\n >\n <ChoiceInput showNone={showNone}>\n {input}\n </ChoiceInput>\n </Reference>\n </div>\n}\n","import React, { useContext, useMemo, useState } from 'react';\n\nconst PracticeAvailabilityContext = React.createContext();\n\nexport const usePracticeAvailabilityContext = () => useContext(PracticeAvailabilityContext);\n\nexport const PracticeAvailabilityContextProvider = ({ children }) => {\n const availabilityInfo = useState({});\n const settings = useState({});\n\n const context = useMemo(() => ({\n availabilityInfo,\n settings,\n }), [ availabilityInfo, settings ])\n\n return <PracticeAvailabilityContext.Provider value={context}>\n {children}\n </PracticeAvailabilityContext.Provider>\n}\n","import React, { useEffect } from 'react';\nimport { useFormState } from 'react-final-form';\nimport { Grid } from '@material-ui/core';\nimport moment from 'moment-timezone';\nimport { isEmpty, sortBy } from 'lodash';\n\nimport { createRange } from '@hisports/common';\n\nimport { apiClient } from '../../http';\n\nimport { usePracticeAvailabilityContext } from './PracticeAvailabilityContext';\nimport { AvailabilityDetails } from '../games/GameAvailabilityInfo';\nimport { useOfficeSettingsWithStore } from '../officeSettings';\n\nconst useAvailabilityContext = (practice, enabled) => {\n const {\n availabilityInfo: [ practiceAvailabilities, setAvailabilities ],\n settings: [ settings, setSettings ],\n } = usePracticeAvailabilityContext();\n\n const { id, date, startTime, endTime, timezone, teamIds, arenaId, officeId } = practice;\n const { data: officeSettings, loading: officeSettingsLoading } = useOfficeSettingsWithStore(officeId, enabled)\n\n useEffect(() => {\n if (!enabled) return;\n\n apiClient('/practices/availabilities', {\n method: 'GET',\n params: {\n id,\n date,\n startTime,\n endTime,\n timezone,\n teamIds,\n arenaId,\n officeId,\n }\n })\n .then(res => res.data)\n .then(setAvailabilities)\n }, [ id, date, startTime, endTime, timezone, teamIds, arenaId, officeId, enabled, setAvailabilities ])\n\n useEffect(() => {\n if (!enabled || !officeId || !officeSettings || officeSettingsLoading) return;\n\n setSettings(officeSettings)\n }, [ enabled, officeSettings, officeSettingsLoading, setSettings, officeId ])\n\n\n return practiceAvailabilities;\n}\n\nexport const useAvailabilities = practice => {\n const { availabilityInfo: [ practiceAvailabilities ], settings: [ settings ] } = usePracticeAvailabilityContext();\n\n const availabilities = practiceAvailabilities?.availabilities || [];\n const conflicts = practiceAvailabilities?.conflicts || [];\n\n let timeAvailabilities = []\n const eventRange = createRange(moment.tz(practice.startTime, practice.timezone), moment.tz(practice.endTime, practice.timezone))\n if (availabilities) {\n timeAvailabilities = availabilities.filter(availability => {\n const availabilityRange = createRange(moment.tz(availability.startTime, availability.timezone), moment.tz(availability.endTime, availability.timezone));\n return availabilityRange.overlaps(eventRange)\n })\n\n timeAvailabilities = sortBy(timeAvailabilities, ({ targetType }) => {\n if (targetType === 'Surface') return 1;\n if (targetType === 'Team') return 2;\n if (targetType === 'Office') return 3;\n return 3;\n })\n }\n\n return {\n availabilities: timeAvailabilities,\n conflicts,\n settings,\n };\n}\n\nexport const PracticeAvailabilityInfo = (props) => {\n const { values: practice, errors } = useFormState();\n const hasErrors = Object.keys(errors).some(key => key !== 'status');\n const enabled = practice.date != null && !hasErrors;\n\n const data = useAvailabilityContext(practice, enabled);\n const { availabilities, conflicts } = useAvailabilities(practice);\n\n if (isEmpty(data)) return null;\n if (!enabled || (!availabilities.length && !conflicts.length)) return null;\n\n return <Grid item xs={12}>\n <AvailabilityDetails availabilities={availabilities} conflicts={conflicts} />\n </Grid>\n}\n\n","import { useQueryWithStore, GET_ONE } from 'react-admin';\nimport { useSelector } from 'react-redux';\n\nexport const useScheduleSettings = scheduleId =>\n useQueryWithStore({\n type: GET_ONE,\n resource: 'scheduleSettings',\n payload: { id: scheduleId },\n })\n\n// force check in cache (use with caution, data may have changed since last load)\nexport const useScheduleSettingsWithStore = (scheduleId, enabled = true) => {\n const scheduleSettingsInStore = useSelector(state => state?.admin?.resources?.scheduleSettings?.data?.[scheduleId])\n\n const { data, loading, loaded, error } = useQueryWithStore({\n type: GET_ONE,\n resource: 'scheduleSettings',\n payload: { id: scheduleId },\n }, {\n enabled: !scheduleSettingsInStore && !!scheduleId && !!enabled\n })\n return { data: scheduleSettingsInStore || data, loading, loaded, error };\n}\n\nexport const useScheduleGroupingType = scheduleId => {\n const { data: scheduleSettings, loading, loaded, error } = useScheduleSettingsWithStore(scheduleId);\n\n return {\n isPools: scheduleSettings?.groupingType === 'Pools',\n isGroups: scheduleSettings?.groupingType === 'Groups',\n loading,\n loaded,\n error,\n }\n}\n","import { Typography } from '@material-ui/core';\nimport React from 'react';\nimport { ReferenceField, useRecordContext, useTranslate } from 'react-admin';\n\nimport { isAuthorized } from '../../common/Authorize';\nimport FunctionField from '../../common/fields/FunctionField'\nimport { useSeason } from '../../common/inputs/SeasonSelector';\nimport { CategoryField } from '../categories/CategoryField';\nimport { SeasonField } from '../seasons/SeasonField';\n\nexport const ScheduleField = ({ includeSeason = false, includeCategory = false, includeType = false, link = 'show', variant = 'body2', className, ...props }) => {\n const seasonId = useSeason();\n const record = useRecordContext(props);\n const translate = useTranslate();\n\n const showLink = isAuthorized(record, 'schedules', 'show') ? link : false;\n return <ReferenceField basePath=\"/schedules\" resource=\"schedules\" reference=\"schedules\" link={showLink} {...props}>\n <FunctionField source=\"name\" render={schedule => {\n const inline = [\n includeSeason === 'inline' && seasonId !== schedule.seasonId && <SeasonField source=\"seasonId\" />,\n includeCategory === 'inline' && <CategoryField source=\"categoryId\" variant=\"inherit\" />,\n includeType === 'inline' && translate(`resources.schedules.values.type.${schedule.type}`),\n ].filter(Boolean).flatMap(e => [e, ' ']).slice(0, -1)\n const full = [\n includeSeason === 'full' && seasonId !== schedule.seasonId && <SeasonField source=\"seasonId\" />,\n includeCategory === 'full' && <CategoryField source=\"categoryId\" variant=\"inherit\" />,\n includeType === 'full' && translate(`resources.schedules.values.type.${schedule.type}`),\n ].filter(Boolean).flatMap(e => [e, ' ']).slice(0, -1)\n return <>\n <Typography variant={variant} display=\"inline\">{schedule.name}</Typography>\n {inline.length > 0 && <span><Typography variant={variant} display=\"inline\" color=\"textSecondary\"> {inline}</Typography></span>}\n {full.length > 0 && <div><Typography variant={variant} display=\"inline\" color=\"textSecondary\">{full}</Typography></div>}\n </>\n }} variant={variant} className={className} />\n </ReferenceField>\n}\n\nScheduleField.defaultProps = {\n addLabel: true,\n}\n","import React from 'react';\nimport { ReferenceInput, ReferenceArrayInput } from 'react-admin';\n\nimport { getSeasonDisplayName } from '@hisports/common/src/seasons';\n\nimport { useFormSeason } from '../../common/inputs/SeasonSelector';\nimport AutocompleteInput from '../../common/inputs/AutocompleteInput';\nimport AutocompleteSuggestion from '../../common/inputs/AutocompleteSuggestion'\nimport { useSport } from '../../http';\n\nimport { ScheduleIcon } from '../icons';\n\nconst filterSchedules = filter => name => ({ ...filter, name })\n\nconst ScheduleSuggestion = ({ suggestion: schedule, query, isHighlighted, ...props }) => {\n const sport = useSport();\n if (!schedule?.id) return null;\n const season = getSeasonDisplayName(schedule.seasonId, sport);\n return <AutocompleteSuggestion icon={<ScheduleIcon />} primary={schedule.name} secondary={`${schedule.type} (${season})`} />\n}\n\nexport const ScheduleInput = ({ allowEmpty, multiple, helperText, ...props }) => {\n const seasonId = useFormSeason();\n const Input = multiple ? ReferenceArrayInput : ReferenceInput;\n return <Input\n reference=\"schedules\"\n filterToQuery={filterSchedules({ seasonId, pastEvents: true })}\n sort={{\n field: ['type', 'name'],\n order: ['ASC', 'ASC'],\n }}\n perPage={100}\n {...props}\n >\n <AutocompleteInput\n optionText=\"name\"\n groupBy={schedule => schedule.type}\n suggestionComponent={ScheduleSuggestion}\n multiple={multiple}\n helperText={helperText}\n resettable\n allowEmpty\n />\n </Input>\n}\n","import React, { Fragment, useRef, useState } from 'react';\nimport { Button, NumberInput, RecordContextProvider, SimpleForm, useLocale, useNotify, useRefresh, useTranslate } from 'react-admin';\nimport { useFormState } from 'react-final-form';\nimport { Dialog, DialogContent, DialogContentText, DialogTitle, ListItemIcon, ListItemText, makeStyles, styled } from '@material-ui/core';\nimport { DeviceHub } from '@material-ui/icons';\nimport { Alert } from '@material-ui/lab';\nimport createCalculator from 'final-form-calculate';\nimport Iframe from 'react-iframe';\nimport { IntlProvider } from \"react-intl\";\n\nimport { translateApiProperty } from '@hisports/common';\n\nimport { apiClient, useHttpClient } from '../../../http';\nimport { ActionMenuItem } from '../../../common/ActionMenu';\nimport { EnumInput } from '../../../common/inputs/EnumInputs';\nimport { DialogFormToolbar } from '../../../common/dialogs/DialogForm';\nimport FileViewer from '../../../common/fileViewer/FileViewer';\n\nimport ScheduleSequenceAlert from '../../schedulesequences/ScheduleSequenceAlert';\nimport ScheduleSequenceError from '../../schedulesequences/ScheduleSequenceError';\nimport { ScheduleGroupInput } from '../../groups/GroupInput';\n\nexport const BracketIcon = styled(DeviceHub)({\n transform: 'rotate(-90deg)'\n})\n\nconst inputProps = {\n variant: 'outlined',\n margin: 'normal',\n fullWidth: true\n}\n\nconst useStyles = makeStyles(theme => ({\n details: {\n padding: 0\n },\n frame: {\n width: '100%',\n height: theme.spacing(40),\n border: '1px black solid'\n },\n groupInput: {\n marginTop: theme.spacing(2)\n }\n}))\n\nconst validate = (values) => {\n const errors = {};\n if (!values.totalTeams) {\n errors.totalTeams = 'ra.validation.required'\n } else if (values.totalTeams <= 0) {\n errors.totalTeams = 'ra.validation.greater_than_zero'\n }\n if (!values.format) errors.format = 'ra.validation.required'\n if (!values.bracketId) errors.bracketId = 'ra.validation.required'\n return errors;\n}\n\nconst Toolbar = ({ handleSubmit, onClose }) => {\n return <DialogFormToolbar\n onCancel={() => onClose(true)}\n handleSubmit={handleSubmit}\n submitLabel=\"ra.action.publish\"\n />\n}\n\nconst FormatInput = props => {\n const locale = useLocale()\n return <EnumInput {...props}\n optionText={value => translateApiProperty(value, 'name', locale) }\n radio\n />\n}\n\nconst BracketInput = ({ brackets = [], ...props }) => {\n const locale = useLocale()\n const translate = useTranslate();\n const { values: { totalTeams, format } } = useFormState();\n\n const choices = brackets?.filter(bracket => {\n if (totalTeams != bracket.teams) return false;\n if (format !== bracket.type) return false;\n return true;\n })\n\n const selected = totalTeams && format;\n if (!selected) return null;\n return <EnumInput {...props}\n choices={choices}\n optionText={bracket => translateApiProperty(bracket, 'variant', locale)}\n helperText={selected && !choices?.length ? translate('resources.schedules.labels.brackets_na') : ' '}\n radio\n />\n}\n\nconst PreviewCard = ({ brackets }) => {\n const locale = useLocale();\n const translate = useTranslate();\n const classes = useStyles();\n const [ fileOpen, setFileOpen ] = useState(false);\n const { values: { bracketId } } = useFormState();\n\n if (!bracketId) return null;\n const bracket = brackets.find(bracket => bracket.id === bracketId)\n const url = translateApiProperty(bracket, 'url', locale);\n if (!url) return null;\n\n return <>\n <Iframe url={`${url}/svg`} className={classes.frame} />\n <IntlProvider>\n <Button onClick={() => setFileOpen(true)}><span>{translate('resources.schedules.labels.brackets_viewer.open_in_viewer')}</span></Button>\n {fileOpen && <FileViewer\n isOpen={fileOpen}\n close={() => setFileOpen(false)}\n fileName={`${bracketId}`}\n fullPath={`${url}/svg`}\n type=\"svg\"\n openInNewTabURL={`${url}/svg`}\n URLToFetchForDownload={`${url}/pdf`}\n />}\n </IntlProvider>\n </>\n}\n\nconst BracketForm = ({ scheduleId, onClose }) => {\n const translate = useTranslate();\n const notify = useNotify();\n const classes = useStyles();\n const { data: { models: brackets, types: formats }, loading, error } = useHttpClient('/schedules/bracketModels', { models: [], types: [] })\n\n const refresh = useRefresh();\n\n const handleSave = values => {\n return apiClient(`/schedules/${scheduleId}/importBrackets`, {\n method: 'POST',\n data: {\n bracketId: values.bracketId,\n groupId: values.groupId\n }\n })\n .then(() => {\n refresh();\n onClose();\n notify('resources.schedules.notifications.bracket_games_created')\n })\n .catch(e => {\n // page error\n if (!e.isAxiosError) {\n notify('ra.page.error_try_again_refresh')\n return;\n }\n\n // validation error\n const { error } = e.response.data;\n if ((error?.status === 422 || error?.statusCode === 422) && error?.message) {\n const errorMsg = translate(`resources.schedules.errors.brackets.${error.message}`)\n\n if (error.message === 'missing_sequence') {\n notify(<ScheduleSequenceError errorMsg={errorMsg} scheduleId={scheduleId} />, 'error')\n } else {\n notify(errorMsg)\n }\n return;\n }\n\n // api error\n return notify('ra.page.error_try_again')\n })\n }\n\n // decorators must be wrapped in useRef otherwise SimpleForm prop will register duplicates\n // this bug seems to be triggered by use of hooks (useSelector)\n const decorators = useRef([createCalculator({\n field: 'format',\n updates: {\n bracketId: () => null,\n },\n }, {\n field: 'totalTeams',\n updates: {\n bracketId: () => null,\n },\n })])\n\n if (error) return <p><Alert severity=\"error\">{translate('ra.page.error_try_again_refresh')}</Alert></p>\n if (loading) return <p>{translate('ra.page.loading')}</p>\n\n return <SimpleForm\n component={Fragment}\n validate={validate}\n initialValues={{ totalTeams: 10, format: 'DE' }}\n toolbar={<Toolbar onClose={onClose} />}\n decorators={decorators.current}\n save={handleSave}\n >\n <NumberInput source=\"totalTeams\" helperText=\"\" label=\"resources.schedules.fields.brackets.totalTeams\" {...inputProps} />\n <ScheduleGroupInput source=\"groupId\" className={classes.groupInput} scheduleId={scheduleId} label=\"resources.schedules.fields.brackets.groupId\" showNone={translate('ra.message.no_group')} {...inputProps} />\n <FormatInput source=\"format\" helperText=\"\" label=\"resources.schedules.fields.brackets.format\" choices={formats} {...inputProps} />\n <BracketInput source=\"bracketId\" helperText=\"\" label=\"resources.schedules.fields.brackets.bracketId\" brackets={brackets} {...inputProps} />\n <PreviewCard brackets={brackets} />\n </SimpleForm>\n}\n\nexport const BracketDialog = ({ scheduleId, isOpen, onClose }) => {\n const translate = useTranslate();\n\n return <RecordContextProvider value={null}>\n <Dialog open={isOpen} onClose={() => onClose(true)} maxWidth=\"md\" fullWidth>\n <DialogTitle>{translate('resources.schedules.labels.create_bracket')}</DialogTitle>\n <DialogContent>\n <DialogContentText>{translate('resources.schedules.labels.brackets_info')}</DialogContentText>\n <ScheduleSequenceAlert scheduleId={scheduleId} style={{ marginBlock: 16 }} />\n <BracketForm scheduleId={scheduleId} onClose={onClose} />\n </DialogContent>\n </Dialog>\n </RecordContextProvider>\n}\n\nexport const AddBracketButton = ({ scheduleId, onClick, ...props }) => {\n const translate = useTranslate();\n const [ isOpen, setOpen ] = useState(false);\n const handleClick = () => {\n onClick();\n setOpen(true);\n }\n return <>\n <ActionMenuItem color=\"primary\" size=\"small\" onClick={handleClick}>\n <ListItemIcon><BracketIcon fontSize=\"small\" /></ListItemIcon>\n <ListItemText>{translate('resources.schedules.labels.bracket_schedule')}</ListItemText>\n </ActionMenuItem>\n {isOpen && <BracketDialog scheduleId={scheduleId} isOpen={isOpen} onClose={() => setOpen(false)} {...props} />}\n </>\n}\n","import React, { Fragment, useEffect, useState } from 'react';\nimport { RecordContextProvider, Datagrid, BulkDeleteButton, useDataProvider, SimpleForm, useList, ListContextProvider, NumberField, useTranslate, Pagination, ReferenceField, useListContext, RadioButtonGroupInput, useRecordContext } from 'react-admin';\nimport { Dialog, DialogTitle, DialogContent, useMediaQuery, makeStyles } from '@material-ui/core';\nimport { useFormState, useForm } from 'react-final-form';\nimport { orderBy } from 'lodash';\n\nimport { dedupeBy } from '@hisports/parsers';\n\nimport { DialogFormToolbar } from '../../../common/dialogs/DialogForm';\n\nimport { ScheduleInput } from '../ScheduleInput';\nimport { ScheduleGroupInput } from '../../groups/GroupInput';\nimport { OfficeInput } from '../../offices/OfficeInput';\nimport { CategoryField } from '../../categories/CategoryField';\nimport { TeamField } from '../../teams/TeamField';\nimport { GroupField } from '../../groups/GroupField';\nimport { CategoryInput } from '../../categories/CategoryInput';\nimport { PoolInput } from '../../pools/PoolInput';\n\nconst useStyles = makeStyles(theme => ({\n categoryInput: {\n marginTop: theme.spacing(2)\n },\n addGroupInput: {\n marginTop: theme.spacing(2)\n },\n MuiDialogContent: {\n paddingTop: 0,\n },\n filterGroupInput: {\n marginTop: theme.spacing(3)\n }\n}))\n\nconst inputProps = {\n variant: 'outlined',\n margin: 'none',\n fullWidth: true,\n helperText: false,\n}\n\nconst validate = values => {\n const errors = {}\n\n return errors;\n}\n\nconst getSchedule = (dataProvider, scheduleId) => {\n if (!scheduleId) return Promise.resolve([]);\n return dataProvider.getOne('schedules', { id: scheduleId })\n .then(res => res.data)\n}\n\nconst getOfficeTeams = (dataProvider, officeId, seasonId, categoryId) => {\n if (!officeId) return Promise.resolve([])\n return dataProvider.getList('teams', {\n filter: { effectiveOffices: officeId, seasonId, categoryId, _scope: 'Tenant' },\n sort: { field: ['category.order', 'name'], order: ['ASC', 'ASC'] },\n pagination: { page: 1, perPage: 99999 },\n }).then(res => res.data)\n}\n\nconst getScheduleTeams = (dataProvider, scheduleId, groupId, poolId) => {\n if (!scheduleId) return Promise.resolve([]);\n\n const filter = {\n scheduleId,\n ...(groupId && { groupId }),\n ...(poolId && { poolId })\n };\n\n return dataProvider.getList('scheduleteams', {\n filter,\n sort: { field: ['group.name', 'team.name'], order: ['ASC', 'ASC'] },\n pagination: { page: 1, perPage: 99999 },\n }).then(res => res.data)\n .then(teams => dedupeBy('teamId', teams));\n}\n\nconst getTeamScheduleStats = (dataProvider, scheduleId, teamIds = []) => {\n if (!scheduleId || !teamIds.length) return Promise.resolve([]);\n return dataProvider.getManyReference('teamstats', {\n target: 'schedules',\n id: scheduleId,\n filter: { teamId: { inq: teamIds } },\n sort: { field: 'ranking', order: 'DESC' },\n pagination: { page: 1, perPage: 99999 },\n }).then(res => res.data)\n .then(teams => dedupeBy('id', teams));\n}\n\nconst TeamCategoryField = props => {\n return <ReferenceField basePath=\"/teams\" resource=\"teams\" reference=\"teams\" link={false} {...props}>\n <CategoryField {...props} source=\"categoryId\" />\n </ReferenceField>\n}\n\nconst TeamGrid = props => {\n const { ids = [], data } = useListContext()\n\n const showRank = !ids?.every(id => {\n const rank = data?.[id]?.rank;\n return !rank || rank === 1;\n });\n const showGroup = ids?.some(id => data?.[id]?.groupId != null);\n\n return <Datagrid size=\"medium\" {...props}>\n {showRank && <NumberField source=\"rank\" label=\"resources.scheduleteams.labels.rank\" />}\n <TeamField source=\"id\" link={false} includeId=\"full\" label=\"resources.scheduleteams.fields.teamId\" />\n <TeamCategoryField source=\"id\" label=\"resources.scheduleteams.fields.categoryId\" />\n {showGroup && <GroupField source=\"groupId\" />}\n </Datagrid>\n}\n\nconst TeamList = ({ initialValues, scheduleIdForGroupInput }) => {\n const dataProvider = useDataProvider();\n const { values: { source, scheduleId, officeId, categoryId, filterGroupId, filterPoolId } } = useFormState();\n const { change, batch } = useForm();\n const [ loaded, setLoaded ] = useState(false);\n const [ loading, setLoading ] = useState(true);\n const [ teams, setTeams ] = useState([]);\n\n const listContext = useList({\n data: teams,\n ids: teams.map(team => parseInt(team.id)),\n loaded,\n loading,\n page: 1,\n perPage: 100,\n })\n\n useEffect(() => {\n change('teamIds', listContext?.selectedIds)\n }, [ listContext?.selectedIds, change ])\n\n useEffect(() => {\n batch(() => {\n change('filterGroupId', null);\n change('filterPoolId', null);\n });\n }, [ scheduleId, change, batch ]);\n\n useEffect(() => {\n async function fetchTeamList() {\n setLoading(true);\n listContext.setPage(1);\n\n let teamList = []\n if (source === 'Schedule' && scheduleId) {\n // if schedule selected, fetch teams from schedule\n teamList = await getScheduleTeams(dataProvider, scheduleId, filterGroupId, filterPoolId);\n teamList = teamList.map(team => ({ id: team.teamId, groupId: team.groupId }))\n\n // get team schedule stats to sort on ranking\n const teamschedulestats = await getTeamScheduleStats(dataProvider, scheduleId, teamList.map(team => team.id)).catch(e => {});\n if (teamschedulestats?.length) {\n teamList = teamList.map(team => {\n const stats = teamschedulestats.find(stats => stats.teamId === team.id && team.groupId == stats.groupId)\n team.rank = stats?.ranking;\n return team;\n })\n }\n } else if (source === 'Office' && officeId) {\n // if office selected, fetch teams from selected office\n let schedule;\n if (initialValues?.scheduleId || scheduleIdForGroupInput) {\n schedule = await getSchedule(dataProvider, initialValues?.scheduleId || scheduleIdForGroupInput)\n }\n teamList = await getOfficeTeams(dataProvider, officeId || schedule?.officeId, schedule?.seasonId, categoryId)\n }\n\n const selectedTeams = (listContext?.selectedIds || []).map(selectedId => teams.find(team => team.id === selectedId)).filter(Boolean);\n\n // combine the selected teams and import teams\n teamList = dedupeBy('id', [...selectedTeams, ...teamList])\n // order by rank\n teamList = orderBy(teamList, ['rank'], ['asc']);\n\n // set new list of teams\n setTeams(teamList)\n setLoaded(true)\n setLoading(false)\n }\n\n fetchTeamList()\n }, [ source, scheduleId, officeId, categoryId, dataProvider, filterGroupId, filterPoolId ]) // eslint-disable-line react-hooks/exhaustive-deps\n\n return <ListContextProvider value={listContext}>\n <TeamGrid\n {...listContext}\n hasBulkActions={<BulkDeleteButton />}\n rowClick=\"toggleSelection\"\n isRowSelectable={() => true}\n />\n <Pagination rowsPerPageOptions={[]} />\n </ListContextProvider>\n}\n\nconst OfficeOrScheduleInput = props => {\n const { values: { source, officeId } } = useFormState();\n return <>\n {source === 'Office' && <OfficeInput source=\"officeId\" label=\"resources.offices.name\" filter={{ _scope: 'Tenant' }} {...props} />}\n {source === 'Schedule' && <ScheduleInput source=\"scheduleId\" label=\"resources.schedules.name\" filter={{ officeId }} {...props} />}\n </>\n}\n\nconst FormBody = ({ initialValues, scheduleIdForGroupInput }) => {\n const translate = useTranslate();\n const { values: { source, scheduleId } } = useFormState();\n const classes = useStyles();\n\n return <>\n {scheduleIdForGroupInput && <>\n <ScheduleGroupInput className={classes.addGroupInput} source=\"groupId\" scheduleId={scheduleIdForGroupInput} showNone={translate('ra.message.no_group')} label=\"resources.schedules.labels.add_to_group\" {...inputProps} />\n <PoolInput className={classes.addGroupInput} source=\"poolId\" scheduleId={scheduleIdForGroupInput} label=\"resources.schedules.labels.add_to_pool\" {...inputProps} />\n </>}\n <RadioButtonGroupInput source=\"source\" label=\"ra.action.search_in\" helperText=\"\" choices={[\n { id: 'Office', name: translate('resources.offices.name', 1) },\n { id: 'Schedule', name: translate('resources.schedules.name', 1) },\n ]} />\n <OfficeOrScheduleInput {...inputProps} />\n {source === 'Schedule' && scheduleId && <>\n <ScheduleGroupInput source=\"filterGroupId\" defaultValue={null} className={classes.filterGroupInput} scheduleId={scheduleId} showNone={translate('resources.groups.messages.all_groups')} label=\"ra.message.filter_by_group\" {...inputProps} />\n <PoolInput source=\"filterPoolId\" className={classes.filterGroupInput} scheduleId={scheduleId} label=\"ra.message.filter_by_pool\" {...inputProps} />\n </>}\n {source === 'Office' && <div className={classes.categoryInput}>\n <CategoryInput source=\"categoryId\" label=\"resources.schedules.fields.categoryId\" {...inputProps} />\n </div>}\n <TeamList initialValues={initialValues} scheduleIdForGroupInput={scheduleIdForGroupInput} />\n </>\n}\n\nconst TeamImportForm = ({ onSubmit, initialValues, scheduleIdForGroupInput, ...props }) => {\n return <SimpleForm save={onSubmit} initialValues={initialValues} {...props} {...inputProps}>\n <FormBody initialValues={initialValues} scheduleIdForGroupInput={scheduleIdForGroupInput} />\n </SimpleForm>\n}\n\nexport const TeamImportDialog = ({ title, isOpen, onSubmit, onClose, initialValues, scheduleIdForGroupInput, ...props }) => {\n const fullScreen = useMediaQuery(theme => theme.breakpoints.down('sm'));\n const { officeId } = useRecordContext();\n const classes = useStyles();\n\n return <Dialog open={isOpen} maxWidth=\"md\" fullWidth fullScreen={fullScreen}>\n <DialogTitle>{title}</DialogTitle>\n <DialogContent className={classes.MuiDialogContent}>\n <RecordContextProvider value={{}}>\n <TeamImportForm\n validate={validate}\n onSubmit={onSubmit}\n onClose={onClose}\n component={Fragment}\n toolbar={<DialogFormToolbar submitLabel=\"ra.action.add\" cancelLabel=\"ra.action.cancel\" onCancel={onClose} />}\n initialValues={{ officeId, source: 'Office', ...initialValues }}\n scheduleIdForGroupInput={scheduleIdForGroupInput}\n />\n </RecordContextProvider>\n </DialogContent>\n </Dialog>\n}\n","import React, { Fragment, useEffect, useMemo, useState } from 'react';\nimport { ListContextProvider, ResourceContextProvider } from 'react-admin';\nimport { useForm, useFormState } from 'react-final-form';\nimport { LinearProgress } from '@material-ui/core';\n\nimport { parseMatrix } from '@hisports/scheduler';\n\nimport { apiClient } from '../../../../http';\nimport { useList } from '../../../../common/ra/useList';\nimport { ListView } from '../../../../common/cards/ListCard';\nimport { BaseEventView } from '../../../events/EventView';\nimport { CALENDAR_VIEWS, EventViewSettingsContext, EventViewSettingsMenu, GAME_LIST_FILTERS, useReverseHomeAway } from '../../../events/EventViewSettings';\nimport { TeamInput } from '../../../teams/TeamInput';\n\nimport { useGeneratorContext } from './GeneratorContext';\n\nconst EventViewSettingsProvider = ({ ...props }) => {\n const groupDates = useState(true);\n const groupArenas = useState(false);\n const groupRounds = useState(false);\n const assignments = useState(false);\n const gameInfo = useState(false);\n const flags = useState(false);\n const reverseHomeAway = useReverseHomeAway();\n const calendar = useState(false);\n const calendarView = useState(CALENDAR_VIEWS.WEEK);\n const teamEvents = useState(false);\n const slots = useState(false);\n const teamNames = useState(false)\n const availabilities = useState(false);\n const surfaceSizes = useState([]);\n const gameListFilter = useState(GAME_LIST_FILTERS.ALL_GAMES);\n const value = useMemo(() => ({\n calendar,\n calendarView,\n teamEvents,\n slots,\n teamNames,\n availabilities,\n gameInfo,\n flags,\n reverseHomeAway,\n groupDates,\n groupArenas,\n groupRounds,\n assignments,\n surfaceSizes,\n gameListFilter\n }), [ calendar, calendarView, teamEvents, slots, availabilities, gameInfo, flags, reverseHomeAway, groupDates, groupArenas, groupRounds, assignments, surfaceSizes, gameListFilter, teamNames ])\n return <EventViewSettingsContext.Provider value={value} {...props} />\n}\n\nexport const Preview = props => {\n const { change } = useForm();\n const { values } = useFormState();\n const { schedule, groupId, scheduleTeams } = useGeneratorContext()\n const [ generateLoaded, setGenerateLoaded ] = useState(false);\n const [ generateLoading, setGenerateLoading ] = useState(false);\n const [ generateError, setGenerateError ] = useState()\n const { games = [], matrixTable, crossScheduleTeams, roundType, gamesPerTeam, totalRounds, limitByes, startDate, startRound, type, weekdays, weekdaysType, breaks, poolIds, crossPool } = values;\n\n useEffect(() => {\n setGenerateLoading(true)\n const teams = [...(scheduleTeams || []), ...(crossScheduleTeams || [])]\n apiClient(`/schedules/${schedule.id}/generate`, {\n method: 'POST',\n data: {\n matrix: parseMatrix(matrixTable, teams),\n roundType,\n gamesPerTeam,\n totalRounds,\n limitByes,\n startDate,\n startRound,\n type,\n weekdays,\n weekdaysType,\n breaks,\n crossPool\n },\n params: {\n groupId,\n poolIds,\n }\n })\n .then(res => res.data)\n .then(games => games.map((games, id) => ({ ...games, id })))\n .then(games => change('games', games))\n .catch(err => {\n change('games', [])\n setGenerateError(err)\n })\n .finally(() => {\n setGenerateLoaded(true)\n setGenerateLoading(false)\n })\n }, [ schedule.id, groupId, poolIds, change, matrixTable, roundType, gamesPerTeam, totalRounds, limitByes, startDate, startRound, type, weekdays, weekdaysType, breaks, scheduleTeams, crossScheduleTeams, crossPool ])\n\n const filters = [\n <TeamInput source=\"teamId\" label=\"resources.teams.fields.teamId\" filter={{ scheduleId: schedule?.id, seasonId: schedule?.seasonId, 'scheduleteams.groupId': values?.groupId }} variant=\"outlined\" multiple allowEmpty alwaysOn />\n ]\n const actions = [\n <EventViewSettingsMenu\n disableCalendar\n disableAssignments\n disableGroupRounds={false}\n disableGroupArenas={false}\n alwaysOn\n showTeamEvents={false}\n showSlots={false}\n showAvailabilties={false}\n showSurfaceSizes={false}\n showFlagsInput={false}\n showRenumber={false}\n showGameInfoInput={false}\n />\n ]\n\n const context = useList({\n data: games,\n resource: 'draftgames', // resource has to be lowercase for team filtering to work correctly\n ids: games.map(game => game.id),\n loading: generateLoading,\n loaded: generateLoaded,\n error: generateError,\n page: 1,\n perPage: 25,\n })\n\n if (generateLoading || !generateLoaded) return <LinearProgress />;\n return <ResourceContextProvider value=\"draftGames\">\n <EventViewSettingsProvider>\n <ListContextProvider value={context}>\n <ListView\n actions={actions}\n filters={filters}\n open\n noResultsText=\"resources.draftGames.messages.no_results\"\n >\n <BaseEventView\n rowClick={false}\n disableCalendar\n disableAssignments\n hideStatus\n hideNumber\n showPools\n component={Fragment}\n />\n </ListView>\n </ListContextProvider>\n </EventViewSettingsProvider>\n </ResourceContextProvider>\n}\n","import React, { useEffect } from 'react';\nimport { ArrayInput, NumberInput, useTranslate } from 'react-admin';\nimport { useFormState } from 'react-final-form';\nimport { Grid } from '@material-ui/core';\nimport moment from 'moment-timezone';\n\nimport { DayEnumInput, DraftGameRoundTypeEnumInput, DraftGameWeekdaysTypeEnumInput } from '../../../../common/inputs/EnumInputs';\nimport { DateInput, InlineDateInput } from '../../../../common/inputs/DateInput';\nimport HorizontalFormIterator, { TransitionProps } from '../../../../common/ra/HorizontalFormIterator';\n\nimport { METHODS, ROUND_TYPES, STEPS, WEEKDAYS_TYPES } from './Generator';\nimport { useGeneratorContext } from './GeneratorContext';\n\nconst inputProps = {\n variant: 'outlined',\n margin: 'none',\n fullWidth: true,\n}\n\nconst isEven = n => n % 2 === 0;\n\nexport const Scheduling = props => {\n const translate = useTranslate();\n const { values = {} } = useFormState();\n const { schedule, scheduleTeams = [], setAlert } = useGeneratorContext()\n const { type, roundType, startDate, method, totalRounds, weekdays, weekdaysType, breaks } = values\n\n const weekdaysTypeHelperText = (() => {\n return `resources.draftGames.helpers.weekdays_type.${weekdaysType}`\n })()\n\n const startDateHelperText = (() => {\n let date;\n\n if (startDate) {\n date = moment.utc(startDate, 'YYYY-MM-DD').format('dddd');\n }\n\n if (!startDate) return false;\n\n const helperText = [];\n if (date) {\n let message = translate('resources.draftGames.helpers.start_date', { date });\n\n if (method === METHODS.GAMES_PER_TEAM) return message\n\n if (startDate && totalRounds) {\n const draftStart = moment.utc(startDate, 'YYYY-MM-DD');\n const endDay = (breaks || []).filter(Boolean).reduce((endDate, brk) => {\n if (brk.startDate && moment.utc(brk.startDate, 'YYYY-MM-DD').isAfter(endDate, 'day')) return endDate;\n return endDate.add(brk?.totalWeeks || 0, 'weeks');\n }, moment.utc(startDate, 'YYYY-MM-DD').add(totalRounds, 'weeks'))\n const range = translate('ra.date.range', { date1: draftStart.format('YYYY-MM-DD'), date2: endDay.subtract(1, 'day').format('YYYY-MM-DD') })\n const rangeTotalWeeks = translate('ra.date.phrase.week', totalRounds)\n message += ` (${rangeTotalWeeks}, ${range})`;\n }\n helperText.push(message)\n }\n return helperText.join('\\n')\n })()\n\n useEffect(() => {\n if (type === 'Double Rotation' && weekdays?.length > 1 && scheduleTeams && !isEven(scheduleTeams.length)) {\n setAlert({ step: STEPS.SCHEDULING, severity: 'info', message: translate('resources.draftGames.messages.unslotted_matchups_alert') })\n } else {\n setAlert()\n }\n }, [type, roundType, weekdays, scheduleTeams, setAlert, translate])\n\n return <Grid container spacing={2} fullWidth>\n <Grid item xs={12}>\n <DraftGameRoundTypeEnumInput\n source=\"roundType\"\n label=\"resources.draftGames.labels.round_type\"\n helperText=\"ra.message.optional\"\n {...inputProps}\n />\n </Grid>\n {roundType === ROUND_TYPES.WEEKDAYS && <Grid item xs={12}>\n <DayEnumInput\n source=\"weekdays\"\n label=\"resources.draftGames.labels.weekdays\"\n helperText={false}\n select\n multiple\n abbreviation={false}\n sortValues={false}\n {...inputProps}\n />\n </Grid>}\n {roundType === ROUND_TYPES.WEEKDAYS && <Grid item xs={12}>\n <DraftGameWeekdaysTypeEnumInput\n source=\"weekdaysType\"\n label=\"resources.draftGames.labels.weekdays_type\"\n helperText={weekdaysTypeHelperText}\n initialValue={WEEKDAYS_TYPES.CONSECUTIVE}\n radio\n {...inputProps}\n />\n </Grid>}\n\n {(roundType === ROUND_TYPES.HOME_SLOTS || roundType === ROUND_TYPES.WEEKDAYS) && <>\n <Grid item xs={12}>\n <DateInput\n source=\"startDate\"\n label=\"resources.draftGames.labels.start_date\"\n helperText={startDateHelperText}\n initialValue={schedule?.startDate}\n {...inputProps}\n />\n </Grid>\n <Grid item xs={12}>\n <ArrayInput source=\"breaks\" label=\"resources.draftGames.labels.breaks\" {...inputProps}>\n <HorizontalFormIterator hideIndex TransitionProps={TransitionProps}>\n <InlineDateInput source=\"startDate\" label=\"resources.draftGames.labels.start_date\" {...inputProps} />\n <NumberInput source=\"totalWeeks\" label=\"resources.draftGames.labels.total_weeks\" {...inputProps} />\n </HorizontalFormIterator>\n </ArrayInput>\n </Grid>\n </>}\n </Grid>\n}\n","import React, { useEffect } from 'react';\nimport { NumberInput, useTranslate } from 'react-admin';\nimport { Grid, Typography, makeStyles } from '@material-ui/core';\nimport { useForm, useFormState } from 'react-final-form';\nimport { useSelector } from 'react-redux';\n\nimport { FF_DRAFT_LIMIT_BYES } from '@hisports/common/featureFlags';\nimport { toArray } from '@hisports/common/src/lodash';\n\nimport { useFlag } from '../../../../http';\nimport { DraftGameMethodInput, DraftGameTypeInput } from '../../../../common/inputs/EnumInputs';\nimport SwitchInput from '../../../../common/inputs/SwitchInput';\nimport { InformationTooltip } from '../../../../common/InformationTooltip';\n\nimport { METHODS, TYPES } from './Generator';\nimport { useGeneratorContext } from './GeneratorContext';\nimport { ScheduleGroupInput } from '../../../groups/GroupInput';\nimport { PoolInput } from '../../../pools/PoolInput';\nimport { useScheduleGroupingType } from '../../../scheduleSettings';\n\nconst useStyles = makeStyles(theme => ({\n hide: {\n display: 'none'\n },\n poolInput: {\n display: 'flex',\n alignItems: 'center'\n },\n}))\n\nconst inputProps = {\n variant: 'outlined',\n margin: 'none',\n fullWidth: true,\n}\n\nconst CrossPoolBooleanInput = ({ scheduleId, ...props }) => {\n const translate = useTranslate();\n const { values: { poolIds, crossPool, method, type } } = useFormState();\n const { change } = useForm();\n const { isPools } = useScheduleGroupingType(scheduleId);\n const classes = useStyles();\n\n const pools = useSelector(state => state.admin.resources.pools.data);\n\n const schedulePools = toArray(pools).filter(pool => pool.scheduleId === scheduleId);\n const isTotalRounds = method === METHODS.TOTAL_ROUNDS;\n const isSingleRotation = type === TYPES.SINGLE_ROTATION;\n\n const enableInput = isPools && schedulePools?.length > 1 && poolIds?.length === 2 && isTotalRounds && isSingleRotation;\n\n useEffect(() => {\n if (crossPool && !enableInput) {\n change('crossPool', false);\n }\n }, [crossPool, enableInput, change]);\n\n return <div className={classes.poolInput}>\n <SwitchInput label=\"resources.draftGames.labels.cross_pool\" disabled={!enableInput} helperText={false} {...props} />\n <div>\n <InformationTooltip text={translate(\"resources.draftGames.helpers.cross_pool\")} />\n </div>\n </div>\n}\n\nexport const Matchups = props => {\n const translate = useTranslate();\n const isEnabled = useFlag();\n const { values } = useFormState();\n const classes = useStyles();\n const { schedule, lastPublishedDraftRound, setGroupId, setPoolIds, setShowMatrix, scheduleTeams } = useGeneratorContext()\n const { groupId, poolIds, type, method, limitByes } = values;\n\n const startRoundHelperText = (() => {\n let helperText = translate('resources.draftGames.helpers.start_round');\n if (lastPublishedDraftRound) {\n helperText += `\\n${translate('resources.draftGames.helpers.latest_round', lastPublishedDraftRound)}`;\n }\n return helperText;\n })()\n\n useEffect(() => {\n setGroupId(groupId || null);\n setPoolIds(poolIds || []);\n }, [groupId, poolIds, setGroupId, setPoolIds]);\n\n useEffect(() => {\n setShowMatrix(type === TYPES.MATRIX);\n }, [type, setShowMatrix])\n\n const showLimitByes = type === TYPES.SINGLE_ROTATION && (isEnabled(FF_DRAFT_LIMIT_BYES) || limitByes != null);\n const showStartRound = method !== METHODS.GAMES_PER_TEAM;\n const showMatrixOption = method === METHODS.GAMES_PER_TEAM;\n\n return <Grid container spacing={2}>\n <Grid item xs={12}>\n <ScheduleGroupInput source=\"groupId\" scheduleId={schedule.id} showNone={translate('ra.message.no_group')} {...inputProps} />\n <PoolInput source=\"poolIds\" scheduleId={schedule.id} label={null} multiple {...inputProps} />\n <CrossPoolBooleanInput source=\"crossPool\" scheduleId={schedule.id} {...inputProps} />\n </Grid>\n <Grid item xs={12}>\n <Typography variant=\"body1\"> {translate('resources.draftGames.labels.number_of_teams')}: {scheduleTeams.length} </Typography>\n </Grid>\n <Grid item xs={12}>\n <DraftGameMethodInput\n source=\"method\"\n label=\"resources.draftGames.labels.method\"\n helperText={false}\n radio\n row={false}\n {...inputProps}\n />\n </Grid>\n <Grid item xs={12}>\n <NumberInput source=\"gamesPerTeam\" label=\"resources.draftGames.labels.games_per_team\" min={0} max={999} helperText={false} className={values?.method !== METHODS.GAMES_PER_TEAM ? classes.hide : null} {...inputProps} />\n <NumberInput source=\"totalRounds\" label=\"resources.draftGames.labels.total_rounds\" min={0} max={999} helperText={false} className={values?.method !== METHODS.TOTAL_ROUNDS ? classes.hide : null} {...inputProps} />\n </Grid>\n <Grid item xs={12}>\n <DraftGameTypeInput\n source=\"type\"\n label=\"resources.draftGames.labels.type\"\n showMatrixOption={showMatrixOption}\n helperText={false}\n radio\n row={false}\n {...inputProps}\n />\n </Grid>\n {showLimitByes && <Grid item xs={12}>\n <SwitchInput\n source=\"limitByes\"\n label=\"resources.draftGames.labels.limit_byes\"\n helperText=\"resources.draftGames.helpers.limit_byes\"\n />\n </Grid>}\n {showStartRound && <Grid item xs={12}>\n <NumberInput source=\"startRound\" label=\"resources.draftGames.labels.start_round\" helperText={startRoundHelperText} {...inputProps} />\n </Grid>}\n </Grid>\n}\n","import React, { Fragment, useRef } from 'react'\nimport { SimpleForm, useTranslate } from \"react-admin\";\nimport createCalculator from 'final-form-calculate';\nimport { Dialog, DialogContent, DialogTitle } from '@material-ui/core';\n\nimport { isEmpty } from '@hisports/parsers';\n\nimport { DialogFormToolbar } from '../../../../common/dialogs/DialogForm';\nimport { ScheduleInput } from '../../ScheduleInput';\nimport { ScheduleGroupInput } from '../../../groups/GroupInput';\nimport { TeamInput } from '../../../teams/TeamInput';\n\nconst inputProps = {\n variant: 'outlined',\n margin: 'normal',\n fullWidth: true,\n}\n\nconst validate = ({ scheduleId: crossScheduleId, groupId: crossGroupId, teamId: crossTeamId }, scheduleId, groupId, matrixTeams = []) => {\n const errors = {};\n\n if (!crossScheduleId) errors.scheduleId = 'ra.validation.required'\n if (matrixTeams.some(team => team.teamId === crossTeamId)) errors.teamId = 'resources.draftGames.validations.matrix_team_duplicate';\n if (crossScheduleId === scheduleId && crossGroupId === groupId) errors.teamId = 'resources.draftGames.validations.same_group';\n if (!crossTeamId) errors.teamId = 'ra.validation.required';\n\n return errors\n}\n\nconst AddCrossTeamForm = ({ onSubmit, schedule, ...props }) => {\n const translate = useTranslate();\n const seasonId = schedule.seasonId\n\n const decorators = useRef([createCalculator({\n field: 'scheduleId',\n updates: {\n groupId: (scheduleId, values, prevValues) => {\n if (!isEmpty(prevValues) && prevValues.scheduleId !== scheduleId) return\n return values?.groupId\n },\n teamId: (scheduleId, values, prevValues) => {\n if (!isEmpty(prevValues) && prevValues.scheduleId !== scheduleId) return\n return values?.teamId\n }\n }\n }, {\n field: 'groupId',\n updates: {\n teamId: (groupId, values, prevValues) => {\n if (!isEmpty(prevValues) && prevValues.groupId !== groupId) return\n return values?.teamId\n }\n }\n })])\n\n return <SimpleForm save={onSubmit} decorators={decorators.current} component={Fragment}\n toolbar={<DialogFormToolbar submitLabel=\"ra.action.add\" />}\n {...props}>\n <ScheduleInput source=\"scheduleId\" label={translate('resources.draftGames.labels.cross_schedule')} {...inputProps} />\n <ScheduleGroupInput source=\"groupId\" showNone={translate('ra.message.no_group')} defaultValue={null} {...inputProps} />\n <TeamInput source=\"teamId\" label={translate('resources.draftGames.labels.cross_team')} filter={{ seasonId, _scope: 'Tenant' }} {...inputProps} />\n </SimpleForm>\n}\n\nexport const AddCrossTeamDialog = ({ isOpen, setOpen, schedule, groupId, onSubmit, teams, ...props }) => {\n const translate = useTranslate();\n const scheduleId = schedule?.id\n\n return <Dialog open={isOpen} fullWidth maxWidth=\"sm\" onClose={() => setOpen(false)} {...props}>\n <DialogTitle>{translate('resources.draftGames.labels.add_cross_team')}</DialogTitle>\n <DialogContent>\n <AddCrossTeamForm onSubmit={onSubmit} schedule={schedule} validate={values => validate(values, scheduleId, groupId, teams)} initialValues={{ scheduleId }} />\n </DialogContent>\n </Dialog>\n}\n","import React, { useEffect, useMemo, useRef, useState } from 'react'\nimport { RecordContextProvider, useInput, useRecordContext, useTranslate } from 'react-admin';\nimport { useForm, useFormState } from 'react-final-form';\nimport { Paper, Table, TableBody, TableRow, TableCell, TableContainer, TableHead, makeStyles, TextField, LinearProgress, Menu, MenuItem, FormControlLabel, Checkbox, Box, IconButton, Tooltip, Button, Typography, Chip, useTheme } from '@material-ui/core';\nimport { MergeType as MergeTypeIcon, MoreVert as MoreVertIcon, Add as AddIcon, Clear, Refresh } from '@material-ui/icons';\n\nimport { sum } from '@hisports/parsers';\nimport { getValidationDiff, unparseMatrix, clearMatrix } from '@hisports/scheduler/src/util/matrix';\n\nimport { apiClient } from '../../../../http';\nimport { TeamField } from '../../../teams/TeamField';\nimport { useElementSize } from '../../../../common/useElementSize';\nimport { ScheduleField } from '../../ScheduleField';\nimport { GroupField } from '../../../groups/GroupField';\n\nimport { useGeneratorContext } from './GeneratorContext';\nimport { AddCrossTeamDialog } from './CrossTeamDialog';\nimport { sortBy, uniqBy } from '@hisports/common/src/lodash';\n\nconst stickyStyle = (theme) => ({\n position: 'sticky',\n zIndex: 2,\n});\n\nconst stickyBothSidesStyle = {\n zIndex: 3\n}\n\nconst useStyles = makeStyles(theme => ({\n container: {\n // this height is to have top and bottom stickies working accordingly\n maxHeight: '67vh',\n },\n table: {\n width: '100%',\n tableLayout: 'fixed',\n borderCollapse: 'separate',\n '& th': {\n fontWeight: 500,\n },\n // not using mui stickyHeader props because it conflicts with left sticky behaviour\n '& thead th': {\n ...stickyStyle(theme),\n top: 0,\n verticalAlign: 'top',\n '&:first-child': stickyBothSidesStyle,\n '&:nth-child(2)': stickyBothSidesStyle\n },\n '& th:first-child': {\n ...stickyStyle(theme),\n left: 0,\n },\n '& th:nth-child(2)': {\n ...stickyStyle(theme),\n left: props => props.firstCellWidth,\n },\n '& tfoot :is(th, td)': {\n fontWeight: 500,\n ...stickyStyle(theme),\n bottom: 0,\n '&:first-child': stickyBothSidesStyle,\n '&:nth-child(2)': stickyBothSidesStyle\n },\n },\n headerCells: {\n borderBottom: `2px solid ${theme.palette.divider}`,\n backgroundColor: theme.palette.background.paper,\n fontWeight: 500,\n },\n footerCells: {\n borderTop: `2px solid ${theme.palette.divider}`,\n borderRight: `2px solid ${theme.palette.divider}`,\n backgroundColor: theme.palette.background.paper,\n fontWeight: 500,\n },\n firstColumns: {\n width: theme.spacing(45),\n },\n totalColumns: {\n width: theme.spacing(8),\n },\n teamColumn: {\n width: props => props?.compactMode ? theme.spacing(8) : theme.spacing(16)\n },\n overflowColumn: {\n width: '100%',\n overflow: 'hidden',\n },\n teamRow: {\n height: props => props?.compactMode ? theme.spacing(8) : theme.spacing(16),\n },\n crossTooltip: {\n verticalAlign: '-15%'\n },\n group: {\n display: 'flex',\n alignItems: 'center',\n gap: props => props?.gap || theme.spacing(2),\n },\n stack: {\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n gap: theme.spacing(.5)\n },\n chip: {\n alignSelf: 'center',\n marginBlock: theme.spacing(.5),\n },\n logo: {\n width: props => theme.spacing(props?.logoSpacing || 4),\n height: props => theme.spacing(props?.logoSpacing || 4),\n objectFit: 'contain',\n }\n}))\n\nconst PoolChip = ({ pool, poolHighlight, setPoolHighlight, ...props }) => {\n const classes = useStyles()\n const { isPools } = useGeneratorContext()\n\n const color = poolHighlight === pool?.id ? 'primary' : 'default'\n const onClick = () => setPoolHighlight(prev => prev === pool.id ? null : pool.id)\n\n if (!pool || !isPools) return null;\n return <Chip label={pool.name} size=\"small\" color={color} className={classes.chip} onClick={onClick} {...props} />\n}\n\nconst TeamLogo = ({ team, spacing = 4 }) => {\n const classes = useStyles({ logoSpacing: spacing })\n const logoUrl = team?.team?.logo?.url;\n\n if (!logoUrl) return null;\n return <img src={logoUrl} alt={team.name} className={classes.logo} />\n}\n\nconst CrossTeamTooltip = ({ schedule, ...props }) => {\n const translate = useTranslate();\n const team = useRecordContext(props);\n const classes = useStyles();\n const { isGroups } = useGeneratorContext();\n const { scheduleId, groupId, isCrossTeam } = team\n\n if (!isCrossTeam || !isGroups) return null;\n\n const CrossSchedulingDetails = <span>\n {schedule?.id !== scheduleId && <>{translate('resources.draftGames.labels.cross_schedule')}: <ScheduleField source=\"scheduleId\" link={false} variant=\"inherit\" /></>}\n {schedule?.id !== scheduleId && groupId && <br />}\n {groupId && <>{translate('resources.draftGames.labels.cross_group')}: <GroupField source=\"groupId\" link={false} variant=\"inherit\" /></>}\n </span>\n\n return <Tooltip title={CrossSchedulingDetails} placement=\"top\" className={classes.crossTooltip}>\n <MergeTypeIcon fontSize=\"small\" />\n </Tooltip>\n}\n\nconst useToggle = (initialValue = false) => {\n const [value, setValue] = useState(initialValue);\n const toggle = () => setValue(currentValue => !currentValue);\n\n return [value, toggle];\n}\n\nconst MatrixOptions = ({\n showOrganisation, toggleShowOrganisation,\n showShortNames, toggleShowShortNames,\n compactMode, toggleCompactMode, setCrossTeamDialogOpen,\n uniquePools, poolHighlight, setPoolHighlight,\n handleResetMatrix, handleRecalculateMatrix\n}) => {\n const [ anchor, setAnchor ] = useState(null)\n const toggleMenu = e => setAnchor(anchor => anchor ? !anchor : e.currentTarget)\n const handleClose = () => setAnchor(null)\n const translate = useTranslate();\n const classes = useStyles({ gap: 8 })\n const { isGroups, isPools } = useGeneratorContext()\n\n return (\n <Box sx={{ display: 'flex', alignItems: 'center', mb: 2, justifyContent: 'flex-start' }}>\n <Box>\n {isPools && !!uniquePools?.length && <div className={classes.stack} style={{ alignItems: 'baseline' }}>\n <Typography variant=\"caption\">{translate('resources.pools.messages.select_highlight')}</Typography>\n <div className={classes.group}>\n {uniquePools.map(pool => <PoolChip key={pool.id} pool={pool} poolHighlight={poolHighlight} setPoolHighlight={setPoolHighlight} />)}\n </div>\n </div>}\n </Box>\n\n <Box sx={{ display: 'flex', alignItems: 'center', gap: 1, marginLeft: 'auto' }}>\n <Button color=\"secondary\" startIcon={<Clear />} onClick={handleResetMatrix}>\n {translate('ra.action.clear')}\n </Button>\n <Button color=\"secondary\" startIcon={<Refresh />} onClick={handleRecalculateMatrix}>\n {translate('ra.action.recalculate')}\n </Button>\n {isGroups && <Button color=\"primary\" startIcon={<AddIcon />} onClick={() => setCrossTeamDialogOpen(true)}>\n {translate('resources.draftGames.labels.add_cross_team')}\n </Button>}\n <IconButton onClick={toggleMenu}><MoreVertIcon /></IconButton>\n </Box>\n <Menu\n classes={{ paper: classes.menu }}\n anchorEl={anchor}\n open={anchor != null}\n onClose={handleClose}\n >\n <MenuItem>\n <FormControlLabel\n className={classes.controlLabel}\n control={<Checkbox checked={showOrganisation} onChange={toggleShowOrganisation} disabled={false} name=\"\" />}\n label={translate('resources.schedules.labels.matrix.show_organisation')}\n />\n </MenuItem>\n <MenuItem>\n <FormControlLabel\n className={classes.controlLabel}\n control={<Checkbox checked={!showShortNames} onChange={toggleShowShortNames} disabled={false} name=\"\" />}\n label={translate('resources.schedules.labels.matrix.show_full_names')}\n />\n </MenuItem>\n <MenuItem>\n <FormControlLabel\n className={classes.controlLabel}\n control={<Checkbox checked={compactMode} onChange={toggleCompactMode} disabled={false} name=\"\" />}\n label={translate('resources.schedules.labels.matrix.compact_mode')}\n />\n </MenuItem>\n </Menu>\n </Box>\n )\n}\n\nconst HomeAwayHeaderCell = ({ firstThRef, inverseMatrix }) => {\n const translate = useTranslate();\n const globalClasses = useStyles();\n\n return <TableCell ref={firstThRef} className={globalClasses.headerCells}>\n {translate(`resources.draftGames.labels.${inverseMatrix ? 'away' : 'home'}`)} vs {translate(`resources.draftGames.labels.${inverseMatrix ? 'home' : 'away'}`)} →\n </TableCell>\n}\n\nconst useTotalHeaderCellStyles = makeStyles(theme => ({\n cell: {\n borderRight: `4px solid ${theme.palette.divider}`,\n }\n}))\n\nconst TotalHeaderCell = (props) => {\n const translate = useTranslate();\n const globalClasses = useStyles();\n const classes = useTotalHeaderCellStyles();\n\n return <TableCell align=\"center\" className={`${globalClasses.headerCells} ${classes.cell}`}>\n {translate('resources.draftGames.labels.total')}\n </TableCell>\n}\n\nconst useTeamHeaderCellStyles = makeStyles(theme => ({\n cell: {\n borderRight: props => `${props?.isLastPoolTeam || props?.isLastTeam ? 4 : 2}px solid ${theme.palette.divider}`,\n backgroundColor: props => props?.isHighlighted ? theme.palette.lightBlue[50] : theme.palette.background.paper,\n },\n}))\n\nconst TeamHeaderCell = ({ team, lastTeamsByPool, poolHighlight, index, teams, compactMode, setPoolHighlight, showOrganisation, showShortNames, schedule }) => {\n const isHighlighted = team.pool?.id === poolHighlight;\n const isLastPoolTeam = lastTeamsByPool.some(lastTeam => lastTeam.teamId === team.teamId);\n const isLastTeam = index === teams.length - 1;\n const globalClasses = useStyles();\n const classes = useTeamHeaderCellStyles({ isHighlighted, isLastPoolTeam, isLastTeam });\n\n return <TableCell key={team.teamId} align=\"center\" className={`${globalClasses.headerCells} ${classes.cell}`}>\n {compactMode\n ? <div className={globalClasses.stack}>\n {index+1}\n <TeamLogo team={team} />\n </div>\n : <RecordContextProvider value={team}>\n <div className={globalClasses.stack}>\n <PoolChip pool={team.pool} poolHighlight={poolHighlight} setPoolHighlight={setPoolHighlight} />\n <TeamLogo team={team} spacing={8} />\n <TeamField source=\"teamId\" link={false} includeOffice={showOrganisation ? 'full' : null} showShortName={showShortNames} />\n <CrossTeamTooltip schedule={schedule} />\n </div>\n </RecordContextProvider>\n }\n </TableCell>\n}\n\nconst useRowTeamCellStyles = makeStyles(theme => ({\n cell: {\n backgroundColor: props => props?.isHighlighted ? theme.palette.lightBlue[50] : theme.palette.background.paper,\n borderBottom: props => `${props?.isLastPoolTeam ? 4 : 2}px solid ${theme.palette.divider}`,\n borderTop: props => props?.isFirstTeam ? `2px solid ${theme.palette.divider}` : null,\n borderRight: 'none',\n }\n}))\n\nconst RowTeamCell = ({ compactMode, isHighlighted, isLastPoolTeam, isFirstTeam, team, rowIndex, poolHighlight, setPoolHighlight, showOrganisation, showShortNames, schedule }) => {\n const globalClasses = useStyles();\n const classes = useRowTeamCellStyles({ isHighlighted, isLastPoolTeam, isFirstTeam });\n\n return <TableCell component=\"th\" scope=\"row\" className={classes.cell}>\n <div className={globalClasses.group}>\n {compactMode && <span style={{ minWidth: 16 }}>{rowIndex+1}</span>}\n <PoolChip pool={team.pool} poolHighlight={poolHighlight} setPoolHighlight={setPoolHighlight} />\n <TeamLogo team={team} spacing={compactMode ? 4 : 8} />\n <RecordContextProvider value={team}>\n <TeamField source=\"teamId\" link={false} includeOffice={showOrganisation ? 'full' : null} showShortName={showShortNames} noWrap />\n <CrossTeamTooltip schedule={schedule} />\n </RecordContextProvider>\n </div>\n </TableCell>\n}\n\nconst useRowTotalCellStyles = makeStyles(theme => ({\n cell: {\n backgroundColor: props => props?.isHighlighted ? theme.palette.lightBlue[50] : theme.palette.background.paper,\n borderBottom: props => `${props?.isLastPoolTeam ? 4 : 2}px solid ${theme.palette.divider}`,\n borderTop: props => props?.isFirstTeam ? `2px solid ${theme.palette.divider}` : null,\n borderRight: `4px solid ${theme.palette.divider}`,\n }\n}))\n\nconst RowTotalCell = ({ cellDiff, team, rowSum, isHighlighted, isLastPoolTeam, isFirstTeam }) => {\n const classes = useRowTotalCellStyles({ isHighlighted, isLastPoolTeam, isFirstTeam })\n return <ValidatedTotalCell\n component=\"th\"\n scope=\"row\"\n align=\"center\"\n cellDiff={cellDiff}\n skipValidation={team.isCrossTeam}\n className={classes.cell}\n >\n {rowSum}\n </ValidatedTotalCell>\n}\n\nconst useMatrixCellStyles = makeStyles(theme => ({\n cell: {\n backgroundColor: props => props?.isHighlighted ? theme.palette.lightBlue[50] : null,\n borderRight: props => `${props?.isLastPoolTeamX || props?.isLastTeamX ? 4 : 2}px solid ${theme.palette.divider}`,\n borderBottom: props => `${props?.isLastPoolTeamY ? 4 : 2}px solid ${theme.palette.divider}`,\n borderTop: props => props?.isFirstTeamY ? `2px solid ${theme.palette.divider}` : null,\n },\n disabledCell: {\n backgroundColor: theme.palette.action.disabledBackground,\n },\n input: {\n padding: theme.spacing(.5),\n textAlign: 'center',\n }\n}));\n\nconst MatrixCell = ({ teams, columnIndex, team, poolHighlight, rowIndex, lastTeamsByPool, matrixTable, handleCellChange, inverseMatrix }) => {\n const theme = useTheme();\n const xTeamId = teams[columnIndex].teamId\n const yTeamId = team.teamId\n const isLastPoolTeamX = lastTeamsByPool.some(lastTeam => lastTeam.teamId === xTeamId)\n const isLastPoolTeamY = lastTeamsByPool.some(lastTeam => lastTeam.teamId === yTeamId)\n const isLastTeamX = columnIndex === teams.length - 1;\n const isFirstTeamY = rowIndex === 0;\n const isHighlighted = [teams[columnIndex]?.pool?.id, team.pool?.id].includes(poolHighlight) && rowIndex !== columnIndex;\n const classes = useMatrixCellStyles({ isLastPoolTeamX, isLastPoolTeamY, isLastTeamX, isFirstTeamY, isHighlighted })\n\n const highlightBorders = {}\n if (isLastPoolTeamX) highlightBorders.borderRight = `4px solid ${theme.palette.divider}`\n if (isLastPoolTeamY) highlightBorders.borderBottom = `4px solid ${theme.palette.divider}`\n\n const linearIndex = rowIndex * matrixTable[0].length + columnIndex;\n const totalCells = matrixTable.length * matrixTable[0].length;\n\n const handleKeyDown = (e) => {\n if (e.key === 'Tab') {\n e.preventDefault();\n\n // find next index\n const shift = e.shiftKey ? -1 : 1;\n let nextIndex = linearIndex + shift;\n\n // find the next valid input element\n let nextInput = null;\n while (!nextInput && nextIndex >= 0 && nextIndex < totalCells) {\n nextInput = document.querySelector(`input[data-index=\"${nextIndex}\"]`);\n if (!nextInput) {\n // skip invalid cells\n nextIndex += shift;\n }\n }\n\n if (nextInput) {\n nextInput.focus();\n }\n }\n };\n\n return (\n <TableCell\n key={`${yTeamId}-${xTeamId}`}\n align=\"center\"\n className={`${rowIndex === columnIndex ? classes.disabledCell : classes.cell}`}\n >\n {rowIndex !== columnIndex && <TextField\n inputProps={{\n className: `${classes.input}`,\n 'data-index': linearIndex,\n tabIndex: 0,\n }}\n autoFocus={!rowIndex && !columnIndex}\n variant=\"outlined\"\n value={inverseMatrix ? matrixTable[columnIndex][rowIndex] : matrixTable[rowIndex][columnIndex]}\n onChange={e => handleCellChange(e.target.value, rowIndex, columnIndex)}\n onKeyDown={handleKeyDown}\n />\n }\n </TableCell>\n )\n}\n\nconst useTotalLabelFooterCellStyles = makeStyles(theme => ({\n cell: {\n borderRight: 'none',\n }\n}))\n\nconst TotalLabelFooterCell = (props) => {\n const translate = useTranslate();\n const classes = useTotalLabelFooterCellStyles();\n const globalClasses = useStyles();\n\n return <TableCell component=\"th\" scope=\"row\" className={`${globalClasses.footerCells} ${classes.cell}`}>\n {translate('resources.draftGames.labels.total')}\n </TableCell>\n}\n\nconst useTotalFooterCellStyles = makeStyles(theme => ({\n cell: {\n borderRight: `4px solid ${theme.palette.divider}`,\n whiteSpace: 'nowrap',\n }\n}))\n\nconst TotalFooterCell = ({ totalDiff, matrixTable }) => {\n const globalClasses = useStyles();\n const classes = useTotalFooterCellStyles();\n\n return <ValidatedTotalCell cellDiff={totalDiff} component=\"th\" scope=\"row\" align=\"center\" className={`${globalClasses.footerCells} ${classes.cell}`}>\n {sum(matrixTable)}\n </ValidatedTotalCell>\n}\n\nconst useTeamTotalFooterCellStyles = makeStyles(theme => ({\n cell: {\n borderRight: props => `${props?.isLastPoolTeam || props?.isLastTeam ? 4 : 2}px solid ${theme.palette.divider}`,\n backgroundColor: props => props?.isHighlighted ? theme.palette.lightBlue[50] : theme.palette.background.paper,\n }\n}))\n\nconst TeamTotalFooterCell = ({ inverseMatrix, columnTotals, columnIndex, rowTotals, gamesPerTeam, team, poolHighlight, lastTeamsByPool, teams }) => {\n const rowSum = inverseMatrix ? columnTotals[columnIndex] : rowTotals[columnIndex]\n const columnSum = inverseMatrix ? rowTotals[columnIndex] : columnTotals[columnIndex]\n const cellDiff = getValidationDiff(gamesPerTeam, columnSum, rowSum)\n\n const isHighlighted = team.pool?.id === poolHighlight;\n const isLastPoolTeam = lastTeamsByPool.some(lastTeam => lastTeam.teamId === team.teamId);\n const isLastTeam = columnIndex === teams.length - 1;\n const globalClasses = useStyles();\n const classes = useTeamTotalFooterCellStyles({ isLastPoolTeam, isLastTeam, isHighlighted });\n\n return (\n <ValidatedTotalCell key={team.teamId} align=\"center\" cellDiff={cellDiff} skipValidation={team.isCrossTeam} className={`${globalClasses.footerCells} ${classes.cell}`}>\n {columnSum}\n </ValidatedTotalCell>\n )\n}\n\nconst getValidationStyles = (cellDiff, theme) => {\n if (!cellDiff) return;\n\n // over - red\n if (cellDiff == 1) return { backgroundColor: [theme.palette.error[300], '!important'], color: theme.palette.error.contrastText };\n if (cellDiff == 2) return { backgroundColor: [theme.palette.error[400], '!important'], color: theme.palette.error.contrastText };\n if (cellDiff == 3) return { backgroundColor: [theme.palette.error[500], '!important'], color: theme.palette.error.contrastText };\n if (cellDiff == 4) return { backgroundColor: [theme.palette.error[600], '!important'], color: theme.palette.error.contrastText };\n if (cellDiff >= 5) return { backgroundColor: [theme.palette.error[700], '!important'], color: theme.palette.error.contrastText };\n\n // under - blue\n if (cellDiff == -1) return { backgroundColor: [theme.palette.primary[300], '!important'], color: theme.palette.primary.contrastText };\n if (cellDiff == -2) return { backgroundColor: [theme.palette.primary[400], '!important'], color: theme.palette.primary.contrastText };\n if (cellDiff == -3) return { backgroundColor: [theme.palette.primary[500], '!important'], color: theme.palette.primary.contrastText };\n if (cellDiff == -4) return { backgroundColor: [theme.palette.primary[600], '!important'], color: theme.palette.primary.contrastText };\n if (cellDiff <= -5) return { backgroundColor: [theme.palette.primary[700], '!important'], color: theme.palette.primary.contrastText };\n}\n\nconst useValidationStyles = makeStyles(theme => ({\n validation: ({ cellDiff }) => getValidationStyles(cellDiff, theme),\n}));\n\nconst ValidatedTotalCell = ({ cellDiff, skipValidation, children, className: tableCellClasses, ...tableCellProps }) => {\n const classes = useValidationStyles({ cellDiff });\n\n return <TableCell {...tableCellProps} className={`${tableCellClasses} ${skipValidation ? '' : classes.validation}`} >\n {children}\n {cellDiff !== 0 && !skipValidation && <>{' '}({cellDiff})</>}\n </TableCell>\n}\n\nexport const Matrix = ({ source = 'matrixTable' }) => {\n const { values } = useFormState();\n const { mutators } = useForm();\n const { schedule, groupId, scheduleTeams } = useGeneratorContext()\n const firstThRef = useRef();\n const { width: firstCellWidth } = useElementSize(firstThRef.current)\n const [ generateMatrixLoaded, setGenerateMatrixLoaded ] = useState(false);\n const [ generateMatrixLoading, setGenerateMatrixLoading ] = useState(true);\n const [ inverseMatrix, setInverseMatrix ] = useState(true) // hardcoded away rows, home columns\n const { input: { value: matrixTable, onChange } } = useInput({ source })\n const [ isCrossTeamDialogOpen, setCrossTeamDialogOpen ] = useState(false);\n const [ showOrganisation, toggleShowOrganisation ] = useToggle(false);\n const [ showShortNames, toggleShowShortNames ] = useToggle(true);\n const [ compactMode, toggleCompactMode ] = useToggle(true);\n const [ recalculateTrigger, setRecalculateTrigger ] = useState(false);\n const [ poolHighlight, setPoolHighlight ] = useState(null);\n const classes = useStyles({ firstCellWidth, compactMode })\n\n const { gamesPerTeam, crossScheduleTeams = [] } = values;\n\n const teams = useMemo(() => {\n const allTeams = [...scheduleTeams, ...crossScheduleTeams\n .map(crossScheduleTeam => ({ isCrossTeam: true, ...crossScheduleTeam }))]\n\n return sortBy(allTeams, 'pool.name', 'order')\n }, [scheduleTeams, crossScheduleTeams])\n\n useEffect(() => {\n if (matrixTable) return\n\n setGenerateMatrixLoaded(false)\n setGenerateMatrixLoading(true)\n\n apiClient(`/schedules/${schedule.id}/generateMatrix`, { params: {\n groupId,\n generationOptions: { gamesPerTeam }\n } })\n .then(res => res.data)\n .then(matrix => {\n const matrixTable = unparseMatrix(matrix)\n onChange(matrixTable)\n })\n .catch(err => {\n onChange()\n })\n .finally(() => {\n setGenerateMatrixLoaded(true)\n setGenerateMatrixLoading(false)\n })\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [ schedule.id, groupId, gamesPerTeam, recalculateTrigger ])\n\n const handleResetMatrix = () => {\n const newMatrixTable = clearMatrix(matrixTable);\n onChange(newMatrixTable);\n }\n\n const handleRecalculateMatrix = () => {\n onChange()\n setRecalculateTrigger(prev => !prev)\n }\n\n const handleCellChange = (value, rowIndex, columnIndex) => {\n if (isNaN(value)) return\n\n // maximum 3 digits\n if (value.length > 3) {\n value = parseInt(value.toString().slice(0, 3))\n }\n\n const table = [...matrixTable]\n\n if (inverseMatrix) {\n table[columnIndex][rowIndex] = Number(value)\n } else {\n table[rowIndex][columnIndex] = Number(value)\n }\n\n onChange(table)\n }\n\n const onCrossTeamSubmit = (crossTeam) => {\n onChange([\n ...matrixTable.map(row => [...row, 0]), // add zeroes at end of each row\n Array(matrixTable.length + 1).fill(0, 0, matrixTable.length).fill(null, matrixTable.length) // add row [0, 0, ... , 0, null]\n ])\n mutators.push('crossScheduleTeams', crossTeam)\n setCrossTeamDialogOpen(false)\n }\n\n if (!matrixTable && (generateMatrixLoading || !generateMatrixLoaded)) return <LinearProgress />;\n if (!matrixTable) return null;\n\n const totalGames = (scheduleTeams.length * gamesPerTeam) / 2\n const totalDiff = sum(matrixTable) - totalGames\n\n const rowTotals = matrixTable.map(sum)\n const columnTotals = matrixTable.map((row, index) => sum(matrixTable.map(row => row[index])))\n\n const uniquePools = uniqBy(teams, 'pool.id').map(team => team.pool).filter(Boolean)\n const lastTeamsByPool = (uniquePools || []).map(pool => teams.filter(team => team.pool?.id === pool.id).pop())\n\n return (\n <>\n <div>\n <MatrixOptions\n showOrganisation={showOrganisation} toggleShowOrganisation={toggleShowOrganisation}\n showShortNames={showShortNames} toggleShowShortNames={toggleShowShortNames}\n compactMode={compactMode} toggleCompactMode={toggleCompactMode}\n isCrossTeamDialogOpen={isCrossTeamDialogOpen} setCrossTeamDialogOpen={setCrossTeamDialogOpen}\n uniquePools={uniquePools} poolHighlight={poolHighlight} setPoolHighlight={setPoolHighlight}\n handleResetMatrix={handleResetMatrix} handleRecalculateMatrix={handleRecalculateMatrix}\n />\n </div>\n <TableContainer component={Paper} className={classes.container} elevation={0}>\n <Table className={classes.table}>\n <colgroup>\n <col className={classes.firstColumns} />\n <col className={classes.totalColumns} />\n {teams.map((team) => (\n <col key={team.teamId} className={classes.teamColumn} />\n ))}\n <col className={classes.overflowColumn} />\n </colgroup>\n <TableHead>\n <TableRow>\n <HomeAwayHeaderCell firstThRef={firstThRef} inverseMatrix={inverseMatrix} />\n <TotalHeaderCell />\n {teams.map((team, index) => <TeamHeaderCell\n key={team.teamId}\n team={team}\n lastTeamsByPool={lastTeamsByPool}\n poolHighlight={poolHighlight}\n index={index}\n teams={teams}\n compactMode={compactMode}\n setPoolHighlight={setPoolHighlight}\n showOrganisation={showOrganisation}\n showShortNames={showShortNames}\n schedule={schedule}\n />)}\n </TableRow>\n </TableHead>\n <TableBody>\n {teams.map((team, rowIndex) => {\n const rowSum = inverseMatrix ? columnTotals[rowIndex] : rowTotals[rowIndex]\n const columnSum = inverseMatrix ? rowTotals[rowIndex] : columnTotals[rowIndex]\n const cellDiff = getValidationDiff(gamesPerTeam, rowSum, columnSum)\n const isLastPoolTeam = lastTeamsByPool.some(lastTeam => lastTeam.teamId === team.teamId)\n const isFirstTeam = rowIndex === 0;\n const isHighlighted = team.pool?.id === poolHighlight;\n\n return (\n <TableRow key={team.teamId} className={classes.teamRow}>\n <RowTeamCell\n compactMode={compactMode}\n isLastPoolTeam={isLastPoolTeam}\n isFirstTeam={isFirstTeam}\n isHighlighted={isHighlighted}\n team={team}\n poolHighlight={poolHighlight}\n setPoolHighlight={setPoolHighlight}\n lastTeamsByPool={lastTeamsByPool}\n rowIndex={rowIndex}\n showOrganisation={showOrganisation}\n schedule={schedule}\n showShortNames={showShortNames}\n />\n <RowTotalCell cellDiff={cellDiff} team={team} rowSum={rowSum} isHighlighted={isHighlighted} isLastPoolTeam={isLastPoolTeam} isFirstTeam={isFirstTeam} />\n {matrixTable[rowIndex].map((cell, columnIndex) => {\n return <MatrixCell\n teams={teams}\n columnIndex={columnIndex}\n team={team}\n poolHighlight={poolHighlight}\n rowIndex={rowIndex}\n lastTeamsByPool={lastTeamsByPool}\n matrixTable={matrixTable}\n handleCellChange={handleCellChange}\n inverseMatrix={inverseMatrix}\n />\n })}\n </TableRow>\n )\n })}\n </TableBody>\n <tfoot>\n <TableRow>\n <TotalLabelFooterCell />\n <TotalFooterCell totalDiff={totalDiff} matrixTable={matrixTable} />\n {teams.map((team, columnIndex) => <TeamTotalFooterCell\n key={team.teamId}\n inverseMatrix={inverseMatrix}\n columnTotals={columnTotals}\n columnIndex={columnIndex}\n rowTotals={rowTotals}\n gamesPerTeam={gamesPerTeam}\n team={team}\n poolHighlight={poolHighlight}\n lastTeamsByPool={lastTeamsByPool}\n teams={teams}\n />)}\n </TableRow>\n </tfoot>\n </Table>\n </TableContainer>\n <AddCrossTeamDialog isOpen={isCrossTeamDialogOpen} setOpen={setCrossTeamDialogOpen} onSubmit={onCrossTeamSubmit} schedule={schedule} groupId={groupId} teams={teams} />\n </>\n );\n}\n","import React, { Fragment, useState, useRef } from 'react';\nimport { RecordContextProvider, SimpleForm, useDataProvider, useNotify, useRecordContext, useRefresh, useTranslate } from 'react-admin'\nimport { Dialog, DialogTitle, DialogContent, IconButton, Tooltip, makeStyles, LinearProgress, Stepper, StepLabel, Step, Typography } from '@material-ui/core';\nimport { Alert } from '@material-ui/lab'\nimport { Close } from '@material-ui/icons';\nimport createCalculator from 'final-form-calculate';\nimport moment from 'moment-timezone';\n\nimport { FF_DRAFT_DEFAULT_ROUNDS, FF_DRAFT_DEFAULT_SLOTS, FF_DRAFT_LIMIT_BYES } from '@hisports/common/featureFlags';\nimport { createRange } from '@hisports/common';\n\nimport { DialogFormToolbar } from '../../../../common/dialogs/DialogForm';\nimport { useFlag } from '../../../../http';\n\nimport { GeneratorContextProvider, useGeneratorContext } from './GeneratorContext';\nimport { Preview } from './Preview';\nimport { Scheduling } from './Scheduling';\nimport { Matchups } from './Matchups';\nimport { Matrix } from './Matrix';\nimport ScheduleSequenceAlert from '../../../schedulesequences/ScheduleSequenceAlert';\n\nexport const METHODS = {\n GAMES_PER_TEAM: 'Games per Team',\n TOTAL_ROUNDS: 'Total Rounds'\n}\n\nexport const TYPES = {\n SINGLE_ROTATION: 'Single Rotation',\n DOUBLE_ROTATION: 'Double Rotation',\n MATRIX: 'Matrix'\n}\n\nexport const ROUND_TYPES = {\n HOME_SLOTS: 'Home Slots',\n WEEKDAYS: 'Weekdays',\n DATES: 'Dates'\n}\n\nexport const WEEKDAYS_TYPES = {\n ROTATING: 'Rotating',\n CONSECUTIVE: 'Consecutive'\n}\n\nexport const STEPS = {\n MATCHUPS: 0,\n MATRIX: 1,\n SCHEDULING: 2,\n PREVIEW: 3,\n}\n\nconst isEven = n => n % 2 === 0;\n\nconst useStyles = makeStyles(theme => ({\n buttons: {\n position: 'absolute',\n top: theme.spacing(1),\n right: theme.spacing(1),\n },\n alert: {\n marginBottom: theme.spacing(2)\n },\n toolbar: {\n backgroundColor: 'white',\n position: 'sticky',\n bottom: theme.spacing(-1),\n zIndex: 10,\n borderTop: `1px solid ${theme.palette.divider}`,\n }\n}))\n\nconst formOptions = {\n destroyOnUnmount: true,\n enableReinitialize: false,\n forceUnregisterOnUnmount: true,\n}\n\nconst validate = (values = {}, activeStep, schedule, scheduleTeams = [], translate) => {\n const errors = {};\n const { method, roundType, weekdays, breaks, type } = values\n\n // matchup step\n if (activeStep === STEPS.MATCHUPS) {\n if (method === METHODS.GAMES_PER_TEAM) {\n if (values.gamesPerTeam <= 0 || values.gamesPerTeam > 999) {\n errors.gamesPerTeam = 'ra.validation.invalid_number'\n }\n if (values.gamesPerTeam == null) {\n errors.gamesPerTeam = 'ra.validation.required'\n }\n if (type === TYPES.MATRIX && !isEven(values.gamesPerTeam) && !isEven(scheduleTeams.length)) {\n errors.gamesPerTeam = 'resources.draftGames.validations.manual_odd_numbers'\n }\n }\n if (method === METHODS.TOTAL_ROUNDS) {\n if (values.totalRounds <= 0 || values.totalRounds > 999) {\n errors.totalRounds = 'ra.validation.invalid_number'\n }\n if (values.totalRounds == null) {\n errors.totalRounds = 'ra.validation.required'\n }\n }\n\n if (values.startRound != null && values.startRound <= 0) {\n errors.startRound = 'ra.validation.invalid_number'\n }\n }\n\n // scheduling step\n if (activeStep === STEPS.SCHEDULING) {\n if (roundType === ROUND_TYPES.WEEKDAYS) {\n if (!weekdays?.length) errors.weekdays = 'ra.validation.required'\n }\n\n if ([ROUND_TYPES.HOME_SLOTS, ROUND_TYPES.WEEKDAYS].includes(roundType)) {\n if (!values.startDate) errors.startDate = 'ra.validation.required'\n let day, startDate;\n if (startDate) {\n startDate = moment.utc(values.startDate, 'YYYY-MM-DD')\n day = startDate.format('dddd');\n }\n\n const earliestDate = startDate && moment.utc(startDate, 'YYYY-MM-DD').add(1, 'week');\n\n if (breaks) {\n errors.breaks = breaks?.map((brk, index, breaks) => {\n if (!brk) return {};\n const error = {}\n\n const brkStart = moment.utc(brk.startDate, 'YYYY-MM-DD')\n if (!brk.startDate || !brkStart.isValid()) {\n error.startDate = 'ra.validation.required';\n } else {\n if (day && brkStart.format('dddd') !== day) error.startDate = translate('resources.draftGames.validations.must_start_on_day', { day });\n if (earliestDate && brkStart.isBefore(earliestDate, 'day')) error.startDate = translate('resources.draftGames.validations.must_be_after', { date: moment(earliestDate).subtract(1, 'day').format('YYYY-MM-DD') });\n }\n\n if (!brk.totalWeeks) {\n error.totalWeeks = 'ra.validation.required'\n } else if (brk.totalWeeks <= 0) {\n error.totalWeeks = 'ra.validation.invalid_number';\n }\n\n if (brk.startDate && brk.totalWeeks > 0 && !error.startDate) {\n const brkEnd = moment.utc(brkStart).add(brk.totalWeeks + 1, 'weeks')\n\n if (schedule?.endDate) {\n const scheduleEndDate = moment.utc(schedule.endDate, 'YYYY-MM-DD')\n if (brkEnd.isAfter(scheduleEndDate, 'day')) error.startDate = translate('resources.draftGames.validations.must_be_before_schedule_end_date', { date: moment(scheduleEndDate).format('YYYY-MM-DD') })\n }\n if (index > 0) {\n const prev = breaks[index - 1];\n const brkRange = createRange(brkStart, brkEnd);\n if (prev?.startDate && prev?.totalWeeks) {\n const prevBrkStart = moment.utc(prev.startDate, 'YYYY-MM-DD');\n const prevBrkEnd = moment.utc(prev.startDate, 'YYYY-MM-DD').add(prev.totalWeeks + 1, 'weeks')\n const prevBrkRange = createRange(prevBrkStart, prevBrkEnd)\n if (brkRange.overlaps(prevBrkRange)) error.startDate = translate('resources.draftGames.validations.must_be_after', { date: prevBrkEnd.subtract(1, 'day').format('YYYY-MM-DD') })\n }\n }\n }\n\n return error;\n })\n }\n }\n }\n\n return errors;\n}\n\nconst GeneratorAlert = props => {\n const { alert, activeStep, loading, loaded } = useGeneratorContext()\n const classes = useStyles();\n\n if (!alert?.message || loading || !loaded || (alert?.step != null && alert.step !== activeStep)) return null\n\n return <Alert severity={alert.severity} className={classes.alert} {...props}>\n {alert.message}\n </Alert>\n}\n\nconst GeneratorToolbar = props => {\n const { alert, loaded } = useGeneratorContext()\n\n return <DialogFormToolbar {...props} disableSubmit={alert?.severity === 'error' || !loaded} />\n}\n\nconst GeneratorStepper = ({ showMatrix }) => {\n const translate = useTranslate();\n const { activeStep } = useGeneratorContext()\n\n const steps = [\n translate('resources.draftGames.labels.steps.matchups'),\n showMatrix && translate('resources.draftGames.labels.steps.matrix'),\n !showMatrix && translate('resources.draftGames.labels.steps.scheduling'),\n translate('resources.draftGames.labels.steps.preview'),\n ].filter(Boolean)\n\n let displayStep = activeStep\n\n if (activeStep === STEPS.MATRIX || activeStep === STEPS.SCHEDULING) {\n displayStep = 1\n } else if (activeStep === STEPS.PREVIEW) {\n displayStep = 2\n }\n\n return <Stepper activeStep={displayStep}>\n {steps.map((label) => (\n <Step key={label}>\n <StepLabel>{label}</StepLabel>\n </Step>\n ))}\n </Stepper>\n}\n\nconst GeneratorStep = ({ showMatrix, ...props }) => {\n const { activeStep, loading, loaded } = useGeneratorContext()\n\n if (loading || !loaded) return <LinearProgress />\n\n switch (activeStep) {\n case STEPS.MATCHUPS:\n return <Matchups {...props} />\n case STEPS.MATRIX:\n return <Matrix {...props} source=\"matrixTable\" />\n case STEPS.SCHEDULING:\n return <Scheduling {...props} />\n case STEPS.PREVIEW:\n return <Preview {...props} />;\n }\n return null;\n}\n\nconst GeneratorForm = ({ schedule, ...props }) => {\n const translate = useTranslate()\n const { scheduleTeams, activeStep } = useGeneratorContext()\n\n return <SimpleForm\n validate={(values) => validate(values, activeStep, schedule, scheduleTeams, translate)}\n {...props}\n />\n}\n\nexport default ({ schedule, isOpen, onClose }) => {\n const translate = useTranslate();\n const classes = useStyles();\n const isEnabled = useFlag();\n const dataProvider = useDataProvider();\n const notify = useNotify();\n const refresh = useRefresh();\n const record = useRecordContext();\n const dialogContentRef = useRef();\n\n schedule = schedule || record\n\n const initialFormValues = {\n groupId: null,\n method: isEnabled(FF_DRAFT_DEFAULT_ROUNDS) ? METHODS.TOTAL_ROUNDS : METHODS.GAMES_PER_TEAM,\n type: TYPES.SINGLE_ROTATION,\n limitByes: isEnabled(FF_DRAFT_LIMIT_BYES) || undefined,\n roundType: isEnabled(FF_DRAFT_DEFAULT_SLOTS) ? ROUND_TYPES.HOME_SLOTS : ROUND_TYPES.WEEKDAYS,\n games: []\n }\n\n const [ showMatrix, setShowMatrix ] = useState(initialFormValues.type === TYPES.MATRIX);\n const [ activeStep, setActiveStep ] = useState(0);\n\n // necessary to use step/showMatrix in the callback\n const stepRef = useRef();\n const showMatrixRef = useRef();\n stepRef.current = activeStep;\n showMatrixRef.current = showMatrix;\n\n const handleNext = () => {\n setActiveStep(activeStep => {\n const skipStep = (activeStep === STEPS.MATCHUPS && !showMatrixRef.current) || activeStep === STEPS.MATRIX\n return activeStep + (skipStep ? 2 : 1)\n });\n };\n\n const handleBack = () => {\n if (activeStep === 0) {\n onClose(true)\n return\n }\n setActiveStep(activeStep => {\n const skipStep = (activeStep === STEPS.PREVIEW && showMatrixRef.current) || activeStep === STEPS.SCHEDULING\n return activeStep - (skipStep ? 2 : 1)\n });\n }\n\n const decorators = useRef([createCalculator({\n field: 'method',\n updates: {\n gamesPerTeam: (method, values, prevValues) => {\n if (method !== METHODS.GAMES_PER_TEAM) return\n return values?.gamesPerTeam\n },\n totalRounds: (method, values, prevValues) => {\n if (method !== METHODS.TOTAL_ROUNDS) return\n return values?.totalRounds\n },\n type: (method, values, prevValues) => {\n if (method !== METHODS.GAMES_PER_TEAM && values?.type === TYPES.MATRIX) return TYPES.SINGLE_ROTATION\n return values?.type\n },\n }\n }, {\n field: 'type',\n updates: {\n matrixTable: (type, values, prevValues) => {\n if (type !== TYPES.MANUAL) return\n return values?.matrixTable\n },\n crossScheduleTeams: (type, values, prevValues) => {\n if (type !== TYPES.MANUAL) return\n return values?.crossScheduleTeams\n }\n }\n }, {\n field: 'gamesPerTeam',\n updates: {\n matrixTable: (gamesPerTeam, values, prevValues) => {\n if (gamesPerTeam !== prevValues?.gamesPerTeam) return\n return values?.matrixTable\n },\n crossScheduleTeams: (gamesPerTeam, values, prevValues) => {\n if (gamesPerTeam !== prevValues?.gamesPerTeam) return\n return values?.crossScheduleTeams\n }\n }\n }, {\n field: 'groupId',\n updates: {\n matrixTable: (groupId, values, prevValues) => {\n if (groupId !== prevValues?.groupId) return\n return values?.matrixTable\n },\n crossScheduleTeams: (groupId, values, prevValues) => {\n if (groupId !== prevValues?.groupId) return\n return values?.crossScheduleTeams\n }\n }\n }, {\n field: 'roundType',\n updates: {\n weekdays: (roundType, values, prevValues) => {\n const { weekdays } = values\n if (weekdays?.length && roundType !== ROUND_TYPES.WEEKDAYS) return\n return weekdays\n }\n }\n })])\n\n const onSubmit = async values => {\n if (stepRef.current !== STEPS.PREVIEW) return handleNext()\n const { games = [] } = values;\n\n if (!games.length) return;\n\n const draftGames = games.map(({ id, ...game }) => game)\n\n return dataProvider.createMany(\"draftGames\", { data: draftGames })\n .then(res => res.data)\n .then(data => {\n const total = data.length;\n const message = translate(`resources.draftGames.notifications.added`, total);\n\n onClose();\n notify(message, 'info');\n refresh();\n })\n .catch(() => {\n onClose();\n notify(`resources.draftGames.notifications.not_added`, 'error');\n })\n }\n\n const cancelLabel = activeStep === 0 ? \"ra.action.cancel\" : \"ra.action.back\"\n const submitLabel = activeStep === Math.max(...Object.values(STEPS)) ? \"ra.action.generate\" : \"ra.action.next\"\n\n return <Dialog\n maxWidth={activeStep === STEPS.MATRIX ? 'xl' : 'md'}\n fullWidth\n scroll=\"paper\"\n open={isOpen}\n onClose={onClose}\n >\n <DialogTitle>\n {translate('resources.schedules.labels.generate')}\n {schedule && <Typography variant=\"subtitle1\" color=\"textSecondary\">{schedule.name}</Typography>}\n </DialogTitle>\n <div className={classes.buttons}>\n <Tooltip title={translate('ra.action.close')}>\n <IconButton onClick={onClose}>\n <Close fontSize=\"small\" />\n </IconButton>\n </Tooltip>\n </div>\n <ScheduleSequenceAlert scheduleId={schedule?.id} style={{ marginInline: 16 }} />\n <GeneratorContextProvider schedule={schedule} activeStep={activeStep} setShowMatrix={setShowMatrix} showMatrix={showMatrix}>\n <GeneratorStepper showMatrix={showMatrix} />\n <DialogContent ref={dialogContentRef}>\n <div>\n <RecordContextProvider value={null}>\n <GeneratorAlert />\n <GeneratorForm\n component={Fragment}\n {...formOptions}\n decorators={decorators.current}\n save={onSubmit}\n initialValues={initialFormValues}\n toolbar={<GeneratorToolbar\n className={classes.toolbar}\n handleSubmit={onSubmit}\n onCancel={handleBack}\n cancelLabel={cancelLabel}\n submitLabel={submitLabel}\n />}\n >\n <GeneratorStep showMatrix={showMatrix} />\n </GeneratorForm>\n </RecordContextProvider>\n </div>\n </DialogContent>\n </GeneratorContextProvider>\n </Dialog>\n}\n","import { sortBy } from 'lodash';\nimport React, { useContext, useEffect, useMemo, useState } from 'react';\nimport { GET_LIST, useQueryWithStore, useTranslate } from 'react-admin';\n\nimport { groupBy } from '@hisports/common/src/lodash';\n\nimport { useScheduleGroupingType } from '../../../scheduleSettings';\nimport { STEPS } from './Generator';\n\n\nconst hasOrderGap = (scheduleTeams = []) => {\n // No gaps if 0 or 1 team\n if (scheduleTeams.length <= 1) return false;\n\n const groupedByPool = groupBy(scheduleTeams, 'poolId');\n\n return Object.values(groupedByPool).some(poolTeams => {\n const sortedTeams = sortBy(poolTeams, 'order');\n return sortedTeams.some((team, index) => {\n // skip the first item\n if (index === 0) return false;\n // check for gaps\n return team.order !== sortedTeams[index - 1].order + 1;\n });\n })\n};\n\nexport const useScheduleTeamsWithPools = (scheduleId, enabled = true) => useQueryWithStore({\n type: GET_LIST,\n resource: 'scheduleteams',\n payload: {\n filter: { scheduleId, _include: ['pool', { 'team': ['logo'] }] },\n pagination: { page: 1, perPage: 999 },\n }\n}, { enabled: !!scheduleId && enabled, action: 'CUSTOM_QUERY' })\n\nconst GeneratorContext = React.createContext(null);\n\nexport const useGeneratorContext = () => useContext(GeneratorContext) || {};\n\nexport const GeneratorContextProvider = ({ schedule = {}, activeStep, setShowMatrix, children }) => {\n const translate = useTranslate();\n const [ groupId, setGroupId ] = useState(null);\n const [ poolIds, setPoolIds ] = useState([]);\n const [ alert, setAlert ] = useState(null);\n\n const { isPools, isGroups, loading: groupingTypeLoading, loaded: groupingTypeLoaded } = useScheduleGroupingType(schedule.id);\n\n // loading schedule teams\n const { data: scheduleTeamsUnfiltered = [], loading: scheduleTeamsLoading, loaded: scheduleTeamsLoaded } = useScheduleTeamsWithPools(schedule.id);\n\n // loading latest published draft game\n const { data: drafts, loading: draftsLoading, loaded: draftsLoaded } = useQueryWithStore({\n type: GET_LIST,\n resource: 'draftGames',\n payload: {\n filter: { scheduleId: schedule.id },\n sort: { field: 'round', order: 'DESC' },\n pagination: { page: 1, perPage: 1 },\n }\n }, { enabled: !!schedule.id, action: 'CUSTOM_QUERY' })\n\n const loading = scheduleTeamsLoading || draftsLoading || groupingTypeLoading;\n const loaded = scheduleTeamsLoaded || draftsLoaded || groupingTypeLoaded;\n\n const scheduleTeams = useMemo(() => {\n return sortBy(scheduleTeamsUnfiltered.filter(scheduleTeam => scheduleTeam.groupId === groupId && (!poolIds.length || poolIds.includes(scheduleTeam.poolId)), 'order'))\n }, [scheduleTeamsUnfiltered, groupId, poolIds])\n\n const hasPool = poolIds.length > 0;\n\n useEffect(() => {\n if (!scheduleTeamsLoaded) return\n if (!scheduleTeams.length) {\n return setAlert({ step: STEPS.MATCHUPS, severity: 'error', message: translate(`resources.draftGames.messages.no_teams${groupId ? '_group' : hasPool ? '_pool' : ''}_alert`) })\n } else if (scheduleTeams.length === 1) {\n return setAlert({ step: STEPS.MATCHUPS, severity: 'error', message: translate(`resources.draftGames.messages.one_team${groupId ? '_group' : hasPool ? '_pool' : ''}_alert`) })\n } else if (hasOrderGap(scheduleTeams)) {\n return setAlert({ step: STEPS.MATCHUPS, severity: 'warning', message: translate(`resources.draftGames.messages.gaps${groupId ? '_group' : hasPool ? '_pool' : ''}_alert`) })\n }\n return setAlert(null)\n }, [scheduleTeamsLoaded, scheduleTeams, groupId, hasPool, setAlert, translate])\n\n const value = useMemo(() => {\n const [ lastPublishedDraft ] = drafts || [];\n const lastPublishedDraftRound = lastPublishedDraft?.round;\n\n return {\n schedule,\n groupId,\n poolIds,\n activeStep,\n lastPublishedDraftRound,\n scheduleTeams,\n loading,\n loaded,\n alert,\n setAlert,\n setGroupId,\n setPoolIds,\n setShowMatrix,\n isPools,\n isGroups,\n }\n }, [ setGroupId, setPoolIds, alert, setAlert, setShowMatrix, scheduleTeams, drafts, loading, loaded, schedule, activeStep, groupId, poolIds, isPools, isGroups ]);\n\n return <GeneratorContext.Provider value={value}>\n {children}\n </GeneratorContext.Provider>\n}\n","import { useQueryWithStore, GET_ONE, useQuery } from 'react-admin';\nimport { useSelector } from 'react-redux';\n\nexport const useSchedule = scheduleId => useQuery({\n type: GET_ONE,\n resource: 'schedules',\n payload: {\n id: scheduleId,\n }\n}, {\n enabled: scheduleId != null,\n})\n\n// force check in cache (use with caution, data may have changed since last load)\nexport const useScheduleWithStore = scheduleId => {\n const scheduleInStore = useSelector(state => state?.admin?.resources?.schedules?.data?.[scheduleId])\n\n const { data, loading, error } = useQueryWithStore({\n type: GET_ONE,\n resource: 'schedules',\n payload: { id: scheduleId },\n }, {\n enabled: !scheduleInStore && !!scheduleId\n })\n return { data: scheduleInStore || data, loading, error };\n}\n\n","import React from 'react'\nimport { GET_LIST, useQuery, useTranslate } from 'react-admin';\nimport { useHistory } from 'react-router-dom';\nimport { Button } from '@material-ui/core';\nimport { Alert } from '@material-ui/lab';\n\nconst useSequences = scheduleId => useQuery({\n type: GET_LIST,\n resource: 'schedulesequences',\n payload: {\n filter: { scheduleId },\n }\n}, { enabled: scheduleId != null })\n\nconst ScheduleSequenceAlert = ({ scheduleId, ...props }) => {\n const translate = useTranslate();\n const history = useHistory();\n const { data: sequences, loading } = useSequences(scheduleId);\n\n if (loading || sequences?.length) return null;\n\n const handleButtonClick = () => {\n history.push({\n pathname: `/schedules/${scheduleId}/show/games`,\n state: { focus: 'sequence' }\n });\n };\n\n return <Alert\n severity=\"warning\"\n action={\n scheduleId && (\n <Button color=\"primary\" onClick={handleButtonClick}>\n {translate('resources.schedulesequences.actions.add')}\n </Button>\n )\n }\n {...props}\n >\n {translate('resources.schedules.alerts.missing_sequence')}\n </Alert>\n}\n\nexport default ScheduleSequenceAlert;\n","import React from 'react';\nimport { useTranslate } from 'react-admin';\nimport { useHistory } from 'react-router-dom';\nimport { Button, makeStyles } from '@material-ui/core';\n\nconst useStyles = makeStyles(theme => ({\n container: {\n display: 'flex',\n alignItems: 'center',\n gap: theme.spacing(4),\n },\n button: {\n color: 'white',\n padding: theme.spacing(0.25, 1),\n }\n}))\n\nconst ScheduleSequenceError = ({ errorMsg, scheduleId, ...props }) => {\n const classes = useStyles();\n const history = useHistory();\n const translate = useTranslate();\n\n const handleButtonClick = () => {\n history.push({\n pathname: `/schedules/${scheduleId}/show/games`,\n state: { focus: 'sequence' }\n });\n };\n\n return <div className={classes.container}>\n {errorMsg}\n {scheduleId && <Button className={classes.button} showIcon={false} onClick={handleButtonClick} {...props} >\n {translate('resources.schedulesequences.actions.go_to')}\n </Button>}\n </div>\n}\n\nexport default ScheduleSequenceError;\n","import React from \"react\";\nimport { SimpleForm, TextInput, useRecordContext, useTranslate } from \"react-admin\";\nimport { useFormState } from \"react-final-form\";\nimport { DialogContentText, Grid, makeStyles, Typography } from \"@material-ui/core\";\nimport { Alert } from \"@material-ui/lab\";\n\nimport { validateGameNumber } from \"@hisports/scheduler\";\nimport { getGameNumberValidationError, isPrefixValid, parseSequence } from '@hisports/scheduler/src/sequences/sequences';\n\nimport { useHttpClient } from \"../../http\";\n\nimport { ScheduleInput } from \"../schedules/ScheduleInput\";\nimport { ScheduleGroupInput } from \"../groups/GroupInput\";\n\nconst useStyles = makeStyles(theme => ({\n groups: {\n paddingBottom: theme.spacing(2)\n },\n sequence: {\n marginTop: theme.spacing(2),\n fontWeight: 500,\n }\n}))\n\nconst validate = values => {\n const errors = {};\n\n if (!values.scheduleId) {\n errors.scheduleId = 'ra.validation.required';\n }\n\n if (!values.start) {\n errors.start = 'ra.validation.required';\n } else if (isNaN(values.start)) {\n errors.start = 'ra.validation.numericality';\n } else if (values.start < 0) {\n errors.start = 'ra.validation.positive';\n } else {\n const gameNumber = parseSequence(values);\n if (!validateGameNumber(gameNumber, values.scheduleId)) {\n const gameNumberError = getGameNumberValidationError(gameNumber, values.scheduleId);\n errors.start = `resources.schedulesequences.validations.${gameNumberError}`;\n }\n }\n\n if (!isPrefixValid(values.prefix)) {\n errors.prefix = 'resources.schedulesequences.validations.prefix_cant_end_in_number';\n }\n\n return errors;\n}\n\nconst inputProps = {\n variant: 'outlined',\n margin: 'none',\n fullWidth: true,\n}\n\nconst InnerForm = ({ disabled, ...props }) => {\n const translate = useTranslate();\n const classes = useStyles();\n const { values } = useFormState();\n\n const sequenceNumber = parseSequence(values);\n\n return <Grid container spacing={1} fullWidth>\n {!props?.initialValues?.scheduleId && <Grid item xs={12}>\n <ScheduleInput source=\"scheduleId\" disabled label=\"resources.schedulesequences.fields.scheduleId\" {...inputProps} />\n </Grid>}\n <Grid item xs={12}>\n <ScheduleGroupInput source=\"groupId\" disabled={disabled} showNone={translate('ra.message.no_group')} className={classes.groups} {...inputProps} />\n </Grid>\n <Grid item xs={12} sm={4}>\n <TextInput source=\"prefix\" disabled={disabled} placeholder=\"A\" helperText=\"ra.message.optional\" label=\"resources.schedulesequences.fields.prefix\" {...inputProps} />\n </Grid>\n <Grid item xs={12} sm={4}>\n <TextInput source=\"start\" disabled={disabled} placeholder=\"100\" helperText={false} label=\"resources.schedulesequences.fields.start\" {...inputProps} />\n </Grid>\n <Grid item xs={12} sm={4}>\n <TextInput source=\"suffix\" disabled={disabled} placeholder=\"B\" helperText=\"ra.message.optional\" label=\"resources.schedulesequences.fields.suffix\" {...inputProps} />\n </Grid>\n <Typography variant=\"subtitle2\" className={classes.sequence} >\n {translate('resources.schedulesequences.messages.starting_sequence', { sequence: sequenceNumber })}\n </Typography>\n </Grid>\n}\n\nexport const ScheduleSequenceForm = ({ prevalidate, ...props }) => {\n const translate = useTranslate()\n const sequence = useRecordContext()\n const { data: prevalidateData, loading } = useHttpClient(`/schedulesequences/${sequence?.id}/prevalidate`, null, !prevalidate && !!sequence?.id);\n\n const isSequenceUsed = prevalidate?.isSequenceUsed || prevalidateData?.isSequenceUsed;\n\n return <>\n <DialogContentText>\n {translate('resources.schedulesequences.alerts.sequence_info')}\n </DialogContentText>\n {isSequenceUsed && <>\n <Alert severity=\"warning\">\n {translate('resources.schedulesequences.alerts.sequence_in_use')}\n </Alert>\n <br />\n </>}\n <SimpleForm validate={validate} {...props}>\n <InnerForm disabled={isSequenceUsed || loading} {...props} />\n </SimpleForm>\n </>\n}\n","import React, { useState } from 'react';\nimport { useTranslate } from 'react-admin';\nimport { Button, ListItemText, ListItemIcon } from '@material-ui/core';\nimport { Add } from '@material-ui/icons';\n\nimport { useHttpClient } from '../../http';\nimport { DialogDatagrid } from '../../common/dialogs/DialogDatagrid';\nimport { CreateResourceDialog, EditResourceDialog } from '../../common/dialogs/ResourceDialog';\nimport { ActionMenuItem } from '../../common/ActionMenu';\n\nimport { ScheduleSequenceForm } from './ScheduleSequenceForm';\n\nconst AddScheduleSequenceDialog = props =>\n <CreateResourceDialog label=\"resources.schedulesequences.labels.add\" maxWidth=\"sm\" resource=\"schedulesequences\" basePath=\"/schedulesequences\" {...props}>\n <ScheduleSequenceForm />\n </CreateResourceDialog>\n\nconst EditScheduleSequenceDialog = props => {\n const sequenceId = props?.id;\n const { data: prevalidate } = useHttpClient(`/schedulesequences/${sequenceId}/prevalidate`, null, !!sequenceId);\n\n return <EditResourceDialog disableDelete={prevalidate?.isSequenceUsed} label=\"resources.schedulesequences.labels.edit\" maxWidth=\"sm\" resource=\"schedulesequences\" basePath=\"/schedulesequences\" {...props}>\n <ScheduleSequenceForm prevalidate={prevalidate} />\n </EditResourceDialog>\n}\n\nexport const AddScheduleSequenceButton = ({ size, variant, ...props }) => {\n const translate = useTranslate();\n const [ isOpen, setOpen ] = useState(false);\n return <>\n <Button color=\"primary\" size={size} variant={variant} startIcon={<Add />} onClick={() => setOpen(true)}>{translate('resources.schedulesequences.actions.add')}</Button>\n <AddScheduleSequenceDialog isOpen={isOpen} handleClose={() => setOpen(false)} {...props} />\n </>\n}\n\nexport const AddScheduleSequenceAction = ({ onClick, ...props }) => {\n const translate = useTranslate();\n const [ isOpen, setOpen ] = useState(false);\n const handleClick = () => {\n onClick();\n setOpen(true);\n }\n return <>\n <ActionMenuItem color=\"primary\" size=\"small\" onClick={handleClick}>\n <ListItemIcon><Add fontSize=\"small\" /></ListItemIcon>\n <ListItemText>{translate('resources.schedulesequences.actions.add')}</ListItemText>\n </ActionMenuItem>\n {isOpen && <AddScheduleSequenceDialog isOpen={isOpen} handleClose={() => setOpen(false)} {...props} />}\n </>\n}\n\nexport const ScheduleSequenceDatagrid = props => <DialogDatagrid dialog={EditScheduleSequenceDialog} {...props} />\n","import { apiClient, deviceId } from \"../../../http\";\n\nconst setEventMeta = action => {\n return deviceId.then(deviceId => {\n const meta = action.payload.meta || {}\n action.payload.meta = {\n ...meta,\n deviceId,\n }\n return action;\n })\n}\n\nexport default store => next => action => {\n if (action.meta?.offline?.effect?.type !== 'event') return next(action);\n const { gameId, eventType } = action.payload;\n\n if (!gameId) return next(action);\n return setEventMeta(action)\n .then(action => apiClient(`/games/${gameId}/events`, {\n method: 'POST',\n data: action.payload,\n }))\n .then(res => res.data)\n .then(event => {\n if (!event || !event.id || event.eventType !== eventType || event.gameId != gameId) { // eslint-disable-line eqeqeq\n console.log(action.payload) // eslint-disable-line no-console\n const error = new Error('Invalid event response')\n error.code = 'EINVALIDRES'\n error.status = 500;\n return Promise.reject(error)\n }\n const { meta, ...payload } = event;\n action.payload = payload;\n return next(action)\n })\n}\n","export default (sport = null, seasonId = null) => store => next => action => {\n action.meta = {\n sport,\n seasonId,\n ...action.meta,\n };\n\n return next(action);\n}\n","import { applyMiddleware } from 'redux'\n\nimport { createStore as createScoresheet } from '@hisports/scoresheet'\nimport requests from './requests';\nimport validate from './validate';\nimport addMeta from './addMeta';\n\nexport const createStore = (sport, seasonId, scoresheet) => {\n // middleware is run in ascending order of arguments\n const enhancer = applyMiddleware(\n addMeta(sport, seasonId),\n validate(sport),\n requests\n )\n return createScoresheet(sport, scoresheet, enhancer)\n}\n","import { schemas } from '@hisports/scoresheet'\nimport { isLegacyRulebookSeason } from '@hisports/scoresheet/src/util';\n\nexport default () => store => next => action => {\n const { eventType, event } = action?.payload || {};\n const { sport, seasonId } = action?.meta || {};\n if (!eventType || !sport) return next(action);\n\n let schema = schemas[sport][eventType];\n if (!schema) return next(action);\n\n if (typeof schema === \"function\") {\n if (!seasonId) return next(action);\n const isLegacy = isLegacyRulebookSeason(seasonId);\n schema = schema(isLegacy);\n }\n\n action.payload.event = schema.validateSync(event, { stripUnknown: true });\n return next(action);\n}\n","import { createStore } from 'redux';\n\nimport reducers from './reducers/index.js';\n\nexport default function(sport, preloadedState, enhancer) {\n return createStore(reducers(sport), preloadedState, enhancer);\n}\n","import React, { createContext, useMemo, useContext, useEffect } from 'react';\nimport { useTranslate } from 'react-admin';\nimport { Provider, createSelectorHook, createDispatchHook, createStoreHook, useSelector } from 'react-redux';\nimport { Alert } from '@material-ui/lab';\n\nimport { parseLegacyRulebookMeta } from '@hisports/scoresheet/src/util';\n\nimport LoadingAlert from '../../common/LoadingAlert';\nimport { useHttpClient, useSport } from '../../http';\nimport { createStore } from './store';\n\nconst StoreContext = createContext(null);\nconst MetaContext = createContext(null);\n\nexport function ScoresheetProvider({ gameId, children, hideAlerts = false }) {\n const translate = useTranslate();\n const sport = useSport();\n const version = useSelector(store => store.admin.ui.viewVersion)\n\n const { data: game, loading: gameLoading, error: gameError, refetch: gameRefetch } = useHttpClient(`/games/${gameId}`)\n const { data, loading: scoresheetLoading, error: scoresheetError, refetch: scoresheetRefetch } = useHttpClient(`/games/${gameId}/scoresheet`)\n const { data: meta, loading: metaLoading, error: metaError, refetch: metaRefetch } = useHttpClient(`/games/${gameId}/meta`)\n\n useEffect(() => {\n // skip initial load to avoid duplicate calls\n if (version === 0) return\n gameRefetch()\n scoresheetRefetch()\n metaRefetch()\n }, [version, gameRefetch, scoresheetRefetch, metaRefetch ])\n\n const scoresheet = data ? data.scoresheet : undefined;\n const store = useMemo(() => createStore(sport, game?.seasonId, scoresheet), [ sport, game?.seasonId, scoresheet ])\n const value = useMemo(() => {\n return {\n game,\n meta: parseLegacyRulebookMeta(meta),\n loading: gameLoading || scoresheetLoading || metaLoading,\n }\n }, [game, meta, gameLoading, metaLoading, scoresheetLoading])\n\n if (gameError || scoresheetError || metaError) {\n if (hideAlerts) return null;\n return <Alert severity=\"error\">{translate('resources.scoresheets.alerts.load_error')}</Alert>\n }\n\n if ((!game && gameLoading) || (!scoresheet && scoresheetLoading) || (!meta && metaLoading)) {\n if (hideAlerts) return null;\n return <LoadingAlert>{translate('resources.scoresheets.alerts.loading.scoresheet')}</LoadingAlert>\n }\n\n if ((!scoresheet && !scoresheetLoading) || (!meta && !metaLoading)) {\n if (hideAlerts) return null;\n return <Alert severity=\"error\">{translate('resources.scoresheets.alerts.load_error')}</Alert>\n }\n return <MetaContext.Provider value={value}>\n <Provider store={store} context={StoreContext}>\n {children}\n </Provider>\n </MetaContext.Provider>\n}\n\nexport const useMeta = () => {\n const { game, meta, loading } = useContext(MetaContext);\n return {\n game,\n meta,\n loading\n }\n}\n\nexport const useScoresheet = createSelectorHook(StoreContext)\nexport const useScoresheetDispatch = createDispatchHook(StoreContext)\nexport const useScoresheetStore = createStoreHook(StoreContext)\n","import React, { useState } from 'react';\nimport { useRecordContext, useTranslate, useNotify, useRefresh, useLocale } from 'react-admin';\nimport { Button, makeStyles } from '@material-ui/core'\nimport { Alert } from '@material-ui/lab'\nimport { Replay } from '@material-ui/icons';\n\nimport { undoApprovalScoresheet } from '@hisports/scoresheet/src/actions';\nimport { isGameCertified } from '@hisports/scoresheet/src/selectors';\n\nimport { isAuthorized } from '../../../../common/Authorize';\nimport AlertDialog from '../../../../common/dialogs/AlertDialog';\nimport { SquareAlert } from '../../../../common/SquareAlert';\n\nimport { useScoresheet, useScoresheetDispatch } from '../../ScoresheetContext';\n\nconst useStyles = makeStyles((theme) => ({\n margin: {\n marginLeft: theme.spacing(1),\n marginRight: theme.spacing(1),\n },\n alert: {\n '& .MuiAlert-action': {\n paddingTop: theme.spacing(0.25),\n alignItems: 'flex-start',\n gap: theme.spacing(1),\n }\n },\n flags: {\n paddingTop: theme.spacing(2),\n marginLeft: theme.spacing(-2),\n }\n}));\n\nexport const UndoApprovalButton = ({ gameId }) => {\n const classes = useStyles();\n const translate = useTranslate();\n const dispatch = useScoresheetDispatch();\n const notify = useNotify();\n const refresh = useRefresh();\n const [ alert, setAlert ] = useState({ isOpen: false });\n\n const isCertified = useScoresheet(scoresheet => isGameCertified(scoresheet));\n\n const onClick = async () => {\n const result = await new Promise(resolve => {\n setAlert({\n title: translate('resources.scoresheets.messages.undo_approval.title'),\n message: translate('resources.scoresheets.messages.undo_approval.message'),\n reject: 'ra.action.cancel',\n accept: 'ra.action.continue',\n isOpen: true,\n onClose: result => {\n resolve(result)\n setAlert(alert => ({ ...alert, isOpen: false }))\n }\n })\n })\n if (!result) return;\n\n try {\n await dispatch(undoApprovalScoresheet(gameId))\n\n notify('resources.scoresheets.messages.successful_game_undo_approval', 'info')\n\n setTimeout(() => refresh(), 500);\n } catch (e) {\n // eslint-disable-next-line no-console\n console.error(e)\n notify('ra.message.error', 'error')\n }\n }\n\n if (isCertified) return null;\n return <>\n <Button color=\"primary\" className={classes.margin} size=\"small\" startIcon={<Replay />} onClick={onClick}>\n {translate('resources.scoresheets.labels.undo_approval')}\n </Button>\n <AlertDialog {...alert} />\n </>\n}\n\nexport const CompletedAlert = ({ showUndoApproval = false, canUndoApproval = false, square, ...props }) => {\n const game = useRecordContext(props);\n const locale = useLocale();\n const translate = useTranslate();\n const classes = useStyles();\n\n const hasFullScoresheets = isAuthorized(game, 'scoresheets', 'full')\n const showUndoApprovalButton = showUndoApproval && (canUndoApproval || hasFullScoresheets)\n\n const viewHref = `${process.env.PDF_URL}/game/${game.id}?locale=${locale}`;\n\n const AlertComponent = square ? SquareAlert : Alert;\n\n return <AlertComponent severity=\"success\" className={classes.alert} action={[\n showUndoApprovalButton && <UndoApprovalButton gameId={game.id} />,\n <Button color=\"primary\" variant=\"contained\" size=\"small\" href={viewHref} target=\"_blank\" onClick={e => e.stopPropagation()}>\n {translate('ra.action.view')}\n </Button>\n ]}>\n {translate('resources.scoresheets.alerts.completed')}\n </AlertComponent>\n}\n","import React, { Fragment } from 'react';\nimport { Dialog, DialogContent, DialogContentText, DialogTitle, useMediaQuery } from \"@material-ui/core\"\nimport { SimpleForm, useNotify, useRecordContext, useRefresh, useTranslate } from \"react-admin\"\nimport { certifyScoresheet } from '@hisports/scoresheet/src/actions';\n\nimport { DialogFormToolbar } from '../../../common/dialogs/DialogForm';\n\nimport { FlagList } from \"./FlagList\"\nimport { useScoresheetDispatch } from '../ScoresheetContext';\n\nconst certify = async (game, dispatch, notify) => {\n const dispatches = [\n certifyScoresheet(game.id)\n ]\n const results = await Promise.allSettled(dispatches.map(event => {\n try {\n return dispatch(event);\n } catch (e) {\n // catch validation errors caused by the dispatches\n // eslint-disable-next-line no-console\n console.error(e)\n return Promise.reject(e)\n }\n }))\n\n const isSuccessful = (results || []).every(result => result.status === 'fulfilled')\n const message = isSuccessful ? 'resources.scoresheets.messages.successful_game_certify' : 'ra.message.error';\n const notificationType = isSuccessful ? 'success' : 'error';\n\n notify(message, notificationType)\n}\n\nexport const CertificationModal = ({ open, setModalOpen, onClose, customHeader: CustomHeader, hideCancel, ...props }) => {\n const fullScreen = useMediaQuery(theme => theme.breakpoints.down('sm'));\n const translate = useTranslate();\n const dispatch = useScoresheetDispatch();\n const game = useRecordContext();\n const notify = useNotify();\n const refresh = useRefresh();\n\n const handleSubmit = async () => {\n await certify(game, dispatch, notify);\n\n if (typeof setModalOpen === 'function') {\n setModalOpen(false);\n }\n if (typeof onClose === 'function') {\n onClose(false);\n }\n\n setTimeout(() => refresh(), 500);\n }\n\n const onCancel = () => {\n if (typeof setModalOpen === 'function') {\n setModalOpen(false);\n }\n }\n\n const Header = CustomHeader || <DialogTitle>{translate('resources.scoresheets.labels.certify', 1)}</DialogTitle>\n\n return <Dialog open={open} fullWidth fullScreen={fullScreen} maxWidth={fullScreen ? \"xs\" : \"sm\"} {...props}>\n {Header}\n <DialogContent>\n <DialogContentText>\n {translate('resources.scoresheets.messages.confirm_certify', 1)}\n </DialogContentText>\n <SimpleForm\n save={handleSubmit}\n component={Fragment}\n toolbar={\n <DialogFormToolbar\n submitLabel=\"ra.action.certify\"\n cancelLabel=\"ra.action.cancel\"\n onCancel={hideCancel ? undefined : onCancel}\n />\n }\n >\n <FlagList checkable={false} />\n </SimpleForm>\n </DialogContent>\n </Dialog>\n}\n","import React from 'react'\nimport { IconButton, Tooltip, makeStyles } from '@material-ui/core';\nimport { Flag as FlagIcon } from '@material-ui/icons';\n\nimport { FLAG_COLORS } from '@hisports/scoresheet/src/constants';\n\nconst useStyles = makeStyles(theme => ({\n flagIconContainer: {\n display: 'grid',\n\n // forces all child to overlap eachother\n '& > *': {\n gridColumn: '1/-1',\n gridRow: '1/-1',\n }\n },\n colorError: {\n color: theme.palette.error.main,\n },\n colorWarning: {\n color: theme.palette.warning.main,\n },\n splitedFlagIcon: {\n clipPath: 'polygon(0 0, 0% 70%, 100% 20%);' // top left triangle ajusted for the MUI flag icon\n },\n}))\n\nconst ConditionnalyRenderTooltip = ({ tooltip, children }) => tooltip ? (\n <Tooltip title={tooltip} placement=\"top\" arrow>\n {/* need span to foward tooltip ref. inlineblock to keep children's dimentions */}\n <span style={{ display: 'inline-block' }}>{children}</span>\n </Tooltip>\n): children\n\nconst ConditionnalyRenderButton = ({ onClick, edge, children }) => (onClick ? (\n <IconButton edge={edge} onClick={onClick}>{children}</IconButton>\n): children)\n\n\nconst Flag = ({ className = '', color, tooltip, onClick, edge }) => {\n const classes = useStyles();\n\n const colorClassName = (() => {\n switch (color) {\n case FLAG_COLORS.RED:\n return classes.colorError;\n\n case FLAG_COLORS.ORANGE:\n case FLAG_COLORS.RED_ORANGE:\n return classes.colorWarning;\n\n case FLAG_COLORS.DEFAULT:\n default:\n return '';\n }\n })();\n\n return (\n <span className={className}>\n <ConditionnalyRenderTooltip tooltip={tooltip}>\n <ConditionnalyRenderButton onClick={onClick} edge={edge}>\n <span className={classes.flagIconContainer}>\n {color === FLAG_COLORS.RED_ORANGE && <FlagIcon className={`${classes.colorError} ${classes.splitedFlagIcon}`} /> }\n <FlagIcon className={colorClassName} />\n </span>\n </ConditionnalyRenderButton>\n </ConditionnalyRenderTooltip>\n </span>\n )\n};\n\nexport default Flag;\n","import React, { useContext, useEffect, useMemo, useState } from 'react';\n\nimport { getMembers } from '@hisports/scoresheet/src/selectors';\n\nimport { apiClient, useSport } from '../../../http';\nimport { unionBy, uniqBy } from 'lodash';\nimport { isEmpty } from '@hisports/parsers';\n\nconst GameMemberValidationContext = React.createContext(null);\n\nexport const useGameMemberValidationContext = () => useContext(GameMemberValidationContext) || {};\n\nconst validateMembers = async (gameId, teamId, members = []) => {\n return apiClient(`/games/${gameId}/validateMembers`, {\n method: 'POST',\n data: { teamId, members }\n })\n .then(res => res.data)\n}\n\nexport const GameMemberValidationProvider = ({ disabled = false, game, meta, scoresheet, ...props }) => {\n const [ memberValidations, setMemberValidations ] = useState({});\n const [ inFlight, setInFlight ] = useState(false);\n const [ loading, setLoading ] = useState(false);\n const sport = useSport();\n\n const homeLineup = scoresheet?.lineups[game?.homeTeamId];\n const awayLineup = scoresheet?.lineups[game?.awayTeamId];\n\n useEffect(() => {\n // set initial validatedMembers\n const homeRoster = meta?.teams[game.homeTeamId].members || [];\n const homeLineupMembers = disabled ? (homeLineup?.members || []) : getMembers(homeLineup, meta?.teams[game.homeTeamId], sport);\n const homeMembers = unionBy([...homeLineupMembers, ...homeRoster], 'participantId')\n const hasHomeMembers = homeMembers.length > 0;\n\n const awayRoster = meta?.teams[game.awayTeamId].members || [];\n const awayLineupMembers = disabled ? (awayLineup?.members || []) : getMembers(awayLineup, meta?.teams[game.awayTeamId], sport);\n const awayMembers = unionBy([...awayLineupMembers, ...awayRoster], 'participantId')\n const hasAwayMembers = awayMembers.length > 0;\n\n if (!hasHomeMembers && !hasAwayMembers) return;\n\n setInFlight(true);\n setLoading(true);\n\n Promise.all([\n hasHomeMembers ? validateMembers(game.id, game.homeTeamId, homeMembers) : [],\n hasAwayMembers ? validateMembers(game.id, game.awayTeamId, awayMembers) : []\n ])\n .then(validations => setMemberValidations({ [game.homeTeamId]: validations[0], [game.awayTeamId]: validations[1] }))\n .finally(() => {\n setInFlight(false)\n setLoading(false);\n })\n }, []) // eslint-disable-line react-hooks/exhaustive-deps\n\n useEffect(() => {\n // check if any participants are missing from memberValidations\n if (inFlight || isEmpty(memberValidations)) return;\n const homeLineupMembers = disabled ? (homeLineup?.members || []) : getMembers(homeLineup, meta?.teams[game.homeTeamId], sport);\n const awayLineupMembers = disabled ? (awayLineup?.members || []) : getMembers(awayLineup, meta?.teams[game.awayTeamId], sport);\n\n const missingHomeMembers = homeLineupMembers.filter(lineupMember => !memberValidations[game.homeTeamId].some(member => member.participantId === lineupMember.participantId));\n const missingAwayMembers = awayLineupMembers.filter(lineupMember => !memberValidations[game.awayTeamId].some(member => member.participantId === lineupMember.participantId));\n\n const hasMissingHomeMembers = missingHomeMembers.length > 0;\n const hasMissingAwayMembers = missingAwayMembers.length > 0;\n\n if (!hasMissingHomeMembers && !hasMissingAwayMembers) return;\n\n setLoading(true);\n setInFlight(true);\n Promise.all([\n hasMissingHomeMembers ? validateMembers(game.id, game.homeTeamId, missingHomeMembers) : [],\n hasMissingAwayMembers ? validateMembers(game.id, game.awayTeamId, missingAwayMembers) : []\n ])\n .then(validations => setMemberValidations(prevState =>\n ({\n ...prevState,\n [game.homeTeamId]: uniqBy([...validations[0], ...prevState[game.homeTeamId]], 'participantId'),\n [game.awayTeamId]: uniqBy([...validations[1], ...prevState[game.awayTeamId]], 'participantId')\n })\n ))\n .finally(() => {\n setInFlight(false)\n setLoading(false);\n })\n }, [ disabled, game.id, inFlight, homeLineup, awayLineup, game, meta, memberValidations, sport ])\n\n const value = useMemo(() => ({\n memberValidations,\n loading\n }), [\n memberValidations,\n loading\n ]);\n\n return <GameMemberValidationContext.Provider value={value} {...props} />\n}\n","import React, { useEffect, useState } from 'react';\nimport { useTranslate } from 'react-admin';\nimport { ListItem, ListItemIcon, ListItemText, List, makeStyles, Typography, Divider as MuiDivider, Grid, Checkbox } from '@material-ui/core';\nimport { Flag as FlagIcon } from '@material-ui/icons';\nimport { isEmpty } from 'lodash';\n\nimport { addCertificationFlag, removeCertificationFlag } from '@hisports/scoresheet/src/actions';\nimport { getCertificationFlag, getCertificationFlags } from '@hisports/scoresheet/src/selectors';\nimport { displayTime, getPenaltyDetails, getGeneralFlagNames, getTeamFlagNames, getFlagData, isGeneralFlag, isTeamFlag } from '@hisports/scoresheet/src/util';\n\nimport { useLocale } from '../../../locale';\nimport { useSport } from '../../../http';\nimport LoadingAlert from '../../../common/LoadingAlert';\nimport { isAuthorized } from '../../../common/Authorize';\nimport { useGameMemberValidationContext } from '../lineup/GameMembersValidationContext';\n\nimport { useMeta, useScoresheetDispatch, useScoresheetStore } from '../ScoresheetContext';\nimport { useMemberValidationContext } from '../lineup/MemberValidationContext';\n\nconst useStyles = makeStyles(theme => ({\n divider: {\n textAlign: 'center',\n paddingTop: theme.spacing(1),\n paddingBottom: theme.spacing(1),\n },\n checkbox: {\n padding: 0\n },\n listItem: {\n paddingTop: 0,\n paddingBottom: 0,\n },\n listItemText: {\n marginRight: theme.spacing(3)\n },\n list: {\n backgroundColor: 'inherit',\n paddingTop: 0,\n }\n}))\n\nconst getFlagName = flag => flag?.name;\n\nexport const Divider = ({ text }) => {\n const classes = useStyles();\n const translate = useTranslate();\n\n return <ListItem dense>\n <Grid container alignItems=\"center\" spacing={3} className={classes.divider}>\n <Grid item xs>\n <MuiDivider />\n </Grid>\n <Grid item>\n <Typography variant=\"subtitle2\">\n {translate(text, { _: text })}\n </Typography>\n </Grid>\n <Grid item xs>\n <MuiDivider />\n </Grid>\n </Grid>\n </ListItem>\n}\n\nconst FlagDetails =({ flag, flagData, penalties, members }) => {\n const translate = useTranslate();\n const sport = useSport();\n const classes = useStyles();\n const [ locale ] = useLocale();\n const { meta, game } = useMeta();\n\n const limitListSize = ['Low Severity Penalties', 'High Severity Penalties', 'Yellow', 'Indirect Red', 'Direct Red', 'Extra', 'Secondary Team'].includes(flag)\n\n let details = flagData.map(data => {\n let label = [];\n if (data?.participant && !data?.penalty) {\n label.push(data?.participant?.fullName)\n }\n if (data?.penalty) {\n label.push(getPenaltyDetails(data.penalty, meta.infractions, meta.rules, meta.types, penalties, members, {}, sport, game.seasonId, locale, { hideStartTime: true, hideServedBy: true }))\n label.unshift(displayTime(data.penalty.gameTime, sport, true))\n }\n if (data?.suspension) {\n label.push(`${translate('resources.members.labels.suspended')}${data.suspension.game ? ` (${data.suspension.game}/${data.suspension.total || '∞'})` : ''}`)\n }\n if (data?.throwsInningsStatus) {\n const faultyPlayerLabel = []\n if (data?.throwsInningsStatus?.hasInningsRest || data?.throwsInningsStatus?.hasThrowsRest) {\n faultyPlayerLabel.push(translate('components.throws_innings.labels.resting'))\n }\n if (data?.throwsInningsStatus?.consecutiveDays) {\n faultyPlayerLabel.push(translate('components.throws_innings.labels.consecutive_days'))\n }\n if ((data?.throwsInningsStatus?.dailyInningsRemaining !== null && data?.throwsInnings?.inningsPitched > data?.throwsInningsStatus?.dailyInningsRemaining) ||\n (data?.throwsInningsStatus?.weeklyInningsRemaining !== null && data?.throwsInnings?.inningsPitched > data?.throwsInningsStatus?.weeklyInningsRemaining)) {\n faultyPlayerLabel.push(`${translate('components.throws_innings.labels.over_innings_limit')} ${data.throwsInnings.inningsPitched - data.throwsInningsStatus.dailyInningsRemaining}`)\n }\n if (!isEmpty(faultyPlayerLabel)) {\n label.push(faultyPlayerLabel.join(' & '))\n }\n }\n label = label.join(' - ')\n return <ListItem className={classes.listItem} dense>\n <ListItemText className={classes.listItemText} dense inset primary={<Typography variant=\"body2\" color=\"textSecondary\">{label}</Typography>} />\n </ListItem>\n })\n\n if (details.length > 3 && limitListSize) {\n const hiddenCount = details.length - 3\n details = details.slice(0, 3)\n details.push(<ListItem className={classes.listItem} dense>\n <ListItemText className={classes.listItemText} dense inset primary={<Typography variant=\"body2\" color=\"textSecondary\">{translate('resources.games.messages.and_more', hiddenCount)}</Typography>} />\n </ListItem>)\n }\n\n return details\n}\n\nconst FlagItemList = ({ flag, teamId }) => {\n const classes = useStyles();\n const { meta } = useMeta();\n const { memberValidations } = useMemberValidationContext();\n const store = useScoresheetStore();\n const scoresheet = store.getState();\n\n if (!flag || !teamId) return null;\n\n const members = scoresheet?.lineups[teamId]?.members || [];\n const penalties = scoresheet?.penalties || [];\n\n const flagData = getFlagData({ name: flag, teamId }, scoresheet, meta, memberValidations);\n if (!flagData?.length) return null;\n\n return <List className={classes.list} disablePadding dense>\n <FlagDetails flag={flag} flagData={flagData} members={members} penalties={penalties} />\n </List>\n}\n\nconst Flag = ({ name, teamId, checkable = true, ...props }) => {\n const translate = useTranslate();\n const classes = useStyles();\n const { game } = useMeta();\n const dispatch = useScoresheetDispatch();\n const store = useScoresheetStore();\n const scoresheet = store.getState();\n const [ checked, setChecked ] = useState(false);\n\n const canManageScoresheet = isAuthorized(game, 'scoresheets', 'full')\n const scoresheetFlag = getCertificationFlag(scoresheet, name, teamId)\n\n useEffect(() => {\n setChecked(!!scoresheetFlag);\n }, [ scoresheetFlag ])\n\n const handleSelect = () => {\n if (checked && scoresheetFlag) {\n const event = removeCertificationFlag(game.id, name, teamId)\n dispatch(event);\n } else if (!checked && !scoresheetFlag) {\n const event = addCertificationFlag(game.id, name, teamId);\n dispatch(event);\n }\n\n setChecked(!checked)\n }\n\n const disabled = ![\"Unfinished\", 'Not Rostered'].includes(name) && !canManageScoresheet\n\n return <>\n <ListItem>\n <ListItemIcon><FlagIcon /></ListItemIcon>\n <ListItemText primary={translate(`resources.games.labels.flags.${name}`, 2)} />\n {checkable && <Checkbox color=\"primary\" className={classes.checkbox} onChange={handleSelect} checked={checked} disabled={disabled} />}\n </ListItem>\n <FlagItemList flag={name} teamId={teamId} />\n </>\n}\n\nexport const CondensedFlagList = ({ severity = 'warning' }) => {\n const translate = useTranslate();\n const classes = useStyles();\n const sport = useSport();\n const { game, meta } = useMeta();\n const store = useScoresheetStore();\n const scoresheet = store.getState();\n const { memberValidations, loading } = useGameMemberValidationContext();\n\n const homeTeamMembers = scoresheet?.lineups[game.homeTeamId]?.members || [];\n const awayTeamMembers = scoresheet?.lineups[game.awayTeamId]?.members || [];\n\n const members = [...homeTeamMembers, ...awayTeamMembers]\n const penalties = scoresheet?.penalties || [];\n\n const flags = getCertificationFlags(scoresheet);\n const generalFlags = flags.filter(flag => isGeneralFlag(flag, sport));\n const teamFlags = flags.filter(flag => isTeamFlag(flag, sport));\n\n const flagDetails = teamFlags.reduce((flags, flag) => {\n const { name, teamId } = flag;\n const flagData = getFlagData(flag, scoresheet, meta, memberValidations[teamId])\n\n if (!flags[name]) {\n flags[name] = flagData;\n } else {\n flags[name] = [...flags[name], ...flagData];\n }\n\n return flags\n }, {})\n\n if (loading) return <LoadingAlert severity={severity}>{translate('resources.scoresheets.messages.loading_flags')}</LoadingAlert>\n return <List className={classes.list} disablePadding dense>\n {generalFlags.map(flag =>\n <ListItem>\n <ListItemIcon><FlagIcon /></ListItemIcon>\n <ListItemText primary={translate(`resources.games.labels.flags.${flag.name}`, 2)} />\n </ListItem>\n )}\n {Object.entries(flagDetails).map(([flagName, flagDetails]) => {\n return <>\n <ListItem>\n <ListItemIcon><FlagIcon /></ListItemIcon>\n <ListItemText primary={translate(`resources.games.labels.flags.${flagName}`, 2)} />\n </ListItem>\n <FlagDetails flag={flagName} flagData={flagDetails} members={members} penalties={penalties} />\n </>\n })}\n </List>\n}\n\nexport const FlagList = ({ isAlert = false, showAll, checkable = true, ...props }) => {\n const store = useScoresheetStore();\n const scoresheet = store.getState();\n const { game } = useMeta();\n const sport = useSport();\n const classes = useStyles();\n\n const scoresheetFlags = getCertificationFlags(scoresheet);\n const generalFlags = showAll ? getGeneralFlagNames(sport) : scoresheetFlags.filter(flag => isGeneralFlag(flag, sport)).map(getFlagName);\n\n const homeFlags = showAll ? getTeamFlagNames(sport) : scoresheetFlags.filter(flag => isTeamFlag(flag, sport) && flag.teamId === game.homeTeamId).map(getFlagName);\n const awayFlags = showAll ? getTeamFlagNames(sport) : scoresheetFlags.filter(flag => isTeamFlag(flag, sport) && flag.teamId === game.awayTeamId).map(getFlagName);\n\n return <List dense className={classes.list}>\n {!!generalFlags.length && <>\n <Divider text=\"resources.games.labels.general\" />\n {generalFlags.map(flagName => <Flag name={flagName} checkable={checkable} />)}\n </>}\n {!!homeFlags.length && <>\n <Divider text=\"resources.teams.values.types.home\" />\n {homeFlags.map(flagName => <Flag name={flagName} teamId={game?.homeTeamId} checkable={checkable} />)}\n </>}\n {!!awayFlags.length && <>\n <Divider text=\"resources.teams.values.types.away\" />\n {awayFlags.map(flagName => <Flag name={flagName} teamId={game?.awayTeamId} checkable={checkable} />)}\n </>}\n </List>\n}\n","import React, { useState } from \"react\";\nimport { useFormState } from 'react-final-form';\nimport { Grid, makeStyles } from '@material-ui/core';\nimport { get } from 'lodash';\n\nimport { getPeriods } from '@hisports/scoresheet/src/selectors';\nimport { parsePeriodInt, stringifyGameTime, stringifyTime } from '@hisports/scoresheet/src/util';\nimport { SHOOTOUT_PERIOD } from \"@hisports/scoresheet/src/constants\";\nimport { useScoresheet } from \"../ScoresheetContext\"\n\nimport { useSport } from \"../../../http\";\nimport { EnumInput, GamePeriodEnumInput } from \"../../../common/inputs/EnumInputs\";\nimport MaskedTextInput from \"../../../common/inputs/MaskedTextInput\";\nimport { NumberInput, useInput } from \"react-admin\";\n\nconst useStyles = makeStyles({\n disableMinWidth: {\n minWidth: '0px',\n },\n rightBorder: {\n borderRightColor: 'transparent',\n borderRadius: '4px 0px 0px 4px',\n },\n leftBorder: {\n borderRadius: '0px 4px 4px 0px',\n },\n})\n\n// min 00:00, max 99:59\nconst gameTimeMask = [/\\d/, /\\d/, ':', /[0-5]/, /\\d/];\n\nexport const GameTimeInput = props => {\n const sport = useSport();\n if (sport === 'Hockey') return <HockeyGameTimeInput {...props} />\n if (sport === 'Soccer') return <SoccerGameTimeInput {...props} />\n if (sport === 'Baseball') return <BaseballGameTimeInput {...props} />\n return <GameClockTimeInput {...props} source={`${props.source}.clock`} options={{ placeholder: props?.placeholder || '00:00' }} />\n}\n\nexport const HockeyGameTimeInput = ({ source, periodLabel = false, helperText, periodHelperText = false, placeholder, ...props }) => {\n const classes = useStyles();\n const { values } = useFormState();\n const periodSettings = useScoresheet(scoresheet => getPeriods(scoresheet));\n\n const state = get(values, source) || {};\n const { period } = state;\n\n const periodSetting = periodSettings[parsePeriodInt(period) - 1];\n\n return <Grid container spacing={0}>\n <Grid item xs={12} md={4}>\n <GamePeriodEnumInput\n {...props}\n label={periodLabel}\n helperText={periodHelperText}\n source={`${source}.period`}\n InputProps={{\n classes: {\n notchedOutline: classes.rightBorder,\n }\n }}\n inputProps={{ className: classes.disableMinWidth }} // popup dropdown\n options={{ className: classes.disableMinWidth }} // input field\n />\n </Grid>\n <Grid item xs={12} md={8}>\n <GameClockTimeInput\n label=\"resources.scoresheets.labels.clock\"\n helperText={helperText}\n source={`${source}.clock`}\n options={{\n placeholder: placeholder || stringifyGameTime(periodSetting) || '20:00',\n }}\n disabled={period === SHOOTOUT_PERIOD}\n InputProps={{\n classes: {\n notchedOutline: classes.leftBorder,\n }\n }}\n {...props}\n />\n </Grid>\n </Grid>\n}\n\nexport const SoccerGameTimeInput = ({ source, label, placeholder, ...props }) => {\n const format = (formValue = {}) => {\n if (formValue.minutes == undefined && formValue.extra == undefined) return;\n if (!formValue.extra) return `${formValue.minutes}`;\n return `${formValue.minutes}+${formValue.extra}`;\n }\n\n const parse = (inputValue = '') => {\n let [ minutes, extra ] = inputValue.split('+');\n if (minutes) {\n minutes = minutes.trim()\n }\n if (extra) {\n extra = extra.trim()\n }\n return { minutes, extra }\n }\n\n return <MaskedTextInput\n label=\"resources.scoresheets.labels.clock\"\n source={`${source}.clock`}\n maskOptions={{ mask: false, guide: false }}\n format={format}\n parse={parse}\n autoComplete=\"off\"\n options={{\n placeholder: placeholder || '90+1',\n }}\n {...props} />\n}\n\nexport const BaseballGameTimeInput = ({ source, label, placeholder, helperText, ...props }) => {\n const classes = useStyles();\n const { values } = useFormState();\n\n const state = get(values, source) || {};\n\n return <Grid container spacing={0}>\n <Grid item xs={12} md={6}>\n <NumberInput\n label=\"resources.scoresheets.labels.penalty.inning\"\n source={`${source}.period`}\n InputProps={{\n classes: {\n notchedOutline: classes.rightBorder,\n }\n }}\n inputProps={{ className: classes.disableMinWidth }} // popup dropdown\n options={{ className: classes.disableMinWidth }} // input field\n helperText={helperText}\n {...props}\n />\n </Grid>\n <Grid item xs={12} md={6}>\n <EnumInput\n select\n label=\"resources.scoresheets.labels.penalty.half\"\n source={`${source}.half`}\n InputProps={{\n classes: {\n notchedOutline: classes.leftBorder,\n }\n }}\n inputProps={{ className: classes.disableMinWidth }} // popup dropdown\n options={{ className: classes.disableMinWidth }} // input field\n choices={[\n { id: 1, name: 'resources.scoresheets.values.half.first' },\n { id: 2, name: 'resources.scoresheets.values.half.second' },\n ]} {...props} />\n </Grid>\n </Grid>\n}\n\nexport const GameClockTimeInput = props => {\n // pad numbers when values are in number format\n // ex. { minutes: 8, seconds: 3 } => { minutes: '08', seconds: '03' }\n const {\n input: { value, onFocus, onBlur },\n } = useInput(props);\n\n const [ focused, setFocused ] = useState(false);\n\n const onInputFocus = e => {\n setFocused(true)\n return onFocus(e)\n }\n\n const onInputBlur = e => {\n setFocused(false);\n return onBlur(e)\n }\n\n const format = (value = {}) => {\n let { minutes, seconds } = value;\n\n if (minutes === '' && seconds === undefined) return;\n\n if (!focused) {\n minutes = stringifyTime(minutes || 0)\n seconds = stringifyTime(seconds || 0)\n }\n\n if (typeof minutes !== 'string') {\n minutes = stringifyTime(minutes)\n }\n if (typeof seconds !== 'string') {\n seconds = stringifyTime(seconds)\n }\n if (minutes == undefined && seconds == undefined) return;\n if (seconds == undefined) return `${minutes}`;\n return `${minutes}:${seconds}`;\n }\n\n const parse = (inputValue = '') => {\n const [ minutes, seconds ] = inputValue.split(':');\n return { ...value, minutes, seconds };\n }\n\n return <MaskedTextInput\n label=\"resources.scoresheets.labels.penalty.game_time\"\n maskOptions={{ mask: gameTimeMask, guide: false }}\n format={format}\n parse={parse}\n onFocus={onInputFocus}\n onBlur={onInputBlur}\n autoComplete=\"off\"\n options={{\n placeholder: '00:00',\n }}\n {...props} />\n}\n","import React from \"react\"\nimport { useRecordContext } from \"react-admin\"\nimport { SmsFailedOutlined } from '@material-ui/icons';\n\nimport ListCard from \"../../../common/cards/ListCard\"\nimport { isAuthorized } from \"../../../common/Authorize\";\nimport { usePermissions } from \"../../../http\";\nimport { getFilteredScopes } from \"../../../http/restClient/response\";\nimport { useBranchSettings } from \"../../branchOfficeSettings\";\n\nimport { IncidentReportGrid } from \"./IncidentReportGrid\";\nimport { AddIncidentReportButton } from \"./IncidentReportModal\";\n\nexport const IncidentReportCard = ({ isAssignedOfficial, hideAddButton = false, rowOptions, ...props }) => {\n const game = useRecordContext();\n const permissions = usePermissions();\n const filteredScopes = getFilteredScopes(permissions, game?.officeId);\n const { data: branchSettings } = useBranchSettings(game?.officeId);\n\n const gameId = game?.id\n\n const showIncidentReportsCard = (isAuthorized(filteredScopes.filter(scope => scope != 'assigning:official'), 'gameIncidents', 'show') || isAssignedOfficial) && branchSettings?.ff_incidents;\n\n if (!showIncidentReportsCard) return null;\n\n const showAddIncidentReportButton = !hideAddButton && (isAuthorized(game, 'gameIncidents', 'create') || isAssignedOfficial);\n\n return <ListCard\n title=\"resources.gameIncidents.name\"\n icon={<SmsFailedOutlined />}\n reference=\"gameIncidents\"\n target=\"gameId\"\n sort={{ field: ['participant.lastName', 'participant.firstName'], order: ['ASC', 'ASC'] }}\n addButton={showAddIncidentReportButton && <AddIncidentReportButton initialValues={{ gameId }} />}\n {...props}\n >\n <IncidentReportGrid rowOptions={rowOptions} />\n </ListCard>\n}\n","import React from 'react';\nimport moment from 'moment';\n\nimport FunctionField from './FunctionField';\n\nconst renderCreatedAt = (record, source, resource, translate, includePrefix = false) => {\n const { createdAt, createdByAuthor } = record || {};\n const date = moment(createdAt).calendar()\n const prefix = includePrefix ? `${translate('ra.message.created')} ` : ''\n\n if (!createdAt) return null;\n if (!createdByAuthor) return `${prefix}${date}`;\n return `${prefix}${date} ${translate('ra.function.by')} ${createdByAuthor}`;\n}\n\nexport const CreatedAtField = ({ includePrefix = false, ...props }) => {\n return <FunctionField source=\"createdAt\" render={(...params) => renderCreatedAt(...params, includePrefix)} {...props} />\n}\n","import React from 'react';\nimport { useRecordContext, useTranslate } from 'react-admin';\n\nimport { getPenalties } from '@hisports/scoresheet/src/selectors';\nimport { displayTime, getPenalty } from '@hisports/scoresheet/src/util';\n\nimport { useSport } from '../../../http';\nimport { useLocale } from '../../../locale';\nimport FunctionField from '../../../common/fields/FunctionField';\nimport UserTextField from '../../../common/fields/UserTextField';\nimport { CreatedAtField } from '../../../common/fields/CreatedAtField';\nimport { UpdatedAtField } from '../../../common/fields/UpdatedAtField';\nimport { ParticipantField } from '../../participants/ParticipantField';\n\nimport { IncidentReportDatagrid } from './IncidentReportModal';\nimport { useMeta, useScoresheet } from '../ScoresheetContext';\n\nconst renderInjury = (incident, translate) => {\n if (!incident) return\n if (!incident.injured) return translate(\"resources.gameIncidents.labels.notInjured\")\n\n const details = [];\n if (incident.injured) details.push(translate(\"resources.gameIncidents.fields.injured\"))\n if (incident.returnedToGame) details.push(translate(\"resources.gameIncidents.labels.returned\"))\n\n return details.join(', ')\n}\n\nexport const PenaltyField = ({ className, variant=\"body2\", ...props }) => {\n const sport = useSport();\n const translate = useTranslate();\n const [ locale ] = useLocale();\n const { meta, game, loading } = useMeta();\n const record = useRecordContext(props);\n const penalties = useScoresheet(scoresheet => getPenalties(scoresheet, meta.infractions, meta.types, sport, game.seasonId))\n const penalty = penalties.find(penalty => penalty?.id === record?.penaltyId);\n\n if (loading) return null;\n return <FunctionField className={className} render={() => {\n if (!penalty) return translate('ra.message.none')\n return `${displayTime(penalty?.gameTime, sport)} - ${getPenalty(penalty, meta.infractions, meta.rules, meta.types, penalties, {\n start: translate('resources.scoresheets.labels.start'),\n ended: translate('resources.scoresheets.labels.ended'),\n }, sport, game.seasonId, locale)}`;\n }} variant={variant} />\n}\n\nconst InjuryField = ({ className, variant=\"body2\", ...props }) => {\n const record = useRecordContext(props);\n const translate = useTranslate();\n return <FunctionField className={className} render={() => renderInjury(record, translate)} variant={variant} />\n}\n\nexport const IncidentReportGrid = props =>\n <IncidentReportDatagrid size=\"medium\" {...props}>\n <ParticipantField source=\"participantId\" label=\"resources.gameIncidents.labels.participantId\" includeId=\"full\" />\n <PenaltyField source=\"penaltyId\" label=\"resources.gameIncidents.fields.penaltyId\" />\n <UserTextField source=\"description\" label=\"resources.gameIncidents.fields.description\" />\n <InjuryField source=\"id\" label=\"resources.gameIncidents.labels.injury\" />\n <CreatedAtField source=\"createdAt\" />\n <UpdatedAtField source=\"updatedAt\" />\n </IncidentReportDatagrid>\n","import React, { useMemo, useRef, useState } from \"react\";\nimport { SimpleForm, TextInput, useRecordContext, useTranslate } from \"react-admin\";\nimport { Grid } from \"@material-ui/core\";\nimport createCalculator from 'final-form-calculate';\nimport { sortBy } from \"lodash\";\n\nimport { getLineupExtras, getSummary } from \"@hisports/scoresheet/src/selectors\";\nimport { dedupeBy } from \"@hisports/parsers\";\n\nimport { useSport } from \"../../../http\";\nimport SwitchInput from \"../../../common/inputs/SwitchInput\";\nimport { FieldDependency } from \"../../../common/FieldDependency\";\nimport { EnumInput } from \"../../../common/inputs/EnumInputs\";\n\nimport { useMeta, useScoresheet } from \"../ScoresheetContext\";\nimport { PenaltyInput } from \"../suspension/SuspensionForm\";\nimport { ListItemSummaryDescription } from \"../summary/SummaryItem\";\nimport { getMemberDescription } from \"../lineup/MemberItem\";\n\nconst validate = values => {\n const errors = {};\n if (!values.description) errors.description = 'ra.validation.required';\n\n return errors;\n}\n\nconst inputProps = {\n variant: 'outlined',\n margin: 'none',\n fullWidth: true,\n}\n\nconst MemberInput = ({ participants, disabled, ...props }) => {\n const translate = useTranslate();\n\n const choices = useMemo(() => {\n if (!participants) return []\n\n return sortBy(participants, ['number', 'fullName']).map(member => {\n const { id } = member.participant;\n const name = member.number ? `${member.participant.fullName} (${member.number})` : member.participant.fullName;\n const description = getMemberDescription(member, translate);\n return { id, name, description };\n })\n }, [participants, translate])\n\n return <EnumInput choices={choices} optionDescription=\"description\" disabled={disabled} {...props} />\n}\n\nexport const IncidentReportForm = props => {\n const record = useRecordContext(props);\n const sport = useSport();\n const { meta, game } = useMeta();\n const [ disabled, setDisabled ] = useState(false);\n const events = useScoresheet(scoresheet => getSummary(scoresheet, meta?.infractions, meta?.types, sport, game.seasonId));\n const homeExtra = useScoresheet(scoresheet => getLineupExtras(scoresheet, { teamId: game.homeTeamId, showSuspended: true }));\n const awayExtra = useScoresheet(scoresheet => getLineupExtras(scoresheet, { teamId: game.awayTeamId, showSuspended: true }));\n\n const event = props?.event || events.find(event => event.id === record?.penaltyId)\n const isEditing = !!record?.id\n const participants = dedupeBy('participantId', [\n ...meta.teams[game.homeTeamId].members.map(member => member),\n ...meta.teams[game.awayTeamId].members.map(member => member),\n ...homeExtra,\n ...awayExtra,\n ]);\n\n const decorators = useRef([createCalculator({\n field: 'injured',\n updates: {\n returnedToGame: (injured, values, prevValues) => {\n if (!injured) return false\n return values.returnedToGame;\n }\n }\n }, {\n field: 'penaltyId',\n updates: {\n participantId: (penaltyId, values, prevValues) => {\n setDisabled(false)\n if (!values?.penaltyId && !prevValues?.penaltyId) return values?.participantId\n if (!penaltyId) return null\n const penalty = events.find(({ id }) => id === penaltyId)\n if (!penalty) return null\n setDisabled(true)\n return penalty.participantId\n }\n }\n }\n )])\n\n return <SimpleForm decorators={decorators.current} validate={validate} {...props}>\n <Grid container spacing={2} fullWidth>\n {isEditing && <Grid item xs={12}>\n <ListItemSummaryDescription event={event} participantId={record?.participantId} displayGameTime={record?.penaltyId} {...props} />\n </Grid>}\n {!isEditing && <Grid item xs={12}>\n <PenaltyInput source=\"penaltyId\" allowEmpty allowReuse={false} helperText=\"ra.message.optional\" label=\"resources.gameIncidents.fields.penaltyId\" {...inputProps} />\n </Grid>}\n {!isEditing && <Grid item xs={12}>\n <MemberInput source=\"participantId\" participants={participants} disabled={disabled} label=\"resources.gameIncidents.labels.participantId\" {...inputProps} />\n </Grid>}\n <Grid item xs={12}>\n <TextInput source=\"description\" multiline rows={5} helperText=\"\" {...inputProps} />\n </Grid>\n <Grid item xs={12}>\n <SwitchInput source=\"injured\" defaultValue={false} helperText=\"\" {...props} />\n </Grid>\n <FieldDependency fieldSource=\"injured\" test={value => value != false}>\n <Grid item xs={12}>\n <SwitchInput source=\"returnedToGame\" defaultValue={false} helperText=\"\" {...props} />\n </Grid>\n </FieldDependency>\n </Grid>\n </SimpleForm>\n}\n","import React, { Fragment, useState } from \"react\";\nimport { useTranslate } from \"react-admin\";\nimport { Button } from \"@material-ui/core\";\nimport { CreateResourceDialog, EditResourceDialog } from \"../../../common/dialogs/ResourceDialog\";\nimport { DialogDatagrid } from \"../../../common/dialogs/DialogDatagrid\";\nimport { Add } from \"@material-ui/icons\";\nimport { IncidentReportForm } from \"./IncidentReportForm\";\n\nexport const AddIncidentReportDialog = props =>\n <CreateResourceDialog label=\"resources.gameIncidents.actions.add\" resource=\"gameIncidents\" basePath=\"/gameIncidents\" {...props}>\n <IncidentReportForm event={props?.event} />\n </CreateResourceDialog>\n\nconst EditIncidentReportDialog = props =>\n <EditResourceDialog label=\"resources.gameIncidents.labels.edit\" resource=\"gameIncidents\" basePath=\"/gameIncidents\" {...props}>\n <IncidentReportForm />\n </EditResourceDialog>\n\n\nexport const AddIncidentReportButton = ({ size, variant, icon = <Add />, label = true, ...props }) => {\n const [ isOpen, setOpen ] = useState(false);\n const translate = useTranslate();\n return <>\n <Button color=\"primary\" size={size} variant={variant} startIcon={icon} onClick={() => setOpen(true)}>{label && translate('resources.gameIncidents.actions.add')}</Button>\n <AddIncidentReportDialog isOpen={isOpen} handleClose={() => setOpen(false)} {...props} />\n </>\n}\n\nexport const IncidentReportDatagrid = props => <DialogDatagrid dialog={EditIncidentReportDialog} {...props} />\n","import { useQueryWithStore, GET_MANY_REFERENCE } from \"react-admin\";\n\nexport const useIncidentReports = (gameId, enabled = true) =>\n useQueryWithStore({\n type: GET_MANY_REFERENCE,\n resource: 'gameIncidents',\n payload: {\n target: 'gameId',\n id: gameId,\n pagination: { page: 1, perPage: 999 },\n filter: {},\n },\n }, { enabled, action: 'CUSTOM_QUERY' })\n","import React from 'react';\nimport { get } from 'lodash';\nimport { FileInput } from 'react-admin';\nimport { useFormState } from 'react-final-form';\n\nconst GameDocumentInput = ({ placeholder, source, ...props }) => {\n const { values } = useFormState();\n const filename = get(values, source)?.rawFile?.name;\n\n return <FileInput\n accept=\"image/*, application/pdf\"\n multiple={false}\n source={source}\n placeholder={filename || placeholder}\n maxSize={10000000}\n {...props}\n >\n <div></div>\n </FileInput>\n}\n\nexport default GameDocumentInput;\n","import React from 'react';\nimport { SimpleForm, TextInput } from 'react-admin';\nimport { Grid } from '@material-ui/core'\n\nimport Toolbar from '../../common/ra/Toolbar';\nimport { FileTypeEnumInput } from '../../common/inputs/EnumInputs';\n\n\nimport DocumentInput from './GameDocumentInput';\nimport { GameInput } from '../games/GameInput';\n\nconst validate = values => {\n const errors = {}\n\n if (!values.file) errors.file = 'ra.validation.required'\n if (!values.name) errors.name = 'ra.validation.required'\n if (!values.type) errors.type = 'ra.validation.required'\n\n return errors;\n}\n\nconst inputProps = {\n resource: 'gameDocuments',\n basePath: '/gameDocuments',\n variant: 'outlined',\n margin: 'none',\n fullWidth: true,\n}\n\nexport const GameDocumentForm = props =>\n <SimpleForm toolbar={<Toolbar />} validate={validate} {...props}>\n <Grid container spacing={2} fullWidth>\n <Grid item xs={12}>\n <GameInput source=\"gameId\" disabled {...inputProps} />\n </Grid>\n <Grid item xs={12} md={3}>\n <FileTypeEnumInput source=\"type\" {...inputProps} />\n </Grid>\n <Grid item xs={12} md={9}>\n <TextInput source=\"name\" {...inputProps} />\n </Grid>\n <Grid item xs={12}>\n <DocumentInput source=\"file\" helperText=\"resources.gameDocuments.messages.max_size\" {...inputProps} />\n </Grid>\n </Grid>\n </SimpleForm>\n","import React, { Fragment, useState } from 'react';\nimport { useTranslate } from 'react-admin';\nimport { Button } from '@material-ui/core';\nimport { Add } from '@material-ui/icons';\n\nimport { DialogDatagrid } from '../../common/dialogs/DialogDatagrid';\nimport { CreateResourceDialog, EditResourceDialog } from '../../common/dialogs/ResourceDialog';\n\nimport { GameDocumentForm } from './GameDocumentForm';\n\nconst AddGameDocumentDialog = props =>\n <CreateResourceDialog label=\"resources.gameDocuments.actions.add\" maxWidth=\"md\" resource=\"gameDocuments\" basePath=\"/gameDocuments\" {...props}>\n <GameDocumentForm />\n </CreateResourceDialog>\n\nconst EditGameDocumentDialog = props =>\n <EditResourceDialog label=\"resources.gameDocuments.actions.edit\" maxWidth=\"md\" resource=\"gameDocuments\" basePath=\"/gameDocuments\" {...props}>\n <GameDocumentForm />\n </EditResourceDialog>\n\nexport const AddGameDocumentButton = ({ size, variant, ...props }) => {\n const translate = useTranslate();\n const [ isOpen, setOpen ] = useState(false);\n return <>\n <Button color=\"primary\" size={size} variant={variant} startIcon={<Add />} onClick={() => setOpen(true)}>{translate('resources.gameDocuments.actions.add')}</Button>\n <AddGameDocumentDialog isOpen={isOpen} handleClose={() => setOpen(false)} {...props} />\n </>\n}\n\nexport const GameDocumentDatagrid = props => <DialogDatagrid dialog={EditGameDocumentDialog} {...props} />\n","import React from 'react';\nimport { DELETE, Datagrid, useMutation, useNotify, useRecordContext, useRefresh, useTranslate } from 'react-admin';\nimport { IconButton, Tooltip, makeStyles } from '@material-ui/core';\nimport moment from 'moment';\nimport { Delete } from '@material-ui/icons';\n\nimport { isAuthorized } from '../../common/Authorize';\nimport FunctionField from '../../common/fields/FunctionField';\n\nconst useStyles = makeStyles(theme => ({\n headerRow: {\n display: 'none',\n },\n row: {\n '& .column-createdAt': {\n maxWidth: theme.spacing(4),\n },\n },\n buttons: {\n float: 'right',\n }\n}))\n\nconst DeleteButton = ({ className }) => {\n const message = useRecordContext();\n const [ mutate, { loading } ] = useMutation();\n const notify = useNotify();\n const refresh = useRefresh();\n const translate = useTranslate();\n\n const canDelete = isAuthorized(message, 'gameDocuments', 'remove');\n if (!canDelete) return null;\n\n const onClick = event => {\n if (event) {\n event.preventDefault();\n event.stopPropagation();\n }\n if (loading) return;\n mutate({\n type: DELETE,\n resource: 'gameDocuments',\n payload: {\n id: message.id,\n data: message\n }\n }, {\n undoable: true,\n onSuccess() {\n notify('resources.gameDocuments.notifications.deleted', 'info', {}, true);\n refresh()\n },\n onFailure() {\n notify('resources.gameDocuments.notifications.delete_error', 'error')\n }\n })\n }\n\n return <Tooltip title={translate('resources.gameDocuments.labels.delete')}>\n <IconButton size=\"small\" className={className} disabled={loading} onClick={onClick}>\n <Delete />\n </IconButton>\n </Tooltip>\n}\n\nconst renderMeta = (document, source, resource, translate) => {\n const { createdAt, author } = document;\n const date = moment(createdAt).calendar()\n if (!author) return date;\n return `${date} ${translate('ra.function.by')} ${author}`;\n}\n\nexport const GameDocumentGrid = ({ canManageGameDocuments, ...props }) => {\n const translate = useTranslate();\n const classes = useStyles();\n\n const rowClick = (id, basePath, document) => {\n const url = document?.file?.url;\n if (!url) return;\n window.open(url, '_blank')\n }\n\n return <Datagrid size=\"medium\" classes={classes} rowClick={rowClick}>\n <FunctionField source=\"name\" render={document => `${translate(`resources.gameDocuments.values.type.${document.type}`)}: ${document.name}`} />\n <FunctionField source=\"createdAt\" render={renderMeta} />\n {canManageGameDocuments && <DeleteButton className={classes.buttons} />}\n </Datagrid>\n}\n","import React from 'react';\nimport { useRecordContext, useTranslate } from 'react-admin';\nimport { InsertDriveFileOutlined } from '@material-ui/icons';\n\nimport { isAuthorized } from '../../../common/Authorize';\nimport { useScopes } from '../../../http';\n\nimport ListCard from '../../../common/cards/ListCard';\nimport { AddGameDocumentButton } from '../../gameDocuments/GameDocumentModal';\nimport { GameDocumentGrid } from '../../gameDocuments/GameDocumentGrid';\n\nexport default props => {\n const game = useRecordContext(props);\n const translate = useTranslate();\n const scopes = useScopes();\n\n const canManageGameDocuments = !game?.isCertified || scopes.includes('scoresheets:manage');\n const canAddGameDocuments = isAuthorized(game, 'gameDocuments', 'create') && canManageGameDocuments;\n\n return <ListCard\n title={translate(\"resources.gameDocuments.name\", 2)}\n icon={<InsertDriveFileOutlined fontSize=\"small\" />}\n reference=\"gameDocuments\"\n target=\"games\"\n addButton={canAddGameDocuments && <AddGameDocumentButton initialValues={{ gameId: game.id }} />}\n >\n <GameDocumentGrid canManageGameDocuments={canManageGameDocuments} />\n </ListCard>\n}\n\n","import React from 'react';\nimport { useRecordContext, useTranslate } from 'react-admin';\nimport { Divider, Grid, Typography, makeStyles, styled } from '@material-ui/core';\nimport { Home as HomeIcon } from '@material-ui/icons';\n\nimport { getForfeit, getScore } from '@hisports/scoresheet/src/selectors';\n\nimport { TeamField } from '../../teams/TeamField';\nimport { useSport } from '../../../http';\nimport { useIsHomeFirst } from '../../events/EventViewSettings';\n\nimport { useMeta, useScoresheet } from '../ScoresheetContext';\n\nconst Home = styled(HomeIcon)(({ theme }) => ({\n fontSize: '90%',\n color: theme.palette.grey[500],\n verticalAlign: 'middle',\n}))\n\nconst useStyles = makeStyles(theme => ({\n grid: {\n textAlign: 'center',\n marginTop: '10px',\n marginBottom: '10px'\n },\n teamName: {\n display: 'inline-flex',\n alignItems: 'center',\n gap: theme.spacing(0.5),\n }\n}))\n\nconst Score = ({ teamId, score, ...props }) => {\n const translate = useTranslate();\n const game = useRecordContext();\n const forfeit = useScoresheet(scoresheet => getForfeit(scoresheet));\n const classes = useStyles();\n const isForfeited = forfeit === teamId || forfeit == -1;\n const isHome = game.homeTeamId === teamId;\n\n return <Grid container spacing={2}>\n <Grid item xs={12}>\n <div className={classes.teamName}>\n {isHome && <Home />} <TeamField source=\"teamId\" record={{ teamId }} link={false} />\n </div>\n </Grid>\n <Grid item xs={12}>\n <Typography variant=\"h1\">{score}</Typography>\n </Grid>\n {isForfeited && <Grid item xs={12}>\n <Typography variant=\"body1\">{translate('resources.games.values.status.Forfeited')}</Typography>\n </Grid>}\n </Grid>\n}\n\nexport const Scoreboard = ({ ...props }) => {\n const game = useRecordContext();\n const classes = useStyles();\n const isHomeFirst = useIsHomeFirst();\n const sport = useSport();\n const { meta } = useMeta();\n const { maxScoreDiff, scoringMode } = meta?.policies || {};\n const homeScore = useScoresheet(scoresheet => getScore(scoresheet, sport, { teamId: game.homeTeamId, maxScoreDiff, scoringMode }));\n const awayScore = useScoresheet(scoresheet => getScore(scoresheet, sport, { teamId: game.awayTeamId, maxScoreDiff, scoringMode }));\n\n const scores = isHomeFirst ? [homeScore, awayScore] : [awayScore, homeScore]\n const teamIds = isHomeFirst ? [game?.homeTeamId, game?.awayTeamId] : [game?.awayTeamId, game?.homeTeamId]\n\n return <Grid container spacing={2} className={classes.grid} fullWidth >\n <Grid item xs={5}>\n <Score teamId={teamIds[0]} score={scores[0]} />\n </Grid>\n <Grid item xs={2} container direction=\"row\" justifyContent=\"center\" alignItems=\"center\">\n <Divider orientation=\"vertical\" style={{ height: '70%', width: '1px' }} />\n </Grid>\n <Grid item xs={5}>\n <Score teamId={teamIds[1]} score={scores[1]} />\n </Grid>\n </Grid>\n}\n","import { Dialog, DialogContent, DialogTitle, Grid, makeStyles, Typography } from '@material-ui/core';\nimport React, { Fragment } from 'react';\nimport { NumberInput, RecordContextProvider, SimpleForm, useNotify, useRecordContext, useTranslate } from 'react-admin';\n\nimport { getScore } from '@hisports/scoresheet/src/selectors';\nimport { saveScore } from '@hisports/scoresheet/src/actions';\n\nimport { DialogFormToolbar } from '../../../common/dialogs/DialogForm';\nimport { useSport } from '../../../http';\n\nimport { useIsHomeFirst } from '../../events/EventViewSettings';\n\nimport { useMeta, useScoresheet, useScoresheetDispatch } from '../ScoresheetContext';\n\nimport { TeamField } from '../../teams/TeamField';\n\nconst useStyles = makeStyles(theme => ({\n teams: {\n display: 'flex',\n justifyContent: 'flex-start',\n flexWrap: 'wrap',\n marginTop: theme.spacing(1),\n paddingLeft: theme.spacing(1),\n },\n label: {\n paddingLeft: theme.spacing(0.5),\n },\n input: {\n marginTop: theme.spacing(1),\n }\n}))\n\nconst inputProps = {\n variant: 'outlined',\n size: 'small',\n margin: 'dense',\n fullWidth: true,\n}\n\nconst validate = values => {\n const errors = {};\n\n if (values.homeScore === null || values.homeScore === undefined) errors.homeScore = 'ra.validation.required';\n if (values.awayScore === null || values.awayScore === undefined) errors.awayScore = 'ra.validation.required';\n\n if (values.homeScore && !Number.isInteger(values.homeScore)) errors.homeScore = 'ra.validation.whole';\n if (values.awayScore && !Number.isInteger(values.awayScore)) errors.awayScore = 'ra.validation.whole';\n\n return errors;\n}\n\nconst dispatchScore = async (game, homeScore = 0, awayScore = 0, dispatch, notify) => {\n const dispatches = [\n saveScore(game.id, { [game.homeTeamId]: homeScore, [game.awayTeamId]: awayScore })\n ]\n const results = await Promise.allSettled(dispatches.map(event => {\n try {\n return dispatch(event);\n } catch (e) {\n // catch validation errors caused by the dispatches\n // eslint-disable-next-line no-console\n console.error(e)\n return Promise.reject(e)\n }\n }))\n\n const isSuccessful = (results || []).every(result => result.status === 'fulfilled')\n const message = isSuccessful ? 'resources.scoresheets.messages.successful_save_score' : 'ra.message.error';\n const notificationType = isSuccessful ? 'success' : 'error';\n\n notify(message, notificationType)\n}\n\nconst ScoreEditForm = ({ game, ...props }) => {\n const translate = useTranslate();\n const classes = useStyles();\n const isHomeFirst = useIsHomeFirst();\n\n return <SimpleForm {...props} {...inputProps} validate={validate}>\n <RecordContextProvider value={game}>\n <Grid container spacing={2} fullWidth>\n <Grid item xs={12}>\n <Grid container spacing={2} fullWidth>\n <Grid item xs={8} sm={9}>\n <div className={classes.teams}>\n <TeamField source={isHomeFirst ? \"homeTeamId\" : \"awayTeamId\"} link={false} />\n <Typography className={classes.label} variant=\"body2\" color=\"textSecondary\" display=\"inline\">{`(${translate(`resources.games.labels.${isHomeFirst ? 'home' : 'away'}`)})`}</Typography>\n </div>\n </Grid>\n <Grid item xs={4} sm={3}>\n <NumberInput source={isHomeFirst ? \"homeScore\" : \"awayScore\"} label=\"resources.games.labels.score\" className={classes.input} min={0} max={999} {...inputProps} />\n </Grid>\n </Grid>\n </Grid>\n <Grid item xs={12}>\n <Grid container spacing={2} fullWidth>\n <Grid item xs={8} sm={9}>\n <div className={classes.teams}>\n <TeamField source={isHomeFirst ? \"awayTeamId\" : \"homeTeamId\"} link={false} />\n <Typography className={classes.label} variant=\"body2\" color=\"textSecondary\" display=\"inline\">{`(${translate(`resources.games.labels.${isHomeFirst ? 'away' : 'home'}`)})`}</Typography>\n </div>\n </Grid>\n <Grid item xs={4} sm={3}>\n <NumberInput source={isHomeFirst ? \"awayScore\" : \"homeScore\"} label=\"resources.games.labels.score\" className={classes.input} min={0} max={999} {...inputProps} />\n </Grid>\n </Grid>\n </Grid>\n </Grid>\n </RecordContextProvider>\n </SimpleForm>\n}\n\nexport const ScoreEditModal = ({ open, setOpen, ...props }) => {\n const translate = useTranslate();\n const game = useRecordContext();\n const dispatch = useScoresheetDispatch();\n const notify = useNotify();\n const sport = useSport();\n const { meta } = useMeta();\n const { maxScoreDiff, scoringMode } = meta?.policies || {};\n const homeScore = useScoresheet(scoresheet => getScore(scoresheet, sport, { teamId: game.homeTeamId, maxScoreDiff, scoringMode }));\n const awayScore = useScoresheet(scoresheet => getScore(scoresheet, sport, { teamId: game.awayTeamId, maxScoreDiff, scoringMode }));\n\n const onSubmit = async (values) => {\n await dispatchScore(game, values.homeScore, values.awayScore, dispatch, notify);\n\n setOpen(false)\n }\n\n const onCancel = () => setOpen(false);\n\n if (!open || !game) return null;\n\n return <Dialog open={open} maxWidth=\"xs\">\n <DialogTitle>{translate('resources.scoresheets.labels.edit_score')}</DialogTitle>\n <DialogContent>\n <RecordContextProvider value={{ homeScore, awayScore }}>\n <ScoreEditForm\n game={game}\n validate={validate}\n save={onSubmit}\n component={Fragment}\n toolbar={\n <DialogFormToolbar\n submitLabel=\"ra.action.save\"\n cancelLabel=\"ra.action.cancel\"\n onCancel={onCancel}\n />\n }\n />\n </RecordContextProvider>\n </DialogContent>\n </Dialog>\n}\n","import React from 'react';\nimport { useTranslate } from 'react-admin';\nimport {\n List,\n ListItem,\n Grid,\n Divider,\n Typography,\n makeStyles\n} from '@material-ui/core';\n\nimport { getPeriods, getSummary } from '@hisports/scoresheet/src/selectors';\nimport { displayTime } from '@hisports/scoresheet/src/util';\nimport { FF_PERIODS } from '@hisports/common/featureFlags';\n\nimport { useFlag, useSport } from '../../../http';\n\nimport { SummaryItem } from './SummaryItem';\nimport { useMeta, useScoresheet } from '../ScoresheetContext';\n\n\nconst useStyles = makeStyles(theme => ({\n list: {\n maxHeight: theme.spacing(75),\n overflow: 'auto',\n },\n divider: {\n textAlign: 'center',\n paddingTop: theme.spacing(1),\n paddingBottom: theme.spacing(1),\n }\n}))\n\nconst PeriodDivider = ({ gameTime }) => {\n const classes = useStyles();\n const translate = useTranslate();\n const sport = useSport();\n const periodSettings = useScoresheet(scoresheet => getPeriods(scoresheet)) || [];\n const periodSetting = periodSettings.find(setting => setting.period === gameTime.period);\n const periodLength = displayTime(periodSetting, sport, false, false);\n\n return <ListItem dense>\n <Grid container alignItems=\"center\" spacing={3} className={classes.divider}>\n <Grid item xs>\n <Divider />\n </Grid>\n <Grid item>\n <Typography variant=\"subtitle2\">\n {translate(`resources.gameEvents.labels.periods.${gameTime.period}`)} {`(${periodLength})`}\n </Typography>\n </Grid>\n <Grid item xs>\n <Divider />\n </Grid>\n </Grid>\n </ListItem>\n}\n\nexport const SummaryList = props => {\n const isEnabled = useFlag();\n const classes = useStyles();\n const { meta, game } = useMeta();\n const { scoringMode, penaltyMode } = meta?.policies || {};\n\n const sport = useSport();\n\n const events = useScoresheet(scoresheet => getSummary(scoresheet, meta.infractions, meta.types, sport, game.seasonId));\n\n return <List className={classes.list} dense>\n {events\n .filter(event => scoringMode !== 'Detailed' ? event.eventType !== 'goal' : true)\n .filter(event => penaltyMode !== 'Detailed' ? event.eventType !== 'penalty' : true)\n .map((event, i) => {\n const lastEvent = events?.[i-1];\n const addPeriodDivider = isEnabled(FF_PERIODS) && event?.gameTime?.period !== lastEvent?.gameTime?.period;\n\n return <>\n {addPeriodDivider && <PeriodDivider gameTime={event.gameTime} />}\n <SummaryItem\n key={event?.id}\n event={event}\n {...props}\n />\n </>\n })}\n </List>\n}\n","import React from 'react'\n\nimport { Alert } from '@material-ui/lab';\nimport { useTranslate } from 'react-admin';\n\nexport default function IncidentAlert() {\n const translate = useTranslate();\n\n return <Alert severity=\"warning\" >\n {translate('resources.scoresheets.alerts.missing_incidents')}\n </Alert>\n}\n","import React, { useMemo } from 'react';\n\nimport { getPenalties } from '@hisports/scoresheet/src/selectors';\n\nimport { useSport, useScopes } from '../../../../http';\nimport { useMeta, useScoresheet } from '../../ScoresheetContext';\nimport { useIncidentReports } from '../../gameIncidents/useIncidentReports';\nimport { useBranchSettings } from '../../../branchOfficeSettings';\nimport { isAuthorized } from '../../../../common/Authorize';\n\nimport IncidentAlert from './IncidentAlert';\n\nexport const SummaryAlerts = ({ isAssignedOfficial, isScorekeeper, ...props }) => {\n const { game, meta } = useMeta();\n const sport = useSport();\n const scopes = useScopes();\n const { data: branchSettings } = useBranchSettings(game?.officeId);\n\n const incidentRequiredPenalties = useScoresheet(scoresheet => getPenalties(scoresheet, meta.infractions, meta.types, sport, game.seasonId, { requireIncidentReport: true }))\n\n const enabled = branchSettings?.ff_incidents && (isAuthorized(scopes, 'gameIncidents', 'show') || isAssignedOfficial)\n const { data: incidents, loading: incidentsLoading, error: incidentsError } = useIncidentReports(game?.id, enabled);\n\n const hasPenaltiesWithoutReport = useMemo(() => {\n return !incidentRequiredPenalties.every(penalty => incidents?.some(incident => incident.penaltyId === penalty.id))\n }, [incidents, incidentRequiredPenalties])\n\n const showIncidentAlert = branchSettings?.ff_incidents && !!incidentRequiredPenalties?.length && (!incidentsLoading && hasPenaltiesWithoutReport) && isAssignedOfficial\n\n // eslint-disable-next-line react/jsx-no-useless-fragment\n return <>\n {showIncidentAlert && <IncidentAlert />}\n </>\n}\n","import React from 'react';\nimport { useTranslate } from 'react-admin';\nimport { Alert, AlertTitle } from '@material-ui/lab';\nimport { makeStyles } from '@material-ui/core';\nimport { QuestionAnswerOutlined } from '@material-ui/icons';\n\nimport { getAdminNotes, getNotes } from '@hisports/scoresheet/src/selectors';\n\nimport { useScoresheet } from '../../ScoresheetContext';\n\nconst useStyles = makeStyles(theme => ({\n alert: {\n margin: theme.spacing(1),\n whiteSpace: 'pre-line'\n },\n}))\n\nexport const NotesAlert = ({ type = 'scoresheet', ...props }) => {\n const classes = useStyles();\n const translate = useTranslate();\n const selector = type === 'scoresheet' ? getNotes : getAdminNotes;\n const notes = useScoresheet(scoresheet => selector(scoresheet));\n\n if (!notes) return null;\n\n const noteTitle = translate(`resources.scoresheets.labels.${type === 'scoresheet' ? 'scoresheet_notes' : 'admin_notes'}`)\n\n return <Alert icon={<QuestionAnswerOutlined />} severity={type === 'scoresheet' ? 'info' : 'warning'} className={classes.alert}>\n <AlertTitle>{noteTitle}</AlertTitle>\n <p>{notes}</p>\n </Alert>\n}\n","import React, { Fragment } from 'react';\nimport { RecordContextProvider, SimpleForm, TextInput, useNotify, useRecordContext, useTranslate } from 'react-admin';\nimport { Dialog, DialogContent, DialogTitle, useMediaQuery } from \"@material-ui/core\";\n\nimport { updateNotes } from '@hisports/scoresheet/src/actions';\nimport { getAdminNotes, getNotes } from '@hisports/scoresheet/src/selectors';\n\nimport { isAuthorized } from '../../../common/Authorize';\nimport { DialogFormToolbar } from \"../../../common/dialogs/DialogForm\";\nimport { useScoresheet, useScoresheetDispatch } from '../ScoresheetContext';\n\nconst inputProps = {\n variant: 'outlined',\n size: 'small',\n margin: 'dense',\n fullWidth: true,\n}\n\nconst dispatchNotes = async (gameId, scoresheetNotes, adminNotes, dispatch, notify) => {\n if (!gameId) return;\n\n const event = updateNotes(gameId, scoresheetNotes, adminNotes);\n\n try {\n await dispatch(event);\n notify('resources.scoresheets.messages.successful_save_notes', 'success');\n } catch (e) {\n // catch validation errors caused by the dispatch\n // eslint-disable-next-line no-console\n console.error(e)\n notify('ra.message.error', 'error')\n }\n}\n\nconst NotesForm = ({ ...props }) => {\n const record = useRecordContext();\n\n const canEditAdminNotes = isAuthorized(record, 'scoresheets', 'adminNotes')\n\n return <SimpleForm {...props}>\n <TextInput\n source=\"scoresheetNotes\"\n label=\"resources.scoresheets.labels.scoresheet_notes\"\n helperText=\"resources.scoresheets.helpers.scoresheet_notes\"\n parse={value => value} // empty input should be an empty string\n multiline\n rows={10}\n {...inputProps}\n />\n {canEditAdminNotes && <TextInput\n source=\"adminNotes\"\n label=\"resources.scoresheets.labels.admin_notes\"\n helperText=\"resources.scoresheets.helpers.admin_notes\"\n parse={value => value}\n multiline\n rows={10}\n {...inputProps}\n />}\n </SimpleForm>\n}\n\nexport const NotesModal = ({ open, setOpen, ...props }) => {\n const game = useRecordContext()\n const translate = useTranslate();\n const fullScreen = useMediaQuery(theme => theme.breakpoints.down('sm'));\n const dispatch = useScoresheetDispatch();\n const notify = useNotify();\n const notes = useScoresheet(scoresheet => getNotes(scoresheet));\n const adminNotes = useScoresheet(scoresheet => getAdminNotes(scoresheet));\n\n const hasNotes = notes || adminNotes;\n\n const onSubmit = async values => {\n await dispatchNotes(game?.id, values.scoresheetNotes, values.adminNotes, dispatch, notify)\n setOpen(false)\n }\n\n const onCancel = () => setOpen(false);\n\n return <Dialog open={open} maxWidth=\"md\" fullWidth fullScreen={fullScreen}>\n <DialogTitle>{translate(`resources.scoresheets.labels.${hasNotes ? 'edit_notes_title' : 'add_notes_title'}`)}</DialogTitle>\n <DialogContent>\n <RecordContextProvider value={{ scoresheetNotes: notes, adminNotes }}>\n <NotesForm\n save={onSubmit}\n component={Fragment}\n toolbar={\n <DialogFormToolbar\n submitLabel=\"ra.action.save\"\n cancelLabel=\"ra.action.cancel\"\n onCancel={onCancel}\n />\n }\n />\n </RecordContextProvider>\n </DialogContent>\n </Dialog>\n}\n","import React from 'react'\nimport { useTranslate } from 'react-admin'\nimport { Box } from '@material-ui/core'\nimport { Flag } from '@material-ui/icons'\nimport { Alert } from '@material-ui/lab'\n\nimport { getCertificationFlags } from '@hisports/scoresheet/src/selectors'\nimport { GENERAL_FLAGS } from '@hisports/scoresheet/src/constants'\n\nimport { useScoresheet } from '../ScoresheetContext'\n\nconst SUMMARY_FLAGS = [GENERAL_FLAGS.UNFINISHED, GENERAL_FLAGS.COACH_ENTERED_RESULT]\n\nconst SummaryFlags = () => {\n const translate = useTranslate();\n const flags = useScoresheet(scoresheet => getCertificationFlags(scoresheet));\n\n const summaryFlags = flags.filter(flag => SUMMARY_FLAGS.includes(flag.name) && flag.name !== GENERAL_FLAGS.NOTES ? flag : null);\n\n return (\n <>\n {summaryFlags.map(flag => (\n <Box m={1} key={flag.name}>\n <Alert icon={<Flag />} severity=\"warning\">\n {translate(`resources.games.labels.flags.${flag.name}`, 2)}\n </Alert>\n </Box>\n ))}\n </>\n )\n}\n\nexport default SummaryFlags\n","import React, { useState } from 'react';\nimport { useTranslate, useRecordContext, ListToolbar } from 'react-admin';\nimport { Button, makeStyles } from '@material-ui/core';\nimport { Add as AddIcon, Edit as EditIcon, Settings } from '@material-ui/icons'\n\nimport { EVENT_TYPE_PENALTY, EVENT_TYPE_GOAL } from '@hisports/scoresheet/src/constants';\nimport { getAdminNotes, getGameMembers, getNotes, isGameCertified, isGameCompleted } from '@hisports/scoresheet/src/selectors';\nimport { FF_PERIODS } from '@hisports/common/featureFlags';\n\nimport { isAuthorized } from '../../../common/Authorize';\nimport InfoCard from '../../../common/cards/InfoCard';\nimport { ActionsToolbar } from '../../../common/cards/ListCard';\nimport { useFlag } from '../../../http';\n\nimport { useMeta, useScoresheet } from '../ScoresheetContext';\nimport { Scoreboard } from '../components/Scoreboard';\nimport { ScoreEditModal } from '../components/ScoreEditModal';\nimport { SummaryBulkAddModal } from './SummaryBulkAddModal';\nimport { SummaryList } from './SummaryList';\nimport { SummaryAlerts } from './alerts';\nimport { NotesAlert } from './alerts/NotesAlert';\nimport { NotesModal } from './NotesModal';\nimport { PeriodsModal } from './PeriodsModal';\nimport SummaryFlags from './SummaryFlags';\n\nconst useStyles = makeStyles(theme => ({\n toolbar: {\n minHeight: theme.spacing(0),\n margin: theme.spacing(0, 1),\n }\n}))\n\nconst PeriodsButton = ({ ...props }) => {\n const translate = useTranslate()\n const [ open, setOpen ] = useState(false);\n\n return <>\n <Button color=\"primary\" size=\"small\" startIcon={<Settings />} onClick={() => setOpen(true)} {...props}>\n {translate('resources.scoresheets.labels.period_settings')}\n </Button>\n {open && <PeriodsModal open={open} setOpen={setOpen} />}\n </>\n}\n\nconst NotesButton = ({ ...props }) => {\n const translate = useTranslate()\n const [ open, setOpen ] = useState(false);\n const notes = useScoresheet(scoresheet => getNotes(scoresheet));\n const adminNotes = useScoresheet(scoresheet => getAdminNotes(scoresheet));\n\n const hasNotes = notes || adminNotes;\n\n return <>\n <Button color=\"primary\" size=\"small\" startIcon={hasNotes ? <EditIcon /> : <AddIcon />} onClick={() => setOpen(true)} {...props}>\n {translate(`resources.scoresheets.labels.${hasNotes ? 'edit_notes' : 'add_notes'}`)}\n </Button>\n {open && <NotesModal open={open} setOpen={setOpen} />}\n </>\n}\n\nconst AddSummaryItemsButton = ({ eventType, label, ...props }) => {\n const [modalOpen, setModalOpen] = useState(false);\n\n return <>\n <Button color=\"primary\" size=\"small\" startIcon={<AddIcon />} onClick={() => setModalOpen(true)} {...props}>{ label }</Button>\n {modalOpen && <SummaryBulkAddModal eventType={eventType} open={modalOpen} setModalOpen={setModalOpen} />}\n </>\n}\n\nconst EditScoreButton = ({ ...props }) => {\n const translate = useTranslate()\n const [ open, setOpen ] = useState(false);\n\n return <>\n <Button color=\"primary\" size=\"small\" startIcon={<EditIcon />} onClick={() => setOpen(true)} {...props}>\n {translate('resources.scoresheets.labels.edit_score')}\n </Button>\n {open && <ScoreEditModal open={open} setOpen={setOpen} />}\n </>\n}\n\nexport const SummaryCard = ({ status, isAssignedOfficial, isScorekeeper }) => {\n const translate = useTranslate();\n const isEnabled = useFlag();\n const { meta } = useMeta();\n const { scoringMode } = meta?.policies || {};\n const game = useRecordContext();\n const classes = useStyles();\n\n const isCompleted = useScoresheet(scoresheet => isGameCompleted(scoresheet))\n const isCertified = useScoresheet(scoresheet => isGameCertified(scoresheet))\n const gameMembers = useScoresheet(scoresheet => getGameMembers(scoresheet))\n\n const canEditSummaryList = status.scorekeeping && ((isScorekeeper && !isCompleted) || isAuthorized(game, 'scoresheets', 'full')) && !isCertified\n\n const showPeriodsButton = canEditSummaryList && isEnabled(FF_PERIODS);\n const showNotesButton = canEditSummaryList;\n\n const showAddGoalsButton = canEditSummaryList && scoringMode === 'Detailed';\n const showAddPenaltiesButton = canEditSummaryList && !!Object.keys(gameMembers).length;\n const showEditScoreButton = canEditSummaryList && scoringMode === 'Score';\n const showToolbar = showNotesButton || showAddGoalsButton || showAddPenaltiesButton || showEditScoreButton;\n\n const showAdminAlert = isAuthorized(game, 'scoresheets', 'adminNotes')\n\n return <InfoCard title=\"resources.scoresheets.labels.summary\">\n <SummaryAlerts isAssignedOfficial={isAssignedOfficial} isScorekeeper={isScorekeeper} />\n {showToolbar && <ListToolbar classes={classes} actions={<ActionsToolbar actions={<>\n {showPeriodsButton && <PeriodsButton />}\n {showNotesButton && <NotesButton />}\n {showAddGoalsButton && <AddSummaryItemsButton eventType={EVENT_TYPE_GOAL} label={translate('resources.scoresheets.actions.add_goals')} />}\n {showAddPenaltiesButton && <AddSummaryItemsButton eventType={EVENT_TYPE_PENALTY} label={translate('resources.scoresheets.actions.add_penalties')} />}\n {showEditScoreButton && <EditScoreButton />}\n </>} />} />}\n <Scoreboard />\n <SummaryFlags />\n <SummaryList status={status} isAssignedOfficial={isAssignedOfficial} isScorekeeper={isScorekeeper} />\n <NotesAlert type=\"scoresheet\" />\n {showAdminAlert && <NotesAlert type=\"admin\" />}\n </InfoCard>\n}\n","import React, { Fragment } from 'react';\nimport { useNotify, SimpleForm, FormInput, NumberInput, useTranslate, useRecordContext } from 'react-admin';\nimport { Dialog, DialogTitle, DialogContent, Table, TableHead, TableCell, TableBody, TableRow, useMediaQuery } from '@material-ui/core';\nimport { styled } from '@material-ui/styles';\n\nimport { getGoaliesShots } from '@hisports/scoresheet/src/selectors';\nimport { updateGoalieShots } from '@hisports/scoresheet/src/actions';\n\nimport { DialogFormToolbar } from '../../../common/dialogs/DialogForm';\nimport { usePermissions, useSport } from '../../../http';\n\nimport { useScoresheet, useScoresheetDispatch } from '../ScoresheetContext';\n\nconst filterGoalies = (game, goalies, permissions) => {\n // filter goalies for coaches only\n const teamIds = [game.homeTeamId, game.awayTeamId].filter(teamId => {\n return permissions.some(p => p.roleType === 'Team' && p.teamIds.includes(teamId))\n })\n if (!teamIds.length) return goalies;\n\n return goalies.filter(goalie => teamIds.includes(goalie.teamId))\n}\n\nconst Heading = styled('h4')(() => ({\n margin: '-12px 0 16px 0'\n}))\n\nconst Goalie = styled(TableCell)(({ theme }) => ({\n minWidth: theme.spacing(12),\n padding: theme.spacing(1),\n}))\n\nconst Period = styled(TableCell)(({ theme }) => ({\n textAlign: 'center',\n width: theme.spacing(10),\n padding: theme.spacing(1),\n '&:last-child': {\n paddingRight: theme.spacing(1),\n }\n}))\n\nconst PeriodFormInput = styled(FormInput)(({ theme }) => ({\n input: {\n width: theme.spacing(10),\n margin: 0,\n }\n}))\n\nconst validateShots = value => {\n if (!value) return;\n if (value < 0) return 'ra.validation.positive';\n if (!Number.isInteger(value)) return 'ra.validation.whole';\n}\n\nconst PeriodInput = ({ index, period }) =>\n <PeriodFormInput input={\n <NumberInput\n source={`goalies[${index}].totals[${period}]`}\n validate={validateShots}\n step={1}\n label=\"components.goalie_shots_against.labels.shots\"\n variant=\"outlined\"\n />\n } />\n\nconst GameShotsForm = ({ goalies, ...props }) => {\n const translate = useTranslate();\n return <SimpleForm {...props}>\n <Table selectable={false} fullWidth>\n <TableHead displaySelectAll={false} adjustForCheckbox={false}>\n <TableRow>\n <Goalie>{translate('components.goalie_shots_against.labels.goalie')}</Goalie>\n <Period>{translate('components.goalie_shots_against.labels.periods.1')}</Period>\n <Period>{translate('components.goalie_shots_against.labels.periods.2')}</Period>\n <Period>{translate('components.goalie_shots_against.labels.periods.3')}</Period>\n <Period>{translate('components.goalie_shots_against.labels.periods.OT')}</Period>\n </TableRow>\n </TableHead>\n <TableBody displayRowCheckbox={false}>\n {goalies.map((goalie, index) =>\n <TableRow key={goalie.participantId}>\n <Goalie>{goalie.participant.fullName}</Goalie>\n <Period>\n <PeriodInput index={index} period={0} />\n </Period>\n <Period>\n <PeriodInput index={index} period={1} />\n </Period>\n <Period>\n <PeriodInput index={index} period={2} />\n </Period>\n <Period>\n <PeriodInput index={index} period={3} />\n </Period>\n </TableRow>)}\n </TableBody>\n </Table>\n </SimpleForm>\n}\n\nconst GameShotsModal = ({ isOpen, onClose, ...props }) => {\n const game = useRecordContext(props);\n const sport = useSport();\n const notify = useNotify();\n const translate = useTranslate();\n const dispatch = useScoresheetDispatch();\n const permissions = usePermissions();\n let goalies = useScoresheet(scoresheet => getGoaliesShots(scoresheet, game, sport))\n\n goalies = filterGoalies(game, goalies, permissions)\n\n const onSubmit = async values => {\n const { goalies } = values\n try {\n await dispatch(updateGoalieShots(game.id, goalies))\n notify('components.goalie_shots_against.notifications.updated', 'info')\n } catch (e) {\n // eslint-disable-next-line no-console\n console.error(e)\n notify('ra.message.error', 'error')\n }\n onClose()\n }\n\n return <>\n <DialogTitle>{translate('components.goalie_shots_against.name')}</DialogTitle>\n <DialogContent>\n <Heading>{translate('resources.games.labels.game_number', { number: game.number })}</Heading>\n <div>{translate('components.goalie_shots_against.messages.enter_shots')}</div>\n <p>{translate('components.goalie_shots_against.messages.blank')}</p>\n <GameShotsForm game={game} initialValues={{ goalies }} goalies={goalies} save={onSubmit} component={Fragment} toolbar={\n <DialogFormToolbar submitLabel=\"ra.action.save\" onCancel={onClose} />\n } />\n </DialogContent>\n </>\n}\n\nexport const GoalieShotsModal = ({ open, onClose, ...props }) => {\n const fullScreen = useMediaQuery(theme => theme.breakpoints.down('sm'));\n\n return <Dialog open={open} onClose={onClose} fullScreen={fullScreen}>\n <GameShotsModal open={open} onClose={onClose} {...props} />\n </Dialog>\n}\n","import React, { useState } from 'react';\nimport { useRecordContext, useTranslate } from 'react-admin';\nimport { Table, TableHead, TableCell, TableBody, TableRow, Grid, Button } from '@material-ui/core';\nimport { Create } from '@material-ui/icons';\nimport { styled } from '@material-ui/styles';\n\nimport { getGoaliesShots } from '@hisports/scoresheet/src/selectors';\n\nimport { useIsHomeFirst } from '../../../resources/events/EventViewSettings';\nimport { isAuthorized } from '../../../common/Authorize';\nimport InfoCard from '../../../common/cards/InfoCard';\n\nimport { useScoresheet } from '../ScoresheetContext';\n\nimport { GoalieShotsModal } from './GameShotsModal';\nimport { useSport } from '../../../http';\n\nconst Goalie = styled(TableCell)(({ theme }) => ({\n minWidth: theme.spacing(12),\n padding: theme.spacing(1),\n}))\n\nconst Period = styled(TableCell)(({ theme }) => ({\n textAlign: 'center',\n width: theme.spacing(10),\n padding: theme.spacing(1),\n '&:last-child': {\n paddingRight: theme.spacing(1),\n }\n}))\n\nconst GoalieShots = ({ teamId }) => {\n const translate = useTranslate();\n const sport = useSport();\n const game = useRecordContext();\n const goalies = useScoresheet(scoresheet => getGoaliesShots(scoresheet, game, sport))\n\n return <Table selectable={false} fullWidth>\n <TableHead displaySelectAll={false} adjustForCheckbox={false}>\n <TableRow>\n <Goalie>{translate('components.goalie_shots_against.labels.goalie')}</Goalie>\n <Period>{translate('components.goalie_shots_against.labels.periods.1')}</Period>\n <Period>{translate('components.goalie_shots_against.labels.periods.2')}</Period>\n <Period>{translate('components.goalie_shots_against.labels.periods.3')}</Period>\n <Period>{translate('components.goalie_shots_against.labels.periods.OT')}</Period>\n </TableRow>\n </TableHead>\n <TableBody displayRowCheckbox={false}>\n {goalies\n .filter(goalie => goalie.teamId === teamId)\n .map(goalie => {\n return <TableRow key={goalie.participantId}>\n <Goalie>{goalie.participant.fullName}</Goalie>\n <Period>\n {goalie?.totals?.[0] || '—'}\n </Period>\n <Period>\n {goalie?.totals?.[1] || '—'}\n </Period>\n <Period>\n {goalie?.totals?.[2] || '—'}\n </Period>\n <Period>\n {goalie?.totals?.[3] || '—'}\n </Period>\n </TableRow>\n }\n )}\n </TableBody>\n </Table>\n}\n\nconst EditShotsButton = ({ game }) => {\n const translate = useTranslate();\n const [shotsOpen, setShotsOpen] = useState(false);\n\n return <>\n <Button onClick={() => setShotsOpen(true)} startIcon={<Create fontSize=\"small\" />}>{translate('components.goalie_shots_against.labels.edit_shots')}</Button>\n <GoalieShotsModal game={game} open={shotsOpen} onClose={() => setShotsOpen(false)} />\n </>\n}\n\nexport const GoalieShotsCard = ({ status }) => {\n const game = useRecordContext();\n const isHomeFirst = useIsHomeFirst()\n const canEditShots = status.scorekeeping && !game?.isCertified && isAuthorized(game, 'games', 'shots');\n\n return <InfoCard title=\"components.goalie_shots_against.name\" actions={canEditShots && <EditShotsButton game={game} />}>\n <Grid container spacing={3} xs={12}>\n <Grid item xs={12} md={6}>\n <GoalieShots teamId={isHomeFirst ? game.homeTeamId : game.awayTeamId} />\n </Grid>\n <Grid item xs={12} md={6}>\n <GoalieShots teamId={isHomeFirst ? game.awayTeamId : game.homeTeamId} />\n </Grid>\n </Grid>\n </InfoCard>\n}\n","import React, { Fragment } from 'react';\nimport { useNotify, SimpleForm, FormInput, NumberInput, useTranslate, useRecordContext } from 'react-admin';\nimport { Dialog, DialogTitle, DialogContent, Table, TableHead, TableCell, TableBody, TableRow, useMediaQuery } from '@material-ui/core';\nimport { styled } from '@material-ui/styles';\n\nimport { DialogFormToolbar } from '../../../common/dialogs/DialogForm';\nimport { updateThrowsInnings } from '@hisports/scoresheet/src/actions';\nimport { useScoresheet, useScoresheetDispatch } from '../ScoresheetContext';\nimport { getLineupPlayers } from '@hisports/scoresheet/src/selectors';\nimport { getThrowsInnings } from '@hisports/scoresheet/src/selectors/baseball';\nimport { useSport } from '../../../http';\n\nconst Heading = styled('h4')(() => ({\n margin: '-12px 0 16px 0'\n}))\n\nconst Player = styled(TableCell)(({ theme }) => ({\n minWidth: theme.spacing(12),\n padding: theme.spacing(1),\n}))\n\nconst Throw = styled(TableCell)(({ theme }) => ({\n textAlign: 'center',\n width: theme.spacing(15),\n padding: theme.spacing(1),\n}))\n\nconst Inning = styled(TableCell)(({ theme }) => ({\n textAlign: 'center',\n width: theme.spacing(15),\n padding: theme.spacing(1),\n}))\n\nconst ThrowFormInput = styled(FormInput)(({ theme }) => ({\n input: {\n width: theme.spacing(15),\n margin: 0,\n }\n}))\n\nconst InningFormInput = styled(FormInput)(({ theme }) => ({\n input: {\n width: theme.spacing(15),\n margin: 0,\n }\n}))\n\nconst validateThrowsInnings = value => {\n if (!value) return;\n if (value < 0) return 'ra.validation.positive';\n if (!Number.isInteger(value)) return 'ra.validation.whole';\n}\n\nconst ThrowInput = ({ index }) =>\n <ThrowFormInput input={\n <NumberInput\n source={`throwsInnings[${index}].throws`}\n validate={validateThrowsInnings}\n step={1}\n min={0}\n max={999}\n label={false}\n variant=\"outlined\"\n helperText={false}\n options={{\n InputLabelProps: {\n shrink: false,\n }\n }}\n />\n } />\n\nconst InningInput = ({ index }) =>\n <InningFormInput input={\n <NumberInput\n source={`throwsInnings[${index}].inningsPitched`}\n validate={validateThrowsInnings}\n step={1}\n min={0}\n max={999}\n label={false}\n variant=\"outlined\"\n helperText={false}\n options={{\n InputLabelProps: {\n shrink: false,\n }\n }}\n />\n } />\n\nconst ThrowsInningsForm = ({ throwsInnings, teamId, ...props }) => {\n const translate = useTranslate();\n return <SimpleForm {...props}>\n <Table selectable={false} fullWidth>\n <TableHead displaySelectAll={false} adjustForCheckbox={false}>\n <TableRow>\n <Player>{translate('components.throws_innings.labels.player')}</Player>\n <Throw>{translate('components.throws_innings.labels.throws')}</Throw>\n <Inning>{translate('components.throws_innings.labels.innings')}</Inning>\n </TableRow>\n </TableHead>\n <TableBody displayRowCheckbox={false}>\n {throwsInnings.map((player, index) => {\n if (teamId == player.teamId) {\n return <TableRow key={player.participantId}>\n <Player>#{player.number} {player.participant.fullName}</Player>\n <Throw>\n <ThrowInput index={index} />\n </Throw>\n <Inning>\n <InningInput index={index} />\n </Inning>\n </TableRow>\n }\n })}\n </TableBody>\n </Table>\n </SimpleForm>\n}\n\nconst getTotals = (participantId, throwsInnings, type) => {\n const data = throwsInnings.find(player => player.participantId == participantId);\n if (!data) return;\n return data[type];\n}\n\nconst getPlayerThrowsInnings = (teamId, lineupPlayers, throwsInnings) => {\n const playerThrowsInnings = [];\n\n lineupPlayers.forEach((player) => {\n playerThrowsInnings.push({\n participantId: player.participantId,\n number: player.number,\n participant: player.participant,\n teamId: teamId,\n throws: getTotals(player.participantId, throwsInnings, 'throws'),\n inningsPitched: getTotals(player.participantId, throwsInnings, 'inningsPitched'),\n })\n })\n\n playerThrowsInnings.sort((a, b) => {\n if (a.number < b.number) return -1;\n if (a.number > b.number) return 1;\n\n return 0;\n })\n\n return playerThrowsInnings;\n}\n\nconst GameThrowsInningsModal = ({ isOpen, onClose, ...props }) => {\n const game = useRecordContext(props);\n const teamId = props.teamId;\n const sport = useSport();\n const notify = useNotify();\n const translate = useTranslate();\n const dispatch = useScoresheetDispatch();\n\n const lineupPlayers = useScoresheet(scoresheet => getLineupPlayers(scoresheet, { teamId, affiliatesLast: false, sport, hideUnsaved: true }))\n const throwsInnings = useScoresheet(scoresheet => getThrowsInnings(scoresheet, { teamId }))\n const playerThrowsInnings = getPlayerThrowsInnings(teamId, lineupPlayers, throwsInnings)\n\n const onSubmit = async (values) => {\n const throwsInnings = values.throwsInnings.filter(player => player.throws != null || player.inningsPitched != null)\n try {\n await dispatch(updateThrowsInnings(game.id, props.teamId, throwsInnings))\n notify('components.throws_innings.notifications.updated', 'info')\n } catch (e) {\n // eslint-disable-next-line no-console\n console.error(e)\n notify('ra.message.error', 'error')\n }\n onClose()\n }\n\n return <>\n <DialogTitle>{translate('components.throws_innings.name')}</DialogTitle>\n <DialogContent>\n <Heading>{translate('resources.games.labels.game_number', { number: game.number })}</Heading>\n <ThrowsInningsForm game={game} teamId={props.teamId} initialValues={{ throwsInnings: playerThrowsInnings }} throwsInnings={playerThrowsInnings} save={onSubmit} component={Fragment} toolbar={\n <DialogFormToolbar submitLabel=\"ra.action.save\" onCancel={onClose} />\n } />\n </DialogContent>\n </>\n}\n\nexport const ThrowsInningsModal = ({ open, onClose, ...props }) => {\n const fullScreen = useMediaQuery(theme => theme.breakpoints.down('sm'));\n\n return <Dialog open={open} onClose={onClose} fullScreen={fullScreen} maxWidth=\"sm\" fullWidth>\n <GameThrowsInningsModal open={open} onClose={onClose} {...props} />\n </Dialog>\n}\n","import React, { useState } from 'react';\nimport { useRecordContext, useTranslate } from 'react-admin';\nimport { Table, TableHead, TableCell, TableBody, TableRow, Grid, Button } from '@material-ui/core';\nimport { Create } from '@material-ui/icons';\nimport { styled } from '@material-ui/styles';\n\nimport { getLineupPlayers, getThrowsInnings } from '@hisports/scoresheet/src/selectors';\n\nimport { useSport } from '../../../http';\nimport { isAuthorized } from '../../../common/Authorize';\nimport InfoCard from '../../../common/cards/InfoCard';\n\nimport { useScoresheet } from '../ScoresheetContext';\nimport { ThrowsInningsModal } from './ThrowsInningsModal';\nimport { Alert } from '@material-ui/lab';\n\nconst Player = styled(TableCell)(({ theme }) => ({\n minWidth: theme.spacing(12),\n padding: theme.spacing(1),\n}))\n\nconst Throw = styled(TableCell)(({ theme }) => ({\n textAlign: 'center',\n width: theme.spacing(15),\n padding: theme.spacing(1),\n}))\n\nconst Inning = styled(TableCell)(({ theme }) => ({\n textAlign: 'center',\n width: theme.spacing(15),\n padding: theme.spacing(1),\n}))\n\nconst ThrowsInnings = ({ teamId }) => {\n const translate = useTranslate();\n const sport = useSport();\n\n const playerLineup = useScoresheet(scoresheet => getLineupPlayers(scoresheet, { teamId, affiliatesLast: false, sport, hideUnsaved: true }))\n const playerThrowsInnings = useScoresheet(scoresheet => getThrowsInnings(scoresheet, { teamId }))\n\n const throws = (player) => {\n const players = playerThrowsInnings.find(throws => throws.participantId === player.participantId)\n return players?.throws ?? '—'\n }\n\n const inningsPitched = (player) => {\n const players = playerThrowsInnings.find(inningsPitched => inningsPitched.participantId === player.participantId)\n return players?.inningsPitched ?? '—'\n }\n\n return <Table selectable={false} fullWidth>\n <TableHead displaySelectAll={false} adjustForCheckbox={false}>\n <TableRow>\n <Player>{translate('components.throws_innings.labels.player')}</Player>\n <Throw>{translate('components.throws_innings.labels.throws')}</Throw>\n <Inning>{translate('components.throws_innings.labels.innings')}</Inning>\n </TableRow>\n </TableHead>\n <TableBody displayRowCheckbox={false}>\n {playerLineup.map(player =>\n <TableRow key={player.participantId}>\n <Player>#{player.number} {player.participant.fullName}</Player>\n <Throw>{throws(player)}</Throw>\n <Inning>{inningsPitched(player)}</Inning>\n </TableRow>\n )}\n </TableBody>\n </Table>\n}\n\nconst EditThrowsInningsButton = ({ game, teamId }) => {\n const translate = useTranslate();\n const [throwsInningsOpen, setThrowsInningsOpen] = useState(false);\n\n return <>\n <Button onClick={() => setThrowsInningsOpen(true)} startIcon={<Create fontSize=\"small\" />}>{translate('components.throws_innings.labels.edit')}</Button>\n <ThrowsInningsModal game={game} teamId={teamId} open={throwsInningsOpen} onClose={() => setThrowsInningsOpen(false)} />\n </>\n}\n\nexport const ThrowsInningsCard = ({ teamId, isScorekeeper, canEdit = false }) => {\n const game = useRecordContext();\n const translate = useTranslate();\n const canEditThrowsInnings = (isAuthorized(game, 'games', 'throwsInnings') || isScorekeeper) && !game.isCertified && canEdit;\n\n return <InfoCard title=\"components.throws_innings.name\" actions={canEditThrowsInnings && <EditThrowsInningsButton game={game} teamId={teamId} />}>\n {!canEditThrowsInnings && <Alert severity={game.isCertified ? \"info\" : \"warning\"}>{game.isCertified ? translate('resources.scoresheets.alerts.lineup_throwsinnings_certified'): translate('resources.scoresheets.alerts.lineup_throwsinnings')}</Alert>}\n <Grid container spacing={3} xs={12}>\n <Grid item xs={12}>\n <ThrowsInnings teamId={teamId} />\n </Grid>\n </Grid>\n </InfoCard>\n}\n","import React from 'react';\nimport { useRecordContext, useTranslate } from 'react-admin';\nimport { Gavel } from '@material-ui/icons';\n\nimport { isGameCertified, isGameCompleted } from '@hisports/scoresheet/src/selectors';\n\nimport ListCard from '../../../common/cards/ListCard';\n\nimport { SuspensionGrid } from './SuspensionGrid';\nimport { AddSuspensionButton } from './SuspensionModal';\nimport { useMeta, useScoresheet } from '../ScoresheetContext';\n\nexport const SuspensionsCard = props => {\n const game = useRecordContext(props);\n const translate = useTranslate();\n const { meta } = useMeta();\n const gameId = game?.id;\n\n const isCertified = useScoresheet(scoresheet => isGameCertified(scoresheet))\n const isCompleted = useScoresheet(scoresheet => isGameCompleted(scoresheet))\n\n let initialStatus = 'Pending';\n\n if ((meta?.policies?.suspensionActivation === 'Approval' && isCompleted) || (meta?.policies?.suspensionActivation === 'Certification' && isCertified)) {\n initialStatus = 'Active';\n }\n\n const addButton = <AddSuspensionButton initialValues={{ gameId, status: initialStatus, durationType: 'Definite' }} />\n\n return <ListCard\n title={translate(\"resources.suspensions.name\", 2)}\n icon={<Gavel />}\n basePath=\"/suspensions\"\n reference=\"suspensions\"\n target=\"gameId\"\n sort={{ field: ['participant.lastName', 'participant.firstName'], order: ['ASC', 'ASC'] }}\n addButton={addButton}\n >\n <SuspensionGrid showDialog />\n </ListCard>\n}\n","import React, { useState } from 'react';\nimport { useTranslate, useNotify, useRefresh, useRecordContext } from 'react-admin';\nimport { Button, makeStyles } from '@material-ui/core';\nimport { Alert } from '@material-ui/lab';\nimport { Replay } from '@material-ui/icons';\n\nimport { undoCertifyScoresheet } from '@hisports/scoresheet/src/actions';\n\nimport { isAuthorized } from '../../../../common/Authorize';\nimport AlertDialog from '../../../../common/dialogs/AlertDialog';\n\nimport { useScoresheetDispatch } from '../../ScoresheetContext';\n\nconst useStyles = makeStyles((theme) => ({\n alert: {\n '& .MuiAlert-action': {\n paddingTop: theme.spacing(0.25),\n alignItems: 'flex-start',\n gap: theme.spacing(1),\n }\n },\n flags: {\n paddingTop: theme.spacing(2),\n marginLeft: theme.spacing(-2),\n }\n}));\n\nexport const ExpandButton = ({ open, setOpen }) => {\n const translate = useTranslate();\n return <Button color=\"inherit\" size=\"small\" onClick={() => setOpen(open => !open)}>{translate(`resources.scoresheets.labels.${open ? 'less_info' : 'more_info'}`)}</Button>\n}\n\nexport const UndoApprovalButton = ({ gameId }) => {\n const translate = useTranslate();\n const dispatch = useScoresheetDispatch();\n const notify = useNotify();\n const refresh = useRefresh();\n const [ alert, setAlert ] = useState({ isOpen: false });\n\n const onClick = async () => {\n const result = await new Promise(resolve => {\n setAlert({\n title: translate('resources.scoresheets.messages.undo_certify.title'),\n message: translate('resources.scoresheets.messages.undo_certify.message'),\n reject: 'ra.action.cancel',\n accept: 'ra.action.continue',\n isOpen: true,\n onClose: result => {\n resolve(result)\n setAlert(alert => ({ ...alert, isOpen: false }))\n }\n })\n })\n if (!result) return;\n\n try {\n await dispatch(undoCertifyScoresheet(gameId))\n\n notify('resources.scoresheets.messages.successful_game_undo_certified', 'info')\n\n setTimeout(() => refresh(), 500);\n } catch (e) {\n // eslint-disable-next-line no-console\n console.error(e)\n notify('ra.message.error', 'error')\n }\n }\n\n return <>\n <Button color=\"primary\" size=\"small\" startIcon={<Replay />} onClick={onClick}>\n {translate('resources.scoresheets.labels.undo_certify')}\n </Button>\n <AlertDialog {...alert} />\n </>\n}\n\nexport const CertifiedAlert = props => {\n const translate = useTranslate();\n const classes = useStyles({ open });\n const game = useRecordContext(props);\n\n const canUndoApproval = isAuthorized(game, 'scoresheets', 'full')\n\n return <Alert className={classes.alert} severity=\"success\" action={[\n canUndoApproval && <UndoApprovalButton gameId={game.id} />,\n ]}>\n {translate('resources.scoresheets.alerts.certified')}\n </Alert>\n}\n","import React, { useState } from 'react';\nimport { useRecordContext, useTranslate } from 'react-admin';\nimport { Button, makeStyles } from '@material-ui/core';\nimport { Alert } from '@material-ui/lab'\n\n\nimport { isAuthorized } from '../../../../common/Authorize';\n\nimport { CertificationModal } from '../CertificationModal';\n\nconst useStyles = makeStyles(theme => ({\n alert: {\n '& .MuiAlert-action': {\n paddingTop: theme.spacing(0.25),\n alignItems: 'flex-start',\n gap: theme.spacing(1),\n }\n },\n flags: {\n paddingTop: theme.spacing(2),\n marginLeft: theme.spacing(-2),\n }\n}))\n\nconst CertifyButton = ({ ...props }) => {\n const translate = useTranslate();\n const [ modalOpen, setModalOpen ] = useState(false);\n\n return <>\n <Button color=\"primary\" variant=\"contained\" size=\"small\" onClick={() => setModalOpen(true)}>\n {translate('ra.action.certify')}\n </Button>\n {modalOpen && <CertificationModal open={modalOpen} setModalOpen={setModalOpen} {...props} />}\n </>\n}\n\nexport const CertifyAlert = props => {\n const classes = useStyles();\n const game = useRecordContext(props);\n const translate = useTranslate();\n\n const showButton = isAuthorized(game, 'scoresheets', 'full');\n\n return <Alert className={classes.alert} severity=\"warning\" action={[\n showButton && <CertifyButton {...props} />,\n ]}>\n {translate('resources.scoresheets.alerts.not_certified')}\n </Alert>\n}\n","import React from 'react';\n\nimport { isGameCertified, isGameCompleted } from '@hisports/scoresheet/src/selectors';\n\nimport { useMeta, useScoresheet } from '../../ScoresheetContext';\n\nimport { CertifiedAlert } from './CertifiedAlert';\nimport { CertifyAlert } from './CertifyAlert';\n\nexport const CertificationAlerts = ({ isAssignedOfficial, isScorekeeper, ...props }) => {\n const { meta } = useMeta();\n\n const isCertified = useScoresheet(scoresheet => isGameCertified(scoresheet))\n const isCompleted = useScoresheet(scoresheet => isGameCompleted(scoresheet))\n\n const showCertifyAlerts = isCompleted && meta?.policies?.requireCertification === true\n\n if (!showCertifyAlerts) return null;\n\n return <>\n {isCertified && <CertifiedAlert />}\n {!isCertified && <CertifyAlert />}\n </>\n}\n","import React, { Fragment, useEffect, useMemo, useRef, useState } from 'react';\nimport { ArrayInput, RecordContextProvider, SimpleForm, TextInput, useNotify, useRecordContext, useRefresh, useTranslate } from 'react-admin';\nimport { Button, Checkbox, Chip, Dialog, DialogContent, DialogContentText, DialogTitle, List, ListItem, ListItemIcon, ListItemText, makeStyles, useMediaQuery } from '@material-ui/core';\nimport { useForm } from 'react-final-form';\nimport { Person as PersonIcon } from '@material-ui/icons';\n\nimport { FF_APPROVAL_SIGNATURE } from '@hisports/common/featureFlags';\nimport { OFFICIAL_STATUS_CONFIRMED, OFFICIAL_STATUS_DECLINED, OFFICIAL_STATUS_NO_SHOW } from '@hisports/scoresheet/src/constants';\nimport { getCertificationFlag, getCertificationFlags, getDefaultGameEndTime, getOfficials } from '@hisports/scoresheet/src/selectors';\nimport { addCertificationFlag, approveScoresheet, endGame, removeOfficial, saveCertificationFlags, updateOfficial } from '@hisports/scoresheet/src/actions';\nimport { generateGameFlags, isSupervisor, sortOfficials } from '@hisports/scoresheet/src/util';\n\nimport { useFlag, useHttpClient, useSport } from '../../../http';\nimport HorizontalFormIterator, { TransitionProps } from '../../../common/ra/HorizontalFormIterator';\nimport { DialogFormToolbar } from '../../../common/dialogs/DialogForm';\nimport { EnumInput } from '../../../common/inputs/EnumInputs';\nimport { SignatureInput, useSignature } from '../../../common/inputs/SignatureInput';\n\nimport { useMeta, useScoresheet, useScoresheetDispatch, useScoresheetStore } from '../ScoresheetContext';\nimport { Divider, FlagList } from '../certification/FlagList';\nimport { GameTimeInput } from '../components/GameTimeInput';\n\nconst useStyles = makeStyles(theme => ({\n divider: {\n textAlign: 'center',\n paddingTop: theme.spacing(1),\n paddingBottom: theme.spacing(1),\n },\n checkbox: {\n padding: 0\n },\n listItem: {\n paddingTop: 0,\n paddingBottom: 0,\n },\n list: {\n paddingBottom: 0,\n },\n chip: {\n marginRight: theme.spacing(1)\n }\n}))\n\nconst inputProps = {\n variant: 'outlined',\n size: 'small',\n margin: 'dense',\n fullWidth: true,\n}\n\n// simple email regex to require at least: a@a.a\nconst emailRegex = /^[^@\\s]+@[^@\\s]+\\.[^@\\s]+$/i;\n\nconst getDefaultEndTime = (scoresheet, sport) => {\n let endTime = {}\n const { minutes, seconds, ...rest } = getDefaultGameEndTime(scoresheet, sport)\n\n endTime = { ...rest }\n if (minutes != null || seconds != null) {\n // input requires minutes/seconds to be nested\n endTime.clock = {\n minutes,\n seconds,\n }\n }\n\n return { ...endTime }\n}\n\nconst validate = (values, validateSignature, sport) => {\n const errors = {\n endTime: {}\n };\n const { clock, period, half } = values?.endTime || {}\n\n if (sport === 'Hockey') {\n const { minutes, seconds } = clock || {};\n if (!period) {\n errors.endTime.period = 'ra.validation.required'\n }\n if (period != 'SO') {\n if (minutes == undefined || seconds == undefined) {\n errors.endTime.clock = 'ra.validation.required'\n } else if (isNaN(minutes) || isNaN(seconds)) {\n errors.endTime.clock = 'ra.validation.invalid_number'\n }\n }\n\n if (validateSignature) {\n if (!values.officialId) errors.officialId = 'ra.validation.required';\n if (!values.signature) errors.signature = 'ra.validation.required';\n }\n }\n\n if (sport === 'Soccer') {\n const { minutes, extra } = clock || {};\n if (!minutes) {\n errors.endTime.clock = 'ra.validation.required'\n } else if (isNaN(minutes)) {\n errors.endTime.clock = 'ra.validation.invalid_number'\n } else if (minutes < 1) {\n errors.endTime.clock = 'ra.validation.greater_than_zero'\n } else if (extra && isNaN(extra)) {\n errors.endTime.clock = 'resources.scoresheets.validations.invalid_extra'\n }\n }\n\n if (sport === 'Baseball') {\n if (!period) {\n errors.endTime.period = 'ra.validation.required'\n } else if (isNaN(period)) {\n errors.endTime.period = 'ra.validation.invalid_number'\n } else if (period < 1) {\n errors.endTime.period = 'ra.validation.greater_than_zero'\n }\n if (!half) errors.endTime.half = 'ra.validation.required'\n }\n\n errors.emails = (values?.emails || []).map(email => {\n if (email && !emailRegex.test(email)) return 'ra.validation.invalid_email_format';\n })\n\n return errors;\n}\n\nconst RASignatureInput = ({ source, ...props }) => {\n const translate = useTranslate()\n const ref = useRef(null);\n const { signature, isEmpty, clear, handleChange } = useSignature(ref);\n const { change } = useForm()\n\n useEffect(() => {\n if (isEmpty) {\n change(source)\n } else {\n change(source, signature)\n }\n }, [signature, isEmpty, change, source])\n\n return <>\n <SignatureInput ref={ref} onChange={handleChange} {...props} />\n <Button color=\"primary\" size=\"small\" onClick={clear}>{translate('ra.action.clear')}</Button>\n </>\n}\n\nconst getPositionText = (official = {}, translate) => {\n let position = translate(`resources.games.values.assignment.position.${official.position}`, { _: official.position })\n if (!official.participantId) {\n position += ` (${translate('resources.games.labels.assignment.adhoc')})`\n }\n return position\n}\n\nconst SignatoryInput = ({ officials = [], ...props }) => {\n const translate = useTranslate()\n const choices = useMemo(() => officials.map(official => ({\n id: official.id,\n name: official.participant.fullName,\n position: getPositionText(official, translate),\n })), [officials, translate])\n\n return <EnumInput choices={choices} filterKeys={['name']} optionDescription=\"position\" {...props} />\n}\n\nconst Official = ({ official = {}, ...props }) => {\n const translate = useTranslate()\n const classes = useStyles();\n const form = useForm();\n const [ checked, setChecked ] = useState(![OFFICIAL_STATUS_NO_SHOW, OFFICIAL_STATUS_DECLINED].includes(official.status));\n\n const primary = official.participant.fullName\n let secondary = getPositionText(official, translate);\n\n if (official.status === OFFICIAL_STATUS_DECLINED) {\n secondary += ` - ${translate(`resources.games.labels.assignment.status.${official.status}`, { _: official.status })}`\n }\n\n const handleSelect = () => {\n const { values = {} } = form.getState()\n const { noShowOfficialIds = [], assignedOfficialIds = [] } = values\n\n if (checked) {\n // unselecting official checkbox\n form.mutators.remove('assignedOfficialIds', assignedOfficialIds.indexOf(official.id))\n form.mutators.push('noShowOfficialIds', official.id)\n } else {\n // selecting official checkbox\n form.mutators.remove('noShowOfficialIds', noShowOfficialIds.indexOf(official.id))\n form.mutators.push('assignedOfficialIds', official.id)\n }\n\n setChecked(!checked)\n }\n\n return <ListItem className={classes.listItem}>\n <ListItemIcon><PersonIcon /></ListItemIcon>\n <ListItemText\n primaryTypographyProps={{ variant: \"body2\" }}\n primary={primary}\n secondary={secondary}\n />\n {!checked && <Chip label={translate('resources.games.labels.assignment.status.no_show')} variant=\"outlined\" size=\"small\" className={classes.chip} />}\n <Checkbox color=\"primary\" className={classes.checkbox} checked={checked} onChange={handleSelect} />\n </ListItem>\n}\n\nconst OfficialAttendanceList = ({ officials, label, helperText, ...props }) => {\n const classes = useStyles();\n\n return <List dense className={classes.list}>\n <Divider text=\"resources.scoresheets.labels.official_attendance\" />\n {officials.map(official => <Official official={official} />)}\n </List>\n}\n\nconst EmailsInput = ({ source, label, helperText }) => {\n return <ArrayInput source={source} label={label} helperText={helperText}>\n <HorizontalFormIterator disableReordering TransitionProps={TransitionProps}>\n <TextInput label=\"\" placeholder=\"example@domain.com\" helperText=\"\" {...inputProps} />\n </HorizontalFormIterator>\n </ArrayInput>\n}\n\nconst ApprovalForm = ({ game, assignedOfficials, noShowOfficials, ...props }) => {\n const { meta } = useMeta();\n const isEnabled = useFlag();\n\n const assignedOfficialsNoSupervisor = assignedOfficials.filter(official => !isSupervisor(official))\n const noShowAndAssignedOfficials = sortOfficials([...assignedOfficialsNoSupervisor, ...noShowOfficials]);\n\n const showOfficialAttendance = noShowAndAssignedOfficials.length > 0;\n const showFlags = meta?.policies?.requireCertification === true;\n const showSignature = assignedOfficials.length > 0 && isEnabled(FF_APPROVAL_SIGNATURE);\n\n return <SimpleForm {...props} {...inputProps}>\n <GameTimeInput source=\"endTime\" helperText=\"resources.scoresheets.messages.end_game\" periodLabel=\"resources.scoresheets.labels.period\" {...inputProps} />\n {showOfficialAttendance && <OfficialAttendanceList officials={noShowAndAssignedOfficials} />}\n {showFlags && <FlagList showAll />}\n {showSignature && <SignatoryInput source=\"officialId\" label=\"resources.scoresheets.labels.official\" officials={assignedOfficials} {...inputProps} />}\n {showSignature && <RASignatureInput source=\"signature\" />}\n <EmailsInput source=\"emails\" label=\"resources.scoresheets.labels.additional_emails\" helperText=\"resources.scoresheets.messages.additional_emails\" />\n </SimpleForm>\n}\n\nexport const ApprovalDialog = ({ open, setModalOpen, ...props }) => {\n const fullScreen = useMediaQuery(theme => theme.breakpoints.down('sm'));\n const translate = useTranslate()\n const game = useRecordContext();\n const { data: meta } = useHttpClient(`/games/${game.id}/meta?includeMemberValidations=true`)\n const sport = useSport();\n const dispatch = useScoresheetDispatch();\n const refresh = useRefresh();\n const notify = useNotify();\n const store = useScoresheetStore();\n const scoresheet = useScoresheet(scoresheet => scoresheet)\n const assignedOfficials = getOfficials(scoresheet, { assignedOnly: true })\n const noShowOfficials = getOfficials(scoresheet, { noShowOnly: true, declinedOnly: true })\n\n useEffect(() => {\n if (!meta) return;\n\n const scoresheet = store.getState();\n const automaticFlags = generateGameFlags(game, scoresheet, meta)\n\n // initialize automatic flags on the scoresheet\n if (!automaticFlags) return;\n\n automaticFlags.forEach(flag => {\n const scoresheetFlag = getCertificationFlag(scoresheet, flag.name, flag.teamId);\n\n if (!scoresheetFlag) {\n const event = addCertificationFlag(game.id, flag.name, flag.teamId);\n dispatch(event);\n }\n })\n }, [ dispatch, store, game, meta ])\n\n const onSubmit = async ({ endTime, officialId, signature, emails, assignedOfficialIds, noShowOfficialIds } = {}) => {\n const scoresheet = store.getState();\n const flags = getCertificationFlags(scoresheet)\n\n try {\n // end game\n await dispatch(endGame(game.id, { ...endTime, ...endTime.clock }))\n\n // update officials\n await Promise.allSettled([\n // update officials who did not show\n ...assignedOfficials.map(official => {\n if (noShowOfficialIds.includes(official.id)) {\n return removeOfficial(game.id, official, true)\n }\n }),\n // update officials who did show\n ...noShowOfficials.map(official => {\n if (assignedOfficialIds.includes(official.id)) {\n return updateOfficial(game.id, official, official.position, OFFICIAL_STATUS_CONFIRMED)\n }\n })\n ].filter(Boolean).map(event => {\n try {\n return dispatch(event)\n } catch (e) {\n // catch validation errors caused by the dispatches\n return Promise.reject(e)\n }\n }))\n\n // save certification flags\n if (flags?.length) {\n await dispatch(saveCertificationFlags(game.id, flags))\n }\n\n // approve scoresheet\n const official = assignedOfficials.find(official => official.id === officialId);\n const approval = { signature };\n\n if (official?.participantId) {\n approval.participantId = official.participantId;\n } else {\n approval.officialId = officialId\n }\n\n await dispatch(approveScoresheet(game.id, {\n unreviewed: false,\n officials: officialId ? [approval] : undefined,\n emails\n }))\n\n notify('resources.scoresheets.messages.successful_game_approve', 'success')\n } catch (e) {\n // catch validation errors caused by the dispatches\n // eslint-disable-next-line no-console\n console.error(e)\n notify('ra.message.error', 'error')\n }\n\n setModalOpen(false)\n setTimeout(() => refresh(), 500);\n }\n\n const onCancel = () => {\n setModalOpen(false);\n }\n\n const initialValues = {\n endTime: getDefaultEndTime(scoresheet, sport),\n assignedOfficialIds: assignedOfficials.map(official => official.id).filter(Boolean),\n noShowOfficialIds: noShowOfficials.map(official => official.id).filter(Boolean),\n }\n\n return <Dialog open={open} fullWidth fullScreen={fullScreen} maxWidth={fullScreen ? \"xs\" : \"sm\"}>\n <DialogTitle>{translate('resources.scoresheets.labels.approve_game')}</DialogTitle>\n <DialogContent>\n <DialogContentText>\n {translate('resources.scoresheets.messages.confirm_sign_game')}\n </DialogContentText>\n <RecordContextProvider value={null}>\n <ApprovalForm\n validate={values => validate(values, assignedOfficials.length > 0, sport)}\n save={onSubmit}\n game={game}\n initialValues={initialValues}\n component={Fragment}\n assignedOfficials={assignedOfficials}\n noShowOfficials={noShowOfficials}\n toolbar={\n <DialogFormToolbar submitLabel=\"ra.action.approve\" cancelLabel=\"ra.action.cancel\" onCancel={onCancel} disableInvalidSubmit />\n }\n />\n </RecordContextProvider>\n </DialogContent>\n </Dialog>\n}\n","import React, { useState } from 'react';\nimport { useRecordContext, useRefresh, useTranslate } from 'react-admin';\nimport { Button, makeStyles } from '@material-ui/core';\nimport { Alert } from '@material-ui/lab';\nimport { TabletMac } from '@material-ui/icons';\n\nimport { FF_SCOREKEEPING_APP } from '@hisports/common/featureFlags';\nimport { KEEPER_POSITIONS, OFFICIAL_POSITIONS } from '@hisports/scoresheet/src/constants';\n\nimport AlertDialog from '../../../../common/dialogs/AlertDialog';\nimport { isAuthorized } from '../../../../common/Authorize';\nimport { useFlag } from '../../../../http';\n\nimport { ApprovalDialog } from '../ApprovalModal';\n\nconst useStyles = makeStyles(theme => ({\n approval: {\n marginLeft: theme.spacing(1),\n },\n}))\n\nconst ApprovalButton = ({ isMissingIncidents, ...props }) => {\n const translate = useTranslate();\n const [modalOpen, setModalOpen] = useState(false);\n const [alert, setAlert] = useState({ isOpen: false })\n const refresh = useRefresh()\n\n const handleClick = () => {\n if (!isMissingIncidents) {\n setModalOpen(true)\n } else {\n setAlert({\n title: translate('resources.scoresheets.alerts.missingIncidents.title'),\n message: translate('resources.scoresheets.alerts.missingIncidents.message'),\n reject: 'ra.action.ok',\n isOpen: true,\n onClose: () => {\n setAlert(alert => ({ ...alert, isOpen: false }));\n refresh()\n }\n })\n }\n }\n\n return <>\n <Button color=\"primary\" variant=\"contained\" size=\"small\" onClick={() => handleClick()} {...props}>{translate('resources.scoresheets.labels.complete')}</Button>\n {modalOpen && <ApprovalDialog open={modalOpen} setModalOpen={setModalOpen} />}\n <AlertDialog {...alert} />\n </>\n}\n\nconst ScorekeepingButton = ({ gameId, officials, ...props }) => {\n const translate = useTranslate();\n const assignedOfficials = officials?.assignments?.filter(official => ['assigned', 'confirmed'].includes(official.status));\n const hasRequiredOfficials = assignedOfficials?.some(official => KEEPER_POSITIONS.includes(official.position)) && assignedOfficials?.some(official => OFFICIAL_POSITIONS.includes(official.position));\n const scorekeepingUrl = hasRequiredOfficials ? `/scoresheets/${gameId}/scoresheet` : `/scoresheets/${gameId}/pregame`;\n\n return <Button startIcon={<TabletMac />} color=\"primary\" size=\"small\" href={scorekeepingUrl} {...props}>\n {translate('resources.games.labels.scorekeeping')}\n </Button>\n}\n\nexport const ApproveAlert = ({ canApprove, status, ...props }) => {\n const translate = useTranslate();\n const game = useRecordContext();\n const classes = useStyles();\n const isEnabled = useFlag();\n\n const { officials, scorekeeping = false, scoringMode = 'Detailed', penaltyMode = 'Detailed' } = status || {};\n const showButton = canApprove || isAuthorized(game, 'scoresheets', 'full');\n const showScorekeeping = scorekeeping && (scoringMode === 'Detailed' && penaltyMode === 'Detailed') && isEnabled(FF_SCOREKEEPING_APP) && isAuthorized(game, 'scoresheets', 'full');\n\n return <Alert severity=\"info\" action={[\n showScorekeeping && <ScorekeepingButton gameId={game?.id} officials={officials} {...props} />,\n showButton && <ApprovalButton className={classes.approval} {...props} />\n ]}>\n {translate('resources.scoresheets.alerts.approve')}\n </Alert>\n}\n","import React, { Fragment } from 'react';\nimport { RecordContextProvider, SimpleForm, useNotify, useRecordContext, useRefresh, useTranslate } from 'react-admin';\nimport { Dialog, DialogContent, DialogContentText, DialogTitle, useMediaQuery } from '@material-ui/core';\nimport { isEqual, sortBy } from 'lodash';\n\nimport { getPeriods } from '@hisports/scoresheet/src/selectors';\nimport { startGame } from '@hisports/scoresheet/src/actions';\n\nimport { DialogFormToolbar } from '../../../common/dialogs/DialogForm';\n\nimport { useMeta, useScoresheet, useScoresheetDispatch } from '../ScoresheetContext';\nimport { HockeyPeriodSettings } from '../summary/PeriodsModal';\n\nconst StartForm = ({ game, loaded, assignedOfficials, noShowOfficials, ...props }) => {\n const scoresheetPeriods = useScoresheet(scoresheet => getPeriods(scoresheet)) || [];\n const { meta } = useMeta();\n const { policies } = meta || {};\n const { periods: periodSettings } = policies || {}\n\n return <SimpleForm {...props}>\n <HockeyPeriodSettings periods={periodSettings || scoresheetPeriods} />\n </SimpleForm>\n}\n\nexport const StartDialog = ({ open, setModalOpen, ...props }) => {\n const fullScreen = useMediaQuery(theme => theme.breakpoints.down('sm'));\n const translate = useTranslate()\n const game = useRecordContext();\n const dispatch = useScoresheetDispatch();\n const periodSettings = useScoresheet(scoresheet => getPeriods(scoresheet)) || [];\n const refresh = useRefresh();\n const notify = useNotify();\n\n const onSubmit = async ({ periods }) => {\n const hasSettingsChanged = !isEqual(sortBy(periods, 'period'), sortBy(periodSettings, 'period'));\n\n try {\n await dispatch(startGame(game.id, hasSettingsChanged ? periods : undefined))\n\n notify('resources.scoresheets.messages.successful_game_start', 'success')\n } catch (e) {\n // catch validation errors caused by the dispatches\n // eslint-disable-next-line no-console\n console.error(e)\n notify('ra.message.error', 'error')\n }\n\n setModalOpen(false)\n setTimeout(() => refresh(), 500);\n }\n\n const onCancel = () => {\n setModalOpen(false);\n }\n\n return <Dialog open={open} fullWidth fullScreen={fullScreen} maxWidth={fullScreen ? \"xs\" : \"sm\"}>\n <DialogTitle>{translate('resources.scoresheets.labels.start_game')}</DialogTitle>\n <DialogContent>\n <DialogContentText>\n {translate('resources.scoresheets.messages.start_game')}\n </DialogContentText>\n <RecordContextProvider value={null}>\n <StartForm\n save={onSubmit}\n game={game}\n component={Fragment}\n toolbar={\n <DialogFormToolbar submitLabel=\"ra.action.start\" cancelLabel=\"ra.action.cancel\" onCancel={onCancel} disableInvalidSubmit />\n }\n />\n </RecordContextProvider>\n </DialogContent>\n </Dialog>\n}\n","import React, { useState } from 'react';\nimport { useRecordContext, useTranslate } from 'react-admin';\nimport { Button } from '@material-ui/core';\nimport { Alert } from '@material-ui/lab';\n\nimport AlertDialog from '../../../../common/dialogs/AlertDialog';\nimport { isAuthorized } from '../../../../common/Authorize';\n\nimport { StartDialog } from '../StartModal';\n\nconst StartButton = props => {\n const translate = useTranslate();\n const [modalOpen, setModalOpen] = useState(false);\n\n const handleClick = () => {\n setModalOpen(true)\n }\n\n return <>\n <Button color=\"primary\" variant=\"contained\" size=\"small\" onClick={() => handleClick()} {...props}>{translate('ra.action.start')}</Button>\n {modalOpen && <StartDialog open={modalOpen} setModalOpen={setModalOpen} />}\n <AlertDialog {...alert} />\n </>\n}\n\nexport const StartAlert = ({ canApprove, ...props }) => {\n const translate = useTranslate();\n const game = useRecordContext();\n\n const showButton = canApprove || isAuthorized(game, 'scoresheets', 'full')\n\n return <Alert severity=\"info\" action={showButton && <StartButton {...props} />}>\n {translate('resources.scoresheets.alerts.start')}\n </Alert>\n}\n","import React, { useMemo } from 'react';\nimport { useTranslate } from 'react-admin';\nimport { Alert } from '@material-ui/lab';\nimport { Grid } from '@material-ui/core';\n\nimport { getPenalties, isGameActive, isGameCertified, isGameCompleted, isGameScheduled, isLineupApproved } from '@hisports/scoresheet/src/selectors';\nimport { FF_REQUIRE_GAME_START, FF_REQUIRE_LINEUPS } from '@hisports/common/featureFlags';\n\nimport { isAuthorized } from '../../../../common/Authorize';\nimport { useSport, useScopes, useFlag } from '../../../../http';\nimport { useBranchSettings } from '../../../branchOfficeSettings';\nimport { useMeta, useScoresheet } from '../../ScoresheetContext';\nimport { useIncidentReports } from '../../gameIncidents/useIncidentReports';\nimport { CertificationAlerts } from '../../certification/alerts';\n\nimport { ApproveAlert } from './ApproveAlert';\nimport { CompletedAlert } from './CompletedAlert';\nimport { StartAlert } from './StartAlert';\n\nconst LineupAlert = props => {\n const translate = useTranslate();\n return <Alert severity=\"info\">\n {translate('resources.scoresheets.alerts.lineup')}\n </Alert>\n}\n\nexport const GameActionAlerts = ({ isAssignedOfficial, isScorekeeper, status, ...props }) => {\n const { game, meta } = useMeta();\n const isEnabled = useFlag();\n const sport = useSport();\n const scopes = useScopes();\n const { data: branchSettings } = useBranchSettings(game?.officeId);\n\n const lineupApproved = useScoresheet(scoresheet =>\n isLineupApproved(scoresheet, { teamId: game.homeTeamId }) &&\n isLineupApproved(scoresheet, { teamId: game.awayTeamId })\n )\n const isScheduled = useScoresheet(scoresheet => isGameScheduled(scoresheet))\n const isActive = useScoresheet(scoresheet => isGameActive(scoresheet))\n const isCertified = useScoresheet(scoresheet => isGameCertified(scoresheet))\n const isCompleted = useScoresheet(scoresheet => isGameCompleted(scoresheet))\n const isIncidentsRequired = meta?.policies.requireIncidentReports && branchSettings?.ff_incidents;\n const isLineupApprovedRequired = isEnabled(FF_REQUIRE_LINEUPS)\n const isGameStartRequired = isEnabled(FF_REQUIRE_GAME_START)\n const isLineupReady = !isLineupApprovedRequired || lineupApproved\n\n const incidentRequiredPenalties = useScoresheet(scoresheet => getPenalties(scoresheet, meta.infractions, meta.types, sport, game.seasonId, { requireIncidentReport: true }))\n\n const enabled = (isAuthorized(scopes, 'gameIncidents', 'show') || isAssignedOfficial) && branchSettings?.ff_incidents;\n const { data: incidents, loading: incidentsLoading, error: incidentsError } = useIncidentReports(game?.id, enabled);\n\n const hasPenaltiesWithoutReport = useMemo(() => {\n return !incidentRequiredPenalties.every(penalty => incidents?.some(incident => incident.penaltyId === penalty.id))\n }, [incidents, incidentRequiredPenalties])\n\n const showLineupAlert = !isLineupReady && isScheduled\n const showStartGameAlert = isGameStartRequired && isLineupReady && isScheduled\n const showApproveAlert = (!isGameStartRequired && isLineupReady && isActive) || (isGameStartRequired && isLineupReady && isActive && !isScheduled)\n const showCompleteAlert = isCompleted && !isCertified;\n const showCertification = isCompleted && meta?.policies?.requireCertification === true;\n\n return <Grid container spacing={1}>\n {showLineupAlert && <Grid item xs={12}>\n <LineupAlert />\n </Grid>}\n {showStartGameAlert && <Grid item xs={12}>\n <StartAlert canStart={isScorekeeper} />\n </Grid>}\n {showApproveAlert && <Grid item xs={12}>\n <ApproveAlert canApprove={isScorekeeper} status={status} isMissingIncidents={isIncidentsRequired && hasPenaltiesWithoutReport} disabled={!!incidentRequiredPenalties?.length && incidentsLoading} />\n </Grid>}\n {showCompleteAlert && <Grid item xs={12}>\n <CompletedAlert showUndoApproval canUndoApproval={isScorekeeper} isCertified={isCertified} />\n </Grid>}\n {showCertification && <Grid item xs={12}>\n <CertificationAlerts isAssignedOfficial={isAssignedOfficial} isScorekeeper={isScorekeeper} />\n </Grid>}\n </Grid>\n}\n","import React from 'react';\nimport { useRecordContext } from 'react-admin';\nimport { Grid } from '@material-ui/core';\n\nimport { getGameStatus, isGameCompleted, isGameScheduled, isLineupApproved } from '@hisports/scoresheet/src/selectors';\nimport { isCoach } from '@hisports/scoresheet/src/util';\nimport { ENDED, MANAGER, STARTED, APPROVED } from '@hisports/scoresheet/src/constants';\nimport { FF_GOALIES, FF_PITCHERS, FF_REQUIRE_GAME_START, FF_REQUIRE_LINEUPS, FF_REQUIRE_TEAMS } from '@hisports/common/featureFlags';\n\nimport { useParticipant, useScopes, useFlag, usePermissions } from '../../http';\nimport { hasAnyScope, isAuthorized } from '../../common/Authorize';\nimport { getFilteredScopes } from '../../http/restClient/response';\n\nimport GameDocumentsCard from '../games/cards/GameDocumentsCard';\nimport { useIsHomeFirst } from '../events/EventViewSettings';\nimport { useBranchSettings } from '../branchOfficeSettings';\n\nimport { SummaryCard } from './summary/SummaryCard';\nimport { LineupCard } from './lineup/LineupCard';\nimport { GoalieShotsCard } from './shots/GoalieShotsCard'\nimport { ThrowsInningsCard } from './baseball/ThrowsInningsCard';\nimport { SuspensionsCard } from './suspension/SuspensionsCard';\nimport { IncidentReportCard } from './gameIncidents/IncidentReportCard';\nimport { GameActionAlerts } from './actions/alerts';\nimport { ScoresheetProvider, useMeta, useScoresheet } from './ScoresheetContext';\n\nexport const isStaffMember = member => isCoach(member) || (member?.positions || []).includes(MANAGER);\n\nconst showSummaryCard = (scoresheet, game, isEnabled) => {\n const isScheduled = isGameScheduled(scoresheet)\n const lineupApproved = isLineupApproved(scoresheet, { teamId: game.homeTeamId }) && isLineupApproved(scoresheet, { teamId: game.awayTeamId })\n const isCompleted = isGameCompleted(scoresheet)\n\n if (isCompleted) {\n // Show if game completed\n return true\n } else if (isEnabled(FF_REQUIRE_GAME_START)) {\n // Game started is required\n return !isScheduled && lineupApproved\n } else if (isEnabled(FF_REQUIRE_LINEUPS)) {\n // Lineups need to be approved\n return lineupApproved\n } else if (isEnabled(FF_REQUIRE_TEAMS)) {\n // Only teams are required\n return game.homeTeamId && game.awayTeamId\n }\n}\n\nconst ScoresheetLayout = ({ game, status }) => {\n const participantId = useParticipant();\n const isEnabled = useFlag()\n const scopes = useScopes();\n const isHomeFirst = useIsHomeFirst();\n const { meta } = useMeta();\n const scoresheet = useScoresheet(scoresheet => scoresheet)\n const permissions = usePermissions();\n const { data: branchSettings } = useBranchSettings(game?.officeId);\n\n const filteredScopes = getFilteredScopes(permissions, game?.officeId);\n\n const isHomeTeamOfficeScorekeeper = permissions.some(p =>\n p.roleType === 'System' ||\n (\n hasAnyScope(p.scopes, ['scoresheets:manage'])\n && p.roleName === 'scorekeeper'\n && (p?.officeIds || []).includes(meta?.teams?.[game?.homeTeamId]?.officeId)\n )\n );\n\n const isCompleted = isGameCompleted(scoresheet)\n\n const isAssignedOfficial = ['confirmed', 'assigned'].includes(status?.officials?.self)\n const isHomeStaff = meta?.teams[game?.homeTeamId]?.members.some(member => member.participantId === participantId && isStaffMember(member));\n const isAwayStaff = meta?.teams[game?.awayTeamId]?.members.some(member => member.participantId === participantId && isStaffMember(member));\n const isTeamScorekeeper = (meta?.policies.awayTeamScorekeeping && status?.scorekeeping && isAwayStaff) || (meta?.policies.homeTeamScorekeeping && status?.scorekeeping && isHomeStaff)\n const isScorekeeper = isAssignedOfficial || isTeamScorekeeper || isHomeTeamOfficeScorekeeper\n\n const showSummary = showSummaryCard(scoresheet, game, isEnabled)\n const canViewGameDocuments = isAuthorized(scopes, 'gameDocuments', 'list')\n const showSuspensions = isCompleted && isAuthorized(scopes, 'suspensions', 'show') && branchSettings?.ff_suspensions;\n const showIncidentsCard = showSummary && (isAuthorized(filteredScopes.filter(scope => scope != 'assigning:official'), 'gameIncidents', 'show') || isAssignedOfficial) && branchSettings?.ff_incidents;\n const showHomeLineup = isCompleted || isScorekeeper || status?.lineups?.[game.homeTeamId] != null;\n const showAwayLineup = isCompleted || isScorekeeper || status?.lineups?.[game.awayTeamId] != null;\n const showGoalieShots = isEnabled(FF_GOALIES) && [STARTED, ENDED, APPROVED].includes(getGameStatus(scoresheet));\n const showHomeThrowsInnings = isEnabled(FF_PITCHERS) && isLineupApproved(scoresheet, { teamId: game.homeTeamId }) && (status?.lineups?.[game.homeTeamId] != null || isScorekeeper);\n const showAwayThrowsInnings = isEnabled(FF_PITCHERS) && isLineupApproved(scoresheet, { teamId: game.awayTeamId }) && (status?.lineups?.[game.awayTeamId] != null || isScorekeeper);\n\n const md = showHomeLineup && showAwayLineup ? 6 : 12\n return <Grid container spacing={3}>\n <Grid item xs={12}>\n <GameActionAlerts isAssignedOfficial={isAssignedOfficial} isScorekeeper={isScorekeeper} status={status} />\n </Grid>\n {showSummary && <Grid item xs={12}>\n <SummaryCard status={status} isAssignedOfficial={isAssignedOfficial} isScorekeeper={isScorekeeper} />\n </Grid>}\n {canViewGameDocuments && <Grid item xs={12}>\n <GameDocumentsCard />\n </Grid>}\n {showIncidentsCard && <Grid item xs={12}>\n <IncidentReportCard isAssignedOfficial={isAssignedOfficial} />\n </Grid>}\n {showSuspensions && <Grid item xs={12}>\n <SuspensionsCard />\n </Grid>}\n {(isHomeFirst ? showHomeLineup : showAwayLineup) && <Grid item xs={12} md={md}>\n <LineupCard\n title={`resources.scoresheets.labels.${isHomeFirst ? 'home' : 'away'}.lineup`}\n status={status}\n teamId={isHomeFirst ? game.homeTeamId : game.awayTeamId}\n />\n </Grid>}\n {(isHomeFirst ? showAwayLineup : showHomeLineup) && <Grid item xs={12} md={md}>\n <LineupCard\n title={`resources.scoresheets.labels.${isHomeFirst ? 'away' : 'home'}.lineup`}\n status={status}\n teamId={isHomeFirst ? game.awayTeamId : game.homeTeamId}\n />\n </Grid>}\n {showGoalieShots && <Grid item xs={12}>\n <GoalieShotsCard status={status} />\n </Grid>}\n {isEnabled(FF_PITCHERS) && <Grid item xs={12} md={md}>\n <ThrowsInningsCard teamId={isHomeFirst ? game.homeTeamId : game.awayTeamId} isScorekeeper={isScorekeeper} canEdit={isHomeFirst ? showHomeThrowsInnings : showAwayThrowsInnings} />\n </Grid>}\n {isEnabled(FF_PITCHERS) && <Grid item xs={12} md={md}>\n <ThrowsInningsCard teamId={isHomeFirst ? game.awayTeamId : game.homeTeamId} isScorekeeper={isScorekeeper} canEdit={isHomeFirst ? showAwayThrowsInnings : showHomeThrowsInnings} />\n </Grid>}\n </Grid>\n}\n\nexport default ({ status, ...props }) => {\n const game = useRecordContext();\n\n return <ScoresheetProvider gameId={game.id} officeId={game.officeId}>\n <ScoresheetLayout game={game} status={status} {...props} />\n </ScoresheetProvider>\n}\n","import React, { useState, useMemo, useCallback } from 'react';\nimport { useTranslate } from 'react-admin';\nimport {\n List,\n ListSubheader,\n Checkbox,\n Button,\n Tooltip,\n TextField,\n InputAdornment,\n makeStyles,\n} from '@material-ui/core';\nimport { Search } from '@material-ui/icons'\nimport { debounce } from 'lodash';\n\nimport { getLineup, getLineupCounts, getMembers } from '@hisports/scoresheet/src/selectors';\nimport { addMembersToLineup, clearLineup } from '@hisports/scoresheet/src/actions';\nimport { isSkater, isGoalie, isStaff, getInitialSuspension } from '@hisports/scoresheet/src/util';\n\nimport { useSport } from '../../../http';\nimport { useMeta, useScoresheet, useScoresheetDispatch } from '../ScoresheetContext';\nimport { SquareAlert as Alert } from '../../../common/SquareAlert';\n\nimport { MemberItem } from './MemberItem';\nimport { useMemberValidationContext } from './MemberValidationContext';\nimport { isPlayerUnvalidatedMember, isStaffUnvalidatedMember } from './MemberItemContext';\n\nconst useStyles = makeStyles(theme => ({\n root: {\n maxHeight: theme.spacing(100),\n overflowY: 'auto',\n },\n subheader: {\n zIndex: 2,\n },\n filter: {\n margin: theme.spacing(1),\n },\n button: {\n display: 'flex',\n justifyContent: 'center',\n padding: theme.spacing(1),\n }\n}))\n\nexport const LineupCheckbox = ({ type, teamId, selected, members, limits, disabled }) => {\n const translate = useTranslate();\n const { game } = useMeta();\n const dispatch = useScoresheetDispatch();\n const { memberValidations } = useMemberValidationContext();\n\n const minValid = limits.min == null || selected >= limits.min;\n const maxValid = limits.max == null || selected <= limits.max;\n const isValid = minValid && maxValid;\n\n const selectableMembers = members.filter(member => {\n const memberValidation = memberValidations.find(({ participantId }) => participantId === member.participantId);\n if (!memberValidation) return false\n if (['Skater', 'Goalie'].includes(type) && isPlayerUnvalidatedMember(member, memberValidation)) return false;\n if (['Staff'].includes(type) && isStaffUnvalidatedMember(member, memberValidation)) return false;\n return true;\n })\n\n const selectAll = () => {\n const membersToAdd = selectableMembers.map(member => {\n const memberValidation = memberValidations.find(({ participantId }) => participantId === member.participantId);\n\n return {\n ...member,\n suspension: getInitialSuspension(memberValidation, teamId),\n }\n });\n\n dispatch(addMembersToLineup(game.id, teamId, membersToAdd))\n }\n const unselectAll = () => {\n dispatch(clearLineup(game.id, teamId, type))\n }\n const handleClick = () => {\n if (disabled) return;\n if (selected < selectableMembers.length) {\n selectAll()\n } else {\n unselectAll()\n }\n }\n const tooltip = !selected ? translate('resources.scoresheets.messages.select_all') :\n !minValid ? translate('resources.scoresheets.messages.minimum_not_met') :\n !maxValid ? translate('resources.scoresheets.messages.over_limit') :\n selected < selectableMembers.length ? translate('resources.scoresheets.messages.select_all') : translate('resources.scoresheets.messages.unselect_all')\n return <Tooltip title={tooltip}>\n <Checkbox\n edge=\"start\"\n size=\"small\"\n color={isValid ? 'primary' : 'default'}\n checked={selected > 0}\n indeterminate={selected > 0 && selected < selectableMembers.length}\n onClick={handleClick}\n disabled={disabled}\n />\n </Tooltip>\n}\n\nconst LineupGroup = ({ type, label, teamId, selected, members, limits, disabled, disableCheckbox, classes, isScorekeeper }) => {\n const translate = useTranslate();\n const [ limit, setLimit ] = useState(100);\n const { loading } = useMemberValidationContext();\n if (!members.length) return null;\n\n const limited = members.length > limit;\n const count = limits.max > 0 ? `${selected}/${limits.max}` : selected\n return <>\n <ListSubheader className={classes.subheader}>\n {!disabled && <LineupCheckbox\n type={type}\n teamId={teamId}\n members={members}\n selected={selected}\n limits={limits}\n disabled={disableCheckbox || limited || loading}\n />}\n {label} ({count})\n </ListSubheader>\n\n {members.slice(0, limit).map(member => <MemberItem\n member={member}\n teamId={teamId}\n key={member.participantId}\n disabled={disabled}\n isScorekeeper={isScorekeeper}\n type={type}\n />)}\n\n {limited && <div className={classes.button}>\n <Button color=\"secondary\" onClick={() => setLimit(limit => limit + 25)}>{translate('resources.scoresheets.messages.show_more')}</Button>\n </div>}\n </>\n}\n\nconst useFilter = (initialValue, wait) => {\n const [ filter, setFilter ] = useState(initialValue);\n const setFilterDebounced = useCallback(debounce(setFilter, wait)) // eslint-disable-line react-hooks/exhaustive-deps\n return [ filter, setFilterDebounced ]\n}\n\nexport const LineupList = ({ teamId, disabled, isScorekeeper }) => {\n const translate = useTranslate();\n const classes = useStyles();\n const sport = useSport();\n const { meta } = useMeta();\n\n const { includeRegistrations, lineupLimits } = meta.policies;\n const team = meta.teams[teamId];\n\n const lineup = useScoresheet(scoresheet => getLineup(scoresheet, { teamId }));\n const counts = useScoresheet(scoresheet => getLineupCounts(scoresheet, { teamId, showSuspended: true, sport }));\n\n const [ filter, setFilter ] = useFilter('', 150)\n const [ showRegistrations, setShowRegistrations ] = useState(!team?.members?.length);\n\n const registrations = useMemo(() => {\n if (!showRegistrations) return [];\n return (meta.registrations || [])\n .filter(registration => team.officeId === registration.officeId)\n .map(registration => ({\n participantId: registration.participantId,\n participant: registration.participant,\n positions: ['F'],\n number: 0,\n }))\n }, [ showRegistrations, meta.registrations, team.officeId ])\n\n const members = useMemo(() =>\n disabled ? lineup?.members : getMembers(lineup, team, sport, registrations)\n , [ disabled, lineup, team, registrations, sport ])\n\n if (!members?.length) return <Alert severity=\"error\">{translate('resources.scoresheets.alerts.team_has_no_members')}{includeRegistrations ? ` ${translate('resources.scoresheets.alerts.or_registrations')}` : ''}.</Alert>\n\n const showFilter = !disabled && members.length > 30;\n const filtered = showFilter && filter !== '';\n const results = !filtered ? members : members.filter(member => member.participant.fullName.toUpperCase().includes(filter.toUpperCase()))\n const showNoMatch = filtered && !results.length;\n\n const handleFilter = e => {\n setFilter(e.target.value)\n }\n\n return <>\n {showFilter && <div className={classes.filter}>\n <TextField\n onChange={handleFilter}\n fullWidth\n variant=\"outlined\"\n margin=\"dense\"\n placeholder={translate('ra.message.filter_by_name')}\n InputProps={{\n startAdornment: (\n <InputAdornment position=\"start\">\n <Search fontSize=\"small\" />\n </InputAdornment>\n ),\n }}\n />\n </div>}\n {showNoMatch && <Alert severity=\"info\">{translate('resources.scoresheets.alerts.no_members_match_filters')}</Alert>}\n <List dense disablePadding className={classes.root}>\n <LineupGroup\n type=\"Skater\"\n label={translate('resources.scoresheets.labels.players')}\n teamId={teamId}\n members={results.filter(isSkater)}\n selected={counts.totalSkater}\n limits={lineupLimits.skaters}\n disabled={disabled}\n disableCheckbox={filtered}\n classes={classes}\n isScorekeeper={isScorekeeper}\n />\n\n <LineupGroup\n type=\"Goalie\"\n label={translate('resources.scoresheets.labels.goalies')}\n teamId={teamId}\n members={results.filter(isGoalie)}\n selected={counts.G}\n limits={lineupLimits.goalies}\n disabled={disabled}\n disableCheckbox={filtered}\n classes={classes}\n isScorekeeper={isScorekeeper}\n />\n\n <LineupGroup\n type=\"Staff\"\n label={translate('resources.scoresheets.labels.bench_staff')}\n teamId={teamId}\n members={results.filter(isStaff)}\n selected={counts.totalStaff}\n limits={lineupLimits.staff}\n disabled={disabled}\n disableCheckbox={filtered}\n classes={classes}\n isScorekeeper={isScorekeeper}\n />\n\n {!showRegistrations && includeRegistrations && <div className={classes.button}>\n <Button color=\"secondary\" onClick={() => setShowRegistrations(true)}>{translate('resources.scoresheets.messages.show_registrations')}</Button>\n </div>}\n </List>\n </>\n}\n","import React from \"react\";\nimport { FunctionField, ReferenceField, useRecordContext } from \"react-admin\";\nimport { Typography } from \"@material-ui/core\";\n\nimport { getLineupMembers, getOfficials } from \"@hisports/scoresheet/src/selectors\";\nimport { isStaffPosition } from \"@hisports/scoresheet/src/util\";\nimport { dedupeBy } from \"@hisports/parsers\";\n\nimport { useMeta, useScoresheet } from \"../ScoresheetContext\";\nimport { isAuthorized } from \"../../../common/Authorize\";\nimport { useSport } from \"../../../http\";\nimport { isStaffMember } from \"..\";\n\nconst getPositions = member => {\n if (member?.position) return [member.position];\n if (member?.positions) return member.positions.filter(isStaffPosition);\n return [];\n}\n\nconst useAllStaffMembers = () => {\n const { game, meta } = useMeta();\n const sport = useSport();\n\n const officials = useScoresheet(scoresheet => getOfficials(scoresheet, { assignedOnly: true }));\n const homeLineup = useScoresheet(scoresheet => getLineupMembers(scoresheet, { teamId: game?.homeTeamId, sport }));\n const awayLineup = useScoresheet(scoresheet => getLineupMembers(scoresheet, { teamId: game?.awayTeamId, sport }));\n\n const homeRoster = (meta?.teams[game?.homeTeamId]?.members || []);\n const awayRoster = (meta?.teams[game?.awayTeamId]?.members || []);\n\n const homeStaff = [...homeLineup, ...homeRoster].filter(member => isStaffMember(member));\n const awayStaff = [...awayLineup, ...awayRoster].filter(member => isStaffMember(member));\n\n const allStaffMembers = dedupeBy('participantId', [...homeStaff, ...awayStaff, ...officials]);\n\n return allStaffMembers;\n}\n\nexport const LineupSignatoryField = ({ includeDetails = true, link = 'show', className, variant = 'body2', ...props }) => {\n const record = useRecordContext(props);\n const allStaffMembers = useAllStaffMembers();\n\n const showLink = isAuthorized(record, 'participants', 'show') ? link : false;\n\n const signatory = allStaffMembers.find(member => member.participantId === record?.participantId);\n const signatoryPositions = getPositions(signatory);\n\n return <ReferenceField basePath=\"/participants\" resource=\"participants\" reference=\"participants\" link={showLink} {...props}>\n <FunctionField render={participant => {\n const details = signatoryPositions.length ? signatoryPositions.join(' / ') : participant?.HCRId;\n return <>\n <Typography variant={variant} display=\"inline\">{participant?.fullName?.toUpperCase()}</Typography>\n {includeDetails && details && (\n <Typography variant={variant} display=\"inline\" color=\"textSecondary\"> ({details})</Typography>\n )}\n </>\n }} variant={variant} className={className} />\n </ReferenceField>\n}\n\nLineupSignatoryField.defaultProps = {\n addLabel: true,\n}\n","import React, { useState, useRef } from \"react\";\nimport { RecordContextProvider, useTranslate } from 'react-admin';\nimport {\n Button,\n Dialog,\n DialogActions,\n DialogContent,\n DialogContentText,\n DialogTitle,\n makeStyles,\n Typography,\n useMediaQuery,\n} from '@material-ui/core';\nimport {\n AssignmentOutlined as ApproveIcon,\n Check as SignedIcon,\n} from '@material-ui/icons'\n\nimport { getLineupSignatory, isLineupApproved } from '@hisports/scoresheet/src/selectors';\n\nimport { useSignature, SignatureInput } from '../../../common/inputs/SignatureInput';\nimport { useScoresheet } from '../ScoresheetContext';\nimport { useIdentity, useSport } from \"../../../http\";\n\nimport { LineupSignatoryField } from \"./LineupSignatoryField\";\n\n\nconst SignatoryField = ({ participantId }) => {\n const translate = useTranslate();\n return <RecordContextProvider value={{ participantId }}>\n <Typography variant=\"body2\" style={{ fontWeight: 500 }} >{translate('resources.scoresheets.labels.signatory')}</Typography>\n <LineupSignatoryField source=\"participantId\" variant=\"default\" link={false} />\n </RecordContextProvider>\n}\n\nconst useDialogStyles = makeStyles(() => ({\n paperFullScreen: {\n height: 'unset'\n }\n}))\nconst SignatureDialog = ({ open, teamId, onSave, onClose }) => {\n const translate = useTranslate()\n const sport = useSport();\n const currentUser = useIdentity();\n const ref = useRef(null);\n const { signature, isEmpty, clear, handleChange } = useSignature(ref);\n const fullScreen = useMediaQuery(theme => theme.breakpoints.down('xs'));\n const classes = useDialogStyles();\n\n const currentUserId = currentUser?.participantId;\n\n const signatory = useScoresheet(scoresheet => getLineupSignatory(scoresheet, { participantId: currentUserId, sport }))\n const participantId = signatory?.participantId || currentUserId;\n\n const handleDiscard = () => {\n onClose()\n }\n\n const handleSave = () => {\n if (isEmpty) return;\n\n onSave({ participantId, signature });\n onClose();\n }\n\n return <Dialog open={open} fullWidth fullScreen={fullScreen} maxWidth={fullScreen ? \"xs\" : \"sm\"} disableBackdropClick classes={classes}>\n <DialogTitle>{translate('resources.scoresheets.labels.sign_and_approve')}</DialogTitle>\n <DialogContent>\n <DialogContentText>\n {translate('resources.scoresheets.messages.confirm_sign')}\n </DialogContentText>\n <SignatoryField participantId={participantId} />\n <SignatureInput ref={ref} onChange={handleChange} />\n </DialogContent>\n <DialogActions>\n <Button onClick={handleDiscard}>{translate('ra.action.discard')}</Button>\n <Button onClick={clear} disabled={isEmpty}>{translate('ra.action.clear')}</Button>\n <Button color=\"primary\" onClick={handleSave} disabled={isEmpty}>{translate('ra.action.save')}</Button>\n </DialogActions>\n </Dialog>\n}\n\nexport const SignLineup = ({ teamId, disabled, onSave }) => {\n const translate = useTranslate();\n const [ open, setOpen ] = useState();\n const isApproved = useScoresheet(scoresheet => isLineupApproved(scoresheet, { teamId }))\n\n if (isApproved) return <Button startIcon={<SignedIcon />} disabled>{translate('resources.scoresheets.labels.signed')}</Button>;\n return <>\n <Button color=\"primary\" variant=\"contained\" startIcon={<ApproveIcon />} disabled={disabled} onClick={() => setOpen(true)}>{translate('ra.action.sign')}</Button>\n {open && <SignatureDialog open={open} teamId={teamId} onSave={onSave} onClose={() => setOpen(false)} />}\n </>\n}\n","import React, { useState, useEffect, useRef } from 'react';\nimport { useTranslate } from 'react-admin';\nimport { useSelector } from 'react-redux';\nimport { Button } from '@material-ui/core';\nimport { useHistory } from 'react-router-dom';\nimport { isEmpty } from 'lodash';\n\nimport { approveLineup, saveLineup } from '@hisports/scoresheet/src/actions';\nimport { getLineup, getLineupCounts, getMembers, getSummary, hasUnselectedSuspendedPlayers } from '@hisports/scoresheet/src/selectors';\nimport { isPlayer } from '@hisports/scoresheet/src/util';\n\nimport { useSport } from '../../../http';\n\nimport { useMeta, useScoresheet, useScoresheetDispatch, useScoresheetStore } from '../ScoresheetContext';\nimport { SignLineup } from './SignLineup';\nimport { useMemberValidationContext } from './MemberValidationContext';\n\nconst isWithinLimits = (limits, count) => {\n if (limits.min > 0 && count < limits.min) return false;\n if (limits.max > 0 && count > limits.max) return false;\n return true;\n}\n\nconst isLineupValid = (lineup, counts, limits) => {\n if (!isWithinLimits(limits.players, counts.totalPlayers)) return false;\n if (!isWithinLimits(limits.skaters, counts.totalSkater)) return false;\n if (!isWithinLimits(limits.goalies, counts.G)) return false;\n if (!isWithinLimits(limits.staff, counts.totalStaff)) return false;\n\n const members = lineup?.members || [];\n const players = members.filter(member => isPlayer(member) && isEmpty(member?.suspension));\n\n if (players.some(member => !member.number)) return false;\n\n return true;\n}\n\nexport const hasDuplicateBattingOrder = (lineup) => {\n const members = lineup?.members || [];\n const players = members.filter(isPlayer);\n const battings = players.map(player => player.battingOrder ? player.battingOrder : []);\n\n return battings.some((val, i) => battings.indexOf(val) !== i);\n}\n\nexport const hasUnselectedMembersWithRelations = (scoresheet, team, gameSuspensions, infractions, types, sport, seasonId) => {\n const lineup = getLineup(scoresheet, { teamId: team.id })\n const events = getSummary(scoresheet, infractions, types, sport, seasonId)\n const members = getMembers(lineup, team, sport)\n\n return members?.some(member => {\n const hasEvents = events.some(event => event.participantId === member.participantId);\n const hasNewSuspension = gameSuspensions.some(event => event.participantId === member.participantId);\n const isInLineup = lineup?.members?.find(lineupMember => lineupMember.participantId === member.participantId);\n\n return (hasEvents || hasNewSuspension) && !isInLineup\n })\n}\n\nexport const SaveLineup = ({ teamId, disabled }) => {\n const translate = useTranslate();\n const { game, meta } = useMeta();\n const { memberValidations, loading } = useMemberValidationContext();\n const ref = useRef();\n const history = useHistory();\n const dispatch = useScoresheetDispatch();\n const sport = useSport();\n const scoresheetStore = useScoresheetStore();\n const lineup = useScoresheet(scoresheet => getLineup(scoresheet, { teamId }))\n const counts = useScoresheet(scoresheet => getLineupCounts(scoresheet, { teamId, sport }))\n const gameSuspensions = useSelector(state => Object.values(state.admin.resources.suspensions.data).filter(suspension => suspension.gameId === game.id))\n const team = meta.teams[teamId];\n const isValid = isLineupValid(lineup, counts, meta.policies.lineupLimits);\n const invalidBattingOrder = hasDuplicateBattingOrder(lineup);\n const invalidLineupSelected = hasUnselectedSuspendedPlayers(scoresheetStore.getState(), team, memberValidations, sport);\n const invalidMemberUnselected = hasUnselectedMembersWithRelations(scoresheetStore.getState(), team, gameSuspensions, meta.infractions, meta.types, sport, game.seasonId)\n const version = useSelector(store => store.admin.ui.viewVersion)\n const [refreshed, setRefreshed] = useState(false)\n const [ changes, setChanges ] = useState(-1);\n\n useEffect(() => {\n if (version === 0) return;\n setRefreshed(true);\n }, [ version ])\n\n useEffect(() => {\n if (refreshed) {\n setRefreshed(false);\n setChanges(0);\n return;\n }\n\n setChanges(changes => ++changes);\n }, [ lineup ]) // eslint-disable-line react-hooks/exhaustive-deps\n\n useEffect(() => {\n const unblock = ref.current;\n if (changes === 0) {\n if (unblock) unblock();\n return;\n }\n ref.current = history.block(translate('ra.message.discard_changes'))\n return () => {\n if (unblock) unblock();\n }\n }, [ changes, history, translate ])\n\n const handleSave = (approval) => {\n if (changes) dispatch(saveLineup(game.id, teamId, lineup.members))\n if (approval) {\n dispatch(approveLineup(game.id, teamId, approval.participantId, approval.signature))\n }\n setChanges(-1)\n }\n\n return <>\n <SignLineup teamId={teamId} disabled={!isValid || loading} onSave={handleSave} />\n <Button color=\"primary\" variant=\"outlined\" disabled={!changes || invalidBattingOrder || invalidLineupSelected || invalidMemberUnselected || loading} onClick={() => handleSave()}>\n {translate('ra.action.save')}\n </Button>\n </>\n}\n","import React, { useState } from 'react';\nimport { useTranslate } from 'react-admin';\nimport { useSelector } from 'react-redux';\nimport { Alert, AlertTitle } from '@material-ui/lab';\nimport { ExpandLess, ExpandMore } from '@material-ui/icons';\nimport { Box, IconButton, Typography, makeStyles } from '@material-ui/core';\nimport { isEmpty } from 'lodash';\n\nimport { getLineup, getLineupCounts, hasUnselectedSuspendedPlayers } from '@hisports/scoresheet/src/selectors';\nimport { isPlayer } from '@hisports/scoresheet/src/util';\n\nimport { useSport } from '../../../http';\n\nimport { useMeta, useScoresheet, useScoresheetStore } from '../ScoresheetContext';\nimport { hasDuplicateBattingOrder, hasUnselectedMembersWithRelations } from './SaveLineup';\nimport { useMemberValidationContext } from './MemberValidationContext';\n\nconst useStyles = makeStyles(theme => ({\n action: {\n alignItems: 'flex-start',\n },\n ul: {\n paddingLeft: theme.spacing(2),\n },\n liText: {\n display: 'inline',\n verticalAlign: 'middle'\n }\n}))\n\nexport const LineupRequirements = ({ teamId, disabled }) => {\n const translate = useTranslate();\n const classes = useStyles();\n const sport = useSport();\n const [ isOpen, setOpen ] = useState(true);\n const { meta, game } = useMeta();\n const { memberValidations } = useMemberValidationContext();\n const scoresheetStore = useScoresheetStore();\n const gameSuspensions = useSelector(state => Object.values(state.admin.resources.suspensions.data).filter(suspension => suspension.gameId === game.id))\n\n const { lineupLimits: limits } = meta.policies;\n\n const requirements = [];\n const lineup = useScoresheet(scoresheet => getLineup(scoresheet, { teamId }))\n const count = useScoresheet(scoresheet => getLineupCounts(scoresheet, { teamId, sport }))\n const team = meta.teams[teamId];\n\n if (disabled) return null;\n\n if (hasUnselectedSuspendedPlayers(scoresheetStore.getState(), team, memberValidations, sport)) {\n requirements.push({\n message: translate('resources.scoresheets.alerts.unselected_suspended_players'),\n isHard: true\n })\n }\n\n if (hasDuplicateBattingOrder(lineup)) {\n requirements.push({\n message: translate('resources.scoresheets.alerts.duplicate_batting_order'),\n isHard: true\n })\n }\n\n if (hasUnselectedMembersWithRelations(scoresheetStore.getState(), team, gameSuspensions, meta.infractions, meta.types, sport, game.seasonId)) {\n requirements.push({\n message: translate('resources.scoresheets.alerts.cannot_remove_members'),\n isHard: true\n })\n }\n\n if (limits.players.min > 0 && count.totalPlayer < limits.players.min) {\n requirements.push({ message: translate('resources.scoresheets.alerts.requirements.players.min', { min: limits.players.min }) })\n } else if (limits.players.max > 0 && count.totalPlayer > limits.players.max) {\n requirements.push({ message: translate('resources.scoresheets.alerts.requirements.players.max', { max: limits.players.max }) })\n }\n\n if (limits.skaters.min > 0 && count.totalSkater < limits.skaters.min) {\n requirements.push({ message: translate('resources.scoresheets.alerts.requirements.skaters.min', { min: limits.skaters.min }) })\n } else if (limits.skaters.max > 0 && count.totalSkater > limits.skaters.max) {\n requirements.push({ message: translate('resources.scoresheets.alerts.requirements.skaters.max', { max: limits.skaters.max }) })\n }\n\n if (limits.goalies.min > 0 && count.G < limits.goalies.min) {\n requirements.push({ message: translate('resources.scoresheets.alerts.requirements.goalies.min', { min: limits.goalies.min }) })\n } else if (limits.goalies.max > 0 && count.G > limits.goalies.max) {\n requirements.push({ message: translate('resources.scoresheets.alerts.requirements.goalies.max', { max: limits.goalies.max }) })\n }\n\n if (limits.staff.min > 0 && count.totalStaff < limits.staff.min) {\n requirements.push({ message: translate('resources.scoresheets.alerts.requirements.staff.min', { min: limits.staff.min }) })\n } else if (limits.staff.max > 0 && count.totalStaff > limits.staff.max) {\n requirements.push({ message: translate('resources.scoresheets.alerts.requirements.staff.max', { max: limits.staff.max }) })\n }\n\n const players = (lineup?.members || []).filter(member => isPlayer(member) && isEmpty(member?.suspension));\n if (players.some(member => !member.number)) {\n requirements.push({ message: translate('resources.scoresheets.alerts.requirements.players.missing_jersey_number') })\n }\n\n const jerseyNumbers = players.map(player => player.number).filter(Boolean);\n if (jerseyNumbers.some((val, i) => jerseyNumbers.indexOf(val) !== i)) {\n requirements.push({ message: translate('resources.scoresheets.alerts.requirements.players.duplicate_jersey_number') })\n }\n\n if (!requirements.length) return null;\n\n const toggle = () => setOpen(open => !open)\n const toggleAction = <IconButton onClick={toggle}>\n {isOpen ? <ExpandMore fontSize=\"small\" /> : <ExpandLess fontSize=\"small\" />}\n </IconButton>\n\n return <Box m={1}>\n <Alert\n severity={requirements.some(requirement => requirement.isHard) ? \"error\" : \"warning\"}\n action={toggleAction}\n classes={classes}>\n <AlertTitle onClick={toggle}>{translate('resources.scoresheets.alerts.requirements.title')}</AlertTitle>\n {isOpen && <ul className={classes.ul}>\n {requirements.map(requirement => <li key={requirement}><Typography variant=\"body1\" className={classes.liText}>{requirement.message}</Typography></li>)}\n </ul>}\n </Alert>\n </Box>\n}\n","import React, { useState } from 'react';\nimport { RecordContextProvider, useTranslate } from 'react-admin';\nimport { IconButton, makeStyles, Typography } from '@material-ui/core';\nimport { ExpandLess, ExpandMore } from '@material-ui/icons';\n\nimport { getLineupApproval } from '@hisports/scoresheet/src/selectors';\n\nimport { useScoresheet } from '../ScoresheetContext';\nimport { LineupSignatoryField } from './LineupSignatoryField';\n\nconst useStyles = makeStyles(theme => ({\n root: {\n position: 'relative',\n margin: theme.spacing(1),\n },\n expand: {\n position: 'absolute',\n top: 0,\n right: 0,\n },\n signature: {\n display: 'block',\n margin: '0 auto',\n backgroundColor: theme.palette.common.white,\n border: `1px solid ${theme.palette.grey[200]}`,\n maxWidth: '100%',\n maxHeight: theme.spacing(20),\n [theme.breakpoints.down('sm')]: {\n maxHeight: theme.spacing(12),\n }\n },\n}))\n\nexport const LineupSignature = ({ teamId }) => {\n const translate = useTranslate();\n const classes = useStyles();\n const approval = useScoresheet(scoresheet => getLineupApproval(scoresheet, { teamId }));\n const [ expanded, setExpanded ] = useState(true);\n\n if (!approval) return null;\n\n const toggle = <IconButton onClick={() => setExpanded(expand => !expand)} className={classes.expand}>\n {expanded ? <ExpandLess fontSize=\"small\" /> : <ExpandMore fontSize=\"small\" />}\n </IconButton>\n\n return <RecordContextProvider value={approval}>\n <div className={classes.root}>\n <Typography variant=\"overline\">{translate('resources.scoresheets.messages.lineup_approved_by')} <LineupSignatoryField source=\"participantId\" variant=\"overline\" /></Typography>\n {toggle}\n {expanded && <img className={classes.signature} src={approval.signature} alt=\"Signature\" />}\n </div>\n </RecordContextProvider>\n}\n","import React from 'react';\nimport { Button, IconButton, useMediaQuery } from \"@material-ui/core\";\n\nexport const ResponsiveButton = ({ icon: Icon, children, ...props }) => {\n const fullScreen = useMediaQuery(theme => theme.breakpoints.down('xs'));\n\n if (fullScreen) {\n return <IconButton {...props}><Icon /></IconButton>\n }\n return <Button startIcon={<Icon />} {...props}>{children}</Button>\n}\n","import React, { Fragment, useState, useRef } from 'react';\nimport { SimpleForm, BooleanInput, NumberInput, useNotify, useTranslate, RecordContextProvider } from 'react-admin';\nimport { Dialog, DialogContent, DialogTitle, Grid } from \"@material-ui/core\";\nimport { Add as AddIcon } from '@material-ui/icons'\nimport { useFormState } from 'react-final-form';\nimport { useSelector } from 'react-redux';\nimport { FORM_ERROR } from 'final-form';\n\nimport { addLineupExtra } from '@hisports/scoresheet/src/actions';\nimport { isPlayer } from '@hisports/scoresheet/src/util';\n\nimport { DialogFormToolbar } from '../../../common/dialogs/DialogForm';\nimport { ResponsiveButton } from '../../../common/ResponsiveButton';\nimport { MemberPositionsEnumInput } from '../../../common/inputs/EnumInputs';\nimport { ParticipantInput } from '../../participants/ParticipantInput';\nimport { useSport } from '../../../http';\n\nimport { useMemberValidationContext } from './MemberValidationContext';\nimport { useMeta, useScoresheetDispatch } from \"../ScoresheetContext\"\n\nconst validate = values => {\n const errors = {};\n\n if (!values.participantId) errors.participantId = 'ra.validation.required'\n if (!values.positions || !values.positions.length) errors.positions = 'ra.validation.required'\n\n const number = Number(values.number);\n if (isPlayer(values)) {\n if (values.number == null) {\n errors.number = 'resources.members.validations.must_have_number';\n } else if (isNaN(number) || number < 0) {\n errors.number = 'ra.validation.invalid_number';\n }\n }\n\n return errors;\n}\n\nconst PlayerNumberInput = props => {\n const { values } = useFormState();\n\n if (!isPlayer(values)) return null;\n return <NumberInput {...props} />\n}\n\nconst ParticipantExtraInput = ({ teamOfficeId, ...props }) => {\n const { values } = useFormState();\n const filter = { _scope: 'Tenant' }\n\n if (teamOfficeId && values?.isSameOffice) {\n filter['teams.officeId'] = teamOfficeId;\n }\n\n return <ParticipantInput source=\"participantId\" filter={filter} {...inputProps} />\n}\n\nconst inputProps = {\n variant: 'outlined',\n margin: 'normal',\n fullWidth: true,\n}\n\nconst ExtraForm = ({ teamOfficeId, ...props }) => {\n const sport = useSport();\n const disabledSameOffice = sport === 'Soccer'\n\n return <SimpleForm {...props} {...inputProps} validate={validate}>\n <Grid container spacing={1} fullWidth>\n <Grid item xs={12}>\n <ParticipantExtraInput teamOfficeId={teamOfficeId} {...inputProps} />\n </Grid>\n <Grid item xs={12} md={6}>\n <MemberPositionsEnumInput source=\"positions\" {...inputProps} />\n </Grid>\n <Grid item xs={12} md={6}>\n <PlayerNumberInput source=\"number\" {...inputProps} />\n </Grid>\n <Grid item xs={12} md={6}>\n <BooleanInput source=\"isSameOffice\" label=\"resources.scoresheets.labels.add_extra_same_office\" defaultValue={true} disabled={disabledSameOffice} {...inputProps} helperText=\"\" />\n </Grid>\n <Grid item xs={12} md={6}>\n <BooleanInput source=\"isAffiliate\" label=\"resources.members.fields.isAffiliate\" defaultValue={true} {...inputProps} />\n </Grid>\n </Grid>\n </SimpleForm>\n}\n\nconst ExtraDialog = ({ teamOfficeId, open, onSave, onClose }) => {\n const translate = useTranslate()\n const handleDiscard = () => {\n onClose();\n }\n const handleSave = values => {\n const result = onSave(values)\n if (result) return result;\n onClose();\n }\n\n return <Dialog open={open} fullWidth maxWidth=\"sm\" disableBackdropClick>\n <DialogTitle>{translate('resources.scoresheets.labels.add_extra')}</DialogTitle>\n <DialogContent>\n <RecordContextProvider value={null}>\n <ExtraForm\n save={handleSave}\n component={Fragment}\n toolbar={\n <DialogFormToolbar onCancel={handleDiscard} cancelLabel=\"ra.action.cancel\" submitLabel=\"ra.action.save\" />\n }\n teamOfficeId={teamOfficeId}\n />\n </RecordContextProvider>\n </DialogContent>\n </Dialog>\n}\n\nexport const AddExtraButton = ({ teamOfficeId, teamId, disabled, hasFullAccess }) => {\n const translate = useTranslate();\n const { game, meta } = useMeta();\n const { extrasEnabled } = meta.policies;\n const { loading } = useMemberValidationContext();\n\n const [ open, setOpen ] = useState(false);\n const dispatch = useScoresheetDispatch();\n const notify = useNotify();\n\n const participants = useSelector(state => state.admin.resources.participants.data)\n const participantsRef = useRef(participants);\n participantsRef.current = participants;\n\n if (!extrasEnabled && !hasFullAccess) return null;\n\n const handleSave = ({ participantId, positions, number, isAffiliate }) => {\n // useRef is a workaround to get a current version of the state; useCallback doesn't seem to help\n const participant = participantsRef.current[participantId];\n if (!participant) return { [FORM_ERROR]: translate('ra.page.error_try_again') }\n\n dispatch(addLineupExtra(game.id, teamId, participant, positions, number, isAffiliate))\n notify(translate('resources.members.messages.has_been_added', { name: participant.fullName }))\n }\n\n return <>\n <ResponsiveButton icon={AddIcon} onClick={() => setOpen(true)} disabled={disabled || loading}>\n {translate('resources.scoresheets.labels.add_extra')}\n </ResponsiveButton>\n <ExtraDialog teamOfficeId={teamOfficeId} open={open} onSave={handleSave} onClose={() => setOpen(false)} />\n </>\n}\n","import React, { useState } from 'react';\nimport { GET_MANY, useQueryWithStore, useTranslate } from 'react-admin';\nimport { Dialog, DialogActions, DialogTitle, Card, CardContent, Typography, makeStyles, useMediaQuery, CardMedia, Divider, IconButton, DialogContent } from '@material-ui/core';\nimport { ChevronLeft, ChevronRight, Close, Photo } from '@material-ui/icons';\n\nimport noProfileIcon from '../../../../assets/icons/no-profile.png';\nimport { ResponsiveButton } from '../../../common/ResponsiveButton';\n\nimport { useMeta } from '../ScoresheetContext';\n\nimport { useMemberValidationContext } from './MemberValidationContext';\nimport { useMemberItem, MemberItemContextProvider } from './MemberItemContext';\nimport { MemberFlagsList } from './MemberFlags';\nimport { getMemberDescription } from './MemberItem';\n\nconst useStyles = makeStyles(theme => ({\n close: {\n position: 'absolute',\n top: theme.spacing(1),\n right: theme.spacing(1),\n },\n content: {\n padding: 0,\n },\n actions: {\n justifyContent: 'center',\n },\n media: {\n height: 450,\n objectFit: 'contain',\n },\n chip: {\n margin: '2px'\n },\n suspensionList: {\n gap: theme.spacing(2), // suspension is a group of 2 listItem. gap to seperate each suspension\n }\n}));\n\n\nconst PhotoCard = ({ participant = {}, ...props }) => {\n const classes = useStyles();\n const translate = useTranslate();\n const { member, memberValidation, flagNames } = useMemberItem()\n if (!member) return null;\n\n return <Card fullWidth elevation={0}>\n <CardMedia\n className={classes.media}\n src={memberValidation?.pictureUrl || noProfileIcon}\n component=\"img\"\n />\n <CardContent>\n <Typography variant=\"h5\" component=\"h2\">\n {member?.number != null && <Typography variant=\"inherit\" component=\"span\" color=\"textSecondary\">\n #{member.number} \n </Typography>}\n {member?.participant?.fullName}\n {participant?.HCRId != null && <Typography variant=\"inherit\" component=\"span\" color=\"textSecondary\">\n  – {participant.HCRId}\n </Typography>}\n </Typography>\n <Typography variant=\"subtitle\" color=\"textSecondary\" component=\"p\">\n {getMemberDescription(member, translate, true)}\n </Typography>\n </CardContent>\n {flagNames.length > 0 && <Divider />}\n <MemberFlagsList member={member} flagNames={flagNames} />\n </Card>\n}\n\nconst PhotosDialog = ({ open, onClose, teamId, lineup, ...props }) => {\n const classes = useStyles();\n const { meta } = useMeta();\n const fullScreen = useMediaQuery(theme => theme.breakpoints.down('xs'));\n const [ index, setIndex ] = useState(0);\n const { memberValidations } = useMemberValidationContext();\n\n const handleNext = () => setIndex(index +1);\n const handleBack = () => setIndex(index - 1);\n const handleClose = () => onClose();\n\n const team = meta.teams[teamId];\n const members = (lineup?.members || []).map(member => {\n const memberValidation = memberValidations.find(({ participantId }) => participantId === member.participantId);\n return { ...member, ...memberValidation }\n });\n\n const { data: participants } = useQueryWithStore({\n type: GET_MANY,\n resource: 'participants',\n payload: { ids: members.map(member => member.participantId), _scope: 'Tenant' }\n }, { enabled: open, action: 'CUSTOM_QUERY' })\n const participant = participants?.find(participant => participant.id === members[index]?.participantId)\n\n return <Dialog\n open={open}\n fullWidth\n fullScreen={fullScreen}\n maxWidth={fullScreen ? \"xs\" : \"sm\"}\n onBackdropClick={() => handleClose()}\n >\n <DialogTitle>{team?.name}</DialogTitle>\n <div className={classes.close}>\n <IconButton onClick={() => handleClose()}><Close /></IconButton>\n </div>\n <DialogContent dividers className={classes.content}>\n <MemberItemContextProvider member={members[index]} teamId={teamId}>\n <PhotoCard participant={participant} />\n </MemberItemContextProvider>\n </DialogContent>\n <DialogActions className={classes.actions}>\n {!!members.length && <>\n <IconButton disabled={index === 0} onClick={() => handleBack()}><ChevronLeft /></IconButton>\n <IconButton disabled={(index + 1) === members.length} onClick={() => handleNext()}><ChevronRight /></IconButton>\n </>}\n </DialogActions>\n </Dialog>\n}\n\nexport const PhotosButton = ({ teamId, lineup, disabled, ...props }) => {\n const translate = useTranslate();\n const { loading } = useMemberValidationContext();\n const [ open, setOpen ] = useState(false);\n\n return <>\n <ResponsiveButton icon={Photo} onClick={() => setOpen(true)} disabled={disabled || loading}>\n {translate('resources.scoresheets.labels.photos')}\n </ResponsiveButton>\n <PhotosDialog open={open} onClose={() => setOpen(false)} teamId={teamId} lineup={lineup} />\n </>\n}\n","import React from 'react';\nimport { useLocale, useTranslate } from 'react-admin';\nimport { Button, useMediaQuery } from \"@material-ui/core\";\nimport { PrintOutlined as PrintIcon } from '@material-ui/icons'\n\nimport { FF_PRINT_LINEUP } from '@hisports/common/featureFlags';\n\nimport { useFlag } from '../../../http';\nimport { useMeta } from \"../ScoresheetContext\"\nimport { useMemberValidationContext } from './MemberValidationContext';\n\nexport const PrintLineupButton = ({ teamId, disabled, hasFullAccess, type = \"lineup\", printMessage = \"resources.scoresheets.labels.print\" }) => {\n const translate = useTranslate();\n const isEnabled = useFlag();\n const isMobile = useMediaQuery(theme => theme.breakpoints.down('xs'));\n const { game } = useMeta();\n const locale = useLocale();\n const { loading } = useMemberValidationContext();\n const isLineup = type === \"lineup\"\n\n const reportUrl = `${process.env.PDF_URL}/game/${game.id}/${type}/${teamId}${locale ? `?locale=${locale}` : ''}`\n\n if (!isEnabled(FF_PRINT_LINEUP) || game?.isApproved) return null;\n\n return <Button color={!isLineup ? \"primary\" : undefined} startIcon={!isLineup ? undefined : <PrintIcon />} href={reportUrl} disabled={disabled || loading} target=\"_blank\" onClick={e => e.stopPropagation()}>\n {!isMobile && translate('resources.scoresheets.labels.print')}\n </Button>\n}\n","import React, { useState } from 'react'\nimport { Box, IconButton, Typography, makeStyles } from '@material-ui/core'\nimport { ExpandLess, ExpandMore, Flag } from '@material-ui/icons'\nimport { Alert, AlertTitle } from '@material-ui/lab'\nimport { useTranslate } from 'react-admin'\n\nimport { getCertificationFlags } from '@hisports/scoresheet/src/selectors'\nimport { TEAM_FLAGS } from '@hisports/scoresheet/src/constants'\n\nimport { useScoresheet } from '../ScoresheetContext'\n\nconst LINEUP_FLAGS = [\n TEAM_FLAGS.LINEUP_MIN_LIMIT,\n TEAM_FLAGS.LINEUP_MAX_LIMIT,\n TEAM_FLAGS.NOT_ROSTERED,\n]\n\nconst useStyles = makeStyles(theme => ({\n action: {\n alignItems: 'flex-start',\n },\n ul: {\n paddingLeft: theme.spacing(2),\n },\n liText: {\n display: 'inline',\n verticalAlign: 'middle'\n }\n}))\n\nconst LineupFlags = ({ teamId }) => {\n const [isOpen, setOpen] = useState(true);\n const classes = useStyles();\n const translate = useTranslate();\n const flags = useScoresheet(scoreSheet => getCertificationFlags(scoreSheet))\n\n const teamFlags = flags.filter(flag => flag.teamId === teamId);\n const lineupFlags = teamFlags.filter(flag => LINEUP_FLAGS.includes(flag.name) ? flag : null);\n if (!lineupFlags.length) return null;\n\n const toggle = () => setOpen(open => !open)\n const toggleAction = <IconButton onClick={toggle}>\n {isOpen ? <ExpandMore fontSize=\"small\" /> : <ExpandLess fontSize=\"small\" />}\n </IconButton>\n\n return (\n <Box m={1} >\n <Alert\n icon={<Flag />}\n severity=\"error\"\n action={toggleAction}\n classes={classes}>\n <AlertTitle>Lineup Flags</AlertTitle>\n {isOpen && <ul className={classes.ul}>\n {lineupFlags.map(flag => (\n <li key={flag.name}>\n <Typography variant=\"body1\" className={classes.liText}>{translate(`resources.games.labels.flags.${flag.name}`, 2)}</Typography>\n {flag.name === TEAM_FLAGS.NOT_ROSTERED &&\n <Typography color=\"textSecondary\" variant=\"body2\">{translate(`resources.games.labels.flagsDetails.${TEAM_FLAGS.NOT_ROSTERED}`)}</Typography>\n }\n </li>\n ))}\n </ul>}\n </Alert>\n </Box>\n )\n}\n\nexport default LineupFlags\n","import React from 'react';\nimport { useTranslate } from 'react-admin';\nimport { CardActions, Link as MuiLink, makeStyles, Typography } from '@material-ui/core';\nimport { Link } from 'react-router-dom'\nimport moment from 'moment';\n\nimport { getLineup, isGameCertified, isGameScheduled } from '@hisports/scoresheet/src/selectors';\nimport { FF_PHOTOS, FF_RESTRICT_LINEUP_ENTRY } from '@hisports/common/featureFlags';\n\nimport InfoCard from '../../../common/cards/InfoCard';\nimport { isAuthorized } from '../../../common/Authorize';\nimport { SquareAlert as Alert } from '../../../common/SquareAlert';\nimport { useFlag, useParticipant, usePermissions } from '../../../http/AuthContext';\nimport { TeamField } from '../../teams/TeamField';\nimport LoadingAlert from '../../../common/LoadingAlert';\n\nimport { isStaffMember } from '..';\nimport { useMeta, useScoresheet } from '../ScoresheetContext';\n\nimport { LineupList } from './LineupList';\nimport { LineupRequirements } from './LineupRequirements';\nimport { LineupSignature } from './LineupSignature';\nimport { SaveLineup } from './SaveLineup';\nimport { AddExtraButton } from './AddExtra';\nimport { PhotosButton } from './Photos';\nimport { PrintLineupButton } from './PrintLineup';\nimport { MemberValidationProvider, useMemberValidationContext } from './MemberValidationContext';\nimport LineupFlags from './LineupFlags';\n\nconst useStyles = makeStyles(theme => ({\n subtitle: {\n margin: theme.spacing(1, 2),\n [theme.breakpoints.down('sm')]: {\n margin: theme.spacing(0, 2),\n }\n },\n changes: {\n color: theme.palette.grey[700],\n [theme.breakpoints.down('sm')]: {\n fontSize: '0.8rem',\n lineHeight: 1.25,\n }\n }\n}))\n\nconst ValidatingMembersAlert = () => {\n const { loading } = useMemberValidationContext();\n const translate = useTranslate();\n\n if (!loading) return null;\n return <LoadingAlert square>\n {translate('resources.scoresheets.alerts.loading.validatingMembers')}\n </LoadingAlert>\n}\n\nconst LineupNotice = ({ disabled, completed, showCompleted = false }) => {\n const translate = useTranslate();\n if (completed && showCompleted) return <Alert severity=\"success\">{translate('resources.games.alerts.status.completed')}</Alert>\n if (!completed && disabled) return <Alert severity=\"info\">{translate('resources.scoresheets.alerts.lineup_change_post_game_started')}</Alert>\n return null;\n}\n\nexport const LineupCardBody = ({ status, teamId, showCompleted }) => {\n const translate = useTranslate();\n const classes = useStyles();\n const isEnabled = useFlag();\n const { game, meta } = useMeta();\n const permissions = usePermissions();\n const pregame = useScoresheet(scoresheet => isGameScheduled(scoresheet));\n const isCertified = useScoresheet(scoresheet => isGameCertified(scoresheet));\n const lineup = useScoresheet(scoresheet => getLineup(scoresheet, { teamId }))\n const participantId = useParticipant();\n const team = meta.teams[teamId]\n\n const isEarly = meta?.teams[teamId]?.earliestLineupAccessTime ? moment.tz(game.timezone).isBefore(meta?.teams[teamId]?.earliestLineupAccessTime) : false\n\n const isAssignedOfficial = ['confirmed', 'assigned'].includes(status?.officials?.self)\n const isHomeStaff = meta?.teams[game?.homeTeamId]?.members.some(member => member.participantId === participantId && isStaffMember(member));\n const isAwayStaff = meta?.teams[game?.awayTeamId]?.members.some(member => member.participantId === participantId && isStaffMember(member));\n const isTeamScorekeeper = (meta?.policies.awayTeamScorekeeping && status?.scorekeeping && isAwayStaff) || (meta?.policies.homeTeamScorekeeping && status?.scorekeeping && isHomeStaff)\n const isScorekeeper = isAssignedOfficial || isTeamScorekeeper\n\n const hasFullAccess = permissions.some(permission => {\n if (permission.roleType === 'System') return true;\n if (permission.roleType === 'Office' && permission.officeIds.includes(game.officeId) && isAuthorized(permission.scopes, 'scoresheets', 'full')) return true;\n if (permission.roleType === 'Office' && permission.officeIds.includes(team.officeId) && isAuthorized(permission.scopes, 'scoresheets', 'full')) return true;\n if (permission.roleType === 'Schedule' && permission.scheduleIds.includes(game.scheduleId) && isAuthorized(permission.scopes, 'scoresheets', 'full')) return true;\n return false;\n });\n\n const hasTeamAccess = permissions.some(permission => {\n if (permission.roleType === 'System') return true;\n if (permission.roleType === 'Team' && permission.teamIds.includes(teamId) && isAuthorized(permission.scopes, 'scoresheets', 'lineup')) return true;\n if (permission.roleType === 'Schedule' && permission.scheduleIds.includes(game.scheduleId) && isAuthorized(permission.scopes, 'scoresheets', 'lineup')) return true;\n if (permission.roleType === 'Office' && team && permission.officeIds.includes(team.officeId) && isAuthorized(permission.scopes, 'scoresheets', 'lineup')) return true;\n return false;\n })\n\n if (!team) return <Alert severity=\"warning\">{translate('resources.scoresheets.alerts.team_has_no_members')}</Alert>\n\n if (isEnabled(FF_RESTRICT_LINEUP_ENTRY) && isEarly) {\n return <Alert severity=\"warning\" action={<PrintLineupButton teamId={teamId} type=\"roster\" />} >\n {translate('resources.scoresheets.alerts.early_lineup_entry',\n { date: moment.tz(meta.teams[teamId].earliestLineupAccessTime, game.timezone).format('LLLL') })}\n </Alert>\n }\n\n if (!hasFullAccess && !hasTeamAccess && !game.isApproved && !isScorekeeper) {\n return <Alert severity=\"error\">{translate('resources.scoresheets.alerts.unauthorized_manage_lineup')}</Alert>\n }\n\n const disabled = (!pregame && !hasFullAccess && !isScorekeeper) || isCertified\n const showPhotos = isEnabled(FF_PHOTOS) && team.externalId != null\n const hasMembers = lineup?.members?.length > 0\n const rosterLink = <Link to={`/teams/${teamId}/show/roster`} target=\"blank\" component={MuiLink}>{translate('resources.scoresheets.messages.your_team_roster')}</Link>\n\n return <MemberValidationProvider disabled={disabled} lineup={lineup} team={team} game={game}>\n <div className={classes.subtitle}>\n <TeamField record={{ teamId }} source=\"teamId\" link={false} variant=\"subtitle2\" />\n {!disabled && <Typography variant=\"subtitle1\" className={classes.changes}>\n {translate('resources.scoresheets.messages.lineup_change_apply')} {rosterLink} {translate('resources.scoresheets.messages.lineup_change_apply_part_2')}\n </Typography>}\n </div>\n\n <ValidatingMembersAlert />\n <LineupNotice disabled={disabled} completed={game.isApproved} showCompleted={showCompleted} />\n <LineupList teamId={teamId} disabled={disabled} isScorekeeper={isScorekeeper} />\n <LineupRequirements teamId={teamId} disabled={disabled} />\n <LineupFlags teamId={teamId} />\n <LineupSignature teamId={teamId} />\n\n <CardActions>\n {!disabled && <>\n <SaveLineup teamId={teamId} disabled={disabled} />\n <AddExtraButton teamOfficeId={team.officeId} teamId={teamId} disabled={disabled} hasFullAccess={hasFullAccess} />\n </>}\n <PrintLineupButton teamId={teamId} disabled={!hasMembers} />\n {showPhotos && <PhotosButton teamId={teamId} lineup={lineup} disabled={!hasMembers} />}\n </CardActions>\n </MemberValidationProvider>\n}\n\nexport const LineupCard = ({ status, teamId, title }) => {\n return <InfoCard title={title} disableMaxHeight>\n <LineupCardBody status={status} teamId={teamId} />\n </InfoCard>\n}\n\nexport default LineupCardBody;\n","import { Typography, ListItemText, Box, Tooltip, Chip } from '@material-ui/core';\nimport React from 'react';\nimport { Link, ReferenceField, useTranslate } from 'react-admin';\nimport moment from 'moment-timezone';\nimport { isEmpty } from \"lodash\";\n\nimport { getInfractionType, getInfractionRule } from '@hisports/scoresheet/src/util';\nimport { FF_HIDE_INFRACTION_NAME } from '@hisports/common/featureFlags';\nimport { isGameCompleted } from \"@hisports/scoresheet/src/selectors\";\n\nimport { useFlag } from '../../../http';\nimport { ScheduleField } from '../../schedules/ScheduleField';\nimport { TeamField } from '../../teams/TeamField';\nimport { OfficeField } from '../../offices/OfficeField';\n\nimport { useMeta, useScoresheet } from '../ScoresheetContext';\n\nconst AdminSuspension = ({ suspension: validationSuspension }) => {\n const translate = useTranslate()\n const startDate = moment.utc(validationSuspension.startDate, 'YYYY-MM-DD').format('LL');\n const endDate = moment.utc(validationSuspension.endDate, 'YYYY-MM-DD').format('LL');\n const primary = validationSuspension.endDate ? `${startDate} - ${endDate}` : startDate;\n const secondary = translate('resources.offices.values.type.Administrative');\n\n return <ListItemText primary={primary} secondary={secondary} />\n}\n\nconst GameOfficeField = ({ ...props }) => {\n return <ReferenceField basePath=\"/games\" resource=\"games\" reference=\"games\" {...props}>\n <OfficeField source=\"officeId\" includeType=\"inline\" />\n </ReferenceField>\n}\n\nconst GameSuspensions = ({ suspension: validationSuspension }) => {\n const translate = useTranslate();\n const { meta, game } = useMeta();\n const isEnabled = useFlag();\n\n if (!validationSuspension || !validationSuspension.game) return null\n\n const number = `${translate('resources.games.name', 1)} ${validationSuspension.game.number}`\n const date = moment.utc(validationSuspension.game.date, 'YYYY-MM-DD').format('LL');\n const type = getInfractionType(validationSuspension.penalty, meta.infractions, meta.types, game.seasonId);\n const rule = getInfractionRule(validationSuspension.penalty, meta.infractions, meta.rules, game.seasonId);\n const penalty = type && `${type.name}${!isEnabled(FF_HIDE_INFRACTION_NAME) && rule ? ` - ${rule.name}` : ''}`\n const positionGroup = translate(`resources.suspensions.values.positionGroup.${validationSuspension.positionGroup}`, { _: validationSuspension.positionGroup })\n const code = translate(`resources.suspensions.values.code.${validationSuspension.code || 'supplemental_long'}`, { _: validationSuspension.code })\n\n return <Box>\n <ListItemText\n primary={<Typography variant=\"body2\">{code} <Typography variant=\"inherit\" color=\"textSecondary\">— { positionGroup }</Typography></Typography>}\n secondary={<Box display=\"flex\" alignItems=\"center\"><TeamField record={{ teamId: validationSuspension.teamId }} source=\"teamId\" link={false} /> — <ScheduleField source=\"id\" record={{ id: validationSuspension.game.scheduleId }} link={false} /></Box>}\n />\n <ListItemText\n primary={<Typography variant=\"body2\"><Link to={`/games/${validationSuspension.game.id}/show/scoresheet`}>{number} <Typography variant=\"inherit\" color=\"textSecondary\">— {date}</Typography></Link></Typography>}\n secondary={penalty}\n />\n <ListItemText\n primary={<GameOfficeField source=\"id\" record={{ id: validationSuspension.game.id }} />}\n />\n </Box>\n}\n\nconst SuspensionDetails = ({ validationGameSuspension }) => {\n const translate = useTranslate();\n const { meta, game } = useMeta();\n const isEnabled = useFlag();\n\n if (!validationGameSuspension || !validationGameSuspension.game || !validationGameSuspension.penalty) return null\n\n const number = `${translate('resources.games.name', 1)} ${validationGameSuspension.game.number}`\n const date = moment.utc(validationGameSuspension.game.date, 'YYYY-MM-DD').format('LL');\n const type = getInfractionType(validationGameSuspension.penalty, meta.infractions, meta.types, game.seasonId);\n const rule = getInfractionRule(validationGameSuspension.penalty, meta.infractions, meta.rules, game.seasonId);\n const penalty = type && `${type.name}${!isEnabled(FF_HIDE_INFRACTION_NAME) && rule ? ` - ${rule.name}` : ''}`\n const positionGroup = translate(`resources.suspensions.values.positionGroup.${validationGameSuspension.positionGroup}`, { _: validationGameSuspension.positionGroup })\n const code = translate(`resources.suspensions.values.code.${validationGameSuspension.code || 'supplemental_long'}`, { _: validationGameSuspension.code })\n\n return <span>\n {code} - {positionGroup}<br />\n {penalty && <><span style={{ fontStyle: 'italic' }}>{penalty}</span><br /></>}<br />\n {`${number} (${date})`}<br />\n <TeamField record={{ teamId: validationGameSuspension.teamId }} source=\"teamId\" link={false} variant=\"inherit\" /> - <ScheduleField source=\"id\" record={{ id: validationGameSuspension.game.scheduleId }} link={false} variant=\"inherit\" /><br />\n </span>\n}\n\nexport const SuspensionInfo = ({ suspension: validationSuspension }) => {\n if (!validationSuspension) return null;\n if (validationSuspension.type === 'Admin') return <AdminSuspension suspension={validationSuspension} />;\n return <GameSuspensions suspension={validationSuspension} />;\n}\n\nexport const SuspensionStatus = ({ selected, suspension: scoreSheetSuspension, memberValidation, ...props }) => {\n const validationGameSuspension = memberValidation?.suspensions?.find(({ id }) => scoreSheetSuspension?.id === id)\n\n return <Tooltip title={validationGameSuspension ? <SuspensionDetails validationGameSuspension={validationGameSuspension} /> : ''} arrow>\n <Chip size=\"small\" label={<SuspensionTitle selected={selected} suspension={scoreSheetSuspension} memberValidation={memberValidation} />} variant=\"outlined\" color=\"primary\" {...props} />\n </Tooltip>\n};\n\nexport const SuspensionTitle = ({ selected, suspension: scoresheetSuspension, memberValidation }) => {\n const translate = useTranslate();\n const isCompleted = useScoresheet(scoresheet => isGameCompleted(scoresheet));\n const adminSuspension = memberValidation?.suspensions?.find(({ type }) => type === 'Admin');\n\n let status = 'not_serving';\n let count;\n\n if (selected && isEmpty(scoresheetSuspension)) {\n status = 'playing';\n if (isCompleted) {\n status = 'played';\n }\n } else if (adminSuspension) {\n status = 'admin';\n count = adminSuspension?.endDate ? adminSuspension?.endDate : translate('resources.suspensions.labels.indefinite');\n } else if (selected && scoresheetSuspension.id && !scoresheetSuspension.purgeId) {\n status = undefined;\n } else if (selected && !scoresheetSuspension.id && !scoresheetSuspension.purgeId && scoresheetSuspension.game != null && scoresheetSuspension.total != null) {\n status = 'manual';\n } else if (selected) {\n status = 'purging';\n if (isCompleted) {\n status = 'purged';\n }\n }\n\n if (scoresheetSuspension?.game) {\n count = `${scoresheetSuspension.game}/${scoresheetSuspension?.total || '∞'}`;\n }\n\n let label = `${translate('resources.suspensions.labels.suspended')}`;\n if (status) {\n label += ` - ${translate(`resources.suspensions.labels.${status}`)}`;\n }\n if (count) {\n label += ` (${count})`;\n }\n return label;\n};\n\n","import React, { useState } from 'react';\nimport { Box, Dialog, DialogTitle, List, ListItem, ListItemIcon, ListItemText, Typography, makeStyles } from '@material-ui/core';\nimport { useTranslate } from 'react-admin';\n\nimport { getFaultyPlayerReason, getFlagColor, getInitialSuspension } from '@hisports/scoresheet/src/util';\nimport { TEAM_FLAGS } from '@hisports/scoresheet/src/constants';\nimport { getThrowsInnings } from '@hisports/scoresheet/src/selectors';\n\nimport { useScoresheet } from '../ScoresheetContext';\nimport Flag from '../certification/Flag'\n\nimport { useMemberValidationContext } from './MemberValidationContext';\nimport { SuspensionInfo, SuspensionTitle } from './SuspensionInfo';\n\nconst suspendedFlags = [TEAM_FLAGS.SERVING, TEAM_FLAGS.NOT_SERVING];\nconst detailedFlags = [TEAM_FLAGS.EXTRA, TEAM_FLAGS.TRANSFERRED, TEAM_FLAGS.SECONDARY_TEAM, TEAM_FLAGS.MISSING_SUSPENDED_MEMBER, TEAM_FLAGS.UNVALIDATED_MEMBERS];\n\nconst useStyles = makeStyles(theme => ({\n dialogTitle: {\n paddingBottom: theme.spacing(0.5)\n },\n modalFlagIcon: {\n margin: 'auto',\n },\n flagCount: {\n position: \"absolute\",\n zIndex: 1,\n userSelect: 'none',\n pointerEvents: 'none',\n aspectRatio: \"1/1\",\n height: '1.5em',\n fontSize: '.6rem',\n top: theme.spacing(.75),\n right: props => props.edge ? theme.spacing(-.25) : theme.spacing(.75),\n color: \"white\",\n backgroundColor: '#707070', // same color as the default flag color\n border: '1px solid white',\n borderRadius: \"50%\",\n display: 'grid',\n placeContent: 'center'\n }\n}))\n\nconst FlagItem = ({ flagName, member }) => {\n const classes = useStyles();\n const translate = useTranslate()\n const { memberValidations } = useMemberValidationContext();\n const memberValidation = memberValidations.find(({ participantId }) => participantId === member.participantId);\n const memberThrowsInnings = useScoresheet(scoresheet => getThrowsInnings(scoresheet, { teamId: member.teamId, participantId: member.participantId }))\n\n let secondary;\n\n if (suspendedFlags.includes(flagName)) {\n const initialSuspention = getInitialSuspension(memberValidation, member.teamId)\n const validationSuspension = memberValidation.suspensions.find(suspension => suspension.id === initialSuspention.id)\n if (validationSuspension) {\n secondary = <Typography variant=\"body1\"><SuspensionInfo suspension={validationSuspension} /></Typography>\n }\n } else if (detailedFlags.includes(flagName)) {\n secondary = translate(`resources.games.labels.flagsDetails.${flagName}`)\n } else if (flagName === TEAM_FLAGS.FAULTY_PLAYERS) {\n const faultyReason = getFaultyPlayerReason(memberValidation.throwsInningsStatus, memberThrowsInnings);\n secondary = translate(`resources.games.labels.flagsDetails.${flagName}.${faultyReason}`)\n }\n const { suspension } = member;\n\n const primary = suspendedFlags.includes(flagName) ? <SuspensionTitle selected suspension={suspension} memberValidation={memberValidation} /> : translate(`resources.games.labels.flags.${flagName}`, 1)\n\n return <ListItem alignItems=\"flex-start\">\n <ListItemIcon>\n <Flag color={getFlagColor(flagName)} className={classes.modalFlagIcon} />\n </ListItemIcon>\n <ListItemText\n primary={primary}\n secondary={secondary}\n />\n </ListItem>;\n}\n\nconst FlagCount = ({ count, edge }) => {\n const classes = useStyles({ edge });\n return <span className={classes.flagCount}>{count}</span>\n}\n\nexport const MemberFlagsList = ({ member, flagNames }) => {\n return <List>\n {flagNames.map(flagName => (\n <FlagItem key={flagName} flagName={flagName} member={member} />\n ))}\n </List>\n}\n\nexport const MemberFlagsButton = ({ flagNames, flagColor, member, edge }) => {\n const classes = useStyles();\n const [open, setOpen] = useState(false)\n const translate = useTranslate();\n const { memberValidations } = useMemberValidationContext();\n const memberValidation = memberValidations.find(({ participantId }) => participantId === member.participantId);\n const { suspension } = member;\n\n const flagTooltip = flagNames.map((flagName, key) => {\n const flagLabel = suspendedFlags.includes(flagName) ? <SuspensionTitle selected suspension={suspension} memberValidation={memberValidation} /> : translate(`resources.games.labels.flags.${flagName}`, 1)\n return (\n <>\n {key > 0 && <br />}\n {flagLabel}\n </>\n );\n })\n\n return (\n <>\n <Box position=\"relative\">\n {flagNames.length > 1 && <FlagCount count={flagNames.length} edge={edge} />}\n <Flag onClick={() => setOpen(true)} color={flagColor} tooltip={flagTooltip} edge={edge} />\n </Box>\n <Dialog onClose={() => setOpen(false)} open={open} fullWidth maxWidth=\"sm\">\n <DialogTitle className={classes.dialogTitle}>{member.participant.fullName}</DialogTitle>\n <MemberFlagsList member={member} flagNames={flagNames} />\n </Dialog>\n </>\n )\n}\n\n","import React, { useState } from 'react';\nimport { useRecordContext, useTranslate } from 'react-admin';\nimport {\n Checkbox,\n IconButton,\n Button,\n Popover,\n CardContent,\n CardActions,\n FormLabel,\n TextField,\n FormGroup,\n FormControlLabel,\n InputAdornment,\n RadioGroup,\n Radio,\n Tooltip,\n Select,\n MenuItem,\n Grid,\n Typography,\n} from '@material-ui/core';\nimport { Edit as EditIcon } from '@material-ui/icons'\nimport moment from 'moment-timezone';\nimport { isEmpty } from 'lodash';\n\nimport { FF_BATTERS } from '@hisports/common/featureFlags';\nimport { editLineupMember, removeLineupExtra } from '@hisports/scoresheet/src/actions';\nimport { generateId, isPlayer, isSuspensionPurgeable } from '@hisports/scoresheet/src/util';\n\nimport { useFlag, useSport } from '../../../http';\nimport { isAuthorized } from '../../../common/Authorize';\n\nimport { useMemberValidationContext } from './MemberValidationContext';\nimport { useMeta, useScoresheetDispatch } from '../ScoresheetContext';\n\nconst POSITIONS = [\n { id: 'F', name: 'resources.members.values.positions.F', type: 'resources.members.labels.player' },\n { id: 'C', name: 'resources.members.values.positions.C', type: 'resources.members.labels.player', sports: ['Hockey'] },\n { id: 'D', name: 'resources.members.values.positions.D', type: 'resources.members.labels.player', sports: ['Hockey'] },\n { id: 'G', name: 'resources.members.values.positions.G', type: 'resources.members.labels.player', sports: ['Hockey'] },\n { id: 'Manager', name: 'resources.members.values.positions.Manager', type: 'resources.members.labels.staff' },\n { id: 'Head Coach', name: 'resources.members.values.positions.Head Coach', type: 'resources.members.labels.staff' },\n { id: 'Assistant Coach', name: 'resources.members.values.positions.Assistant Coach', type: 'resources.members.labels.staff' },\n { id: 'Goaltending Coach', name: 'resources.members.values.positions.Goaltending Coach', type: 'resources.members.labels.staff', sports: ['Hockey', 'Soccer'] },\n { id: 'Safety Person', name: 'resources.members.values.positions.Safety Person', type: 'resources.members.labels.staff' },\n { id: 'Trainer', name: 'resources.members.values.positions.Trainer', type: 'resources.members.labels.staff' },\n]\n\nconst DEFAULT_SUSPENSION_STATE = {\n game: null,\n total: null,\n}\n\nconst SUSPENSION_TYPES = {\n NONE: 'None',\n GAME: 'Game',\n ADMINISTRATIVE: 'Admin',\n MANUAL: 'Manual'\n}\n\nconst parseNumber = value => {\n const number = parseInt(value, 10);\n return !isNaN(number) ? number: undefined;\n}\n\nconst isValidSuspension = (suspension, suspensionType) => {\n if (suspensionType === SUSPENSION_TYPES.MANUAL) {\n if (isEmpty(suspension)) return false\n if (!parseNumber(suspension.game)) return false;\n if (!parseNumber(suspension.total)) return false;\n if (Number(suspension.game) > Number(suspension.total)) return false;\n }\n return true\n}\n\nconst initialSuspensionState = (suspension, adminSuspension) => {\n if (suspension) {\n return suspension.id ? SUSPENSION_TYPES.GAME : SUSPENSION_TYPES.MANUAL;\n } else if (adminSuspension) {\n return SUSPENSION_TYPES.ADMINISTRATIVE\n } else {\n return SUSPENSION_TYPES.NONE;\n }\n}\n\nconst EditMemberPopover = ({ member, isExtra, anchorEl, onClose, teamId, isScorekeeper }) => {\n const translate = useTranslate();\n const sport = useSport();\n const isEnabled = useFlag();\n const game = useRecordContext();\n const { memberValidations } = useMemberValidationContext();\n\n const memberValidation = memberValidations.find(({ participantId }) => participantId === member.participantId);\n const gameSuspensions = (memberValidation?.suspensions || []).filter(suspension => suspension.type === 'Game');\n const adminSuspension = memberValidation?.suspensions?.find(suspension => suspension.type === 'Admin')\n const initialGameSuspension = gameSuspensions.find(({ id }) => id === member?.suspension?.id);\n\n const [ battingOrder, setBattingOrder ] = useState(member.battingOrder || null)\n const [ number, setNumber ] = useState(member.number || null)\n const [ positions, setPositions ] = useState(member.positions)\n const [ isStarter, setStarter ] = useState(member.isStarter)\n const [ memberStatus, setMemberStatus ] = useState(member.isCaptain ? 'Captain' : member.isAlternate ? 'Alternate' : '')\n const [ suspension, setSuspension ] = useState(initialGameSuspension ? { ...member.suspension, total: initialGameSuspension.effectiveRequiredGames } : member.suspension);\n const [ suspensionType, setSuspensionType ] = useState(initialSuspensionState(suspension, adminSuspension))\n\n const [ positionsOpen, setPositionsOpen ] = useState(false);\n\n const playerSelected = isPlayer({ positions })\n const goalieSelected = positions.includes('G')\n\n const validNumber = !playerSelected || !isEmpty(suspension) || !!number;\n const validBattingOrder = !playerSelected || battingOrder > 0 || battingOrder == null;\n const validPositions = positions.length > 0;\n const validSuspension = isValidSuspension(suspension, suspensionType)\n const isValid = validNumber && validBattingOrder && validPositions && validSuspension;\n const isAutomaticSuspension = !!gameSuspensions.length || adminSuspension;\n\n const canEditPurge = isAuthorized(game, 'scoresheets', 'full') || isScorekeeper || !isAutomaticSuspension;\n\n const handlePositions = positions => {\n setPositions(positions);\n setPositionsOpen(false);\n }\n\n const handleSave = () => {\n if (!isValid) return;\n onClose({\n ...member,\n battingOrder,\n number,\n positions,\n isCaptain: memberStatus === 'Captain',\n isAlternate: memberStatus === 'Alternate',\n isStarter: goalieSelected && isStarter,\n suspension: suspensionType !== SUSPENSION_TYPES.NONE ? suspension : undefined,\n })\n }\n\n const handleRemove = () => {\n onClose(member, true);\n }\n\n const handleCancel = () => {\n onClose()\n }\n\n return <Popover\n open={!!anchorEl}\n anchorEl={anchorEl}\n onClose={() => onClose()}\n PaperProps={{\n style: {\n minWidth: 8 * 42,\n maxWidth: 8 * 42,\n }\n }}\n anchorOrigin={{\n vertical: 'top',\n horizontal: 'right',\n }}\n transformOrigin={{\n vertical: 'top',\n horizontal: 'right',\n }}\n >\n {playerSelected && isEnabled(FF_BATTERS) && <CardContent>\n <FormLabel>{translate('resources.members.labels.battingOrder')}</FormLabel>\n <TextField\n type=\"number\"\n fullWidth\n autoFocus\n value={battingOrder}\n error={!validBattingOrder}\n onChange={e => setBattingOrder(parseNumber(e.target.value))}\n InputProps={{\n startAdornment: <InputAdornment position=\"start\">#</InputAdornment>,\n }}\n inputProps={{ min: \"1\" }}\n />\n </CardContent>}\n\n {playerSelected && <CardContent>\n <FormLabel>{translate('resources.members.labels.jersey')}</FormLabel>\n <TextField\n type=\"number\"\n fullWidth\n autoFocus\n value={number}\n error={!validNumber}\n onChange={e => setNumber(parseNumber(e.target.value))}\n InputProps={{\n startAdornment: <InputAdornment position=\"start\">#</InputAdornment>,\n }}\n />\n </CardContent>}\n\n <CardContent>\n <FormLabel>{translate('resources.members.fields.positions')}</FormLabel>\n <FormGroup row>\n <Select\n multiple\n fullWidth\n value={positions}\n error={!validPositions}\n open={positionsOpen}\n onOpen={() => setPositionsOpen(true)}\n onClose={() => setPositionsOpen(false)}\n onChange={e => handlePositions(e.target.value)}\n >\n {POSITIONS\n .filter(position => !position.sports?.length || position.sports.includes(sport))\n .map(position =>\n <MenuItem key={position.id} value={position.id}>\n {translate(position.name)}\n </MenuItem>\n )}\n </Select>\n </FormGroup>\n </CardContent>\n\n {playerSelected && <CardContent>\n <FormLabel>{translate('resources.members.fields.status')}</FormLabel>\n <RadioGroup row value={memberStatus} onChange={e => setMemberStatus(e.target.value)}>\n <FormControlLabel\n control={<Radio color=\"primary\" />}\n label={translate('resources.members.fields.isCaptain')}\n value=\"Captain\"\n />\n <FormControlLabel\n control={<Radio color=\"primary\" />}\n label={translate('resources.members.fields.isAlternate')}\n value=\"Alternate\"\n />\n <FormControlLabel\n control={<Radio color=\"primary\" />}\n label=\"None\"\n value=\"\"\n />\n </RadioGroup>\n\n {goalieSelected && <FormGroup>\n <FormControlLabel\n control={<Checkbox color=\"primary\" />}\n label={translate('resources.members.labels.starter_goalie')}\n checked={isStarter}\n onChange={() => {\n setStarter(isStarter => !isStarter)\n }}\n />\n </FormGroup>}\n </CardContent>}\n\n <CardContent>\n <FormGroup>\n <FormLabel>{translate('resources.members.labels.suspension')}</FormLabel>\n\n {/* Suspension input selector: not suspended, suspended playing, suspensions to purge, administrative, manual */}\n <Select\n fullWidth\n disabled={!canEditPurge}\n value={suspension?.id || suspensionType}\n onChange={e => {\n const { value } = e.target;\n\n if (value === SUSPENSION_TYPES.NONE) {\n setSuspensionType(SUSPENSION_TYPES.NONE)\n } else if (value === SUSPENSION_TYPES.MANUAL) {\n setSuspensionType(SUSPENSION_TYPES.MANUAL)\n } else if (value === SUSPENSION_TYPES.ADMINISTRATIVE) {\n setSuspensionType(SUSPENSION_TYPES.ADMINISTRATIVE)\n } else {\n setSuspensionType(SUSPENSION_TYPES.GAME)\n }\n\n const suspensionId = value;\n const selectedGameSuspension = gameSuspensions.find(({ id }) => id === suspensionId);\n\n if (selectedGameSuspension) {\n if (isSuspensionPurgeable(selectedGameSuspension, teamId)) {\n setSuspension({\n id: e.target.value,\n purgeId: generateId(),\n game: selectedGameSuspension.servedGames + 1,\n total: selectedGameSuspension.effectiveRequiredGames\n })\n } else {\n setSuspension({\n id: e.target.value\n })\n }\n } else {\n setSuspension(DEFAULT_SUSPENSION_STATE)\n }\n }}\n >\n <MenuItem value={SUSPENSION_TYPES.NONE}>\n {gameSuspensions.length > 0 || adminSuspension ? translate('resources.suspensions.messages.playing') : translate('resources.suspensions.labels.not_suspended')}\n </MenuItem>\n {gameSuspensions.map(suspension => {\n const number = `${translate('resources.games.name', 1)} ${suspension.game.number}`\n const date = moment.utc(suspension.game.date).format('LL');\n const name = `${number} (${date})`\n return <MenuItem key={suspension.id} value={suspension.id} disabled={adminSuspension}>\n <Tooltip title={name}>\n <div>{name}</div>\n </Tooltip>\n </MenuItem>\n })}\n {adminSuspension && <MenuItem value={SUSPENSION_TYPES.ADMINISTRATIVE}>\n {translate('resources.suspensions.labels.admin')}\n </MenuItem>}\n <MenuItem value={SUSPENSION_TYPES.MANUAL} disabled={adminSuspension}>\n {translate('resources.suspensions.labels.manual_direct')}\n </MenuItem>\n </Select>\n\n {/* Suspension manual count input */}\n {!isEmpty(suspension) && suspensionType === SUSPENSION_TYPES.MANUAL && <Grid container spacing={2}>\n <Grid item xs={6}>\n <TextField\n type=\"number\"\n label={translate('resources.members.labels.current_game')}\n disabled={!canEditPurge}\n value={suspension?.game}\n onChange={e => {\n setSuspension({\n id: undefined,\n purgeId: undefined,\n game: parseNumber(e.target.value),\n total: suspension.total,\n })\n }}\n />\n </Grid>\n <Grid item xs={6}>\n <TextField\n type=\"number\"\n label={translate('resources.members.labels.total_games')}\n disabled={!canEditPurge}\n value={suspension?.total}\n onChange={e => {\n setSuspension({\n id: undefined,\n purgeId: undefined,\n total: parseNumber(e.target.value),\n game: suspension.game,\n })\n }}\n />\n </Grid>\n </Grid>}\n\n {/* Game suspension selected count */}\n {!isEmpty(suspension) && suspensionType === SUSPENSION_TYPES.GAME && suspension.purgeId && <Grid container spacing={2}>\n <Grid item xs={suspension.total != null ? 6 : 5}>\n <Typography variant=\"body2\" color=\"textSecondary\">\n {`${translate('resources.members.labels.current_game')}: ${(suspension.game)}`}\n </Typography>\n </Grid>\n <Grid item xs={suspension.total != null ? 6 : 7}>\n <Typography variant=\"body2\" color=\"textSecondary\">\n {`${translate('resources.members.labels.total_games')}: ${suspension?.total || translate('resources.suspensions.values.durationType.Indefinite')}`}\n </Typography>\n </Grid>\n </Grid>\n }\n {/* Game suspension no purge */}\n {!isEmpty(suspension) && suspensionType === SUSPENSION_TYPES.GAME && !suspension.purgeId && <Grid container spacing={2}>\n <Grid item xs={12}>\n <Typography variant=\"body2\" color=\"textSecondary\">\n {translate('resources.suspensions.messages.unpurgeable')}\n </Typography>\n </Grid>\n </Grid>}\n </FormGroup>\n </CardContent>\n\n <CardActions>\n <Button color=\"primary\" onClick={handleSave} disabled={!isValid}>{translate('ra.action.update')}</Button>\n {isExtra && <Button color=\"error\" onClick={handleRemove}>{translate('ra.action.remove')}</Button>}\n <Button onClick={handleCancel}>{translate('ra.action.cancel')}</Button>\n </CardActions>\n </Popover>\n}\n\nexport const EditMemberButton = ({ teamId, member, isExtra, isScorekeeper, disabled }) => {\n const [ target, setTarget ] = useState(null);\n const translate = useTranslate();\n\n const { game } = useMeta();\n const dispatch = useScoresheetDispatch();\n\n const handleClick = e => {\n setTarget(e.currentTarget)\n }\n\n const handleClose = (member, remove) => {\n if (member) {\n if (!remove) {\n dispatch(editLineupMember(game.id, teamId, member))\n } else if (isExtra) {\n dispatch(removeLineupExtra(game.id, teamId, member.participantId))\n }\n }\n\n setTarget(null)\n }\n\n return <>\n <Tooltip title={translate('ra.action.edit')} placement=\"top\" arrow>\n <IconButton edge=\"end\" disabled={disabled} onClick={handleClick}>\n <EditIcon fontSize=\"small\" />\n </IconButton>\n </Tooltip>\n {target && <EditMemberPopover member={member} isExtra={isExtra} anchorEl={target} onClose={handleClose} isScorekeeper={isScorekeeper} teamId={teamId} />}\n </>\n}\n","import React from 'react';\nimport { makeStyles, ListItem, ListItemIcon, ListItemText, ListItemSecondaryAction, Checkbox, Chip, alpha } from '@material-ui/core';\nimport { useTranslate } from 'react-admin';\n\nimport { isPlayer } from '@hisports/scoresheet/src/util';\nimport { FLAG_COLORS } from '@hisports/scoresheet/src/constants';\nimport { FF_PITCHERS } from '@hisports/common/featureFlags';\n\nimport { useFlag } from '../../../http';\n\nimport { EditMemberButton } from './EditMember';\nimport { MemberFlagsButton } from './MemberFlags';\nimport { useMemberItem, MemberItemContextProvider } from './MemberItemContext';\n\nconst useStyles = makeStyles((theme) => ({\n chip: {\n marginLeft: theme.spacing(1),\n [theme.breakpoints.only('md')]: {\n marginLeft: theme.spacing(0),\n }\n },\n twoActions: {\n paddingRight: theme.spacing(12)\n },\n listItemActions: {\n display: 'flex',\n },\n flaggedBgWarning: {\n backgroundColor: alpha(theme.palette.warning[50], .4),\n borderTop: '1px solid white',\n },\n flaggedBgError: {\n backgroundColor: alpha(theme.palette.error[50], .4),\n borderTop: '1px solid white',\n },\n}));\n\nconst getMemberStatus = (member, translate, hideSuspension = false) => {\n const status = [];\n if (!member) return [];\n if (member.isCaptain) status.push(translate('resources.members.fields.isCaptain'));\n if (member.isAlternate) status.push(translate('resources.members.fields.isAlternate'));\n if (member.isAffiliate) status.push(translate('resources.members.fields.isAffiliate'));\n if (member.isOverage) status.push(translate('resources.members.fields.isOverage'));\n if (member.isUnderage) status.push(translate('resources.members.fields.isUnderage'));\n if (member.isStarter) status.push(translate('resources.members.fields.isStarter'));\n if (member.suspension && !hideSuspension) status.push(`${translate('resources.members.labels.suspended')}${member.suspension.game && member.suspension.total ? ` (${member.suspension.game}/${member.suspension.total})` : ''}`);\n if (member.isReleased) status.push(translate('resources.members.fields.isReleased'));\n return status.join(' / ');\n}\n\nexport const getMemberDescription = (member, translate, hideSuspension = false) => [\n member.positions.map(position => translate(`resources.members.values.positions.${position}`)).join(', '),\n getMemberStatus(member, translate, hideSuspension),\n member.battingOrder && `${translate(`resources.members.fields.batter`)} #${member.battingOrder}`\n].filter(Boolean).join(' / ');\n\nexport const ThrowsInningsStatus = ({ status, isPlayer, ...props }) => {\n const translate = useTranslate();\n if (!isPlayer || !status) return []\n\n let label = null\n\n if (status.hasInningsRest || status.hasThrowsRest) {\n label = `${translate('components.throws_innings.labels.resting')}`\n } else if (status.consecutiveDays >= 2 || (status.dailyInningsRemaining != null && status.dailyInningsRemaining <= 0) || (status.weeklyInningsRemaining != null && status.weeklyInningsRemaining <= 0)) {\n label = `${translate('components.throws_innings.labels.cannot_throw')}`\n } else if (!status.weeklyInningsRemaining && status.dailyInningsRemaining) {\n label = `${translate('components.throws_innings.labels.innings_remaining', { count: status.dailyInningsRemaining })}`\n } else if (status.weeklyInningsRemaining && !status.dailyInningsRemaining) {\n label = `${translate('components.throws_innings.labels.innings_remaining', { count: status.weeklyInningsRemaining })}`\n } else if (status.weeklyInningsRemaining && status.dailyInningsRemaining) {\n if (status.dailyInningsRemaining < status.weeklyInningsRemaining) {\n label = `${translate('components.throws_innings.labels.innings_remaining', { count: status.dailyInningsRemaining })}`\n } else {\n label = `${translate('components.throws_innings.labels.innings_remaining', { count: status.weeklyInningsRemaining })}`\n }\n }\n if (!label) return null\n\n return <Chip size=\"small\" label={label} title={label} variant=\"outlined\" color=\"primary\" {...props} />\n}\n\nexport const getThrowsInningsCount = (gameDate, throwsInnings, translate) => {\n if (!throwsInnings?.length) return []\n const throwsInningsCount = []\n\n const throwsCount = {\n today: throwsInnings.filter(throwsInning => throwsInning.gameDate === gameDate).map(throwsInning => throwsInning.throws).reduce((a = 0, b = 0) => a + b, 0),\n weekly: throwsInnings.map(throwsInning => throwsInning.throws).reduce((a, b) => a + b, 0)\n }\n\n const inningsCount = {\n today: throwsInnings.filter(throwsInning => throwsInning.gameDate === gameDate).map(throwsInning => throwsInning.inningsPitched).reduce((a = 0, b = 0) => a + b, 0),\n weekly: throwsInnings.map(throwsInning => throwsInning.inningsPitched).reduce((a = 0, b = 0) => a + b, 0)\n }\n\n if (throwsCount.today) throwsInningsCount.push(`${translate('components.throws_innings.labels.throws_today')}: ${throwsCount.today}`)\n if (throwsCount.weekly) throwsInningsCount.push(`${translate('components.throws_innings.labels.throws_weekly')}: ${throwsCount.weekly}`)\n if (inningsCount.today) throwsInningsCount.push(`${translate('components.throws_innings.labels.innings_today')}: ${inningsCount.today}`)\n if (inningsCount.weekly) throwsInningsCount.push(`${translate('components.throws_innings.labels.innings_weekly')}: ${inningsCount.weekly}`)\n if (!throwsInningsCount?.length) return []\n\n return throwsInningsCount.join(' / ')\n}\n\nconst MemberListItem = () => {\n const translate = useTranslate();\n const isEnabled = useFlag();\n const classes = useStyles();\n\n const { game, member, teamId, memberValidation, flagNames, flagColor, handleSelect, selected, hasSuspension, isExtra, disabled, loading, isScorekeeper, nonSelectable } = useMemberItem();\n\n const primary = member.number ? `#${member.number} ${member.participant.fullName}` : member.participant.fullName;\n const secondary = getMemberDescription(member, translate, true)\n const throwsInningsCount = getThrowsInningsCount(game.date, memberValidation?.throwsInnings, translate);\n\n const missingNumber = isPlayer(member) && !member.number;\n const incomplete = hasSuspension || missingNumber;\n\n const isClickable = !disabled && !loading && (!nonSelectable || selected)\n const showEditButton = selected && !disabled && (!nonSelectable || selected)\n const showFlag = !!flagNames.length\n\n let className;\n if ([FLAG_COLORS.RED, FLAG_COLORS.RED_ORANGE].includes(flagColor)) {\n className = classes.flaggedBgError\n } else if (flagColor === FLAG_COLORS.ORANGE) {\n className = classes.flaggedBgWarning;\n }\n\n return <ListItem dense button={isClickable} onClick={isClickable && handleSelect} className={className}>\n {!disabled && <ListItemIcon>\n <Checkbox\n color={!incomplete ? \"primary\" : 'default'}\n checked={selected}\n tabIndex={-1}\n disableRipple\n disabled={disabled || loading || (nonSelectable && !selected)}\n />\n </ListItemIcon>}\n <ListItemText\n primary={primary}\n secondary={<>\n {secondary}\n <br />\n {isEnabled(FF_PITCHERS) && <>\n {throwsInningsCount}\n <ThrowsInningsStatus isPlayer={isPlayer(member)} status={memberValidation?.throwsInningsStatus} classes={{ root: classes.chip }} />\n </>}\n </>\n }\n />\n <ListItemSecondaryAction className={classes.listItemActions}>\n {showFlag && <MemberFlagsButton flagNames={flagNames} flagColor={flagColor} member={member} edge={!showEditButton && \"end\"} />}\n {showEditButton && <EditMemberButton teamId={teamId} member={member} isExtra={isExtra} isScorekeeper={isScorekeeper} disabled={loading} />}\n </ListItemSecondaryAction>\n </ListItem>\n}\n\nexport const MemberItem = ({ member, teamId, disabled, isScorekeeper, type }) =>\n <MemberItemContextProvider member={member} teamId={teamId} disabled={disabled} isScorekeeper={isScorekeeper} type={type}>\n <MemberListItem />\n </MemberItemContextProvider>\n","import React, { useContext, useMemo } from 'react';\n\nimport { addMemberToLineup, removeMemberFromLineup } from '@hisports/scoresheet/src/actions';\nimport { getInitialSuspension, isSuspended, getFaultyPlayerReason, getFlagColor, isPlayer, isStaff } from '@hisports/scoresheet/src/util';\nimport { getLineup, getLineupExtras, getThrowsInnings } from '@hisports/scoresheet/src/selectors';\nimport { FLAG_COLORS, TEAM_FLAGS } from '@hisports/scoresheet/src/constants';\nimport { dedupe } from '@hisports/parsers';\n\nimport { useMeta, useScoresheet, useScoresheetDispatch, useScoresheetStore } from '../ScoresheetContext';\nimport { useMemberValidationContext } from './MemberValidationContext';\n\nconst MemberItemContext = React.createContext({});\n\nexport const useMemberItem = () => useContext(MemberItemContext);\n\nconst nonSelectableFlags = [TEAM_FLAGS.UNVALIDATED_MEMBERS];\n\nconst isExtraMember = (member, extras) => extras.some(extra => extra.participantId === member.participantId);\nconst isServing = (member, memberValidation, selected) => selected && memberValidation?.suspensions.some(suspension => suspension.id === member.suspension?.id) || !!member.suspension\nconst isNotServing = (member, memberValidation, selected) => selected && !member.suspension && memberValidation?.suspensions.length\nconst isFaulty = (throwsInningsStatus, memberThrowsInnings) => getFaultyPlayerReason(throwsInningsStatus, memberThrowsInnings);\n\nexport const isPlayerUnvalidatedMember = (member, memberValidation) => (memberValidation?.invalidMemberTypes || []).includes('Player') && isPlayer(member)\nexport const isStaffUnvalidatedMember = (member, memberValidation) => (memberValidation?.invalidMemberTypes || []).includes('Staff') && isStaff(member)\nconst isUnvalidatedMember = (member, memberValidation) => isPlayerUnvalidatedMember(member, memberValidation) || isStaffUnvalidatedMember(member, memberValidation)\n\nconst getFlagMeta = (member, memberValidation, memberThrowsInnings, extras, hasSuspension, selected, type) => {\n const flagNames = []\n\n if (['Skater', 'Goalie'].includes(type) && isPlayerUnvalidatedMember(member, memberValidation)) {\n flagNames.push(TEAM_FLAGS.UNVALIDATED_MEMBERS)\n } else if (type === 'Staff' && isStaffUnvalidatedMember(member, memberValidation)) {\n flagNames.push(TEAM_FLAGS.UNVALIDATED_MEMBERS)\n } else if (!type && isUnvalidatedMember(member, memberValidation)) {\n flagNames.push(TEAM_FLAGS.UNVALIDATED_MEMBERS)\n }\n\n if (hasSuspension && !selected) {\n flagNames.push(TEAM_FLAGS.MISSING_SUSPENDED_MEMBER)\n } else if (isNotServing(member, memberValidation, selected)) {\n flagNames.push(TEAM_FLAGS.NOT_SERVING)\n } else if (isServing(member, memberValidation, selected)) {\n flagNames.push(TEAM_FLAGS.SERVING)\n }\n\n if (isExtraMember(member, extras)) {\n flagNames.push(TEAM_FLAGS.EXTRA)\n }\n if (isFaulty(memberValidation?.throwsInningsStatus, memberThrowsInnings)) {\n flagNames.push(TEAM_FLAGS.FAULTY_PLAYERS)\n }\n\n if (memberValidation?.isTransferred) {\n flagNames.push(TEAM_FLAGS.TRANSFERRED)\n }\n if (memberValidation?.isSecondaryTeam) {\n flagNames.push(TEAM_FLAGS.SECONDARY_TEAM)\n }\n\n const flagColors = dedupe(flagNames.map(flagName => getFlagColor(flagName)));\n\n let flagColor;\n if (flagColors.includes(FLAG_COLORS.RED) && flagColors.includes(FLAG_COLORS.ORANGE)) {\n flagColor = FLAG_COLORS.RED_ORANGE\n } else if (flagColors.includes(FLAG_COLORS.RED)) {\n flagColor = FLAG_COLORS.RED\n } else if (flagColors.includes(FLAG_COLORS.ORANGE)) {\n flagColor = FLAG_COLORS.ORANGE\n } else if (flagColors.includes(FLAG_COLORS.DEFAULT)) {\n flagColor = FLAG_COLORS.DEFAULT\n }\n\n return {\n flagColor,\n flagNames,\n }\n}\n\nexport const MemberItemContextProvider = ({ member: rosterMember, teamId, disabled, isScorekeeper, type, ...props }) => {\n const store = useScoresheetStore();\n const { game } = useMeta();\n const dispatch = useScoresheetDispatch()\n const { memberValidations, loading } = useMemberValidationContext();\n const memberThrowsInnings = useScoresheet(scoresheet => getThrowsInnings(scoresheet, { teamId: rosterMember.teamId, participantId: rosterMember.participantId }))\n const lineupMember = useScoresheet(scoresheet => {\n const lineup = getLineup(scoresheet, { teamId });\n if (!lineup) return null;\n return lineup.members.find(member => member.participantId === rosterMember.participantId);\n })\n const extras = useScoresheet(scoresheet => getLineupExtras(scoresheet, { teamId }));\n\n const member = lineupMember || rosterMember;\n const memberValidation = memberValidations?.find(({ participantId }) => participantId === member.participantId);\n\n const selected = !!lineupMember;\n const handleSelect = useMemo(() => () => {\n if (disabled || loading) return;\n if (!selected) {\n const initialLineup = store.getState().lineups[teamId]?.members || [];\n const memberToAdd = {\n ...member,\n suspension: getInitialSuspension(memberValidation, teamId),\n unsaved: !initialLineup.some(lineupMember => lineupMember.participantId === member.participantId), // indicate member is not saved to lineup yet if different from initial lineup\n }\n dispatch(addMemberToLineup(game.id, teamId, memberToAdd))\n } else {\n dispatch(removeMemberFromLineup(game.id, teamId, member))\n }\n }, [ disabled, loading, game.id, dispatch, member, memberValidation, selected, teamId, store])\n\n const value = useMemo(() => {\n const hasSuspension = isSuspended(member) || !!memberValidation?.suspensions?.length;\n const { flagNames, flagColor } = getFlagMeta(member, memberValidation, memberThrowsInnings, extras, hasSuspension, selected, type);\n const isExtra = isExtraMember(member, extras);\n const nonSelectable = nonSelectableFlags.some(flagName => flagNames.includes(flagName));\n\n return {\n game, member, teamId, memberValidation, flagNames, flagColor, isExtra, hasSuspension, handleSelect, selected, disabled, loading, isScorekeeper, nonSelectable\n };\n }, [member, memberValidation, memberThrowsInnings, extras, selected, type, game, teamId, handleSelect, disabled, loading, isScorekeeper])\n\n return <MemberItemContext.Provider value={value} {...props} />\n}\n","import { unionBy, uniqBy } from 'lodash';\nimport React, { useContext, useEffect, useMemo, useState } from 'react';\n\nimport { getMembers } from '@hisports/scoresheet/src/selectors';\n\nimport { apiClient, useSport } from '../../../http';\n\nconst MemberValidationContext = React.createContext(null);\n\nexport const useMemberValidationContext = () => useContext(MemberValidationContext) || {};\n\nconst validateMembers = async (gameId, teamId, members = []) => {\n return apiClient(`/games/${gameId}/validateMembers`, {\n method: 'POST',\n data: { teamId, members }\n })\n .then(res => res.data)\n}\n\nexport const MemberValidationProvider = ({ disabled = false, lineup, team, game, ...props }) => {\n const [ memberValidations, setMemberValidations ] = useState(team?.validations || []);\n const [ inFlight, setInFlight ] = useState(false);\n const sport = useSport();\n\n useEffect(() => {\n // set initial validatedMembers\n const rosterMembers = team?.members || [];\n const lineupMembers = disabled ? (lineup?.members || []) : getMembers(lineup, team, sport);\n const members = unionBy([...lineupMembers, ...(!game.isCertified ? rosterMembers : [])], 'participantId')\n if (!members.length) return;\n\n setInFlight(true);\n validateMembers(game.id, team.id, members)\n .then(setMemberValidations)\n .finally(() => setInFlight(false))\n }, []) // eslint-disable-line react-hooks/exhaustive-deps\n\n useEffect(() => {\n // check if any participants are missing from memberValidations\n if (inFlight || !memberValidations.length) return;\n const lineupMembers = disabled ? (lineup?.members || []) : getMembers(lineup, team, sport);\n\n const missingMembers = lineupMembers.filter(lineupMember => {\n return !memberValidations.some(member => member.participantId === lineupMember.participantId)\n });\n if (!missingMembers.length) return;\n\n setInFlight(true)\n validateMembers(game.id, team.id, missingMembers)\n .then(members => setMemberValidations(prevState => uniqBy([...members, ...prevState], 'participantId')))\n .finally(() => setInFlight(false))\n }, [ disabled, game.id, inFlight, lineup, team, memberValidations, sport ])\n\n const value = useMemo(() => ({\n memberValidations,\n loading: inFlight\n }), [\n memberValidations,\n inFlight\n ]);\n\n return <MemberValidationContext.Provider value={value} {...props} />\n}\n","import React, { Fragment } from 'react';\nimport { RecordContextProvider, SimpleForm, useNotify, useRecordContext, useTranslate } from 'react-admin';\nimport { Dialog, DialogContent, DialogTitle, Grid, useMediaQuery } from \"@material-ui/core\";\nimport { isEqual, sortBy } from 'lodash';\n\nimport { getPeriods } from '@hisports/scoresheet/src/selectors';\nimport { updateSettings } from '@hisports/scoresheet/src/actions';\n\nimport { DialogFormToolbar } from \"../../../common/dialogs/DialogForm\";\n\nimport { GameClockTimeInput } from '../components/GameTimeInput';\nimport { useScoresheet, useScoresheetDispatch } from '../ScoresheetContext';\n\nconst inputProps = {\n variant: 'outlined',\n size: 'small',\n margin: 'dense',\n fullWidth: true,\n}\n\nconst validate = values => {\n const { minutes, seconds } = values || {};\n\n if ((minutes == null || minutes === '') && (seconds == null || seconds === '')) {\n return { message: 'ra.validation.required' }\n }\n}\n\nexport const HockeyPeriodSettings = ({ periods, className, ...props }) => {\n if (!periods?.length) return null;\n\n return <Grid container spacing={2} className={className}>\n {periods?.map((period, i) =>\n <Grid item md={3}>\n <GameClockTimeInput\n source={`periods[${i}]`}\n label={`resources.scoresheets.labels.periods.${period.period}`}\n initialValue={period}\n validate={validate}\n {...inputProps}\n />\n </Grid>\n )}\n </Grid>\n}\n\nconst PeriodsForm = ({ ...props }) => {\n const periods = useScoresheet(scoresheet => getPeriods(scoresheet)) || [];\n\n return <SimpleForm {...props}>\n <HockeyPeriodSettings periods={periods} />\n </SimpleForm>\n}\n\nexport const PeriodsModal = ({ open, setOpen, ...props }) => {\n const fullScreen = useMediaQuery(theme => theme.breakpoints.down('sm'));\n const translate = useTranslate();\n const notify = useNotify();\n const game = useRecordContext();\n const dispatch = useScoresheetDispatch();\n const periodSettings = useScoresheet(scoresheet => getPeriods(scoresheet)) || [];\n\n const onSubmit = async ({ periods }) => {\n const hasSettingsChanged = !isEqual(sortBy(periods, 'period'), sortBy(periodSettings, 'period'));\n\n try {\n if (hasSettingsChanged) {\n await dispatch(updateSettings(game.id, { periods }))\n }\n\n notify('resources.scoresheets.messages.successful_update_settings', 'success')\n } catch (e) {\n // catch validation errors caused by the dispatches\n // eslint-disable-next-line no-console\n console.error(e)\n notify('ra.message.error', 'error')\n }\n\n setOpen(false);\n }\n const onCancel = () => setOpen(false);\n\n return <Dialog open={open} maxWidth=\"sm\" fullScreen={fullScreen}>\n <DialogTitle>{translate('resources.scoresheets.labels.period_settings')}</DialogTitle>\n <DialogContent>\n <RecordContextProvider value={null}>\n <PeriodsForm\n save={onSubmit}\n component={Fragment}\n toolbar={\n <DialogFormToolbar\n submitLabel=\"ra.action.save\"\n cancelLabel=\"ra.action.cancel\"\n onCancel={onCancel}\n />\n }\n />\n </RecordContextProvider>\n </DialogContent>\n </Dialog>\n}\n","import React from 'react';\nimport { useTranslate } from 'react-admin';\nimport { sortBy } from 'lodash';\n\nimport { getLineupMembers, getLineupPlayers } from '@hisports/scoresheet/src/selectors';\n\nimport { EnumInput } from '../../../common/inputs/EnumInputs';\nimport { useSport } from '../../../http';\n\nimport { useScoresheet } from '../ScoresheetContext';\nimport { getMemberDescription } from './MemberItem';\n\nexport const LineupInput = ({ teamId, exclude = [], excludeStaff = false, ...props }) => {\n const translate = useTranslate();\n const sport = useSport();\n\n const lineup = useScoresheet(scoresheet => excludeStaff\n ? getLineupPlayers(scoresheet, { teamId, sport, hideUnsaved: true })\n : getLineupMembers(scoresheet, { teamId, sport, hideUnsaved: true })\n );\n\n const choices = sortBy(lineup, ['number', 'participant.fullName'])\n .filter(member => Array.isArray(exclude) ? !exclude.includes(member.participant.id) : member.participant.id !== exclude)\n .map(member => {\n const { id } = member.participant;\n const name = member.number ? `#${member.number} ${member.participant.fullName}` : member.participant.fullName;\n const description = getMemberDescription(member, translate);\n return { id, name, description };\n })\n\n return <EnumInput {...props} choices={choices} optionDescription=\"description\" />\n}\n","import React, { Fragment, useEffect, useMemo } from 'react';\nimport { useNotify, SimpleForm, ArrayInput, RecordContextProvider, useRefresh, useTranslate } from 'react-admin';\nimport { useForm, useFormState } from 'react-final-form';\nimport { Dialog, DialogTitle, DialogContent, useMediaQuery, Grid, makeStyles } from '@material-ui/core';\nimport { isEmpty, get } from 'lodash';\n\nimport { translateApiProperty } from '@hisports/common';\nimport { EVENT_TYPE_PENALTY, HOME, AWAY, SHOOTOUT_PERIOD } from '@hisports/scoresheet/src/constants';\nimport { startPenalty, addGoal } from '@hisports/scoresheet/src/actions';\nimport { findAdditionalPenalties, getInfractionOptionCodes, getInfractionOptionLabel, getInfractionRuleLabel, getLinkedPenalties, isLegacyRulebookSeason, stringifyGameTime } from '@hisports/scoresheet/src/util';\nimport { getPenalties } from '@hisports/scoresheet/src/selectors';\nimport { FF_HIDE_INFRACTION_NAME, FF_PENALTY_FILL_START, FF_PENALTY_SERVED_BY, FF_PENALTY_START_END } from '@hisports/common/featureFlags';\nimport { sortBy } from '@hisports/common/src/lodash';\n\nimport { useMeta, useScoresheetDispatch, useScoresheetStore } from \"../ScoresheetContext\"\n\nimport { useLocale } from '../../../locale';\nimport { useFlag, useSport } from '../../../http';\nimport { GameTimeInput } from '../components/GameTimeInput';\nimport HorizontalFormIterator, { TransitionProps } from '../../../common/ra/HorizontalFormIterator';\nimport { EnumInput } from '../../../common/inputs/EnumInputs';\nimport { DialogFormToolbar } from '../../../common/dialogs/DialogForm';\nimport { LineupInput } from '../lineup/LineupInput';\nimport { TeamField } from '../../teams/TeamField';\nimport { parseGoalEvent, parsePenaltyEvent, validateEvent } from './SummaryEditModal';\n\nconst inputProps = {\n variant: 'outlined',\n size: 'small',\n margin: 'dense',\n fullWidth: true,\n}\n\nconst useStyles = makeStyles({\n iterator: {\n // fix for HorizontalFormIterator disableReordering generating a ui misalignment\n marginLeft: '-8px !important',\n }\n})\n\nconst isNotEmpty = obj => !isEmpty(obj)\n\nconst validate = (values, scoresheet, sport) => {\n const errors = {\n events: {\n penalty: {},\n goal: {},\n }\n };\n\n ['penalty', 'goal'].forEach(eventType => {\n ['home', 'away'].forEach(teamType => {\n errors.events[eventType][teamType] = (values?.events?.[eventType]?.[teamType] || []).map(event => {\n const { event: eventErrors } = validateEvent({ ...event, eventType }, scoresheet, sport)\n return eventErrors;\n })\n })\n })\n\n return errors;\n}\n\nconst InfractionChoiceInput = ({ helperText, ...props }) => {\n const isEnabled = useFlag();\n const { meta, game } = useMeta();\n const { infractions = [], rules = [], types, options = [] } = meta;\n const { values } = useFormState();\n const [ locale ] = useLocale();\n const choiceId = get(values, props.source);\n\n const choices = useMemo(() => {\n const choices = []\n\n if (isLegacyRulebookSeason(game.seasonId)) {\n rules.forEach(rule => {\n rule.choices.forEach(choice => {\n choices.push({\n id: choice.id,\n name: getInfractionOptionLabel(choice, types, game.seasonId),\n rule: rule.name,\n })\n })\n })\n } else {\n options.forEach(option => {\n const rule = rules.find(rule => rule.id === option.ruleId)\n choices.push({\n id: option.id,\n name: getInfractionOptionLabel(option, types, game.seasonId, locale),\n description: getInfractionOptionCodes(option, infractions).filter(Boolean).join(' + '),\n rule: getInfractionRuleLabel(rule, locale),\n displayOrder: option.order\n })\n })\n }\n const sortedChoices = sortBy(choices, ['displayOrder'])\n return sortedChoices\n }, [infractions, rules, types, options, game.seasonId, locale])\n\n return <EnumInput\n choices={choices}\n optionDescription=\"description\"\n filterKeys={['rule', 'name', 'description']}\n groupBy={({ rule }) => rule }\n helperText={(() => {\n if (!choiceId) return helperText;\n if (isEnabled(FF_HIDE_INFRACTION_NAME)) return helperText; // this would just show \"Card\"\n const choice = choices.find(choice => choice.id === choiceId)\n return choice?.rule || helperText;\n })()}\n {...props}\n />\n}\n\nconst AccumulationChoiceInput = ({ helperText, ...props }) => {\n const { meta, game } = useMeta();\n const { accumulations = [] } = meta;\n const [ locale ] = useLocale();\n\n const choices = useMemo(() => {\n const choices = [];\n\n if (isLegacyRulebookSeason(game.seasonId)) {\n return choices;\n } else {\n accumulations.forEach(option => {\n choices.push({\n id: option.id,\n name: translateApiProperty(option, 'name', locale)\n })\n })\n }\n return choices;\n }, [accumulations, game.seasonId, locale])\n\n return <EnumInput\n choices={choices}\n {...props}\n />\n}\n\nconst GoalTypeInput = props => {\n const choices = [\n { id: 'empty_net', name: 'resources.gameEvents.labels.goal.empty_net', sports: ['Hockey'] },\n { id: 'powerplay', name: 'resources.gameEvents.labels.goal.powerplay', sports: ['Hockey'] },\n { id: 'shorthanded', name: 'resources.gameEvents.labels.goal.shorthanded', sports: ['Hockey'] },\n { id: 'penalty_shot', name: 'resources.gameEvents.labels.goal.penalty_shot', sports: ['Hockey', 'Soccer'] },\n { id: 'own_goal', name: 'resources.gameEvents.labels.goal.own_goal', sports: ['Soccer'] },\n ]\n\n return <EnumInput {...props} multiple select choices={choices} />\n}\n\nconst GoalEventInput = ({ source, teamId }) => {\n const form = useForm();\n const { values } = useFormState();\n const event = get(values, source);\n const period = event?.gameTime?.period;\n const scorerId = event?.participantId;\n const assistIds = event?.assistIds;\n const goalTypes = event?.goalTypes;\n\n useEffect(() => {\n if (goalTypes?.includes('own_goal')) {\n form.batch(() => {\n form.change(`${source}.participantId`, null)\n form.change(`${source}.assistIds`, null)\n })\n }\n }, [goalTypes]) // eslint-disable-line react-hooks/exhaustive-deps\n\n return <Grid container spacing={1} fullWidth>\n <Grid item xs={12} md={2}>\n <GameTimeInput source={`${source}.gameTime`} label=\"resources.scoresheets.labels.goal.game_time\" teamId={teamId} {...inputProps} />\n </Grid>\n <Grid item xs={12} md={2}>\n <GoalTypeInput source={`${source}.goalTypes`} select label=\"resources.scoresheets.labels.goal.type\" helperText=\"ra.message.optional\" disabled={period === SHOOTOUT_PERIOD} teamId={teamId} {...inputProps} />\n </Grid>\n <Grid item xs={12} md={4}>\n <LineupInput source={`${source}.participantId`} exclude={assistIds} excludeStaff disabled={goalTypes?.includes('own_goal')} select label=\"resources.scoresheets.labels.goal.scored_by\" teamId={teamId} {...inputProps} />\n </Grid>\n <Grid item xs={12} md={4}>\n <LineupInput source={`${source}.assistIds`} exclude={scorerId} excludeStaff disabled={period === SHOOTOUT_PERIOD || goalTypes?.includes('own_goal')} select multiple helperText=\"ra.message.optional\" label=\"resources.scoresheets.labels.goal.assisted_by\" teamId={teamId} {...inputProps} />\n </Grid>\n </Grid>\n}\n\nconst PenaltyEventInput = ({ source, teamId }) => {\n const { values, dirtyFields } = useFormState();\n const isEnabled = useFlag();\n const form = useForm();\n const event = get(values, source);\n const store = useScoresheetStore();\n const { meta, game } = useMeta();\n const translate = useTranslate();\n const sport = useSport();\n\n const isAccumulationPenalty = !!event?.accumulationId\n const isSubsequentPenalty = useMemo(() => {\n if (!event?.id) return false\n const scoresheet = store.getState();\n const teamPenalties = getPenalties(scoresheet, meta.infractions, meta.types, sport, game.seasonId, { teamId: event.teamId })\n const linkedPenalties = isLegacyRulebookSeason(game.seasonId)\n ? findAdditionalPenalties(event, teamPenalties, meta.rules, sport, true)\n : getLinkedPenalties(event, teamPenalties, sport)\n\n const subsequenPenalties = linkedPenalties.slice(1);\n return subsequenPenalties.some(linkedPenalty => linkedPenalty.id === event.id);\n }, [ store, meta.infractions, meta.types, meta.rules, sport, game.seasonId, event ])\n\n useEffect(() => {\n if (!isEnabled(FF_PENALTY_FILL_START)) return\n if (isEmpty(event?.gameTime) || (!dirtyFields[`${source}.gameTime.clock`] && !dirtyFields[`${source}.gameTime.period`])) return\n form.change(`${source}.startTime`, event.gameTime)\n }, [ event?.gameTime, dirtyFields, form, source, isEnabled ])\n\n return <Grid container spacing={1} fullWidth>\n <Grid item xs={12} md={2}>\n <GameTimeInput source={`${source}.gameTime`} label=\"resources.scoresheets.labels.penalty.game_time\" teamId={teamId} disabled={isSubsequentPenalty} {...inputProps} />\n </Grid>\n {isEnabled(FF_PENALTY_START_END) && <Grid item xs={12} md={2}>\n <GameTimeInput source={`${source}.startTime`} label=\"resources.scoresheets.labels.penalty.start_time\" placeholder={stringifyGameTime(event?.gameTime?.clock)} teamId={teamId} {...inputProps} />\n </Grid>}\n <Grid item xs={12} md>\n <LineupInput source={`${source}.participantId`} select label=\"resources.scoresheets.labels.penalty.offender\" teamId={teamId} disabled={isSubsequentPenalty} {...inputProps} />\n </Grid>\n {isEnabled(FF_PENALTY_SERVED_BY) && <Grid item xs={12} md>\n <LineupInput source={`${source}.servedById`} select exclude={event?.participantId} label=\"resources.scoresheets.labels.penalty.served_by\" teamId={teamId} disabled={isSubsequentPenalty} {...inputProps} />\n </Grid>}\n {!isAccumulationPenalty && <Grid item xs={12} md>\n <InfractionChoiceInput source={`${source}.optionId`} label=\"resources.scoresheets.labels.penalty.infraction\" disabled={isSubsequentPenalty} {...inputProps} />\n </Grid>}\n {isAccumulationPenalty && <Grid item xs={12} md>\n <AccumulationChoiceInput source={`${source}.accumulationId`} label={translate(\"resources.infractionAccumulations.name\", 1)} disabled {...inputProps} />\n </Grid>}\n </Grid>\n}\n\nexport const GameEventInput = ({ eventType, ...props }) => {\n return eventType === EVENT_TYPE_PENALTY\n ? <PenaltyEventInput {...props} />\n : <GoalEventInput {...props} />;\n}\n\nconst GameEventsInput = ({ source, teamId, eventType, ...props }) => {\n const classes = useStyles();\n\n return <ArrayInput source={source} label=\"\" {...inputProps}>\n <HorizontalFormIterator disableReordering TransitionProps={TransitionProps} {...inputProps}>\n <GameEventInput teamId={teamId} className={classes.iterator} eventType={eventType} />\n </HorizontalFormIterator>\n </ArrayInput>\n}\n\nconst SummaryForm = ({ events = [], ...props }) => {\n const { game } = useMeta();\n const { homeTeamId, awayTeamId } = game;\n\n return <SimpleForm {...props} {...inputProps}>\n <>\n <TeamField record={{ teamId: homeTeamId }} source=\"teamId\" link={false} variant=\"subtitle2\" />\n <GameEventsInput source={`events.${props.eventType}.${HOME}`} teamId={homeTeamId} {...props} />\n <TeamField record={{ teamId: awayTeamId }} source=\"teamId\" link={false} variant=\"subtitle2\" />\n <GameEventsInput source={`events.${props.eventType}.${AWAY}`} teamId={awayTeamId} {...props} />\n </>\n </SimpleForm>\n}\n\nexport const SummaryBulkAddModal = ({ title, eventType, open, setModalOpen, ...props }) => {\n const fullScreen = useMediaQuery(theme => theme.breakpoints.down('sm'));\n const translate = useTranslate();\n const dispatch = useScoresheetDispatch();\n const store = useScoresheetStore();\n const notify = useNotify();\n const refresh = useRefresh();\n const { meta, game } = useMeta();\n const sport = useSport();\n\n const onSubmit = async (values = {}) => {\n const { events = {}, id } = values;\n const { homeTeamId, awayTeamId } = game;\n let numberOfFulfilled = 0;\n\n const infractions = [\n ...(events?.penalty?.home || []).filter(isNotEmpty).map(event => ({ ...event, teamId: homeTeamId })),\n ...(events?.penalty?.away || []).filter(isNotEmpty).map(event => ({ ...event, teamId: awayTeamId })),\n ]\n const goals = [\n ...(events?.goal?.home || []).filter(isNotEmpty).map(event => ({ ...event, teamId: event.goalTypes?.includes('own_goal') ? awayTeamId : homeTeamId })),\n ...(events?.goal?.away || []).filter(isNotEmpty).map(event => ({ ...event, teamId: event.goalTypes?.includes('own_goal') ? homeTeamId : awayTeamId })),\n ]\n\n // dispatch penalties synchronously to make sure PenaltyManager has the current state of the team penalties after each infraction\n for (const infraction of infractions) {\n const scoresheetState = store.getState();\n const penalties = parsePenaltyEvent(infraction, scoresheetState, meta, sport, game.seasonId)\n const dispatches = penalties.map(event => startPenalty(game.id, event));\n const results = await Promise.allSettled(dispatches.map(event => {\n try {\n return dispatch(event)\n } catch (e) {\n // catch validation errors caused by the dispatches\n return Promise.reject(e)\n }\n }));\n numberOfFulfilled += (results || []).filter(result => result.status === 'fulfilled').length;\n }\n\n // dispatch all goals asynchronously\n if (goals.length) {\n const dispatches = goals.map(parseGoalEvent).map(event => addGoal(game.id, event));\n\n const results = await Promise.allSettled(dispatches.map(event => {\n try {\n return dispatch(event)\n } catch (e) {\n // catch validation errors caused by the dispatches\n return Promise.reject(e)\n }\n }))\n numberOfFulfilled += (results || []).filter(result => result.status === 'fulfilled').length\n }\n\n const isSuccessful = numberOfFulfilled\n const message = isSuccessful ? `resources.scoresheets.messages.${eventType}.added` : `resources.scoresheets.messages.${eventType}.not_added`;\n const notificationType = isSuccessful ? 'info' : 'error';\n\n notify(message, notificationType, numberOfFulfilled)\n setModalOpen(false);\n setTimeout(() => refresh(), 500);\n }\n const onClose = () => {\n setModalOpen(false);\n }\n\n return <Dialog open={open} maxWidth=\"lg\" fullWidth fullScreen={fullScreen}>\n <DialogTitle>{translate(`resources.scoresheets.labels.add_${eventType === 'penalty' ? 'penalties' : 'goals'}`)}</DialogTitle>\n <DialogContent>\n <RecordContextProvider value={null}>\n <SummaryForm\n eventType={eventType}\n validate={values => validate(values, store.getState(), sport)}\n initialValues={{ events: { [eventType]: { home: [undefined], away: [undefined] } } }}\n save={onSubmit} component={Fragment} toolbar={\n <DialogFormToolbar submitLabel=\"ra.action.save\" cancelLabel=\"ra.action.cancel\" onCancel={onClose} />\n } />\n </RecordContextProvider>\n </DialogContent>\n </Dialog>\n}\n","import React, { Fragment, useMemo } from 'react';\nimport { useNotify, SimpleForm, useRefresh, RecordContextProvider, useTranslate } from 'react-admin';\nimport { Dialog, DialogTitle, DialogContent, useMediaQuery, makeStyles } from '@material-ui/core';\nimport { Alert } from '@material-ui/lab';\nimport { isEmpty, keyBy } from 'lodash';\n\nimport { getPeriods, getPenalties, getLineup, getMembers } from '@hisports/scoresheet/src/selectors';\nimport { editGoal, editPenalty, startPenalty, deletePenalty } from '@hisports/scoresheet/src/actions';\nimport { isTimeBefore, isTimeValid, LegacyPenaltyManager, LegacyHockeyPenaltyManager, LegacySoccerPenaltyManager, findAdditionalPenalties, findChoice, getInfractionRule, isLegacyRulebookSeason, PenaltyManager, getLinkedPenalties } from '@hisports/scoresheet/src/util';\n\nimport { useSport } from '../../../http';\nimport { DialogFormToolbar } from '../../../common/dialogs/DialogForm';\nimport { TeamField } from '../../teams/TeamField';\n\nimport { useMeta, useScoresheetDispatch, useScoresheetStore } from \"../ScoresheetContext\"\nimport { GameEventInput } from './SummaryBulkAddModal';\n\nconst inputProps = {\n variant: 'outlined',\n size: 'small',\n margin: 'dense',\n fullWidth: true,\n}\n\nconst GOAL_TYPE_MAP = {\n isEmptyNet: 'empty_net',\n isPowerplay: 'powerplay',\n isShorthanded: 'shorthanded',\n isOwnGoal: 'own_goal',\n isPenaltyShot: 'penalty_shot',\n}\n\nconst useStyles = makeStyles(theme => ({\n team: {\n paddingTop: theme.spacing(1.5),\n paddingBottom: theme.spacing(1)\n }\n}))\n\nexport const validateEvent = (event, scoresheet, sport) => {\n const validateGameTime = (gameTime = {}) => {\n const errors = {};\n const { period, clock, half } = gameTime\n\n if (sport === 'Hockey') {\n const { minutes, seconds } = clock || {};\n if (!period) {\n errors.period = ' '\n }\n if (period != 'SO') {\n if (minutes == undefined || seconds == undefined) {\n errors.clock = 'ra.validation.required'\n } else if (isNaN(minutes) || isNaN(seconds)) {\n errors.clock = 'ra.validation.invalid_number'\n } else if (period && !isTimeValid({ period, minutes, seconds }, getPeriods(scoresheet), 'Hockey')) {\n errors.clock = 'resources.scoresheets.validations.out_of_range'\n }\n }\n }\n\n if (sport === 'Soccer') {\n const { minutes, extra } = clock || {};\n if (!minutes) {\n errors.clock = 'ra.validation.required'\n } else if (isNaN(minutes)) {\n errors.clock = 'ra.validation.invalid_number'\n } else if (minutes < 1) {\n errors.clock = 'ra.validation.greater_than_zero'\n } else if (extra && isNaN(extra)) {\n errors.clock = 'resources.scoresheets.validations.invalid_extra'\n }\n }\n\n if (sport === 'Baseball') {\n if (!period) {\n errors.period = 'ra.validation.required'\n } else if (isNaN(period)) {\n errors.period = 'ra.validation.invalid_number'\n } else if (period < 1) {\n errors.period = 'ra.validation.greater_than_zero'\n }\n if (!half) errors.half = 'ra.validation.required'\n }\n\n return errors\n }\n\n const validateStartTime = event => {\n let errors = {}\n if (!event.startTime) return errors;\n errors = { ...validateGameTime(event.startTime) }\n if (event.gameTime && event.gameTime.clock && event.gameTime.period && event.startTime && event.startTime.clock && event.startTime.period) {\n const gameTime = { ...event.gameTime.clock, period: event.gameTime.period };\n const startTime = { ...event.startTime.clock, period: event.startTime.period };\n if (isTimeBefore(gameTime, startTime, 'Hockey')) {\n errors.clock = 'resources.scoresheets.validations.start_time_before_game_time';\n }\n }\n return errors\n }\n\n const validatePenalty = event => {\n const errors = {};\n if (isEmpty(event)) return errors;\n\n const gameTimeErrors = validateGameTime(event.gameTime);\n const startTimeErrors = validateStartTime(event);\n\n if (!isEmpty(gameTimeErrors)) errors.gameTime = gameTimeErrors;\n if (!isEmpty(startTimeErrors)) errors.startTime = startTimeErrors;\n if (!event.participantId) errors.participantId = 'ra.validation.required';\n if (!event.optionId) errors.optionId = 'ra.validation.required';\n return errors;\n }\n\n const validateGoal = event => {\n const errors = {};\n if (isEmpty(event)) return errors;\n\n const gameTimeErrors = validateGameTime(event.gameTime);\n\n if (!isEmpty(gameTimeErrors)) errors.gameTime = gameTimeErrors;\n if (event && !event?.goalTypes?.includes('own_goal') && !event.participantId) errors.participantId = 'ra.validation.required';\n if (event?.assistIds?.length > 2) errors.assistIds = 'resources.scoresheets.validations.too_many_assists'\n return errors;\n }\n\n const validate = ({ eventType, ...event }) => {\n if (eventType === 'goal') return validateGoal(event);\n if (eventType === 'penalty') return validatePenalty(event);\n return {}\n }\n\n return {\n event: validate(event)\n }\n}\n\nexport const parsePenaltyEvent = (event = {}, scoresheet = {}, meta = {}, sport, seasonId) => {\n const periods = getPeriods(scoresheet)\n const team = meta.teams[event.teamId];\n const lineup = getLineup(scoresheet, { teamId: team.id })\n const members = getMembers(lineup, team, sport)\n const teamPenalties = getPenalties(scoresheet, meta.infractions, meta.types, sport, seasonId, { teamId: event.teamId })\n\n const penaltyEvent = {\n ...event,\n gameTime: { period: event.gameTime.period, ...event.gameTime.clock, half: event.gameTime.half },\n startTime: { period: event.gameTime.period, ...event.gameTime.clock },\n endTime: undefined, // force recalculation of endTime\n };\n\n if (event.startTime) {\n penaltyEvent.startTime = { period: event.startTime.period, ...event.startTime.clock }\n }\n\n let manager;\n\n if (isLegacyRulebookSeason(seasonId)) {\n switch (sport) {\n case 'Hockey':\n manager = new LegacyHockeyPenaltyManager(meta, event.teamId, periods, keyBy(members, 'participantId'));\n break;\n case 'Soccer':\n manager = new LegacySoccerPenaltyManager(meta, event.teamId);\n break;\n default:\n manager = new LegacyPenaltyManager(meta, event.teamId);\n }\n\n const rule = meta.rules?.find(({ choices }) => choices?.find(({ id }) => id === event.optionId));\n const choice = rule?.choices?.find(({ id }) => id === event.optionId);\n\n penaltyEvent.infraction = rule.id,\n\n manager.setPenalty(penaltyEvent, choice, meta.rules);\n } else {\n manager = new PenaltyManager(meta, event.teamId, periods);\n\n manager.setPenalty(penaltyEvent, teamPenalties);\n }\n\n return manager.getResultingPenalties(teamPenalties);\n}\n\nexport const parseGoalEvent = (event = {}) => ({\n ...event,\n ...Object.keys(GOAL_TYPE_MAP).reduce((attributes, attribute) => ({\n ...attributes,\n [attribute]: (event?.goalTypes || []).includes(GOAL_TYPE_MAP[attribute])\n }), {}),\n assistIds: [...(event.assistIds || [])],\n gameTime: { ...event.gameTime, ...event.gameTime.clock }\n})\n\n// form requires minutes/seconds/extra to be nested into 'clock' since its a single input\nconst parseEventTimeToFormFormat = gameTime => ({\n ...(gameTime?.period != null ? { period: gameTime.period } : {}),\n ...(gameTime?.half != null ? { half: gameTime.half } : {}),\n ...(gameTime ? { clock: {\n ...(gameTime.minutes != null ? { minutes: gameTime.minutes } : {}),\n ...(gameTime.seconds != null ? { seconds: gameTime.seconds } : {}),\n ...(gameTime.extra != null ? { extra: gameTime.extra } : {}),\n } }: {})\n})\n\n// form requires a few things to be nested for the inputs to work correctly\nconst parseEventToFormFormat = (event = {}, originalOptionId) => {\n const eventCopy = { ...event }\n Object.keys(GOAL_TYPE_MAP).forEach(goalType => delete eventCopy[goalType])\n return {\n ...eventCopy,\n ...(originalOptionId ? { optionId: originalOptionId } : {}),\n goalTypes: Object.entries(event)\n .map(([type, value]) => value && GOAL_TYPE_MAP[type])\n .filter(Boolean),\n ...(event.gameTime ? { gameTime: { ...parseEventTimeToFormFormat(event.gameTime) } } : {}),\n ...(event.startTime ? { startTime: { ...parseEventTimeToFormFormat(event.startTime) } } : {}),\n ...(event.endTime ? { endTime: { ...parseEventTimeToFormFormat(event.endTime) } } : {}),\n }\n}\n\nconst SummaryForm = ({ ...props }) => {\n const classes = useStyles()\n\n return <SimpleForm {...props} {...inputProps}>\n <div className={classes.team} >\n <RecordContextProvider value={{ teamId: props.teamId }}>\n <TeamField source=\"teamId\" link={false} variant=\"subtitle2\" />\n </RecordContextProvider>\n </div>\n <GameEventInput source=\"event\" {...props} />\n </SimpleForm>\n}\n\nexport const SummaryEditModal = ({ title, event, open, setModalOpen, ...props }) => {\n const fullScreen = useMediaQuery(theme => theme.breakpoints.down('sm'));\n const translate = useTranslate();\n const dispatch = useScoresheetDispatch();\n const store = useScoresheetStore();\n const notify = useNotify();\n const refresh = useRefresh();\n const { meta, game } = useMeta();\n const sport = useSport();\n const scoresheet = store.getState();\n\n const linkedPenalties = useMemo(() => {\n if (event.eventType !== 'penalty') return []\n const scoresheet = store.getState();\n const teamPenalties = getPenalties(scoresheet, meta.infractions, meta.types, sport, game.seasonId, { teamId: event.teamId })\n\n if (isLegacyRulebookSeason(game.seasonId)) {\n return findAdditionalPenalties(event, teamPenalties, meta.rules, sport, true)\n }\n return getLinkedPenalties(event, teamPenalties, sport)\n }, [store, event, meta.infractions, meta.types, meta.rules, sport, game.seasonId])\n\n const subsequentPenalties = useMemo(() => {\n return linkedPenalties.slice(1);\n }, [ linkedPenalties ])\n\n const isSubsequentPenalty = useMemo(() => {\n return subsequentPenalties.some(linkedPenalty => linkedPenalty.id === event.id);\n }, [ subsequentPenalties, event ])\n\n const originalOptionId = useMemo(() => {\n if (event.eventType !== 'penalty') return\n\n if (isLegacyRulebookSeason(game.seasonId)) {\n const additionalPenalties = linkedPenalties.filter(linkedPenalty => linkedPenalty.id !== event.id)\n const rule = getInfractionRule(event, meta.infractions, meta.rules, game.seasonId)\n const choice = findChoice(event, rule, additionalPenalties)\n return choice?.id\n } else {\n return event.optionId\n }\n }, [event, meta.infractions, linkedPenalties, meta.rules, game.seasonId])\n\n const onSubmit = async ({ event }) => {\n const { eventType } = event;\n let numberOfFulfilled = 0;\n let dispatches = [];\n\n if (eventType === 'penalty') {\n if (isSubsequentPenalty) {\n // subsequent penalty is being modified so edit only selected penalty\n dispatches.push(editPenalty(game.id, event.id, event));\n } else {\n // first penalty is being modified so edit all linked penalties\n const newPenalties = parsePenaltyEvent(event, store.getState(), meta, sport, game.seasonId)\n\n // modify existing penalties (or create if new accumulation)\n newPenalties.forEach((newPenalty, i) => {\n if (linkedPenalties[i]) {\n dispatches.push(editPenalty(game.id, linkedPenalties[i].id, newPenalty));\n } else {\n dispatches.push(startPenalty(game.id, newPenalty))\n }\n })\n // remove extra old penalties\n linkedPenalties.forEach((linkedPenalty, i) => {\n if (!newPenalties[i]) {\n dispatches.push(deletePenalty(game.id, linkedPenalty.id))\n }\n })\n }\n }\n\n if (eventType === 'goal') {\n const goal = parseGoalEvent(event)\n dispatches = [goal].map(event => editGoal(game.id, event.id, event))\n }\n\n const results = await Promise.allSettled(dispatches.map(event => {\n try {\n return dispatch(event)\n } catch (e) {\n // catch validation errors caused by the dispatches\n return Promise.reject(e)\n }\n }))\n\n numberOfFulfilled += (results || []).filter(result => result.status === 'fulfilled').length;\n\n const isSuccessful = numberOfFulfilled\n const message = isSuccessful ? `resources.scoresheets.messages.${eventType}.updated` : `resources.scoresheets.messages.${eventType}.not_updated`;\n const notificationType = isSuccessful ? 'info' : 'error';\n\n notify(message, notificationType, numberOfFulfilled)\n setModalOpen(false);\n setTimeout(() => refresh(), 500);\n }\n const onClose = () => {\n setModalOpen(false);\n }\n\n if (!open) return null;\n return <Dialog open={open} maxWidth=\"lg\" fullWidth fullScreen={fullScreen}>\n <DialogTitle>{title}</DialogTitle>\n <DialogContent>\n {!isSubsequentPenalty && !!subsequentPenalties.length && <Alert severity=\"info\">{translate('resources.scoresheets.messages.penalty.subsequent_penalties')}</Alert>}\n {isSubsequentPenalty && <Alert severity=\"info\">{translate('resources.scoresheets.messages.penalty.subsequent_penalties_edit')}</Alert>}\n <RecordContextProvider value={null}>\n <SummaryForm\n eventType={event.eventType}\n teamId={event.teamId}\n initialValues={{ event: parseEventToFormFormat(event, originalOptionId) }}\n validate={({ event }) => validateEvent(event, scoresheet, sport)}\n save={onSubmit} component={Fragment} toolbar={\n <DialogFormToolbar submitLabel=\"ra.action.save\" cancelLabel=\"ra.action.cancel\" onCancel={onClose} />\n } />\n </RecordContextProvider>\n </DialogContent>\n </Dialog>\n}\n","import React, { useMemo, useState } from 'react';\nimport { useRefresh, useTranslate } from 'react-admin';\nimport { startCase } from 'lodash';\nimport { useMediaQuery,\n ListItem,\n ListItemText,\n Chip,\n Grid,\n IconButton,\n makeStyles,\n Typography,\n Box,\n alpha,\n Tooltip,\n} from '@material-ui/core'\nimport {\n Sports as SportsIcon,\n MyLocation as MyLocationIcon,\n SwapHoriz as SwapHorizIcon,\n Edit as EditIcon,\n Delete as DeleteIcon,\n Announcement as ReportIcon,\n FontDownloadOutlined as FontDownloadOutlinedIcon,\n} from '@material-ui/icons'\nimport {\n displayTime,\n getTeamType,\n getSummaryEventDetails,\n findAdditionalPenalties,\n getInfractionType,\n getPenaltyFlagName,\n getFlagColor,\n getLinkedPenalties,\n isLegacyRulebookSeason,\n requiresIncidentReport,\n getSeverity,\n getMemberLabel\n} from '@hisports/scoresheet/src/util';\nimport {\n EVENT_TYPE_GOAL,\n EVENT_TYPE_PENALTY,\n EVENT_TYPE_GOALIE,\n HOME,\n FLAG_COLORS,\n} from '@hisports/scoresheet/src/constants';\nimport { getGameMembers, getPenalties, isGameCertified, isGameCompleted } from '@hisports/scoresheet/src/selectors';\nimport { deleteGoal, deletePenalty } from '@hisports/scoresheet/src/actions';\nimport { translateApiProperty } from '@hisports/common';\n\nimport { useLocale } from '../../../locale';\nimport { isAuthorized } from '../../../common/Authorize';\nimport AlertDialog from '../../../common/dialogs/AlertDialog';\nimport { useSport, useScopes } from '../../../http';\nimport { useBranchSettings } from '../../branchOfficeSettings';\nimport { AddIncidentReportDialog } from '../gameIncidents/IncidentReportModal';\nimport { useIncidentReports } from '../gameIncidents/useIncidentReports';\nimport Flag from '../certification/Flag';\n\nimport { useMeta, useScoresheet, useScoresheetDispatch, useScoresheetStore } from \"../ScoresheetContext\"\nimport { SummaryEditModal } from './SummaryEditModal';\n\nconst useStyles = makeStyles(theme => ({\n center: {\n textAlign: 'center',\n },\n dense: {\n paddingTop: theme.spacing(1),\n paddingBottom: theme.spacing(1),\n marginTop: theme.spacing(1),\n marginBottom: theme.spacing(1),\n },\n extraDense: {\n paddingTop: theme.spacing(1),\n paddingBottom: theme.spacing(1),\n },\n summaryItems: {\n paddingRight: theme.spacing(1),\n paddingLeft: theme.spacing(1),\n },\n nowrap: {\n flexWrap: 'nowrap',\n },\n bgWhite: {\n backgroundColor: 'white',\n },\n flaggedBgWarning: {\n backgroundColor: alpha(theme.palette.warning[50], .4),\n },\n flaggedBgError: {\n backgroundColor: alpha(theme.palette.error[50], .4),\n },\n flagIcon: {\n alignSelf: 'center',\n marginRight: theme.spacing(1),\n },\n accumulation: {\n display: 'flex',\n alignItems: 'center'\n },\n accumulationIcon: {\n fontSize: '1rem',\n marginLeft: theme.spacing(0.5),\n verticalAlign: 'middle'\n }\n}))\n\nconst ActionIcon = ({ eventType, ...props }) => {\n if (eventType === EVENT_TYPE_GOAL) return <MyLocationIcon {...props} />\n if (eventType === EVENT_TYPE_PENALTY) return <SportsIcon {...props} />\n if (eventType === EVENT_TYPE_GOALIE) return <SwapHorizIcon {...props} />\n return <></>; // eslint-disable-line react/jsx-no-useless-fragment\n}\n\nconst ActionChip = ({ teamType, eventType, color }) => {\n const classes = useStyles();\n const translate = useTranslate();\n\n return <Chip\n label={translate(`resources.scoresheets.labels.${teamType}.${eventType}`, { _: '' })}\n icon={<ActionIcon eventType={eventType} fontSize=\"small\" />}\n variant={teamType === HOME ? 'outlined' : undefined}\n className={teamType === HOME ? classes.bgWhite : ''}\n />\n}\n\nconst AccumulationIcon = ({ event }) => {\n const classes = useStyles()\n const translate = useTranslate();\n const locale = useLocale();\n const { meta } = useMeta();\n\n if (!event?.accumulationId) return null;\n\n const accumulation = meta.accumulations?.find(accumulation => accumulation.id === event.accumulationId);\n\n let title = translate('resources.scoresheets.labels.penalty.accumulation')\n\n if (accumulation?.name) {\n const accumulationName = translateApiProperty(accumulation, 'name', locale)\n title += `: ${accumulationName}`\n }\n\n return <Tooltip title={title} placement=\"top\" arrow>\n <FontDownloadOutlinedIcon className={classes.accumulationIcon} />\n </Tooltip>\n}\n\nexport const ListItemSummaryDescription = ({ event, displayGameTime, participantId }) => {\n const [ locale ] = useLocale();\n const translate = useTranslate();\n const { meta, game } = useMeta();\n const sport = useSport();\n const classes = useStyles();\n\n const members = useScoresheet(scoresheet => getGameMembers(scoresheet, { showSuspended: true }));\n const penalties = useScoresheet(scoresheet => getPenalties(scoresheet, meta.infractions, meta.types, sport, game.seasonId));\n\n const description = !event ? getMemberLabel(members, participantId, locale) : getSummaryEventDetails(event, members, meta.infractions, meta.rules, meta.types, penalties, {\n coach: translate('resources.scoresheets.labels.coach'),\n bench: translate('resources.scoresheets.labels.bench_staff'),\n shg: translate('resources.scoresheets.messages.shg'),\n ppg: translate('resources.scoresheets.messages.ppg'),\n eng: translate('resources.scoresheets.messages.eng'),\n psg: translate('resources.scoresheets.messages.psg'),\n og: translate('resources.scoresheets.messages.og'),\n assist_abbr: translate('resources.scoresheets.messages.assist_abbr'),\n served_abbr: translate('resources.scoresheets.messages.served_abbr'),\n start: translate('resources.scoresheets.labels.start'),\n ended: translate('resources.scoresheets.labels.ended'),\n empty_net: translate('resources.scoresheets.messages.empty_net'),\n put_in: translate('resources.scoresheets.messages.put_in_goalie'),\n }, sport, game.seasonId, locale)\n const [primary, ...rest] = description.split(' - ');\n let secondary = rest.join(' - ');\n\n if (displayGameTime) {\n secondary = `${displayTime(event?.gameTime, sport, true)} - ${secondary}`\n }\n\n if (event?.accumulationId) {\n secondary = <div className={classes.accumulation}>\n {secondary}\n <AccumulationIcon event={event} />\n </div>\n }\n\n return <ListItemText primary={primary} secondary={secondary} />\n}\n\nconst DeleteItemButton = ({ event, game, setAlert }) => {\n const dispatch = useScoresheetDispatch();\n const refresh = useRefresh();\n const store = useScoresheetStore();\n const { meta } = useMeta();\n const translate = useTranslate();\n const sport = useSport();\n\n const handleClick = async () => {\n const alert = {\n title: translate(`resources.scoresheets.labels.${event?.eventType}.delete`, { _: 'Delete' }),\n message: translate(`resources.scoresheets.messages.${event?.eventType}.delete_confirm`, { _: 'Are you sure you want to delete?' }),\n accept: translate('ra.action.delete'),\n reject: translate('ra.action.cancel'),\n isOpen: true,\n }\n\n if (event?.eventType === EVENT_TYPE_GOAL) {\n setAlert({\n ...alert,\n onClose: async (result) => {\n if (result) {\n await dispatch(deleteGoal(game.id, event.id))\n }\n setAlert(alert => ({ ...alert, isOpen: false }))\n }\n })\n }\n\n if (event?.eventType === EVENT_TYPE_PENALTY) {\n let additionalPenaltiesToDelete = []\n const isAccumulationPenalty = !!event.accumulationId\n\n if (!isAccumulationPenalty) {\n const scoresheetState = store.getState();\n const { penalties } = scoresheetState;\n additionalPenaltiesToDelete = isLegacyRulebookSeason(game.seasonId)\n ? findAdditionalPenalties(event, penalties, meta.rules, sport)\n : getLinkedPenalties(event, penalties, sport, true);\n }\n\n if (additionalPenaltiesToDelete.length) {\n alert.title = translate('resources.scoresheets.labels.penalty.delete_additional')\n alert.message += ` ${translate('resources.scoresheets.messages.penalty.delete_additional', additionalPenaltiesToDelete.length)}`\n }\n\n setAlert({\n ...alert,\n onClose: async (result) => {\n if (result) {\n await Promise.allSettled([\n dispatch(deletePenalty(game.id, event.id)),\n ...additionalPenaltiesToDelete.map(penalty => dispatch(deletePenalty(game.id, penalty.id)))\n ])\n refresh()\n }\n setAlert(alert => ({ ...alert, isOpen: false }))\n }\n })\n }\n }\n\n return <IconButton onClick={handleClick}>\n <DeleteIcon fontSize=\"small\" />\n </IconButton>\n}\n\nconst EditItemButton = ({ event }) => {\n const translate = useTranslate();\n const [modalOpen, setModalOpen] = useState(false);\n const { eventType } = event;\n\n return <>\n <IconButton onClick={() => setModalOpen(true)}>\n <EditIcon fontSize=\"small\" />\n </IconButton>\n {modalOpen && <SummaryEditModal\n title={translate(`resources.scoresheets.labels.edit_${eventType}`, { _: startCase(eventType) })}\n event={event}\n open={modalOpen}\n setModalOpen={setModalOpen}\n />}\n </>\n}\n\nconst IncidentReportButton = ({ event, game }) => {\n const [modalOpen, setModalOpen] = useState(false);\n return <>\n <IconButton onClick={() => setModalOpen(true)}>\n <ReportIcon fontSize=\"small\" />\n </IconButton>\n {modalOpen && <AddIncidentReportDialog\n initialValues={{ gameId: game?.id, participantId: event?.participantId, penaltyId: event?.id }}\n event={event}\n isOpen={modalOpen}\n handleClose={() => setModalOpen(false)}\n />}\n </>\n}\n\nexport const SummaryItem = ({ event, status, isAssignedOfficial, isScorekeeper, ...props }) => {\n const { game, meta } = useMeta();\n const sport = useSport();\n const store = useScoresheetStore();\n const scoresheet = store.getState();\n const scopes = useScopes();\n const { data: branchSettings } = useBranchSettings(game?.officeId);\n const [ alert, setAlert ] = useState({ isOpen: false });\n\n const classes = useStyles();\n const translate = useTranslate();\n const isSmall = useMediaQuery(theme => theme.breakpoints.down('sm'));\n\n const { eventType, gameTime } = event;\n const teamType = getTeamType(game, event.teamId);\n const isCompleted = useScoresheet(scoresheet => isGameCompleted(scoresheet))\n const isCertified = useScoresheet(scoresheet => isGameCertified(scoresheet))\n\n const incidentsEnabled = isAuthorized(scopes, 'gameIncidents', 'show') || isAssignedOfficial\n const { data: incidents, loading: incidentsLoading } = useIncidentReports(game?.id, incidentsEnabled);\n\n const infractionType = getInfractionType(event, meta.infractions, meta.types, game.seasonId)\n const severity = getSeverity(event, meta.infractions, meta.types, game.seasonId);\n const requireIncidentReport = eventType === EVENT_TYPE_PENALTY && requiresIncidentReport(infractionType, severity);\n\n const hasIncidentReport = useMemo(() => {\n return incidents?.find(({ penaltyId }) => penaltyId === event.id)\n }, [incidents, event])\n\n const canEditSummaryList = status.scorekeeping && ((isScorekeeper && !isCompleted) || isAuthorized(game, 'scoresheets', 'full')) && !isCertified\n\n const showEditItemButton = canEditSummaryList && (eventType === EVENT_TYPE_PENALTY || eventType === EVENT_TYPE_GOAL)\n const showDeleteItemButton = showEditItemButton\n const showAddIncidentReportButton = requireIncidentReport && (!incidentsLoading && !hasIncidentReport) && (isAuthorized(scopes, 'gameIncidents', 'create') || isAssignedOfficial) && branchSettings?.ff_incidents;\n\n const flagName = event.eventType === EVENT_TYPE_PENALTY ? getPenaltyFlagName(scoresheet, event.id, meta): null\n const flagColor = getFlagColor(flagName);\n const tooltip = flagName ? translate(`resources.games.labels.flags.${flagName}`, 1) : null;\n\n const flaggedBgClassName = (() => {\n switch (flagColor) {\n case FLAG_COLORS.RED:\n case FLAG_COLORS.RED_ORANGE:\n return classes.flaggedBgError;\n case FLAG_COLORS.ORANGE:\n return classes.flaggedBgWarning\n default:\n return '';\n }\n })();\n\n return <ListItem className={`${classes.dense} ${flaggedBgClassName}`} {...props}>\n <Grid container spacing={isSmall ? 1 : 3} alignItems=\"center\">\n {!isSmall &&\n <>\n <Grid item md={1} className={classes.center}>\n <ListItemText primary={displayTime(gameTime, sport, false, false)} />\n </Grid>\n <Grid item md={2}>\n <ActionChip teamType={teamType} eventType={eventType} color={flagColor} />\n </Grid>\n <Grid item md>\n <ListItemSummaryDescription event={event} {...props} />\n </Grid>\n </>\n }\n {isSmall &&\n <Grid item xs={8}>\n <Typography variant=\"subtitle2\">\n {displayTime(gameTime, sport, false, false)} - {translate(`resources.scoresheets.labels.${teamType}.${eventType}`, { _: '' })}\n </Typography>\n <ListItemSummaryDescription event={event} {...props} />\n </Grid>\n }\n <Grid item className={!isSmall ? classes.nowrap : ''} md=\"auto\" xs={4}>\n <Box display=\"flex\" alignItems=\"center\">\n {tooltip && <Flag className={classes.flagIcon} color={flagColor} tooltip={tooltip} />}\n {showAddIncidentReportButton && <IncidentReportButton event={event} game={game} />}\n {showEditItemButton && <EditItemButton event={event} game={game} />}\n {showDeleteItemButton && <DeleteItemButton event={event} game={game} setAlert={setAlert} />}\n </Box>\n </Grid>\n </Grid>\n <AlertDialog {...alert} />\n </ListItem>\n}\n","import React from 'react';\n\nimport { DialogDatagrid } from '../../../common/dialogs/DialogDatagrid';\nimport { GameField } from '../../games/GameField';\n\nexport const GamePurgeGrid = ({ ...props }) =>\n <DialogDatagrid size=\"medium\" {...props}>\n <GameField source=\"gameId\" label=\"resources.gamePurges.labels.games_purged\" link=\"scoresheet\" includeDate=\"inline\" includeSurface=\"full\" sortable={false} />\n </DialogDatagrid>\n","import React, { Fragment } from 'react';\n\nimport ListCard from '../../../common/cards/ListCard';\n\nimport { GamePurgeGrid } from './GamePurgeGrid';\n\nexport const GamePurgeList = ({ ...props }) => {\n return <ListCard {...props}\n reference=\"gamePurges\"\n resource=\"gamePurges\"\n target=\"suspensionId\"\n sort={{\n field: ['game.date'],\n order: ['DESC'],\n }}\n perPage={25}\n rowsPerPageOptions={[]}\n component={Fragment}\n noResultsText=\"resources.gamePurges.messages.no_results\"\n >\n <GamePurgeGrid rowClick={false} />\n </ListCard>\n};\n","import React, { useMemo, useRef } from 'react';\nimport { GET_MANY_REFERENCE, NumberInput, SimpleForm, useQuery, useRecordContext, useTranslate } from \"react-admin\";\nimport { useFormState } from 'react-final-form';\nimport { isEmpty, sortBy } from 'lodash';\nimport { Grid, makeStyles } from \"@material-ui/core\";\nimport { Alert, AlertTitle } from '@material-ui/lab';\nimport createCalculator from 'final-form-calculate';\n\nimport { getGameMembers, getLineup, getPenalties } from \"@hisports/scoresheet/src/selectors\";\nimport { displayTime, getMember, getMemberPositionGroup, getPenaltyDetails, isPlayerPosition, isStaffPosition } from '@hisports/scoresheet/src/util';\n\nimport { useSport } from \"../../../http\";\nimport { useLocale } from '../../../locale';\nimport { DurationTypeInput, EnumInput, SuspensionPositionGroupInput, SuspensionStatusInput } from '../../../common/inputs/EnumInputs';\nimport Toolbar from '../../../common/ra/Toolbar';\nimport { DateInput } from '../../../common/inputs/DateInput';\nimport { TeamInput } from '../../teams/TeamInput';\n\nimport { ScoresheetProvider, useMeta, useScoresheet, useScoresheetStore } from \"../ScoresheetContext\";\nimport { getMemberDescription } from '../lineup/MemberItem';\nimport { useSuspensionsWithStore } from '../../suspensions/useSuspensions';\nimport { useSeason } from '../../../common/inputs/SeasonSelector';\n\nconst useStyles = makeStyles(theme => ({\n alert: {\n marginBottom: theme.spacing(3),\n marginInline: 'auto'\n }\n}))\n\nconst validate = (values, translate) => {\n const errors = {};\n\n if (!values.teamId) errors.teamId = 'ra.validation.required';\n if (!values.participantId) errors.participantId = 'ra.validation.required';\n if (!values.positionGroup) errors.positionGroup = 'ra.validation.required';\n\n if (values.durationType === 'Definite') {\n if (values.requiredGames == undefined) {\n errors.requiredGames = 'ra.validation.required';\n } else if (values.requiredGames < 1) {\n errors.requiredGames = translate('ra.validation.minValue', { min: 1 });\n }\n }\n\n return errors;\n}\n\nconst inputProps = {\n variant: 'outlined',\n margin: 'none',\n fullWidth: true,\n}\n\nexport const PenaltyInput = ({ allowEmpty = true, allowReuse = true, requireIncidentReport = false, ...props }) => {\n const sport = useSport()\n const translate = useTranslate()\n const [ locale ] = useLocale();\n const { game, meta } = useMeta()\n const currentSuspension = useRecordContext()\n\n const { data: suspensions } = useSuspensionsWithStore(game?.id);\n\n const penalties = useScoresheet(scoresheet => getPenalties(scoresheet, meta.infractions, meta.types, sport, game.seasonId, { requireIncidentReport }))\n const members = useScoresheet(scoresheet => getGameMembers(scoresheet));\n\n const choices = penalties.map(penalty => {\n const { id, gameTime } = penalty\n const isCurrent = currentSuspension?.penaltyId === id\n const isExist = Object.values(suspensions).find(suspension => suspension.penaltyId === id)\n const disabled = !allowReuse && !isCurrent && isExist\n const name = `${displayTime(gameTime, sport)} - ${getPenaltyDetails(penalty, meta.infractions, meta.rules, meta.types, penalties, members, {\n served_abbr: translate('resources.scoresheets.messages.served_abbr'),\n coach: translate('resources.scoresheets.labels.coach'),\n bench: translate('resources.scoresheets.labels.bench_staff'),\n start: translate('resources.scoresheets.labels.start'),\n ended: translate('resources.scoresheets.labels.ended'),\n }, sport, game.seasonId, locale)}`\n return { id, name, disabled };\n })\n\n return <EnumInput select allowEmpty={allowEmpty} emptyText=\"ra.message.none\" choices={choices} optionDescription=\"description\" {...props} />\n}\n\nconst GameTeamInput = props => {\n const { game } = useMeta();\n const { values } = useFormState();\n\n return <TeamInput source=\"teamId\" filter={{ id: { inq: [game.homeTeamId, game.awayTeamId] } }} disabled={values?.penaltyId} forceSelect {...props} />\n}\n\nconst useAdditionalTeamIds = (participantId, suspensionTeamId) => {\n const { data } = useQuery({\n type: GET_MANY_REFERENCE,\n resource: 'members',\n payload: {\n target: 'participants',\n id: participantId,\n filter: {},\n }\n }, {\n enabled: participantId != null,\n })\n\n return { teamIds: data?.map(team => team.teamId).filter(team => team !== suspensionTeamId) || [] };\n}\n\nconst SuspensionAdditionalTeamInput = props => {\n const seasonId = useSeason();\n const { values } = useFormState();\n const { teamIds } = useAdditionalTeamIds(values?.participantId, values?.teamId)\n\n return <TeamInput source=\"additionalPurgingTeamId\" filter={{ id: { inq: teamIds }, seasonId }} {...props} />\n}\n\nconst MemberInput = props => {\n const translate = useTranslate();\n const { values } = useFormState();\n const scoresheetStore = useScoresheetStore();\n\n const choices = useMemo(() => {\n if (!values?.teamId) return []\n const { members = [] } = getLineup(scoresheetStore.getState(), { teamId: values.teamId }) || {};\n return sortBy(members, 'number').map(member => {\n const { id } = member.participant;\n const name = member.number ? `${member.participant.fullName} (${member.number})` : member.participant.fullName;\n const description = getMemberDescription(member, translate);\n return { id, name, description };\n })\n }, [values?.teamId, scoresheetStore, translate])\n\n return <EnumInput choices={choices} optionDescription=\"description\" disabled={!values?.teamId || values?.penaltyId} {...props} />\n}\n\nconst PositionGroupInput = props => {\n const { values } = useFormState();\n const members = useScoresheet(scoresheet => getGameMembers(scoresheet))\n\n const selectedMember = getMember(members, values.participantId)\n const disablePositionGroup = !(selectedMember?.positions?.some(isPlayerPosition) && selectedMember?.positions?.some(isStaffPosition))\n\n return <SuspensionPositionGroupInput disabled={disablePositionGroup} {...props} />\n}\n\nconst RequiredGamesInput = ({ disabled, ...props }) => {\n const { values } = useFormState();\n const isIndefiniteSuspension = values?.durationType === 'Indefinite'\n\n return <NumberInput disabled={disabled || isIndefiniteSuspension} {...props} />\n}\n\nconst ExpiryDateInput = ({ disabled, ...props }) => {\n const { values } = useFormState();\n const isIndefiniteSuspension = values?.durationType === 'Indefinite'\n\n return <DateInput disabled={disabled || isIndefiniteSuspension} {...props} />\n}\n\nconst AutomaticSuspensionAlert = props => {\n const translate = useTranslate();\n const suspension = useRecordContext();\n const classes = useStyles()\n\n const isAutomaticSuspension = suspension?.code\n\n if (!isAutomaticSuspension) return null\n return <>\n <Alert severity=\"info\" className={classes.alert} {...props}>\n <AlertTitle>{translate('resources.suspensions.alerts.automatic.title')}</AlertTitle>\n {translate('resources.suspensions.alerts.automatic.message')}\n </Alert>\n <br />\n </>\n}\n\nexport const InnerSuspensionForm = props => {\n const translate = useTranslate();\n const { meta, game } = useMeta();\n const sport = useSport();\n const suspension = useRecordContext();\n\n const members = useScoresheet(scoresheet => getGameMembers(scoresheet))\n const penalties = useScoresheet(scoresheet => getPenalties(scoresheet, meta.infractions, meta.types, sport, game.seasonId))\n\n const decorators = useRef([createCalculator({\n field: 'penaltyId',\n updates: {\n teamId: (penaltyId, values, prevValues) => {\n const penalty = penalties.find(penalty => penalty.id === penaltyId)\n return penalty?.teamId || values.teamId;\n },\n participantId: (penaltyId, values, prevValues) => {\n const penalty = penalties.find(penalty => penalty.id === penaltyId)\n return penalty?.participantId || values.participantId;\n },\n }\n }, {\n field: 'teamId',\n updates: {\n participantId: (teamId, values, prevValues) => {\n const penalty = penalties.find(penalty => penalty.id === values.penaltyId)\n\n if (penalty?.participantId) return penalty.participantId\n\n if (!isEmpty(prevValues) && teamId !== prevValues.teamId) return null\n\n return values.participantId\n },\n }\n }, {\n field: 'participantId',\n updates: {\n positionGroup: (participantId, values, prevValues) => {\n return getMemberPositionGroup(members, participantId)\n },\n }\n }, {\n field: 'durationType',\n updates: {\n requiredGames: (durationType, values, prevValues) => {\n if (durationType === 'Indefinite') return\n return values?.requiredGames\n },\n expiry: (durationType, values, prevValues) => {\n if (durationType === 'Indefinite') return\n return values?.expiry\n },\n }\n })])\n\n const isAutomaticSuspension = suspension?.code || suspension?.sanctionId;\n\n return <SimpleForm decorators={decorators.current} validate={values => validate(values, translate)} toolbar={<Toolbar hideDelete />} {...props}>\n <Grid container spacing={2} fullWidth>\n <AutomaticSuspensionAlert />\n <Grid item xs={12}>\n <PenaltyInput source=\"penaltyId\" helperText=\"ra.message.optional\" disabled={isAutomaticSuspension} label=\"resources.suspensions.fields.penaltyId\" {...inputProps} />\n </Grid>\n <Grid item md={6} xs={12}>\n <GameTeamInput source=\"teamId\" disabled={isAutomaticSuspension} {...inputProps} />\n </Grid>\n <Grid item md={6} xs={12}>\n <SuspensionAdditionalTeamInput source=\"additionalPurgingTeamId\" label=\"resources.suspensions.fields.additionalPurgingTeamId\" {...inputProps} />\n </Grid>\n <Grid item md={6} xs={12}>\n <MemberInput source=\"participantId\" disabled={isAutomaticSuspension} {...inputProps} />\n </Grid>\n <Grid item md={12} xs={12}>\n <DurationTypeInput source=\"durationType\" disabled={isAutomaticSuspension} label=\"resources.suspensions.fields.durationType\" helperText=\"\" radio {...inputProps} />\n </Grid>\n <Grid item md={6} xs={12}>\n <RequiredGamesInput source=\"requiredGames\" disabled={isAutomaticSuspension} label=\"resources.suspensions.fields.requiredGames\" helperText=\"\" {...inputProps} />\n </Grid>\n <Grid item md={6} xs={12}>\n <ExpiryDateInput source=\"expiry\" disabled={isAutomaticSuspension} label=\"resources.suspensions.fields.expiry\" helperText=\"ra.message.optional\" {...inputProps} />\n </Grid>\n <Grid item md={6} xs={12}>\n <PositionGroupInput source=\"positionGroup\" label=\"resources.suspensions.fields.positionGroup\" helperText=\"\" {...inputProps} />\n </Grid>\n <Grid item md={6} xs={12}>\n <SuspensionStatusInput source=\"status\" label=\"resources.suspensions.fields.status\" helperText=\"\" {...inputProps} />\n </Grid>\n </Grid>\n </SimpleForm>\n}\n\nexport const SuspensionForm = props => {\n const suspension = useRecordContext();\n\n if (!suspension?.gameId) return <InnerSuspensionForm {...props} />\n\n return <ScoresheetProvider gameId={suspension.gameId} hideAlerts>\n <InnerSuspensionForm {...props} />\n </ScoresheetProvider>\n}\n","import { useQueryWithStore, GET_MANY } from 'react-admin';\nimport { useSelector } from 'react-redux';\n\n// force check in cache (use with caution, data may have changed since last load)\nexport const useSuspensionsWithStore = gameId => {\n const suspensionsInStore = useSelector(state => state?.admin?.resources?.suspensions?.data);\n\n const { data, loading, error } = useQueryWithStore({\n type: GET_MANY,\n resource: 'suspensions',\n payload: { filter: { gameId } }\n }, {\n enabled: !suspensionsInStore && !!gameId\n })\n return { data: suspensionsInStore || data, loading, error };\n}\n","import React from 'react';\nimport { ReferenceField } from 'react-admin';\nimport { ListItemText, makeStyles, Tooltip } from '@material-ui/core';\nimport { FlipCameraAndroid } from '@material-ui/icons';\nimport moment from 'moment-timezone';\n\nimport FunctionField from '../../../common/fields/FunctionField';\nimport { EnumField } from '../../../common/inputs/EnumInputs';\nimport { useRichTranslate } from '../../../common/useRichTranslate';\nimport { TextLocaleField } from '../../../common/fields/TextLocaleField';\n\nimport { ParticipantField } from '../../participants/ParticipantField';\nimport { GameField } from '../../games/GameField';\nimport { TeamField } from '../../teams/TeamField';\nimport { ScheduleField } from '../../schedules/ScheduleField';\n\nimport { PenaltyField } from '../gameIncidents/IncidentReportGrid';\nimport { SuspensionDatagrid, SuspensionDialogDatagrid } from './SuspensionModal';\nimport { GamePurgeList } from './GamePurgeList';\n\nconst useStyles = makeStyles(theme => ({\n expandedPanel: {\n \"& > td\": {\n paddingLeft: '50px',\n paddingRight: '50px',\n },\n },\n icon: {\n fontSize: '1rem',\n marginLeft: theme.spacing(0.5),\n verticalAlign: 'middle'\n }\n}))\n\nconst AutomaticSanctionSuspensionIcon = () => {\n const classes = useStyles()\n const translate = useRichTranslate()\n\n return <Tooltip\n title={translate('resources.suspensions.alerts.automatic.title')}\n >\n <FlipCameraAndroid className={classes.icon} />\n </Tooltip>\n}\n\nexport const SanctionField = ({ variant = 'body2', ...props }) => {\n return <ReferenceField basePath=\"/sanctions\" resource=\"sanctions\" reference=\"sanctions\" {...props} link={false}>\n <FunctionField source=\"name\" render={sanction => <TextLocaleField source=\"name\" variant={variant} />} />\n </ReferenceField>\n}\n\nconst renderSuspensionDetails = (suspension, source, resource, translate) => {\n const positionGroup = translate(`resources.suspensions.values.positionGroup.${suspension.positionGroup}`, { _: suspension.positionGroup })\n const effectiveRequiredGames = translate(`resources.suspensions.messages.required_games`, suspension.effectiveRequiredGames)\n const expiryDate = suspension.expiry && moment.utc(suspension.expiry, 'YYYY-MM-DD').format(\"YYYY-MM-DD\")\n const sanctionName = suspension.sanctionId ? <SanctionField source=\"sanctionId\" /> : translate(`resources.suspensions.values.code.${suspension.code || 'supplemental'}`, { _: suspension.code })\n\n const primary = <div>\n {sanctionName}\n {(!!suspension?.code || !!suspension?.sanctionId) && <AutomaticSanctionSuspensionIcon />}\n </div>\n\n let secondary = `${effectiveRequiredGames}${expiryDate ? ` / ${expiryDate}` : ''} (${positionGroup})`\n if (suspension.effectiveDurationType === 'Indefinite') {\n secondary = translate('resources.suspensions.values.durationType.Indefinite')\n }\n\n return <ListItemText\n primaryTypographyProps={{ variant: \"body2\" }}\n primary={primary}\n secondary={secondary}\n style={{ textWrap: 'pretty' }}\n />\n}\n\nexport const SuspensionDetailsField = props =>\n <FunctionField render={renderSuspensionDetails} {...props} />\n\nexport const SuspensionGrid = ({ multipleGames = false, hideTeam = false, hideParticipant = false, showDialog = false, canExpand = true, ...props }) => {\n const classes = useStyles()\n\n const Datagrid = showDialog ? SuspensionDialogDatagrid : SuspensionDatagrid;\n\n return <Datagrid\n size=\"medium\"\n expand={canExpand && <GamePurgeList />}\n classes={classes}\n {...props}\n >\n {!hideParticipant && <ParticipantField source=\"participantId\" includeId=\"full\" />}\n {!hideTeam && <TeamField source=\"teamId\" includeId=\"full\" />}\n {multipleGames && <ReferenceField source=\"gameId\" reference=\"games\" resource=\"games\" basePath=\"/games\" label=\"resources.games.fields.scheduleId\" link={false}>\n <ScheduleField source=\"scheduleId\" includeCategory=\"full\" includeType=\"full\" link={false} />\n </ReferenceField>}\n {multipleGames && <GameField source=\"gameId\" link=\"show\" includeDate=\"inline\" includeSeason=\"full\" />}\n {!multipleGames && <PenaltyField source=\"penaltyId\" />}\n <SuspensionDetailsField label=\"resources.suspensions.labels.details\" />\n <EnumField source=\"status\" />\n </Datagrid>\n}\n","import React, { useState } from \"react\";\nimport { useTranslate, Datagrid } from \"react-admin\";\nimport { Button } from \"@material-ui/core\";\nimport { Add } from \"@material-ui/icons\";\n\nimport { CreateResourceDialog, EditResourceDialog } from \"../../../common/dialogs/ResourceDialog\";\nimport { DialogDatagrid } from \"../../../common/dialogs/DialogDatagrid\";\n\nimport { SuspensionForm } from \"./SuspensionForm\";\n\nexport const AddSuspensionDialog = props =>\n <CreateResourceDialog label=\"resources.suspensions.actions.add\" resource=\"suspensions\" basePath=\"/suspensions\" {...props}>\n <SuspensionForm />\n </CreateResourceDialog>\n\nconst EditSuspensionDialog = props =>\n <EditResourceDialog label=\"resources.suspensions.labels.edit\" resource=\"suspensions\" basePath=\"/suspensions\" {...props}>\n <SuspensionForm />\n </EditResourceDialog>\n\n\nexport const AddSuspensionButton = ({ size, variant, icon = <Add />, label = true, ...props }) => {\n const [ isOpen, setOpen ] = useState(false);\n const translate = useTranslate();\n return <>\n <Button color=\"primary\" size={size} variant={variant} startIcon={icon} onClick={() => setOpen(true)}>{label && translate('resources.suspensions.actions.add')}</Button>\n <AddSuspensionDialog isOpen={isOpen} handleClose={() => setOpen(false)} {...props} />\n </>\n}\n\nexport const SuspensionDialogDatagrid = props => <DialogDatagrid dialog={EditSuspensionDialog} {...props} />\nexport const SuspensionDatagrid = props => <Datagrid size=\"medium\" rowClick=\"show\" {...props} />\n","import React from 'react';\nimport { get } from 'lodash';\n\nimport { getSeasonDisplayName } from '@hisports/common/src/seasons';\n\nimport FunctionField from '../../common/fields/FunctionField'\n\nconst renderSeason = (record, source, resource, translate, sport) => {\n const seasonId = get(record, source)\n return getSeasonDisplayName(seasonId, sport)\n}\n\nexport const SeasonField = props =>\n <FunctionField source=\"seasonId\" render={renderSeason} {...props} />\n\n\n","import React from 'react';\nimport { ReferenceField, useRecordContext, useTranslate } from 'react-admin';\nimport { Typography } from '@material-ui/core';\nimport { useSelector } from 'react-redux'\n\nimport { isAuthorized } from '../../common/Authorize';\nimport FunctionField from '../../common/fields/FunctionField'\n\nimport { getSurfaceAttributes, getSurfaceCity, getSurfaceName, isSystemSurface } from './util'\n\nexport const SurfaceField = ({ className, includeCity = false, includeVenue = true, includeAttributes = false, variant='body2', ...props }) => {\n const record = useRecordContext(props);\n const translate = useTranslate();\n const surface = useSelector(state => state.admin.resources.surfaces.data[record?.[props.source]])\n const showLink = isAuthorized(record, 'surfaces', 'show') && !isSystemSurface(surface) ? 'show' : false;\n\n return <ReferenceField basePath=\"/surfaces\" resource=\"surfaces\" reference=\"surfaces\" link={showLink} variant={variant} {...props}>\n <FunctionField className={className} render={surface => {\n const name = getSurfaceName(surface, includeVenue);\n const attributes = getSurfaceAttributes(surface, translate)\n const city = getSurfaceCity(surface, false);\n const inline = [\n includeAttributes === 'inline' && attributes,\n includeCity === 'inline' && city,\n ].filter(Boolean).join(' • ')\n const full = [\n includeAttributes === 'full' && attributes,\n includeCity === 'full' && city,\n ].filter(Boolean).join(' • ')\n return <>\n <Typography variant={variant} display=\"inline\">{name}</Typography>\n {inline && <Typography variant={variant} display=\"inline\" color=\"textSecondary\"> • {inline}</Typography>}\n {full && <div><Typography variant={variant} display=\"inline\" color=\"textSecondary\">{full}</Typography></div>}\n </>\n }} />\n </ReferenceField>\n}\n\nSurfaceField.defaultProps = {\n addLabel: true,\n}\n","import React from 'react';\nimport { ReferenceInput, ReferenceArrayInput, useTranslate } from 'react-admin';\nimport { Flip } from '@material-ui/icons';\n\nimport { isUUID } from '@hisports/parsers';\n\nimport AutocompleteInput from '../../common/inputs/AutocompleteInput';\nimport AutocompleteSuggestion from '../../common/inputs/AutocompleteSuggestion'\nimport { SurfaceIcon } from '../icons';\n\nimport { getSurfaceName, getSurfaceCity, getSurfaceAttributes } from './util';\n\nexport const filterSurface = name => ({ name })\n\nconst matches = (left, right) => `${left}`.trim().toLowerCase().includes(`${right}`.trim().toLowerCase());\nexport const matchSurface = (input, result) => {\n if (!input) return true;\n if (!result) return false;\n const [ venue ] = input.trim().split(' - ');\n if (isUUID(venue)) return result.externalId === venue;\n return (\n matches(result.name, venue) ||\n matches(result.alias, venue) ||\n matches(result.venue.name, venue) ||\n matches(result.venue.address, venue) ||\n matches(result.venue.city, venue) ||\n matches(result.venue.region, venue) ||\n matches(result.venue.country, venue) ||\n matches(result.venue.alias, venue)\n )\n}\n\nexport const SurfaceSuggestion = ({ suggestion: surface, query, isHighlighted, ...props }) => {\n const translate = useTranslate();\n\n const attributes = getSurfaceAttributes(surface, translate);\n const address = surface?.venue?.address;\n const fraction = surface?.fraction;\n\n let secondary = [];\n if (fraction) {\n secondary.push(translate('resources.surfaces.fields.split'));\n }\n if (attributes) {\n secondary.push(attributes);\n }\n if (secondary.length) {\n secondary = [<div>{secondary.join(' - ')}</div>]\n }\n if (address) {\n secondary.unshift(<div>{address}</div>);\n }\n\n return <AutocompleteSuggestion\n icon={fraction ? <Flip /> : <SurfaceIcon />}\n primary={getSurfaceName(surface)}\n secondary={secondary}\n />\n}\n\nexport const SurfaceInput = ({ helperText, multiple, filter: inputFilter = {}, ...props }) => {\n const Input = multiple ? ReferenceArrayInput : ReferenceInput;\n\n return <Input\n reference=\"surfaces\"\n filterToQuery={filterSurface}\n filter={{ _scope: 'Tenant', ...inputFilter }}\n sort={{\n field: ['venue.country', 'venue.city', 'venue.region', 'venue.name', 'name'],\n order: ['ASC', 'ASC', 'ASC', 'ASC', 'ASC']\n }}\n perPage={100}\n {...props}\n >\n <AutocompleteInput\n optionText={surface => getSurfaceName(surface)}\n groupBy={surface => getSurfaceCity(surface, true, true, false)}\n suggestionComponent={SurfaceSuggestion}\n inputValueMatcher={matchSurface}\n multiple={multiple}\n helperText={helperText}\n />\n </Input>\n}\n","import { getVenueCity } from \"../venues/util\";\n\nexport const isSystemSurface = surface => ['TBA', 'TBD', 'NDA'].includes(surface?.alias)\n\nexport const getSurfaceName = (surface, includeVenue = true) => {\n if (!surface) return;\n let name = surface.name;\n\n if (includeVenue && surface?.venue?.name && surface.venue.name !== surface.name) {\n name = `${surface.venue.name} - ${name}`;\n }\n if (surface?.fraction) {\n name = `${name} (${surface?.fraction})`\n }\n\n return name;\n}\n\nexport const getSurfaceCity = (surface, includeCountry = true, includeRegion = true, includeAddress = true) => {\n if (!surface) return;\n if (isSystemSurface(surface)) return;\n return getVenueCity(surface.venue, includeCountry, includeRegion, includeAddress);\n}\n\nexport const getSurfaceAttributes = (surface, translate) => {\n if (!surface) return;\n if (isSystemSurface(surface)) return;\n\n const attributes = [];\n if (surface.type) attributes.push(getSurfaceType(surface, translate))\n if (surface.size) attributes.push(getSurfaceSize(surface, translate))\n\n return attributes.join(' ');\n}\n\nexport const getSurfaceSize = (surface, translate) => {\n if (!surface?.size || !translate) return;\n if (isSystemSurface(surface)) return;\n return translate(`resources.surfaces.values.size.${surface?.size}`, { _: surface?.size });\n}\n\nexport const getSurfaceType = (surface, translate) => {\n if (!surface?.type || !translate) return;\n if (isSystemSurface(surface)) return;\n return translate(`resources.surfaces.values.type.${surface.type}`, { _: surface.type })\n}\n","import React from 'react';\nimport { useRecordContext } from 'react-admin';\n\nimport { ScheduleField } from '../schedules/ScheduleField';\nimport { OfficeField } from '../offices/OfficeField';\nimport { TeamField } from '../teams/TeamField';\nimport { VenueField } from '../venues/VenueField';\nimport { SurfaceField } from '../surfaces/SurfaceField';\nimport { ListField } from '../lists/ListField';\nimport { GameField } from '../games/GameField';\n\nexport const TargetField = ({ includeSeason = true, ...props }) => {\n const record = useRecordContext(props);\n if (!record) return null;\n\n switch (record.targetType) {\n case 'Office':\n return <OfficeField {...props} source=\"targetId\" />\n case 'Schedule':\n return <ScheduleField {...props} source=\"targetId\" includeSeason={includeSeason} />\n case 'Team':\n return <TeamField {...props} source=\"targetId\" includeSeason={includeSeason} />\n case 'Venue':\n return <VenueField {...props} source=\"targetId\" />\n case 'Surface':\n case 'Arena':\n return <SurfaceField {...props} source=\"targetId\" />\n case 'List':\n return <ListField {...props} source=\"targetId\" />\n case 'Game':\n return <GameField {...props} source=\"targetId\" includeDate=\"inline\" includeTime includeSurface=\"full\" />\n default:\n return null;\n }\n}\n","import React from 'react';\nimport { useRecordContext } from 'react-admin';\nimport { styled } from '@material-ui/core'\nimport { Business, DateRange, PeopleOutline, PlaceOutlined, PinDropOutlined, Group } from '@material-ui/icons'\n\nconst styleIcon = Icon => styled(Icon)({\n fontSize: '1.5em',\n marginRight: '-1em',\n verticalAlign: 'middle',\n})\nconst OfficeIcon = styleIcon(Business)\nconst ScheduleIcon = styleIcon(DateRange)\nconst TeamIcon = styleIcon(PeopleOutline)\nconst VenueIcon = styleIcon(PlaceOutlined)\nconst SurfaceIcon = styleIcon(PinDropOutlined)\nconst ListIcon = styleIcon(Group)\nconst GameIcon = styleIcon(Group)\n\nexport const TargetTypeField = ({ source = \"targetType\", ...props }) => {\n const record = useRecordContext(props);\n\n if (!record) return null;\n switch (record[source]) {\n case 'Office':\n return <OfficeIcon {...props} />\n case 'Schedule':\n return <ScheduleIcon {...props} />\n case 'Team':\n return <TeamIcon {...props} />\n case 'Venue':\n return <VenueIcon {...props} />\n case 'Surface':\n case 'Arena':\n return <SurfaceIcon {...props} />\n case 'List':\n return <ListIcon {...props} />\n case 'Game':\n return <GameIcon {...props} />\n default:\n return null;\n }\n}\n","import { makeStyles, Typography } from '@material-ui/core';\nimport React from 'react';\nimport { ReferenceField, useRecordContext, useTranslate } from 'react-admin';\n\nimport { FF_TEAM_SHORT_NAMES } from '@hisports/common/featureFlags';\n\nimport { isAuthorized } from '../../common/Authorize';\nimport FunctionField from '../../common/fields/FunctionField'\nimport { UnsanctionedIcon } from '../../common/icons/UnsanctionedIcon';\nimport { CategoryField } from '../categories/CategoryField';\nimport { SeasonField } from '../seasons/SeasonField';\nimport { useFlag } from '../../http';\nimport { OfficeField } from '../offices/OfficeField';\n\nconst useStyles = makeStyles(theme => ({\n icon: {\n marginLeft: theme.spacing(0.25),\n },\n}))\n\nconst isTBA = team => team?.HCRId?.startsWith('TBA')\n\nexport const InnerTeamField = ({ includeId = false, includeCategory = false, includeSeason = 'inline', includeOffice = false, variant = 'body2', showShortName = false, ...props }) => {\n const classes = useStyles();\n return <FunctionField render={team => {\n const isSpecial = team?.HCRId?.startsWith('TBA') || team?.HCRId?.startsWith('NDT')\n const inline = [\n includeSeason === 'inline' && <SeasonField source=\"seasonId\" />,\n includeCategory === 'inline' && <CategoryField source=\"categoryId\" variant=\"inherit\" />,\n includeOffice === 'inline' && <OfficeField source=\"officeId\" variant=\"inherit\" />,\n includeId === 'inline' && team.HCRId,\n ].filter(Boolean).flatMap(e => [e, ' • ']).slice(0, -1)\n const full = [\n includeSeason === 'full' && <SeasonField source=\"seasonId\" />,\n includeCategory === 'full' && <CategoryField source=\"categoryId\" variant=\"inherit\" />,\n includeOffice === 'full' && <OfficeField source=\"officeId\" variant=\"inherit\" />,\n includeId === 'full' && team.HCRId,\n ].filter(Boolean).flatMap(e => [e, ' • ']).slice(0, -1)\n return <>\n <Typography variant={variant} display=\"inline\">{showShortName && team.shortName ? team.shortName : team.name}</Typography>\n {team.isSanctioned === false && <span className={classes.icon}><UnsanctionedIcon record={team} /></span>}\n {inline.length > 0 && !isSpecial && <span><Typography variant={variant} display=\"inline\" color=\"textSecondary\"> ({inline})</Typography></span>}\n {full.length > 0 && !isSpecial && <div><Typography variant={variant} display=\"inline\" color=\"textSecondary\">{full}</Typography></div>}\n </>\n }} variant={variant} {...props} />\n}\n\nexport const TeamField = ({ className, authMethod = \"show\", includeId = false, includeCategory = false, includeSeason = false, link = 'show', variant = 'body2', showShortName = false, noneLabel = false, ...props }) => {\n const record = useRecordContext(props);\n const translate = useTranslate();\n const showLink = isAuthorized(record, 'teams', authMethod) ? link : false;\n const isEnabled = useFlag();\n\n return <ReferenceField basePath=\"/teams\" resource=\"teams\" reference=\"teams\" emptyText={translate(noneLabel ? 'ra.message.none' : 'resources.games.labels.tbd')} link={showLink} {...props} >\n <InnerTeamField source=\"name\" variant={variant} className={className} includeId={includeId} includeCategory={includeCategory} includeSeason={includeSeason} showShortName={isEnabled(FF_TEAM_SHORT_NAMES) && showShortName} />\n </ReferenceField>\n}\n\nTeamField.defaultProps = {\n addLabel: true,\n}\n","import React from 'react';\nimport { useSelector } from 'react-redux';\nimport { useFormState } from 'react-final-form';\nimport { ReferenceInput, ReferenceArrayInput, RecordContextProvider, useLocale, useTranslate, useQueryWithStore, GET_MANY } from 'react-admin';\nimport { get, isArray } from 'lodash';\nimport { makeStyles } from '@material-ui/core';\n\nimport { translateApiProperty } from '@hisports/common';\nimport { FF_CROSS_SCHEDULING } from '@hisports/common/featureFlags';\n\nimport AutocompleteInput from '../../common/inputs/AutocompleteInput';\nimport AutocompleteSuggestion from '../../common/inputs/AutocompleteSuggestion'\nimport { useFormSeason } from '../../common/inputs/SeasonSelector';\nimport { UnsanctionedIcon } from '../../common/icons/UnsanctionedIcon';\nimport { useFlag } from '../../http';\n\nimport { TeamIcon } from '../icons';\nimport { TeamField } from './TeamField';\nimport { CategoryField } from '../categories/CategoryField';\n\nconst useStyles = makeStyles(theme => ({\n group: {\n display: 'flex',\n alignItems: 'center',\n gap: theme.spacing(0.5),\n },\n}))\n\nconst filterTeam = select => name => {\n if (!name || select) return;\n return { name };\n}\n\nconst isSpecial = team => {\n if (!team || !team.HCRId) return false;\n return team.HCRId.startsWith('TBA') || team.HCRId.startsWith('NDT')\n}\n\nexport const TeamSuggestion = ({ suggestion: team, includeCategory }) => {\n const classes = useStyles();\n\n if (!team?.id) return null;\n\n let secondary = team.seasonId;\n if (team.HCRId) {\n secondary = `${team.HCRId} - ${secondary}`\n }\n if (isSpecial(team)) {\n secondary = team.name\n }\n\n const primaryComponent = <div className={classes.group}>\n {team.name}\n <UnsanctionedIcon record={team} />\n </div>\n\n const secondaryComponent = <RecordContextProvider value={team}>\n {secondary}\n {includeCategory && ' - '}\n {includeCategory && <CategoryField source=\"categoryId\" link={false} />}\n </RecordContextProvider>\n\n return <AutocompleteSuggestion icon={<TeamIcon />} primary={primaryComponent} secondary={secondaryComponent} />\n}\n\nexport const TeamInput = ({ ignoreSchedule = false, includeCategory = true, forceSelect = false, includePool = false, helperText, multiple, filter: inputFilter = {}, ...props }) => {\n const translate = useTranslate();\n const locale = useLocale();\n const schedules = useSelector(state => state.admin.resources.schedules.data);\n const teams = useSelector(state => state.admin.resources.teams.data);\n const scheduleTeams = useSelector(state => state.admin.resources.scheduleteams.data);\n const pools = useSelector(state => state.admin.resources.pools.data);\n\n const isEnabled = useFlag();\n\n const seasonId = useFormSeason();\n const { values } = useFormState();\n\n const teamIdOrTeamIds = get(values, props.source);\n const teamIds = isArray(teamIdOrTeamIds) ? teamIdOrTeamIds : [teamIdOrTeamIds];\n const categoryIds = teamIds.map(teamId => teams?.[teamId]?.categoryId).filter(Boolean);\n\n // pre fetch categories to display with team name\n const { data: categories = [] } = useQueryWithStore({\n type: GET_MANY,\n resource: 'categories',\n payload: { ids: categoryIds },\n }, {\n action: 'CUSTOM_QUERY',\n enabled: !!categoryIds?.length\n })\n\n const filter = { ...inputFilter };\n\n // filter by schedule / cross schedule\n const scheduleSelect = !ignoreSchedule && values && values.scheduleId;\n const crossScheduling = isEnabled(FF_CROSS_SCHEDULING)\n if (scheduleSelect) {\n const { scheduleId, groupId, crossScheduleId, crossGroupId } = values;\n if (scheduleId) filter.scheduleId = scheduleId;\n if (groupId) filter.groupId = groupId;\n if (crossScheduling) {\n const hasCrossSchedulingProperty = crossScheduleId != undefined || crossGroupId !== undefined\n\n if (!hasCrossSchedulingProperty) {\n filter.scheduleId = scheduleId;\n filter.groupId = groupId || null; // force groupId null if no group selected\n } else {\n const effectiveCrossScheduleId = crossScheduleId || scheduleId;\n const effectiveCrossGroupId = crossGroupId || null;\n\n filter.scheduleId = [scheduleId, effectiveCrossScheduleId]\n filter.groupId = [groupId || null, effectiveCrossGroupId]\n }\n }\n }\n\n // filter by schedule season\n if (values && values.scheduleId) {\n const schedule = schedules[values.scheduleId];\n if (schedule) {\n filter.seasonId = schedule.seasonId;\n }\n }\n\n // fallback to global season otherwise\n if (!filter.seasonId) {\n filter.seasonId = seasonId;\n }\n\n const Input = multiple ? ReferenceArrayInput : ReferenceInput;\n const select = forceSelect || scheduleSelect;\n\n return <Input\n reference=\"teams\"\n filter={filter}\n filterToQuery={filterTeam(select)}\n sort={{\n field: ['isSanctioned', 'name'],\n order: ['DESC', 'ASC'],\n }}\n perPage={select ? 999 : 50}\n {...props}\n >\n <AutocompleteInput\n suggestionComponent={TeamSuggestion}\n filterKeys={['name', 'HCRId']}\n groupBy={team => translate(team.isSanctioned ? 'resources.teams.fields.isSanctioned' : 'resources.teams.labels.unsanctioned')}\n alwaysGroup\n multiple={multiple}\n // show the category in the helper text for single input\n helperText={(() => {\n if (multiple) return helperText\n const [teamId] = teamIds\n const team = teams[teamId]\n if (!team) return helperText\n const category = categories.find(category => category.id === team.categoryId);\n if (!category?.name) return helperText\n if (includePool) {\n const scheduleTeam = Object.values(scheduleTeams)?.find(scheduleTeam => scheduleTeam.teamId === teamId);\n const pool = pools?.[scheduleTeam?.poolId];\n if (pool) return `${translateApiProperty(category, 'name', locale)} - ${pool.name}`;\n }\n\n return `${translateApiProperty(category, 'name', locale)} ${translate(`resources.categories.values.gender.${category.gender}`)}${helperText && typeof helperText === 'string' ? ` - ${translate(helperText, { _: helperText, smart_count: 1 })}` : ''}`;\n })()}\n // show the category in the chip for multiple input\n optionText={team => {\n if (!multiple) return team?.name\n return <RecordContextProvider value={team}>\n <TeamField source=\"id\" link={false} includeCategory={includeCategory && \"inline\"} />\n </RecordContextProvider>\n }}\n {...props}\n options={{\n ...props?.options,\n suggestionComponentProps: { includeCategory }\n }}\n />\n </Input>\n}\n","import React from 'react';\nimport { ReferenceArrayField, useRecordContext } from 'react-admin';\n\nimport { FF_TEAM_SHORT_NAMES } from '@hisports/common/featureFlags';\n\nimport { useFlag } from '../../http';\nimport { isAuthorized } from '../../common/Authorize';\nimport { SingleFieldList } from '../../common/ra/SingleFieldList';\n\nimport { InnerTeamField } from './TeamField';\n\nexport const TeamsField = ({ authMethod = \"show\", includeId = false, includeSeason = false, includeCategory = false, link = 'show', variant = 'body2', ...props }) => {\n const record = useRecordContext(props);\n const showLink = isAuthorized(record, 'teams', authMethod) ? link : false;\n const isEnabled = useFlag();\n\n return <ReferenceArrayField basePath=\"/teams\" resource=\"teams\" reference=\"teams\" allowEmpty {...props} >\n <SingleFieldList link={showLink}>\n <InnerTeamField source=\"name\" includeId={includeId} includeSeason={includeSeason} includeCategory={includeCategory} showShortName={isEnabled(FF_TEAM_SHORT_NAMES)} />\n </SingleFieldList>\n </ReferenceArrayField>\n}\n\nTeamsField.defaultProps = {\n addLabel: true,\n}\n","import React from 'react';\nimport { ReferenceField, useRecordContext } from 'react-admin';\nimport { Typography } from '@material-ui/core';\n\nimport { isAuthorized } from '../../common/Authorize';\nimport FunctionField from '../../common/fields/FunctionField';\n\nimport { getVenueCity, getVenueName } from './util';\n\nexport const VenueField = ({ variant = 'body2', includeCity = false, ...props }) => {\n const record = useRecordContext(props);\n const showLink = isAuthorized(record, 'venues', 'show') ? 'show' : false;\n\n return <ReferenceField basePath=\"/venues\" resource=\"venues\" reference=\"venues\" link={showLink} {...props}>\n <FunctionField render={venue => {\n const name = getVenueName(venue);\n const city = getVenueCity(venue);\n if (!includeCity || !city) return <Typography variant={variant} display=\"inline\">{name}</Typography>;\n return <>\n <Typography variant={variant} display=\"inline\">{name}</Typography>\n <Typography variant={variant} display=\"inline\" color=\"textSecondary\"> • {city}</Typography>\n </>\n }} />\n </ReferenceField>\n}\n\nVenueField.defaultProps = {\n addLabel: true,\n}\n","export const getVenueName = venue => {\n if (!venue) return;\n return venue.name;\n}\n\nexport const getVenueCity = (venue, includeCountry = true, includeRegion = true, includeAddress = true, includePostalCode = true) => {\n if (!venue) return;\n\n let city = venue.city;\n if (includeRegion && venue.region && venue.city != venue.region) {\n city = `${city}, ${venue.region}`;\n }\n if (includePostalCode && venue.postalCode) {\n city = `${city}, ${venue.postalCode}`;\n }\n if (includeCountry && venue.country && venue.city != venue.country && city != venue.country) {\n city = `${city}, ${venue.country}`;\n }\n\n if (!venue.address || !includeAddress) return city;\n return `${venue.address}, ${city}`;\n}\n","import {\n OFFICIAL_STATUS_ASSIGNED,\n OFFICIAL_STATUS_CONFIRMED,\n OFFICIAL_STATUS_DECLINED,\n OFFICIAL_STATUS_NO_SHOW,\n OFFICIAL_STATUS_REQUESTED\n} from \"@hisports/scoresheet/src/constants.js\";\n\nconst isStatus = (assignment, status) => assignment && assignment.status === status\n\nexport const isRequested = assignment => isStatus(assignment, OFFICIAL_STATUS_REQUESTED)\nexport const isUnconfirmed = assignment => isStatus(assignment, OFFICIAL_STATUS_ASSIGNED)\nexport const isConfirmed = assignment => isStatus(assignment, OFFICIAL_STATUS_CONFIRMED)\nexport const isDeclined = assignment => isStatus(assignment, OFFICIAL_STATUS_DECLINED)\nexport const isNoShow = assignment => isStatus(assignment, OFFICIAL_STATUS_NO_SHOW)\n\nexport const isAssigned = assignment => isUnconfirmed(assignment) || isConfirmed(assignment)\n\nexport const isAdhoc = assignment =>\n assignment && assignment.participant && !assignment.participantId\n\nexport const isDelegated = assignment =>\n assignment && assignment.officeId != null\n\nexport const isDelegatedPay = assignment =>\n assignment && assignment.officeId != null && assignment.payOfficeId != null\n","import moment from 'moment-timezone';\n\nimport { officialAccepted, officialDeclined } from \"./events.js\";\nimport { isAssigned, isConfirmed, isDeclined } from \"./assignment.js\";\n\nexport class AssignmentError extends Error {\n constructor(name, ...rest) {\n super(...rest)\n this.name = name;\n this.status = 422;\n }\n}\n\nconst validate = (assignments, validator) => {\n try {\n return assignments.every(validator)\n } catch (error) {\n if (error instanceof AssignmentError) return false;\n throw error;\n }\n}\n\nexport const canAccept = (assignment, _skip = false, _now = moment()) => {\n if (!assignment) throw new AssignmentError('not_assigned', 'Must be assigned to accept an assignment')\n if (!assignment.assignSettings || !assignment.assignSettings.enabled) throw new AssignmentError('disabled', 'Game is not configured for assigning');\n\n if (!_skip && isConfirmed(assignment)) throw new AssignmentError('already_accepted', 'Assignment already accepted');\n\n const { overlappingAssignments = [], consecutiveAssignments = [], assignSettings: { enforceConsecutive } } = assignment;\n\n const canOverlapsDecline = validate(overlappingAssignments, overlap => canDecline(overlap, false, _now));\n if (!canOverlapsDecline) throw new AssignmentError('accept_overlaps', 'Cannot accept due to overlapping assignment');\n\n const hasRequiredConsecutiveOverlaps = enforceConsecutive && consecutiveAssignments.some(assignment => {\n return assignment.overlappingAssignments.some(assignment => isAssigned(assignment))\n })\n if (hasRequiredConsecutiveOverlaps) throw new AssignmentError('accept_consecutive_overlaps', 'Cannot accept due to consecutive overlapping assignment')\n\n if (!_skip && enforceConsecutive) {\n const canConsecutivesAccept = validate(consecutiveAssignments, consecutive => canAccept(consecutive, true, _now));\n if (!canConsecutivesAccept) throw new AssignmentError('accept_consecutive', 'Cannot accept due to consecutive assignment');\n }\n\n return true;\n}\n\nexport const canDecline = (assignment, _skip = false, _now = moment()) => {\n if (!assignment) throw new AssignmentError('not_assigned', 'Must be assigned to decline an assignment')\n if (!assignment.assignSettings || !assignment.assignSettings.enabled) throw new AssignmentError('disabled', 'Game is not configured for assigning');\n\n if (!_skip && isDeclined(assignment)) throw new AssignmentError('already_declined', 'Assignment already declined');\n\n const { declineEnabled, declineHours, declineConfirmedDisabled } = assignment.assignSettings;\n if (!declineEnabled) throw new AssignmentError('decline_disabled', 'Must contact an assigner to be removed')\n\n const withinDeclineHours = declineHours && moment.tz(assignment.game.startTime, assignment.game.timezone).diff(_now, 'hours', true) < declineHours;\n if (withinDeclineHours) throw new AssignmentError('decline_hours', `Cannot decline under ${declineHours} hours before a game`)\n\n const declineDisabled = declineConfirmedDisabled && isConfirmed(assignment)\n if (declineDisabled) throw new AssignmentError('decline_disabled', 'Must contact an assigner to be removed')\n\n if (!_skip) {\n const { consecutiveAssignments, assignSettings: { enforceConsecutive } } = assignment;\n const canConsecutivesDecline = validate(consecutiveAssignments, consecutive => canDecline(consecutive, true, _now));\n if (enforceConsecutive && !canConsecutivesDecline) throw new AssignmentError('decline_consecutive', 'Cannot decline due to consecutive assignment');\n }\n\n return true;\n}\n\nexport const acceptAssignment = (assignment, notes, _now) => {\n const events = [];\n if (!canAccept(assignment, false, _now)) return events; // throws\n\n const { gameId, consecutiveAssignments = [], overlappingAssignments = [], assignSettings: { enforceConsecutive } } = assignment;\n const consecutiveGameIds = consecutiveAssignments.map(assignment => assignment.gameId);\n const declinedOverlaps = overlappingAssignments.reduce((assignments, assignment) => {\n assignments.push(assignment)\n if (assignment.assignSettings.enforceConsecutive) {\n const additionalConsecutives = assignment.consecutiveAssignments.filter(assignment => assignment.gameId !== gameId && !consecutiveGameIds.includes(assignment.gameId))\n assignments.push(...additionalConsecutives)\n }\n return assignments;\n }, [])\n events.push(...declinedOverlaps.map(assignment => officialDeclined(assignment)))\n const gameIds = events.map(event => event.gameId);\n if (enforceConsecutive) {\n const additionalAssignments = consecutiveAssignments\n .filter(assignment => !gameIds.includes(assignment.gameId))\n .filter(assignment => !isConfirmed(assignment))\n events.push(...additionalAssignments.map(assignment => officialAccepted(assignment, notes)))\n }\n events.push(officialAccepted(assignment, notes))\n\n return events;\n}\n\nexport const declineAssignment = (assignment, notes, _now) => {\n const events = [];\n if (!canDecline(assignment, false, _now)) return events; // throws\n\n const { consecutiveAssignments = [], assignSettings: { enforceConsecutive } } = assignment;\n if (enforceConsecutive) {\n const additionalAssignments = consecutiveAssignments\n .filter(assignment => !isDeclined(assignment))\n events.push(...additionalAssignments.map(assignment => officialDeclined(assignment, notes)))\n }\n events.push(officialDeclined(assignment, notes))\n\n return events;\n}\n","/**\n * @file Available feature flags for the Admin interface.\n *\n * Make sure to update `feature-flags-categories.js` with the corresponding flag description\n * whenever a new flag is added.\n */\n\n// application\nexport const FF_VERSION_MISMATCH = 'version-mismatch';\nexport const FF_FORETHOUGHT = 'forethought';\n// account management\nexport const FF_SSO = 'single-sign-on';\nexport const FF_ACCOUNTS = 'accounts';\nexport const FF_SSO_RESET_PASSWORD = 'sso-reset-password';\n// scheduling\nexport const FF_DRAFT_GAMES = 'draft-games';\nexport const FF_LEGACY_DRAFTS_DISABLED = 'legacy-drafts-disabled';\nexport const FF_TOURNAMENTS = 'tournaments';\nexport const FF_CUPS = 'cups';\nexport const FF_SCHEDULE_MENU = 'schedule-menu';\nexport const FF_BRACKETS = 'brackets';\nexport const FF_DRAFT_LIMIT_BYES = 'draft-limit-byes';\nexport const FF_DRAFT_DEFAULT_ROUNDS = 'draft-default-rounds';\nexport const FF_DRAFT_DEFAULT_SLOTS = 'draft-default-slots';\nexport const FF_SEQUENCES = 'sequences';\nexport const FF_SCHEDULE_TEAMS_ORDER = 'schedule-teams-order';\nexport const FF_SCHEDULE_TEAMS_DISABLE_ADD_SYNCED = 'schedule-teams-disable-add-synced'\nexport const FF_CROSS_SCHEDULING = 'cross-scheduling';\nexport const FF_TEAM_SHORT_NAMES = 'team-short-names';\nexport const FF_POOLS = 'pools';\nexport const FF_MANUAL_RANKINGS = 'manual-rankings';\n// officiating\nexport const FF_SCOREKEEPERS = 'scorekeepers';\nexport const FF_TIMEKEEPERS = 'timekeepers';\nexport const FF_OFFICIALS = 'officials';\nexport const FF_ADDITIONAL_LINESPERSONS = 'additional-linespersons'\nexport const FF_GRADES = 'grades';\nexport const FF_OFFICIAL_HIDE_ASSIGNERS = 'official-hide-assigners';\nexport const FF_DISABLE_ADD_QUALIFICATIONS = 'disable-add-qualifications'\nexport const FF_SID_MEMBER_TYPES = 'sid-member-types';\n// scorekeeping\nexport const FF_SCOREKEEPING_APP = 'scorekeeping-app';\nexport const FF_PERIODS = 'periods';\nexport const FF_PENALTY_SERVED_BY = 'penalty-served-by';\nexport const FF_PENALTY_START_END = 'penalty-start-end';\nexport const FF_PENALTY_FILL_START = 'penalty-fill-start';\nexport const FF_DOUBLE_FORFEIT = 'double-forfeit';\nexport const FF_PHOTOS = 'photos';\nexport const FF_PRINT_LINEUP = 'print-lineup';\nexport const FF_BATTERS = 'batters';\nexport const FF_PITCHERS = 'pitchers';\nexport const FF_GOALIES = 'goalies';\nexport const FF_REQUIRE_LINEUPS = 'require-lineups';\nexport const FF_REQUIRE_GAME_START = 'require-game-start';\nexport const FF_REQUIRE_TEAMS = 'require-teams';\nexport const FF_APPROVAL_SIGNATURE = 'approval-signature';\nexport const FF_HIDE_INFRACTION_NAME = 'hide-infraction-name';\nexport const FF_SPORTSMANSHIP = 'sportsmanship';\nexport const FF_RESTRICT_LINEUP_ENTRY = 'restrict-lineup-entry'\n// sanction management\nexport const FF_SUSPENSIONS_MENU = 'suspensions-menu';\n// legacy public sites\nexport const FF_CMS = 'cms';\n","export const GAME_OFFICE_TYPES = [\n 'League',\n 'Tournament',\n 'Cup'\n];\n\nexport const GAME_OFFICE_RESOURCES = [\n 'leagues',\n 'tournaments',\n 'cups',\n]\n\nexport const LEAGUE_ROLES = [\n \"system\",\n \"admin\",\n \"super-admin\",\n \"director\",\n \"manager\",\n \"organizer\",\n \"association\",\n \"registrar\"\n];\n\nexport const OFFICIAL_ROLES = [\n \"system\",\n \"admin\",\n \"super-admin\",\n \"assigner\",\n \"assigning-manager\",\n \"official\"\n];\n\nexport const SID_MEMBER_TYPES = {\n player: \"PLAYER\",\n coach: \"COACH\",\n official: \"OFFICIAL\",\n volunteer: \"VOLUNTEER\",\n benchStaff: \"BENCH_STAFF\",\n special: \"SPECIAL\",\n}\n","import Moment from 'moment';\nimport moment from 'moment-timezone';\nimport { extendMoment } from './moment-range.cjs';\n\nexport const momentRange = extendMoment(Moment);\n\nexport const createRange = (start, end) =>\n momentRange.range(start, end)\n\nexport const overlaps = (expectedRange, game, options) => {\n const range = createRange(\n moment.tz(game.startTime, game.timezone).toDate(),\n moment.tz(game.endTime, game.timezone).toDate()\n );\n return range.overlaps(expectedRange, options)\n}\n\nexport const areConsecutiveGames = (game, otherGame) => {\n const gameRange = createRange(\n moment.tz(game.startTime, game.timezone).toDate(),\n moment.tz(game.endTime, game.timezone).toDate()\n );\n\n const consecutiveRange = createRange(\n moment.tz(game.startTime, game.timezone).subtract(1, 'hour').toDate(),\n moment.tz(game.endTime, game.timezone).add(1, 'hour').toDate()\n );\n\n if (overlaps(gameRange, otherGame)) return false;\n return overlaps(consecutiveRange, otherGame, { adjacent: true })\n}\n\nexport const isSameTime = (first, second) => {\n if (!first || !second) return false;\n const isStartSame = moment.tz(first.startTime, first.timezone).isSame(moment.tz(second.startTime, second.timezone));\n const isEndSame = moment.tz(first.endTime, first.timezone).isSame(moment.tz(second.endTime, second.timezone));\n return isStartSame && isEndSame;\n}\n\nexport const validateConstraintRanges = (constraint, games, date, homeTeamId, awayTeamId) => {\n const { limit, period } = constraint;\n const violations = [];\n\n for (let index = 0; index < period; index++) {\n const startDate = moment.utc(date).subtract((period - 1) - index, 'days').format('YYYY-MM-DD')\n const endDate = moment.utc(date).add(index, 'days').format('YYYY-MM-DD');\n const rangeGames = games.filter(game => moment.utc(game.date).isSameOrAfter(startDate, 'day') && moment.utc(game.date).isSameOrBefore(endDate, 'day'))\n\n const homeTeamGames = rangeGames.filter(game => homeTeamId && [game.homeTeamId, game.awayTeamId].includes(homeTeamId));\n if (homeTeamGames.length >= limit) {\n violations.push(\n ...homeTeamGames.map(game => {\n const offenderId = game.homeTeamId === homeTeamId ? game.homeTeamId : game.awayTeamId\n return {\n ...(game.toJSON ? game.toJSON() : game),\n constraint: {\n ...(constraint.toJSON ? constraint.toJSON() : constraint),\n teamId: offenderId,\n total: homeTeamGames.length,\n },\n }\n })\n )\n }\n\n const awayTeamGames = rangeGames.filter(game => awayTeamId && [game.homeTeamId, game.awayTeamId].includes(awayTeamId));\n if (awayTeamGames.length >= limit) {\n violations.push(\n ...awayTeamGames.map(game => {\n const offenderId = game.awayTeamId === awayTeamId ? game.awayTeamId : game.homeTeamId\n return {\n ...(game.toJSON ? game.toJSON() : game),\n constraint: {\n ...(constraint.toJSON ? constraint.toJSON() : constraint),\n teamId: offenderId,\n total: homeTeamGames.length,\n },\n }\n })\n )\n }\n }\n\n return violations\n}\n","import _ from './_.lod.cjs';\n\nexport default _;\nexport const chunk = _.chunk\nexport const compact = _.compact\nexport const concat = _.concat\nexport const difference = _.difference\nexport const differenceBy = _.differenceBy\nexport const differenceWith = _.differenceWith\nexport const drop = _.drop\nexport const dropRight = _.dropRight\nexport const dropRightWhile = _.dropRightWhile\nexport const dropWhile = _.dropWhile\nexport const fill = _.fill\nexport const findIndex = _.findIndex\nexport const findLastIndex = _.findLastIndex\nexport const first = _.first\nexport const flatten = _.flatten\nexport const flattenDeep = _.flattenDeep\nexport const flattenDepth = _.flattenDepth\nexport const fromPairs = _.fromPairs\nexport const head = _.head\nexport const indexOf = _.indexOf\nexport const initial = _.initial\nexport const intersection = _.intersection\nexport const intersectionBy = _.intersectionBy\nexport const intersectionWith = _.intersectionWith\nexport const join = _.join\nexport const last = _.last\nexport const lastIndexOf = _.lastIndexOf\nexport const nth = _.nth\nexport const pull = _.pull\nexport const pullAll = _.pullAll\nexport const pullAllBy = _.pullAllBy\nexport const pullAllWith = _.pullAllWith\nexport const pullAt = _.pullAt\nexport const remove = _.remove\nexport const reverse = _.reverse\nexport const slice = _.slice\nexport const sortedIndex = _.sortedIndex\nexport const sortedIndexBy = _.sortedIndexBy\nexport const sortedIndexOf = _.sortedIndexOf\nexport const sortedLastIndex = _.sortedLastIndex\nexport const sortedLastIndexBy = _.sortedLastIndexBy\nexport const sortedLastIndexOf = _.sortedLastIndexOf\nexport const sortedUniq = _.sortedUniq\nexport const sortedUniqBy = _.sortedUniqBy\nexport const tail = _.tail\nexport const take = _.take\nexport const takeRight = _.takeRight\nexport const takeRightWhile = _.takeRightWhile\nexport const takeWhile = _.takeWhile\nexport const union = _.union\nexport const unionBy = _.unionBy\nexport const unionWith = _.unionWith\nexport const uniq = _.uniq\nexport const uniqBy = _.uniqBy\nexport const uniqWith = _.uniqWith\nexport const unzip = _.unzip\nexport const unzipWith = _.unzipWith\nexport const without = _.without\nexport const xor = _.xor\nexport const xorBy = _.xorBy\nexport const xorWith = _.xorWith\nexport const zip = _.zip\nexport const zipObject = _.zipObject\nexport const zipObjectDeep = _.zipObjectDeep\nexport const zipWith = _.zipWith\nexport const countBy = _.countBy\nexport const each = _.each\nexport const eachRight = _.eachRight\nexport const every = _.every\nexport const filter = _.filter\nexport const find = _.find\nexport const findLast = _.findLast\nexport const flatMap = _.flatMap\nexport const flatMapDeep = _.flatMapDeep\nexport const flatMapDepth = _.flatMapDepth\nexport const forEach = _.forEach\nexport const forEachRight = _.forEachRight\nexport const groupBy = _.groupBy\nexport const includes = _.includes\nexport const invokeMap = _.invokeMap\nexport const keyBy = _.keyBy\nexport const map = _.map\nexport const orderBy = _.orderBy\nexport const partition = _.partition\nexport const reduce = _.reduce\nexport const reduceRight = _.reduceRight\nexport const reject = _.reject\nexport const sample = _.sample\nexport const sampleSize = _.sampleSize\nexport const shuffle = _.shuffle\nexport const size = _.size\nexport const some = _.some\nexport const sortBy = _.sortBy\nexport const now = _.now\nexport const after = _.after\nexport const ary = _.ary\nexport const before = _.before\nexport const bind = _.bind\nexport const bindKey = _.bindKey\nexport const curry = _.curry\nexport const curryRight = _.curryRight\nexport const debounce = _.debounce\nexport const defer = _.defer\nexport const delay = _.delay\nexport const flip = _.flip\nexport const memoize = _.memoize\nexport const negate = _.negate\nexport const once = _.once\nexport const overArgs = _.overArgs\nexport const partial = _.partial\nexport const partialRight = _.partialRight\nexport const rearg = _.rearg\nexport const rest = _.rest\nexport const spread = _.spread\nexport const throttle = _.throttle\nexport const unary = _.unary\nexport const wrap = _.wrap\nexport const castArray = _.castArray\nexport const clone = _.clone\nexport const cloneDeep = _.cloneDeep\nexport const cloneDeepWith = _.cloneDeepWith\nexport const cloneWith = _.cloneWith\nexport const conformsTo = _.conformsTo\nexport const eq = _.eq\nexport const gt = _.gt\nexport const gte = _.gte\nexport const isArguments = _.isArguments\nexport const isArray = _.isArray\nexport const isArrayBuffer = _.isArrayBuffer\nexport const isArrayLike = _.isArrayLike\nexport const isArrayLikeObject = _.isArrayLikeObject\nexport const isBoolean = _.isBoolean\nexport const isBuffer = _.isBuffer\nexport const isDate = _.isDate\nexport const isElement = _.isElement\nexport const isEmpty = _.isEmpty\nexport const isEqual = _.isEqual\nexport const isEqualWith = _.isEqualWith\nexport const isError = _.isError\nexport const isFinite = _.isFinite\nexport const isFunction = _.isFunction\nexport const isInteger = _.isInteger\nexport const isLength = _.isLength\nexport const isMap = _.isMap\nexport const isMatch = _.isMatch\nexport const isMatchWith = _.isMatchWith\nexport const isNaN = _.isNaN\nexport const isNative = _.isNative\nexport const isNil = _.isNil\nexport const isNull = _.isNull\nexport const isNumber = _.isNumber\nexport const isObject = _.isObject\nexport const isObjectLike = _.isObjectLike\nexport const isPlainObject = _.isPlainObject\nexport const isRegExp = _.isRegExp\nexport const isSafeInteger = _.isSafeInteger\nexport const isSet = _.isSet\nexport const isString = _.isString\nexport const isSymbol = _.isSymbol\nexport const isTypedArray = _.isTypedArray\nexport const isUndefined = _.isUndefined\nexport const isWeakMap = _.isWeakMap\nexport const isWeakSet = _.isWeakSet\nexport const lt = _.lt\nexport const lte = _.lte\nexport const toArray = _.toArray\nexport const toFinite = _.toFinite\nexport const toInteger = _.toInteger\nexport const toLength = _.toLength\nexport const toNumber = _.toNumber\nexport const toPlainObject = _.toPlainObject\nexport const toSafeInteger = _.toSafeInteger\nexport const toString = _.toString\nexport const add = _.add\nexport const ceil = _.ceil\nexport const divide = _.divide\nexport const floor = _.floor\nexport const max = _.max\nexport const maxBy = _.maxBy\nexport const mean = _.mean\nexport const meanBy = _.meanBy\nexport const min = _.min\nexport const minBy = _.minBy\nexport const multiply = _.multiply\nexport const round = _.round\nexport const subtract = _.subtract\nexport const sum = _.sum\nexport const sumBy = _.sumBy\nexport const clamp = _.clamp\nexport const inRange = _.inRange\nexport const random = _.random\nexport const assign = _.assign\nexport const assignIn = _.assignIn\nexport const assignInWith = _.assignInWith\nexport const assignWith = _.assignWith\nexport const at = _.at\nexport const create = _.create\nexport const defaults = _.defaults\nexport const defaultsDeep = _.defaultsDeep\nexport const entries = _.entries\nexport const entriesIn = _.entriesIn\nexport const extend = _.extend\nexport const extendWith = _.extendWith\nexport const findKey = _.findKey\nexport const findLastKey = _.findLastKey\nexport const forIn = _.forIn\nexport const forInRight = _.forInRight\nexport const forOwn = _.forOwn\nexport const forOwnRight = _.forOwnRight\nexport const functions = _.functions\nexport const functionsIn = _.functionsIn\nexport const get = _.get\nexport const has = _.has\nexport const hasIn = _.hasIn\nexport const invert = _.invert\nexport const invertBy = _.invertBy\nexport const invoke = _.invoke\nexport const keys = _.keys\nexport const keysIn = _.keysIn\nexport const mapKeys = _.mapKeys\nexport const mapValues = _.mapValues\nexport const merge = _.merge\nexport const mergeWith = _.mergeWith\nexport const omit = _.omit\nexport const omitBy = _.omitBy\nexport const pick = _.pick\nexport const pickBy = _.pickBy\nexport const result = _.result\nexport const set = _.set\nexport const setWith = _.setWith\nexport const toPairs = _.toPairs\nexport const toPairsIn = _.toPairsIn\nexport const transform = _.transform\nexport const unset = _.unset\nexport const update = _.update\nexport const updateWith = _.updateWith\nexport const values = _.values\nexport const valuesIn = _.valuesIn\nexport const chain = _.chain\nexport const tap = _.tap\nexport const thru = _.thru\nexport const camelCase = _.camelCase\nexport const capitalize = _.capitalize\nexport const deburr = _.deburr\nexport const endsWith = _.endsWith\nexport const escape = _.escape\nexport const escapeRegExp = _.escapeRegExp\nexport const kebabCase = _.kebabCase\nexport const lowerCase = _.lowerCase\nexport const lowerFirst = _.lowerFirst\nexport const pad = _.pad\nexport const padEnd = _.padEnd\nexport const padStart = _.padStart\nexport const parseInt = _.parseInt\nexport const repeat = _.repeat\nexport const replace = _.replace\nexport const snakeCase = _.snakeCase\nexport const split = _.split\nexport const startCase = _.startCase\nexport const startsWith = _.startsWith\nexport const template = _.template\nexport const toLower = _.toLower\nexport const toUpper = _.toUpper\nexport const trim = _.trim\nexport const trimEnd = _.trimEnd\nexport const trimStart = _.trimStart\nexport const truncate = _.truncate\nexport const unescape = _.unescape\nexport const upperCase = _.upperCase\nexport const upperFirst = _.upperFirst\nexport const words = _.words\nexport const attempt = _.attempt\nexport const bindAll = _.bindAll\nexport const cond = _.cond\nexport const conforms = _.conforms\nexport const constant = _.constant\nexport const defaultTo = _.defaultTo\nexport const flow = _.flow\nexport const flowRight = _.flowRight\nexport const identity = _.identity\nexport const iteratee = _.iteratee\nexport const matches = _.matches\nexport const matchesProperty = _.matchesProperty\nexport const method = _.method\nexport const methodOf = _.methodOf\nexport const mixin = _.mixin\n// export const noConflict = _.noConflict\nexport const noop = _.noop\nexport const nthArg = _.nthArg\nexport const over = _.over\nexport const overEvery = _.overEvery\nexport const overSome = _.overSome\nexport const property = _.property\nexport const propertyOf = _.propertyOf\nexport const range = _.range\nexport const rangeRight = _.rangeRight\n// export const runInContext = _.runInContext\nexport const stubArray = _.stubArray\nexport const stubFalse = _.stubFalse\nexport const stubObject = _.stubObject\nexport const stubString = _.stubString\nexport const stubTrue = _.stubTrue\nexport const times = _.times\nexport const toPath = _.toPath\nexport const uniqueId = _.uniqueId\n// export const VERSION = _.VERSION\n\n","export const SEASONS = [\n '2025-26',\n '2024-25',\n '2023-24',\n '2022-23',\n '2021-22',\n '2020-21',\n '2019-20',\n '2018-19',\n]\n\nexport const LATEST_SEASON = SEASONS[0];\n\nexport const getSeasonDisplayName = (seasonId, sport) => {\n if (sport == 'Baseball') {\n return seasonId.substring(0, 4);\n }\n\n return seasonId;\n}\n\nexport const isPastSeason = (seasonId, defaultSeason) => {\n const seasonYear = parseInt(seasonId.split('-')[0]);\n const defaultSeasonYear = parseInt(defaultSeason.split('-')[0]);\n\n return seasonYear < defaultSeasonYear;\n}\n","export const dedupe = values => Array.from(new Set(values)).filter(Boolean);\n\nexport const dedupeBy = (key, values = []) =>\n values.filter(Boolean).filter((value, index, self) =>\n index === self.findIndex((v) =>\n Array.isArray(key) ? key.every(k => v[k] === value[k]) : v[key] === value[key]\n )\n )\n\nexport const sanitize = (value, casing = 'upper') => {\n if (!value) return;\n const trimmed = String(value).trim();\n switch (casing) {\n case 'upper': return trimmed.toUpperCase();\n case 'lower': return trimmed.toLowerCase();\n }\n return trimmed;\n}\n\nexport const isEmpty = value => {\n if (!value) return true;\n if (Array.isArray(value)) return !value.length;\n if (typeof value === 'object' && Object.keys(value).length <= 0) return true;\n return false;\n}\n\nexport const hasValue = value =>\n !isEmpty(value)\n\nexport const isNumber = value => {\n if (!value) return null;\n return !isNaN(Number(value));\n}\n\nconst UUID_REGEX = /^[0-9a-fA-F]{8}\\b-[0-9a-fA-F]{4}\\b-[0-9a-fA-F]{4}\\b-[0-9a-fA-F]{4}\\b-[0-9a-fA-F]{12}$/\nexport const isUUID = input => UUID_REGEX.test(input);\n\nexport const sum = (arr = []) => arr.reduce((total, row) => {\n return total + (Array.isArray(row) ? sum(row) : row || 0)\n}, 0);\n","import moment from 'moment-timezone';\n\nexport const parseDate = (value, timezone, includeTime = false) => {\n const format = includeTime ? 'YYYY-MM-DD hh:mm' : 'YYYY-MM-DD';\n return moment.tz(value, format, timezone).toISOString(true)\n}\n\nexport const changeDate = (timestamp, newDate, timezone = 'utc') => {\n const date = moment.tz(newDate, 'YYYY-MM-DD', timezone)\n const time = moment.tz(timestamp, timezone)\n return date.hour(time.hour()).minute(time.minute()).toISOString();\n}\n\nexport const changeTimezone = (timestamp, currentTimezone, newTimezone) => {\n const format = 'YYYY-MM-DD HH:mm'\n const raw = moment.tz(timestamp, currentTimezone).format(format)\n return moment.tz(raw, format, newTimezone).toISOString();\n}\n\nexport const isLocalTimezone = (timestamp, timezone, localTimezone) => {\n if (localTimezone) return moment.tz(timestamp, timezone).utcOffset() === moment.tz(timestamp, localTimezone).utcOffset();\n return moment.tz(timestamp, timezone).utcOffset() === moment(timestamp).utcOffset();\n}\n\nexport const displayTimeRange = (startTime, endTime, timezone = moment.tz.guess()) => {\n if (!startTime || !endTime) return;\n\n const start = moment.tz(startTime, timezone);\n const end = moment.tz(endTime, timezone);\n\n return `${start.format('HH:mm')} - ${end.format('HH:mm z')}`;\n}\n","export const findMatch = (fields, options) => {\n const lowerFields = fields.map(f => f.toLowerCase());\n\n for (const option of options) {\n const lowerOption = option.toLowerCase();\n\n const matchIndex = lowerFields.findIndex(f => f.includes(lowerOption));\n if (matchIndex !== -1) {\n return fields[matchIndex];\n }\n }\n\n return null;\n};\n\nexport const matchFields = (fields, matchers) => {\n const mappings = {};\n for (const [ key, names ] of Object.entries(matchers)) {\n mappings[key] = findMatch(fields, names);\n }\n return mappings;\n}\n\nexport const hasInvalid = (data, column, test) => {\n if (!data || !column) return;\n return data\n .map(value => value[column])\n .some(value => test(value) === false)\n}\n\nexport const check = (values, column, regex) => {\n if (!column) return;\n const profiles = values.data;\n return profiles\n .map(value => value[column])\n .some(value => !regex.test(value))\n}\n\nexport const getColumn = (values, property) => values.columns && values.columns[property];\nexport const getData = (values, property) => values.data && values.data.some(data => data[property]);\n","import { capitalize } from '@hisports/common/src/lodash.js';\nimport moment from 'moment-timezone';\n\nexport const isDexterity = value => {\n if (!value) return null;\n const dexterity = capitalize(value).trim();\n if (!['Left', 'Right'].includes(dexterity)) return false;\n return dexterity;\n}\n\nexport const toDexterity = input => {\n if (!input) return;\n const dexterity = capitalize(input).trim();\n if (!['Left', 'Right'].includes(dexterity)) return;\n return dexterity;\n}\n\nexport const isHeight = /\\d['�][\\s]*\\d{1,2}[\"�][\\s]*/ // covering the odd case that replacement characters happen\n\nexport const toHeight = value => {\n if (!value) return;\n const height = value.replace(/[^0-9]/g, '');\n const feet = height.charAt(0);\n const inches = height.slice(1);\n return `${feet}' ${inches}\"`\n}\n\nexport const isDate = /\\d\\d\\d\\d-\\d\\d-\\d\\d/\n\nexport const toDate = value => {\n return moment.tz(value, 'YYYY-MM-DD', 'UTC').toISOString(true)\n}\n","import { sanitize } from './common.js'\n\nexport const getPosition = (value = '') => {\n if (!value) return 'F';\n const positions = ['F', 'C', 'D', 'G', 'Head Coach', 'Assistant Coach', 'Goaltending Coach', 'Manager', 'Trainer', 'Safety Person'];\n if (sanitize(value) === 'COACH') return 'Assistant Coach';\n if (sanitize(value).includes('VOLUNTEER')) return 'Volunteer';\n return positions.find(position => position.toUpperCase() === sanitize(value)) || 'F';\n}\n\nexport const isPosition = value => {\n if (!value) return null;\n const position = value.toUpperCase();\n return ['F', 'C', 'D', 'G', 'HEAD COACH', 'ASSISTANT COACH', 'GOALTENDING COACH', 'MANAGER', 'TRAINER', 'SAFETY PERSON'].includes(position)\n}\n\nexport const getZip = value => {\n if (!value) return;\n const zip = sanitize(value);\n const matches = /\\D*(\\d*)/.exec(zip)\n if (!matches) return;\n return matches[1];\n}\n\nexport const getOffset = value => {\n const offset = sanitize(value || Math.floor(Math.random() * 1000))\n return offset.padStart(3, '0');\n}\n\nexport const getZipId = (member) => {\n const zip = getZip(member.zip)\n const offset = getOffset(member.offset);\n if (!zip || !offset || !member.firstName || !member.lastName) return;\n // 90610 John Doe 001 = 90610DOJ001\n return `${zip}${member.lastName.substring(0, 2)}${member.firstName.substring(0, 1)}${offset}`\n}\n\nexport const byHCRId = HCRId => participant => participant.HCRId == HCRId; // eslint-disable-line eqeqeq\n","export const parseInput = input => {\n if (!input) return;\n const value = parseInt(input, 10);\n if (isNaN(value)) return;\n return value;\n}\n\nexport const isLevel = value => {\n if (!value) return null;\n const level = parseInt(value, 10);\n if (isNaN(level)) return false;\n return level >= 0 && level <= 10;\n}\n\nexport const isGrade = value => {\n if (!value) return null;\n const grade = parseInt(value, 10);\n if (isNaN(grade)) return false;\n return grade >= 0 && grade <= 100;\n}\n\nexport const hasInvalidAttribute = (data, column, attribute) => {\n if (!data || !column || !attribute) return;\n return data\n .map(value => value[column])\n .some(value => {\n if (!value) return false\n const type = attribute.valueType;\n const options = attribute.options;\n if (type === \"Number\" && isNaN(value)) return true\n if (type === \"Number\" && (options && options.min != null && value < options.min)) return true\n if (type === \"Number\" && (options && options.max != null && value > options.max)) return true\n if (type === \"Dropdown\" && !options.values.includes(value)) return true\n return false\n })\n}\n","import moment from \"moment-timezone\";\nimport { sortBy } from '@hisports/common/src/lodash.js';\n\nimport { dedupe } from \"@hisports/parsers\";\n\nexport const getByes = (games, teamIds, schedule) => {\n if (!games.length || !schedule) return [];\n\n games = games.filter(game => game.date);\n if (!games.length) return [];\n\n games = sortBy(games, [\"date\", \"startTime\"]);\n\n const rotations = [];\n const startDate = moment.utc(schedule.startDate).format('YYYY-MM-DD');\n const endDate = moment.utc(games[games.length - 1].date).format('YYYY-MM-DD');\n const totalWeeks = moment(endDate).diff(startDate, 'weeks') + 1;\n\n for (let weekNumber = 1; weekNumber <= totalWeeks; weekNumber++) {\n rotations.push({\n number: weekNumber,\n start: moment.utc(startDate, 'YYYY-MM-DD').add((weekNumber - 1) * 7, 'days').format('YYYY-MM-DD'),\n end: moment.utc(startDate, 'YYYY-MM-DD').add((weekNumber - 1) * 7 + 6, 'days').format('YYYY-MM-DD'),\n });\n }\n\n const byes = rotations.map(week => {\n const teamIds = [];\n games.forEach(game => {\n const areTeamsPlaying = moment.utc(game.date, 'YYYY-MM-DD').isBetween(week.start, week.end, 'day', '[]')\n if (!areTeamsPlaying) return;\n teamIds.push(game.homeTeamId, game.awayTeamId);\n })\n\n return {\n weekNumber: week.number,\n startDate: week.start,\n endDate: week.end,\n teamIds: dedupe(teamIds)\n }\n });\n\n return byes.map(bye => ({\n ...bye,\n teamIds: teamIds.filter(teamId => !bye.teamIds.includes(teamId))\n }))\n}\n\nexport const getMatchups = (games, scheduleTeams, schedule) => {\n if (!games.length) return [];\n\n const teamIds = sortBy(scheduleTeams, ['group.name', 'order']).map(team => team.id);\n const byes = schedule ? getByes(games, teamIds, schedule) : [];\n\n const teams = teamIds.reduce((teams, teamId) => {\n const team = scheduleTeams.find(scheduleTeam => scheduleTeam.id === teamId);\n if (!team) return teams;\n\n teams[teamId] = {\n groupId: team && team.group && team.group.id,\n poolId: team && team.pool && team.pool.id,\n totalOpponents: 0,\n opponents: teamIds.reduce((ids, id) => (ids[id] = { teamId: id, home: 0, away: 0, poolId: teams[id] && teams[id].poolId }, ids), {}),\n conflicts: 0,\n byes: byes.reduce((total, bye) => (bye.teamIds.includes(teamId) && total++, total), 0),\n home: 0,\n away: 0\n };\n return teams\n }, {})\n\n games.forEach(({ homeTeamId, awayTeamId, status }) => {\n const updateStats = (team, type, checkStatus) => {\n if (!team) return;\n\n team[type] += 1;\n if (checkStatus && status === \"Conflict\") {\n team.conflicts += 1;\n }\n };\n\n if (homeTeamId) {\n updateStats(teams[homeTeamId], \"home\", true);\n }\n\n if (awayTeamId) {\n updateStats(teams[awayTeamId], \"away\", true);\n }\n\n if (homeTeamId && awayTeamId) {\n const homeOpponent = teams[homeTeamId] && teams[homeTeamId].opponents[awayTeamId];\n const awayOpponent = teams[awayTeamId] && teams[awayTeamId].opponents[homeTeamId];\n\n if (homeOpponent) {\n updateStats(homeOpponent, \"home\");\n }\n\n if (awayOpponent) {\n updateStats(awayOpponent, \"away\");\n }\n }\n });\n\n // get total opponents for each team\n Object.values(teams).forEach((team) => {\n const opponents = Object.values(team.opponents);\n\n opponents.forEach((opponent) => {\n if (opponent.home || opponent.away) {\n team.totalOpponents += 1;\n }\n });\n });\n\n return Object.entries(teams).map(([teamId, team]) => ({\n teamId: Number(teamId),\n totalOpponents: team.totalOpponents,\n opponents: Object.entries(team.opponents).map(([opponentId, opponentData]) => ({\n teamId: Number(opponentId),\n home: opponentData.home,\n away: opponentData.away,\n poolId: opponentData.poolId\n })),\n conflicts: team.conflicts,\n byes: team.byes,\n home: team.home,\n away: team.away,\n groupId: team.groupId,\n poolId: team.poolId\n }));\n}\n\nexport const getOfficeMatchups = (games, teams) => {\n if (!games.length) return [];\n\n const teamOfficeMatchups = teams.map(team => {\n const officeMatchups = games.reduce((matchups, game) => {\n if (![game.homeTeamId, game.awayTeamId].includes(team.id)) return matchups;\n\n if (game.homeTeamId === team.id) {\n const awayTeam = teams.find(team => team.id === game.awayTeamId);\n if (awayTeam) {\n matchups[awayTeam.officeId] = (matchups[awayTeam.officeId] || 0) + 1;\n }\n }\n\n if (game.awayTeamId === team.id) {\n const homeTeam = teams.find(team => team.id === game.homeTeamId);\n if (homeTeam) {\n matchups[homeTeam.officeId] = (matchups[homeTeam.officeId] || 0) + 1;\n }\n }\n\n return matchups;\n }, {})\n\n return {\n teamId: team.id,\n poolId: team && team.pool && team.pool.id,\n officeMatchups,\n }\n })\n\n return teamOfficeMatchups;\n}\n\n\n","import { isEmpty } from '@hisports/common/src/lodash.js';\n\nimport { LEGACY_GAME_NUMBERING_SEASONS } from '@hisports/scoresheet/src/constants.js';\n\nconst LEADING_ZEROS = /^(0+).*/\nconst normalizeValue = value => !value ? '' : value;\nconst hasLeadingZeros = number => {\n const [ , leadingZeros ] = LEADING_ZEROS.exec(number) || []\n return leadingZeros != null;\n}\n\nexport const isPrefixValid = (prefix) => {\n if (prefix == null) return true;\n return !/\\d$/.test(prefix);\n};\n\nexport const GAME_NUMBER_REGEX = /^(.*?)(\\d+)(\\D*)$/\nexport const PATCHED_GAME_NUMBER_REGEX = /^(?:(?:[a-zA-Z0-9-])(?!--))*$/\n\nexport const parseSequence = sequence => `${sequence.prefix || ''}${sequence.start || ''}${sequence.suffix || ''}`;\n\nexport const comparePrefixSuffix = (sequence1, sequence2) => {\n const { prefix: prefix1, suffix: suffix1 } = sequence1;\n const { prefix: prefix2, suffix: suffix2 } = sequence2;\n\n return normalizeValue(prefix1) === normalizeValue(prefix2) && normalizeValue(suffix1) === normalizeValue(suffix2);\n}\n\n// if no seasonId, we assume it's legacy\nexport const isLegacyGameNumbering = seasonId => !seasonId || LEGACY_GAME_NUMBERING_SEASONS.includes(seasonId)\n\nexport const validateGameNumber = (gameNumber, seasonId) => {\n if (!gameNumber) return;\n\n if (typeof gameNumber === 'object') {\n gameNumber = parseSequence(gameNumber);\n }\n\n const isValidGameNumber = GAME_NUMBER_REGEX.test(gameNumber);\n\n if (isLegacyGameNumbering(seasonId) || !isValidGameNumber) {\n return isValidGameNumber\n }\n\n // added more validation when its not legacy\n if (gameNumber.length > 15) return\n\n return PATCHED_GAME_NUMBER_REGEX.test(gameNumber);\n}\n\nexport const getGameNumberValidationError = (gameNumber, seasonId) => {\n const CONTAINS_SPECIAL_CHAR_REGEX = /[^a-zA-Z0-9-]/;\n const CONTAINS_DOUBLE_DASH_REGEX = /--/;\n const MISSING_NUMBER_REGEX = /^[^\\d]+$/;\n\n if (!isLegacyGameNumbering(seasonId) && gameNumber.length > 15) return 'too_many_characters';\n\n if (!isLegacyGameNumbering(seasonId) && CONTAINS_DOUBLE_DASH_REGEX.test(gameNumber)) return 'cannot_contain_consecutive_dashes';\n\n if (!isLegacyGameNumbering(seasonId) && CONTAINS_SPECIAL_CHAR_REGEX.test(gameNumber)) return 'cannot_contain_special_characters';\n\n if (MISSING_NUMBER_REGEX.test(gameNumber)) return 'must_contain_a_number';\n}\n\nexport const parseGameNumber = (gameNumber) => {\n if (gameNumber == null) return {};\n\n if (typeof gameNumber === 'object') {\n gameNumber = parseSequence(gameNumber);\n }\n\n const [ , prefix, start, suffix ] = GAME_NUMBER_REGEX.exec(gameNumber) || [];\n const padLength = start != null ? start.length : 0;\n const number = Number(start) || 0;\n return {\n prefix,\n number,\n suffix,\n hasLeadingZeros: hasLeadingZeros(start),\n padLength,\n }\n}\n\nexport const isInSequence = (gameNumber, sequence) => {\n if (gameNumber == null || !sequence) return false;\n\n const { prefix, number, suffix } = parseGameNumber(gameNumber);\n const { prefix: startPrefix, number: startNumber, suffix: startSuffix } = parseGameNumber(sequence);\n\n if (prefix !== startPrefix || suffix !== startSuffix) return false;\n\n return number >= startNumber\n}\n\nexport const getHighestNumber = (games = [], sequence) => {\n if (!sequence) return;\n return games.reduce((highest, game) => {\n if (!isInSequence(game.number, sequence)) return highest;\n\n const { number } = parseGameNumber(game.number)\n if (highest && highest > number) return highest;\n return number;\n }, null)\n}\n\nexport const overlaps = (sequence, sequences) => {\n if (isEmpty(sequences)) return false;\n\n const { start, groupId, current } = sequence;\n const sequenceCurrent = current || Number(start);\n\n return sequences\n .filter(s => s.id !== sequence.id)\n .some(checkingSequence => {\n const { start: checkingStart, current: checkingCurrent, groupId: checkingGroupId } = checkingSequence;\n\n if (!comparePrefixSuffix(sequence, checkingSequence) || groupId == checkingGroupId) return false\n\n const min = Number(checkingStart);\n const max = checkingCurrent || Number(checkingStart);\n\n return sequenceCurrent >= min && sequenceCurrent <= max;\n });\n}\n\nexport const getNextNumber = (sequence, seasonId, scheduleSequences = []) => {\n const { start, current } = sequence;\n\n const nextCurrent = current != null ? current + 1 : Number(start);\n\n // maximum number reached\n if (overlaps({ ...sequence, current: nextCurrent }, scheduleSequences)) return;\n\n const { prefix, suffix, hasLeadingZeros, padLength } = parseGameNumber(sequence);\n\n // pad with leading zeros when possible\n const leadingZerosLength = padLength - nextCurrent.toString().length;\n const leadingZeros = hasLeadingZeros && padLength > 1 && leadingZerosLength >= 0 ? '0'.repeat(leadingZerosLength) : ''\n\n // construct next number\n const newGameNumber = `${prefix}${leadingZeros}${nextCurrent}${suffix}`;\n\n if (!validateGameNumber(newGameNumber, seasonId)) return;\n\n return newGameNumber;\n}\n","import { ceil, floor } from '@hisports/common/src/lodash.js';\n\n\n/**\n * get the ideal extra / missing value of the currentTotal to reach the required gamesPerTeam\n *\n * @param {number} gamesPerTeam - the number of games per team\n * @param {number} currentTotal - the total value of this row/col (home of away)\n * @param {number} otherTotal - the total value of this team's other location (home or away)\n * @return {number} diff between gamesPerTeam and currentTotal\n */\nexport const getValidationDiff = (gamesPerTeam, currentTotal, otherTotal) => {\n const upperBound = ceil(gamesPerTeam / 2)\n const lowerBound = floor(gamesPerTeam / 2)\n const idealValue = gamesPerTeam / 2 // for odd gamesPerTeam, this is a x.5, but the logic bellow still work\n\n // if gamesPerTeam is even, return currentTotal - idealValue\n if ((currentTotal >= idealValue && otherTotal <= idealValue) ||\n (currentTotal <= idealValue && otherTotal <= idealValue)) {\n // current should be the upperBound and other should be the lowerBound\n return currentTotal - upperBound;\n }\n\n if ((currentTotal >= idealValue && otherTotal >= idealValue) ||\n (currentTotal <= idealValue && otherTotal >= idealValue)) {\n // current should be the lowerBound and other should be the upperBound\n return currentTotal - lowerBound;\n }\n}\n\n// parse the matrix into a list of home matchups per team\n// format: [{ homeTeamId: 19001, matchups: [2, 4, ...], ...]\nexport const parseMatrix = (matrix = [], teams = []) => {\n return matrix.map((row, homeIndex) => {\n const homeTeam = teams[homeIndex]\n return {\n homeScheduleId: homeTeam.scheduleId,\n homeGroupId: homeTeam.groupId,\n homeTeamId: homeTeam.teamId,\n matchups: row.map(count => count)\n }\n })\n}\n\n// unparse the list of home matchups per team into a matrix\nexport const unparseMatrix = (list = []) => {\n return list.map(({ matchups }) => {\n return matchups.map(count => count)\n })\n}\n\n// reset the matrix to 0s\nexport const clearMatrix = (matrix = []) => {\n return matrix.map(row => row.map((val) => {\n if (val === undefined || val === null) return val;\n return 0;\n }))\n}\n","import { generateId } from \"../util/index.js\";\n\nexport const GAME_CREATED = \"GAME_CREATED\";\nexport const GAME_RESCHEDULED = \"GAME_RESCHEDULED\";\nexport const GAME_UPDATED = \"GAME_UPDATED\";\nexport const GAME_DELETED = \"GAME_DELETED\";\n\nexport const GAME_STARTED = \"GAME_STARTED\";\nexport const GAME_ENDED = \"GAME_ENDED\";\nexport const GAME_FORFEITED = \"GAME_FORFEITED\";\n\nexport const LINEUP_UPDATED = \"LINEUP_UPDATED\";\nexport const LINEUP_APPROVED = \"LINEUP_APPROVED\";\nexport const LINEUP_EXTRA_ADDED = \"LINEUP_EXTRA_ADDED\";\nexport const LINEUP_EXTRA_REMOVED = \"LINEUP_EXTRA_REMOVED\";\nexport const THROWS_INNINGS_UPDATED = \"THROWS_INNINGS_UPDATED\";\n\nexport const OFFICIAL_DELEGATED = \"OFFICIAL_DELEGATED\";\nexport const OFFICIAL_REQUESTED = \"OFFICIAL_REQUESTED\";\nexport const OFFICIAL_ASSIGNED = \"OFFICIAL_ASSIGNED\";\nexport const OFFICIAL_ACCEPTED = \"OFFICIAL_ACCEPTED\";\nexport const OFFICIAL_DECLINED = \"OFFICIAL_DECLINED\";\n\nexport const OFFICIAL_ADDED = \"OFFICIAL_ADDED\";\nexport const OFFICIAL_UPDATED = \"OFFICIAL_UPDATED\";\nexport const OFFICIAL_REMOVED = \"OFFICIAL_REMOVED\";\nexport const KEEPERS_UPDATED = \"KEEPERS_UPDATED\";\n\nexport const GOAL_SCORED = \"GOAL_SCORED\";\nexport const GOAL_EDITED = \"GOAL_EDITED\";\nexport const GOAL_DELETED = \"GOAL_DELETED\";\n\nexport const PENALTY_STARTED = \"PENALTY_STARTED\";\nexport const PENALTY_ENDED = \"PENALTY_ENDED\";\nexport const PENALTY_EDITED = \"PENALTY_EDITED\";\nexport const PENALTY_DELETED = \"PENALTY_DELETED\";\n\nexport const GOALIE_CHANGED = \"GOALIE_CHANGED\";\nexport const GOALIE_CHANGE_EDITED = \"GOALIE_CHANGE_EDITED\";\nexport const GOALIE_CHANGE_DELETED = \"GOALIE_CHANGE_DELETED\";\nexport const GOALIE_SHOTS_UPDATED = \"GOALIE_SHOTS_UPDATED\";\n\nexport const SETTINGS_UPDATED = \"SETTINGS_UPDATED\";\nexport const NOTES_UPDATED = \"NOTES_UPDATED\";\nexport const CERTIFICATION_FLAGS_UPDATED = \"CERTIFICATION_FLAGS_UPDATED\";\nexport const SCORE_UPDATED = \"SCORE_UPDATED\";\n\nexport const SCORESHEET_APPROVED = \"SCORESHEET_APPROVED\";\nexport const SCORESHEET_DISAPPROVED = \"SCORESHEET_DISAPPROVED\";\nexport const SCORESHEET_CERTIFIED = \"SCORESHEET_CERTIFIED\";\nexport const SCORESHEET_DECERTIFIED = \"SCORESHEET_DECERTIFIED\";\nexport const SCORESHEET_RESET = \"SCORESHEET_RESET\";\n\nconst commit = (type) => ({\n type: `${type}_COMMITTED`,\n // payload: server response will be merged in by redux-offline\n});\n\nconst rollback = (type, payload) => ({\n type: `${type}_ROLLBACK`,\n // payload: server response will be merged in by redux-offline\n payload: {\n action: payload\n }\n});\n\nconst event = (type, payload, meta = {}) => {\n const { seasonId = null, sport = null } = meta;\n const action = {\n type,\n payload,\n meta: {\n sport,\n seasonId,\n offline: {\n effect: {\n type: \"event\"\n },\n commit: commit(type),\n rollback: rollback(type, payload)\n }\n }\n };\n\n return action;\n};\n\nexport function gameCreated(payload, meta) {\n return event(GAME_CREATED, payload, meta);\n}\nexport function gameRescheduled(payload, meta) {\n return event(GAME_RESCHEDULED, payload, meta);\n}\nexport function gameUpdated(payload, meta) {\n return event(GAME_UPDATED, payload, meta);\n}\nexport function gameDeleted(payload, meta) {\n return event(GAME_DELETED, payload, meta);\n}\n\nexport function gameStarted(payload, meta) {\n return event(GAME_STARTED, payload, meta);\n}\nexport function gameEnded(payload, meta) {\n return event(GAME_ENDED, payload, meta);\n}\nexport function gameForfeited(payload, meta) {\n return event(GAME_FORFEITED, payload, meta);\n}\n\n\nexport function lineupUpdated(payload, meta) {\n return event(LINEUP_UPDATED, payload, meta);\n}\nexport function lineupApproved(payload, meta) {\n return event(LINEUP_APPROVED, payload, meta);\n}\nexport function lineupExtraAdded(payload, meta) {\n return event(LINEUP_EXTRA_ADDED, payload, meta);\n}\nexport function lineupExtraRemoved(payload, meta) {\n return event(LINEUP_EXTRA_REMOVED, payload, meta);\n}\nexport function throwsInningsUpdated(payload, meta) {\n return event(THROWS_INNINGS_UPDATED, payload, meta);\n}\n\nexport function officialDelegated(payload, meta) {\n return event(OFFICIAL_DELEGATED, payload, meta);\n}\nexport function officialRequested(payload, meta) {\n return event(OFFICIAL_REQUESTED, payload, meta);\n}\nexport function officialAssigned(payload, meta) {\n return event(OFFICIAL_ASSIGNED, payload, meta);\n}\nexport function officialAccepted(payload, meta) {\n return event(OFFICIAL_ACCEPTED, payload, meta);\n}\nexport function officialDeclined(payload, meta) {\n return event(OFFICIAL_DECLINED, payload, meta);\n}\n\nexport function officialAdded(payload, meta) {\n return event(OFFICIAL_ADDED, payload, meta);\n}\nexport function officialUpdated(payload, meta) {\n return event(OFFICIAL_UPDATED, payload, meta);\n}\nexport function officialRemoved(payload, meta) {\n return event(OFFICIAL_REMOVED, payload, meta);\n}\n\nexport function keepersUpdated(payload, meta) {\n return event(KEEPERS_UPDATED, payload, meta);\n}\n\nexport function goalScored(payload, meta) {\n return event(GOAL_SCORED, payload, meta);\n}\nexport function goalEdited(payload, meta) {\n return event(GOAL_EDITED, payload, meta);\n}\nexport function goalDeleted(payload, meta) {\n return event(GOAL_DELETED, payload, meta);\n}\n\nexport function penaltyStarted(payload, meta) {\n return event(PENALTY_STARTED, payload, meta);\n}\nexport function penaltyEnded(payload, meta) {\n return event(PENALTY_ENDED, payload, meta);\n}\nexport function penaltyEdited(payload, meta) {\n return event(PENALTY_EDITED, payload, meta);\n}\nexport function penaltyDeleted(payload, meta) {\n return event(PENALTY_DELETED, payload, meta);\n}\n\nexport function goalieChanged(payload, meta) {\n return event(GOALIE_CHANGED, payload, meta);\n}\nexport function goalieChangeEdited(payload, meta) {\n return event(GOALIE_CHANGE_EDITED, payload, meta);\n}\nexport function goalieChangeDeleted(payload, meta) {\n return event(GOALIE_CHANGE_DELETED, payload, meta);\n}\nexport function goalieShotsUpdated(payload, meta) {\n return event(GOALIE_SHOTS_UPDATED, payload, meta);\n}\n\n\nexport function settingsUpdated(payload, meta) {\n return event(SETTINGS_UPDATED, payload, meta);\n}\nexport function notesUpdated(payload, meta) {\n return event(NOTES_UPDATED, payload, meta);\n}\nexport function certificationFlagsUpdated(payload, meta) {\n return event(CERTIFICATION_FLAGS_UPDATED, payload, meta);\n}\nexport function scoreUpdated(payload, meta) {\n return event(SCORE_UPDATED, payload, meta);\n}\n\nexport function scoresheetApproved(payload, meta) {\n return event(SCORESHEET_APPROVED, payload, meta);\n}\nexport function scoresheetDisapproved(payload, meta) {\n return event(SCORESHEET_DISAPPROVED, payload, meta);\n}\nexport function scoresheetCertified(payload, meta) {\n return event(SCORESHEET_CERTIFIED, payload, meta);\n}\nexport function scoresheetDecertified(payload, meta) {\n return event(SCORESHEET_DECERTIFIED, payload, meta);\n}\nexport function scoresheetReset(payload, meta) {\n return event(SCORESHEET_RESET, payload, meta);\n}\n\nconst createEvent = (eventType, gameId, event = {}) => ({\n id: generateId(),\n gameId,\n timestamp: new Date().toISOString(),\n eventType,\n event\n})\n\nexport const updateSettings = (gameId, settings, meta) => {\n const event = createEvent('settingsUpdated', gameId, settings);\n return settingsUpdated(event, meta);\n}\n\nexport const addOfficial = (gameId, official, position, meta) => {\n const event = createEvent('officialAdded', gameId, {\n official,\n position,\n })\n\n return officialAdded(event, meta);\n}\n\nexport const updateOfficial = (gameId, official, position, status, meta) => {\n const payload = { position, status };\n const { participantId, id } = official;\n if (participantId) {\n payload.participantId = participantId;\n } else {\n payload.officialId = id;\n }\n\n const event = createEvent('officialUpdated', gameId, payload)\n return officialUpdated(event, meta);\n}\n\nexport const removeOfficial = (gameId, official, isNoShow, meta) => {\n const payload = {};\n const { participantId, id } = official;\n\n if (id) {\n payload.officialId = id;\n }\n if (participantId) {\n payload.participantId = participantId\n }\n if (isNoShow) {\n payload.isNoShow = true;\n }\n\n const event = createEvent('officialRemoved', gameId, payload)\n return officialRemoved(event, meta);\n}\n\nexport const addLineupExtra = (gameId, teamId, participant, positions, number, isAffiliate, meta) => {\n const event = createEvent('lineupExtraAdded', gameId, {\n teamId,\n member: {\n participant,\n participantId: participant.id,\n positions,\n number,\n isAffiliate,\n }\n })\n return lineupExtraAdded(event, meta);\n}\n\nexport const removeLineupExtra = (gameId, teamId, participantId, meta) => {\n const event = createEvent('lineupExtraRemoved', gameId, {\n teamId,\n participantId,\n })\n return lineupExtraRemoved(event, meta);\n}\n\nexport const saveLineup = (gameId, teamId, members, meta) => {\n const event = createEvent('lineupUpdated', gameId, {\n teamId,\n members,\n });\n return lineupUpdated(event, meta);\n}\n\nexport const approveLineup = (gameId, teamId, participantId, signature, meta) => {\n const event = createEvent('lineupApproved', gameId, {\n teamId,\n participantId,\n signature\n })\n\n return lineupApproved(event, meta);\n}\n\nexport const updateThrowsInnings = (gameId, teamId, throwsInnings, meta) => {\n const event = createEvent('throwsInningsUpdated', gameId, {\n teamId,\n throwsInnings\n })\n\n return throwsInningsUpdated(event, meta);\n}\n\nexport const updateKeepers = (gameId, payload, meta) => {\n const event = createEvent('keepersUpdated', gameId, payload);\n return keepersUpdated(event, meta);\n}\n\nexport const startGame = (gameId, periods, meta) => {\n const event = createEvent('gameStarted', gameId, { periods });\n return gameStarted(event, meta)\n}\n\nexport const addGoal = (gameId, goal, meta) => {\n const event = createEvent('goalScored', gameId, goal);\n return goalScored(event, meta);\n}\n\nexport const editGoal = (gameId, goalId, goal, meta) => {\n const event = createEvent('goalEdited', gameId, {\n ...goal,\n goalId\n });\n\n return goalEdited(event, meta);\n}\n\nexport const deleteGoal = (gameId, goalId, meta) => {\n const event = createEvent('goalDeleted', gameId, { goalId });\n return goalDeleted(event, meta);\n}\n\nexport const startPenalty = (gameId, penalty, meta) => {\n const event = createEvent('penaltyStarted', gameId, penalty);\n return penaltyStarted(event, meta);\n}\n\nexport const endPenalty = (gameId, penaltyId, endTime, meta) => {\n const event = createEvent('penaltyEnded', gameId, {\n penaltyId,\n endTime\n })\n\n return penaltyEnded(event, meta);\n}\n\nexport const editPenalty = (gameId, penaltyId, penalty, meta) => {\n const event = createEvent('penaltyEdited', gameId, {\n ...penalty,\n penaltyId\n });\n\n return penaltyEdited(event, meta);\n}\n\nexport const deletePenalty = (gameId, penaltyId, meta) => {\n const event = createEvent('penaltyDeleted', gameId, { penaltyId });\n return penaltyDeleted(event, meta);\n}\n\nexport const changeGoalie = (gameId, goalieChange, meta) => {\n const event = createEvent('goalieChanged', gameId, goalieChange);\n return goalieChanged(event, meta);\n}\n\nexport const editGoalieChange = (gameId, goalieChangeId, goalieChange, meta) => {\n const event = createEvent('goalieChangeEdited', gameId, {\n ...goalieChange,\n goalieChangeId\n })\n\n return goalieChangeEdited(event, meta);\n}\n\nexport const deleteGoalieChange = (gameId, goalieChangeId, meta) => {\n const event = createEvent('goalieChangeDeleted', gameId, { goalieChangeId });\n return goalieChangeDeleted(event, meta);\n}\n\nexport const updateGoalieShots = (gameId, goalies, meta) => {\n const event = createEvent('goalieShotsUpdated', gameId, { goalies })\n return goalieShotsUpdated(event, meta);\n}\n\nexport const updateNotes = (gameId, notes, adminNotes, meta) => {\n const event = createEvent('notesUpdated', gameId, {\n notes,\n adminNotes,\n })\n\n return notesUpdated(event, meta);\n}\n\nexport const saveCertificationFlags = (gameId, flags, meta) => {\n const event = createEvent('certificationFlagsUpdated', gameId, {\n flags\n });\n return certificationFlagsUpdated(event, meta);\n}\n\nexport const saveScore = (gameId, score, meta) => {\n const event = createEvent('scoreUpdated', gameId, {\n score,\n });\n return scoreUpdated(event, meta);\n}\n\nexport const endGame = (gameId, gameTime, meta) => {\n const event = createEvent('gameEnded', gameId, {\n gameTime\n })\n\n return gameEnded(event, meta);\n}\n\nexport const approveScoresheet = (gameId, approvals, meta) => {\n const event = createEvent('scoresheetApproved', gameId, approvals);\n return scoresheetApproved(event, meta);\n}\n\nexport const undoApprovalScoresheet = (gameId, meta) => {\n const event = createEvent('scoresheetDisapproved', gameId);\n return scoresheetDisapproved(event, meta);\n}\n\nexport const certifyScoresheet = (gameId, meta) => {\n const event = createEvent('scoresheetCertified', gameId);\n return scoresheetCertified(event, meta);\n}\n\nexport const undoCertifyScoresheet = (gameId, meta) => {\n const event = createEvent('scoresheetDecertified', gameId);\n return scoresheetDecertified(event, meta);\n}\n\nexport const resetScoresheet = (gameId, meta) => {\n const event = createEvent('scoresheetReset', gameId);\n return scoresheetReset(event, meta);\n}\n","export const ADD_MEMBER_TO_LINEUP = 'ADD_MEMBER_TO_LINEUP';\nexport const REMOVE_MEMBER_FROM_LINEUP = 'REMOVE_MEMBER_FROM_LINEUP';\n\nexport const ADD_MEMBERS_TO_LINEUP = 'ADD_MEMBERS_TO_LINEUP';\nexport const REMOVE_MEMBERS_FROM_LINEUP = 'REMOVE_MEMBERS_FROM_LINEUP';\nexport const CLEAR_LINEUP = 'CLEAR_LINEUP';\nexport const RESTORE_LINEUP = 'RESTORE_LINEUP';\n\nexport const EDIT_LINEUP_MEMBER = 'EDIT_LINEUP_MEMBER';\n\nexport const addMemberToLineup = (gameId, teamId, member) => ({\n type: ADD_MEMBER_TO_LINEUP,\n payload: {\n gameId,\n teamId,\n member,\n }\n});\n\nexport const removeMemberFromLineup = (gameId, teamId, member) => ({\n type: REMOVE_MEMBER_FROM_LINEUP,\n payload: {\n member,\n gameId,\n teamId,\n }\n});\n\nexport const addMembersToLineup = (gameId, teamId, members) => ({\n type: ADD_MEMBERS_TO_LINEUP,\n payload: {\n gameId,\n teamId,\n members\n }\n});\n\nexport const clearLineup = (gameId, teamId, type) => ({\n type: CLEAR_LINEUP,\n payload: {\n gameId,\n teamId,\n type\n }\n});\n\nexport const restoreLineup = (gameId, teamId, lineup) => ({\n type: RESTORE_LINEUP,\n payload: {\n gameId,\n teamId,\n lineup\n }\n})\n\nexport const editLineupMember = (gameId, teamId, member) => ({\n type: EDIT_LINEUP_MEMBER,\n payload: {\n gameId,\n teamId,\n member\n }\n})\n","export const FORWARD = 'F';\nexport const CENTRE = 'C';\nexport const DEFENSE = 'D';\nexport const GOALIE = 'G';\nexport const PLAYER_POSITIONS = [\n FORWARD, CENTRE, DEFENSE, GOALIE\n];\nexport const SKATER_POSITIONS = [\n FORWARD, CENTRE, DEFENSE\n];\nexport const GOALIE_POSITIONS = [ GOALIE ];\n\nexport const HOME = 'home';\nexport const AWAY = 'away';\n\nexport const HEAD_COACH = 'Head Coach';\nexport const ASSISTANT_COACH = 'Assistant Coach';\nexport const GOALTENDING_COACH = 'Goaltending Coach';\nexport const COACH_POSITIONS = [\n HEAD_COACH,\n ASSISTANT_COACH,\n GOALTENDING_COACH\n];\n\nexport const MANAGER = 'Manager';\nexport const TRAINER = 'Trainer';\nexport const SAFETY_PERSON = 'Safety Person';\nexport const BENCH_POSITIONS = [\n MANAGER,\n TRAINER,\n SAFETY_PERSON\n];\n\nexport const STAFF_POSITIONS = [\n ...COACH_POSITIONS,\n ...BENCH_POSITIONS\n];\nexport const MEMBER_POSITIONS = [\n ...PLAYER_POSITIONS,\n ...STAFF_POSITIONS\n];\n\nexport const PLURALS = {\n 'Referee': 'referees',\n 'Linesperson': 'linespersons',\n 'LinespersonTwo': 'linespersonsTwo',\n 'LinespersonThree': 'linespersonsThree',\n 'Official': 'officials',\n 'Scorekeeper': 'scorekeepers',\n 'Timekeeper': 'timekeepers',\n 'Supervisor': 'supervisors',\n}\n\nexport const REFEREE = 'Referee';\nexport const LINESPERSON = 'Linesperson';\nexport const LINESPERSON_TWO = 'LinespersonTwo';\nexport const LINESPERSON_THREE = 'LinespersonThree';\nexport const OFFICIAL = 'Official';\nexport const SUPERVISOR = 'Supervisor';\n\nexport const SCOREKEEPER = 'Scorekeeper';\nexport const TIMEKEEPER = 'Timekeeper';\n\nexport const LINESMAN = 'Linesman'\nexport const OLD_OFFICIAL_POSITIONS = [\n REFEREE, LINESMAN\n]\n\nexport const OFFICIAL_POSITIONS = [\n REFEREE, LINESPERSON, LINESPERSON_TWO, LINESPERSON_THREE, OFFICIAL\n]\n\nexport const KEEPER_POSITIONS = [\n SCOREKEEPER, TIMEKEEPER\n]\n\nexport const ALL_OFFICIAL_POSITIONS = [\n ...OFFICIAL_POSITIONS, ...KEEPER_POSITIONS, SUPERVISOR\n]\n\nexport const ASSIGNMENT_POSITIONS = [\n {\n position: REFEREE,\n },\n {\n position: LINESPERSON,\n },\n {\n position: LINESPERSON_TWO,\n },\n {\n position: LINESPERSON_THREE,\n },\n {\n position: OFFICIAL,\n sports: ['Soccer']\n },\n {\n position: SCOREKEEPER,\n sports: ['Hockey', 'Baseball']\n },\n {\n position: TIMEKEEPER,\n sports: ['Hockey']\n },\n {\n position: SUPERVISOR,\n }\n]\n\nexport const OFFICIAL_STATUS_UNASSIGNED = 'unassigned';\nexport const OFFICIAL_STATUS_REQUESTED = 'requested';\nexport const OFFICIAL_STATUS_ASSIGNED = 'assigned';\nexport const OFFICIAL_STATUS_DECLINED = 'declined';\nexport const OFFICIAL_STATUS_CONFIRMED = 'confirmed';\nexport const OFFICIAL_STATUS_NO_SHOW = 'no-show';\n\nexport const OFFICIAL_STATUSES = [\n OFFICIAL_STATUS_ASSIGNED,\n OFFICIAL_STATUS_REQUESTED,\n OFFICIAL_STATUS_DECLINED,\n OFFICIAL_STATUS_CONFIRMED,\n OFFICIAL_STATUS_NO_SHOW\n]\n\nexport const MIN_SKATER_COUNT = 5;\nexport const MAX_SKATER_COUNT = 18;\n\nexport const MIN_GOALIE_COUNT = 0;\nexport const MAX_GOALIE_COUNT = 2;\n\nexport const MIN_PLAYER_COUNT = 6;\nexport const MAX_PLAYER_COUNT = 19;\n\nexport const MIN_STAFF_COUNT = 1;\nexport const MAX_STAFF_COUNT = 5;\n\nexport const FIRST_PERIOD = '1';\nexport const SECOND_PERIOD = '2';\nexport const THIRD_PERIOD = '3';\nexport const OVERTIME_PERIOD = 'OT';\nexport const SHOOTOUT_PERIOD = 'SO';\nexport const PERIODS = [\n FIRST_PERIOD,\n SECOND_PERIOD,\n THIRD_PERIOD,\n OVERTIME_PERIOD,\n SHOOTOUT_PERIOD,\n]\n\nexport const SCHEDULED = 'scheduled';\nexport const STARTED = 'started';\nexport const ENDED = 'ended';\nexport const APPROVED = 'approved';\nexport const CERTIFIED = 'certified';\n\nexport const EVENT_TYPE_GOAL = 'goal';\nexport const EVENT_TYPE_PENALTY = 'penalty';\nexport const EVENT_TYPE_GOALIE = 'goalie';\n\nexport const PENALTY_SEVERITY = {\n LOW: 'low',\n MEDIUM: 'medium',\n HIGH: 'high',\n SEVERE: 'severe',\n}\n\nexport const INFRACTION_SEVERITY = {\n LOW: 'Low',\n MEDIUM: 'Medium',\n HIGH: 'High',\n SEVERE: 'Severe',\n}\n\nexport const TEAM_FLAGS = {\n LINEUP_MIN_LIMIT: 'Lineup Min Limit',\n LINEUP_MAX_LIMIT: 'Lineup Max Limit',\n NOT_ROSTERED: 'Not Rostered',\n HIGH_SEVERITY_PENALTIES: 'High Severity Penalties',\n DIRECT_RED_PENALTIES: 'Direct Red',\n INDIRECT_RED_PENALTIES: 'Indirect Red',\n EXTRA: 'Extra',\n SERVING: 'Serving',\n NOT_SERVING: 'Not Serving',\n SECONDARY_TEAM: 'Secondary Team',\n TRANSFERRED: 'Transferred',\n UNVALIDATED_MEMBERS: 'Unvalidated Members',\n FAULTY_PLAYERS: 'Faulty Players',\n MISSING_SUSPENDED_MEMBER: 'Missing Suspended Member',\n}\n\nexport const FAULTY_PLAYER_REASONS = {\n HAS_INNINGS_REST: 'hasInningsRest',\n HAS_THROWS_REST: 'hasThrowsRest',\n CONSECUTIVE_DAYS: 'consecutiveDays',\n DAILY_INNINGS: 'dailyInnings',\n WEEKLY_INNINGS: 'weeklyInnings',\n}\n\nexport const GENERAL_FLAGS = {\n COACH_ENTERED_RESULT: 'Coach Entered Result',\n UNFINISHED: 'Unfinished',\n NOTES: 'Notes',\n SUSPENSION: 'Suspension',\n}\n\nexport const FLAG_COLORS = {\n RED: 'red',\n ORANGE: 'orange',\n RED_ORANGE: 'red/orange',\n DEFAULT: 'default'\n}\n\n// hockey durations\nexport const MINOR = 'minor';\nexport const DOUBLE_MINOR = 'double-minor';\nexport const MAJOR = 'major';\nexport const MATCH = 'match';\nexport const MISCONDUCT = 'misconduct';\n\nexport const GAME_MISCONDUCT = 'game-misconduct';\nexport const GROSS_MISCONDUCT = 'gross-misconduct';\nexport const PENALTY_SHOT = 'penalty-shot';\nexport const HEAD_CONTACT = 'head-contact';\nexport const GAME_EJECTION = 'game-ejection';\n\n// soccer durations\nexport const YELLOW = 'yellow';\nexport const YELLOW_RED = 'red';\nexport const RED = 'red_direct';\n\n// baseball durations\nexport const EJECTION = 'ejection';\n\nexport const INITIAL_TIME = {\n Hockey: {\n period: '1',\n minutes: 20,\n seconds: 0\n },\n Soccer: {\n minutes: 0,\n extra: 0,\n },\n Baseball: {\n period: 1,\n half: 1,\n }\n}\n\nexport const DEFAULT_SETTINGS = {\n periods: [\n { period: '1', minutes: 20, seconds: 0 },\n { period: '2', minutes: 20, seconds: 0 },\n { period: '3', minutes: 20, seconds: 0 },\n { period: 'OT', minutes: 10, seconds: 0 },\n ]\n}\n\nexport const LEGACY_RULEBOOK_SEASONS = [\n '2023-24',\n '2022-23',\n '2021-22',\n '2020-21',\n '2019-20',\n '2018-19'\n];\n\nexport const LEGACY_GAME_NUMBERING_SEASONS = [\n '2023-24',\n '2022-23',\n '2021-22',\n '2020-21',\n '2019-20',\n '2018-19'\n];\n","import { uniqWith, isEqual } from '@hisports/common/src/lodash.js';\nimport { CERTIFICATION_FLAGS_UPDATED, ADD_CERTIFICATION_FLAG, REMOVE_CERTIFICATION_FLAG, SCORESHEET_DISAPPROVED, SCORESHEET_RESET } from \"../actions/index.js\";\n\n\nexport default (state = [], action) => {\n switch (action.type) {\n case CERTIFICATION_FLAGS_UPDATED: {\n const flags = action.payload.event.flags;\n\n return uniqWith(flags, isEqual);\n }\n\n case ADD_CERTIFICATION_FLAG: {\n const { name, teamId } = action.payload;\n const flag = { name, teamId };\n\n const flagExists = state.some(f => f.name === flag.name && f.teamId == flag.teamId);\n if (flagExists) return state;\n\n return [...state, flag];\n }\n\n case REMOVE_CERTIFICATION_FLAG: {\n const { name, teamId } = action.payload;\n\n return state.filter(f => f.name != name || teamId != f.teamId)\n }\n\n case SCORESHEET_RESET:\n case SCORESHEET_DISAPPROVED: {\n return [];\n }\n\n default:\n return state;\n }\n}\n","import { clone } from '@hisports/common/src/lodash.js';\n\nimport {\n SETTINGS_UPDATED,\n GOAL_SCORED,\n GOAL_EDITED,\n GOAL_DELETED,\n PENALTY_STARTED,\n PENALTY_ENDED,\n PENALTY_EDITED,\n PENALTY_DELETED,\n GOALIE_CHANGED,\n GAME_ENDED,\n GOALIE_CHANGE_DELETED,\n GOALIE_CHANGE_EDITED,\n SCORESHEET_RESET,\n GAME_STARTED\n} from '../actions/index.js'\nimport { compareTime, isTimeAfter } from '../util/index.js';\nimport { INITIAL_TIME } from '../constants.js';\nimport { isGameEndedOrCompleted } from '../selectors/index.js';\n\nexport const initialState = clone(INITIAL_TIME);\n\nexport default function gameTime(state, action, scoresheet, sport) {\n state = typeof state !== 'undefined' ? state : initialState[sport];\n\n if (action.type === SCORESHEET_RESET) return initialState[sport];\n\n // ignore changes after the game end time\n if (action.type !== GAME_ENDED && isGameEndedOrCompleted(scoresheet)) return state;\n\n // ensure latest period and game time, in case new/edited goals/penalties are in past\n switch (action.type) {\n case GAME_STARTED: {\n const { periods } = action.payload.event;\n if (!periods || !periods.length || !periods[0]) return state;\n\n const period = periods[0];\n return clone(period);\n }\n case SETTINGS_UPDATED: {\n const { periods } = action.payload.event;\n if (!isFinite(state.period) || !periods) return state;\n\n const period = periods[parseInt(state.period) - 1];\n // if setting is after period, use setting, otherwise keep state\n return isTimeAfter(state, period, sport) ? clone(period) : state;\n }\n\n case GOAL_SCORED:\n case PENALTY_STARTED:\n case GOALIE_CHANGED:\n case GAME_ENDED: {\n const { gameTime } = action.payload.event;\n // if gameTime is after the state, use the gameTime, otherwise keep state\n return isTimeAfter(state, gameTime, sport) ? clone(gameTime) : state;\n }\n\n case PENALTY_ENDED: {\n const { endTime } = action.payload.event;\n // if endTime is after the state, use the endTime, otherwise keep state\n return isTimeAfter(state, endTime, sport) ? clone(endTime) : state;\n }\n\n case GOAL_EDITED:\n case GOAL_DELETED:\n case PENALTY_EDITED:\n case PENALTY_DELETED:\n case GOALIE_CHANGE_EDITED:\n case GOALIE_CHANGE_DELETED: {\n // use latest goal/penalty/goalie time, ignoring current as it may be the time being edited\n const times = [...scoresheet.goals, ...scoresheet.penalties, ...scoresheet.goalies]\n .map(event => event.gameTime)\n\n if (!times.length) return state;\n\n times.sort((a, b) => compareTime(a, b, sport));\n return clone(times[times.length - 1]);\n }\n\n default:\n return state;\n }\n}\n","import { clone } from '@hisports/common/src/lodash.js';\n\nimport {\n LINEUP_UPDATED,\n GAME_STARTED,\n GOALIE_CHANGED,\n GOALIE_CHANGE_EDITED,\n GOALIE_CHANGE_DELETED,\n GOALIE_SHOTS_UPDATED,\n SETTINGS_UPDATED,\n SCORESHEET_RESET\n} from '../actions/index.js';\n\nimport { isGoalie, append, replace, removeById, isTimeEqual, byTeamId } from '../util/index.js';\nimport { SCHEDULED } from '../constants.js';\n\nconst toGoalieChange = (event, meta = {}) => ({\n ...meta,\n ...event\n})\n\nconst isStarter = m => isGoalie(m) && m.isStarter;\n\nconst getStarters = scoresheet => {\n const { lineups, settings: { periods } } = scoresheet;\n const gameStart = periods[0];\n return Object.keys(lineups)\n .map(teamId => lineups[teamId])\n .map(lineup => {\n // select starter or fallback to first goalie found\n const starter = lineup.members.find(isStarter);\n const fallback = lineup.members.find(isGoalie);\n return {\n teamId: lineup.teamId,\n goalie: starter || fallback\n }\n })\n .map(({ teamId, goalie }) => ({\n teamId,\n onParticipantId: goalie && goalie.participantId,\n isStarter: true,\n gameTime: clone(gameStart),\n }))\n}\n\nexport const shots = (state = [], action) => {\n if (action.type !== GOALIE_SHOTS_UPDATED) return state;\n // insert/replace goalie shot changes (event may not contain all goalies)\n return action.payload.event.goalies.reduce(\n (goalies, goalie) => replace(goalies, goalie.participantId, goalie, 'participantId')\n , state);\n}\n\nexport default (state = [], action, scoresheet, sport) => {\n switch (action.type) {\n case GAME_STARTED: {\n return getStarters(scoresheet)\n }\n\n case LINEUP_UPDATED:\n case SETTINGS_UPDATED: {\n if (scoresheet.status === SCHEDULED) return state;\n\n const starters = getStarters(scoresheet);\n const changes = state.filter(goalie => !goalie.isStarter);\n\n return [\n ...starters,\n ...changes\n ]\n }\n\n case GOALIE_CHANGED: {\n const { event } = action.payload;\n\n // changes for the same team/time are treated as edits instead of append\n const existing = state.find(change =>\n change.teamId == event.teamId && isTimeEqual(change.gameTime, event.gameTime, sport)\n )\n if (existing && existing.isStarter) {\n // starters don't have an id and need to be handled differently\n const index = state.findIndex(change => change.isStarter && (change.teamId == event.teamId))\n return [\n ...state.slice(0, index),\n toGoalieChange(event, { isStarter: true }),\n ...state.slice(index + 1),\n ]\n } else if (existing) {\n return replace(state, existing.id, toGoalieChange(event, {\n id: existing.id,\n }))\n }\n\n return append(state, {\n id: action.payload.id,\n teamId: event.teamId,\n onParticipantId: event.onParticipantId || null,\n gameTime: event.gameTime,\n })\n }\n\n case GOALIE_CHANGE_EDITED: {\n const { event } = action.payload;\n\n return replace(state, event.goalieChangeId, toGoalieChange(event, {\n id: event.goalieChangeId,\n }));\n }\n\n case GOALIE_CHANGE_DELETED: {\n const { event } = action.payload;\n\n // protect starters from being deleted\n const existing = state.find(change => change.id == event.goalieChangeId);\n if (existing && existing.isStarter) {\n const starters = getStarters(scoresheet)\n const starter = starters.find(byTeamId(existing.teamId))\n return replace(state, event.goalieChangeId, starter);\n }\n\n return removeById(state, event.goalieChangeId)\n }\n\n case SCORESHEET_RESET: {\n return [];\n }\n\n default:\n return state;\n }\n}\n","import {\n GOAL_SCORED,\n GOAL_EDITED,\n GOAL_DELETED,\n SCORESHEET_RESET,\n} from '../actions/index.js';\n\nimport { append, replace, removeById } from '../util/index.js';\n\nconst toGoal = (event, meta = {}) => ({\n ...meta,\n ...event\n})\n\nexport default (state = [], action) => {\n switch (action.type) {\n case GOAL_SCORED: {\n const { id, event: goal } = action.payload;\n return append(state, toGoal(goal, {\n id,\n }))\n }\n\n case GOAL_EDITED: {\n const { goalId, ...goal } = action.payload.event;\n\n return replace(state, goalId, toGoal(goal, {\n id: goalId,\n }));\n }\n\n case GOAL_DELETED: {\n const { goalId } = action.payload.event;\n\n return removeById(state, goalId)\n }\n\n case SCORESHEET_RESET: {\n return [];\n }\n\n default:\n return state;\n }\n}\n","import { KEEPERS_UPDATED, SCORESHEET_APPROVED } from \"../actions/index.js\";\n\nconst initialKeepersState = {\n scorekeeper: null,\n timekeeper: null\n}\n\nexport default (state = initialKeepersState, action) => {\n switch (action.type) {\n case KEEPERS_UPDATED: {\n const { scorekeeper, timekeeper } = action.payload.event;\n return {\n scorekeeper: {\n name: scorekeeper,\n signature: state.scorekeeper && state.scorekeeper.signature || null,\n },\n timekeeper: {\n name: timekeeper,\n signature: state.timekeeper && state.timekeeper.signature || null,\n }\n }\n }\n\n case SCORESHEET_APPROVED: {\n const { scorekeeper, timekeeper } = action.payload.event;\n return {\n scorekeeper,\n timekeeper,\n }\n }\n\n default: {\n return state;\n }\n }\n}\n","import { uniqBy } from '@hisports/common/src/lodash.js';\n\nimport { appendMany, removeById, replace, append, isSkater, isGoalie, isStaff, isPlayer, isNotSuspended, removeByIds } from '../util/index.js';\n\nimport {\n LINEUP_UPDATED,\n ADD_MEMBER_TO_LINEUP,\n ADD_MEMBERS_TO_LINEUP,\n REMOVE_MEMBER_FROM_LINEUP,\n REMOVE_MEMBERS_FROM_LINEUP,\n LINEUP_EXTRA_ADDED,\n LINEUP_EXTRA_REMOVED,\n CLEAR_LINEUP,\n RESTORE_LINEUP,\n LINEUP_APPROVED,\n EDIT_LINEUP_MEMBER,\n THROWS_INNINGS_UPDATED,\n SCORESHEET_RESET,\n} from '../actions/index.js';\n\nconst LOAD_GAME = 'LOAD_GAME';\n\nconst initialState = {\n teamId: null,\n members: [],\n extras: [],\n approval: null\n}\n\nexport const throwsInnings = (state = [], action) => {\n if (action.type === SCORESHEET_RESET) return [];\n if (action.type !== THROWS_INNINGS_UPDATED) return state;\n const { throwsInnings, teamId } = action.payload.event\n\n const hasThrowsInnings = player => player.throws != null || player.inningsPitched != null\n\n return [...throwsInnings.filter(hasThrowsInnings), ...state.filter(player => player.teamId != teamId)]\n}\n\nconst selectStarter = (members, participantId, override) => {\n const goalies = members.filter(member => isGoalie(member) && isNotSuspended(member));\n const currentStarter = goalies.find(member => member.isStarter && isNotSuspended(member));\n\n let nextStarter;\n if (currentStarter) {\n nextStarter = currentStarter.participantId;\n }\n if (participantId && (!currentStarter || override)) {\n nextStarter = participantId;\n }\n if (!nextStarter && goalies.length > 0) {\n nextStarter = goalies[0].participantId;\n }\n\n return members.map(member => {\n if (!isGoalie(member)) {\n member.isStarter = false;\n } else {\n member.isStarter = member.participantId === nextStarter;\n }\n return member;\n })\n}\n\nconst lineup = (state = initialState, action, teamId) => {\n switch (action.type) {\n case LOAD_GAME: {\n return {\n ...state,\n teamId\n }\n }\n\n case LINEUP_UPDATED: {\n const lineup = action.payload.event;\n\n let members = uniqBy(lineup.members, 'participantId')\n members = selectStarter(members);\n\n return {\n ...state,\n ...lineup,\n members,\n }\n }\n\n case ADD_MEMBER_TO_LINEUP: {\n const { member } = action.payload;\n if (!member) return state;\n\n let members = replace(state.members, member.participantId, member, 'participantId')\n members = selectStarter(members, member.participantId);\n\n return {\n ...state,\n teamId,\n members,\n }\n }\n\n case REMOVE_MEMBER_FROM_LINEUP: {\n const { member } = action.payload;\n if (!member) return state;\n\n let members = removeById(state.members, member.participantId, 'participantId')\n members = selectStarter(members);\n\n return {\n ...state,\n members,\n }\n }\n\n case EDIT_LINEUP_MEMBER: {\n const { member } = action.payload;\n if (!member) return state;\n\n const isStarter = isGoalie(member) && member.isStarter && isNotSuspended(member);\n let members = replace(state.members, member.participantId, member, 'participantId')\n members = selectStarter(members, isStarter ? member.participantId : undefined, isStarter);\n\n return {\n ...state,\n members,\n }\n }\n\n case ADD_MEMBERS_TO_LINEUP: {\n let members = appendMany(state.members, action.payload.members, 'participantId');\n members = selectStarter(members);\n\n return {\n ...state,\n members,\n }\n }\n\n case REMOVE_MEMBERS_FROM_LINEUP: {\n let { members } = action.payload;\n if (!members) return state;\n\n const memberIds = members.map(member => member.participantId)\n members = removeByIds(state.members, memberIds, 'participantId')\n members = selectStarter(members)\n\n return {\n ...state,\n members,\n }\n }\n\n case LINEUP_EXTRA_ADDED: {\n return {\n ...state,\n extras: append(state.extras, action.payload.event.member, 'participantId'),\n }\n }\n\n case LINEUP_EXTRA_REMOVED: {\n let members = removeById(state.members, action.payload.event.participantId, 'participantId')\n members = selectStarter(members);\n\n return {\n ...state,\n members,\n extras: removeById(state.extras, action.payload.event.participantId, 'participantId'),\n }\n }\n\n case CLEAR_LINEUP: {\n const { type } = action.payload;\n const members = !type ? [] : state.members.filter(member => {\n if (type === 'Player') return !isPlayer(member);\n if (type === 'Skater') return !isSkater(member);\n if (type === 'Goalie') return !isGoalie(member);\n if (type === 'Staff') return !isStaff(member);\n return true;\n })\n return {\n ...state,\n members,\n }\n }\n\n case RESTORE_LINEUP: {\n return action.payload.lineup;\n }\n\n case LINEUP_APPROVED: {\n const { event, timestamp } = action.payload;\n return {\n ...state,\n approval: {\n timestamp,\n ...event\n }\n }\n }\n\n default: {\n return state;\n }\n }\n}\n\nexport default (state = {}, action) => {\n switch (action.type) {\n case LOAD_GAME: {\n const { homeTeamId, awayTeamId } = action.payload;\n return {\n [homeTeamId]: lineup(state[homeTeamId], action, homeTeamId),\n [awayTeamId]: lineup(state[awayTeamId], action, awayTeamId)\n }\n }\n\n case LINEUP_UPDATED:\n case LINEUP_APPROVED:\n case LINEUP_EXTRA_ADDED:\n case LINEUP_EXTRA_REMOVED: {\n const { teamId } = action.payload.event;\n return {\n ...state,\n [teamId]: lineup(state[teamId], action, teamId)\n }\n }\n\n case ADD_MEMBER_TO_LINEUP:\n case ADD_MEMBERS_TO_LINEUP:\n case EDIT_LINEUP_MEMBER:\n case REMOVE_MEMBER_FROM_LINEUP:\n case REMOVE_MEMBERS_FROM_LINEUP:\n case RESTORE_LINEUP:\n case CLEAR_LINEUP: {\n const { teamId } = action.payload;\n return {\n ...state,\n [teamId]: lineup(state[teamId], action, teamId)\n }\n }\n\n case SCORESHEET_RESET: {\n return {};\n }\n\n default:\n return state;\n }\n}\n","import { cloneDeep } from '@hisports/common/src/lodash.js';\n\nimport {\n SETTINGS_UPDATED,\n GAME_STARTED,\n GAME_ENDED,\n NOTES_UPDATED,\n SCORESHEET_APPROVED,\n SCORESHEET_DISAPPROVED,\n GAME_FORFEITED,\n SCORESHEET_CERTIFIED,\n SCORESHEET_DECERTIFIED,\n SCORESHEET_RESET,\n} from '../actions/index.js'\nimport { DEFAULT_SETTINGS, SCHEDULED, STARTED, ENDED, APPROVED, CERTIFIED } from '../constants.js';\n\nexport const startTime = (state = null, action) => {\n if (action.type === SCORESHEET_RESET) return null;\n if (action.type !== GAME_STARTED) return state;\n return action.payload.timestamp;\n}\n\nexport const endTime = (state = null, action) => {\n if (action.type === SCORESHEET_RESET) return null;\n if (action.type !== GAME_ENDED) return state;\n return action.payload.timestamp;\n}\n\nexport const status = (state = SCHEDULED, action) => {\n switch (action.type) {\n case GAME_STARTED:\n case SCORESHEET_DISAPPROVED:\n return STARTED;\n\n case GAME_ENDED: {\n if ([CERTIFIED, APPROVED].includes(state)) return state;\n return ENDED;\n }\n\n case GAME_FORFEITED:\n case SCORESHEET_APPROVED:\n case SCORESHEET_DECERTIFIED:\n return APPROVED;\n\n case SCORESHEET_CERTIFIED:\n return CERTIFIED;\n\n case SCORESHEET_RESET:\n return SCHEDULED;\n\n default:\n return state\n }\n}\n\nexport const forfeit = (state = null, action) => {\n switch (action.type) {\n case GAME_FORFEITED:\n return action.payload.event.teamId;\n\n case SCORESHEET_RESET:\n case SCORESHEET_DISAPPROVED:\n return null;\n\n default:\n return state;\n }\n}\n\nexport const notes = (state = '', action) => {\n if (action.type === SCORESHEET_RESET) return '';\n\n if (action.type === NOTES_UPDATED && typeof action.payload.event.notes === 'string') {\n return action.payload.event.notes;\n }\n\n if (action.type === GAME_FORFEITED) {\n const { notes } = action.payload.event;\n // if no note specified, noop\n if (!notes || !notes.length) return state;\n\n // if no existing state, use forfeit note\n if (!state || !state.length) return notes;\n\n // otherwise append to existing state\n return `${state}\\n\\n${notes}`;\n }\n\n return state;\n}\n\nexport const adminNotes = (state = '', action) => {\n if (action.type === SCORESHEET_RESET) return '';\n\n if (action.type === NOTES_UPDATED && typeof action.payload.event.adminNotes === 'string') {\n return action.payload.event.adminNotes;\n }\n\n if (action.type === GAME_FORFEITED) {\n const { adminNotes } = action.payload.event;\n // if no note specified, noop\n if (!adminNotes || !adminNotes.length) return state;\n\n // if no existing state, use forfeit admin note\n if (!state || !state.length) return adminNotes;\n\n // otherwise append to existing state\n return `${state}\\n\\n${adminNotes}`;\n }\n\n return state;\n}\n\nexport const unreviewed = (state = null, action) => {\n switch (action.type) {\n case SCORESHEET_APPROVED:\n return action.payload.event.unreviewed || null;\n case SCORESHEET_DISAPPROVED:\n return null;\n case SCORESHEET_RESET:\n return null;\n default:\n return state;\n }\n}\n\nexport const settings = (state = cloneDeep(DEFAULT_SETTINGS), action) => {\n switch (action.type) {\n case GAME_STARTED:\n if (!action.payload.event.periods) return state;\n return {\n ...state,\n periods: action.payload.event.periods\n }\n case SETTINGS_UPDATED:\n return {\n ...state,\n ...action.payload.event\n };\n case SCORESHEET_RESET:\n return cloneDeep(DEFAULT_SETTINGS);\n default:\n return state;\n }\n}\n","import { v5 as v5uuid } from 'uuid';\nimport { OFFICIAL_ADDED, OFFICIAL_UPDATED, OFFICIAL_REMOVED, OFFICIAL_ASSIGNED, OFFICIAL_REQUESTED, OFFICIAL_ACCEPTED, OFFICIAL_DECLINED, GAME_RESCHEDULED, SCORESHEET_APPROVED, GAME_FORFEITED, OFFICIAL_DELEGATED, KEEPERS_UPDATED } from \"../actions/index.js\";\nimport { OFFICIAL_STATUS_CONFIRMED, OFFICIAL_STATUS_ASSIGNED, OFFICIAL_STATUS_REQUESTED, OFFICIAL_STATUS_DECLINED, OFFICIAL_STATUS_NO_SHOW, SCHEDULED, SCOREKEEPER, TIMEKEEPER } from \"../constants.js\";\nimport { append, update, replace, convertOfficialPositions, removeById } from \"../util/index.js\";\n\nexport default (state = [], action, scoresheet, prevScoresheet) => {\n switch (action.type) {\n case OFFICIAL_DELEGATED: {\n const { officialId, position, officeId, payOfficeId, feesId } = action.payload.event;\n\n const existing = state.find(official => official.id === officialId);\n if (existing && !existing.participant && !officeId) return removeById(state, officialId)\n\n const payload = official => ({ ...official, id: officialId, position, officeId, payOfficeId, feesId })\n\n return replace(state, officialId, payload)\n }\n\n case OFFICIAL_REQUESTED: {\n const { official, position, notes } = action.payload.event;\n\n // request is ignored if official already exists (assigned/requested)\n const exists = state.some(\n position => position.participantId === official.participantId\n )\n if (exists) return state;\n\n const payload = {\n id: official.id || official.participant.id,\n participantId: official.participantId,\n participant: official.participant,\n position,\n status: OFFICIAL_STATUS_REQUESTED,\n notes,\n }\n\n return append(state, payload, 'participantId')\n }\n\n case OFFICIAL_ASSIGNED: {\n const { official, position, notes } = action.payload.event;\n const { id, participantId, participant } = official;\n\n const payload = official => ({\n ...official,\n id: id || participant.id,\n participantId: participantId,\n participant: participant,\n position,\n status: OFFICIAL_STATUS_ASSIGNED,\n notes\n })\n\n // remove existing requests\n const filtered = state.filter(entity => entity.participantId != official.participantId || entity.id == official.id)\n\n // add/update new assignment\n return replace(filtered, id, payload)\n }\n\n case OFFICIAL_ACCEPTED: {\n const { participantId, notes } = action.payload.event;\n\n const payload = official => {\n if (!official) return;\n return {\n ...official,\n status: OFFICIAL_STATUS_CONFIRMED,\n notes,\n }\n }\n\n // replace will ignore if not exists (empty append) and ensure only one position exists\n return replace(state, participantId, payload, 'participantId')\n }\n\n case OFFICIAL_ADDED: {\n let { official, positions, position, officeId, feesId, notes, signature } = action.payload.event;\n const { id, participantId, participant } = official;\n\n if (Array.isArray(positions)) {\n position = convertOfficialPositions(positions);\n }\n\n // silently ignore if participant has that position already\n const exists = participantId && state.some(entity => entity.participantId === participantId && entity.position === position)\n if (exists) return state\n\n const payload = official => ({\n ...official,\n id: id || participant.id,\n participantId: participantId,\n participant: participant,\n position,\n officeId,\n feesId,\n status: OFFICIAL_STATUS_CONFIRMED,\n notes,\n signature,\n })\n\n // add/update new assignment\n return replace(state, id, payload)\n }\n\n case OFFICIAL_DECLINED: {\n const { participantId, notes, removed } = action.payload.event;\n\n const payload = official => {\n if (!official) return;\n return {\n ...official,\n status: OFFICIAL_STATUS_DECLINED,\n notes,\n }\n }\n\n // replace will ignore if not exists (empty append) and ensure only one position exists\n if (!removed) return replace(state, participantId, payload, 'participantId')\n // falls through if removed is true\n }\n\n case OFFICIAL_REMOVED: {\n const { participantId, officialId, isNoShow } = action.payload.event;\n\n return state.map(official => {\n const isAssignmentOrRequest = officialId ? (official.id && official.id === officialId) : (official.participantId && official.participantId === participantId)\n const isDelegatedAssignment = official.officeId\n\n if (!isAssignmentOrRequest) return official\n\n if (isNoShow) return { ...official, status: OFFICIAL_STATUS_NO_SHOW }\n\n if (!isDelegatedAssignment) return\n\n const { id, officeId, payOfficeId, feesId, position } = { ...official }\n return { id, officeId, payOfficeId, feesId, position }\n }).filter(Boolean)\n }\n\n case OFFICIAL_UPDATED: {\n let { participantId, officialId, positions, position, status } = action.payload.event;\n\n if (Array.isArray(positions)) {\n position = convertOfficialPositions(positions);\n }\n\n const changes = {}\n if (position) changes.position = position;\n if (status) changes.status = status;\n\n if (participantId) {\n return update(state, participantId, changes, 'participantId')\n } else {\n return update(state, officialId, changes);\n }\n }\n\n case KEEPERS_UPDATED: {\n const { scorekeeper, timekeeper } = action.payload.event;\n\n return [\n { fullName: scorekeeper, position: SCOREKEEPER },\n { fullName: timekeeper, position: TIMEKEEPER }\n ].reduce((state, { fullName, position, signature = null }) => {\n // event id + position to always generate the same official id\n const id = v5uuid(position, action.payload.id)\n const [ firstName, lastName ] = (fullName || '').split(' ')\n const payload = {\n id,\n position,\n ...(fullName ? {\n participant: {\n fullName,\n firstName,\n lastName\n }\n } : {}),\n status: OFFICIAL_STATUS_CONFIRMED,\n signature\n }\n\n return replace(state, position, payload, 'position');\n }, state)\n }\n\n case SCORESHEET_APPROVED: {\n const { officials: approvals = [], timekeeper, scorekeeper } = action.payload.event;\n\n return state.map(official => {\n const approval = approvals.find(approval => {\n if (approval.officialId == official.id && official.id != null) return true;\n if (approval.participantId == official.participantId && official.participantId != null) return true;\n return false;\n })\n if (approval && approval.signature) {\n official.signature = approval.signature;\n } else if (official.position === SCOREKEEPER && scorekeeper) {\n official.signature = scorekeeper.signature\n } else if (official.position === TIMEKEEPER && timekeeper) {\n official.signature = timekeeper.signature\n }\n return official;\n })\n }\n\n case GAME_RESCHEDULED: {\n const { startTime, arenaId } = action.payload.event;\n\n // skip confirmation reset if time or surface didn't change\n // this will ignore changes to only status, endTime, home/awayTeamId, comments\n if (!(startTime || arenaId)) return state;\n\n return state.map(official => {\n if (official.status === OFFICIAL_STATUS_CONFIRMED) {\n official.status = OFFICIAL_STATUS_ASSIGNED;\n }\n return official;\n })\n }\n\n case GAME_FORFEITED: {\n // remove all officials from the scoresheet when a game is forfeited but not yet started\n if (prevScoresheet.status !== SCHEDULED) return state;\n return []\n }\n\n default:\n return state;\n }\n}\n","import {\n PENALTY_STARTED,\n PENALTY_ENDED,\n PENALTY_EDITED,\n PENALTY_DELETED,\n SCORESHEET_RESET,\n} from '../actions/index.js';\n\nimport { append, update, replace, removeById } from '../util/index.js';\n\nconst toPenalty = (event, meta = {}) => ({\n isEnded: false,\n ...meta,\n ...event\n})\n\nexport default (state = [], action, scoresheet) => {\n switch (action.type) {\n case PENALTY_STARTED: {\n const { id, event: penalty } = action.payload;\n\n return append(state, toPenalty(penalty, { id }))\n }\n\n case PENALTY_ENDED: {\n const { penaltyId, endTime } = action.payload.event;\n\n return update(state, penaltyId, {\n isEnded: true,\n endTime\n })\n }\n\n case PENALTY_EDITED: {\n const { penaltyId, ...penalty } = action.payload.event;\n\n return replace(state, penaltyId, original => toPenalty(penalty, {\n id: penaltyId,\n isEnded: original && original.isEnded || false,\n endTime: penalty.endTime\n }));\n }\n\n case PENALTY_DELETED: {\n const { penaltyId } = action.payload.event;\n\n return removeById(state, penaltyId)\n }\n\n case SCORESHEET_RESET: {\n return [];\n }\n\n default:\n return state;\n }\n}\n","import { uniqBy } from '@hisports/common/src/lodash.js';\nimport {\n LINEUP_UPDATED, SCORESHEET_RESET,\n} from '../actions/index.js';\n\nexport default (state = [], action) => {\n switch (action.type) {\n case LINEUP_UPDATED: {\n const lineup = action.payload.event;\n\n const members = uniqBy(lineup.members, 'participantId')\n\n // replacing suspensions for the current team members that are serving\n return members.reduce((purges, member) => {\n if (!member.suspension || !member.suspension.id || !member.suspension.purgeId) return purges\n const purge = {\n id: member.suspension.purgeId,\n teamId: lineup.teamId,\n participantId: member.participantId,\n suspensionId: member.suspension.id,\n }\n return [...purges, purge]\n }, [...state].filter(suspension => suspension.teamId !== lineup.teamId))\n }\n case SCORESHEET_RESET: {\n return [];\n }\n\n default:\n return state;\n }\n}\n","import { GAME_FORFEITED, SCORESHEET_RESET, SCORE_UPDATED } from \"../actions/index.js\";\n\nexport default (state = null, action) => {\n switch (action.type) {\n case SCORE_UPDATED: {\n if (action.payload.event.score == null) return state;\n return action.payload.event.score;\n }\n case GAME_FORFEITED: {\n if (action.payload.event.score == null) return state;\n return action.payload.event.score;\n }\n case SCORESHEET_RESET: {\n return null;\n }\n\n default:\n return state;\n }\n}\n","import { byParticipantId, byTeamId } from '../util/index.js'\n\nexport const getThrowsInnings = (state, { teamId, participantId } = {}) => {\n if (!state) return [];\n const throwsInnings = state.throwsInnings || [];\n if (teamId) {\n return throwsInnings.filter(byTeamId(teamId))\n }\n if (participantId) {\n return throwsInnings.find(byParticipantId(participantId))\n }\n return throwsInnings;\n}\n","import { getPeriods } from './index.js';\nimport { byTeamId, byParticipantId, calculateEndTime, getInfractionType, getSeverity, isTimed, requiresIncidentReport, sortPenalties } from '../util/index.js';\n\n/**\n * Get all penalties for a game with optional filters\n * @param {object} state\n * @param {Array} infractions\n * @param {Array|object} types\n * @param {string} sport\n * @param {string} seasonId\n * @param {object} [filters]\n * @param {number|string} [filters.teamId]\n * @param {number|string} [filters.participantId]\n * @param {string[]} [filters.infractionIds]\n * @param {string[]} [filters.optionIds]\n * @param {string[]} [filters.accumulationIds]\n * @param {boolean} [filters.hideEnded]\n * @param {boolean} [filters.hideNonTimed]\n * @param {boolean} [filters.requireIncidentReport]\n */\nexport const getPenalties = (state, infractions, types, sport, seasonId, {\n teamId = null,\n participantId = null,\n infractionIds = null,\n optionIds = null,\n accumulationIds = null,\n severities = null,\n hideEnded = false,\n hideNonTimed = false,\n requireIncidentReport = false\n} = {}) => {\n if (!state || !state.penalties) return [];\n let penalties = [...state.penalties];\n\n penalties.forEach(penalty => {\n // calculate penalty end time if missing\n if (penalty.startTime && !penalty.endTime && types) {\n const infractionType = getInfractionType(penalty, infractions, types, seasonId)\n if (infractionType) {\n penalty.endTime = calculateEndTime(penalty.startTime, infractionType, penalty.period)\n }\n }\n\n // set the duration id as the infraction id if its missing\n if (!penalty.duration) {\n penalty.duration = penalty.infraction;\n }\n })\n\n // apply optional filters\n if (teamId) {\n penalties = penalties.filter(byTeamId(teamId));\n }\n if (participantId) {\n penalties = penalties.filter(byParticipantId(participantId));\n }\n if (infractionIds) {\n penalties = penalties.filter(penalty => infractionIds.includes(penalty.infractionId))\n }\n if (optionIds) {\n penalties = penalties.filter(penalty => optionIds.includes(penalty.optionId))\n }\n if (accumulationIds) {\n penalties = penalties.filter(penalty => optionIds.includes(penalty.accumulationId))\n }\n if (requireIncidentReport) {\n penalties = penalties.filter(penalty => {\n const infractionType = getInfractionType(penalty, infractions, types, seasonId);\n const severity = getSeverity(penalty, infractions, types, seasonId)\n return requiresIncidentReport(infractionType, severity)\n });\n }\n if (severities) {\n penalties = penalties.filter(penalty => {\n const severity = getSeverity(penalty, infractions, types, seasonId)\n return severities.includes(severity)\n });\n }\n if (hideEnded) {\n penalties = penalties.filter(penalty => !penalty.isEnded);\n }\n if (hideNonTimed) {\n penalties = penalties.filter(penalty => {\n const infractionType = getInfractionType(penalty, infractions, types, seasonId);\n return isTimed(infractionType)\n });\n }\n\n return sortPenalties(penalties, sport)\n}\n\nexport const getPenaltyById = (state, infractions, types, sport, seasonId, { penaltyId }) => {\n const penalties = getPenalties(state, infractions, types, sport, seasonId);\n return penalties.find(penalty => penalty.id == penaltyId);\n}\n\nexport const getRecalculatedPenalty = (state, infractions, types, sport, seasonId, { penaltyId, startTime }) => {\n const penalty = getPenaltyById(state, infractions, types, sport, seasonId, { penaltyId })\n if (!penalty) return;\n\n const periods = getPeriods(state);\n const infractionType = getInfractionType(penalty, infractions, types, seasonId)\n const endTime = calculateEndTime(startTime, infractionType, periods);\n return {\n ...penalty,\n startTime,\n endTime,\n }\n}\n","import { byParticipantId, byTeamId } from '../util/index.js'\nimport { getLineupGoalies } from './lineups.js';\n\nexport const getGoalieChanges = (state, { teamId, includeStarters = false } = {}) => {\n if (!state) return [];\n let goalies = state.goalies || [];\n if (!includeStarters) {\n goalies = goalies.filter(goalie => !goalie.isStarter);\n }\n if (teamId) {\n goalies = goalies.filter(byTeamId(teamId));\n }\n return goalies;\n}\n\nexport const getGoalie = (state, { teamId = null } = {}) => {\n if (!state || !teamId) return;\n const goalies = getGoalieChanges(state, { teamId, includeStarters: true })\n if (!goalies.length) return;\n return goalies[goalies.length - 1];\n}\n\nexport const getShots = (state, { teamId, participantId } = {}) => {\n if (!state) return [];\n const shots = state.shots || [];\n if (teamId) {\n return shots.filter(byTeamId(teamId))\n }\n if (participantId) {\n return shots.find(byParticipantId(participantId))\n }\n return shots;\n}\n\nconst setupTotals = (teamId, shots) => goalie => {\n const goalieShots = shots.find(g => g.participantId == goalie.participantId)\n return {\n ...goalie,\n teamId,\n totals: goalieShots ? goalieShots.totals : [null, null, null, null],\n }\n}\n\nexport const getGoaliesShots = (state, game, sport) => {\n const shots = getShots(state);\n const homeGoalies = getLineupGoalies(state, { teamId: game.homeTeamId, affiliatesLast: false, sport })\n const awayGoalies = getLineupGoalies(state, { teamId: game.awayTeamId, affiliatesLast: false, sport })\n\n return [\n ...homeGoalies.map(setupTotals(game.homeTeamId, shots)),\n ...awayGoalies.map(setupTotals(game.awayTeamId, shots)),\n ]\n}\n","import { isSuspended } from \"../util/index.js\";\nimport { getLineup, getMembers } from \"./lineups.js\";\n\nexport const hasUnselectedSuspendedPlayers = (scoresheet, team, memberValidations = [], sport) => {\n const lineup = getLineup(scoresheet, { teamId: team.id })\n if (!lineup) return false;\n\n // get all members including the non rostered ones\n const members = getMembers(lineup, team, sport)\n\n return members.some(member => {\n const memberValidation = memberValidations.find(({ participantId }) => participantId === member.participantId);\n const isInvalid = memberValidation && memberValidation.invalidMemberTypes && memberValidation.invalidMemberTypes.length > 0;\n const hasSuspension = isSuspended(member) || (memberValidation && memberValidation.suspensions && memberValidation.suspensions.length);\n const isInLineup = lineup.members.find(lineupMember => lineupMember.participantId === member.participantId);\n\n return hasSuspension && !isInLineup && !isInvalid\n })\n}\n","import { cloneDeep } from '@hisports/common/src/lodash.js';\n\nimport { isEmpty } from '@hisports/parsers';\n\nimport {\n DEFAULT_SETTINGS,\n EVENT_TYPE_GOAL,\n EVENT_TYPE_PENALTY,\n EVENT_TYPE_GOALIE,\n THIRD_PERIOD,\n OVERTIME_PERIOD,\n SHOOTOUT_PERIOD,\n} from '../constants.js';\nimport { getGoals } from './goals.js';\nimport { getPenalties } from './penalties.js'\nimport { getGoalieChanges } from './goalies.js';\nimport { compareTime } from '../util/index.js';\n\nexport * from './meta.js';\nexport * from './pregame.js';\nexport * from './lineups.js';\nexport * from './goals.js';\nexport * from './penalties.js';\nexport * from './suspensions.js';\nexport * from './goalies.js';\nexport * from './flags.js';\nexport * from './purges.js';\nexport * from './baseball.js';\n\nconst setEventType = eventType => event => Object.assign({}, event, { eventType });\n\nexport const getSummary = (state, infractions, types, sport, seasonId) => {\n if (!state) return [];\n const goals = getGoals(state, sport);\n const penalties = getPenalties(state, infractions, types, sport, seasonId);\n const goalieChanges = getGoalieChanges(state);\n const summary = [\n ...goals.map(setEventType(EVENT_TYPE_GOAL)),\n ...penalties.map(setEventType(EVENT_TYPE_PENALTY)),\n ...goalieChanges.map(setEventType(EVENT_TYPE_GOALIE))\n ]\n\n summary.sort((a, b) => compareTime(a.gameTime, b.gameTime, sport))\n\n return summary;\n}\n\nexport const getSettings = (state) => {\n if (!state || !state.settings) return cloneDeep(DEFAULT_SETTINGS);\n return state.settings;\n}\n\nexport const getPeriods = (state) => {\n const settings = getSettings(state);\n return settings.periods;\n}\n\nexport const getPeriod = (state, period) => {\n const periods = getPeriods(state);\n return periods[period - 1];\n}\n\nexport const isInLastMinutes = (state, gameTime, sport, minutes = 10) => {\n if (sport !== 'Hockey') return false;\n if (isEmpty(gameTime)) return false;\n if ([OVERTIME_PERIOD, SHOOTOUT_PERIOD].includes(gameTime.period)) return true;\n\n const lastPeriod = getPeriod(state, THIRD_PERIOD);\n if (!lastPeriod) return true; // if no period 3, assume in last minutes\n\n return gameTime.minutes >= lastPeriod.minutes - minutes;\n}\n","import { keyBy, uniqBy } from '@hisports/common/src/lodash.js';\n\nimport { hasPosition, isStaff, isPlayer, isGoalie, isSkater, isStarterGoalie, isNotSuspended, isAffiliate, isSuspended } from '../util/members.js';\nimport { HEAD_COACH, ASSISTANT_COACH, MANAGER, SAFETY_PERSON, MEMBER_POSITIONS } from '../constants.js';\nimport { byParticipantId } from '../util/index.js';\nimport { getOfficials } from './pregame.js';\n\nexport const getLineup = (state, { teamId }) => {\n if (!state) return null;\n return state.lineups[teamId];\n}\n\nexport const isParticipantInLineup = (state, { participantId, teamId }) => {\n const lineup = getLineup(state, { teamId })\n if (!lineup) return false;\n\n return lineup.members.some(byParticipantId(participantId));\n}\n\nconst isManager = hasPosition('Manager')\nconst isHeadCoach = hasPosition('Head Coach')\nconst isAssistantCoach = hasPosition('Assistant Coach')\n\nexport const compareLineupMembers = (a, b, affiliatesLast = true, sport) => {\n if (a && !b) return -1;\n if (!a && b) return 1;\n if (!a && !b) return 0;\n\n // sort suspensions to end\n if (isSuspended(a) && !isSuspended(b)) return 1;\n if (!isSuspended(a) && isSuspended(b)) return -1;\n\n if (affiliatesLast) {\n // then sort affiliates to end\n if (isAffiliate(a) && !isAffiliate(b)) return 1;\n if (!isAffiliate(a) && isAffiliate(b)) return -1;\n }\n\n // then sort staff to end\n if (isStaff(a) && !isStaff(b)) return 1;\n if (!isStaff(a) && isStaff(b)) return -1;\n if (isStaff(a) && isStaff(b)) {\n if (isManager(a) && !isManager(b)) return -1;\n if (!isManager(a) && isManager(b)) return 1;\n\n if (isHeadCoach(a) && !isHeadCoach(b)) return -1;\n if (!isHeadCoach(a) && isHeadCoach(b)) return 1;\n\n if (isAssistantCoach(a) && !isAssistantCoach(b)) return -1;\n if (!isAssistantCoach(a) && isAssistantCoach(b)) return 1;\n }\n\n // then sort goalies to end\n if (isGoalie(a) && !isGoalie(b)) return 1;\n if (!isGoalie(a) && isGoalie(b)) return -1;\n\n if (sport === \"Soccer\") return a.participant.lastName.localeCompare(b.participant.lastName);\n\n if (sport === \"Hockey\") {\n // then sort unnumbered members to end\n if (a.number && !b.number) return -1;\n if (!a.number && b.number) return 1;\n\n // then sort by number\n if (Number(a.number) < Number(b.number)) return -1;\n if (Number(a.number) > Number(b.number)) return 1;\n\n // then sort by name\n return a.participant.fullName.localeCompare(b.participant.fullName);\n }\n\n if (sport === \"Baseball\") {\n // then sort members with no batting order to end\n if (a.battingOrder && !b.battingOrder) return -1;\n if (!a.battingOrder && b.battingOrder) return 1;\n\n // then sort by batting order\n if (a.battingOrder && b.battingOrder) return Number(a.battingOrder) - Number(b.battingOrder);\n\n // then sort unnumbered members to end\n if (a.number && !b.number) return -1;\n if (!a.number && b.number) return 1;\n\n // then sort by number\n if (Number(a.number) < Number(b.number)) return -1;\n if (Number(a.number) > Number(b.number)) return 1;\n\n // then sort by name\n return a.participant.fullName.localeCompare(b.participant.fullName);\n }\n}\n\nexport const getLineupMembers = (state, { teamId, showSuspended = false, affiliatesLast = true, sport, hideUnsaved = false }) => {\n const lineup = getLineup(state, { teamId });\n if (!lineup) return [];\n\n let members = lineup.members\n\n if (!showSuspended) {\n members = members.filter(isNotSuspended)\n }\n\n if (hideUnsaved) {\n members = members.filter(member => member.unsaved !== true)\n }\n\n members = members.sort((a, b) => compareLineupMembers(a, b, affiliatesLast, sport))\n\n return members;\n}\n\nexport const getMembers = (lineup, team, sport, registrations = [], affiliatesLast = true) => {\n const lineupMembers = lineup && lineup.members || [] // selected members\n const rosterMembers = team && team.members || [] // carded members\n const affiliates = team && team.affiliates || [] // admin-added affiliates\n const lineupExtras = lineup && lineup.extras || [] // scoresheet-added extras\n const suspendedExtras = team && team.suspendedExtras || [] // previously suspended extras\n\n const members = uniqBy([\n ...lineupMembers,\n ...rosterMembers,\n ...affiliates,\n ...lineupExtras,\n ...suspendedExtras,\n ], 'participantId')\n members.sort((a, b) => compareLineupMembers(a, b, affiliatesLast, sport))\n\n if (!registrations || !registrations.length) return members;\n return uniqBy([...members, ...registrations], 'participantId')\n}\n\nexport const getLineupPlayers = (state, { teamId, showSuspended, affiliatesLast, sport, hideUnsaved }) => {\n const members = getLineupMembers(state, { teamId, showSuspended, affiliatesLast, sport, hideUnsaved })\n return members.filter(isPlayer);\n}\n\nexport const getLineupSkaters = (state, { teamId = null, showSuspended, affiliatesLast, sport }) => {\n const members = getLineupMembers(state, { teamId, showSuspended, affiliatesLast, sport })\n return members.filter(isSkater);\n}\n\nexport const getLineupGoalies = (state, { teamId = null, showSuspended, affiliatesLast, sport }) => {\n const members = getLineupMembers(state, { teamId, showSuspended, affiliatesLast, sport })\n return members.filter(isGoalie);\n}\n\nexport const getLineupStaff = (state, { teamId, showSuspended, affiliatesLast, sport }) => {\n if (!teamId) return getGameLineupStaff(state, sport);\n const members = getLineupMembers(state, { teamId, showSuspended, affiliatesLast, sport })\n return members.filter(isStaff);\n}\n\nexport const getGameLineupStaff = (state, sport) => {\n const members = Object.keys(state.lineups).reduce((members, teamId) => {\n const lineupMembers = getLineupMembers(state, { teamId, sport })\n members.push(...lineupMembers)\n return members\n }, [])\n return members.filter(isStaff);\n}\n\nexport const getLineupExtras = (state, { teamId, showSuspended = false }) => {\n const lineup = getLineup(state, { teamId });\n if (!lineup) return [];\n\n let extras = lineup.extras || [];\n\n if (!showSuspended) {\n extras = extras.filter(isNotSuspended)\n }\n\n return extras;\n}\n\nexport const getGameMembers = (state, { showSuspended = false, includeExtras = false } = {}) => {\n if (!state) return {};\n const teamIds = Object.keys(state.lineups);\n return teamIds\n .map(teamId => {\n return [\n ...getLineupMembers(state, { teamId, showSuspended }),\n ...(includeExtras ? getLineupExtras(state, { teamId, showSuspended }) : [])\n ]\n })\n .reduce((members, lineup) => ({\n ...members,\n ...keyBy(lineup, 'participantId')\n }), {});\n}\n\nexport const getLineupSignatory = (state, { teamId, participantId, includeOtherTeamStaff = false, sport }) => {\n const staff = includeOtherTeamStaff ? getGameLineupStaff(state, sport) : getLineupStaff(state, { teamId, sport });\n const officials = getOfficials(state, { assignedOnly: true })\n const signers = [...staff, ...officials]\n if (!signers.length) return null\n\n // if it's already signed, return the original signatory\n const approval = getLineupApproval(state, { teamId });\n if (approval) {\n const signatory = signers.find(byParticipantId(approval.participantId));\n if (signatory) return signatory;\n }\n\n if (participantId) {\n const self = signers.find(member => member.participantId === participantId);\n return self;\n }\n\n // otherwise find the most suitable staff position to sign\n const headCoach = staff.find(hasPosition(HEAD_COACH));\n if (headCoach) return headCoach;\n\n const assistant = staff.find(hasPosition(ASSISTANT_COACH));\n if (assistant) return assistant;\n\n const manager = staff.find(hasPosition(MANAGER));\n if (manager) return manager;\n\n const safety = staff.find(hasPosition(SAFETY_PERSON));\n if (safety) return safety;\n\n return signers[0];\n}\n\nexport const getLineupCounts = (state, { teamId, showSuspended, sport }) => {\n const members = getLineupMembers(state, { teamId, showSuspended, sport });\n\n const totals = MEMBER_POSITIONS.reduce((totals, position) => {\n totals[position] = 0;\n return totals;\n }, {});\n totals.totalPlayer = 0;\n totals.totalSkater = 0;\n totals.totalStaff = 0;\n totals.totalStarterGoalie = 0;\n\n return members.reduce((total, member) => {\n member.positions.forEach(position => total[position]++);\n if (isPlayer(member)) total.totalPlayer++;\n if (isSkater(member)) total.totalSkater++;\n if (isStaff(member)) total.totalStaff++;\n if (isStarterGoalie(member)) total.totalStarterGoalie++;\n return total;\n }, totals);\n}\n\n// lineup/roster bench staff approvals\nexport const getLineupApproval = (state, { teamId }) => {\n const lineup = getLineup(state, { teamId });\n if (!lineup) return null;\n return lineup.approval;\n}\n\nexport const isLineupApproved = (state, { teamId }) => {\n const approval = getLineupApproval(state, { teamId });\n return !!approval;\n}\n","import { SCHEDULED, STARTED, ENDED, APPROVED, CERTIFIED } from '../constants.js';\nimport { getOfficials } from './pregame.js';\nimport { getPeriod } from './index.js';\n\nexport const getGameTime = (state) => {\n if (!state) return null;\n return state.gameTime;\n}\n\nexport const getDefaultGameEndTime = (state, sport) => {\n if (sport === 'Baseball') return { period: 7, half: 2 }\n if (sport !== 'Hockey') return {};\n\n const { period, minutes, seconds } = getGameTime(state);\n\n if (period === 'SO') return { period, minutes: 0, seconds: 0 };\n if (period === 'OT') return { period, minutes, seconds };\n\n // if period setting is 0:00, end game at previous period\n const lastPeriod = [3, 2, 1]\n .map(period => getPeriod(state, period))\n .find(period => period && !(period.minutes === 0 && period.seconds === 0))\n\n return { period: lastPeriod.period, minutes: 0, seconds: 0 }\n}\n\nexport const getGameStatus = (state) => {\n if (!state) return null;\n return state.status;\n}\n\nexport const isGameScheduled = (state) => {\n if (!state) return false;\n return getGameStatus(state) === SCHEDULED;\n}\n\nexport const isGameStarted = (state) => {\n if (!state) return false;\n return getGameStatus(state) === STARTED;\n}\n\nexport const isGameEnded = (state) => {\n if (!state) return false;\n return getGameStatus(state) === ENDED;\n}\n\n/**\n * Scoresheet status is scheduled, started or ended\n */\nexport const isGameActive = (state) => {\n if (!state) return false;\n return [SCHEDULED, STARTED, ENDED, null].includes(getGameStatus(state));\n}\n\nexport const isGameApproved = (state) => {\n if (!state) return false;\n return getGameStatus(state) === APPROVED;\n}\n\nexport const isGameCertified = (state) => {\n if (!state) return false;\n return getGameStatus(state) === CERTIFIED;\n}\n\n/**\n * Scoresheet status is approved or certified\n */\nexport const isGameCompleted = (state) => {\n if (!state) return false;\n return [APPROVED, CERTIFIED].includes(getGameStatus(state))\n}\n\n/**\n * Scoresheet status is ended, approved or certified\n */\nexport const isGameEndedOrCompleted = (state) => {\n if (!state) return false;\n return [ENDED, APPROVED, CERTIFIED].includes(getGameStatus(state));\n}\n\nexport const getNotes = (state) => {\n if (!state) return '';\n return state.notes;\n}\n\nexport const getAdminNotes = (state) => {\n if (!state) return '';\n return state.adminNotes;\n}\n\nexport const getForfeit = (state) => {\n if (!state) return null;\n return state.forfeit;\n}\n\n// officials approvals\nexport const getScoresheetApproval = (state) => {\n if (!state) return null;\n if (!isGameCompleted(state)) return null;\n\n if (state.approvals) return state.approvals; // legacy\n return {\n officials: getOfficials(state, { assignedOnly: true }),\n }\n}\n\nexport const isReviewed = (state) => {\n if (!state) return false;\n return !state.unreviewed;\n}\n","import { OFFICIAL_STATUS_ASSIGNED, OFFICIAL_STATUS_CONFIRMED, OFFICIAL_STATUS_DECLINED, OFFICIAL_STATUS_NO_SHOW, SCOREKEEPER, TIMEKEEPER } from '../constants.js';\nimport { isReferee, isLinesperson, isSupervisor, isKeeper, sortOfficials } from '../util/index.js';\n\nexport const getKeepers = (state) => {\n if (!state) return {};\n return getOfficials(state).filter(isKeeper)\n}\n\nexport const getGameScorekeeper = (state) => {\n const keepers = getKeepers(state);\n const scorekeeper = keepers.find(keeper => keeper.position === SCOREKEEPER)\n\n if (!scorekeeper || !scorekeeper.participant) return null;\n if (typeof scorekeeper === 'string') return scorekeeper;\n return scorekeeper.participant.fullName;\n}\n\nexport const getGameTimekeeper = (state) => {\n const keepers = getKeepers(state);\n const timekeeper = keepers.find(keeper => keeper.position === TIMEKEEPER)\n\n if (!timekeeper || !timekeeper.participant) return null;\n if (typeof timekeeper === 'string') return timekeeper;\n return timekeeper.participant.fullName;\n}\n\nexport const getOfficials = (state, { assignedOnly = false, noShowOnly = false, declinedOnly = false } = {}) => {\n if (!state) return [];\n const filters = []\n\n state.officials = sortOfficials(state.officials)\n\n if (assignedOnly) {\n filters.push(OFFICIAL_STATUS_ASSIGNED, OFFICIAL_STATUS_CONFIRMED)\n }\n if (noShowOnly) {\n filters.push(OFFICIAL_STATUS_NO_SHOW)\n }\n if (declinedOnly) {\n filters.push(OFFICIAL_STATUS_DECLINED)\n }\n\n if (!filters.length) return state.officials\n return state.officials.filter(official => filters.includes(official.status))\n}\n\nexport const getGameReferees = (state, { assignedOnly }) => {\n return getOfficials(state, { assignedOnly }).filter(isReferee);\n}\n\nexport const getGameLinespersons = (state, { assignedOnly }) => {\n return getOfficials(state, { assignedOnly }).filter(isLinesperson);\n}\n\nexport const getGameSupervisors = (state, { assignedOnly }) => {\n return getOfficials(state, { assignedOnly }).filter(isSupervisor);\n}\n\nexport const getOfficialsCount = (state, { assignedOnly = false }) => {\n const officials = getOfficials(state, { assignedOnly })\n const totals = {\n totalReferee: 0,\n totalLinesperson: 0,\n totalSupervisor: 0,\n }\n return officials.reduce((total, official) => {\n if (isReferee(official)) total.totalReferee++;\n if (isLinesperson(official)) total.totalLinesperson++;\n if (isSupervisor(official)) total.totalSupervisor++;\n return total;\n }, totals)\n}\n\nexport const isKeepersReady = (state, type = null) => {\n if (!state) return false;\n const scorekeeper = getGameScorekeeper(state)\n const timekeeper = getGameTimekeeper(state)\n\n if (type === SCOREKEEPER) return !!scorekeeper\n if (type === TIMEKEEPER) return !!timekeeper\n\n return !!scorekeeper && !!timekeeper\n}\n\nexport const isOfficialsReady = (state) => {\n if (!state) return false;\n const officials = getOfficials(state, { assignedOnly: true });\n // require at least one referee or one linesperson\n return officials.some(official => isReferee(official) || isLinesperson(official));\n}\n","/*\nSoccer: Home vs Away\nBaseball: Away @ Home\nHockey: Away @ Home\n*/\nexport const isHomeFirst = sport => {\n switch (sport) {\n case 'Soccer': return true\n case 'Baseball':\n case 'Hockey': return false\n default: return true\n }\n};\n","import { padStart } from '@hisports/common/src/lodash.js';\nimport {\n INITIAL_TIME,\n DEFAULT_SETTINGS,\n FIRST_PERIOD,\n SECOND_PERIOD,\n THIRD_PERIOD,\n OVERTIME_PERIOD,\n SHOOTOUT_PERIOD,\n} from '../constants.js';\n\nconst sanitize = (n, defaultValue) => {\n const sanitized = parseInt(n, 10);\n if (isNaN(sanitized)) return defaultValue;\n return sanitized;\n}\n\nconst sanitizeTime = time => ({\n period: time.period,\n minutes: sanitize(time.minutes, 20),\n seconds: sanitize(time.seconds, 0),\n})\n\nexport const stringifyTime = input => {\n const value = parseInt(input, 10);\n if (isNaN(value)) return;\n if (value >= 10) return input.toString();\n return padStart(input, 2, '0');\n};\n\nexport const stringifyGameTime = gameTime => {\n if (!gameTime || (!gameTime.minutes && !gameTime.seconds)) return;\n\n const minutes = !isNaN(gameTime.minutes) ? gameTime.minutes : 0;\n const seconds = !isNaN(gameTime.seconds) ? gameTime.seconds : 0;\n\n return `${stringifyTime(minutes || 0)}:${stringifyTime(seconds || 0)}`;\n}\n\nexport const isRegulationPeriod = (period, includeOvertime = false) => {\n if (includeOvertime && period === OVERTIME_PERIOD) return true;\n return period == FIRST_PERIOD || period == SECOND_PERIOD || period == THIRD_PERIOD;\n}\n\nexport const isInRegulationGameTime = (gameTime, includeOvertime = false) => {\n return isRegulationPeriod(gameTime.period, includeOvertime)\n}\n\nexport const displayPeriod = gameTime => {\n if (!gameTime) return '';\n\n switch (gameTime.period) {\n case 1:\n case FIRST_PERIOD: return '1st period';\n case 2:\n case SECOND_PERIOD: return '2nd period';\n case 3:\n case THIRD_PERIOD: return '3rd period';\n case OVERTIME_PERIOD: return 'Overtime';\n case SHOOTOUT_PERIOD: return 'Shootouts';\n default: return '';\n }\n}\n\nexport const displayInning = gameTime => {\n if (!gameTime) return '';\n\n switch (gameTime.period) {\n case 1:\n case '1': return '1st';\n case 2:\n case '2': return '2nd';\n case 3:\n case '3': return '3rd';\n default: return `${gameTime.period}th`;\n }\n}\n\nexport const displayTime = (gameTime, sport, includePeriod = false, hide = false) => {\n if (sport === 'Hockey') {\n if (!gameTime || hide) return '--:--';\n\n const minutes = stringifyTime(gameTime.minutes) || '--';\n const seconds = stringifyTime(gameTime.seconds) || '--';\n\n const time = `${minutes}:${seconds}`;\n return includePeriod ? `${time} in ${displayPeriod(gameTime)}` : time;\n }\n\n if (sport === 'Soccer') {\n if (!gameTime || hide) return \"--'\";\n\n const minutes = parseInt(gameTime.minutes, 10);\n if (isNaN(minutes)) return \"--'\";\n\n let time = `${minutes}`\n const extra = parseInt(gameTime.extra, 10)\n\n if (extra) {\n time += `+${extra}`\n }\n\n return `${time}'`\n }\n\n if (sport === 'Baseball') {\n if (!gameTime || hide) return \"--'\";\n\n const period = parseInt(gameTime.period, 10);\n if (isNaN(period)) return \"--'\";\n\n let time = `${displayInning(gameTime)}`\n\n if (gameTime.half) {\n time = `${gameTime.half === 1 ? 'Top' : 'Bottom'} of ${time}`\n }\n\n return time\n }\n\n return '--'\n};\n\nexport const compareTime = (a, b, sport) => {\n b = typeof b !== 'undefined' ? b : INITIAL_TIME[sport];\n // this conforms to Array.sort's compareFunction spec\n // < 0: a is earlier, 0: same, > 0: b is earlier\n // \"a earlier than b\" means \"a in past of b\"\n // -1: a in past, 0: same, +1: a in future\n\n if (a && !b) return -4;\n if (!a && b) return 4;\n if (!a && !b) return 0;\n\n // 1 - 2 - 3 - OT - SO\n if (sport === 'Hockey') {\n if (a.period === OVERTIME_PERIOD && b.period === SHOOTOUT_PERIOD) return -3; // OT && SO; a is past\n if (a.period === SHOOTOUT_PERIOD && b.period === OVERTIME_PERIOD) return 3; // SO && OT; b is past\n if (isFinite(a.period) && !isFinite(b.period)) return -3; // 1 && OT; a is past\n if (!isFinite(a.period) && isFinite(b.period)) return 3; // OT && 1; b is past\n if (isFinite(a.period) && isFinite(b.period)) { // 1 && 3\n if (a.period < b.period) return -3; // 1 < 3; a is past\n if (a.period > b.period) return 3; // 3 > 1; b is past\n }\n\n if (a.minutes < b.minutes) return 2; // 20:-- < 10:--; a is past\n if (a.minutes > b.minutes) return -2; // 10:-- > 20:--; b is past\n\n if (a.seconds < b.seconds) return 1; // --:30 < --:45; b is past\n if (a.seconds > b.seconds) return -1; // --:45 > --:30; a is past\n }\n\n if (sport === 'Soccer') {\n if (a.minutes < b.minutes) return -2; // 45' < 90'; a is past\n if (a.minutes > b.minutes) return 2; // 90' > 45'; b is past\n\n if (a.extra < b.extra) return -1; // 45' < 45+3'; a is past\n if (a.extra > b.extra) return 1; // 45+3' > 45'; b is past\n }\n\n if (sport === 'Baseball') {\n if (a.period < b.period) return -2; // Inning 1 < Inning 2; a is past\n if (a.period > b.period) return 2; // Inning 2 > Inning 1; b is past\n\n if (a.half < b.half) return -1; // Top of inning 1 < Bottom of inning 1; a is past\n if (a.half > b.half) return 1; // Bottom of inning 1 > Top of inning 1; b is past\n }\n\n return 0; // equal\n}\n\n// is b before a\nexport const isTimeBefore = (a, b, sport, includeEqual = false) => {\n const result = compareTime(a, b, sport);\n if (includeEqual) return result >= 0;\n return result > 0;\n}\n\n// is b after a\nexport const isTimeAfter = (a, b, sport, includeEqual = false) => {\n const result = compareTime(a, b, sport);\n if (includeEqual) return result <= 0;\n return result < 0;\n}\n\nexport const isTimeEqual = (a, b, sport) => compareTime(a, b, sport) === 0;\n\nexport const isTimeInRange = (time, start, end, sport, { includeStart = true, includeEnd = true } = {}) => {\n if (isTimeBefore(start, time, sport, !includeStart)) return false;\n if (isTimeAfter(end, time, sport, !includeEnd)) return false;\n return true;\n}\n\n// for use with angular's orderBy filter\nexport const orderTime = (a, b, sport) =>\n compareTime(a.value || null, b.value || null, sport); // null to avoid default value\n\nexport const isTimeValid = (gameTime, periods = DEFAULT_SETTINGS.periods, sport) => {\n const { period, seconds } = gameTime;\n if (seconds >= 60) return false; // always 60 seconds in a minute...\n if (period === SHOOTOUT_PERIOD) return true; // SO doesn't have time, so times are arbitrary\n if (period === OVERTIME_PERIOD) return isTimeAfter(periods[3], gameTime, sport, true);\n const length = periods[parseInt(period) - 1];\n return isTimeAfter(length, gameTime, sport, true); // 1-3 <= 20:00 (or configured time, such as 15:00)\n}\n\nconst getLength = duration => {\n return duration.duration || duration.length || duration || 0;\n}\n\nexport const calculateGameTime = (gameTime, duration, periodSettings = DEFAULT_SETTINGS.periods) => {\n const startTime = sanitizeTime(gameTime);\n if (!duration) return startTime;\n\n let length = getLength(duration);\n if (!length) return startTime;\n\n const periods = periodSettings.map(sanitizeTime);\n let _periods = periods.map(period => period.period);\n\n const isRegulation = isInRegulationGameTime(startTime);\n const subtract = length < 0;\n\n length = Math.abs(length)\n if (subtract) {\n _periods = _periods.reverse();\n }\n\n const startPeriodIndex = _periods.findIndex(period => startTime.period == period);\n\n return _periods.reduce((newTime, period, index) => {\n if (!length) return newTime; // no remaining time to calculate\n if (startPeriodIndex > index) return newTime; // period is before start\n if (period === OVERTIME_PERIOD && isRegulation) return newTime;\n if (period !== OVERTIME_PERIOD && !isRegulation) return newTime;\n\n const periodTime = !subtract ? periods[index] : periods[periods.length - index - 1];\n\n let remainingPeriodLength;\n if (newTime.period == period) {\n if (!subtract) {\n remainingPeriodLength = (newTime.minutes * 60) + newTime.seconds;\n } else {\n remainingPeriodLength = ((periodTime.minutes - newTime.minutes - 1) * 60) + (60 - periodTime.seconds + newTime.seconds)\n }\n } else {\n remainingPeriodLength = (periodTime.minutes * 60) + newTime.seconds;\n }\n\n const remainder = remainingPeriodLength - length\n const remainderMin = Math.floor(remainder / 60);\n const remainderSec = remainder % 60;\n if (subtract) {\n if (remainder >= 0) { // last period\n length = 0;\n const offsetMin = remainderSec > 0 ? 1 : 0;\n const offsetSec = remainderSec > 0 ? 60 : 0;\n return {\n ...newTime,\n period,\n minutes: periodTime.minutes - remainderMin - offsetMin,\n seconds: offsetSec - periodTime.seconds - remainderSec\n }\n }\n\n length = length - remainingPeriodLength;\n return { ...newTime, period, minutes: periodTime.minutes, seconds: periodTime.seconds }\n }\n\n if (remainder >= 0) { // last period\n length = 0;\n return { ...newTime, period, minutes: remainderMin, seconds: remainderSec }\n }\n\n length = length - remainingPeriodLength;\n return { ...newTime, period, minutes: 0, seconds: 0 }\n }, { ...startTime })\n}\n\nexport const calculateEndTime = (gameTime, duration, periods = DEFAULT_SETTINGS.periods) => {\n if (!duration) return null;\n\n const length = getLength(duration);\n if (!length) return null;\n\n return calculateGameTime(gameTime, duration, periods);\n}\n\nexport const parsePeriodInt = period => {\n if (period === OVERTIME_PERIOD || period === SHOOTOUT_PERIOD) return 4;\n return parseInt(period);\n}\n\nexport const calculateDuration = (startTime, endTime, periodAttributes, sport) => {\n if (!startTime || !endTime || !periodAttributes) return 0;\n\n const reversed = isTimeBefore(startTime, endTime, sport)\n const [ start, end ] = !reversed\n ? [ sanitizeTime(startTime), sanitizeTime(endTime) ]\n : [ sanitizeTime(endTime), sanitizeTime(startTime) ];\n\n if (start.period === SHOOTOUT_PERIOD) return 0;\n\n // parse period strings to ints\n const startPeriod = parsePeriodInt(start.period)\n const endPeriod = parsePeriodInt(end.period)\n\n if (startPeriod === endPeriod) { // same period\n // start time - end time\n const duration = (start.minutes - end.minutes) + ((60 - end.seconds) / 60) - ((60 - start.seconds) / 60);\n return !reversed ? duration : (duration * -1);\n }\n\n const totalPeriods = endPeriod - startPeriod + 1;\n const periods = Array.from(Array(totalPeriods).keys()).map(n => n + startPeriod);\n const duration = periods.reduce((sum, period) => {\n const length = periodAttributes[period - 1];\n if (period === startPeriod) { // start period\n // time to end of period\n sum += start.minutes + (start.seconds / 60);\n } else if (period < endPeriod) { // in-between periods\n // full period\n sum += length.minutes + ((60 - length.seconds) / 60) - 1;\n } else if (period === endPeriod) { // end period\n // time from start of period to end time\n sum += (length.minutes - end.minutes) + ((60 - end.seconds) / 60) - ((60 - length.seconds) / 60);\n }\n return sum;\n }, 0);\n\n return !reversed ? duration : (duration * -1);\n}\n\n","import { isEqual, startCase } from '@hisports/common/src/lodash.js';\nimport { isTimeValid, calculateGameTime, calculateEndTime, isTimeEqual, isTimeAfter, compareTime, isTimeBefore } from './gameTime.js';\nimport { isSkater } from './members.js';\nimport {\n MINOR,\n DOUBLE_MINOR,\n HEAD_CONTACT,\n GAME_EJECTION,\n YELLOW,\n YELLOW_RED,\n} from '../constants.js';\nimport { getInfractionTypeDuration } from './penalties.js';\n\n// util function to remove duplicates\nconst dedupe = values => Array.from(new Set(values))\n\nexport const getLegacyDuration = (duration, durations = {}) => {\n if (!duration) return;\n if (typeof duration === 'object') {\n return durations[duration.durationId];\n }\n\n return durations[duration];\n};\n\nexport const getLegacyInfraction = (infraction, infractions = []) => {\n if (!infraction) return;\n if (typeof infraction === 'object') {\n return infraction\n }\n const result = infractions.find(({ id }) => id === infraction);\n\n // return dummy infraction if infraction not found in the rulebook\n if (!result) return ({\n id: infraction,\n name: startCase(infraction),\n choices: []\n });\n\n return result;\n}\n\nexport const getChoiceDurationLabel = (choiceDuration, durations = {}, includeDescription = false) => {\n const { durationId, code } = choiceDuration;\n const duration = getLegacyDuration(durationId, durations) || {};\n const name = duration.name ? duration.name : startCase(durationId);\n return `${code ? `${code} - ` : ''}${name}${includeDescription && duration.description ? ` (${duration.description})` : ''}`\n}\n\nexport const getChoiceLabel = (choice, durations = {}, joinSymbol = '/') => {\n return choice.durations.map(duration => getChoiceDurationLabel(duration, durations)).join(` ${joinSymbol} `);\n}\n\n// if there are additional duplicate penalties, add total denominator to duration ex. (2/4) or (4/4)\nexport const getDuplicateDurationFractionLabel = (duration = {}, penalty = {}, penalties = [], infractions = [], sport) => {\n const minutes = getInfractionTypeDuration(duration, null, true)\n const additionalDupes = findAdditionalPenalties(penalty, penalties, infractions, sport)\n .filter(additionalPenalty => additionalPenalty.duration === penalty.duration);\n\n if (!additionalDupes.length) return;\n const dupes = [penalty, ...additionalDupes];\n let order = 0;\n\n for (const p of penalties) {\n // increment order for every additional penalty found\n if (dupes.some(dupe => dupe.id === p.id)) {\n order += 1;\n }\n if (p.id === penalty.id) break;\n }\n\n return `${order * minutes}/${dupes.length * minutes}`\n}\n\nexport const isStickInfraction = infraction => {\n if (!infraction || typeof infraction !== 'object') return false;\n return infraction.isStick === true;\n}\n\n// find penalties that are withing the same choice\nexport const findAdditionalPenalties = (penalty, penalties = [], infractions, sport, includeCurrentPenalty = false) => {\n if (!penalty || !penalties.length || !infractions) return [];\n\n // get the infraction of the penalty\n const infraction = getLegacyInfraction(penalty.infraction, infractions);\n const choices = infraction && infraction.choices || [];\n\n // find potential possible code combinations out of the infractions choices\n const possibleCodes = dedupe(choices.reduce((values, choice) => {\n const codes = (choice.durations || []).map(({ code }) => code);\n if (codes.length > 1 && codes.includes(penalty.code)) {\n return [...values, ...codes];\n }\n return [...values];\n }, []));\n\n // find potential possible choice duration permutations\n const possibleChoiceDurationPermutations = [...choices]\n .sort((a, b) => b.durations.length - a.durations.length)\n .map(choice => choice.durations.map(duration => duration.durationId))\n\n // find all linked penalties based on same infraction / participant / game time / code\n const linkedPenalties = [...penalties].filter(({ participantId, gameTime, code, infraction }) => {\n const isSameInfraction = infraction && penalty.infraction && infraction === penalty.infraction;\n const isSameParticipant = participantId && penalty.participantId && participantId === penalty.participantId;\n const isSameGameTime = gameTime && penalty.gameTime && isTimeEqual(gameTime, penalty.gameTime, sport);\n const isCodeFromPossibleChoices = !code || (possibleCodes.length && possibleCodes.includes(code));\n\n return isSameInfraction\n && isSameParticipant // it is the same participant\n && isSameGameTime // it is at the same game time\n && isCodeFromPossibleChoices; // both have no codes or it is a code from the possible choices available from the infraction\n }).sort((a, b) => compareTime(a.startTime, b.startTime, sport));\n\n // find all penalty combinations from all the linked penalties\n const penaltyCombinations = []\n for (let index = 0; index < linkedPenalties.length; index++) {\n for (const permutation of possibleChoiceDurationPermutations) {\n const combination = linkedPenalties.slice(index, index + permutation.length)\n // compare to see if both contain same durations (ignoring order)\n const isSame = JSON.stringify(combination.map(({ duration }) => duration).sort()) === JSON.stringify(permutation.sort())\n if (isSame) {\n penaltyCombinations.push(combination)\n index = index + permutation.length - 1\n break;\n }\n }\n }\n\n // find the penalty combination that the original penalty is in\n const penaltyCombination = (penaltyCombinations || []).find(combination => {\n return combination.find(({ id }) => id === penalty.id)\n }) || linkedPenalties;\n\n let additionalPenalties = (penaltyCombination || [])\n\n // remove the original penalty from the additionalPenalties\n if (!includeCurrentPenalty) {\n additionalPenalties = additionalPenalties.filter(({ id }) => id !== penalty.id)\n }\n\n return additionalPenalties\n}\n\nexport const findChoice = (penalty, infraction, additionalPenalties = []) => {\n if (!penalty || !infraction || !infraction.choices || !infraction.choices.length) return;\n\n // find choice using additional penalties\n if (additionalPenalties.length) {\n const durations = [penalty, ...additionalPenalties].map(({ duration }) => duration);\n\n return infraction.choices.find(choice => isEqual(choice.durations.map(({ durationId }) => durationId).sort(), durations.sort()))\n }\n\n // find choice using code of the penalty\n if (penalty.code) {\n return infraction.choices.find(({ durations }) => durations.find(({ code }) => code === penalty.code))\n }\n\n // sort by choices with least amount of duration first\n const choices = [...infraction.choices].sort((a, b) => (a.durations || []).length - (b.durations || []).length);\n\n // pick first choice from sorted list\n return choices.find(choice => choice.durations.findIndex(({ durationId }) => durationId === penalty.duration) >= 0);\n}\n\nexport const sortPenaltiesBasedOnChoice = (penalties = [], choice, sport) => {\n if (!choice) return penalties;\n const choiceDurationIds = choice.durations.map(({ durationId }) => durationId);\n return [...penalties].sort((a, b) => {\n if (choiceDurationIds.indexOf(a.duration) < choiceDurationIds.indexOf(b.duration)) {\n return -1;\n }\n if (choiceDurationIds.indexOf(a.duration) > choiceDurationIds.indexOf(b.duration)) {\n return 1;\n }\n if (isTimeAfter(a.endTime, b.endTime, sport)) {\n return -1;\n }\n if (isTimeAfter(b.endTime, a.endTime, sport)) {\n return 1;\n }\n return 0;\n })\n}\n\nexport class LegacyPenaltyManager {\n constructor(meta, teamId, periods = [], members = {}) {\n this.meta = meta;\n this.periods = periods;\n this.members = members;\n\n this.penalty = {\n teamId,\n participantId: null,\n infraction: null,\n choice: null,\n }\n }\n\n getResultingPenalties(teamPenalties) {\n const penalties = [];\n const addPenalty = (infraction, duration, offset) =>\n penalties.push(this.createPenalty(infraction, duration, offset));\n\n this.penalty.choice.durations.forEach(duration => {\n addPenalty(this.penalty.infraction.id, duration)\n })\n\n return penalties;\n }\n\n setPenalty(penalty, choice, infractions) {\n this.penalty.id = penalty.id;\n this.penalty.teamId = penalty.teamId;\n this.penalty.participantId = penalty.participantId;\n this.penalty.gameTime = penalty.gameTime;\n\n this.penalty.infraction = getLegacyInfraction(penalty.infraction, infractions);\n this.penalty.choice = choice;\n }\n\n selectInfraction(infraction) {\n this.resetChoices();\n\n // unselect\n if (this.penalty.infraction && this.penalty.infraction.id == infraction.id) {\n this.penalty.infraction = null;\n return;\n }\n\n this.penalty.infraction = infraction;\n\n // automatically select first duration\n const { choices } = this.penalty.infraction;\n if (choices) {\n this.selectChoice(choices[0]);\n }\n }\n\n selectChoice(choice) {\n if (this.isChoiceSelected(choice)) {\n // unselect\n this.penalty.choice = null;\n return;\n }\n\n this.penalty.choice = choice;\n }\n\n resetChoices() {\n this.penalty.choice = null;\n }\n\n isChoiceSelected(choice) {\n return this.penalty && this.penalty.choice && isEqual(this.penalty.choice.durations, choice.durations)\n }\n\n isValidPlayers() {\n return this.penalty && this.penalty.participantId != null;\n }\n\n isValidInfraction() {\n const { infraction, choice } = this.penalty;\n if (!infraction || !choice) return false;\n return true;\n }\n\n createPenalty(infraction, { durationId, code }) {\n return {\n teamId: this.penalty.teamId,\n participantId: this.penalty.participantId,\n gameTime: this.penalty.gameTime,\n startTime: this.penalty.gameTime,\n endTime: this.penalty.endTime,\n infraction,\n duration: durationId,\n code\n }\n }\n}\n\nexport class LegacyHockeyPenaltyManager extends LegacyPenaltyManager {\n constructor(meta, teamId, periods = [], members = {}) {\n super(meta, teamId, periods, members);\n\n this.stickInfractions = this.meta.rules.filter(isStickInfraction).map(infraction => infraction.id);\n\n this.penalty = {\n ...this.penalty,\n servedById: null\n }\n }\n\n getResultingPenalties(teamPenalties) {\n const penalties = [];\n const addPenalty = (infraction, duration, offset) =>\n penalties.push(this.createPenalty(infraction, duration, offset));\n\n this.penalty.choice.durations.forEach(duration => {\n let offset;\n\n const timedDurationIds = Object.entries(this.meta.types)\n .filter(([id, duration]) => duration.timed)\n .map(([id]) => id);\n\n // if timed penalty, calculate total length of prior penalties to offset the current one\n if (timedDurationIds.includes(duration.durationId)) {\n offset = penalties.reduce((total, penalty) => {\n const duration = getLegacyDuration(penalty.duration, this.meta.types);\n if (!duration.timed || !duration.length) return total;\n return total + duration.length;\n }, 0);\n }\n\n addPenalty(this.penalty.infraction.id, duration, offset)\n })\n\n switch (this.meta.policies.ejections) {\n case 'Contact': {\n // add a game ejection when adding a 3rd stick penalty\n if (this.requiresStickEjection(penalties, teamPenalties)) {\n addPenalty(GAME_EJECTION, { durationId: GAME_EJECTION });\n }\n\n // add a game ejection when adding a 3rd head contact penalty\n if (this.requiresContactEjection(penalties, teamPenalties)) {\n addPenalty(GAME_EJECTION, { durationId: GAME_EJECTION });\n }\n break;\n }\n case 'All': {\n // add a game ejection when adding a 3rd penalty (minor or otherwise)\n if (this.requiresAnyEjection(penalties, teamPenalties)) {\n addPenalty(GAME_EJECTION, { durationId: GAME_EJECTION });\n }\n break;\n }\n case 'None':\n default: {\n break;\n }\n }\n\n return penalties;\n }\n\n setPenalty(penalty, choice, infractions) {\n this.penalty.id = penalty.id;\n this.penalty.teamId = penalty.teamId;\n this.penalty.participantId = penalty.participantId;\n this.penalty.servedById = penalty.servedById;\n this.penalty.gameTime = penalty.gameTime;\n this.penalty.startTime = penalty.startTime;\n\n this.penalty.infraction = getLegacyInfraction(penalty.infraction, infractions);\n this.penalty.choice = choice;\n\n if (penalty.isEnded) {\n this.penalty.endTime = penalty.endTime;\n }\n }\n\n requiresAnyEjection(newPenalties, teamPenalties) {\n const existingCount = this.getParticipantTotal(teamPenalties, false);\n return existingCount >= 2;\n }\n\n requiresStickEjection(newPenalties, teamPenalties) {\n const stickPenalties = teamPenalties.filter(penalty => this.stickInfractions.includes(penalty.infraction))\n const existingCount = this.getParticipantTotal(stickPenalties);\n if (existingCount < 2) return false;\n return this.hasStickInfraction(newPenalties)\n }\n\n requiresContactEjection(newPenalties, teamPenalties) {\n const contactPenalties = teamPenalties.filter(penalty => penalty.infraction === HEAD_CONTACT);\n const existingCount = this.getParticipantTotal(contactPenalties);\n if (existingCount < 2) return false;\n return this.hasContactInfraction(newPenalties);\n }\n\n hasStickInfraction(penalties) {\n const isMinor = duration => duration === MINOR || duration === DOUBLE_MINOR;\n return penalties.some(\n penalty => {\n const infraction = getLegacyInfraction(penalty.infraction, this.meta.rules)\n return isMinor(penalty.duration) && isStickInfraction(infraction)\n }\n )\n }\n\n hasContactInfraction(penalties) {\n const isMinor = duration => duration === MINOR || duration === DOUBLE_MINOR;\n return penalties.some(\n penalty => isMinor(penalty.duration) && penalty.infraction === HEAD_CONTACT\n )\n }\n\n getParticipantTotal(penalties = [], doubleAsSingle = true) {\n const { participantId, id } = this.penalty;\n if (!participantId || !penalties.length) return 0;\n\n let filtered = penalties\n .filter(penalty => penalty.participantId == participantId && (!id || penalty.id != id))\n\n if (doubleAsSingle) {\n filtered = filtered.reduce((penalties, penalty) => {\n // account for double minors (two minor penalties with same goalTime)\n const double = penalties.find(existing =>\n existing.infraction === penalty.infraction && // same infraction\n isTimeEqual(existing.gameTime, penalty.gameTime, 'Hockey') // at same gameTime\n )\n if (!double) penalties.push(penalty);\n return penalties;\n }, []);\n }\n\n return filtered.length;\n }\n\n isSkater(participantId) {\n if (!participantId) return false;\n const member = this.members[participantId];\n if (!member) return false;\n return isSkater(member);\n }\n\n getServedBy() {\n const { participantId, servedById } = this.penalty;\n\n if (servedById) return servedById;\n if (!this.isSkater(participantId)) return null\n\n return participantId;\n }\n\n createPenalty(infraction, { durationId, code }, offset) {\n const penalty = {\n teamId: this.penalty.teamId,\n participantId: this.penalty.participantId,\n gameTime: this.penalty.gameTime,\n startTime: this.penalty.startTime,\n infraction,\n duration: durationId,\n code,\n }\n const duration = getLegacyDuration(durationId, this.meta.types);\n if (offset) {\n penalty.startTime = calculateGameTime(penalty.startTime, offset, this.periods);\n }\n if (duration && duration.length) {\n // this.penalty.endTime is not defined when creating a penalty; only when editing\n // allows for user to edit the end time if necessary\n if (!this.penalty.endTime) {\n penalty.endTime = calculateEndTime(penalty.startTime, duration, this.periods);\n } else if (offset && offset > 0) {\n penalty.endTime = calculateEndTime(this.penalty.endTime, offset, this.periods);\n } else {\n penalty.endTime = this.penalty.endTime;\n }\n\n // timed penalties and the serving member is a player\n if (duration.timed && this.isSkater(this.penalty.servedById)) {\n penalty.servedById = this.penalty.servedById;\n }\n }\n return penalty;\n }\n\n isValidTime() {\n if (!this.penalty || !this.penalty.gameTime) return false;\n return isTimeValid(this.penalty.gameTime, this.periods, 'Hockey');\n }\n\n isValidStartTime() {\n if (!this.penalty || !this.penalty.startTime) return false;\n if (isTimeBefore(this.penalty.gameTime, this.penalty.startTime, 'Hockey')) return false;\n return isTimeValid(this.penalty.startTime, this.periods, this.meta.sport);\n }\n}\n\nexport class LegacySoccerPenaltyManager extends LegacyPenaltyManager {\n constructor(meta, teamId) {\n super(meta, teamId);\n }\n\n setPenalty(penalty, choice, infractions) {\n this.penalty.id = penalty.id;\n this.penalty.teamId = penalty.teamId;\n this.penalty.participantId = penalty.participantId;\n this.penalty.gameTime = penalty.gameTime;\n\n this.penalty.infraction = getLegacyInfraction(penalty.infraction, infractions);\n this.penalty.choice = choice;\n }\n\n getResultingPenalties(teamPenalties) {\n const penalties = [];\n const addPenalty = (infraction, duration, offset) =>\n penalties.push(this.createPenalty(infraction, duration, offset));\n\n this.penalty.choice.durations.forEach(duration => {\n const _duration = { ...duration }\n\n if (this.requiresAnyEjection(teamPenalties)) {\n _duration.durationId = YELLOW_RED\n }\n\n addPenalty(this.penalty.infraction.id, _duration)\n })\n\n return penalties;\n }\n\n // x2 yellow -> 1 indirect red\n requiresAnyEjection(teamPenalties) {\n const isYellow = this.penalty.choice.durations.map(({ durationId }) => durationId).includes(YELLOW)\n if (!isYellow) return false\n\n const existingCount = this.getParticipantTotalPreviousYellow(teamPenalties);\n return existingCount >= 1;\n }\n\n getParticipantTotalPreviousYellow(penalties = []) {\n const { participantId, id } = this.penalty;\n if (!participantId || !penalties.length) return 0;\n\n\n return penalties\n .filter(penalty => {\n const isCurrentPenalty = id && penalty.id === id\n const isCurrentParticipant = penalty.participantId === participantId\n const isPreviousPenalty = isTimeBefore(this.penalty.gameTime, penalty.gameTime, 'Soccer')\n const isYellow = penalty.duration === YELLOW;\n\n return !isCurrentPenalty && isCurrentParticipant && isPreviousPenalty && isYellow\n }).length\n }\n\n isValidTime() {\n if (!this.penalty || !this.penalty.gameTime) return false;\n return isTimeValid(this.penalty.gameTime, this.periods, 'Soccer');\n }\n}\n","import { orderBy } from '@hisports/common/src/lodash.js';\n\nimport { translateApiProperty } from \"@hisports/common\";\n\nimport { calculateEndTime, calculateGameTime, compareTime, isTimeBefore, isTimeEqual, isTimeValid } from \"./gameTime.js\";\nimport { INFRACTION_SEVERITY, LEGACY_RULEBOOK_SEASONS, PENALTY_SEVERITY } from \"../constants.js\";\nimport { getChoiceLabel, getDuplicateDurationFractionLabel, getLegacyDuration, getLegacyInfraction } from \"./legacyPenalties.js\";\n\nexport const isLegacyRulebookSeason = seasonId => !seasonId || LEGACY_RULEBOOK_SEASONS.includes(seasonId)\n\nexport const parseLegacyRulebookMeta = meta => {\n if (!meta) return meta\n if (!isLegacyRulebookSeason(meta.seasonId)) return meta\n\n const { durations, infractions, ...newMeta } = meta\n\n newMeta.types = durations\n newMeta.rules = infractions\n\n return newMeta\n}\n\nexport const parseLegacyRulebookRules = (rules, seasonId) => {\n return parseLegacyRulebookMeta({ ...rules, seasonId })\n}\n\n// Linked penalties are a bundle of penalties created off of a rule option.\n// This includes accumulation penalties caused by the rule option (from an accumulation rule).\n// Ex. rule option resulted in A, B, C\n// Passing any of them → A, B, C would get returned\nexport const getLinkedPenalties = (penalty = {}, teamPenalties = [], sport, excludeCurrentPenalty = false) => {\n if (!penalty.optionId) return []\n\n const originalPenalty = teamPenalties.find(teamPenalty => teamPenalty.id === penalty.id);\n if (!originalPenalty) return []\n\n let linkedPenalties = teamPenalties\n .filter(({ optionId, participantId, gameTime }) => {\n const isSameOption = optionId && originalPenalty.optionId && optionId === originalPenalty.optionId;\n const isSameParticipant = participantId && originalPenalty.participantId && participantId === originalPenalty.participantId;\n const isSameGameTime = gameTime && originalPenalty.gameTime && isTimeEqual(gameTime, originalPenalty.gameTime, sport)\n return isSameOption && isSameParticipant && isSameGameTime\n })\n\n if (excludeCurrentPenalty) {\n linkedPenalties = linkedPenalties.filter(linkedPenalty => linkedPenalty.id !== penalty.id)\n }\n\n return sortPenalties(linkedPenalties, sport)\n}\n\n// Subsequent penalties are all linked penalties after the first one.\n// Ex. a rule option resulted in A, B, C\n// Passing penalty A → B, C would get returned\n// Passing penalty C → B, C would get returned\nexport const getSubsequentLinkedPenalties = (penalty = {}, teamPenalties = [], sport, excludeCurrentPenalty = false) => {\n const linkedPenalties = getLinkedPenalties(penalty, teamPenalties, sport);\n let subsequentLinkedPenalties = linkedPenalties.slice(1);\n\n if (excludeCurrentPenalty) {\n subsequentLinkedPenalties = subsequentLinkedPenalties.filter(linkedPenalty => linkedPenalty.id !== penalty.id)\n }\n\n return subsequentLinkedPenalties;\n}\n\nexport const getSeverity = (penalty = {}, infractions = [], types, seasonId) => {\n let severity;\n\n if (!isLegacyRulebookSeason(seasonId)) {\n const infraction = infractions.find(infraction => infraction.id === penalty.infractionId)\n if (infraction) {\n severity = infraction.severity;\n }\n } else {\n const duration = getLegacyDuration(penalty.duration, types)\n if (duration) {\n severity = duration.severity;\n }\n }\n\n return severity;\n}\n\nexport const hideEndTime = (infractionType = {}, seasonId) => {\n const { hideEndTime, duration, isShorthanded, isEjection } = infractionType;\n if (isLegacyRulebookSeason(seasonId)) {\n return !!hideEndTime;\n }\n return !duration || (!isShorthanded && isEjection)\n}\n\nexport const getInfractionRule = (penalty = {}, infractions = [], rules = [], seasonId) => {\n if (!isLegacyRulebookSeason(seasonId)) {\n const infraction = infractions.find(infraction => infraction.id === penalty.infractionId) || {};\n return rules.find(rule => rule.id === infraction.ruleId);\n }\n return getLegacyInfraction(penalty.infraction, rules)\n}\n\nexport const getInfractionType = (penalty = {}, infractions = [], types, seasonId) => {\n if (!isLegacyRulebookSeason(seasonId)) {\n const infraction = infractions.find(infraction => infraction.id === penalty.infractionId) || {};\n return (types || []).find(type => type.id === infraction.typeId);\n }\n return getLegacyDuration(penalty.duration, types)\n}\n\nexport const getInfractionTypeDuration = (infractionType, seasonId, inMinutes = false) => {\n if (!infractionType) return;\n\n const seconds = (!isLegacyRulebookSeason(seasonId) ? infractionType.duration : infractionType.length) || 0\n\n if (inMinutes) {\n return Math.floor(seconds / 60);\n }\n\n return seconds\n}\n\nexport const sumDurationMinutes = (infractions, types, seasonId) => (total, penalty) => {\n const infractionType = getInfractionType(penalty, infractions, types, seasonId)\n const minutes = getInfractionTypeDuration(infractionType, seasonId, true);\n return total + (minutes || 0);\n}\n\nexport const getFractionLabel = (penalty = {}, infractions = [], types, rules = [], teamPenalties = [], sport, seasonId) => {\n if (isLegacyRulebookSeason(seasonId)) {\n const infractionType = getInfractionType(penalty, infractions, types, seasonId)\n return getDuplicateDurationFractionLabel(infractionType, penalty, teamPenalties, rules, sport);\n }\n\n const linkedPenalties = getLinkedPenalties(penalty, teamPenalties, sport).filter(linkedPenalty => linkedPenalty.infractionId === penalty.infractionId);\n if (linkedPenalties.length < 2) return;\n\n const getTotalMinutes = penalties => penalties.reduce(sumDurationMinutes(infractions, types, seasonId), 0)\n\n const penaltyIndex = linkedPenalties.findIndex(linkedPenalty => linkedPenalty.id === penalty.id);\n const elapsedPenalties = linkedPenalties.slice(0, (penaltyIndex + 1));\n\n const elapsedTotal = getTotalMinutes(elapsedPenalties);\n const total = getTotalMinutes(linkedPenalties);\n\n return `${elapsedTotal}/${total}`;\n}\n\nexport const getInfractionRuleLabel = (rule, locale, separator = ' ') => {\n if (!rule || !rule.name) return;\n return [rule.code, translateApiProperty(rule, 'name', locale)].filter(Boolean).join(separator)\n}\n\nexport const getInfractionRuleName = (rule, locale) => {\n if (!rule || !rule.name) return;\n return translateApiProperty(rule, 'name', locale)\n}\n\nexport const getInfractionRuleCode = (rule) => {\n if (!rule || !rule.code) return;\n return `${rule.code}`\n}\n\nexport const getInfractionOptionLabel = (option = {}, types, seasonId, locale) => {\n if (isLegacyRulebookSeason(seasonId)) {\n return getChoiceLabel(option, types)\n }\n\n return translateApiProperty(option, 'name', locale);\n}\n\nexport const getInfractionOptionCodes = (option = {}, infractions = []) => {\n return (option.members || [])\n .sort((a, b) => a.order - b.order)\n .map(member => {\n const infraction = infractions.find(infraction => infraction.id === member.infractionId)\n if (!infraction && !infraction.code) return\n return infraction.code\n }).filter(Boolean)\n}\n\nexport const getRuleSectionLabel = (section, locale) => {\n if (!section || !section.name) return\n return `${section.code ? `${section.code} - ` : ''}${translateApiProperty(section, 'name', locale)}`\n}\n\nexport const isTimed = (infractionType = {}) => {\n // timed is a legacy property\n return requiresEndTime(infractionType) || infractionType.timed;\n}\n\nexport const requiresIncidentReport = (infractionType = {}, severity) => {\n // require incident report is a legacy property\n return [INFRACTION_SEVERITY.HIGH, INFRACTION_SEVERITY.SEVERE].includes(severity) || infractionType.requireIncidentReport\n}\n\nexport const requiresEmailReport = (severity) => {\n // PENALTY_SEVERITY are legacy values\n return [PENALTY_SEVERITY.HIGH, INFRACTION_SEVERITY.HIGH].includes(severity)\n}\n\nexport const sortPenalties = (teamPenalties = [], sport) => {\n const sortedTeamPenalties = [...teamPenalties]\n\n // uses start time for hockey, game time for soccer / baseball\n sortedTeamPenalties\n .sort((a, b) => compareTime(\n a.startTime || a.gameTime,\n b.startTime || b.gameTime,\n sport))\n .sort((a, b) => {\n if (a.accumulationId && !b.accumulationId) return 1;\n if (!a.accumulationId && b.accumulationId) return -1;\n return 0;\n })\n\n return sortedTeamPenalties\n}\n\nconst requiresEndTime = (infractionType) => {\n return infractionType && infractionType.duration && (infractionType.isShorthanded || !infractionType.isEjection)\n}\n\nconst requiresServer = (infractionType) => {\n return infractionType && infractionType.isShorthanded\n}\n\nconst matchesAccumulation = (accumulation, penalty) => {\n return accumulation.members.some(accumulationMember => accumulationMember.infractionId === penalty.infractionId);\n}\n\nexport class PenaltyManager {\n constructor(meta, teamId, periods = []) {\n this.meta = meta;\n this.periods = periods;\n this.teamId = teamId;\n this.participantId = null;\n\n // game penalty or penalty option\n this.penalty = {\n teamId,\n participantId: null,\n infractionId: null,\n optionId: null,\n accumulationId: null,\n gameTime: null,\n startTime: null,\n endTime: null,\n servedById: null,\n isInjured: null,\n }\n\n this.infraction = null\n this.rule = null\n this.option = null\n this.accumulation = null\n\n this.originalPenalties = []\n }\n\n // set game penalty (requires an optionId)\n setPenalty(penalty, teamPenalties = []) {\n this.penalty.id = penalty.id;\n this.penalty.teamId = penalty.teamId;\n this.penalty.participantId = penalty.participantId;\n this.penalty.servedById = penalty.servedById;\n this.penalty.gameTime = penalty.gameTime;\n this.penalty.startTime = penalty.startTime;\n this.penalty.infractionId = penalty.infractionId;\n this.penalty.optionId = penalty.optionId;\n this.penalty.accumulationId = penalty.accumulationId;\n this.penalty.isInjured = penalty.isInjured;\n\n // editing a penalty\n if (this.penalty.id) {\n this.originalPenalties = getLinkedPenalties(penalty, teamPenalties, this.meta.sport)\n }\n\n if (penalty.isEnded) {\n this.penalty.endTime = penalty.endTime;\n }\n\n if (this.penalty.optionId) {\n this.option = this.meta.options.find(option => option.id === this.penalty.optionId);\n }\n\n if (!this.penalty.infractionId && this.option) {\n this.penalty.infractionId = this.option.members[0].infractionId\n }\n\n if (this.penalty.infractionId) {\n this.infraction = this.meta.infractions.find(infraction => infraction.id === this.penalty.infractionId);\n this.rule = this.meta.rules.find(rule => rule.id === this.infraction.ruleId);\n this.type = this.meta.types.find(type => type.id === this.infraction.typeId);\n }\n }\n\n // get linked game penalties\n getResultingPenalties(teamPenalties = []) {\n // get all infractions based off of option members\n let optionMembers = this.option.members.map(optionMember => {\n const infraction = this.meta.infractions.find(infraction => infraction.id === optionMember.infractionId)\n const rule = this.meta.rules.find(rule => rule.id === infraction.ruleId);\n const type = this.meta.types.find(type => type.id === infraction.typeId);\n\n return { ...optionMember, infraction, rule, type }\n })\n\n // sort by optionMember.order / type.servingOrder (pushing null/undefined to back of array)\n optionMembers = orderBy(optionMembers, [\n optionMember => optionMember.order == null ? undefined : optionMember.order,\n optionMember => optionMember.type.servingOrder == null ? undefined : optionMember.type.servingOrder\n ])\n\n // generate penalties based off of option members\n const resultingPenalties = optionMembers.map((option, index) => {\n const penalty = {\n teamId: this.penalty.teamId,\n participantId: this.penalty.participantId,\n gameTime: this.penalty.gameTime,\n startTime: this.penalty.startTime,\n infractionId: option.infraction.id,\n optionId: this.option.id,\n accumulationId: null,\n isInjured: this.penalty.isInjured,\n\n // legacy properties\n infraction: option.infraction.legacyName,\n duration: option.infraction.legacyDuration\n }\n let offset = 0\n\n // calculate offset only if the infraction type requires an end time\n if (requiresEndTime(option.type)) {\n // calculate offset based off of previous infractions\n offset = optionMembers.slice(0, index).reduce((offset, previousOptionMember) => {\n if (!requiresEndTime(previousOptionMember.type)) return offset\n return offset + previousOptionMember.type.duration\n }, 0)\n }\n\n // offset start time if necessary\n if (offset) {\n penalty.startTime = calculateGameTime(penalty.startTime, offset, this.periods);\n }\n\n // offset end time if necessary\n if (requiresEndTime(option.type)) {\n penalty.endTime = calculateEndTime(penalty.startTime, offset + option.type.duration, this.periods);\n }\n\n // case where user is editing end time of a specific penalty\n if (this.penalty.infractionId === option.infraction.id && this.penalty.endTime) {\n penalty.endTime = this.penalty.endTime;\n }\n\n if (requiresServer(option.type)) {\n penalty.servedById = this.penalty.servedById;\n }\n\n return penalty\n })\n\n // bundle up team penalties into an array of linked penalties for the player that were prior to the selected penalty\n // this array is used to check accumulation counts\n const pastParticipantLinkedPenalties = teamPenalties.reduce((linkedTeamPenalties, teamPenalty) => {\n const linkedPenalties = getLinkedPenalties(teamPenalty, teamPenalties, this.meta.sport)\n const alreadyExist = linkedTeamPenalties.some(linkedPenalties => linkedPenalties.some(linkedPenalty => linkedPenalty.id === teamPenalty.id))\n if (alreadyExist || !linkedPenalties.length) {\n return linkedTeamPenalties\n }\n return [...linkedTeamPenalties, linkedPenalties]\n }, [])\n .filter((linkedPenalties = []) => {\n const firstPenalty = linkedPenalties[0]\n const isGameTimeBefore = isTimeBefore(this.penalty.gameTime, firstPenalty.gameTime, this.meta.sport, true)\n const isSamePlayer = this.penalty.participantId === firstPenalty.participantId\n const areOriginalPenalties = this.originalPenalties.some(originalPenalty => linkedPenalties.some(linkedPenalty => linkedPenalty.id === originalPenalty.id))\n\n return isGameTimeBefore && isSamePlayer && !areOriginalPenalties\n })\n\n // check for any fulfilled accumulations\n const fulfilledAccumulations = this.meta.accumulations.filter(accumulation => {\n const count = [...pastParticipantLinkedPenalties, resultingPenalties].filter(linkedPenalties => {\n return linkedPenalties.some(linkedPenalty => matchesAccumulation(accumulation, linkedPenalty))\n }).length\n\n return count !== 0 && count % accumulation.count === 0;\n })\n\n // create or replace penalties based on fulfilled accumulations\n fulfilledAccumulations.forEach(accumulation => {\n const infraction = this.meta.infractions.find(infraction => infraction.id === accumulation.infractionId);\n const penalty = {\n teamId: this.penalty.teamId,\n participantId: this.penalty.participantId,\n gameTime: this.penalty.gameTime,\n startTime: this.penalty.startTime,\n optionId: this.option.id,\n infractionId: accumulation.infractionId,\n accumulationId: accumulation.id,\n isInjured: this.penalty.isInjured,\n\n // legacy properties\n infraction: infraction.legacyName,\n duration: infraction.legacyDuration\n }\n\n if (accumulation.isReplacement) {\n const resultingPenaltyIndex = resultingPenalties.findIndex(resultingPenalty => accumulation.members.some(accumulationMember => resultingPenalty.infractionId === accumulationMember.infractionId))\n if (resultingPenaltyIndex >= 0) {\n resultingPenalties[resultingPenaltyIndex] = penalty\n }\n } else {\n resultingPenalties.push(penalty)\n }\n })\n\n return resultingPenalties;\n }\n\n selectRule(rule) {\n this.resetRuleOption();\n\n // unselect\n if (this.rule && this.rule.id == rule.id) {\n this.rule = null;\n return;\n }\n\n this.rule = rule;\n\n // automatically select first option\n const options = this.meta.options\n .filter(option => option.ruleId === this.rule.id)\n .sort((a, b) => a.order - b.order)\n if (options.length) {\n this.selectRuleOption(options[0]);\n }\n }\n\n selectRuleOption(option) {\n if (this.isRuleOptionSelected(option)) {\n // unselect\n this.option = null;\n return;\n }\n\n this.option = option;\n }\n\n resetRuleOption() {\n this.option = null;\n }\n\n isRuleOptionSelected(option) {\n return this.option && this.option.id === option.id\n }\n\n isValidPlayers() {\n return this.penalty && this.penalty.participantId != null;\n }\n\n isValidTime() {\n if (!this.penalty || !this.penalty.gameTime) return false;\n return isTimeValid(this.penalty.gameTime, this.periods, this.meta.sport);\n }\n\n isValidStartTime() {\n if (this.meta.sport !== 'Hockey') return true;\n if (isTimeBefore(this.penalty.gameTime, this.penalty.startTime, this.meta.sport)) return false;\n return isTimeValid(this.penalty.startTime, this.periods, this.meta.sport);\n }\n\n isValidInfraction() {\n return this.rule && this.option && this.option.members.length\n }\n}\n","\nimport { isEmpty } from '@hisports/parsers';\n\nimport { YELLOW, RED, YELLOW_RED, PENALTY_SEVERITY, TEAM_FLAGS, FLAG_COLORS, GOALIE, GENERAL_FLAGS, FAULTY_PLAYER_REASONS, INFRACTION_SEVERITY } from '../constants.js'\nimport { isNotSuspended, isPlayer, isStaff, isSuspended } from './members.js'\nimport { getLineupCounts, getPenalties } from '../selectors/index.js';\nimport { getSeverity } from './penalties.js';\n\nexport const getGeneralFlagNames = () => [\n GENERAL_FLAGS.COACH_ENTERED_RESULT,\n GENERAL_FLAGS.UNFINISHED,\n GENERAL_FLAGS.NOTES,\n GENERAL_FLAGS.SUSPENSION\n].filter(Boolean);\n\nexport const getTeamFlagNames = sport => [\n TEAM_FLAGS.LINEUP_MAX_LIMIT,\n TEAM_FLAGS.LINEUP_MIN_LIMIT,\n TEAM_FLAGS.EXTRA,\n TEAM_FLAGS.SERVING,\n TEAM_FLAGS.SECONDARY_TEAM,\n TEAM_FLAGS.NOT_ROSTERED,\n TEAM_FLAGS.NOT_SERVING,\n TEAM_FLAGS.TRANSFERRED,\n sport !== 'Soccer' && TEAM_FLAGS.HIGH_SEVERITY_PENALTIES,\n sport === 'Soccer' && TEAM_FLAGS.INDIRECT_RED_PENALTIES,\n sport === 'Soccer' && TEAM_FLAGS.DIRECT_RED_PENALTIES,\n sport === 'Soccer' && TEAM_FLAGS.UNVALIDATED_MEMBERS,\n sport === 'Baseball' && TEAM_FLAGS.FAULTY_PLAYERS\n].filter(Boolean)\n\nexport const isGeneralFlag = (flag, sport) => getGeneralFlagNames(sport).includes(flag.name);\nexport const isTeamFlag = (flag, sport) => getTeamFlagNames(sport).includes(flag.name) && !!flag.teamId;\n\nconst createFlag = (name, teamId) => ({\n name,\n teamId\n});\n\nexport const getFlagData = (flag = {}, scoresheet = {}, meta, memberValidations) => {\n if (!meta || !memberValidations || !flag.teamId) return [];\n\n const { infractions, types, seasonId, sport } = meta || {};\n const members = scoresheet.lineups[flag.teamId].members || [];\n const extras = scoresheet.lineups[flag.teamId].extras || [];\n const penalties = getPenalties(scoresheet, infractions, types, sport, seasonId);\n const scoresheetThrowsInnings = scoresheet.throwsInnings || [];\n\n let flagData = [];\n switch (flag.name) {\n case TEAM_FLAGS.EXTRA:\n flagData = extras\n break;\n case TEAM_FLAGS.SERVING:\n flagData = members.filter(isSuspended)\n break;\n case TEAM_FLAGS.NOT_SERVING: {\n const membersWithSuspensions = memberValidations.filter(memberValidation => !!memberValidation.suspensions.length)\n flagData = members.filter(member => membersWithSuspensions.some(memberWithSuspensions => isNotSuspended(member) && member.participantId === memberWithSuspensions.participantId))\n break;\n }\n case TEAM_FLAGS.SECONDARY_TEAM: {\n const membersWithSecondaryTeam = memberValidations.filter(validation => validation.isSecondaryTeam)\n flagData = membersWithSecondaryTeam.map(memberWithSecondaryTeam => ({\n ...members.find(member => member.participantId === memberWithSecondaryTeam.participantId),\n ...memberWithSecondaryTeam\n }))\n break;\n }\n case TEAM_FLAGS.LOW_SEVERITY_PENALTIES:\n case TEAM_FLAGS.HIGH_SEVERITY_PENALTIES: {\n const FLAG_TO_SEVERITY_MAP = {\n [TEAM_FLAGS.LOW_SEVERITY_PENALTIES]: [PENALTY_SEVERITY.LOW, INFRACTION_SEVERITY.LOW],\n [TEAM_FLAGS.HIGH_SEVERITY_PENALTIES]: [PENALTY_SEVERITY.HIGH, INFRACTION_SEVERITY.HIGH],\n }\n\n const flaggedPenalties = penalties.filter(penalty => FLAG_TO_SEVERITY_MAP[flag.name].includes(getSeverity(penalty, infractions, types, seasonId)));\n flagData = flaggedPenalties.map(flaggedPenalty => {\n const member = members.find(member => member.participantId === flaggedPenalty.participantId)\n if (!member) return\n return { ...member, penalty: flaggedPenalty }\n }).filter(Boolean)\n break;\n }\n case TEAM_FLAGS.YELLOW_PENALTIES:\n case TEAM_FLAGS.INDIRECT_RED_PENALTIES:\n case TEAM_FLAGS.DIRECT_RED_PENALTIES: {\n const FLAG_TO_DURATION_MAP = {\n [TEAM_FLAGS.YELLOW_PENALTIES]: YELLOW,\n [TEAM_FLAGS.INDIRECT_RED_PENALTIES]: YELLOW_RED,\n [TEAM_FLAGS.DIRECT_RED_PENALTIES]: RED\n }\n\n const flaggedPenalties = penalties.filter(penalty => penalty.duration === FLAG_TO_DURATION_MAP[flag.name])\n flagData = flaggedPenalties.map(flaggedPenalty => {\n const member = members.find(member => member.participantId === flaggedPenalty.participantId)\n if (!member) return\n return { ...member, penalty: flaggedPenalty }\n }).filter(Boolean)\n break;\n }\n case TEAM_FLAGS.FAULTY_PLAYERS:\n flagData = memberValidations.map(validation => {\n const status = validation.throwsInningsStatus\n if (!status) return;\n const memberThrowsInnings = scoresheetThrowsInnings.find(throwsInning => throwsInning.participantId == validation.participantId)\n if (!memberThrowsInnings) return;\n\n if (status.hasInningsRest || status.hasThrowsRest || status.consecutiveDays >= 2 ||\n (status.dailyInningsRemaining !== null && memberThrowsInnings.inningsPitched > status.dailyInningsRemaining) ||\n (status.weeklyInningsRemaining !== null && memberThrowsInnings.inningsPitched > status.weeklyInningsRemaining)) {\n const member = members.find(member => member.participantId === validation.participantId)\n return { ...member, ...validation, throwsInnings: memberThrowsInnings }\n }\n }).filter(Boolean)\n break;\n default:\n break;\n }\n\n return flagData;\n}\n\nconst getLineupLimitFlags = (scoresheet, meta = {}, homeLineup, awayLineup) => {\n if (!homeLineup || !awayLineup || !meta.policies || !meta.policies.lineupLimits) return [];\n\n const flags = [];\n const { sport, policies } = meta;\n\n const limits = policies.lineupLimits;\n\n const checkAndAddLimitFLag = (limitPositionCount, positionCount, teamId) => {\n if (positionCount == null || limitPositionCount == null || limitPositionCount.min == null || limitPositionCount.max == null) return\n\n if (positionCount < limitPositionCount.min) {\n flags.push(createFlag(TEAM_FLAGS.LINEUP_MIN_LIMIT, teamId))\n }\n if (positionCount > limitPositionCount.max) {\n flags.push(createFlag(TEAM_FLAGS.LINEUP_MAX_LIMIT, teamId))\n }\n }\n\n [homeLineup, awayLineup].forEach(teamLineup => {\n const { teamId } = teamLineup\n const teamCount = getLineupCounts(scoresheet, { teamId, sport })\n\n checkAndAddLimitFLag(limits.players, teamCount.totalPlayer, teamId)\n checkAndAddLimitFLag(limits.skaters, teamCount.totalSkater, teamId)\n checkAndAddLimitFLag(limits.goalies, teamCount[GOALIE], teamId)\n checkAndAddLimitFLag(limits.staff, teamCount.totalStaff, teamId)\n })\n\n return flags\n}\n\nconst getNoteFlag = (scoresheet) => {\n if (!scoresheet || (!scoresheet.notes && !scoresheet.adminNotes)) return;\n\n return createFlag(GENERAL_FLAGS.NOTES)\n}\n\nconst getExtraFlags = (homeLineup, awayLineup) => {\n const flags = [];\n\n if (homeLineup.extras && homeLineup.extras.length) {\n flags.push(createFlag(TEAM_FLAGS.EXTRA, homeLineup.teamId))\n }\n if (awayLineup.extras && awayLineup.extras.length) {\n flags.push(createFlag(TEAM_FLAGS.EXTRA, awayLineup.teamId))\n }\n\n return flags\n}\n\nconst getServingFlags = (homeLineup, awayLineup) => {\n const homeServingPlayers = homeLineup.members.filter(isSuspended).length;\n const awayServingPlayers = awayLineup.members.filter(isSuspended).length;\n const flags = [];\n\n if (homeServingPlayers) {\n flags.push(createFlag(TEAM_FLAGS.SERVING, homeLineup.teamId));\n }\n if (awayServingPlayers) {\n flags.push(createFlag(TEAM_FLAGS.SERVING, awayLineup.teamId));\n }\n\n return flags;\n}\n\nconst getPenaltyFlags = (scoresheet, meta, homeLineup, awayLineup) => {\n const { penalties = [] } = scoresheet;\n const { sport, infractions, types, seasonId } = meta || {};\n\n const flags = [];\n\n [homeLineup.teamId, awayLineup.teamId].forEach(teamId => {\n // severity based penalty flags\n if (sport !== 'Soccer') {\n const hasHighSeverityPenalty = penalties.some(\n penalty => [PENALTY_SEVERITY.HIGH, INFRACTION_SEVERITY.HIGH].includes(getSeverity(penalty, infractions, types, seasonId)) && penalty.teamId === teamId\n );\n\n if (hasHighSeverityPenalty) {\n flags.push(createFlag(TEAM_FLAGS.HIGH_SEVERITY_PENALTIES, teamId));\n }\n }\n\n // soccer based penalty flags\n if (sport === 'Soccer') {\n const hasRedPenalty = penalties.some(\n penalty => penalty.duration === RED && penalty.teamId === teamId\n );\n const hasYellowRedPenalty = penalties.some(\n penalty => penalty.duration === YELLOW_RED && penalty.teamId === teamId\n );\n\n if (hasRedPenalty) {\n flags.push(createFlag(TEAM_FLAGS.DIRECT_RED_PENALTIES, teamId));\n }\n if (hasYellowRedPenalty) {\n flags.push(createFlag(TEAM_FLAGS.INDIRECT_RED_PENALTIES, teamId));\n }\n }\n });\n\n return flags;\n}\n\nexport const getPenaltyFlagName = (scoresheet, eventId, meta) => {\n const penalty = scoresheet.penalties.find(penalty => penalty.id === eventId);\n const { infractions, types, seasonId } = meta || {};\n\n const severity = getSeverity(penalty, infractions, types, seasonId);\n\n if ([PENALTY_SEVERITY.LOW, INFRACTION_SEVERITY.LOW].includes(severity)) {\n return TEAM_FLAGS.LOW_SEVERITY_PENALTIES;\n } else if ([PENALTY_SEVERITY.HIGH, INFRACTION_SEVERITY.HIGH].includes(severity)) {\n return TEAM_FLAGS.HIGH_SEVERITY_PENALTIES;\n }\n\n switch (penalty.duration) {\n case YELLOW:\n return TEAM_FLAGS.YELLOW_PENALTIES\n case RED:\n return TEAM_FLAGS.DIRECT_RED_PENALTIES\n case YELLOW_RED:\n return TEAM_FLAGS.INDIRECT_RED_PENALTIES\n default:\n break;\n }\n\n return null;\n}\n\nconst getNotServingFlags = (homeLineup, awayLineup) => {\n const flags = [];\n\n const checkSuspensions = (lineup) => lineup.members.some(member => member.suspensions && member.suspensions.length && isNotSuspended(member));\n\n if (checkSuspensions(homeLineup)) {\n flags.push(createFlag(TEAM_FLAGS.NOT_SERVING, homeLineup.teamId));\n }\n if (checkSuspensions(awayLineup)) {\n flags.push(createFlag(TEAM_FLAGS.NOT_SERVING, awayLineup.teamId));\n }\n\n return flags;\n}\n\nconst getSecondaryTeamFlags = (homeLineup, awayLineup) => {\n const flags = []\n\n const hasSecondaryTeamMember = lineup => lineup.members.some(member => member.isSecondaryTeam === true)\n\n if (hasSecondaryTeamMember(homeLineup)) {\n flags.push(createFlag(TEAM_FLAGS.SECONDARY_TEAM, homeLineup.teamId))\n }\n if (hasSecondaryTeamMember(awayLineup)) {\n flags.push(createFlag(TEAM_FLAGS.SECONDARY_TEAM, awayLineup.teamId))\n }\n\n return flags\n}\n\nconst getUnvalidatedMemberFlags = (homeLineup, awayLineup) => {\n const flags = []\n\n const hasUnvalidatedMember = lineup => lineup.members.some(member => {\n return ((member.invalidMemberTypes || []).includes('Player') && isPlayer(member)) ||\n ((member.invalidMemberTypes || []).includes('Staff') && isStaff(member))\n })\n\n if (hasUnvalidatedMember(homeLineup)) {\n flags.push(createFlag(TEAM_FLAGS.UNVALIDATED_MEMBERS, homeLineup.teamId))\n }\n if (hasUnvalidatedMember(awayLineup)) {\n flags.push(createFlag(TEAM_FLAGS.UNVALIDATED_MEMBERS, awayLineup.teamId))\n }\n\n return flags\n}\n\nexport const getFaultyPlayerReason = (throwsInningsStatus, memberThrowsInnings) => {\n if (isEmpty(memberThrowsInnings) || !throwsInningsStatus) return null;\n\n if (throwsInningsStatus.hasInningsRest) {\n return FAULTY_PLAYER_REASONS.HAS_INNINGS_REST\n } else if (throwsInningsStatus.hasThrowsRest) {\n return FAULTY_PLAYER_REASONS.HAS_THROWS_REST\n } else if (throwsInningsStatus.consecutiveDays >= 2) {\n return FAULTY_PLAYER_REASONS.CONSECUTIVE_DAYS\n } else if (throwsInningsStatus.dailyInningsRemaining !== null && memberThrowsInnings.inningsPitched > throwsInningsStatus.dailyInningsRemaining) {\n return FAULTY_PLAYER_REASONS.DAILY_INNINGS\n } else if (throwsInningsStatus.weeklyInningsRemaining !== null && memberThrowsInnings.inningsPitched > throwsInningsStatus.weeklyInningsRemaining) {\n return FAULTY_PLAYER_REASONS.WEEKLY_INNINGS\n } else {\n return null\n }\n}\n\nconst getFaultyPlayerFlags = (scoresheet, meta, homeLineup, awayLineup) => {\n const flags = [];\n if (meta.sport !== 'Baseball') return flags;\n\n const isFaulty = (member, throwsInnings) => {\n const memberThrowsInnings = throwsInnings.find(throwsInning => member.participantId === throwsInning.participantId);\n const faultyReason = getFaultyPlayerReason(member.throwsInningsStatus, memberThrowsInnings);\n return !!faultyReason;\n };\n\n const homeFaulty = homeLineup.members.filter(member => isFaulty(member, scoresheet.throwsInnings));\n const awayFaulty = awayLineup.members.filter(member => isFaulty(member, scoresheet.throwsInnings));\n\n if (homeFaulty.length) {\n flags.push(createFlag(TEAM_FLAGS.FAULTY_PLAYERS, homeLineup.teamId));\n }\n if (awayFaulty.length) {\n flags.push(createFlag(TEAM_FLAGS.FAULTY_PLAYERS, awayLineup.teamId));\n }\n\n return flags;\n};\n\nexport const getFlagColor = (flagName) => {\n switch (flagName) {\n case TEAM_FLAGS.LOW_SEVERITY_PENALTIES:\n case TEAM_FLAGS.YELLOW_PENALTIES:\n case TEAM_FLAGS.EXTRA:\n return FLAG_COLORS.ORANGE;\n\n case TEAM_FLAGS.HIGH_SEVERITY_PENALTIES:\n case TEAM_FLAGS.DIRECT_RED_PENALTIES:\n case TEAM_FLAGS.INDIRECT_RED_PENALTIES:\n case TEAM_FLAGS.NOT_SERVING:\n case TEAM_FLAGS.SERVING:\n case TEAM_FLAGS.FAULTY_PLAYERS:\n case TEAM_FLAGS.MISSING_SUSPENDED_MEMBER:\n case TEAM_FLAGS.UNVALIDATED_MEMBERS:\n return FLAG_COLORS.RED;\n\n case TEAM_FLAGS.TRANSFERRED:\n case TEAM_FLAGS.SECONDARY_TEAM:\n return FLAG_COLORS.DEFAULT;\n default:\n break\n }\n}\n\nexport const generateGameFlags = (game, scoresheet = {}, meta) => {\n const flags = [];\n\n const lineups = scoresheet && scoresheet.lineups || {};\n\n if (!lineups) return flags;\n\n const notesFlag = getNoteFlag(scoresheet);\n if (notesFlag) {\n flags.push(notesFlag);\n }\n\n if (!lineups[game.homeTeamId] || !lineups[game.awayTeamId]) return flags;\n\n const [homeLineup, awayLineup] = [lineups[game.homeTeamId], lineups[game.awayTeamId]].map(lineup => {\n const { validations = [] } = meta.teams[lineup.teamId] || {}\n const appendValidation = member => ({\n ...member,\n ...(validations.find(({ participantId }) => participantId === member.participantId))\n })\n\n return {\n ...lineup,\n members: (lineup.members || []).map(appendValidation),\n extras: (lineup.extras || []).map(appendValidation)\n }\n })\n\n const lineupLimitFlags = getLineupLimitFlags(scoresheet, meta, homeLineup, awayLineup);\n const extraFlags = getExtraFlags(homeLineup, awayLineup);\n const servingFlags = getServingFlags(homeLineup, awayLineup);\n const penaltyFlags = getPenaltyFlags(scoresheet, meta, homeLineup, awayLineup);\n const faultyPlayerFlags = getFaultyPlayerFlags(scoresheet, meta, homeLineup, awayLineup);\n const notServingFlags = getNotServingFlags(homeLineup, awayLineup);\n const secondaryTeamFlags = getSecondaryTeamFlags(homeLineup, awayLineup);\n const unvalidatedMemberFlags = getUnvalidatedMemberFlags(homeLineup, awayLineup);\n\n return [\n ...flags,\n ...lineupLimitFlags,\n ...extraFlags,\n ...servingFlags,\n ...penaltyFlags,\n ...faultyPlayerFlags,\n ...notServingFlags,\n ...secondaryTeamFlags,\n ...unvalidatedMemberFlags,\n ]\n}\n","import { sortBy } from '@hisports/common/src/lodash.js';\nimport { REFEREE, LINESPERSON, LINESPERSON_TWO, LINESPERSON_THREE, LINESMAN, OFFICIAL, SUPERVISOR, SCOREKEEPER, TIMEKEEPER, ALL_OFFICIAL_POSITIONS } from '../constants.js';\nimport { isKeeper, isOfficial, isSupervisor } from './members.js';\n\nexport const convertOfficialPositions = positions => {\n if (!positions.length) return REFEREE;\n\n switch (positions[0]) {\n case LINESMAN:\n case LINESPERSON:\n case LINESPERSON_TWO:\n case LINESPERSON_THREE:\n return LINESPERSON;\n\n case OFFICIAL:\n return OFFICIAL;\n\n case SUPERVISOR:\n return SUPERVISOR;\n\n case SCOREKEEPER:\n return SCOREKEEPER;\n\n case TIMEKEEPER:\n return TIMEKEEPER;\n\n case REFEREE:\n default:\n return REFEREE;\n }\n}\n\n\n/**\n * Filters officials based on assignment position.\n *\n * @param {array} officials - The list of officials to filter.\n * @param {object} assignment - The assignment to filter by.\n * @return {array} The filtered list of officials.\n */\nexport const filterOfficialsByPositionType = (officials = [], assignment) => {\n return officials.filter(official => {\n // Show all official types if supervisor\n if (isSupervisor(assignment)) return true;\n\n // filter out non scorekeeper qualified officials when its a keeper assignment position\n if (isKeeper(assignment) && !official.types.includes('Scorekeeper')) return false;\n\n // filter out non official qualified officials when its an official assignment position\n if (isOfficial(assignment) && !official.types.includes('Official')) return false;\n\n return true;\n });\n}\n\nexport const sortOfficials = officials => {\n const sortedOfficials = sortBy(officials, ['participant.lastName', 'participant.firstName'])\n sortedOfficials.sort((a, b) => {\n const aPosition = ALL_OFFICIAL_POSITIONS.findIndex(position => a.position === position);\n const bPosition = ALL_OFFICIAL_POSITIONS.findIndex(position => b.position === position);\n return aPosition - bPosition;\n })\n\n return sortedOfficials\n}\n","import { HOME, AWAY } from '../constants.js';\n\nexport const getTeamById = (teams, teamId) => {\n if (!teams) return;\n return teams[teamId];\n}\n\nexport const getTeamType = (game, teamId) => {\n if (game.homeTeamId == teamId) return HOME;\n if (game.awayTeamId == teamId) return AWAY;\n}\n\nexport const isNDTeam = (teams, teamId) => {\n if (!teamId) return false;\n const team = getTeamById(teams, teamId);\n if (!team || !team.HCRId) return false;\n return team.HCRId.startsWith('NDT');\n}\n","import { startCase } from '@hisports/common/src/lodash.js';\n\nimport { translateApiProperty } from '@hisports/common';\n\nimport { EVENT_TYPE_GOAL, EVENT_TYPE_PENALTY, EVENT_TYPE_GOALIE } from '../constants.js';\nimport { getMemberLabel } from './members.js';\nimport { isTimeEqual, displayTime } from './gameTime.js';\nimport { getFractionLabel, getInfractionRule, getInfractionType, isLegacyRulebookSeason } from './penalties.js';\n\nconst typeMapping = {\n isShorthanded: 'shg',\n isPowerplay: 'ppg',\n isEmptyNet: 'eng',\n isPenaltyShot: 'psg',\n isOwnGoal: 'og'\n}\n\n/**\n* @param {object} i18n\n* @param {string} i18n.assist_abbr\n* @param {string} i18n.bench\n* @param {string} i18n.coach\n*/\nexport const getAssists = (event, members, i18n) => {\n if (!event.assistIds || !event.assistIds.length) return;\n const assists = event.assistIds.map(participantId => getMemberLabel(members, participantId, i18n));\n return `${i18n.assist_abbr}: ${assists.join(', ')}`;\n}\n\n/**\n* @param {object} i18n\n* @param {string} i18n.served_abbr\n* @param {string} i18n.bench\n* @param {string} i18n.coach\n*/\nexport const getPenaltyServer = (event, members, i18n, { hideServedBy = false } = {}) => {\n if (!event.servedById || hideServedBy) return;\n return `${i18n.served_abbr}: ${getMemberLabel(members, event.servedById, i18n)}`;\n}\n\n/**\n* @param {object} i18n\n* @param {string} i18n.shg\n* @param {string} i18n.ppg\n* @param {string} i18n.eng\n* @param {string} i18n.psg\n*/\nexport const getGoalTypes = (event, i18n) => {\n const types = Object.entries(typeMapping).reduce((types, [type, key]) => {\n if (event[type]) {\n types.push(i18n[key]);\n }\n return types;\n }, []).filter(Boolean);\n\n return types.length ? `[${types.join(', ')}]` : '';\n}\n\nconst getInfractionTypeLabel = (penalty, type, fraction, locale) => {\n if (!type) return startCase(penalty.duration);\n\n let infractionTypeLabel = translateApiProperty(type, 'name', locale)\n\n if (fraction) {\n infractionTypeLabel += ` ${fraction}`;\n }\n\n return infractionTypeLabel;\n}\n\nconst getRuleLabel = (penalty, rule, locale, seasonId) => {\n if (!rule) return startCase(penalty.infraction);\n\n let label = translateApiProperty(rule, 'name', locale);\n\n const code = isLegacyRulebookSeason(seasonId) ? penalty.code : rule.code;\n\n if (code) {\n label = `${code} - ${label}`;\n }\n\n return label;\n}\n\n/**\n* @param {object} i18n\n* @param {string} i18n.start\n* @param {string} i18n.ended\n*/\nexport const getPenalty = (event, infractions, rules, types, penalties, i18n, sport, seasonId, locale, { hideStartTime = false } = {}) => {\n if (!event || (!event.infraction && !event.infractionId)) return null;\n\n const rule = getInfractionRule(event, infractions, rules, seasonId);\n const type = getInfractionType(event, infractions, types, seasonId);\n const fraction = getFractionLabel(event, infractions, types, rules, penalties, sport, seasonId);\n\n const ruleLabel = getRuleLabel(event, rule, locale, seasonId);\n const infractionTypeLabel = getInfractionTypeLabel(event, type, fraction, locale);\n\n let label = ''\n\n if (type && (type.overrideInfractionName || type.overrideRuleName)) {\n label = infractionTypeLabel;\n } else if (sport === 'Soccer') {\n label = !isLegacyRulebookSeason(seasonId) && rule ? ruleLabel : infractionTypeLabel;\n } else {\n label = `${ruleLabel} (${infractionTypeLabel})`;\n }\n\n if (!event.startTime || hideStartTime) return label;\n\n const isDelayed = !isTimeEqual(event.gameTime, event.startTime, sport);\n if (!isDelayed && !event.isEnded) return label;\n\n if (isDelayed && !event.isEnded) return `${label}\\n${i18n.start}: ${displayTime(event.startTime, sport)}`;\n if (!isDelayed && event.isEnded) return `${label}\\n${i18n.ended}: ${displayTime(event.endTime, sport)}`;\n return `${label}\\n${i18n.start}: ${displayTime(event.startTime, sport)}, ${i18n.ended}: ${displayTime(event.endTime, sport)}`\n}\n\n/**\n* @param {object} i18n\n* @param {string} i18n.served_abbr\n* @param {string} i18n.bench\n* @param {string} i18n.coach\n* @param {string} i18n.start\n* @param {string} i18n.ended\n*/\nexport const getPenaltyDetails = (event, infractions, rules, types, penalties, members, i18n, sport, seasonId, locale, options) => {\n const player = getMemberLabel(members, event.participantId, i18n);\n const servedBy = getPenaltyServer(event, members, i18n, options);\n const penalty = getPenalty(event, infractions, rules, types, penalties, i18n, sport, seasonId, locale, options);\n\n return [player, servedBy, penalty].filter(Boolean).join(' - ');\n}\n\n/**\n* @param {object} i18n\n* @param {string} i18n.shg\n* @param {string} i18n.ppg\n* @param {string} i18n.eng\n* @param {string} i18n.psg\n* @param {string} i18n.assist_abbr\n* @param {string} i18n.bench\n* @param {string} i18n.coach\n*/\nexport const getGoalDetails = (event, members, i18n) => {\n const playerLabel = getMemberLabel(members, event.participantId, i18n);\n const goalTypes = getGoalTypes(event, i18n);\n\n const player = [playerLabel, goalTypes].join(' ');\n const assists = getAssists(event, members, i18n);\n\n return [player, assists].filter(Boolean).join(' - ');\n}\n\n/**\n* @param {object} i18n\n* @param {string} i18n.empty_net\n* @param {string} i18n.put_in\n* @param {string} i18n.coach\n* @param {string} i18n.bench\n*/\nexport const getGoalieDetails = (event, members, i18n) => {\n if (!event.onParticipantId) return i18n.empty_net;\n const goaliePutIn = getMemberLabel(members, event.onParticipantId, i18n);\n\n return `${goaliePutIn} - ${i18n.put_in}`\n}\n\n/**\n* @param {object} i18n\n* @param {string} i18n.shg\n* @param {string} i18n.ppg\n* @param {string} i18n.eng\n* @param {string} i18n.psg\n* @param {string} i18n.assist_abbr\n* @param {string} i18n.served_abbr\n* @param {string} i18n.bench\n* @param {string} i18n.coach\n* @param {string} i18n.start\n* @param {string} i18n.ended\n* @param {string} i18n.empty_net\n* @param {string} i18n.put_in\n*/\nexport const getSummaryEventDetails = (event, members, infractions, rules, types, penalties, i18n, sport, seasonId, locale) => {\n switch (event.eventType) {\n case EVENT_TYPE_GOAL:\n return getGoalDetails(event, members, i18n);\n case EVENT_TYPE_GOALIE:\n return getGoalieDetails(event, members, i18n);\n case EVENT_TYPE_PENALTY:\n return getPenaltyDetails(event, infractions, rules, types, penalties, members, i18n, sport, seasonId, locale);\n }\n}\n","import { v4 as uuid, validate as isUUID } from 'uuid';\nimport { uniqBy } from '@hisports/common/src/lodash.js';\n\nexport * from './boxScore.js';\nexport * from './gameFlags.js';\nexport * from './gameTime.js';\nexport * from './members.js';\nexport * from './participants.js';\nexport * from './penalties.js';\nexport * from './legacyPenalties.js';\nexport * from './officials.js';\nexport * from './teams.js';\nexport * from './summaryEvents.js';\nexport * from './suspensions.js';\n\nexport function append(state, entity, property = 'id') {\n if (!entity) return state;\n if (entity[property] && state.some(e => e[property] == entity[property])) return state;\n return [...state, entity];\n}\n\nexport function appendMany(state, entities, property = 'id') {\n return uniqBy([...state, ...entities], property);\n}\n\nexport function update(state, id, payload, property = 'id') {\n return [...state].map(entity => {\n if (entity[property] != id) return entity;\n\n return Object.assign({}, entity, payload);\n });\n}\n\nexport function replace(state, id, newEntity, property = 'id') {\n let replaced = false;\n const newState = [...state].reduce((entities, entity) => {\n if (entity[property] != id) {\n entities.push(entity);\n return entities;\n }\n // skip if already replaced (duplicate)\n if (replaced) return entities;\n\n replaced = true;\n if (typeof newEntity === 'function') {\n entities.push(newEntity(entity));\n } else {\n entities.push(newEntity);\n }\n return entities;\n }, [])\n if (replaced) return newState;\n if (typeof newEntity === 'function') return append(state, newEntity(), property);\n return append(state, newEntity, property);\n}\n\nexport function removeById(state, id, property = 'id') {\n return state.filter(entity => entity[property] != id);\n}\n\nexport function removeByIds(state, ids, property = 'id') {\n return state.filter(entity => !ids.includes(entity[property]));\n}\n\nexport function generateId() {\n return uuid();\n}\n\nexport function stripTemp(value) {\n return String(value).substring(5);\n}\n\nexport function isTempId(value) {\n if (!String(value).startsWith(\"temp_\")) return false;\n return isUUID(stripTemp(value));\n}\n\nexport const byParticipantId = participantId =>\n entity => entity.participantId == participantId\n\nexport const byTeamId = teamId =>\n entity => entity.teamId == teamId\n\nexport const byAssists = participantId =>\n event => ((event && event.assistIds) || []).some(assistId => assistId == participantId)\n","import {\n PLAYER_POSITIONS,\n COACH_POSITIONS,\n STAFF_POSITIONS,\n GOALIE,\n REFEREE,\n LINESPERSON,\n LINESPERSON_TWO,\n LINESPERSON_THREE,\n OFFICIAL,\n SCOREKEEPER,\n TIMEKEEPER,\n SUPERVISOR,\n} from '../constants.js';\n\nexport const hasPosition = position => member =>\n member && member.positions && member.positions.includes(position);\n\nexport const isPlayerPosition = position =>\n PLAYER_POSITIONS.includes(position);\n\nexport const isCoachPosition = position =>\n COACH_POSITIONS.includes(position);\n\nexport const isStaffPosition = position =>\n STAFF_POSITIONS.includes(position);\n\nexport const isPlayer = member =>\n member && member.positions && member.positions.some(isPlayerPosition);\n\nexport const isGoalie = hasPosition(GOALIE);\n\nexport const isStarterGoalie = member =>\n member && hasPosition(GOALIE)(member) && member.isStarter\n\nexport const isCoach = member =>\n member && member.positions && member.positions.some(isCoachPosition);\n\nexport const isStaff = member =>\n member && member.positions && member.positions.some(isStaffPosition);\n\nexport const isSkater = member =>\n isPlayer(member) && !isGoalie(member)\n\nexport const isReferee = official =>\n official && official.position === REFEREE\n\nexport const isLinesperson = official =>\n official && [LINESPERSON, LINESPERSON_TWO, LINESPERSON_THREE].includes(official.position)\n\nexport const isExtraOfficial = official =>\n official && official.position === OFFICIAL\n\nexport const isSupervisor = official =>\n official && official.position === SUPERVISOR\n\nexport const isScorekeeper = official =>\n official && official.position === SCOREKEEPER\n\nexport const isTimekeeper = official =>\n official && official.position === TIMEKEEPER\n\nexport const isKeeper = official =>\n isScorekeeper(official) || isTimekeeper(official)\n\nexport const isOfficial = official =>\n isReferee(official) || isLinesperson(official) || isSupervisor(official) || isExtraOfficial(official)\n\nexport const isAffiliate = member => member.isAffiliate\n\nexport const isSuspended = member => member.suspension != null;\nexport const isNotSuspended = member => member.suspension == null;\n\nexport const getMember = (members, participantId) => {\n if (!members || !participantId) return null;\n return Array.isArray(members) ? members.find(member => member.participantId === participantId) : members[participantId];\n}\n\n/**\n* @param {object} i18n\n* @param {string} i18n.bench\n* @param {string} i18n.coach\n*/\nexport const getMemberType = (member, i18n) => {\n if (isPlayer(member)) return member.number;\n if (isCoach(member)) return i18n.coach;\n return i18n.bench;\n}\n\n/**\n* @param {object} i18n\n* @param {string} i18n.bench\n* @param {string} i18n.coach\n*/\nexport const getMemberLabel = (members, participantId, i18n) => {\n const member = getMember(members, participantId);\n if (!member) return '';\n return `${member.participant.fullName} (${getMemberType(member, i18n)})`;\n}\n\nexport const getStatus = (member, short = true) => {\n const status = [];\n if (!member) return [];\n if (member.isCaptain) status.push(short ? 'C' : 'Captain');\n if (member.isAlternate) status.push(short ? 'A' : 'Alternate');\n if (member.isAffiliate) status.push(short ? 'AP' : 'Affiliate');\n if (member.isOverage) status.push(short ? 'OA' : 'Over-age');\n if (member.isUnderage) status.push(short ? 'UA' : 'Under-age');\n if (member.isStarter) status.push(short ? 'S' : 'Starter');\n if (member.suspension) status.push(short ? 'SUS' : `Suspended${member.suspension.game ? ` (${member.suspension.game}/${member.suspension.total || '∞'})` : ''}`);\n if (member.isReleased) status.push(short ? 'Rls' : 'Released');\n return status.join(' / ');\n}\n\nexport const getMemberPositionGroup = (members, participantId) => {\n const member = getMember(members, participantId);\n if (!member || !member.positions || !member.positions.length) return 'Player';\n return member.positions.some(isPlayerPosition) ? 'Player' : 'Staff'\n}\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\tid: moduleId,\n\t\tloaded: false,\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Flag the module as loaded\n\tmodule.loaded = true;\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n// expose the modules object (__webpack_modules__)\n__webpack_require__.m = __webpack_modules__;\n\n","__webpack_require__.amdO = {};","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = function(module) {\n\tvar getter = module && module.__esModule ?\n\t\tfunction() { return module['default']; } :\n\t\tfunction() { return module; };\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = function(exports, definition) {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.f = {};\n// This file contains only the entry chunk.\n// The chunk loading function for additional chunks\n__webpack_require__.e = function(chunkId) {\n\treturn Promise.all(Object.keys(__webpack_require__.f).reduce(function(promises, key) {\n\t\t__webpack_require__.f[key](chunkId, promises);\n\t\treturn promises;\n\t}, []));\n};","// This function allow to reference async chunks\n__webpack_require__.u = function(chunkId) {\n\t// return url for filenames based on template\n\treturn \"\" + chunkId + \".\" + {\"6\":\"63e310b5d6ea601be56d\",\"34\":\"6bdb7c082704a1621e09\",\"141\":\"c0527c1b7b52817a0dc1\",\"161\":\"dae917ee7bf375371693\",\"183\":\"5e6e40589ea1047752f0\",\"245\":\"da18865c36e41c4dd022\",\"260\":\"1252ed2c6b71c15c956c\",\"273\":\"95aa5a3067ed8e125166\",\"446\":\"736a5ac38b5dff63e86d\",\"519\":\"cf58a8aaba5dcff2f268\",\"598\":\"e0646408298d6289b544\",\"672\":\"3bf55f6f9738b56027c1\",\"926\":\"e972dbf67d499eb2d748\",\"946\":\"072cf88040d1d0d65519\",\"973\":\"464608438c0b547b2235\"}[chunkId] + \".bundle.js\";\n};","// This function allow to reference async chunks\n__webpack_require__.miniCssF = function(chunkId) {\n\t// return url for filenames based on template\n\treturn \"\" + chunkId + \".\" + {\"6\":\"a0d01c1350ef7d091b77\",\"926\":\"edd15ecdd3e92448201b\"}[chunkId] + \".bundle.css\";\n};","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","__webpack_require__.hmd = function(module) {\n\tmodule = Object.create(module);\n\tif (!module.children) module.children = [];\n\tObject.defineProperty(module, 'exports', {\n\t\tenumerable: true,\n\t\tset: function() {\n\t\t\tthrow new Error('ES Modules may not assign module.exports or exports.*, Use ESM export syntax, instead: ' + module.id);\n\t\t}\n\t});\n\treturn module;\n};","__webpack_require__.o = function(obj, prop) { return Object.prototype.hasOwnProperty.call(obj, prop); }","// define __esModule on exports\n__webpack_require__.r = function(exports) {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","__webpack_require__.nmd = function(module) {\n\tmodule.paths = [];\n\tif (!module.children) module.children = [];\n\treturn module;\n};","__webpack_require__.p = \"/\";","// no baseURI\n\n// object to store loaded and loading chunks\n// undefined = chunk not loaded, null = chunk preloaded/prefetched\n// [resolve, reject, Promise] = chunk loading, 0 = chunk loaded\nvar installedChunks = {\n\t179: 0\n};\n\n__webpack_require__.f.j = function(chunkId, promises) {\n\t\t// JSONP chunk loading for javascript\n\t\tvar installedChunkData = __webpack_require__.o(installedChunks, chunkId) ? installedChunks[chunkId] : undefined;\n\t\tif(installedChunkData !== 0) { // 0 means \"already installed\".\n\n\t\t\t// a Promise means \"currently loading\".\n\t\t\tif(installedChunkData) {\n\t\t\t\tpromises.push(installedChunkData[2]);\n\t\t\t} else {\n\t\t\t\tif(true) { // all chunks have JS\n\t\t\t\t\t// setup Promise in chunk cache\n\t\t\t\t\tvar promise = new Promise(function(resolve, reject) { installedChunkData = installedChunks[chunkId] = [resolve, reject]; });\n\t\t\t\t\tpromises.push(installedChunkData[2] = promise);\n\n\t\t\t\t\t// start chunk loading\n\t\t\t\t\tvar url = __webpack_require__.p + __webpack_require__.u(chunkId);\n\t\t\t\t\t// create error before stack unwound to get useful stacktrace later\n\t\t\t\t\tvar error = new Error();\n\t\t\t\t\tvar loadingEnded = function(event) {\n\t\t\t\t\t\tif(__webpack_require__.o(installedChunks, chunkId)) {\n\t\t\t\t\t\t\tinstalledChunkData = installedChunks[chunkId];\n\t\t\t\t\t\t\tif(installedChunkData !== 0) installedChunks[chunkId] = undefined;\n\t\t\t\t\t\t\tif(installedChunkData) {\n\t\t\t\t\t\t\t\tvar errorType = event && (event.type === 'load' ? 'missing' : event.type);\n\t\t\t\t\t\t\t\tvar realSrc = event && event.target && event.target.src;\n\t\t\t\t\t\t\t\terror.message = 'Loading chunk ' + chunkId + ' failed.\\n(' + errorType + ': ' + realSrc + ')';\n\t\t\t\t\t\t\t\terror.name = 'ChunkLoadError';\n\t\t\t\t\t\t\t\terror.type = errorType;\n\t\t\t\t\t\t\t\terror.request = realSrc;\n\t\t\t\t\t\t\t\tinstalledChunkData[1](error);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t\t__webpack_require__.l(url, loadingEnded, \"chunk-\" + chunkId, chunkId);\n\t\t\t\t} else installedChunks[chunkId] = 0;\n\t\t\t}\n\t\t}\n};\n\n// no prefetching\n\n// no preloaded\n\n// no HMR\n\n// no HMR manifest\n\n__webpack_require__.O.j = function(chunkId) { return installedChunks[chunkId] === 0; };\n\n// install a JSONP callback for chunk loading\nvar webpackJsonpCallback = function(parentChunkLoadingFunction, data) {\n\tvar chunkIds = data[0];\n\tvar moreModules = data[1];\n\tvar runtime = data[2];\n\t// add \"moreModules\" to the modules object,\n\t// then flag all \"chunkIds\" as loaded and fire callback\n\tvar moduleId, chunkId, i = 0;\n\tif(chunkIds.some(function(id) { return installedChunks[id] !== 0; })) {\n\t\tfor(moduleId in moreModules) {\n\t\t\tif(__webpack_require__.o(moreModules, moduleId)) {\n\t\t\t\t__webpack_require__.m[moduleId] = moreModules[moduleId];\n\t\t\t}\n\t\t}\n\t\tif(runtime) var result = runtime(__webpack_require__);\n\t}\n\tif(parentChunkLoadingFunction) parentChunkLoadingFunction(data);\n\tfor(;i < chunkIds.length; i++) {\n\t\tchunkId = chunkIds[i];\n\t\tif(__webpack_require__.o(installedChunks, chunkId) && installedChunks[chunkId]) {\n\t\t\tinstalledChunks[chunkId][0]();\n\t\t}\n\t\tinstalledChunks[chunkId] = 0;\n\t}\n\treturn __webpack_require__.O(result);\n}\n\nvar chunkLoadingGlobal = self[\"webpackChunk_hisports_admin\"] = self[\"webpackChunk_hisports_admin\"] || [];\nchunkLoadingGlobal.forEach(webpackJsonpCallback.bind(null, 0));\nchunkLoadingGlobal.push = webpackJsonpCallback.bind(null, chunkLoadingGlobal.push.bind(chunkLoadingGlobal));","__webpack_require__.nc = undefined;","// startup\n// Load entry module and return exports\n// This entry module depends on other loaded chunks and execution need to be delayed\nvar __webpack_exports__ = __webpack_require__.O(undefined, [404,919], function() { return __webpack_require__(21506); })\n__webpack_exports__ = __webpack_require__.O(__webpack_exports__);\n"],"names":["deferred","leafPrototypes","getProto","inProgress","loadStylesheet","installedCssChunks","ActionMenuItem","styled","MuiMenuItem","minWidth","theme","spacing","ActionMenu","children","useState","anchor","setAnchor","handleClose","Children","child","React","filter","Boolean","length","size","onClick","e","currentTarget","open","keepMounted","anchorEl","anchorOrigin","vertical","horizontal","transformOrigin","onClose","action","cloneElement","props","INTERNAL","LEAGUES","MANAGE","VIEW","PUBLIC","PARTICIPANTS","ACCOUNTS","PERMISSIONS","INVITE","PROFILES","ADDRESSES","NOTIFICATIONS","TEAMS","ROSTER","ACTIVITIES","SETTINGS","SCHEDULING","GAMES","STATUS","DRAFTS","PRACTICES","AVAILABILITY","APPROVE","ASSIGNING","QUALIFICATIONS","LISTS","ASSIGN","OFFICIAL","SCORESHEETS","LINEUPS","EVENTS","SUSPENSIONS","DISCIPLINE","STATS","WRITE","REPORTS","SCHEMAS","CMS","every","group","Object","keys","map","key","ALL","profile","official","league","games","feed","reports","list","show","create","edit","remove","venues","surfaces","leagues","createProviders","editProviders","tournaments","cups","offices","editHCR","peopleTab","assigningTab","rulebookTab","settingsTab","schedulerTab","publish","share","internal","officemembers","officeSettings","branchOfficeSettings","internalTab","officeAssignSettings","rulebooks","infractions","infractionTypes","ruleSections","rules","ruleOptions","ruleOptionMembers","infractionAccumulations","infractionAccumulationMembers","groups","pools","arenaoffices","arenaslots","import","bulkActions","availabilities","officialAvailabilities","categories","assigners","accounts","identities","permissions","roles","participants","invite","contacts","profileTab","registrationsTab","officiatingTab","registrations","qualifications","importGrades","importQualifications","officialOffices","importOfficials","officialClaims","changeStatus","officialClaimDocuments","officialTransactions","payPeriods","officeClaimsSettings","verify","addresses","notifications","profiles","officialConflicts","attributeTypes","attributeValues","teams","gameTeams","schedules","activities","practices","teamArenas","members","status","scheduler","settings","targets","standings","stats","scheduleteams","schedulesequences","schedulingConstraints","drafts","shared","draftGames","approve","assignSettings","assign","request","officials","affiliates","forfeit","shots","throwsInnings","resetAssignRules","resetScoresheet","gameBrackets","scheduleSettings","gameDocuments","announcements","gameMessagesLeague","gameMessagesOfficiating","assignSystems","assignFees","assignRules","assignTargets","gameAssignSettings","lists","listMembers","scoresheets","full","lineup","adminNotes","gameAffiliates","gameEvents","suspensions","suspensionDisciplines","trigger","committee","gamePurges","gameIncidents","gamepenalties","sanctions","sanctionMembers","sanctionOffenses","sections","pages","posts","webevents","help","divisions","classes","hasAnyScope","scopes","requiredScopes","some","scope","includes","isAuthorized","recordOrScopes","resource","method","includeAll","filteredScopes","console","error","requirements","log","Array","isArray","_filteredScopes","_scopes","authService","useDividerStyles","makeStyles","container","display","alignItems","paddingTop","paddingBottom","width","border","borderBottom","palette","divider","content","paddingInline","fontWeight","fontSize","flexGrow","whiteSpace","DividerWithText","label","className","translate","useTranslate","trim","useStyles","time","justifyContent","alert","marginBottom","EventChanges","previousEvent","hideAlert","indicateChangeRemoval","alertLabel","event","useRecordContext","showGameAlert","updatedGameId","hideRow","property","source","format","hasChanged","currentEvent","startTimeChanged","startTime","endTimeChanged","endTime","startSource","endSource","location","hidden","FieldDependency","fieldSource","disabled","test","value","values","useFormState","tooltip","maxWidth","InformationTooltip","text","placement","title","variant","color","LazyBoundaryAlert","severity","icon","LazyBoundaryDialog","setOpen","LazyBoundary","this","state","name","dialog","Component","LazyFallbackDialog","fullWidth","colour","LazyDialog","Suspense","fallback","square","Alert","SquareAlert","MuiAlert","addButton","noResultsText","_","style","flexDirection","padding","gutterBottom","borderRadius","noop","WizardContext","createContext","validate","onSubmit","setValidate","setSubmit","options","WizardProvider","wizard","setWizard","handleSubmit","Provider","useWizard","context","useContext","useEffect","withWizard","CalendarContext","Loader","LinearProgress","position","inset","filterDates","dates","weekdays","date","moment","locale","sort","a","b","localeCompare","getDatesBeforeEnd","endDate","endDateIndex","findIndex","isAfter","slice","getDays","filterValues","timezone","start","tz","startOf","days","end","diff","type","CALENDAR_VIEWS","useCalendarContext","CalendarProvider","memo","includeVenue","popoverActions","hideArena","disableAuth","maxColumns","defaultMaxColumns","initialStart","strictView","useListContext","useCalendarView","view","setView","surfaceSizes","useSurfaceSizes","useSchedulingContext","selectedGame","availability","gameLength","loading","schedule","scheduleTeams","dateFilter","setDateFilter","useLocale","record","usePermissions","officeId","hasAccess","useQuery","GET_ONE","payload","id","enabled","useOffice","p","roleType","officeIds","hasOfficeAccess","scheduleOffice","data","showCondensedView","useShowCondensedView","colOffset","setColOffset","navigateToDate","setNavigateToDate","useMemo","filteredSurfaces","surface","timezones","office","s","alias","dedupe","getTimezones","arenaId","index","columns","getAlert","header","getDateRange","startDate","slots","eventDates","scheduleDates","filterStartDate","allDates","push","add","isSameOrBefore","getAllScheduleDates","selectedDates","dedupeBy","scheduleTeam","team","orderedTeams","selectedGameTeams","homeTeamId","awayTeamId","concat","totalColumns","rows","allrows","filterEvents","events","toEventDetails","item","eventResource","eventId","gridDateIndex","getEventResource","getEventId","onNext","onBack","endOf","calendarEnd","isBefore","getMonthDates","totalWeeks","i","daysOfWeek","itemColumn","x","itemRow","y","h","teamIds","teamId","getColumnKey","getColumnIndex","getColumnHeading","hasDate","effectiveIds","effectiveSurfaceIds","flat","positionArenaId","targetType","targetId","attributes","getSurfaceAttributes","component","MuiLink","to","target","getSurfaceName","dateEvents","isSame","pushSplitSurfaceEvents","newEvents","forEach","eventSurface","find","surfaceId","isEditable","isSplitSurfaceEvent","itemHeight","startOfDay","hours","minutes","seconds","set","SNAP_MINUTES","toISOString","arena","fill","day","nextMonth","layout","pop","scheduleStartDate","scheduleEndDate","oneMonthFromStartDate","clone","availabilityInfo","increment","marginLeft","getRowHeight","cellSize","height","getMaxRows","offsetHours","getGridWidth","getCols","getDndItem","duration","colIndex","offset","itemId","styleOverrides","left","zIndexProps","grid","Math","floor","w","isDraggable","multiday","sanitizeItemId","substring","indexOf","isNaN","Number","sanitizedId","validateEvent","isGame","isDraft","errors","AvailabilityInfo","draftId","isPractice","TimeIncrementInput","form","useForm","amount","unitOfTime","getState","batch","newStartTime","isValid","change","newEndTime","GameStatusInput","blur","useGameAvailabilities","deferDraftConflict","conflicted","hasConflicts","helperText","validateStatus","PracticeStatusInput","practice","usePracticeAvailabilities","StatusInput","RecordForm","EventChangesForm","handleCancel","handleConfirm","canEditEvent","overlappingTimeSlot","slot","recordRange","createRange","overlaps","updatedRecord","decorators","useRef","createCalculator","field","updates","prevValues","validateOnBlur","initialValues","current","EventChangesFormBody","canShowTimeIncrement","defaultValue","ConfirmDialog","schedulingResource","draggingEvent","useDragContext","useResourceContext","disableDateChange","useLimitDateChange","useGetOne","loaded","hasDateChanged","cantChangeDate","AvailabilityContextProvider","PracticeAvailabilityContextProvider","GameAvailabilityContextProvider","SeasonDndGrid","rowHeights","selectedRows","sizes","totalHeight","row","rowHeight","offsetHeight","cellHeight","DragAndDropGrid","notify","useNotify","setSelectedGame","onSave","disableScheduling","setRefreshAvailability","dragging","setDragging","setDraggingEvent","droppingEvent","dataProvider","useDataProvider","dragPosition","setDragPosition","initialPosition","setInitialPosition","showConfirm","setShowConfirm","gridLayout","setGridLayout","previousLayout","setPreviousLayout","undo","setUndo","setPreviousEvent","updateLayout","setUpdateLayout","isDroppable","maxRows","gridWidth","cols","getGridDimensions","gridStyle","top","zIndex","gridStyles","oldGridLayout","JSON","parse","stringify","newGridLayout","childItem","layoutIndex","onDragStop","oldItem","newItem","setTimeout","newEvent","saveEvent","update","droppingItem","undefined","onLayoutChange","margin","isResizable","allowOverlap","compactType","onDragStart","oldEvent","onDrag","eventDetails","onDrop","layoutItem","useCSSTransforms","isBounded","DragContext","DragProvider","setDroppingEvent","isDraftGameType","isInactive","getDuration","useEventStyles","getBackgroundColor","eventType","isSelected","isHovered","scheduleType","gameColor","getGameColorBasedOnScheduleType","purple","blueGrey","grey","yellow","lightBlue","success","warning","primary","getBoxShadow","shadows","root","borderWidth","getBorderWidth","borderStyle","getBorderStyle","borderColor","getBorderColor","backgroundColor","boxShadow","transition","overflow","cursor","useGameStyles","number","flexFlow","alignContent","gap","lineHeight","teamName","fontStyle","OpponentField","game","isHome","link","GameDetails","useScheduleWithStore","scheduleId","GameCard","showOpponent","inactive","gameType","permittedToEdit","eventClasses","gameNumber","CalendarGameIcon","includeGender","disableLaunch","usePracticeStyles","PracticeDetails","practiceTitle","smart_count","mb","includeAttributes","includeCity","useActivityStyles","ActivityDetails","activity","useSlotStyles","ellipsis","textOverflow","details","SlotDetails","timeSlotName","timeslotTitle","arenaDetails","flexWrap","mt","gapX","useAvailabilityStyles","available","background","alpha","unavailable","AvailabilityDetails","isAvailable","isMixed","availabilityClass","teamsTooltip","isAway","Icon","join","StarBorder","Home","CardTravel","DraftIcon","GameIcon","card","verticalAlign","note","availabilityList","slotLoad","LaunchButton","showLink","rowClick","ExitButton","EventDetailsPopover","popoverContent","popRight","disableCloseOnBlur","setAnchorEl","onBlur","PaperProps","SlotsList","readOnly","selectedSlot","setSelectedSlot","useSlotsInUse","slotsInUse","updatedEvent","handleClick","dense","disablePadding","disableGutters","handleChange","handleSelect","isInUse","isSlotInUse","categoryIds","types","leagueIds","headerActions","headerAction","cellClass","AvailabilityDetailsList","unavailabilities","overlappingAvailability","TargetField","includeSeason","isPrimary","notes","render","comments","showDate","showLocal","isHomeFirst","useIsHomeFirst","homeTeam","authMethod","includeId","includeCategory","awayTeam","smallActionBtns","includeType","groupId","crossScheduleId","crossGroupId","categoryId","seasonId","AvailabilityDetailsListPopover","SlotDetailsPopover","AvailabilityDetailsPopover","ActivityDetailsPopover","PracticeDetailsPopover","GameDetailsPopover","EVENT_TYPES","teamEvents","isSlot","isAvailability","getResourceByType","getZIndex","baseZIndex","calculateEvents","isGrouped","eventGroup","groupEvents","reduce","endOfDay","eventStartOfDay","prevEvent","prevEventStart","layoutStartTime","layoutEndTime","eventRange","findLast","range","offsetTime","lastTime","groupEventStart","groupEventEnd","groupRange","parent","eventWidth","grouping","groupEvent","groupWidth","boxSizing","isDnDItem","transform","offsetLeft","hoverWidth","dndItem","isDragged","TeamEventDetails","EventDetails","Event","minute","columnOffset","hoursOffset","minutesOffset","TeamEvents","layoutTeamEvents","isTeamEvent","DndGrid","DragAndDropItem","gridLayoutRef","gridLayoutClassName","gridLayoutStyle","gridLayoutProps","draggedZIndex","ref","Slots","layoutSlots","Availabilities","layoutAvailabilities","combinedAvailabilities","Date","decoupled","decoupling","nextTime","t","newAvailabilityRange","newAvailabilityOverlaps","adjacent","isUnavailable","newAvailability","combineAvailabilities","SchedulingContext","getScheduleAvailability","additionalSurfaceIds","signal","apiClient","url","params","getOfficeAvailability","isSeasonView","includeAwaySlots","includePractices","includeActivities","SchedulingProvider","defaultScheduleId","limitedView","showSchedule","setSurfaceSizes","showAwaySlots","useShowAwaySlots","useSchedule","scheduleLoading","GET_LIST","_include","order","useScheduleTeams","scheduleTeamsLoading","useScheduleSettings","scheduleSettingsLoading","setAvailability","refreshAvailability","setLoading","setGameLength","surfaceOfficeId","setSurfaceOfficeId","setDeferDraftConflict","limitDateChange","setLimitDateChange","abortController","AbortController","then","finally","abort","Generator","GenerateDraftGamesAction","isOpen","ListItemIcon","ListItemText","Uploader","ImportDraftGamesAction","UnarchiveOutlined","AddMenu","hideAddGame","hideAddDraft","buttonTitle","isEnabled","useFlag","canCreateDrafts","canCreateGames","canCreateSequences","FF_SEQUENCES","showBrackets","FF_BRACKETS","Button","startIcon","Add","Menu","ListSubheader","SelectableListView","localSort","localFilter","localFilterCallback","initialSelectAll","setLoaded","records","setRecords","initialSelection","listContext","useList","toLocaleLowerCase","page","perPage","selectedIds","getList","pagination","res","catch","ListContextProvider","inputProps","gameFilter","isLeague","scheduleOffices","or","homeTeamOffices","EventViewSettingsProvider","groupDates","groupArenas","groupRounds","assignments","gameInfo","flags","reverseHomeAway","useReverseHomeAway","calendar","awaySlots","teamNames","gameListFilter","GAME_LIST_FILTERS","EventViewSettings","ShareDraftGameForm","useEventSort","useSeason","filters","TeamInput","multiple","allowEmpty","alwaysOn","DateInput","actions","disableCalendar","disableAssignments","disableGroupRounds","disableGroupArenas","showTeamEvents","showSlots","showTeamNames","showAvailabilties","showSurfaceSizes","showFlagsInput","showRenumber","showGameInfoInput","pastEvents","isShared","isPublished","SimpleForm","draftGame","isRowSelectable","hasBulkActions","hideStatus","Fragment","ShareDraftGameDialog","fullScreen","useMediaQuery","breakpoints","down","refresh","useRefresh","Dialog","DialogTitle","DialogContent","DialogContentText","ResourceContextProvider","RecordContext","save","draftGameIds","count","err","toolbar","DialogForm","submitLabel","onCancel","disableInvalidSubmit","ShareDraftGameAction","PersonAddOutlined","PublishDraftGameForm","BooleanInput","PublishDraftGameDialog","confirmOpen","setConfirmOpen","confirmedSelectedIds","setConfirmedSelectedIds","publishDraftGames","failed","invalid","response","errorMsg","ScheduleSequenceError","ScheduleSequenceAlert","marginBlock","PublishDraftGamesAction","DoneAll","filterProps","marginRight","multipleProps","allOfficeFilter","neq","localOfficeFilter","nin","GAME_OFFICE_TYPES","listFilterDiv","listFilter","GameListFilterInput","useGameListFilter","setGameListFilter","FormControl","Select","onChange","FILTER","MenuItem","gameList","selectedGameActions","table","UnscheduleDialog","removeDate","setRemoveDate","stopPropagation","FormControlLabel","control","Checkbox","checked","FormHelperText","DialogActions","autoFocus","calendarView","officeNames","condensedView","UnscheduleButton","setUnscheduleGame","Tooltip","IconButton","EventBusy","EditButton","setGame","Edit","Calendar","setEditGame","ids","contextValue","EventCalendar","SelectedGame","isScheduled","showCalendar","showClear","dragComponent","DraggableEvent","GameList","showAdd","upperListContext","previousView","usePrevious","wasSeasonView","isEmpty","setFilters","missingStartTime","currentSort","handleRowSelect","basePath","listViewProps","headerRow","addPosition","rowsPerPageOptions","compactToolbar","DraggableGameList","hideActions","showPools","View","unscheduleGame","editGame","handleUnschedule","newGame","onSubmitSuccess","Grid","xs","onSuccess","skipRefresh","setGameId","useScopes","useShowCalendar","setShowCalendar","setCalendarView","useDatelessView","datelessView","setDateLessView","useShowGameInfo","setShowGameInfo","setShowAwaySlots","groupsData","useSelector","admin","resources","canPublishDrafts","canShareDrafts","rest","disableSeasonView","showOfficeNames","showViewToggle","getFilter","canListTeams","canListOffices","canListSurfaces","scheduleHasGroups","hasGroups","teamFilter","OfficeInput","O","TextInput","SurfaceInput","parentId","CategoryInput","GroupInput","getGameListFilters","ListCard","base","EventReferenceManyField","baseProps","includeGames","includeDraftGames","includeSlots","includeAvailabilities","cardAction","flex","TopToolbar","CardHeader","MuiCardHeader","collapsable","Collapsable","smallIcons","marginTop","marginright","subtitle","collapseActions","Card","componentProps","cardActions","canCollapseActions","showActions","avatar","subheader","titleTypographyProps","subheaderTypographyProps","CardContentInner","Actions","useActionStyles","ActionsToolbar","renderActions","useListStyles","minHeight","paddingLeft","ListView","labelDisplayedRows","labelRowsPerPage","bulkActionButtons","total","showBulkActions","actionsToolbar","noResultsFound","showToolbar","showHeaderRow","showFooter","ReferenceManyBase","reference","useReferenceManyFieldController","Expandable","dialogOpen","dialogProps","fullHeight","maxHeight","canOpen","ExpandableComponent","expandableComponent","ExpandIcon","expandIcon","expandable","onExpand","Base","ListBase","additionalContent","setDialogOpen","onToggleDialog","Z","syncWithLocation","StyledTableRow","TableRow","clickable","hover","colSpan","MuiDialogContentText","message","reject","accept","extraButton","onExtraButtonClose","DialogDatagridRow","handleSave","handleDelete","onDelete","canEdit","selectable","canClickRow","DialogDatagridBody","canDelete","rowOptions","DialogDatagrid","bodyOptions","body","Error","main","DialogFormActions","DialogFormToolbar","submittingLabel","hideSubmit","cancelLabel","deleteButton","disableSubmit","showSubmitLoading","submitError","submitting","showLoader","ResourceDialog","disableDelete","undoableDelete","externalId","redirect","undoable","onFailure","disableBackdropClick","saving","destroyOnUnmount","CreateResourceDialog","useCreate","returnPromise","EditResourceDialog","customHandleSubmit","useUpdate","CRUD_GET_ONE","Alt","getDate","yearFormat","getDateFormat","startsWith","DateField","emptyText","dateFormat","hasTimezone","tzDate","localDate","noWrap","defaultProps","addLabel","isSameYear","DateRangeField","tzRange","localRange","grayText","secondary","decline","textDecoration","handleHasChanged","previousValue","currentValue","hasEventChanged","hasChangeRemoval","FunctionField","sport","useSport","sanitizeFieldRestProps","propTypes","Typography","PropTypes","TextArrayField","entity","element","TextLocaleField","i18n","formatRange","startFormat","endFormat","TimeRangeField","isLocalTimezone","UpdatedAtField","includePrefix","typographyProps","updatedAt","updatedByAuthor","prefix","renderUpdatedAt","pdfjs","NoPdfPreview","close","reactPinchPanZoom","centerView","styles","role","image","pageCount","fileLoading","errorView","onDocumentLoadSuccess","onPreviewFail","containerRef","resetScalePoints","Document","file","onLoadSuccess","renderMode","externalLinkTarget","onLoadError","setTransform","scale","noData","from","pageNumber","Page","scaleValue","min","clientWidth","originalWidth","max","clientHeight","originalHeight","renderAnnotationLayer","fileData","onLoad","fileName","setPreviewInfo","fileType","reducedWidth","isMobile","imageWidth","window","innerWidth","src","alt","onError","naturalWidth","naturalHeight","isVisible","TextFiles","line","userSelect","toString","audioSource","canDownload","downloadFile","audioTag","volume","controls","autoPlay","PreviewFailed","videoSrc","videoTag","disablePictureInPicture","hasScroll","metaViewportTag","document","querySelector","setAttribute","getAttribute","classList","addEventListener","ctrlKey","preventDefault","passive","focus","replace","FileLoading","getIcon","GetApp","PictureAsPdf","Image","Description","fullPath","createdBy","creationDate","openInNewTabURL","URLToFetchForDownload","setImage","fetchedType","setFetchedType","setPageNumber","shownControls","setShownControls","mouseCooldown","previewInfo","File","isPhone","UAParser","getDevice","isLoading","isPdf","setIsPdf","isTextFile","isVideoFile","isAudioFile","hideControls","clearTimeout","showControls","cooldown","buildScalePoints","initialScale","jumpStep","points","lowerPoint","higherPoint","scalePoints","numPages","fetch","r","blob","URL","createObjectURL","Promise","resolve","createElement","download","href","encodeURIComponent","appendChild","click","canZoomInOut","useCallback","scrollHeight","scrollWidth","getVideoImageValue","getAudioImageValue","cache","split","original_file_mime_type","preview_full_path","full_path","reader","FileReader","result","readAsText","handleEsc","keyCode","removeEventListener","createPortal","minScale","maxScale","limitToBounds","onMouseMove","tabIndex","onKeyDown","code","zoomIn","zoomOut","family_name","onDoubleClick","tag","rel","OpenInNew","CloseOutlined","wrapperClass","ZoomOut","ZoomIn","useAutoHideNotify","timerRef","showNotification","useFocusState","focusKey","timeout","scrollTimeout","useLocation","history","useHistory","scrollTo","timer","getElementById","scrollIntoView","behavior","block","inline","isFocused","useIsOwnParticipant","participantId","useParticipant","themeColor","StatusIcon","tooltipText","UnsanctionedIcon","useTheme","isSanctioned","DomainDisabledOutlined","pink","ImportStepper","steps","activeStep","getOptionDescription","option","optionDescription","description","DefaultSetFilter","EmptyArray","input","suggestion","allowDuplicates","classesOverride","choices","debounce","debounceDelay","emptyValue","idOverride","inputOverride","isRequiredOverride","isRequired","limitChoicesToValue","matchSuggestion","metaOverride","meta","nullable","onFocus","suggestionComponentProps","labelProps","InputProps","inputOptions","optionText","optionValue","disableSort","placeholder","setFilter","shouldRenderSuggestions","suggestionLimit","translateChoice","groupBy","alwaysGroup","inputValueMatcher","filterKeys","suggestionComponent","disableClearable","hideDisabled","getOptionDisabled","minFilterLength","emptyOptionsText","disableRemove","renderTags","isValidElement","useInput","touched","debouncedSetFilter","filterValue","setFilterValue","handleFilterChange","reason","useChoices","getChoiceText","getChoiceValue","getSuggestionFromValue","choice","selectedValue","grouped","_filterOptions","sorter","items","inputValue","matchSorter","isTooShort","renderOption","selected","noOptionsText","includeInputInList","forcePopupIcon","openOnFocus","disableCloseOnSelect","selectOnFocus","filterOptions","results","filterSelectedOptions","getOptionLabel","getOptionSelected","onInputChange","renderInput","autoComplete","useComponentSize","timeMask","maskOptions","mask","CheckboxInput","hideHelper","finalFormOnChange","sanitizeInputRestProps","chips","chip","nextValue","v","formHelperText","hasEmptyLabel","InputLabel","htmlFor","FieldTitle","choiceValue","Chip","selectThreshold","showNone","long","dataA","dataB","sensitivity","ignorePunctuation","numeric","AutocompleteInput","datePlaceholder","dateTimePlaceholder","defaultOptions","showTodayButton","autoOk","minutesStep","hideTabs","getOptions","makePicker","PickerComponent","dateOnly","focused","setFocused","onDateChange","parseFormat","utc","dateISO","allOptions","inputVariant","InputLabelProps","shrink","KeyboardDatePicker","InlineDateInput","InlineDateTimeInput","KeyboardTimePicker","KeyboardDateTimePicker","EndTimeInput","maxHours","useField","localTimezone","maxDate","openTo","initialFocusedDate","minDate","EndDateInput","EnumInput","Input","select","radio","sortValues","emptyLabel","RadioButtonGroupInput","SelectArrayInput","SelectInput","sports","renderValue","first","last","EnumField","SeasonInput","SEASONS","getSeasonDisplayName","ScheduleTypeEnumInput","TournamentScheduleTypeEnumInput","CupScheduleTypeEnumInput","initialValue","GameStatusEnumInput","GamePeriodEnumInput","FIRST_PERIOD","SECOND_PERIOD","THIRD_PERIOD","OVERTIME_PERIOD","SHOOTOUT_PERIOD","ArenaSlotTypeEnumInput","ActivityTypeEnumInput","AssignmentStatusEnumInput","OfficeTypeEnumInput","hideOrganization","unshift","PlayerPositionsEnumInput","AssignmentPositionsEnumInput","additionalChoices","ASSIGNMENT_POSITIONS","MemberPositionsEnumInput","ContactTypeEnumInput","AddressTypeEnumInput","LanguageTypeEnum","ProfileDexterityEnumInput","DayEnumInput","abbreviation","AnnouncementTypeEnumInput","AnnouncementTargetTypeEnumInput","DraftGameMethodInput","GENERATOR_METHODS","DraftGameTypeInput","showMatrixOption","GENERATOR_TYPES","DraftGameRoundTypeEnumInput","GENERATOR_ROUND_TYPES","DraftGameWeekdaysTypeEnumInput","GENERATOR_WEEKDAYS_TYPES","DraftTypeEnumInput","DraftMethodEnumInput","DraftRoundTypeEnumInput","ROUND_TYPES","ProvinceEnumInput","RoleEnumInput","FrequencyEnumInput","TimezoneEnumInput","COUNTRY_CODES","region","replaceAll","FileTypeEnumInput","SportsEnumInput","SurfaceSizeEnumInput","SurfaceTypeEnumInput","GameFormatEnumInput","AttributeTypeEnumInput","AttributeTargetTypeEnumInput","AttributeValueTypeEnumInput","AssignRuleTypeEnumInput","AssignTypeEnumInput","AssignTypeDelegationEnumInput","AssignRuleStatusEnumInput","OfficialTransactionTypeInput","hideBase","PitcherLimitsScheduleTypeEnumInput","LimitTypeEnumInput","ClaimTypeEnumInput","hideAmount","claimableDriver","claimablePassenger","claimableBreakfast","claimableLunch","claimableDinner","driverAmount","passengerAmount","breakfastAmount","lunchAmount","dinnerAmount","driverExcludedDistance","passengerExcludedDistance","excludedDistance","isKm","amountText","formatCurrency","distance","selectedChoice","OfficeClaimsTypesEnumInput","ClaimStatusEnumInput","InfractionSeverityInput","SuspensionStatusInput","SuspensionPositionGroupInput","SanctionPositionGroupInput","DurationTypeInput","DisciplineStatusInput","MaskedInput","inputRef","inputComponent","SeasonContext","SeasonProvider","defaultSeason","useDefaultSeason","season","usePreferences","setSeason","useFormSeason","appSeasonId","matches","useRouteMatch","groupIds","parseInt","gameId","formControl","selectEmpty","inputHistory","BaseSeasonFilter","SeasonFilter","isDefault","useSignature","signature","setSignature","setEmpty","toDataURL","clear","SignatureInput","forwardRef","resize","canvas","signaturePad","instance","parentNode","dotSize","penColor","velocityFilterWeight","onEnd","useGroupStyles","useSwitchStyles","groupClasses","switchClasses","maxResults","customExporter","exporter","menuItem","exporterFromContext","include","relation","parseInclude","fetchRelatedRecords","disableRipple","sanitizeListRestProps","TransitionProps","in","appear","enter","exit","withStyles","gridAutoFlow","gridColumnGap","hideIndex","SimpleFormIterator","SingleFieldList","SortedFormIterator","fields","move","splice","nextId","submitFailed","disableAdd","member","index2","classNames","moveUp","leftIcon","moveDown","disableRemoveField","removeField","addField","compose","createStyles","listStyleType","textAlign","valueOrDefault","Toolbar","handleSubmitWithRedirect","pristine","submitOnEnter","isSynced","hideDelete","confirmDeleteTitle","confirmDeleteMessage","confirmTitle","confirmContent","showDelete","isTemporaryId","classnames","mobileToolbar","desktopToolbar","defaultToolbar","button","spacer","enhance","withWidth","bottom","right","flexShrink","defaultFilter","initialPage","initialPerPage","initialSort","defaultSort","defaultInitialSelection","useSafeSetState","indexById","finalItems","setFinalItems","usePaginationState","setPage","setPerPage","useSortState","setSortObject","setSort","useSelectionState","onSelect","onToggleItem","onUnselectItems","filterRef","displayedFilters","setDisplayedFilters","setFilterValues","hideFilter","filterName","previousState","showFilter","removeEmpty","lbFilter","where","getWhere","clientFiltering","getOrder","tempData","applyFilter","filteredLength","finalData","finalIds","measureSize","getBoundingClientRect","useElementSize","setSize","useLayoutEffect","observer","ResizeObserver","requestAnimationFrame","observe","disconnect","storage","createInstance","storeName","initialState","setState","getItem","saved","setItem","REGEX_VARIABLE","smartT","simpleT","acc","jsx","regular","groupOptions","shard","node","useRichTranslate","useSyncedPreferences","handlePreferenceChange","detail","prev","CustomEvent","dispatchEvent","logo","logoDark","appName","AuthContext","AuthProvider","isReady","setReady","isLoggedIn","setLoggedIn","isVolunteer","setVolunteer","account","setAccount","identity","setIdentity","setIdentities","setPermissions","setScopes","setSeasonId","setOfficeId","notices","setNotices","setFlags","handler","useAuthContext","createAuthHook","useReady","useLoggedIn","useVolunteer","useAccount","useIdentity","useIdentities","useNotices","useFlags","useFilteredScopes","roleTypes","filtered","permission","Set","flatMap","useTenant","tenant","useDefaultOffice","flag","API_URL","process","axios","baseURL","setupHostInterceptor","setupRetryInterceptor","setupDeviceInterceptor","setupVersionInterceptor","setupIdentityInterceptor","setupAccessTokenInterceptor","apiFetchPublic","args","storageReady","ready","deviceId","newId","uuid","setTag","setData","setError","innerVersion","setInnerVersion","refetch","prevInnerVersion","headers","parseResponse","AuthService","authClient","AuthClient","restClient","loopbackRestClient","escapeRegExpChars","ilike","ilikeDiacriticUnsensitive","regexStartsWith","regexp","RegExp","eq","useInq","simplify","inq","filterParticipants","filterOfficialParticipants","HCRId","venue","filterOfficialName","officialname","filterTeam","filterHCRId","filterEmail","email","filterOffice","effectiveOffices","includeMembers","includeParents","via","filterEffective","effectiveType","effectiveValue","filterSchedule","filterSurface","effectiveSurfaces","filterNumber","filterDate","limitPast","LATEST_SEASON","gte","filterTime","and","lte","filterAssigner","isAssigner","filterTarget","endsWith","orClause","filterConflicts","conflictsOnly","filterBracketGames","bracketGamesOnly","gameBracket","filterAutomatic","isAutomatic","sanctionId","filterRest","teamOffices","awayTeamOffices","surfaceOffices","assignOffices","_scope","_options","f","getLimit","getSkip","skipFilter","getIdProperty","hasContent","_parseResponse","ID","principalId","defineProperty","enumerable","configurable","writable","inherited","getFilteredScopes","getTotal","getValidUntil","RESOURCE_CACHE","str","exec","m","validUntil","setTime","getTime","homeOfficeId","scheduleIds","blue","contrastText","green","red","orange","tertiary","light","dark","focusShadow","overrides","MuiSelect","MuiFormHelperText","MuiTableCell","MuiList","RaShow","RaCreate","RaEdit","RaTabbedShowLayout","paddingRight","RaAutocompleteSuggestionList","suggestionsContainer","RaFileInputPreview","removeButton","RaImageField","RaFilterForm","RaTopToolbar","alignSelf","RaList","bulkActionsDisplayed","RaListToolbar","RaFilter","RaFilterFormInput","MuiAutocomplete","groupLabel","hasPopupIcon","MuiTabs","MuiPaper","rounded","MuiButton","disableElevation","useCreateTheme","muiLocale","enUS","frFR","createTheme","LanguageMenu","setLocale","TranslationContext","setAdminLocale","i18nProvider","languages","locales","currentLanguage","nextLanguage","changeLocale","backgroundImage","up","paper","Logo","dangerouslySetInnerHTML","__html","BaseLayout","hideNotifications","Helmet","defaultTitle","titleTemplate","Paper","elevation","Notification","ThemeProvider","Logout","logout","useLogout","PowerSettingsNew","Meta","user","volunteer","Link","toLowerCase","Unauthorized","drawerPaper","overflowX","defaultWidth","getWidth","transitions","easing","sharp","leavingScreen","only","default","Sidebar","closedSize","dispatch","useDispatch","isXSmall","isSmall","isDesktop","setSidebarVisibility","ui","sidebarOpen","onMenuClick","Drawer","menu","textTransform","avatarAccount","toName","toUpperCase","IdentityButton","AccountCircle","fullName","participant","avatarClass","cn","Avatar","username","endIcon","ArrowDropDown","firstName","IdentitiesList","selectIdentity","isCurrent","HowToRegOutlined","NavigateNext","IdentityMenu","HelpButton","HelpMenu","commonUrls","documentationUrl","documentation","supportUrl","support","getContentAnchorEl","MenuBook","LiveHelp","SCOPE_DESCRIPTIONS","AUTOMATIC_ROLES","en","fr","closeButton","stack","Roles","search","sortedRoles","capitalize","translateApiProperty","secondaryText","AccordionSummary","Accessibility","BrightnessAuto","AccordionDetails","Scopes","entries","scopeRoles","ControlCamera","RolesAndPermissionsDialog","useHttpClient","setTabIndex","setSearch","Close","Tabs","newIndex","indicatorColor","textColor","Tab","FF_CATEGORIES","out","application","FeaturesFlag","account_management","scheduling","officiating","scorekeeping","sanction_management","legacy_public_sites","unclassified","allFeaturesIncludedOnCategories","FeatureFlagDialog","category","md","useStyleToolButton","opacity","useStyleDropdownlButton","InternalToolButton","Build","InternalToolMenu","FFOpen","setFFOpen","rolesOpen","setRolesOpen","Flag","menuButton","menuButtonIconClosed","menuButtonIconOpen","typography","AppBar","userMenu","canShowInternalMenu","HideOnScroll","toggleSidebar","itemActive","releaseVersion","closed","loader","translatedResourceName","inflection","ResourceMenuItem","hasList","MenuItemLink","primaryText","active","SeasonLoader","SeasonSelector","LoadingIndicator","releaseName","releaseDate","hasDashboard","pathname","getResources","shallowEqual","adminScopes","router","showSchedulingDivider","showSuspensionDivider","FF_SUSPENSIONS_MENU","showManagementDivider","showWebDivider","FF_CMS","showReports","isOfficial","resourceProps","itemProps","FF_TOURNAMENTS","FF_CUPS","FF_SCHEDULE_MENU","FF_ACCOUNTS","exact","panel","panelDetails","errorInfo","exception","captureException","extra","lastEventId","Title","showReportDialog","TitlePropType","appFrame","alerts","useAlertStyles","getVersion","RefreshButton","reload","NoticeAlert","notice","onHide","dismissable","Launch","AlertTitle","apiVersion","setApiVersion","version","versionMismatch","hiddenNoticeIds","setHiddenNoticeIds","hiddenLoaded","visibleNotices","hideNotice","currentNoticeIds","prevNoticeIds","noticeId","roleName","Volunteer","isPastSeason","Layout","appBar","sidebar","FF_FORETHOUGHT","ForeThought","authenticated","FF_VERSION_MISMATCH","History","GameContext","OfficeSelectorForm","selectedOfficeId","OfficeContext","OfficeProvider","defaultOffice","useGetMany","Visibility","OfficeSelectorDialog","ResetFiltersButton","ClearAll","ListActions","resetFilters","filtersProp","hasCreate","useResourceDefinition","FilterContext","FilterButton","ExportButton","CreateButton","List","customActions","listActionsClass","empty","Pagination","ResourceActions","hasEdit","hasShow","useEditContext","canEditResource","canShowResource","ShowButton","Show","Box","Form","successMessage","useSaveModifiers","onSuccessRef","setOnSuccess","onFailureRef","setOnFailure","transformRef","useRedirect","redirectTo","onSuccessFromSave","onFailureFromSave","transformFromSave","CRUD_CREATE","errorMessage","Create","mutationMode","CRUD_UPDATE","svgIcon","mainContainer","smallAvatar","ResourceIcon","resourceName","DefaultIcon","ResourceAvatarTitle","classOverrides","Badge","overlap","badgeContent","Sync","htmlColor","pictureUrl","isPublic","StatusChip","VisibilityOff","alertRoot","visibility","alertAction","syncIcon","useRecordSynced","setDisabled","toggle","SyncAlert","SyncAlertCustomMessage","SyncedIcon","SyncedIndicator","typeText","ShowHeader","NotPublicChip","UnsanctionedChip","NotPublicIcon","NameWithStatusesField","ScheduleGrid","showOffice","CategoryField","OfficeField","ScheduleFilters","hideOffices","showPastSeason","Filter","MuiCard","RaAutocompleteArrayInput","chipContainerOutlined","hideButton","RaNullableBooleanInput","MuiChip","MuiOutlinedInput","adornedStart","hasClearIcon","HiAutocompleteInput","FilterCard","CardContent","preference","_setPreference","useMutation","saveLoading","useQueryWithStore","setPreference","DELETE","UPDATE","CREATE","getFilterValue","ignoredFilters","SearchListItem","onRemove","ListItem","ListItemSecondaryAction","AddSearchButton","edge","AddSearchDialog","setName","RemoveSearchDialog","SavedSearches","isAddDisabled","setAddDisabled","isAddOpen","setAddOpen","setRemove","useAccountPreferences","searches","setSearches","useOfficialList","listId","setListId","saveSearch","removeSearch","applySearch","ignored","useSavedSearches","ErrorOutline","CircularProgress","handleRemove","ScheduleFilterList","TabbedShowLayout","tabs","TabbedShowLayoutTabs","scrollButtons","renderType","canEditSchedule","InfoCard","Table","gameFormat","UserTextField","ListItemLink","renderLink","links","bracketsOpen","setBracketsOpen","FF_LEGACY_DRAFTS_DISABLED","LinksCard","FF_DRAFT_GAMES","PlaylistAdd","BracketDialog","cancelled","CustomChip","PoolChipField","ReferenceField","PoolField","EditTeamForm","ignoreSchedule","PoolInput","EditTeamDialog","ScheduleTeamGrid","inputChip","CategoryInputWithSwitch","scheduleCategoryId","FormBody","ArrayInput","disableReordering","AddTeamsForm","AddTeamsButton","poolId","all","getMaxOrder","TeamImportButton","maxOrder","TeamImportDialog","scheduleIdForGroupInput","gridTemplateColumns","columnGap","orders","teamErrors","isInteger","teamOrders","teamOrder","hasDuplicateOrder","EditOrderForm","setGroupId","HorizontalFormIterator","includePool","NumberInput","EditOrderButton","setScheduleTeams","updatedTeams","ScheduleTeamField","TeamField","setTotalTeams","useScheduleGroupingType","isPools","showGroups","isGroups","FF_SCHEDULE_TEAMS_ORDER","NumberField","sortable","GroupField","getFilters","TeamsActions","hasScheduleTeams","FF_SCHEDULE_TEAMS_DISABLE_ADD_SYNCED","canAddTeams","canOrderTeams","totalTeams","isOrdered","metaRender","draft","updatedAtRender","publishedAtRender","publishedAt","publishedBy","showGroup","showPublished","AddDraftDialog","showDraftGamesGenerator","AddDraftButton","isSharedDrafts","DraftGrid","FormDialogContent","ChangeDateDialog","validateDates","ChangeDate","draftGamesIds","ClearDateDialog","ClearDate","ChangeStatusDialog","ChangeStatus","DeleteDialog","Delete","DraftGamesBulkActions","canEditDrafts","canDeleteDrafts","DraftGamesListCard","setDraftGameId","showExporter","hasDirectOrParentPermission","parentInherited","draftGameId","canAddGames","NullableBooleanInput","EventView","GroupTableCell","TableCell","ContactTableCell","ContactList","ContactListItem","overflowWrap","Contact","contact","ScheduleTeamContactGrid","hasPrimaryTeamArena","primaryTeamArena","stickyHeader","TableHead","manager","positions","coach","prevTeam","firstGroup","_id","Contacts","ScheduleManagerContactGrid","renderGameLength","renderRegistrations","includeRegistrations","renderExtras","allowExtras","renderPoints","Team","win","loss","tie","disableSportsmanshipCarry","ScheduleSettingsField","filterSchemas","getProperties","schema","properties","displayOptions","SchemaSuggestion","query","isHighlighted","AutocompleteSuggestion","owner","SchemaInput","ReferenceArrayInput","ReferenceInput","filterToQuery","resettable","DivisionSuggestion","division","DivisionInput","filterDivision","periods","advancedTab","groupingType","sportsmanshipPoints","sportsmanship","Player","maxScoreDiff","language","rescheduleRequestsEnabled","requiredRescheduleApprovals","SportsmanshipPointsInput","SyncAttributesInput","ContactsInput","ReportsInput","SuspensionActivationInput","disableOptions","requireCertification","ScoringModeInput","PenaltyModeInput","GroupingTypeInput","PeriodsInput","EnforcementInput","hideNone","RescheduleApprovalsInput","DraftRequestInput","SwitchInput","HiddenStatsInput","schemaIds","schemaId","schemas","DefaultAlert","FileCopyOutlined","GeneralTab","FormTab","SchedulingTab","showGroupingType","FF_POOLS","ScorekeepingTab","branchSettings","useBranchSettings","ff_incidents","ff_suspensions","FF_PERIODS","StandingsTab","FF_DOUBLE_FORFEIT","FF_SPORTSMANSHIP","StandingsOrderInput","StatsTab","scoreOnly","scoringMode","AdvancedTab","suspensionActivation","TabbedForm","TabbedFormTabs","PropertyInput","TypeInput","OrderInput","RankingInput","Schedule","ScoresheetTab","TeamStatsTab","PlayerStatsTab","EditScheduleSettingsDialog","ScheduleSettingsForm","UpdateScheduleSettingsButton","showSettings","canEditSettings","ContactSuggestion","isEmergency","isVerified","getSecondary","MailOutline","Smartphone","Phone","ContactInput","filterVenue","matchVenue","address","city","country","VenueSuggestion","getVenueName","VenueInput","getVenueCity","TargetInput","ScheduleInput","ParticipantInput","ListInput","L","GameInput","TargetGroupInput","OfficeAttributeGrid","TeamSwitchInput","showContact","notification","legacy","origin","isLegacy","AddNotificationDialog","NotificationForm","EditNotificationDialog","exists","String","AddNotificationButton","NotificationDatagrid","originLabel","DestinationField","ParticipantField","TypesField","assigning","gameReport","majorPenalty","suspension","OriginLabel","InfoOutlined","OriginField","has","NotificationGrid","showTarget","showParticipant","showSeason","showCategories","TargetTypeField","CategoriesField","GroupsField","showType","SeasonField","NotificationsOutlined","AssignTargetForm","AddAssignTargetDialog","EditAssignTargetDialog","AddAssignTargetButton","AssignTargetDatagrid","AssignTargetGrid","canAddOverride","SupervisorAccount","AccountField","RoleField","RoleSuggestion","RoleInput","defaultText","roleId","useDescription","filterAccount","AccountSuggestion","AccountInput","PrincipalInput","principalType","ScopeAttributeGrid","RoleForm","store","rolesRef","officeIdRef","selectedRoleRef","canUseRole","selectedRole","isRoleEnabled","ff_suspension_disciplines","isEqual","next","principalDisabled","targetDisabled","filterByCategories","AddRoleDialog","EditRoleDialog","AddRoleButton","RoleDatagrid","PrincipalField","ExpiryField","expiry","RoleGrid","showAccount","showExpiry","CommitteeRoleGrid","NoResults","showRoles","canAddRoles","VerifiedUserOutlined","Gavel","SuspensionGrid","multipleGames","InfractionTypeField","RuleField","InfractionField","infraction","GamePenaltyField","gamePenalty","durations","getPenalty","ended","GamePenaltyGameTimeField","gameTime","displayTime","GamePenaltyGrid","hideTeam","hideParticipant","isLegacyRulebookSeason","ScheduleField","GameField","includeDate","includeSurface","OPTIONS","getData","includeMeta","exportFile","csv","wb","XLSX","raw","blankrows","downloadCSV","makeExporter","exportData","showSummary","anchorRef","displayedOptions","exportReport","report","contains","ButtonGroup","prevOpen","Popper","Grow","ClickAwayListener","onClickAway","MenuList","penalties","penalty","servedBy","gameDate","infractionName","rule","lastName","FF_PENALTY_START_END","FF_PENALTY_SERVED_BY","Papa","summary","PenaltiesExporter","SportsOutlined","sequence","parseSequence","FormatListNumbered","ScheduleSequencesGrid","frame","showIframe","fileOpen","setFileOpen","FileViewer","BracketReseedForm","isAxiosError","statusCode","BracketReseedButton","BracketReseedDialog","BracketViewer","filtersContainer","tableContainer","poolHeader","textInput","getPropertyValue","stat","precision","toFixed","formatPrecision","decimal","formatPercentage","round","padStart","formatMinutes","RankHeader","sortBy","createSortHandler","hasManualRanking","align","TableSortLabel","direction","hideSortIcon","RankInput","standingsType","formValues","showWarning","setShowWarning","originalRank","poolRanking","ranking","groupedFormValues","newValues","RankCell","isFormOpen","paddingBlock","SortableHeader","renderHeaders","onRequestSort","useScheduleStatsContext","manualRanking","manualPoolRanking","genericLocale","getGenericLocale","showManualRanking","manualRankingProperty","rankingProperty","sortDirection","TableBody","renderColumns","fixedColumns","TableContent","handleRequestSort","shouldGroupStats","groupedData","Overall","nameA","pool","nameB","poolData","Filters","filterComponents","poolIds","hasFilters","ScheduleStatsContext","ScheduleStatsTable","defaultFilters","triggerRefetch","disablePagination","setSortBy","rowsPerPage","setRowsPerPage","useScheduleStats","dataLoading","schemaLoading","filteredData","isTeam","isGroup","isPool","filterStats","sortedData","sortedStats","sortStats","hasManualPoolRanking","querySort","hideNull","missingRowProperty","getSchemaProperties","showManualRankingAlert","TableContainer","isDesc","isRankingProperty","TablePagination","onPageChange","newPage","onRowsPerPageChange","menuProps","NoOptionsText","StandingsTypeSelect","handleStandingsType","reset","SelectProps","MenuProps","GroupSelect","useGroups","Autocomplete","ScheduleTeamSelect","useTeams","PlayerTypeSelect","teamField","PlayerScheduleStatsCard","clearButton","teamPoolCount","sanitizeRankings","ManualRankingsForm","newRankings","isPoolRanking","manualRankings","notificationMessage","ManualRankingsButton","FF_MANUAL_RANKINGS","TeamScheduleStandingsCard","setStandingsType","setTriggerRefetch","PoolForm","AddPoolDialog","EditPoolDialog","AddPoolButton","PoolDatagrid","PoolGrid","listCardRef","canAddPools","SummaryTab","showSuspensions","showGamePenalties","ScheduleCard","ScheduleLinksCard","GamePenaltiesCard","SuspensionsCard","TeamsTab","PoolsCard","GamesTab","showSequences","showDraftGames","showLegacyDrafts","ScheduleSequencesCard","DraftsCard","DraftGamesCard","GamesCard","BracketsTab","BRACKET_URL","useScheduleSeeds","bracketUrl","BracketsCard","SchedulerTab","canSchedule","SchedulerView","ContactsTab","contactsVisibility","TeamContactsCard","ScheduleContactsCard","SettingsTab","showTargets","ScheduleSettingsCard","RolesCard","NotificationsCard","AssignTargetsCard","path","ScheduleContext","useScheduleContext","ScheduleWizardProvider","skipButton","StepperToolbar","handleSkip","showSkip","NameInput","match","ScheduleOfficeInput","disableOffice","sm","multiline","handleNext","setSchedule","FormIterator","indexContainer","getScheduleTeams","TeamsInput","mutators","noTeams","CardActions","deletedTeams","addedTeams","delete","showDraft","setShowDraft","TEAM_SELECT","ADD_SEQUENCES","ScheduleWizard","setActiveStep","step","InfoStep","SequencesStep","SettingsStep","schedulesExporter","MuiAccordionDetails","overflowY","ByesList","ByesListItem","draftInput","groupInput","officeHeader","rotate","rotateInner","officeCell","borderRight","loaderDiv","filterMatchupsByPool","matchups","Accordion","unmountOnExit","Heading","TeamFieldWithPool","activePoolId","showPool","Summary","filteredMatchups","hasGroup","matchup","home","away","byes","conflicts","totalOpponents","Matchups","opponents","opponent","opponentTeamId","OfficeMatchups","officeMatchups","Byes","filteredByesByPoolId","week","weekNumber","AnalyzeBody","analysis","setAnalysis","includeDraft","defaultExpanded","ExpandMore","AnalyzeForm","AnalyzeDialog","AnalyzeButton","BarChart","AnalyzeMenuItem","Recalculate","autoHideDuration","ScheduleActions","isSystem","showInternalActions","ScheduleInternalActions","ScheduleShowHeader","GameFilters","canAssign","canListSchedules","activeFilters","setActiveFilters","enhancedChildren","enableGetChoices","autocomplete","listSubheader","renderGroup","QuickAssignListInput","showAssignments","useShowAssignments","setLists","canSelectList","selectedList","newValue","EffectiveOfficialsBoolean","GameFilterList","showLabel","MuiDialogContent","MuiListSubheader","LabelCell","MuiListItemIcon","getPosition","ChangeIcon","AddCircleOutline","DateRange","Settings","Feedback","Inbox","Remove","Assignment","AssignmentTurnedIn","Replay","Restore","AttributeRow","SurfaceField","Referee","Linesperson","LinespersonTwo","LinespersonThree","Supervisor","AttributeTable","aIndex","attribute","bIndex","getAttributes","ChangeCell","ChangeItem","timestamp","actorName","ChangesTable","changes","sortedChanges","valueOf","ChangesCard","scroll","dividers","ResetForm","ResetAssignRulesModal","resetAssigner","confirm","ResetScoresheetModal","isApproved","errorName","GameActions","canResetAssignRules","canResetScoresheet","canUseInternalActions","InternalScoresheetActions","LinkItem","gameStatus","penaltyMode","assignedOfficials","hasRequiredOfficials","KEEPER_POSITIONS","OFFICIAL_POSITIONS","reportUrl","isGameComplete","isGameStarted","scorekeepingUrl","hasTeam","canEditScoresheet","FF_SCOREKEEPING_APP","canManageLineups","canAssignOfficials","canRequestAssignment","showOfficials","canEditShots","FF_GOALIES","officialLabel","AssignmentOutlined","TabletMac","Sports","People","Nfc","hideGroup","showCreate","recipients","ReferenceManyField","MessageGrid","MessageForm","verticalAlignTop","Timestamp","TimestampDate","Participant","RouterLink","getValue","Value","Row","addLink","borderSpacing","RowValue","Signature","Member","FF_BATTERS","battingOrder","isCaptain","isAlternate","isAffiliate","isOverage","isUnderage","isStarter","ThrowsInnings","throws","inningsPitched","EventTypeField","EventField","minReferee","minLinesperson","minOfficial","minScorekeeper","minTimekeeper","minGrade","minRefereeGrade","minLinespersonGrade","minAge","scorekeeper","timekeeper","officialId","payOfficeId","isNoShow","generalFlags","isGeneralFlag","firstTeamFlags","isTeamFlag","secondTeamFlags","isPowerplay","isShorthanded","isEmptyNet","isPenaltyShot","isOwnGoal","goalId","assistIds","penaltyId","infractionId","servedById","goalieChangeId","onParticipantId","goalies","goalie","totals","score","emails","systemEvents","User","userId","MetaField","transactionId","delayed","skewed","humanize","DeleteButton","GameEventGrid","DeleteEventsDialog","DeleteEvents","EventBulkActions","CurrencyInput","currencyMask","createNumberMask","suffix","includeThousandsSeparator","thousandsSeparatorSymbol","allowDecimal","decimalSymbol","decimalLimit","integerLimit","allowNegative","allowLeadingZeroes","price","startAdornment","InputAdornment","payPeriod","toDates","PayPeriodSuggestions","PayPeriodInput","OfficialGameInput","OfficialInput","AmountInput","TransactionPayPeriodInput","payPeriodId","isClosed","TransactionForm","AddTransactionDialog","AddTransactionButton","EditTransactionDialog","TransactionDatagrid","Popover","popover","PopoverTextField","SmsOutlined","CurrencyField","allowZero","justifySelf","PayPeriodField","payPeriodInStore","LockOpen","AmountAndDescriptionField","SubtypeField","subtype","ClaimNoteField","TypeAndNoteField","claimId","TransactionsGrid","hideGame","transactions","transaction","isSelectable","includeTime","hidePayPeriod","participantTransactions","tx","travelFees","officiatingFees","otherFees","reportName","canAddTransactions","canSelectAnyOffice","allowedOfficeIds","TransactionsExporter","LocalAtm","buttons","float","mutate","renderMeta","createdAt","author","OfficialClaimDocumentGrid","canManageClaimDocuments","filename","rawFile","handleDropRejected","fileRejections","FileInput","maxSize","onDropRejected","OfficialClaimDocumentForm","AddOfficialClaimDocumentDialog","AddOfficialClaimDocumentButton","canManageGameDocuments","isCertified","canAddGameDocuments","InsertDriveFileOutlined","defaultAddress","setInputValue","suggestions","setSuggestions","debounceTimeout","setDebounceTimeout","fetchSuggestions","predictions","handleBlur","freeSolo","endAdornment","useGameOfficials","GET_MANY_REFERENCE","useGameAssignSettings","getClaimType","claimSettings","claimSettingId","getClaimAmount","claim","travelAmount","rate","exclude","getGameAddresses","getDistances","addressFrom","addressTo","intermediateStop","getDistanceMap","getOfficeClaimsSettings","OfficeGameInput","officeOfficials","DistanceInput","FormContent","setOfficeAssignSettings","setOfficeClaimsSettings","gameClaimAddresses","setGameClaimAddresses","handleCalculateTravel","roundtrip","getOfficeAssignSettings","showDistance","showStatus","showIntermediateTrip","hasIntermediateStop","activateCalculateTravel","activateCustomAmount","disableAutocompleteAddressInputs","inputSize","amountHelperText","formatDistance","nonExcluded","travelCalculation","distanceHelperText","setting","officialAddress","venueAddress","mapUrl","minRows","OfficialClaimDocumentsCard","ClaimForm","AddClaimDialog","AddClaimButton","EditClaimDialog","ClaimDatagrid","isDistance","AmountField","toolTipTitle","Clear","StatusField","statusText","AmountAndNoteField","isPerDiemAndExpense","ClaimsGrid","hideOffice","claims","ProcessClaimDialog","actionI18n","ProcessClaim","claimIds","ClaimBulkAction","participantAssignment","canAddClaims","isSameOrAfter","allowEarlyClaims","EmojiPeople","canApprove","requestsFilter","requests","showDraftActions","gameToUpdate","hideRounds","service","ExternalIdInput","ServiceEnum","isSurface","ExternalProviderForm","AddExternalProviderDialog","EditExternalProviderDialog","AddExternalProviderButton","TARGET_TYPES","ExternalProviderField","provider","ExternalProviderList","providers","useExternalProviders","canEditProviders","GAME_OFFICE_RESOURCES","canCreateProviders","showIcon","Assignments","canViewConflicts","canViewDraftGames","rescheduleRequests","canViewMessages","canCreateMessages","lg","GameLinksCard","ConflictsCard","MessagesCard","OfficialsTab","canViewTransactions","self","canViewClaims","gameOfficeId","hideMessages","TransactionsCard","ClaimsCard","EventsTab","EventsCard","GameShowLayout","checkbox","canChangeStatus","canManageAssignments","canCertify","validateDelegateForm","assignType","validateAssignSettings","systemIdIsChecked","systemId","statusIsChecked","minRefereeIsChecked","minLinespersonIsChecked","minOfficialIsChecked","minScorekeeperIsChecked","minTimekeeperIsChecked","minRefereeGradeIsChecked","minLinespersonGradeIsChecked","minAgeIsChecked","DelegatePositionsForm","DelegateDialog","Delegate","statuses","gameStatuses","actionableGameIds","gameIds","GameStatusForm","GameStatusDialog","GameStatus","AssignSettingsForm","FF_OFFICIALS","FF_SCOREKEEPERS","FF_TIMEKEEPERS","FF_GRADES","AssignSettingsDialog","AssignStatus","feesIdIsChecked","feesId","CertifyDialog","Certify","GameBulkActions","canChangeStatuses","canManageAssigning","gamesExporter","quotes","columnName","PracticeFilters","PracticeFilterList","getEnum","PracticeStatusForm","UpdateOutlined","canEditPractice","PracticeStatusModal","TeamsField","PracticeShowLayout","PracticeCard","ScheduleIcon","getRule","frequency","FREQ","RRule","WDAY","dtstart","toDate","until","freq","interval","byweekday","RecurrenceSchedule","occurrences","RecurrenceField","isRecurring","frequencyHelper","useAvailabilities","PracticeFormBody","isEditing","ampm","PracticeAvailabilityInfo","PracticeForm","propInitialValues","surfacesRef","prevTimezone","changeTimezone","recurrence","PracticeAvailabilityContext","practicesExporter","teamHCRIds","PracticeStatusDialog","PracticeStatus","unselectAll","useUnselectAll","practiceIds","PracticeBulkActions","ActivityFilters","ActivityFilterList","canEditActivity","ActivityShowLayout","ActivityCard","ActivityFormBody","ActivityForm","recurrenceValues","origOptions","activitiesExporter","getTitle","TeamGrid","showIds","TeamFilters","TeamFilterList","today","toToday","mergeNotes","formatTime","Content","gridGap","AvailableInput","setValue","onOpen","IconComponent","UnfoldMore","DurationInput","displayedTimezone","RadioGroup","Radio","zoneAbbr","TimeInput","userValue","hour","NotesInput","rowsMax","defaultStart","defaultEnd","defaultAvailable","setAvailable","setStart","setEnd","dayStart","dayEnd","isStart","isEnd","setDuration","setNotes","showStart","showTo","showEnd","effectiveStartTime","effectiveEndTime","isUpdate","allDay","stripes","g","asHours","getSize","editable","updatedat","Placeholder","EmptySlot","Slot","availableClass","Check","usePanelStyles","SaveButton","selection","dirty","saveLabel","clearSelection","defaultTimezone","setTimezone","setDate","setSelected","setSlots","setDirty","selectionDate","availabilitiesToSlot","openSlot","SlotModal","existing","sorted","changed","updateSlots","totalDuration","useDayStyles","common","white","black","past","getIconColor","info","SlotTime","showRange","AllDay","Availability","isAllDay","timeslots","Day","toggleSelection","shiftKey","Week","useMonthStyles","tableLayout","PrevMonth","setMonth","month","limit","NextMonth","Month","weeks","weekDates","SelectionSummary","bulkSelect","toggleBulkSelect","pointerEvents","AvailabilityCard","requiresOffice","availabilityResource","recordId","tzResource","useTimezone","setSaving","calendarStart","getDates","missingOffice","setSelection","setBulkSelect","officeFilter","OfficeSelector","AvailabilityCalendar","selectMultiple","selectWeekday","shiftSelection","lastSelected","months","AvailabilityToolbar","AvailabilityPanel","times","saveAvailability","EventAvailable","registryUrl","canEditTeam","RegistryLink","ImageField","players","isPlayer","PlayerNumberInput","PlayerBooleanInput","PositionsEnumInput","MemberForm","EditMemberDialog","MemberDatagrid","MemberStatusField","getStatus","accordion","shape","accordionDetails","listContainer","RemoveButton","onRemoveAll","showRemoveButton","showRemoveAllButton","allActions","AffiliationLabel","AffiliationField","memberTypes","affiliations","memberType","affiliation","OfficialForm","EditOfficialDialog","OfficialDatagrid","useParticipantMemberTypes","participantIds","isActive","SID_MEMBER_TYPES","OfficialGrid","showMemberType","FF_SID_MEMBER_TYPES","DEFAULT_FORM_VALUES","includeSubOffices","SUBMIT_MSGS","distinct","SearchInput","ListLoader","ListToolbar","handleSearch","handleReset","handleKeyDown","SelectedOfficials","OfficialsGrid","OfficialList","SelectOfficialsForm","showListInput","createMany","SelectOfficialsDialog","SelectOfficialsButton","SelectedMembers","ParticipantGrid","MembersList","SelectMembersForm","SelectMembersDialog","SelectMembersButton","isSystemUser","canAddMember","canImportMembers","canImportProfiles","ScheduleContacts","setSettings","useTeamEffectiveSettings","showContacts","ScheduleTeamsGrid","expand","AddPracticeDialog","AddPracticeButton","AddActivityDialog","AddActivityButton","canAddPractices","canAddActivities","renderOrder","teamarena","renderSlot","TeamArenasGrid","cellClassName","teamArena","useIteratorStyles","TeamArenasInput","iteratorClasses","EditTeamArenasDialog","closeModal","arenas","TeamArenaForm","EditTeamArenasButton","showNotifications","canAddNotifications","TopFilters","reportId","isPlayerReport","isTeamReport","isLeagueReport","OptionalFilters","componentContent","ComponentContent","groupFilters","useVersion","setReportUrl","frameUrl","setFrameUrl","getUrl","cardContent","setReports","setGroupFilters","TrendingUp","canListAvailabilities","canEditAvailabilities","TeamCard","ReportsCard","RosterTab","RosterCard","ScheduleTab","SchedulesCard","showOverrides","TeamArenasCard","TeamShowLayout","ImageInput","TeamForm","isCreate","isInternal","SyncButton","TeamInternalActions","TeamActions","TeamShowHeader","SMAChip","SupervisorAccountOutlined","ParticipantAccountEmail","accountId","ParticipantFilters","useOfficeSelection","MuiDialogTitle","NewChip","AssignerSelectionAlert","allOrgsAllowAssignerSelection","noOrgsAllowAssignerSelection","Office","initialSelected","Selection","excludedIds","isOwnParticipant","OfficesForm","startOfToday","qualificationCategory","queryKey","cachedQualifications","customQueries","useQualificationsWithSettings","q","allowOfficialSetAssignOffices","includedOfficeIds","branchOfficeId","canEditAssignerSelection","paths","OfficeList","OfficialAssignersForm","officesLoaded","officesError","selectionLoaded","selectionError","arrayMutators","OfficialAssignersDialog","OfficialAssignersMenuItem","Venue","venueIds","venueId","selectedVenues","VenuesForm","officialVenue","useVenueSelection","VenueList","OfficialVenuesForm","OfficialVenuesDialog","OfficialVenuesMenuItem","outerAccordion","hasError","innerAccordion","accordionSummary","titleBox","OuterAccordionTitle","selectedCount","categoryCount","handleToggleAll","isAllSelected","indeterminate","DivisionTitle","divisionCategories","handleToggleAllInDivision","SelectableCategory","handleCategoryToggle","gender","SelectableCategoriesInput","fieldError","get","groupedByDivision","newSelection","divisionCategoryIds","UpdatedAt","officialCategories","latestCategory","latest","OfficialCategoriesAlert","allCategoriesTotal","OfficialCategoryEdit","allCategories","toApiValues","allCategoryIds","apiValues","invalidCategories","OfficialCategoriesForm","categoriesLoaded","categoriesError","officialCategoriesLoaded","officialCategoriesError","validCategories","toFormValues","positionCategories","OfficialCategoriesDialog","OfficialCategoriesMenuItem","Category","canManageCategories","ParticipantStatusContext","useParticipantStatus","ParticipantStatusProvider","setStatus","ParticipantStatusAlert","FF_SSO","SsoInviteButton","InviteButton","NotificationsOffOutlined","emailRegex","SsoInviteForm","SsoInviteDialog","FORM_ERROR","ParticipantAccountContext","ParticipantAccountProvider","fetchAccount","PersonAdd","InviteDialog","Star","TypeChip","canEditParticipant","canInvite","canSsoInvite","Invite","ProfileImage","ProfileTable","picture","Public","birthdate","weight","hometown","dexterity","ProfileField","useReference","referenceRecord","heightMask","ProfileForm","MaskedTextInput","UpdateProfileDialog","EditProfileButton","canShowProfile","canEditProfile","canAddContact","ForumOutlined","ContactGrid","AZ","NM","postalMask","province","postal","AddressForm","AddAddressDialog","EditAddressDialog","AddAddressButton","AddressDatagrid","addressField","AddressField","address2","TypeField","AddressGrid","showAddresses","canAddAddress","validateGrade","grades","grade","level","qualificationCategoryId","QualificationCategoryInput","filterQualificationCategory","qualificationcategory","QualificationForm","AddQualificationDialog","EditQualificationDialog","AddQualificationButton","QualificationDatagrid","QualificationCategoryField","renderLevel","renderGrades","R","QualificationGrid","showGrades","qualification","showQualifications","canAddQualification","FF_DISABLE_ADD_QUALIFICATIONS","ListMemberGrid","ListField","OfficialConflictForm","AddOfficialConflictDialog","EditOfficialConflictDialog","AddOfficialConflictButton","OfficialConflictDatagrid","OfficialConflictGrid","canAddOfficial","DivisionField","divisionId","AddRegistrationDialog","RegistrationForm","EditRegistrationDialog","AddRegistrationButton","RegistrationDatagrid","RegistrationGrid","showRegistrations","canAddRegistration","IdentityForm","AddIdentityDialog","EditIdentityDialog","AddIdentityButton","IdentityDatagrid","PrimaryField","ExternalIdField","IdentityGrid","Datagrid","hasTypes","useCanInvite","attributeId","minValueValidation","maxValueValidation","dropdownValueTypeChoice","ParticipantAttributeInput","AttributeValuesInput","typeData","valueType","AttributeValuesForm","AddAttributeValuesDialog","EditAttributeValuesDialog","AddAttributeValuesButton","AttributeValuesDatagrid","AttributeValuesGrid","AttributeTypeField","showAttributeValues","canBulkAction","MemberTypeField","ParticipantMemberTypeGrid","BooleanField","CardMembership","showMemberTypes","ParticipantCard","ContactsCard","QualificationsCard","MemberTypesCard","AccountsCard","ProfileTab","AddressesCard","ProfileCard","RegistrationsTab","RegistrationsCard","OfficiatingTab","OfficiatingActionsCard","AttributeValuesCard","ListsCard","ParticipantShowLayout","ParticipantForm","ParticipantPagination","Search","objectFit","OfficeNameField","includeLogo","OfficeGrid","ArenaSlotContext","useArenaSlotContext","ArenaSlotProvider","ArenaOfficeInput","useArenaOffices","parentSurfaceIds","SlotSplitSchedule","slotDuration","breakDuration","splits","setSplits","firstSlotTime","lastSlotTime","timeslotMinutes","numOfSplits","currentStartTime","splitStart","splitEnd","SlotSplitField","hasSplits","ArenaSlotFormBody","setOverlaps","useSlotOverlaps","InnerArenaSlotForm","timeslot","ArenaSlotForm","AddArenaSlotDialog","EditArenaSlotDialog","AddArenaSlotButton","ArenaSlotDatagrid","ArenaSlotsGrid","showSurface","OfficesField","ArenaSlotRestrictionDialog","arenaSlotsIds","ArenaSlotRestrictionForm","ArenaSlotsRestrictions","typesIsChecked","categoryIdsIsChecked","leagueIdsIsChecked","restrictions","ArenaSlotBulkActions","canChangeRestriction","canDeleteArenaSlots","hideHelperText","canAddSlots","AddScheduleButton","canAddSchedule","AddTeamDialog","AddTeamButton","canAddTeam","DivisionsList","formatList","DivisionsField","ReferenceArrayField","ArenaOfficeForm","disableArenaInput","disableOfficeInput","AddArenaOfficeDialog","EditArenaOfficeDialog","AddArenaOfficeButton","buttonLabel","ArenaOfficeDatagrid","ArenaOfficesGrid","showArena","showLeagues","showDivisions","canAddSurface","canAddRegistrations","canAddQualifications","canImportGrades","canImportQualifications","useOfficeAssignSettings","GeneralSettingsField","visibleDaysEnabled","visibleDays","RequestSettingsField","requestsEnabled","DeclineSettingsField","declineEnabled","declineConfirmedDisabled","declineHours","declineReason","OfficeAssignSettingsField","dailyLimit","VisibleDaysOptions","RequestOptions","DeclineOptions","AssignmentVisibilityEnumInput","EditOfficeAssignSettingsDialog","OfficeAssignSettingsForm","UpdateOfficeAssignSettingsButton","OfficeAssignSettingsCard","showEdit","GroupForm","AddGroupDialog","EditGroupDialog","AddGroupButton","GroupDatagrid","GroupGrid","useOfficeGroupsCount","fetchData","useOfficeSettingsWithStore","officeGroupsCount","canAddGroups","LayersOutlined","SectionForm","AddSectionDialog","EditSectionDialog","AddSectionButton","SectionDatagrid","SectionGrid","canAddSection","Web","HCRIdInput","OfficeForm","AddOfficeDialog","AddOfficeButton","InitializeFilter","setPath","canAddOffice","OfficialQualificationsGrid","OfficialParticipantInput","OFFICIAL_TYPE_RESOURCE_MAP","effectiveOfficials","setEffectiveOfficials","canAddOfficials","canImportOfficials","ListForm","AddListDialog","EditListDialog","AddListButton","ListDatagrid","ListGrid","ManageButton","onManage","MembersGrid","setIsEditing","canAddListMembers","showLists","canAddLists","listFilters","FilterList","AssignSystemGrid","FF_ADDITIONAL_LINESPERSONS","AssignRuleList","GroupOutlined","AssignFeesForm","isFeesUsed","hasRules","Official","Scorekeeper","Timekeeper","isArchived","AddAssignFeesDialog","EditAssignFeesDialog","AddAssignFeesButton","AssignFeesDatagrid","ArchiveField","fees","Archive","AssignFeesGrid","canAddFees","PaymentOutlined","typesToExclude","AssignRuleGrid","showRule","showAttributes","showCriteria","showConditions","RulebookGrid","SeverityEnumInput","PENALTY_SEVERITY","DurationForm","current_length","AddDurationDialog","EditDurationDialog","AddDurationButton","DurationDatagrid","Timed","Timer","DurationGrid","timed","requireIncidentReport","ArrayGrid","Durations","initialLength","AddInfractionButton","InfractionDatagrid","paddingInlineStart","Stick","SportsHockey","Archived","ChoiceList","getChoiceLabel","InfractionGrid","isStick","Infractions","newInfraction","PositionCell","LimitCell","LimitFormInput","FormInput","LimitInput","LimitsInput","displaySelectAll","adjustForCheckbox","displayRowCheckbox","arrayInputProps","required","ThrowsLimitsInput","minValue","InningsPitchedLimitsInput","getItemLabel","InningsPitchedRestsInput","PitcherLimitsInput","PitcherLimitsForm","scheduleTypes","throwsLimits","inningsPitchedLimits","inningsPitchedRests","AddPitcherLimitsDialog","EditPitcherLimitsDialog","AddPitcherLimitsButton","pitcherLimits","PitcherLimitsDatagrid","ul","renderScheduleTypes","output","renderThrowsLimits","restingDays","renderInningsPitchedLimits","limitType","renderInningsPitchedRests","PitcherLimitsGrid","PitcherLimits","pitcherLimit","newPitcherLimits","VarianceForm","FF_PITCHERS","AddVarianceDialog","EditVarianceDialog","AddVarianceButton","VarianceDatagrid","tbody","LineupLimitsField","lineupLimits","positionName","PitcherLimitsField","limits","VarianceGrid","Variances","variances","variance","newVariance","ejections","EjectionsInput","RulebookFormBody","RulebookForm","rulebook","AddRulebookDialog","AddRulebookButton","hasRulebook","showRulebooks","canAddRulebooks","defaultRulebookName","FormatListNumberedRtl","dropDownErrors","validateHasDropdownOptions","AttributeValueTypeInput","NumberValueTypeInput","DropdownValueTypeInput","AttributeTypeForm","showOfficeInput","showAttributeTypeInput","showAttributeTargetTypeInput","attributeValuesData","loadedData","AddAttributeTypeDialog","EditAttributeTypeDialog","AddAttributeTypeButton","AttributeTypeDatagrid","getGridAttributeOptions","attributeType","gridOptions","attributesRender","AttributeTypeGrid","canAddAttributes","canImportAttributes","periodType","period","PeriodValueInput","getConstraintSummary","verb","resourceText","ConstraintSummary","ConstraintsForm","AddConstraintDialog","EditConstraintDialog","AddConstraintButton","ConstraintDatagrid","renderSummary","ConstraintsGrid","showConstraints","canAddConstraints","LockOutlined","PayPeriodForm","AddPayPeriodDialog","AddPayPeriodButton","PayPeriodDatagrid","renderStatus","closedAt","PayPeriodGrid","AccountBalance","arrayContainer","inputContainer","I18nInput","ArrayI18nInput","AddInfractionTypeDialog","InfractionTypeForm","EditInfractionTypeDialog","AddInfractionTypeButton","InfractionTypeDatagrid","InfractionTypeGrid","renderDuration","canAddType","AddRuleSectionDialog","RuleSectionForm","EditRuleSectionDialog","AddRuleSectionButton","RuleSectionDatagrid","filterSection","RuleSectionSuggestion","section","includeOffice","RuleSectionInput","AddRuleDialog","RuleForm","EditRuleDialog","AddRuleButton","RuleDatagrid","RuleSectionField","filterRule","RuleSuggestion","hideSecondary","RuleInput","InfractionSuggestion","InfractionInput","typeId","ruleId","RuleInfractionInput","AddRuleOptionDialog","RuleOptionForm","EditRuleOptionDialog","AddRuleOptionButton","RuleOptionDatagrid","filterType","InfractionTypeSuggestion","InfractionTypeInput","legacyName","legacyDuration","ParentInfractionInput","hasParentOffice","rulesRef","typesRef","AddInfractionDialog","InfractionForm","EditInfractionDialog","ParentInfractionCode","ParentInfractionOffice","thead","NameField","RuleSectionGrid","RuleGrid","RuleOptionGrid","getInfractionOptionCodes","RuleOptionList","canAddRuleOption","InfractionList","canAddInfraction","RuleDetails","RuleList","canAddRule","sectionId","BookOutlined","AddInfractionAccumulationDialog","InfractionAccumulationForm","EditInfractionAccumulationDialog","AddInfractionAccumulationButton","InfractionAccumulationDatagrid","InfractionAccumulationGrid","FontDownloadOutlined","filterSanction","SanctionSuggestion","sanction","SanctionInput","positionGroups","accumulationCount","ParentSanctionInput","AddSanctionDialog","SanctionForm","EditSanctionDialog","AddSanctionButton","SanctionDatagrid","optionId","OptionInputEnum","useRuleOptions","AddSanctionMemberDialog","SanctionMemberForm","EditSanctionMemberDialog","sanctionMember","AddSanctionMemberButton","SanctionMemberDatagrid","ToolTipNumberInput","SanctionOffenseForm","isIndefinite","durationType","offense","AddSanctionOffenseDialog","EditSanctionOffenseDialog","AddSanctionOffenseButton","SanctionOffenseDatagrid","renderOptionalField","SanctionOffenseGrid","priorityLabel","getRuleCode","PriorityLabel","RuleOptionField","ParentSanctionCode","ParentSanctionOffice","SanctionMemberGrid","SanctionGrid","positionGroup","SanctionOffenseList","canAddSanctionOffense","SanctionMemberList","canAddSanctionMember","SanctionDetails","canAddSanction","GavelOutlined","EditOfficeSettingsDialog","OfficeSettingsForm","UpdateOfficeSettingsButton","renderStandingOrder","standingsOrder","standing","renderEnforcement","enforcement","enforcementValue","renderReports","OfficeSettingsField","Skater","Goalie","adminReports","teamReports","InternalTab","showInternalTab","EditBranchOfficeSettingsDialog","BranchOfficeSettingsForm","UpdateBranchOfficeSettingsButton","renderCertifiedOfficialChanges","certifiedOfficialChanges","renderAllowOfficialSetAssignOffices","BranchOfficeSettingsField","OfficeClaimsSettingsForm","isAmount","AddOfficeClaimsSettingsDialog","AddClaimsSettingsButton","EditOfficeClaimsSettingsDialog","OfficeClaimsSettingsDataGrid","TravelRateField","unitOfMeasure","ExcludedDistanceField","AssignRulesInput","ResetRulesForm","GameGrid","setGames","AssignRulesResetModal","useFieldArray","MembersForm","OfficeMembersModal","canEditMembers","additions","removals","canResetRules","canShowMembers","showAnalyze","AssignRuleApplyModal","isZone","isAssociation","showAvailabilitiesCard","showOffices","showTeams","showSchedules","showArenas","showTimeSlots","OfficesCard","OfficeActionsCard","GroupsCard","ArenasCard","ArenaSlotsCard","AssigningTab","showAssignSettings","showClaimSettings","showPayPeriods","showClaimPeriods","showScorekeepers","showAssignSystems","showAssignFees","showAssignRules","showAssignTargets","ClaimsSettingsCard","PayPeriodsCard","AttributeTypesCard","AssignSystemsCard","AssignFeesCard","AssignRulesCard","AssignmentIndOutlined","RulebookTab","showRules","showTypes","showAccumulations","showSanctions","showAlert","RulesCard","InfractionTypesCard","InfractionAccumulationsCard","SanctionsCard","RulebooksCard","showSections","canShowConstraints","showBranchSettings","OfficeSettingsCard","BranchOfficeSettingsCard","SchedulingConstraintsCard","SectionsCard","OfficeShowLayout","showRulebook","showScheduler","OfficeActions","OfficeInternalActions","OfficeShowHeader","LeagueFilters","canSelectAll","Group","titleComponent","TitleComponent","ActionComponent","actionButton","LeagueTitle","LeagueList","DatagridRow","LeagueView","GroupedView","collapsale","showExternalProviders","LeagueShowLayout","LeagueForm","hideType","TournamentFilters","TournamentTitle","TournamentList","TournamentView","tournament","TournamentShowLayout","TournamentForm","CupFilters","CupTitle","CupList","CupView","cup","CupShowLayout","CupForm","VenuesList","VenueView","VenueFilters","DirectionsButton","Directions","canEditVenue","SurfaceGrid","fraction","ParentSurfaceInput","isSplitSurface","FractionInput","SurfaceForm","AddSurfaceDialog","AddSurfaceButton","VenueShowLayout","SimpleShowLayout","VenueCard","SurfacesCard","postalCode","VenueForm","SurfacesList","SurfaceView","getSurfaceCity","SurfaceFilters","canEditSurface","VenueField","canAddOffices","canImportSlots","hasPermission","SplitAlert","SurfaceShowLayout","arenaOfficeIds","setArenaOfficeIds","arenaOffices","canListSlots","authArenaOffices","arenaOffice","defaultArenaOffice","SurfaceCard","ViewQuiltOutlined","AccountRow","AccountGrid","SimpleList","linkType","AccountFilters","AccountShowLayout","showPassword","setVisibility","visible","onMouseDown","VisibilityOutlined","AccountForm","PasswordInput","SMAResetAlert","SMAResetPasswordForm","password","meetsLength","containsNumber","containsSpecialCharacter","containsUppercase","containsLowercase","SMAResetPasswordDialog","SMAResetPasswordButton","AccountActions","isSSOAccount","FF_SSO_RESET_PASSWORD","PLAY_ENVIRONMENT","AccountPagination","renderDate","announcement","sameElse","AnnouncementGrid","AnnouncementFilters","Block","parentType","bold","italic","underline","isImage","paragraph","blocks","AnnouncementTable","ContentField","AnnouncementShowLayout","canEditAnnouncement","AnnouncementExpand","Editor","DestinationInputs","recipient","AnnouncementForm","EditorInput","SectionField","PageGrid","PageFilters","PageShowLayout","canEditPage","SectionSuggestion","SectionInput","PageForm","PostGrid","PostFilters","PostCard","post","canEditPost","PostShowLayout","PostForm","EventDateField","dateRange","WebEventGrid","WebEventFilters","WebEventCard","canEditWebEvent","WebEventShowLayout","EventDateInput","dateOptions","WebEventForm","officesRef","webevent","Status","article","subtract","Update","ArticlesList","rowIndex","ArticleView","ArticleFilters","allroles","renderRoles","ArticleShowLayout","canEditArticle","disableMaxHeight","ArticleForm","TransactionViewSettingsContext","TransactionViewSettingsProvider","groupGames","groupParticipants","useTransactionViewSettings","useGroupGames","useGroupParticipants","canEditPayPeriod","RemovePayPeriod","removeableIds","transactionIds","TransactionBulkActions","OfficialTransactionTitle","AddTransactionFromGroupButton","canAdd","GroupedTransactionList","classesOverrides","setIsOpen","rowClickId","setRowClickId","handleRowClick","GroupedTransactionView","groupingKey","certified","TransactionGrid","TransactionList","isGameCertified","setTransactions","AddTransactionsForm","AddTransactionModal","Queue","cardHeader","listActions","TransactionFilters","AddTransactionsModal","filterDefaultValues","closePeriod","periodId","ClosePeriodModal","PayPeriodStatus","PayPeriodShowLayout","PayPeriodCard","ParticipantSuspensionsCard","hideAddButton","AdditionalGamesField","requiredGames","totalGames","additionalGames","SuspensionDisciplineForm","suspensionId","AddSuspensionDisciplineDialog","EditSuspensionDisciplineDialog","AddSuspensionDisciplineButton","EditSuspensionDisciplineButton","TriggerSuspensionDiscplineButton","GroupAdd","handleTrigger","useSuspensionDiscipline","renderDisciplineAdditionalGames","disciplineAdditionalGames","disciplineDurationType","SuspensionDisciplineCard","suspensionDiscipline","canEditSuspensionDiscipline","c","boldRow","disciplineStatus","numOfGames","renderRequiredGames","renderEffectiveRequiredGames","effectiveRequiredGames","effectiveDurationType","renderSuspensionType","sanctionName","hasDiscipline","disciplinesEnabled","canEditSuspension","canAddSuspensionDiscipline","canTriggerSuspensionDiscipline","noneLabel","SuspensionShowLayout","gameInStore","useGameWithStore","canViewSuspensionDiscipline","canViewDisciplineCommittee","hideAlerts","SuspensionCard","GamePurgeList","DisciplineCommitteeCard","IncidentReportCard","SuspensionFilters","SuspensionFilterList","allResources","Resource","ScheduleExporter","aside","scheduleTab","lastIndexOf","groupByDate","GamesExporter","GameForm","TeamIcon","PracticeIcon","PracticesExporter","ActivityIcon","ActivitiesExporter","ParticipantIcon","WebEventIcon","PostIcon","PageIcon","LeagueIcon","officeTab","TournamentIcon","CupIcon","OfficeIcon","VenueIcon","SurfaceIcon","AccountIcon","AnnouncementIcon","ArticleIcon","RulebookIcon","BalanceIcon","GavelIcon","canExpand","authResources","ResourceType","allowedProps","methods","registerResources","registerResource","Scheduler","NewDraft","qs","Draft","setDraft","getOne","stepMatch","matchPath","generatePath","DraftRoutes","ChangePasswordForm","oldPassword","newPassword","confirmPassword","handleError","LogoutButton","ChangePasswordModal","VerifyStep","setStep","goBack","skipAuth","AccountStep","invitation","ReviewStep","registration","login","useLogin","wordBreak","messages","Stepper","orientation","Step","StepLabel","StepContent","Register","noLayout","AddAnnouncementDialog","AddAnnouncementButton","EmailOutlined","canAddAnnouncement","feedUrl","setFeedUrl","hasFeed","canCopy","queryCommandSupported","getFeedUrl","readonly","execCommand","generateFeedUrl","FeedButton","RssFeed","CalendarDialog","ssoIcon","smaAccessToken","ignoreQueryPrefix","accessToken","ssoLink","redirectUrl","allContacts","DraftsOutlined","pxToRem","flexBasis","ssoChip","Section","future","showAnnouncements","ContactsReminder","SsoLinkAccount","AnnouncementsCard","LeagueTab","token","verification","ok","AccountCard","FormError","complete","setComplete","resetPassword","requestReset","ReportsIcon","ArenaRoutes","customRoutes","RegisterRoutes","ResetPasswordRoutes","MyProfileRoutes","ReportRoutes","showPasswordInput","UserLoginForm","handleEdit","ScorekeeperLoginForm","LoginForm","isScorekeeper","mouseEventType","MouseEvent","bubbles","cancelable","setShowPasswordInput","loadingThirdParty","setLoadingThirdParty","u","submit","error_description","DatagridHeader","DatagridHeaderCell","createHistory","createAdminStore","Dashboard","Progress","useTimeout","setLong","Loading","longer","valueBuffer","App","storageAvailable","storageLoading","isOffline","navigator","onLine","setIsOffline","handleOffline","handleOnline","useOffline","AdminUI","loginPage","LoginPage","dashboard","disableTelemetry","AppContext","useI18nProvider","AdminContext","authProvider","M","utils","MomentUtils","initSentry","dsn","release","environment","sampleRate","tracesSampleRate","ignoreErrors","ReactDOM","ForeThoughtMobile","ForeThoughtDesktop","hideForeThoughtBubble","hideForeThoughtChat","showForeThoughtBubble","canShow","setCanShow","onForethoughtMessage","isTrusted","unmountScript","Forethought","toggleChat","head","getElementsByTagName","forethoughtScript","LocaleContext","LocaleProvider","userLanguage","dow","TYPES","Exhibition","Placement","League","Playoffs","Tournament","Championship","Cup","STATUSES","Active","Rescheduled","Cancelled","Postponed","Conflict","Forfeited","DoubleForfeit","Completed","Certified","ra","english","yes","no","back","ignore","register","continue","subscribe","learn","analyze","switch","swap","delegate","undelegate","generate","finish","discard","cancel","skip","new","keep","send","sign","directions","assign_anyway","reassign","accept_other","click_here","click_to_verify","send_verification","copy_to_clipboard","confirm_removal","tap_for_more","repeat","send_invite","retry","open_full_page","clear_filters","apply","upload","select_columns","review","unshare","fix","search_in","open_in_id","certify","pend","respond","load_more","click_to_refresh","hide","manage","recalculate","auth","login_error","login_error_retry","unauthorized","unauthorized_long","recovery_email","your_username","youre_logged_in_as","error_try_again","error_try_again_refresh","editing","not_available","created","updated","not_published","not_applicable","delete_title","delete_content","discard_changes","version_error","version_mismatch","report_details","digits","redirecting","optional","no_options","none","unverified","verified","unverified_email","verified_email","verification_email","unknown","show_more","no_results","no_results_filtered","no_rows","filter_by_status","filter_by_attributes","filter_by_list","filter_by_name","filter_by_group","filter_by_pool","filter_by_category","no_group","all_f","no_valid_rows","managed_by_id","synced_with_id","unsupported","shared_slot","click_search","upload_several","upload_single","uploading","upload_csv","download_template","only_csv","error_parsing","invalid_value","enter_new_title","confirm_remove_attachment","importing","error_too_large","drop","type_to_search","forgot","change_success","old","too_long","toggle_visibility","adornments","kilometers","deleted","bad_item","item_doesnt_exist","logged_out","validation","invalid_number","invalid_number_format","invalid_email_format","different","incorrect_email_password","values_not_unique","spaces_not_allowed","more_characters","positive","positive_leave_empty","negative","whole","longer_than","greater_than_zero","greater_than_or_equal_zero","greater_than_zero_leave_empty","greater_than_zero_leave_empty_limit","title_too_long","absence","numericality","inclusion","exclusion","uniqueness","already_exists","duplicate","end_after_start","end_before_start","unable_to_delete","claim_maximum_amount","too_high","phrase","lexical","all_day","until_time","after_time","before","between","after","short","All","Sun","Mon","Tue","Wed","Thu","Fri","Sat","function","for","is","was","youre","by","classId","Male","Female","Integrated","scheduleCategory","labels","shortName","Hockey","Soccer","Baseball","Ice","Grass","Synthetic","Wood","Gym","Clay","Dirt","all_sizes","XL","S","XS","splitTitle","splitSubtitle","time_slots","street_address","helpers","my","add_venues","search_venue","enter_name_city","loading_venues","end_date","schedule_no_occurences","event_repeat","additional_instances","Practice","Training","Meeting","Meal","Accomodation","Once","Daily","Weekly","Monthly","activity_explanation","tbd","practice_status","set_practice_status","change_practice_status","practice_status_changed","change_practice_status_error","validations","upcoming_schedule","team_events","show_calendar","quickAssignLabel","edit_completed","applyAssignRules","recalculateStats","recalculateScoresheet","recalculateTransactions","scoresheet","bracket","bracket_game","quick_assign_dialog_title","game_number","game_number_officials","game_number_lineup","game_number_certify","editing_game_number","team_lineups","all_games","forfeiting_team","forfeitWin","forfeitLoss","forfeitTie","game_number_history","scoresheet_notes","admin_notes","select_team","certify_game","view_scoresheet","confirm_changes","game_status","set_game_status","change_game_status","view_options","draftUpdates","tooltips","cross_scheduling_add","cross_scheduling_remove","main_group","approved","incomplete","assignment","confirm_reassignment","confirm_request","expired_qualification","flagged_official","request_game","this_game","swap_assignment","swap_assignment_official","search_names","search_attributes","unassigned","adhoc","update_availability","game_officials","assign_officials","team_officials","show_attributes","hide_attributes","undo_no_show","delegate_pay","confirmed","pending","declined","requested","no_show","removed","expired","ineligible","travel","assigned_today","assigned","local","certification","general","flagsDetails","forfeit_help","show_assignments","show_flags","reverse_home_away","show_more_game_info","group_games_by_arena","group_games_by_round","group_games_by_date","confirm_delegate","and_more","subscribe_description","subscribe_description_extra","apply_assign_rules","accept_game_assignment","decline_game_assignment","are_you_sure_accept_assignment","are_you_sure_accept_assignment_disabled","accepting_assignment","you_cannot_accept_assignment","consecutive_game","accept_consecutive_assignments","decline_consecutive_assignments","already_assigned","continuing_replacement","invalid_qualification","verified_eligibility","unable_accept_assignment","assign_official_to_game","reason_for_declining","both_assignments","decline_as_unavailable","decline_as_available","contact_assigner","decline_assignment","other_assignments","accept_another_assignment","removed_from_game","request_removed","remove_request_from_game","remove_official_from_assignment","assigners_will_be_notified","select_new_assignment","swap_choice","swap_current_position","swap_delegated","swap_settings_help","position_unassigned","official_already_assigned","select_official_to_view_availability","hidden_by_filter","official_from","scorekeeper_from","contact_game_assigners_officials","all_assignments_confirmed","draft_status_description","assigned_by","time_display","time_display_local","time_display_other","update_official_presence_status","mark_as_no_show","loading_game_error","no_changes_made","no_edit_permission","no_change_date_permission","assignment_history","completed","assigning_not_configured","integration","conflict","postponed","rescheduled","rink_changed","assigning_reason","no_office","no_system","assign_settings_disabled","load_assignment_panel_error","load_assignments_error","status_of_assignments","official_history_error","no_assignment","this_position_already_assigned","already_assigned_to_game","official_details_error","load_official_schedule_error","no_game_and_availability","missing_settings","no_pay_structure","no_pay_structure_delegated","assigned_by_delegated","title_alt","no_requests_or_ready_officials","officials_requested_this_game_already","no_request_officials_ready","no_ready_officials","officials_already_arena","no_officials_this_arena","no_officials_required","assign_official","assigner","officiate_game","accepted","accepted_other","unconfirmed","unconfirmed_other","change_response","change_response_other","suspended","duration_expiry","duration_indefinite","eligibility","minimum_level","no_grade","minimum_grade","minimum_age","no_age","limit_reached","team_conflict","rostered","roster_conflict","affiliate_conflict","game_conflict","game_overlap","title_assigned_today","another_venue","this_venue","no_availability","no_availability_office","no_availability_arena","invited","unregistered","assignee","confirm_conflict","reset_assigner","delegated_tooltip","pay_delegated_tooltip","notification_will_be_sent","note_for_accepted_game","delegated_pay_office","using_slot","use_next_sequence","accepted_game","declined_game","requested_game","official_assigned_to_game","remove_official_from_game","official_set_to_no_show","request_removed_from_game","accept_overlaps","accept_consecutive","accept_consecutive_overlaps","decline_consecutive","recalculating","game_status_changed","change_game_status_error","delegated_games","delegated_games_error","changed_assigner_games","changed_assigner_games_error","certified_games","certified_games_error","invalid_date","invalid_time","must_have_date","must_have_date_both_times","invalid_time_check_am_pm","invalid_must_be_same_day","after_start_time","number_exists","before_schedule_date","after_schedule_date","team_not_in_cross_scheduling_groups","team_in_both_cross_scheduling_groups","teams_in_same_cross_scheduling_group","unavailable_slot","overlapping_slot","limit_date_change","position_short","forfeited","available_official","eligible_official","non_expired_official","registered_official","new_official","local_official","ignore_arena_availability","event_id","device","received","start_time","end_time","signatory","game_time","system","homeScore","awayScore","goal","scorer","assists","powerplay","shorthanded","empty_net","penalty_shot","own_goal","served_by","goalie_change","new_goalie","OT","SO","delete_events","offline_for_duration","time_skew_duration","game_cancelled","game_completed","game_disapproved","game_certified","game_decertified","game_deleted","game_reset","assigned_as","accepted_assignment","declined_assignment","added_as","changed_to","confirm_delete_events","gameCreated","gameRescheduled","gameUpdated","gameDeleted","gameForfeited","gameStarted","gameEnded","assignSettingsUpdated","lineupUpdated","lineupApproved","lineupExtraAdded","lineupExtraRemoved","officialDelegated","officialRequested","officialAssigned","officialAccepted","officialDeclined","officialAdded","officialUpdated","officialRemoved","keepersUpdated","goalScored","goalEdited","goalDeleted","penaltyStarted","penaltyEnded","penaltyEdited","penaltyDeleted","goalieChanged","goalieChangeDeleted","goalieChangeEdited","settingsUpdated","notesUpdated","goalieShotsUpdated","scoreUpdated","scoresheetApproved","scoresheetDisapproved","throwsInningsUpdated","certificationFlagsUpdated","scoresheetCertified","scoresheetDecertified","scoresheetReset","delete_error","accountEmail","phone","invite_sso","create_participant","picture_update_in_id","account_invitation","account_invitation_sso","add_time","add_associations","assigners_updated","assigners_error","venues_updated","venues_error","categories_updated","categories_error","assigner_availabilities","own_profile","select_associations","other_profile","venues_availabilities","select_venues","categories_availabilities","available_to_all_title","available_to_all_body","no_categories","roles_title","roles_body","roles_unauthorized","account_title","account_body","invited_title","invited_body","contacts_title","contacts_body","unverified_title","unverified_body","Admin","Assigner","Staff","Coach","Monitor","search_by_name","send_link","link_sso","create_sma","empty_slot","save_for","number_dates","thing_will","thing_will_not","person_will","person_will_not","search_by_association","enter_name_search","no_sma_user_found","failed_sma_creation","failed_to_get_user","failed_sma_retrieval","email_exists","already_linked","sma_exists","search_by_name_hockeyid","loading_associations","available_to_all_arenas","no_associations","search_make_yourself_available","not_available_to_assigners","limited_assigner_selection_title","limited_assigner_selection_message","no_assigner_selection_title","no_assigner_selection_message","alternateName","invitation_sent","sso_created_and_linked","sma_created_and_linked","participantMemberTypes","memberTypeId","affiliated","age","grades_file","qualifications_file","import_qualifications","import_grades","official_level","qualification_category","drop_qualifications_csv","drop_grades_csv","import_tool_grades","import_tool_qualifications","create_new_participants","valid_grades","valid_qualifications","participant_not_matched","match_existing_participant","grades_updated","qualifications_updated","import_grades_error","import_qualifications_error","invalid_grade","zero","level_zero","qualificationCategories","officialName","add_officials","officials_added","add_officials_error","qualificationOrganization","remove_all","official_id","selected_officials","drop_csv","import_tool","no_officials_selected","eligible","nonExpired","registered","ignore_arena","matchAllAttributes","matchAny","added","unqualified","import_error","scorekeepers","add_team","syncOffices","syncTeams","syncOfficials","syncRegistrations","sub_offices_title","people","analyzeSchedules","same_office","Branch","Region","District","Association","Administrative","Historical","Zone","Organization","officeMembers","featureFlags","skaterStatsHiddenDivisionIds","goalieStatsHiddenDivisionIds","standingsHiddenDivisionIds","boxScoreHiddenDivisionIds","syncAttributes","updateRosterFromLineups","conflictDrafts","conflictLegacyDrafts","availabilityEnforcement","conflictEnforcement","constraintEnforcement","homeTeamScorekeeping","awayTeamScorekeeping","requireIncidentReports","homeChangeStatus","soWin","soLoss","otWin","otLoss","assist","preview","enforcements","deferLegacyDraftConflict","team_stats","player_stats","advanced","schedule_stats","game_stats","stats_schema","skater","standings_order","wins","losses","otl","ties","pointsPct","pointsPerGame","gamesPlayed","goalAgainst","goalAgainstPerGame","goalFor","goalForPerGame","shotFor","shotAgainst","gaa","shutouts","gamesStarted","minutesPlayed","savePercentage","goals","gameTyingGoals","gameWinningGoals","powerplayGoals","powerplayPoints","powerplayAssists","shorthandedGoals","shorthandedPoints","shorthandedAssists","pim","pimPerGame","penaltyOccurrences","standings_type","standings_subject","hidden_stats","rosters","conflict_enforcement","public","game_length","teamScorekeeping","points_system","admin_reports","team_reports","edit_office","load_error","new_schedules_only","statsVisibility","standingsVisibility","boxScoreVisibility","hiddenStats","incidentReports","required_approvals","groupingTypeHint","sportsmanship_points","PCAHA","VIAHA","sync_attributes","scoring","ap","suspension_activation","manual","approval","scoring_mode","detailed","penalty_mode","Pools","Groups","batter","isReleased","abbreviations","add_members","starter_goalie","suspension_abbreviation","jersey","current_game","total_games","player","staff","selected_members","has_been_added","no_members_selected","name_or_id","must_have_number","F","C","D","G","Manager","Trainer","members_added","add_members_error","brackets","bracketId","schedule_info","team_select","add_sequences","schedule_settings","matrix","show_organisation","show_full_names","compact_mode","brackets_viewer","open_in_viewer","open_new_window","zoom_in","zoom_out","no_preview","no_data","generate_legacy","upload_legacy","draft_legacy","league_contacts","competitive","recreational","accredited_school","add_to_group","add_to_pool","bracket_schedule","bracket_reseed","bracket_reseed_info","group_bracket_reseed","reseed_bracket","bracket_info","create_bracket","brackets_info","brackets_na","current_matchups","new_matchups","office_matchups","include_drafts","scheduled_events","not_public","no_byes","no_matchups","too_many_matchups","unable_to_load","additional_games","bracket_games_created","bracket_games_reseeded","missing_sequence","hidden_to_public","cohorts","existing_brackets","missing_seeded_games","missing_schedule_teams","orientations","Portrait","Landscape","points_system_ranking","edit_schedule","include_registrations","allow_extras","lineups","included","allow_extras_default","standard_description","high_low","low_high","new_scoresheets_only","scoring_mode_change","penalty_mode_change","ranking_type","ranking_order","DESC","ASC","Arena","add_constraint","edit_constraint","host","play","have","on","sync","unsanctioned_title","roster","team_roster","import_roster","import_profiles","roster_file","profile_file","unsanctioned","home_team_hcr_id","valid_members","drop_roster_file","drop_profile_file","import_tool_roster","import_tool_profile","import_tool_warning","no_teams","valid_profiles","caution","creating_unsanctioned","import_roster_success","import_roster_error","import_profiles_error","profiles_updated","not_set","rank","import_teams","replace_existing_teams","team_order","synced_by_id","starting_sequence","go_to","sequence_in_use","sequence_info","too_many_characters","cannot_contain_consecutive_dashes","cannot_contain_special_characters","must_contain_a_number","delete_sequence_in_use","delete_scheduleteam","unique_prefix_suffix","prefix_cant_end_in_number","greater_than_current","schedule_has_sequence","group_has_sequence","sequence_overlaps","sequence_exhausted","excessive_pad_length","divisionIds","game_slots","practice_slots","slot_replace","import_slots","slots_file","slot_splits","slot_duration","break_duration","delete_slots","slots_restrictions","set_slots_restrictions","restricted","Type","drop_slots_csv","import_tool_slots","import_slot_warning","confirm_delete","available_slots","home_available_slots","away_available_slots","import_slots_success","import_slots_error","delete_slots_success","delete_slots_error","update_restrictions_success","update_restrictions_error","import_slots_overlaps","import_slots_end_before_start","duration_exceeds_range","total_duration","include_start_day","bulk_slots_restrictions","overlaps_title","notAvailable","team_conflicts","surface_conflicts","constraints","more","blockedSurfaces","sma_reset","enter_email","enter_email_above","sma_reset_title","must_be_length","must_have_uppercase","must_have_lowercase","must_have_special","sma_reset_success","sma_reset_error","reportsDisabled","scorekeepingDisabled","subtitles","administrative","Officiating","role_not_activated","personal_calendar_feed","public_profile","private_profile","invalid_birthdate","invalid_height","invalid_weight","invalid_hometown","invalid_dexterity","Right","Left","isNotification","information","already_received_email","only_participant_verify","has_not_been_verified","unverified_explain","error_verify","contact_accounts","create_via_invite_button","change_login","add_contact_email","verify_contact_email","not_registered","notificationsActive","notificationsDisabled","Email","Mobile","Work","Other","AB","BC","MB","NB","NL","NT","NS","NU","ON","PEI","QC","SK","YT","contactId","sources","update_source","role_origin","duplicate_notification","requestReason","sharedAt","sharedUntil","requested_by","set_date","clear_date","change_status","delete_draft_game","duplicate_game","edit_number","draft_request","generate_automatically","round_type","games_per_team","total_rounds","limit_byes","weekdays_type","start_date","start_round","breaks","total_weeks","no_round","no_date","no_time","no_venue","drafts_file","import_drafts","date_format","main_schedule","cross_schedule","cross_group","cross_pool","cross_team","add_cross_team","number_of_teams","updateExistingGames","confirm_publish_with_conflicts","true","false","drop_drafts_csv","generate_single_double","no_teams_alert","one_team_alert","gaps_alert","no_teams_group_alert","one_team_group_alert","gaps_group_alert","no_teams_pool_alert","one_team_pool_alert","gaps_pool_alert","unslotted_matchups_alert","match_columns","match_teams","import_tool_drafts","publish_help","share_help","confirm_clear_date","schedule_dates","change_dates_dialog","teams_to_import","duplicate_game_success","update_game","request_reason","latest_round","weekdays_double","must_start_on_day","must_be_after","must_be_before_schedule_end_date","max_weekdays","even_number","invalid_date_format","start_without_end","end_without_start","date_without_date","manual_odd_numbers","same_group","matrix_team_duplicate","not_added","uploaded","uploaded_teams_error","not_uploaded","slow_upload_warning","generator_load_error","published_games","published_games_error","publish_failed","invalid_games","shared_games","shared_games_error","set_date_error","delete_draft","delete_draft_error","clear_date_error","change_status_error","round_types","weekdays_types","draftGameApprovals","approvals","approve_request","decline_request","request_reschedule","confirm_approve_request","confirm_decline_request","publish_game","request_changes","cancel_draft","approval_comments","approved_and_published","declined_and_cancelled","request_approved","request_declined","respond_error","Approved","Declined","Pending","name_legacy","totalRounds","limitByes","crossGroup","roundType","gamesPerTeam","startNumber","previousDraftId","title_legacy","shuffle","swap_matchups","set_active","set_conflict","generate_automatically_legacy","manual_entry","previous_schedule","previous_draft_alert","cross_group_alert","replace_teams_alert","use_previous_teams","unused_breaks","unscheduled_games","changed_games","new_games","conflict_resolution","modified","keep_mine","accept_theirs","accept_delete","keep_delete","schedule_upload","draft_schedule","show_conflicts_only","games_selected","draft_multiple_games","generate_new_schedule","draft_already_has_games","draft_already_has_games_share","want_generate_new_schedule","drop_your_schedule_file","drop_another_schedule_file","replace_existing_games","draft_already_has_games_uploader","want_replace_existing_games","number_of_play","number_of_games_per_team","number_of_break","publish_schedule","same_game_number_be_updated","discard_draft","discard_unsaved_draft","save_changes","save_changes_before_leaving","number_teams_added","number_existing_games","number_games_added","no_changes_number_games","no_changes_number_teams","no_additional_games","unbalanced_schedule","games_per_total_teams","game_per_team","review_errors","title_shared","list_shared","renumber_games","dated_in_past","totalRounds_odd","startDate_previous","previousDraftId_optional","no_team_time_slots","must_be_before","break_last_week","max_weeks","valid_date","valid_time","same_column_start_time","cross_group_teams","same_game_number","generating_schedule","unable_generate_schedule","unable_to_load_draft","unable_to_share_draft","unable_to_publish_draft","unable_to_publish_draft_games","schedule_published","draft_shared","Upload","Generated","Manual","draft_type","removeAfterDecline","removeAfterRescheduled","removeOnDateChange","assignmentVisibility","assignerVisible","supervisorVisible","enforceConsecutive","effectiveOfficialsList","edit_assigning","declines","travel_claimables","per_diem_claimables","visible_days_disabled","visible_same_day","visible_days_on","visible_days_off","requests_enabled_on","requests_enabled_off","decline_enabled_on","decline_enabled_on_anytime","decline_enabled_off","reason_required","reason_not_required","disabled_after_confirmation","assigning_not_enabled","Visible","Hidden","Expense","referee","linesperson","referee_grade","linesperson_grade","set_assigning_settings","set_assigner","assigning_settings","change_assigner","status_draft","change_assigner_partial","updated_game_settings","updating_settings_error","invalid_fees","bulk_assign_settings","archived","notArchived","assign_fee_in_use","delete_assign_fee_in_use","cannot_archive","cannot_update_amounts","effectiveDate","stopInheritance","alt_card","default_rules","criteria","time_before","effective","apply_rules","applied_settings","assignTypes","scheduledBy","assignedBy","inheritance","archived_fee","existing_games","new_games_only_title","new_games_only","determined_by","apply_rules_success","determine_via","required_level","required_grade","required_age","invalid_level","invalid_age","min_setting_range","referees","linespersons","linespersonsTwo","linespersonsThree","timekeepers","supervisors","add_override","missing_type","unique_target","unique_group","slug","coverId","start_writing_here","drop_registrations_csv","use_import_tool","valid_registrations","registrations_updated","import_registrations_error","send_email_officials","all_team_staff","all_available_officials","all_team_staff_all_available_game_officials","all_list_members","destination_sent","destination_not_sent","General","import_list_members","list_members_file","drop_list_members_csv","import_tool_list_members","create_list","quick_assign_tooltip","add_member","list_members_added","list_officials_added","add_list_members_error","add_list_officials_error","list_members_removed","list_officials_removed","remove_list_members_error","remove_list_officials_error","import_list_members_error","import_list_officials_error","parent_code","parent_office","Low","Medium","High","Severe","isEjection","servingOrder","isReplacement","infractionAccumulatiomMembers","accumulationId","doubleminors","lineup_limits","add_infraction","add_duration","add_variance","add_limits","baseball_title","baseball_subtitle","edit_infraction","edit_duration","edit_variance","edit_limits","skaters","pitcher_limits","additional_policies","throws_limits","innings_pitched_limits","innings_pitched_rests","rulebook_independence","always","None","low","medium","high","severe","help_center","article_not_published_yet","registrar","director","organizer","assistant","association","editor","AP","Assigning","Penalty","Scoring","seasons","viewing_inactive_season","all_groups","Jamboree","Challenge","Invitational","additionalPurgingTeamId","playing","played","purging","purged","not_serving","not_suspended","indefinite","manual_direct","automatic","participant_history","unpurgeable","required_games","supplemental","supplemental_long","Appealed","Definite","Indefinite","confirm_trigger","discipline_committee","Inactive","must_be_empty","must_be_greater_than_zero","trigger_success","trigger_error","priority","lastMinutesGames","injuryGames","injuryDays","lastMinutesDays","requireDisciplineCommittee","info_creating_claim","addressId","calculateDistance","pending_error","approved_error","declined_error","no_claim_types","excluded_amount","claim_approved","claim_unavailable","gameScheduleId","select_all","unselect_all","group_by_game","group_by_participant","assigned_pay_period","assign_pay_period_error","pay_period_removed","remove_pay_period_error","assign_pay_period","remove_pay_period","from_pay_period_closed","pay_period_closed","add_transactions","close_period","period_closed","period_active","period_closed_message","period_active_message","pay_period_close","close_pay_period_error","injured","returnedToGame","injury","returned","notInjured","games_purged","gameMessages","no_messages","notification_sent_to","send_messages_error","add_penalties","add_goals","print","print_roster","add_extra","add_extra_same_office","photos","transferred","edit_penalty","edit_goal","bench_staff","undo_approval","sign_and_approve","start_game","approve_game","undo_certify","more_info","less_info","signed","official_attendance","additional_emails","clock","reset_scoresheet","offender","inning","half","delete_additional","accumulation","scored_by","assisted_by","edit_score","add_notes_title","add_notes","edit_notes_title","edit_notes","period_settings","your_team_roster","lineup_change_apply","lineup_change_apply_part_2","show_registrations","minimum_not_met","over_limit","lineup_approved_by","end_game","confirm_sign","confirm_sign_game","confirm_certify","put_in_goalie","assist_abbr","served_abbr","shg","ppg","eng","psg","og","successful_game_end","successful_game_approve","successful_game_undo_approval","successful_game_undo_certified","successful_game_certify","successful_game_start","successful_save_flags","successful_save_score","successful_save_notes","successful_update_settings","loading_flags","not_updated","delete_confirm","subsequent_penalties","subsequent_penalties_edit","early_lineup_entry","duplicate_batting_order","unselected_suspended_players","cannot_remove_members","not_certified","missing_incidents","not_authorized","lineup_change_post_game_started","unauthorized_manage_lineup","team_has_no_members","or_registrations","no_members_match_filters","cannot_reset","lineup_throwsinnings","lineup_throwsinnings_certified","missingIncidents","validatingMembers","missing_jersey_number","duplicate_jersey_number","second","too_many_assists","out_of_range","invalid_extra","start_time_before_game_time","reset_error","Lineup","Scoresheet","max_size","edit_seeds","seeds","has_data","no_dropdown_options","Surface","Dropdown","Text","attributes_file","import_attributes","drop_attributes_csv","import_tool_attributes","import_attributes_error","attributes_updated","externalProviders","services","Streaming","Ticketing","Stats","all_pools","select_highlight","pools_unavailable","groups_unavailable","components","views","Season","game_list_filters","drafts_only","drafts_no_dates","drafts_no_times","all_published_games","unschedule","selected_game","remove_date","arena_slots","away_arena_slots","team_names","condensed_view","select_game","no_home_surface","no_result","schedule_game","unschedule_game","remove_time_field","no_schedule_teams","scheduled_games","not_scheduled_games","scheduled_away_games","scheduled_home_games","both_teams","home_team","away_team","draft_game","start_after_end","specify_name","loading_error","im_a","helper","offline","you","reconnect","cookies_disabled","use_browser_storage","enable_cookies","sso","link_error","link_success","invalid_game_number","invalid_game_number_long","invalid_team_id","invalid_team_id_long","missing_home_or_away_team","missing_home_or_away_team_long","game_cancelled_long","unsupported_sport","unsupported_sport_long","game_already_completed","game_already_completed_long","sso_link","link_account","hockey_identity","link_invitation","correct_account","email_login","account_exists","participant_invalid","participant_mismatch","token_invalid","reset_password","invalid_reset_link","check_email","check_email_error","goalie_shots_against","edit_shots","enter_shots","blank","error_loading_goalies","throws_innings","innings","throws_today","throws_weekly","innings_today","innings_weekly","innings_remaining","cannot_throw","resting","consecutive_days","over_innings_limit","error_saving","office_selector","details_csv","details_xlsx","summary_csv","summary_xlsx","export_csv","export_xlsx","transactions_exporter","pay_period","schedule_name","schedule_office_name","first_name","last_name","member_id","transaction_date","travel_fees","officiating_fees","other_fees","total_fees","penalties_exporter","team_name","team_id","game_date","infraction_code","served_by_name","served_by_id","feature_flags","branch_level","roles_and_permissions","account_permissions","scheduleStats","titles","ParticipantScheduleStats","TeamScheduleStats","ranking_og","poolRanking_og","no_pools","manual_standings","edit_manual_standings","manual_standings_updated","manual_pool_standings_updated","manual_standings_error","manual_pool_standings_error","regions","Canada","Europe","french","limited_assigner_title","limited_assigner_message","visible_same_days","destination_not_nsent","lineup_variances","HC","Club","englishMessages","frenchMessages","englishSportsMessages","frenchSportsMessages","getPolyglot","polygot","Polyglot","phrases","sportPhrases","extend","polyglot","bind","getLocale","Intl","NumberFormat","currency","ListFormat","localeMatcher","slotIds","prevSlotIdsRef","slotIdsToFetch","slotId","currentSlotIdsToFetch","AssignFeesField","AssignFeesSuggestion","fee","AssignFeesInput","renderRule","renderAttributes","AssignOfficeField","AssignRuleField","AssignRuleAltGrid","AssignRuleValueInput","assignValue","AssignRuleOfficeInput","RuleValueInput","isAssignVia","AssignRuleForm","AddAssignRuleDialog","EditAssignRuleDialog","AddAssignRuleButton","AssignRuleDatagrid","AssignSystemField","AssignSystemInput","settingsInStore","effectiveBranchOfficeSettings","CategoriesList","showId","getValues","equals","matchCategory","class","CategorySuggestion","filterCategory","sending","setSending","canSendVerification","icons","useInfoStyles","TypeIcon","AlternateEmail","PhoneAndroidOutlined","numberRegex","InfoField","numbers","parseValue","TooltipIcon","NotificationsActiveOutlined","LocalHospital","VerifiedField","setDialogContact","NotificationImportantOutlined","dialogContact","ContactVerifyDialog","phoneRegex","ValueInput","showAccountAlert","Warning","ContactForm","AddContactDialog","EditContactDialog","AddContactButton","ContactDatagrid","PublishDraftGameAction","hideLabel","useFieldStyles","useDraftGameApprovals","DraftGameActions","canPublish","isDraftValid","reasonTitle","reasonContainer","marginInline","ApproveIcon","withTheme","CheckCircle","RequestReasonField","RequestCreatedByField","createdByAuthor","TargetLabel","ApprovalRow","canRespond","approvePermissions","hasRespondPermission","responseType","ConfirmModel","willPublish","willCancel","setShouldRefresh","handleRespond","isCancelled","DraftGameApprovalDialog","setApproval","shouldRefresh","DraftGameApprovalAction","TimezoneInput","UpdateGameAlert","DraftRequestFields","DraftFormFields","disableTimeFields","FF_CROSS_SCHEDULING","InnerDraftGameForm","requestChanges","duplicateGame","useScheduleSettingsWithStore","schedulesRef","hasDateChangeAccess","initialDate","DraftGameForm","EventChangesDialog","AddDraftGameDialog","DuplicateGameDialog","EditDraftGameDialog","hasApprovals","approvalId","AddDraftGameAction","muiCardHeader","SetDateButton","onEscapeKeyDown","onBackdropClick","updateGames","showSwap","selectedGames","showClearDate","showMarkActive","showMarkConflict","FormWithRedirect","dateSelected","updatedGames","gameSelected","selectedId","changeDate","game1","game2","updatedGame","renumberGames","numberingPattern","GAME_NUMBER_REGEX","padLength","useDraftGamesController","existingGames","resetNumbering","setConflictsOnly","permittedHomeTeamIds","setPermittedHomeTeamIds","permittedOfficeIds","getMany","gamesPerRound","isConflicted","GameListContext","CalendarListContext","baseListContext","calendarContext","showAddGame","hideNumber","hideAvailabilities","isGeneratedDraft","startOffset","gameNumbers","maxNumber","lastNumber","getNextNumber","Switch","PastGamesAlert","GameToolbar","GameDialog","getAllGames","hasRounds","getByes","draftHasRounds","rotations","rounds","isBetween","bye","allGames","byesCount","showDay","GET_MANY","teamOfficeMatchups","byeLabel","minRound","GameTitle","draftLabel","timeOptions","previousGame","validateGameNumber","gameNumberError","getGameNumberValidationError","hideSchedule","skipStatusValidation","teamProps","forceSelect","resetDate","Draggable","draggable","unselectable","dataTransfer","onDragEnd","useDraggableListStyles","DivComponent","hideTime","draftText","brk","totalPlay","draftSecondary","DraftSuggestion","HOME_SLOTS","WEEKDAYS","DATES","preloadTeams","existingTeams","existingPreviousDraftTeams","useStore","setAlert","existingTeamsRef","existingPreviousDraftTeamsRef","scheduleRef","startRound","showCrossGroup","showLimitByes","FF_DRAFT_LIMIT_BYES","hasOption","earliestDate","brkStart","brkEnd","brkRange","prevBrkStart","prevBrkEnd","prevBrkRange","confirmPrevious","confirmCrossGroup","confirmTeamListOverwrite","disableBack","previousDraft","previous","newTeams","currentTeams","previousDraftHelperText","startNumberHelperText","previousDraftStartNumber","endNumber","weekdaysHelperText","startDateHelperText","draftStart","previousDraftStart","previousStartDate","endDay","date1","date2","rangeTotalWeeks","DraftInput","FF_DRAFT_DEFAULT_ROUNDS","FF_DRAFT_DEFAULT_SLOTS","AlertDialog","modalOpen","setModalOpen","emptyTeamSlotIndex","shuffleTeams","ScheduleView","HeaderTable","DayCell","HourCell","HourInfoCell","TimezoneCell","HourInfo","primaryTimezone","timezoneA","timezoneB","now","offsetA","offsetB","offsetFromPrimaryTimezone","utcOffset","column","ScheduleTable","ColumnHeaders","bodyRef","cellRef","timeColumnRef","timeColumnSize","isMeasured","totalHours","getAvailabilityBg","AVAILABILITY_STATUS","mixed","getAvailabilityColor","eventRow","iconColumn","gameLabel","dayNumber","aspectRatio","additional","tournamentContainer","tournamentIcon","availabilityDiv","availabilityStatus","awayAvailabilityDiv","awayAvailabilities","availabilityIcon","availableSlots","availabilityLabel","getAvailabilityStatus","UnavailableIcon","AvailableIcon","getAvailabilityIcon","TruncatedEventList","showTeamName","useShowTeamName","visibleEvents","useShowSlots","homeTeamTournaments","awayTeamTournaments","bothTeamTournaments","awayTournament","isWithinTournamentPeriod","teamTournament","tournamentStartDate","bothTeamTournamentsPerDay","homeTeamTournamentsPerDay","awayTeamTournamentsPerDay","listGames","availabilityGames","dayGames","thisMonth","dayAvailabilities","awayAvailableSlots","canShowAwaySlots","handleDayClick","datesPerWeek","monthHeader","monthHeaderSize","TheadCell","TopLeftCell","HomeIcon","SeasonView","useSeasonStyles","TeamNameColor","buttonContainer","useCellStyles","borderTop","separator","teamEventCell","dateField","showMoreButton","useScheduledGamesStyles","scheduledGames","rowGap","flexCenter","colorWarning","LoadMoreButton","dateFilterEndDate","newEnd","KeyboardArrowDown","EventCard","TeamEventCell","teamOfficeIds","teamTournaments","scheduleteam","teamTournamentsPerDay","canShowAvailability","homeSlots","DayRow","TotalScheduledGames","homeGames","awayGames","scheduledHomeGames","scheduledAwayGames","homeTooltip","totalCount","awayTooltip","isIncompleteHome","isIncompleteAway","TeamHeaderCell","showOfficeName","useShowOfficeName","hideCell","SeasonTableBody","prevWeek","OffsetNavigation","ChevronLeft","ChevronRight","SeasonTable","tableRef","rowRefs","querySelectorAll","teamHeader","teamHeaderSize","TODAY","getRangeStart","getRangeEnd","DateNavigation","todaysRangeStart","todaysRangeEnd","abs","todayDisabled","CalendarNavigation","dateStr","InputHelperText","useStyle","dateInputContainer","weekdayChips","useScheduledGamesStyle","progress","body2","progressCompleted","progressNotCompleted","Header","totalScheduledGames","totalMissingGames","percentCompleted","completedTooltip","notCompletedTooltip","completedStyles","notCompletedStyles","percent","WeekdaySelect","handleToggle","currentIndex","newWeekdays","charAt","DateInputs","pendingDates","setPendingDates","newDate","CalendarHeader","sx","DayGrid","MonthGrid","SeasonGrid","useShowTeamEvents","showAvailabilities","useShowAvailabilities","gameResource","tempEvents","availabilityEvents","crossTooltip","fontVariant","Details","Teams","Versus","TruncatedTypography","SeperatorDot","Time","Shared","Round","useGroupRounds","useIconStyles","TootipGameDetails","UpdateGameIcon","CrossSchedulingTooltip","CrossSchedulingDetails","PoolsField","homeTeamPool","awayTeamPool","EventNameField","EventCommentsField","EventTeamsField","useScheduleTeamsWithPools","useDescriptionStyles","padHeader","DescriptionField","showTime","showGameInfo","isDraftGame","typeToDisplay","numberToDisplay","LocationField","StatusesField","EventDatagridRow","showFlags","useShowFlags","EventDatagridBody","EventDatagrid","hideAssignments","EventGrid","OfficialsContext","OfficialsContextProvider","setOfficials","cacheKey","fetchOfficials","abortControllerSignal","fontFamily","buttonHover","OfficialsDropdown","officialList","VirtualizedListboxComponent","other","itemData","ITEM_SIZE","itemSize","itemCount","outerElementType","ListboxComponent","toggleNameView","onOfficialSelection","mainAssignOfficeId","contextValues","scopedOfficials","filterOfficialsByPositionType","useOfficialsContext","officialsError","autocompleteOpen","setAutocompleteOpen","handleInputChange","matchingOfficial","PaperComponent","TextField","ConfirmRemoveDialog","markAsNoShow","setMarkAsNoShow","showNoShow","OFFICIAL_STATUS_NO_SHOW","prevState","ClearAssignmentButton","onClear","confirmModalOpen","setConfirmModalOpen","removeAssignmentApi","OfficialName","EventAssignment","richTranslate","showInput","setShowInput","isAssigned","isDeclined","OFFICIAL_STATUS_DECLINED","isSelf","delegatedOffice","isDelegated","delegatedPayOffice","selectedAssignment","selectedOfficial","AssignmentStatus","showUnassigned","GroupAddOutlined","EventAssignmentList","assignSettingStatus","displayedAssignments","assignmentData","setAssignmentData","prevAssignmentData","handleOfficialSelection","OFFICIAL_STATUS_CONFIRMED","OFFICIAL_STATUS_ASSIGNED","handleClear","clearedAssignment","prevAssignment","OFFICIAL_STATUS_UNASSIGNED","displayedAssignment","onAssign","selectedTitle","useFlagStyles","draggingGame","ScheduleButton","datePickerOpen","setDatePickerOpen","handleDateChange","DatePicker","AssignmentsRow","FlagsRow","baseClasses","showChecked","CheckIcon","Divider","DraggableEventRow","groupByArena","DragComponent","EventRow","SelectAllCheckbox","disableCheckboxes","darken","heading","EventGroup","showHeading","useGroupingStyles","useGroupDates","useGroupArenas","listIds","listData","groupByRound","TBD","groupedEvents","groupKey","groupKeys","prevGroupValues","groupValues","typeIndex","groupValue","topGroup","topGroups","useEventReferenceController","groupArena","serverFilters","setServerFilters","initialFilter","referenceId","enableGames","enableDraftGames","enablePractices","enableActivities","enableSlots","enableAvailabilities","useGetManyReference","gamesIds","gamesStatus","draftGamesStatus","practicesIds","practicesStatus","activitiesIds","activitiesStatus","slotsIds","slotsStatus","availabilitiesIds","availabilitiesStatus","setIds","gamesLoaded","gamesLoading","gamesError","draftGamesLoaded","draftGamesLoading","draftGamesError","practicesLoaded","practicesLoading","practicesError","activitiesLoaded","activitiesLoading","activitiesError","slotsLoaded","slotsLoading","slotsError","availabilitiesLoaded","availabilitiesLoading","availabilitiesError","controllerProps","rightIcon","BaseEventView","EventList","EventGroupedGrid","RenumberGamesForm","validateStartNumber","sortedGames","renumberedGames","draftGamesExporter","DAY","WEEK","MONTH","SEASON","ALL_DRAFT_GAMES","DRAFT_GAMES_NO_DATES","DRAFT_GAMES_NO_TIMES","ALL_PUBLISHED_GAMES","ALL_GAMES","controlLabel","EventViewSettingsContext","useEventViewSettings","ShowGameInfoInput","setGameInfo","ShowFlagsInput","ReverseHomeAway","setReverseHomeAway","ShowAssignmentsInput","setAssignments","GroupDatesInput","setGroupDates","GroupRoundsInput","setGroupRounds","GroupArenasInput","setGroupArenas","ShowTeamEvents","setShowTeamEvents","ShowSlots","setShowSlots","ShowAwaySlots","ShowOfficeNames","setShowOfficeNames","ShowCondensedView","setShowCondensedView","ShowTeamNames","setShowTeamNames","ShowAvailabilties","setShowAvailabilities","CalendarToggle","shown","ViewList","ShowCalendarInput","viewIcons","ViewDay","ViewWeek","CalendarToday","RadioButtonChecked","RadioButtonUnchecked","SurfaceSize","setSizes","prevSizes","newSizes","SurfaceSizes","ml","AllSizes","RenumberGames","RenumberDialog","EventViewSettingsForm","canViewAssignments","canViewFlags","CalendarSettingsMenu","showDivider","MoreVert","ListSettingsMenu","showAssignmentsInput","EventViewSettingsMenu","canListTeamEvents","canListAvailabilties","showCalendarInput","useSeeds","quickAssignToolbar","AssignmentDialogHeader","QuickAssignmentBody","useAssignmentsContext","selectedOfficialWithFlags","officialAssignment","participantName","quickAssign","QuickAssignmentDialog","listen","LineupCardBody","DialogHeader","showCompleted","CertificationModal","customHeader","hideCancel","useGameContext","AssignmentsDialog","LineupDialog","getGameConflict","useBadgeStyles","badge","colorSuccess","IconBadge","useStatusStyles","openDialog","isConflict","selfIcon","assignmentIcon","allAssigned","allConfirmed","isUnassigned","TeamSelectDialog","LineupStatus","upcoming","ReportButton","Forfeit","tooltipTitle","Score","scores","CertifyStatus","isCertify","CertifyField","ReportField","GameStatusField","GameAvailabilityContext","useGameAvailabilityContext","CONFLICT_TYPES","isTournamentConflict","slotOverlaps","gameAvailabilities","timeAvailabilities","GameAvailabilityInfo","hasTimeslotError","hasErrors","setAvailabilities","homeSlotsOnly","isSameTime","useAvailabilityContext","conflicted_info","onlyAvailable","onlySlots","teamConflicts","conflictTypes","surfaceConflicts","conflictTotal","isTournamentSchedule","tournamentConflicts","warningConflict","conflictAccordionStyle","AvailabilityList","ConflictList","ConstraintList","unavailability","AvailabilityItem","useItemStyles","SlotItem","ConflictItem","constraint","ConstraintItem","selectedBadge","conflictItem","slotItem","styleIcon","WarningIcon","ReportProblemOutlined","PeopleOutline","ArenaIcon","PlaceOutlined","ConstraintIcon","SlotIcon","SelectedIcon","isRestricted","restriction","conflictResource","PopoverComponent","GameDateField","crossSchedulingCard","crossSchedulingCardContent","enforcementLevels","CrossSchedulingInput","showCrossSchedulingInput","setShowCrossSchedulingInput","ExpandLessIcon","ExpandMoreIcon","GameNumberInput","useSequences","sequences","refetchSequences","sequenceNumber","initialNumber","setSequenceNumber","shouldRefetch","showError","InnerGameForm","settingsRef","getScheduleSettings","selectSlotRef","overlappingSlot","isOverlap","GameSuggestions","secondaryComponent","AddGameDialog","EditGameDialog","AddGameButton","AddGameAction","GameStatusIcon","homeForfeit","awayForfeit","ForfeitCheckBox","GameForfeitForm","canDoubleForfeit","canEditAdminNotes","FlagOutlined","forfeitId","arrow","awaySeed","homeSeed","SeedsForm","EditSeedsDialog","EditSeedsButton","EmojiEventsOutlined","GameEditButton","isSeeded","canEditGame","canEditSeeds","canForfeitGame","canRequestChanges","canDraftUpdate","canDuplicateGame","homeTeamRow","awayTeamRow","GameStatusModel","GameForfeitModal","DraftUpdateModal","DuplicateGameModal","assignmentId","existingId","replacedIsNoShow","replacedParticipantId","ReassignDialog","setChecked","isAdhoc","useAssignmentContext","oldOfficial","newOfficial","name1","name2","ConflictDialog","isExpired","setDialog","setAssigned","inFlight","setInFlight","setOpenAssignmentIndexes","filterFlags","flagged","isIneligible","handleAssign","handleDialog","setRemoved","setConfirm","choiceSubtitle","bottomText","updatePosition","SwitchDialog","subLabel","isCurrentPosition","isSameAssignOffice","withAssignment","setRequested","hideSurface","hideGameTime","GameDetailsField","getIds","consecutives","hasOverlaps","hasConsecutives","setAccepted","REPEATING_REGEX","setOption","setReason","acceptingOther","reasonRequired","reasonLength","remaining","setDeclined","declineAllowed","classProps","selectOfficial","closePanel","canRequest","isAssignedSelf","isOfficialSelf","isCompleted","assignedOther","isUnconfirmed","isRequested","showRequest","showAccept","showDecline","showAssign","showDiscard","showRemove","SwapButton","DeclineButton","AcceptButton","RequestButton","AssignButton","AssignmentContext","AssignmentProvider","openAssignmentIndexes","officialEnabled","assignmentIndex","getAssignmentIndex","allOfficials","useAllOfficials","officialsLoading","useOfficialLists","listsLoading","useOfficialAttributeTypes","attributeTypesLoading","currentOfficial","officialLoading","isPanelLoading","isPanelOpen","setPanelOpen","setOfficial","indexes","foundOfficial","isMenuOpen","setMenuOpen","isFilterMenuOpen","setFilterMenuOpen","ignoreArena","permittedAssignOfficeIds","permittedOfficialOfficeIds","permittedAssignScheduleIds","isPermittedAssignOffice","isPermittedOfficialOffice","isPermittedAssignSchedule","mode","isDelegatedPay","isPastGame","isAssignedGame","isSupervisor","hideSupervisor","showPanel","toggleMenu","closeMenu","toggleFilter","menuOpen","toggleFilterMenu","togglePanel","DelegatedIcon","DelegatedStatus","assigningOffice","payOffice","AssignmentStatusIcon","showDelegated","AssignmentPosition","delegateAssigning","FeesInput","DelegateFormBody","delegatedPayOfficeId","useOfficeWithStore","DelegateForm","showDelegateDialog","setShowDelegateDialog","UndoDialog","handleUndo","Note","AssignerIcon","ConsecutiveIcon","CompareArrows","AssignerField","Notes","GameDetailsList","filterAffiliate","filterRostered","consecutive","OfficialInfo","isKeeperAssignment","isKeeper","hasScorekeeperType","officialType","hasFlag","roleMessage","levels","listLevel","listGrade","ReadyAlert","AssigningOfficeField","cachedOffice","SettingsAlert","DelegateButton","AssignerAlert","assigningOfficeId","StatusAlert","isRemoved","isConfirmed","otherPosition","getMeta","UndoButton","ago","ExpiredAlert","EligibilityAlert","isLevel","isGrade","isCategory","reachedDailyLimit","reasons","ConflictAlert","isRoster","ScheduleAlert","isPlaying","isPlayingRostered","hasRosteredConflict","hasAffiliateConflict","isError","TravelAlert","isTravel","isArena","isWarning","AssignedSameDayAlert","isAssignedSameDay","AvailabilityAlert","isUnknown","isOffice","AccountAlert","showInvite","SuspendedAlert","durationMessage","AttributesTable","setVisible","Collapse","ExpandLess","useAssignmentStyles","cell","timeCell","fixedCell","small","timeRange","getAvailabilityMessage","borderLeftWidth","borderLeftStyle","borderLeftColor","AvailabilitySlot","AlertCell","LoadingAlert","useDateStyles","footnote","DateRow","onPrev","onInit","diffText","FooterRow","timezoneAbbr","Spacer","panelRef","refs","setDates","offsetTop","behaviour","handleInit","handlePrev","titleRow","assignmentGame","panelGame","GameFlag","TeamFlag","countAssignments","yesterday","lastWeek","lastMonth","lastDay","HistoryRow","DateRangeTitle","useHistoryStyles","tableTitle","tableRows","AssignmentHistory","setHistory","prevGame","thisGame","UnstyledAssigningAlert","limited","setLimited","Announcement","isConsecutive","isAtArena","DirectionsRun","isLocal","HomeOutlined","PlaylistAddCheck","hasRequestedConflict","EmojiObjectsOutlined","TabPanel","currentTab","setCurrentTab","Suggestions","HistoryTab","useOfficialStyles","OfficialIcon","hasAnyFlag","isSchedule","isAccount","OfficialListItem","primaryTypographyProps","OfficialRow","scrollToItem","useSelectStyles","breakSpace","filterLabel","ListSelect","labelId","disablePortal","AttributeValueSelect","FilterLabel","toolTipText","OfficialFilters","filteredOfficials","officialFlags","isUnregistered","isNew","FormGroup","filtersPanel","onSearch","useSearch","hasAttributeValuesFilter","hasMatchingAttributeValues","MenuOpen","isFiltered","invisible","toggleCell","feeCell","statusCell","fontColor","panelCell","AdhocOfficial","hideOfficial","hideContacts","useOfficialContacts","mobile","tooltipTitleMobile","AssignmentSummaryRow","showFeeAndContacts","KeyboardArrowUp","assignmentStatus","AssignmentPanelRow","OfficialDetails","AssignToolbar","AssignmentRow","byPosition","unavailablePositions","byFilters","ineligibleFlags","unavailableFlags","unregisteredFlags","metaFlags","officialAttributeValues","officialAttributeValue","matching","AssignmentsContext","updateAssignments","updateOfficials","updateOfficial","AssignmentsProvider","setAllOfficials","setCurrentOfficial","useGame","gameLoading","gameError","useSettings","settingsLoading","settingsError","refetchSettings","branchSettingsLoading","branchSettingsError","refetchBranchSettings","useAssignments","fetchedAssignments","assignmentsLoading","assignmentsError","refetchAssignments","settingsFailure","branchSettingsFailure","effectiveOfficialLists","officialLists","fromEntries","officialAttributeTypes","fetchedOfficials","refetchOfficials","useCurrentOfficial","fetchedCurrentOfficial","currentOfficialLoading","currentOfficialLoaded","currentOfficialError","refetchCurrentOfficial","canManage","permittedScheduleIds","assignmentOfficeId","newAssignments","updatedAssignment","retryAction","SystemInput","hasPosition","systems","AssignerDeterminationAlert","assignRule","getRequirement","T","requirement","getSettingsSummary","names","useSettingsStyles","editProps","EditController","controller","GameMessages","useMessagesStyles","InfoChip","DateChip","alternateFormat","setAlternateFormat","timeFormat","SurfaceChip","showAddress","setShowAddress","surfaceData","ScheduleChip","showName","setShowName","scheduleData","TeamsChip","ExpandChip","expanded","setExpand","ResetAssignerButton","NotConfiguredAlert","assignSettingReason","canViewAssignSystems","canViewAssignRules","gameAlertKey","officeName","CompletedAlert","AssignmentVisibility","AssignmentsTable","GameChips","AssignSettings","toArray","hasValues","arr","filterAttributes","filterNone","FilteredChoiceInput","choiceFilter","filteredChoices","selectArrayInput","appSeason","shouldValidate","Reference","OfficeGroupInput","ScheduleGroupInput","getGroupName","filterList","ListSuggestion","keepDirtyOnReinitialize","officeSettingsInStore","OfficeSuggestion","officeInStore","InviteForm","ParticipantLinkField","openInNewTab","linkTo","ParticipantSuggestion","ChoiceInput","dedupedChoices","usePracticeAvailabilityContext","practiceAvailabilities","officeSettingsLoading","scheduleSettingsInStore","ScheduleSuggestion","BracketIcon","DeviceHub","FormatInput","BracketInput","PreviewCard","BracketForm","models","formats","AddBracketButton","categoryInput","addGroupInput","filterGroupInput","getSchedule","getOfficeTeams","getTeamScheduleStats","getManyReference","TeamCategoryField","showRank","TeamList","filterGroupId","filterPoolId","setTeams","teamList","teamschedulestats","selectedTeams","fetchTeamList","OfficeOrScheduleInput","TeamImportForm","Preview","useGeneratorContext","generateLoaded","setGenerateLoaded","generateLoading","setGenerateLoading","generateError","setGenerateError","matrixTable","crossScheduleTeams","weekdaysType","crossPool","parseMatrix","Scheduling","weekdaysTypeHelperText","METHODS","GAMES_PER_TEAM","STEPS","WEEKDAYS_TYPES","CONSECUTIVE","poolInput","CrossPoolBooleanInput","schedulePools","isTotalRounds","TOTAL_ROUNDS","isSingleRotation","SINGLE_ROTATION","enableInput","lastPublishedDraftRound","setPoolIds","setShowMatrix","startRoundHelperText","MATRIX","showStartRound","AddCrossTeamForm","AddCrossTeamDialog","crossTeamId","matrixTeams","stickyBothSidesStyle","borderCollapse","firstCellWidth","headerCells","footerCells","firstColumns","teamColumn","compactMode","overflowColumn","teamRow","logoSpacing","PoolChip","poolHighlight","setPoolHighlight","TeamLogo","logoUrl","CrossTeamTooltip","isCrossTeam","MergeType","useToggle","MatrixOptions","showOrganisation","toggleShowOrganisation","showShortNames","toggleShowShortNames","toggleCompactMode","setCrossTeamDialogOpen","uniquePools","handleResetMatrix","handleRecalculateMatrix","Refresh","HomeAwayHeaderCell","firstThRef","inverseMatrix","globalClasses","useTotalHeaderCellStyles","TotalHeaderCell","useTeamHeaderCellStyles","isLastPoolTeam","isLastTeam","lastTeamsByPool","lastTeam","showShortName","useRowTeamCellStyles","isFirstTeam","RowTeamCell","useRowTotalCellStyles","RowTotalCell","cellDiff","rowSum","ValidatedTotalCell","skipValidation","useMatrixCellStyles","isLastPoolTeamX","isLastTeamX","isLastPoolTeamY","isFirstTeamY","disabledCell","disabledBackground","MatrixCell","columnIndex","handleCellChange","xTeamId","yTeamId","highlightBorders","linearIndex","totalCells","shift","nextIndex","nextInput","useTotalLabelFooterCellStyles","TotalLabelFooterCell","useTotalFooterCellStyles","TotalFooterCell","totalDiff","sum","useTeamTotalFooterCellStyles","TeamTotalFooterCell","columnTotals","rowTotals","columnSum","getValidationDiff","useValidationStyles","getValidationStyles","tableCellClasses","tableCellProps","Matrix","generateMatrixLoaded","setGenerateMatrixLoaded","generateMatrixLoading","setGenerateMatrixLoading","isCrossTeamDialogOpen","recalculateTrigger","setRecalculateTrigger","allTeams","crossScheduleTeam","generationOptions","unparseMatrix","uniqBy","newMatrixTable","clearMatrix","crossTeam","DOUBLE_ROTATION","ROTATING","MATCHUPS","PREVIEW","isEven","n","formOptions","enableReinitialize","forceUnregisterOnUnmount","GeneratorAlert","GeneratorToolbar","GeneratorStepper","showMatrix","displayStep","GeneratorStep","GeneratorForm","dialogContentRef","initialFormValues","stepRef","showMatrixRef","MANUAL","GeneratorContext","GeneratorContextProvider","groupingTypeLoading","groupingTypeLoaded","scheduleTeamsUnfiltered","scheduleTeamsLoaded","draftsLoading","draftsLoaded","hasPool","groupedByPool","poolTeams","sortedTeams","hasOrderGap","lastPublishedDraft","scheduleInStore","isPrefixValid","InnerForm","ScheduleSequenceForm","prevalidate","prevalidateData","isSequenceUsed","AddScheduleSequenceDialog","EditScheduleSequenceDialog","sequenceId","AddScheduleSequenceButton","AddScheduleSequenceAction","ScheduleSequenceDatagrid","effect","setEventMeta","createStore","enhancer","applyMiddleware","addMeta","validateSync","stripUnknown","preloadedState","reducers","createScoresheet","StoreContext","MetaContext","ScoresheetProvider","viewVersion","gameRefetch","scoresheetLoading","scoresheetError","scoresheetRefetch","metaLoading","metaError","metaRefetch","parseLegacyRulebookMeta","useMeta","useScoresheet","createSelectorHook","useScoresheetDispatch","createDispatchHook","useScoresheetStore","createStoreHook","UndoApprovalButton","undoApprovalScoresheet","showUndoApproval","canUndoApproval","hasFullScoresheets","showUndoApprovalButton","viewHref","AlertComponent","dispatches","certifyScoresheet","allSettled","isSuccessful","CustomHeader","checkable","flagIconContainer","gridColumn","gridRow","colorError","splitedFlagIcon","clipPath","ConditionnalyRenderTooltip","ConditionnalyRenderButton","colorClassName","FLAG_COLORS","listItem","listItemText","getFlagName","FlagDetails","flagData","limitListSize","getPenaltyDetails","hideStartTime","hideServedBy","throwsInningsStatus","faultyPlayerLabel","hasInningsRest","hasThrowsRest","consecutiveDays","dailyInningsRemaining","weeklyInningsRemaining","hiddenCount","FlagItemList","memberValidations","useMemberValidationContext","getFlagData","canManageScoresheet","scoresheetFlag","getCertificationFlag","removeCertificationFlag","addCertificationFlag","FlagList","isAlert","showAll","scoresheetFlags","getCertificationFlags","getGeneralFlagNames","homeFlags","getTeamFlagNames","awayFlags","flagName","disableMinWidth","rightBorder","borderRightColor","leftBorder","gameTimeMask","GameTimeInput","HockeyGameTimeInput","SoccerGameTimeInput","BaseballGameTimeInput","GameClockTimeInput","periodLabel","periodHelperText","periodSettings","getPeriods","periodSetting","parsePeriodInt","notchedOutline","stringifyGameTime","guide","formValue","stringifyTime","isAssignedOfficial","showAddIncidentReportButton","renderCreatedAt","CreatedAtField","PenaltyField","getPenalties","InjuryField","incident","renderInjury","IncidentReportGrid","MemberInput","getMemberDescription","IncidentReportForm","getSummary","homeExtra","getLineupExtras","showSuspended","awayExtra","displayGameTime","allowReuse","AddIncidentReportDialog","EditIncidentReportDialog","AddIncidentReportButton","IncidentReportDatagrid","useIncidentReports","GameDocumentForm","AddGameDocumentDialog","AddGameDocumentButton","GameDocumentGrid","getForfeit","isForfeited","Scoreboard","policies","getScore","dispatchScore","saveScore","ScoreEditForm","ScoreEditModal","PeriodDivider","periodLength","SummaryList","lastEvent","addPeriodDivider","SummaryItem","IncidentAlert","SummaryAlerts","incidentRequiredPenalties","incidents","incidentsLoading","hasPenaltiesWithoutReport","showIncidentAlert","NotesAlert","selector","getNotes","getAdminNotes","noteTitle","QuestionAnswerOutlined","dispatchNotes","scoresheetNotes","updateNotes","NotesForm","NotesModal","hasNotes","SUMMARY_FLAGS","GENERAL_FLAGS","summaryFlags","PeriodsButton","PeriodsModal","NotesButton","AddSummaryItemsButton","SummaryBulkAddModal","EditScoreButton","SummaryCard","isGameCompleted","gameMembers","getGameMembers","canEditSummaryList","showPeriodsButton","showNotesButton","showAddGoalsButton","showAddPenaltiesButton","showEditScoreButton","showAdminAlert","EVENT_TYPE_GOAL","EVENT_TYPE_PENALTY","Period","PeriodFormInput","validateShots","PeriodInput","GameShotsForm","GameShotsModal","getGoaliesShots","filterGoalies","updateGoalieShots","GoalieShotsModal","GoalieShots","EditShotsButton","shotsOpen","setShotsOpen","GoalieShotsCard","Throw","Inning","ThrowFormInput","InningFormInput","validateThrowsInnings","ThrowInput","InningInput","ThrowsInningsForm","getTotals","GameThrowsInningsModal","lineupPlayers","getLineupPlayers","affiliatesLast","hideUnsaved","getThrowsInnings","playerThrowsInnings","getPlayerThrowsInnings","updateThrowsInnings","ThrowsInningsModal","playerLineup","EditThrowsInningsButton","throwsInningsOpen","setThrowsInningsOpen","ThrowsInningsCard","canEditThrowsInnings","initialStatus","showDialog","undoCertifyScoresheet","CertifiedAlert","CertifyButton","CertifyAlert","showButton","CertificationAlerts","getDefaultEndTime","getDefaultGameEndTime","RASignatureInput","getPositionText","SignatoryInput","Person","noShowOfficialIds","assignedOfficialIds","OfficialAttendanceList","EmailsInput","ApprovalForm","noShowOfficials","assignedOfficialsNoSupervisor","noShowAndAssignedOfficials","sortOfficials","showOfficialAttendance","showSignature","FF_APPROVAL_SIGNATURE","ApprovalDialog","getOfficials","assignedOnly","noShowOnly","declinedOnly","automaticFlags","generateGameFlags","endGame","removeOfficial","saveCertificationFlags","approveScoresheet","unreviewed","validateSignature","ApprovalButton","isMissingIncidents","ScorekeepingButton","ApproveAlert","showScorekeeping","StartForm","scoresheetPeriods","StartDialog","hasSettingsChanged","startGame","StartButton","StartAlert","LineupAlert","GameActionAlerts","isLineupApproved","isGameScheduled","isGameActive","isIncidentsRequired","isLineupApprovedRequired","FF_REQUIRE_LINEUPS","isGameStartRequired","FF_REQUIRE_GAME_START","isLineupReady","showLineupAlert","showStartGameAlert","showApproveAlert","showCompleteAlert","showCertification","canStart","isStaffMember","isCoach","MANAGER","ScoresheetLayout","isHomeTeamOfficeScorekeeper","isHomeStaff","isAwayStaff","isTeamScorekeeper","FF_REQUIRE_TEAMS","showSummaryCard","canViewGameDocuments","showIncidentsCard","showHomeLineup","showAwayLineup","showGoalieShots","STARTED","ENDED","APPROVED","getGameStatus","showHomeThrowsInnings","showAwayThrowsInnings","GameDocumentsCard","LineupCard","LineupCheckbox","minValid","maxValid","selectableMembers","memberValidation","isPlayerUnvalidatedMember","isStaffUnvalidatedMember","membersToAdd","getInitialSuspension","addMembersToLineup","clearLineup","LineupGroup","disableCheckbox","setLimit","MemberItem","LineupList","getLineup","counts","getLineupCounts","wait","useFilter","setShowRegistrations","getMembers","showNoMatch","isSkater","totalSkater","isGoalie","isStaff","totalStaff","LineupSignatoryField","homeLineup","awayLineup","homeRoster","awayRoster","homeStaff","awayStaff","includeDetails","allStaffMembers","getLineupMembers","signatoryPositions","isStaffPosition","SignatoryField","useDialogStyles","paperFullScreen","SignatureDialog","currentUser","currentUserId","getLineupSignatory","SignLineup","isWithinLimits","hasDuplicateBattingOrder","battings","val","hasUnselectedMembersWithRelations","gameSuspensions","hasEvents","hasNewSuspension","isInLineup","lineupMember","SaveLineup","scoresheetStore","totalPlayers","isLineupValid","invalidBattingOrder","invalidLineupSelected","hasUnselectedSuspendedPlayers","invalidMemberUnselected","refreshed","setRefreshed","setChanges","unblock","saveLineup","approveLineup","liText","LineupRequirements","isHard","totalPlayer","jerseyNumbers","toggleAction","LineupSignature","getLineupApproval","setExpanded","ResponsiveButton","ParticipantExtraInput","teamOfficeId","isSameOffice","ExtraForm","disabledSameOffice","ExtraDialog","AddExtraButton","hasFullAccess","extrasEnabled","participantsRef","AddIcon","addLineupExtra","media","suspensionList","PhotoCard","useMemberItem","flagNames","CardMedia","noProfileIcon","MemberFlags","PhotosDialog","setIndex","MemberItemContext","PhotosButton","Photo","PrintLineupButton","printMessage","isLineup","FF_PRINT_LINEUP","LINEUP_FLAGS","TEAM_FLAGS","lineupFlags","scoreSheet","ValidatingMembersAlert","LineupNotice","pregame","isEarly","earliestLineupAccessTime","hasTeamAccess","FF_RESTRICT_LINEUP_ENTRY","showPhotos","FF_PHOTOS","hasMembers","rosterLink","AdminSuspension","validationSuspension","GameOfficeField","GameSuspensions","getInfractionType","getInfractionRule","FF_HIDE_INFRACTION_NAME","SuspensionInfo","SuspensionTitle","scoresheetSuspension","adminSuspension","purgeId","suspendedFlags","detailedFlags","dialogTitle","modalFlagIcon","flagCount","placeContent","FlagItem","memberThrowsInnings","initialSuspention","faultyReason","getFaultyPlayerReason","getFlagColor","FlagCount","MemberFlagsList","MemberFlagsButton","flagColor","flagTooltip","flagLabel","POSITIONS","DEFAULT_SUSPENSION_STATE","SUSPENSION_TYPES","parseNumber","EditMemberPopover","isExtra","initialGameSuspension","setBattingOrder","setNumber","setPositions","setStarter","memberStatus","setMemberStatus","setSuspension","initialSuspensionState","suspensionType","setSuspensionType","positionsOpen","setPositionsOpen","playerSelected","goalieSelected","validNumber","validBattingOrder","validPositions","validSuspension","isValidSuspension","isAutomaticSuspension","canEditPurge","FormLabel","handlePositions","selectedGameSuspension","isSuspensionPurgeable","generateId","servedGames","EditMemberButton","setTarget","removeLineupExtra","editLineupMember","twoActions","listItemActions","flaggedBgWarning","flaggedBgError","getMemberStatus","hideSuspension","ThrowsInningsStatus","MemberListItem","hasSuspension","nonSelectable","throwsInningsCount","throwsCount","throwsInning","weekly","inningsCount","getThrowsInningsCount","missingNumber","isClickable","showEditButton","showFlag","nonSelectableFlags","isExtraMember","extras","invalidMemberTypes","getFlagMeta","isUnvalidatedMember","isNotServing","isServing","isFaulty","isTransferred","isSecondaryTeam","flagColors","MemberItemContextProvider","rosterMember","removeMemberFromLineup","initialLineup","memberToAdd","unsaved","addMemberToLineup","isSuspended","MemberValidationContext","validateMembers","MemberValidationProvider","setMemberValidations","rosterMembers","lineupMembers","missingMembers","HockeyPeriodSettings","PeriodsForm","updateSettings","LineupInput","excludeStaff","iterator","isNotEmpty","obj","InfractionChoiceInput","choiceId","getInfractionOptionLabel","getInfractionRuleLabel","displayOrder","AccumulationChoiceInput","accumulations","GoalTypeInput","GoalEventInput","scorerId","goalTypes","PenaltyEventInput","dirtyFields","isAccumulationPenalty","isSubsequentPenalty","teamPenalties","findAdditionalPenalties","getLinkedPenalties","linkedPenalty","FF_PENALTY_FILL_START","GameEventInput","GameEventsInput","SummaryForm","HOME","AWAY","numberOfFulfilled","scoresheetState","parsePenaltyEvent","startPenalty","parseGoalEvent","addGoal","teamType","GOAL_TYPE_MAP","validateGameTime","isTimeValid","validatePenalty","gameTimeErrors","startTimeErrors","isTimeBefore","validateStartTime","validateGoal","penaltyEvent","LegacyHockeyPenaltyManager","LegacySoccerPenaltyManager","LegacyPenaltyManager","setPenalty","PenaltyManager","getResultingPenalties","parseEventTimeToFormFormat","parseEventToFormFormat","originalOptionId","eventCopy","goalType","SummaryEditModal","linkedPenalties","subsequentPenalties","additionalPenalties","findChoice","editPenalty","newPenalties","newPenalty","deletePenalty","editGoal","center","extraDense","summaryItems","nowrap","bgWhite","flagIcon","accumulationIcon","ActionIcon","EVENT_TYPE_GOALIE","ActionChip","AccumulationIcon","accumulationName","ListItemSummaryDescription","getSummaryEventDetails","bench","put_in","getMemberLabel","DeleteItemButton","deleteGoal","additionalPenaltiesToDelete","EditItemButton","IncidentReportButton","getTeamType","incidentsEnabled","infractionType","getSeverity","requiresIncidentReport","hasIncidentReport","showEditItemButton","showDeleteItemButton","getPenaltyFlagName","flaggedBgClassName","GamePurgeGrid","PenaltyInput","suspensionsInStore","currentSuspension","isExist","GameTeamInput","SuspensionAdditionalTeamInput","suspensionTeamId","PositionGroupInput","selectedMember","getMember","disablePositionGroup","isPlayerPosition","RequiredGamesInput","isIndefiniteSuspension","ExpiryDateInput","AutomaticSuspensionAlert","InnerSuspensionForm","getMemberPositionGroup","SuspensionForm","expandedPanel","AutomaticSanctionSuspensionIcon","SanctionField","renderSuspensionDetails","expiryDate","textWrap","SuspensionDetailsField","SuspensionDialogDatagrid","SuspensionDatagrid","AddSuspensionDialog","EditSuspensionDialog","AddSuspensionButton","renderSeason","isSystemSurface","matchSurface","isUUID","SurfaceSuggestion","inputFilter","includeCountry","includeRegion","includeAddress","getSurfaceType","getSurfaceSize","Business","PinDropOutlined","ListIcon","InnerTeamField","isSpecial","FF_TEAM_SHORT_NAMES","TeamSuggestion","primaryComponent","teamIdOrTeamIds","scheduleSelect","crossScheduling","effectiveCrossScheduleId","effectiveCrossGroupId","includePostalCode","FF_OFFICIAL_HIDE_ASSIGNERS","benchStaff","special","momentRange","extendMoment","Moment","isStartSame","isEndSame","uniqWith","keyBy","orderBy","cloneDeep","ceil","startCase","k","sanitize","casing","trimmed","hasValue","isNumber","UUID_REGEX","parseDate","currentTimezone","newTimezone","displayTimeRange","findMatch","lowerFields","lowerOption","matchIndex","matchFields","matchers","mappings","hasInvalid","check","regex","getColumn","isDexterity","toDexterity","isHeight","toHeight","feet","inches","isDate","isPosition","getZipId","zip","getZip","random","byHCRId","parseInput","hasInvalidAttribute","LEADING_ZEROS","normalizeValue","hasLeadingZeros","PATCHED_GAME_NUMBER_REGEX","isLegacyGameNumbering","LEGACY_GAME_NUMBERING_SEASONS","isValidGameNumber","parseGameNumber","sequenceCurrent","checkingSequence","sequence1","sequence2","prefix1","suffix1","prefix2","suffix2","checkingStart","checkingCurrent","checkingGroupId","scheduleSequences","nextCurrent","leadingZerosLength","leadingZeros","newGameNumber","currentTotal","otherTotal","upperBound","lowerBound","idealValue","homeIndex","homeScheduleId","homeGroupId","GAME_RESCHEDULED","GAME_STARTED","GAME_ENDED","GAME_FORFEITED","LINEUP_UPDATED","LINEUP_APPROVED","LINEUP_EXTRA_ADDED","LINEUP_EXTRA_REMOVED","THROWS_INNINGS_UPDATED","OFFICIAL_DELEGATED","OFFICIAL_REQUESTED","OFFICIAL_ASSIGNED","OFFICIAL_ACCEPTED","OFFICIAL_DECLINED","OFFICIAL_ADDED","OFFICIAL_UPDATED","OFFICIAL_REMOVED","KEEPERS_UPDATED","GOAL_SCORED","GOAL_EDITED","GOAL_DELETED","PENALTY_STARTED","PENALTY_ENDED","PENALTY_EDITED","PENALTY_DELETED","GOALIE_CHANGED","GOALIE_CHANGE_EDITED","GOALIE_CHANGE_DELETED","GOALIE_SHOTS_UPDATED","SETTINGS_UPDATED","NOTES_UPDATED","CERTIFICATION_FLAGS_UPDATED","SCORE_UPDATED","SCORESHEET_APPROVED","SCORESHEET_DISAPPROVED","SCORESHEET_CERTIFIED","SCORESHEET_DECERTIFIED","SCORESHEET_RESET","commit","rollback","createEvent","ADD_MEMBER_TO_LINEUP","REMOVE_MEMBER_FROM_LINEUP","ADD_MEMBERS_TO_LINEUP","REMOVE_MEMBERS_FROM_LINEUP","CLEAR_LINEUP","RESTORE_LINEUP","EDIT_LINEUP_MEMBER","GOALIE","PLAYER_POSITIONS","HEAD_COACH","ASSISTANT_COACH","COACH_POSITIONS","SAFETY_PERSON","STAFF_POSITIONS","MEMBER_POSITIONS","REFEREE","LINESPERSON","LINESPERSON_TWO","LINESPERSON_THREE","SUPERVISOR","SCOREKEEPER","TIMEKEEPER","LINESMAN","OLD_OFFICIAL_POSITIONS","ALL_OFFICIAL_POSITIONS","OFFICIAL_STATUS_REQUESTED","OFFICIAL_STATUSES","PERIODS","SCHEDULED","CERTIFIED","LOW","MEDIUM","HIGH","SEVERE","INFRACTION_SEVERITY","LINEUP_MIN_LIMIT","LINEUP_MAX_LIMIT","NOT_ROSTERED","HIGH_SEVERITY_PENALTIES","DIRECT_RED_PENALTIES","INDIRECT_RED_PENALTIES","EXTRA","SERVING","NOT_SERVING","SECONDARY_TEAM","TRANSFERRED","UNVALIDATED_MEMBERS","FAULTY_PLAYERS","MISSING_SUSPENDED_MEMBER","FAULTY_PLAYER_REASONS","HAS_INNINGS_REST","HAS_THROWS_REST","CONSECUTIVE_DAYS","DAILY_INNINGS","WEEKLY_INNINGS","COACH_ENTERED_RESULT","UNFINISHED","NOTES","SUSPENSION","RED","ORANGE","RED_ORANGE","DEFAULT","MINOR","DOUBLE_MINOR","HEAD_CONTACT","GAME_EJECTION","YELLOW","YELLOW_RED","INITIAL_TIME","DEFAULT_SETTINGS","LEGACY_RULEBOOK_SEASONS","ADD_CERTIFICATION_FLAG","flagExists","REMOVE_CERTIFICATION_FLAG","isGameEndedOrCompleted","isFinite","isTimeAfter","compareTime","toGoalieChange","getStarters","gameStart","starter","starters","isTimeEqual","append","byTeamId","removeById","toGoal","initialKeepersState","hasThrowsInnings","selectStarter","override","nextStarter","isNotSuspended","currentStarter","appendMany","memberIds","removeByIds","prevScoresheet","convertOfficialPositions","isAssignmentOrRequest","isDelegatedAssignment","v5uuid","toPenalty","isEnded","original","purges","purge","byParticipantId","infractionIds","optionIds","accumulationIds","severities","hideEnded","hideNonTimed","calculateEndTime","isTimed","sortPenalties","getGoalieChanges","includeStarters","setupTotals","goalieShots","getShots","homeGoalies","getLineupGoalies","awayGoalies","isInvalid","setEventType","getGoals","goalieChanges","getSettings","getPeriod","isManager","isHeadCoach","isAssistantCoach","compareLineupMembers","lineupExtras","suspendedExtras","getGameLineupStaff","includeExtras","includeOtherTeamStaff","getLineupStaff","signers","headCoach","safety","totalStarterGoalie","isStarterGoalie","getGameTime","lastPeriod","sanitized","sanitizeTime","isRegulationPeriod","includeOvertime","isInRegulationGameTime","displayPeriod","displayInning","includePeriod","includeEqual","getLength","calculateGameTime","_periods","isRegulation","reverse","startPeriodIndex","newTime","remainingPeriodLength","periodTime","remainder","remainderMin","remainderSec","offsetMin","offsetSec","getLegacyDuration","durationId","getLegacyInfraction","getChoiceDurationLabel","choiceDuration","includeDescription","joinSymbol","getDuplicateDurationFractionLabel","getInfractionTypeDuration","additionalDupes","additionalPenalty","dupes","dupe","isStickInfraction","includeCurrentPenalty","possibleCodes","codes","possibleChoiceDurationPermutations","isSameInfraction","isSameParticipant","isSameGameTime","isCodeFromPossibleChoices","penaltyCombinations","permutation","combination","penaltyCombination","createPenalty","addPenalty","resetChoices","selectChoice","isChoiceSelected","stickInfractions","requiresStickEjection","requiresContactEjection","requiresAnyEjection","getParticipantTotal","stickPenalties","hasStickInfraction","contactPenalties","hasContactInfraction","doubleAsSingle","_duration","getParticipantTotalPreviousYellow","isCurrentPenalty","isCurrentParticipant","isPreviousPenalty","isYellow","newMeta","excludeCurrentPenalty","originalPenalty","teamPenalty","isSameOption","inMinutes","sumDurationMinutes","getFractionLabel","getTotalMinutes","penaltyIndex","elapsedPenalties","elapsedTotal","requiresEndTime","sortedTeamPenalties","requiresServer","matchesAccumulation","accumulationMember","isInjured","originalPenalties","optionMembers","optionMember","resultingPenalties","previousOptionMember","pastParticipantLinkedPenalties","linkedTeamPenalties","alreadyExist","firstPenalty","isGameTimeBefore","isSamePlayer","areOriginalPenalties","fulfilledAccumulations","resultingPenaltyIndex","resultingPenalty","resetRuleOption","selectRuleOption","isRuleOptionSelected","createFlag","scoresheetThrowsInnings","membersWithSuspensions","memberWithSuspensions","membersWithSecondaryTeam","memberWithSecondaryTeam","FLAG_TO_SEVERITY_MAP","flaggedPenalties","flaggedPenalty","FLAG_TO_DURATION_MAP","getLineupLimitFlags","checkAndAddLimitFLag","limitPositionCount","positionCount","teamLineup","teamCount","getNoteFlag","getExtraFlags","getServingFlags","homeServingPlayers","awayServingPlayers","getPenaltyFlags","hasRedPenalty","hasYellowRedPenalty","getNotServingFlags","checkSuspensions","getSecondaryTeamFlags","hasSecondaryTeamMember","getUnvalidatedMemberFlags","hasUnvalidatedMember","getFaultyPlayerFlags","homeFaulty","awayFaulty","notesFlag","appendValidation","lineupLimitFlags","extraFlags","servingFlags","penaltyFlags","faultyPlayerFlags","notServingFlags","secondaryTeamFlags","unvalidatedMemberFlags","sortedOfficials","typeMapping","getInfractionTypeLabel","infractionTypeLabel","getRuleLabel","ruleLabel","overrideInfractionName","overrideRuleName","isDelayed","getPenaltyServer","getGoalDetails","playerLabel","getGoalTypes","getAssists","goaliePutIn","getGoalieDetails","entities","newEntity","replaced","newState","stripTemp","isTempId","isCoachPosition","isTimekeeper","isReferee","isLinesperson","isExtraOfficial","getMemberType","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","exports","module","__webpack_modules__","call","amdO","chunkIds","fn","notFulfilled","Infinity","fulfilled","j","getter","__esModule","d","getPrototypeOf","__proto__","ns","def","getOwnPropertyNames","definition","o","chunkId","promises","miniCssF","globalThis","Function","hmd","prop","prototype","hasOwnProperty","l","done","script","needAttach","scripts","charset","nc","onScriptComplete","onerror","onload","doneFns","removeChild","Symbol","toStringTag","nmd","fullhref","existingLinkTags","dataHref","existingStyleTags","findStylesheet","linkTag","errorType","realHref","createStylesheet","miniCss","installedChunks","installedChunkData","promise","realSrc","webpackJsonpCallback","parentChunkLoadingFunction","moreModules","runtime","chunkLoadingGlobal","__webpack_exports__"],"sourceRoot":""}