{"version":3,"file":"js/923-dd2e0cc39b3066d99127.js","mappings":"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","sources":["webpack://app/./app/assets/images/brand_specific/ sync ^\\.\\/.*\\/favicon\\.png$","webpack://app/./app/assets/javascripts/helpers/administrateEvent.js","webpack://app/./app/assets/javascripts/i18n/translations.js","webpack://app/./app/assets/javascripts/reactComponents/facetSearch/timeSelector/timeSelectorHelpers.js","webpack://app/./app/assets/javascripts/globals/LegacyModalService.js","webpack://app/./app/assets/javascripts/reactComponents/settings/mutedCompaniesHeader.jsx","webpack://app/./app/assets/javascripts/reactComponents/generic/autocomplete/autocompleteSuggestions.jsx","webpack://app/./app/assets/javascripts/reactComponents/lds/Icon.jsx","webpack://app/./app/assets/javascripts/reactComponents/lds/Input.jsx","webpack://app/./app/assets/javascripts/reactComponents/generic/searchInput.jsx","webpack://app/./app/assets/javascripts/reactComponents/settings/mutedCompaniesSearch.jsx","webpack://app/./app/assets/javascripts/reactComponents/settings/clearMutedCompaniesButton.jsx","webpack://app/./app/assets/javascripts/reactComponents/settings/multiSelectCompanyHolder.jsx","webpack://app/./app/assets/javascripts/reactComponents/settings/suggestedMutedCompanies.jsx","webpack://app/./app/assets/javascripts/reactComponents/settings/selectedMutedCompanies.jsx","webpack://app/./app/assets/javascripts/reactComponents/settings/saveSettingsButton.jsx","webpack://app/./app/assets/javascripts/reactComponents/settings/saveMutedCompaniesButton.jsx","webpack://app/./app/assets/javascripts/reactComponents/settings/mutedCompaniesSelectionPanels.jsx","webpack://app/./app/assets/javascripts/reactComponents/settings/mutedCompaniesSelector.jsx","webpack://app/./app/assets/javascripts/reactComponents/utilities/DOMUtilities.js","webpack://app/./app/assets/javascripts/reactComponents/utilities/PopoverUtilities.js","webpack://app/./app/assets/javascripts/reactComponents/lds/Popover.jsx","webpack://app/./app/assets/javascripts/reactComponents/lds/dropdown/Dropdown.jsx","webpack://app/./app/assets/javascripts/reactComponents/lds/dropdown/DropdownItemGroup.jsx","webpack://app/./app/assets/javascripts/reactComponents/lds/dropdown/DropdownItem.jsx","webpack://app/./app/assets/javascripts/reactComponents/lds/dropdown/DropdownList.jsx","webpack://app/./app/assets/javascripts/reactComponents/lds/NavItem.jsx","webpack://app/./app/assets/javascripts/reactComponents/settings/SettingsDropdown.jsx","webpack://app/./app/assets/javascripts/reactComponents/lds/Button.jsx","webpack://app/./app/assets/javascripts/reactComponents/settings/apolloApiPanel.jsx","webpack://app/./app/assets/javascripts/reactComponents/lds/notifications/BannerContext.js","webpack://app/./app/assets/javascripts/reactComponents/lds/notifications/Banner.jsx","webpack://app/./app/assets/javascripts/reactComponents/lds/notifications/BannerHeading.jsx","webpack://app/./app/assets/javascripts/reactComponents/lds/notifications/Toast.jsx","webpack://app/./app/assets/javascripts/reactComponents/shared/notifications/FlashToast.jsx","webpack://app/./app/assets/javascripts/reactComponents/shared/ComponentFromHTML.jsx","webpack://app/./app/assets/javascripts/reactComponents/lds/modal/ModalContext.jsx","webpack://app/./app/assets/javascripts/reactComponents/lds/modal/ModalBody.jsx","webpack://app/./app/assets/javascripts/reactComponents/lds/modal/ModalFooter.jsx","webpack://app/./app/assets/javascripts/reactComponents/lds/ButtonGroup.jsx","webpack://app/./app/assets/javascripts/reactComponents/lds/chips/ChipAction.jsx","webpack://app/./app/assets/javascripts/reactComponents/lds/chips/Chip.jsx","webpack://app/./app/assets/javascripts/reactComponents/shared/chips/EntityChip.jsx","webpack://app/./app/assets/javascripts/reactComponents/lists/v2/ScrollableList.jsx","webpack://app/./app/assets/javascripts/reactComponents/lds/notifications/BannerBody.jsx","webpack://app/./app/assets/javascripts/reactComponents/lists/v2/listDeleteModal/ListDeleteModalPreviewBody.jsx","webpack://app/./app/assets/javascripts/reactComponents/lists/v2/ToastBanner.jsx","webpack://app/./app/assets/javascripts/reactComponents/lds/typography/Heading.jsx","webpack://app/./app/assets/javascripts/reactComponents/lists/v2/listDeleteModal/ListDeleteModalDeletingBody.jsx","webpack://app/./app/assets/javascripts/reactComponents/lists/v2/listDeleteModal/ListDeleteModalSuccessBody.jsx","webpack://app/./app/assets/javascripts/reactComponents/lists/v2/listDeleteModal/ListDeleteModalBody.jsx","webpack://app/./app/assets/javascripts/reactComponents/lists/v2/DeleteListButtons.jsx","webpack://app/./app/assets/javascripts/reactComponents/lists/v2/CloseButton.jsx","webpack://app/./app/assets/javascripts/reactComponents/lists/v2/listDeleteModal/ListDeleteModalActionsBar.jsx","webpack://app/./app/assets/javascripts/reactComponents/lists/v2/ListDeleteModal.jsx","webpack://app/./app/assets/javascripts/reactComponents/lds/modal/ModalHeader.jsx","webpack://app/./app/assets/javascripts/reactComponents/lds/modal/Modal.jsx","webpack://app/./app/assets/javascripts/reactComponents/lds/modal/GenericLegacyModal.jsx","webpack://app/./app/assets/javascripts/reactComponents/generic/modals/genericModal.jsx","webpack://app/./app/assets/javascripts/reactComponents/generic/modals/genericModalActions.jsx","webpack://app/./app/assets/javascripts/reactComponents/generic/modals/genericModalBody.jsx","webpack://app/./app/assets/javascripts/reactComponents/generic/modals/genericModalHeader.jsx","webpack://app/./app/assets/javascripts/reactComponents/generic/modals/GenericErrorModal.jsx","webpack://app/./app/assets/javascripts/reactComponents/generic/NavBarItems.jsx","webpack://app/./app/assets/javascripts/reactComponents/generic/autocomplete/genericAutocomplete.jsx","webpack://app/./app/assets/javascripts/reactComponents/companyDashboard/affiliatedWithCard.jsx","webpack://app/./app/assets/javascripts/reactComponents/companyDashboard/affiliatedWithCards.jsx","webpack://app/./app/assets/javascripts/reactComponents/companyDashboard/cumulativeFundingByYear.jsx","webpack://app/./app/assets/javascripts/reactComponents/companyDashboard/cumulativeFundingCalendarYears.jsx","webpack://app/./app/assets/javascripts/reactComponents/companyDashboard/fundingQuarter.jsx","webpack://app/./app/assets/javascripts/reactComponents/companyDashboard/fundingEventsCard.jsx","webpack://app/./app/assets/javascripts/reactComponents/companyDashboard/phaseBar.jsx","webpack://app/./app/assets/javascripts/reactComponents/companyDashboard/activeStudiesCard.jsx","webpack://app/./app/assets/javascripts/reactComponents/companyDashboard/salesforce/sfIndexRow.jsx","webpack://app/./app/assets/javascripts/reactComponents/companyDashboard/salesforce/sfIndexTable.jsx","webpack://app/./app/assets/javascripts/reactComponents/companyDashboard/salesforce/sfIndexReturn.jsx","webpack://app/./app/assets/javascripts/reactComponents/companyDashboard/salesforce/sfAccountRow.jsx","webpack://app/./app/assets/javascripts/reactComponents/companyDashboard/salesforce/sfAccountTeam.jsx","webpack://app/./app/assets/javascripts/reactComponents/companyDashboard/salesforce/sfAccountName.jsx","webpack://app/./app/assets/javascripts/reactComponents/companyDashboard/salesforce/sfAccountHeader.jsx","webpack://app/./app/assets/javascripts/reactComponents/companyDashboard/salesforce/sfTabNav.jsx","webpack://app/./app/assets/javascripts/reactComponents/companyDashboard/salesforce/sfUserComment.jsx","webpack://app/./app/assets/javascripts/reactComponents/companyDashboard/salesforce/sfUserActivity.jsx","webpack://app/./app/assets/javascripts/reactComponents/companyDashboard/salesforce/sfUserToggle.jsx","webpack://app/./app/assets/javascripts/reactComponents/companyDashboard/salesforce/sfActivities.jsx","webpack://app/./app/assets/javascripts/reactComponents/companyDashboard/salesforce/sfOpportunity.jsx","webpack://app/./app/assets/javascripts/reactComponents/companyDashboard/salesforce/sfOpportunities.jsx","webpack://app/./app/assets/javascripts/reactComponents/companyDashboard/salesforce/sfContactUrl.jsx","webpack://app/./app/assets/javascripts/reactComponents/companyDashboard/salesforce/sfContactLastActivity.jsx","webpack://app/./app/assets/javascripts/reactComponents/companyDashboard/salesforce/sfContactEmail.jsx","webpack://app/./app/assets/javascripts/reactComponents/companyDashboard/salesforce/sfContactPhone.jsx","webpack://app/./app/assets/javascripts/reactComponents/companyDashboard/salesforce/sfContact.jsx","webpack://app/./app/assets/javascripts/reactComponents/companyDashboard/salesforce/sfContacts.jsx","webpack://app/./app/assets/javascripts/reactComponents/companyDashboard/salesforce/sfTabContent.jsx","webpack://app/./app/assets/javascripts/reactComponents/companyDashboard/salesforce/sfAccount.jsx","webpack://app/./app/assets/javascripts/reactComponents/companyDashboard/salesforce/sfAccountLoader.jsx","webpack://app/./app/assets/javascripts/reactComponents/companyDashboard/salesforce/sfLeadsNotice.jsx","webpack://app/./app/assets/javascripts/reactComponents/companyDashboard/salesforce/sfLead.jsx","webpack://app/./app/assets/javascripts/reactComponents/companyDashboard/salesforce/sfLeadsPanel.jsx","webpack://app/./app/assets/javascripts/reactComponents/companyDashboard/salesforce/sfPanel.jsx","webpack://app/./app/assets/javascripts/reactComponents/companyDashboard/salesforce/sfPanelWrapper.jsx","webpack://app/./app/assets/javascripts/reactComponents/companyDashboard/noRelatedTherapies.jsx","webpack://app/./app/assets/javascripts/reactComponents/generic/pagination/paginationLinks.jsx","webpack://app/./app/assets/javascripts/reactComponents/generic/pagination/paginationHolder.jsx","webpack://app/./app/assets/javascripts/reactComponents/companyDashboard/relatedTherapiesTable.jsx","webpack://app/./app/assets/javascripts/reactComponents/companyDashboard/relatedTherapiesFromList.jsx","webpack://app/./app/assets/javascripts/reactComponents/companyDashboard/relatedTherapiesContainer.jsx","webpack://app/./app/assets/javascripts/reactComponents/salesforce/SalesforceModalMessages.jsx","webpack://app/./app/assets/javascripts/helpers/crmUtilities.js","webpack://app/./app/assets/javascripts/reactComponents/companyDashboard/CRMDropdown.jsx","webpack://app/./app/assets/javascripts/reactComponents/companyDashboard/CRMInput.jsx","webpack://app/./app/assets/javascripts/reactComponents/companyDashboard/salesforce/sfFormFields.jsx","webpack://app/./app/assets/javascripts/reactComponents/companyDashboard/salesforce/SfTwoColumnFormFields.jsx","webpack://app/./app/assets/javascripts/reactComponents/companyDashboard/salesforce/sfFormFieldsCore.jsx","webpack://app/./app/assets/javascripts/reactComponents/companyDashboard/salesforce/sfFormFieldsOptional.jsx","webpack://app/./app/assets/javascripts/reactComponents/companyDashboard/salesforce/sfAccountForm.jsx","webpack://app/./app/assets/javascripts/reactComponents/companyDashboard/salesforce/sfLeadForm.jsx","webpack://app/./app/assets/javascripts/reactComponents/companyDashboard/salesforce/sfContactForm.jsx","webpack://app/./app/assets/javascripts/reactComponents/companyDashboard/salesforce/sfContactButton.jsx","webpack://app/./app/assets/javascripts/reactComponents/companyDashboard/salesforce/sfFormSelector.jsx","webpack://app/./app/assets/javascripts/reactComponents/companyDashboard/salesforce/sfFormModal.jsx","webpack://app/./app/assets/javascripts/reactComponents/admin/commentaryArticle/articleEventDetails.jsx","webpack://app/./app/assets/javascripts/reactComponents/admin/commentaryArticle/articleEventOrg.jsx","webpack://app/./app/assets/javascripts/reactComponents/admin/commentaryArticle/includedOrgList.jsx","webpack://app/./app/assets/javascripts/reactComponents/admin/commentaryArticle/ignoreEventButton.jsx","webpack://app/./app/assets/javascripts/reactComponents/admin/commentaryArticle/restoreEventButton.jsx","webpack://app/./app/assets/javascripts/reactComponents/admin/commentaryArticle/publishEventButton.jsx","webpack://app/./app/assets/javascripts/reactComponents/admin/commentaryArticle/articleEventActionPanel.jsx","webpack://app/./app/assets/javascripts/reactComponents/admin/commentaryArticle/excludedOrgList.jsx","webpack://app/./app/assets/javascripts/reactComponents/admin/commentaryArticle/articleEventPanel.jsx","webpack://app/./app/assets/javascripts/reactComponents/admin/administrateEvent/eventRepublishButton.jsx","webpack://app/./app/assets/javascripts/reactComponents/admin/administrateEvent/eventListTitle.jsx","webpack://app/./app/assets/javascripts/reactComponents/admin/administrateEvent/eventTitle.jsx","webpack://app/./app/assets/javascripts/reactComponents/admin/administrateEvent/eventDate.jsx","webpack://app/./app/assets/javascripts/reactComponents/admin/administrateEvent/eventContent.jsx","webpack://app/./app/assets/javascripts/reactComponents/admin/administrateEvent/orgEntity.jsx","webpack://app/./app/assets/javascripts/reactComponents/admin/administrateEvent/eventOrgEntities.jsx","webpack://app/./app/assets/javascripts/reactComponents/admin/administrateEvent/nonOrgEntity.jsx","webpack://app/./app/assets/javascripts/reactComponents/admin/administrateEvent/eventNonOrgEntities.jsx","webpack://app/./app/assets/javascripts/config/clinicalStages.js","webpack://app/./app/assets/javascripts/reactComponents/admin/administrateEvent/eventProperties.jsx","webpack://app/./app/assets/javascripts/reactComponents/admin/administrateEvent/eventEntities.jsx","webpack://app/./app/assets/javascripts/reactComponents/generic/modals/adminModal.jsx","webpack://app/./app/assets/javascripts/reactComponents/generic/modals/adminModalHeader.jsx","webpack://app/./app/assets/javascripts/reactComponents/generic/modals/adminModalBody.jsx","webpack://app/./app/assets/javascripts/reactComponents/admin/eventModifyModal/editEventDateForm.jsx","webpack://app/./app/assets/javascripts/reactComponents/admin/eventModifyModal/eventDateHandler.jsx","webpack://app/./app/assets/javascripts/reactComponents/admin/eventModifyModal/editOrgEntity.jsx","webpack://app/./app/assets/javascripts/reactComponents/admin/eventModifyModal/editEventOrgEntities.jsx","webpack://app/./app/assets/javascripts/reactComponents/admin/eventModifyModal/editNonOrgEntity.jsx","webpack://app/./app/assets/javascripts/reactComponents/admin/eventModifyModal/editEventNonOrgEntities.jsx","webpack://app/./app/assets/javascripts/reactComponents/admin/eventModifyModal/removeClinicalStage.jsx","webpack://app/./app/assets/javascripts/reactComponents/admin/eventModifyModal/editEventProperties.jsx","webpack://app/./app/assets/javascripts/reactComponents/admin/eventModifyModal/addClinicalStagePropertyPicker.jsx","webpack://app/./app/assets/javascripts/reactComponents/admin/eventModifyModal/addClinicalTrialPropertyPanel.jsx","webpack://app/./app/assets/javascripts/config/administrateEvent.js","webpack://app/./app/assets/javascripts/reactComponents/admin/eventModifyModal/editEventEntities.jsx","webpack://app/./app/assets/javascripts/reactComponents/admin/eventModifyModal/addEntityLink.jsx","webpack://app/./app/assets/javascripts/reactComponents/admin/eventModifyModal/addEntityLinks.jsx","webpack://app/./app/assets/javascripts/reactComponents/admin/eventModifyModal/addEntityLinksPanel.jsx","webpack://app/./app/assets/javascripts/reactComponents/admin/eventModifyModal/addEntitiesFromDoc.jsx","webpack://app/./app/assets/javascripts/reactComponents/admin/eventModifyModal/addEntityPanel.jsx","webpack://app/./app/assets/javascripts/reactComponents/admin/eventModifyModal/autocompleteSearchPanel.jsx","webpack://app/./app/assets/javascripts/reactComponents/admin/eventModifyModal/autocompleteResult.jsx","webpack://app/./app/assets/javascripts/reactComponents/admin/eventModifyModal/autocompleteResults.jsx","webpack://app/./app/assets/javascripts/reactComponents/admin/eventModifyModal/findNewEntityPanel.jsx","webpack://app/./app/assets/javascripts/reactComponents/admin/eventModifyModal/removeIndustryLink.jsx","webpack://app/./app/assets/javascripts/reactComponents/admin/eventModifyModal/removeIndustryLinks.jsx","webpack://app/./app/assets/javascripts/reactComponents/admin/eventModifyModal/addIndustryLink.jsx","webpack://app/./app/assets/javascripts/reactComponents/admin/eventModifyModal/addIndustryLinks.jsx","webpack://app/./app/assets/javascripts/reactComponents/admin/eventModifyModal/editIndustriesFromDoc.jsx","webpack://app/./app/assets/javascripts/reactComponents/admin/eventModifyModal/editIndustryPanel.jsx","webpack://app/./app/assets/javascripts/reactComponents/generic/modals/adminModalFooter.jsx","webpack://app/./app/assets/javascripts/reactComponents/admin/eventModifyModal/editEventFooter.jsx","webpack://app/./app/assets/javascripts/reactComponents/admin/eventModifyModal/index.jsx","webpack://app/./app/assets/javascripts/reactComponents/admin/administrateEvent/modifyEvent.jsx","webpack://app/./app/assets/javascripts/reactComponents/admin/administrateEvent/eventDisplayCell.jsx","webpack://app/./app/assets/javascripts/reactComponents/admin/administrateEvent/eventStatusCell.jsx","webpack://app/./app/assets/javascripts/reactComponents/admin/administrateEvent/eventActionForVisible.jsx","webpack://app/./app/assets/javascripts/reactComponents/admin/administrateEvent/eventActionForHiddenAndPublishable.jsx","webpack://app/./app/assets/javascripts/reactComponents/admin/administrateEvent/eventActionCell.jsx","webpack://app/./app/assets/javascripts/reactComponents/admin/administrateEvent/eventCreatedByCell.jsx","webpack://app/./app/assets/javascripts/reactComponents/admin/administrateEvent/eventEditCell.jsx","webpack://app/./app/assets/javascripts/reactComponents/admin/administrateEvent/eventRow.jsx","webpack://app/./app/assets/javascripts/reactComponents/admin/administrateEvent/eventTable.jsx","webpack://app/./app/assets/javascripts/reactComponents/admin/administrateEvent/eventListPanel.jsx","webpack://app/./app/assets/javascripts/reactComponents/lds/accordion/AccordionContent.jsx","webpack://app/./app/assets/javascripts/reactComponents/lds/accordion/AccordionTrigger.jsx","webpack://app/./app/assets/javascripts/reactComponents/lds/accordion/Accordion.jsx","webpack://app/./app/assets/javascripts/constants/search/search_constants.js","webpack://app/./app/assets/javascripts/helpers/searchFilterUtilities.js","webpack://app/./app/assets/javascripts/reactComponents/lds/FilterItem.jsx","webpack://app/./app/assets/javascripts/reactComponents/facetSearch/FacetSearchCompanyActivity.jsx","webpack://app/./app/assets/javascripts/reactComponents/facetSearch/FacetSearchCompanyWorkingOn.jsx","webpack://app/./app/assets/javascripts/reactComponents/lds/Divider.jsx","webpack://app/./app/assets/javascripts/reactComponents/facetSearch/facetSections.jsx","webpack://app/./app/assets/javascripts/reactComponents/facetSearch/filterCategoryShowMore.jsx","webpack://app/./app/assets/javascripts/helpers/locations.js","webpack://app/./app/assets/javascripts/reactComponents/facetSearch/locationSelector.jsx","webpack://app/./app/assets/javascripts/reactComponents/facetSearch/companyRelationshipSelector.jsx","webpack://app/./app/assets/javascripts/reactComponents/facetSearch/entities/EntitySearchFilterItem.jsx","webpack://app/./app/assets/javascripts/reactComponents/facetSearch/entities/EntitySearchFilter.jsx","webpack://app/./app/assets/javascripts/reactComponents/facetSearch/entities/ConditionsSearchFilter.jsx","webpack://app/./app/assets/javascripts/reactComponents/facetSearch/entities/OrganizationsSearchFilter.jsx","webpack://app/./app/assets/javascripts/reactComponents/facetSearch/entities/TherapiesSearchFilter.jsx","webpack://app/./app/assets/javascripts/reactComponents/facetSearch/userListSelector.jsx","webpack://app/./app/assets/javascripts/reactComponents/facetSearch/clinicalTrialStagesSelector.jsx","webpack://app/./app/assets/javascripts/reactComponents/facetSearch/clinicalTrialStatusSelector.jsx","webpack://app/./app/assets/javascripts/helpers/urlUtilities.js","webpack://app/./app/assets/javascripts/reactComponents/facetSearchCriteria/AppliedFiltersClearAll.jsx","webpack://app/./app/assets/javascripts/reactComponents/facetSearchCriteria/facetSearchCriteriaAliasSearch.jsx","webpack://app/./app/assets/javascripts/reactComponents/facetSearchCriteria/facetSearchCriteriaCategory.jsx","webpack://app/./app/assets/javascripts/reactComponents/facetSearchCriteria/facetSearchCriteriaClinicalStatus.jsx","webpack://app/./app/assets/javascripts/reactComponents/facetSearchCriteria/facetSearchCriteriaClinicalTrialStages.jsx","webpack://app/./app/assets/javascripts/reactComponents/facetSearchCriteria/facetSearchCriteriaEntities.jsx","webpack://app/./app/assets/javascripts/reactComponents/facetSearchCriteria/facetSearchCriteriaEntityValues.jsx","webpack://app/./app/assets/javascripts/reactComponents/facetSearchCriteria/facetSearchCriteriaGeoCoordinates.jsx","webpack://app/./app/assets/javascripts/reactComponents/facetSearchCriteria/facetSearchCriteriaList.jsx","webpack://app/./app/assets/javascripts/reactComponents/facetSearchCriteria/facetSearchCriteriaLocations.jsx","webpack://app/./app/assets/javascripts/reactComponents/facetSearchCriteria/facetSearchCriteriaMutedCompany.jsx","webpack://app/./app/assets/javascripts/reactComponents/facetSearchCriteria/facetSearchCriteriaQueryTerm.jsx","webpack://app/./app/assets/javascripts/reactComponents/facetSearchCriteria/facetSearchCriteriaRelationship.jsx","webpack://app/./app/assets/javascripts/reactComponents/facetSearchCriteria/facetSearchCriteriaTimeFrame.jsx","webpack://app/./app/assets/javascripts/reactComponents/facetSearchCriteria/facetSearchCriteriaContainer.jsx","webpack://app/./app/assets/javascripts/reactComponents/facetSearchCriteria/facetSearchCriteriaHeading.jsx","webpack://app/./app/assets/javascripts/reactComponents/facetSearch/TimeSelectDropdown.jsx","webpack://app/./app/assets/javascripts/reactComponents/lds/datepicker/CalendarContext.js","webpack://app/./app/assets/javascripts/reactComponents/lds/datepicker/CalendarHeader.jsx","webpack://app/./app/assets/javascripts/reactComponents/lds/datepicker/CalendarDate.jsx","webpack://app/./app/assets/javascripts/reactComponents/lds/datepicker/CalendarWeekDayLabels.jsx","webpack://app/./app/assets/javascripts/reactComponents/lds/datepicker/CalendarBody.jsx","webpack://app/./app/assets/javascripts/reactComponents/lds/datepicker/QuickActionMonthSelector.jsx","webpack://app/./app/assets/javascripts/reactComponents/utilities/CalendarUtilities.js","webpack://app/./app/assets/javascripts/reactComponents/lds/datepicker/QuickActionYearSelector.jsx","webpack://app/./app/assets/javascripts/reactComponents/lds/datepicker/QuickActionContainer.jsx","webpack://app/./app/assets/javascripts/reactComponents/lds/datepicker/Calendar.jsx","webpack://app/./app/assets/javascripts/reactComponents/lds/datepicker/CalendarActions.jsx","webpack://app/./app/assets/javascripts/reactComponents/lds/datepicker/DatePickerHeader.jsx","webpack://app/./app/assets/javascripts/reactComponents/lds/datepicker/DatePicker.jsx","webpack://app/./app/assets/javascripts/reactComponents/facetSearch/timeSelector/FacetSearchTimeSelectMultiInput.jsx","webpack://app/./app/assets/javascripts/reactComponents/facetSearch/timeSelector/FacetSearchDateRangePicker.jsx","webpack://app/./app/assets/javascripts/reactComponents/facetSearch/timeSelector/FacetSearchTimeSelector.jsx","webpack://app/./app/assets/javascripts/reactComponents/search_description/queryActivityCategory.jsx","webpack://app/./app/assets/javascripts/reactComponents/search_description/queryAliasSearchRefs.jsx","webpack://app/./app/assets/javascripts/reactComponents/search_description/queryClinStage.jsx","webpack://app/./app/assets/javascripts/reactComponents/search_description/queryClinStatus.jsx","webpack://app/./app/assets/javascripts/reactComponents/search_description/queryFacets.jsx","webpack://app/./app/assets/javascripts/reactComponents/search_description/queryGeoCoords.jsx","webpack://app/./app/assets/javascripts/reactComponents/search_description/queryList.jsx","webpack://app/./app/assets/javascripts/reactComponents/search_description/queryLocations.jsx","webpack://app/./app/assets/javascripts/reactComponents/search_description/queryOrgListRefs.jsx","webpack://app/./app/assets/javascripts/reactComponents/search_description/queryRelationships.jsx","webpack://app/./app/assets/javascripts/reactComponents/search_description/querySearchTerm.jsx","webpack://app/./app/assets/javascripts/reactComponents/search_description/queryTimeRange.jsx","webpack://app/./app/assets/javascripts/reactComponents/search_description/searchDescriptionPanel.jsx","webpack://app/./app/assets/javascripts/stores/FeedsIndex.jsx","webpack://app/./app/assets/javascripts/reactComponents/feeds/DeleteFeedsModal.jsx","webpack://app/./app/assets/javascripts/reactComponents/feeds/FeedsIndexDeleteButton.jsx","webpack://app/./app/assets/javascripts/reactComponents/lds/selection_controls/SelectionControlGroup.jsx","webpack://app/./app/assets/javascripts/reactComponents/lds/selection_controls/SelectionControl.jsx","webpack://app/./app/assets/javascripts/reactComponents/lds/selection_controls/CheckboxItem.jsx","webpack://app/./app/assets/javascripts/reactComponents/feeds/FeedsIndexSelectAll.jsx","webpack://app/./app/assets/javascripts/reactComponents/feeds/FeedsIndexTableHeader.jsx","webpack://app/./app/assets/javascripts/reactComponents/events/EventCheckEmailSettings.jsx","webpack://app/./app/assets/javascripts/reactComponents/shared/chips/NewEventChip.jsx","webpack://app/./app/assets/javascripts/reactComponents/feeds/FeedsIndexTableRow.jsx","webpack://app/./app/assets/javascripts/helpers/feedManagement.js","webpack://app/./app/assets/javascripts/reactComponents/feeds/FeedsIndexTable.jsx","webpack://app/./app/assets/javascripts/reactComponents/flagged_events/flagThisEvent.jsx","webpack://app/./app/assets/javascripts/reactComponents/flagged_events/flagEventComment.jsx","webpack://app/./app/assets/javascripts/reactComponents/lds/datepicker/FlagEventDatePicker.jsx","webpack://app/./app/assets/javascripts/reactComponents/flagged_events/flagEventReminder.jsx","webpack://app/./app/assets/javascripts/reactComponents/flagged_events/flagEventModalBody.jsx","webpack://app/./app/assets/javascripts/reactComponents/flagged_events/flagEventModal.jsx","webpack://app/./app/assets/javascripts/reactComponents/utilities/flagEventUtilities.js","webpack://app/./app/assets/javascripts/reactComponents/lists/listModalPanel/CopyToNewListSuccess.jsx","webpack://app/./app/assets/javascripts/reactComponents/lists/downloadPrimoPlModal/downloadPrimoCampaignButton.jsx","webpack://app/./app/assets/javascripts/reactComponents/lists/nameThisListCard.jsx","webpack://app/./app/assets/javascripts/reactComponents/lists/downloadPrimoPlModal/downloadPrimoPlModal.jsx","webpack://app/./app/assets/javascripts/reactComponents/lists/listDisplay/modifyListButton.jsx","webpack://app/./app/assets/javascripts/reactComponents/lists/listDisplay/filterControls/filterColumns.jsx","webpack://app/./app/assets/javascripts/reactComponents/lists/listDisplay/filterControls/filterControlButton.jsx","webpack://app/./app/assets/javascripts/reactComponents/lists/listDisplay/filterControls/filterOptions.jsx","webpack://app/./app/assets/javascripts/reactComponents/lists/listDisplay/filterControls/pivotListFilterControls.jsx","webpack://app/./app/assets/javascripts/reactComponents/lists/listDisplay/table/listTableHorizontalScroll.jsx","webpack://app/./app/assets/javascripts/reactComponents/lists/listDisplay/table/listTableVerticalScroll.jsx","webpack://app/./app/assets/javascripts/reactComponents/lists/listDisplay/companySfIcon.jsx","webpack://app/./app/assets/javascripts/reactComponents/lists/listDisplay/table/pivotListSortIcon.jsx","webpack://app/./app/assets/javascripts/reactComponents/lists/listDisplay/table/headerRow.jsx","webpack://app/./app/assets/javascripts/reactComponents/lists/listDisplay/table/companyRows.jsx","webpack://app/./app/assets/javascripts/reactComponents/lists/listDisplay/availableColumns/availableLi.jsx","webpack://app/./app/assets/javascripts/reactComponents/lists/listDisplay/availableColumns/columnsChoicePagination.jsx","webpack://app/./app/assets/javascripts/reactComponents/lists/listDisplay/availableColumns/fillerLi.jsx","webpack://app/./app/assets/javascripts/reactComponents/lists/listDisplay/availableColumns/availableColumns.jsx","webpack://app/./app/assets/javascripts/reactComponents/lists/listDisplay/table/cancelColumnsButton.jsx","webpack://app/./app/assets/javascripts/reactComponents/lists/listDisplay/columns/modifyColumnsButtons.jsx","webpack://app/./app/assets/javascripts/reactComponents/lists/listDisplay/columns/clearColumnsButton.jsx","webpack://app/./app/assets/javascripts/reactComponents/lists/listDisplay/columns/modifyColumnsRow.jsx","webpack://app/./app/assets/javascripts/reactComponents/lists/listDisplay/chosenColumns/noMoreChoices.jsx","webpack://app/./app/assets/javascripts/reactComponents/lists/listDisplay/chosenColumns/chosenLi.jsx","webpack://app/./app/assets/javascripts/reactComponents/lists/listDisplay/chosenColumns/chosenColumns.jsx","webpack://app/./app/assets/javascripts/reactComponents/lists/listDisplay/table/columnRow.jsx","webpack://app/./app/assets/javascripts/reactComponents/lists/listDisplay/table/listTable.jsx","webpack://app/./app/assets/javascripts/reactComponents/lists/listDisplay/listDisplay.jsx","webpack://app/./app/assets/javascripts/reactComponents/lists/ListFeedPanel.jsx","webpack://app/./app/assets/javascripts/reactComponents/lists/deleteListsConfirmationModal.jsx","webpack://app/./app/assets/javascripts/reactComponents/lists/shareListModal.jsx","webpack://app/./app/assets/javascripts/reactComponents/lists/listModalPanel/listName.jsx","webpack://app/./app/assets/javascripts/reactComponents/lists/listModalPanel/orgListCountDescription.jsx","webpack://app/./app/assets/javascripts/reactComponents/lists/listModalPanel/EntityListDisplay.jsx","webpack://app/./app/assets/javascripts/reactComponents/lists/listModalPanel/listDisplayPanel.jsx","webpack://app/./app/assets/javascripts/reactComponents/lists/listModalPanel/EntityListHolder.jsx","webpack://app/./app/assets/javascripts/reactComponents/flagged_events/paginationPage.jsx","webpack://app/./app/assets/javascripts/reactComponents/flagged_events/userPagination.jsx","webpack://app/./app/assets/javascripts/reactComponents/lists/listModalPanel/pagingOrgList.jsx","webpack://app/./app/assets/javascripts/reactComponents/lists/listModalPanel/orgListDisplayPanel.jsx","webpack://app/./app/assets/javascripts/reactComponents/lds/selection_controls/RadioButtonItem.jsx","webpack://app/./app/assets/javascripts/reactComponents/lists/listModalPanel/sponsorOnlyListSwitch.jsx","webpack://app/./app/assets/javascripts/reactComponents/lists/listModalPanel/listModalBody.jsx","webpack://app/./app/assets/javascripts/reactComponents/lists/listModalPanel/listModalFooter.jsx","webpack://app/./app/assets/javascripts/reactComponents/lists/listModalPanel/listModalSuccess.jsx","webpack://app/./app/assets/javascripts/reactComponents/lists/listModalPanel/listModalPanel.jsx","webpack://app/./app/assets/javascripts/reactComponents/generic/htmlElements/unorderedList.jsx","webpack://app/./app/assets/javascripts/reactComponents/generic/htmlElements/twoColumnList.jsx","webpack://app/./app/assets/javascripts/reactComponents/lists/listModalPanel/existingCopyList.jsx","webpack://app/./app/assets/javascripts/constants/lists/list_constants.js","webpack://app/./app/assets/javascripts/reactComponents/lds/Container.jsx","webpack://app/./app/assets/javascripts/stores/actions/lists/UserListsActions.js","webpack://app/./app/assets/javascripts/stores/lists/ListsStoreClient.js","webpack://app/./app/assets/javascripts/stores/lists/UserListsStore.js","webpack://app/./app/assets/javascripts/reactComponents/lists/v2/CategoryButtonGroup.jsx","webpack://app/./app/assets/javascripts/reactComponents/lists/v2/SearchFilters.jsx","webpack://app/./app/assets/javascripts/reactComponents/lists/v2/ListPageFooter.jsx","webpack://app/./app/assets/javascripts/reactComponents/lists/v2/ListTableHeader.jsx","webpack://app/./app/assets/javascripts/reactComponents/lists/v2/ListRowChip.jsx","webpack://app/./app/assets/javascripts/reactComponents/lists/v2/ListTableRow.jsx","webpack://app/./app/assets/javascripts/reactComponents/lists/v2/ListTableBody.jsx","webpack://app/./app/assets/javascripts/reactComponents/lists/v2/ListTable.jsx","webpack://app/./app/assets/javascripts/reactComponents/lists/v2/NoLists.jsx","webpack://app/./app/assets/javascripts/reactComponents/lists/v2/ListSearchDescription.jsx","webpack://app/./app/assets/javascripts/reactComponents/lists/v2/UserLists.jsx","webpack://app/./app/assets/javascripts/stores/actions/lists/ColleagueListsActions.js","webpack://app/./app/assets/javascripts/stores/lists/ColleagueListStore.js","webpack://app/./app/assets/javascripts/reactComponents/lists/v2/colleaguesLists/ColleaguesListsRow.jsx","webpack://app/./app/assets/javascripts/reactComponents/lists/v2/colleaguesLists/ColleaguesListsSection.jsx","webpack://app/./app/assets/javascripts/reactComponents/lists/v2/ColleaguesLists.jsx","webpack://app/./app/assets/javascripts/stores/actions/lists/SalesforceListsActions.js","webpack://app/./app/assets/javascripts/stores/lists/SalesforceListsStore.js","webpack://app/./app/assets/javascripts/reactComponents/lists/v2/SalesforceLists.jsx","webpack://app/./app/assets/javascripts/reactComponents/lds/tabs/TabGroup.jsx","webpack://app/./app/assets/javascripts/reactComponents/lds/tabs/TabbedView.jsx","webpack://app/./app/assets/javascripts/reactComponents/lds/tabs/Tab.jsx","webpack://app/./app/assets/javascripts/reactComponents/lists/v2/ListPage.jsx","webpack://app/./app/assets/javascripts/stores/actions/lists/UserListCreateModalActions.js","webpack://app/./app/assets/javascripts/stores/lists/UserListCreateModalStore.js","webpack://app/./app/assets/javascripts/reactComponents/lists/v2/listCreateModal/CategoryDropdown.jsx","webpack://app/./app/assets/javascripts/reactComponents/lists/v2/listCreateModal/CategorySelectSection.jsx","webpack://app/./app/assets/javascripts/reactComponents/lists/v2/ScrollableListItem.jsx","webpack://app/./app/assets/javascripts/reactComponents/lists/v2/listCreateModal/SearchCriteriaPanel.jsx","webpack://app/./app/assets/javascripts/reactComponents/lists/v2/listCreateModal/ListName.jsx","webpack://app/./app/assets/javascripts/reactComponents/lists/v2/listCreateModal/PagedEntityListPreview.jsx","webpack://app/./app/assets/javascripts/reactComponents/lists/v2/listCreateModal/PreviewSection.jsx","webpack://app/./app/assets/javascripts/reactComponents/lists/v2/listCreateModal/DetailsSection.jsx","webpack://app/./app/assets/javascripts/reactComponents/lists/v2/listCreateModal/ListCreateInProgress.jsx","webpack://app/./app/assets/javascripts/helpers/stringHelpers.js","webpack://app/./app/assets/javascripts/reactComponents/lists/v2/listCreateModal/ListCreateSuccess.jsx","webpack://app/./app/assets/javascripts/reactComponents/lists/v2/listCreateModal/ListCreateSetup.jsx","webpack://app/./app/assets/javascripts/reactComponents/lists/v2/listCreateModal/ListCreateStatus.jsx","webpack://app/./app/assets/javascripts/reactComponents/lists/v2/ListCreateModal.jsx","webpack://app/./app/assets/javascripts/reactComponents/segmentContact/chooseSegmentContactReport/header.jsx","webpack://app/./app/assets/javascripts/reactComponents/segmentContact/chooseSegmentContactReport/button.jsx","webpack://app/./app/assets/javascripts/reactComponents/segmentContact/chooseSegmentContactReport/body.jsx","webpack://app/./app/assets/javascripts/reactComponents/segmentContact/chooseSegmentContactReport/index.jsx","webpack://app/./app/assets/javascripts/reactComponents/signInLinks/signInLink.jsx","webpack://app/./app/assets/javascripts/reactComponents/signInLinks/linkBridge.jsx","webpack://app/./app/assets/javascripts/reactComponents/signInLinks/index.jsx","webpack://app/./app/assets/javascripts/reactComponents/users/selectableUser.jsx","webpack://app/./app/assets/javascripts/reactComponents/users/columnOfSelectableUsers.jsx","webpack://app/./app/assets/javascripts/reactComponents/users/pageOfSelectableUsers.jsx","webpack://app/./app/assets/javascripts/reactComponents/users/paginatedSelectableListOfUsers.jsx","webpack://app/./app/assets/javascripts/reactComponents/modals/SearchErrorModal.jsx","webpack://app/./app/assets/javascripts/reactComponents/modals/SessionTimeoutModal.jsx","webpack://app/./app/assets/javascripts/reactComponents/generic/htmlElements/bootstrapRow.jsx","webpack://app/./app/assets/javascripts/reactComponents/generic/htmlElements/bootstrapSpan.jsx","webpack://app/./app/assets/javascripts/reactComponents/territorySelector/territorySelectorHeader.jsx","webpack://app/./app/assets/javascripts/reactComponents/territorySelector/territoryHolder.jsx","webpack://app/./app/assets/javascripts/reactComponents/territorySelector/territorySelectorHolder.jsx","webpack://app/./app/assets/javascripts/reactComponents/territorySelector/clearTerritoriesButton.jsx","webpack://app/./app/assets/javascripts/reactComponents/territorySelector/selectedTerritoriesHolder.jsx","webpack://app/./app/assets/javascripts/reactComponents/territorySelector/selectedTerritories.jsx","webpack://app/./app/assets/javascripts/reactComponents/territorySelector/saveChangesButton.jsx","webpack://app/./app/assets/javascripts/reactComponents/territorySelector/territorySelectorPanels.jsx","webpack://app/./app/assets/javascripts/reactComponents/territorySelector/index.jsx","webpack://app/./app/assets/javascripts/reactComponents/lds/tabs/TabAnchor.jsx","webpack://app/./app/assets/javascripts/reactComponents/companyDashboard/DashboardNavTabs.jsx","webpack://app/./app/assets/javascripts/reactComponents/companyDashboard/studiesCard.jsx","webpack://app/./app/assets/javascripts/reactComponents/companyDashboard/therapeuticArea.jsx","webpack://app/./app/assets/javascripts/reactComponents/companyDashboard/therapeuticAreaCard.jsx","webpack://app/./app/assets/javascripts/reactComponents/generic/htmlElements/bootstrapFullWidthRow.jsx","webpack://app/./app/assets/javascripts/reactComponents/contactSearch/zoomInfo/zoomInfoHeader.jsx","webpack://app/./app/assets/javascripts/reactComponents/contactSearch/companyDetailsPanel.jsx","webpack://app/./app/assets/javascripts/reactComponents/contactSearch/zoomInfo/zoominfoPersonName.jsx","webpack://app/./app/assets/javascripts/reactComponents/contactSearch/zoomInfo/zoominfoPersonCompany.jsx","webpack://app/./app/assets/javascripts/reactComponents/generic/copyToClipboardButton.jsx","webpack://app/./app/assets/javascripts/reactComponents/contactSearch/flagContactButton.jsx","webpack://app/./app/assets/javascripts/reactComponents/contactSearch/deliverabilityMessage.jsx","webpack://app/./app/assets/javascripts/reactComponents/contactSearch/contactDeliverabilityChecker.jsx","webpack://app/./app/assets/javascripts/reactComponents/contactSearch/zoomInfo/zoomInfoRevealed.jsx","webpack://app/./app/assets/javascripts/reactComponents/contactSearch/zoomInfo/zoominfoPersonRecordOpenCaret.jsx","webpack://app/./app/assets/javascripts/reactComponents/contactSearch/zoomInfo/zoominfoPersonLinks.jsx","webpack://app/./app/assets/javascripts/reactComponents/contactSearch/zoomInfo/zoominfoCompanyAddress.jsx","webpack://app/./app/assets/javascripts/reactComponents/contactSearch/zoomInfo/zoominfoContactPurchasedDetails.jsx","webpack://app/./app/assets/javascripts/reactComponents/contactSearch/zoomInfo/zoominfoPurchasedContactFurtherDetails.jsx","webpack://app/./app/assets/javascripts/reactComponents/contactSearch/zoomInfo/zoominfoPurchasedContact.jsx","webpack://app/./app/assets/javascripts/reactComponents/contactSearch/existingContacts.jsx","webpack://app/./app/assets/javascripts/reactComponents/contactSearch/zoomInfo/zoominfoResultsText.jsx","webpack://app/./app/assets/javascripts/reactComponents/contactSearch/zoomInfo/noInfoNotice.jsx","webpack://app/./app/assets/javascripts/reactComponents/contactSearch/zoomInfo/zoomInfoPhoneAvailable.jsx","webpack://app/./app/assets/javascripts/reactComponents/contactSearch/zoomInfo/zoominfoEmailAvailable.jsx","webpack://app/./app/assets/javascripts/reactComponents/contactSearch/zoomInfo/zoominfoEmailReveal.jsx","webpack://app/./app/assets/javascripts/reactComponents/contactSearch/zoomInfo/zoominfoPhoneReveal.jsx","webpack://app/./app/assets/javascripts/reactComponents/contactSearch/zoomInfo/GDPRModal.jsx","webpack://app/./app/assets/javascripts/reactComponents/contactSearch/zoomInfo/zoominfoBuyContact.jsx","webpack://app/./app/assets/javascripts/reactComponents/contactSearch/zoomInfo/zoominfoFurtherPersonDetails.jsx","webpack://app/./app/assets/javascripts/reactComponents/contactSearch/zoomInfo/zoominfoLastReviewed.jsx","webpack://app/./app/assets/javascripts/reactComponents/contactSearch/zoomInfo/zoominfoPersonResult.jsx","webpack://app/./app/assets/javascripts/reactComponents/contactSearch/zoomInfo/zoominfoDisplayResults.jsx","webpack://app/./app/assets/javascripts/reactComponents/generic/pagination/paginationBar.jsx","webpack://app/./app/assets/javascripts/reactComponents/contactSearch/contactSearchResults.jsx","webpack://app/./app/assets/javascripts/reactComponents/contactSearch/generateEmailBox.jsx","webpack://app/./app/assets/javascripts/reactComponents/contactSearch/zoomInfo/zoominfoSearch.jsx","webpack://app/./app/assets/javascripts/reactComponents/contactSearch/contactSearchPanel.jsx","webpack://app/./app/assets/javascripts/reactComponents/devTools/devTools.jsx","webpack://app/./app/assets/javascripts/reactComponents/lists/CopyToExistingListDropdown.jsx","webpack://app/./app/assets/javascripts/reactComponents/feeds/IncludeFeedsOnHomePageCheckbox.jsx","webpack://app/./app/assets/javascripts/reactComponents/lds/hooks/useCheckbox.js","webpack://app/./app/assets/javascripts/reactComponents/flagged_events/FeedsTabs.jsx","webpack://app/./app/assets/javascripts/reactComponents/flagged_events/FlagEventsTabs.jsx","webpack://app/./app/assets/javascripts/reactComponents/flagged_events/FlagEventStatusPanel.jsx","webpack://app/./app/assets/javascripts/reactComponents/flagged_events/LDSFlagEventModalSuccess.jsx","webpack://app/./app/assets/javascripts/reactComponents/feeds/LDSFeedSaveModal.jsx","webpack://app/./app/assets/javascripts/helpers/numbers.js","webpack://app/./app/assets/javascripts/reactComponents/feeds/MaxFeedsErrorModal.jsx","webpack://app/./app/assets/javascripts/reactComponents/home/HomeFeedTableBody.jsx","webpack://app/./app/assets/javascripts/reactComponents/flagged_events/LDSFlagEventModal.jsx","webpack://app/./app/assets/javascripts/reactComponents/feeds/ViewFeedTabs.jsx","webpack://app/./app/assets/javascripts/reactComponents/salesforce/SalesforceModal.jsx","webpack://app/./app/assets/javascripts/reactComponents/react_to_window_components.js","webpack://app/./app/assets/javascripts/stores/actions/contactSearch/contactSearchActions.js","webpack://app/./app/assets/javascripts/stores/actions/facetSearch/activityActions.jsx","webpack://app/./app/assets/javascripts/stores/actions/facetSearch/affiliatedWithActions.jsx","webpack://app/./app/assets/javascripts/stores/actions/facetSearch/aliasSearchActions.jsx","webpack://app/./app/assets/javascripts/stores/actions/facetSearch/companyRelationshipActions.jsx","webpack://app/./app/assets/javascripts/stores/actions/facetSearch/geoCoordinatesActions.jsx","webpack://app/./app/assets/javascripts/stores/actions/facetSearch/listActions.jsx","webpack://app/./app/assets/javascripts/stores/actions/facetSearch/locationActions.jsx","webpack://app/./app/assets/javascripts/stores/actions/facetSearch/storeActions.jsx","webpack://app/./app/assets/javascripts/stores/actions/facetSearch/timeFrameActions.jsx","webpack://app/./app/assets/javascripts/stores/actions/lists/listPageActions.js","webpack://app/./app/assets/javascripts/stores/actions/pivotLists/listModalActions.js","webpack://app/./app/assets/javascripts/stores/contactSearch/contactSearchStore.js","webpack://app/./app/assets/javascripts/stores/actions/eventTableActions.js","webpack://app/./app/assets/javascripts/stores/eventTableStore.js","webpack://app/./app/assets/javascripts/stores/slices/facetSearch/activitySlice.js","webpack://app/./app/assets/javascripts/stores/slices/facetSearch/affiliatedWithSlice.js","webpack://app/./app/assets/javascripts/stores/slices/facetSearch/aliasSearchSlice.js","webpack://app/./app/assets/javascripts/stores/slices/facetSearch/clinicalTrialStagesSlice.js","webpack://app/./app/assets/javascripts/stores/slices/facetSearch/clinicalTrialStatusSlice.js","webpack://app/./app/assets/javascripts/stores/slices/facetSearch/companyRelationshipSlice.js","webpack://app/./app/assets/javascripts/stores/slices/facetSearch/geoCoordinatesSlice.js","webpack://app/./app/assets/javascripts/stores/slices/facetSearch/locationSlice.js","webpack://app/./app/assets/javascripts/stores/slices/facetSearch/resultsSlice.js","webpack://app/./app/assets/javascripts/stores/slices/facetSearch/timeFrameSlice.js","webpack://app/./app/assets/javascripts/stores/slices/facetSearch/userListSlice.jsx","webpack://app/./app/assets/javascripts/stores/facetSearchStore.jsx","webpack://app/./app/assets/javascripts/stores/listPageStore.js","webpack://app/./app/assets/javascripts/stores/actions/userActions.js","webpack://app/./app/assets/javascripts/stores/userStore.js","webpack://app/./app/assets/javascripts/stores/actions/eventModifyModalActions.js","webpack://app/./app/assets/javascripts/stores/eventModifyModalStore.js","webpack://app/./app/assets/javascripts/stores/actions/entSearchActions.js","webpack://app/./app/assets/javascripts/stores/entSearchStore.js","webpack://app/./app/assets/javascripts/stores/actions/salesForce/sFPanelActions.jsx","webpack://app/./app/assets/javascripts/stores/salesForce/sFPanelActionsStore.jsx","webpack://app/./app/assets/javascripts/stores/actions/salesForce/sFAccountActions.jsx","webpack://app/./app/assets/javascripts/stores/salesForce/sFAccountActionsStore.jsx","webpack://app/./app/assets/javascripts/stores/actions/salesForce/sFTabActions.jsx","webpack://app/./app/assets/javascripts/stores/salesForce/sFTabActionsStore.jsx","webpack://app/./app/assets/javascripts/stores/actions/salesForce/sFPanelWrapperActions.jsx","webpack://app/./app/assets/javascripts/stores/salesForce/sFPanelWrapperActionsStore.jsx","webpack://app/./app/assets/javascripts/stores/actions/salesForce/sFLeadPanelActions.jsx","webpack://app/./app/assets/javascripts/stores/salesForce/sFLeadPanelActionsStore.jsx","webpack://app/./app/assets/javascripts/stores/actions/salesForce/sFAccountLoaderActions.jsx","webpack://app/./app/assets/javascripts/stores/salesForce/sFAccountLoaderActionsStore.jsx","webpack://app/./app/assets/javascripts/stores/actions/relatedTherapiesActions.js","webpack://app/./app/assets/javascripts/stores/relatedTherapiesStore.jsx","webpack://app/./app/assets/javascripts/stores/actions/pivotLists/columnSettingsActions.js","webpack://app/./app/assets/javascripts/stores/pivotLists/columnSettingsStore.js","webpack://app/./app/assets/javascripts/stores/actions/pivotLists/columnControlsActions.js","webpack://app/./app/assets/javascripts/stores/pivotLists/columnControlsStore.js","webpack://app/./app/assets/javascripts/stores/actions/pivotLists/columnsChosenActions.js","webpack://app/./app/assets/javascripts/stores/pivotLists/columnsChosenStore.js","webpack://app/./app/assets/javascripts/stores/actions/pivotLists/pivotlistColumnSettingsActions.js","webpack://app/./app/assets/javascripts/stores/pivotLists/pivotlistColumnSettingsStore.js","webpack://app/./app/assets/javascripts/stores/actions/contactSearch/flagContactActions.jsx","webpack://app/./app/assets/javascripts/stores/contactSearch/flagContactStore.jsx","webpack://app/./app/assets/javascripts/stores/actions/pivotLists/filteringActions.jsx","webpack://app/./app/assets/javascripts/stores/pivotLists/filteringActionsStore.jsx","webpack://app/./app/assets/javascripts/stores/actions/pivotLists/companySettingsActions.jsx","webpack://app/./app/assets/javascripts/stores/pivotLists/companySettingsStore.jsx","webpack://app/./app/assets/javascripts/stores/actions/pivotLists/submitFormActions.jsx","webpack://app/./app/assets/javascripts/stores/pivotLists/submitFormStore.jsx","webpack://app/./app/assets/javascripts/stores/actions/pivotLists/dragActions.jsx","webpack://app/./app/assets/javascripts/stores/pivotLists/dragStore.jsx","webpack://app/./app/assets/javascripts/stores/actions/pivotLists/rowHoverActions.jsx","webpack://app/./app/assets/javascripts/stores/pivotLists/rowHoverStore.jsx","webpack://app/./app/assets/javascripts/stores/actions/pivotLists/rowRemovalActions.jsx","webpack://app/./app/assets/javascripts/stores/pivotLists/rowRemovalStore.jsx","webpack://app/./app/assets/javascripts/stores/pivotLists/listModalActionStore.js","webpack://app/./app/assets/javascripts/stores/actions/mutedCompaniesActions.js","webpack://app/./app/assets/javascripts/stores/mutedCompaniesStore.js","webpack://app/./app/assets/javascripts/stores/actions/territoriesActions.js","webpack://app/./app/assets/javascripts/stores/territoriesStore.js","webpack://app/./app/assets/javascripts/stores/reflux_to_window_stores.js","webpack://app/./app/assets/javascripts/vendor/yarn_to_window_i18n.js","webpack://app/./app/assets/javascripts/vendor/yarn_to_window_react.js","webpack://app/./node_modules/moment/locale/ sync ^\\.\\/.*$"],"sourcesContent":["var map = {\n\t\"./bio_invest/favicon.png\": 8020,\n\t\"./clinwire/favicon.png\": 8376,\n\t\"./crofter/favicon.png\": 3575,\n\t\"./inova/favicon.png\": 2787,\n\t\"./labza/favicon.png\": 5126,\n\t\"./special_chem/favicon.png\": 2481,\n\t\"./zapyrus/favicon.png\": 2537,\n\t\"./zebra/favicon.png\": 4004,\n\t\"./zymewire/favicon.png\": 2145\n};\n\n\nfunction webpackContext(req) {\n\tvar id = webpackContextResolve(req);\n\treturn __webpack_require__(id);\n}\nfunction webpackContextResolve(req) {\n\tif(!__webpack_require__.o(map, req)) {\n\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\te.code = 'MODULE_NOT_FOUND';\n\t\tthrow e;\n\t}\n\treturn map[req];\n}\nwebpackContext.keys = function webpackContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackContext.resolve = webpackContextResolve;\nmodule.exports = webpackContext;\nwebpackContext.id = 4687;","export const getAllPublishableConceptRefs = (entities) => {\n let allConceptRefs = [];\n const organizations = _.filter(entities, function (entity) {\n return entity.ent_type === \"Organization\"\n });\n organizations.forEach(organization => allConceptRefs = allConceptRefs.concat(organization.publishable_concept_refs));\n allConceptRefs = allConceptRefs.filter((value, index, self) => self.indexOf(value) === index);\n return allConceptRefs;\n};\n","I18n.translations || (I18n.translations = {});\nI18n.translations[\"bg\"] = I18n.extend((I18n.translations[\"bg\"] || {}), JSON.parse('{\"activerecord\":{\"errors\":{\"messages\":{\"record_invalid\":\"Validation failed: %{errors}\",\"restrict_dependent_destroy\":{\"has_many\":\"Cannot delete record because dependent %{record} exist\",\"has_one\":\"Cannot delete record because a dependent %{record} exists\"}}}},\"bulk_uploads\":{\"email_local_part\":{\"empty_parameter\":\"No file uploaded\",\"error\":\"File Upload failed: %{error_message}\",\"success\":\"File was successfully uploaded\"}},\"common\":{\"crm\":{\"salesforce\":{\"forgot_password\":\"If you have forgotten your Salesforce password, please follow the instructions provided on the Salesforce sign in page.\",\"sign_in_button\":\"Sign In with Salesforce\"}}},\"contact\":{\"default_from_email\":\"info@zymewire.com\",\"phone_numbers\":[{\"label\":\"US\",\"phone\":\"1-844-996-3321\"},{\"label\":\"UK\",\"phone\":\"+44-208-133-9963\"}],\"support_email\":\"support@zymewire.com\"},\"date\":{\"abbr_day_names\":[\"Sun\",\"Mon\",\"Tue\",\"Wed\",\"Thu\",\"Fri\",\"Sat\"],\"abbr_month_names\":[null,\"Jan\",\"Feb\",\"Mar\",\"Apr\",\"May\",\"Jun\",\"Jul\",\"Aug\",\"Sep\",\"Oct\",\"Nov\",\"Dec\"],\"day_names\":[\"Sunday\",\"Monday\",\"Tuesday\",\"Wednesday\",\"Thursday\",\"Friday\",\"Saturday\"],\"formats\":{\"default\":\"%Y-%m-%d\",\"long\":\"%B %d, %Y\",\"short\":\"%b %d\"},\"month_names\":[null,\"January\",\"February\",\"March\",\"April\",\"May\",\"June\",\"July\",\"August\",\"September\",\"October\",\"November\",\"December\"],\"order\":[\"year\",\"month\",\"day\"]},\"datetime\":{\"distance_in_words\":{\"about_x_hours\":{\"one\":\"about 1 hour\",\"other\":\"about %{count} hours\"},\"about_x_months\":{\"one\":\"about 1 month\",\"other\":\"about %{count} months\"},\"about_x_years\":{\"one\":\"about 1 year\",\"other\":\"about %{count} years\"},\"almost_x_years\":{\"one\":\"almost 1 year\",\"other\":\"almost %{count} years\"},\"half_a_minute\":\"half a minute\",\"less_than_x_minutes\":{\"one\":\"less than a minute\",\"other\":\"less than %{count} minutes\"},\"less_than_x_seconds\":{\"one\":\"less than 1 second\",\"other\":\"less than %{count} seconds\"},\"over_x_years\":{\"one\":\"over 1 year\",\"other\":\"over %{count} years\"},\"x_days\":{\"one\":\"1 day\",\"other\":\"%{count} days\"},\"x_minutes\":{\"one\":\"1 minute\",\"other\":\"%{count} minutes\"},\"x_months\":{\"one\":\"1 month\",\"other\":\"%{count} months\"},\"x_seconds\":{\"one\":\"1 second\",\"other\":\"%{count} seconds\"}},\"prompts\":{\"day\":\"Day\",\"hour\":\"Hour\",\"minute\":\"Minute\",\"month\":\"Month\",\"second\":\"Seconds\",\"year\":\"Year\"}},\"default_host\":\"https://www.zymewire.com\",\"devise\":{\"confirmations\":{\"confirmed\":\"Your account was successfully confirmed. Please sign in.\",\"send_instructions\":\"Your email has not been confirmed. We need to confirm your email account before you can sign in. Please check your inbox or spam folder for an email from \\'info@zymewire.com\\' or request a new one.\",\"send_paranoid_instructions\":\"If your e-mail exists on our database, you will receive an email with instructions about how to confirm your account in a few minutes.\"},\"failure\":{\"already_authenticated\":\"You are already signed in.\",\"expired\":\"Вашия акаунт е затворен поради неактивност. Моля свържете се с администратор.\",\"inactive\":\"Your account was not activated yet.\",\"invalid\":\"Invalid email or password. If you use Salesforce, use the \\'Have Salesforce?\\' panel.\",\"invalid_token\":\"Invalid authentication token.\",\"last_attempt\":\"You have one more attempt before your account is locked.\",\"locked\":\"Your account is locked.\",\"not_active\":\"Your account has been de-activated, if you think this is a mistake please contact us\",\"not_found_in_database\":\"Invalid %{authentication_keys} or password.\",\"session_limited\":\"Вашето потребителско име и парола са използвани в друг браузър. Моля влезте отново за да продължите в този браузър.\",\"timeout\":\"Your session expired, please sign in again to continue.\",\"unauthenticated\":\"You need to sign in or sign up before continuing.\",\"unconfirmed\":\"We must confirm your email before you can continue. Please check your inbox or spam folder for a confirmation email from \\'info@zymewire.com\\' or request a new one.\"},\"invalid_captcha\":\"Кодът е грешен.\",\"invalid_security_question\":\"Отговора на тайния въпрос е грешен.\",\"mailer\":{\"confirmation_instructions\":{\"subject\":\"Confirmation instructions for Zymewire.com\"},\"email_changed\":{\"subject\":\"Email Changed\"},\"password_change\":{\"subject\":\"Password Changed\"},\"reset_password_instructions\":{\"subject\":\"Reset password instructions for Zymewire.com\"},\"unlock_instructions\":{\"subject\":\"Unlock Instructions for Zymewire.com\"}},\"omniauth_callbacks\":{\"failure\":\"Could not authorize you from %{kind} because \\\\\"%{reason}\\\\\".\",\"success\":\"Successfully authorized from %{kind} account.\"},\"paranoid_verification_code\":{\"show\":{\"submit\":\"Изпрати\",\"submit_verification_code\":\"Изпрати код за потвърждение\",\"verification_code\":\"Код за потвърждение\"},\"updated\":\"Кодът за потвърждение е приет\"},\"paranoid_verify\":{\"code_required\":\"Моля въведете кода, който нашия екип по поддръжката Ви е предоставил\"},\"password_expired\":{\"change_required\":\"Вашата парола е изтекла. Моля подновете паролата си.\",\"show\":{\"change_my_password\":\"Промени паролата ми\",\"current_password\":\"Настояща парола\",\"new_password\":\"Нова парола\",\"new_password_confirmation\":\"Потвърждение на нова парола\",\"renew_your_password\":\"Подновете паролата си\"},\"updated\":\"Вашата нова парола е запазена.\"},\"passwords\":{\"no_token\":\"You can\\'t access this page without coming from a password reset email. If you do come from a password reset email, please make sure you used the full URL provided.\",\"send_instructions\":\"You will receive an email with instructions about how to reset your password in a few minutes.\",\"send_paranoid_instructions\":\"If your e-mail exists on our database, you will receive a password recovery link on your e-mail\",\"updated\":\"Your password was changed successfully. You are now signed in.\",\"updated_not_active\":\"Your password was changed successfully.\"},\"registrations\":{\"destroyed\":\"Bye! Your account was successfully cancelled. We hope to see you again soon.\",\"signed_up\":\"Welcome! You have signed up successfully.\",\"signed_up_but_inactive\":\"You have signed up successfully. However, we could not sign you in because your account is not yet activated.\",\"signed_up_but_locked\":\"You have signed up successfully. However, we could not sign you in because your account is locked.\",\"signed_up_but_unconfirmed\":\"A message with a confirmation link has been sent to your email address. Please open the link to activate your account.\",\"update_needs_confirmation\":\"You updated your account successfully, but we need to verify your new email address. Please check your email and click on the confirm link to finalize confirming your new email address.\",\"updated\":\"You updated your account successfully.\",\"updated_but_not_signed_in\":\"Your account has been updated successfully, but since your password was changed, you need to sign in again.\"},\"sessions\":{\"already_signed_out\":\"Signed out successfully.\",\"signed_in\":\"Signed in successfully.\",\"signed_out\":\"Signed out successfully.\"},\"unlocks\":{\"send_instructions\":\"You will receive an email with instructions about how to unlock your account in a few minutes.\",\"send_paranoid_instructions\":\"If your account exists, you will receive an email with instructions about how to unlock it in a few minutes.\",\"unlocked\":\"Your account has been unlocked successfully. Please sign in to continue.\"}},\"download\":\"Download\",\"download_30_days\":\"This link will be available for 30 days after which the file will be removed from our servers.\",\"enumerize\":{\"blocklisted_contact\":{\"provider\":{\"insideview\":\"InsideView\",\"zephyr\":\"Zephyr\"}}},\"errors\":{\"format\":\"%{attribute} %{message}\",\"messages\":{\"accepted\":\"must be accepted\",\"already_confirmed\":\"was already confirmed, please try signing in\",\"blank\":\"can\\'t be blank\",\"confirmation\":\"doesn\\'t match %{attribute}\",\"confirmation_period_expired\":\"needs to be confirmed within %{period}, please request a new one\",\"empty\":\"can\\'t be empty\",\"equal_to\":\"must be equal to %{count}\",\"equal_to_current_password\":\"трябва да е различна от настоящата парола.\",\"equal_to_email\":\"трябва да е различна от e-mail адреса.\",\"even\":\"must be even\",\"exclusion\":\"is reserved\",\"expired\":\"has expired, please request a new one\",\"greater_than\":\"must be greater than %{count}\",\"greater_than_or_equal_to\":\"must be greater than or equal to %{count}\",\"in\":\"must be in %{count}\",\"inclusion\":\"is not included in the list\",\"invalid\":\"is invalid\",\"less_than\":\"must be less than %{count}\",\"less_than_or_equal_to\":\"must be less than or equal to %{count}\",\"model_invalid\":\"Validation failed: %{errors}\",\"not_a_number\":\"is not a number\",\"not_an_integer\":\"must be an integer\",\"not_found\":\"not found\",\"not_locked\":\"was not locked\",\"not_saved\":{\"one\":\"1 error prohibited this %{resource} from being saved:\",\"other\":\"%{count} errors prohibited this %{resource} from being saved:\"},\"odd\":\"must be odd\",\"other_than\":\"must be other than %{count}\",\"password_complexity\":{\"digit\":{\"one\":\"трябва да съдържа поне една цифра\",\"other\":\"трябва да съдържа %{count} цифри\"},\"lower\":{\"one\":\"трябва да съдържа поне една малка буква\",\"other\":\"трябва да съдържа поне %{count} малки букви\"},\"symbol\":{\"one\":\"трябва да съдържа поне един пунктоационен знак или символ\",\"other\":\"трябва да съдържа поне %{count} пунктоационни знака или символи\"},\"upper\":{\"one\":\"трябва да съдържа поне една главна буква\",\"other\":\"трябва да съдържа поне %{count} главни букви\"}},\"password_format\":\"Must contain uppercase AND lowercase letters and at least one number\",\"password_too_long\":\"is too long\",\"present\":\"must be blank\",\"required\":\"must exist\",\"taken\":\"has already been taken\",\"taken_in_past\":\"е използвана и преди.\",\"too_long\":{\"one\":\"is too long (maximum is 1 character)\",\"other\":\"is too long (maximum is %{count} characters)\"},\"too_short\":{\"one\":\"is too short (minimum is 1 character)\",\"other\":\"is too short (minimum is %{count} characters)\"},\"wrong_length\":{\"one\":\"is the wrong length (should be 1 character)\",\"other\":\"is the wrong length (should be %{count} characters)\"}}},\"flash\":{\"actions\":{\"create\":{\"notice\":\"%{resource_name} was successfully created.\"},\"destroy\":{\"alert\":\"%{resource_name} could not be destroyed.\",\"notice\":\"%{resource_name} was successfully destroyed.\"},\"update\":{\"notice\":\"%{resource_name} was successfully updated.\"}}},\"hello_world\":\"Hello world\",\"helpers\":{\"select\":{\"prompt\":\"Please select\"},\"submit\":{\"create\":\"Create %{model}\",\"submit\":\"Save %{model}\",\"update\":\"Update %{model}\"}},\"hi\":\"Hi\",\"mailers\":{\"common\":{\"chummy_sign_off\":\"Have a good one.\",\"final_note\":\"P.S.: If you think you received this email accidentally, then something weird could be going on. Hit reply and a member of the %{brand_name} team will investigate.\",\"team_sign_off\":\"- The %{brand_name} Team\"},\"confirmation_instructions_email\":{\"crm\":{\"salesforce\":{\"resource_confirmed\":\"Someone has requested a resend of a confirmation email. You do not need to confirm your email address because your account is configured to use Salesforce to sign in.\",\"resource_unconfirmed\":\"You do not need to confirm your email address because your account is configured to use Salesforce to sign in, please complete the sign up process by clicking the button below to sign in to %{brand_name} via Salesforce.\"}},\"non_crm\":{\"confirm_link\":\"Confirm my account\",\"welcome\":\"Welcome to %{brand_name}. As the final step in the process you\\'ll need to confirm your account by clicking on the link below.\"},\"subject\":\"Confirmation instructions for %{domain}\"},\"flagged_events_mailer\":{\"from\":\"Flagged events - %{brand_name} \\\\u003cflagged_events@mailer.%{domain}\\\\u003e\"},\"mobile_registration_email\":{\"alert_cs_registration_locked\":{\"subject\":\"%{brand_name}: user has had mobile registration locked, too many failed attempts\"},\"dispatch_registration_PIN\":{\"further_instructions\":\"If you are NOT attempting to register for the %{brand_name} Mobile app then please let us know at %{support_email_link} - thank you.\",\"introduction\":\"Here is your mobile app registration PIN:\",\"subject\":\"%{brand_name} Mobile Registration Verification\"},\"too_many_failed_attempts\":{\"introduction\":\"We have received too many failed mobile device registration attempts for your account and we will block any further requests. If you have not attempted to register a mobile device with us in the last hour then please let us know as it is likely someone has tried on your behalf. If you have been trying to register a device please contact %{support_email_link} and we can help unlock your account and get you registered.\",\"subject\":\"%{brand_name}: too many failed registration attempts\"}},\"org_list_download_mail\":{\"dispatch_link\":{\"introduction\":\"We have finished meshing your %{crm_brand_name} data with the companies in your \\\\\"%{list_name}\\\\\" list.\",\"subject\":\"%{brand_name}: your file download of \\'%{list_name}\\' is ready\"},\"failed\":{\"instructions\":\"You could try again in a little while. If you already have and are receiving this email again, please contact us at %{support_email_link}\",\"introduction\":\"We are really sorry, but something went wrong with creating your download of %{crm_brand_name} data for your \\\\\"%{list_name}\\\\\" list.\",\"subject\":\"%{brand_name}: your file download of \\'%{list_name}\\' failed\"}},\"reset_password_instructions_email\":{\"crm\":{\"salesforce\":{\"change_requested\":\"Someone has requested a change to your password. Your account is configured to use Salesforce to sign in.\"}},\"fishy_fine_print\":\"If you did not request a password change, then something weird is going on. Someone may be trying to access your account (unsuccessfully). Please reply to this email and let us know. We will take steps to make sure it stops.\",\"non_crm\":{\"change_password_link\":\"Change my password\",\"change_requested\":\"Someone has requested a change to your password, you can do this via the link below.\"},\"subject\":\"Password reset instructions for %{domain}\"},\"sales_force_mail\":{\"processing_completed\":{\"bullet_points\":[\"Only show events associated with companies in your Salesforce account\",\"Add new contacts and accounts to your Salesforce account without leaving %{brand_name}\",\"Access the \\'Salesforce details\\' panel on company dashboards where you can see open tasks, team interactions, opportunities, and more!\"],\"further_instructions\":\"We\\'re here to help. If you run into any questions or challenges, please contact us at %{support_email_link} and a member of our team would be more than happy to help.\",\"get_the_most\":\"To get the most from the integration, check out the \\'Mine Salesforce for opportunities\\' guide in the Help Center.\",\"guide_button\":\"Take me to the guide\",\"introduction\":\"Good news - your Salesforce account is now integrated with %{brand_name}. Now you’ll be able to:\"}},\"segment_contact\":{\"report_manager\":{\"fail_subject\":\"%{brand_name}: The PDF report generation failed\",\"success_subject\":\"%{brand_name}: Your PDF for %{company_name} is attached\"}},\"sf_token_expiry_email\":{\"further_instructions\":\"If you run into any questions or challenges, please contact us at %{support_email_link} and a member of our team would be more than happy to help.\",\"introduction\":\"Unfortunately the connection established for you between %{brand_name} and your %{crm_brand_name} account has expired. We will not be able to update your lists in %{brand_name} to reflect your %{crm_brand_name} database. To re-establish the connection, you just need to log in to %{brand_name} using your %{crm_brand_name}.\",\"subject\":\"%{brand_name} to %{crm_brand_name} connection has expired\"},\"share_list_mail\":{\"introduction\":\"%{user_name} shared a list with you: \",\"subject\":\"[%{brand_name} - shared list] %{list_name}\"},\"trial_expiry_mail\":{\"seven_days_to_go\":{\"further_instructions\":\"A member of our fabulous Customer Success team will arrange a welcome call with you to understand your goals and priorities, and will then give you a personalized Tour de %{brand_name} so you can easily access the information that is most valuable to you.\",\"instructions\":\"If you\\'d like continued access to the platform with our flexible month-to-month subscription, please ensure you contact %{support_email_link} ahead of: %{deadline}\",\"introduction\":\"Time flies when you\\'re uncovering new business opportunities! Your %{brand_name} trial is coming to an end next week.\",\"sign_off\":\"We look forward to helping you reach your sales goals!\",\"subject\":\"Just a heads up that your %{brand_name} trial is ending in seven days\"},\"seven_days_to_go_warning_for_cs\":{\"introduction\":\"%{user_name} shared a list with you: \",\"subject\":\"[%{brand_name} - shared list] %{list_name}\"}},\"unlock_instructions_email\":{\"crm\":{\"salesforce\":{\"change_requested\":\"You are being sent this email either because of one too many unsuccessful non-Salesforce log-in attempts or someone has requested an unlock email. %{brand_name} has not locked your account because your account is configured to use Salesforce to sign in.\",\"password_forgotten\":\"If you have forgotten your Salesforce password or think your account has been locked by Salesforce, please follow the instructions provided on the Salesforce sign in page.\"}},\"fishy_fine_print\":\"If you have not been (unsuccessfully) trying to log in to your account, then something weird is going on. Someone may be trying to access your account (unsuccessfully). Please reply to this email and let us know. We will take steps to make sure it stops.\",\"non_crm\":{\"change_requested\":\"For security reasons we have locked your account because of too many log-in attempts. To unlock your account, click the link below.\",\"unlock_account_link\":\"Unlock my account\"},\"subject\":\"Unlock instructions for %{domain}\"}},\"mongoid\":{\"errors\":{\"messages\":{\"ambiguous_relationship\":{\"message\":\"Ambiguous associations %{candidates} defined on %{klass}.\",\"resolution\":\"On the %{name} association on %{inverse} you must add an :inverse_of option to specify the exact association on %{klass} that is the opposite of %{name}.\",\"summary\":\"When Mongoid attempts to set an inverse document of an association in memory, it needs to know which association it belongs to. When setting %{name}, Mongoid looked on the class %{inverse} for a matching association, but multiples were found that could potentially match: %{candidates}.\"},\"blank_in_locale\":\"can\\'t be blank in %{location}\",\"callbacks\":{\"message\":\"Calling %{method} on %{klass} resulted in a false return from a callback.\",\"resolution\":\"Double check all before callbacks to make sure they are not unintentionally returning false.\",\"summary\":\"If a before callback returns false when using Document.create!, Document#save!, or Document#update_attributes! this error will get raised since the document did not actually get saved.\"},\"calling_document_find_with_nil_is_invalid\":{\"message\":\"Calling Document.find with nil is invalid.\",\"resolution\":\"Most likely this is caused by passing parameters directly through to the find, and the parameter either is not present or the key from which it is accessed is incorrect.\",\"summary\":\"Document.find expects the parameters to be 1 or more ids, and will return a single document if 1 id is provided, otherwise an array of documents if multiple ids are provided.\"},\"create_collection_failure\":{\"message\":\"Cannot create collection %{collection_name} with options %{collection_options}. The following error was raised: %{error}.\",\"resolution\":\"Double check that collection options for the collection %{collection_name} are valid. Consult with Ruby driver documentation and MongoDB documentation if the desired options are supported by your version of the server.\",\"summary\":\"The server rejected createCollection command with given collection options. This may happen when some of the options are invalid, or not supported by your version of the server.\"},\"criteria_argument_required\":{\"message\":\"Calling Criteria methods with nil arguments is not allowed.\",\"resolution\":\"Invoke Criteria methods with non-nil arguments or omit the respective invocations.\",\"summary\":\"Arguments to Criteria methods cannot be nil, and most Criteria methods require at least one argument. Only logical operations (and, or, nor and not), `all\\' and `where\\' can be called without arguments. The method that was called with nil argument was: %{query_method}.\"},\"delete_restriction\":{\"message\":\"Cannot destroy %{document} because of dependent \\'%{relation}\\'.\",\"resolution\":\"Don\\'t attempt to delete the parent %{document} when it has children, or change the dependent option on the association.\",\"summary\":\"When defining \\'%{relation}\\' with a :dependent =\\\\u003e :restrict_with_error, Mongoid will raise an error when attempting to destroy the %{document} when the child \\'%{relation}\\' still has documents in it.\"},\"destroy_restrict_with_error_dependencies_exist\":\"is not empty and prevents the document from being destroyed\",\"document_not_destroyed\":{\"message\":\"%{klass} with id %{id} was not destroyed.\",\"resolution\":\"Check the before/after destroy callbacks to ensure that the return values are truthy for the chain to continue.\",\"summary\":\"When calling %{klass}#destroy! and a callback halts the destroy callback chain by returning a false value, the deletion will not actually occur.\"},\"document_not_found\":{\"message\":\"Document(s) not found for class %{klass} with id(s) %{missing}.\",\"resolution\":\"Search for an id that is in the database or set the Mongoid.raise_not_found_error configuration option to false, which will cause nil to be returned instead of raising this error when searching for a single id, or only the matched documents when searching for multiples.\",\"summary\":\"When calling %{klass}.find with an id or array of ids, each parameter must match a document in the database or this error will be raised. The search was for the id(s): %{searched} (%{total} total) and the following ids were not found: %{missing}.\"},\"document_with_attributes_not_found\":{\"message\":\"Document not found for class %{klass} with attributes %{attributes}.\",\"resolution\":\"Search for attributes that are in the database or set the Mongoid.raise_not_found_error configuration option to false, which will cause nil to be returned instead of raising this error.\",\"summary\":\"When calling %{klass}.find_by with a hash of attributes, all attributes provided must match a document in the database or this error will be raised.\"},\"document_with_shard_key_not_found\":{\"message\":\"Document not found for class %{klass} with id %{missing} and shard key %{shard_key}.\",\"resolution\":\"Search for an id/shard key that is in the database or set the Mongoid.raise_not_found_error configuration option to false, which will cause nil to be returned instead of raising this error.\",\"summary\":\"When calling %{klass}.find with an id and a shard key, each parameter must match a document in the database or this error will be raised. The search was for the id: %{missing} with shard_key: %{shard_key} and it was not found.\"},\"drop_collection_failure\":{\"message\":\"Cannot drop collection %{collection_name}.\",\"resolution\":\"Try to drop the collection manually using Ruby driver or mongo shell.\",\"summary\":\"Mongoid tried to drop collection %{collection_name}, but the collection still exists in the database.\"},\"empty_config_file\":{\"message\":\"Empty configuration file: %{path}.\",\"resolution\":\"Ensure your configuration file contains the correct contents. Refer to: https://www.mongodb.com/docs/mongoid/current/reference/configuration/\",\"summary\":\"Your mongoid.yml configuration file appears to be empty.\"},\"immutable_attribute\":{\"message\":\"Attempted to change the immutable attribute \\'%{name}\\' with the value: %{value}.\",\"resolution\":\"Do not attempt to update the value of \\'%{name}\\' after the document is persisted.\",\"summary\":\"Immutable attributes can only have values set when the document is a new record.\"},\"in_memory_collation_not_supported\":{\"message\":\"A collation option cannot be applied when querying documents in-memory.\",\"resolution\":\"Remove the collation option from the query.\",\"summary\":\"The query being run against documents in memory has a collation option set. A collation option is only supported if the query is executed on a MongoDB server with version \\\\u003e= 3.4.\"},\"invalid_async_query_executor\":{\"message\":\"Invalid async_query_executor option: %{executor}.\",\"resolution\":\"Pick an allowed option or fix the typo. If you were expecting the option to be there, please consult the following page with respect to Mongoid\\'s configuration:\\\\n\\\\n   https://www.mongodb.com/docs/mongoid/current/reference/configuration/#mongoid-configuration-options\",\"summary\":\"A invalid async query executor was specified. The valid options are: %{options}.\"},\"invalid_collection\":{\"message\":\"Access to the collection for %{klass} is not allowed.\",\"resolution\":\"For access to the collection that the embedded document is in, use %{klass}#_root.collection, or do not attempt to persist an embedded document without a parent set.\",\"summary\":\"%{klass}.collection was called, and %{klass} is an embedded document - it resides within the collection of the root document of the hierarchy.\"},\"invalid_config_file\":{\"message\":\"Invalid configuration file: %{path}.\",\"resolution\":\"Ensure your configuration file contains the correct contents. Refer to: https://www.mongodb.com/docs/mongoid/current/reference/configuration/\",\"summary\":\"Your mongoid.yml configuration file does not contain the correct file structure.\"},\"invalid_config_option\":{\"message\":\"Invalid configuration option: %{name}.\",\"resolution\":\"Remove the invalid option or fix the typo. If you were expecting the option to be there, please consult the following page with respect to Mongoid\\'s configuration:\\\\n\\\\n   http://mongoid.org/en/mongoid/docs/installation.html\",\"summary\":\"A invalid configuration option was provided in your mongoid.yml, or a typo is potentially present. The valid configuration options are: %{options}.\"},\"invalid_dependent_strategy\":{\"message\":\"Invalid dependent strategy: %{invalid_strategy}.\",\"resolution\":\"Change the dependent strategy to one of the valid types.\",\"summary\":\"An invalid dependent strategy was defined for the association: %{association}. The valid strategies are: %{valid_strategies}.\"},\"invalid_discriminator_key_target\":{\"message\":\"Setting the discriminator key on a child class is not allowed.\",\"resolution\":\"Try setting the discriminator key on %{superclass} or one of %{class_name}\\'s ancestors.\",\"summary\":\"The discriminator key on the class %{class_name} was attempted to be changed. Changing the discriminator key on a child class is not allowed.\"},\"invalid_dot_dollar_assignment\":{\"message\":\"Cannot set the %{attr} attribute on the %{klass} class.\",\"resolution\":\"In order to set fields that start with a dollar sign ($) or contain a dot/period (.), the aggregation pipeline can be used. MongoDB provides specific operators for working with these fields. Refer to the MongoDB documentation here: https://www.mongodb.com/docs/manual/core/dot-dollar-considerations/\",\"summary\":\"Calling the setters for fields that start with a dollar sign ($) or contain a dot/period (.) is prohibited. See the Mongoid documentation on Field Names with Dots/Periods (.) and Dollar Signs ($) for more information.\"},\"invalid_elem_match_operator\":{\"message\":\"Invalid $elemMatch operator \\'%{operator}\\'.\",\"resolution\":\"Valid field operators are: %{valid_operators}. Ensure you are using one of these operators.\",\"summary\":\"You misspelled an operator or are using an operator that Mongoid does not support.\"},\"invalid_estimated_count_criteria\":{\"message\":\"Invalid criteria for estimated_count.\",\"resolution\":\"Try calling estimated_count directly on the class: %{class_name}.estimated_count.\\\\n\\\\n  If the class defines a default scope, use unscoped: %{class_name}.unscoped.estimated_count.\",\"summary\":\"Estimated count is strictly a collection-level operation and cannot be called on a filtered criteria.\"},\"invalid_expression_operator\":{\"message\":\"Invalid expression operator \\'%{operator}\\'.\",\"resolution\":\"Valid expression operators are: %{valid_operators}. Ensure you are using one of these operators.\",\"summary\":\"You misspelled an operator, are using an operator that Mongoid does not support, or are trying to use a field-level operator on expression level.\"},\"invalid_field\":{\"message\":\"Defining a field named \\'%{field}\\' is not allowed.\",\"resolution\":\"Use Mongoid.destructive_fields to see what names are not allowed, and don\\'t use these names. These include names that also conflict with core Ruby methods on Object, Module, Enumerable, or included gems that inject methods into these or Mongoid internals.\",\"summary\":\"Defining this field would override the method \\'%{name}\\', which would cause issues with expectations around the original method and cause extremely hard to debug issues. The original method was defined in:\\\\n   Object: %{origin}\\\\n   File: %{file}\\\\n   Line: %{line}\"},\"invalid_field_operator\":{\"message\":\"Invalid field operator \\'%{operator}\\'.\",\"resolution\":\"Valid field operators are: %{valid_operators}. Ensure you are using one of these operators.\",\"summary\":\"You misspelled an operator, are using an operator that Mongoid does not support, or are trying to use an expression-level operator on field level.\"},\"invalid_field_option\":{\"message\":\"Invalid option :%{option} provided for field :%{name}.\",\"resolution\":\"When defining the field :%{name} on \\'%{klass}\\', please provide valid options for the field. These are currently: %{valid}. If you meant to define a custom field option, please do so first as follows:\\\\n\\\\n   Mongoid::Fields.option :%{option} do |model, field, value|\\\\n     # Your logic here...\\\\n   end\\\\n   class %{klass}\\\\n     include Mongoid::Document\\\\n     field :%{name}, %{option}: true\\\\n   end\\\\n\\\\n Refer to: https://www.mongodb.com/docs/mongoid/current/reference/fields/#custom-field-options\",\"summary\":\"Mongoid requires that you only provide valid options on each field definition in order to prevent unexpected behavior later on.\"},\"invalid_field_type\":{\"message\":\"Invalid field type %{type_inspection} for field \\'%{field}\\' on model \\'%{klass}\\'.\",\"resolution\":\"Please provide a valid type value for the field. Refer to: https://www.mongodb.com/docs/mongoid/current/reference/fields/#using-symbols-or-strings-instead-of-classes\",\"summary\":\"Model \\'%{klass}\\' defines a field \\'%{field}\\' with an unknown type value %{type_inspection}.\"},\"invalid_global_executor_concurrency\":{\"message\":\"Invalid global_executor_concurrency option.\",\"resolution\":\"Set global_executor_concurrency option to :global_thread_pool or remove global_executor_concurrency option.\",\"summary\":\"You set global_executor_concurrency while async_query_executor option is not set to :global_thread_pool. The global_executor_concurrency is allowed only for the global thread pool executor.\"},\"invalid_includes\":{\"message\":\"Invalid includes directive: %{klass}.includes(%{args})\",\"resolution\":\"Ensure that each parameter passed to %{klass}.includes is a valid name of an association on the %{klass} model. These are: %{relations}.\",\"summary\":\"Eager loading in Mongoid only supports providing arguments to %{klass}.includes that are the names of associations on the %{klass}.\"},\"invalid_index\":{\"message\":\"Invalid index specification on %{klass}: %{spec}, %{options}\",\"resolution\":\"Ensure that the index conforms to the correct syntax and has the correct options.\\\\n\\\\n Valid options are:\\\\n   background: true|false\\\\n   database: \\'database_name\\'\\\\n   name: \\'index_name\\'\\\\n   sparse: true|false\\\\n   unique: true|false\\\\n   min: 1\\\\n   max: 1\\\\n   bits: 26\\\\n   key: 26\\\\n   bucket_size : 1\\\\n   sphere_version : 1\\\\n   text_version : 1\\\\n   version : 1\\\\n   weights: { content: 1, title: 2 }\\\\n   expire_after_seconds: number_of_seconds\\\\n   partial_filter_expression\\\\n   storage_engine\\\\n   language_override\\\\n   default_language\\\\n   collation\\\\n   wildcard_projection: { \\'path.to.field.a\\': 1, \\'path.to.field.b\\': 0 }\\\\n Valid types are: 1, -1, \\'2d\\', \\'2dsphere\\', \\'geoHaystack (deprecated)\\', \\'text\\', \\'hashed\\'\\\\n\\\\n Example:\\\\n   class Band\\\\n     include Mongoid::Document\\\\n     index({ name: 1, label: -1 }, { sparse: true })\\\\n     index({ location: \\'2d\\' }, { background: true })\\\\n   end\\\\n\\\\n\",\"summary\":\"Indexes in Mongoid are defined as a hash of field name and direction/2d pairs, with a hash for any additional options.\"},\"invalid_options\":{\"message\":\"Invalid option :%{invalid} provided to association :%{name}.\",\"resolution\":\"Valid options are: %{valid}, make sure these are the ones you are using.\",\"summary\":\"Mongoid checks the options that are passed to the association macros to ensure that no ill side effects occur by letting something slip by.\"},\"invalid_path\":{\"message\":\"Having a root path assigned for %{klass} is invalid.\",\"resolution\":\"Most likely your embedded model, %{klass} is also referenced via a has_many from a root document in another collection. Double check the association definitions and fix any instances where embedded documents are improperly referenced from other collections.\",\"summary\":\"Mongoid has two different path objects for determining the location of a document in the database, Root and Embedded. This error is raised when an embedded document somehow gets a root path assigned.\"},\"invalid_persistence_option\":{\"message\":\"Invalid persistence option :%{invalid}.\",\"resolution\":\"Valid options are: %{valid}, make sure these are the ones you are using.\",\"summary\":\"The options used to change the persistence context must be one of the valid options for a mongo client, or a collection name.\"},\"invalid_relation\":{\"message\":\"Defining an association named \\'%{name}\\' is not allowed.\",\"resolution\":\"Use Mongoid.destructive_fields to see what names are not allowed, and don\\'t use these names. These include names that also conflict with core Ruby methods on Object, Module, Enumerable, or included gems that inject methods into these or Mongoid internals.\",\"summary\":\"Defining this association would override the method \\'%{name}\\', which would cause issues with expectations around the original method and cause extremely hard to debug issues. The original method was defined in:\\\\n   Object: %{origin}\\\\n   File: %{file}\\\\n   Line: %{line}\"},\"invalid_relation_option\":{\"message\":\"Invalid association option :%{option} for association \\'%{name}\\' on class %{klass}.\",\"resolution\":\"Valid options are: %{valid_options}, make sure you use only those.\",\"summary\":\"An invalid option was provided for an association.\"},\"invalid_scope\":{\"message\":\"Defining a scope of value %{value} on %{klass} is not allowed.\",\"resolution\":\"Change the scope to be a proc wrapped criteria.\\\\n\\\\n Example:\\\\n   class Band\\\\n     include Mongoid::Document\\\\n     scope :inactive, -\\\\u003e{ where(active: false) }\\\\n   end\\\\n\\\\n\",\"summary\":\"Scopes in Mongoid must be procs that wrap criteria objects.\"},\"invalid_session_nesting\":{\"message\":\"A session was started while another session was being used.\",\"resolution\":\"Only use one session at a time; sessions cannot be nested.\",\"summary\":\"Sessions cannot be nested. Only one session can be used in a thread at once.\"},\"invalid_session_use\":{\"message\":\"A session was attempted to be used with a model whose client cannot use that session.\",\"resolution\":\"Only execute operations on the model class or instances of the model through which the session was created. Otherwise, ensure that all models on which operations are executed in the session block share the same driver client. For example, a model may have a different client specified in its \\'store_in\\' options.\\\\n\\\\n\",\"summary\":\"Sessions are started via driver clients (Model#mongo_client) and, in most cases, driver clients are shared across models. When different models have their own clients, a session cannot be obtained via one model and used for operations on another model.\"},\"invalid_set_polymorphic_relation\":{\"message\":\"The %{name} attribute can\\'t be set to an instance of %{other_klass} as %{other_klass} has multiple associations referencing %{klass} as %{name}.\",\"resolution\":\"Set the values from the parent, or redefine the association with only a single definition in the parent.\",\"summary\":\"If the parent class of a polymorphic association has multiple definitions for the same association, the values must be set from the parent side and not the child side since Mongoid cannot determine from the child side which association to go in.\"},\"invalid_storage_options\":{\"message\":\"Invalid options passed to %{klass}.store_in: %{options}.\",\"resolution\":\"Change the options passed to store_in to match the documented API, and ensure all keys in the options hash are symbols.\\\\n\\\\n Example:\\\\n   class Band\\\\n     include Mongoid::Document\\\\n     store_in collection: \\'artists\\', database: \\'music\\'\\\\n   end\\\\n\\\\n\",\"summary\":\"The :store_in macro takes only a hash of parameters with the keys :database, :collection, :collection_options, or :client.\"},\"invalid_time\":{\"message\":\"\\'%{value}\\' is not a valid Time.\",\"resolution\":\"Make sure to pass parsable values to the field setter for Date, DateTime, and Time objects. When this is a String it needs to be valid for Time.parse. Other objects must be valid to pass to Time.local.\",\"summary\":\"Mongoid tries to serialize the values for Date, DateTime, and Time into proper UTC times to store in the database. The provided value could not be parsed.\"},\"inverse_not_found\":{\"message\":\"When adding a(n) %{klass} to %{base}#%{name}, Mongoid could not determine the inverse foreign key to set. The attempted key was \\'%{inverse}\\'.\",\"resolution\":\"If an inverse is not required, like a belongs_to or has_and_belongs_to_many, ensure that :inverse_of =\\\\u003e nil is set on the association. If the inverse is needed, most likely the inverse cannot be figured out from the names of the associations and you will need to explicitly tell Mongoid on the association what the inverse is.\\\\n\\\\n Example:\\\\n   class Car\\\\n     include Mongoid::Document\\\\n     has_one :engine, class_name: \\\\\"Motor\\\\\", inverse_of: :machine\\\\n   end\\\\n\\\\n   class Motor\\\\n     include Mongoid::Document\\\\n     belongs_to :machine, class_name: \\\\\"Car\\\\\", inverse_of: :engine\\\\n   end\",\"summary\":\"When adding a document to an association, Mongoid attempts to link the newly added document to the base of the association in memory, as well as set the foreign key to link them on the database side. In this case Mongoid could not determine what the inverse foreign key was.\"},\"message_title\":\"message\",\"mixed_client_configuration\":{\"message\":\"Both uri and standard configuration options defined for client: \\'%{name}\\'.\",\"resolution\":\"Provide either only a uri as configuration or only standard options.\",\"summary\":\"Instead of simply giving uri or standard options a preference order, Mongoid assumes that you have made a mistake in your configuration and requires that you provide one or the other, but not both. The options that were provided were: %{config}.\"},\"mixed_relations\":{\"message\":\"Referencing a(n) %{embedded} document from the %{root} document via a non-embedded association is not allowed since the %{embedded} is embedded.\",\"resolution\":\"Consider not embedding %{embedded}, or do the key storage and access in a custom manner in the application code.\",\"summary\":\"In order to properly access a(n) %{embedded} from %{root} the reference would need to go through the root document of %{embedded}. In a simple case this would require Mongoid to store an extra foreign key for the root, in more complex cases where %{embedded} is multiple levels deep a key would need to be stored for each parent up the hierarchy.\"},\"nested_attributes_metadata_not_found\":{\"message\":\"Could not find metadata for association \\'%{name}\\' on model: %{klass}.\",\"resolution\":\"Make sure that there is an association defined named \\'%{name}\\' on %{klass} or that the association definition comes before the accepts_nested_attributes_for macro in the model - order matters so that Mongoid has access to the metadata.\\\\n\\\\n Example:\\\\n   class Band\\\\n     include Mongoid::Document\\\\n     has_many :albums\\\\n     accepts_nested_attributes_for :albums\\\\n   end\\\\n\\\\n\",\"summary\":\"When defining nested attributes for an association, Mongoid needs to access the metadata for the association \\'%{name}\\' in order if add autosave functionality to it, if applicable. Either no association named \\'%{name}\\' could be found, or the association had not been defined yet.\"},\"no_client_config\":{\"message\":\"No configuration could be found for a client named \\'%{name}\\'.\",\"resolution\":\"Double check your mongoid.yml to make sure under the clients key that a configuration exists for \\'%{name}\\'. If you have set the configuration programmatically, ensure that \\'%{name}\\' exists in the configuration hash.\",\"summary\":\"When attempting to create the new client, Mongoid could not find a client configuration for the name: \\'%{name}\\'. This is necessary in order to know the host, port, and options needed to connect.\"},\"no_client_database\":{\"message\":\"No database provided for client configuration: :%{name}.\",\"resolution\":\"If configuring via a mongoid.yml, ensure that within your :%{name} section a :database value for the client\\'s default database is defined.\\\\n\\\\n Example:\\\\n   development:\\\\n     clients:\\\\n       %{name}:\\\\n         database: my_app_db\\\\n         hosts:\\\\n           - localhost:27017\\\\n\\\\n\",\"summary\":\"Each client configuration must provide a database so Mongoid knows where the default database to persist to. What was provided was: %{config}.\"},\"no_client_hosts\":{\"message\":\"No hosts provided for client configuration: :%{name}.\",\"resolution\":\"If configuring via a mongoid.yml, ensure that within your :%{name} section a :hosts value for the client hosts is defined.\\\\n\\\\n Example:\\\\n   development:\\\\n     clients:\\\\n       %{name}:\\\\n         database: my_app_db\\\\n         hosts:\\\\n           - localhost:27017\\\\n\\\\n\",\"summary\":\"Each client configuration must provide hosts so Mongoid knows where the database server is located. What was provided was: %{config}.\"},\"no_clients_config\":{\"message\":\"No clients configuration provided.\",\"resolution\":\"Double check your mongoid.yml to make sure that you have a top-level clients key with at least 1 default client configuration for it. You can regenerate a new mongoid.yml for assistance via `rails g mongoid:config`.\\\\n\\\\n Example:\\\\n   development:\\\\n     clients:\\\\n       default:\\\\n         database: mongoid_dev\\\\n         hosts:\\\\n           - localhost:27017\\\\n\\\\n\",\"summary\":\"Mongoid\\'s configuration requires that you provide details about each client that can be connected to, and requires in the clients config at least 1 default client to exist.\"},\"no_default_client\":{\"message\":\"No default client configuration is defined.\",\"resolution\":\"If configuring via a mongoid.yml, ensure that within your :clients section a :default client is defined.\\\\n\\\\n Example:\\\\n   development:\\\\n     clients:\\\\n       default:\\\\n         hosts:\\\\n           - localhost:27017\\\\n\\\\n\",\"summary\":\"The configuration provided settings for: %{keys}, but Mongoid requires a :default to be defined at minimum.\"},\"no_documents_found\":{\"message\":\"Could not find a document of class %{klass}.\",\"resolution\":\"Create a document of class %{klass} or use a finder method that does not raise an exception when no documents are found.\",\"summary\":\"Mongoid attempted to find a document of the class %{klass} but none exist.\"},\"no_environment\":{\"message\":\"Could not load the configuration since no environment was defined.\",\"resolution\":\"Please ensure an environment is set in one of the listed locations. The environment must be explicitly set.\",\"summary\":\"Mongoid could not determine the environment to use because it was not specified in any of the following locations: Rails.env, Sinatra::Base.environment, ENV[\\\\\"RACK_ENV\\\\\"], ENV[\\\\\"MONGOID_ENV\\\\\"]. Without knowing the environment, Mongoid cannot load its configuration.\"},\"no_map_reduce_output\":{\"message\":\"No output location was specified for the map/reduce operation.\",\"resolution\":\"Provide the location that the output of the operation is to go by chaining an #out call to the map/reduce.\\\\n\\\\n Example:\\\\n   Band.map_reduce(map, reduce).out(inline: 1)\\\\n\\\\n Valid options for the out function are:\\\\n   inline: 1\\\\n   merge: \\'collection-name\\'\\\\n   replace: \\'collection-name\\'\\\\n   reduce: \\'collection-name\\'\\\\n\\\\n\",\"summary\":\"When executing a map/reduce, you must provide the output location of the results. The attempted command was: %{command}.\"},\"no_metadata\":{\"message\":\"Metadata not found for document of type %{klass}.\",\"resolution\":\"Ensure that your associations on the %{klass} model are all properly defined, and that the inverse associations are also properly defined. Embedded associations must have both the parent (embeds_one/embeds_many) and the inverse (embedded_in) present in order to work properly.\",\"summary\":\"Mongoid sets the metadata of an association on the document when it is either loaded from within the association, or added to one. The presence of the metadata is required in order to provide various functionality around associations. Most likely you are getting this error because the document is embedded and was attempted to be persisted without being associated with a parent, or the association was not properly defined.\"},\"no_parent\":{\"message\":\"Cannot persist embedded document %{klass} without a parent document.\",\"resolution\":\"Ensure that you\\'ve set the parent association if instantiating the embedded document directly, or always create new embedded documents via the parent association.\",\"summary\":\"If the document is embedded, in order to be persisted it must always have a reference to its parent document. This is most likely caused by either calling %{klass}.create or %{klass}.create! without setting the parent document as an attribute.\"},\"readonly_attribute\":{\"message\":\"Attempted to set the readonly attribute \\'%{name}\\' with the value: %{value}.\",\"resolution\":\"Don\\'t define \\'%{name}\\' as readonly, or do not attempt to update its value after the document is persisted.\",\"summary\":\"Attributes flagged as readonly via Model.attr_readonly can only have values set when the document is a new record.\"},\"readonly_document\":{\"message\":\"Attempted to persist a readonly document of class \\'%{klass}\\'.\",\"resolution\":\"Don\\'t attempt to persist documents that are flagged as readonly.\",\"summary\":\"Documents that are marked readonly cannot be persisted.\"},\"resolution_title\":\"resolution\",\"scope_overwrite\":{\"message\":\"Cannot create scope :%{scope_name}, because of existing method %{model_name}.%{scope_name}.\",\"resolution\":\"Change the name of the scope so it does not conflict with the already defined method %{model_name}, or set the configuration option Mongoid.scope_overwrite_exception to false, which is its default. In this case a warning will be logged.\",\"summary\":\"When defining a scope that conflicts with a method that already exists on the model, this error will get raised if Mongoid.scope_overwrite_exception is set to true.\"},\"sessions_not_supported\":{\"message\":\"Sessions are not supported by the connected server(s).\",\"resolution\":\"Verify that all servers in your deployment are at least version 3.6 or don\\'t attempt to use sessions with older server versions.\",\"summary\":\"A session was attempted to be used with a MongoDB server version that doesn\\'t support sessions. Sessions are supported in MongoDB server versions 3.6 and higher.\"},\"summary_title\":\"summary\",\"too_many_nested_attribute_records\":{\"message\":\"Accepting nested attributes for %{association} is limited to %{limit} documents.\",\"resolution\":\"The limit is set as an option to the macro, for example: accepts_nested_attributes_for :%{association}, limit: %{limit}. Consider raising this limit or making sure no more are sent than the set value.\",\"summary\":\"More documents were sent to be processed than the allowed limit.\"},\"unknown_attribute\":{\"message\":\"Attempted to set a value for \\'%{name}\\' which is not allowed on the model %{klass}.\",\"resolution\":\"Define the field \\'%{name}\\' in %{klass}, or include Mongoid::Attributes::Dynamic in %{klass} if you intend to store values in fields that are not explicitly defined.\",\"summary\":\"%{klass}#%{name}= was called but there is no \\'%{name}\\' field defined in the model, and Mongoid::Attributes::Dynamic is not included. This error is also raised instead of NoMethodError if the unknown attribute is passed to any method that accepts an attributes hash, such as #attributes=.\"},\"unknown_model\":{\"message\":\"Attempted to instantiate an object of the unknown model \\'%{klass}\\'.\",\"resolution\":\"The _type field is a reserved one used by Mongoid to determine the class for instantiating an object. Please don\\'t save data in this field or ensure that any values in this field correspond to valid models.\",\"summary\":\"A document with the value \\'%{value}\\' at the key \\'_type\\' was used to instantiate a model object but Mongoid cannot find this Class.\"},\"unsaved_document\":{\"message\":\"Attempted to save %{document} before the parent %{base}.\",\"resolution\":\"Make sure to only use create or create! when the parent document %{base} is persisted.\",\"summary\":\"You cannot call create or create! through the association (%{document}) whose parent (%{base}) is not already saved. This would cause the database to be out of sync since the child could potentially reference a nonexistent parent.\"},\"unsupported_javascript\":{\"message\":\"Executing Javascript $where selector on an embedded criteria is not supported.\",\"resolution\":\"Please provide a standard hash to #where when the criteria is for an embedded association.\",\"summary\":\"Mongoid only supports providing a hash of arguments to #where criterion on embedded documents. Since %{klass} is embedded, the expression %{javascript} is not allowed.\"},\"validations\":{\"message\":\"Validation of %{document} failed.\",\"resolution\":\"Try persisting the document with valid data or remove the validations.\",\"summary\":\"The following errors were found: %{errors}\"}}}},\"number\":{\"currency\":{\"format\":{\"delimiter\":\",\",\"format\":\"%u%n\",\"negative_format\":\"-%u%n\",\"precision\":2,\"separator\":\".\",\"significant\":false,\"strip_insignificant_zeros\":false,\"unit\":\"$\"}},\"format\":{\"delimiter\":\",\",\"precision\":3,\"round_mode\":\"default\",\"separator\":\".\",\"significant\":false,\"strip_insignificant_zeros\":false},\"human\":{\"decimal_units\":{\"format\":\"%n %u\",\"units\":{\"billion\":\"Billion\",\"million\":\"Million\",\"quadrillion\":\"Quadrillion\",\"thousand\":\"Thousand\",\"trillion\":\"Trillion\",\"unit\":\"\"}},\"format\":{\"delimiter\":\"\",\"precision\":3,\"significant\":true,\"strip_insignificant_zeros\":true},\"storage_units\":{\"format\":\"%n %u\",\"units\":{\"byte\":{\"one\":\"Byte\",\"other\":\"Bytes\"},\"eb\":\"EB\",\"gb\":\"GB\",\"kb\":\"KB\",\"mb\":\"MB\",\"pb\":\"PB\",\"tb\":\"TB\",\"zb\":\"ZB\"}}},\"nth\":{},\"percentage\":{\"format\":{\"delimiter\":\"\",\"format\":\"%n%\"}},\"precision\":{\"format\":{\"delimiter\":\"\"}}},\"simple_form\":{\"error_notification\":{\"default_message\":\"Please review the problems below:\"},\"no\":\"No\",\"required\":{\"mark\":\"*\",\"text\":\"required\"},\"yes\":\"Yes\"},\"support\":{\"array\":{\"last_word_connector\":\", and \",\"two_words_connector\":\" and \",\"words_connector\":\", \"}},\"time\":{\"am\":\"am\",\"formats\":{\"default\":\"%a, %d %b %Y %H:%M:%S %z\",\"long\":\"%B %d, %Y %H:%M\",\"short\":\"%d %b %H:%M\"},\"pm\":\"pm\"},\"users\":{\"confirmations\":{\"new\":{\"legend\":\"Resend your %{brand_name} confirmation instructions\",\"message\":\"We need to confirm your email address to complete the sign up process. Supply your email address, below, and we will send you instructions on how to confirm your address.\",\"submit_button\":\"Send Confirmation Instructions\",\"title\":\"Resend confirmation instructions | %{brand_name}\"},\"show\":{\"legend\":\"Check your inbox for a confirmation email\",\"message\":\"If your e-mail exists in our database we have sent you a message with instructions. Check your inbox (or spam folder) for a message from \\'%{default_from_email}\\' containing the confirmation link.\",\"title\":\"Awaiting confirmation | %{brand_name}\"}},\"passwords\":{\"new\":{\"failures\":\"Note: If you make more than 5 sequential failed attempts to sign in with your %{brand_name} password, your account will be (temporarily) locked. Check your inbox for instruction on how to unlock your account, or we can\",\"legend\":\"Reset your %{brand_name} password\",\"message\":\"Supply your email address, below, and we will send you instructions on how to reset your password.\",\"resend_link\":\"resend a new set of unlock instructions\",\"submit_button\":\"Send Reset Instructions\",\"title\":\"Reset password | %{brand_name}\"},\"show\":{\"didnt_receive_email\":\"Didn\\'t receive the email?\",\"legend\":\"Password reset instructions sent\",\"message\":\"If your e-mail exists in our database we have sent you a message with password reset instructions. Check your inbox (or spam folder) for a message from \\'%{default_from_email}\\'.\",\"resend_link\":\"you can request another one here\",\"title\":\"Awaiting reset | %{brand_name}\"}}},\"will_paginate\":{\"container_aria_label\":\"Pagination\",\"next_label\":\"Next \\\\u0026#8594;\",\"page_aria_label\":\"Page %{page}\",\"page_entries_info\":{\"multi_page\":\"Displaying %{model} %{from} - %{to} of %{count} in total\",\"multi_page_html\":\"Displaying %{model} \\\\u003cb\\\\u003e%{from}\\\\u0026nbsp;-\\\\u0026nbsp;%{to}\\\\u003c/b\\\\u003e of \\\\u003cb\\\\u003e%{count}\\\\u003c/b\\\\u003e in total\",\"single_page\":{\"one\":\"Displaying 1 %{model}\",\"other\":\"Displaying all %{count} %{model}\",\"zero\":\"No %{model} found\"},\"single_page_html\":{\"one\":\"Displaying \\\\u003cb\\\\u003e1\\\\u003c/b\\\\u003e %{model}\",\"other\":\"Displaying \\\\u003cb\\\\u003eall\\\\u0026nbsp;%{count}\\\\u003c/b\\\\u003e %{model}\",\"zero\":\"No %{model} found\"}},\"page_gap\":\"\\\\u0026hellip;\",\"previous_label\":\"\\\\u0026#8592; Previous\"}}'));\nI18n.translations[\"bio_invest\"] = I18n.extend((I18n.translations[\"bio_invest\"] || {}), JSON.parse('{\"activerecord\":{\"errors\":{\"messages\":{\"record_invalid\":\"Validation failed: %{errors}\",\"restrict_dependent_destroy\":{\"has_many\":\"Cannot delete record because dependent %{record} exist\",\"has_one\":\"Cannot delete record because a dependent %{record} exists\"}}}},\"brand\":{\"logo\":{\"full_image\":{\"file_name\":\"bio_invest_logo.png\",\"path\":\"images/brand_specific/bio_invest/bio_invest_logo.png\"},\"header\":{\"path\":\"/images/brand_specific/bio_invest/bio_invest_logo.png\"},\"mark_only\":{\"file_name\":\"bio_invest_logo.png\",\"path\":\"images/brand_specific/bio_invest/bio_invest_logo.png\"}},\"meta\":{\"description\":\"BioBackers: Find your financial partner.\",\"image\":\"https://biotech_investors.lumerate.com/images/brand_specific/bio_invest/bio_invest_logo.png\",\"title\":\"BioBackers: Find your financial partner.\"},\"name\":\"BioBackers\",\"tag_line\":\"Find your financial partner.\"},\"bulk_uploads\":{\"email_local_part\":{\"empty_parameter\":\"No file uploaded\",\"error\":\"File Upload failed: %{error_message}\",\"success\":\"File was successfully uploaded\"}},\"common\":{\"crm\":{\"salesforce\":{\"forgot_password\":\"If you have forgotten your Salesforce password, please follow the instructions provided on the Salesforce sign in page.\",\"sign_in_button\":\"Sign In with Salesforce\"}}},\"contact\":{\"default_from_email\":\"biobackers@lumerate.com\",\"phone_numbers\":[{\"label\":\"US\",\"phone\":\"1-844-996-3321\"},{\"label\":\"UK\",\"phone\":\"+44-208-133-9963\"}],\"support_email\":\"biobackers@lumerate.com\"},\"date\":{\"abbr_day_names\":[\"Sun\",\"Mon\",\"Tue\",\"Wed\",\"Thu\",\"Fri\",\"Sat\"],\"abbr_month_names\":[null,\"Jan\",\"Feb\",\"Mar\",\"Apr\",\"May\",\"Jun\",\"Jul\",\"Aug\",\"Sep\",\"Oct\",\"Nov\",\"Dec\"],\"day_names\":[\"Sunday\",\"Monday\",\"Tuesday\",\"Wednesday\",\"Thursday\",\"Friday\",\"Saturday\"],\"formats\":{\"default\":\"%Y-%m-%d\",\"long\":\"%B %d, %Y\",\"short\":\"%b %d\"},\"month_names\":[null,\"January\",\"February\",\"March\",\"April\",\"May\",\"June\",\"July\",\"August\",\"September\",\"October\",\"November\",\"December\"],\"order\":[\"year\",\"month\",\"day\"]},\"datetime\":{\"distance_in_words\":{\"about_x_hours\":{\"one\":\"about 1 hour\",\"other\":\"about %{count} hours\"},\"about_x_months\":{\"one\":\"about 1 month\",\"other\":\"about %{count} months\"},\"about_x_years\":{\"one\":\"about 1 year\",\"other\":\"about %{count} years\"},\"almost_x_years\":{\"one\":\"almost 1 year\",\"other\":\"almost %{count} years\"},\"half_a_minute\":\"half a minute\",\"less_than_x_minutes\":{\"one\":\"less than a minute\",\"other\":\"less than %{count} minutes\"},\"less_than_x_seconds\":{\"one\":\"less than 1 second\",\"other\":\"less than %{count} seconds\"},\"over_x_years\":{\"one\":\"over 1 year\",\"other\":\"over %{count} years\"},\"x_days\":{\"one\":\"1 day\",\"other\":\"%{count} days\"},\"x_minutes\":{\"one\":\"1 minute\",\"other\":\"%{count} minutes\"},\"x_months\":{\"one\":\"1 month\",\"other\":\"%{count} months\"},\"x_seconds\":{\"one\":\"1 second\",\"other\":\"%{count} seconds\"}},\"prompts\":{\"day\":\"Day\",\"hour\":\"Hour\",\"minute\":\"Minute\",\"month\":\"Month\",\"second\":\"Seconds\",\"year\":\"Year\"}},\"default_host\":\"https://biotech_investors.lumerate.com\",\"devise\":{\"confirmations\":{\"confirmed\":\"Your account was successfully confirmed. Please sign in.\",\"send_instructions\":\"Your email has not been confirmed. We need to confirm your email account before you can sign in. Please check your inbox or spam folder for an email from \\'info@zymewire.com\\' or request a new one.\",\"send_paranoid_instructions\":\"If your e-mail exists on our database, you will receive an email with instructions about how to confirm your account in a few minutes.\"},\"failure\":{\"already_authenticated\":\"You are already signed in.\",\"expired\":\"Your account has expired due to inactivity. Please contact the site administrator.\",\"inactive\":\"Your account was not activated yet.\",\"invalid\":\"Invalid email or password. If you use Salesforce, use the \\'Have Salesforce?\\' panel.\",\"invalid_token\":\"Invalid authentication token.\",\"last_attempt\":\"You have one more attempt before your account is locked.\",\"locked\":\"Your account is locked.\",\"not_active\":\"Your account has been de-activated, if you think this is a mistake please contact us\",\"not_found_in_database\":\"Invalid %{authentication_keys} or password.\",\"session_limited\":\"Your login credentials were used in another browser. Please sign in again to continue in this browser.\",\"timeout\":\"Your session expired, please sign in again to continue.\",\"unauthenticated\":\"You need to sign in or sign up before continuing.\",\"unconfirmed\":\"We must confirm your email before you can continue. Please check your inbox or spam folder for a confirmation email from \\'info@zymewire.com\\' or request a new one.\"},\"invalid_captcha\":\"The captcha input is not valid!\",\"invalid_security_question\":\"The security question answer was invalid.\",\"mailer\":{\"confirmation_instructions\":{\"subject\":\"Confirmation instructions for Zymewire.com\"},\"email_changed\":{\"subject\":\"Email Changed\"},\"password_change\":{\"subject\":\"Password Changed\"},\"reset_password_instructions\":{\"subject\":\"Reset password instructions for Zymewire.com\"},\"unlock_instructions\":{\"subject\":\"Unlock Instructions for Zymewire.com\"}},\"omniauth_callbacks\":{\"failure\":\"Could not authorize you from %{kind} because \\\\\"%{reason}\\\\\".\",\"success\":\"Successfully authorized from %{kind} account.\"},\"paranoid_verification_code\":{\"show\":{\"submit\":\"Submit\",\"submit_verification_code\":\"Submit verification code\",\"verification_code\":\"Verification code\"},\"updated\":\"Verification code accepted\"},\"paranoid_verify\":{\"code_required\":\"Please enter the code our support team provided\"},\"password_expired\":{\"change_required\":\"Your password has expired. Please choose a new password!\",\"show\":{\"change_my_password\":\"Change my password\",\"current_password\":\"Current password\",\"new_password\":\"New password\",\"new_password_confirmation\":\"Confirm new password\",\"renew_your_password\":\"Renew your password\"},\"updated\":\"Your new password is saved.\"},\"passwords\":{\"no_token\":\"You can\\'t access this page without coming from a password reset email. If you do come from a password reset email, please make sure you used the full URL provided.\",\"send_instructions\":\"You will receive an email with instructions about how to reset your password in a few minutes.\",\"send_paranoid_instructions\":\"If your e-mail exists on our database, you will receive a password recovery link on your e-mail\",\"updated\":\"Your password was changed successfully. You are now signed in.\",\"updated_not_active\":\"Your password was changed successfully.\"},\"registrations\":{\"destroyed\":\"Bye! Your account was successfully cancelled. We hope to see you again soon.\",\"signed_up\":\"Welcome! You have signed up successfully.\",\"signed_up_but_inactive\":\"You have signed up successfully. However, we could not sign you in because your account is not yet activated.\",\"signed_up_but_locked\":\"You have signed up successfully. However, we could not sign you in because your account is locked.\",\"signed_up_but_unconfirmed\":\"A message with a confirmation link has been sent to your email address. Please open the link to activate your account.\",\"update_needs_confirmation\":\"You updated your account successfully, but we need to verify your new email address. Please check your email and click on the confirm link to finalize confirming your new email address.\",\"updated\":\"You updated your account successfully.\",\"updated_but_not_signed_in\":\"Your account has been updated successfully, but since your password was changed, you need to sign in again.\"},\"sessions\":{\"already_signed_out\":\"Signed out successfully.\",\"signed_in\":\"Signed in successfully.\",\"signed_out\":\"Signed out successfully.\"},\"unlocks\":{\"send_instructions\":\"You will receive an email with instructions about how to unlock your account in a few minutes.\",\"send_paranoid_instructions\":\"If your account exists, you will receive an email with instructions about how to unlock it in a few minutes.\",\"unlocked\":\"Your account has been unlocked successfully. Please sign in to continue.\"}},\"domain\":\"biotech_investors.lumerate.com\",\"download\":\"Download\",\"download_30_days\":\"This link will be available for 30 days after which the file will be removed from our servers.\",\"enumerize\":{\"blocklisted_contact\":{\"provider\":{\"insideview\":\"InsideView\",\"zephyr\":\"Zephyr\"}}},\"errors\":{\"format\":\"%{attribute} %{message}\",\"messages\":{\"accepted\":\"must be accepted\",\"already_confirmed\":\"was already confirmed, please try signing in\",\"blank\":\"can\\'t be blank\",\"confirmation\":\"doesn\\'t match %{attribute}\",\"confirmation_period_expired\":\"needs to be confirmed within %{period}, please request a new one\",\"empty\":\"can\\'t be empty\",\"equal_to\":\"must be equal to %{count}\",\"equal_to_current_password\":\"Sorry, must be different to your current password!\",\"equal_to_email\":\"must be different than the email.\",\"even\":\"must be even\",\"exclusion\":\"is reserved\",\"expired\":\"has expired, please request a new one\",\"greater_than\":\"must be greater than %{count}\",\"greater_than_or_equal_to\":\"must be greater than or equal to %{count}\",\"in\":\"must be in %{count}\",\"inclusion\":\"is not included in the list\",\"invalid\":\"is invalid\",\"less_than\":\"must be less than %{count}\",\"less_than_or_equal_to\":\"must be less than or equal to %{count}\",\"model_invalid\":\"Validation failed: %{errors}\",\"not_a_number\":\"is not a number\",\"not_an_integer\":\"must be an integer\",\"not_found\":\"not found\",\"not_locked\":\"was not locked\",\"not_saved\":{\"one\":\"1 error prohibited this %{resource} from being saved:\",\"other\":\"%{count} errors prohibited this %{resource} from being saved:\"},\"odd\":\"must be odd\",\"other_than\":\"must be other than %{count}\",\"password_complexity\":{\"digit\":{\"one\":\"must contain at least one digit\",\"other\":\"must contain at least %{count} digits\"},\"lower\":{\"one\":\"must contain at least one lower-case letter\",\"other\":\"must contain at least %{count} lower-case letters\"},\"symbol\":{\"one\":\"must contain at least one punctuation mark or symbol\",\"other\":\"must contain at least %{count} punctuation marks or symbols\"},\"upper\":{\"one\":\"must contain at least one upper-case letter\",\"other\":\"must contain at least %{count} upper-case letters\"}},\"password_format\":\"Must contain uppercase AND lowercase letters and at least one number\",\"password_too_long\":\"is too long\",\"present\":\"must be blank\",\"required\":\"must exist\",\"taken\":\"has already been taken\",\"taken_in_past\":\"Sorry, you have used this password before!\",\"too_long\":{\"one\":\"is too long (maximum is 1 character)\",\"other\":\"is too long (maximum is %{count} characters)\"},\"too_short\":{\"one\":\"is too short (minimum is 1 character)\",\"other\":\"is too short (minimum is %{count} characters)\"},\"wrong_length\":{\"one\":\"is the wrong length (should be 1 character)\",\"other\":\"is the wrong length (should be %{count} characters)\"}}},\"flash\":{\"actions\":{\"create\":{\"notice\":\"%{resource_name} was successfully created.\"},\"destroy\":{\"alert\":\"%{resource_name} could not be destroyed.\",\"notice\":\"%{resource_name} was successfully destroyed.\"},\"update\":{\"notice\":\"%{resource_name} was successfully updated.\"}}},\"hello_world\":\"Hello world\",\"help\":{\"articles\":{\"crm_mining\":\"/help/articles/13976-mine-your-companys-salesforce-for-opportunities\",\"finding_contact_info\":\"/help/articles/13987-finding-contact-information\",\"guide_d\":\"/help/guide_d\",\"guide_g\":\"/help/guide_g\",\"guide_h\":\"/help/guide_h\",\"guide_i\":\"/help/guide_i\",\"guide_j\":\"/help/guide_j\",\"list_crud_c\":\"/help/articles/13985-generating-a-list\",\"list_crud_u\":\"/help/articles/18991-adding-and-removing-individual-companies-from-a-list\",\"map_search\":\"/help/articles/13980-map-based-searching\",\"saving_feeds\":\"/help/articles/13986-saving-feeds\"},\"site\":\"https://zymewire.helpsite.com/\"},\"helpers\":{\"select\":{\"prompt\":\"Please select\"},\"submit\":{\"create\":\"Create %{model}\",\"submit\":\"Save %{model}\",\"update\":\"Update %{model}\"}},\"hi\":\"Hi\",\"industry\":\"biotech investors\",\"mailers\":{\"common\":{\"chummy_sign_off\":\"Have a good one.\",\"final_note\":\"P.S.: If you think you received this email accidentally, then something weird could be going on. Hit reply and a member of the %{brand_name} team will investigate.\",\"team_sign_off\":\"- The %{brand_name} Team\"},\"confirmation_instructions_email\":{\"crm\":{\"salesforce\":{\"resource_confirmed\":\"Someone has requested a resend of a confirmation email. You do not need to confirm your email address because your account is configured to use Salesforce to sign in.\",\"resource_unconfirmed\":\"You do not need to confirm your email address because your account is configured to use Salesforce to sign in, please complete the sign up process by clicking the button below to sign in to %{brand_name} via Salesforce.\"}},\"non_crm\":{\"confirm_link\":\"Confirm my account\",\"welcome\":\"Welcome to %{brand_name}. As the final step in the process you\\'ll need to confirm your account by clicking on the link below.\"},\"subject\":\"Confirmation instructions for %{domain}\"},\"flagged_events_mailer\":{\"from\":\"Flagged events - %{brand_name} \\\\u003cflagged_events@mailer.%{domain}\\\\u003e\"},\"mobile_registration_email\":{\"alert_cs_registration_locked\":{\"subject\":\"%{brand_name}: user has had mobile registration locked, too many failed attempts\"},\"dispatch_registration_PIN\":{\"further_instructions\":\"If you are NOT attempting to register for the %{brand_name} Mobile app then please let us know at %{support_email_link} - thank you.\",\"introduction\":\"Here is your mobile app registration PIN:\",\"subject\":\"%{brand_name} Mobile Registration Verification\"},\"too_many_failed_attempts\":{\"introduction\":\"We have received too many failed mobile device registration attempts for your account and we will block any further requests. If you have not attempted to register a mobile device with us in the last hour then please let us know as it is likely someone has tried on your behalf. If you have been trying to register a device please contact %{support_email_link} and we can help unlock your account and get you registered.\",\"subject\":\"%{brand_name}: too many failed registration attempts\"}},\"org_list_download_mail\":{\"dispatch_link\":{\"introduction\":\"We have finished meshing your %{crm_brand_name} data with the companies in your \\\\\"%{list_name}\\\\\" list.\",\"subject\":\"%{brand_name}: your file download of \\'%{list_name}\\' is ready\"},\"failed\":{\"instructions\":\"You could try again in a little while. If you already have and are receiving this email again, please contact us at %{support_email_link}\",\"introduction\":\"We are really sorry, but something went wrong with creating your download of %{crm_brand_name} data for your \\\\\"%{list_name}\\\\\" list.\",\"subject\":\"%{brand_name}: your file download of \\'%{list_name}\\' failed\"}},\"reset_password_instructions_email\":{\"crm\":{\"salesforce\":{\"change_requested\":\"Someone has requested a change to your password. Your account is configured to use Salesforce to sign in.\"}},\"fishy_fine_print\":\"If you did not request a password change, then something weird is going on. Someone may be trying to access your account (unsuccessfully). Please reply to this email and let us know. We will take steps to make sure it stops.\",\"non_crm\":{\"change_password_link\":\"Change my password\",\"change_requested\":\"Someone has requested a change to your password, you can do this via the link below.\"},\"subject\":\"Password reset instructions for %{domain}\"},\"sales_force_mail\":{\"processing_completed\":{\"bullet_points\":[\"Only show events associated with companies in your Salesforce account\",\"Add new contacts and accounts to your Salesforce account without leaving %{brand_name}\",\"Access the \\'Salesforce details\\' panel on company dashboards where you can see open tasks, team interactions, opportunities, and more!\"],\"further_instructions\":\"We\\'re here to help. If you run into any questions or challenges, please contact us at %{support_email_link} and a member of our team would be more than happy to help.\",\"get_the_most\":\"To get the most from the integration, check out the \\'Mine Salesforce for opportunities\\' guide in the Help Center.\",\"guide_button\":\"Take me to the guide\",\"introduction\":\"Good news - your Salesforce account is now integrated with %{brand_name}. Now you’ll be able to:\"}},\"segment_contact\":{\"report_manager\":{\"fail_subject\":\"%{brand_name}: The PDF report generation failed\",\"success_subject\":\"%{brand_name}: Your PDF for %{company_name} is attached\"}},\"sf_token_expiry_email\":{\"further_instructions\":\"If you run into any questions or challenges, please contact us at %{support_email_link} and a member of our team would be more than happy to help.\",\"introduction\":\"Unfortunately the connection established for you between %{brand_name} and your %{crm_brand_name} account has expired. We will not be able to update your lists in %{brand_name} to reflect your %{crm_brand_name} database. To re-establish the connection, you just need to log in to %{brand_name} using your %{crm_brand_name}.\",\"subject\":\"%{brand_name} to %{crm_brand_name} connection has expired\"},\"share_list_mail\":{\"introduction\":\"%{user_name} shared a list with you: \",\"subject\":\"[%{brand_name} - shared list] %{list_name}\"},\"trial_expiry_mail\":{\"seven_days_to_go\":{\"further_instructions\":\"A member of our fabulous Customer Success team will arrange a welcome call with you to understand your goals and priorities, and will then give you a personalized Tour de %{brand_name} so you can easily access the information that is most valuable to you.\",\"instructions\":\"If you\\'d like continued access to the platform with our flexible month-to-month subscription, please ensure you contact %{support_email_link} ahead of: %{deadline}\",\"introduction\":\"Time flies when you\\'re uncovering new business opportunities! Your %{brand_name} trial is coming to an end next week.\",\"sign_off\":\"We look forward to helping you reach your sales goals!\",\"subject\":\"Just a heads up that your %{brand_name} trial is ending in seven days\"},\"seven_days_to_go_warning_for_cs\":{\"introduction\":\"%{user_name} shared a list with you: \",\"subject\":\"[%{brand_name} - shared list] %{list_name}\"}},\"unlock_instructions_email\":{\"crm\":{\"salesforce\":{\"change_requested\":\"You are being sent this email either because of one too many unsuccessful non-Salesforce log-in attempts or someone has requested an unlock email. %{brand_name} has not locked your account because your account is configured to use Salesforce to sign in.\",\"password_forgotten\":\"If you have forgotten your Salesforce password or think your account has been locked by Salesforce, please follow the instructions provided on the Salesforce sign in page.\"}},\"fishy_fine_print\":\"If you have not been (unsuccessfully) trying to log in to your account, then something weird is going on. Someone may be trying to access your account (unsuccessfully). Please reply to this email and let us know. We will take steps to make sure it stops.\",\"non_crm\":{\"change_requested\":\"For security reasons we have locked your account because of too many log-in attempts. To unlock your account, click the link below.\",\"unlock_account_link\":\"Unlock my account\"},\"subject\":\"Unlock instructions for %{domain}\"}},\"mobile_website\":{\"cta\":\"\",\"cta_link\":\"\",\"header\":\"Desktop Access Only\",\"message\":\"Head to your desktop to sign into the BioBackers application.\",\"prompt\":\"\"},\"mongoid\":{\"errors\":{\"messages\":{\"ambiguous_relationship\":{\"message\":\"Ambiguous associations %{candidates} defined on %{klass}.\",\"resolution\":\"On the %{name} association on %{inverse} you must add an :inverse_of option to specify the exact association on %{klass} that is the opposite of %{name}.\",\"summary\":\"When Mongoid attempts to set an inverse document of an association in memory, it needs to know which association it belongs to. When setting %{name}, Mongoid looked on the class %{inverse} for a matching association, but multiples were found that could potentially match: %{candidates}.\"},\"blank_in_locale\":\"can\\'t be blank in %{location}\",\"callbacks\":{\"message\":\"Calling %{method} on %{klass} resulted in a false return from a callback.\",\"resolution\":\"Double check all before callbacks to make sure they are not unintentionally returning false.\",\"summary\":\"If a before callback returns false when using Document.create!, Document#save!, or Document#update_attributes! this error will get raised since the document did not actually get saved.\"},\"calling_document_find_with_nil_is_invalid\":{\"message\":\"Calling Document.find with nil is invalid.\",\"resolution\":\"Most likely this is caused by passing parameters directly through to the find, and the parameter either is not present or the key from which it is accessed is incorrect.\",\"summary\":\"Document.find expects the parameters to be 1 or more ids, and will return a single document if 1 id is provided, otherwise an array of documents if multiple ids are provided.\"},\"create_collection_failure\":{\"message\":\"Cannot create collection %{collection_name} with options %{collection_options}. The following error was raised: %{error}.\",\"resolution\":\"Double check that collection options for the collection %{collection_name} are valid. Consult with Ruby driver documentation and MongoDB documentation if the desired options are supported by your version of the server.\",\"summary\":\"The server rejected createCollection command with given collection options. This may happen when some of the options are invalid, or not supported by your version of the server.\"},\"criteria_argument_required\":{\"message\":\"Calling Criteria methods with nil arguments is not allowed.\",\"resolution\":\"Invoke Criteria methods with non-nil arguments or omit the respective invocations.\",\"summary\":\"Arguments to Criteria methods cannot be nil, and most Criteria methods require at least one argument. Only logical operations (and, or, nor and not), `all\\' and `where\\' can be called without arguments. The method that was called with nil argument was: %{query_method}.\"},\"delete_restriction\":{\"message\":\"Cannot destroy %{document} because of dependent \\'%{relation}\\'.\",\"resolution\":\"Don\\'t attempt to delete the parent %{document} when it has children, or change the dependent option on the association.\",\"summary\":\"When defining \\'%{relation}\\' with a :dependent =\\\\u003e :restrict_with_error, Mongoid will raise an error when attempting to destroy the %{document} when the child \\'%{relation}\\' still has documents in it.\"},\"destroy_restrict_with_error_dependencies_exist\":\"is not empty and prevents the document from being destroyed\",\"document_not_destroyed\":{\"message\":\"%{klass} with id %{id} was not destroyed.\",\"resolution\":\"Check the before/after destroy callbacks to ensure that the return values are truthy for the chain to continue.\",\"summary\":\"When calling %{klass}#destroy! and a callback halts the destroy callback chain by returning a false value, the deletion will not actually occur.\"},\"document_not_found\":{\"message\":\"Document(s) not found for class %{klass} with id(s) %{missing}.\",\"resolution\":\"Search for an id that is in the database or set the Mongoid.raise_not_found_error configuration option to false, which will cause nil to be returned instead of raising this error when searching for a single id, or only the matched documents when searching for multiples.\",\"summary\":\"When calling %{klass}.find with an id or array of ids, each parameter must match a document in the database or this error will be raised. The search was for the id(s): %{searched} (%{total} total) and the following ids were not found: %{missing}.\"},\"document_with_attributes_not_found\":{\"message\":\"Document not found for class %{klass} with attributes %{attributes}.\",\"resolution\":\"Search for attributes that are in the database or set the Mongoid.raise_not_found_error configuration option to false, which will cause nil to be returned instead of raising this error.\",\"summary\":\"When calling %{klass}.find_by with a hash of attributes, all attributes provided must match a document in the database or this error will be raised.\"},\"document_with_shard_key_not_found\":{\"message\":\"Document not found for class %{klass} with id %{missing} and shard key %{shard_key}.\",\"resolution\":\"Search for an id/shard key that is in the database or set the Mongoid.raise_not_found_error configuration option to false, which will cause nil to be returned instead of raising this error.\",\"summary\":\"When calling %{klass}.find with an id and a shard key, each parameter must match a document in the database or this error will be raised. The search was for the id: %{missing} with shard_key: %{shard_key} and it was not found.\"},\"drop_collection_failure\":{\"message\":\"Cannot drop collection %{collection_name}.\",\"resolution\":\"Try to drop the collection manually using Ruby driver or mongo shell.\",\"summary\":\"Mongoid tried to drop collection %{collection_name}, but the collection still exists in the database.\"},\"empty_config_file\":{\"message\":\"Empty configuration file: %{path}.\",\"resolution\":\"Ensure your configuration file contains the correct contents. Refer to: https://www.mongodb.com/docs/mongoid/current/reference/configuration/\",\"summary\":\"Your mongoid.yml configuration file appears to be empty.\"},\"immutable_attribute\":{\"message\":\"Attempted to change the immutable attribute \\'%{name}\\' with the value: %{value}.\",\"resolution\":\"Do not attempt to update the value of \\'%{name}\\' after the document is persisted.\",\"summary\":\"Immutable attributes can only have values set when the document is a new record.\"},\"in_memory_collation_not_supported\":{\"message\":\"A collation option cannot be applied when querying documents in-memory.\",\"resolution\":\"Remove the collation option from the query.\",\"summary\":\"The query being run against documents in memory has a collation option set. A collation option is only supported if the query is executed on a MongoDB server with version \\\\u003e= 3.4.\"},\"invalid_async_query_executor\":{\"message\":\"Invalid async_query_executor option: %{executor}.\",\"resolution\":\"Pick an allowed option or fix the typo. If you were expecting the option to be there, please consult the following page with respect to Mongoid\\'s configuration:\\\\n\\\\n   https://www.mongodb.com/docs/mongoid/current/reference/configuration/#mongoid-configuration-options\",\"summary\":\"A invalid async query executor was specified. The valid options are: %{options}.\"},\"invalid_collection\":{\"message\":\"Access to the collection for %{klass} is not allowed.\",\"resolution\":\"For access to the collection that the embedded document is in, use %{klass}#_root.collection, or do not attempt to persist an embedded document without a parent set.\",\"summary\":\"%{klass}.collection was called, and %{klass} is an embedded document - it resides within the collection of the root document of the hierarchy.\"},\"invalid_config_file\":{\"message\":\"Invalid configuration file: %{path}.\",\"resolution\":\"Ensure your configuration file contains the correct contents. Refer to: https://www.mongodb.com/docs/mongoid/current/reference/configuration/\",\"summary\":\"Your mongoid.yml configuration file does not contain the correct file structure.\"},\"invalid_config_option\":{\"message\":\"Invalid configuration option: %{name}.\",\"resolution\":\"Remove the invalid option or fix the typo. If you were expecting the option to be there, please consult the following page with respect to Mongoid\\'s configuration:\\\\n\\\\n   http://mongoid.org/en/mongoid/docs/installation.html\",\"summary\":\"A invalid configuration option was provided in your mongoid.yml, or a typo is potentially present. The valid configuration options are: %{options}.\"},\"invalid_dependent_strategy\":{\"message\":\"Invalid dependent strategy: %{invalid_strategy}.\",\"resolution\":\"Change the dependent strategy to one of the valid types.\",\"summary\":\"An invalid dependent strategy was defined for the association: %{association}. The valid strategies are: %{valid_strategies}.\"},\"invalid_discriminator_key_target\":{\"message\":\"Setting the discriminator key on a child class is not allowed.\",\"resolution\":\"Try setting the discriminator key on %{superclass} or one of %{class_name}\\'s ancestors.\",\"summary\":\"The discriminator key on the class %{class_name} was attempted to be changed. Changing the discriminator key on a child class is not allowed.\"},\"invalid_dot_dollar_assignment\":{\"message\":\"Cannot set the %{attr} attribute on the %{klass} class.\",\"resolution\":\"In order to set fields that start with a dollar sign ($) or contain a dot/period (.), the aggregation pipeline can be used. MongoDB provides specific operators for working with these fields. Refer to the MongoDB documentation here: https://www.mongodb.com/docs/manual/core/dot-dollar-considerations/\",\"summary\":\"Calling the setters for fields that start with a dollar sign ($) or contain a dot/period (.) is prohibited. See the Mongoid documentation on Field Names with Dots/Periods (.) and Dollar Signs ($) for more information.\"},\"invalid_elem_match_operator\":{\"message\":\"Invalid $elemMatch operator \\'%{operator}\\'.\",\"resolution\":\"Valid field operators are: %{valid_operators}. Ensure you are using one of these operators.\",\"summary\":\"You misspelled an operator or are using an operator that Mongoid does not support.\"},\"invalid_estimated_count_criteria\":{\"message\":\"Invalid criteria for estimated_count.\",\"resolution\":\"Try calling estimated_count directly on the class: %{class_name}.estimated_count.\\\\n\\\\n  If the class defines a default scope, use unscoped: %{class_name}.unscoped.estimated_count.\",\"summary\":\"Estimated count is strictly a collection-level operation and cannot be called on a filtered criteria.\"},\"invalid_expression_operator\":{\"message\":\"Invalid expression operator \\'%{operator}\\'.\",\"resolution\":\"Valid expression operators are: %{valid_operators}. Ensure you are using one of these operators.\",\"summary\":\"You misspelled an operator, are using an operator that Mongoid does not support, or are trying to use a field-level operator on expression level.\"},\"invalid_field\":{\"message\":\"Defining a field named \\'%{field}\\' is not allowed.\",\"resolution\":\"Use Mongoid.destructive_fields to see what names are not allowed, and don\\'t use these names. These include names that also conflict with core Ruby methods on Object, Module, Enumerable, or included gems that inject methods into these or Mongoid internals.\",\"summary\":\"Defining this field would override the method \\'%{name}\\', which would cause issues with expectations around the original method and cause extremely hard to debug issues. The original method was defined in:\\\\n   Object: %{origin}\\\\n   File: %{file}\\\\n   Line: %{line}\"},\"invalid_field_operator\":{\"message\":\"Invalid field operator \\'%{operator}\\'.\",\"resolution\":\"Valid field operators are: %{valid_operators}. Ensure you are using one of these operators.\",\"summary\":\"You misspelled an operator, are using an operator that Mongoid does not support, or are trying to use an expression-level operator on field level.\"},\"invalid_field_option\":{\"message\":\"Invalid option :%{option} provided for field :%{name}.\",\"resolution\":\"When defining the field :%{name} on \\'%{klass}\\', please provide valid options for the field. These are currently: %{valid}. If you meant to define a custom field option, please do so first as follows:\\\\n\\\\n   Mongoid::Fields.option :%{option} do |model, field, value|\\\\n     # Your logic here...\\\\n   end\\\\n   class %{klass}\\\\n     include Mongoid::Document\\\\n     field :%{name}, %{option}: true\\\\n   end\\\\n\\\\n Refer to: https://www.mongodb.com/docs/mongoid/current/reference/fields/#custom-field-options\",\"summary\":\"Mongoid requires that you only provide valid options on each field definition in order to prevent unexpected behavior later on.\"},\"invalid_field_type\":{\"message\":\"Invalid field type %{type_inspection} for field \\'%{field}\\' on model \\'%{klass}\\'.\",\"resolution\":\"Please provide a valid type value for the field. Refer to: https://www.mongodb.com/docs/mongoid/current/reference/fields/#using-symbols-or-strings-instead-of-classes\",\"summary\":\"Model \\'%{klass}\\' defines a field \\'%{field}\\' with an unknown type value %{type_inspection}.\"},\"invalid_global_executor_concurrency\":{\"message\":\"Invalid global_executor_concurrency option.\",\"resolution\":\"Set global_executor_concurrency option to :global_thread_pool or remove global_executor_concurrency option.\",\"summary\":\"You set global_executor_concurrency while async_query_executor option is not set to :global_thread_pool. The global_executor_concurrency is allowed only for the global thread pool executor.\"},\"invalid_includes\":{\"message\":\"Invalid includes directive: %{klass}.includes(%{args})\",\"resolution\":\"Ensure that each parameter passed to %{klass}.includes is a valid name of an association on the %{klass} model. These are: %{relations}.\",\"summary\":\"Eager loading in Mongoid only supports providing arguments to %{klass}.includes that are the names of associations on the %{klass}.\"},\"invalid_index\":{\"message\":\"Invalid index specification on %{klass}: %{spec}, %{options}\",\"resolution\":\"Ensure that the index conforms to the correct syntax and has the correct options.\\\\n\\\\n Valid options are:\\\\n   background: true|false\\\\n   database: \\'database_name\\'\\\\n   name: \\'index_name\\'\\\\n   sparse: true|false\\\\n   unique: true|false\\\\n   min: 1\\\\n   max: 1\\\\n   bits: 26\\\\n   key: 26\\\\n   bucket_size : 1\\\\n   sphere_version : 1\\\\n   text_version : 1\\\\n   version : 1\\\\n   weights: { content: 1, title: 2 }\\\\n   expire_after_seconds: number_of_seconds\\\\n   partial_filter_expression\\\\n   storage_engine\\\\n   language_override\\\\n   default_language\\\\n   collation\\\\n   wildcard_projection: { \\'path.to.field.a\\': 1, \\'path.to.field.b\\': 0 }\\\\n Valid types are: 1, -1, \\'2d\\', \\'2dsphere\\', \\'geoHaystack (deprecated)\\', \\'text\\', \\'hashed\\'\\\\n\\\\n Example:\\\\n   class Band\\\\n     include Mongoid::Document\\\\n     index({ name: 1, label: -1 }, { sparse: true })\\\\n     index({ location: \\'2d\\' }, { background: true })\\\\n   end\\\\n\\\\n\",\"summary\":\"Indexes in Mongoid are defined as a hash of field name and direction/2d pairs, with a hash for any additional options.\"},\"invalid_options\":{\"message\":\"Invalid option :%{invalid} provided to association :%{name}.\",\"resolution\":\"Valid options are: %{valid}, make sure these are the ones you are using.\",\"summary\":\"Mongoid checks the options that are passed to the association macros to ensure that no ill side effects occur by letting something slip by.\"},\"invalid_path\":{\"message\":\"Having a root path assigned for %{klass} is invalid.\",\"resolution\":\"Most likely your embedded model, %{klass} is also referenced via a has_many from a root document in another collection. Double check the association definitions and fix any instances where embedded documents are improperly referenced from other collections.\",\"summary\":\"Mongoid has two different path objects for determining the location of a document in the database, Root and Embedded. This error is raised when an embedded document somehow gets a root path assigned.\"},\"invalid_persistence_option\":{\"message\":\"Invalid persistence option :%{invalid}.\",\"resolution\":\"Valid options are: %{valid}, make sure these are the ones you are using.\",\"summary\":\"The options used to change the persistence context must be one of the valid options for a mongo client, or a collection name.\"},\"invalid_relation\":{\"message\":\"Defining an association named \\'%{name}\\' is not allowed.\",\"resolution\":\"Use Mongoid.destructive_fields to see what names are not allowed, and don\\'t use these names. These include names that also conflict with core Ruby methods on Object, Module, Enumerable, or included gems that inject methods into these or Mongoid internals.\",\"summary\":\"Defining this association would override the method \\'%{name}\\', which would cause issues with expectations around the original method and cause extremely hard to debug issues. The original method was defined in:\\\\n   Object: %{origin}\\\\n   File: %{file}\\\\n   Line: %{line}\"},\"invalid_relation_option\":{\"message\":\"Invalid association option :%{option} for association \\'%{name}\\' on class %{klass}.\",\"resolution\":\"Valid options are: %{valid_options}, make sure you use only those.\",\"summary\":\"An invalid option was provided for an association.\"},\"invalid_scope\":{\"message\":\"Defining a scope of value %{value} on %{klass} is not allowed.\",\"resolution\":\"Change the scope to be a proc wrapped criteria.\\\\n\\\\n Example:\\\\n   class Band\\\\n     include Mongoid::Document\\\\n     scope :inactive, -\\\\u003e{ where(active: false) }\\\\n   end\\\\n\\\\n\",\"summary\":\"Scopes in Mongoid must be procs that wrap criteria objects.\"},\"invalid_session_nesting\":{\"message\":\"A session was started while another session was being used.\",\"resolution\":\"Only use one session at a time; sessions cannot be nested.\",\"summary\":\"Sessions cannot be nested. Only one session can be used in a thread at once.\"},\"invalid_session_use\":{\"message\":\"A session was attempted to be used with a model whose client cannot use that session.\",\"resolution\":\"Only execute operations on the model class or instances of the model through which the session was created. Otherwise, ensure that all models on which operations are executed in the session block share the same driver client. For example, a model may have a different client specified in its \\'store_in\\' options.\\\\n\\\\n\",\"summary\":\"Sessions are started via driver clients (Model#mongo_client) and, in most cases, driver clients are shared across models. When different models have their own clients, a session cannot be obtained via one model and used for operations on another model.\"},\"invalid_set_polymorphic_relation\":{\"message\":\"The %{name} attribute can\\'t be set to an instance of %{other_klass} as %{other_klass} has multiple associations referencing %{klass} as %{name}.\",\"resolution\":\"Set the values from the parent, or redefine the association with only a single definition in the parent.\",\"summary\":\"If the parent class of a polymorphic association has multiple definitions for the same association, the values must be set from the parent side and not the child side since Mongoid cannot determine from the child side which association to go in.\"},\"invalid_storage_options\":{\"message\":\"Invalid options passed to %{klass}.store_in: %{options}.\",\"resolution\":\"Change the options passed to store_in to match the documented API, and ensure all keys in the options hash are symbols.\\\\n\\\\n Example:\\\\n   class Band\\\\n     include Mongoid::Document\\\\n     store_in collection: \\'artists\\', database: \\'music\\'\\\\n   end\\\\n\\\\n\",\"summary\":\"The :store_in macro takes only a hash of parameters with the keys :database, :collection, :collection_options, or :client.\"},\"invalid_time\":{\"message\":\"\\'%{value}\\' is not a valid Time.\",\"resolution\":\"Make sure to pass parsable values to the field setter for Date, DateTime, and Time objects. When this is a String it needs to be valid for Time.parse. Other objects must be valid to pass to Time.local.\",\"summary\":\"Mongoid tries to serialize the values for Date, DateTime, and Time into proper UTC times to store in the database. The provided value could not be parsed.\"},\"inverse_not_found\":{\"message\":\"When adding a(n) %{klass} to %{base}#%{name}, Mongoid could not determine the inverse foreign key to set. The attempted key was \\'%{inverse}\\'.\",\"resolution\":\"If an inverse is not required, like a belongs_to or has_and_belongs_to_many, ensure that :inverse_of =\\\\u003e nil is set on the association. If the inverse is needed, most likely the inverse cannot be figured out from the names of the associations and you will need to explicitly tell Mongoid on the association what the inverse is.\\\\n\\\\n Example:\\\\n   class Car\\\\n     include Mongoid::Document\\\\n     has_one :engine, class_name: \\\\\"Motor\\\\\", inverse_of: :machine\\\\n   end\\\\n\\\\n   class Motor\\\\n     include Mongoid::Document\\\\n     belongs_to :machine, class_name: \\\\\"Car\\\\\", inverse_of: :engine\\\\n   end\",\"summary\":\"When adding a document to an association, Mongoid attempts to link the newly added document to the base of the association in memory, as well as set the foreign key to link them on the database side. In this case Mongoid could not determine what the inverse foreign key was.\"},\"message_title\":\"message\",\"mixed_client_configuration\":{\"message\":\"Both uri and standard configuration options defined for client: \\'%{name}\\'.\",\"resolution\":\"Provide either only a uri as configuration or only standard options.\",\"summary\":\"Instead of simply giving uri or standard options a preference order, Mongoid assumes that you have made a mistake in your configuration and requires that you provide one or the other, but not both. The options that were provided were: %{config}.\"},\"mixed_relations\":{\"message\":\"Referencing a(n) %{embedded} document from the %{root} document via a non-embedded association is not allowed since the %{embedded} is embedded.\",\"resolution\":\"Consider not embedding %{embedded}, or do the key storage and access in a custom manner in the application code.\",\"summary\":\"In order to properly access a(n) %{embedded} from %{root} the reference would need to go through the root document of %{embedded}. In a simple case this would require Mongoid to store an extra foreign key for the root, in more complex cases where %{embedded} is multiple levels deep a key would need to be stored for each parent up the hierarchy.\"},\"nested_attributes_metadata_not_found\":{\"message\":\"Could not find metadata for association \\'%{name}\\' on model: %{klass}.\",\"resolution\":\"Make sure that there is an association defined named \\'%{name}\\' on %{klass} or that the association definition comes before the accepts_nested_attributes_for macro in the model - order matters so that Mongoid has access to the metadata.\\\\n\\\\n Example:\\\\n   class Band\\\\n     include Mongoid::Document\\\\n     has_many :albums\\\\n     accepts_nested_attributes_for :albums\\\\n   end\\\\n\\\\n\",\"summary\":\"When defining nested attributes for an association, Mongoid needs to access the metadata for the association \\'%{name}\\' in order if add autosave functionality to it, if applicable. Either no association named \\'%{name}\\' could be found, or the association had not been defined yet.\"},\"no_client_config\":{\"message\":\"No configuration could be found for a client named \\'%{name}\\'.\",\"resolution\":\"Double check your mongoid.yml to make sure under the clients key that a configuration exists for \\'%{name}\\'. If you have set the configuration programmatically, ensure that \\'%{name}\\' exists in the configuration hash.\",\"summary\":\"When attempting to create the new client, Mongoid could not find a client configuration for the name: \\'%{name}\\'. This is necessary in order to know the host, port, and options needed to connect.\"},\"no_client_database\":{\"message\":\"No database provided for client configuration: :%{name}.\",\"resolution\":\"If configuring via a mongoid.yml, ensure that within your :%{name} section a :database value for the client\\'s default database is defined.\\\\n\\\\n Example:\\\\n   development:\\\\n     clients:\\\\n       %{name}:\\\\n         database: my_app_db\\\\n         hosts:\\\\n           - localhost:27017\\\\n\\\\n\",\"summary\":\"Each client configuration must provide a database so Mongoid knows where the default database to persist to. What was provided was: %{config}.\"},\"no_client_hosts\":{\"message\":\"No hosts provided for client configuration: :%{name}.\",\"resolution\":\"If configuring via a mongoid.yml, ensure that within your :%{name} section a :hosts value for the client hosts is defined.\\\\n\\\\n Example:\\\\n   development:\\\\n     clients:\\\\n       %{name}:\\\\n         database: my_app_db\\\\n         hosts:\\\\n           - localhost:27017\\\\n\\\\n\",\"summary\":\"Each client configuration must provide hosts so Mongoid knows where the database server is located. What was provided was: %{config}.\"},\"no_clients_config\":{\"message\":\"No clients configuration provided.\",\"resolution\":\"Double check your mongoid.yml to make sure that you have a top-level clients key with at least 1 default client configuration for it. You can regenerate a new mongoid.yml for assistance via `rails g mongoid:config`.\\\\n\\\\n Example:\\\\n   development:\\\\n     clients:\\\\n       default:\\\\n         database: mongoid_dev\\\\n         hosts:\\\\n           - localhost:27017\\\\n\\\\n\",\"summary\":\"Mongoid\\'s configuration requires that you provide details about each client that can be connected to, and requires in the clients config at least 1 default client to exist.\"},\"no_default_client\":{\"message\":\"No default client configuration is defined.\",\"resolution\":\"If configuring via a mongoid.yml, ensure that within your :clients section a :default client is defined.\\\\n\\\\n Example:\\\\n   development:\\\\n     clients:\\\\n       default:\\\\n         hosts:\\\\n           - localhost:27017\\\\n\\\\n\",\"summary\":\"The configuration provided settings for: %{keys}, but Mongoid requires a :default to be defined at minimum.\"},\"no_documents_found\":{\"message\":\"Could not find a document of class %{klass}.\",\"resolution\":\"Create a document of class %{klass} or use a finder method that does not raise an exception when no documents are found.\",\"summary\":\"Mongoid attempted to find a document of the class %{klass} but none exist.\"},\"no_environment\":{\"message\":\"Could not load the configuration since no environment was defined.\",\"resolution\":\"Please ensure an environment is set in one of the listed locations. The environment must be explicitly set.\",\"summary\":\"Mongoid could not determine the environment to use because it was not specified in any of the following locations: Rails.env, Sinatra::Base.environment, ENV[\\\\\"RACK_ENV\\\\\"], ENV[\\\\\"MONGOID_ENV\\\\\"]. Without knowing the environment, Mongoid cannot load its configuration.\"},\"no_map_reduce_output\":{\"message\":\"No output location was specified for the map/reduce operation.\",\"resolution\":\"Provide the location that the output of the operation is to go by chaining an #out call to the map/reduce.\\\\n\\\\n Example:\\\\n   Band.map_reduce(map, reduce).out(inline: 1)\\\\n\\\\n Valid options for the out function are:\\\\n   inline: 1\\\\n   merge: \\'collection-name\\'\\\\n   replace: \\'collection-name\\'\\\\n   reduce: \\'collection-name\\'\\\\n\\\\n\",\"summary\":\"When executing a map/reduce, you must provide the output location of the results. The attempted command was: %{command}.\"},\"no_metadata\":{\"message\":\"Metadata not found for document of type %{klass}.\",\"resolution\":\"Ensure that your associations on the %{klass} model are all properly defined, and that the inverse associations are also properly defined. Embedded associations must have both the parent (embeds_one/embeds_many) and the inverse (embedded_in) present in order to work properly.\",\"summary\":\"Mongoid sets the metadata of an association on the document when it is either loaded from within the association, or added to one. The presence of the metadata is required in order to provide various functionality around associations. Most likely you are getting this error because the document is embedded and was attempted to be persisted without being associated with a parent, or the association was not properly defined.\"},\"no_parent\":{\"message\":\"Cannot persist embedded document %{klass} without a parent document.\",\"resolution\":\"Ensure that you\\'ve set the parent association if instantiating the embedded document directly, or always create new embedded documents via the parent association.\",\"summary\":\"If the document is embedded, in order to be persisted it must always have a reference to its parent document. This is most likely caused by either calling %{klass}.create or %{klass}.create! without setting the parent document as an attribute.\"},\"readonly_attribute\":{\"message\":\"Attempted to set the readonly attribute \\'%{name}\\' with the value: %{value}.\",\"resolution\":\"Don\\'t define \\'%{name}\\' as readonly, or do not attempt to update its value after the document is persisted.\",\"summary\":\"Attributes flagged as readonly via Model.attr_readonly can only have values set when the document is a new record.\"},\"readonly_document\":{\"message\":\"Attempted to persist a readonly document of class \\'%{klass}\\'.\",\"resolution\":\"Don\\'t attempt to persist documents that are flagged as readonly.\",\"summary\":\"Documents that are marked readonly cannot be persisted.\"},\"resolution_title\":\"resolution\",\"scope_overwrite\":{\"message\":\"Cannot create scope :%{scope_name}, because of existing method %{model_name}.%{scope_name}.\",\"resolution\":\"Change the name of the scope so it does not conflict with the already defined method %{model_name}, or set the configuration option Mongoid.scope_overwrite_exception to false, which is its default. In this case a warning will be logged.\",\"summary\":\"When defining a scope that conflicts with a method that already exists on the model, this error will get raised if Mongoid.scope_overwrite_exception is set to true.\"},\"sessions_not_supported\":{\"message\":\"Sessions are not supported by the connected server(s).\",\"resolution\":\"Verify that all servers in your deployment are at least version 3.6 or don\\'t attempt to use sessions with older server versions.\",\"summary\":\"A session was attempted to be used with a MongoDB server version that doesn\\'t support sessions. Sessions are supported in MongoDB server versions 3.6 and higher.\"},\"summary_title\":\"summary\",\"too_many_nested_attribute_records\":{\"message\":\"Accepting nested attributes for %{association} is limited to %{limit} documents.\",\"resolution\":\"The limit is set as an option to the macro, for example: accepts_nested_attributes_for :%{association}, limit: %{limit}. Consider raising this limit or making sure no more are sent than the set value.\",\"summary\":\"More documents were sent to be processed than the allowed limit.\"},\"unknown_attribute\":{\"message\":\"Attempted to set a value for \\'%{name}\\' which is not allowed on the model %{klass}.\",\"resolution\":\"Define the field \\'%{name}\\' in %{klass}, or include Mongoid::Attributes::Dynamic in %{klass} if you intend to store values in fields that are not explicitly defined.\",\"summary\":\"%{klass}#%{name}= was called but there is no \\'%{name}\\' field defined in the model, and Mongoid::Attributes::Dynamic is not included. This error is also raised instead of NoMethodError if the unknown attribute is passed to any method that accepts an attributes hash, such as #attributes=.\"},\"unknown_model\":{\"message\":\"Attempted to instantiate an object of the unknown model \\'%{klass}\\'.\",\"resolution\":\"The _type field is a reserved one used by Mongoid to determine the class for instantiating an object. Please don\\'t save data in this field or ensure that any values in this field correspond to valid models.\",\"summary\":\"A document with the value \\'%{value}\\' at the key \\'_type\\' was used to instantiate a model object but Mongoid cannot find this Class.\"},\"unsaved_document\":{\"message\":\"Attempted to save %{document} before the parent %{base}.\",\"resolution\":\"Make sure to only use create or create! when the parent document %{base} is persisted.\",\"summary\":\"You cannot call create or create! through the association (%{document}) whose parent (%{base}) is not already saved. This would cause the database to be out of sync since the child could potentially reference a nonexistent parent.\"},\"unsupported_javascript\":{\"message\":\"Executing Javascript $where selector on an embedded criteria is not supported.\",\"resolution\":\"Please provide a standard hash to #where when the criteria is for an embedded association.\",\"summary\":\"Mongoid only supports providing a hash of arguments to #where criterion on embedded documents. Since %{klass} is embedded, the expression %{javascript} is not allowed.\"},\"validations\":{\"message\":\"Validation of %{document} failed.\",\"resolution\":\"Try persisting the document with valid data or remove the validations.\",\"summary\":\"The following errors were found: %{errors}\"}}}},\"number\":{\"currency\":{\"format\":{\"delimiter\":\",\",\"format\":\"%u%n\",\"negative_format\":\"-%u%n\",\"precision\":2,\"separator\":\".\",\"significant\":false,\"strip_insignificant_zeros\":false,\"unit\":\"$\"}},\"format\":{\"delimiter\":\",\",\"precision\":3,\"round_mode\":\"default\",\"separator\":\".\",\"significant\":false,\"strip_insignificant_zeros\":false},\"human\":{\"decimal_units\":{\"format\":\"%n %u\",\"units\":{\"billion\":\"Billion\",\"million\":\"Million\",\"quadrillion\":\"Quadrillion\",\"thousand\":\"Thousand\",\"trillion\":\"Trillion\",\"unit\":\"\"}},\"format\":{\"delimiter\":\"\",\"precision\":3,\"significant\":true,\"strip_insignificant_zeros\":true},\"storage_units\":{\"format\":\"%n %u\",\"units\":{\"byte\":{\"one\":\"Byte\",\"other\":\"Bytes\"},\"eb\":\"EB\",\"gb\":\"GB\",\"kb\":\"KB\",\"mb\":\"MB\",\"pb\":\"PB\",\"tb\":\"TB\",\"zb\":\"ZB\"}}},\"nth\":{},\"percentage\":{\"format\":{\"delimiter\":\"\",\"format\":\"%n%\"}},\"precision\":{\"format\":{\"delimiter\":\"\"}}},\"pivot_list_column_value\":{\"non_sponsor_org\":\"non-investor\"},\"pivot_list_download\":{\"id\":\"ZW_ID\"},\"simple_form\":{\"error_notification\":{\"default_message\":\"Please review the problems below:\"},\"no\":\"No\",\"required\":{\"mark\":\"*\",\"text\":\"required\"},\"yes\":\"Yes\"},\"support\":{\"array\":{\"last_word_connector\":\", and \",\"two_words_connector\":\" and \",\"words_connector\":\", \"}},\"terminology\":{\"all_orgs_list_category\":\"Organizations\",\"companies_in_your_sf_label\":\"Companies in your Salesforce\",\"company_based_in\":\"Investor based in\",\"company_location\":\"Investor Location\",\"neglected_target_label\":\"Neglected Investors\",\"sponsor\":\"Investor\",\"sponsor_orgs_list_category\":\"Therapeutic Investors\",\"target_organization_title\":\"Investor\"},\"time\":{\"am\":\"am\",\"formats\":{\"default\":\"%a, %d %b %Y %H:%M:%S %z\",\"long\":\"%B %d, %Y %H:%M\",\"short\":\"%d %b %H:%M\"},\"pm\":\"pm\"},\"users\":{\"confirmations\":{\"new\":{\"legend\":\"Resend your %{brand_name} confirmation instructions\",\"message\":\"We need to confirm your email address to complete the sign up process. Supply your email address, below, and we will send you instructions on how to confirm your address.\",\"submit_button\":\"Send Confirmation Instructions\",\"title\":\"Resend confirmation instructions | %{brand_name}\"},\"show\":{\"legend\":\"Check your inbox for a confirmation email\",\"message\":\"If your e-mail exists in our database we have sent you a message with instructions. Check your inbox (or spam folder) for a message from \\'%{default_from_email}\\' containing the confirmation link.\",\"title\":\"Awaiting confirmation | %{brand_name}\"}},\"passwords\":{\"new\":{\"failures\":\"Note: If you make more than 5 sequential failed attempts to sign in with your %{brand_name} password, your account will be (temporarily) locked. Check your inbox for instruction on how to unlock your account, or we can\",\"legend\":\"Reset your %{brand_name} password\",\"message\":\"Supply your email address, below, and we will send you instructions on how to reset your password.\",\"resend_link\":\"resend a new set of unlock instructions\",\"submit_button\":\"Send Reset Instructions\",\"title\":\"Reset password | %{brand_name}\"},\"show\":{\"didnt_receive_email\":\"Didn\\'t receive the email?\",\"legend\":\"Password reset instructions sent\",\"message\":\"If your e-mail exists in our database we have sent you a message with password reset instructions. Check your inbox (or spam folder) for a message from \\'%{default_from_email}\\'.\",\"resend_link\":\"you can request another one here\",\"title\":\"Awaiting reset | %{brand_name}\"}}},\"will_paginate\":{\"container_aria_label\":\"Pagination\",\"next_label\":\"Next \\\\u0026#8594;\",\"page_aria_label\":\"Page %{page}\",\"page_entries_info\":{\"multi_page\":\"Displaying %{model} %{from} - %{to} of %{count} in total\",\"multi_page_html\":\"Displaying %{model} \\\\u003cb\\\\u003e%{from}\\\\u0026nbsp;-\\\\u0026nbsp;%{to}\\\\u003c/b\\\\u003e of \\\\u003cb\\\\u003e%{count}\\\\u003c/b\\\\u003e in total\",\"single_page\":{\"one\":\"Displaying 1 %{model}\",\"other\":\"Displaying all %{count} %{model}\",\"zero\":\"No %{model} found\"},\"single_page_html\":{\"one\":\"Displaying \\\\u003cb\\\\u003e1\\\\u003c/b\\\\u003e %{model}\",\"other\":\"Displaying \\\\u003cb\\\\u003eall\\\\u0026nbsp;%{count}\\\\u003c/b\\\\u003e %{model}\",\"zero\":\"No %{model} found\"}},\"page_gap\":\"\\\\u0026hellip;\",\"previous_label\":\"\\\\u0026#8592; Previous\"},\"x_mailer_header\":\"clicks.zymewire.com\"}'));\nI18n.translations[\"by\"] = I18n.extend((I18n.translations[\"by\"] || {}), JSON.parse('{\"activerecord\":{\"errors\":{\"messages\":{\"record_invalid\":\"Validation failed: %{errors}\",\"restrict_dependent_destroy\":{\"has_many\":\"Cannot delete record because dependent %{record} exist\",\"has_one\":\"Cannot delete record because a dependent %{record} exists\"}}}},\"bulk_uploads\":{\"email_local_part\":{\"empty_parameter\":\"No file uploaded\",\"error\":\"File Upload failed: %{error_message}\",\"success\":\"File was successfully uploaded\"}},\"common\":{\"crm\":{\"salesforce\":{\"forgot_password\":\"If you have forgotten your Salesforce password, please follow the instructions provided on the Salesforce sign in page.\",\"sign_in_button\":\"Sign In with Salesforce\"}}},\"contact\":{\"default_from_email\":\"info@zymewire.com\",\"phone_numbers\":[{\"label\":\"US\",\"phone\":\"1-844-996-3321\"},{\"label\":\"UK\",\"phone\":\"+44-208-133-9963\"}],\"support_email\":\"support@zymewire.com\"},\"date\":{\"abbr_day_names\":[\"Sun\",\"Mon\",\"Tue\",\"Wed\",\"Thu\",\"Fri\",\"Sat\"],\"abbr_month_names\":[null,\"Jan\",\"Feb\",\"Mar\",\"Apr\",\"May\",\"Jun\",\"Jul\",\"Aug\",\"Sep\",\"Oct\",\"Nov\",\"Dec\"],\"day_names\":[\"Sunday\",\"Monday\",\"Tuesday\",\"Wednesday\",\"Thursday\",\"Friday\",\"Saturday\"],\"formats\":{\"default\":\"%Y-%m-%d\",\"long\":\"%B %d, %Y\",\"short\":\"%b %d\"},\"month_names\":[null,\"January\",\"February\",\"March\",\"April\",\"May\",\"June\",\"July\",\"August\",\"September\",\"October\",\"November\",\"December\"],\"order\":[\"year\",\"month\",\"day\"]},\"datetime\":{\"distance_in_words\":{\"about_x_hours\":{\"one\":\"about 1 hour\",\"other\":\"about %{count} hours\"},\"about_x_months\":{\"one\":\"about 1 month\",\"other\":\"about %{count} months\"},\"about_x_years\":{\"one\":\"about 1 year\",\"other\":\"about %{count} years\"},\"almost_x_years\":{\"one\":\"almost 1 year\",\"other\":\"almost %{count} years\"},\"half_a_minute\":\"half a minute\",\"less_than_x_minutes\":{\"one\":\"less than a minute\",\"other\":\"less than %{count} minutes\"},\"less_than_x_seconds\":{\"one\":\"less than 1 second\",\"other\":\"less than %{count} seconds\"},\"over_x_years\":{\"one\":\"over 1 year\",\"other\":\"over %{count} years\"},\"x_days\":{\"one\":\"1 day\",\"other\":\"%{count} days\"},\"x_minutes\":{\"one\":\"1 minute\",\"other\":\"%{count} minutes\"},\"x_months\":{\"one\":\"1 month\",\"other\":\"%{count} months\"},\"x_seconds\":{\"one\":\"1 second\",\"other\":\"%{count} seconds\"}},\"prompts\":{\"day\":\"Day\",\"hour\":\"Hour\",\"minute\":\"Minute\",\"month\":\"Month\",\"second\":\"Seconds\",\"year\":\"Year\"}},\"default_host\":\"https://www.zymewire.com\",\"devise\":{\"confirmations\":{\"confirmed\":\"Your account was successfully confirmed. Please sign in.\",\"send_instructions\":\"Your email has not been confirmed. We need to confirm your email account before you can sign in. Please check your inbox or spam folder for an email from \\'info@zymewire.com\\' or request a new one.\",\"send_paranoid_instructions\":\"If your e-mail exists on our database, you will receive an email with instructions about how to confirm your account in a few minutes.\"},\"failure\":{\"already_authenticated\":\"You are already signed in.\",\"expired\":\"Ваш уліковы запіс састарэў з-за неактыўнасці. Калі ласка, звяжыцеся з адміністратарам.\",\"inactive\":\"Your account was not activated yet.\",\"invalid\":\"Invalid email or password. If you use Salesforce, use the \\'Have Salesforce?\\' panel.\",\"invalid_token\":\"Invalid authentication token.\",\"last_attempt\":\"You have one more attempt before your account is locked.\",\"locked\":\"Your account is locked.\",\"not_active\":\"Your account has been de-activated, if you think this is a mistake please contact us\",\"not_found_in_database\":\"Invalid %{authentication_keys} or password.\",\"session_limited\":\"Вашы параметры ўваходу выкарыстоўваюцца ў іншым браўзэры. Калі ласка, аўтарызуйцеся зноў, каб працягнуць у гэтым браўзэры.\",\"timeout\":\"Your session expired, please sign in again to continue.\",\"unauthenticated\":\"You need to sign in or sign up before continuing.\",\"unconfirmed\":\"We must confirm your email before you can continue. Please check your inbox or spam folder for a confirmation email from \\'info@zymewire.com\\' or request a new one.\"},\"invalid_captcha\":\"Уведзены няправільны код капчы.\",\"invalid_security_question\":\"Адказ на сакрэтнае пытанне быў няправільны.\",\"mailer\":{\"confirmation_instructions\":{\"subject\":\"Confirmation instructions for Zymewire.com\"},\"email_changed\":{\"subject\":\"Email Changed\"},\"password_change\":{\"subject\":\"Password Changed\"},\"reset_password_instructions\":{\"subject\":\"Reset password instructions for Zymewire.com\"},\"unlock_instructions\":{\"subject\":\"Unlock Instructions for Zymewire.com\"}},\"omniauth_callbacks\":{\"failure\":\"Could not authorize you from %{kind} because \\\\\"%{reason}\\\\\".\",\"success\":\"Successfully authorized from %{kind} account.\"},\"paranoid_verification_code\":{\"show\":{\"submit\":\"Адправіць\",\"submit_verification_code\":\"Увод кода пацверджання\",\"verification_code\":\"Код пацверджання\"},\"updated\":\"Код спраўджання прыняты\"},\"paranoid_verify\":{\"code_required\":\"Калі ласка, увядзіце код, атрыманы ад нашай каманды падтрымкі\"},\"password_expired\":{\"change_required\":\"Ваш пароль састарэў. Калі ласка, усталюйце новы.\",\"show\":{\"change_my_password\":\"Змяніць пароль\",\"current_password\":\"Сучасны пароль\",\"new_password\":\"Новы пароль\",\"new_password_confirmation\":\"Пацвердзіце новы пароль\",\"renew_your_password\":\"Змена пароля\"},\"updated\":\"Ваш новы пароль захаваны.\"},\"passwords\":{\"no_token\":\"You can\\'t access this page without coming from a password reset email. If you do come from a password reset email, please make sure you used the full URL provided.\",\"send_instructions\":\"You will receive an email with instructions about how to reset your password in a few minutes.\",\"send_paranoid_instructions\":\"If your e-mail exists on our database, you will receive a password recovery link on your e-mail\",\"updated\":\"Your password was changed successfully. You are now signed in.\",\"updated_not_active\":\"Your password was changed successfully.\"},\"registrations\":{\"destroyed\":\"Bye! Your account was successfully cancelled. We hope to see you again soon.\",\"signed_up\":\"Welcome! You have signed up successfully.\",\"signed_up_but_inactive\":\"You have signed up successfully. However, we could not sign you in because your account is not yet activated.\",\"signed_up_but_locked\":\"You have signed up successfully. However, we could not sign you in because your account is locked.\",\"signed_up_but_unconfirmed\":\"A message with a confirmation link has been sent to your email address. Please open the link to activate your account.\",\"update_needs_confirmation\":\"You updated your account successfully, but we need to verify your new email address. Please check your email and click on the confirm link to finalize confirming your new email address.\",\"updated\":\"You updated your account successfully.\",\"updated_but_not_signed_in\":\"Your account has been updated successfully, but since your password was changed, you need to sign in again.\"},\"sessions\":{\"already_signed_out\":\"Signed out successfully.\",\"signed_in\":\"Signed in successfully.\",\"signed_out\":\"Signed out successfully.\"},\"unlocks\":{\"send_instructions\":\"You will receive an email with instructions about how to unlock your account in a few minutes.\",\"send_paranoid_instructions\":\"If your account exists, you will receive an email with instructions about how to unlock it in a few minutes.\",\"unlocked\":\"Your account has been unlocked successfully. Please sign in to continue.\"}},\"download\":\"Download\",\"download_30_days\":\"This link will be available for 30 days after which the file will be removed from our servers.\",\"enumerize\":{\"blocklisted_contact\":{\"provider\":{\"insideview\":\"InsideView\",\"zephyr\":\"Zephyr\"}}},\"errors\":{\"format\":\"%{attribute} %{message}\",\"messages\":{\"accepted\":\"must be accepted\",\"already_confirmed\":\"was already confirmed, please try signing in\",\"blank\":\"can\\'t be blank\",\"confirmation\":\"doesn\\'t match %{attribute}\",\"confirmation_period_expired\":\"needs to be confirmed within %{period}, please request a new one\",\"empty\":\"can\\'t be empty\",\"equal_to\":\"must be equal to %{count}\",\"equal_to_current_password\":\"павінен адрознівацца ад сучаснага пароля.\",\"equal_to_email\":\"павінна адрознівацца ад электроннай пошты.\",\"even\":\"must be even\",\"exclusion\":\"is reserved\",\"expired\":\"has expired, please request a new one\",\"greater_than\":\"must be greater than %{count}\",\"greater_than_or_equal_to\":\"must be greater than or equal to %{count}\",\"in\":\"must be in %{count}\",\"inclusion\":\"is not included in the list\",\"invalid\":\"is invalid\",\"less_than\":\"must be less than %{count}\",\"less_than_or_equal_to\":\"must be less than or equal to %{count}\",\"model_invalid\":\"Validation failed: %{errors}\",\"not_a_number\":\"is not a number\",\"not_an_integer\":\"must be an integer\",\"not_found\":\"not found\",\"not_locked\":\"was not locked\",\"not_saved\":{\"one\":\"1 error prohibited this %{resource} from being saved:\",\"other\":\"%{count} errors prohibited this %{resource} from being saved:\"},\"odd\":\"must be odd\",\"other_than\":\"must be other than %{count}\",\"password_complexity\":{\"digit\":{\"few\":\"павінен утрымліваць хоць %{count} лічбы\",\"many\":\"павінен утрымліваць хоць %{count} лічбы\",\"one\":\"павінен утрымліваць хоць адну лічбу\",\"other\":\"павінен утрымліваць хоць %{count} лічбы\"},\"lower\":{\"few\":\"павінен утрымліваць хоць %{count} малыx літары\",\"many\":\"павінен утрымліваць хоць %{count} малыx літары\",\"one\":\"павінен утрымліваць хоць адну маленькую літару\",\"other\":\"павінен утрымліваць хоць %{count} малыx літары\"},\"symbol\":{\"few\":\"павінен утрымліваць хоць %{count} знака пунктуацыі або сімвала\",\"many\":\"павінен утрымліваць хоць %{count} знака пунктуацыі або сімвала\",\"one\":\"павінен утрымліваць хоць адзін знак пунктуацыі або сімвал\",\"other\":\"павінен утрымліваць хоць %{count} знака пунктуацыі або сімвала\"},\"upper\":{\"few\":\"павінен утрымліваць хоць %{count} вялікіx літары\",\"many\":\"павінен утрымліваць хоць %{count} вялікіx літары\",\"one\":\"павінен утрымліваць хоць адну вялікую літару\",\"other\":\"павінен утрымліваць хоць %{count} вялікіx літары\"}},\"password_format\":\"Must contain uppercase AND lowercase letters and at least one number\",\"password_too_long\":\"is too long\",\"present\":\"must be blank\",\"required\":\"must exist\",\"taken\":\"has already been taken\",\"taken_in_past\":\"ужо раней выкарыстоўваўся.\",\"too_long\":{\"one\":\"is too long (maximum is 1 character)\",\"other\":\"is too long (maximum is %{count} characters)\"},\"too_short\":{\"one\":\"is too short (minimum is 1 character)\",\"other\":\"is too short (minimum is %{count} characters)\"},\"wrong_length\":{\"one\":\"is the wrong length (should be 1 character)\",\"other\":\"is the wrong length (should be %{count} characters)\"}}},\"flash\":{\"actions\":{\"create\":{\"notice\":\"%{resource_name} was successfully created.\"},\"destroy\":{\"alert\":\"%{resource_name} could not be destroyed.\",\"notice\":\"%{resource_name} was successfully destroyed.\"},\"update\":{\"notice\":\"%{resource_name} was successfully updated.\"}}},\"hello_world\":\"Hello world\",\"helpers\":{\"select\":{\"prompt\":\"Please select\"},\"submit\":{\"create\":\"Create %{model}\",\"submit\":\"Save %{model}\",\"update\":\"Update %{model}\"}},\"hi\":\"Hi\",\"mailers\":{\"common\":{\"chummy_sign_off\":\"Have a good one.\",\"final_note\":\"P.S.: If you think you received this email accidentally, then something weird could be going on. Hit reply and a member of the %{brand_name} team will investigate.\",\"team_sign_off\":\"- The %{brand_name} Team\"},\"confirmation_instructions_email\":{\"crm\":{\"salesforce\":{\"resource_confirmed\":\"Someone has requested a resend of a confirmation email. You do not need to confirm your email address because your account is configured to use Salesforce to sign in.\",\"resource_unconfirmed\":\"You do not need to confirm your email address because your account is configured to use Salesforce to sign in, please complete the sign up process by clicking the button below to sign in to %{brand_name} via Salesforce.\"}},\"non_crm\":{\"confirm_link\":\"Confirm my account\",\"welcome\":\"Welcome to %{brand_name}. As the final step in the process you\\'ll need to confirm your account by clicking on the link below.\"},\"subject\":\"Confirmation instructions for %{domain}\"},\"flagged_events_mailer\":{\"from\":\"Flagged events - %{brand_name} \\\\u003cflagged_events@mailer.%{domain}\\\\u003e\"},\"mobile_registration_email\":{\"alert_cs_registration_locked\":{\"subject\":\"%{brand_name}: user has had mobile registration locked, too many failed attempts\"},\"dispatch_registration_PIN\":{\"further_instructions\":\"If you are NOT attempting to register for the %{brand_name} Mobile app then please let us know at %{support_email_link} - thank you.\",\"introduction\":\"Here is your mobile app registration PIN:\",\"subject\":\"%{brand_name} Mobile Registration Verification\"},\"too_many_failed_attempts\":{\"introduction\":\"We have received too many failed mobile device registration attempts for your account and we will block any further requests. If you have not attempted to register a mobile device with us in the last hour then please let us know as it is likely someone has tried on your behalf. If you have been trying to register a device please contact %{support_email_link} and we can help unlock your account and get you registered.\",\"subject\":\"%{brand_name}: too many failed registration attempts\"}},\"org_list_download_mail\":{\"dispatch_link\":{\"introduction\":\"We have finished meshing your %{crm_brand_name} data with the companies in your \\\\\"%{list_name}\\\\\" list.\",\"subject\":\"%{brand_name}: your file download of \\'%{list_name}\\' is ready\"},\"failed\":{\"instructions\":\"You could try again in a little while. If you already have and are receiving this email again, please contact us at %{support_email_link}\",\"introduction\":\"We are really sorry, but something went wrong with creating your download of %{crm_brand_name} data for your \\\\\"%{list_name}\\\\\" list.\",\"subject\":\"%{brand_name}: your file download of \\'%{list_name}\\' failed\"}},\"reset_password_instructions_email\":{\"crm\":{\"salesforce\":{\"change_requested\":\"Someone has requested a change to your password. Your account is configured to use Salesforce to sign in.\"}},\"fishy_fine_print\":\"If you did not request a password change, then something weird is going on. Someone may be trying to access your account (unsuccessfully). Please reply to this email and let us know. We will take steps to make sure it stops.\",\"non_crm\":{\"change_password_link\":\"Change my password\",\"change_requested\":\"Someone has requested a change to your password, you can do this via the link below.\"},\"subject\":\"Password reset instructions for %{domain}\"},\"sales_force_mail\":{\"processing_completed\":{\"bullet_points\":[\"Only show events associated with companies in your Salesforce account\",\"Add new contacts and accounts to your Salesforce account without leaving %{brand_name}\",\"Access the \\'Salesforce details\\' panel on company dashboards where you can see open tasks, team interactions, opportunities, and more!\"],\"further_instructions\":\"We\\'re here to help. If you run into any questions or challenges, please contact us at %{support_email_link} and a member of our team would be more than happy to help.\",\"get_the_most\":\"To get the most from the integration, check out the \\'Mine Salesforce for opportunities\\' guide in the Help Center.\",\"guide_button\":\"Take me to the guide\",\"introduction\":\"Good news - your Salesforce account is now integrated with %{brand_name}. Now you’ll be able to:\"}},\"segment_contact\":{\"report_manager\":{\"fail_subject\":\"%{brand_name}: The PDF report generation failed\",\"success_subject\":\"%{brand_name}: Your PDF for %{company_name} is attached\"}},\"sf_token_expiry_email\":{\"further_instructions\":\"If you run into any questions or challenges, please contact us at %{support_email_link} and a member of our team would be more than happy to help.\",\"introduction\":\"Unfortunately the connection established for you between %{brand_name} and your %{crm_brand_name} account has expired. We will not be able to update your lists in %{brand_name} to reflect your %{crm_brand_name} database. To re-establish the connection, you just need to log in to %{brand_name} using your %{crm_brand_name}.\",\"subject\":\"%{brand_name} to %{crm_brand_name} connection has expired\"},\"share_list_mail\":{\"introduction\":\"%{user_name} shared a list with you: \",\"subject\":\"[%{brand_name} - shared list] %{list_name}\"},\"trial_expiry_mail\":{\"seven_days_to_go\":{\"further_instructions\":\"A member of our fabulous Customer Success team will arrange a welcome call with you to understand your goals and priorities, and will then give you a personalized Tour de %{brand_name} so you can easily access the information that is most valuable to you.\",\"instructions\":\"If you\\'d like continued access to the platform with our flexible month-to-month subscription, please ensure you contact %{support_email_link} ahead of: %{deadline}\",\"introduction\":\"Time flies when you\\'re uncovering new business opportunities! Your %{brand_name} trial is coming to an end next week.\",\"sign_off\":\"We look forward to helping you reach your sales goals!\",\"subject\":\"Just a heads up that your %{brand_name} trial is ending in seven days\"},\"seven_days_to_go_warning_for_cs\":{\"introduction\":\"%{user_name} shared a list with you: \",\"subject\":\"[%{brand_name} - shared list] %{list_name}\"}},\"unlock_instructions_email\":{\"crm\":{\"salesforce\":{\"change_requested\":\"You are being sent this email either because of one too many unsuccessful non-Salesforce log-in attempts or someone has requested an unlock email. %{brand_name} has not locked your account because your account is configured to use Salesforce to sign in.\",\"password_forgotten\":\"If you have forgotten your Salesforce password or think your account has been locked by Salesforce, please follow the instructions provided on the Salesforce sign in page.\"}},\"fishy_fine_print\":\"If you have not been (unsuccessfully) trying to log in to your account, then something weird is going on. Someone may be trying to access your account (unsuccessfully). Please reply to this email and let us know. We will take steps to make sure it stops.\",\"non_crm\":{\"change_requested\":\"For security reasons we have locked your account because of too many log-in attempts. To unlock your account, click the link below.\",\"unlock_account_link\":\"Unlock my account\"},\"subject\":\"Unlock instructions for %{domain}\"}},\"mongoid\":{\"errors\":{\"messages\":{\"ambiguous_relationship\":{\"message\":\"Ambiguous associations %{candidates} defined on %{klass}.\",\"resolution\":\"On the %{name} association on %{inverse} you must add an :inverse_of option to specify the exact association on %{klass} that is the opposite of %{name}.\",\"summary\":\"When Mongoid attempts to set an inverse document of an association in memory, it needs to know which association it belongs to. When setting %{name}, Mongoid looked on the class %{inverse} for a matching association, but multiples were found that could potentially match: %{candidates}.\"},\"blank_in_locale\":\"can\\'t be blank in %{location}\",\"callbacks\":{\"message\":\"Calling %{method} on %{klass} resulted in a false return from a callback.\",\"resolution\":\"Double check all before callbacks to make sure they are not unintentionally returning false.\",\"summary\":\"If a before callback returns false when using Document.create!, Document#save!, or Document#update_attributes! this error will get raised since the document did not actually get saved.\"},\"calling_document_find_with_nil_is_invalid\":{\"message\":\"Calling Document.find with nil is invalid.\",\"resolution\":\"Most likely this is caused by passing parameters directly through to the find, and the parameter either is not present or the key from which it is accessed is incorrect.\",\"summary\":\"Document.find expects the parameters to be 1 or more ids, and will return a single document if 1 id is provided, otherwise an array of documents if multiple ids are provided.\"},\"create_collection_failure\":{\"message\":\"Cannot create collection %{collection_name} with options %{collection_options}. The following error was raised: %{error}.\",\"resolution\":\"Double check that collection options for the collection %{collection_name} are valid. Consult with Ruby driver documentation and MongoDB documentation if the desired options are supported by your version of the server.\",\"summary\":\"The server rejected createCollection command with given collection options. This may happen when some of the options are invalid, or not supported by your version of the server.\"},\"criteria_argument_required\":{\"message\":\"Calling Criteria methods with nil arguments is not allowed.\",\"resolution\":\"Invoke Criteria methods with non-nil arguments or omit the respective invocations.\",\"summary\":\"Arguments to Criteria methods cannot be nil, and most Criteria methods require at least one argument. Only logical operations (and, or, nor and not), `all\\' and `where\\' can be called without arguments. The method that was called with nil argument was: %{query_method}.\"},\"delete_restriction\":{\"message\":\"Cannot destroy %{document} because of dependent \\'%{relation}\\'.\",\"resolution\":\"Don\\'t attempt to delete the parent %{document} when it has children, or change the dependent option on the association.\",\"summary\":\"When defining \\'%{relation}\\' with a :dependent =\\\\u003e :restrict_with_error, Mongoid will raise an error when attempting to destroy the %{document} when the child \\'%{relation}\\' still has documents in it.\"},\"destroy_restrict_with_error_dependencies_exist\":\"is not empty and prevents the document from being destroyed\",\"document_not_destroyed\":{\"message\":\"%{klass} with id %{id} was not destroyed.\",\"resolution\":\"Check the before/after destroy callbacks to ensure that the return values are truthy for the chain to continue.\",\"summary\":\"When calling %{klass}#destroy! and a callback halts the destroy callback chain by returning a false value, the deletion will not actually occur.\"},\"document_not_found\":{\"message\":\"Document(s) not found for class %{klass} with id(s) %{missing}.\",\"resolution\":\"Search for an id that is in the database or set the Mongoid.raise_not_found_error configuration option to false, which will cause nil to be returned instead of raising this error when searching for a single id, or only the matched documents when searching for multiples.\",\"summary\":\"When calling %{klass}.find with an id or array of ids, each parameter must match a document in the database or this error will be raised. The search was for the id(s): %{searched} (%{total} total) and the following ids were not found: %{missing}.\"},\"document_with_attributes_not_found\":{\"message\":\"Document not found for class %{klass} with attributes %{attributes}.\",\"resolution\":\"Search for attributes that are in the database or set the Mongoid.raise_not_found_error configuration option to false, which will cause nil to be returned instead of raising this error.\",\"summary\":\"When calling %{klass}.find_by with a hash of attributes, all attributes provided must match a document in the database or this error will be raised.\"},\"document_with_shard_key_not_found\":{\"message\":\"Document not found for class %{klass} with id %{missing} and shard key %{shard_key}.\",\"resolution\":\"Search for an id/shard key that is in the database or set the Mongoid.raise_not_found_error configuration option to false, which will cause nil to be returned instead of raising this error.\",\"summary\":\"When calling %{klass}.find with an id and a shard key, each parameter must match a document in the database or this error will be raised. The search was for the id: %{missing} with shard_key: %{shard_key} and it was not found.\"},\"drop_collection_failure\":{\"message\":\"Cannot drop collection %{collection_name}.\",\"resolution\":\"Try to drop the collection manually using Ruby driver or mongo shell.\",\"summary\":\"Mongoid tried to drop collection %{collection_name}, but the collection still exists in the database.\"},\"empty_config_file\":{\"message\":\"Empty configuration file: %{path}.\",\"resolution\":\"Ensure your configuration file contains the correct contents. Refer to: https://www.mongodb.com/docs/mongoid/current/reference/configuration/\",\"summary\":\"Your mongoid.yml configuration file appears to be empty.\"},\"immutable_attribute\":{\"message\":\"Attempted to change the immutable attribute \\'%{name}\\' with the value: %{value}.\",\"resolution\":\"Do not attempt to update the value of \\'%{name}\\' after the document is persisted.\",\"summary\":\"Immutable attributes can only have values set when the document is a new record.\"},\"in_memory_collation_not_supported\":{\"message\":\"A collation option cannot be applied when querying documents in-memory.\",\"resolution\":\"Remove the collation option from the query.\",\"summary\":\"The query being run against documents in memory has a collation option set. A collation option is only supported if the query is executed on a MongoDB server with version \\\\u003e= 3.4.\"},\"invalid_async_query_executor\":{\"message\":\"Invalid async_query_executor option: %{executor}.\",\"resolution\":\"Pick an allowed option or fix the typo. If you were expecting the option to be there, please consult the following page with respect to Mongoid\\'s configuration:\\\\n\\\\n   https://www.mongodb.com/docs/mongoid/current/reference/configuration/#mongoid-configuration-options\",\"summary\":\"A invalid async query executor was specified. The valid options are: %{options}.\"},\"invalid_collection\":{\"message\":\"Access to the collection for %{klass} is not allowed.\",\"resolution\":\"For access to the collection that the embedded document is in, use %{klass}#_root.collection, or do not attempt to persist an embedded document without a parent set.\",\"summary\":\"%{klass}.collection was called, and %{klass} is an embedded document - it resides within the collection of the root document of the hierarchy.\"},\"invalid_config_file\":{\"message\":\"Invalid configuration file: %{path}.\",\"resolution\":\"Ensure your configuration file contains the correct contents. Refer to: https://www.mongodb.com/docs/mongoid/current/reference/configuration/\",\"summary\":\"Your mongoid.yml configuration file does not contain the correct file structure.\"},\"invalid_config_option\":{\"message\":\"Invalid configuration option: %{name}.\",\"resolution\":\"Remove the invalid option or fix the typo. If you were expecting the option to be there, please consult the following page with respect to Mongoid\\'s configuration:\\\\n\\\\n   http://mongoid.org/en/mongoid/docs/installation.html\",\"summary\":\"A invalid configuration option was provided in your mongoid.yml, or a typo is potentially present. The valid configuration options are: %{options}.\"},\"invalid_dependent_strategy\":{\"message\":\"Invalid dependent strategy: %{invalid_strategy}.\",\"resolution\":\"Change the dependent strategy to one of the valid types.\",\"summary\":\"An invalid dependent strategy was defined for the association: %{association}. The valid strategies are: %{valid_strategies}.\"},\"invalid_discriminator_key_target\":{\"message\":\"Setting the discriminator key on a child class is not allowed.\",\"resolution\":\"Try setting the discriminator key on %{superclass} or one of %{class_name}\\'s ancestors.\",\"summary\":\"The discriminator key on the class %{class_name} was attempted to be changed. Changing the discriminator key on a child class is not allowed.\"},\"invalid_dot_dollar_assignment\":{\"message\":\"Cannot set the %{attr} attribute on the %{klass} class.\",\"resolution\":\"In order to set fields that start with a dollar sign ($) or contain a dot/period (.), the aggregation pipeline can be used. MongoDB provides specific operators for working with these fields. Refer to the MongoDB documentation here: https://www.mongodb.com/docs/manual/core/dot-dollar-considerations/\",\"summary\":\"Calling the setters for fields that start with a dollar sign ($) or contain a dot/period (.) is prohibited. See the Mongoid documentation on Field Names with Dots/Periods (.) and Dollar Signs ($) for more information.\"},\"invalid_elem_match_operator\":{\"message\":\"Invalid $elemMatch operator \\'%{operator}\\'.\",\"resolution\":\"Valid field operators are: %{valid_operators}. Ensure you are using one of these operators.\",\"summary\":\"You misspelled an operator or are using an operator that Mongoid does not support.\"},\"invalid_estimated_count_criteria\":{\"message\":\"Invalid criteria for estimated_count.\",\"resolution\":\"Try calling estimated_count directly on the class: %{class_name}.estimated_count.\\\\n\\\\n  If the class defines a default scope, use unscoped: %{class_name}.unscoped.estimated_count.\",\"summary\":\"Estimated count is strictly a collection-level operation and cannot be called on a filtered criteria.\"},\"invalid_expression_operator\":{\"message\":\"Invalid expression operator \\'%{operator}\\'.\",\"resolution\":\"Valid expression operators are: %{valid_operators}. Ensure you are using one of these operators.\",\"summary\":\"You misspelled an operator, are using an operator that Mongoid does not support, or are trying to use a field-level operator on expression level.\"},\"invalid_field\":{\"message\":\"Defining a field named \\'%{field}\\' is not allowed.\",\"resolution\":\"Use Mongoid.destructive_fields to see what names are not allowed, and don\\'t use these names. These include names that also conflict with core Ruby methods on Object, Module, Enumerable, or included gems that inject methods into these or Mongoid internals.\",\"summary\":\"Defining this field would override the method \\'%{name}\\', which would cause issues with expectations around the original method and cause extremely hard to debug issues. The original method was defined in:\\\\n   Object: %{origin}\\\\n   File: %{file}\\\\n   Line: %{line}\"},\"invalid_field_operator\":{\"message\":\"Invalid field operator \\'%{operator}\\'.\",\"resolution\":\"Valid field operators are: %{valid_operators}. Ensure you are using one of these operators.\",\"summary\":\"You misspelled an operator, are using an operator that Mongoid does not support, or are trying to use an expression-level operator on field level.\"},\"invalid_field_option\":{\"message\":\"Invalid option :%{option} provided for field :%{name}.\",\"resolution\":\"When defining the field :%{name} on \\'%{klass}\\', please provide valid options for the field. These are currently: %{valid}. If you meant to define a custom field option, please do so first as follows:\\\\n\\\\n   Mongoid::Fields.option :%{option} do |model, field, value|\\\\n     # Your logic here...\\\\n   end\\\\n   class %{klass}\\\\n     include Mongoid::Document\\\\n     field :%{name}, %{option}: true\\\\n   end\\\\n\\\\n Refer to: https://www.mongodb.com/docs/mongoid/current/reference/fields/#custom-field-options\",\"summary\":\"Mongoid requires that you only provide valid options on each field definition in order to prevent unexpected behavior later on.\"},\"invalid_field_type\":{\"message\":\"Invalid field type %{type_inspection} for field \\'%{field}\\' on model \\'%{klass}\\'.\",\"resolution\":\"Please provide a valid type value for the field. Refer to: https://www.mongodb.com/docs/mongoid/current/reference/fields/#using-symbols-or-strings-instead-of-classes\",\"summary\":\"Model \\'%{klass}\\' defines a field \\'%{field}\\' with an unknown type value %{type_inspection}.\"},\"invalid_global_executor_concurrency\":{\"message\":\"Invalid global_executor_concurrency option.\",\"resolution\":\"Set global_executor_concurrency option to :global_thread_pool or remove global_executor_concurrency option.\",\"summary\":\"You set global_executor_concurrency while async_query_executor option is not set to :global_thread_pool. The global_executor_concurrency is allowed only for the global thread pool executor.\"},\"invalid_includes\":{\"message\":\"Invalid includes directive: %{klass}.includes(%{args})\",\"resolution\":\"Ensure that each parameter passed to %{klass}.includes is a valid name of an association on the %{klass} model. These are: %{relations}.\",\"summary\":\"Eager loading in Mongoid only supports providing arguments to %{klass}.includes that are the names of associations on the %{klass}.\"},\"invalid_index\":{\"message\":\"Invalid index specification on %{klass}: %{spec}, %{options}\",\"resolution\":\"Ensure that the index conforms to the correct syntax and has the correct options.\\\\n\\\\n Valid options are:\\\\n   background: true|false\\\\n   database: \\'database_name\\'\\\\n   name: \\'index_name\\'\\\\n   sparse: true|false\\\\n   unique: true|false\\\\n   min: 1\\\\n   max: 1\\\\n   bits: 26\\\\n   key: 26\\\\n   bucket_size : 1\\\\n   sphere_version : 1\\\\n   text_version : 1\\\\n   version : 1\\\\n   weights: { content: 1, title: 2 }\\\\n   expire_after_seconds: number_of_seconds\\\\n   partial_filter_expression\\\\n   storage_engine\\\\n   language_override\\\\n   default_language\\\\n   collation\\\\n   wildcard_projection: { \\'path.to.field.a\\': 1, \\'path.to.field.b\\': 0 }\\\\n Valid types are: 1, -1, \\'2d\\', \\'2dsphere\\', \\'geoHaystack (deprecated)\\', \\'text\\', \\'hashed\\'\\\\n\\\\n Example:\\\\n   class Band\\\\n     include Mongoid::Document\\\\n     index({ name: 1, label: -1 }, { sparse: true })\\\\n     index({ location: \\'2d\\' }, { background: true })\\\\n   end\\\\n\\\\n\",\"summary\":\"Indexes in Mongoid are defined as a hash of field name and direction/2d pairs, with a hash for any additional options.\"},\"invalid_options\":{\"message\":\"Invalid option :%{invalid} provided to association :%{name}.\",\"resolution\":\"Valid options are: %{valid}, make sure these are the ones you are using.\",\"summary\":\"Mongoid checks the options that are passed to the association macros to ensure that no ill side effects occur by letting something slip by.\"},\"invalid_path\":{\"message\":\"Having a root path assigned for %{klass} is invalid.\",\"resolution\":\"Most likely your embedded model, %{klass} is also referenced via a has_many from a root document in another collection. Double check the association definitions and fix any instances where embedded documents are improperly referenced from other collections.\",\"summary\":\"Mongoid has two different path objects for determining the location of a document in the database, Root and Embedded. This error is raised when an embedded document somehow gets a root path assigned.\"},\"invalid_persistence_option\":{\"message\":\"Invalid persistence option :%{invalid}.\",\"resolution\":\"Valid options are: %{valid}, make sure these are the ones you are using.\",\"summary\":\"The options used to change the persistence context must be one of the valid options for a mongo client, or a collection name.\"},\"invalid_relation\":{\"message\":\"Defining an association named \\'%{name}\\' is not allowed.\",\"resolution\":\"Use Mongoid.destructive_fields to see what names are not allowed, and don\\'t use these names. These include names that also conflict with core Ruby methods on Object, Module, Enumerable, or included gems that inject methods into these or Mongoid internals.\",\"summary\":\"Defining this association would override the method \\'%{name}\\', which would cause issues with expectations around the original method and cause extremely hard to debug issues. The original method was defined in:\\\\n   Object: %{origin}\\\\n   File: %{file}\\\\n   Line: %{line}\"},\"invalid_relation_option\":{\"message\":\"Invalid association option :%{option} for association \\'%{name}\\' on class %{klass}.\",\"resolution\":\"Valid options are: %{valid_options}, make sure you use only those.\",\"summary\":\"An invalid option was provided for an association.\"},\"invalid_scope\":{\"message\":\"Defining a scope of value %{value} on %{klass} is not allowed.\",\"resolution\":\"Change the scope to be a proc wrapped criteria.\\\\n\\\\n Example:\\\\n   class Band\\\\n     include Mongoid::Document\\\\n     scope :inactive, -\\\\u003e{ where(active: false) }\\\\n   end\\\\n\\\\n\",\"summary\":\"Scopes in Mongoid must be procs that wrap criteria objects.\"},\"invalid_session_nesting\":{\"message\":\"A session was started while another session was being used.\",\"resolution\":\"Only use one session at a time; sessions cannot be nested.\",\"summary\":\"Sessions cannot be nested. Only one session can be used in a thread at once.\"},\"invalid_session_use\":{\"message\":\"A session was attempted to be used with a model whose client cannot use that session.\",\"resolution\":\"Only execute operations on the model class or instances of the model through which the session was created. Otherwise, ensure that all models on which operations are executed in the session block share the same driver client. For example, a model may have a different client specified in its \\'store_in\\' options.\\\\n\\\\n\",\"summary\":\"Sessions are started via driver clients (Model#mongo_client) and, in most cases, driver clients are shared across models. When different models have their own clients, a session cannot be obtained via one model and used for operations on another model.\"},\"invalid_set_polymorphic_relation\":{\"message\":\"The %{name} attribute can\\'t be set to an instance of %{other_klass} as %{other_klass} has multiple associations referencing %{klass} as %{name}.\",\"resolution\":\"Set the values from the parent, or redefine the association with only a single definition in the parent.\",\"summary\":\"If the parent class of a polymorphic association has multiple definitions for the same association, the values must be set from the parent side and not the child side since Mongoid cannot determine from the child side which association to go in.\"},\"invalid_storage_options\":{\"message\":\"Invalid options passed to %{klass}.store_in: %{options}.\",\"resolution\":\"Change the options passed to store_in to match the documented API, and ensure all keys in the options hash are symbols.\\\\n\\\\n Example:\\\\n   class Band\\\\n     include Mongoid::Document\\\\n     store_in collection: \\'artists\\', database: \\'music\\'\\\\n   end\\\\n\\\\n\",\"summary\":\"The :store_in macro takes only a hash of parameters with the keys :database, :collection, :collection_options, or :client.\"},\"invalid_time\":{\"message\":\"\\'%{value}\\' is not a valid Time.\",\"resolution\":\"Make sure to pass parsable values to the field setter for Date, DateTime, and Time objects. When this is a String it needs to be valid for Time.parse. Other objects must be valid to pass to Time.local.\",\"summary\":\"Mongoid tries to serialize the values for Date, DateTime, and Time into proper UTC times to store in the database. The provided value could not be parsed.\"},\"inverse_not_found\":{\"message\":\"When adding a(n) %{klass} to %{base}#%{name}, Mongoid could not determine the inverse foreign key to set. The attempted key was \\'%{inverse}\\'.\",\"resolution\":\"If an inverse is not required, like a belongs_to or has_and_belongs_to_many, ensure that :inverse_of =\\\\u003e nil is set on the association. If the inverse is needed, most likely the inverse cannot be figured out from the names of the associations and you will need to explicitly tell Mongoid on the association what the inverse is.\\\\n\\\\n Example:\\\\n   class Car\\\\n     include Mongoid::Document\\\\n     has_one :engine, class_name: \\\\\"Motor\\\\\", inverse_of: :machine\\\\n   end\\\\n\\\\n   class Motor\\\\n     include Mongoid::Document\\\\n     belongs_to :machine, class_name: \\\\\"Car\\\\\", inverse_of: :engine\\\\n   end\",\"summary\":\"When adding a document to an association, Mongoid attempts to link the newly added document to the base of the association in memory, as well as set the foreign key to link them on the database side. In this case Mongoid could not determine what the inverse foreign key was.\"},\"message_title\":\"message\",\"mixed_client_configuration\":{\"message\":\"Both uri and standard configuration options defined for client: \\'%{name}\\'.\",\"resolution\":\"Provide either only a uri as configuration or only standard options.\",\"summary\":\"Instead of simply giving uri or standard options a preference order, Mongoid assumes that you have made a mistake in your configuration and requires that you provide one or the other, but not both. The options that were provided were: %{config}.\"},\"mixed_relations\":{\"message\":\"Referencing a(n) %{embedded} document from the %{root} document via a non-embedded association is not allowed since the %{embedded} is embedded.\",\"resolution\":\"Consider not embedding %{embedded}, or do the key storage and access in a custom manner in the application code.\",\"summary\":\"In order to properly access a(n) %{embedded} from %{root} the reference would need to go through the root document of %{embedded}. In a simple case this would require Mongoid to store an extra foreign key for the root, in more complex cases where %{embedded} is multiple levels deep a key would need to be stored for each parent up the hierarchy.\"},\"nested_attributes_metadata_not_found\":{\"message\":\"Could not find metadata for association \\'%{name}\\' on model: %{klass}.\",\"resolution\":\"Make sure that there is an association defined named \\'%{name}\\' on %{klass} or that the association definition comes before the accepts_nested_attributes_for macro in the model - order matters so that Mongoid has access to the metadata.\\\\n\\\\n Example:\\\\n   class Band\\\\n     include Mongoid::Document\\\\n     has_many :albums\\\\n     accepts_nested_attributes_for :albums\\\\n   end\\\\n\\\\n\",\"summary\":\"When defining nested attributes for an association, Mongoid needs to access the metadata for the association \\'%{name}\\' in order if add autosave functionality to it, if applicable. Either no association named \\'%{name}\\' could be found, or the association had not been defined yet.\"},\"no_client_config\":{\"message\":\"No configuration could be found for a client named \\'%{name}\\'.\",\"resolution\":\"Double check your mongoid.yml to make sure under the clients key that a configuration exists for \\'%{name}\\'. If you have set the configuration programmatically, ensure that \\'%{name}\\' exists in the configuration hash.\",\"summary\":\"When attempting to create the new client, Mongoid could not find a client configuration for the name: \\'%{name}\\'. This is necessary in order to know the host, port, and options needed to connect.\"},\"no_client_database\":{\"message\":\"No database provided for client configuration: :%{name}.\",\"resolution\":\"If configuring via a mongoid.yml, ensure that within your :%{name} section a :database value for the client\\'s default database is defined.\\\\n\\\\n Example:\\\\n   development:\\\\n     clients:\\\\n       %{name}:\\\\n         database: my_app_db\\\\n         hosts:\\\\n           - localhost:27017\\\\n\\\\n\",\"summary\":\"Each client configuration must provide a database so Mongoid knows where the default database to persist to. What was provided was: %{config}.\"},\"no_client_hosts\":{\"message\":\"No hosts provided for client configuration: :%{name}.\",\"resolution\":\"If configuring via a mongoid.yml, ensure that within your :%{name} section a :hosts value for the client hosts is defined.\\\\n\\\\n Example:\\\\n   development:\\\\n     clients:\\\\n       %{name}:\\\\n         database: my_app_db\\\\n         hosts:\\\\n           - localhost:27017\\\\n\\\\n\",\"summary\":\"Each client configuration must provide hosts so Mongoid knows where the database server is located. What was provided was: %{config}.\"},\"no_clients_config\":{\"message\":\"No clients configuration provided.\",\"resolution\":\"Double check your mongoid.yml to make sure that you have a top-level clients key with at least 1 default client configuration for it. You can regenerate a new mongoid.yml for assistance via `rails g mongoid:config`.\\\\n\\\\n Example:\\\\n   development:\\\\n     clients:\\\\n       default:\\\\n         database: mongoid_dev\\\\n         hosts:\\\\n           - localhost:27017\\\\n\\\\n\",\"summary\":\"Mongoid\\'s configuration requires that you provide details about each client that can be connected to, and requires in the clients config at least 1 default client to exist.\"},\"no_default_client\":{\"message\":\"No default client configuration is defined.\",\"resolution\":\"If configuring via a mongoid.yml, ensure that within your :clients section a :default client is defined.\\\\n\\\\n Example:\\\\n   development:\\\\n     clients:\\\\n       default:\\\\n         hosts:\\\\n           - localhost:27017\\\\n\\\\n\",\"summary\":\"The configuration provided settings for: %{keys}, but Mongoid requires a :default to be defined at minimum.\"},\"no_documents_found\":{\"message\":\"Could not find a document of class %{klass}.\",\"resolution\":\"Create a document of class %{klass} or use a finder method that does not raise an exception when no documents are found.\",\"summary\":\"Mongoid attempted to find a document of the class %{klass} but none exist.\"},\"no_environment\":{\"message\":\"Could not load the configuration since no environment was defined.\",\"resolution\":\"Please ensure an environment is set in one of the listed locations. The environment must be explicitly set.\",\"summary\":\"Mongoid could not determine the environment to use because it was not specified in any of the following locations: Rails.env, Sinatra::Base.environment, ENV[\\\\\"RACK_ENV\\\\\"], ENV[\\\\\"MONGOID_ENV\\\\\"]. Without knowing the environment, Mongoid cannot load its configuration.\"},\"no_map_reduce_output\":{\"message\":\"No output location was specified for the map/reduce operation.\",\"resolution\":\"Provide the location that the output of the operation is to go by chaining an #out call to the map/reduce.\\\\n\\\\n Example:\\\\n   Band.map_reduce(map, reduce).out(inline: 1)\\\\n\\\\n Valid options for the out function are:\\\\n   inline: 1\\\\n   merge: \\'collection-name\\'\\\\n   replace: \\'collection-name\\'\\\\n   reduce: \\'collection-name\\'\\\\n\\\\n\",\"summary\":\"When executing a map/reduce, you must provide the output location of the results. The attempted command was: %{command}.\"},\"no_metadata\":{\"message\":\"Metadata not found for document of type %{klass}.\",\"resolution\":\"Ensure that your associations on the %{klass} model are all properly defined, and that the inverse associations are also properly defined. Embedded associations must have both the parent (embeds_one/embeds_many) and the inverse (embedded_in) present in order to work properly.\",\"summary\":\"Mongoid sets the metadata of an association on the document when it is either loaded from within the association, or added to one. The presence of the metadata is required in order to provide various functionality around associations. Most likely you are getting this error because the document is embedded and was attempted to be persisted without being associated with a parent, or the association was not properly defined.\"},\"no_parent\":{\"message\":\"Cannot persist embedded document %{klass} without a parent document.\",\"resolution\":\"Ensure that you\\'ve set the parent association if instantiating the embedded document directly, or always create new embedded documents via the parent association.\",\"summary\":\"If the document is embedded, in order to be persisted it must always have a reference to its parent document. This is most likely caused by either calling %{klass}.create or %{klass}.create! without setting the parent document as an attribute.\"},\"readonly_attribute\":{\"message\":\"Attempted to set the readonly attribute \\'%{name}\\' with the value: %{value}.\",\"resolution\":\"Don\\'t define \\'%{name}\\' as readonly, or do not attempt to update its value after the document is persisted.\",\"summary\":\"Attributes flagged as readonly via Model.attr_readonly can only have values set when the document is a new record.\"},\"readonly_document\":{\"message\":\"Attempted to persist a readonly document of class \\'%{klass}\\'.\",\"resolution\":\"Don\\'t attempt to persist documents that are flagged as readonly.\",\"summary\":\"Documents that are marked readonly cannot be persisted.\"},\"resolution_title\":\"resolution\",\"scope_overwrite\":{\"message\":\"Cannot create scope :%{scope_name}, because of existing method %{model_name}.%{scope_name}.\",\"resolution\":\"Change the name of the scope so it does not conflict with the already defined method %{model_name}, or set the configuration option Mongoid.scope_overwrite_exception to false, which is its default. In this case a warning will be logged.\",\"summary\":\"When defining a scope that conflicts with a method that already exists on the model, this error will get raised if Mongoid.scope_overwrite_exception is set to true.\"},\"sessions_not_supported\":{\"message\":\"Sessions are not supported by the connected server(s).\",\"resolution\":\"Verify that all servers in your deployment are at least version 3.6 or don\\'t attempt to use sessions with older server versions.\",\"summary\":\"A session was attempted to be used with a MongoDB server version that doesn\\'t support sessions. Sessions are supported in MongoDB server versions 3.6 and higher.\"},\"summary_title\":\"summary\",\"too_many_nested_attribute_records\":{\"message\":\"Accepting nested attributes for %{association} is limited to %{limit} documents.\",\"resolution\":\"The limit is set as an option to the macro, for example: accepts_nested_attributes_for :%{association}, limit: %{limit}. Consider raising this limit or making sure no more are sent than the set value.\",\"summary\":\"More documents were sent to be processed than the allowed limit.\"},\"unknown_attribute\":{\"message\":\"Attempted to set a value for \\'%{name}\\' which is not allowed on the model %{klass}.\",\"resolution\":\"Define the field \\'%{name}\\' in %{klass}, or include Mongoid::Attributes::Dynamic in %{klass} if you intend to store values in fields that are not explicitly defined.\",\"summary\":\"%{klass}#%{name}= was called but there is no \\'%{name}\\' field defined in the model, and Mongoid::Attributes::Dynamic is not included. This error is also raised instead of NoMethodError if the unknown attribute is passed to any method that accepts an attributes hash, such as #attributes=.\"},\"unknown_model\":{\"message\":\"Attempted to instantiate an object of the unknown model \\'%{klass}\\'.\",\"resolution\":\"The _type field is a reserved one used by Mongoid to determine the class for instantiating an object. Please don\\'t save data in this field or ensure that any values in this field correspond to valid models.\",\"summary\":\"A document with the value \\'%{value}\\' at the key \\'_type\\' was used to instantiate a model object but Mongoid cannot find this Class.\"},\"unsaved_document\":{\"message\":\"Attempted to save %{document} before the parent %{base}.\",\"resolution\":\"Make sure to only use create or create! when the parent document %{base} is persisted.\",\"summary\":\"You cannot call create or create! through the association (%{document}) whose parent (%{base}) is not already saved. This would cause the database to be out of sync since the child could potentially reference a nonexistent parent.\"},\"unsupported_javascript\":{\"message\":\"Executing Javascript $where selector on an embedded criteria is not supported.\",\"resolution\":\"Please provide a standard hash to #where when the criteria is for an embedded association.\",\"summary\":\"Mongoid only supports providing a hash of arguments to #where criterion on embedded documents. Since %{klass} is embedded, the expression %{javascript} is not allowed.\"},\"validations\":{\"message\":\"Validation of %{document} failed.\",\"resolution\":\"Try persisting the document with valid data or remove the validations.\",\"summary\":\"The following errors were found: %{errors}\"}}}},\"number\":{\"currency\":{\"format\":{\"delimiter\":\",\",\"format\":\"%u%n\",\"negative_format\":\"-%u%n\",\"precision\":2,\"separator\":\".\",\"significant\":false,\"strip_insignificant_zeros\":false,\"unit\":\"$\"}},\"format\":{\"delimiter\":\",\",\"precision\":3,\"round_mode\":\"default\",\"separator\":\".\",\"significant\":false,\"strip_insignificant_zeros\":false},\"human\":{\"decimal_units\":{\"format\":\"%n %u\",\"units\":{\"billion\":\"Billion\",\"million\":\"Million\",\"quadrillion\":\"Quadrillion\",\"thousand\":\"Thousand\",\"trillion\":\"Trillion\",\"unit\":\"\"}},\"format\":{\"delimiter\":\"\",\"precision\":3,\"significant\":true,\"strip_insignificant_zeros\":true},\"storage_units\":{\"format\":\"%n %u\",\"units\":{\"byte\":{\"one\":\"Byte\",\"other\":\"Bytes\"},\"eb\":\"EB\",\"gb\":\"GB\",\"kb\":\"KB\",\"mb\":\"MB\",\"pb\":\"PB\",\"tb\":\"TB\",\"zb\":\"ZB\"}}},\"nth\":{},\"percentage\":{\"format\":{\"delimiter\":\"\",\"format\":\"%n%\"}},\"precision\":{\"format\":{\"delimiter\":\"\"}}},\"simple_form\":{\"error_notification\":{\"default_message\":\"Please review the problems below:\"},\"no\":\"No\",\"required\":{\"mark\":\"*\",\"text\":\"required\"},\"yes\":\"Yes\"},\"support\":{\"array\":{\"last_word_connector\":\", and \",\"two_words_connector\":\" and \",\"words_connector\":\", \"}},\"time\":{\"am\":\"am\",\"formats\":{\"default\":\"%a, %d %b %Y %H:%M:%S %z\",\"long\":\"%B %d, %Y %H:%M\",\"short\":\"%d %b %H:%M\"},\"pm\":\"pm\"},\"users\":{\"confirmations\":{\"new\":{\"legend\":\"Resend your %{brand_name} confirmation instructions\",\"message\":\"We need to confirm your email address to complete the sign up process. Supply your email address, below, and we will send you instructions on how to confirm your address.\",\"submit_button\":\"Send Confirmation Instructions\",\"title\":\"Resend confirmation instructions | %{brand_name}\"},\"show\":{\"legend\":\"Check your inbox for a confirmation email\",\"message\":\"If your e-mail exists in our database we have sent you a message with instructions. Check your inbox (or spam folder) for a message from \\'%{default_from_email}\\' containing the confirmation link.\",\"title\":\"Awaiting confirmation | %{brand_name}\"}},\"passwords\":{\"new\":{\"failures\":\"Note: If you make more than 5 sequential failed attempts to sign in with your %{brand_name} password, your account will be (temporarily) locked. Check your inbox for instruction on how to unlock your account, or we can\",\"legend\":\"Reset your %{brand_name} password\",\"message\":\"Supply your email address, below, and we will send you instructions on how to reset your password.\",\"resend_link\":\"resend a new set of unlock instructions\",\"submit_button\":\"Send Reset Instructions\",\"title\":\"Reset password | %{brand_name}\"},\"show\":{\"didnt_receive_email\":\"Didn\\'t receive the email?\",\"legend\":\"Password reset instructions sent\",\"message\":\"If your e-mail exists in our database we have sent you a message with password reset instructions. Check your inbox (or spam folder) for a message from \\'%{default_from_email}\\'.\",\"resend_link\":\"you can request another one here\",\"title\":\"Awaiting reset | %{brand_name}\"}}},\"will_paginate\":{\"container_aria_label\":\"Pagination\",\"next_label\":\"Next \\\\u0026#8594;\",\"page_aria_label\":\"Page %{page}\",\"page_entries_info\":{\"multi_page\":\"Displaying %{model} %{from} - %{to} of %{count} in total\",\"multi_page_html\":\"Displaying %{model} \\\\u003cb\\\\u003e%{from}\\\\u0026nbsp;-\\\\u0026nbsp;%{to}\\\\u003c/b\\\\u003e of \\\\u003cb\\\\u003e%{count}\\\\u003c/b\\\\u003e in total\",\"single_page\":{\"one\":\"Displaying 1 %{model}\",\"other\":\"Displaying all %{count} %{model}\",\"zero\":\"No %{model} found\"},\"single_page_html\":{\"one\":\"Displaying \\\\u003cb\\\\u003e1\\\\u003c/b\\\\u003e %{model}\",\"other\":\"Displaying \\\\u003cb\\\\u003eall\\\\u0026nbsp;%{count}\\\\u003c/b\\\\u003e %{model}\",\"zero\":\"No %{model} found\"}},\"page_gap\":\"\\\\u0026hellip;\",\"previous_label\":\"\\\\u0026#8592; Previous\"}}'));\nI18n.translations[\"clinwire\"] = I18n.extend((I18n.translations[\"clinwire\"] || {}), JSON.parse('{\"activerecord\":{\"errors\":{\"messages\":{\"record_invalid\":\"Validation failed: %{errors}\",\"restrict_dependent_destroy\":{\"has_many\":\"Cannot delete record because dependent %{record} exist\",\"has_one\":\"Cannot delete record because a dependent %{record} exists\"}}}},\"brand\":{\"logo\":{\"full_image\":{\"file_name\":\"zymewire_logo_full.png\",\"path\":\"images/brand_specific/clinwire/clinwire_logo_black_trans.png\"},\"header\":{\"path\":\"/images/brand_specific/clinwire/clinwire_logo_black_trans.png\"},\"mark_only\":{\"file_name\":\"zymewire_logo_z_only.png\",\"path\":\"images/brand_specific/clinwire/clinwire_logo_black_trans.png\"}},\"meta\":{\"description\":\"Clinwire offers a powerful sales intelligence platform tailored for the biotech and pharma industry. Access actionable insights and data to drive business development strategies. Trusted by leading CROs, CDMOs, and other service providers. Optimize your sales approach today!\",\"image\":\"https://www.zymewire.com/images/brand_specific/zymewire/meta_image.png\",\"title\":\"Zymewire: Catalyze your sales.\"},\"name\":\"Clinwire\",\"tag_line\":\"Catalyze your sales.\"},\"bulk_uploads\":{\"email_local_part\":{\"empty_parameter\":\"No file uploaded\",\"error\":\"File Upload failed: %{error_message}\",\"success\":\"File was successfully uploaded\"}},\"common\":{\"crm\":{\"salesforce\":{\"forgot_password\":\"If you have forgotten your Salesforce password, please follow the instructions provided on the Salesforce sign in page.\",\"sign_in_button\":\"Sign In with Salesforce\"}}},\"contact\":{\"default_from_email\":\"info@zymewire.com\",\"phone_numbers\":[{\"label\":\"US\",\"phone\":\"1-844-996-3321\"},{\"label\":\"UK\",\"phone\":\"+44-208-133-9963\"}],\"support_email\":\"support@zymewire.com\"},\"date\":{\"abbr_day_names\":[\"Sun\",\"Mon\",\"Tue\",\"Wed\",\"Thu\",\"Fri\",\"Sat\"],\"abbr_month_names\":[null,\"Jan\",\"Feb\",\"Mar\",\"Apr\",\"May\",\"Jun\",\"Jul\",\"Aug\",\"Sep\",\"Oct\",\"Nov\",\"Dec\"],\"day_names\":[\"Sunday\",\"Monday\",\"Tuesday\",\"Wednesday\",\"Thursday\",\"Friday\",\"Saturday\"],\"formats\":{\"default\":\"%Y-%m-%d\",\"long\":\"%B %d, %Y\",\"short\":\"%b %d\"},\"month_names\":[null,\"January\",\"February\",\"March\",\"April\",\"May\",\"June\",\"July\",\"August\",\"September\",\"October\",\"November\",\"December\"],\"order\":[\"year\",\"month\",\"day\"]},\"datetime\":{\"distance_in_words\":{\"about_x_hours\":{\"one\":\"about 1 hour\",\"other\":\"about %{count} hours\"},\"about_x_months\":{\"one\":\"about 1 month\",\"other\":\"about %{count} months\"},\"about_x_years\":{\"one\":\"about 1 year\",\"other\":\"about %{count} years\"},\"almost_x_years\":{\"one\":\"almost 1 year\",\"other\":\"almost %{count} years\"},\"half_a_minute\":\"half a minute\",\"less_than_x_minutes\":{\"one\":\"less than a minute\",\"other\":\"less than %{count} minutes\"},\"less_than_x_seconds\":{\"one\":\"less than 1 second\",\"other\":\"less than %{count} seconds\"},\"over_x_years\":{\"one\":\"over 1 year\",\"other\":\"over %{count} years\"},\"x_days\":{\"one\":\"1 day\",\"other\":\"%{count} days\"},\"x_minutes\":{\"one\":\"1 minute\",\"other\":\"%{count} minutes\"},\"x_months\":{\"one\":\"1 month\",\"other\":\"%{count} months\"},\"x_seconds\":{\"one\":\"1 second\",\"other\":\"%{count} seconds\"}},\"prompts\":{\"day\":\"Day\",\"hour\":\"Hour\",\"minute\":\"Minute\",\"month\":\"Month\",\"second\":\"Seconds\",\"year\":\"Year\"}},\"default_host\":\"https://www.zymewire.com\",\"devise\":{\"confirmations\":{\"confirmed\":\"Your account was successfully confirmed. Please sign in.\",\"send_instructions\":\"Your email has not been confirmed. We need to confirm your email account before you can sign in. Please check your inbox or spam folder for an email from \\'info@zymewire.com\\' or request a new one.\",\"send_paranoid_instructions\":\"If your e-mail exists on our database, you will receive an email with instructions about how to confirm your account in a few minutes.\"},\"failure\":{\"already_authenticated\":\"You are already signed in.\",\"expired\":\"Your account has expired due to inactivity. Please contact the site administrator.\",\"inactive\":\"Your account was not activated yet.\",\"invalid\":\"Invalid email or password. If you use Salesforce, use the \\'Have Salesforce?\\' panel.\",\"invalid_token\":\"Invalid authentication token.\",\"last_attempt\":\"You have one more attempt before your account is locked.\",\"locked\":\"Your account is locked.\",\"not_active\":\"Your account has been de-activated, if you think this is a mistake please contact us\",\"not_found_in_database\":\"Invalid %{authentication_keys} or password.\",\"session_limited\":\"Your login credentials were used in another browser. Please sign in again to continue in this browser.\",\"timeout\":\"Your session expired, please sign in again to continue.\",\"unauthenticated\":\"You need to sign in or sign up before continuing.\",\"unconfirmed\":\"We must confirm your email before you can continue. Please check your inbox or spam folder for a confirmation email from \\'info@zymewire.com\\' or request a new one.\"},\"invalid_captcha\":\"The captcha input is not valid!\",\"invalid_security_question\":\"The security question answer was invalid.\",\"mailer\":{\"confirmation_instructions\":{\"subject\":\"Confirmation instructions for Zymewire.com\"},\"email_changed\":{\"subject\":\"Email Changed\"},\"password_change\":{\"subject\":\"Password Changed\"},\"reset_password_instructions\":{\"subject\":\"Reset password instructions for Zymewire.com\"},\"unlock_instructions\":{\"subject\":\"Unlock Instructions for Zymewire.com\"}},\"omniauth_callbacks\":{\"failure\":\"Could not authorize you from %{kind} because \\\\\"%{reason}\\\\\".\",\"success\":\"Successfully authorized from %{kind} account.\"},\"paranoid_verification_code\":{\"show\":{\"submit\":\"Submit\",\"submit_verification_code\":\"Submit verification code\",\"verification_code\":\"Verification code\"},\"updated\":\"Verification code accepted\"},\"paranoid_verify\":{\"code_required\":\"Please enter the code our support team provided\"},\"password_expired\":{\"change_required\":\"Your password has expired. Please choose a new password!\",\"show\":{\"change_my_password\":\"Change my password\",\"current_password\":\"Current password\",\"new_password\":\"New password\",\"new_password_confirmation\":\"Confirm new password\",\"renew_your_password\":\"Renew your password\"},\"updated\":\"Your new password is saved.\"},\"passwords\":{\"no_token\":\"You can\\'t access this page without coming from a password reset email. If you do come from a password reset email, please make sure you used the full URL provided.\",\"send_instructions\":\"You will receive an email with instructions about how to reset your password in a few minutes.\",\"send_paranoid_instructions\":\"If your e-mail exists on our database, you will receive a password recovery link on your e-mail\",\"updated\":\"Your password was changed successfully. You are now signed in.\",\"updated_not_active\":\"Your password was changed successfully.\"},\"registrations\":{\"destroyed\":\"Bye! Your account was successfully cancelled. We hope to see you again soon.\",\"signed_up\":\"Welcome! You have signed up successfully.\",\"signed_up_but_inactive\":\"You have signed up successfully. However, we could not sign you in because your account is not yet activated.\",\"signed_up_but_locked\":\"You have signed up successfully. However, we could not sign you in because your account is locked.\",\"signed_up_but_unconfirmed\":\"A message with a confirmation link has been sent to your email address. Please open the link to activate your account.\",\"update_needs_confirmation\":\"You updated your account successfully, but we need to verify your new email address. Please check your email and click on the confirm link to finalize confirming your new email address.\",\"updated\":\"You updated your account successfully.\",\"updated_but_not_signed_in\":\"Your account has been updated successfully, but since your password was changed, you need to sign in again.\"},\"sessions\":{\"already_signed_out\":\"Signed out successfully.\",\"signed_in\":\"Signed in successfully.\",\"signed_out\":\"Signed out successfully.\"},\"unlocks\":{\"send_instructions\":\"You will receive an email with instructions about how to unlock your account in a few minutes.\",\"send_paranoid_instructions\":\"If your account exists, you will receive an email with instructions about how to unlock it in a few minutes.\",\"unlocked\":\"Your account has been unlocked successfully. Please sign in to continue.\"}},\"disable_crm_login_option\":\"true\",\"domain\":\"zymewire.com\",\"download\":\"Download\",\"download_30_days\":\"This link will be available for 30 days after which the file will be removed from our servers.\",\"enumerize\":{\"blocklisted_contact\":{\"provider\":{\"insideview\":\"InsideView\",\"zephyr\":\"Zephyr\"}}},\"errors\":{\"format\":\"%{attribute} %{message}\",\"messages\":{\"accepted\":\"must be accepted\",\"already_confirmed\":\"was already confirmed, please try signing in\",\"blank\":\"can\\'t be blank\",\"confirmation\":\"doesn\\'t match %{attribute}\",\"confirmation_period_expired\":\"needs to be confirmed within %{period}, please request a new one\",\"empty\":\"can\\'t be empty\",\"equal_to\":\"must be equal to %{count}\",\"equal_to_current_password\":\"Sorry, must be different to your current password!\",\"equal_to_email\":\"must be different than the email.\",\"even\":\"must be even\",\"exclusion\":\"is reserved\",\"expired\":\"has expired, please request a new one\",\"greater_than\":\"must be greater than %{count}\",\"greater_than_or_equal_to\":\"must be greater than or equal to %{count}\",\"in\":\"must be in %{count}\",\"inclusion\":\"is not included in the list\",\"invalid\":\"is invalid\",\"less_than\":\"must be less than %{count}\",\"less_than_or_equal_to\":\"must be less than or equal to %{count}\",\"model_invalid\":\"Validation failed: %{errors}\",\"not_a_number\":\"is not a number\",\"not_an_integer\":\"must be an integer\",\"not_found\":\"not found\",\"not_locked\":\"was not locked\",\"not_saved\":{\"one\":\"1 error prohibited this %{resource} from being saved:\",\"other\":\"%{count} errors prohibited this %{resource} from being saved:\"},\"odd\":\"must be odd\",\"other_than\":\"must be other than %{count}\",\"password_complexity\":{\"digit\":{\"one\":\"must contain at least one digit\",\"other\":\"must contain at least %{count} digits\"},\"lower\":{\"one\":\"must contain at least one lower-case letter\",\"other\":\"must contain at least %{count} lower-case letters\"},\"symbol\":{\"one\":\"must contain at least one punctuation mark or symbol\",\"other\":\"must contain at least %{count} punctuation marks or symbols\"},\"upper\":{\"one\":\"must contain at least one upper-case letter\",\"other\":\"must contain at least %{count} upper-case letters\"}},\"password_format\":\"Must contain uppercase AND lowercase letters and at least one number\",\"password_too_long\":\"is too long\",\"present\":\"must be blank\",\"required\":\"must exist\",\"taken\":\"has already been taken\",\"taken_in_past\":\"Sorry, you have used this password before!\",\"too_long\":{\"one\":\"is too long (maximum is 1 character)\",\"other\":\"is too long (maximum is %{count} characters)\"},\"too_short\":{\"one\":\"is too short (minimum is 1 character)\",\"other\":\"is too short (minimum is %{count} characters)\"},\"wrong_length\":{\"one\":\"is the wrong length (should be 1 character)\",\"other\":\"is the wrong length (should be %{count} characters)\"}}},\"flash\":{\"actions\":{\"create\":{\"notice\":\"%{resource_name} was successfully created.\"},\"destroy\":{\"alert\":\"%{resource_name} could not be destroyed.\",\"notice\":\"%{resource_name} was successfully destroyed.\"},\"update\":{\"notice\":\"%{resource_name} was successfully updated.\"}}},\"hello_world\":\"Hello world\",\"help\":{\"articles\":{\"crm_mining\":\"/help/articles/13976-mine-your-companys-salesforce-for-opportunities\",\"finding_contact_info\":\"/help/articles/13987-finding-contact-information\",\"guide_d\":\"/help/guide_d\",\"guide_g\":\"/help/guide_g\",\"guide_h\":\"/help/guide_h\",\"guide_i\":\"/help/guide_i\",\"guide_j\":\"/help/guide_j\",\"list_crud_c\":\"/help/articles/13985-generating-a-list\",\"list_crud_u\":\"/help/articles/18991-adding-and-removing-individual-companies-from-a-list\",\"map_search\":\"/help/articles/13980-map-based-searching\",\"saving_feeds\":\"/help/articles/13986-saving-feeds\"},\"site\":\"https://zymewire.helpsite.com/\"},\"helpers\":{\"select\":{\"prompt\":\"Please select\"},\"submit\":{\"create\":\"Create %{model}\",\"submit\":\"Save %{model}\",\"update\":\"Update %{model}\"}},\"hi\":\"Hi\",\"industry\":\"drug sponsor\",\"mailers\":{\"common\":{\"chummy_sign_off\":\"Have a good one.\",\"final_note\":\"P.S.: If you think you received this email accidentally, then something weird could be going on. Hit reply and a member of the %{brand_name} team will investigate.\",\"team_sign_off\":\"- The %{brand_name} Team\"},\"confirmation_instructions_email\":{\"crm\":{\"salesforce\":{\"resource_confirmed\":\"Someone has requested a resend of a confirmation email. You do not need to confirm your email address because your account is configured to use Salesforce to sign in.\",\"resource_unconfirmed\":\"You do not need to confirm your email address because your account is configured to use Salesforce to sign in, please complete the sign up process by clicking the button below to sign in to %{brand_name} via Salesforce.\"}},\"non_crm\":{\"confirm_link\":\"Confirm my account\",\"welcome\":\"Welcome to %{brand_name}. As the final step in the process you\\'ll need to confirm your account by clicking on the link below.\"},\"subject\":\"Confirmation instructions for %{domain}\"},\"flagged_events_mailer\":{\"from\":\"Flagged events - %{brand_name} \\\\u003cflagged_events@mailer.%{domain}\\\\u003e\"},\"mobile_registration_email\":{\"alert_cs_registration_locked\":{\"subject\":\"%{brand_name}: user has had mobile registration locked, too many failed attempts\"},\"dispatch_registration_PIN\":{\"further_instructions\":\"If you are NOT attempting to register for the %{brand_name} Mobile app then please let us know at %{support_email_link} - thank you.\",\"introduction\":\"Here is your mobile app registration PIN:\",\"subject\":\"%{brand_name} Mobile Registration Verification\"},\"too_many_failed_attempts\":{\"introduction\":\"We have received too many failed mobile device registration attempts for your account and we will block any further requests. If you have not attempted to register a mobile device with us in the last hour then please let us know as it is likely someone has tried on your behalf. If you have been trying to register a device please contact %{support_email_link} and we can help unlock your account and get you registered.\",\"subject\":\"%{brand_name}: too many failed registration attempts\"}},\"org_list_download_mail\":{\"dispatch_link\":{\"introduction\":\"We have finished meshing your %{crm_brand_name} data with the companies in your \\\\\"%{list_name}\\\\\" list.\",\"subject\":\"%{brand_name}: your file download of \\'%{list_name}\\' is ready\"},\"failed\":{\"instructions\":\"You could try again in a little while. If you already have and are receiving this email again, please contact us at %{support_email_link}\",\"introduction\":\"We are really sorry, but something went wrong with creating your download of %{crm_brand_name} data for your \\\\\"%{list_name}\\\\\" list.\",\"subject\":\"%{brand_name}: your file download of \\'%{list_name}\\' failed\"}},\"reset_password_instructions_email\":{\"crm\":{\"salesforce\":{\"change_requested\":\"Someone has requested a change to your password. Your account is configured to use Salesforce to sign in.\"}},\"fishy_fine_print\":\"If you did not request a password change, then something weird is going on. Someone may be trying to access your account (unsuccessfully). Please reply to this email and let us know. We will take steps to make sure it stops.\",\"non_crm\":{\"change_password_link\":\"Change my password\",\"change_requested\":\"Someone has requested a change to your password, you can do this via the link below.\"},\"subject\":\"Password reset instructions for %{domain}\"},\"sales_force_mail\":{\"processing_completed\":{\"bullet_points\":[\"Only show events associated with companies in your Salesforce account\",\"Add new contacts and accounts to your Salesforce account without leaving %{brand_name}\",\"Access the \\'Salesforce details\\' panel on company dashboards where you can see open tasks, team interactions, opportunities, and more!\"],\"further_instructions\":\"We\\'re here to help. If you run into any questions or challenges, please contact us at %{support_email_link} and a member of our team would be more than happy to help.\",\"get_the_most\":\"To get the most from the integration, check out the \\'Mine Salesforce for opportunities\\' guide in the Help Center.\",\"guide_button\":\"Take me to the guide\",\"introduction\":\"Good news - your Salesforce account is now integrated with %{brand_name}. Now you’ll be able to:\"}},\"segment_contact\":{\"report_manager\":{\"fail_subject\":\"%{brand_name}: The PDF report generation failed\",\"success_subject\":\"%{brand_name}: Your PDF for %{company_name} is attached\"}},\"sf_token_expiry_email\":{\"further_instructions\":\"If you run into any questions or challenges, please contact us at %{support_email_link} and a member of our team would be more than happy to help.\",\"introduction\":\"Unfortunately the connection established for you between %{brand_name} and your %{crm_brand_name} account has expired. We will not be able to update your lists in %{brand_name} to reflect your %{crm_brand_name} database. To re-establish the connection, you just need to log in to %{brand_name} using your %{crm_brand_name}.\",\"subject\":\"%{brand_name} to %{crm_brand_name} connection has expired\"},\"share_list_mail\":{\"introduction\":\"%{user_name} shared a list with you: \",\"subject\":\"[%{brand_name} - shared list] %{list_name}\"},\"trial_expiry_mail\":{\"seven_days_to_go\":{\"further_instructions\":\"A member of our fabulous Customer Success team will arrange a welcome call with you to understand your goals and priorities, and will then give you a personalized Tour de %{brand_name} so you can easily access the information that is most valuable to you.\",\"instructions\":\"If you\\'d like continued access to the platform with our flexible month-to-month subscription, please ensure you contact %{support_email_link} ahead of: %{deadline}\",\"introduction\":\"Time flies when you\\'re uncovering new business opportunities! Your %{brand_name} trial is coming to an end next week.\",\"sign_off\":\"We look forward to helping you reach your sales goals!\",\"subject\":\"Just a heads up that your %{brand_name} trial is ending in seven days\"},\"seven_days_to_go_warning_for_cs\":{\"introduction\":\"%{user_name} shared a list with you: \",\"subject\":\"[%{brand_name} - shared list] %{list_name}\"}},\"unlock_instructions_email\":{\"crm\":{\"salesforce\":{\"change_requested\":\"You are being sent this email either because of one too many unsuccessful non-Salesforce log-in attempts or someone has requested an unlock email. %{brand_name} has not locked your account because your account is configured to use Salesforce to sign in.\",\"password_forgotten\":\"If you have forgotten your Salesforce password or think your account has been locked by Salesforce, please follow the instructions provided on the Salesforce sign in page.\"}},\"fishy_fine_print\":\"If you have not been (unsuccessfully) trying to log in to your account, then something weird is going on. Someone may be trying to access your account (unsuccessfully). Please reply to this email and let us know. We will take steps to make sure it stops.\",\"non_crm\":{\"change_requested\":\"For security reasons we have locked your account because of too many log-in attempts. To unlock your account, click the link below.\",\"unlock_account_link\":\"Unlock my account\"},\"subject\":\"Unlock instructions for %{domain}\"}},\"mobile_website\":{\"cta\":\"Sign Up to Newsletter\",\"cta_link\":\"https://share.hsforms.com/1FtKCDTqSQrWmsviuJDnupgbm5d1\",\"header\":\"Desktop access only (For now!)\",\"message\":\"Head to your desktop to sign into Zymewire. The mobile app isn\\'t ready yet, but hopefully not for long!\",\"prompt\":\"Stay updated\"},\"mongoid\":{\"errors\":{\"messages\":{\"ambiguous_relationship\":{\"message\":\"Ambiguous associations %{candidates} defined on %{klass}.\",\"resolution\":\"On the %{name} association on %{inverse} you must add an :inverse_of option to specify the exact association on %{klass} that is the opposite of %{name}.\",\"summary\":\"When Mongoid attempts to set an inverse document of an association in memory, it needs to know which association it belongs to. When setting %{name}, Mongoid looked on the class %{inverse} for a matching association, but multiples were found that could potentially match: %{candidates}.\"},\"blank_in_locale\":\"can\\'t be blank in %{location}\",\"callbacks\":{\"message\":\"Calling %{method} on %{klass} resulted in a false return from a callback.\",\"resolution\":\"Double check all before callbacks to make sure they are not unintentionally returning false.\",\"summary\":\"If a before callback returns false when using Document.create!, Document#save!, or Document#update_attributes! this error will get raised since the document did not actually get saved.\"},\"calling_document_find_with_nil_is_invalid\":{\"message\":\"Calling Document.find with nil is invalid.\",\"resolution\":\"Most likely this is caused by passing parameters directly through to the find, and the parameter either is not present or the key from which it is accessed is incorrect.\",\"summary\":\"Document.find expects the parameters to be 1 or more ids, and will return a single document if 1 id is provided, otherwise an array of documents if multiple ids are provided.\"},\"create_collection_failure\":{\"message\":\"Cannot create collection %{collection_name} with options %{collection_options}. The following error was raised: %{error}.\",\"resolution\":\"Double check that collection options for the collection %{collection_name} are valid. Consult with Ruby driver documentation and MongoDB documentation if the desired options are supported by your version of the server.\",\"summary\":\"The server rejected createCollection command with given collection options. This may happen when some of the options are invalid, or not supported by your version of the server.\"},\"criteria_argument_required\":{\"message\":\"Calling Criteria methods with nil arguments is not allowed.\",\"resolution\":\"Invoke Criteria methods with non-nil arguments or omit the respective invocations.\",\"summary\":\"Arguments to Criteria methods cannot be nil, and most Criteria methods require at least one argument. Only logical operations (and, or, nor and not), `all\\' and `where\\' can be called without arguments. The method that was called with nil argument was: %{query_method}.\"},\"delete_restriction\":{\"message\":\"Cannot destroy %{document} because of dependent \\'%{relation}\\'.\",\"resolution\":\"Don\\'t attempt to delete the parent %{document} when it has children, or change the dependent option on the association.\",\"summary\":\"When defining \\'%{relation}\\' with a :dependent =\\\\u003e :restrict_with_error, Mongoid will raise an error when attempting to destroy the %{document} when the child \\'%{relation}\\' still has documents in it.\"},\"destroy_restrict_with_error_dependencies_exist\":\"is not empty and prevents the document from being destroyed\",\"document_not_destroyed\":{\"message\":\"%{klass} with id %{id} was not destroyed.\",\"resolution\":\"Check the before/after destroy callbacks to ensure that the return values are truthy for the chain to continue.\",\"summary\":\"When calling %{klass}#destroy! and a callback halts the destroy callback chain by returning a false value, the deletion will not actually occur.\"},\"document_not_found\":{\"message\":\"Document(s) not found for class %{klass} with id(s) %{missing}.\",\"resolution\":\"Search for an id that is in the database or set the Mongoid.raise_not_found_error configuration option to false, which will cause nil to be returned instead of raising this error when searching for a single id, or only the matched documents when searching for multiples.\",\"summary\":\"When calling %{klass}.find with an id or array of ids, each parameter must match a document in the database or this error will be raised. The search was for the id(s): %{searched} (%{total} total) and the following ids were not found: %{missing}.\"},\"document_with_attributes_not_found\":{\"message\":\"Document not found for class %{klass} with attributes %{attributes}.\",\"resolution\":\"Search for attributes that are in the database or set the Mongoid.raise_not_found_error configuration option to false, which will cause nil to be returned instead of raising this error.\",\"summary\":\"When calling %{klass}.find_by with a hash of attributes, all attributes provided must match a document in the database or this error will be raised.\"},\"document_with_shard_key_not_found\":{\"message\":\"Document not found for class %{klass} with id %{missing} and shard key %{shard_key}.\",\"resolution\":\"Search for an id/shard key that is in the database or set the Mongoid.raise_not_found_error configuration option to false, which will cause nil to be returned instead of raising this error.\",\"summary\":\"When calling %{klass}.find with an id and a shard key, each parameter must match a document in the database or this error will be raised. The search was for the id: %{missing} with shard_key: %{shard_key} and it was not found.\"},\"drop_collection_failure\":{\"message\":\"Cannot drop collection %{collection_name}.\",\"resolution\":\"Try to drop the collection manually using Ruby driver or mongo shell.\",\"summary\":\"Mongoid tried to drop collection %{collection_name}, but the collection still exists in the database.\"},\"empty_config_file\":{\"message\":\"Empty configuration file: %{path}.\",\"resolution\":\"Ensure your configuration file contains the correct contents. Refer to: https://www.mongodb.com/docs/mongoid/current/reference/configuration/\",\"summary\":\"Your mongoid.yml configuration file appears to be empty.\"},\"immutable_attribute\":{\"message\":\"Attempted to change the immutable attribute \\'%{name}\\' with the value: %{value}.\",\"resolution\":\"Do not attempt to update the value of \\'%{name}\\' after the document is persisted.\",\"summary\":\"Immutable attributes can only have values set when the document is a new record.\"},\"in_memory_collation_not_supported\":{\"message\":\"A collation option cannot be applied when querying documents in-memory.\",\"resolution\":\"Remove the collation option from the query.\",\"summary\":\"The query being run against documents in memory has a collation option set. A collation option is only supported if the query is executed on a MongoDB server with version \\\\u003e= 3.4.\"},\"invalid_async_query_executor\":{\"message\":\"Invalid async_query_executor option: %{executor}.\",\"resolution\":\"Pick an allowed option or fix the typo. If you were expecting the option to be there, please consult the following page with respect to Mongoid\\'s configuration:\\\\n\\\\n   https://www.mongodb.com/docs/mongoid/current/reference/configuration/#mongoid-configuration-options\",\"summary\":\"A invalid async query executor was specified. The valid options are: %{options}.\"},\"invalid_collection\":{\"message\":\"Access to the collection for %{klass} is not allowed.\",\"resolution\":\"For access to the collection that the embedded document is in, use %{klass}#_root.collection, or do not attempt to persist an embedded document without a parent set.\",\"summary\":\"%{klass}.collection was called, and %{klass} is an embedded document - it resides within the collection of the root document of the hierarchy.\"},\"invalid_config_file\":{\"message\":\"Invalid configuration file: %{path}.\",\"resolution\":\"Ensure your configuration file contains the correct contents. Refer to: https://www.mongodb.com/docs/mongoid/current/reference/configuration/\",\"summary\":\"Your mongoid.yml configuration file does not contain the correct file structure.\"},\"invalid_config_option\":{\"message\":\"Invalid configuration option: %{name}.\",\"resolution\":\"Remove the invalid option or fix the typo. If you were expecting the option to be there, please consult the following page with respect to Mongoid\\'s configuration:\\\\n\\\\n   http://mongoid.org/en/mongoid/docs/installation.html\",\"summary\":\"A invalid configuration option was provided in your mongoid.yml, or a typo is potentially present. The valid configuration options are: %{options}.\"},\"invalid_dependent_strategy\":{\"message\":\"Invalid dependent strategy: %{invalid_strategy}.\",\"resolution\":\"Change the dependent strategy to one of the valid types.\",\"summary\":\"An invalid dependent strategy was defined for the association: %{association}. The valid strategies are: %{valid_strategies}.\"},\"invalid_discriminator_key_target\":{\"message\":\"Setting the discriminator key on a child class is not allowed.\",\"resolution\":\"Try setting the discriminator key on %{superclass} or one of %{class_name}\\'s ancestors.\",\"summary\":\"The discriminator key on the class %{class_name} was attempted to be changed. Changing the discriminator key on a child class is not allowed.\"},\"invalid_dot_dollar_assignment\":{\"message\":\"Cannot set the %{attr} attribute on the %{klass} class.\",\"resolution\":\"In order to set fields that start with a dollar sign ($) or contain a dot/period (.), the aggregation pipeline can be used. MongoDB provides specific operators for working with these fields. Refer to the MongoDB documentation here: https://www.mongodb.com/docs/manual/core/dot-dollar-considerations/\",\"summary\":\"Calling the setters for fields that start with a dollar sign ($) or contain a dot/period (.) is prohibited. See the Mongoid documentation on Field Names with Dots/Periods (.) and Dollar Signs ($) for more information.\"},\"invalid_elem_match_operator\":{\"message\":\"Invalid $elemMatch operator \\'%{operator}\\'.\",\"resolution\":\"Valid field operators are: %{valid_operators}. Ensure you are using one of these operators.\",\"summary\":\"You misspelled an operator or are using an operator that Mongoid does not support.\"},\"invalid_estimated_count_criteria\":{\"message\":\"Invalid criteria for estimated_count.\",\"resolution\":\"Try calling estimated_count directly on the class: %{class_name}.estimated_count.\\\\n\\\\n  If the class defines a default scope, use unscoped: %{class_name}.unscoped.estimated_count.\",\"summary\":\"Estimated count is strictly a collection-level operation and cannot be called on a filtered criteria.\"},\"invalid_expression_operator\":{\"message\":\"Invalid expression operator \\'%{operator}\\'.\",\"resolution\":\"Valid expression operators are: %{valid_operators}. Ensure you are using one of these operators.\",\"summary\":\"You misspelled an operator, are using an operator that Mongoid does not support, or are trying to use a field-level operator on expression level.\"},\"invalid_field\":{\"message\":\"Defining a field named \\'%{field}\\' is not allowed.\",\"resolution\":\"Use Mongoid.destructive_fields to see what names are not allowed, and don\\'t use these names. These include names that also conflict with core Ruby methods on Object, Module, Enumerable, or included gems that inject methods into these or Mongoid internals.\",\"summary\":\"Defining this field would override the method \\'%{name}\\', which would cause issues with expectations around the original method and cause extremely hard to debug issues. The original method was defined in:\\\\n   Object: %{origin}\\\\n   File: %{file}\\\\n   Line: %{line}\"},\"invalid_field_operator\":{\"message\":\"Invalid field operator \\'%{operator}\\'.\",\"resolution\":\"Valid field operators are: %{valid_operators}. Ensure you are using one of these operators.\",\"summary\":\"You misspelled an operator, are using an operator that Mongoid does not support, or are trying to use an expression-level operator on field level.\"},\"invalid_field_option\":{\"message\":\"Invalid option :%{option} provided for field :%{name}.\",\"resolution\":\"When defining the field :%{name} on \\'%{klass}\\', please provide valid options for the field. These are currently: %{valid}. If you meant to define a custom field option, please do so first as follows:\\\\n\\\\n   Mongoid::Fields.option :%{option} do |model, field, value|\\\\n     # Your logic here...\\\\n   end\\\\n   class %{klass}\\\\n     include Mongoid::Document\\\\n     field :%{name}, %{option}: true\\\\n   end\\\\n\\\\n Refer to: https://www.mongodb.com/docs/mongoid/current/reference/fields/#custom-field-options\",\"summary\":\"Mongoid requires that you only provide valid options on each field definition in order to prevent unexpected behavior later on.\"},\"invalid_field_type\":{\"message\":\"Invalid field type %{type_inspection} for field \\'%{field}\\' on model \\'%{klass}\\'.\",\"resolution\":\"Please provide a valid type value for the field. Refer to: https://www.mongodb.com/docs/mongoid/current/reference/fields/#using-symbols-or-strings-instead-of-classes\",\"summary\":\"Model \\'%{klass}\\' defines a field \\'%{field}\\' with an unknown type value %{type_inspection}.\"},\"invalid_global_executor_concurrency\":{\"message\":\"Invalid global_executor_concurrency option.\",\"resolution\":\"Set global_executor_concurrency option to :global_thread_pool or remove global_executor_concurrency option.\",\"summary\":\"You set global_executor_concurrency while async_query_executor option is not set to :global_thread_pool. The global_executor_concurrency is allowed only for the global thread pool executor.\"},\"invalid_includes\":{\"message\":\"Invalid includes directive: %{klass}.includes(%{args})\",\"resolution\":\"Ensure that each parameter passed to %{klass}.includes is a valid name of an association on the %{klass} model. These are: %{relations}.\",\"summary\":\"Eager loading in Mongoid only supports providing arguments to %{klass}.includes that are the names of associations on the %{klass}.\"},\"invalid_index\":{\"message\":\"Invalid index specification on %{klass}: %{spec}, %{options}\",\"resolution\":\"Ensure that the index conforms to the correct syntax and has the correct options.\\\\n\\\\n Valid options are:\\\\n   background: true|false\\\\n   database: \\'database_name\\'\\\\n   name: \\'index_name\\'\\\\n   sparse: true|false\\\\n   unique: true|false\\\\n   min: 1\\\\n   max: 1\\\\n   bits: 26\\\\n   key: 26\\\\n   bucket_size : 1\\\\n   sphere_version : 1\\\\n   text_version : 1\\\\n   version : 1\\\\n   weights: { content: 1, title: 2 }\\\\n   expire_after_seconds: number_of_seconds\\\\n   partial_filter_expression\\\\n   storage_engine\\\\n   language_override\\\\n   default_language\\\\n   collation\\\\n   wildcard_projection: { \\'path.to.field.a\\': 1, \\'path.to.field.b\\': 0 }\\\\n Valid types are: 1, -1, \\'2d\\', \\'2dsphere\\', \\'geoHaystack (deprecated)\\', \\'text\\', \\'hashed\\'\\\\n\\\\n Example:\\\\n   class Band\\\\n     include Mongoid::Document\\\\n     index({ name: 1, label: -1 }, { sparse: true })\\\\n     index({ location: \\'2d\\' }, { background: true })\\\\n   end\\\\n\\\\n\",\"summary\":\"Indexes in Mongoid are defined as a hash of field name and direction/2d pairs, with a hash for any additional options.\"},\"invalid_options\":{\"message\":\"Invalid option :%{invalid} provided to association :%{name}.\",\"resolution\":\"Valid options are: %{valid}, make sure these are the ones you are using.\",\"summary\":\"Mongoid checks the options that are passed to the association macros to ensure that no ill side effects occur by letting something slip by.\"},\"invalid_path\":{\"message\":\"Having a root path assigned for %{klass} is invalid.\",\"resolution\":\"Most likely your embedded model, %{klass} is also referenced via a has_many from a root document in another collection. Double check the association definitions and fix any instances where embedded documents are improperly referenced from other collections.\",\"summary\":\"Mongoid has two different path objects for determining the location of a document in the database, Root and Embedded. This error is raised when an embedded document somehow gets a root path assigned.\"},\"invalid_persistence_option\":{\"message\":\"Invalid persistence option :%{invalid}.\",\"resolution\":\"Valid options are: %{valid}, make sure these are the ones you are using.\",\"summary\":\"The options used to change the persistence context must be one of the valid options for a mongo client, or a collection name.\"},\"invalid_relation\":{\"message\":\"Defining an association named \\'%{name}\\' is not allowed.\",\"resolution\":\"Use Mongoid.destructive_fields to see what names are not allowed, and don\\'t use these names. These include names that also conflict with core Ruby methods on Object, Module, Enumerable, or included gems that inject methods into these or Mongoid internals.\",\"summary\":\"Defining this association would override the method \\'%{name}\\', which would cause issues with expectations around the original method and cause extremely hard to debug issues. The original method was defined in:\\\\n   Object: %{origin}\\\\n   File: %{file}\\\\n   Line: %{line}\"},\"invalid_relation_option\":{\"message\":\"Invalid association option :%{option} for association \\'%{name}\\' on class %{klass}.\",\"resolution\":\"Valid options are: %{valid_options}, make sure you use only those.\",\"summary\":\"An invalid option was provided for an association.\"},\"invalid_scope\":{\"message\":\"Defining a scope of value %{value} on %{klass} is not allowed.\",\"resolution\":\"Change the scope to be a proc wrapped criteria.\\\\n\\\\n Example:\\\\n   class Band\\\\n     include Mongoid::Document\\\\n     scope :inactive, -\\\\u003e{ where(active: false) }\\\\n   end\\\\n\\\\n\",\"summary\":\"Scopes in Mongoid must be procs that wrap criteria objects.\"},\"invalid_session_nesting\":{\"message\":\"A session was started while another session was being used.\",\"resolution\":\"Only use one session at a time; sessions cannot be nested.\",\"summary\":\"Sessions cannot be nested. Only one session can be used in a thread at once.\"},\"invalid_session_use\":{\"message\":\"A session was attempted to be used with a model whose client cannot use that session.\",\"resolution\":\"Only execute operations on the model class or instances of the model through which the session was created. Otherwise, ensure that all models on which operations are executed in the session block share the same driver client. For example, a model may have a different client specified in its \\'store_in\\' options.\\\\n\\\\n\",\"summary\":\"Sessions are started via driver clients (Model#mongo_client) and, in most cases, driver clients are shared across models. When different models have their own clients, a session cannot be obtained via one model and used for operations on another model.\"},\"invalid_set_polymorphic_relation\":{\"message\":\"The %{name} attribute can\\'t be set to an instance of %{other_klass} as %{other_klass} has multiple associations referencing %{klass} as %{name}.\",\"resolution\":\"Set the values from the parent, or redefine the association with only a single definition in the parent.\",\"summary\":\"If the parent class of a polymorphic association has multiple definitions for the same association, the values must be set from the parent side and not the child side since Mongoid cannot determine from the child side which association to go in.\"},\"invalid_storage_options\":{\"message\":\"Invalid options passed to %{klass}.store_in: %{options}.\",\"resolution\":\"Change the options passed to store_in to match the documented API, and ensure all keys in the options hash are symbols.\\\\n\\\\n Example:\\\\n   class Band\\\\n     include Mongoid::Document\\\\n     store_in collection: \\'artists\\', database: \\'music\\'\\\\n   end\\\\n\\\\n\",\"summary\":\"The :store_in macro takes only a hash of parameters with the keys :database, :collection, :collection_options, or :client.\"},\"invalid_time\":{\"message\":\"\\'%{value}\\' is not a valid Time.\",\"resolution\":\"Make sure to pass parsable values to the field setter for Date, DateTime, and Time objects. When this is a String it needs to be valid for Time.parse. Other objects must be valid to pass to Time.local.\",\"summary\":\"Mongoid tries to serialize the values for Date, DateTime, and Time into proper UTC times to store in the database. The provided value could not be parsed.\"},\"inverse_not_found\":{\"message\":\"When adding a(n) %{klass} to %{base}#%{name}, Mongoid could not determine the inverse foreign key to set. The attempted key was \\'%{inverse}\\'.\",\"resolution\":\"If an inverse is not required, like a belongs_to or has_and_belongs_to_many, ensure that :inverse_of =\\\\u003e nil is set on the association. If the inverse is needed, most likely the inverse cannot be figured out from the names of the associations and you will need to explicitly tell Mongoid on the association what the inverse is.\\\\n\\\\n Example:\\\\n   class Car\\\\n     include Mongoid::Document\\\\n     has_one :engine, class_name: \\\\\"Motor\\\\\", inverse_of: :machine\\\\n   end\\\\n\\\\n   class Motor\\\\n     include Mongoid::Document\\\\n     belongs_to :machine, class_name: \\\\\"Car\\\\\", inverse_of: :engine\\\\n   end\",\"summary\":\"When adding a document to an association, Mongoid attempts to link the newly added document to the base of the association in memory, as well as set the foreign key to link them on the database side. In this case Mongoid could not determine what the inverse foreign key was.\"},\"message_title\":\"message\",\"mixed_client_configuration\":{\"message\":\"Both uri and standard configuration options defined for client: \\'%{name}\\'.\",\"resolution\":\"Provide either only a uri as configuration or only standard options.\",\"summary\":\"Instead of simply giving uri or standard options a preference order, Mongoid assumes that you have made a mistake in your configuration and requires that you provide one or the other, but not both. The options that were provided were: %{config}.\"},\"mixed_relations\":{\"message\":\"Referencing a(n) %{embedded} document from the %{root} document via a non-embedded association is not allowed since the %{embedded} is embedded.\",\"resolution\":\"Consider not embedding %{embedded}, or do the key storage and access in a custom manner in the application code.\",\"summary\":\"In order to properly access a(n) %{embedded} from %{root} the reference would need to go through the root document of %{embedded}. In a simple case this would require Mongoid to store an extra foreign key for the root, in more complex cases where %{embedded} is multiple levels deep a key would need to be stored for each parent up the hierarchy.\"},\"nested_attributes_metadata_not_found\":{\"message\":\"Could not find metadata for association \\'%{name}\\' on model: %{klass}.\",\"resolution\":\"Make sure that there is an association defined named \\'%{name}\\' on %{klass} or that the association definition comes before the accepts_nested_attributes_for macro in the model - order matters so that Mongoid has access to the metadata.\\\\n\\\\n Example:\\\\n   class Band\\\\n     include Mongoid::Document\\\\n     has_many :albums\\\\n     accepts_nested_attributes_for :albums\\\\n   end\\\\n\\\\n\",\"summary\":\"When defining nested attributes for an association, Mongoid needs to access the metadata for the association \\'%{name}\\' in order if add autosave functionality to it, if applicable. Either no association named \\'%{name}\\' could be found, or the association had not been defined yet.\"},\"no_client_config\":{\"message\":\"No configuration could be found for a client named \\'%{name}\\'.\",\"resolution\":\"Double check your mongoid.yml to make sure under the clients key that a configuration exists for \\'%{name}\\'. If you have set the configuration programmatically, ensure that \\'%{name}\\' exists in the configuration hash.\",\"summary\":\"When attempting to create the new client, Mongoid could not find a client configuration for the name: \\'%{name}\\'. This is necessary in order to know the host, port, and options needed to connect.\"},\"no_client_database\":{\"message\":\"No database provided for client configuration: :%{name}.\",\"resolution\":\"If configuring via a mongoid.yml, ensure that within your :%{name} section a :database value for the client\\'s default database is defined.\\\\n\\\\n Example:\\\\n   development:\\\\n     clients:\\\\n       %{name}:\\\\n         database: my_app_db\\\\n         hosts:\\\\n           - localhost:27017\\\\n\\\\n\",\"summary\":\"Each client configuration must provide a database so Mongoid knows where the default database to persist to. What was provided was: %{config}.\"},\"no_client_hosts\":{\"message\":\"No hosts provided for client configuration: :%{name}.\",\"resolution\":\"If configuring via a mongoid.yml, ensure that within your :%{name} section a :hosts value for the client hosts is defined.\\\\n\\\\n Example:\\\\n   development:\\\\n     clients:\\\\n       %{name}:\\\\n         database: my_app_db\\\\n         hosts:\\\\n           - localhost:27017\\\\n\\\\n\",\"summary\":\"Each client configuration must provide hosts so Mongoid knows where the database server is located. What was provided was: %{config}.\"},\"no_clients_config\":{\"message\":\"No clients configuration provided.\",\"resolution\":\"Double check your mongoid.yml to make sure that you have a top-level clients key with at least 1 default client configuration for it. You can regenerate a new mongoid.yml for assistance via `rails g mongoid:config`.\\\\n\\\\n Example:\\\\n   development:\\\\n     clients:\\\\n       default:\\\\n         database: mongoid_dev\\\\n         hosts:\\\\n           - localhost:27017\\\\n\\\\n\",\"summary\":\"Mongoid\\'s configuration requires that you provide details about each client that can be connected to, and requires in the clients config at least 1 default client to exist.\"},\"no_default_client\":{\"message\":\"No default client configuration is defined.\",\"resolution\":\"If configuring via a mongoid.yml, ensure that within your :clients section a :default client is defined.\\\\n\\\\n Example:\\\\n   development:\\\\n     clients:\\\\n       default:\\\\n         hosts:\\\\n           - localhost:27017\\\\n\\\\n\",\"summary\":\"The configuration provided settings for: %{keys}, but Mongoid requires a :default to be defined at minimum.\"},\"no_documents_found\":{\"message\":\"Could not find a document of class %{klass}.\",\"resolution\":\"Create a document of class %{klass} or use a finder method that does not raise an exception when no documents are found.\",\"summary\":\"Mongoid attempted to find a document of the class %{klass} but none exist.\"},\"no_environment\":{\"message\":\"Could not load the configuration since no environment was defined.\",\"resolution\":\"Please ensure an environment is set in one of the listed locations. The environment must be explicitly set.\",\"summary\":\"Mongoid could not determine the environment to use because it was not specified in any of the following locations: Rails.env, Sinatra::Base.environment, ENV[\\\\\"RACK_ENV\\\\\"], ENV[\\\\\"MONGOID_ENV\\\\\"]. Without knowing the environment, Mongoid cannot load its configuration.\"},\"no_map_reduce_output\":{\"message\":\"No output location was specified for the map/reduce operation.\",\"resolution\":\"Provide the location that the output of the operation is to go by chaining an #out call to the map/reduce.\\\\n\\\\n Example:\\\\n   Band.map_reduce(map, reduce).out(inline: 1)\\\\n\\\\n Valid options for the out function are:\\\\n   inline: 1\\\\n   merge: \\'collection-name\\'\\\\n   replace: \\'collection-name\\'\\\\n   reduce: \\'collection-name\\'\\\\n\\\\n\",\"summary\":\"When executing a map/reduce, you must provide the output location of the results. The attempted command was: %{command}.\"},\"no_metadata\":{\"message\":\"Metadata not found for document of type %{klass}.\",\"resolution\":\"Ensure that your associations on the %{klass} model are all properly defined, and that the inverse associations are also properly defined. Embedded associations must have both the parent (embeds_one/embeds_many) and the inverse (embedded_in) present in order to work properly.\",\"summary\":\"Mongoid sets the metadata of an association on the document when it is either loaded from within the association, or added to one. The presence of the metadata is required in order to provide various functionality around associations. Most likely you are getting this error because the document is embedded and was attempted to be persisted without being associated with a parent, or the association was not properly defined.\"},\"no_parent\":{\"message\":\"Cannot persist embedded document %{klass} without a parent document.\",\"resolution\":\"Ensure that you\\'ve set the parent association if instantiating the embedded document directly, or always create new embedded documents via the parent association.\",\"summary\":\"If the document is embedded, in order to be persisted it must always have a reference to its parent document. This is most likely caused by either calling %{klass}.create or %{klass}.create! without setting the parent document as an attribute.\"},\"readonly_attribute\":{\"message\":\"Attempted to set the readonly attribute \\'%{name}\\' with the value: %{value}.\",\"resolution\":\"Don\\'t define \\'%{name}\\' as readonly, or do not attempt to update its value after the document is persisted.\",\"summary\":\"Attributes flagged as readonly via Model.attr_readonly can only have values set when the document is a new record.\"},\"readonly_document\":{\"message\":\"Attempted to persist a readonly document of class \\'%{klass}\\'.\",\"resolution\":\"Don\\'t attempt to persist documents that are flagged as readonly.\",\"summary\":\"Documents that are marked readonly cannot be persisted.\"},\"resolution_title\":\"resolution\",\"scope_overwrite\":{\"message\":\"Cannot create scope :%{scope_name}, because of existing method %{model_name}.%{scope_name}.\",\"resolution\":\"Change the name of the scope so it does not conflict with the already defined method %{model_name}, or set the configuration option Mongoid.scope_overwrite_exception to false, which is its default. In this case a warning will be logged.\",\"summary\":\"When defining a scope that conflicts with a method that already exists on the model, this error will get raised if Mongoid.scope_overwrite_exception is set to true.\"},\"sessions_not_supported\":{\"message\":\"Sessions are not supported by the connected server(s).\",\"resolution\":\"Verify that all servers in your deployment are at least version 3.6 or don\\'t attempt to use sessions with older server versions.\",\"summary\":\"A session was attempted to be used with a MongoDB server version that doesn\\'t support sessions. Sessions are supported in MongoDB server versions 3.6 and higher.\"},\"summary_title\":\"summary\",\"too_many_nested_attribute_records\":{\"message\":\"Accepting nested attributes for %{association} is limited to %{limit} documents.\",\"resolution\":\"The limit is set as an option to the macro, for example: accepts_nested_attributes_for :%{association}, limit: %{limit}. Consider raising this limit or making sure no more are sent than the set value.\",\"summary\":\"More documents were sent to be processed than the allowed limit.\"},\"unknown_attribute\":{\"message\":\"Attempted to set a value for \\'%{name}\\' which is not allowed on the model %{klass}.\",\"resolution\":\"Define the field \\'%{name}\\' in %{klass}, or include Mongoid::Attributes::Dynamic in %{klass} if you intend to store values in fields that are not explicitly defined.\",\"summary\":\"%{klass}#%{name}= was called but there is no \\'%{name}\\' field defined in the model, and Mongoid::Attributes::Dynamic is not included. This error is also raised instead of NoMethodError if the unknown attribute is passed to any method that accepts an attributes hash, such as #attributes=.\"},\"unknown_model\":{\"message\":\"Attempted to instantiate an object of the unknown model \\'%{klass}\\'.\",\"resolution\":\"The _type field is a reserved one used by Mongoid to determine the class for instantiating an object. Please don\\'t save data in this field or ensure that any values in this field correspond to valid models.\",\"summary\":\"A document with the value \\'%{value}\\' at the key \\'_type\\' was used to instantiate a model object but Mongoid cannot find this Class.\"},\"unsaved_document\":{\"message\":\"Attempted to save %{document} before the parent %{base}.\",\"resolution\":\"Make sure to only use create or create! when the parent document %{base} is persisted.\",\"summary\":\"You cannot call create or create! through the association (%{document}) whose parent (%{base}) is not already saved. This would cause the database to be out of sync since the child could potentially reference a nonexistent parent.\"},\"unsupported_javascript\":{\"message\":\"Executing Javascript $where selector on an embedded criteria is not supported.\",\"resolution\":\"Please provide a standard hash to #where when the criteria is for an embedded association.\",\"summary\":\"Mongoid only supports providing a hash of arguments to #where criterion on embedded documents. Since %{klass} is embedded, the expression %{javascript} is not allowed.\"},\"validations\":{\"message\":\"Validation of %{document} failed.\",\"resolution\":\"Try persisting the document with valid data or remove the validations.\",\"summary\":\"The following errors were found: %{errors}\"}}}},\"number\":{\"currency\":{\"format\":{\"delimiter\":\",\",\"format\":\"%u%n\",\"negative_format\":\"-%u%n\",\"precision\":2,\"separator\":\".\",\"significant\":false,\"strip_insignificant_zeros\":false,\"unit\":\"$\"}},\"format\":{\"delimiter\":\",\",\"precision\":3,\"round_mode\":\"default\",\"separator\":\".\",\"significant\":false,\"strip_insignificant_zeros\":false},\"human\":{\"decimal_units\":{\"format\":\"%n %u\",\"units\":{\"billion\":\"Billion\",\"million\":\"Million\",\"quadrillion\":\"Quadrillion\",\"thousand\":\"Thousand\",\"trillion\":\"Trillion\",\"unit\":\"\"}},\"format\":{\"delimiter\":\"\",\"precision\":3,\"significant\":true,\"strip_insignificant_zeros\":true},\"storage_units\":{\"format\":\"%n %u\",\"units\":{\"byte\":{\"one\":\"Byte\",\"other\":\"Bytes\"},\"eb\":\"EB\",\"gb\":\"GB\",\"kb\":\"KB\",\"mb\":\"MB\",\"pb\":\"PB\",\"tb\":\"TB\",\"zb\":\"ZB\"}}},\"nth\":{},\"percentage\":{\"format\":{\"delimiter\":\"\",\"format\":\"%n%\"}},\"precision\":{\"format\":{\"delimiter\":\"\"}}},\"pivot_list_column_value\":{\"non_sponsor_org\":\"non-sponsor\"},\"pivot_list_download\":{\"id\":\"ZW_ID\"},\"simple_form\":{\"error_notification\":{\"default_message\":\"Please review the problems below:\"},\"no\":\"No\",\"required\":{\"mark\":\"*\",\"text\":\"required\"},\"yes\":\"Yes\"},\"support\":{\"array\":{\"last_word_connector\":\", and \",\"two_words_connector\":\" and \",\"words_connector\":\", \"}},\"terminology\":{\"all_orgs_list_category\":\"Companies\",\"companies_in_your_sf_label\":\"Companies in your Salesforce\",\"company_based_in\":\"Sponsor company based in\",\"company_location\":\"Sponsor Company Location\",\"neglected_target_label\":\"Neglected Sponsors\",\"sponsor\":\"Drug Sponsor\",\"sponsor_orgs_list_category\":\"Sponsor Companies\",\"target_organization_title\":\"Sponsor\"},\"time\":{\"am\":\"am\",\"formats\":{\"default\":\"%a, %d %b %Y %H:%M:%S %z\",\"long\":\"%B %d, %Y %H:%M\",\"short\":\"%d %b %H:%M\"},\"pm\":\"pm\"},\"users\":{\"confirmations\":{\"new\":{\"legend\":\"Resend your %{brand_name} confirmation instructions\",\"message\":\"We need to confirm your email address to complete the sign up process. Supply your email address, below, and we will send you instructions on how to confirm your address.\",\"submit_button\":\"Send Confirmation Instructions\",\"title\":\"Resend confirmation instructions | %{brand_name}\"},\"show\":{\"legend\":\"Check your inbox for a confirmation email\",\"message\":\"If your e-mail exists in our database we have sent you a message with instructions. Check your inbox (or spam folder) for a message from \\'%{default_from_email}\\' containing the confirmation link.\",\"title\":\"Awaiting confirmation | %{brand_name}\"}},\"passwords\":{\"new\":{\"failures\":\"Note: If you make more than 5 sequential failed attempts to sign in with your %{brand_name} password, your account will be (temporarily) locked. Check your inbox for instruction on how to unlock your account, or we can\",\"legend\":\"Reset your %{brand_name} password\",\"message\":\"Supply your email address, below, and we will send you instructions on how to reset your password.\",\"resend_link\":\"resend a new set of unlock instructions\",\"submit_button\":\"Send Reset Instructions\",\"title\":\"Reset password | %{brand_name}\"},\"show\":{\"didnt_receive_email\":\"Didn\\'t receive the email?\",\"legend\":\"Password reset instructions sent\",\"message\":\"If your e-mail exists in our database we have sent you a message with password reset instructions. Check your inbox (or spam folder) for a message from \\'%{default_from_email}\\'.\",\"resend_link\":\"you can request another one here\",\"title\":\"Awaiting reset | %{brand_name}\"}}},\"will_paginate\":{\"container_aria_label\":\"Pagination\",\"next_label\":\"Next \\\\u0026#8594;\",\"page_aria_label\":\"Page %{page}\",\"page_entries_info\":{\"multi_page\":\"Displaying %{model} %{from} - %{to} of %{count} in total\",\"multi_page_html\":\"Displaying %{model} \\\\u003cb\\\\u003e%{from}\\\\u0026nbsp;-\\\\u0026nbsp;%{to}\\\\u003c/b\\\\u003e of \\\\u003cb\\\\u003e%{count}\\\\u003c/b\\\\u003e in total\",\"single_page\":{\"one\":\"Displaying 1 %{model}\",\"other\":\"Displaying all %{count} %{model}\",\"zero\":\"No %{model} found\"},\"single_page_html\":{\"one\":\"Displaying \\\\u003cb\\\\u003e1\\\\u003c/b\\\\u003e %{model}\",\"other\":\"Displaying \\\\u003cb\\\\u003eall\\\\u0026nbsp;%{count}\\\\u003c/b\\\\u003e %{model}\",\"zero\":\"No %{model} found\"}},\"page_gap\":\"\\\\u0026hellip;\",\"previous_label\":\"\\\\u0026#8592; Previous\"},\"x_mailer_header\":\"clicks.zymewire.com\"}'));\nI18n.translations[\"contract_drug\"] = I18n.extend((I18n.translations[\"contract_drug\"] || {}), JSON.parse('{\"activerecord\":{\"errors\":{\"messages\":{\"record_invalid\":\"Validation failed: %{errors}\",\"restrict_dependent_destroy\":{\"has_many\":\"Cannot delete record because dependent %{record} exist\",\"has_one\":\"Cannot delete record because a dependent %{record} exists\"}}}},\"brand\":{\"category_tool_tips\":{\"all_event\":\"Click to view all types of activity.\",\"alt_fund_grants\":\"Definition: sponsor company receives a grant from a government agency or non-profit charity.\",\"alt_fund_royalties\":\"Definition: sponsor receives payment of an upfront or milestone royalty.\",\"cf_finding\":\"Click to view only funding activity.\",\"cf_personnel\":\"Definition: sponsor company modifies its organizational structure.\",\"clin_fut_plans\":\"Definition: company mentions plans for future drug development activity.\",\"clin_movements\":\"Click to view only events related to drugs moving through development.\",\"fund_fin\":\"Definition: sponsor company discloses the fact that it raised money through debt or equity.\",\"ir_board_change\":\"Definition: sponsor company modifies the structure of its Board of Directors.\",\"ir_filings\":\"Definition: sponsor company makes a general announcement to its shareholders.\",\"ir_presentations\":\"Definition: sponsor company announces it will be presenting at an investor-focused conference.\",\"lgl_disputes\":\"Definition: sponsor company provides the public with an update to an ongoing legal dispute.\",\"lgl_mna\":\"Definition: sponsor company announces details of a merger, acquisition, or spin out.\",\"lgl_patents\":\"Definition: sponsor company announces the filing or approval of a patent.\",\"lnc_collaboration\":\"Definition: sponsor company enters into or discloses an R\\\\u0026D-related collaboration.\",\"lnc_licensing\":\"Definition: sponsor company transfers rights to intellectual property.\",\"lnc_terminated\":\"Definition: sponsor company terminates an agreement or collaboration with a partner.\",\"midstudy_update\":\"Definition: company makes an enrollment-related update to a study that is already underway.\",\"opinion\":\"Click to view articles and opinion from new sources and blogs.\",\"outs_other\":\"Definition: sponsor company discloses a relationship with a service provider or equipment provider.\",\"partnering\":\"Click to view only partnering actions.\",\"reg_activity\":\"Definition: company announces an interaction with the FDA, EMA or other regulatory body.\",\"results_disclosed\":\"Definition: sponsor company makes an announcement related to research results or data.\",\"results_n_data\":\"Click to view only events about research results and data announcements.\",\"study_closeout\":\"Definition: company completes a study and has finished gathering data.\",\"study_initiation\":\"Definition: company initiates a preclinical or clinical study.\",\"the_rest\":\"Click to view only events relating to legal and corporate actions.\"},\"logo\":{\"full_image\":{\"file_name\":\"zymewire_logo_full.png\",\"path\":\"images/brand_specific/zymewire/zymewire_logo_full.png\"},\"header\":{\"path\":\"/images/brand_specific/zymewire/zymewire_logo_black_trans.png\"},\"mark_only\":{\"file_name\":\"zymewire_logo_z_only.png\",\"path\":\"images/brand_specific/zymewire/zymewire_logo_z_only.png\"}},\"meta\":{\"description\":\"Zymewire: Catalyze your sales.\",\"image\":\"https://www.zymewire.com/images/brand_specific/zymewire/zymewire_logo_full.png\",\"title\":\"Zymewire: Catalyze your sales.\"},\"name\":\"Zymewire\",\"tag_line\":\"Catalyze your sales.\"},\"bulk_uploads\":{\"email_local_part\":{\"empty_parameter\":\"No file uploaded\",\"error\":\"File Upload failed: %{error_message}\",\"success\":\"File was successfully uploaded\"}},\"common\":{\"crm\":{\"salesforce\":{\"forgot_password\":\"If you have forgotten your Salesforce password, please follow the instructions provided on the Salesforce sign in page.\",\"sign_in_button\":\"Sign In with Salesforce\"}}},\"contact\":{\"default_from_email\":\"info@zymewire.com\",\"phone_numbers\":[{\"label\":\"US\",\"phone\":\"1-844-996-3321\"},{\"label\":\"UK\",\"phone\":\"+44-208-133-9963\"}],\"support_email\":\"support@zymewire.com\"},\"date\":{\"abbr_day_names\":[\"Sun\",\"Mon\",\"Tue\",\"Wed\",\"Thu\",\"Fri\",\"Sat\"],\"abbr_month_names\":[null,\"Jan\",\"Feb\",\"Mar\",\"Apr\",\"May\",\"Jun\",\"Jul\",\"Aug\",\"Sep\",\"Oct\",\"Nov\",\"Dec\"],\"day_names\":[\"Sunday\",\"Monday\",\"Tuesday\",\"Wednesday\",\"Thursday\",\"Friday\",\"Saturday\"],\"formats\":{\"default\":\"%Y-%m-%d\",\"long\":\"%B %d, %Y\",\"short\":\"%b %d\"},\"month_names\":[null,\"January\",\"February\",\"March\",\"April\",\"May\",\"June\",\"July\",\"August\",\"September\",\"October\",\"November\",\"December\"],\"order\":[\"year\",\"month\",\"day\"]},\"datetime\":{\"distance_in_words\":{\"about_x_hours\":{\"one\":\"about 1 hour\",\"other\":\"about %{count} hours\"},\"about_x_months\":{\"one\":\"about 1 month\",\"other\":\"about %{count} months\"},\"about_x_years\":{\"one\":\"about 1 year\",\"other\":\"about %{count} years\"},\"almost_x_years\":{\"one\":\"almost 1 year\",\"other\":\"almost %{count} years\"},\"half_a_minute\":\"half a minute\",\"less_than_x_minutes\":{\"one\":\"less than a minute\",\"other\":\"less than %{count} minutes\"},\"less_than_x_seconds\":{\"one\":\"less than 1 second\",\"other\":\"less than %{count} seconds\"},\"over_x_years\":{\"one\":\"over 1 year\",\"other\":\"over %{count} years\"},\"x_days\":{\"one\":\"1 day\",\"other\":\"%{count} days\"},\"x_minutes\":{\"one\":\"1 minute\",\"other\":\"%{count} minutes\"},\"x_months\":{\"one\":\"1 month\",\"other\":\"%{count} months\"},\"x_seconds\":{\"one\":\"1 second\",\"other\":\"%{count} seconds\"}},\"prompts\":{\"day\":\"Day\",\"hour\":\"Hour\",\"minute\":\"Minute\",\"month\":\"Month\",\"second\":\"Seconds\",\"year\":\"Year\"}},\"default_host\":\"https://www.zymewire.com\",\"devise\":{\"confirmations\":{\"confirmed\":\"Your account was successfully confirmed. Please sign in.\",\"send_instructions\":\"Your email has not been confirmed. We need to confirm your email account before you can sign in. Please check your inbox or spam folder for an email from \\'info@zymewire.com\\' or request a new one.\",\"send_paranoid_instructions\":\"If your e-mail exists on our database, you will receive an email with instructions about how to confirm your account in a few minutes.\"},\"failure\":{\"already_authenticated\":\"You are already signed in.\",\"expired\":\"Your account has expired due to inactivity. Please contact the site administrator.\",\"inactive\":\"Your account was not activated yet.\",\"invalid\":\"Invalid email or password. If you use Salesforce, use the \\'Have Salesforce?\\' panel.\",\"invalid_token\":\"Invalid authentication token.\",\"last_attempt\":\"You have one more attempt before your account is locked.\",\"locked\":\"Your account is locked.\",\"not_active\":\"Your account has been de-activated, if you think this is a mistake please contact us\",\"not_found_in_database\":\"Invalid %{authentication_keys} or password.\",\"session_limited\":\"Your login credentials were used in another browser. Please sign in again to continue in this browser.\",\"timeout\":\"Your session expired, please sign in again to continue.\",\"unauthenticated\":\"You need to sign in or sign up before continuing.\",\"unconfirmed\":\"We must confirm your email before you can continue. Please check your inbox or spam folder for a confirmation email from \\'info@zymewire.com\\' or request a new one.\"},\"invalid_captcha\":\"The captcha input is not valid!\",\"invalid_security_question\":\"The security question answer was invalid.\",\"mailer\":{\"confirmation_instructions\":{\"subject\":\"Confirmation instructions for Zymewire.com\"},\"email_changed\":{\"subject\":\"Email Changed\"},\"password_change\":{\"subject\":\"Password Changed\"},\"reset_password_instructions\":{\"subject\":\"Reset password instructions for Zymewire.com\"},\"unlock_instructions\":{\"subject\":\"Unlock Instructions for Zymewire.com\"}},\"omniauth_callbacks\":{\"failure\":\"Could not authorize you from %{kind} because \\\\\"%{reason}\\\\\".\",\"success\":\"Successfully authorized from %{kind} account.\"},\"paranoid_verification_code\":{\"show\":{\"submit\":\"Submit\",\"submit_verification_code\":\"Submit verification code\",\"verification_code\":\"Verification code\"},\"updated\":\"Verification code accepted\"},\"paranoid_verify\":{\"code_required\":\"Please enter the code our support team provided\"},\"password_expired\":{\"change_required\":\"Your password has expired. Please choose a new password!\",\"show\":{\"change_my_password\":\"Change my password\",\"current_password\":\"Current password\",\"new_password\":\"New password\",\"new_password_confirmation\":\"Confirm new password\",\"renew_your_password\":\"Renew your password\"},\"updated\":\"Your new password is saved.\"},\"passwords\":{\"no_token\":\"You can\\'t access this page without coming from a password reset email. If you do come from a password reset email, please make sure you used the full URL provided.\",\"send_instructions\":\"You will receive an email with instructions about how to reset your password in a few minutes.\",\"send_paranoid_instructions\":\"If your e-mail exists on our database, you will receive a password recovery link on your e-mail\",\"updated\":\"Your password was changed successfully. You are now signed in.\",\"updated_not_active\":\"Your password was changed successfully.\"},\"registrations\":{\"destroyed\":\"Bye! Your account was successfully cancelled. We hope to see you again soon.\",\"signed_up\":\"Welcome! You have signed up successfully.\",\"signed_up_but_inactive\":\"You have signed up successfully. However, we could not sign you in because your account is not yet activated.\",\"signed_up_but_locked\":\"You have signed up successfully. However, we could not sign you in because your account is locked.\",\"signed_up_but_unconfirmed\":\"A message with a confirmation link has been sent to your email address. Please open the link to activate your account.\",\"update_needs_confirmation\":\"You updated your account successfully, but we need to verify your new email address. Please check your email and click on the confirm link to finalize confirming your new email address.\",\"updated\":\"You updated your account successfully.\",\"updated_but_not_signed_in\":\"Your account has been updated successfully, but since your password was changed, you need to sign in again.\"},\"sessions\":{\"already_signed_out\":\"Signed out successfully.\",\"signed_in\":\"Signed in successfully.\",\"signed_out\":\"Signed out successfully.\"},\"unlocks\":{\"send_instructions\":\"You will receive an email with instructions about how to unlock your account in a few minutes.\",\"send_paranoid_instructions\":\"If your account exists, you will receive an email with instructions about how to unlock it in a few minutes.\",\"unlocked\":\"Your account has been unlocked successfully. Please sign in to continue.\"}},\"disable_crm_login_option\":\"false\",\"domain\":\"zymewire.com\",\"download\":\"Download\",\"download_30_days\":\"This link will be available for 30 days after which the file will be removed from our servers.\",\"enumerize\":{\"blocklisted_contact\":{\"provider\":{\"insideview\":\"InsideView\",\"zephyr\":\"Zephyr\"}}},\"errors\":{\"format\":\"%{attribute} %{message}\",\"messages\":{\"accepted\":\"must be accepted\",\"already_confirmed\":\"was already confirmed, please try signing in\",\"blank\":\"can\\'t be blank\",\"confirmation\":\"doesn\\'t match %{attribute}\",\"confirmation_period_expired\":\"needs to be confirmed within %{period}, please request a new one\",\"empty\":\"can\\'t be empty\",\"equal_to\":\"must be equal to %{count}\",\"equal_to_current_password\":\"Sorry, must be different to your current password!\",\"equal_to_email\":\"must be different than the email.\",\"even\":\"must be even\",\"exclusion\":\"is reserved\",\"expired\":\"has expired, please request a new one\",\"greater_than\":\"must be greater than %{count}\",\"greater_than_or_equal_to\":\"must be greater than or equal to %{count}\",\"in\":\"must be in %{count}\",\"inclusion\":\"is not included in the list\",\"invalid\":\"is invalid\",\"less_than\":\"must be less than %{count}\",\"less_than_or_equal_to\":\"must be less than or equal to %{count}\",\"model_invalid\":\"Validation failed: %{errors}\",\"not_a_number\":\"is not a number\",\"not_an_integer\":\"must be an integer\",\"not_found\":\"not found\",\"not_locked\":\"was not locked\",\"not_saved\":{\"one\":\"1 error prohibited this %{resource} from being saved:\",\"other\":\"%{count} errors prohibited this %{resource} from being saved:\"},\"odd\":\"must be odd\",\"other_than\":\"must be other than %{count}\",\"password_complexity\":{\"digit\":{\"one\":\"must contain at least one digit\",\"other\":\"must contain at least %{count} digits\"},\"lower\":{\"one\":\"must contain at least one lower-case letter\",\"other\":\"must contain at least %{count} lower-case letters\"},\"symbol\":{\"one\":\"must contain at least one punctuation mark or symbol\",\"other\":\"must contain at least %{count} punctuation marks or symbols\"},\"upper\":{\"one\":\"must contain at least one upper-case letter\",\"other\":\"must contain at least %{count} upper-case letters\"}},\"password_format\":\"Must contain uppercase AND lowercase letters and at least one number\",\"password_too_long\":\"is too long\",\"present\":\"must be blank\",\"required\":\"must exist\",\"taken\":\"has already been taken\",\"taken_in_past\":\"Sorry, you have used this password before!\",\"too_long\":{\"one\":\"is too long (maximum is 1 character)\",\"other\":\"is too long (maximum is %{count} characters)\"},\"too_short\":{\"one\":\"is too short (minimum is 1 character)\",\"other\":\"is too short (minimum is %{count} characters)\"},\"wrong_length\":{\"one\":\"is the wrong length (should be 1 character)\",\"other\":\"is the wrong length (should be %{count} characters)\"}}},\"flash\":{\"actions\":{\"create\":{\"notice\":\"%{resource_name} was successfully created.\"},\"destroy\":{\"alert\":\"%{resource_name} could not be destroyed.\",\"notice\":\"%{resource_name} was successfully destroyed.\"},\"update\":{\"notice\":\"%{resource_name} was successfully updated.\"}}},\"hello_world\":\"Hello world\",\"help\":{\"articles\":{\"crm_mining\":\"/help/articles/13976-mine-your-companys-salesforce-for-opportunities\",\"finding_contact_info\":\"/help/articles/13987-finding-contact-information\",\"guide_d\":\"/help/guide_d\",\"guide_g\":\"/help/guide_g\",\"guide_h\":\"/help/guide_h\",\"guide_i\":\"/help/guide_i\",\"guide_j\":\"/help/guide_j\",\"list_crud_c\":\"/help/articles/13985-generating-a-list\",\"list_crud_u\":\"/help/articles/18991-adding-and-removing-individual-companies-from-a-list\",\"map_search\":\"/help/articles/13980-map-based-searching\",\"saving_feeds\":\"/help/articles/13986-saving-feeds\"},\"site\":\"https://zymewire.helpsite.com/\"},\"helpers\":{\"select\":{\"prompt\":\"Please select\"},\"submit\":{\"create\":\"Create %{model}\",\"submit\":\"Save %{model}\",\"update\":\"Update %{model}\"}},\"hi\":\"Hi\",\"industry\":\"contract drug manufacturer\",\"mailers\":{\"common\":{\"chummy_sign_off\":\"Have a good one.\",\"final_note\":\"P.S.: If you think you received this email accidentally, then something weird could be going on. Hit reply and a member of the %{brand_name} team will investigate.\",\"team_sign_off\":\"- The %{brand_name} Team\"},\"confirmation_instructions_email\":{\"crm\":{\"salesforce\":{\"resource_confirmed\":\"Someone has requested a resend of a confirmation email. You do not need to confirm your email address because your account is configured to use Salesforce to sign in.\",\"resource_unconfirmed\":\"You do not need to confirm your email address because your account is configured to use Salesforce to sign in, please complete the sign up process by clicking the button below to sign in to %{brand_name} via Salesforce.\"}},\"non_crm\":{\"confirm_link\":\"Confirm my account\",\"welcome\":\"Welcome to %{brand_name}. As the final step in the process you\\'ll need to confirm your account by clicking on the link below.\"},\"subject\":\"Confirmation instructions for %{domain}\"},\"flagged_events_mailer\":{\"from\":\"Flagged events - %{brand_name} \\\\u003cflagged_events@mailer.%{domain}\\\\u003e\"},\"mobile_registration_email\":{\"alert_cs_registration_locked\":{\"subject\":\"%{brand_name}: user has had mobile registration locked, too many failed attempts\"},\"dispatch_registration_PIN\":{\"further_instructions\":\"If you are NOT attempting to register for the %{brand_name} Mobile app then please let us know at %{support_email_link} - thank you.\",\"introduction\":\"Here is your mobile app registration PIN:\",\"subject\":\"%{brand_name} Mobile Registration Verification\"},\"too_many_failed_attempts\":{\"introduction\":\"We have received too many failed mobile device registration attempts for your account and we will block any further requests. If you have not attempted to register a mobile device with us in the last hour then please let us know as it is likely someone has tried on your behalf. If you have been trying to register a device please contact %{support_email_link} and we can help unlock your account and get you registered.\",\"subject\":\"%{brand_name}: too many failed registration attempts\"}},\"org_list_download_mail\":{\"dispatch_link\":{\"introduction\":\"We have finished meshing your %{crm_brand_name} data with the companies in your \\\\\"%{list_name}\\\\\" list.\",\"subject\":\"%{brand_name}: your file download of \\'%{list_name}\\' is ready\"},\"failed\":{\"instructions\":\"You could try again in a little while. If you already have and are receiving this email again, please contact us at %{support_email_link}\",\"introduction\":\"We are really sorry, but something went wrong with creating your download of %{crm_brand_name} data for your \\\\\"%{list_name}\\\\\" list.\",\"subject\":\"%{brand_name}: your file download of \\'%{list_name}\\' failed\"}},\"reset_password_instructions_email\":{\"crm\":{\"salesforce\":{\"change_requested\":\"Someone has requested a change to your password. Your account is configured to use Salesforce to sign in.\"}},\"fishy_fine_print\":\"If you did not request a password change, then something weird is going on. Someone may be trying to access your account (unsuccessfully). Please reply to this email and let us know. We will take steps to make sure it stops.\",\"non_crm\":{\"change_password_link\":\"Change my password\",\"change_requested\":\"Someone has requested a change to your password, you can do this via the link below.\"},\"subject\":\"Password reset instructions for %{domain}\"},\"sales_force_mail\":{\"processing_completed\":{\"bullet_points\":[\"Only show events associated with companies in your Salesforce account\",\"Add new contacts and accounts to your Salesforce account without leaving %{brand_name}\",\"Access the \\'Salesforce details\\' panel on company dashboards where you can see open tasks, team interactions, opportunities, and more!\"],\"further_instructions\":\"We\\'re here to help. If you run into any questions or challenges, please contact us at %{support_email_link} and a member of our team would be more than happy to help.\",\"get_the_most\":\"To get the most from the integration, check out the \\'Mine Salesforce for opportunities\\' guide in the Help Center.\",\"guide_button\":\"Take me to the guide\",\"introduction\":\"Good news - your Salesforce account is now integrated with %{brand_name}. Now you’ll be able to:\"}},\"segment_contact\":{\"report_manager\":{\"fail_subject\":\"%{brand_name}: The PDF report generation failed\",\"success_subject\":\"%{brand_name}: Your PDF for %{company_name} is attached\"}},\"sf_token_expiry_email\":{\"further_instructions\":\"If you run into any questions or challenges, please contact us at %{support_email_link} and a member of our team would be more than happy to help.\",\"introduction\":\"Unfortunately the connection established for you between %{brand_name} and your %{crm_brand_name} account has expired. We will not be able to update your lists in %{brand_name} to reflect your %{crm_brand_name} database. To re-establish the connection, you just need to log in to %{brand_name} using your %{crm_brand_name}.\",\"subject\":\"%{brand_name} to %{crm_brand_name} connection has expired\"},\"share_list_mail\":{\"introduction\":\"%{user_name} shared a list with you: \",\"subject\":\"[%{brand_name} - shared list] %{list_name}\"},\"trial_expiry_mail\":{\"seven_days_to_go\":{\"further_instructions\":\"A member of our fabulous Customer Success team will arrange a welcome call with you to understand your goals and priorities, and will then give you a personalized Tour de %{brand_name} so you can easily access the information that is most valuable to you.\",\"instructions\":\"If you\\'d like continued access to the platform with our flexible month-to-month subscription, please ensure you contact %{support_email_link} ahead of: %{deadline}\",\"introduction\":\"Time flies when you\\'re uncovering new business opportunities! Your %{brand_name} trial is coming to an end next week.\",\"sign_off\":\"We look forward to helping you reach your sales goals!\",\"subject\":\"Just a heads up that your %{brand_name} trial is ending in seven days\"},\"seven_days_to_go_warning_for_cs\":{\"introduction\":\"%{user_name} shared a list with you: \",\"subject\":\"[%{brand_name} - shared list] %{list_name}\"}},\"unlock_instructions_email\":{\"crm\":{\"salesforce\":{\"change_requested\":\"You are being sent this email either because of one too many unsuccessful non-Salesforce log-in attempts or someone has requested an unlock email. %{brand_name} has not locked your account because your account is configured to use Salesforce to sign in.\",\"password_forgotten\":\"If you have forgotten your Salesforce password or think your account has been locked by Salesforce, please follow the instructions provided on the Salesforce sign in page.\"}},\"fishy_fine_print\":\"If you have not been (unsuccessfully) trying to log in to your account, then something weird is going on. Someone may be trying to access your account (unsuccessfully). Please reply to this email and let us know. We will take steps to make sure it stops.\",\"non_crm\":{\"change_requested\":\"For security reasons we have locked your account because of too many log-in attempts. To unlock your account, click the link below.\",\"unlock_account_link\":\"Unlock my account\"},\"subject\":\"Unlock instructions for %{domain}\"}},\"mongoid\":{\"errors\":{\"messages\":{\"ambiguous_relationship\":{\"message\":\"Ambiguous associations %{candidates} defined on %{klass}.\",\"resolution\":\"On the %{name} association on %{inverse} you must add an :inverse_of option to specify the exact association on %{klass} that is the opposite of %{name}.\",\"summary\":\"When Mongoid attempts to set an inverse document of an association in memory, it needs to know which association it belongs to. When setting %{name}, Mongoid looked on the class %{inverse} for a matching association, but multiples were found that could potentially match: %{candidates}.\"},\"blank_in_locale\":\"can\\'t be blank in %{location}\",\"callbacks\":{\"message\":\"Calling %{method} on %{klass} resulted in a false return from a callback.\",\"resolution\":\"Double check all before callbacks to make sure they are not unintentionally returning false.\",\"summary\":\"If a before callback returns false when using Document.create!, Document#save!, or Document#update_attributes! this error will get raised since the document did not actually get saved.\"},\"calling_document_find_with_nil_is_invalid\":{\"message\":\"Calling Document.find with nil is invalid.\",\"resolution\":\"Most likely this is caused by passing parameters directly through to the find, and the parameter either is not present or the key from which it is accessed is incorrect.\",\"summary\":\"Document.find expects the parameters to be 1 or more ids, and will return a single document if 1 id is provided, otherwise an array of documents if multiple ids are provided.\"},\"create_collection_failure\":{\"message\":\"Cannot create collection %{collection_name} with options %{collection_options}. The following error was raised: %{error}.\",\"resolution\":\"Double check that collection options for the collection %{collection_name} are valid. Consult with Ruby driver documentation and MongoDB documentation if the desired options are supported by your version of the server.\",\"summary\":\"The server rejected createCollection command with given collection options. This may happen when some of the options are invalid, or not supported by your version of the server.\"},\"criteria_argument_required\":{\"message\":\"Calling Criteria methods with nil arguments is not allowed.\",\"resolution\":\"Invoke Criteria methods with non-nil arguments or omit the respective invocations.\",\"summary\":\"Arguments to Criteria methods cannot be nil, and most Criteria methods require at least one argument. Only logical operations (and, or, nor and not), `all\\' and `where\\' can be called without arguments. The method that was called with nil argument was: %{query_method}.\"},\"delete_restriction\":{\"message\":\"Cannot destroy %{document} because of dependent \\'%{relation}\\'.\",\"resolution\":\"Don\\'t attempt to delete the parent %{document} when it has children, or change the dependent option on the association.\",\"summary\":\"When defining \\'%{relation}\\' with a :dependent =\\\\u003e :restrict_with_error, Mongoid will raise an error when attempting to destroy the %{document} when the child \\'%{relation}\\' still has documents in it.\"},\"destroy_restrict_with_error_dependencies_exist\":\"is not empty and prevents the document from being destroyed\",\"document_not_destroyed\":{\"message\":\"%{klass} with id %{id} was not destroyed.\",\"resolution\":\"Check the before/after destroy callbacks to ensure that the return values are truthy for the chain to continue.\",\"summary\":\"When calling %{klass}#destroy! and a callback halts the destroy callback chain by returning a false value, the deletion will not actually occur.\"},\"document_not_found\":{\"message\":\"Document(s) not found for class %{klass} with id(s) %{missing}.\",\"resolution\":\"Search for an id that is in the database or set the Mongoid.raise_not_found_error configuration option to false, which will cause nil to be returned instead of raising this error when searching for a single id, or only the matched documents when searching for multiples.\",\"summary\":\"When calling %{klass}.find with an id or array of ids, each parameter must match a document in the database or this error will be raised. The search was for the id(s): %{searched} (%{total} total) and the following ids were not found: %{missing}.\"},\"document_with_attributes_not_found\":{\"message\":\"Document not found for class %{klass} with attributes %{attributes}.\",\"resolution\":\"Search for attributes that are in the database or set the Mongoid.raise_not_found_error configuration option to false, which will cause nil to be returned instead of raising this error.\",\"summary\":\"When calling %{klass}.find_by with a hash of attributes, all attributes provided must match a document in the database or this error will be raised.\"},\"document_with_shard_key_not_found\":{\"message\":\"Document not found for class %{klass} with id %{missing} and shard key %{shard_key}.\",\"resolution\":\"Search for an id/shard key that is in the database or set the Mongoid.raise_not_found_error configuration option to false, which will cause nil to be returned instead of raising this error.\",\"summary\":\"When calling %{klass}.find with an id and a shard key, each parameter must match a document in the database or this error will be raised. The search was for the id: %{missing} with shard_key: %{shard_key} and it was not found.\"},\"drop_collection_failure\":{\"message\":\"Cannot drop collection %{collection_name}.\",\"resolution\":\"Try to drop the collection manually using Ruby driver or mongo shell.\",\"summary\":\"Mongoid tried to drop collection %{collection_name}, but the collection still exists in the database.\"},\"empty_config_file\":{\"message\":\"Empty configuration file: %{path}.\",\"resolution\":\"Ensure your configuration file contains the correct contents. Refer to: https://www.mongodb.com/docs/mongoid/current/reference/configuration/\",\"summary\":\"Your mongoid.yml configuration file appears to be empty.\"},\"immutable_attribute\":{\"message\":\"Attempted to change the immutable attribute \\'%{name}\\' with the value: %{value}.\",\"resolution\":\"Do not attempt to update the value of \\'%{name}\\' after the document is persisted.\",\"summary\":\"Immutable attributes can only have values set when the document is a new record.\"},\"in_memory_collation_not_supported\":{\"message\":\"A collation option cannot be applied when querying documents in-memory.\",\"resolution\":\"Remove the collation option from the query.\",\"summary\":\"The query being run against documents in memory has a collation option set. A collation option is only supported if the query is executed on a MongoDB server with version \\\\u003e= 3.4.\"},\"invalid_async_query_executor\":{\"message\":\"Invalid async_query_executor option: %{executor}.\",\"resolution\":\"Pick an allowed option or fix the typo. If you were expecting the option to be there, please consult the following page with respect to Mongoid\\'s configuration:\\\\n\\\\n   https://www.mongodb.com/docs/mongoid/current/reference/configuration/#mongoid-configuration-options\",\"summary\":\"A invalid async query executor was specified. The valid options are: %{options}.\"},\"invalid_collection\":{\"message\":\"Access to the collection for %{klass} is not allowed.\",\"resolution\":\"For access to the collection that the embedded document is in, use %{klass}#_root.collection, or do not attempt to persist an embedded document without a parent set.\",\"summary\":\"%{klass}.collection was called, and %{klass} is an embedded document - it resides within the collection of the root document of the hierarchy.\"},\"invalid_config_file\":{\"message\":\"Invalid configuration file: %{path}.\",\"resolution\":\"Ensure your configuration file contains the correct contents. Refer to: https://www.mongodb.com/docs/mongoid/current/reference/configuration/\",\"summary\":\"Your mongoid.yml configuration file does not contain the correct file structure.\"},\"invalid_config_option\":{\"message\":\"Invalid configuration option: %{name}.\",\"resolution\":\"Remove the invalid option or fix the typo. If you were expecting the option to be there, please consult the following page with respect to Mongoid\\'s configuration:\\\\n\\\\n   http://mongoid.org/en/mongoid/docs/installation.html\",\"summary\":\"A invalid configuration option was provided in your mongoid.yml, or a typo is potentially present. The valid configuration options are: %{options}.\"},\"invalid_dependent_strategy\":{\"message\":\"Invalid dependent strategy: %{invalid_strategy}.\",\"resolution\":\"Change the dependent strategy to one of the valid types.\",\"summary\":\"An invalid dependent strategy was defined for the association: %{association}. The valid strategies are: %{valid_strategies}.\"},\"invalid_discriminator_key_target\":{\"message\":\"Setting the discriminator key on a child class is not allowed.\",\"resolution\":\"Try setting the discriminator key on %{superclass} or one of %{class_name}\\'s ancestors.\",\"summary\":\"The discriminator key on the class %{class_name} was attempted to be changed. Changing the discriminator key on a child class is not allowed.\"},\"invalid_dot_dollar_assignment\":{\"message\":\"Cannot set the %{attr} attribute on the %{klass} class.\",\"resolution\":\"In order to set fields that start with a dollar sign ($) or contain a dot/period (.), the aggregation pipeline can be used. MongoDB provides specific operators for working with these fields. Refer to the MongoDB documentation here: https://www.mongodb.com/docs/manual/core/dot-dollar-considerations/\",\"summary\":\"Calling the setters for fields that start with a dollar sign ($) or contain a dot/period (.) is prohibited. See the Mongoid documentation on Field Names with Dots/Periods (.) and Dollar Signs ($) for more information.\"},\"invalid_elem_match_operator\":{\"message\":\"Invalid $elemMatch operator \\'%{operator}\\'.\",\"resolution\":\"Valid field operators are: %{valid_operators}. Ensure you are using one of these operators.\",\"summary\":\"You misspelled an operator or are using an operator that Mongoid does not support.\"},\"invalid_estimated_count_criteria\":{\"message\":\"Invalid criteria for estimated_count.\",\"resolution\":\"Try calling estimated_count directly on the class: %{class_name}.estimated_count.\\\\n\\\\n  If the class defines a default scope, use unscoped: %{class_name}.unscoped.estimated_count.\",\"summary\":\"Estimated count is strictly a collection-level operation and cannot be called on a filtered criteria.\"},\"invalid_expression_operator\":{\"message\":\"Invalid expression operator \\'%{operator}\\'.\",\"resolution\":\"Valid expression operators are: %{valid_operators}. Ensure you are using one of these operators.\",\"summary\":\"You misspelled an operator, are using an operator that Mongoid does not support, or are trying to use a field-level operator on expression level.\"},\"invalid_field\":{\"message\":\"Defining a field named \\'%{field}\\' is not allowed.\",\"resolution\":\"Use Mongoid.destructive_fields to see what names are not allowed, and don\\'t use these names. These include names that also conflict with core Ruby methods on Object, Module, Enumerable, or included gems that inject methods into these or Mongoid internals.\",\"summary\":\"Defining this field would override the method \\'%{name}\\', which would cause issues with expectations around the original method and cause extremely hard to debug issues. The original method was defined in:\\\\n   Object: %{origin}\\\\n   File: %{file}\\\\n   Line: %{line}\"},\"invalid_field_operator\":{\"message\":\"Invalid field operator \\'%{operator}\\'.\",\"resolution\":\"Valid field operators are: %{valid_operators}. Ensure you are using one of these operators.\",\"summary\":\"You misspelled an operator, are using an operator that Mongoid does not support, or are trying to use an expression-level operator on field level.\"},\"invalid_field_option\":{\"message\":\"Invalid option :%{option} provided for field :%{name}.\",\"resolution\":\"When defining the field :%{name} on \\'%{klass}\\', please provide valid options for the field. These are currently: %{valid}. If you meant to define a custom field option, please do so first as follows:\\\\n\\\\n   Mongoid::Fields.option :%{option} do |model, field, value|\\\\n     # Your logic here...\\\\n   end\\\\n   class %{klass}\\\\n     include Mongoid::Document\\\\n     field :%{name}, %{option}: true\\\\n   end\\\\n\\\\n Refer to: https://www.mongodb.com/docs/mongoid/current/reference/fields/#custom-field-options\",\"summary\":\"Mongoid requires that you only provide valid options on each field definition in order to prevent unexpected behavior later on.\"},\"invalid_field_type\":{\"message\":\"Invalid field type %{type_inspection} for field \\'%{field}\\' on model \\'%{klass}\\'.\",\"resolution\":\"Please provide a valid type value for the field. Refer to: https://www.mongodb.com/docs/mongoid/current/reference/fields/#using-symbols-or-strings-instead-of-classes\",\"summary\":\"Model \\'%{klass}\\' defines a field \\'%{field}\\' with an unknown type value %{type_inspection}.\"},\"invalid_global_executor_concurrency\":{\"message\":\"Invalid global_executor_concurrency option.\",\"resolution\":\"Set global_executor_concurrency option to :global_thread_pool or remove global_executor_concurrency option.\",\"summary\":\"You set global_executor_concurrency while async_query_executor option is not set to :global_thread_pool. The global_executor_concurrency is allowed only for the global thread pool executor.\"},\"invalid_includes\":{\"message\":\"Invalid includes directive: %{klass}.includes(%{args})\",\"resolution\":\"Ensure that each parameter passed to %{klass}.includes is a valid name of an association on the %{klass} model. These are: %{relations}.\",\"summary\":\"Eager loading in Mongoid only supports providing arguments to %{klass}.includes that are the names of associations on the %{klass}.\"},\"invalid_index\":{\"message\":\"Invalid index specification on %{klass}: %{spec}, %{options}\",\"resolution\":\"Ensure that the index conforms to the correct syntax and has the correct options.\\\\n\\\\n Valid options are:\\\\n   background: true|false\\\\n   database: \\'database_name\\'\\\\n   name: \\'index_name\\'\\\\n   sparse: true|false\\\\n   unique: true|false\\\\n   min: 1\\\\n   max: 1\\\\n   bits: 26\\\\n   key: 26\\\\n   bucket_size : 1\\\\n   sphere_version : 1\\\\n   text_version : 1\\\\n   version : 1\\\\n   weights: { content: 1, title: 2 }\\\\n   expire_after_seconds: number_of_seconds\\\\n   partial_filter_expression\\\\n   storage_engine\\\\n   language_override\\\\n   default_language\\\\n   collation\\\\n   wildcard_projection: { \\'path.to.field.a\\': 1, \\'path.to.field.b\\': 0 }\\\\n Valid types are: 1, -1, \\'2d\\', \\'2dsphere\\', \\'geoHaystack (deprecated)\\', \\'text\\', \\'hashed\\'\\\\n\\\\n Example:\\\\n   class Band\\\\n     include Mongoid::Document\\\\n     index({ name: 1, label: -1 }, { sparse: true })\\\\n     index({ location: \\'2d\\' }, { background: true })\\\\n   end\\\\n\\\\n\",\"summary\":\"Indexes in Mongoid are defined as a hash of field name and direction/2d pairs, with a hash for any additional options.\"},\"invalid_options\":{\"message\":\"Invalid option :%{invalid} provided to association :%{name}.\",\"resolution\":\"Valid options are: %{valid}, make sure these are the ones you are using.\",\"summary\":\"Mongoid checks the options that are passed to the association macros to ensure that no ill side effects occur by letting something slip by.\"},\"invalid_path\":{\"message\":\"Having a root path assigned for %{klass} is invalid.\",\"resolution\":\"Most likely your embedded model, %{klass} is also referenced via a has_many from a root document in another collection. Double check the association definitions and fix any instances where embedded documents are improperly referenced from other collections.\",\"summary\":\"Mongoid has two different path objects for determining the location of a document in the database, Root and Embedded. This error is raised when an embedded document somehow gets a root path assigned.\"},\"invalid_persistence_option\":{\"message\":\"Invalid persistence option :%{invalid}.\",\"resolution\":\"Valid options are: %{valid}, make sure these are the ones you are using.\",\"summary\":\"The options used to change the persistence context must be one of the valid options for a mongo client, or a collection name.\"},\"invalid_relation\":{\"message\":\"Defining an association named \\'%{name}\\' is not allowed.\",\"resolution\":\"Use Mongoid.destructive_fields to see what names are not allowed, and don\\'t use these names. These include names that also conflict with core Ruby methods on Object, Module, Enumerable, or included gems that inject methods into these or Mongoid internals.\",\"summary\":\"Defining this association would override the method \\'%{name}\\', which would cause issues with expectations around the original method and cause extremely hard to debug issues. The original method was defined in:\\\\n   Object: %{origin}\\\\n   File: %{file}\\\\n   Line: %{line}\"},\"invalid_relation_option\":{\"message\":\"Invalid association option :%{option} for association \\'%{name}\\' on class %{klass}.\",\"resolution\":\"Valid options are: %{valid_options}, make sure you use only those.\",\"summary\":\"An invalid option was provided for an association.\"},\"invalid_scope\":{\"message\":\"Defining a scope of value %{value} on %{klass} is not allowed.\",\"resolution\":\"Change the scope to be a proc wrapped criteria.\\\\n\\\\n Example:\\\\n   class Band\\\\n     include Mongoid::Document\\\\n     scope :inactive, -\\\\u003e{ where(active: false) }\\\\n   end\\\\n\\\\n\",\"summary\":\"Scopes in Mongoid must be procs that wrap criteria objects.\"},\"invalid_session_nesting\":{\"message\":\"A session was started while another session was being used.\",\"resolution\":\"Only use one session at a time; sessions cannot be nested.\",\"summary\":\"Sessions cannot be nested. Only one session can be used in a thread at once.\"},\"invalid_session_use\":{\"message\":\"A session was attempted to be used with a model whose client cannot use that session.\",\"resolution\":\"Only execute operations on the model class or instances of the model through which the session was created. Otherwise, ensure that all models on which operations are executed in the session block share the same driver client. For example, a model may have a different client specified in its \\'store_in\\' options.\\\\n\\\\n\",\"summary\":\"Sessions are started via driver clients (Model#mongo_client) and, in most cases, driver clients are shared across models. When different models have their own clients, a session cannot be obtained via one model and used for operations on another model.\"},\"invalid_set_polymorphic_relation\":{\"message\":\"The %{name} attribute can\\'t be set to an instance of %{other_klass} as %{other_klass} has multiple associations referencing %{klass} as %{name}.\",\"resolution\":\"Set the values from the parent, or redefine the association with only a single definition in the parent.\",\"summary\":\"If the parent class of a polymorphic association has multiple definitions for the same association, the values must be set from the parent side and not the child side since Mongoid cannot determine from the child side which association to go in.\"},\"invalid_storage_options\":{\"message\":\"Invalid options passed to %{klass}.store_in: %{options}.\",\"resolution\":\"Change the options passed to store_in to match the documented API, and ensure all keys in the options hash are symbols.\\\\n\\\\n Example:\\\\n   class Band\\\\n     include Mongoid::Document\\\\n     store_in collection: \\'artists\\', database: \\'music\\'\\\\n   end\\\\n\\\\n\",\"summary\":\"The :store_in macro takes only a hash of parameters with the keys :database, :collection, :collection_options, or :client.\"},\"invalid_time\":{\"message\":\"\\'%{value}\\' is not a valid Time.\",\"resolution\":\"Make sure to pass parsable values to the field setter for Date, DateTime, and Time objects. When this is a String it needs to be valid for Time.parse. Other objects must be valid to pass to Time.local.\",\"summary\":\"Mongoid tries to serialize the values for Date, DateTime, and Time into proper UTC times to store in the database. The provided value could not be parsed.\"},\"inverse_not_found\":{\"message\":\"When adding a(n) %{klass} to %{base}#%{name}, Mongoid could not determine the inverse foreign key to set. The attempted key was \\'%{inverse}\\'.\",\"resolution\":\"If an inverse is not required, like a belongs_to or has_and_belongs_to_many, ensure that :inverse_of =\\\\u003e nil is set on the association. If the inverse is needed, most likely the inverse cannot be figured out from the names of the associations and you will need to explicitly tell Mongoid on the association what the inverse is.\\\\n\\\\n Example:\\\\n   class Car\\\\n     include Mongoid::Document\\\\n     has_one :engine, class_name: \\\\\"Motor\\\\\", inverse_of: :machine\\\\n   end\\\\n\\\\n   class Motor\\\\n     include Mongoid::Document\\\\n     belongs_to :machine, class_name: \\\\\"Car\\\\\", inverse_of: :engine\\\\n   end\",\"summary\":\"When adding a document to an association, Mongoid attempts to link the newly added document to the base of the association in memory, as well as set the foreign key to link them on the database side. In this case Mongoid could not determine what the inverse foreign key was.\"},\"message_title\":\"message\",\"mixed_client_configuration\":{\"message\":\"Both uri and standard configuration options defined for client: \\'%{name}\\'.\",\"resolution\":\"Provide either only a uri as configuration or only standard options.\",\"summary\":\"Instead of simply giving uri or standard options a preference order, Mongoid assumes that you have made a mistake in your configuration and requires that you provide one or the other, but not both. The options that were provided were: %{config}.\"},\"mixed_relations\":{\"message\":\"Referencing a(n) %{embedded} document from the %{root} document via a non-embedded association is not allowed since the %{embedded} is embedded.\",\"resolution\":\"Consider not embedding %{embedded}, or do the key storage and access in a custom manner in the application code.\",\"summary\":\"In order to properly access a(n) %{embedded} from %{root} the reference would need to go through the root document of %{embedded}. In a simple case this would require Mongoid to store an extra foreign key for the root, in more complex cases where %{embedded} is multiple levels deep a key would need to be stored for each parent up the hierarchy.\"},\"nested_attributes_metadata_not_found\":{\"message\":\"Could not find metadata for association \\'%{name}\\' on model: %{klass}.\",\"resolution\":\"Make sure that there is an association defined named \\'%{name}\\' on %{klass} or that the association definition comes before the accepts_nested_attributes_for macro in the model - order matters so that Mongoid has access to the metadata.\\\\n\\\\n Example:\\\\n   class Band\\\\n     include Mongoid::Document\\\\n     has_many :albums\\\\n     accepts_nested_attributes_for :albums\\\\n   end\\\\n\\\\n\",\"summary\":\"When defining nested attributes for an association, Mongoid needs to access the metadata for the association \\'%{name}\\' in order if add autosave functionality to it, if applicable. Either no association named \\'%{name}\\' could be found, or the association had not been defined yet.\"},\"no_client_config\":{\"message\":\"No configuration could be found for a client named \\'%{name}\\'.\",\"resolution\":\"Double check your mongoid.yml to make sure under the clients key that a configuration exists for \\'%{name}\\'. If you have set the configuration programmatically, ensure that \\'%{name}\\' exists in the configuration hash.\",\"summary\":\"When attempting to create the new client, Mongoid could not find a client configuration for the name: \\'%{name}\\'. This is necessary in order to know the host, port, and options needed to connect.\"},\"no_client_database\":{\"message\":\"No database provided for client configuration: :%{name}.\",\"resolution\":\"If configuring via a mongoid.yml, ensure that within your :%{name} section a :database value for the client\\'s default database is defined.\\\\n\\\\n Example:\\\\n   development:\\\\n     clients:\\\\n       %{name}:\\\\n         database: my_app_db\\\\n         hosts:\\\\n           - localhost:27017\\\\n\\\\n\",\"summary\":\"Each client configuration must provide a database so Mongoid knows where the default database to persist to. What was provided was: %{config}.\"},\"no_client_hosts\":{\"message\":\"No hosts provided for client configuration: :%{name}.\",\"resolution\":\"If configuring via a mongoid.yml, ensure that within your :%{name} section a :hosts value for the client hosts is defined.\\\\n\\\\n Example:\\\\n   development:\\\\n     clients:\\\\n       %{name}:\\\\n         database: my_app_db\\\\n         hosts:\\\\n           - localhost:27017\\\\n\\\\n\",\"summary\":\"Each client configuration must provide hosts so Mongoid knows where the database server is located. What was provided was: %{config}.\"},\"no_clients_config\":{\"message\":\"No clients configuration provided.\",\"resolution\":\"Double check your mongoid.yml to make sure that you have a top-level clients key with at least 1 default client configuration for it. You can regenerate a new mongoid.yml for assistance via `rails g mongoid:config`.\\\\n\\\\n Example:\\\\n   development:\\\\n     clients:\\\\n       default:\\\\n         database: mongoid_dev\\\\n         hosts:\\\\n           - localhost:27017\\\\n\\\\n\",\"summary\":\"Mongoid\\'s configuration requires that you provide details about each client that can be connected to, and requires in the clients config at least 1 default client to exist.\"},\"no_default_client\":{\"message\":\"No default client configuration is defined.\",\"resolution\":\"If configuring via a mongoid.yml, ensure that within your :clients section a :default client is defined.\\\\n\\\\n Example:\\\\n   development:\\\\n     clients:\\\\n       default:\\\\n         hosts:\\\\n           - localhost:27017\\\\n\\\\n\",\"summary\":\"The configuration provided settings for: %{keys}, but Mongoid requires a :default to be defined at minimum.\"},\"no_documents_found\":{\"message\":\"Could not find a document of class %{klass}.\",\"resolution\":\"Create a document of class %{klass} or use a finder method that does not raise an exception when no documents are found.\",\"summary\":\"Mongoid attempted to find a document of the class %{klass} but none exist.\"},\"no_environment\":{\"message\":\"Could not load the configuration since no environment was defined.\",\"resolution\":\"Please ensure an environment is set in one of the listed locations. The environment must be explicitly set.\",\"summary\":\"Mongoid could not determine the environment to use because it was not specified in any of the following locations: Rails.env, Sinatra::Base.environment, ENV[\\\\\"RACK_ENV\\\\\"], ENV[\\\\\"MONGOID_ENV\\\\\"]. Without knowing the environment, Mongoid cannot load its configuration.\"},\"no_map_reduce_output\":{\"message\":\"No output location was specified for the map/reduce operation.\",\"resolution\":\"Provide the location that the output of the operation is to go by chaining an #out call to the map/reduce.\\\\n\\\\n Example:\\\\n   Band.map_reduce(map, reduce).out(inline: 1)\\\\n\\\\n Valid options for the out function are:\\\\n   inline: 1\\\\n   merge: \\'collection-name\\'\\\\n   replace: \\'collection-name\\'\\\\n   reduce: \\'collection-name\\'\\\\n\\\\n\",\"summary\":\"When executing a map/reduce, you must provide the output location of the results. The attempted command was: %{command}.\"},\"no_metadata\":{\"message\":\"Metadata not found for document of type %{klass}.\",\"resolution\":\"Ensure that your associations on the %{klass} model are all properly defined, and that the inverse associations are also properly defined. Embedded associations must have both the parent (embeds_one/embeds_many) and the inverse (embedded_in) present in order to work properly.\",\"summary\":\"Mongoid sets the metadata of an association on the document when it is either loaded from within the association, or added to one. The presence of the metadata is required in order to provide various functionality around associations. Most likely you are getting this error because the document is embedded and was attempted to be persisted without being associated with a parent, or the association was not properly defined.\"},\"no_parent\":{\"message\":\"Cannot persist embedded document %{klass} without a parent document.\",\"resolution\":\"Ensure that you\\'ve set the parent association if instantiating the embedded document directly, or always create new embedded documents via the parent association.\",\"summary\":\"If the document is embedded, in order to be persisted it must always have a reference to its parent document. This is most likely caused by either calling %{klass}.create or %{klass}.create! without setting the parent document as an attribute.\"},\"readonly_attribute\":{\"message\":\"Attempted to set the readonly attribute \\'%{name}\\' with the value: %{value}.\",\"resolution\":\"Don\\'t define \\'%{name}\\' as readonly, or do not attempt to update its value after the document is persisted.\",\"summary\":\"Attributes flagged as readonly via Model.attr_readonly can only have values set when the document is a new record.\"},\"readonly_document\":{\"message\":\"Attempted to persist a readonly document of class \\'%{klass}\\'.\",\"resolution\":\"Don\\'t attempt to persist documents that are flagged as readonly.\",\"summary\":\"Documents that are marked readonly cannot be persisted.\"},\"resolution_title\":\"resolution\",\"scope_overwrite\":{\"message\":\"Cannot create scope :%{scope_name}, because of existing method %{model_name}.%{scope_name}.\",\"resolution\":\"Change the name of the scope so it does not conflict with the already defined method %{model_name}, or set the configuration option Mongoid.scope_overwrite_exception to false, which is its default. In this case a warning will be logged.\",\"summary\":\"When defining a scope that conflicts with a method that already exists on the model, this error will get raised if Mongoid.scope_overwrite_exception is set to true.\"},\"sessions_not_supported\":{\"message\":\"Sessions are not supported by the connected server(s).\",\"resolution\":\"Verify that all servers in your deployment are at least version 3.6 or don\\'t attempt to use sessions with older server versions.\",\"summary\":\"A session was attempted to be used with a MongoDB server version that doesn\\'t support sessions. Sessions are supported in MongoDB server versions 3.6 and higher.\"},\"summary_title\":\"summary\",\"too_many_nested_attribute_records\":{\"message\":\"Accepting nested attributes for %{association} is limited to %{limit} documents.\",\"resolution\":\"The limit is set as an option to the macro, for example: accepts_nested_attributes_for :%{association}, limit: %{limit}. Consider raising this limit or making sure no more are sent than the set value.\",\"summary\":\"More documents were sent to be processed than the allowed limit.\"},\"unknown_attribute\":{\"message\":\"Attempted to set a value for \\'%{name}\\' which is not allowed on the model %{klass}.\",\"resolution\":\"Define the field \\'%{name}\\' in %{klass}, or include Mongoid::Attributes::Dynamic in %{klass} if you intend to store values in fields that are not explicitly defined.\",\"summary\":\"%{klass}#%{name}= was called but there is no \\'%{name}\\' field defined in the model, and Mongoid::Attributes::Dynamic is not included. This error is also raised instead of NoMethodError if the unknown attribute is passed to any method that accepts an attributes hash, such as #attributes=.\"},\"unknown_model\":{\"message\":\"Attempted to instantiate an object of the unknown model \\'%{klass}\\'.\",\"resolution\":\"The _type field is a reserved one used by Mongoid to determine the class for instantiating an object. Please don\\'t save data in this field or ensure that any values in this field correspond to valid models.\",\"summary\":\"A document with the value \\'%{value}\\' at the key \\'_type\\' was used to instantiate a model object but Mongoid cannot find this Class.\"},\"unsaved_document\":{\"message\":\"Attempted to save %{document} before the parent %{base}.\",\"resolution\":\"Make sure to only use create or create! when the parent document %{base} is persisted.\",\"summary\":\"You cannot call create or create! through the association (%{document}) whose parent (%{base}) is not already saved. This would cause the database to be out of sync since the child could potentially reference a nonexistent parent.\"},\"unsupported_javascript\":{\"message\":\"Executing Javascript $where selector on an embedded criteria is not supported.\",\"resolution\":\"Please provide a standard hash to #where when the criteria is for an embedded association.\",\"summary\":\"Mongoid only supports providing a hash of arguments to #where criterion on embedded documents. Since %{klass} is embedded, the expression %{javascript} is not allowed.\"},\"validations\":{\"message\":\"Validation of %{document} failed.\",\"resolution\":\"Try persisting the document with valid data or remove the validations.\",\"summary\":\"The following errors were found: %{errors}\"}}}},\"number\":{\"currency\":{\"format\":{\"delimiter\":\",\",\"format\":\"%u%n\",\"negative_format\":\"-%u%n\",\"precision\":2,\"separator\":\".\",\"significant\":false,\"strip_insignificant_zeros\":false,\"unit\":\"$\"}},\"format\":{\"delimiter\":\",\",\"precision\":3,\"round_mode\":\"default\",\"separator\":\".\",\"significant\":false,\"strip_insignificant_zeros\":false},\"human\":{\"decimal_units\":{\"format\":\"%n %u\",\"units\":{\"billion\":\"Billion\",\"million\":\"Million\",\"quadrillion\":\"Quadrillion\",\"thousand\":\"Thousand\",\"trillion\":\"Trillion\",\"unit\":\"\"}},\"format\":{\"delimiter\":\"\",\"precision\":3,\"significant\":true,\"strip_insignificant_zeros\":true},\"storage_units\":{\"format\":\"%n %u\",\"units\":{\"byte\":{\"one\":\"Byte\",\"other\":\"Bytes\"},\"eb\":\"EB\",\"gb\":\"GB\",\"kb\":\"KB\",\"mb\":\"MB\",\"pb\":\"PB\",\"tb\":\"TB\",\"zb\":\"ZB\"}}},\"nth\":{},\"percentage\":{\"format\":{\"delimiter\":\"\",\"format\":\"%n%\"}},\"precision\":{\"format\":{\"delimiter\":\"\"}}},\"pivot_list_column_value\":{\"non_sponsor_org\":\"non-sponsor\"},\"pivot_list_download\":{\"id\":\"ZW_ID\"},\"simple_form\":{\"error_notification\":{\"default_message\":\"Please review the problems below:\"},\"no\":\"No\",\"required\":{\"mark\":\"*\",\"text\":\"required\"},\"yes\":\"Yes\"},\"support\":{\"array\":{\"last_word_connector\":\", and \",\"two_words_connector\":\" and \",\"words_connector\":\", \"}},\"terminology\":{\"all_orgs_list_category\":\"Companies\",\"companies_in_your_sf_label\":\"Companies in your Salesforce\",\"company_based_in\":\"Sponsor company based in\",\"company_location\":\"Sponsor Company Location\",\"neglected_target_label\":\"Neglected Sponsors\",\"sponsor\":\"Drug Sponsor\",\"sponsor_orgs_list_category\":\"Sponsor Companies\",\"target_organization_title\":\"Sponsor\"},\"time\":{\"am\":\"am\",\"formats\":{\"default\":\"%a, %d %b %Y %H:%M:%S %z\",\"long\":\"%B %d, %Y %H:%M\",\"short\":\"%d %b %H:%M\"},\"pm\":\"pm\"},\"users\":{\"confirmations\":{\"new\":{\"legend\":\"Resend your %{brand_name} confirmation instructions\",\"message\":\"We need to confirm your email address to complete the sign up process. Supply your email address, below, and we will send you instructions on how to confirm your address.\",\"submit_button\":\"Send Confirmation Instructions\",\"title\":\"Resend confirmation instructions | %{brand_name}\"},\"show\":{\"legend\":\"Check your inbox for a confirmation email\",\"message\":\"If your e-mail exists in our database we have sent you a message with instructions. Check your inbox (or spam folder) for a message from \\'%{default_from_email}\\' containing the confirmation link.\",\"title\":\"Awaiting confirmation | %{brand_name}\"}},\"passwords\":{\"new\":{\"failures\":\"Note: If you make more than 5 sequential failed attempts to sign in with your %{brand_name} password, your account will be (temporarily) locked. Check your inbox for instruction on how to unlock your account, or we can\",\"legend\":\"Reset your %{brand_name} password\",\"message\":\"Supply your email address, below, and we will send you instructions on how to reset your password.\",\"resend_link\":\"resend a new set of unlock instructions\",\"submit_button\":\"Send Reset Instructions\",\"title\":\"Reset password | %{brand_name}\"},\"show\":{\"didnt_receive_email\":\"Didn\\'t receive the email?\",\"legend\":\"Password reset instructions sent\",\"message\":\"If your e-mail exists in our database we have sent you a message with password reset instructions. Check your inbox (or spam folder) for a message from \\'%{default_from_email}\\'.\",\"resend_link\":\"you can request another one here\",\"title\":\"Awaiting reset | %{brand_name}\"}}},\"will_paginate\":{\"container_aria_label\":\"Pagination\",\"next_label\":\"Next \\\\u0026#8594;\",\"page_aria_label\":\"Page %{page}\",\"page_entries_info\":{\"multi_page\":\"Displaying %{model} %{from} - %{to} of %{count} in total\",\"multi_page_html\":\"Displaying %{model} \\\\u003cb\\\\u003e%{from}\\\\u0026nbsp;-\\\\u0026nbsp;%{to}\\\\u003c/b\\\\u003e of \\\\u003cb\\\\u003e%{count}\\\\u003c/b\\\\u003e in total\",\"single_page\":{\"one\":\"Displaying 1 %{model}\",\"other\":\"Displaying all %{count} %{model}\",\"zero\":\"No %{model} found\"},\"single_page_html\":{\"one\":\"Displaying \\\\u003cb\\\\u003e1\\\\u003c/b\\\\u003e %{model}\",\"other\":\"Displaying \\\\u003cb\\\\u003eall\\\\u0026nbsp;%{count}\\\\u003c/b\\\\u003e %{model}\",\"zero\":\"No %{model} found\"}},\"page_gap\":\"\\\\u0026hellip;\",\"previous_label\":\"\\\\u0026#8592; Previous\"},\"x_mailer_header\":\"clicks.zymewire.com\"}'));\nI18n.translations[\"crofter\"] = I18n.extend((I18n.translations[\"crofter\"] || {}), JSON.parse('{\"activerecord\":{\"errors\":{\"messages\":{\"record_invalid\":\"Validation failed: %{errors}\",\"restrict_dependent_destroy\":{\"has_many\":\"Cannot delete record because dependent %{record} exist\",\"has_one\":\"Cannot delete record because a dependent %{record} exists\"}}}},\"brand\":{\"logo\":{\"full_image\":{\"file_name\":\"zymewire_logo_full.png\",\"path\":\"images/brand_specific/zymewire/zymewire_logo_full.png\"},\"header\":{\"path\":\"/images/brand_specific/crofter/crofter-logo-white_background-solo-150x60px-01-01.png\"},\"mark_only\":{\"file_name\":\"zymewire_logo_z_only.png\",\"path\":\"images/brand_specific/zymewire/zymewire_logo_z_only.png\"}},\"meta\":{\"description\":\"Access actionable insights, sales signals and data of global CROs in real time.\",\"image\":\"https://app.crofterapp.com/images/brand_specific/crofter/meta_image.png\",\"title\":\"Crofter: Catalyze your sales.\"},\"name\":\"Crofter\",\"tag_line\":\"Catalyze your sales.\"},\"bulk_uploads\":{\"email_local_part\":{\"empty_parameter\":\"No file uploaded\",\"error\":\"File Upload failed: %{error_message}\",\"success\":\"File was successfully uploaded\"}},\"common\":{\"crm\":{\"salesforce\":{\"forgot_password\":\"If you have forgotten your Salesforce password, please follow the instructions provided on the Salesforce sign in page.\",\"sign_in_button\":\"Sign In with Salesforce\"}}},\"contact\":{\"default_from_email\":\"info@crofterapp.com\",\"phone_numbers\":[{\"label\":\"US\",\"phone\":\"1-844-996-3321\"},{\"label\":\"UK\",\"phone\":\"+44-208-133-9963\"}],\"support_email\":\"support@crofterapp.com\"},\"date\":{\"abbr_day_names\":[\"Sun\",\"Mon\",\"Tue\",\"Wed\",\"Thu\",\"Fri\",\"Sat\"],\"abbr_month_names\":[null,\"Jan\",\"Feb\",\"Mar\",\"Apr\",\"May\",\"Jun\",\"Jul\",\"Aug\",\"Sep\",\"Oct\",\"Nov\",\"Dec\"],\"day_names\":[\"Sunday\",\"Monday\",\"Tuesday\",\"Wednesday\",\"Thursday\",\"Friday\",\"Saturday\"],\"formats\":{\"default\":\"%Y-%m-%d\",\"long\":\"%B %d, %Y\",\"short\":\"%b %d\"},\"month_names\":[null,\"January\",\"February\",\"March\",\"April\",\"May\",\"June\",\"July\",\"August\",\"September\",\"October\",\"November\",\"December\"],\"order\":[\"year\",\"month\",\"day\"]},\"datetime\":{\"distance_in_words\":{\"about_x_hours\":{\"one\":\"about 1 hour\",\"other\":\"about %{count} hours\"},\"about_x_months\":{\"one\":\"about 1 month\",\"other\":\"about %{count} months\"},\"about_x_years\":{\"one\":\"about 1 year\",\"other\":\"about %{count} years\"},\"almost_x_years\":{\"one\":\"almost 1 year\",\"other\":\"almost %{count} years\"},\"half_a_minute\":\"half a minute\",\"less_than_x_minutes\":{\"one\":\"less than a minute\",\"other\":\"less than %{count} minutes\"},\"less_than_x_seconds\":{\"one\":\"less than 1 second\",\"other\":\"less than %{count} seconds\"},\"over_x_years\":{\"one\":\"over 1 year\",\"other\":\"over %{count} years\"},\"x_days\":{\"one\":\"1 day\",\"other\":\"%{count} days\"},\"x_minutes\":{\"one\":\"1 minute\",\"other\":\"%{count} minutes\"},\"x_months\":{\"one\":\"1 month\",\"other\":\"%{count} months\"},\"x_seconds\":{\"one\":\"1 second\",\"other\":\"%{count} seconds\"}},\"prompts\":{\"day\":\"Day\",\"hour\":\"Hour\",\"minute\":\"Minute\",\"month\":\"Month\",\"second\":\"Seconds\",\"year\":\"Year\"}},\"default_host\":\"https://app.crofterapp.com\",\"devise\":{\"confirmations\":{\"confirmed\":\"Your account was successfully confirmed. Please sign in.\",\"send_instructions\":\"Your email has not been confirmed. We need to confirm your email account before you can sign in. Please check your inbox or spam folder for an email from \\'info@zymewire.com\\' or request a new one.\",\"send_paranoid_instructions\":\"If your e-mail exists on our database, you will receive an email with instructions about how to confirm your account in a few minutes.\"},\"failure\":{\"already_authenticated\":\"You are already signed in.\",\"expired\":\"Your account has expired due to inactivity. Please contact the site administrator.\",\"inactive\":\"Your account was not activated yet.\",\"invalid\":\"Invalid email or password. If you use Salesforce, use the \\'Have Salesforce?\\' panel.\",\"invalid_token\":\"Invalid authentication token.\",\"last_attempt\":\"You have one more attempt before your account is locked.\",\"locked\":\"Your account is locked.\",\"not_active\":\"Your account has been de-activated, if you think this is a mistake please contact us\",\"not_found_in_database\":\"Invalid %{authentication_keys} or password.\",\"session_limited\":\"Your login credentials were used in another browser. Please sign in again to continue in this browser.\",\"timeout\":\"Your session expired, please sign in again to continue.\",\"unauthenticated\":\"You need to sign in or sign up before continuing.\",\"unconfirmed\":\"We must confirm your email before you can continue. Please check your inbox or spam folder for a confirmation email from \\'info@zymewire.com\\' or request a new one.\"},\"invalid_captcha\":\"The captcha input is not valid!\",\"invalid_security_question\":\"The security question answer was invalid.\",\"mailer\":{\"confirmation_instructions\":{\"subject\":\"Confirmation instructions for Zymewire.com\"},\"email_changed\":{\"subject\":\"Email Changed\"},\"password_change\":{\"subject\":\"Password Changed\"},\"reset_password_instructions\":{\"subject\":\"Reset password instructions for Zymewire.com\"},\"unlock_instructions\":{\"subject\":\"Unlock Instructions for Zymewire.com\"}},\"omniauth_callbacks\":{\"failure\":\"Could not authorize you from %{kind} because \\\\\"%{reason}\\\\\".\",\"success\":\"Successfully authorized from %{kind} account.\"},\"paranoid_verification_code\":{\"show\":{\"submit\":\"Submit\",\"submit_verification_code\":\"Submit verification code\",\"verification_code\":\"Verification code\"},\"updated\":\"Verification code accepted\"},\"paranoid_verify\":{\"code_required\":\"Please enter the code our support team provided\"},\"password_expired\":{\"change_required\":\"Your password has expired. Please choose a new password!\",\"show\":{\"change_my_password\":\"Change my password\",\"current_password\":\"Current password\",\"new_password\":\"New password\",\"new_password_confirmation\":\"Confirm new password\",\"renew_your_password\":\"Renew your password\"},\"updated\":\"Your new password is saved.\"},\"passwords\":{\"no_token\":\"You can\\'t access this page without coming from a password reset email. If you do come from a password reset email, please make sure you used the full URL provided.\",\"send_instructions\":\"You will receive an email with instructions about how to reset your password in a few minutes.\",\"send_paranoid_instructions\":\"If your e-mail exists on our database, you will receive a password recovery link on your e-mail\",\"updated\":\"Your password was changed successfully. You are now signed in.\",\"updated_not_active\":\"Your password was changed successfully.\"},\"registrations\":{\"destroyed\":\"Bye! Your account was successfully cancelled. We hope to see you again soon.\",\"signed_up\":\"Welcome! You have signed up successfully.\",\"signed_up_but_inactive\":\"You have signed up successfully. However, we could not sign you in because your account is not yet activated.\",\"signed_up_but_locked\":\"You have signed up successfully. However, we could not sign you in because your account is locked.\",\"signed_up_but_unconfirmed\":\"A message with a confirmation link has been sent to your email address. Please open the link to activate your account.\",\"update_needs_confirmation\":\"You updated your account successfully, but we need to verify your new email address. Please check your email and click on the confirm link to finalize confirming your new email address.\",\"updated\":\"You updated your account successfully.\",\"updated_but_not_signed_in\":\"Your account has been updated successfully, but since your password was changed, you need to sign in again.\"},\"sessions\":{\"already_signed_out\":\"Signed out successfully.\",\"signed_in\":\"Signed in successfully.\",\"signed_out\":\"Signed out successfully.\"},\"unlocks\":{\"send_instructions\":\"You will receive an email with instructions about how to unlock your account in a few minutes.\",\"send_paranoid_instructions\":\"If your account exists, you will receive an email with instructions about how to unlock it in a few minutes.\",\"unlocked\":\"Your account has been unlocked successfully. Please sign in to continue.\"}},\"disable_crm_login_option\":\"false\",\"domain\":\"crofterapp.com\",\"download\":\"Download\",\"download_30_days\":\"This link will be available for 30 days after which the file will be removed from our servers.\",\"enumerize\":{\"blocklisted_contact\":{\"provider\":{\"insideview\":\"InsideView\",\"zephyr\":\"Zephyr\"}}},\"errors\":{\"format\":\"%{attribute} %{message}\",\"messages\":{\"accepted\":\"must be accepted\",\"already_confirmed\":\"was already confirmed, please try signing in\",\"blank\":\"can\\'t be blank\",\"confirmation\":\"doesn\\'t match %{attribute}\",\"confirmation_period_expired\":\"needs to be confirmed within %{period}, please request a new one\",\"empty\":\"can\\'t be empty\",\"equal_to\":\"must be equal to %{count}\",\"equal_to_current_password\":\"Sorry, must be different to your current password!\",\"equal_to_email\":\"must be different than the email.\",\"even\":\"must be even\",\"exclusion\":\"is reserved\",\"expired\":\"has expired, please request a new one\",\"greater_than\":\"must be greater than %{count}\",\"greater_than_or_equal_to\":\"must be greater than or equal to %{count}\",\"in\":\"must be in %{count}\",\"inclusion\":\"is not included in the list\",\"invalid\":\"is invalid\",\"less_than\":\"must be less than %{count}\",\"less_than_or_equal_to\":\"must be less than or equal to %{count}\",\"model_invalid\":\"Validation failed: %{errors}\",\"not_a_number\":\"is not a number\",\"not_an_integer\":\"must be an integer\",\"not_found\":\"not found\",\"not_locked\":\"was not locked\",\"not_saved\":{\"one\":\"1 error prohibited this %{resource} from being saved:\",\"other\":\"%{count} errors prohibited this %{resource} from being saved:\"},\"odd\":\"must be odd\",\"other_than\":\"must be other than %{count}\",\"password_complexity\":{\"digit\":{\"one\":\"must contain at least one digit\",\"other\":\"must contain at least %{count} digits\"},\"lower\":{\"one\":\"must contain at least one lower-case letter\",\"other\":\"must contain at least %{count} lower-case letters\"},\"symbol\":{\"one\":\"must contain at least one punctuation mark or symbol\",\"other\":\"must contain at least %{count} punctuation marks or symbols\"},\"upper\":{\"one\":\"must contain at least one upper-case letter\",\"other\":\"must contain at least %{count} upper-case letters\"}},\"password_format\":\"Must contain uppercase AND lowercase letters and at least one number\",\"password_too_long\":\"is too long\",\"present\":\"must be blank\",\"required\":\"must exist\",\"taken\":\"has already been taken\",\"taken_in_past\":\"Sorry, you have used this password before!\",\"too_long\":{\"one\":\"is too long (maximum is 1 character)\",\"other\":\"is too long (maximum is %{count} characters)\"},\"too_short\":{\"one\":\"is too short (minimum is 1 character)\",\"other\":\"is too short (minimum is %{count} characters)\"},\"wrong_length\":{\"one\":\"is the wrong length (should be 1 character)\",\"other\":\"is the wrong length (should be %{count} characters)\"}}},\"flash\":{\"actions\":{\"create\":{\"notice\":\"%{resource_name} was successfully created.\"},\"destroy\":{\"alert\":\"%{resource_name} could not be destroyed.\",\"notice\":\"%{resource_name} was successfully destroyed.\"},\"update\":{\"notice\":\"%{resource_name} was successfully updated.\"}}},\"hello_world\":\"Hello world\",\"help\":{\"articles\":{\"crm_mining\":\"/help/articles/13976-mine-your-companys-salesforce-for-opportunities\",\"finding_contact_info\":\"/help/articles/13987-finding-contact-information\",\"guide_d\":\"/help/guide_d\",\"guide_g\":\"/help/guide_g\",\"guide_h\":\"/help/guide_h\",\"guide_i\":\"/help/guide_i\",\"guide_j\":\"/help/guide_j\",\"list_crud_c\":\"/help/articles/13985-generating-a-list\",\"list_crud_u\":\"/help/articles/18991-adding-and-removing-individual-companies-from-a-list\",\"map_search\":\"/help/articles/13980-map-based-searching\",\"saving_feeds\":\"/help/articles/13986-saving-feeds\"},\"site\":\"https://zymewire.helpsite.com/\"},\"helpers\":{\"select\":{\"prompt\":\"Please select\"},\"submit\":{\"create\":\"Create %{model}\",\"submit\":\"Save %{model}\",\"update\":\"Update %{model}\"}},\"hi\":\"Hi\",\"industry\":\"contact research organization\",\"mailers\":{\"common\":{\"chummy_sign_off\":\"Have a good one.\",\"final_note\":\"P.S.: If you think you received this email accidentally, then something weird could be going on. Hit reply and a member of the %{brand_name} team will investigate.\",\"team_sign_off\":\"- The %{brand_name} Team\"},\"confirmation_instructions_email\":{\"crm\":{\"salesforce\":{\"resource_confirmed\":\"Someone has requested a resend of a confirmation email. You do not need to confirm your email address because your account is configured to use Salesforce to sign in.\",\"resource_unconfirmed\":\"You do not need to confirm your email address because your account is configured to use Salesforce to sign in, please complete the sign up process by clicking the button below to sign in to %{brand_name} via Salesforce.\"}},\"non_crm\":{\"confirm_link\":\"Confirm my account\",\"welcome\":\"Welcome to %{brand_name}. As the final step in the process you\\'ll need to confirm your account by clicking on the link below.\"},\"subject\":\"Confirmation instructions for %{domain}\"},\"flagged_events_mailer\":{\"from\":\"Flagged events - %{brand_name} \\\\u003cflagged_events@mailer.%{domain}\\\\u003e\"},\"mobile_registration_email\":{\"alert_cs_registration_locked\":{\"subject\":\"%{brand_name}: user has had mobile registration locked, too many failed attempts\"},\"dispatch_registration_PIN\":{\"further_instructions\":\"If you are NOT attempting to register for the %{brand_name} Mobile app then please let us know at %{support_email_link} - thank you.\",\"introduction\":\"Here is your mobile app registration PIN:\",\"subject\":\"%{brand_name} Mobile Registration Verification\"},\"too_many_failed_attempts\":{\"introduction\":\"We have received too many failed mobile device registration attempts for your account and we will block any further requests. If you have not attempted to register a mobile device with us in the last hour then please let us know as it is likely someone has tried on your behalf. If you have been trying to register a device please contact %{support_email_link} and we can help unlock your account and get you registered.\",\"subject\":\"%{brand_name}: too many failed registration attempts\"}},\"org_list_download_mail\":{\"dispatch_link\":{\"introduction\":\"We have finished meshing your %{crm_brand_name} data with the companies in your \\\\\"%{list_name}\\\\\" list.\",\"subject\":\"%{brand_name}: your file download of \\'%{list_name}\\' is ready\"},\"failed\":{\"instructions\":\"You could try again in a little while. If you already have and are receiving this email again, please contact us at %{support_email_link}\",\"introduction\":\"We are really sorry, but something went wrong with creating your download of %{crm_brand_name} data for your \\\\\"%{list_name}\\\\\" list.\",\"subject\":\"%{brand_name}: your file download of \\'%{list_name}\\' failed\"}},\"reset_password_instructions_email\":{\"crm\":{\"salesforce\":{\"change_requested\":\"Someone has requested a change to your password. Your account is configured to use Salesforce to sign in.\"}},\"fishy_fine_print\":\"If you did not request a password change, then something weird is going on. Someone may be trying to access your account (unsuccessfully). Please reply to this email and let us know. We will take steps to make sure it stops.\",\"non_crm\":{\"change_password_link\":\"Change my password\",\"change_requested\":\"Someone has requested a change to your password, you can do this via the link below.\"},\"subject\":\"Password reset instructions for %{domain}\"},\"sales_force_mail\":{\"processing_completed\":{\"bullet_points\":[\"Only show events associated with companies in your Salesforce account\",\"Add new contacts and accounts to your Salesforce account without leaving %{brand_name}\",\"Access the \\'Salesforce details\\' panel on company dashboards where you can see open tasks, team interactions, opportunities, and more!\"],\"further_instructions\":\"We\\'re here to help. If you run into any questions or challenges, please contact us at %{support_email_link} and a member of our team would be more than happy to help.\",\"get_the_most\":\"To get the most from the integration, check out the \\'Mine Salesforce for opportunities\\' guide in the Help Center.\",\"guide_button\":\"Take me to the guide\",\"introduction\":\"Good news - your Salesforce account is now integrated with %{brand_name}. Now you’ll be able to:\"}},\"segment_contact\":{\"report_manager\":{\"fail_subject\":\"%{brand_name}: The PDF report generation failed\",\"success_subject\":\"%{brand_name}: Your PDF for %{company_name} is attached\"}},\"sf_token_expiry_email\":{\"further_instructions\":\"If you run into any questions or challenges, please contact us at %{support_email_link} and a member of our team would be more than happy to help.\",\"introduction\":\"Unfortunately the connection established for you between %{brand_name} and your %{crm_brand_name} account has expired. We will not be able to update your lists in %{brand_name} to reflect your %{crm_brand_name} database. To re-establish the connection, you just need to log in to %{brand_name} using your %{crm_brand_name}.\",\"subject\":\"%{brand_name} to %{crm_brand_name} connection has expired\"},\"share_list_mail\":{\"introduction\":\"%{user_name} shared a list with you: \",\"subject\":\"[%{brand_name} - shared list] %{list_name}\"},\"trial_expiry_mail\":{\"seven_days_to_go\":{\"further_instructions\":\"A member of our fabulous Customer Success team will arrange a welcome call with you to understand your goals and priorities, and will then give you a personalized Tour de %{brand_name} so you can easily access the information that is most valuable to you.\",\"instructions\":\"If you\\'d like continued access to the platform with our flexible month-to-month subscription, please ensure you contact %{support_email_link} ahead of: %{deadline}\",\"introduction\":\"Time flies when you\\'re uncovering new business opportunities! Your %{brand_name} trial is coming to an end next week.\",\"sign_off\":\"We look forward to helping you reach your sales goals!\",\"subject\":\"Just a heads up that your %{brand_name} trial is ending in seven days\"},\"seven_days_to_go_warning_for_cs\":{\"introduction\":\"%{user_name} shared a list with you: \",\"subject\":\"[%{brand_name} - shared list] %{list_name}\"}},\"unlock_instructions_email\":{\"crm\":{\"salesforce\":{\"change_requested\":\"You are being sent this email either because of one too many unsuccessful non-Salesforce log-in attempts or someone has requested an unlock email. %{brand_name} has not locked your account because your account is configured to use Salesforce to sign in.\",\"password_forgotten\":\"If you have forgotten your Salesforce password or think your account has been locked by Salesforce, please follow the instructions provided on the Salesforce sign in page.\"}},\"fishy_fine_print\":\"If you have not been (unsuccessfully) trying to log in to your account, then something weird is going on. Someone may be trying to access your account (unsuccessfully). Please reply to this email and let us know. We will take steps to make sure it stops.\",\"non_crm\":{\"change_requested\":\"For security reasons we have locked your account because of too many log-in attempts. To unlock your account, click the link below.\",\"unlock_account_link\":\"Unlock my account\"},\"subject\":\"Unlock instructions for %{domain}\"}},\"mobile_website\":{\"cta\":\"Sign Up Here\",\"cta_link\":\"https://share.hsforms.com/1UVuwVQMjQc-B7E3AUnHjHwbm5d1\",\"header\":\"Head to your desktop to view your latest Crofter news!\",\"message\":\"Unfortunately Crofter is not available as a mobile app yet.\",\"prompt\":\"Subscribe to our newsletter and hear about future updates.\"},\"mongoid\":{\"errors\":{\"messages\":{\"ambiguous_relationship\":{\"message\":\"Ambiguous associations %{candidates} defined on %{klass}.\",\"resolution\":\"On the %{name} association on %{inverse} you must add an :inverse_of option to specify the exact association on %{klass} that is the opposite of %{name}.\",\"summary\":\"When Mongoid attempts to set an inverse document of an association in memory, it needs to know which association it belongs to. When setting %{name}, Mongoid looked on the class %{inverse} for a matching association, but multiples were found that could potentially match: %{candidates}.\"},\"blank_in_locale\":\"can\\'t be blank in %{location}\",\"callbacks\":{\"message\":\"Calling %{method} on %{klass} resulted in a false return from a callback.\",\"resolution\":\"Double check all before callbacks to make sure they are not unintentionally returning false.\",\"summary\":\"If a before callback returns false when using Document.create!, Document#save!, or Document#update_attributes! this error will get raised since the document did not actually get saved.\"},\"calling_document_find_with_nil_is_invalid\":{\"message\":\"Calling Document.find with nil is invalid.\",\"resolution\":\"Most likely this is caused by passing parameters directly through to the find, and the parameter either is not present or the key from which it is accessed is incorrect.\",\"summary\":\"Document.find expects the parameters to be 1 or more ids, and will return a single document if 1 id is provided, otherwise an array of documents if multiple ids are provided.\"},\"create_collection_failure\":{\"message\":\"Cannot create collection %{collection_name} with options %{collection_options}. The following error was raised: %{error}.\",\"resolution\":\"Double check that collection options for the collection %{collection_name} are valid. Consult with Ruby driver documentation and MongoDB documentation if the desired options are supported by your version of the server.\",\"summary\":\"The server rejected createCollection command with given collection options. This may happen when some of the options are invalid, or not supported by your version of the server.\"},\"criteria_argument_required\":{\"message\":\"Calling Criteria methods with nil arguments is not allowed.\",\"resolution\":\"Invoke Criteria methods with non-nil arguments or omit the respective invocations.\",\"summary\":\"Arguments to Criteria methods cannot be nil, and most Criteria methods require at least one argument. Only logical operations (and, or, nor and not), `all\\' and `where\\' can be called without arguments. The method that was called with nil argument was: %{query_method}.\"},\"delete_restriction\":{\"message\":\"Cannot destroy %{document} because of dependent \\'%{relation}\\'.\",\"resolution\":\"Don\\'t attempt to delete the parent %{document} when it has children, or change the dependent option on the association.\",\"summary\":\"When defining \\'%{relation}\\' with a :dependent =\\\\u003e :restrict_with_error, Mongoid will raise an error when attempting to destroy the %{document} when the child \\'%{relation}\\' still has documents in it.\"},\"destroy_restrict_with_error_dependencies_exist\":\"is not empty and prevents the document from being destroyed\",\"document_not_destroyed\":{\"message\":\"%{klass} with id %{id} was not destroyed.\",\"resolution\":\"Check the before/after destroy callbacks to ensure that the return values are truthy for the chain to continue.\",\"summary\":\"When calling %{klass}#destroy! and a callback halts the destroy callback chain by returning a false value, the deletion will not actually occur.\"},\"document_not_found\":{\"message\":\"Document(s) not found for class %{klass} with id(s) %{missing}.\",\"resolution\":\"Search for an id that is in the database or set the Mongoid.raise_not_found_error configuration option to false, which will cause nil to be returned instead of raising this error when searching for a single id, or only the matched documents when searching for multiples.\",\"summary\":\"When calling %{klass}.find with an id or array of ids, each parameter must match a document in the database or this error will be raised. The search was for the id(s): %{searched} (%{total} total) and the following ids were not found: %{missing}.\"},\"document_with_attributes_not_found\":{\"message\":\"Document not found for class %{klass} with attributes %{attributes}.\",\"resolution\":\"Search for attributes that are in the database or set the Mongoid.raise_not_found_error configuration option to false, which will cause nil to be returned instead of raising this error.\",\"summary\":\"When calling %{klass}.find_by with a hash of attributes, all attributes provided must match a document in the database or this error will be raised.\"},\"document_with_shard_key_not_found\":{\"message\":\"Document not found for class %{klass} with id %{missing} and shard key %{shard_key}.\",\"resolution\":\"Search for an id/shard key that is in the database or set the Mongoid.raise_not_found_error configuration option to false, which will cause nil to be returned instead of raising this error.\",\"summary\":\"When calling %{klass}.find with an id and a shard key, each parameter must match a document in the database or this error will be raised. The search was for the id: %{missing} with shard_key: %{shard_key} and it was not found.\"},\"drop_collection_failure\":{\"message\":\"Cannot drop collection %{collection_name}.\",\"resolution\":\"Try to drop the collection manually using Ruby driver or mongo shell.\",\"summary\":\"Mongoid tried to drop collection %{collection_name}, but the collection still exists in the database.\"},\"empty_config_file\":{\"message\":\"Empty configuration file: %{path}.\",\"resolution\":\"Ensure your configuration file contains the correct contents. Refer to: https://www.mongodb.com/docs/mongoid/current/reference/configuration/\",\"summary\":\"Your mongoid.yml configuration file appears to be empty.\"},\"immutable_attribute\":{\"message\":\"Attempted to change the immutable attribute \\'%{name}\\' with the value: %{value}.\",\"resolution\":\"Do not attempt to update the value of \\'%{name}\\' after the document is persisted.\",\"summary\":\"Immutable attributes can only have values set when the document is a new record.\"},\"in_memory_collation_not_supported\":{\"message\":\"A collation option cannot be applied when querying documents in-memory.\",\"resolution\":\"Remove the collation option from the query.\",\"summary\":\"The query being run against documents in memory has a collation option set. A collation option is only supported if the query is executed on a MongoDB server with version \\\\u003e= 3.4.\"},\"invalid_async_query_executor\":{\"message\":\"Invalid async_query_executor option: %{executor}.\",\"resolution\":\"Pick an allowed option or fix the typo. If you were expecting the option to be there, please consult the following page with respect to Mongoid\\'s configuration:\\\\n\\\\n   https://www.mongodb.com/docs/mongoid/current/reference/configuration/#mongoid-configuration-options\",\"summary\":\"A invalid async query executor was specified. The valid options are: %{options}.\"},\"invalid_collection\":{\"message\":\"Access to the collection for %{klass} is not allowed.\",\"resolution\":\"For access to the collection that the embedded document is in, use %{klass}#_root.collection, or do not attempt to persist an embedded document without a parent set.\",\"summary\":\"%{klass}.collection was called, and %{klass} is an embedded document - it resides within the collection of the root document of the hierarchy.\"},\"invalid_config_file\":{\"message\":\"Invalid configuration file: %{path}.\",\"resolution\":\"Ensure your configuration file contains the correct contents. Refer to: https://www.mongodb.com/docs/mongoid/current/reference/configuration/\",\"summary\":\"Your mongoid.yml configuration file does not contain the correct file structure.\"},\"invalid_config_option\":{\"message\":\"Invalid configuration option: %{name}.\",\"resolution\":\"Remove the invalid option or fix the typo. If you were expecting the option to be there, please consult the following page with respect to Mongoid\\'s configuration:\\\\n\\\\n   http://mongoid.org/en/mongoid/docs/installation.html\",\"summary\":\"A invalid configuration option was provided in your mongoid.yml, or a typo is potentially present. The valid configuration options are: %{options}.\"},\"invalid_dependent_strategy\":{\"message\":\"Invalid dependent strategy: %{invalid_strategy}.\",\"resolution\":\"Change the dependent strategy to one of the valid types.\",\"summary\":\"An invalid dependent strategy was defined for the association: %{association}. The valid strategies are: %{valid_strategies}.\"},\"invalid_discriminator_key_target\":{\"message\":\"Setting the discriminator key on a child class is not allowed.\",\"resolution\":\"Try setting the discriminator key on %{superclass} or one of %{class_name}\\'s ancestors.\",\"summary\":\"The discriminator key on the class %{class_name} was attempted to be changed. Changing the discriminator key on a child class is not allowed.\"},\"invalid_dot_dollar_assignment\":{\"message\":\"Cannot set the %{attr} attribute on the %{klass} class.\",\"resolution\":\"In order to set fields that start with a dollar sign ($) or contain a dot/period (.), the aggregation pipeline can be used. MongoDB provides specific operators for working with these fields. Refer to the MongoDB documentation here: https://www.mongodb.com/docs/manual/core/dot-dollar-considerations/\",\"summary\":\"Calling the setters for fields that start with a dollar sign ($) or contain a dot/period (.) is prohibited. See the Mongoid documentation on Field Names with Dots/Periods (.) and Dollar Signs ($) for more information.\"},\"invalid_elem_match_operator\":{\"message\":\"Invalid $elemMatch operator \\'%{operator}\\'.\",\"resolution\":\"Valid field operators are: %{valid_operators}. Ensure you are using one of these operators.\",\"summary\":\"You misspelled an operator or are using an operator that Mongoid does not support.\"},\"invalid_estimated_count_criteria\":{\"message\":\"Invalid criteria for estimated_count.\",\"resolution\":\"Try calling estimated_count directly on the class: %{class_name}.estimated_count.\\\\n\\\\n  If the class defines a default scope, use unscoped: %{class_name}.unscoped.estimated_count.\",\"summary\":\"Estimated count is strictly a collection-level operation and cannot be called on a filtered criteria.\"},\"invalid_expression_operator\":{\"message\":\"Invalid expression operator \\'%{operator}\\'.\",\"resolution\":\"Valid expression operators are: %{valid_operators}. Ensure you are using one of these operators.\",\"summary\":\"You misspelled an operator, are using an operator that Mongoid does not support, or are trying to use a field-level operator on expression level.\"},\"invalid_field\":{\"message\":\"Defining a field named \\'%{field}\\' is not allowed.\",\"resolution\":\"Use Mongoid.destructive_fields to see what names are not allowed, and don\\'t use these names. These include names that also conflict with core Ruby methods on Object, Module, Enumerable, or included gems that inject methods into these or Mongoid internals.\",\"summary\":\"Defining this field would override the method \\'%{name}\\', which would cause issues with expectations around the original method and cause extremely hard to debug issues. The original method was defined in:\\\\n   Object: %{origin}\\\\n   File: %{file}\\\\n   Line: %{line}\"},\"invalid_field_operator\":{\"message\":\"Invalid field operator \\'%{operator}\\'.\",\"resolution\":\"Valid field operators are: %{valid_operators}. Ensure you are using one of these operators.\",\"summary\":\"You misspelled an operator, are using an operator that Mongoid does not support, or are trying to use an expression-level operator on field level.\"},\"invalid_field_option\":{\"message\":\"Invalid option :%{option} provided for field :%{name}.\",\"resolution\":\"When defining the field :%{name} on \\'%{klass}\\', please provide valid options for the field. These are currently: %{valid}. If you meant to define a custom field option, please do so first as follows:\\\\n\\\\n   Mongoid::Fields.option :%{option} do |model, field, value|\\\\n     # Your logic here...\\\\n   end\\\\n   class %{klass}\\\\n     include Mongoid::Document\\\\n     field :%{name}, %{option}: true\\\\n   end\\\\n\\\\n Refer to: https://www.mongodb.com/docs/mongoid/current/reference/fields/#custom-field-options\",\"summary\":\"Mongoid requires that you only provide valid options on each field definition in order to prevent unexpected behavior later on.\"},\"invalid_field_type\":{\"message\":\"Invalid field type %{type_inspection} for field \\'%{field}\\' on model \\'%{klass}\\'.\",\"resolution\":\"Please provide a valid type value for the field. Refer to: https://www.mongodb.com/docs/mongoid/current/reference/fields/#using-symbols-or-strings-instead-of-classes\",\"summary\":\"Model \\'%{klass}\\' defines a field \\'%{field}\\' with an unknown type value %{type_inspection}.\"},\"invalid_global_executor_concurrency\":{\"message\":\"Invalid global_executor_concurrency option.\",\"resolution\":\"Set global_executor_concurrency option to :global_thread_pool or remove global_executor_concurrency option.\",\"summary\":\"You set global_executor_concurrency while async_query_executor option is not set to :global_thread_pool. The global_executor_concurrency is allowed only for the global thread pool executor.\"},\"invalid_includes\":{\"message\":\"Invalid includes directive: %{klass}.includes(%{args})\",\"resolution\":\"Ensure that each parameter passed to %{klass}.includes is a valid name of an association on the %{klass} model. These are: %{relations}.\",\"summary\":\"Eager loading in Mongoid only supports providing arguments to %{klass}.includes that are the names of associations on the %{klass}.\"},\"invalid_index\":{\"message\":\"Invalid index specification on %{klass}: %{spec}, %{options}\",\"resolution\":\"Ensure that the index conforms to the correct syntax and has the correct options.\\\\n\\\\n Valid options are:\\\\n   background: true|false\\\\n   database: \\'database_name\\'\\\\n   name: \\'index_name\\'\\\\n   sparse: true|false\\\\n   unique: true|false\\\\n   min: 1\\\\n   max: 1\\\\n   bits: 26\\\\n   key: 26\\\\n   bucket_size : 1\\\\n   sphere_version : 1\\\\n   text_version : 1\\\\n   version : 1\\\\n   weights: { content: 1, title: 2 }\\\\n   expire_after_seconds: number_of_seconds\\\\n   partial_filter_expression\\\\n   storage_engine\\\\n   language_override\\\\n   default_language\\\\n   collation\\\\n   wildcard_projection: { \\'path.to.field.a\\': 1, \\'path.to.field.b\\': 0 }\\\\n Valid types are: 1, -1, \\'2d\\', \\'2dsphere\\', \\'geoHaystack (deprecated)\\', \\'text\\', \\'hashed\\'\\\\n\\\\n Example:\\\\n   class Band\\\\n     include Mongoid::Document\\\\n     index({ name: 1, label: -1 }, { sparse: true })\\\\n     index({ location: \\'2d\\' }, { background: true })\\\\n   end\\\\n\\\\n\",\"summary\":\"Indexes in Mongoid are defined as a hash of field name and direction/2d pairs, with a hash for any additional options.\"},\"invalid_options\":{\"message\":\"Invalid option :%{invalid} provided to association :%{name}.\",\"resolution\":\"Valid options are: %{valid}, make sure these are the ones you are using.\",\"summary\":\"Mongoid checks the options that are passed to the association macros to ensure that no ill side effects occur by letting something slip by.\"},\"invalid_path\":{\"message\":\"Having a root path assigned for %{klass} is invalid.\",\"resolution\":\"Most likely your embedded model, %{klass} is also referenced via a has_many from a root document in another collection. Double check the association definitions and fix any instances where embedded documents are improperly referenced from other collections.\",\"summary\":\"Mongoid has two different path objects for determining the location of a document in the database, Root and Embedded. This error is raised when an embedded document somehow gets a root path assigned.\"},\"invalid_persistence_option\":{\"message\":\"Invalid persistence option :%{invalid}.\",\"resolution\":\"Valid options are: %{valid}, make sure these are the ones you are using.\",\"summary\":\"The options used to change the persistence context must be one of the valid options for a mongo client, or a collection name.\"},\"invalid_relation\":{\"message\":\"Defining an association named \\'%{name}\\' is not allowed.\",\"resolution\":\"Use Mongoid.destructive_fields to see what names are not allowed, and don\\'t use these names. These include names that also conflict with core Ruby methods on Object, Module, Enumerable, or included gems that inject methods into these or Mongoid internals.\",\"summary\":\"Defining this association would override the method \\'%{name}\\', which would cause issues with expectations around the original method and cause extremely hard to debug issues. The original method was defined in:\\\\n   Object: %{origin}\\\\n   File: %{file}\\\\n   Line: %{line}\"},\"invalid_relation_option\":{\"message\":\"Invalid association option :%{option} for association \\'%{name}\\' on class %{klass}.\",\"resolution\":\"Valid options are: %{valid_options}, make sure you use only those.\",\"summary\":\"An invalid option was provided for an association.\"},\"invalid_scope\":{\"message\":\"Defining a scope of value %{value} on %{klass} is not allowed.\",\"resolution\":\"Change the scope to be a proc wrapped criteria.\\\\n\\\\n Example:\\\\n   class Band\\\\n     include Mongoid::Document\\\\n     scope :inactive, -\\\\u003e{ where(active: false) }\\\\n   end\\\\n\\\\n\",\"summary\":\"Scopes in Mongoid must be procs that wrap criteria objects.\"},\"invalid_session_nesting\":{\"message\":\"A session was started while another session was being used.\",\"resolution\":\"Only use one session at a time; sessions cannot be nested.\",\"summary\":\"Sessions cannot be nested. Only one session can be used in a thread at once.\"},\"invalid_session_use\":{\"message\":\"A session was attempted to be used with a model whose client cannot use that session.\",\"resolution\":\"Only execute operations on the model class or instances of the model through which the session was created. Otherwise, ensure that all models on which operations are executed in the session block share the same driver client. For example, a model may have a different client specified in its \\'store_in\\' options.\\\\n\\\\n\",\"summary\":\"Sessions are started via driver clients (Model#mongo_client) and, in most cases, driver clients are shared across models. When different models have their own clients, a session cannot be obtained via one model and used for operations on another model.\"},\"invalid_set_polymorphic_relation\":{\"message\":\"The %{name} attribute can\\'t be set to an instance of %{other_klass} as %{other_klass} has multiple associations referencing %{klass} as %{name}.\",\"resolution\":\"Set the values from the parent, or redefine the association with only a single definition in the parent.\",\"summary\":\"If the parent class of a polymorphic association has multiple definitions for the same association, the values must be set from the parent side and not the child side since Mongoid cannot determine from the child side which association to go in.\"},\"invalid_storage_options\":{\"message\":\"Invalid options passed to %{klass}.store_in: %{options}.\",\"resolution\":\"Change the options passed to store_in to match the documented API, and ensure all keys in the options hash are symbols.\\\\n\\\\n Example:\\\\n   class Band\\\\n     include Mongoid::Document\\\\n     store_in collection: \\'artists\\', database: \\'music\\'\\\\n   end\\\\n\\\\n\",\"summary\":\"The :store_in macro takes only a hash of parameters with the keys :database, :collection, :collection_options, or :client.\"},\"invalid_time\":{\"message\":\"\\'%{value}\\' is not a valid Time.\",\"resolution\":\"Make sure to pass parsable values to the field setter for Date, DateTime, and Time objects. When this is a String it needs to be valid for Time.parse. Other objects must be valid to pass to Time.local.\",\"summary\":\"Mongoid tries to serialize the values for Date, DateTime, and Time into proper UTC times to store in the database. The provided value could not be parsed.\"},\"inverse_not_found\":{\"message\":\"When adding a(n) %{klass} to %{base}#%{name}, Mongoid could not determine the inverse foreign key to set. The attempted key was \\'%{inverse}\\'.\",\"resolution\":\"If an inverse is not required, like a belongs_to or has_and_belongs_to_many, ensure that :inverse_of =\\\\u003e nil is set on the association. If the inverse is needed, most likely the inverse cannot be figured out from the names of the associations and you will need to explicitly tell Mongoid on the association what the inverse is.\\\\n\\\\n Example:\\\\n   class Car\\\\n     include Mongoid::Document\\\\n     has_one :engine, class_name: \\\\\"Motor\\\\\", inverse_of: :machine\\\\n   end\\\\n\\\\n   class Motor\\\\n     include Mongoid::Document\\\\n     belongs_to :machine, class_name: \\\\\"Car\\\\\", inverse_of: :engine\\\\n   end\",\"summary\":\"When adding a document to an association, Mongoid attempts to link the newly added document to the base of the association in memory, as well as set the foreign key to link them on the database side. In this case Mongoid could not determine what the inverse foreign key was.\"},\"message_title\":\"message\",\"mixed_client_configuration\":{\"message\":\"Both uri and standard configuration options defined for client: \\'%{name}\\'.\",\"resolution\":\"Provide either only a uri as configuration or only standard options.\",\"summary\":\"Instead of simply giving uri or standard options a preference order, Mongoid assumes that you have made a mistake in your configuration and requires that you provide one or the other, but not both. The options that were provided were: %{config}.\"},\"mixed_relations\":{\"message\":\"Referencing a(n) %{embedded} document from the %{root} document via a non-embedded association is not allowed since the %{embedded} is embedded.\",\"resolution\":\"Consider not embedding %{embedded}, or do the key storage and access in a custom manner in the application code.\",\"summary\":\"In order to properly access a(n) %{embedded} from %{root} the reference would need to go through the root document of %{embedded}. In a simple case this would require Mongoid to store an extra foreign key for the root, in more complex cases where %{embedded} is multiple levels deep a key would need to be stored for each parent up the hierarchy.\"},\"nested_attributes_metadata_not_found\":{\"message\":\"Could not find metadata for association \\'%{name}\\' on model: %{klass}.\",\"resolution\":\"Make sure that there is an association defined named \\'%{name}\\' on %{klass} or that the association definition comes before the accepts_nested_attributes_for macro in the model - order matters so that Mongoid has access to the metadata.\\\\n\\\\n Example:\\\\n   class Band\\\\n     include Mongoid::Document\\\\n     has_many :albums\\\\n     accepts_nested_attributes_for :albums\\\\n   end\\\\n\\\\n\",\"summary\":\"When defining nested attributes for an association, Mongoid needs to access the metadata for the association \\'%{name}\\' in order if add autosave functionality to it, if applicable. Either no association named \\'%{name}\\' could be found, or the association had not been defined yet.\"},\"no_client_config\":{\"message\":\"No configuration could be found for a client named \\'%{name}\\'.\",\"resolution\":\"Double check your mongoid.yml to make sure under the clients key that a configuration exists for \\'%{name}\\'. If you have set the configuration programmatically, ensure that \\'%{name}\\' exists in the configuration hash.\",\"summary\":\"When attempting to create the new client, Mongoid could not find a client configuration for the name: \\'%{name}\\'. This is necessary in order to know the host, port, and options needed to connect.\"},\"no_client_database\":{\"message\":\"No database provided for client configuration: :%{name}.\",\"resolution\":\"If configuring via a mongoid.yml, ensure that within your :%{name} section a :database value for the client\\'s default database is defined.\\\\n\\\\n Example:\\\\n   development:\\\\n     clients:\\\\n       %{name}:\\\\n         database: my_app_db\\\\n         hosts:\\\\n           - localhost:27017\\\\n\\\\n\",\"summary\":\"Each client configuration must provide a database so Mongoid knows where the default database to persist to. What was provided was: %{config}.\"},\"no_client_hosts\":{\"message\":\"No hosts provided for client configuration: :%{name}.\",\"resolution\":\"If configuring via a mongoid.yml, ensure that within your :%{name} section a :hosts value for the client hosts is defined.\\\\n\\\\n Example:\\\\n   development:\\\\n     clients:\\\\n       %{name}:\\\\n         database: my_app_db\\\\n         hosts:\\\\n           - localhost:27017\\\\n\\\\n\",\"summary\":\"Each client configuration must provide hosts so Mongoid knows where the database server is located. What was provided was: %{config}.\"},\"no_clients_config\":{\"message\":\"No clients configuration provided.\",\"resolution\":\"Double check your mongoid.yml to make sure that you have a top-level clients key with at least 1 default client configuration for it. You can regenerate a new mongoid.yml for assistance via `rails g mongoid:config`.\\\\n\\\\n Example:\\\\n   development:\\\\n     clients:\\\\n       default:\\\\n         database: mongoid_dev\\\\n         hosts:\\\\n           - localhost:27017\\\\n\\\\n\",\"summary\":\"Mongoid\\'s configuration requires that you provide details about each client that can be connected to, and requires in the clients config at least 1 default client to exist.\"},\"no_default_client\":{\"message\":\"No default client configuration is defined.\",\"resolution\":\"If configuring via a mongoid.yml, ensure that within your :clients section a :default client is defined.\\\\n\\\\n Example:\\\\n   development:\\\\n     clients:\\\\n       default:\\\\n         hosts:\\\\n           - localhost:27017\\\\n\\\\n\",\"summary\":\"The configuration provided settings for: %{keys}, but Mongoid requires a :default to be defined at minimum.\"},\"no_documents_found\":{\"message\":\"Could not find a document of class %{klass}.\",\"resolution\":\"Create a document of class %{klass} or use a finder method that does not raise an exception when no documents are found.\",\"summary\":\"Mongoid attempted to find a document of the class %{klass} but none exist.\"},\"no_environment\":{\"message\":\"Could not load the configuration since no environment was defined.\",\"resolution\":\"Please ensure an environment is set in one of the listed locations. The environment must be explicitly set.\",\"summary\":\"Mongoid could not determine the environment to use because it was not specified in any of the following locations: Rails.env, Sinatra::Base.environment, ENV[\\\\\"RACK_ENV\\\\\"], ENV[\\\\\"MONGOID_ENV\\\\\"]. Without knowing the environment, Mongoid cannot load its configuration.\"},\"no_map_reduce_output\":{\"message\":\"No output location was specified for the map/reduce operation.\",\"resolution\":\"Provide the location that the output of the operation is to go by chaining an #out call to the map/reduce.\\\\n\\\\n Example:\\\\n   Band.map_reduce(map, reduce).out(inline: 1)\\\\n\\\\n Valid options for the out function are:\\\\n   inline: 1\\\\n   merge: \\'collection-name\\'\\\\n   replace: \\'collection-name\\'\\\\n   reduce: \\'collection-name\\'\\\\n\\\\n\",\"summary\":\"When executing a map/reduce, you must provide the output location of the results. The attempted command was: %{command}.\"},\"no_metadata\":{\"message\":\"Metadata not found for document of type %{klass}.\",\"resolution\":\"Ensure that your associations on the %{klass} model are all properly defined, and that the inverse associations are also properly defined. Embedded associations must have both the parent (embeds_one/embeds_many) and the inverse (embedded_in) present in order to work properly.\",\"summary\":\"Mongoid sets the metadata of an association on the document when it is either loaded from within the association, or added to one. The presence of the metadata is required in order to provide various functionality around associations. Most likely you are getting this error because the document is embedded and was attempted to be persisted without being associated with a parent, or the association was not properly defined.\"},\"no_parent\":{\"message\":\"Cannot persist embedded document %{klass} without a parent document.\",\"resolution\":\"Ensure that you\\'ve set the parent association if instantiating the embedded document directly, or always create new embedded documents via the parent association.\",\"summary\":\"If the document is embedded, in order to be persisted it must always have a reference to its parent document. This is most likely caused by either calling %{klass}.create or %{klass}.create! without setting the parent document as an attribute.\"},\"readonly_attribute\":{\"message\":\"Attempted to set the readonly attribute \\'%{name}\\' with the value: %{value}.\",\"resolution\":\"Don\\'t define \\'%{name}\\' as readonly, or do not attempt to update its value after the document is persisted.\",\"summary\":\"Attributes flagged as readonly via Model.attr_readonly can only have values set when the document is a new record.\"},\"readonly_document\":{\"message\":\"Attempted to persist a readonly document of class \\'%{klass}\\'.\",\"resolution\":\"Don\\'t attempt to persist documents that are flagged as readonly.\",\"summary\":\"Documents that are marked readonly cannot be persisted.\"},\"resolution_title\":\"resolution\",\"scope_overwrite\":{\"message\":\"Cannot create scope :%{scope_name}, because of existing method %{model_name}.%{scope_name}.\",\"resolution\":\"Change the name of the scope so it does not conflict with the already defined method %{model_name}, or set the configuration option Mongoid.scope_overwrite_exception to false, which is its default. In this case a warning will be logged.\",\"summary\":\"When defining a scope that conflicts with a method that already exists on the model, this error will get raised if Mongoid.scope_overwrite_exception is set to true.\"},\"sessions_not_supported\":{\"message\":\"Sessions are not supported by the connected server(s).\",\"resolution\":\"Verify that all servers in your deployment are at least version 3.6 or don\\'t attempt to use sessions with older server versions.\",\"summary\":\"A session was attempted to be used with a MongoDB server version that doesn\\'t support sessions. Sessions are supported in MongoDB server versions 3.6 and higher.\"},\"summary_title\":\"summary\",\"too_many_nested_attribute_records\":{\"message\":\"Accepting nested attributes for %{association} is limited to %{limit} documents.\",\"resolution\":\"The limit is set as an option to the macro, for example: accepts_nested_attributes_for :%{association}, limit: %{limit}. Consider raising this limit or making sure no more are sent than the set value.\",\"summary\":\"More documents were sent to be processed than the allowed limit.\"},\"unknown_attribute\":{\"message\":\"Attempted to set a value for \\'%{name}\\' which is not allowed on the model %{klass}.\",\"resolution\":\"Define the field \\'%{name}\\' in %{klass}, or include Mongoid::Attributes::Dynamic in %{klass} if you intend to store values in fields that are not explicitly defined.\",\"summary\":\"%{klass}#%{name}= was called but there is no \\'%{name}\\' field defined in the model, and Mongoid::Attributes::Dynamic is not included. This error is also raised instead of NoMethodError if the unknown attribute is passed to any method that accepts an attributes hash, such as #attributes=.\"},\"unknown_model\":{\"message\":\"Attempted to instantiate an object of the unknown model \\'%{klass}\\'.\",\"resolution\":\"The _type field is a reserved one used by Mongoid to determine the class for instantiating an object. Please don\\'t save data in this field or ensure that any values in this field correspond to valid models.\",\"summary\":\"A document with the value \\'%{value}\\' at the key \\'_type\\' was used to instantiate a model object but Mongoid cannot find this Class.\"},\"unsaved_document\":{\"message\":\"Attempted to save %{document} before the parent %{base}.\",\"resolution\":\"Make sure to only use create or create! when the parent document %{base} is persisted.\",\"summary\":\"You cannot call create or create! through the association (%{document}) whose parent (%{base}) is not already saved. This would cause the database to be out of sync since the child could potentially reference a nonexistent parent.\"},\"unsupported_javascript\":{\"message\":\"Executing Javascript $where selector on an embedded criteria is not supported.\",\"resolution\":\"Please provide a standard hash to #where when the criteria is for an embedded association.\",\"summary\":\"Mongoid only supports providing a hash of arguments to #where criterion on embedded documents. Since %{klass} is embedded, the expression %{javascript} is not allowed.\"},\"validations\":{\"message\":\"Validation of %{document} failed.\",\"resolution\":\"Try persisting the document with valid data or remove the validations.\",\"summary\":\"The following errors were found: %{errors}\"}}}},\"number\":{\"currency\":{\"format\":{\"delimiter\":\",\",\"format\":\"%u%n\",\"negative_format\":\"-%u%n\",\"precision\":2,\"separator\":\".\",\"significant\":false,\"strip_insignificant_zeros\":false,\"unit\":\"$\"}},\"format\":{\"delimiter\":\",\",\"precision\":3,\"round_mode\":\"default\",\"separator\":\".\",\"significant\":false,\"strip_insignificant_zeros\":false},\"human\":{\"decimal_units\":{\"format\":\"%n %u\",\"units\":{\"billion\":\"Billion\",\"million\":\"Million\",\"quadrillion\":\"Quadrillion\",\"thousand\":\"Thousand\",\"trillion\":\"Trillion\",\"unit\":\"\"}},\"format\":{\"delimiter\":\"\",\"precision\":3,\"significant\":true,\"strip_insignificant_zeros\":true},\"storage_units\":{\"format\":\"%n %u\",\"units\":{\"byte\":{\"one\":\"Byte\",\"other\":\"Bytes\"},\"eb\":\"EB\",\"gb\":\"GB\",\"kb\":\"KB\",\"mb\":\"MB\",\"pb\":\"PB\",\"tb\":\"TB\",\"zb\":\"ZB\"}}},\"nth\":{},\"percentage\":{\"format\":{\"delimiter\":\"\",\"format\":\"%n%\"}},\"precision\":{\"format\":{\"delimiter\":\"\"}}},\"pivot_list_column_value\":{\"non_sponsor_org\":\"non-CRO\"},\"pivot_list_download\":{\"id\":\"ZW_ID\"},\"simple_form\":{\"error_notification\":{\"default_message\":\"Please review the problems below:\"},\"no\":\"No\",\"required\":{\"mark\":\"*\",\"text\":\"required\"},\"yes\":\"Yes\"},\"support\":{\"array\":{\"last_word_connector\":\", and \",\"two_words_connector\":\" and \",\"words_connector\":\", \"}},\"terminology\":{\"all_orgs_list_category\":\"Organizations\",\"companies_in_your_sf_label\":\"Companies in your Salesforce\",\"company_based_in\":\"Contract Research company based in\",\"company_location\":\"Contract Research Company Location\",\"neglected_target_label\":\"Neglected CRO\\'s\",\"sponsor\":\"Contract Research Organization\",\"sponsor_orgs_list_category\":\"CROs\",\"target_organization_title\":\"CRO\"},\"time\":{\"am\":\"am\",\"formats\":{\"default\":\"%a, %d %b %Y %H:%M:%S %z\",\"long\":\"%B %d, %Y %H:%M\",\"short\":\"%d %b %H:%M\"},\"pm\":\"pm\"},\"users\":{\"confirmations\":{\"new\":{\"legend\":\"Resend your %{brand_name} confirmation instructions\",\"message\":\"We need to confirm your email address to complete the sign up process. Supply your email address, below, and we will send you instructions on how to confirm your address.\",\"submit_button\":\"Send Confirmation Instructions\",\"title\":\"Resend confirmation instructions | %{brand_name}\"},\"show\":{\"legend\":\"Check your inbox for a confirmation email\",\"message\":\"If your e-mail exists in our database we have sent you a message with instructions. Check your inbox (or spam folder) for a message from \\'%{default_from_email}\\' containing the confirmation link.\",\"title\":\"Awaiting confirmation | %{brand_name}\"}},\"passwords\":{\"new\":{\"failures\":\"Note: If you make more than 5 sequential failed attempts to sign in with your %{brand_name} password, your account will be (temporarily) locked. Check your inbox for instruction on how to unlock your account, or we can\",\"legend\":\"Reset your %{brand_name} password\",\"message\":\"Supply your email address, below, and we will send you instructions on how to reset your password.\",\"resend_link\":\"resend a new set of unlock instructions\",\"submit_button\":\"Send Reset Instructions\",\"title\":\"Reset password | %{brand_name}\"},\"show\":{\"didnt_receive_email\":\"Didn\\'t receive the email?\",\"legend\":\"Password reset instructions sent\",\"message\":\"If your e-mail exists in our database we have sent you a message with password reset instructions. Check your inbox (or spam folder) for a message from \\'%{default_from_email}\\'.\",\"resend_link\":\"you can request another one here\",\"title\":\"Awaiting reset | %{brand_name}\"}}},\"will_paginate\":{\"container_aria_label\":\"Pagination\",\"next_label\":\"Next \\\\u0026#8594;\",\"page_aria_label\":\"Page %{page}\",\"page_entries_info\":{\"multi_page\":\"Displaying %{model} %{from} - %{to} of %{count} in total\",\"multi_page_html\":\"Displaying %{model} \\\\u003cb\\\\u003e%{from}\\\\u0026nbsp;-\\\\u0026nbsp;%{to}\\\\u003c/b\\\\u003e of \\\\u003cb\\\\u003e%{count}\\\\u003c/b\\\\u003e in total\",\"single_page\":{\"one\":\"Displaying 1 %{model}\",\"other\":\"Displaying all %{count} %{model}\",\"zero\":\"No %{model} found\"},\"single_page_html\":{\"one\":\"Displaying \\\\u003cb\\\\u003e1\\\\u003c/b\\\\u003e %{model}\",\"other\":\"Displaying \\\\u003cb\\\\u003eall\\\\u0026nbsp;%{count}\\\\u003c/b\\\\u003e %{model}\",\"zero\":\"No %{model} found\"}},\"page_gap\":\"\\\\u0026hellip;\",\"previous_label\":\"\\\\u0026#8592; Previous\"},\"x_mailer_header\":\"clicks.crofterapp.com\"}'));\nI18n.translations[\"cs\"] = I18n.extend((I18n.translations[\"cs\"] || {}), JSON.parse('{\"activerecord\":{\"errors\":{\"messages\":{\"record_invalid\":\"Validation failed: %{errors}\",\"restrict_dependent_destroy\":{\"has_many\":\"Cannot delete record because dependent %{record} exist\",\"has_one\":\"Cannot delete record because a dependent %{record} exists\"}}}},\"bulk_uploads\":{\"email_local_part\":{\"empty_parameter\":\"No file uploaded\",\"error\":\"File Upload failed: %{error_message}\",\"success\":\"File was successfully uploaded\"}},\"common\":{\"crm\":{\"salesforce\":{\"forgot_password\":\"If you have forgotten your Salesforce password, please follow the instructions provided on the Salesforce sign in page.\",\"sign_in_button\":\"Sign In with Salesforce\"}}},\"contact\":{\"default_from_email\":\"info@zymewire.com\",\"phone_numbers\":[{\"label\":\"US\",\"phone\":\"1-844-996-3321\"},{\"label\":\"UK\",\"phone\":\"+44-208-133-9963\"}],\"support_email\":\"support@zymewire.com\"},\"date\":{\"abbr_day_names\":[\"Sun\",\"Mon\",\"Tue\",\"Wed\",\"Thu\",\"Fri\",\"Sat\"],\"abbr_month_names\":[null,\"Jan\",\"Feb\",\"Mar\",\"Apr\",\"May\",\"Jun\",\"Jul\",\"Aug\",\"Sep\",\"Oct\",\"Nov\",\"Dec\"],\"day_names\":[\"Sunday\",\"Monday\",\"Tuesday\",\"Wednesday\",\"Thursday\",\"Friday\",\"Saturday\"],\"formats\":{\"default\":\"%Y-%m-%d\",\"long\":\"%B %d, %Y\",\"short\":\"%b %d\"},\"month_names\":[null,\"January\",\"February\",\"March\",\"April\",\"May\",\"June\",\"July\",\"August\",\"September\",\"October\",\"November\",\"December\"],\"order\":[\"year\",\"month\",\"day\"]},\"datetime\":{\"distance_in_words\":{\"about_x_hours\":{\"one\":\"about 1 hour\",\"other\":\"about %{count} hours\"},\"about_x_months\":{\"one\":\"about 1 month\",\"other\":\"about %{count} months\"},\"about_x_years\":{\"one\":\"about 1 year\",\"other\":\"about %{count} years\"},\"almost_x_years\":{\"one\":\"almost 1 year\",\"other\":\"almost %{count} years\"},\"half_a_minute\":\"half a minute\",\"less_than_x_minutes\":{\"one\":\"less than a minute\",\"other\":\"less than %{count} minutes\"},\"less_than_x_seconds\":{\"one\":\"less than 1 second\",\"other\":\"less than %{count} seconds\"},\"over_x_years\":{\"one\":\"over 1 year\",\"other\":\"over %{count} years\"},\"x_days\":{\"one\":\"1 day\",\"other\":\"%{count} days\"},\"x_minutes\":{\"one\":\"1 minute\",\"other\":\"%{count} minutes\"},\"x_months\":{\"one\":\"1 month\",\"other\":\"%{count} months\"},\"x_seconds\":{\"one\":\"1 second\",\"other\":\"%{count} seconds\"}},\"prompts\":{\"day\":\"Day\",\"hour\":\"Hour\",\"minute\":\"Minute\",\"month\":\"Month\",\"second\":\"Seconds\",\"year\":\"Year\"}},\"default_host\":\"https://www.zymewire.com\",\"devise\":{\"confirmations\":{\"confirmed\":\"Your account was successfully confirmed. Please sign in.\",\"send_instructions\":\"Your email has not been confirmed. We need to confirm your email account before you can sign in. Please check your inbox or spam folder for an email from \\'info@zymewire.com\\' or request a new one.\",\"send_paranoid_instructions\":\"If your e-mail exists on our database, you will receive an email with instructions about how to confirm your account in a few minutes.\"},\"failure\":{\"already_authenticated\":\"You are already signed in.\",\"expired\":\"Platnost Vašeho účtu vypršela z důvodu nečinnosti. Obraťte se na správce webu.\",\"inactive\":\"Your account was not activated yet.\",\"invalid\":\"Invalid email or password. If you use Salesforce, use the \\'Have Salesforce?\\' panel.\",\"invalid_token\":\"Invalid authentication token.\",\"last_attempt\":\"You have one more attempt before your account is locked.\",\"locked\":\"Your account is locked.\",\"not_active\":\"Your account has been de-activated, if you think this is a mistake please contact us\",\"not_found_in_database\":\"Invalid %{authentication_keys} or password.\",\"session_limited\":\"Vaše přihlašovací údaje byly použity v jiném prohlížeči. Chcete-li pokračovat v tomto prohlížeči, znovu se přihlaste.\",\"timeout\":\"Your session expired, please sign in again to continue.\",\"unauthenticated\":\"You need to sign in or sign up before continuing.\",\"unconfirmed\":\"We must confirm your email before you can continue. Please check your inbox or spam folder for a confirmation email from \\'info@zymewire.com\\' or request a new one.\"},\"invalid_captcha\":\"Chybná captcha.\",\"invalid_security_question\":\"Chybná odpověď na bezpečnostní otázku.\",\"mailer\":{\"confirmation_instructions\":{\"subject\":\"Confirmation instructions for Zymewire.com\"},\"email_changed\":{\"subject\":\"Email Changed\"},\"password_change\":{\"subject\":\"Password Changed\"},\"reset_password_instructions\":{\"subject\":\"Reset password instructions for Zymewire.com\"},\"unlock_instructions\":{\"subject\":\"Unlock Instructions for Zymewire.com\"}},\"omniauth_callbacks\":{\"failure\":\"Could not authorize you from %{kind} because \\\\\"%{reason}\\\\\".\",\"success\":\"Successfully authorized from %{kind} account.\"},\"paranoid_verification_code\":{\"show\":{\"submit\":\"Odeslat\",\"submit_verification_code\":\"Odeslat ověřovací kód\",\"verification_code\":\"Ověřovací kód\"},\"updated\":\"Ověřovací kód přijat\"},\"paranoid_verify\":{\"code_required\":\"Zadejte kód, který poskytla naše podpora\"},\"password_expired\":{\"change_required\":\"Platnost Vašeho hesla vypršela. Prosím, obnovte si jej.\",\"show\":{\"change_my_password\":\"Změnit moje heslo\",\"current_password\":\"Současné heslo\",\"new_password\":\"Nové heslo\",\"new_password_confirmation\":\"Potvrďte nové heslo\",\"renew_your_password\":\"Obnovit heslo\"},\"updated\":\"Vaše nové heslo bylo uloženo.\"},\"passwords\":{\"no_token\":\"You can\\'t access this page without coming from a password reset email. If you do come from a password reset email, please make sure you used the full URL provided.\",\"send_instructions\":\"You will receive an email with instructions about how to reset your password in a few minutes.\",\"send_paranoid_instructions\":\"If your e-mail exists on our database, you will receive a password recovery link on your e-mail\",\"updated\":\"Your password was changed successfully. You are now signed in.\",\"updated_not_active\":\"Your password was changed successfully.\"},\"registrations\":{\"destroyed\":\"Bye! Your account was successfully cancelled. We hope to see you again soon.\",\"signed_up\":\"Welcome! You have signed up successfully.\",\"signed_up_but_inactive\":\"You have signed up successfully. However, we could not sign you in because your account is not yet activated.\",\"signed_up_but_locked\":\"You have signed up successfully. However, we could not sign you in because your account is locked.\",\"signed_up_but_unconfirmed\":\"A message with a confirmation link has been sent to your email address. Please open the link to activate your account.\",\"update_needs_confirmation\":\"You updated your account successfully, but we need to verify your new email address. Please check your email and click on the confirm link to finalize confirming your new email address.\",\"updated\":\"You updated your account successfully.\",\"updated_but_not_signed_in\":\"Your account has been updated successfully, but since your password was changed, you need to sign in again.\"},\"sessions\":{\"already_signed_out\":\"Signed out successfully.\",\"signed_in\":\"Signed in successfully.\",\"signed_out\":\"Signed out successfully.\"},\"unlocks\":{\"send_instructions\":\"You will receive an email with instructions about how to unlock your account in a few minutes.\",\"send_paranoid_instructions\":\"If your account exists, you will receive an email with instructions about how to unlock it in a few minutes.\",\"unlocked\":\"Your account has been unlocked successfully. Please sign in to continue.\"}},\"download\":\"Download\",\"download_30_days\":\"This link will be available for 30 days after which the file will be removed from our servers.\",\"enumerize\":{\"blocklisted_contact\":{\"provider\":{\"insideview\":\"InsideView\",\"zephyr\":\"Zephyr\"}}},\"errors\":{\"format\":\"%{attribute} %{message}\",\"messages\":{\"accepted\":\"must be accepted\",\"already_confirmed\":\"was already confirmed, please try signing in\",\"blank\":\"can\\'t be blank\",\"confirmation\":\"doesn\\'t match %{attribute}\",\"confirmation_period_expired\":\"needs to be confirmed within %{period}, please request a new one\",\"empty\":\"can\\'t be empty\",\"equal_to\":\"must be equal to %{count}\",\"equal_to_current_password\":\"se musí lišit od aktuálního hesla.\",\"equal_to_email\":\"musí být jiný než e-mail.\",\"even\":\"must be even\",\"exclusion\":\"is reserved\",\"expired\":\"has expired, please request a new one\",\"greater_than\":\"must be greater than %{count}\",\"greater_than_or_equal_to\":\"must be greater than or equal to %{count}\",\"in\":\"must be in %{count}\",\"inclusion\":\"is not included in the list\",\"invalid\":\"is invalid\",\"less_than\":\"must be less than %{count}\",\"less_than_or_equal_to\":\"must be less than or equal to %{count}\",\"model_invalid\":\"Validation failed: %{errors}\",\"not_a_number\":\"is not a number\",\"not_an_integer\":\"must be an integer\",\"not_found\":\"not found\",\"not_locked\":\"was not locked\",\"not_saved\":{\"one\":\"1 error prohibited this %{resource} from being saved:\",\"other\":\"%{count} errors prohibited this %{resource} from being saved:\"},\"odd\":\"must be odd\",\"other_than\":\"must be other than %{count}\",\"password_complexity\":{\"digit\":{\"few\":\"musí obsahovat alespoň %{count} číslice\",\"one\":\"musí obsahovat alespoň jednu číslici\",\"other\":\"musí obsahovat alespoň %{count} číslice\"},\"lower\":{\"few\":\"musí obsahovat alespoň %{count} malé písmena\",\"one\":\"musí obsahovat alespoň jedno malé písmeno\",\"other\":\"musí obsahovat alespoň %{count} malé písmena\"},\"symbol\":{\"few\":\"musí obsahovat alespoň %{count} interpunkční znaménka nebo symboly\",\"one\":\"musí obsahovat alespoň jedno interpunkční znaménko nebo symbol\",\"other\":\"musí obsahovat alespoň %{count} interpunkční znaménka nebo symboly\"},\"upper\":{\"few\":\"musí obsahovat alespoň %{count} velké písmena\",\"one\":\"musí obsahovat alespoň jedno velké písmeno\",\"other\":\"musí obsahovat alespoň %{count} velké písmena\"}},\"password_format\":\"Must contain uppercase AND lowercase letters and at least one number\",\"password_too_long\":\"is too long\",\"present\":\"must be blank\",\"required\":\"must exist\",\"taken\":\"has already been taken\",\"taken_in_past\":\"bylo již použito v minulosti.\",\"too_long\":{\"one\":\"is too long (maximum is 1 character)\",\"other\":\"is too long (maximum is %{count} characters)\"},\"too_short\":{\"one\":\"is too short (minimum is 1 character)\",\"other\":\"is too short (minimum is %{count} characters)\"},\"wrong_length\":{\"one\":\"is the wrong length (should be 1 character)\",\"other\":\"is the wrong length (should be %{count} characters)\"}}},\"flash\":{\"actions\":{\"create\":{\"notice\":\"%{resource_name} was successfully created.\"},\"destroy\":{\"alert\":\"%{resource_name} could not be destroyed.\",\"notice\":\"%{resource_name} was successfully destroyed.\"},\"update\":{\"notice\":\"%{resource_name} was successfully updated.\"}}},\"hello_world\":\"Hello world\",\"helpers\":{\"select\":{\"prompt\":\"Please select\"},\"submit\":{\"create\":\"Create %{model}\",\"submit\":\"Save %{model}\",\"update\":\"Update %{model}\"}},\"hi\":\"Hi\",\"mailers\":{\"common\":{\"chummy_sign_off\":\"Have a good one.\",\"final_note\":\"P.S.: If you think you received this email accidentally, then something weird could be going on. Hit reply and a member of the %{brand_name} team will investigate.\",\"team_sign_off\":\"- The %{brand_name} Team\"},\"confirmation_instructions_email\":{\"crm\":{\"salesforce\":{\"resource_confirmed\":\"Someone has requested a resend of a confirmation email. You do not need to confirm your email address because your account is configured to use Salesforce to sign in.\",\"resource_unconfirmed\":\"You do not need to confirm your email address because your account is configured to use Salesforce to sign in, please complete the sign up process by clicking the button below to sign in to %{brand_name} via Salesforce.\"}},\"non_crm\":{\"confirm_link\":\"Confirm my account\",\"welcome\":\"Welcome to %{brand_name}. As the final step in the process you\\'ll need to confirm your account by clicking on the link below.\"},\"subject\":\"Confirmation instructions for %{domain}\"},\"flagged_events_mailer\":{\"from\":\"Flagged events - %{brand_name} \\\\u003cflagged_events@mailer.%{domain}\\\\u003e\"},\"mobile_registration_email\":{\"alert_cs_registration_locked\":{\"subject\":\"%{brand_name}: user has had mobile registration locked, too many failed attempts\"},\"dispatch_registration_PIN\":{\"further_instructions\":\"If you are NOT attempting to register for the %{brand_name} Mobile app then please let us know at %{support_email_link} - thank you.\",\"introduction\":\"Here is your mobile app registration PIN:\",\"subject\":\"%{brand_name} Mobile Registration Verification\"},\"too_many_failed_attempts\":{\"introduction\":\"We have received too many failed mobile device registration attempts for your account and we will block any further requests. If you have not attempted to register a mobile device with us in the last hour then please let us know as it is likely someone has tried on your behalf. If you have been trying to register a device please contact %{support_email_link} and we can help unlock your account and get you registered.\",\"subject\":\"%{brand_name}: too many failed registration attempts\"}},\"org_list_download_mail\":{\"dispatch_link\":{\"introduction\":\"We have finished meshing your %{crm_brand_name} data with the companies in your \\\\\"%{list_name}\\\\\" list.\",\"subject\":\"%{brand_name}: your file download of \\'%{list_name}\\' is ready\"},\"failed\":{\"instructions\":\"You could try again in a little while. If you already have and are receiving this email again, please contact us at %{support_email_link}\",\"introduction\":\"We are really sorry, but something went wrong with creating your download of %{crm_brand_name} data for your \\\\\"%{list_name}\\\\\" list.\",\"subject\":\"%{brand_name}: your file download of \\'%{list_name}\\' failed\"}},\"reset_password_instructions_email\":{\"crm\":{\"salesforce\":{\"change_requested\":\"Someone has requested a change to your password. Your account is configured to use Salesforce to sign in.\"}},\"fishy_fine_print\":\"If you did not request a password change, then something weird is going on. Someone may be trying to access your account (unsuccessfully). Please reply to this email and let us know. We will take steps to make sure it stops.\",\"non_crm\":{\"change_password_link\":\"Change my password\",\"change_requested\":\"Someone has requested a change to your password, you can do this via the link below.\"},\"subject\":\"Password reset instructions for %{domain}\"},\"sales_force_mail\":{\"processing_completed\":{\"bullet_points\":[\"Only show events associated with companies in your Salesforce account\",\"Add new contacts and accounts to your Salesforce account without leaving %{brand_name}\",\"Access the \\'Salesforce details\\' panel on company dashboards where you can see open tasks, team interactions, opportunities, and more!\"],\"further_instructions\":\"We\\'re here to help. If you run into any questions or challenges, please contact us at %{support_email_link} and a member of our team would be more than happy to help.\",\"get_the_most\":\"To get the most from the integration, check out the \\'Mine Salesforce for opportunities\\' guide in the Help Center.\",\"guide_button\":\"Take me to the guide\",\"introduction\":\"Good news - your Salesforce account is now integrated with %{brand_name}. Now you’ll be able to:\"}},\"segment_contact\":{\"report_manager\":{\"fail_subject\":\"%{brand_name}: The PDF report generation failed\",\"success_subject\":\"%{brand_name}: Your PDF for %{company_name} is attached\"}},\"sf_token_expiry_email\":{\"further_instructions\":\"If you run into any questions or challenges, please contact us at %{support_email_link} and a member of our team would be more than happy to help.\",\"introduction\":\"Unfortunately the connection established for you between %{brand_name} and your %{crm_brand_name} account has expired. We will not be able to update your lists in %{brand_name} to reflect your %{crm_brand_name} database. To re-establish the connection, you just need to log in to %{brand_name} using your %{crm_brand_name}.\",\"subject\":\"%{brand_name} to %{crm_brand_name} connection has expired\"},\"share_list_mail\":{\"introduction\":\"%{user_name} shared a list with you: \",\"subject\":\"[%{brand_name} - shared list] %{list_name}\"},\"trial_expiry_mail\":{\"seven_days_to_go\":{\"further_instructions\":\"A member of our fabulous Customer Success team will arrange a welcome call with you to understand your goals and priorities, and will then give you a personalized Tour de %{brand_name} so you can easily access the information that is most valuable to you.\",\"instructions\":\"If you\\'d like continued access to the platform with our flexible month-to-month subscription, please ensure you contact %{support_email_link} ahead of: %{deadline}\",\"introduction\":\"Time flies when you\\'re uncovering new business opportunities! Your %{brand_name} trial is coming to an end next week.\",\"sign_off\":\"We look forward to helping you reach your sales goals!\",\"subject\":\"Just a heads up that your %{brand_name} trial is ending in seven days\"},\"seven_days_to_go_warning_for_cs\":{\"introduction\":\"%{user_name} shared a list with you: \",\"subject\":\"[%{brand_name} - shared list] %{list_name}\"}},\"unlock_instructions_email\":{\"crm\":{\"salesforce\":{\"change_requested\":\"You are being sent this email either because of one too many unsuccessful non-Salesforce log-in attempts or someone has requested an unlock email. %{brand_name} has not locked your account because your account is configured to use Salesforce to sign in.\",\"password_forgotten\":\"If you have forgotten your Salesforce password or think your account has been locked by Salesforce, please follow the instructions provided on the Salesforce sign in page.\"}},\"fishy_fine_print\":\"If you have not been (unsuccessfully) trying to log in to your account, then something weird is going on. Someone may be trying to access your account (unsuccessfully). Please reply to this email and let us know. We will take steps to make sure it stops.\",\"non_crm\":{\"change_requested\":\"For security reasons we have locked your account because of too many log-in attempts. To unlock your account, click the link below.\",\"unlock_account_link\":\"Unlock my account\"},\"subject\":\"Unlock instructions for %{domain}\"}},\"mongoid\":{\"errors\":{\"messages\":{\"ambiguous_relationship\":{\"message\":\"Ambiguous associations %{candidates} defined on %{klass}.\",\"resolution\":\"On the %{name} association on %{inverse} you must add an :inverse_of option to specify the exact association on %{klass} that is the opposite of %{name}.\",\"summary\":\"When Mongoid attempts to set an inverse document of an association in memory, it needs to know which association it belongs to. When setting %{name}, Mongoid looked on the class %{inverse} for a matching association, but multiples were found that could potentially match: %{candidates}.\"},\"blank_in_locale\":\"can\\'t be blank in %{location}\",\"callbacks\":{\"message\":\"Calling %{method} on %{klass} resulted in a false return from a callback.\",\"resolution\":\"Double check all before callbacks to make sure they are not unintentionally returning false.\",\"summary\":\"If a before callback returns false when using Document.create!, Document#save!, or Document#update_attributes! this error will get raised since the document did not actually get saved.\"},\"calling_document_find_with_nil_is_invalid\":{\"message\":\"Calling Document.find with nil is invalid.\",\"resolution\":\"Most likely this is caused by passing parameters directly through to the find, and the parameter either is not present or the key from which it is accessed is incorrect.\",\"summary\":\"Document.find expects the parameters to be 1 or more ids, and will return a single document if 1 id is provided, otherwise an array of documents if multiple ids are provided.\"},\"create_collection_failure\":{\"message\":\"Cannot create collection %{collection_name} with options %{collection_options}. The following error was raised: %{error}.\",\"resolution\":\"Double check that collection options for the collection %{collection_name} are valid. Consult with Ruby driver documentation and MongoDB documentation if the desired options are supported by your version of the server.\",\"summary\":\"The server rejected createCollection command with given collection options. This may happen when some of the options are invalid, or not supported by your version of the server.\"},\"criteria_argument_required\":{\"message\":\"Calling Criteria methods with nil arguments is not allowed.\",\"resolution\":\"Invoke Criteria methods with non-nil arguments or omit the respective invocations.\",\"summary\":\"Arguments to Criteria methods cannot be nil, and most Criteria methods require at least one argument. Only logical operations (and, or, nor and not), `all\\' and `where\\' can be called without arguments. The method that was called with nil argument was: %{query_method}.\"},\"delete_restriction\":{\"message\":\"Cannot destroy %{document} because of dependent \\'%{relation}\\'.\",\"resolution\":\"Don\\'t attempt to delete the parent %{document} when it has children, or change the dependent option on the association.\",\"summary\":\"When defining \\'%{relation}\\' with a :dependent =\\\\u003e :restrict_with_error, Mongoid will raise an error when attempting to destroy the %{document} when the child \\'%{relation}\\' still has documents in it.\"},\"destroy_restrict_with_error_dependencies_exist\":\"is not empty and prevents the document from being destroyed\",\"document_not_destroyed\":{\"message\":\"%{klass} with id %{id} was not destroyed.\",\"resolution\":\"Check the before/after destroy callbacks to ensure that the return values are truthy for the chain to continue.\",\"summary\":\"When calling %{klass}#destroy! and a callback halts the destroy callback chain by returning a false value, the deletion will not actually occur.\"},\"document_not_found\":{\"message\":\"Document(s) not found for class %{klass} with id(s) %{missing}.\",\"resolution\":\"Search for an id that is in the database or set the Mongoid.raise_not_found_error configuration option to false, which will cause nil to be returned instead of raising this error when searching for a single id, or only the matched documents when searching for multiples.\",\"summary\":\"When calling %{klass}.find with an id or array of ids, each parameter must match a document in the database or this error will be raised. The search was for the id(s): %{searched} (%{total} total) and the following ids were not found: %{missing}.\"},\"document_with_attributes_not_found\":{\"message\":\"Document not found for class %{klass} with attributes %{attributes}.\",\"resolution\":\"Search for attributes that are in the database or set the Mongoid.raise_not_found_error configuration option to false, which will cause nil to be returned instead of raising this error.\",\"summary\":\"When calling %{klass}.find_by with a hash of attributes, all attributes provided must match a document in the database or this error will be raised.\"},\"document_with_shard_key_not_found\":{\"message\":\"Document not found for class %{klass} with id %{missing} and shard key %{shard_key}.\",\"resolution\":\"Search for an id/shard key that is in the database or set the Mongoid.raise_not_found_error configuration option to false, which will cause nil to be returned instead of raising this error.\",\"summary\":\"When calling %{klass}.find with an id and a shard key, each parameter must match a document in the database or this error will be raised. The search was for the id: %{missing} with shard_key: %{shard_key} and it was not found.\"},\"drop_collection_failure\":{\"message\":\"Cannot drop collection %{collection_name}.\",\"resolution\":\"Try to drop the collection manually using Ruby driver or mongo shell.\",\"summary\":\"Mongoid tried to drop collection %{collection_name}, but the collection still exists in the database.\"},\"empty_config_file\":{\"message\":\"Empty configuration file: %{path}.\",\"resolution\":\"Ensure your configuration file contains the correct contents. Refer to: https://www.mongodb.com/docs/mongoid/current/reference/configuration/\",\"summary\":\"Your mongoid.yml configuration file appears to be empty.\"},\"immutable_attribute\":{\"message\":\"Attempted to change the immutable attribute \\'%{name}\\' with the value: %{value}.\",\"resolution\":\"Do not attempt to update the value of \\'%{name}\\' after the document is persisted.\",\"summary\":\"Immutable attributes can only have values set when the document is a new record.\"},\"in_memory_collation_not_supported\":{\"message\":\"A collation option cannot be applied when querying documents in-memory.\",\"resolution\":\"Remove the collation option from the query.\",\"summary\":\"The query being run against documents in memory has a collation option set. A collation option is only supported if the query is executed on a MongoDB server with version \\\\u003e= 3.4.\"},\"invalid_async_query_executor\":{\"message\":\"Invalid async_query_executor option: %{executor}.\",\"resolution\":\"Pick an allowed option or fix the typo. If you were expecting the option to be there, please consult the following page with respect to Mongoid\\'s configuration:\\\\n\\\\n   https://www.mongodb.com/docs/mongoid/current/reference/configuration/#mongoid-configuration-options\",\"summary\":\"A invalid async query executor was specified. The valid options are: %{options}.\"},\"invalid_collection\":{\"message\":\"Access to the collection for %{klass} is not allowed.\",\"resolution\":\"For access to the collection that the embedded document is in, use %{klass}#_root.collection, or do not attempt to persist an embedded document without a parent set.\",\"summary\":\"%{klass}.collection was called, and %{klass} is an embedded document - it resides within the collection of the root document of the hierarchy.\"},\"invalid_config_file\":{\"message\":\"Invalid configuration file: %{path}.\",\"resolution\":\"Ensure your configuration file contains the correct contents. Refer to: https://www.mongodb.com/docs/mongoid/current/reference/configuration/\",\"summary\":\"Your mongoid.yml configuration file does not contain the correct file structure.\"},\"invalid_config_option\":{\"message\":\"Invalid configuration option: %{name}.\",\"resolution\":\"Remove the invalid option or fix the typo. If you were expecting the option to be there, please consult the following page with respect to Mongoid\\'s configuration:\\\\n\\\\n   http://mongoid.org/en/mongoid/docs/installation.html\",\"summary\":\"A invalid configuration option was provided in your mongoid.yml, or a typo is potentially present. The valid configuration options are: %{options}.\"},\"invalid_dependent_strategy\":{\"message\":\"Invalid dependent strategy: %{invalid_strategy}.\",\"resolution\":\"Change the dependent strategy to one of the valid types.\",\"summary\":\"An invalid dependent strategy was defined for the association: %{association}. The valid strategies are: %{valid_strategies}.\"},\"invalid_discriminator_key_target\":{\"message\":\"Setting the discriminator key on a child class is not allowed.\",\"resolution\":\"Try setting the discriminator key on %{superclass} or one of %{class_name}\\'s ancestors.\",\"summary\":\"The discriminator key on the class %{class_name} was attempted to be changed. Changing the discriminator key on a child class is not allowed.\"},\"invalid_dot_dollar_assignment\":{\"message\":\"Cannot set the %{attr} attribute on the %{klass} class.\",\"resolution\":\"In order to set fields that start with a dollar sign ($) or contain a dot/period (.), the aggregation pipeline can be used. MongoDB provides specific operators for working with these fields. Refer to the MongoDB documentation here: https://www.mongodb.com/docs/manual/core/dot-dollar-considerations/\",\"summary\":\"Calling the setters for fields that start with a dollar sign ($) or contain a dot/period (.) is prohibited. See the Mongoid documentation on Field Names with Dots/Periods (.) and Dollar Signs ($) for more information.\"},\"invalid_elem_match_operator\":{\"message\":\"Invalid $elemMatch operator \\'%{operator}\\'.\",\"resolution\":\"Valid field operators are: %{valid_operators}. Ensure you are using one of these operators.\",\"summary\":\"You misspelled an operator or are using an operator that Mongoid does not support.\"},\"invalid_estimated_count_criteria\":{\"message\":\"Invalid criteria for estimated_count.\",\"resolution\":\"Try calling estimated_count directly on the class: %{class_name}.estimated_count.\\\\n\\\\n  If the class defines a default scope, use unscoped: %{class_name}.unscoped.estimated_count.\",\"summary\":\"Estimated count is strictly a collection-level operation and cannot be called on a filtered criteria.\"},\"invalid_expression_operator\":{\"message\":\"Invalid expression operator \\'%{operator}\\'.\",\"resolution\":\"Valid expression operators are: %{valid_operators}. Ensure you are using one of these operators.\",\"summary\":\"You misspelled an operator, are using an operator that Mongoid does not support, or are trying to use a field-level operator on expression level.\"},\"invalid_field\":{\"message\":\"Defining a field named \\'%{field}\\' is not allowed.\",\"resolution\":\"Use Mongoid.destructive_fields to see what names are not allowed, and don\\'t use these names. These include names that also conflict with core Ruby methods on Object, Module, Enumerable, or included gems that inject methods into these or Mongoid internals.\",\"summary\":\"Defining this field would override the method \\'%{name}\\', which would cause issues with expectations around the original method and cause extremely hard to debug issues. The original method was defined in:\\\\n   Object: %{origin}\\\\n   File: %{file}\\\\n   Line: %{line}\"},\"invalid_field_operator\":{\"message\":\"Invalid field operator \\'%{operator}\\'.\",\"resolution\":\"Valid field operators are: %{valid_operators}. Ensure you are using one of these operators.\",\"summary\":\"You misspelled an operator, are using an operator that Mongoid does not support, or are trying to use an expression-level operator on field level.\"},\"invalid_field_option\":{\"message\":\"Invalid option :%{option} provided for field :%{name}.\",\"resolution\":\"When defining the field :%{name} on \\'%{klass}\\', please provide valid options for the field. These are currently: %{valid}. If you meant to define a custom field option, please do so first as follows:\\\\n\\\\n   Mongoid::Fields.option :%{option} do |model, field, value|\\\\n     # Your logic here...\\\\n   end\\\\n   class %{klass}\\\\n     include Mongoid::Document\\\\n     field :%{name}, %{option}: true\\\\n   end\\\\n\\\\n Refer to: https://www.mongodb.com/docs/mongoid/current/reference/fields/#custom-field-options\",\"summary\":\"Mongoid requires that you only provide valid options on each field definition in order to prevent unexpected behavior later on.\"},\"invalid_field_type\":{\"message\":\"Invalid field type %{type_inspection} for field \\'%{field}\\' on model \\'%{klass}\\'.\",\"resolution\":\"Please provide a valid type value for the field. Refer to: https://www.mongodb.com/docs/mongoid/current/reference/fields/#using-symbols-or-strings-instead-of-classes\",\"summary\":\"Model \\'%{klass}\\' defines a field \\'%{field}\\' with an unknown type value %{type_inspection}.\"},\"invalid_global_executor_concurrency\":{\"message\":\"Invalid global_executor_concurrency option.\",\"resolution\":\"Set global_executor_concurrency option to :global_thread_pool or remove global_executor_concurrency option.\",\"summary\":\"You set global_executor_concurrency while async_query_executor option is not set to :global_thread_pool. The global_executor_concurrency is allowed only for the global thread pool executor.\"},\"invalid_includes\":{\"message\":\"Invalid includes directive: %{klass}.includes(%{args})\",\"resolution\":\"Ensure that each parameter passed to %{klass}.includes is a valid name of an association on the %{klass} model. These are: %{relations}.\",\"summary\":\"Eager loading in Mongoid only supports providing arguments to %{klass}.includes that are the names of associations on the %{klass}.\"},\"invalid_index\":{\"message\":\"Invalid index specification on %{klass}: %{spec}, %{options}\",\"resolution\":\"Ensure that the index conforms to the correct syntax and has the correct options.\\\\n\\\\n Valid options are:\\\\n   background: true|false\\\\n   database: \\'database_name\\'\\\\n   name: \\'index_name\\'\\\\n   sparse: true|false\\\\n   unique: true|false\\\\n   min: 1\\\\n   max: 1\\\\n   bits: 26\\\\n   key: 26\\\\n   bucket_size : 1\\\\n   sphere_version : 1\\\\n   text_version : 1\\\\n   version : 1\\\\n   weights: { content: 1, title: 2 }\\\\n   expire_after_seconds: number_of_seconds\\\\n   partial_filter_expression\\\\n   storage_engine\\\\n   language_override\\\\n   default_language\\\\n   collation\\\\n   wildcard_projection: { \\'path.to.field.a\\': 1, \\'path.to.field.b\\': 0 }\\\\n Valid types are: 1, -1, \\'2d\\', \\'2dsphere\\', \\'geoHaystack (deprecated)\\', \\'text\\', \\'hashed\\'\\\\n\\\\n Example:\\\\n   class Band\\\\n     include Mongoid::Document\\\\n     index({ name: 1, label: -1 }, { sparse: true })\\\\n     index({ location: \\'2d\\' }, { background: true })\\\\n   end\\\\n\\\\n\",\"summary\":\"Indexes in Mongoid are defined as a hash of field name and direction/2d pairs, with a hash for any additional options.\"},\"invalid_options\":{\"message\":\"Invalid option :%{invalid} provided to association :%{name}.\",\"resolution\":\"Valid options are: %{valid}, make sure these are the ones you are using.\",\"summary\":\"Mongoid checks the options that are passed to the association macros to ensure that no ill side effects occur by letting something slip by.\"},\"invalid_path\":{\"message\":\"Having a root path assigned for %{klass} is invalid.\",\"resolution\":\"Most likely your embedded model, %{klass} is also referenced via a has_many from a root document in another collection. Double check the association definitions and fix any instances where embedded documents are improperly referenced from other collections.\",\"summary\":\"Mongoid has two different path objects for determining the location of a document in the database, Root and Embedded. This error is raised when an embedded document somehow gets a root path assigned.\"},\"invalid_persistence_option\":{\"message\":\"Invalid persistence option :%{invalid}.\",\"resolution\":\"Valid options are: %{valid}, make sure these are the ones you are using.\",\"summary\":\"The options used to change the persistence context must be one of the valid options for a mongo client, or a collection name.\"},\"invalid_relation\":{\"message\":\"Defining an association named \\'%{name}\\' is not allowed.\",\"resolution\":\"Use Mongoid.destructive_fields to see what names are not allowed, and don\\'t use these names. These include names that also conflict with core Ruby methods on Object, Module, Enumerable, or included gems that inject methods into these or Mongoid internals.\",\"summary\":\"Defining this association would override the method \\'%{name}\\', which would cause issues with expectations around the original method and cause extremely hard to debug issues. The original method was defined in:\\\\n   Object: %{origin}\\\\n   File: %{file}\\\\n   Line: %{line}\"},\"invalid_relation_option\":{\"message\":\"Invalid association option :%{option} for association \\'%{name}\\' on class %{klass}.\",\"resolution\":\"Valid options are: %{valid_options}, make sure you use only those.\",\"summary\":\"An invalid option was provided for an association.\"},\"invalid_scope\":{\"message\":\"Defining a scope of value %{value} on %{klass} is not allowed.\",\"resolution\":\"Change the scope to be a proc wrapped criteria.\\\\n\\\\n Example:\\\\n   class Band\\\\n     include Mongoid::Document\\\\n     scope :inactive, -\\\\u003e{ where(active: false) }\\\\n   end\\\\n\\\\n\",\"summary\":\"Scopes in Mongoid must be procs that wrap criteria objects.\"},\"invalid_session_nesting\":{\"message\":\"A session was started while another session was being used.\",\"resolution\":\"Only use one session at a time; sessions cannot be nested.\",\"summary\":\"Sessions cannot be nested. Only one session can be used in a thread at once.\"},\"invalid_session_use\":{\"message\":\"A session was attempted to be used with a model whose client cannot use that session.\",\"resolution\":\"Only execute operations on the model class or instances of the model through which the session was created. Otherwise, ensure that all models on which operations are executed in the session block share the same driver client. For example, a model may have a different client specified in its \\'store_in\\' options.\\\\n\\\\n\",\"summary\":\"Sessions are started via driver clients (Model#mongo_client) and, in most cases, driver clients are shared across models. When different models have their own clients, a session cannot be obtained via one model and used for operations on another model.\"},\"invalid_set_polymorphic_relation\":{\"message\":\"The %{name} attribute can\\'t be set to an instance of %{other_klass} as %{other_klass} has multiple associations referencing %{klass} as %{name}.\",\"resolution\":\"Set the values from the parent, or redefine the association with only a single definition in the parent.\",\"summary\":\"If the parent class of a polymorphic association has multiple definitions for the same association, the values must be set from the parent side and not the child side since Mongoid cannot determine from the child side which association to go in.\"},\"invalid_storage_options\":{\"message\":\"Invalid options passed to %{klass}.store_in: %{options}.\",\"resolution\":\"Change the options passed to store_in to match the documented API, and ensure all keys in the options hash are symbols.\\\\n\\\\n Example:\\\\n   class Band\\\\n     include Mongoid::Document\\\\n     store_in collection: \\'artists\\', database: \\'music\\'\\\\n   end\\\\n\\\\n\",\"summary\":\"The :store_in macro takes only a hash of parameters with the keys :database, :collection, :collection_options, or :client.\"},\"invalid_time\":{\"message\":\"\\'%{value}\\' is not a valid Time.\",\"resolution\":\"Make sure to pass parsable values to the field setter for Date, DateTime, and Time objects. When this is a String it needs to be valid for Time.parse. Other objects must be valid to pass to Time.local.\",\"summary\":\"Mongoid tries to serialize the values for Date, DateTime, and Time into proper UTC times to store in the database. The provided value could not be parsed.\"},\"inverse_not_found\":{\"message\":\"When adding a(n) %{klass} to %{base}#%{name}, Mongoid could not determine the inverse foreign key to set. The attempted key was \\'%{inverse}\\'.\",\"resolution\":\"If an inverse is not required, like a belongs_to or has_and_belongs_to_many, ensure that :inverse_of =\\\\u003e nil is set on the association. If the inverse is needed, most likely the inverse cannot be figured out from the names of the associations and you will need to explicitly tell Mongoid on the association what the inverse is.\\\\n\\\\n Example:\\\\n   class Car\\\\n     include Mongoid::Document\\\\n     has_one :engine, class_name: \\\\\"Motor\\\\\", inverse_of: :machine\\\\n   end\\\\n\\\\n   class Motor\\\\n     include Mongoid::Document\\\\n     belongs_to :machine, class_name: \\\\\"Car\\\\\", inverse_of: :engine\\\\n   end\",\"summary\":\"When adding a document to an association, Mongoid attempts to link the newly added document to the base of the association in memory, as well as set the foreign key to link them on the database side. In this case Mongoid could not determine what the inverse foreign key was.\"},\"message_title\":\"message\",\"mixed_client_configuration\":{\"message\":\"Both uri and standard configuration options defined for client: \\'%{name}\\'.\",\"resolution\":\"Provide either only a uri as configuration or only standard options.\",\"summary\":\"Instead of simply giving uri or standard options a preference order, Mongoid assumes that you have made a mistake in your configuration and requires that you provide one or the other, but not both. The options that were provided were: %{config}.\"},\"mixed_relations\":{\"message\":\"Referencing a(n) %{embedded} document from the %{root} document via a non-embedded association is not allowed since the %{embedded} is embedded.\",\"resolution\":\"Consider not embedding %{embedded}, or do the key storage and access in a custom manner in the application code.\",\"summary\":\"In order to properly access a(n) %{embedded} from %{root} the reference would need to go through the root document of %{embedded}. In a simple case this would require Mongoid to store an extra foreign key for the root, in more complex cases where %{embedded} is multiple levels deep a key would need to be stored for each parent up the hierarchy.\"},\"nested_attributes_metadata_not_found\":{\"message\":\"Could not find metadata for association \\'%{name}\\' on model: %{klass}.\",\"resolution\":\"Make sure that there is an association defined named \\'%{name}\\' on %{klass} or that the association definition comes before the accepts_nested_attributes_for macro in the model - order matters so that Mongoid has access to the metadata.\\\\n\\\\n Example:\\\\n   class Band\\\\n     include Mongoid::Document\\\\n     has_many :albums\\\\n     accepts_nested_attributes_for :albums\\\\n   end\\\\n\\\\n\",\"summary\":\"When defining nested attributes for an association, Mongoid needs to access the metadata for the association \\'%{name}\\' in order if add autosave functionality to it, if applicable. Either no association named \\'%{name}\\' could be found, or the association had not been defined yet.\"},\"no_client_config\":{\"message\":\"No configuration could be found for a client named \\'%{name}\\'.\",\"resolution\":\"Double check your mongoid.yml to make sure under the clients key that a configuration exists for \\'%{name}\\'. If you have set the configuration programmatically, ensure that \\'%{name}\\' exists in the configuration hash.\",\"summary\":\"When attempting to create the new client, Mongoid could not find a client configuration for the name: \\'%{name}\\'. This is necessary in order to know the host, port, and options needed to connect.\"},\"no_client_database\":{\"message\":\"No database provided for client configuration: :%{name}.\",\"resolution\":\"If configuring via a mongoid.yml, ensure that within your :%{name} section a :database value for the client\\'s default database is defined.\\\\n\\\\n Example:\\\\n   development:\\\\n     clients:\\\\n       %{name}:\\\\n         database: my_app_db\\\\n         hosts:\\\\n           - localhost:27017\\\\n\\\\n\",\"summary\":\"Each client configuration must provide a database so Mongoid knows where the default database to persist to. What was provided was: %{config}.\"},\"no_client_hosts\":{\"message\":\"No hosts provided for client configuration: :%{name}.\",\"resolution\":\"If configuring via a mongoid.yml, ensure that within your :%{name} section a :hosts value for the client hosts is defined.\\\\n\\\\n Example:\\\\n   development:\\\\n     clients:\\\\n       %{name}:\\\\n         database: my_app_db\\\\n         hosts:\\\\n           - localhost:27017\\\\n\\\\n\",\"summary\":\"Each client configuration must provide hosts so Mongoid knows where the database server is located. What was provided was: %{config}.\"},\"no_clients_config\":{\"message\":\"No clients configuration provided.\",\"resolution\":\"Double check your mongoid.yml to make sure that you have a top-level clients key with at least 1 default client configuration for it. You can regenerate a new mongoid.yml for assistance via `rails g mongoid:config`.\\\\n\\\\n Example:\\\\n   development:\\\\n     clients:\\\\n       default:\\\\n         database: mongoid_dev\\\\n         hosts:\\\\n           - localhost:27017\\\\n\\\\n\",\"summary\":\"Mongoid\\'s configuration requires that you provide details about each client that can be connected to, and requires in the clients config at least 1 default client to exist.\"},\"no_default_client\":{\"message\":\"No default client configuration is defined.\",\"resolution\":\"If configuring via a mongoid.yml, ensure that within your :clients section a :default client is defined.\\\\n\\\\n Example:\\\\n   development:\\\\n     clients:\\\\n       default:\\\\n         hosts:\\\\n           - localhost:27017\\\\n\\\\n\",\"summary\":\"The configuration provided settings for: %{keys}, but Mongoid requires a :default to be defined at minimum.\"},\"no_documents_found\":{\"message\":\"Could not find a document of class %{klass}.\",\"resolution\":\"Create a document of class %{klass} or use a finder method that does not raise an exception when no documents are found.\",\"summary\":\"Mongoid attempted to find a document of the class %{klass} but none exist.\"},\"no_environment\":{\"message\":\"Could not load the configuration since no environment was defined.\",\"resolution\":\"Please ensure an environment is set in one of the listed locations. The environment must be explicitly set.\",\"summary\":\"Mongoid could not determine the environment to use because it was not specified in any of the following locations: Rails.env, Sinatra::Base.environment, ENV[\\\\\"RACK_ENV\\\\\"], ENV[\\\\\"MONGOID_ENV\\\\\"]. Without knowing the environment, Mongoid cannot load its configuration.\"},\"no_map_reduce_output\":{\"message\":\"No output location was specified for the map/reduce operation.\",\"resolution\":\"Provide the location that the output of the operation is to go by chaining an #out call to the map/reduce.\\\\n\\\\n Example:\\\\n   Band.map_reduce(map, reduce).out(inline: 1)\\\\n\\\\n Valid options for the out function are:\\\\n   inline: 1\\\\n   merge: \\'collection-name\\'\\\\n   replace: \\'collection-name\\'\\\\n   reduce: \\'collection-name\\'\\\\n\\\\n\",\"summary\":\"When executing a map/reduce, you must provide the output location of the results. The attempted command was: %{command}.\"},\"no_metadata\":{\"message\":\"Metadata not found for document of type %{klass}.\",\"resolution\":\"Ensure that your associations on the %{klass} model are all properly defined, and that the inverse associations are also properly defined. Embedded associations must have both the parent (embeds_one/embeds_many) and the inverse (embedded_in) present in order to work properly.\",\"summary\":\"Mongoid sets the metadata of an association on the document when it is either loaded from within the association, or added to one. The presence of the metadata is required in order to provide various functionality around associations. Most likely you are getting this error because the document is embedded and was attempted to be persisted without being associated with a parent, or the association was not properly defined.\"},\"no_parent\":{\"message\":\"Cannot persist embedded document %{klass} without a parent document.\",\"resolution\":\"Ensure that you\\'ve set the parent association if instantiating the embedded document directly, or always create new embedded documents via the parent association.\",\"summary\":\"If the document is embedded, in order to be persisted it must always have a reference to its parent document. This is most likely caused by either calling %{klass}.create or %{klass}.create! without setting the parent document as an attribute.\"},\"readonly_attribute\":{\"message\":\"Attempted to set the readonly attribute \\'%{name}\\' with the value: %{value}.\",\"resolution\":\"Don\\'t define \\'%{name}\\' as readonly, or do not attempt to update its value after the document is persisted.\",\"summary\":\"Attributes flagged as readonly via Model.attr_readonly can only have values set when the document is a new record.\"},\"readonly_document\":{\"message\":\"Attempted to persist a readonly document of class \\'%{klass}\\'.\",\"resolution\":\"Don\\'t attempt to persist documents that are flagged as readonly.\",\"summary\":\"Documents that are marked readonly cannot be persisted.\"},\"resolution_title\":\"resolution\",\"scope_overwrite\":{\"message\":\"Cannot create scope :%{scope_name}, because of existing method %{model_name}.%{scope_name}.\",\"resolution\":\"Change the name of the scope so it does not conflict with the already defined method %{model_name}, or set the configuration option Mongoid.scope_overwrite_exception to false, which is its default. In this case a warning will be logged.\",\"summary\":\"When defining a scope that conflicts with a method that already exists on the model, this error will get raised if Mongoid.scope_overwrite_exception is set to true.\"},\"sessions_not_supported\":{\"message\":\"Sessions are not supported by the connected server(s).\",\"resolution\":\"Verify that all servers in your deployment are at least version 3.6 or don\\'t attempt to use sessions with older server versions.\",\"summary\":\"A session was attempted to be used with a MongoDB server version that doesn\\'t support sessions. Sessions are supported in MongoDB server versions 3.6 and higher.\"},\"summary_title\":\"summary\",\"too_many_nested_attribute_records\":{\"message\":\"Accepting nested attributes for %{association} is limited to %{limit} documents.\",\"resolution\":\"The limit is set as an option to the macro, for example: accepts_nested_attributes_for :%{association}, limit: %{limit}. Consider raising this limit or making sure no more are sent than the set value.\",\"summary\":\"More documents were sent to be processed than the allowed limit.\"},\"unknown_attribute\":{\"message\":\"Attempted to set a value for \\'%{name}\\' which is not allowed on the model %{klass}.\",\"resolution\":\"Define the field \\'%{name}\\' in %{klass}, or include Mongoid::Attributes::Dynamic in %{klass} if you intend to store values in fields that are not explicitly defined.\",\"summary\":\"%{klass}#%{name}= was called but there is no \\'%{name}\\' field defined in the model, and Mongoid::Attributes::Dynamic is not included. This error is also raised instead of NoMethodError if the unknown attribute is passed to any method that accepts an attributes hash, such as #attributes=.\"},\"unknown_model\":{\"message\":\"Attempted to instantiate an object of the unknown model \\'%{klass}\\'.\",\"resolution\":\"The _type field is a reserved one used by Mongoid to determine the class for instantiating an object. Please don\\'t save data in this field or ensure that any values in this field correspond to valid models.\",\"summary\":\"A document with the value \\'%{value}\\' at the key \\'_type\\' was used to instantiate a model object but Mongoid cannot find this Class.\"},\"unsaved_document\":{\"message\":\"Attempted to save %{document} before the parent %{base}.\",\"resolution\":\"Make sure to only use create or create! when the parent document %{base} is persisted.\",\"summary\":\"You cannot call create or create! through the association (%{document}) whose parent (%{base}) is not already saved. This would cause the database to be out of sync since the child could potentially reference a nonexistent parent.\"},\"unsupported_javascript\":{\"message\":\"Executing Javascript $where selector on an embedded criteria is not supported.\",\"resolution\":\"Please provide a standard hash to #where when the criteria is for an embedded association.\",\"summary\":\"Mongoid only supports providing a hash of arguments to #where criterion on embedded documents. Since %{klass} is embedded, the expression %{javascript} is not allowed.\"},\"validations\":{\"message\":\"Validation of %{document} failed.\",\"resolution\":\"Try persisting the document with valid data or remove the validations.\",\"summary\":\"The following errors were found: %{errors}\"}}}},\"number\":{\"currency\":{\"format\":{\"delimiter\":\",\",\"format\":\"%u%n\",\"negative_format\":\"-%u%n\",\"precision\":2,\"separator\":\".\",\"significant\":false,\"strip_insignificant_zeros\":false,\"unit\":\"$\"}},\"format\":{\"delimiter\":\",\",\"precision\":3,\"round_mode\":\"default\",\"separator\":\".\",\"significant\":false,\"strip_insignificant_zeros\":false},\"human\":{\"decimal_units\":{\"format\":\"%n %u\",\"units\":{\"billion\":\"Billion\",\"million\":\"Million\",\"quadrillion\":\"Quadrillion\",\"thousand\":\"Thousand\",\"trillion\":\"Trillion\",\"unit\":\"\"}},\"format\":{\"delimiter\":\"\",\"precision\":3,\"significant\":true,\"strip_insignificant_zeros\":true},\"storage_units\":{\"format\":\"%n %u\",\"units\":{\"byte\":{\"one\":\"Byte\",\"other\":\"Bytes\"},\"eb\":\"EB\",\"gb\":\"GB\",\"kb\":\"KB\",\"mb\":\"MB\",\"pb\":\"PB\",\"tb\":\"TB\",\"zb\":\"ZB\"}}},\"nth\":{},\"percentage\":{\"format\":{\"delimiter\":\"\",\"format\":\"%n%\"}},\"precision\":{\"format\":{\"delimiter\":\"\"}}},\"simple_form\":{\"error_notification\":{\"default_message\":\"Please review the problems below:\"},\"no\":\"No\",\"required\":{\"mark\":\"*\",\"text\":\"required\"},\"yes\":\"Yes\"},\"support\":{\"array\":{\"last_word_connector\":\", and \",\"two_words_connector\":\" and \",\"words_connector\":\", \"}},\"time\":{\"am\":\"am\",\"formats\":{\"default\":\"%a, %d %b %Y %H:%M:%S %z\",\"long\":\"%B %d, %Y %H:%M\",\"short\":\"%d %b %H:%M\"},\"pm\":\"pm\"},\"users\":{\"confirmations\":{\"new\":{\"legend\":\"Resend your %{brand_name} confirmation instructions\",\"message\":\"We need to confirm your email address to complete the sign up process. Supply your email address, below, and we will send you instructions on how to confirm your address.\",\"submit_button\":\"Send Confirmation Instructions\",\"title\":\"Resend confirmation instructions | %{brand_name}\"},\"show\":{\"legend\":\"Check your inbox for a confirmation email\",\"message\":\"If your e-mail exists in our database we have sent you a message with instructions. Check your inbox (or spam folder) for a message from \\'%{default_from_email}\\' containing the confirmation link.\",\"title\":\"Awaiting confirmation | %{brand_name}\"}},\"passwords\":{\"new\":{\"failures\":\"Note: If you make more than 5 sequential failed attempts to sign in with your %{brand_name} password, your account will be (temporarily) locked. Check your inbox for instruction on how to unlock your account, or we can\",\"legend\":\"Reset your %{brand_name} password\",\"message\":\"Supply your email address, below, and we will send you instructions on how to reset your password.\",\"resend_link\":\"resend a new set of unlock instructions\",\"submit_button\":\"Send Reset Instructions\",\"title\":\"Reset password | %{brand_name}\"},\"show\":{\"didnt_receive_email\":\"Didn\\'t receive the email?\",\"legend\":\"Password reset instructions sent\",\"message\":\"If your e-mail exists in our database we have sent you a message with password reset instructions. Check your inbox (or spam folder) for a message from \\'%{default_from_email}\\'.\",\"resend_link\":\"you can request another one here\",\"title\":\"Awaiting reset | %{brand_name}\"}}},\"will_paginate\":{\"container_aria_label\":\"Pagination\",\"next_label\":\"Next \\\\u0026#8594;\",\"page_aria_label\":\"Page %{page}\",\"page_entries_info\":{\"multi_page\":\"Displaying %{model} %{from} - %{to} of %{count} in total\",\"multi_page_html\":\"Displaying %{model} \\\\u003cb\\\\u003e%{from}\\\\u0026nbsp;-\\\\u0026nbsp;%{to}\\\\u003c/b\\\\u003e of \\\\u003cb\\\\u003e%{count}\\\\u003c/b\\\\u003e in total\",\"single_page\":{\"one\":\"Displaying 1 %{model}\",\"other\":\"Displaying all %{count} %{model}\",\"zero\":\"No %{model} found\"},\"single_page_html\":{\"one\":\"Displaying \\\\u003cb\\\\u003e1\\\\u003c/b\\\\u003e %{model}\",\"other\":\"Displaying \\\\u003cb\\\\u003eall\\\\u0026nbsp;%{count}\\\\u003c/b\\\\u003e %{model}\",\"zero\":\"No %{model} found\"}},\"page_gap\":\"\\\\u0026hellip;\",\"previous_label\":\"\\\\u0026#8592; Previous\"}}'));\nI18n.translations[\"de\"] = I18n.extend((I18n.translations[\"de\"] || {}), JSON.parse('{\"activerecord\":{\"errors\":{\"messages\":{\"record_invalid\":\"Validation failed: %{errors}\",\"restrict_dependent_destroy\":{\"has_many\":\"Cannot delete record because dependent %{record} exist\",\"has_one\":\"Cannot delete record because a dependent %{record} exists\"}}}},\"bulk_uploads\":{\"email_local_part\":{\"empty_parameter\":\"No file uploaded\",\"error\":\"File Upload failed: %{error_message}\",\"success\":\"File was successfully uploaded\"}},\"common\":{\"crm\":{\"salesforce\":{\"forgot_password\":\"If you have forgotten your Salesforce password, please follow the instructions provided on the Salesforce sign in page.\",\"sign_in_button\":\"Sign In with Salesforce\"}}},\"contact\":{\"default_from_email\":\"info@zymewire.com\",\"phone_numbers\":[{\"label\":\"US\",\"phone\":\"1-844-996-3321\"},{\"label\":\"UK\",\"phone\":\"+44-208-133-9963\"}],\"support_email\":\"support@zymewire.com\"},\"date\":{\"abbr_day_names\":[\"Sun\",\"Mon\",\"Tue\",\"Wed\",\"Thu\",\"Fri\",\"Sat\"],\"abbr_month_names\":[null,\"Jan\",\"Feb\",\"Mar\",\"Apr\",\"May\",\"Jun\",\"Jul\",\"Aug\",\"Sep\",\"Oct\",\"Nov\",\"Dec\"],\"day_names\":[\"Sunday\",\"Monday\",\"Tuesday\",\"Wednesday\",\"Thursday\",\"Friday\",\"Saturday\"],\"formats\":{\"default\":\"%Y-%m-%d\",\"long\":\"%B %d, %Y\",\"short\":\"%b %d\"},\"month_names\":[null,\"January\",\"February\",\"March\",\"April\",\"May\",\"June\",\"July\",\"August\",\"September\",\"October\",\"November\",\"December\"],\"order\":[\"year\",\"month\",\"day\"]},\"datetime\":{\"distance_in_words\":{\"about_x_hours\":{\"one\":\"about 1 hour\",\"other\":\"about %{count} hours\"},\"about_x_months\":{\"one\":\"about 1 month\",\"other\":\"about %{count} months\"},\"about_x_years\":{\"one\":\"about 1 year\",\"other\":\"about %{count} years\"},\"almost_x_years\":{\"one\":\"almost 1 year\",\"other\":\"almost %{count} years\"},\"half_a_minute\":\"half a minute\",\"less_than_x_minutes\":{\"one\":\"less than a minute\",\"other\":\"less than %{count} minutes\"},\"less_than_x_seconds\":{\"one\":\"less than 1 second\",\"other\":\"less than %{count} seconds\"},\"over_x_years\":{\"one\":\"over 1 year\",\"other\":\"over %{count} years\"},\"x_days\":{\"one\":\"1 day\",\"other\":\"%{count} days\"},\"x_minutes\":{\"one\":\"1 minute\",\"other\":\"%{count} minutes\"},\"x_months\":{\"one\":\"1 month\",\"other\":\"%{count} months\"},\"x_seconds\":{\"one\":\"1 second\",\"other\":\"%{count} seconds\"}},\"prompts\":{\"day\":\"Day\",\"hour\":\"Hour\",\"minute\":\"Minute\",\"month\":\"Month\",\"second\":\"Seconds\",\"year\":\"Year\"}},\"default_host\":\"https://www.zymewire.com\",\"devise\":{\"confirmations\":{\"confirmed\":\"Your account was successfully confirmed. Please sign in.\",\"send_instructions\":\"Your email has not been confirmed. We need to confirm your email account before you can sign in. Please check your inbox or spam folder for an email from \\'info@zymewire.com\\' or request a new one.\",\"send_paranoid_instructions\":\"If your e-mail exists on our database, you will receive an email with instructions about how to confirm your account in a few minutes.\"},\"failure\":{\"already_authenticated\":\"You are already signed in.\",\"expired\":\"Ihr Account ist aufgrund zu langer Inaktivität abgelaufen. Bitte kontaktieren Sie den Administrator.\",\"inactive\":\"Your account was not activated yet.\",\"invalid\":\"Invalid email or password. If you use Salesforce, use the \\'Have Salesforce?\\' panel.\",\"invalid_token\":\"Invalid authentication token.\",\"last_attempt\":\"You have one more attempt before your account is locked.\",\"locked\":\"Your account is locked.\",\"not_active\":\"Your account has been de-activated, if you think this is a mistake please contact us\",\"not_found_in_database\":\"Invalid %{authentication_keys} or password.\",\"session_limited\":\"Ihre Anmeldedaten wurden in einem anderen Browser genutzt. Bitte melden Sie sich erneut an, um in diesem Browser fortzufahren.\",\"timeout\":\"Your session expired, please sign in again to continue.\",\"unauthenticated\":\"You need to sign in or sign up before continuing.\",\"unconfirmed\":\"We must confirm your email before you can continue. Please check your inbox or spam folder for a confirmation email from \\'info@zymewire.com\\' or request a new one.\"},\"invalid_captcha\":\"Die Captcha-Eingabe ist nicht gültig.\",\"invalid_security_question\":\"Die Antwort auf die Sicherheitsfrage war ungültig.\",\"mailer\":{\"confirmation_instructions\":{\"subject\":\"Confirmation instructions for Zymewire.com\"},\"email_changed\":{\"subject\":\"Email Changed\"},\"password_change\":{\"subject\":\"Password Changed\"},\"reset_password_instructions\":{\"subject\":\"Reset password instructions for Zymewire.com\"},\"unlock_instructions\":{\"subject\":\"Unlock Instructions for Zymewire.com\"}},\"omniauth_callbacks\":{\"failure\":\"Could not authorize you from %{kind} because \\\\\"%{reason}\\\\\".\",\"success\":\"Successfully authorized from %{kind} account.\"},\"paranoid_verification_code\":{\"show\":{\"submit\":\"Bestätigen\",\"submit_verification_code\":\"Bestätigungscode eingeben\",\"verification_code\":\"Bestätigungscode\"},\"updated\":\"Bestätigungscode akzeptiert\"},\"paranoid_verify\":{\"code_required\":\"Bitte geben Sie den Code ein, den unser Support-Team zur Verfügung gestellt hat.\"},\"password_expired\":{\"change_required\":\"Ihr Passwort ist abgelaufen. Bitte vergeben Sie ein neues Passwort.\",\"show\":{\"change_my_password\":\"Passwort ändern\",\"current_password\":\"Aktuelles Passwort\",\"new_password\":\"Neues Passwort\",\"new_password_confirmation\":\"Passwort bestätigen\",\"renew_your_password\":\"Vergeben Sie ein neues Passwort\"},\"updated\":\"Das neue Passwort wurde übernommen.\"},\"passwords\":{\"no_token\":\"You can\\'t access this page without coming from a password reset email. If you do come from a password reset email, please make sure you used the full URL provided.\",\"send_instructions\":\"You will receive an email with instructions about how to reset your password in a few minutes.\",\"send_paranoid_instructions\":\"If your e-mail exists on our database, you will receive a password recovery link on your e-mail\",\"updated\":\"Your password was changed successfully. You are now signed in.\",\"updated_not_active\":\"Your password was changed successfully.\"},\"registrations\":{\"destroyed\":\"Bye! Your account was successfully cancelled. We hope to see you again soon.\",\"signed_up\":\"Welcome! You have signed up successfully.\",\"signed_up_but_inactive\":\"You have signed up successfully. However, we could not sign you in because your account is not yet activated.\",\"signed_up_but_locked\":\"You have signed up successfully. However, we could not sign you in because your account is locked.\",\"signed_up_but_unconfirmed\":\"A message with a confirmation link has been sent to your email address. Please open the link to activate your account.\",\"update_needs_confirmation\":\"You updated your account successfully, but we need to verify your new email address. Please check your email and click on the confirm link to finalize confirming your new email address.\",\"updated\":\"You updated your account successfully.\",\"updated_but_not_signed_in\":\"Your account has been updated successfully, but since your password was changed, you need to sign in again.\"},\"sessions\":{\"already_signed_out\":\"Signed out successfully.\",\"signed_in\":\"Signed in successfully.\",\"signed_out\":\"Signed out successfully.\"},\"unlocks\":{\"send_instructions\":\"You will receive an email with instructions about how to unlock your account in a few minutes.\",\"send_paranoid_instructions\":\"If your account exists, you will receive an email with instructions about how to unlock it in a few minutes.\",\"unlocked\":\"Your account has been unlocked successfully. Please sign in to continue.\"}},\"download\":\"Download\",\"download_30_days\":\"This link will be available for 30 days after which the file will be removed from our servers.\",\"enumerize\":{\"blocklisted_contact\":{\"provider\":{\"insideview\":\"InsideView\",\"zephyr\":\"Zephyr\"}}},\"errors\":{\"format\":\"%{attribute} %{message}\",\"messages\":{\"accepted\":\"must be accepted\",\"already_confirmed\":\"was already confirmed, please try signing in\",\"blank\":\"can\\'t be blank\",\"confirmation\":\"doesn\\'t match %{attribute}\",\"confirmation_period_expired\":\"needs to be confirmed within %{period}, please request a new one\",\"empty\":\"can\\'t be empty\",\"equal_to\":\"must be equal to %{count}\",\"equal_to_current_password\":\"darf nicht dem aktuellen Passwort entsprechen.\",\"equal_to_email\":\"darf nicht dem E-mail entsprechen.\",\"even\":\"must be even\",\"exclusion\":\"is reserved\",\"expired\":\"has expired, please request a new one\",\"greater_than\":\"must be greater than %{count}\",\"greater_than_or_equal_to\":\"must be greater than or equal to %{count}\",\"in\":\"must be in %{count}\",\"inclusion\":\"is not included in the list\",\"invalid\":\"is invalid\",\"less_than\":\"must be less than %{count}\",\"less_than_or_equal_to\":\"must be less than or equal to %{count}\",\"model_invalid\":\"Validation failed: %{errors}\",\"not_a_number\":\"is not a number\",\"not_an_integer\":\"must be an integer\",\"not_found\":\"not found\",\"not_locked\":\"was not locked\",\"not_saved\":{\"one\":\"1 error prohibited this %{resource} from being saved:\",\"other\":\"%{count} errors prohibited this %{resource} from being saved:\"},\"odd\":\"must be odd\",\"other_than\":\"must be other than %{count}\",\"password_complexity\":{\"digit\":{\"one\":\"muss mindestens eine Ziffer enthalten\",\"other\":\"muss mindestens %{count} Ziffern enthalten\"},\"lower\":{\"one\":\"muss mindestens einen Kleinbuchstaben enthalten\",\"other\":\"muss mindestens %{count} Kleinbuchstaben enthalten\"},\"symbol\":{\"one\":\"muss mindestens ein Sonderzeichen enthalten\",\"other\":\"muss mindestens %{count} Sonderzeichen enthalten\"},\"upper\":{\"one\":\"muss mindestens einen Großbuchstaben enthalten\",\"other\":\"muss mindestens %{count} Großbuchstaben enthalten\"}},\"password_format\":\"Must contain uppercase AND lowercase letters and at least one number\",\"password_too_long\":\"is too long\",\"present\":\"must be blank\",\"required\":\"must exist\",\"taken\":\"has already been taken\",\"taken_in_past\":\"wurde bereits in der Vergangenheit verwendet.\",\"too_long\":{\"one\":\"is too long (maximum is 1 character)\",\"other\":\"is too long (maximum is %{count} characters)\"},\"too_short\":{\"one\":\"is too short (minimum is 1 character)\",\"other\":\"is too short (minimum is %{count} characters)\"},\"wrong_length\":{\"one\":\"is the wrong length (should be 1 character)\",\"other\":\"is the wrong length (should be %{count} characters)\"}}},\"flash\":{\"actions\":{\"create\":{\"notice\":\"%{resource_name} was successfully created.\"},\"destroy\":{\"alert\":\"%{resource_name} could not be destroyed.\",\"notice\":\"%{resource_name} was successfully destroyed.\"},\"update\":{\"notice\":\"%{resource_name} was successfully updated.\"}}},\"hello_world\":\"Hello world\",\"helpers\":{\"select\":{\"prompt\":\"Please select\"},\"submit\":{\"create\":\"Create %{model}\",\"submit\":\"Save %{model}\",\"update\":\"Update %{model}\"}},\"hi\":\"Hi\",\"mailers\":{\"common\":{\"chummy_sign_off\":\"Have a good one.\",\"final_note\":\"P.S.: If you think you received this email accidentally, then something weird could be going on. Hit reply and a member of the %{brand_name} team will investigate.\",\"team_sign_off\":\"- The %{brand_name} Team\"},\"confirmation_instructions_email\":{\"crm\":{\"salesforce\":{\"resource_confirmed\":\"Someone has requested a resend of a confirmation email. You do not need to confirm your email address because your account is configured to use Salesforce to sign in.\",\"resource_unconfirmed\":\"You do not need to confirm your email address because your account is configured to use Salesforce to sign in, please complete the sign up process by clicking the button below to sign in to %{brand_name} via Salesforce.\"}},\"non_crm\":{\"confirm_link\":\"Confirm my account\",\"welcome\":\"Welcome to %{brand_name}. As the final step in the process you\\'ll need to confirm your account by clicking on the link below.\"},\"subject\":\"Confirmation instructions for %{domain}\"},\"flagged_events_mailer\":{\"from\":\"Flagged events - %{brand_name} \\\\u003cflagged_events@mailer.%{domain}\\\\u003e\"},\"mobile_registration_email\":{\"alert_cs_registration_locked\":{\"subject\":\"%{brand_name}: user has had mobile registration locked, too many failed attempts\"},\"dispatch_registration_PIN\":{\"further_instructions\":\"If you are NOT attempting to register for the %{brand_name} Mobile app then please let us know at %{support_email_link} - thank you.\",\"introduction\":\"Here is your mobile app registration PIN:\",\"subject\":\"%{brand_name} Mobile Registration Verification\"},\"too_many_failed_attempts\":{\"introduction\":\"We have received too many failed mobile device registration attempts for your account and we will block any further requests. If you have not attempted to register a mobile device with us in the last hour then please let us know as it is likely someone has tried on your behalf. If you have been trying to register a device please contact %{support_email_link} and we can help unlock your account and get you registered.\",\"subject\":\"%{brand_name}: too many failed registration attempts\"}},\"org_list_download_mail\":{\"dispatch_link\":{\"introduction\":\"We have finished meshing your %{crm_brand_name} data with the companies in your \\\\\"%{list_name}\\\\\" list.\",\"subject\":\"%{brand_name}: your file download of \\'%{list_name}\\' is ready\"},\"failed\":{\"instructions\":\"You could try again in a little while. If you already have and are receiving this email again, please contact us at %{support_email_link}\",\"introduction\":\"We are really sorry, but something went wrong with creating your download of %{crm_brand_name} data for your \\\\\"%{list_name}\\\\\" list.\",\"subject\":\"%{brand_name}: your file download of \\'%{list_name}\\' failed\"}},\"reset_password_instructions_email\":{\"crm\":{\"salesforce\":{\"change_requested\":\"Someone has requested a change to your password. Your account is configured to use Salesforce to sign in.\"}},\"fishy_fine_print\":\"If you did not request a password change, then something weird is going on. Someone may be trying to access your account (unsuccessfully). Please reply to this email and let us know. We will take steps to make sure it stops.\",\"non_crm\":{\"change_password_link\":\"Change my password\",\"change_requested\":\"Someone has requested a change to your password, you can do this via the link below.\"},\"subject\":\"Password reset instructions for %{domain}\"},\"sales_force_mail\":{\"processing_completed\":{\"bullet_points\":[\"Only show events associated with companies in your Salesforce account\",\"Add new contacts and accounts to your Salesforce account without leaving %{brand_name}\",\"Access the \\'Salesforce details\\' panel on company dashboards where you can see open tasks, team interactions, opportunities, and more!\"],\"further_instructions\":\"We\\'re here to help. If you run into any questions or challenges, please contact us at %{support_email_link} and a member of our team would be more than happy to help.\",\"get_the_most\":\"To get the most from the integration, check out the \\'Mine Salesforce for opportunities\\' guide in the Help Center.\",\"guide_button\":\"Take me to the guide\",\"introduction\":\"Good news - your Salesforce account is now integrated with %{brand_name}. Now you’ll be able to:\"}},\"segment_contact\":{\"report_manager\":{\"fail_subject\":\"%{brand_name}: The PDF report generation failed\",\"success_subject\":\"%{brand_name}: Your PDF for %{company_name} is attached\"}},\"sf_token_expiry_email\":{\"further_instructions\":\"If you run into any questions or challenges, please contact us at %{support_email_link} and a member of our team would be more than happy to help.\",\"introduction\":\"Unfortunately the connection established for you between %{brand_name} and your %{crm_brand_name} account has expired. We will not be able to update your lists in %{brand_name} to reflect your %{crm_brand_name} database. To re-establish the connection, you just need to log in to %{brand_name} using your %{crm_brand_name}.\",\"subject\":\"%{brand_name} to %{crm_brand_name} connection has expired\"},\"share_list_mail\":{\"introduction\":\"%{user_name} shared a list with you: \",\"subject\":\"[%{brand_name} - shared list] %{list_name}\"},\"trial_expiry_mail\":{\"seven_days_to_go\":{\"further_instructions\":\"A member of our fabulous Customer Success team will arrange a welcome call with you to understand your goals and priorities, and will then give you a personalized Tour de %{brand_name} so you can easily access the information that is most valuable to you.\",\"instructions\":\"If you\\'d like continued access to the platform with our flexible month-to-month subscription, please ensure you contact %{support_email_link} ahead of: %{deadline}\",\"introduction\":\"Time flies when you\\'re uncovering new business opportunities! Your %{brand_name} trial is coming to an end next week.\",\"sign_off\":\"We look forward to helping you reach your sales goals!\",\"subject\":\"Just a heads up that your %{brand_name} trial is ending in seven days\"},\"seven_days_to_go_warning_for_cs\":{\"introduction\":\"%{user_name} shared a list with you: \",\"subject\":\"[%{brand_name} - shared list] %{list_name}\"}},\"unlock_instructions_email\":{\"crm\":{\"salesforce\":{\"change_requested\":\"You are being sent this email either because of one too many unsuccessful non-Salesforce log-in attempts or someone has requested an unlock email. %{brand_name} has not locked your account because your account is configured to use Salesforce to sign in.\",\"password_forgotten\":\"If you have forgotten your Salesforce password or think your account has been locked by Salesforce, please follow the instructions provided on the Salesforce sign in page.\"}},\"fishy_fine_print\":\"If you have not been (unsuccessfully) trying to log in to your account, then something weird is going on. Someone may be trying to access your account (unsuccessfully). Please reply to this email and let us know. We will take steps to make sure it stops.\",\"non_crm\":{\"change_requested\":\"For security reasons we have locked your account because of too many log-in attempts. To unlock your account, click the link below.\",\"unlock_account_link\":\"Unlock my account\"},\"subject\":\"Unlock instructions for %{domain}\"}},\"mongoid\":{\"errors\":{\"messages\":{\"ambiguous_relationship\":{\"message\":\"Ambiguous associations %{candidates} defined on %{klass}.\",\"resolution\":\"On the %{name} association on %{inverse} you must add an :inverse_of option to specify the exact association on %{klass} that is the opposite of %{name}.\",\"summary\":\"When Mongoid attempts to set an inverse document of an association in memory, it needs to know which association it belongs to. When setting %{name}, Mongoid looked on the class %{inverse} for a matching association, but multiples were found that could potentially match: %{candidates}.\"},\"blank_in_locale\":\"can\\'t be blank in %{location}\",\"callbacks\":{\"message\":\"Calling %{method} on %{klass} resulted in a false return from a callback.\",\"resolution\":\"Double check all before callbacks to make sure they are not unintentionally returning false.\",\"summary\":\"If a before callback returns false when using Document.create!, Document#save!, or Document#update_attributes! this error will get raised since the document did not actually get saved.\"},\"calling_document_find_with_nil_is_invalid\":{\"message\":\"Calling Document.find with nil is invalid.\",\"resolution\":\"Most likely this is caused by passing parameters directly through to the find, and the parameter either is not present or the key from which it is accessed is incorrect.\",\"summary\":\"Document.find expects the parameters to be 1 or more ids, and will return a single document if 1 id is provided, otherwise an array of documents if multiple ids are provided.\"},\"create_collection_failure\":{\"message\":\"Cannot create collection %{collection_name} with options %{collection_options}. The following error was raised: %{error}.\",\"resolution\":\"Double check that collection options for the collection %{collection_name} are valid. Consult with Ruby driver documentation and MongoDB documentation if the desired options are supported by your version of the server.\",\"summary\":\"The server rejected createCollection command with given collection options. This may happen when some of the options are invalid, or not supported by your version of the server.\"},\"criteria_argument_required\":{\"message\":\"Calling Criteria methods with nil arguments is not allowed.\",\"resolution\":\"Invoke Criteria methods with non-nil arguments or omit the respective invocations.\",\"summary\":\"Arguments to Criteria methods cannot be nil, and most Criteria methods require at least one argument. Only logical operations (and, or, nor and not), `all\\' and `where\\' can be called without arguments. The method that was called with nil argument was: %{query_method}.\"},\"delete_restriction\":{\"message\":\"Cannot destroy %{document} because of dependent \\'%{relation}\\'.\",\"resolution\":\"Don\\'t attempt to delete the parent %{document} when it has children, or change the dependent option on the association.\",\"summary\":\"When defining \\'%{relation}\\' with a :dependent =\\\\u003e :restrict_with_error, Mongoid will raise an error when attempting to destroy the %{document} when the child \\'%{relation}\\' still has documents in it.\"},\"destroy_restrict_with_error_dependencies_exist\":\"is not empty and prevents the document from being destroyed\",\"document_not_destroyed\":{\"message\":\"%{klass} with id %{id} was not destroyed.\",\"resolution\":\"Check the before/after destroy callbacks to ensure that the return values are truthy for the chain to continue.\",\"summary\":\"When calling %{klass}#destroy! and a callback halts the destroy callback chain by returning a false value, the deletion will not actually occur.\"},\"document_not_found\":{\"message\":\"Document(s) not found for class %{klass} with id(s) %{missing}.\",\"resolution\":\"Search for an id that is in the database or set the Mongoid.raise_not_found_error configuration option to false, which will cause nil to be returned instead of raising this error when searching for a single id, or only the matched documents when searching for multiples.\",\"summary\":\"When calling %{klass}.find with an id or array of ids, each parameter must match a document in the database or this error will be raised. The search was for the id(s): %{searched} (%{total} total) and the following ids were not found: %{missing}.\"},\"document_with_attributes_not_found\":{\"message\":\"Document not found for class %{klass} with attributes %{attributes}.\",\"resolution\":\"Search for attributes that are in the database or set the Mongoid.raise_not_found_error configuration option to false, which will cause nil to be returned instead of raising this error.\",\"summary\":\"When calling %{klass}.find_by with a hash of attributes, all attributes provided must match a document in the database or this error will be raised.\"},\"document_with_shard_key_not_found\":{\"message\":\"Document not found for class %{klass} with id %{missing} and shard key %{shard_key}.\",\"resolution\":\"Search for an id/shard key that is in the database or set the Mongoid.raise_not_found_error configuration option to false, which will cause nil to be returned instead of raising this error.\",\"summary\":\"When calling %{klass}.find with an id and a shard key, each parameter must match a document in the database or this error will be raised. The search was for the id: %{missing} with shard_key: %{shard_key} and it was not found.\"},\"drop_collection_failure\":{\"message\":\"Cannot drop collection %{collection_name}.\",\"resolution\":\"Try to drop the collection manually using Ruby driver or mongo shell.\",\"summary\":\"Mongoid tried to drop collection %{collection_name}, but the collection still exists in the database.\"},\"empty_config_file\":{\"message\":\"Empty configuration file: %{path}.\",\"resolution\":\"Ensure your configuration file contains the correct contents. Refer to: https://www.mongodb.com/docs/mongoid/current/reference/configuration/\",\"summary\":\"Your mongoid.yml configuration file appears to be empty.\"},\"immutable_attribute\":{\"message\":\"Attempted to change the immutable attribute \\'%{name}\\' with the value: %{value}.\",\"resolution\":\"Do not attempt to update the value of \\'%{name}\\' after the document is persisted.\",\"summary\":\"Immutable attributes can only have values set when the document is a new record.\"},\"in_memory_collation_not_supported\":{\"message\":\"A collation option cannot be applied when querying documents in-memory.\",\"resolution\":\"Remove the collation option from the query.\",\"summary\":\"The query being run against documents in memory has a collation option set. A collation option is only supported if the query is executed on a MongoDB server with version \\\\u003e= 3.4.\"},\"invalid_async_query_executor\":{\"message\":\"Invalid async_query_executor option: %{executor}.\",\"resolution\":\"Pick an allowed option or fix the typo. If you were expecting the option to be there, please consult the following page with respect to Mongoid\\'s configuration:\\\\n\\\\n   https://www.mongodb.com/docs/mongoid/current/reference/configuration/#mongoid-configuration-options\",\"summary\":\"A invalid async query executor was specified. The valid options are: %{options}.\"},\"invalid_collection\":{\"message\":\"Access to the collection for %{klass} is not allowed.\",\"resolution\":\"For access to the collection that the embedded document is in, use %{klass}#_root.collection, or do not attempt to persist an embedded document without a parent set.\",\"summary\":\"%{klass}.collection was called, and %{klass} is an embedded document - it resides within the collection of the root document of the hierarchy.\"},\"invalid_config_file\":{\"message\":\"Invalid configuration file: %{path}.\",\"resolution\":\"Ensure your configuration file contains the correct contents. Refer to: https://www.mongodb.com/docs/mongoid/current/reference/configuration/\",\"summary\":\"Your mongoid.yml configuration file does not contain the correct file structure.\"},\"invalid_config_option\":{\"message\":\"Invalid configuration option: %{name}.\",\"resolution\":\"Remove the invalid option or fix the typo. If you were expecting the option to be there, please consult the following page with respect to Mongoid\\'s configuration:\\\\n\\\\n   http://mongoid.org/en/mongoid/docs/installation.html\",\"summary\":\"A invalid configuration option was provided in your mongoid.yml, or a typo is potentially present. The valid configuration options are: %{options}.\"},\"invalid_dependent_strategy\":{\"message\":\"Invalid dependent strategy: %{invalid_strategy}.\",\"resolution\":\"Change the dependent strategy to one of the valid types.\",\"summary\":\"An invalid dependent strategy was defined for the association: %{association}. The valid strategies are: %{valid_strategies}.\"},\"invalid_discriminator_key_target\":{\"message\":\"Setting the discriminator key on a child class is not allowed.\",\"resolution\":\"Try setting the discriminator key on %{superclass} or one of %{class_name}\\'s ancestors.\",\"summary\":\"The discriminator key on the class %{class_name} was attempted to be changed. Changing the discriminator key on a child class is not allowed.\"},\"invalid_dot_dollar_assignment\":{\"message\":\"Cannot set the %{attr} attribute on the %{klass} class.\",\"resolution\":\"In order to set fields that start with a dollar sign ($) or contain a dot/period (.), the aggregation pipeline can be used. MongoDB provides specific operators for working with these fields. Refer to the MongoDB documentation here: https://www.mongodb.com/docs/manual/core/dot-dollar-considerations/\",\"summary\":\"Calling the setters for fields that start with a dollar sign ($) or contain a dot/period (.) is prohibited. See the Mongoid documentation on Field Names with Dots/Periods (.) and Dollar Signs ($) for more information.\"},\"invalid_elem_match_operator\":{\"message\":\"Invalid $elemMatch operator \\'%{operator}\\'.\",\"resolution\":\"Valid field operators are: %{valid_operators}. Ensure you are using one of these operators.\",\"summary\":\"You misspelled an operator or are using an operator that Mongoid does not support.\"},\"invalid_estimated_count_criteria\":{\"message\":\"Invalid criteria for estimated_count.\",\"resolution\":\"Try calling estimated_count directly on the class: %{class_name}.estimated_count.\\\\n\\\\n  If the class defines a default scope, use unscoped: %{class_name}.unscoped.estimated_count.\",\"summary\":\"Estimated count is strictly a collection-level operation and cannot be called on a filtered criteria.\"},\"invalid_expression_operator\":{\"message\":\"Invalid expression operator \\'%{operator}\\'.\",\"resolution\":\"Valid expression operators are: %{valid_operators}. Ensure you are using one of these operators.\",\"summary\":\"You misspelled an operator, are using an operator that Mongoid does not support, or are trying to use a field-level operator on expression level.\"},\"invalid_field\":{\"message\":\"Defining a field named \\'%{field}\\' is not allowed.\",\"resolution\":\"Use Mongoid.destructive_fields to see what names are not allowed, and don\\'t use these names. These include names that also conflict with core Ruby methods on Object, Module, Enumerable, or included gems that inject methods into these or Mongoid internals.\",\"summary\":\"Defining this field would override the method \\'%{name}\\', which would cause issues with expectations around the original method and cause extremely hard to debug issues. The original method was defined in:\\\\n   Object: %{origin}\\\\n   File: %{file}\\\\n   Line: %{line}\"},\"invalid_field_operator\":{\"message\":\"Invalid field operator \\'%{operator}\\'.\",\"resolution\":\"Valid field operators are: %{valid_operators}. Ensure you are using one of these operators.\",\"summary\":\"You misspelled an operator, are using an operator that Mongoid does not support, or are trying to use an expression-level operator on field level.\"},\"invalid_field_option\":{\"message\":\"Invalid option :%{option} provided for field :%{name}.\",\"resolution\":\"When defining the field :%{name} on \\'%{klass}\\', please provide valid options for the field. These are currently: %{valid}. If you meant to define a custom field option, please do so first as follows:\\\\n\\\\n   Mongoid::Fields.option :%{option} do |model, field, value|\\\\n     # Your logic here...\\\\n   end\\\\n   class %{klass}\\\\n     include Mongoid::Document\\\\n     field :%{name}, %{option}: true\\\\n   end\\\\n\\\\n Refer to: https://www.mongodb.com/docs/mongoid/current/reference/fields/#custom-field-options\",\"summary\":\"Mongoid requires that you only provide valid options on each field definition in order to prevent unexpected behavior later on.\"},\"invalid_field_type\":{\"message\":\"Invalid field type %{type_inspection} for field \\'%{field}\\' on model \\'%{klass}\\'.\",\"resolution\":\"Please provide a valid type value for the field. Refer to: https://www.mongodb.com/docs/mongoid/current/reference/fields/#using-symbols-or-strings-instead-of-classes\",\"summary\":\"Model \\'%{klass}\\' defines a field \\'%{field}\\' with an unknown type value %{type_inspection}.\"},\"invalid_global_executor_concurrency\":{\"message\":\"Invalid global_executor_concurrency option.\",\"resolution\":\"Set global_executor_concurrency option to :global_thread_pool or remove global_executor_concurrency option.\",\"summary\":\"You set global_executor_concurrency while async_query_executor option is not set to :global_thread_pool. The global_executor_concurrency is allowed only for the global thread pool executor.\"},\"invalid_includes\":{\"message\":\"Invalid includes directive: %{klass}.includes(%{args})\",\"resolution\":\"Ensure that each parameter passed to %{klass}.includes is a valid name of an association on the %{klass} model. These are: %{relations}.\",\"summary\":\"Eager loading in Mongoid only supports providing arguments to %{klass}.includes that are the names of associations on the %{klass}.\"},\"invalid_index\":{\"message\":\"Invalid index specification on %{klass}: %{spec}, %{options}\",\"resolution\":\"Ensure that the index conforms to the correct syntax and has the correct options.\\\\n\\\\n Valid options are:\\\\n   background: true|false\\\\n   database: \\'database_name\\'\\\\n   name: \\'index_name\\'\\\\n   sparse: true|false\\\\n   unique: true|false\\\\n   min: 1\\\\n   max: 1\\\\n   bits: 26\\\\n   key: 26\\\\n   bucket_size : 1\\\\n   sphere_version : 1\\\\n   text_version : 1\\\\n   version : 1\\\\n   weights: { content: 1, title: 2 }\\\\n   expire_after_seconds: number_of_seconds\\\\n   partial_filter_expression\\\\n   storage_engine\\\\n   language_override\\\\n   default_language\\\\n   collation\\\\n   wildcard_projection: { \\'path.to.field.a\\': 1, \\'path.to.field.b\\': 0 }\\\\n Valid types are: 1, -1, \\'2d\\', \\'2dsphere\\', \\'geoHaystack (deprecated)\\', \\'text\\', \\'hashed\\'\\\\n\\\\n Example:\\\\n   class Band\\\\n     include Mongoid::Document\\\\n     index({ name: 1, label: -1 }, { sparse: true })\\\\n     index({ location: \\'2d\\' }, { background: true })\\\\n   end\\\\n\\\\n\",\"summary\":\"Indexes in Mongoid are defined as a hash of field name and direction/2d pairs, with a hash for any additional options.\"},\"invalid_options\":{\"message\":\"Invalid option :%{invalid} provided to association :%{name}.\",\"resolution\":\"Valid options are: %{valid}, make sure these are the ones you are using.\",\"summary\":\"Mongoid checks the options that are passed to the association macros to ensure that no ill side effects occur by letting something slip by.\"},\"invalid_path\":{\"message\":\"Having a root path assigned for %{klass} is invalid.\",\"resolution\":\"Most likely your embedded model, %{klass} is also referenced via a has_many from a root document in another collection. Double check the association definitions and fix any instances where embedded documents are improperly referenced from other collections.\",\"summary\":\"Mongoid has two different path objects for determining the location of a document in the database, Root and Embedded. This error is raised when an embedded document somehow gets a root path assigned.\"},\"invalid_persistence_option\":{\"message\":\"Invalid persistence option :%{invalid}.\",\"resolution\":\"Valid options are: %{valid}, make sure these are the ones you are using.\",\"summary\":\"The options used to change the persistence context must be one of the valid options for a mongo client, or a collection name.\"},\"invalid_relation\":{\"message\":\"Defining an association named \\'%{name}\\' is not allowed.\",\"resolution\":\"Use Mongoid.destructive_fields to see what names are not allowed, and don\\'t use these names. These include names that also conflict with core Ruby methods on Object, Module, Enumerable, or included gems that inject methods into these or Mongoid internals.\",\"summary\":\"Defining this association would override the method \\'%{name}\\', which would cause issues with expectations around the original method and cause extremely hard to debug issues. The original method was defined in:\\\\n   Object: %{origin}\\\\n   File: %{file}\\\\n   Line: %{line}\"},\"invalid_relation_option\":{\"message\":\"Invalid association option :%{option} for association \\'%{name}\\' on class %{klass}.\",\"resolution\":\"Valid options are: %{valid_options}, make sure you use only those.\",\"summary\":\"An invalid option was provided for an association.\"},\"invalid_scope\":{\"message\":\"Defining a scope of value %{value} on %{klass} is not allowed.\",\"resolution\":\"Change the scope to be a proc wrapped criteria.\\\\n\\\\n Example:\\\\n   class Band\\\\n     include Mongoid::Document\\\\n     scope :inactive, -\\\\u003e{ where(active: false) }\\\\n   end\\\\n\\\\n\",\"summary\":\"Scopes in Mongoid must be procs that wrap criteria objects.\"},\"invalid_session_nesting\":{\"message\":\"A session was started while another session was being used.\",\"resolution\":\"Only use one session at a time; sessions cannot be nested.\",\"summary\":\"Sessions cannot be nested. Only one session can be used in a thread at once.\"},\"invalid_session_use\":{\"message\":\"A session was attempted to be used with a model whose client cannot use that session.\",\"resolution\":\"Only execute operations on the model class or instances of the model through which the session was created. Otherwise, ensure that all models on which operations are executed in the session block share the same driver client. For example, a model may have a different client specified in its \\'store_in\\' options.\\\\n\\\\n\",\"summary\":\"Sessions are started via driver clients (Model#mongo_client) and, in most cases, driver clients are shared across models. When different models have their own clients, a session cannot be obtained via one model and used for operations on another model.\"},\"invalid_set_polymorphic_relation\":{\"message\":\"The %{name} attribute can\\'t be set to an instance of %{other_klass} as %{other_klass} has multiple associations referencing %{klass} as %{name}.\",\"resolution\":\"Set the values from the parent, or redefine the association with only a single definition in the parent.\",\"summary\":\"If the parent class of a polymorphic association has multiple definitions for the same association, the values must be set from the parent side and not the child side since Mongoid cannot determine from the child side which association to go in.\"},\"invalid_storage_options\":{\"message\":\"Invalid options passed to %{klass}.store_in: %{options}.\",\"resolution\":\"Change the options passed to store_in to match the documented API, and ensure all keys in the options hash are symbols.\\\\n\\\\n Example:\\\\n   class Band\\\\n     include Mongoid::Document\\\\n     store_in collection: \\'artists\\', database: \\'music\\'\\\\n   end\\\\n\\\\n\",\"summary\":\"The :store_in macro takes only a hash of parameters with the keys :database, :collection, :collection_options, or :client.\"},\"invalid_time\":{\"message\":\"\\'%{value}\\' is not a valid Time.\",\"resolution\":\"Make sure to pass parsable values to the field setter for Date, DateTime, and Time objects. When this is a String it needs to be valid for Time.parse. Other objects must be valid to pass to Time.local.\",\"summary\":\"Mongoid tries to serialize the values for Date, DateTime, and Time into proper UTC times to store in the database. The provided value could not be parsed.\"},\"inverse_not_found\":{\"message\":\"When adding a(n) %{klass} to %{base}#%{name}, Mongoid could not determine the inverse foreign key to set. The attempted key was \\'%{inverse}\\'.\",\"resolution\":\"If an inverse is not required, like a belongs_to or has_and_belongs_to_many, ensure that :inverse_of =\\\\u003e nil is set on the association. If the inverse is needed, most likely the inverse cannot be figured out from the names of the associations and you will need to explicitly tell Mongoid on the association what the inverse is.\\\\n\\\\n Example:\\\\n   class Car\\\\n     include Mongoid::Document\\\\n     has_one :engine, class_name: \\\\\"Motor\\\\\", inverse_of: :machine\\\\n   end\\\\n\\\\n   class Motor\\\\n     include Mongoid::Document\\\\n     belongs_to :machine, class_name: \\\\\"Car\\\\\", inverse_of: :engine\\\\n   end\",\"summary\":\"When adding a document to an association, Mongoid attempts to link the newly added document to the base of the association in memory, as well as set the foreign key to link them on the database side. In this case Mongoid could not determine what the inverse foreign key was.\"},\"message_title\":\"message\",\"mixed_client_configuration\":{\"message\":\"Both uri and standard configuration options defined for client: \\'%{name}\\'.\",\"resolution\":\"Provide either only a uri as configuration or only standard options.\",\"summary\":\"Instead of simply giving uri or standard options a preference order, Mongoid assumes that you have made a mistake in your configuration and requires that you provide one or the other, but not both. The options that were provided were: %{config}.\"},\"mixed_relations\":{\"message\":\"Referencing a(n) %{embedded} document from the %{root} document via a non-embedded association is not allowed since the %{embedded} is embedded.\",\"resolution\":\"Consider not embedding %{embedded}, or do the key storage and access in a custom manner in the application code.\",\"summary\":\"In order to properly access a(n) %{embedded} from %{root} the reference would need to go through the root document of %{embedded}. In a simple case this would require Mongoid to store an extra foreign key for the root, in more complex cases where %{embedded} is multiple levels deep a key would need to be stored for each parent up the hierarchy.\"},\"nested_attributes_metadata_not_found\":{\"message\":\"Could not find metadata for association \\'%{name}\\' on model: %{klass}.\",\"resolution\":\"Make sure that there is an association defined named \\'%{name}\\' on %{klass} or that the association definition comes before the accepts_nested_attributes_for macro in the model - order matters so that Mongoid has access to the metadata.\\\\n\\\\n Example:\\\\n   class Band\\\\n     include Mongoid::Document\\\\n     has_many :albums\\\\n     accepts_nested_attributes_for :albums\\\\n   end\\\\n\\\\n\",\"summary\":\"When defining nested attributes for an association, Mongoid needs to access the metadata for the association \\'%{name}\\' in order if add autosave functionality to it, if applicable. Either no association named \\'%{name}\\' could be found, or the association had not been defined yet.\"},\"no_client_config\":{\"message\":\"No configuration could be found for a client named \\'%{name}\\'.\",\"resolution\":\"Double check your mongoid.yml to make sure under the clients key that a configuration exists for \\'%{name}\\'. If you have set the configuration programmatically, ensure that \\'%{name}\\' exists in the configuration hash.\",\"summary\":\"When attempting to create the new client, Mongoid could not find a client configuration for the name: \\'%{name}\\'. This is necessary in order to know the host, port, and options needed to connect.\"},\"no_client_database\":{\"message\":\"No database provided for client configuration: :%{name}.\",\"resolution\":\"If configuring via a mongoid.yml, ensure that within your :%{name} section a :database value for the client\\'s default database is defined.\\\\n\\\\n Example:\\\\n   development:\\\\n     clients:\\\\n       %{name}:\\\\n         database: my_app_db\\\\n         hosts:\\\\n           - localhost:27017\\\\n\\\\n\",\"summary\":\"Each client configuration must provide a database so Mongoid knows where the default database to persist to. What was provided was: %{config}.\"},\"no_client_hosts\":{\"message\":\"No hosts provided for client configuration: :%{name}.\",\"resolution\":\"If configuring via a mongoid.yml, ensure that within your :%{name} section a :hosts value for the client hosts is defined.\\\\n\\\\n Example:\\\\n   development:\\\\n     clients:\\\\n       %{name}:\\\\n         database: my_app_db\\\\n         hosts:\\\\n           - localhost:27017\\\\n\\\\n\",\"summary\":\"Each client configuration must provide hosts so Mongoid knows where the database server is located. What was provided was: %{config}.\"},\"no_clients_config\":{\"message\":\"No clients configuration provided.\",\"resolution\":\"Double check your mongoid.yml to make sure that you have a top-level clients key with at least 1 default client configuration for it. You can regenerate a new mongoid.yml for assistance via `rails g mongoid:config`.\\\\n\\\\n Example:\\\\n   development:\\\\n     clients:\\\\n       default:\\\\n         database: mongoid_dev\\\\n         hosts:\\\\n           - localhost:27017\\\\n\\\\n\",\"summary\":\"Mongoid\\'s configuration requires that you provide details about each client that can be connected to, and requires in the clients config at least 1 default client to exist.\"},\"no_default_client\":{\"message\":\"No default client configuration is defined.\",\"resolution\":\"If configuring via a mongoid.yml, ensure that within your :clients section a :default client is defined.\\\\n\\\\n Example:\\\\n   development:\\\\n     clients:\\\\n       default:\\\\n         hosts:\\\\n           - localhost:27017\\\\n\\\\n\",\"summary\":\"The configuration provided settings for: %{keys}, but Mongoid requires a :default to be defined at minimum.\"},\"no_documents_found\":{\"message\":\"Could not find a document of class %{klass}.\",\"resolution\":\"Create a document of class %{klass} or use a finder method that does not raise an exception when no documents are found.\",\"summary\":\"Mongoid attempted to find a document of the class %{klass} but none exist.\"},\"no_environment\":{\"message\":\"Could not load the configuration since no environment was defined.\",\"resolution\":\"Please ensure an environment is set in one of the listed locations. The environment must be explicitly set.\",\"summary\":\"Mongoid could not determine the environment to use because it was not specified in any of the following locations: Rails.env, Sinatra::Base.environment, ENV[\\\\\"RACK_ENV\\\\\"], ENV[\\\\\"MONGOID_ENV\\\\\"]. Without knowing the environment, Mongoid cannot load its configuration.\"},\"no_map_reduce_output\":{\"message\":\"No output location was specified for the map/reduce operation.\",\"resolution\":\"Provide the location that the output of the operation is to go by chaining an #out call to the map/reduce.\\\\n\\\\n Example:\\\\n   Band.map_reduce(map, reduce).out(inline: 1)\\\\n\\\\n Valid options for the out function are:\\\\n   inline: 1\\\\n   merge: \\'collection-name\\'\\\\n   replace: \\'collection-name\\'\\\\n   reduce: \\'collection-name\\'\\\\n\\\\n\",\"summary\":\"When executing a map/reduce, you must provide the output location of the results. The attempted command was: %{command}.\"},\"no_metadata\":{\"message\":\"Metadata not found for document of type %{klass}.\",\"resolution\":\"Ensure that your associations on the %{klass} model are all properly defined, and that the inverse associations are also properly defined. Embedded associations must have both the parent (embeds_one/embeds_many) and the inverse (embedded_in) present in order to work properly.\",\"summary\":\"Mongoid sets the metadata of an association on the document when it is either loaded from within the association, or added to one. The presence of the metadata is required in order to provide various functionality around associations. Most likely you are getting this error because the document is embedded and was attempted to be persisted without being associated with a parent, or the association was not properly defined.\"},\"no_parent\":{\"message\":\"Cannot persist embedded document %{klass} without a parent document.\",\"resolution\":\"Ensure that you\\'ve set the parent association if instantiating the embedded document directly, or always create new embedded documents via the parent association.\",\"summary\":\"If the document is embedded, in order to be persisted it must always have a reference to its parent document. This is most likely caused by either calling %{klass}.create or %{klass}.create! without setting the parent document as an attribute.\"},\"readonly_attribute\":{\"message\":\"Attempted to set the readonly attribute \\'%{name}\\' with the value: %{value}.\",\"resolution\":\"Don\\'t define \\'%{name}\\' as readonly, or do not attempt to update its value after the document is persisted.\",\"summary\":\"Attributes flagged as readonly via Model.attr_readonly can only have values set when the document is a new record.\"},\"readonly_document\":{\"message\":\"Attempted to persist a readonly document of class \\'%{klass}\\'.\",\"resolution\":\"Don\\'t attempt to persist documents that are flagged as readonly.\",\"summary\":\"Documents that are marked readonly cannot be persisted.\"},\"resolution_title\":\"resolution\",\"scope_overwrite\":{\"message\":\"Cannot create scope :%{scope_name}, because of existing method %{model_name}.%{scope_name}.\",\"resolution\":\"Change the name of the scope so it does not conflict with the already defined method %{model_name}, or set the configuration option Mongoid.scope_overwrite_exception to false, which is its default. In this case a warning will be logged.\",\"summary\":\"When defining a scope that conflicts with a method that already exists on the model, this error will get raised if Mongoid.scope_overwrite_exception is set to true.\"},\"sessions_not_supported\":{\"message\":\"Sessions are not supported by the connected server(s).\",\"resolution\":\"Verify that all servers in your deployment are at least version 3.6 or don\\'t attempt to use sessions with older server versions.\",\"summary\":\"A session was attempted to be used with a MongoDB server version that doesn\\'t support sessions. Sessions are supported in MongoDB server versions 3.6 and higher.\"},\"summary_title\":\"summary\",\"too_many_nested_attribute_records\":{\"message\":\"Accepting nested attributes for %{association} is limited to %{limit} documents.\",\"resolution\":\"The limit is set as an option to the macro, for example: accepts_nested_attributes_for :%{association}, limit: %{limit}. Consider raising this limit or making sure no more are sent than the set value.\",\"summary\":\"More documents were sent to be processed than the allowed limit.\"},\"unknown_attribute\":{\"message\":\"Attempted to set a value for \\'%{name}\\' which is not allowed on the model %{klass}.\",\"resolution\":\"Define the field \\'%{name}\\' in %{klass}, or include Mongoid::Attributes::Dynamic in %{klass} if you intend to store values in fields that are not explicitly defined.\",\"summary\":\"%{klass}#%{name}= was called but there is no \\'%{name}\\' field defined in the model, and Mongoid::Attributes::Dynamic is not included. This error is also raised instead of NoMethodError if the unknown attribute is passed to any method that accepts an attributes hash, such as #attributes=.\"},\"unknown_model\":{\"message\":\"Attempted to instantiate an object of the unknown model \\'%{klass}\\'.\",\"resolution\":\"The _type field is a reserved one used by Mongoid to determine the class for instantiating an object. Please don\\'t save data in this field or ensure that any values in this field correspond to valid models.\",\"summary\":\"A document with the value \\'%{value}\\' at the key \\'_type\\' was used to instantiate a model object but Mongoid cannot find this Class.\"},\"unsaved_document\":{\"message\":\"Attempted to save %{document} before the parent %{base}.\",\"resolution\":\"Make sure to only use create or create! when the parent document %{base} is persisted.\",\"summary\":\"You cannot call create or create! through the association (%{document}) whose parent (%{base}) is not already saved. This would cause the database to be out of sync since the child could potentially reference a nonexistent parent.\"},\"unsupported_javascript\":{\"message\":\"Executing Javascript $where selector on an embedded criteria is not supported.\",\"resolution\":\"Please provide a standard hash to #where when the criteria is for an embedded association.\",\"summary\":\"Mongoid only supports providing a hash of arguments to #where criterion on embedded documents. Since %{klass} is embedded, the expression %{javascript} is not allowed.\"},\"validations\":{\"message\":\"Validation of %{document} failed.\",\"resolution\":\"Try persisting the document with valid data or remove the validations.\",\"summary\":\"The following errors were found: %{errors}\"}}}},\"number\":{\"currency\":{\"format\":{\"delimiter\":\",\",\"format\":\"%u%n\",\"negative_format\":\"-%u%n\",\"precision\":2,\"separator\":\".\",\"significant\":false,\"strip_insignificant_zeros\":false,\"unit\":\"$\"}},\"format\":{\"delimiter\":\",\",\"precision\":3,\"round_mode\":\"default\",\"separator\":\".\",\"significant\":false,\"strip_insignificant_zeros\":false},\"human\":{\"decimal_units\":{\"format\":\"%n %u\",\"units\":{\"billion\":\"Billion\",\"million\":\"Million\",\"quadrillion\":\"Quadrillion\",\"thousand\":\"Thousand\",\"trillion\":\"Trillion\",\"unit\":\"\"}},\"format\":{\"delimiter\":\"\",\"precision\":3,\"significant\":true,\"strip_insignificant_zeros\":true},\"storage_units\":{\"format\":\"%n %u\",\"units\":{\"byte\":{\"one\":\"Byte\",\"other\":\"Bytes\"},\"eb\":\"EB\",\"gb\":\"GB\",\"kb\":\"KB\",\"mb\":\"MB\",\"pb\":\"PB\",\"tb\":\"TB\",\"zb\":\"ZB\"}}},\"nth\":{},\"percentage\":{\"format\":{\"delimiter\":\"\",\"format\":\"%n%\"}},\"precision\":{\"format\":{\"delimiter\":\"\"}}},\"simple_form\":{\"error_notification\":{\"default_message\":\"Please review the problems below:\"},\"no\":\"No\",\"required\":{\"mark\":\"*\",\"text\":\"required\"},\"yes\":\"Yes\"},\"support\":{\"array\":{\"last_word_connector\":\", and \",\"two_words_connector\":\" and \",\"words_connector\":\", \"}},\"time\":{\"am\":\"am\",\"formats\":{\"default\":\"%a, %d %b %Y %H:%M:%S %z\",\"long\":\"%B %d, %Y %H:%M\",\"short\":\"%d %b %H:%M\"},\"pm\":\"pm\"},\"users\":{\"confirmations\":{\"new\":{\"legend\":\"Resend your %{brand_name} confirmation instructions\",\"message\":\"We need to confirm your email address to complete the sign up process. Supply your email address, below, and we will send you instructions on how to confirm your address.\",\"submit_button\":\"Send Confirmation Instructions\",\"title\":\"Resend confirmation instructions | %{brand_name}\"},\"show\":{\"legend\":\"Check your inbox for a confirmation email\",\"message\":\"If your e-mail exists in our database we have sent you a message with instructions. Check your inbox (or spam folder) for a message from \\'%{default_from_email}\\' containing the confirmation link.\",\"title\":\"Awaiting confirmation | %{brand_name}\"}},\"passwords\":{\"new\":{\"failures\":\"Note: If you make more than 5 sequential failed attempts to sign in with your %{brand_name} password, your account will be (temporarily) locked. Check your inbox for instruction on how to unlock your account, or we can\",\"legend\":\"Reset your %{brand_name} password\",\"message\":\"Supply your email address, below, and we will send you instructions on how to reset your password.\",\"resend_link\":\"resend a new set of unlock instructions\",\"submit_button\":\"Send Reset Instructions\",\"title\":\"Reset password | %{brand_name}\"},\"show\":{\"didnt_receive_email\":\"Didn\\'t receive the email?\",\"legend\":\"Password reset instructions sent\",\"message\":\"If your e-mail exists in our database we have sent you a message with password reset instructions. Check your inbox (or spam folder) for a message from \\'%{default_from_email}\\'.\",\"resend_link\":\"you can request another one here\",\"title\":\"Awaiting reset | %{brand_name}\"}}},\"will_paginate\":{\"container_aria_label\":\"Pagination\",\"next_label\":\"Next \\\\u0026#8594;\",\"page_aria_label\":\"Page %{page}\",\"page_entries_info\":{\"multi_page\":\"Displaying %{model} %{from} - %{to} of %{count} in total\",\"multi_page_html\":\"Displaying %{model} \\\\u003cb\\\\u003e%{from}\\\\u0026nbsp;-\\\\u0026nbsp;%{to}\\\\u003c/b\\\\u003e of \\\\u003cb\\\\u003e%{count}\\\\u003c/b\\\\u003e in total\",\"single_page\":{\"one\":\"Displaying 1 %{model}\",\"other\":\"Displaying all %{count} %{model}\",\"zero\":\"No %{model} found\"},\"single_page_html\":{\"one\":\"Displaying \\\\u003cb\\\\u003e1\\\\u003c/b\\\\u003e %{model}\",\"other\":\"Displaying \\\\u003cb\\\\u003eall\\\\u0026nbsp;%{count}\\\\u003c/b\\\\u003e %{model}\",\"zero\":\"No %{model} found\"}},\"page_gap\":\"\\\\u0026hellip;\",\"previous_label\":\"\\\\u0026#8592; Previous\"}}'));\nI18n.translations[\"drug_development\"] = I18n.extend((I18n.translations[\"drug_development\"] || {}), JSON.parse('{\"activerecord\":{\"errors\":{\"messages\":{\"record_invalid\":\"Validation failed: %{errors}\",\"restrict_dependent_destroy\":{\"has_many\":\"Cannot delete record because dependent %{record} exist\",\"has_one\":\"Cannot delete record because a dependent %{record} exists\"}}}},\"brand\":{\"category_tool_tips\":{\"all_event\":\"Click to view all types of activity.\",\"alt_fund_grants\":\"Definition: sponsor company receives a grant from a government agency or non-profit charity.\",\"alt_fund_royalties\":\"Definition: sponsor receives payment of an upfront or milestone royalty.\",\"cf_finding\":\"Click to view only funding activity.\",\"cf_personnel\":\"Definition: sponsor company modifies its organizational structure.\",\"clin_fut_plans\":\"Definition: company mentions plans for future drug development activity.\",\"clin_movements\":\"Click to view only events related to drugs moving through development.\",\"fund_fin\":\"Definition: sponsor company discloses the fact that it raised money through debt or equity.\",\"ir_board_change\":\"Definition: sponsor company modifies the structure of its Board of Directors.\",\"ir_filings\":\"Definition: sponsor company makes a general announcement to its shareholders.\",\"ir_presentations\":\"Definition: sponsor company announces it will be presenting at an investor-focused conference.\",\"lgl_disputes\":\"Definition: sponsor company provides the public with an update to an ongoing legal dispute.\",\"lgl_mna\":\"Definition: sponsor company announces details of a merger, acquisition, or spin out.\",\"lgl_patents\":\"Definition: sponsor company announces the filing or approval of a patent.\",\"lnc_collaboration\":\"Definition: sponsor company enters into or discloses an R\\\\u0026D-related collaboration.\",\"lnc_licensing\":\"Definition: sponsor company transfers rights to intellectual property.\",\"lnc_terminated\":\"Definition: sponsor company terminates an agreement or collaboration with a partner.\",\"midstudy_update\":\"Definition: company makes an enrollment-related update to a study that is already underway.\",\"opinion\":\"Click to view articles and opinion from new sources and blogs.\",\"outs_other\":\"Definition: sponsor company discloses a relationship with a service provider or equipment provider.\",\"partnering\":\"Click to view only partnering actions.\",\"reg_activity\":\"Definition: company announces an interaction with the FDA, EMA or other regulatory body.\",\"results_disclosed\":\"Definition: sponsor company makes an announcement related to research results or data.\",\"results_n_data\":\"Click to view only events about research results and data announcements.\",\"study_closeout\":\"Definition: company completes a study and has finished gathering data.\",\"study_initiation\":\"Definition: company initiates a preclinical or clinical study.\",\"the_rest\":\"Click to view only events relating to legal and corporate actions.\"},\"logo\":{\"full_image\":{\"file_name\":\"zymewire_logo_full.png\",\"path\":\"images/brand_specific/zymewire/zymewire_logo_full.png\"},\"header\":{\"path\":\"/images/brand_specific/zymewire/zymewire_logo_black_trans.png\"},\"mark_only\":{\"file_name\":\"zymewire_logo_z_only.png\",\"path\":\"images/brand_specific/zymewire/zymewire_logo_z_only.png\"}},\"meta\":{\"description\":\"Zymewire: Catalyze your sales.\",\"image\":\"https://www.zymewire.com/images/brand_specific/zymewire/zymewire_logo_full.png\",\"title\":\"Zymewire: Catalyze your sales.\"},\"name\":\"Zymewire\",\"tag_line\":\"Catalyze your sales.\"},\"bulk_uploads\":{\"email_local_part\":{\"empty_parameter\":\"No file uploaded\",\"error\":\"File Upload failed: %{error_message}\",\"success\":\"File was successfully uploaded\"}},\"common\":{\"crm\":{\"salesforce\":{\"forgot_password\":\"If you have forgotten your Salesforce password, please follow the instructions provided on the Salesforce sign in page.\",\"sign_in_button\":\"Sign In with Salesforce\"}}},\"contact\":{\"default_from_email\":\"info@zymewire.com\",\"phone_numbers\":[{\"label\":\"US\",\"phone\":\"1-844-996-3321\"},{\"label\":\"UK\",\"phone\":\"+44-208-133-9963\"}],\"support_email\":\"support@zymewire.com\"},\"date\":{\"abbr_day_names\":[\"Sun\",\"Mon\",\"Tue\",\"Wed\",\"Thu\",\"Fri\",\"Sat\"],\"abbr_month_names\":[null,\"Jan\",\"Feb\",\"Mar\",\"Apr\",\"May\",\"Jun\",\"Jul\",\"Aug\",\"Sep\",\"Oct\",\"Nov\",\"Dec\"],\"day_names\":[\"Sunday\",\"Monday\",\"Tuesday\",\"Wednesday\",\"Thursday\",\"Friday\",\"Saturday\"],\"formats\":{\"default\":\"%Y-%m-%d\",\"long\":\"%B %d, %Y\",\"short\":\"%b %d\"},\"month_names\":[null,\"January\",\"February\",\"March\",\"April\",\"May\",\"June\",\"July\",\"August\",\"September\",\"October\",\"November\",\"December\"],\"order\":[\"year\",\"month\",\"day\"]},\"datetime\":{\"distance_in_words\":{\"about_x_hours\":{\"one\":\"about 1 hour\",\"other\":\"about %{count} hours\"},\"about_x_months\":{\"one\":\"about 1 month\",\"other\":\"about %{count} months\"},\"about_x_years\":{\"one\":\"about 1 year\",\"other\":\"about %{count} years\"},\"almost_x_years\":{\"one\":\"almost 1 year\",\"other\":\"almost %{count} years\"},\"half_a_minute\":\"half a minute\",\"less_than_x_minutes\":{\"one\":\"less than a minute\",\"other\":\"less than %{count} minutes\"},\"less_than_x_seconds\":{\"one\":\"less than 1 second\",\"other\":\"less than %{count} seconds\"},\"over_x_years\":{\"one\":\"over 1 year\",\"other\":\"over %{count} years\"},\"x_days\":{\"one\":\"1 day\",\"other\":\"%{count} days\"},\"x_minutes\":{\"one\":\"1 minute\",\"other\":\"%{count} minutes\"},\"x_months\":{\"one\":\"1 month\",\"other\":\"%{count} months\"},\"x_seconds\":{\"one\":\"1 second\",\"other\":\"%{count} seconds\"}},\"prompts\":{\"day\":\"Day\",\"hour\":\"Hour\",\"minute\":\"Minute\",\"month\":\"Month\",\"second\":\"Seconds\",\"year\":\"Year\"}},\"default_host\":\"https://www.zymewire.com\",\"devise\":{\"confirmations\":{\"confirmed\":\"Your account was successfully confirmed. Please sign in.\",\"send_instructions\":\"Your email has not been confirmed. We need to confirm your email account before you can sign in. Please check your inbox or spam folder for an email from \\'info@zymewire.com\\' or request a new one.\",\"send_paranoid_instructions\":\"If your e-mail exists on our database, you will receive an email with instructions about how to confirm your account in a few minutes.\"},\"failure\":{\"already_authenticated\":\"You are already signed in.\",\"expired\":\"Your account has expired due to inactivity. Please contact the site administrator.\",\"inactive\":\"Your account was not activated yet.\",\"invalid\":\"Invalid email or password. If you use Salesforce, use the \\'Have Salesforce?\\' panel.\",\"invalid_token\":\"Invalid authentication token.\",\"last_attempt\":\"You have one more attempt before your account is locked.\",\"locked\":\"Your account is locked.\",\"not_active\":\"Your account has been de-activated, if you think this is a mistake please contact us\",\"not_found_in_database\":\"Invalid %{authentication_keys} or password.\",\"session_limited\":\"Your login credentials were used in another browser. Please sign in again to continue in this browser.\",\"timeout\":\"Your session expired, please sign in again to continue.\",\"unauthenticated\":\"You need to sign in or sign up before continuing.\",\"unconfirmed\":\"We must confirm your email before you can continue. Please check your inbox or spam folder for a confirmation email from \\'info@zymewire.com\\' or request a new one.\"},\"invalid_captcha\":\"The captcha input is not valid!\",\"invalid_security_question\":\"The security question answer was invalid.\",\"mailer\":{\"confirmation_instructions\":{\"subject\":\"Confirmation instructions for Zymewire.com\"},\"email_changed\":{\"subject\":\"Email Changed\"},\"password_change\":{\"subject\":\"Password Changed\"},\"reset_password_instructions\":{\"subject\":\"Reset password instructions for Zymewire.com\"},\"unlock_instructions\":{\"subject\":\"Unlock Instructions for Zymewire.com\"}},\"omniauth_callbacks\":{\"failure\":\"Could not authorize you from %{kind} because \\\\\"%{reason}\\\\\".\",\"success\":\"Successfully authorized from %{kind} account.\"},\"paranoid_verification_code\":{\"show\":{\"submit\":\"Submit\",\"submit_verification_code\":\"Submit verification code\",\"verification_code\":\"Verification code\"},\"updated\":\"Verification code accepted\"},\"paranoid_verify\":{\"code_required\":\"Please enter the code our support team provided\"},\"password_expired\":{\"change_required\":\"Your password has expired. Please choose a new password!\",\"show\":{\"change_my_password\":\"Change my password\",\"current_password\":\"Current password\",\"new_password\":\"New password\",\"new_password_confirmation\":\"Confirm new password\",\"renew_your_password\":\"Renew your password\"},\"updated\":\"Your new password is saved.\"},\"passwords\":{\"no_token\":\"You can\\'t access this page without coming from a password reset email. If you do come from a password reset email, please make sure you used the full URL provided.\",\"send_instructions\":\"You will receive an email with instructions about how to reset your password in a few minutes.\",\"send_paranoid_instructions\":\"If your e-mail exists on our database, you will receive a password recovery link on your e-mail\",\"updated\":\"Your password was changed successfully. You are now signed in.\",\"updated_not_active\":\"Your password was changed successfully.\"},\"registrations\":{\"destroyed\":\"Bye! Your account was successfully cancelled. We hope to see you again soon.\",\"signed_up\":\"Welcome! You have signed up successfully.\",\"signed_up_but_inactive\":\"You have signed up successfully. However, we could not sign you in because your account is not yet activated.\",\"signed_up_but_locked\":\"You have signed up successfully. However, we could not sign you in because your account is locked.\",\"signed_up_but_unconfirmed\":\"A message with a confirmation link has been sent to your email address. Please open the link to activate your account.\",\"update_needs_confirmation\":\"You updated your account successfully, but we need to verify your new email address. Please check your email and click on the confirm link to finalize confirming your new email address.\",\"updated\":\"You updated your account successfully.\",\"updated_but_not_signed_in\":\"Your account has been updated successfully, but since your password was changed, you need to sign in again.\"},\"sessions\":{\"already_signed_out\":\"Signed out successfully.\",\"signed_in\":\"Signed in successfully.\",\"signed_out\":\"Signed out successfully.\"},\"unlocks\":{\"send_instructions\":\"You will receive an email with instructions about how to unlock your account in a few minutes.\",\"send_paranoid_instructions\":\"If your account exists, you will receive an email with instructions about how to unlock it in a few minutes.\",\"unlocked\":\"Your account has been unlocked successfully. Please sign in to continue.\"}},\"disable_crm_login_option\":\"false\",\"domain\":\"zymewire.com\",\"download\":\"Download\",\"download_30_days\":\"This link will be available for 30 days after which the file will be removed from our servers.\",\"enumerize\":{\"blocklisted_contact\":{\"provider\":{\"insideview\":\"InsideView\",\"zephyr\":\"Zephyr\"}}},\"errors\":{\"format\":\"%{attribute} %{message}\",\"messages\":{\"accepted\":\"must be accepted\",\"already_confirmed\":\"was already confirmed, please try signing in\",\"blank\":\"can\\'t be blank\",\"confirmation\":\"doesn\\'t match %{attribute}\",\"confirmation_period_expired\":\"needs to be confirmed within %{period}, please request a new one\",\"empty\":\"can\\'t be empty\",\"equal_to\":\"must be equal to %{count}\",\"equal_to_current_password\":\"Sorry, must be different to your current password!\",\"equal_to_email\":\"must be different than the email.\",\"even\":\"must be even\",\"exclusion\":\"is reserved\",\"expired\":\"has expired, please request a new one\",\"greater_than\":\"must be greater than %{count}\",\"greater_than_or_equal_to\":\"must be greater than or equal to %{count}\",\"in\":\"must be in %{count}\",\"inclusion\":\"is not included in the list\",\"invalid\":\"is invalid\",\"less_than\":\"must be less than %{count}\",\"less_than_or_equal_to\":\"must be less than or equal to %{count}\",\"model_invalid\":\"Validation failed: %{errors}\",\"not_a_number\":\"is not a number\",\"not_an_integer\":\"must be an integer\",\"not_found\":\"not found\",\"not_locked\":\"was not locked\",\"not_saved\":{\"one\":\"1 error prohibited this %{resource} from being saved:\",\"other\":\"%{count} errors prohibited this %{resource} from being saved:\"},\"odd\":\"must be odd\",\"other_than\":\"must be other than %{count}\",\"password_complexity\":{\"digit\":{\"one\":\"must contain at least one digit\",\"other\":\"must contain at least %{count} digits\"},\"lower\":{\"one\":\"must contain at least one lower-case letter\",\"other\":\"must contain at least %{count} lower-case letters\"},\"symbol\":{\"one\":\"must contain at least one punctuation mark or symbol\",\"other\":\"must contain at least %{count} punctuation marks or symbols\"},\"upper\":{\"one\":\"must contain at least one upper-case letter\",\"other\":\"must contain at least %{count} upper-case letters\"}},\"password_format\":\"Must contain uppercase AND lowercase letters and at least one number\",\"password_too_long\":\"is too long\",\"present\":\"must be blank\",\"required\":\"must exist\",\"taken\":\"has already been taken\",\"taken_in_past\":\"Sorry, you have used this password before!\",\"too_long\":{\"one\":\"is too long (maximum is 1 character)\",\"other\":\"is too long (maximum is %{count} characters)\"},\"too_short\":{\"one\":\"is too short (minimum is 1 character)\",\"other\":\"is too short (minimum is %{count} characters)\"},\"wrong_length\":{\"one\":\"is the wrong length (should be 1 character)\",\"other\":\"is the wrong length (should be %{count} characters)\"}}},\"flash\":{\"actions\":{\"create\":{\"notice\":\"%{resource_name} was successfully created.\"},\"destroy\":{\"alert\":\"%{resource_name} could not be destroyed.\",\"notice\":\"%{resource_name} was successfully destroyed.\"},\"update\":{\"notice\":\"%{resource_name} was successfully updated.\"}}},\"hello_world\":\"Hello world\",\"help\":{\"articles\":{\"crm_mining\":\"/help/articles/13976-mine-your-companys-salesforce-for-opportunities\",\"finding_contact_info\":\"/help/articles/13987-finding-contact-information\",\"guide_d\":\"/help/guide_d\",\"guide_g\":\"/help/guide_g\",\"guide_h\":\"/help/guide_h\",\"guide_i\":\"/help/guide_i\",\"guide_j\":\"/help/guide_j\",\"list_crud_c\":\"/help/articles/13985-generating-a-list\",\"list_crud_u\":\"/help/articles/18991-adding-and-removing-individual-companies-from-a-list\",\"map_search\":\"/help/articles/13980-map-based-searching\",\"saving_feeds\":\"/help/articles/13986-saving-feeds\"},\"site\":\"https://zymewire.helpsite.com/\"},\"helpers\":{\"select\":{\"prompt\":\"Please select\"},\"submit\":{\"create\":\"Create %{model}\",\"submit\":\"Save %{model}\",\"update\":\"Update %{model}\"}},\"hi\":\"Hi\",\"industry\":\"drug development service company\",\"mailers\":{\"common\":{\"chummy_sign_off\":\"Have a good one.\",\"final_note\":\"P.S.: If you think you received this email accidentally, then something weird could be going on. Hit reply and a member of the %{brand_name} team will investigate.\",\"team_sign_off\":\"- The %{brand_name} Team\"},\"confirmation_instructions_email\":{\"crm\":{\"salesforce\":{\"resource_confirmed\":\"Someone has requested a resend of a confirmation email. You do not need to confirm your email address because your account is configured to use Salesforce to sign in.\",\"resource_unconfirmed\":\"You do not need to confirm your email address because your account is configured to use Salesforce to sign in, please complete the sign up process by clicking the button below to sign in to %{brand_name} via Salesforce.\"}},\"non_crm\":{\"confirm_link\":\"Confirm my account\",\"welcome\":\"Welcome to %{brand_name}. As the final step in the process you\\'ll need to confirm your account by clicking on the link below.\"},\"subject\":\"Confirmation instructions for %{domain}\"},\"flagged_events_mailer\":{\"from\":\"Flagged events - %{brand_name} \\\\u003cflagged_events@mailer.%{domain}\\\\u003e\"},\"mobile_registration_email\":{\"alert_cs_registration_locked\":{\"subject\":\"%{brand_name}: user has had mobile registration locked, too many failed attempts\"},\"dispatch_registration_PIN\":{\"further_instructions\":\"If you are NOT attempting to register for the %{brand_name} Mobile app then please let us know at %{support_email_link} - thank you.\",\"introduction\":\"Here is your mobile app registration PIN:\",\"subject\":\"%{brand_name} Mobile Registration Verification\"},\"too_many_failed_attempts\":{\"introduction\":\"We have received too many failed mobile device registration attempts for your account and we will block any further requests. If you have not attempted to register a mobile device with us in the last hour then please let us know as it is likely someone has tried on your behalf. If you have been trying to register a device please contact %{support_email_link} and we can help unlock your account and get you registered.\",\"subject\":\"%{brand_name}: too many failed registration attempts\"}},\"org_list_download_mail\":{\"dispatch_link\":{\"introduction\":\"We have finished meshing your %{crm_brand_name} data with the companies in your \\\\\"%{list_name}\\\\\" list.\",\"subject\":\"%{brand_name}: your file download of \\'%{list_name}\\' is ready\"},\"failed\":{\"instructions\":\"You could try again in a little while. If you already have and are receiving this email again, please contact us at %{support_email_link}\",\"introduction\":\"We are really sorry, but something went wrong with creating your download of %{crm_brand_name} data for your \\\\\"%{list_name}\\\\\" list.\",\"subject\":\"%{brand_name}: your file download of \\'%{list_name}\\' failed\"}},\"reset_password_instructions_email\":{\"crm\":{\"salesforce\":{\"change_requested\":\"Someone has requested a change to your password. Your account is configured to use Salesforce to sign in.\"}},\"fishy_fine_print\":\"If you did not request a password change, then something weird is going on. Someone may be trying to access your account (unsuccessfully). Please reply to this email and let us know. We will take steps to make sure it stops.\",\"non_crm\":{\"change_password_link\":\"Change my password\",\"change_requested\":\"Someone has requested a change to your password, you can do this via the link below.\"},\"subject\":\"Password reset instructions for %{domain}\"},\"sales_force_mail\":{\"processing_completed\":{\"bullet_points\":[\"Only show events associated with companies in your Salesforce account\",\"Add new contacts and accounts to your Salesforce account without leaving %{brand_name}\",\"Access the \\'Salesforce details\\' panel on company dashboards where you can see open tasks, team interactions, opportunities, and more!\"],\"further_instructions\":\"We\\'re here to help. If you run into any questions or challenges, please contact us at %{support_email_link} and a member of our team would be more than happy to help.\",\"get_the_most\":\"To get the most from the integration, check out the \\'Mine Salesforce for opportunities\\' guide in the Help Center.\",\"guide_button\":\"Take me to the guide\",\"introduction\":\"Good news - your Salesforce account is now integrated with %{brand_name}. Now you’ll be able to:\"}},\"segment_contact\":{\"report_manager\":{\"fail_subject\":\"%{brand_name}: The PDF report generation failed\",\"success_subject\":\"%{brand_name}: Your PDF for %{company_name} is attached\"}},\"sf_token_expiry_email\":{\"further_instructions\":\"If you run into any questions or challenges, please contact us at %{support_email_link} and a member of our team would be more than happy to help.\",\"introduction\":\"Unfortunately the connection established for you between %{brand_name} and your %{crm_brand_name} account has expired. We will not be able to update your lists in %{brand_name} to reflect your %{crm_brand_name} database. To re-establish the connection, you just need to log in to %{brand_name} using your %{crm_brand_name}.\",\"subject\":\"%{brand_name} to %{crm_brand_name} connection has expired\"},\"share_list_mail\":{\"introduction\":\"%{user_name} shared a list with you: \",\"subject\":\"[%{brand_name} - shared list] %{list_name}\"},\"trial_expiry_mail\":{\"seven_days_to_go\":{\"further_instructions\":\"A member of our fabulous Customer Success team will arrange a welcome call with you to understand your goals and priorities, and will then give you a personalized Tour de %{brand_name} so you can easily access the information that is most valuable to you.\",\"instructions\":\"If you\\'d like continued access to the platform with our flexible month-to-month subscription, please ensure you contact %{support_email_link} ahead of: %{deadline}\",\"introduction\":\"Time flies when you\\'re uncovering new business opportunities! Your %{brand_name} trial is coming to an end next week.\",\"sign_off\":\"We look forward to helping you reach your sales goals!\",\"subject\":\"Just a heads up that your %{brand_name} trial is ending in seven days\"},\"seven_days_to_go_warning_for_cs\":{\"introduction\":\"%{user_name} shared a list with you: \",\"subject\":\"[%{brand_name} - shared list] %{list_name}\"}},\"unlock_instructions_email\":{\"crm\":{\"salesforce\":{\"change_requested\":\"You are being sent this email either because of one too many unsuccessful non-Salesforce log-in attempts or someone has requested an unlock email. %{brand_name} has not locked your account because your account is configured to use Salesforce to sign in.\",\"password_forgotten\":\"If you have forgotten your Salesforce password or think your account has been locked by Salesforce, please follow the instructions provided on the Salesforce sign in page.\"}},\"fishy_fine_print\":\"If you have not been (unsuccessfully) trying to log in to your account, then something weird is going on. Someone may be trying to access your account (unsuccessfully). Please reply to this email and let us know. We will take steps to make sure it stops.\",\"non_crm\":{\"change_requested\":\"For security reasons we have locked your account because of too many log-in attempts. To unlock your account, click the link below.\",\"unlock_account_link\":\"Unlock my account\"},\"subject\":\"Unlock instructions for %{domain}\"}},\"mongoid\":{\"errors\":{\"messages\":{\"ambiguous_relationship\":{\"message\":\"Ambiguous associations %{candidates} defined on %{klass}.\",\"resolution\":\"On the %{name} association on %{inverse} you must add an :inverse_of option to specify the exact association on %{klass} that is the opposite of %{name}.\",\"summary\":\"When Mongoid attempts to set an inverse document of an association in memory, it needs to know which association it belongs to. When setting %{name}, Mongoid looked on the class %{inverse} for a matching association, but multiples were found that could potentially match: %{candidates}.\"},\"blank_in_locale\":\"can\\'t be blank in %{location}\",\"callbacks\":{\"message\":\"Calling %{method} on %{klass} resulted in a false return from a callback.\",\"resolution\":\"Double check all before callbacks to make sure they are not unintentionally returning false.\",\"summary\":\"If a before callback returns false when using Document.create!, Document#save!, or Document#update_attributes! this error will get raised since the document did not actually get saved.\"},\"calling_document_find_with_nil_is_invalid\":{\"message\":\"Calling Document.find with nil is invalid.\",\"resolution\":\"Most likely this is caused by passing parameters directly through to the find, and the parameter either is not present or the key from which it is accessed is incorrect.\",\"summary\":\"Document.find expects the parameters to be 1 or more ids, and will return a single document if 1 id is provided, otherwise an array of documents if multiple ids are provided.\"},\"create_collection_failure\":{\"message\":\"Cannot create collection %{collection_name} with options %{collection_options}. The following error was raised: %{error}.\",\"resolution\":\"Double check that collection options for the collection %{collection_name} are valid. Consult with Ruby driver documentation and MongoDB documentation if the desired options are supported by your version of the server.\",\"summary\":\"The server rejected createCollection command with given collection options. This may happen when some of the options are invalid, or not supported by your version of the server.\"},\"criteria_argument_required\":{\"message\":\"Calling Criteria methods with nil arguments is not allowed.\",\"resolution\":\"Invoke Criteria methods with non-nil arguments or omit the respective invocations.\",\"summary\":\"Arguments to Criteria methods cannot be nil, and most Criteria methods require at least one argument. Only logical operations (and, or, nor and not), `all\\' and `where\\' can be called without arguments. The method that was called with nil argument was: %{query_method}.\"},\"delete_restriction\":{\"message\":\"Cannot destroy %{document} because of dependent \\'%{relation}\\'.\",\"resolution\":\"Don\\'t attempt to delete the parent %{document} when it has children, or change the dependent option on the association.\",\"summary\":\"When defining \\'%{relation}\\' with a :dependent =\\\\u003e :restrict_with_error, Mongoid will raise an error when attempting to destroy the %{document} when the child \\'%{relation}\\' still has documents in it.\"},\"destroy_restrict_with_error_dependencies_exist\":\"is not empty and prevents the document from being destroyed\",\"document_not_destroyed\":{\"message\":\"%{klass} with id %{id} was not destroyed.\",\"resolution\":\"Check the before/after destroy callbacks to ensure that the return values are truthy for the chain to continue.\",\"summary\":\"When calling %{klass}#destroy! and a callback halts the destroy callback chain by returning a false value, the deletion will not actually occur.\"},\"document_not_found\":{\"message\":\"Document(s) not found for class %{klass} with id(s) %{missing}.\",\"resolution\":\"Search for an id that is in the database or set the Mongoid.raise_not_found_error configuration option to false, which will cause nil to be returned instead of raising this error when searching for a single id, or only the matched documents when searching for multiples.\",\"summary\":\"When calling %{klass}.find with an id or array of ids, each parameter must match a document in the database or this error will be raised. The search was for the id(s): %{searched} (%{total} total) and the following ids were not found: %{missing}.\"},\"document_with_attributes_not_found\":{\"message\":\"Document not found for class %{klass} with attributes %{attributes}.\",\"resolution\":\"Search for attributes that are in the database or set the Mongoid.raise_not_found_error configuration option to false, which will cause nil to be returned instead of raising this error.\",\"summary\":\"When calling %{klass}.find_by with a hash of attributes, all attributes provided must match a document in the database or this error will be raised.\"},\"document_with_shard_key_not_found\":{\"message\":\"Document not found for class %{klass} with id %{missing} and shard key %{shard_key}.\",\"resolution\":\"Search for an id/shard key that is in the database or set the Mongoid.raise_not_found_error configuration option to false, which will cause nil to be returned instead of raising this error.\",\"summary\":\"When calling %{klass}.find with an id and a shard key, each parameter must match a document in the database or this error will be raised. The search was for the id: %{missing} with shard_key: %{shard_key} and it was not found.\"},\"drop_collection_failure\":{\"message\":\"Cannot drop collection %{collection_name}.\",\"resolution\":\"Try to drop the collection manually using Ruby driver or mongo shell.\",\"summary\":\"Mongoid tried to drop collection %{collection_name}, but the collection still exists in the database.\"},\"empty_config_file\":{\"message\":\"Empty configuration file: %{path}.\",\"resolution\":\"Ensure your configuration file contains the correct contents. Refer to: https://www.mongodb.com/docs/mongoid/current/reference/configuration/\",\"summary\":\"Your mongoid.yml configuration file appears to be empty.\"},\"immutable_attribute\":{\"message\":\"Attempted to change the immutable attribute \\'%{name}\\' with the value: %{value}.\",\"resolution\":\"Do not attempt to update the value of \\'%{name}\\' after the document is persisted.\",\"summary\":\"Immutable attributes can only have values set when the document is a new record.\"},\"in_memory_collation_not_supported\":{\"message\":\"A collation option cannot be applied when querying documents in-memory.\",\"resolution\":\"Remove the collation option from the query.\",\"summary\":\"The query being run against documents in memory has a collation option set. A collation option is only supported if the query is executed on a MongoDB server with version \\\\u003e= 3.4.\"},\"invalid_async_query_executor\":{\"message\":\"Invalid async_query_executor option: %{executor}.\",\"resolution\":\"Pick an allowed option or fix the typo. If you were expecting the option to be there, please consult the following page with respect to Mongoid\\'s configuration:\\\\n\\\\n   https://www.mongodb.com/docs/mongoid/current/reference/configuration/#mongoid-configuration-options\",\"summary\":\"A invalid async query executor was specified. The valid options are: %{options}.\"},\"invalid_collection\":{\"message\":\"Access to the collection for %{klass} is not allowed.\",\"resolution\":\"For access to the collection that the embedded document is in, use %{klass}#_root.collection, or do not attempt to persist an embedded document without a parent set.\",\"summary\":\"%{klass}.collection was called, and %{klass} is an embedded document - it resides within the collection of the root document of the hierarchy.\"},\"invalid_config_file\":{\"message\":\"Invalid configuration file: %{path}.\",\"resolution\":\"Ensure your configuration file contains the correct contents. Refer to: https://www.mongodb.com/docs/mongoid/current/reference/configuration/\",\"summary\":\"Your mongoid.yml configuration file does not contain the correct file structure.\"},\"invalid_config_option\":{\"message\":\"Invalid configuration option: %{name}.\",\"resolution\":\"Remove the invalid option or fix the typo. If you were expecting the option to be there, please consult the following page with respect to Mongoid\\'s configuration:\\\\n\\\\n   http://mongoid.org/en/mongoid/docs/installation.html\",\"summary\":\"A invalid configuration option was provided in your mongoid.yml, or a typo is potentially present. The valid configuration options are: %{options}.\"},\"invalid_dependent_strategy\":{\"message\":\"Invalid dependent strategy: %{invalid_strategy}.\",\"resolution\":\"Change the dependent strategy to one of the valid types.\",\"summary\":\"An invalid dependent strategy was defined for the association: %{association}. The valid strategies are: %{valid_strategies}.\"},\"invalid_discriminator_key_target\":{\"message\":\"Setting the discriminator key on a child class is not allowed.\",\"resolution\":\"Try setting the discriminator key on %{superclass} or one of %{class_name}\\'s ancestors.\",\"summary\":\"The discriminator key on the class %{class_name} was attempted to be changed. Changing the discriminator key on a child class is not allowed.\"},\"invalid_dot_dollar_assignment\":{\"message\":\"Cannot set the %{attr} attribute on the %{klass} class.\",\"resolution\":\"In order to set fields that start with a dollar sign ($) or contain a dot/period (.), the aggregation pipeline can be used. MongoDB provides specific operators for working with these fields. Refer to the MongoDB documentation here: https://www.mongodb.com/docs/manual/core/dot-dollar-considerations/\",\"summary\":\"Calling the setters for fields that start with a dollar sign ($) or contain a dot/period (.) is prohibited. See the Mongoid documentation on Field Names with Dots/Periods (.) and Dollar Signs ($) for more information.\"},\"invalid_elem_match_operator\":{\"message\":\"Invalid $elemMatch operator \\'%{operator}\\'.\",\"resolution\":\"Valid field operators are: %{valid_operators}. Ensure you are using one of these operators.\",\"summary\":\"You misspelled an operator or are using an operator that Mongoid does not support.\"},\"invalid_estimated_count_criteria\":{\"message\":\"Invalid criteria for estimated_count.\",\"resolution\":\"Try calling estimated_count directly on the class: %{class_name}.estimated_count.\\\\n\\\\n  If the class defines a default scope, use unscoped: %{class_name}.unscoped.estimated_count.\",\"summary\":\"Estimated count is strictly a collection-level operation and cannot be called on a filtered criteria.\"},\"invalid_expression_operator\":{\"message\":\"Invalid expression operator \\'%{operator}\\'.\",\"resolution\":\"Valid expression operators are: %{valid_operators}. Ensure you are using one of these operators.\",\"summary\":\"You misspelled an operator, are using an operator that Mongoid does not support, or are trying to use a field-level operator on expression level.\"},\"invalid_field\":{\"message\":\"Defining a field named \\'%{field}\\' is not allowed.\",\"resolution\":\"Use Mongoid.destructive_fields to see what names are not allowed, and don\\'t use these names. These include names that also conflict with core Ruby methods on Object, Module, Enumerable, or included gems that inject methods into these or Mongoid internals.\",\"summary\":\"Defining this field would override the method \\'%{name}\\', which would cause issues with expectations around the original method and cause extremely hard to debug issues. The original method was defined in:\\\\n   Object: %{origin}\\\\n   File: %{file}\\\\n   Line: %{line}\"},\"invalid_field_operator\":{\"message\":\"Invalid field operator \\'%{operator}\\'.\",\"resolution\":\"Valid field operators are: %{valid_operators}. Ensure you are using one of these operators.\",\"summary\":\"You misspelled an operator, are using an operator that Mongoid does not support, or are trying to use an expression-level operator on field level.\"},\"invalid_field_option\":{\"message\":\"Invalid option :%{option} provided for field :%{name}.\",\"resolution\":\"When defining the field :%{name} on \\'%{klass}\\', please provide valid options for the field. These are currently: %{valid}. If you meant to define a custom field option, please do so first as follows:\\\\n\\\\n   Mongoid::Fields.option :%{option} do |model, field, value|\\\\n     # Your logic here...\\\\n   end\\\\n   class %{klass}\\\\n     include Mongoid::Document\\\\n     field :%{name}, %{option}: true\\\\n   end\\\\n\\\\n Refer to: https://www.mongodb.com/docs/mongoid/current/reference/fields/#custom-field-options\",\"summary\":\"Mongoid requires that you only provide valid options on each field definition in order to prevent unexpected behavior later on.\"},\"invalid_field_type\":{\"message\":\"Invalid field type %{type_inspection} for field \\'%{field}\\' on model \\'%{klass}\\'.\",\"resolution\":\"Please provide a valid type value for the field. Refer to: https://www.mongodb.com/docs/mongoid/current/reference/fields/#using-symbols-or-strings-instead-of-classes\",\"summary\":\"Model \\'%{klass}\\' defines a field \\'%{field}\\' with an unknown type value %{type_inspection}.\"},\"invalid_global_executor_concurrency\":{\"message\":\"Invalid global_executor_concurrency option.\",\"resolution\":\"Set global_executor_concurrency option to :global_thread_pool or remove global_executor_concurrency option.\",\"summary\":\"You set global_executor_concurrency while async_query_executor option is not set to :global_thread_pool. The global_executor_concurrency is allowed only for the global thread pool executor.\"},\"invalid_includes\":{\"message\":\"Invalid includes directive: %{klass}.includes(%{args})\",\"resolution\":\"Ensure that each parameter passed to %{klass}.includes is a valid name of an association on the %{klass} model. These are: %{relations}.\",\"summary\":\"Eager loading in Mongoid only supports providing arguments to %{klass}.includes that are the names of associations on the %{klass}.\"},\"invalid_index\":{\"message\":\"Invalid index specification on %{klass}: %{spec}, %{options}\",\"resolution\":\"Ensure that the index conforms to the correct syntax and has the correct options.\\\\n\\\\n Valid options are:\\\\n   background: true|false\\\\n   database: \\'database_name\\'\\\\n   name: \\'index_name\\'\\\\n   sparse: true|false\\\\n   unique: true|false\\\\n   min: 1\\\\n   max: 1\\\\n   bits: 26\\\\n   key: 26\\\\n   bucket_size : 1\\\\n   sphere_version : 1\\\\n   text_version : 1\\\\n   version : 1\\\\n   weights: { content: 1, title: 2 }\\\\n   expire_after_seconds: number_of_seconds\\\\n   partial_filter_expression\\\\n   storage_engine\\\\n   language_override\\\\n   default_language\\\\n   collation\\\\n   wildcard_projection: { \\'path.to.field.a\\': 1, \\'path.to.field.b\\': 0 }\\\\n Valid types are: 1, -1, \\'2d\\', \\'2dsphere\\', \\'geoHaystack (deprecated)\\', \\'text\\', \\'hashed\\'\\\\n\\\\n Example:\\\\n   class Band\\\\n     include Mongoid::Document\\\\n     index({ name: 1, label: -1 }, { sparse: true })\\\\n     index({ location: \\'2d\\' }, { background: true })\\\\n   end\\\\n\\\\n\",\"summary\":\"Indexes in Mongoid are defined as a hash of field name and direction/2d pairs, with a hash for any additional options.\"},\"invalid_options\":{\"message\":\"Invalid option :%{invalid} provided to association :%{name}.\",\"resolution\":\"Valid options are: %{valid}, make sure these are the ones you are using.\",\"summary\":\"Mongoid checks the options that are passed to the association macros to ensure that no ill side effects occur by letting something slip by.\"},\"invalid_path\":{\"message\":\"Having a root path assigned for %{klass} is invalid.\",\"resolution\":\"Most likely your embedded model, %{klass} is also referenced via a has_many from a root document in another collection. Double check the association definitions and fix any instances where embedded documents are improperly referenced from other collections.\",\"summary\":\"Mongoid has two different path objects for determining the location of a document in the database, Root and Embedded. This error is raised when an embedded document somehow gets a root path assigned.\"},\"invalid_persistence_option\":{\"message\":\"Invalid persistence option :%{invalid}.\",\"resolution\":\"Valid options are: %{valid}, make sure these are the ones you are using.\",\"summary\":\"The options used to change the persistence context must be one of the valid options for a mongo client, or a collection name.\"},\"invalid_relation\":{\"message\":\"Defining an association named \\'%{name}\\' is not allowed.\",\"resolution\":\"Use Mongoid.destructive_fields to see what names are not allowed, and don\\'t use these names. These include names that also conflict with core Ruby methods on Object, Module, Enumerable, or included gems that inject methods into these or Mongoid internals.\",\"summary\":\"Defining this association would override the method \\'%{name}\\', which would cause issues with expectations around the original method and cause extremely hard to debug issues. The original method was defined in:\\\\n   Object: %{origin}\\\\n   File: %{file}\\\\n   Line: %{line}\"},\"invalid_relation_option\":{\"message\":\"Invalid association option :%{option} for association \\'%{name}\\' on class %{klass}.\",\"resolution\":\"Valid options are: %{valid_options}, make sure you use only those.\",\"summary\":\"An invalid option was provided for an association.\"},\"invalid_scope\":{\"message\":\"Defining a scope of value %{value} on %{klass} is not allowed.\",\"resolution\":\"Change the scope to be a proc wrapped criteria.\\\\n\\\\n Example:\\\\n   class Band\\\\n     include Mongoid::Document\\\\n     scope :inactive, -\\\\u003e{ where(active: false) }\\\\n   end\\\\n\\\\n\",\"summary\":\"Scopes in Mongoid must be procs that wrap criteria objects.\"},\"invalid_session_nesting\":{\"message\":\"A session was started while another session was being used.\",\"resolution\":\"Only use one session at a time; sessions cannot be nested.\",\"summary\":\"Sessions cannot be nested. Only one session can be used in a thread at once.\"},\"invalid_session_use\":{\"message\":\"A session was attempted to be used with a model whose client cannot use that session.\",\"resolution\":\"Only execute operations on the model class or instances of the model through which the session was created. Otherwise, ensure that all models on which operations are executed in the session block share the same driver client. For example, a model may have a different client specified in its \\'store_in\\' options.\\\\n\\\\n\",\"summary\":\"Sessions are started via driver clients (Model#mongo_client) and, in most cases, driver clients are shared across models. When different models have their own clients, a session cannot be obtained via one model and used for operations on another model.\"},\"invalid_set_polymorphic_relation\":{\"message\":\"The %{name} attribute can\\'t be set to an instance of %{other_klass} as %{other_klass} has multiple associations referencing %{klass} as %{name}.\",\"resolution\":\"Set the values from the parent, or redefine the association with only a single definition in the parent.\",\"summary\":\"If the parent class of a polymorphic association has multiple definitions for the same association, the values must be set from the parent side and not the child side since Mongoid cannot determine from the child side which association to go in.\"},\"invalid_storage_options\":{\"message\":\"Invalid options passed to %{klass}.store_in: %{options}.\",\"resolution\":\"Change the options passed to store_in to match the documented API, and ensure all keys in the options hash are symbols.\\\\n\\\\n Example:\\\\n   class Band\\\\n     include Mongoid::Document\\\\n     store_in collection: \\'artists\\', database: \\'music\\'\\\\n   end\\\\n\\\\n\",\"summary\":\"The :store_in macro takes only a hash of parameters with the keys :database, :collection, :collection_options, or :client.\"},\"invalid_time\":{\"message\":\"\\'%{value}\\' is not a valid Time.\",\"resolution\":\"Make sure to pass parsable values to the field setter for Date, DateTime, and Time objects. When this is a String it needs to be valid for Time.parse. Other objects must be valid to pass to Time.local.\",\"summary\":\"Mongoid tries to serialize the values for Date, DateTime, and Time into proper UTC times to store in the database. The provided value could not be parsed.\"},\"inverse_not_found\":{\"message\":\"When adding a(n) %{klass} to %{base}#%{name}, Mongoid could not determine the inverse foreign key to set. The attempted key was \\'%{inverse}\\'.\",\"resolution\":\"If an inverse is not required, like a belongs_to or has_and_belongs_to_many, ensure that :inverse_of =\\\\u003e nil is set on the association. If the inverse is needed, most likely the inverse cannot be figured out from the names of the associations and you will need to explicitly tell Mongoid on the association what the inverse is.\\\\n\\\\n Example:\\\\n   class Car\\\\n     include Mongoid::Document\\\\n     has_one :engine, class_name: \\\\\"Motor\\\\\", inverse_of: :machine\\\\n   end\\\\n\\\\n   class Motor\\\\n     include Mongoid::Document\\\\n     belongs_to :machine, class_name: \\\\\"Car\\\\\", inverse_of: :engine\\\\n   end\",\"summary\":\"When adding a document to an association, Mongoid attempts to link the newly added document to the base of the association in memory, as well as set the foreign key to link them on the database side. In this case Mongoid could not determine what the inverse foreign key was.\"},\"message_title\":\"message\",\"mixed_client_configuration\":{\"message\":\"Both uri and standard configuration options defined for client: \\'%{name}\\'.\",\"resolution\":\"Provide either only a uri as configuration or only standard options.\",\"summary\":\"Instead of simply giving uri or standard options a preference order, Mongoid assumes that you have made a mistake in your configuration and requires that you provide one or the other, but not both. The options that were provided were: %{config}.\"},\"mixed_relations\":{\"message\":\"Referencing a(n) %{embedded} document from the %{root} document via a non-embedded association is not allowed since the %{embedded} is embedded.\",\"resolution\":\"Consider not embedding %{embedded}, or do the key storage and access in a custom manner in the application code.\",\"summary\":\"In order to properly access a(n) %{embedded} from %{root} the reference would need to go through the root document of %{embedded}. In a simple case this would require Mongoid to store an extra foreign key for the root, in more complex cases where %{embedded} is multiple levels deep a key would need to be stored for each parent up the hierarchy.\"},\"nested_attributes_metadata_not_found\":{\"message\":\"Could not find metadata for association \\'%{name}\\' on model: %{klass}.\",\"resolution\":\"Make sure that there is an association defined named \\'%{name}\\' on %{klass} or that the association definition comes before the accepts_nested_attributes_for macro in the model - order matters so that Mongoid has access to the metadata.\\\\n\\\\n Example:\\\\n   class Band\\\\n     include Mongoid::Document\\\\n     has_many :albums\\\\n     accepts_nested_attributes_for :albums\\\\n   end\\\\n\\\\n\",\"summary\":\"When defining nested attributes for an association, Mongoid needs to access the metadata for the association \\'%{name}\\' in order if add autosave functionality to it, if applicable. Either no association named \\'%{name}\\' could be found, or the association had not been defined yet.\"},\"no_client_config\":{\"message\":\"No configuration could be found for a client named \\'%{name}\\'.\",\"resolution\":\"Double check your mongoid.yml to make sure under the clients key that a configuration exists for \\'%{name}\\'. If you have set the configuration programmatically, ensure that \\'%{name}\\' exists in the configuration hash.\",\"summary\":\"When attempting to create the new client, Mongoid could not find a client configuration for the name: \\'%{name}\\'. This is necessary in order to know the host, port, and options needed to connect.\"},\"no_client_database\":{\"message\":\"No database provided for client configuration: :%{name}.\",\"resolution\":\"If configuring via a mongoid.yml, ensure that within your :%{name} section a :database value for the client\\'s default database is defined.\\\\n\\\\n Example:\\\\n   development:\\\\n     clients:\\\\n       %{name}:\\\\n         database: my_app_db\\\\n         hosts:\\\\n           - localhost:27017\\\\n\\\\n\",\"summary\":\"Each client configuration must provide a database so Mongoid knows where the default database to persist to. What was provided was: %{config}.\"},\"no_client_hosts\":{\"message\":\"No hosts provided for client configuration: :%{name}.\",\"resolution\":\"If configuring via a mongoid.yml, ensure that within your :%{name} section a :hosts value for the client hosts is defined.\\\\n\\\\n Example:\\\\n   development:\\\\n     clients:\\\\n       %{name}:\\\\n         database: my_app_db\\\\n         hosts:\\\\n           - localhost:27017\\\\n\\\\n\",\"summary\":\"Each client configuration must provide hosts so Mongoid knows where the database server is located. What was provided was: %{config}.\"},\"no_clients_config\":{\"message\":\"No clients configuration provided.\",\"resolution\":\"Double check your mongoid.yml to make sure that you have a top-level clients key with at least 1 default client configuration for it. You can regenerate a new mongoid.yml for assistance via `rails g mongoid:config`.\\\\n\\\\n Example:\\\\n   development:\\\\n     clients:\\\\n       default:\\\\n         database: mongoid_dev\\\\n         hosts:\\\\n           - localhost:27017\\\\n\\\\n\",\"summary\":\"Mongoid\\'s configuration requires that you provide details about each client that can be connected to, and requires in the clients config at least 1 default client to exist.\"},\"no_default_client\":{\"message\":\"No default client configuration is defined.\",\"resolution\":\"If configuring via a mongoid.yml, ensure that within your :clients section a :default client is defined.\\\\n\\\\n Example:\\\\n   development:\\\\n     clients:\\\\n       default:\\\\n         hosts:\\\\n           - localhost:27017\\\\n\\\\n\",\"summary\":\"The configuration provided settings for: %{keys}, but Mongoid requires a :default to be defined at minimum.\"},\"no_documents_found\":{\"message\":\"Could not find a document of class %{klass}.\",\"resolution\":\"Create a document of class %{klass} or use a finder method that does not raise an exception when no documents are found.\",\"summary\":\"Mongoid attempted to find a document of the class %{klass} but none exist.\"},\"no_environment\":{\"message\":\"Could not load the configuration since no environment was defined.\",\"resolution\":\"Please ensure an environment is set in one of the listed locations. The environment must be explicitly set.\",\"summary\":\"Mongoid could not determine the environment to use because it was not specified in any of the following locations: Rails.env, Sinatra::Base.environment, ENV[\\\\\"RACK_ENV\\\\\"], ENV[\\\\\"MONGOID_ENV\\\\\"]. Without knowing the environment, Mongoid cannot load its configuration.\"},\"no_map_reduce_output\":{\"message\":\"No output location was specified for the map/reduce operation.\",\"resolution\":\"Provide the location that the output of the operation is to go by chaining an #out call to the map/reduce.\\\\n\\\\n Example:\\\\n   Band.map_reduce(map, reduce).out(inline: 1)\\\\n\\\\n Valid options for the out function are:\\\\n   inline: 1\\\\n   merge: \\'collection-name\\'\\\\n   replace: \\'collection-name\\'\\\\n   reduce: \\'collection-name\\'\\\\n\\\\n\",\"summary\":\"When executing a map/reduce, you must provide the output location of the results. The attempted command was: %{command}.\"},\"no_metadata\":{\"message\":\"Metadata not found for document of type %{klass}.\",\"resolution\":\"Ensure that your associations on the %{klass} model are all properly defined, and that the inverse associations are also properly defined. Embedded associations must have both the parent (embeds_one/embeds_many) and the inverse (embedded_in) present in order to work properly.\",\"summary\":\"Mongoid sets the metadata of an association on the document when it is either loaded from within the association, or added to one. The presence of the metadata is required in order to provide various functionality around associations. Most likely you are getting this error because the document is embedded and was attempted to be persisted without being associated with a parent, or the association was not properly defined.\"},\"no_parent\":{\"message\":\"Cannot persist embedded document %{klass} without a parent document.\",\"resolution\":\"Ensure that you\\'ve set the parent association if instantiating the embedded document directly, or always create new embedded documents via the parent association.\",\"summary\":\"If the document is embedded, in order to be persisted it must always have a reference to its parent document. This is most likely caused by either calling %{klass}.create or %{klass}.create! without setting the parent document as an attribute.\"},\"readonly_attribute\":{\"message\":\"Attempted to set the readonly attribute \\'%{name}\\' with the value: %{value}.\",\"resolution\":\"Don\\'t define \\'%{name}\\' as readonly, or do not attempt to update its value after the document is persisted.\",\"summary\":\"Attributes flagged as readonly via Model.attr_readonly can only have values set when the document is a new record.\"},\"readonly_document\":{\"message\":\"Attempted to persist a readonly document of class \\'%{klass}\\'.\",\"resolution\":\"Don\\'t attempt to persist documents that are flagged as readonly.\",\"summary\":\"Documents that are marked readonly cannot be persisted.\"},\"resolution_title\":\"resolution\",\"scope_overwrite\":{\"message\":\"Cannot create scope :%{scope_name}, because of existing method %{model_name}.%{scope_name}.\",\"resolution\":\"Change the name of the scope so it does not conflict with the already defined method %{model_name}, or set the configuration option Mongoid.scope_overwrite_exception to false, which is its default. In this case a warning will be logged.\",\"summary\":\"When defining a scope that conflicts with a method that already exists on the model, this error will get raised if Mongoid.scope_overwrite_exception is set to true.\"},\"sessions_not_supported\":{\"message\":\"Sessions are not supported by the connected server(s).\",\"resolution\":\"Verify that all servers in your deployment are at least version 3.6 or don\\'t attempt to use sessions with older server versions.\",\"summary\":\"A session was attempted to be used with a MongoDB server version that doesn\\'t support sessions. Sessions are supported in MongoDB server versions 3.6 and higher.\"},\"summary_title\":\"summary\",\"too_many_nested_attribute_records\":{\"message\":\"Accepting nested attributes for %{association} is limited to %{limit} documents.\",\"resolution\":\"The limit is set as an option to the macro, for example: accepts_nested_attributes_for :%{association}, limit: %{limit}. Consider raising this limit or making sure no more are sent than the set value.\",\"summary\":\"More documents were sent to be processed than the allowed limit.\"},\"unknown_attribute\":{\"message\":\"Attempted to set a value for \\'%{name}\\' which is not allowed on the model %{klass}.\",\"resolution\":\"Define the field \\'%{name}\\' in %{klass}, or include Mongoid::Attributes::Dynamic in %{klass} if you intend to store values in fields that are not explicitly defined.\",\"summary\":\"%{klass}#%{name}= was called but there is no \\'%{name}\\' field defined in the model, and Mongoid::Attributes::Dynamic is not included. This error is also raised instead of NoMethodError if the unknown attribute is passed to any method that accepts an attributes hash, such as #attributes=.\"},\"unknown_model\":{\"message\":\"Attempted to instantiate an object of the unknown model \\'%{klass}\\'.\",\"resolution\":\"The _type field is a reserved one used by Mongoid to determine the class for instantiating an object. Please don\\'t save data in this field or ensure that any values in this field correspond to valid models.\",\"summary\":\"A document with the value \\'%{value}\\' at the key \\'_type\\' was used to instantiate a model object but Mongoid cannot find this Class.\"},\"unsaved_document\":{\"message\":\"Attempted to save %{document} before the parent %{base}.\",\"resolution\":\"Make sure to only use create or create! when the parent document %{base} is persisted.\",\"summary\":\"You cannot call create or create! through the association (%{document}) whose parent (%{base}) is not already saved. This would cause the database to be out of sync since the child could potentially reference a nonexistent parent.\"},\"unsupported_javascript\":{\"message\":\"Executing Javascript $where selector on an embedded criteria is not supported.\",\"resolution\":\"Please provide a standard hash to #where when the criteria is for an embedded association.\",\"summary\":\"Mongoid only supports providing a hash of arguments to #where criterion on embedded documents. Since %{klass} is embedded, the expression %{javascript} is not allowed.\"},\"validations\":{\"message\":\"Validation of %{document} failed.\",\"resolution\":\"Try persisting the document with valid data or remove the validations.\",\"summary\":\"The following errors were found: %{errors}\"}}}},\"number\":{\"currency\":{\"format\":{\"delimiter\":\",\",\"format\":\"%u%n\",\"negative_format\":\"-%u%n\",\"precision\":2,\"separator\":\".\",\"significant\":false,\"strip_insignificant_zeros\":false,\"unit\":\"$\"}},\"format\":{\"delimiter\":\",\",\"precision\":3,\"round_mode\":\"default\",\"separator\":\".\",\"significant\":false,\"strip_insignificant_zeros\":false},\"human\":{\"decimal_units\":{\"format\":\"%n %u\",\"units\":{\"billion\":\"Billion\",\"million\":\"Million\",\"quadrillion\":\"Quadrillion\",\"thousand\":\"Thousand\",\"trillion\":\"Trillion\",\"unit\":\"\"}},\"format\":{\"delimiter\":\"\",\"precision\":3,\"significant\":true,\"strip_insignificant_zeros\":true},\"storage_units\":{\"format\":\"%n %u\",\"units\":{\"byte\":{\"one\":\"Byte\",\"other\":\"Bytes\"},\"eb\":\"EB\",\"gb\":\"GB\",\"kb\":\"KB\",\"mb\":\"MB\",\"pb\":\"PB\",\"tb\":\"TB\",\"zb\":\"ZB\"}}},\"nth\":{},\"percentage\":{\"format\":{\"delimiter\":\"\",\"format\":\"%n%\"}},\"precision\":{\"format\":{\"delimiter\":\"\"}}},\"pivot_list_column_value\":{\"non_sponsor_org\":\"non-sponsor\"},\"pivot_list_download\":{\"id\":\"ZW_ID\"},\"simple_form\":{\"error_notification\":{\"default_message\":\"Please review the problems below:\"},\"no\":\"No\",\"required\":{\"mark\":\"*\",\"text\":\"required\"},\"yes\":\"Yes\"},\"support\":{\"array\":{\"last_word_connector\":\", and \",\"two_words_connector\":\" and \",\"words_connector\":\", \"}},\"terminology\":{\"all_orgs_list_category\":\"Companies\",\"companies_in_your_sf_label\":\"Companies in your Salesforce\",\"company_based_in\":\"Sponsor company based in\",\"company_location\":\"Sponsor Company Location\",\"neglected_target_label\":\"Neglected Sponsors\",\"sponsor\":\"Drug Sponsor\",\"sponsor_orgs_list_category\":\"Sponsor Companies\",\"target_organization_title\":\"Sponsor\"},\"time\":{\"am\":\"am\",\"formats\":{\"default\":\"%a, %d %b %Y %H:%M:%S %z\",\"long\":\"%B %d, %Y %H:%M\",\"short\":\"%d %b %H:%M\"},\"pm\":\"pm\"},\"users\":{\"confirmations\":{\"new\":{\"legend\":\"Resend your %{brand_name} confirmation instructions\",\"message\":\"We need to confirm your email address to complete the sign up process. Supply your email address, below, and we will send you instructions on how to confirm your address.\",\"submit_button\":\"Send Confirmation Instructions\",\"title\":\"Resend confirmation instructions | %{brand_name}\"},\"show\":{\"legend\":\"Check your inbox for a confirmation email\",\"message\":\"If your e-mail exists in our database we have sent you a message with instructions. Check your inbox (or spam folder) for a message from \\'%{default_from_email}\\' containing the confirmation link.\",\"title\":\"Awaiting confirmation | %{brand_name}\"}},\"passwords\":{\"new\":{\"failures\":\"Note: If you make more than 5 sequential failed attempts to sign in with your %{brand_name} password, your account will be (temporarily) locked. Check your inbox for instruction on how to unlock your account, or we can\",\"legend\":\"Reset your %{brand_name} password\",\"message\":\"Supply your email address, below, and we will send you instructions on how to reset your password.\",\"resend_link\":\"resend a new set of unlock instructions\",\"submit_button\":\"Send Reset Instructions\",\"title\":\"Reset password | %{brand_name}\"},\"show\":{\"didnt_receive_email\":\"Didn\\'t receive the email?\",\"legend\":\"Password reset instructions sent\",\"message\":\"If your e-mail exists in our database we have sent you a message with password reset instructions. Check your inbox (or spam folder) for a message from \\'%{default_from_email}\\'.\",\"resend_link\":\"you can request another one here\",\"title\":\"Awaiting reset | %{brand_name}\"}}},\"will_paginate\":{\"container_aria_label\":\"Pagination\",\"next_label\":\"Next \\\\u0026#8594;\",\"page_aria_label\":\"Page %{page}\",\"page_entries_info\":{\"multi_page\":\"Displaying %{model} %{from} - %{to} of %{count} in total\",\"multi_page_html\":\"Displaying %{model} \\\\u003cb\\\\u003e%{from}\\\\u0026nbsp;-\\\\u0026nbsp;%{to}\\\\u003c/b\\\\u003e of \\\\u003cb\\\\u003e%{count}\\\\u003c/b\\\\u003e in total\",\"single_page\":{\"one\":\"Displaying 1 %{model}\",\"other\":\"Displaying all %{count} %{model}\",\"zero\":\"No %{model} found\"},\"single_page_html\":{\"one\":\"Displaying \\\\u003cb\\\\u003e1\\\\u003c/b\\\\u003e %{model}\",\"other\":\"Displaying \\\\u003cb\\\\u003eall\\\\u0026nbsp;%{count}\\\\u003c/b\\\\u003e %{model}\",\"zero\":\"No %{model} found\"}},\"page_gap\":\"\\\\u0026hellip;\",\"previous_label\":\"\\\\u0026#8592; Previous\"},\"x_mailer_header\":\"clicks.zymewire.com\"}'));\nI18n.translations[\"en\"] = I18n.extend((I18n.translations[\"en\"] || {}), JSON.parse('{\"activerecord\":{\"errors\":{\"messages\":{\"record_invalid\":\"Validation failed: %{errors}\",\"restrict_dependent_destroy\":{\"has_many\":\"Cannot delete record because dependent %{record} exist\",\"has_one\":\"Cannot delete record because a dependent %{record} exists\"}}}},\"bulk_uploads\":{\"email_local_part\":{\"empty_parameter\":\"No file uploaded\",\"error\":\"File Upload failed: %{error_message}\",\"success\":\"File was successfully uploaded\"}},\"common\":{\"crm\":{\"salesforce\":{\"forgot_password\":\"If you have forgotten your Salesforce password, please follow the instructions provided on the Salesforce sign in page.\",\"sign_in_button\":\"Sign In with Salesforce\"}}},\"contact\":{\"default_from_email\":\"info@zymewire.com\",\"phone_numbers\":[{\"label\":\"US\",\"phone\":\"1-844-996-3321\"},{\"label\":\"UK\",\"phone\":\"+44-208-133-9963\"}],\"support_email\":\"support@zymewire.com\"},\"date\":{\"abbr_day_names\":[\"Sun\",\"Mon\",\"Tue\",\"Wed\",\"Thu\",\"Fri\",\"Sat\"],\"abbr_month_names\":[null,\"Jan\",\"Feb\",\"Mar\",\"Apr\",\"May\",\"Jun\",\"Jul\",\"Aug\",\"Sep\",\"Oct\",\"Nov\",\"Dec\"],\"day_names\":[\"Sunday\",\"Monday\",\"Tuesday\",\"Wednesday\",\"Thursday\",\"Friday\",\"Saturday\"],\"formats\":{\"default\":\"%Y-%m-%d\",\"long\":\"%B %d, %Y\",\"short\":\"%b %d\"},\"month_names\":[null,\"January\",\"February\",\"March\",\"April\",\"May\",\"June\",\"July\",\"August\",\"September\",\"October\",\"November\",\"December\"],\"order\":[\"year\",\"month\",\"day\"]},\"datetime\":{\"distance_in_words\":{\"about_x_hours\":{\"one\":\"about 1 hour\",\"other\":\"about %{count} hours\"},\"about_x_months\":{\"one\":\"about 1 month\",\"other\":\"about %{count} months\"},\"about_x_years\":{\"one\":\"about 1 year\",\"other\":\"about %{count} years\"},\"almost_x_years\":{\"one\":\"almost 1 year\",\"other\":\"almost %{count} years\"},\"half_a_minute\":\"half a minute\",\"less_than_x_minutes\":{\"one\":\"less than a minute\",\"other\":\"less than %{count} minutes\"},\"less_than_x_seconds\":{\"one\":\"less than 1 second\",\"other\":\"less than %{count} seconds\"},\"over_x_years\":{\"one\":\"over 1 year\",\"other\":\"over %{count} years\"},\"x_days\":{\"one\":\"1 day\",\"other\":\"%{count} days\"},\"x_minutes\":{\"one\":\"1 minute\",\"other\":\"%{count} minutes\"},\"x_months\":{\"one\":\"1 month\",\"other\":\"%{count} months\"},\"x_seconds\":{\"one\":\"1 second\",\"other\":\"%{count} seconds\"}},\"prompts\":{\"day\":\"Day\",\"hour\":\"Hour\",\"minute\":\"Minute\",\"month\":\"Month\",\"second\":\"Seconds\",\"year\":\"Year\"}},\"default_host\":\"https://www.zymewire.com\",\"devise\":{\"confirmations\":{\"confirmed\":\"Your account was successfully confirmed. Please sign in.\",\"send_instructions\":\"Your email has not been confirmed. We need to confirm your email account before you can sign in. Please check your inbox or spam folder for an email from \\'info@zymewire.com\\' or request a new one.\",\"send_paranoid_instructions\":\"If your e-mail exists on our database, you will receive an email with instructions about how to confirm your account in a few minutes.\"},\"failure\":{\"already_authenticated\":\"You are already signed in.\",\"expired\":\"Your account has expired due to inactivity. Please contact the site administrator.\",\"inactive\":\"Your account was not activated yet.\",\"invalid\":\"Invalid email or password. If you use Salesforce, use the \\'Have Salesforce?\\' panel.\",\"invalid_token\":\"Invalid authentication token.\",\"last_attempt\":\"You have one more attempt before your account is locked.\",\"locked\":\"Your account is locked.\",\"not_active\":\"Your account has been de-activated, if you think this is a mistake please contact us\",\"not_found_in_database\":\"Invalid %{authentication_keys} or password.\",\"session_limited\":\"Your login credentials were used in another browser. Please sign in again to continue in this browser.\",\"timeout\":\"Your session expired, please sign in again to continue.\",\"unauthenticated\":\"You need to sign in or sign up before continuing.\",\"unconfirmed\":\"We must confirm your email before you can continue. Please check your inbox or spam folder for a confirmation email from \\'info@zymewire.com\\' or request a new one.\"},\"invalid_captcha\":\"The captcha input is not valid!\",\"invalid_security_question\":\"The security question answer was invalid.\",\"mailer\":{\"confirmation_instructions\":{\"subject\":\"Confirmation instructions for Zymewire.com\"},\"email_changed\":{\"subject\":\"Email Changed\"},\"password_change\":{\"subject\":\"Password Changed\"},\"reset_password_instructions\":{\"subject\":\"Reset password instructions for Zymewire.com\"},\"unlock_instructions\":{\"subject\":\"Unlock Instructions for Zymewire.com\"}},\"omniauth_callbacks\":{\"failure\":\"Could not authorize you from %{kind} because \\\\\"%{reason}\\\\\".\",\"success\":\"Successfully authorized from %{kind} account.\"},\"paranoid_verification_code\":{\"show\":{\"submit\":\"Submit\",\"submit_verification_code\":\"Submit verification code\",\"verification_code\":\"Verification code\"},\"updated\":\"Verification code accepted\"},\"paranoid_verify\":{\"code_required\":\"Please enter the code our support team provided\"},\"password_expired\":{\"change_required\":\"Your password has expired. Please choose a new password!\",\"show\":{\"change_my_password\":\"Change my password\",\"current_password\":\"Current password\",\"new_password\":\"New password\",\"new_password_confirmation\":\"Confirm new password\",\"renew_your_password\":\"Renew your password\"},\"updated\":\"Your new password is saved.\"},\"passwords\":{\"no_token\":\"You can\\'t access this page without coming from a password reset email. If you do come from a password reset email, please make sure you used the full URL provided.\",\"send_instructions\":\"You will receive an email with instructions about how to reset your password in a few minutes.\",\"send_paranoid_instructions\":\"If your e-mail exists on our database, you will receive a password recovery link on your e-mail\",\"updated\":\"Your password was changed successfully. You are now signed in.\",\"updated_not_active\":\"Your password was changed successfully.\"},\"registrations\":{\"destroyed\":\"Bye! Your account was successfully cancelled. We hope to see you again soon.\",\"signed_up\":\"Welcome! You have signed up successfully.\",\"signed_up_but_inactive\":\"You have signed up successfully. However, we could not sign you in because your account is not yet activated.\",\"signed_up_but_locked\":\"You have signed up successfully. However, we could not sign you in because your account is locked.\",\"signed_up_but_unconfirmed\":\"A message with a confirmation link has been sent to your email address. Please open the link to activate your account.\",\"update_needs_confirmation\":\"You updated your account successfully, but we need to verify your new email address. Please check your email and click on the confirm link to finalize confirming your new email address.\",\"updated\":\"You updated your account successfully.\",\"updated_but_not_signed_in\":\"Your account has been updated successfully, but since your password was changed, you need to sign in again.\"},\"sessions\":{\"already_signed_out\":\"Signed out successfully.\",\"signed_in\":\"Signed in successfully.\",\"signed_out\":\"Signed out successfully.\"},\"unlocks\":{\"send_instructions\":\"You will receive an email with instructions about how to unlock your account in a few minutes.\",\"send_paranoid_instructions\":\"If your account exists, you will receive an email with instructions about how to unlock it in a few minutes.\",\"unlocked\":\"Your account has been unlocked successfully. Please sign in to continue.\"}},\"download\":\"Download\",\"download_30_days\":\"This link will be available for 30 days after which the file will be removed from our servers.\",\"enumerize\":{\"blocklisted_contact\":{\"provider\":{\"insideview\":\"InsideView\",\"zephyr\":\"Zephyr\"}}},\"errors\":{\"format\":\"%{attribute} %{message}\",\"messages\":{\"accepted\":\"must be accepted\",\"already_confirmed\":\"was already confirmed, please try signing in\",\"blank\":\"can\\'t be blank\",\"confirmation\":\"doesn\\'t match %{attribute}\",\"confirmation_period_expired\":\"needs to be confirmed within %{period}, please request a new one\",\"empty\":\"can\\'t be empty\",\"equal_to\":\"must be equal to %{count}\",\"equal_to_current_password\":\"Sorry, must be different to your current password!\",\"equal_to_email\":\"must be different than the email.\",\"even\":\"must be even\",\"exclusion\":\"is reserved\",\"expired\":\"has expired, please request a new one\",\"greater_than\":\"must be greater than %{count}\",\"greater_than_or_equal_to\":\"must be greater than or equal to %{count}\",\"in\":\"must be in %{count}\",\"inclusion\":\"is not included in the list\",\"invalid\":\"is invalid\",\"less_than\":\"must be less than %{count}\",\"less_than_or_equal_to\":\"must be less than or equal to %{count}\",\"model_invalid\":\"Validation failed: %{errors}\",\"not_a_number\":\"is not a number\",\"not_an_integer\":\"must be an integer\",\"not_found\":\"not found\",\"not_locked\":\"was not locked\",\"not_saved\":{\"one\":\"1 error prohibited this %{resource} from being saved:\",\"other\":\"%{count} errors prohibited this %{resource} from being saved:\"},\"odd\":\"must be odd\",\"other_than\":\"must be other than %{count}\",\"password_complexity\":{\"digit\":{\"one\":\"must contain at least one digit\",\"other\":\"must contain at least %{count} digits\"},\"lower\":{\"one\":\"must contain at least one lower-case letter\",\"other\":\"must contain at least %{count} lower-case letters\"},\"symbol\":{\"one\":\"must contain at least one punctuation mark or symbol\",\"other\":\"must contain at least %{count} punctuation marks or symbols\"},\"upper\":{\"one\":\"must contain at least one upper-case letter\",\"other\":\"must contain at least %{count} upper-case letters\"}},\"password_format\":\"Must contain uppercase AND lowercase letters and at least one number\",\"password_too_long\":\"is too long\",\"present\":\"must be blank\",\"required\":\"must exist\",\"taken\":\"has already been taken\",\"taken_in_past\":\"Sorry, you have used this password before!\",\"too_long\":{\"one\":\"is too long (maximum is 1 character)\",\"other\":\"is too long (maximum is %{count} characters)\"},\"too_short\":{\"one\":\"is too short (minimum is 1 character)\",\"other\":\"is too short (minimum is %{count} characters)\"},\"wrong_length\":{\"one\":\"is the wrong length (should be 1 character)\",\"other\":\"is the wrong length (should be %{count} characters)\"}}},\"flash\":{\"actions\":{\"create\":{\"notice\":\"%{resource_name} was successfully created.\"},\"destroy\":{\"alert\":\"%{resource_name} could not be destroyed.\",\"notice\":\"%{resource_name} was successfully destroyed.\"},\"update\":{\"notice\":\"%{resource_name} was successfully updated.\"}}},\"hello_world\":\"Hello world\",\"helpers\":{\"select\":{\"prompt\":\"Please select\"},\"submit\":{\"create\":\"Create %{model}\",\"submit\":\"Save %{model}\",\"update\":\"Update %{model}\"}},\"hi\":\"Hi\",\"mailers\":{\"common\":{\"chummy_sign_off\":\"Have a good one.\",\"final_note\":\"P.S.: If you think you received this email accidentally, then something weird could be going on. Hit reply and a member of the %{brand_name} team will investigate.\",\"team_sign_off\":\"- The %{brand_name} Team\"},\"confirmation_instructions_email\":{\"crm\":{\"salesforce\":{\"resource_confirmed\":\"Someone has requested a resend of a confirmation email. You do not need to confirm your email address because your account is configured to use Salesforce to sign in.\",\"resource_unconfirmed\":\"You do not need to confirm your email address because your account is configured to use Salesforce to sign in, please complete the sign up process by clicking the button below to sign in to %{brand_name} via Salesforce.\"}},\"non_crm\":{\"confirm_link\":\"Confirm my account\",\"welcome\":\"Welcome to %{brand_name}. As the final step in the process you\\'ll need to confirm your account by clicking on the link below.\"},\"subject\":\"Confirmation instructions for %{domain}\"},\"flagged_events_mailer\":{\"from\":\"Flagged events - %{brand_name} \\\\u003cflagged_events@mailer.%{domain}\\\\u003e\"},\"mobile_registration_email\":{\"alert_cs_registration_locked\":{\"subject\":\"%{brand_name}: user has had mobile registration locked, too many failed attempts\"},\"dispatch_registration_PIN\":{\"further_instructions\":\"If you are NOT attempting to register for the %{brand_name} Mobile app then please let us know at %{support_email_link} - thank you.\",\"introduction\":\"Here is your mobile app registration PIN:\",\"subject\":\"%{brand_name} Mobile Registration Verification\"},\"too_many_failed_attempts\":{\"introduction\":\"We have received too many failed mobile device registration attempts for your account and we will block any further requests. If you have not attempted to register a mobile device with us in the last hour then please let us know as it is likely someone has tried on your behalf. If you have been trying to register a device please contact %{support_email_link} and we can help unlock your account and get you registered.\",\"subject\":\"%{brand_name}: too many failed registration attempts\"}},\"org_list_download_mail\":{\"dispatch_link\":{\"introduction\":\"We have finished meshing your %{crm_brand_name} data with the companies in your \\\\\"%{list_name}\\\\\" list.\",\"subject\":\"%{brand_name}: your file download of \\'%{list_name}\\' is ready\"},\"failed\":{\"instructions\":\"You could try again in a little while. If you already have and are receiving this email again, please contact us at %{support_email_link}\",\"introduction\":\"We are really sorry, but something went wrong with creating your download of %{crm_brand_name} data for your \\\\\"%{list_name}\\\\\" list.\",\"subject\":\"%{brand_name}: your file download of \\'%{list_name}\\' failed\"}},\"reset_password_instructions_email\":{\"crm\":{\"salesforce\":{\"change_requested\":\"Someone has requested a change to your password. Your account is configured to use Salesforce to sign in.\"}},\"fishy_fine_print\":\"If you did not request a password change, then something weird is going on. Someone may be trying to access your account (unsuccessfully). Please reply to this email and let us know. We will take steps to make sure it stops.\",\"non_crm\":{\"change_password_link\":\"Change my password\",\"change_requested\":\"Someone has requested a change to your password, you can do this via the link below.\"},\"subject\":\"Password reset instructions for %{domain}\"},\"sales_force_mail\":{\"processing_completed\":{\"bullet_points\":[\"Only show events associated with companies in your Salesforce account\",\"Add new contacts and accounts to your Salesforce account without leaving %{brand_name}\",\"Access the \\'Salesforce details\\' panel on company dashboards where you can see open tasks, team interactions, opportunities, and more!\"],\"further_instructions\":\"We\\'re here to help. If you run into any questions or challenges, please contact us at %{support_email_link} and a member of our team would be more than happy to help.\",\"get_the_most\":\"To get the most from the integration, check out the \\'Mine Salesforce for opportunities\\' guide in the Help Center.\",\"guide_button\":\"Take me to the guide\",\"introduction\":\"Good news - your Salesforce account is now integrated with %{brand_name}. Now you’ll be able to:\"}},\"segment_contact\":{\"report_manager\":{\"fail_subject\":\"%{brand_name}: The PDF report generation failed\",\"success_subject\":\"%{brand_name}: Your PDF for %{company_name} is attached\"}},\"sf_token_expiry_email\":{\"further_instructions\":\"If you run into any questions or challenges, please contact us at %{support_email_link} and a member of our team would be more than happy to help.\",\"introduction\":\"Unfortunately the connection established for you between %{brand_name} and your %{crm_brand_name} account has expired. We will not be able to update your lists in %{brand_name} to reflect your %{crm_brand_name} database. To re-establish the connection, you just need to log in to %{brand_name} using your %{crm_brand_name}.\",\"subject\":\"%{brand_name} to %{crm_brand_name} connection has expired\"},\"share_list_mail\":{\"introduction\":\"%{user_name} shared a list with you: \",\"subject\":\"[%{brand_name} - shared list] %{list_name}\"},\"trial_expiry_mail\":{\"seven_days_to_go\":{\"further_instructions\":\"A member of our fabulous Customer Success team will arrange a welcome call with you to understand your goals and priorities, and will then give you a personalized Tour de %{brand_name} so you can easily access the information that is most valuable to you.\",\"instructions\":\"If you\\'d like continued access to the platform with our flexible month-to-month subscription, please ensure you contact %{support_email_link} ahead of: %{deadline}\",\"introduction\":\"Time flies when you\\'re uncovering new business opportunities! Your %{brand_name} trial is coming to an end next week.\",\"sign_off\":\"We look forward to helping you reach your sales goals!\",\"subject\":\"Just a heads up that your %{brand_name} trial is ending in seven days\"},\"seven_days_to_go_warning_for_cs\":{\"introduction\":\"%{user_name} shared a list with you: \",\"subject\":\"[%{brand_name} - shared list] %{list_name}\"}},\"unlock_instructions_email\":{\"crm\":{\"salesforce\":{\"change_requested\":\"You are being sent this email either because of one too many unsuccessful non-Salesforce log-in attempts or someone has requested an unlock email. %{brand_name} has not locked your account because your account is configured to use Salesforce to sign in.\",\"password_forgotten\":\"If you have forgotten your Salesforce password or think your account has been locked by Salesforce, please follow the instructions provided on the Salesforce sign in page.\"}},\"fishy_fine_print\":\"If you have not been (unsuccessfully) trying to log in to your account, then something weird is going on. Someone may be trying to access your account (unsuccessfully). Please reply to this email and let us know. We will take steps to make sure it stops.\",\"non_crm\":{\"change_requested\":\"For security reasons we have locked your account because of too many log-in attempts. To unlock your account, click the link below.\",\"unlock_account_link\":\"Unlock my account\"},\"subject\":\"Unlock instructions for %{domain}\"}},\"mongoid\":{\"errors\":{\"messages\":{\"ambiguous_relationship\":{\"message\":\"Ambiguous associations %{candidates} defined on %{klass}.\",\"resolution\":\"On the %{name} association on %{inverse} you must add an :inverse_of option to specify the exact association on %{klass} that is the opposite of %{name}.\",\"summary\":\"When Mongoid attempts to set an inverse document of an association in memory, it needs to know which association it belongs to. When setting %{name}, Mongoid looked on the class %{inverse} for a matching association, but multiples were found that could potentially match: %{candidates}.\"},\"blank_in_locale\":\"can\\'t be blank in %{location}\",\"callbacks\":{\"message\":\"Calling %{method} on %{klass} resulted in a false return from a callback.\",\"resolution\":\"Double check all before callbacks to make sure they are not unintentionally returning false.\",\"summary\":\"If a before callback returns false when using Document.create!, Document#save!, or Document#update_attributes! this error will get raised since the document did not actually get saved.\"},\"calling_document_find_with_nil_is_invalid\":{\"message\":\"Calling Document.find with nil is invalid.\",\"resolution\":\"Most likely this is caused by passing parameters directly through to the find, and the parameter either is not present or the key from which it is accessed is incorrect.\",\"summary\":\"Document.find expects the parameters to be 1 or more ids, and will return a single document if 1 id is provided, otherwise an array of documents if multiple ids are provided.\"},\"create_collection_failure\":{\"message\":\"Cannot create collection %{collection_name} with options %{collection_options}. The following error was raised: %{error}.\",\"resolution\":\"Double check that collection options for the collection %{collection_name} are valid. Consult with Ruby driver documentation and MongoDB documentation if the desired options are supported by your version of the server.\",\"summary\":\"The server rejected createCollection command with given collection options. This may happen when some of the options are invalid, or not supported by your version of the server.\"},\"criteria_argument_required\":{\"message\":\"Calling Criteria methods with nil arguments is not allowed.\",\"resolution\":\"Invoke Criteria methods with non-nil arguments or omit the respective invocations.\",\"summary\":\"Arguments to Criteria methods cannot be nil, and most Criteria methods require at least one argument. Only logical operations (and, or, nor and not), `all\\' and `where\\' can be called without arguments. The method that was called with nil argument was: %{query_method}.\"},\"delete_restriction\":{\"message\":\"Cannot destroy %{document} because of dependent \\'%{relation}\\'.\",\"resolution\":\"Don\\'t attempt to delete the parent %{document} when it has children, or change the dependent option on the association.\",\"summary\":\"When defining \\'%{relation}\\' with a :dependent =\\\\u003e :restrict_with_error, Mongoid will raise an error when attempting to destroy the %{document} when the child \\'%{relation}\\' still has documents in it.\"},\"destroy_restrict_with_error_dependencies_exist\":\"is not empty and prevents the document from being destroyed\",\"document_not_destroyed\":{\"message\":\"%{klass} with id %{id} was not destroyed.\",\"resolution\":\"Check the before/after destroy callbacks to ensure that the return values are truthy for the chain to continue.\",\"summary\":\"When calling %{klass}#destroy! and a callback halts the destroy callback chain by returning a false value, the deletion will not actually occur.\"},\"document_not_found\":{\"message\":\"Document(s) not found for class %{klass} with id(s) %{missing}.\",\"resolution\":\"Search for an id that is in the database or set the Mongoid.raise_not_found_error configuration option to false, which will cause nil to be returned instead of raising this error when searching for a single id, or only the matched documents when searching for multiples.\",\"summary\":\"When calling %{klass}.find with an id or array of ids, each parameter must match a document in the database or this error will be raised. The search was for the id(s): %{searched} (%{total} total) and the following ids were not found: %{missing}.\"},\"document_with_attributes_not_found\":{\"message\":\"Document not found for class %{klass} with attributes %{attributes}.\",\"resolution\":\"Search for attributes that are in the database or set the Mongoid.raise_not_found_error configuration option to false, which will cause nil to be returned instead of raising this error.\",\"summary\":\"When calling %{klass}.find_by with a hash of attributes, all attributes provided must match a document in the database or this error will be raised.\"},\"document_with_shard_key_not_found\":{\"message\":\"Document not found for class %{klass} with id %{missing} and shard key %{shard_key}.\",\"resolution\":\"Search for an id/shard key that is in the database or set the Mongoid.raise_not_found_error configuration option to false, which will cause nil to be returned instead of raising this error.\",\"summary\":\"When calling %{klass}.find with an id and a shard key, each parameter must match a document in the database or this error will be raised. The search was for the id: %{missing} with shard_key: %{shard_key} and it was not found.\"},\"drop_collection_failure\":{\"message\":\"Cannot drop collection %{collection_name}.\",\"resolution\":\"Try to drop the collection manually using Ruby driver or mongo shell.\",\"summary\":\"Mongoid tried to drop collection %{collection_name}, but the collection still exists in the database.\"},\"empty_config_file\":{\"message\":\"Empty configuration file: %{path}.\",\"resolution\":\"Ensure your configuration file contains the correct contents. Refer to: https://www.mongodb.com/docs/mongoid/current/reference/configuration/\",\"summary\":\"Your mongoid.yml configuration file appears to be empty.\"},\"immutable_attribute\":{\"message\":\"Attempted to change the immutable attribute \\'%{name}\\' with the value: %{value}.\",\"resolution\":\"Do not attempt to update the value of \\'%{name}\\' after the document is persisted.\",\"summary\":\"Immutable attributes can only have values set when the document is a new record.\"},\"in_memory_collation_not_supported\":{\"message\":\"A collation option cannot be applied when querying documents in-memory.\",\"resolution\":\"Remove the collation option from the query.\",\"summary\":\"The query being run against documents in memory has a collation option set. A collation option is only supported if the query is executed on a MongoDB server with version \\\\u003e= 3.4.\"},\"invalid_async_query_executor\":{\"message\":\"Invalid async_query_executor option: %{executor}.\",\"resolution\":\"Pick an allowed option or fix the typo. If you were expecting the option to be there, please consult the following page with respect to Mongoid\\'s configuration:\\\\n\\\\n   https://www.mongodb.com/docs/mongoid/current/reference/configuration/#mongoid-configuration-options\",\"summary\":\"A invalid async query executor was specified. The valid options are: %{options}.\"},\"invalid_collection\":{\"message\":\"Access to the collection for %{klass} is not allowed.\",\"resolution\":\"For access to the collection that the embedded document is in, use %{klass}#_root.collection, or do not attempt to persist an embedded document without a parent set.\",\"summary\":\"%{klass}.collection was called, and %{klass} is an embedded document - it resides within the collection of the root document of the hierarchy.\"},\"invalid_config_file\":{\"message\":\"Invalid configuration file: %{path}.\",\"resolution\":\"Ensure your configuration file contains the correct contents. Refer to: https://www.mongodb.com/docs/mongoid/current/reference/configuration/\",\"summary\":\"Your mongoid.yml configuration file does not contain the correct file structure.\"},\"invalid_config_option\":{\"message\":\"Invalid configuration option: %{name}.\",\"resolution\":\"Remove the invalid option or fix the typo. If you were expecting the option to be there, please consult the following page with respect to Mongoid\\'s configuration:\\\\n\\\\n   http://mongoid.org/en/mongoid/docs/installation.html\",\"summary\":\"A invalid configuration option was provided in your mongoid.yml, or a typo is potentially present. The valid configuration options are: %{options}.\"},\"invalid_dependent_strategy\":{\"message\":\"Invalid dependent strategy: %{invalid_strategy}.\",\"resolution\":\"Change the dependent strategy to one of the valid types.\",\"summary\":\"An invalid dependent strategy was defined for the association: %{association}. The valid strategies are: %{valid_strategies}.\"},\"invalid_discriminator_key_target\":{\"message\":\"Setting the discriminator key on a child class is not allowed.\",\"resolution\":\"Try setting the discriminator key on %{superclass} or one of %{class_name}\\'s ancestors.\",\"summary\":\"The discriminator key on the class %{class_name} was attempted to be changed. Changing the discriminator key on a child class is not allowed.\"},\"invalid_dot_dollar_assignment\":{\"message\":\"Cannot set the %{attr} attribute on the %{klass} class.\",\"resolution\":\"In order to set fields that start with a dollar sign ($) or contain a dot/period (.), the aggregation pipeline can be used. MongoDB provides specific operators for working with these fields. Refer to the MongoDB documentation here: https://www.mongodb.com/docs/manual/core/dot-dollar-considerations/\",\"summary\":\"Calling the setters for fields that start with a dollar sign ($) or contain a dot/period (.) is prohibited. See the Mongoid documentation on Field Names with Dots/Periods (.) and Dollar Signs ($) for more information.\"},\"invalid_elem_match_operator\":{\"message\":\"Invalid $elemMatch operator \\'%{operator}\\'.\",\"resolution\":\"Valid field operators are: %{valid_operators}. Ensure you are using one of these operators.\",\"summary\":\"You misspelled an operator or are using an operator that Mongoid does not support.\"},\"invalid_estimated_count_criteria\":{\"message\":\"Invalid criteria for estimated_count.\",\"resolution\":\"Try calling estimated_count directly on the class: %{class_name}.estimated_count.\\\\n\\\\n  If the class defines a default scope, use unscoped: %{class_name}.unscoped.estimated_count.\",\"summary\":\"Estimated count is strictly a collection-level operation and cannot be called on a filtered criteria.\"},\"invalid_expression_operator\":{\"message\":\"Invalid expression operator \\'%{operator}\\'.\",\"resolution\":\"Valid expression operators are: %{valid_operators}. Ensure you are using one of these operators.\",\"summary\":\"You misspelled an operator, are using an operator that Mongoid does not support, or are trying to use a field-level operator on expression level.\"},\"invalid_field\":{\"message\":\"Defining a field named \\'%{field}\\' is not allowed.\",\"resolution\":\"Use Mongoid.destructive_fields to see what names are not allowed, and don\\'t use these names. These include names that also conflict with core Ruby methods on Object, Module, Enumerable, or included gems that inject methods into these or Mongoid internals.\",\"summary\":\"Defining this field would override the method \\'%{name}\\', which would cause issues with expectations around the original method and cause extremely hard to debug issues. The original method was defined in:\\\\n   Object: %{origin}\\\\n   File: %{file}\\\\n   Line: %{line}\"},\"invalid_field_operator\":{\"message\":\"Invalid field operator \\'%{operator}\\'.\",\"resolution\":\"Valid field operators are: %{valid_operators}. Ensure you are using one of these operators.\",\"summary\":\"You misspelled an operator, are using an operator that Mongoid does not support, or are trying to use an expression-level operator on field level.\"},\"invalid_field_option\":{\"message\":\"Invalid option :%{option} provided for field :%{name}.\",\"resolution\":\"When defining the field :%{name} on \\'%{klass}\\', please provide valid options for the field. These are currently: %{valid}. If you meant to define a custom field option, please do so first as follows:\\\\n\\\\n   Mongoid::Fields.option :%{option} do |model, field, value|\\\\n     # Your logic here...\\\\n   end\\\\n   class %{klass}\\\\n     include Mongoid::Document\\\\n     field :%{name}, %{option}: true\\\\n   end\\\\n\\\\n Refer to: https://www.mongodb.com/docs/mongoid/current/reference/fields/#custom-field-options\",\"summary\":\"Mongoid requires that you only provide valid options on each field definition in order to prevent unexpected behavior later on.\"},\"invalid_field_type\":{\"message\":\"Invalid field type %{type_inspection} for field \\'%{field}\\' on model \\'%{klass}\\'.\",\"resolution\":\"Please provide a valid type value for the field. Refer to: https://www.mongodb.com/docs/mongoid/current/reference/fields/#using-symbols-or-strings-instead-of-classes\",\"summary\":\"Model \\'%{klass}\\' defines a field \\'%{field}\\' with an unknown type value %{type_inspection}.\"},\"invalid_global_executor_concurrency\":{\"message\":\"Invalid global_executor_concurrency option.\",\"resolution\":\"Set global_executor_concurrency option to :global_thread_pool or remove global_executor_concurrency option.\",\"summary\":\"You set global_executor_concurrency while async_query_executor option is not set to :global_thread_pool. The global_executor_concurrency is allowed only for the global thread pool executor.\"},\"invalid_includes\":{\"message\":\"Invalid includes directive: %{klass}.includes(%{args})\",\"resolution\":\"Ensure that each parameter passed to %{klass}.includes is a valid name of an association on the %{klass} model. These are: %{relations}.\",\"summary\":\"Eager loading in Mongoid only supports providing arguments to %{klass}.includes that are the names of associations on the %{klass}.\"},\"invalid_index\":{\"message\":\"Invalid index specification on %{klass}: %{spec}, %{options}\",\"resolution\":\"Ensure that the index conforms to the correct syntax and has the correct options.\\\\n\\\\n Valid options are:\\\\n   background: true|false\\\\n   database: \\'database_name\\'\\\\n   name: \\'index_name\\'\\\\n   sparse: true|false\\\\n   unique: true|false\\\\n   min: 1\\\\n   max: 1\\\\n   bits: 26\\\\n   key: 26\\\\n   bucket_size : 1\\\\n   sphere_version : 1\\\\n   text_version : 1\\\\n   version : 1\\\\n   weights: { content: 1, title: 2 }\\\\n   expire_after_seconds: number_of_seconds\\\\n   partial_filter_expression\\\\n   storage_engine\\\\n   language_override\\\\n   default_language\\\\n   collation\\\\n   wildcard_projection: { \\'path.to.field.a\\': 1, \\'path.to.field.b\\': 0 }\\\\n Valid types are: 1, -1, \\'2d\\', \\'2dsphere\\', \\'geoHaystack (deprecated)\\', \\'text\\', \\'hashed\\'\\\\n\\\\n Example:\\\\n   class Band\\\\n     include Mongoid::Document\\\\n     index({ name: 1, label: -1 }, { sparse: true })\\\\n     index({ location: \\'2d\\' }, { background: true })\\\\n   end\\\\n\\\\n\",\"summary\":\"Indexes in Mongoid are defined as a hash of field name and direction/2d pairs, with a hash for any additional options.\"},\"invalid_options\":{\"message\":\"Invalid option :%{invalid} provided to association :%{name}.\",\"resolution\":\"Valid options are: %{valid}, make sure these are the ones you are using.\",\"summary\":\"Mongoid checks the options that are passed to the association macros to ensure that no ill side effects occur by letting something slip by.\"},\"invalid_path\":{\"message\":\"Having a root path assigned for %{klass} is invalid.\",\"resolution\":\"Most likely your embedded model, %{klass} is also referenced via a has_many from a root document in another collection. Double check the association definitions and fix any instances where embedded documents are improperly referenced from other collections.\",\"summary\":\"Mongoid has two different path objects for determining the location of a document in the database, Root and Embedded. This error is raised when an embedded document somehow gets a root path assigned.\"},\"invalid_persistence_option\":{\"message\":\"Invalid persistence option :%{invalid}.\",\"resolution\":\"Valid options are: %{valid}, make sure these are the ones you are using.\",\"summary\":\"The options used to change the persistence context must be one of the valid options for a mongo client, or a collection name.\"},\"invalid_relation\":{\"message\":\"Defining an association named \\'%{name}\\' is not allowed.\",\"resolution\":\"Use Mongoid.destructive_fields to see what names are not allowed, and don\\'t use these names. These include names that also conflict with core Ruby methods on Object, Module, Enumerable, or included gems that inject methods into these or Mongoid internals.\",\"summary\":\"Defining this association would override the method \\'%{name}\\', which would cause issues with expectations around the original method and cause extremely hard to debug issues. The original method was defined in:\\\\n   Object: %{origin}\\\\n   File: %{file}\\\\n   Line: %{line}\"},\"invalid_relation_option\":{\"message\":\"Invalid association option :%{option} for association \\'%{name}\\' on class %{klass}.\",\"resolution\":\"Valid options are: %{valid_options}, make sure you use only those.\",\"summary\":\"An invalid option was provided for an association.\"},\"invalid_scope\":{\"message\":\"Defining a scope of value %{value} on %{klass} is not allowed.\",\"resolution\":\"Change the scope to be a proc wrapped criteria.\\\\n\\\\n Example:\\\\n   class Band\\\\n     include Mongoid::Document\\\\n     scope :inactive, -\\\\u003e{ where(active: false) }\\\\n   end\\\\n\\\\n\",\"summary\":\"Scopes in Mongoid must be procs that wrap criteria objects.\"},\"invalid_session_nesting\":{\"message\":\"A session was started while another session was being used.\",\"resolution\":\"Only use one session at a time; sessions cannot be nested.\",\"summary\":\"Sessions cannot be nested. Only one session can be used in a thread at once.\"},\"invalid_session_use\":{\"message\":\"A session was attempted to be used with a model whose client cannot use that session.\",\"resolution\":\"Only execute operations on the model class or instances of the model through which the session was created. Otherwise, ensure that all models on which operations are executed in the session block share the same driver client. For example, a model may have a different client specified in its \\'store_in\\' options.\\\\n\\\\n\",\"summary\":\"Sessions are started via driver clients (Model#mongo_client) and, in most cases, driver clients are shared across models. When different models have their own clients, a session cannot be obtained via one model and used for operations on another model.\"},\"invalid_set_polymorphic_relation\":{\"message\":\"The %{name} attribute can\\'t be set to an instance of %{other_klass} as %{other_klass} has multiple associations referencing %{klass} as %{name}.\",\"resolution\":\"Set the values from the parent, or redefine the association with only a single definition in the parent.\",\"summary\":\"If the parent class of a polymorphic association has multiple definitions for the same association, the values must be set from the parent side and not the child side since Mongoid cannot determine from the child side which association to go in.\"},\"invalid_storage_options\":{\"message\":\"Invalid options passed to %{klass}.store_in: %{options}.\",\"resolution\":\"Change the options passed to store_in to match the documented API, and ensure all keys in the options hash are symbols.\\\\n\\\\n Example:\\\\n   class Band\\\\n     include Mongoid::Document\\\\n     store_in collection: \\'artists\\', database: \\'music\\'\\\\n   end\\\\n\\\\n\",\"summary\":\"The :store_in macro takes only a hash of parameters with the keys :database, :collection, :collection_options, or :client.\"},\"invalid_time\":{\"message\":\"\\'%{value}\\' is not a valid Time.\",\"resolution\":\"Make sure to pass parsable values to the field setter for Date, DateTime, and Time objects. When this is a String it needs to be valid for Time.parse. Other objects must be valid to pass to Time.local.\",\"summary\":\"Mongoid tries to serialize the values for Date, DateTime, and Time into proper UTC times to store in the database. The provided value could not be parsed.\"},\"inverse_not_found\":{\"message\":\"When adding a(n) %{klass} to %{base}#%{name}, Mongoid could not determine the inverse foreign key to set. The attempted key was \\'%{inverse}\\'.\",\"resolution\":\"If an inverse is not required, like a belongs_to or has_and_belongs_to_many, ensure that :inverse_of =\\\\u003e nil is set on the association. If the inverse is needed, most likely the inverse cannot be figured out from the names of the associations and you will need to explicitly tell Mongoid on the association what the inverse is.\\\\n\\\\n Example:\\\\n   class Car\\\\n     include Mongoid::Document\\\\n     has_one :engine, class_name: \\\\\"Motor\\\\\", inverse_of: :machine\\\\n   end\\\\n\\\\n   class Motor\\\\n     include Mongoid::Document\\\\n     belongs_to :machine, class_name: \\\\\"Car\\\\\", inverse_of: :engine\\\\n   end\",\"summary\":\"When adding a document to an association, Mongoid attempts to link the newly added document to the base of the association in memory, as well as set the foreign key to link them on the database side. In this case Mongoid could not determine what the inverse foreign key was.\"},\"message_title\":\"message\",\"mixed_client_configuration\":{\"message\":\"Both uri and standard configuration options defined for client: \\'%{name}\\'.\",\"resolution\":\"Provide either only a uri as configuration or only standard options.\",\"summary\":\"Instead of simply giving uri or standard options a preference order, Mongoid assumes that you have made a mistake in your configuration and requires that you provide one or the other, but not both. The options that were provided were: %{config}.\"},\"mixed_relations\":{\"message\":\"Referencing a(n) %{embedded} document from the %{root} document via a non-embedded association is not allowed since the %{embedded} is embedded.\",\"resolution\":\"Consider not embedding %{embedded}, or do the key storage and access in a custom manner in the application code.\",\"summary\":\"In order to properly access a(n) %{embedded} from %{root} the reference would need to go through the root document of %{embedded}. In a simple case this would require Mongoid to store an extra foreign key for the root, in more complex cases where %{embedded} is multiple levels deep a key would need to be stored for each parent up the hierarchy.\"},\"nested_attributes_metadata_not_found\":{\"message\":\"Could not find metadata for association \\'%{name}\\' on model: %{klass}.\",\"resolution\":\"Make sure that there is an association defined named \\'%{name}\\' on %{klass} or that the association definition comes before the accepts_nested_attributes_for macro in the model - order matters so that Mongoid has access to the metadata.\\\\n\\\\n Example:\\\\n   class Band\\\\n     include Mongoid::Document\\\\n     has_many :albums\\\\n     accepts_nested_attributes_for :albums\\\\n   end\\\\n\\\\n\",\"summary\":\"When defining nested attributes for an association, Mongoid needs to access the metadata for the association \\'%{name}\\' in order if add autosave functionality to it, if applicable. Either no association named \\'%{name}\\' could be found, or the association had not been defined yet.\"},\"no_client_config\":{\"message\":\"No configuration could be found for a client named \\'%{name}\\'.\",\"resolution\":\"Double check your mongoid.yml to make sure under the clients key that a configuration exists for \\'%{name}\\'. If you have set the configuration programmatically, ensure that \\'%{name}\\' exists in the configuration hash.\",\"summary\":\"When attempting to create the new client, Mongoid could not find a client configuration for the name: \\'%{name}\\'. This is necessary in order to know the host, port, and options needed to connect.\"},\"no_client_database\":{\"message\":\"No database provided for client configuration: :%{name}.\",\"resolution\":\"If configuring via a mongoid.yml, ensure that within your :%{name} section a :database value for the client\\'s default database is defined.\\\\n\\\\n Example:\\\\n   development:\\\\n     clients:\\\\n       %{name}:\\\\n         database: my_app_db\\\\n         hosts:\\\\n           - localhost:27017\\\\n\\\\n\",\"summary\":\"Each client configuration must provide a database so Mongoid knows where the default database to persist to. What was provided was: %{config}.\"},\"no_client_hosts\":{\"message\":\"No hosts provided for client configuration: :%{name}.\",\"resolution\":\"If configuring via a mongoid.yml, ensure that within your :%{name} section a :hosts value for the client hosts is defined.\\\\n\\\\n Example:\\\\n   development:\\\\n     clients:\\\\n       %{name}:\\\\n         database: my_app_db\\\\n         hosts:\\\\n           - localhost:27017\\\\n\\\\n\",\"summary\":\"Each client configuration must provide hosts so Mongoid knows where the database server is located. What was provided was: %{config}.\"},\"no_clients_config\":{\"message\":\"No clients configuration provided.\",\"resolution\":\"Double check your mongoid.yml to make sure that you have a top-level clients key with at least 1 default client configuration for it. You can regenerate a new mongoid.yml for assistance via `rails g mongoid:config`.\\\\n\\\\n Example:\\\\n   development:\\\\n     clients:\\\\n       default:\\\\n         database: mongoid_dev\\\\n         hosts:\\\\n           - localhost:27017\\\\n\\\\n\",\"summary\":\"Mongoid\\'s configuration requires that you provide details about each client that can be connected to, and requires in the clients config at least 1 default client to exist.\"},\"no_default_client\":{\"message\":\"No default client configuration is defined.\",\"resolution\":\"If configuring via a mongoid.yml, ensure that within your :clients section a :default client is defined.\\\\n\\\\n Example:\\\\n   development:\\\\n     clients:\\\\n       default:\\\\n         hosts:\\\\n           - localhost:27017\\\\n\\\\n\",\"summary\":\"The configuration provided settings for: %{keys}, but Mongoid requires a :default to be defined at minimum.\"},\"no_documents_found\":{\"message\":\"Could not find a document of class %{klass}.\",\"resolution\":\"Create a document of class %{klass} or use a finder method that does not raise an exception when no documents are found.\",\"summary\":\"Mongoid attempted to find a document of the class %{klass} but none exist.\"},\"no_environment\":{\"message\":\"Could not load the configuration since no environment was defined.\",\"resolution\":\"Please ensure an environment is set in one of the listed locations. The environment must be explicitly set.\",\"summary\":\"Mongoid could not determine the environment to use because it was not specified in any of the following locations: Rails.env, Sinatra::Base.environment, ENV[\\\\\"RACK_ENV\\\\\"], ENV[\\\\\"MONGOID_ENV\\\\\"]. Without knowing the environment, Mongoid cannot load its configuration.\"},\"no_map_reduce_output\":{\"message\":\"No output location was specified for the map/reduce operation.\",\"resolution\":\"Provide the location that the output of the operation is to go by chaining an #out call to the map/reduce.\\\\n\\\\n Example:\\\\n   Band.map_reduce(map, reduce).out(inline: 1)\\\\n\\\\n Valid options for the out function are:\\\\n   inline: 1\\\\n   merge: \\'collection-name\\'\\\\n   replace: \\'collection-name\\'\\\\n   reduce: \\'collection-name\\'\\\\n\\\\n\",\"summary\":\"When executing a map/reduce, you must provide the output location of the results. The attempted command was: %{command}.\"},\"no_metadata\":{\"message\":\"Metadata not found for document of type %{klass}.\",\"resolution\":\"Ensure that your associations on the %{klass} model are all properly defined, and that the inverse associations are also properly defined. Embedded associations must have both the parent (embeds_one/embeds_many) and the inverse (embedded_in) present in order to work properly.\",\"summary\":\"Mongoid sets the metadata of an association on the document when it is either loaded from within the association, or added to one. The presence of the metadata is required in order to provide various functionality around associations. Most likely you are getting this error because the document is embedded and was attempted to be persisted without being associated with a parent, or the association was not properly defined.\"},\"no_parent\":{\"message\":\"Cannot persist embedded document %{klass} without a parent document.\",\"resolution\":\"Ensure that you\\'ve set the parent association if instantiating the embedded document directly, or always create new embedded documents via the parent association.\",\"summary\":\"If the document is embedded, in order to be persisted it must always have a reference to its parent document. This is most likely caused by either calling %{klass}.create or %{klass}.create! without setting the parent document as an attribute.\"},\"readonly_attribute\":{\"message\":\"Attempted to set the readonly attribute \\'%{name}\\' with the value: %{value}.\",\"resolution\":\"Don\\'t define \\'%{name}\\' as readonly, or do not attempt to update its value after the document is persisted.\",\"summary\":\"Attributes flagged as readonly via Model.attr_readonly can only have values set when the document is a new record.\"},\"readonly_document\":{\"message\":\"Attempted to persist a readonly document of class \\'%{klass}\\'.\",\"resolution\":\"Don\\'t attempt to persist documents that are flagged as readonly.\",\"summary\":\"Documents that are marked readonly cannot be persisted.\"},\"resolution_title\":\"resolution\",\"scope_overwrite\":{\"message\":\"Cannot create scope :%{scope_name}, because of existing method %{model_name}.%{scope_name}.\",\"resolution\":\"Change the name of the scope so it does not conflict with the already defined method %{model_name}, or set the configuration option Mongoid.scope_overwrite_exception to false, which is its default. In this case a warning will be logged.\",\"summary\":\"When defining a scope that conflicts with a method that already exists on the model, this error will get raised if Mongoid.scope_overwrite_exception is set to true.\"},\"sessions_not_supported\":{\"message\":\"Sessions are not supported by the connected server(s).\",\"resolution\":\"Verify that all servers in your deployment are at least version 3.6 or don\\'t attempt to use sessions with older server versions.\",\"summary\":\"A session was attempted to be used with a MongoDB server version that doesn\\'t support sessions. Sessions are supported in MongoDB server versions 3.6 and higher.\"},\"summary_title\":\"summary\",\"too_many_nested_attribute_records\":{\"message\":\"Accepting nested attributes for %{association} is limited to %{limit} documents.\",\"resolution\":\"The limit is set as an option to the macro, for example: accepts_nested_attributes_for :%{association}, limit: %{limit}. Consider raising this limit or making sure no more are sent than the set value.\",\"summary\":\"More documents were sent to be processed than the allowed limit.\"},\"unknown_attribute\":{\"message\":\"Attempted to set a value for \\'%{name}\\' which is not allowed on the model %{klass}.\",\"resolution\":\"Define the field \\'%{name}\\' in %{klass}, or include Mongoid::Attributes::Dynamic in %{klass} if you intend to store values in fields that are not explicitly defined.\",\"summary\":\"%{klass}#%{name}= was called but there is no \\'%{name}\\' field defined in the model, and Mongoid::Attributes::Dynamic is not included. This error is also raised instead of NoMethodError if the unknown attribute is passed to any method that accepts an attributes hash, such as #attributes=.\"},\"unknown_model\":{\"message\":\"Attempted to instantiate an object of the unknown model \\'%{klass}\\'.\",\"resolution\":\"The _type field is a reserved one used by Mongoid to determine the class for instantiating an object. Please don\\'t save data in this field or ensure that any values in this field correspond to valid models.\",\"summary\":\"A document with the value \\'%{value}\\' at the key \\'_type\\' was used to instantiate a model object but Mongoid cannot find this Class.\"},\"unsaved_document\":{\"message\":\"Attempted to save %{document} before the parent %{base}.\",\"resolution\":\"Make sure to only use create or create! when the parent document %{base} is persisted.\",\"summary\":\"You cannot call create or create! through the association (%{document}) whose parent (%{base}) is not already saved. This would cause the database to be out of sync since the child could potentially reference a nonexistent parent.\"},\"unsupported_javascript\":{\"message\":\"Executing Javascript $where selector on an embedded criteria is not supported.\",\"resolution\":\"Please provide a standard hash to #where when the criteria is for an embedded association.\",\"summary\":\"Mongoid only supports providing a hash of arguments to #where criterion on embedded documents. Since %{klass} is embedded, the expression %{javascript} is not allowed.\"},\"validations\":{\"message\":\"Validation of %{document} failed.\",\"resolution\":\"Try persisting the document with valid data or remove the validations.\",\"summary\":\"The following errors were found: %{errors}\"}}}},\"number\":{\"currency\":{\"format\":{\"delimiter\":\",\",\"format\":\"%u%n\",\"negative_format\":\"-%u%n\",\"precision\":2,\"separator\":\".\",\"significant\":false,\"strip_insignificant_zeros\":false,\"unit\":\"$\"}},\"format\":{\"delimiter\":\",\",\"precision\":3,\"round_mode\":\"default\",\"separator\":\".\",\"significant\":false,\"strip_insignificant_zeros\":false},\"human\":{\"decimal_units\":{\"format\":\"%n %u\",\"units\":{\"billion\":\"Billion\",\"million\":\"Million\",\"quadrillion\":\"Quadrillion\",\"thousand\":\"Thousand\",\"trillion\":\"Trillion\",\"unit\":\"\"}},\"format\":{\"delimiter\":\"\",\"precision\":3,\"significant\":true,\"strip_insignificant_zeros\":true},\"storage_units\":{\"format\":\"%n %u\",\"units\":{\"byte\":{\"one\":\"Byte\",\"other\":\"Bytes\"},\"eb\":\"EB\",\"gb\":\"GB\",\"kb\":\"KB\",\"mb\":\"MB\",\"pb\":\"PB\",\"tb\":\"TB\",\"zb\":\"ZB\"}}},\"nth\":{},\"percentage\":{\"format\":{\"delimiter\":\"\",\"format\":\"%n%\"}},\"precision\":{\"format\":{\"delimiter\":\"\"}}},\"simple_form\":{\"error_notification\":{\"default_message\":\"Please review the problems below:\"},\"no\":\"No\",\"required\":{\"mark\":\"*\",\"text\":\"required\"},\"yes\":\"Yes\"},\"support\":{\"array\":{\"last_word_connector\":\", and \",\"two_words_connector\":\" and \",\"words_connector\":\", \"}},\"time\":{\"am\":\"am\",\"formats\":{\"default\":\"%a, %d %b %Y %H:%M:%S %z\",\"long\":\"%B %d, %Y %H:%M\",\"short\":\"%d %b %H:%M\"},\"pm\":\"pm\"},\"users\":{\"confirmations\":{\"new\":{\"legend\":\"Resend your %{brand_name} confirmation instructions\",\"message\":\"We need to confirm your email address to complete the sign up process. Supply your email address, below, and we will send you instructions on how to confirm your address.\",\"submit_button\":\"Send Confirmation Instructions\",\"title\":\"Resend confirmation instructions | %{brand_name}\"},\"show\":{\"legend\":\"Check your inbox for a confirmation email\",\"message\":\"If your e-mail exists in our database we have sent you a message with instructions. Check your inbox (or spam folder) for a message from \\'%{default_from_email}\\' containing the confirmation link.\",\"title\":\"Awaiting confirmation | %{brand_name}\"}},\"passwords\":{\"new\":{\"failures\":\"Note: If you make more than 5 sequential failed attempts to sign in with your %{brand_name} password, your account will be (temporarily) locked. Check your inbox for instruction on how to unlock your account, or we can\",\"legend\":\"Reset your %{brand_name} password\",\"message\":\"Supply your email address, below, and we will send you instructions on how to reset your password.\",\"resend_link\":\"resend a new set of unlock instructions\",\"submit_button\":\"Send Reset Instructions\",\"title\":\"Reset password | %{brand_name}\"},\"show\":{\"didnt_receive_email\":\"Didn\\'t receive the email?\",\"legend\":\"Password reset instructions sent\",\"message\":\"If your e-mail exists in our database we have sent you a message with password reset instructions. Check your inbox (or spam folder) for a message from \\'%{default_from_email}\\'.\",\"resend_link\":\"you can request another one here\",\"title\":\"Awaiting reset | %{brand_name}\"}}},\"will_paginate\":{\"container_aria_label\":\"Pagination\",\"next_label\":\"Next \\\\u0026#8594;\",\"page_aria_label\":\"Page %{page}\",\"page_entries_info\":{\"multi_page\":\"Displaying %{model} %{from} - %{to} of %{count} in total\",\"multi_page_html\":\"Displaying %{model} \\\\u003cb\\\\u003e%{from}\\\\u0026nbsp;-\\\\u0026nbsp;%{to}\\\\u003c/b\\\\u003e of \\\\u003cb\\\\u003e%{count}\\\\u003c/b\\\\u003e in total\",\"single_page\":{\"one\":\"Displaying 1 %{model}\",\"other\":\"Displaying all %{count} %{model}\",\"zero\":\"No %{model} found\"},\"single_page_html\":{\"one\":\"Displaying \\\\u003cb\\\\u003e1\\\\u003c/b\\\\u003e %{model}\",\"other\":\"Displaying \\\\u003cb\\\\u003eall\\\\u0026nbsp;%{count}\\\\u003c/b\\\\u003e %{model}\",\"zero\":\"No %{model} found\"}},\"page_gap\":\"\\\\u0026hellip;\",\"previous_label\":\"\\\\u0026#8592; Previous\"}}'));\nI18n.translations[\"es\"] = I18n.extend((I18n.translations[\"es\"] || {}), JSON.parse('{\"activerecord\":{\"errors\":{\"messages\":{\"record_invalid\":\"Validation failed: %{errors}\",\"restrict_dependent_destroy\":{\"has_many\":\"Cannot delete record because dependent %{record} exist\",\"has_one\":\"Cannot delete record because a dependent %{record} exists\"}}}},\"bulk_uploads\":{\"email_local_part\":{\"empty_parameter\":\"No file uploaded\",\"error\":\"File Upload failed: %{error_message}\",\"success\":\"File was successfully uploaded\"}},\"common\":{\"crm\":{\"salesforce\":{\"forgot_password\":\"If you have forgotten your Salesforce password, please follow the instructions provided on the Salesforce sign in page.\",\"sign_in_button\":\"Sign In with Salesforce\"}}},\"contact\":{\"default_from_email\":\"info@zymewire.com\",\"phone_numbers\":[{\"label\":\"US\",\"phone\":\"1-844-996-3321\"},{\"label\":\"UK\",\"phone\":\"+44-208-133-9963\"}],\"support_email\":\"support@zymewire.com\"},\"date\":{\"abbr_day_names\":[\"Sun\",\"Mon\",\"Tue\",\"Wed\",\"Thu\",\"Fri\",\"Sat\"],\"abbr_month_names\":[null,\"Jan\",\"Feb\",\"Mar\",\"Apr\",\"May\",\"Jun\",\"Jul\",\"Aug\",\"Sep\",\"Oct\",\"Nov\",\"Dec\"],\"day_names\":[\"Sunday\",\"Monday\",\"Tuesday\",\"Wednesday\",\"Thursday\",\"Friday\",\"Saturday\"],\"formats\":{\"default\":\"%Y-%m-%d\",\"long\":\"%B %d, %Y\",\"short\":\"%b %d\"},\"month_names\":[null,\"January\",\"February\",\"March\",\"April\",\"May\",\"June\",\"July\",\"August\",\"September\",\"October\",\"November\",\"December\"],\"order\":[\"year\",\"month\",\"day\"]},\"datetime\":{\"distance_in_words\":{\"about_x_hours\":{\"one\":\"about 1 hour\",\"other\":\"about %{count} hours\"},\"about_x_months\":{\"one\":\"about 1 month\",\"other\":\"about %{count} months\"},\"about_x_years\":{\"one\":\"about 1 year\",\"other\":\"about %{count} years\"},\"almost_x_years\":{\"one\":\"almost 1 year\",\"other\":\"almost %{count} years\"},\"half_a_minute\":\"half a minute\",\"less_than_x_minutes\":{\"one\":\"less than a minute\",\"other\":\"less than %{count} minutes\"},\"less_than_x_seconds\":{\"one\":\"less than 1 second\",\"other\":\"less than %{count} seconds\"},\"over_x_years\":{\"one\":\"over 1 year\",\"other\":\"over %{count} years\"},\"x_days\":{\"one\":\"1 day\",\"other\":\"%{count} days\"},\"x_minutes\":{\"one\":\"1 minute\",\"other\":\"%{count} minutes\"},\"x_months\":{\"one\":\"1 month\",\"other\":\"%{count} months\"},\"x_seconds\":{\"one\":\"1 second\",\"other\":\"%{count} seconds\"}},\"prompts\":{\"day\":\"Day\",\"hour\":\"Hour\",\"minute\":\"Minute\",\"month\":\"Month\",\"second\":\"Seconds\",\"year\":\"Year\"}},\"default_host\":\"https://www.zymewire.com\",\"devise\":{\"confirmations\":{\"confirmed\":\"Your account was successfully confirmed. Please sign in.\",\"send_instructions\":\"Your email has not been confirmed. We need to confirm your email account before you can sign in. Please check your inbox or spam folder for an email from \\'info@zymewire.com\\' or request a new one.\",\"send_paranoid_instructions\":\"If your e-mail exists on our database, you will receive an email with instructions about how to confirm your account in a few minutes.\"},\"failure\":{\"already_authenticated\":\"You are already signed in.\",\"expired\":\"Su cuenta ha expirado debido a inactividad. Por favor contacte al administrador de la aplicación.\",\"inactive\":\"Your account was not activated yet.\",\"invalid\":\"Invalid email or password. If you use Salesforce, use the \\'Have Salesforce?\\' panel.\",\"invalid_token\":\"Invalid authentication token.\",\"last_attempt\":\"You have one more attempt before your account is locked.\",\"locked\":\"Your account is locked.\",\"not_active\":\"Your account has been de-activated, if you think this is a mistake please contact us\",\"not_found_in_database\":\"Invalid %{authentication_keys} or password.\",\"session_limited\":\"Sus credenciales de inicio de sesión fueron usadas en otro navegador. Por favor inicie sesión nuevamente para continuar en este navegador.\",\"timeout\":\"Your session expired, please sign in again to continue.\",\"unauthenticated\":\"You need to sign in or sign up before continuing.\",\"unconfirmed\":\"We must confirm your email before you can continue. Please check your inbox or spam folder for a confirmation email from \\'info@zymewire.com\\' or request a new one.\"},\"invalid_captcha\":\"El captcha ingresado es inválido.\",\"invalid_security_question\":\"La respuesta a la pregunta de seguridad fue incorrecta.\",\"mailer\":{\"confirmation_instructions\":{\"subject\":\"Confirmation instructions for Zymewire.com\"},\"email_changed\":{\"subject\":\"Email Changed\"},\"password_change\":{\"subject\":\"Password Changed\"},\"reset_password_instructions\":{\"subject\":\"Reset password instructions for Zymewire.com\"},\"unlock_instructions\":{\"subject\":\"Unlock Instructions for Zymewire.com\"}},\"omniauth_callbacks\":{\"failure\":\"Could not authorize you from %{kind} because \\\\\"%{reason}\\\\\".\",\"success\":\"Successfully authorized from %{kind} account.\"},\"paranoid_verification_code\":{\"show\":{\"submit\":\"Entregar\",\"submit_verification_code\":\"Envíe el código de verificación\",\"verification_code\":\"Código de verificación\"},\"updated\":\"Se acepta el código de verificación\"},\"paranoid_verify\":{\"code_required\":\"Por favor ingrese el código provisto por nuestro equipo de soporte\"},\"password_expired\":{\"change_required\":\"Su contraseña ha expirado. Por favor renueve su contraseña.\",\"show\":{\"change_my_password\":\"Cambiar mi contraseña\",\"current_password\":\"Actual contraseña\",\"new_password\":\"Nueva contraseña\",\"new_password_confirmation\":\"Confirmar nueva contraseña\",\"renew_your_password\":\"Renueve su contraseña\"},\"updated\":\"Su nueva contraseña ha sido guardada.\"},\"passwords\":{\"no_token\":\"You can\\'t access this page without coming from a password reset email. If you do come from a password reset email, please make sure you used the full URL provided.\",\"send_instructions\":\"You will receive an email with instructions about how to reset your password in a few minutes.\",\"send_paranoid_instructions\":\"If your e-mail exists on our database, you will receive a password recovery link on your e-mail\",\"updated\":\"Your password was changed successfully. You are now signed in.\",\"updated_not_active\":\"Your password was changed successfully.\"},\"registrations\":{\"destroyed\":\"Bye! Your account was successfully cancelled. We hope to see you again soon.\",\"signed_up\":\"Welcome! You have signed up successfully.\",\"signed_up_but_inactive\":\"You have signed up successfully. However, we could not sign you in because your account is not yet activated.\",\"signed_up_but_locked\":\"You have signed up successfully. However, we could not sign you in because your account is locked.\",\"signed_up_but_unconfirmed\":\"A message with a confirmation link has been sent to your email address. Please open the link to activate your account.\",\"update_needs_confirmation\":\"You updated your account successfully, but we need to verify your new email address. Please check your email and click on the confirm link to finalize confirming your new email address.\",\"updated\":\"You updated your account successfully.\",\"updated_but_not_signed_in\":\"Your account has been updated successfully, but since your password was changed, you need to sign in again.\"},\"sessions\":{\"already_signed_out\":\"Signed out successfully.\",\"signed_in\":\"Signed in successfully.\",\"signed_out\":\"Signed out successfully.\"},\"unlocks\":{\"send_instructions\":\"You will receive an email with instructions about how to unlock your account in a few minutes.\",\"send_paranoid_instructions\":\"If your account exists, you will receive an email with instructions about how to unlock it in a few minutes.\",\"unlocked\":\"Your account has been unlocked successfully. Please sign in to continue.\"}},\"download\":\"Download\",\"download_30_days\":\"This link will be available for 30 days after which the file will be removed from our servers.\",\"enumerize\":{\"blocklisted_contact\":{\"provider\":{\"insideview\":\"InsideView\",\"zephyr\":\"Zephyr\"}}},\"errors\":{\"format\":\"%{attribute} %{message}\",\"messages\":{\"accepted\":\"must be accepted\",\"already_confirmed\":\"was already confirmed, please try signing in\",\"blank\":\"can\\'t be blank\",\"confirmation\":\"doesn\\'t match %{attribute}\",\"confirmation_period_expired\":\"needs to be confirmed within %{period}, please request a new one\",\"empty\":\"can\\'t be empty\",\"equal_to\":\"must be equal to %{count}\",\"equal_to_current_password\":\"tiene que ser diferente a la contraseña actual.\",\"equal_to_email\":\"tiene que ser diferente al email\",\"even\":\"must be even\",\"exclusion\":\"is reserved\",\"expired\":\"has expired, please request a new one\",\"greater_than\":\"must be greater than %{count}\",\"greater_than_or_equal_to\":\"must be greater than or equal to %{count}\",\"in\":\"must be in %{count}\",\"inclusion\":\"is not included in the list\",\"invalid\":\"is invalid\",\"less_than\":\"must be less than %{count}\",\"less_than_or_equal_to\":\"must be less than or equal to %{count}\",\"model_invalid\":\"Validation failed: %{errors}\",\"not_a_number\":\"is not a number\",\"not_an_integer\":\"must be an integer\",\"not_found\":\"not found\",\"not_locked\":\"was not locked\",\"not_saved\":{\"one\":\"1 error prohibited this %{resource} from being saved:\",\"other\":\"%{count} errors prohibited this %{resource} from being saved:\"},\"odd\":\"must be odd\",\"other_than\":\"must be other than %{count}\",\"password_complexity\":{\"digit\":{\"one\":\"tiene que contener al menos un dígito\",\"other\":\"tiene que contener al menos %{count} dígitos\"},\"lower\":{\"one\":\"tiene que contener al menos una minúscula\",\"other\":\"tiene que contener al menos %{count} minúsculas\"},\"symbol\":{\"one\":\"tiene que contener al menos un signo de puntuación\",\"other\":\"tiene que contener al menos %{count} signos de puntuación\"},\"upper\":{\"one\":\"tiene que contener al menos una mayúscula\",\"other\":\"tiene que contener al menos %{count} mayúsculas\"}},\"password_format\":\"Must contain uppercase AND lowercase letters and at least one number\",\"password_too_long\":\"is too long\",\"present\":\"must be blank\",\"required\":\"must exist\",\"taken\":\"has already been taken\",\"taken_in_past\":\"la contraseña fue usada previamente, por favor elige otra.\",\"too_long\":{\"one\":\"is too long (maximum is 1 character)\",\"other\":\"is too long (maximum is %{count} characters)\"},\"too_short\":{\"one\":\"is too short (minimum is 1 character)\",\"other\":\"is too short (minimum is %{count} characters)\"},\"wrong_length\":{\"one\":\"is the wrong length (should be 1 character)\",\"other\":\"is the wrong length (should be %{count} characters)\"}}},\"flash\":{\"actions\":{\"create\":{\"notice\":\"%{resource_name} was successfully created.\"},\"destroy\":{\"alert\":\"%{resource_name} could not be destroyed.\",\"notice\":\"%{resource_name} was successfully destroyed.\"},\"update\":{\"notice\":\"%{resource_name} was successfully updated.\"}}},\"hello_world\":\"Hello world\",\"helpers\":{\"select\":{\"prompt\":\"Please select\"},\"submit\":{\"create\":\"Create %{model}\",\"submit\":\"Save %{model}\",\"update\":\"Update %{model}\"}},\"hi\":\"Hi\",\"mailers\":{\"common\":{\"chummy_sign_off\":\"Have a good one.\",\"final_note\":\"P.S.: If you think you received this email accidentally, then something weird could be going on. Hit reply and a member of the %{brand_name} team will investigate.\",\"team_sign_off\":\"- The %{brand_name} Team\"},\"confirmation_instructions_email\":{\"crm\":{\"salesforce\":{\"resource_confirmed\":\"Someone has requested a resend of a confirmation email. You do not need to confirm your email address because your account is configured to use Salesforce to sign in.\",\"resource_unconfirmed\":\"You do not need to confirm your email address because your account is configured to use Salesforce to sign in, please complete the sign up process by clicking the button below to sign in to %{brand_name} via Salesforce.\"}},\"non_crm\":{\"confirm_link\":\"Confirm my account\",\"welcome\":\"Welcome to %{brand_name}. As the final step in the process you\\'ll need to confirm your account by clicking on the link below.\"},\"subject\":\"Confirmation instructions for %{domain}\"},\"flagged_events_mailer\":{\"from\":\"Flagged events - %{brand_name} \\\\u003cflagged_events@mailer.%{domain}\\\\u003e\"},\"mobile_registration_email\":{\"alert_cs_registration_locked\":{\"subject\":\"%{brand_name}: user has had mobile registration locked, too many failed attempts\"},\"dispatch_registration_PIN\":{\"further_instructions\":\"If you are NOT attempting to register for the %{brand_name} Mobile app then please let us know at %{support_email_link} - thank you.\",\"introduction\":\"Here is your mobile app registration PIN:\",\"subject\":\"%{brand_name} Mobile Registration Verification\"},\"too_many_failed_attempts\":{\"introduction\":\"We have received too many failed mobile device registration attempts for your account and we will block any further requests. If you have not attempted to register a mobile device with us in the last hour then please let us know as it is likely someone has tried on your behalf. If you have been trying to register a device please contact %{support_email_link} and we can help unlock your account and get you registered.\",\"subject\":\"%{brand_name}: too many failed registration attempts\"}},\"org_list_download_mail\":{\"dispatch_link\":{\"introduction\":\"We have finished meshing your %{crm_brand_name} data with the companies in your \\\\\"%{list_name}\\\\\" list.\",\"subject\":\"%{brand_name}: your file download of \\'%{list_name}\\' is ready\"},\"failed\":{\"instructions\":\"You could try again in a little while. If you already have and are receiving this email again, please contact us at %{support_email_link}\",\"introduction\":\"We are really sorry, but something went wrong with creating your download of %{crm_brand_name} data for your \\\\\"%{list_name}\\\\\" list.\",\"subject\":\"%{brand_name}: your file download of \\'%{list_name}\\' failed\"}},\"reset_password_instructions_email\":{\"crm\":{\"salesforce\":{\"change_requested\":\"Someone has requested a change to your password. Your account is configured to use Salesforce to sign in.\"}},\"fishy_fine_print\":\"If you did not request a password change, then something weird is going on. Someone may be trying to access your account (unsuccessfully). Please reply to this email and let us know. We will take steps to make sure it stops.\",\"non_crm\":{\"change_password_link\":\"Change my password\",\"change_requested\":\"Someone has requested a change to your password, you can do this via the link below.\"},\"subject\":\"Password reset instructions for %{domain}\"},\"sales_force_mail\":{\"processing_completed\":{\"bullet_points\":[\"Only show events associated with companies in your Salesforce account\",\"Add new contacts and accounts to your Salesforce account without leaving %{brand_name}\",\"Access the \\'Salesforce details\\' panel on company dashboards where you can see open tasks, team interactions, opportunities, and more!\"],\"further_instructions\":\"We\\'re here to help. If you run into any questions or challenges, please contact us at %{support_email_link} and a member of our team would be more than happy to help.\",\"get_the_most\":\"To get the most from the integration, check out the \\'Mine Salesforce for opportunities\\' guide in the Help Center.\",\"guide_button\":\"Take me to the guide\",\"introduction\":\"Good news - your Salesforce account is now integrated with %{brand_name}. Now you’ll be able to:\"}},\"segment_contact\":{\"report_manager\":{\"fail_subject\":\"%{brand_name}: The PDF report generation failed\",\"success_subject\":\"%{brand_name}: Your PDF for %{company_name} is attached\"}},\"sf_token_expiry_email\":{\"further_instructions\":\"If you run into any questions or challenges, please contact us at %{support_email_link} and a member of our team would be more than happy to help.\",\"introduction\":\"Unfortunately the connection established for you between %{brand_name} and your %{crm_brand_name} account has expired. We will not be able to update your lists in %{brand_name} to reflect your %{crm_brand_name} database. To re-establish the connection, you just need to log in to %{brand_name} using your %{crm_brand_name}.\",\"subject\":\"%{brand_name} to %{crm_brand_name} connection has expired\"},\"share_list_mail\":{\"introduction\":\"%{user_name} shared a list with you: \",\"subject\":\"[%{brand_name} - shared list] %{list_name}\"},\"trial_expiry_mail\":{\"seven_days_to_go\":{\"further_instructions\":\"A member of our fabulous Customer Success team will arrange a welcome call with you to understand your goals and priorities, and will then give you a personalized Tour de %{brand_name} so you can easily access the information that is most valuable to you.\",\"instructions\":\"If you\\'d like continued access to the platform with our flexible month-to-month subscription, please ensure you contact %{support_email_link} ahead of: %{deadline}\",\"introduction\":\"Time flies when you\\'re uncovering new business opportunities! Your %{brand_name} trial is coming to an end next week.\",\"sign_off\":\"We look forward to helping you reach your sales goals!\",\"subject\":\"Just a heads up that your %{brand_name} trial is ending in seven days\"},\"seven_days_to_go_warning_for_cs\":{\"introduction\":\"%{user_name} shared a list with you: \",\"subject\":\"[%{brand_name} - shared list] %{list_name}\"}},\"unlock_instructions_email\":{\"crm\":{\"salesforce\":{\"change_requested\":\"You are being sent this email either because of one too many unsuccessful non-Salesforce log-in attempts or someone has requested an unlock email. %{brand_name} has not locked your account because your account is configured to use Salesforce to sign in.\",\"password_forgotten\":\"If you have forgotten your Salesforce password or think your account has been locked by Salesforce, please follow the instructions provided on the Salesforce sign in page.\"}},\"fishy_fine_print\":\"If you have not been (unsuccessfully) trying to log in to your account, then something weird is going on. Someone may be trying to access your account (unsuccessfully). Please reply to this email and let us know. We will take steps to make sure it stops.\",\"non_crm\":{\"change_requested\":\"For security reasons we have locked your account because of too many log-in attempts. To unlock your account, click the link below.\",\"unlock_account_link\":\"Unlock my account\"},\"subject\":\"Unlock instructions for %{domain}\"}},\"mongoid\":{\"errors\":{\"messages\":{\"ambiguous_relationship\":{\"message\":\"Ambiguous associations %{candidates} defined on %{klass}.\",\"resolution\":\"On the %{name} association on %{inverse} you must add an :inverse_of option to specify the exact association on %{klass} that is the opposite of %{name}.\",\"summary\":\"When Mongoid attempts to set an inverse document of an association in memory, it needs to know which association it belongs to. When setting %{name}, Mongoid looked on the class %{inverse} for a matching association, but multiples were found that could potentially match: %{candidates}.\"},\"blank_in_locale\":\"can\\'t be blank in %{location}\",\"callbacks\":{\"message\":\"Calling %{method} on %{klass} resulted in a false return from a callback.\",\"resolution\":\"Double check all before callbacks to make sure they are not unintentionally returning false.\",\"summary\":\"If a before callback returns false when using Document.create!, Document#save!, or Document#update_attributes! this error will get raised since the document did not actually get saved.\"},\"calling_document_find_with_nil_is_invalid\":{\"message\":\"Calling Document.find with nil is invalid.\",\"resolution\":\"Most likely this is caused by passing parameters directly through to the find, and the parameter either is not present or the key from which it is accessed is incorrect.\",\"summary\":\"Document.find expects the parameters to be 1 or more ids, and will return a single document if 1 id is provided, otherwise an array of documents if multiple ids are provided.\"},\"create_collection_failure\":{\"message\":\"Cannot create collection %{collection_name} with options %{collection_options}. The following error was raised: %{error}.\",\"resolution\":\"Double check that collection options for the collection %{collection_name} are valid. Consult with Ruby driver documentation and MongoDB documentation if the desired options are supported by your version of the server.\",\"summary\":\"The server rejected createCollection command with given collection options. This may happen when some of the options are invalid, or not supported by your version of the server.\"},\"criteria_argument_required\":{\"message\":\"Calling Criteria methods with nil arguments is not allowed.\",\"resolution\":\"Invoke Criteria methods with non-nil arguments or omit the respective invocations.\",\"summary\":\"Arguments to Criteria methods cannot be nil, and most Criteria methods require at least one argument. Only logical operations (and, or, nor and not), `all\\' and `where\\' can be called without arguments. The method that was called with nil argument was: %{query_method}.\"},\"delete_restriction\":{\"message\":\"Cannot destroy %{document} because of dependent \\'%{relation}\\'.\",\"resolution\":\"Don\\'t attempt to delete the parent %{document} when it has children, or change the dependent option on the association.\",\"summary\":\"When defining \\'%{relation}\\' with a :dependent =\\\\u003e :restrict_with_error, Mongoid will raise an error when attempting to destroy the %{document} when the child \\'%{relation}\\' still has documents in it.\"},\"destroy_restrict_with_error_dependencies_exist\":\"is not empty and prevents the document from being destroyed\",\"document_not_destroyed\":{\"message\":\"%{klass} with id %{id} was not destroyed.\",\"resolution\":\"Check the before/after destroy callbacks to ensure that the return values are truthy for the chain to continue.\",\"summary\":\"When calling %{klass}#destroy! and a callback halts the destroy callback chain by returning a false value, the deletion will not actually occur.\"},\"document_not_found\":{\"message\":\"Document(s) not found for class %{klass} with id(s) %{missing}.\",\"resolution\":\"Search for an id that is in the database or set the Mongoid.raise_not_found_error configuration option to false, which will cause nil to be returned instead of raising this error when searching for a single id, or only the matched documents when searching for multiples.\",\"summary\":\"When calling %{klass}.find with an id or array of ids, each parameter must match a document in the database or this error will be raised. The search was for the id(s): %{searched} (%{total} total) and the following ids were not found: %{missing}.\"},\"document_with_attributes_not_found\":{\"message\":\"Document not found for class %{klass} with attributes %{attributes}.\",\"resolution\":\"Search for attributes that are in the database or set the Mongoid.raise_not_found_error configuration option to false, which will cause nil to be returned instead of raising this error.\",\"summary\":\"When calling %{klass}.find_by with a hash of attributes, all attributes provided must match a document in the database or this error will be raised.\"},\"document_with_shard_key_not_found\":{\"message\":\"Document not found for class %{klass} with id %{missing} and shard key %{shard_key}.\",\"resolution\":\"Search for an id/shard key that is in the database or set the Mongoid.raise_not_found_error configuration option to false, which will cause nil to be returned instead of raising this error.\",\"summary\":\"When calling %{klass}.find with an id and a shard key, each parameter must match a document in the database or this error will be raised. The search was for the id: %{missing} with shard_key: %{shard_key} and it was not found.\"},\"drop_collection_failure\":{\"message\":\"Cannot drop collection %{collection_name}.\",\"resolution\":\"Try to drop the collection manually using Ruby driver or mongo shell.\",\"summary\":\"Mongoid tried to drop collection %{collection_name}, but the collection still exists in the database.\"},\"empty_config_file\":{\"message\":\"Empty configuration file: %{path}.\",\"resolution\":\"Ensure your configuration file contains the correct contents. Refer to: https://www.mongodb.com/docs/mongoid/current/reference/configuration/\",\"summary\":\"Your mongoid.yml configuration file appears to be empty.\"},\"immutable_attribute\":{\"message\":\"Attempted to change the immutable attribute \\'%{name}\\' with the value: %{value}.\",\"resolution\":\"Do not attempt to update the value of \\'%{name}\\' after the document is persisted.\",\"summary\":\"Immutable attributes can only have values set when the document is a new record.\"},\"in_memory_collation_not_supported\":{\"message\":\"A collation option cannot be applied when querying documents in-memory.\",\"resolution\":\"Remove the collation option from the query.\",\"summary\":\"The query being run against documents in memory has a collation option set. A collation option is only supported if the query is executed on a MongoDB server with version \\\\u003e= 3.4.\"},\"invalid_async_query_executor\":{\"message\":\"Invalid async_query_executor option: %{executor}.\",\"resolution\":\"Pick an allowed option or fix the typo. If you were expecting the option to be there, please consult the following page with respect to Mongoid\\'s configuration:\\\\n\\\\n   https://www.mongodb.com/docs/mongoid/current/reference/configuration/#mongoid-configuration-options\",\"summary\":\"A invalid async query executor was specified. The valid options are: %{options}.\"},\"invalid_collection\":{\"message\":\"Access to the collection for %{klass} is not allowed.\",\"resolution\":\"For access to the collection that the embedded document is in, use %{klass}#_root.collection, or do not attempt to persist an embedded document without a parent set.\",\"summary\":\"%{klass}.collection was called, and %{klass} is an embedded document - it resides within the collection of the root document of the hierarchy.\"},\"invalid_config_file\":{\"message\":\"Invalid configuration file: %{path}.\",\"resolution\":\"Ensure your configuration file contains the correct contents. Refer to: https://www.mongodb.com/docs/mongoid/current/reference/configuration/\",\"summary\":\"Your mongoid.yml configuration file does not contain the correct file structure.\"},\"invalid_config_option\":{\"message\":\"Invalid configuration option: %{name}.\",\"resolution\":\"Remove the invalid option or fix the typo. If you were expecting the option to be there, please consult the following page with respect to Mongoid\\'s configuration:\\\\n\\\\n   http://mongoid.org/en/mongoid/docs/installation.html\",\"summary\":\"A invalid configuration option was provided in your mongoid.yml, or a typo is potentially present. The valid configuration options are: %{options}.\"},\"invalid_dependent_strategy\":{\"message\":\"Invalid dependent strategy: %{invalid_strategy}.\",\"resolution\":\"Change the dependent strategy to one of the valid types.\",\"summary\":\"An invalid dependent strategy was defined for the association: %{association}. The valid strategies are: %{valid_strategies}.\"},\"invalid_discriminator_key_target\":{\"message\":\"Setting the discriminator key on a child class is not allowed.\",\"resolution\":\"Try setting the discriminator key on %{superclass} or one of %{class_name}\\'s ancestors.\",\"summary\":\"The discriminator key on the class %{class_name} was attempted to be changed. Changing the discriminator key on a child class is not allowed.\"},\"invalid_dot_dollar_assignment\":{\"message\":\"Cannot set the %{attr} attribute on the %{klass} class.\",\"resolution\":\"In order to set fields that start with a dollar sign ($) or contain a dot/period (.), the aggregation pipeline can be used. MongoDB provides specific operators for working with these fields. Refer to the MongoDB documentation here: https://www.mongodb.com/docs/manual/core/dot-dollar-considerations/\",\"summary\":\"Calling the setters for fields that start with a dollar sign ($) or contain a dot/period (.) is prohibited. See the Mongoid documentation on Field Names with Dots/Periods (.) and Dollar Signs ($) for more information.\"},\"invalid_elem_match_operator\":{\"message\":\"Invalid $elemMatch operator \\'%{operator}\\'.\",\"resolution\":\"Valid field operators are: %{valid_operators}. Ensure you are using one of these operators.\",\"summary\":\"You misspelled an operator or are using an operator that Mongoid does not support.\"},\"invalid_estimated_count_criteria\":{\"message\":\"Invalid criteria for estimated_count.\",\"resolution\":\"Try calling estimated_count directly on the class: %{class_name}.estimated_count.\\\\n\\\\n  If the class defines a default scope, use unscoped: %{class_name}.unscoped.estimated_count.\",\"summary\":\"Estimated count is strictly a collection-level operation and cannot be called on a filtered criteria.\"},\"invalid_expression_operator\":{\"message\":\"Invalid expression operator \\'%{operator}\\'.\",\"resolution\":\"Valid expression operators are: %{valid_operators}. Ensure you are using one of these operators.\",\"summary\":\"You misspelled an operator, are using an operator that Mongoid does not support, or are trying to use a field-level operator on expression level.\"},\"invalid_field\":{\"message\":\"Defining a field named \\'%{field}\\' is not allowed.\",\"resolution\":\"Use Mongoid.destructive_fields to see what names are not allowed, and don\\'t use these names. These include names that also conflict with core Ruby methods on Object, Module, Enumerable, or included gems that inject methods into these or Mongoid internals.\",\"summary\":\"Defining this field would override the method \\'%{name}\\', which would cause issues with expectations around the original method and cause extremely hard to debug issues. The original method was defined in:\\\\n   Object: %{origin}\\\\n   File: %{file}\\\\n   Line: %{line}\"},\"invalid_field_operator\":{\"message\":\"Invalid field operator \\'%{operator}\\'.\",\"resolution\":\"Valid field operators are: %{valid_operators}. Ensure you are using one of these operators.\",\"summary\":\"You misspelled an operator, are using an operator that Mongoid does not support, or are trying to use an expression-level operator on field level.\"},\"invalid_field_option\":{\"message\":\"Invalid option :%{option} provided for field :%{name}.\",\"resolution\":\"When defining the field :%{name} on \\'%{klass}\\', please provide valid options for the field. These are currently: %{valid}. If you meant to define a custom field option, please do so first as follows:\\\\n\\\\n   Mongoid::Fields.option :%{option} do |model, field, value|\\\\n     # Your logic here...\\\\n   end\\\\n   class %{klass}\\\\n     include Mongoid::Document\\\\n     field :%{name}, %{option}: true\\\\n   end\\\\n\\\\n Refer to: https://www.mongodb.com/docs/mongoid/current/reference/fields/#custom-field-options\",\"summary\":\"Mongoid requires that you only provide valid options on each field definition in order to prevent unexpected behavior later on.\"},\"invalid_field_type\":{\"message\":\"Invalid field type %{type_inspection} for field \\'%{field}\\' on model \\'%{klass}\\'.\",\"resolution\":\"Please provide a valid type value for the field. Refer to: https://www.mongodb.com/docs/mongoid/current/reference/fields/#using-symbols-or-strings-instead-of-classes\",\"summary\":\"Model \\'%{klass}\\' defines a field \\'%{field}\\' with an unknown type value %{type_inspection}.\"},\"invalid_global_executor_concurrency\":{\"message\":\"Invalid global_executor_concurrency option.\",\"resolution\":\"Set global_executor_concurrency option to :global_thread_pool or remove global_executor_concurrency option.\",\"summary\":\"You set global_executor_concurrency while async_query_executor option is not set to :global_thread_pool. The global_executor_concurrency is allowed only for the global thread pool executor.\"},\"invalid_includes\":{\"message\":\"Invalid includes directive: %{klass}.includes(%{args})\",\"resolution\":\"Ensure that each parameter passed to %{klass}.includes is a valid name of an association on the %{klass} model. These are: %{relations}.\",\"summary\":\"Eager loading in Mongoid only supports providing arguments to %{klass}.includes that are the names of associations on the %{klass}.\"},\"invalid_index\":{\"message\":\"Invalid index specification on %{klass}: %{spec}, %{options}\",\"resolution\":\"Ensure that the index conforms to the correct syntax and has the correct options.\\\\n\\\\n Valid options are:\\\\n   background: true|false\\\\n   database: \\'database_name\\'\\\\n   name: \\'index_name\\'\\\\n   sparse: true|false\\\\n   unique: true|false\\\\n   min: 1\\\\n   max: 1\\\\n   bits: 26\\\\n   key: 26\\\\n   bucket_size : 1\\\\n   sphere_version : 1\\\\n   text_version : 1\\\\n   version : 1\\\\n   weights: { content: 1, title: 2 }\\\\n   expire_after_seconds: number_of_seconds\\\\n   partial_filter_expression\\\\n   storage_engine\\\\n   language_override\\\\n   default_language\\\\n   collation\\\\n   wildcard_projection: { \\'path.to.field.a\\': 1, \\'path.to.field.b\\': 0 }\\\\n Valid types are: 1, -1, \\'2d\\', \\'2dsphere\\', \\'geoHaystack (deprecated)\\', \\'text\\', \\'hashed\\'\\\\n\\\\n Example:\\\\n   class Band\\\\n     include Mongoid::Document\\\\n     index({ name: 1, label: -1 }, { sparse: true })\\\\n     index({ location: \\'2d\\' }, { background: true })\\\\n   end\\\\n\\\\n\",\"summary\":\"Indexes in Mongoid are defined as a hash of field name and direction/2d pairs, with a hash for any additional options.\"},\"invalid_options\":{\"message\":\"Invalid option :%{invalid} provided to association :%{name}.\",\"resolution\":\"Valid options are: %{valid}, make sure these are the ones you are using.\",\"summary\":\"Mongoid checks the options that are passed to the association macros to ensure that no ill side effects occur by letting something slip by.\"},\"invalid_path\":{\"message\":\"Having a root path assigned for %{klass} is invalid.\",\"resolution\":\"Most likely your embedded model, %{klass} is also referenced via a has_many from a root document in another collection. Double check the association definitions and fix any instances where embedded documents are improperly referenced from other collections.\",\"summary\":\"Mongoid has two different path objects for determining the location of a document in the database, Root and Embedded. This error is raised when an embedded document somehow gets a root path assigned.\"},\"invalid_persistence_option\":{\"message\":\"Invalid persistence option :%{invalid}.\",\"resolution\":\"Valid options are: %{valid}, make sure these are the ones you are using.\",\"summary\":\"The options used to change the persistence context must be one of the valid options for a mongo client, or a collection name.\"},\"invalid_relation\":{\"message\":\"Defining an association named \\'%{name}\\' is not allowed.\",\"resolution\":\"Use Mongoid.destructive_fields to see what names are not allowed, and don\\'t use these names. These include names that also conflict with core Ruby methods on Object, Module, Enumerable, or included gems that inject methods into these or Mongoid internals.\",\"summary\":\"Defining this association would override the method \\'%{name}\\', which would cause issues with expectations around the original method and cause extremely hard to debug issues. The original method was defined in:\\\\n   Object: %{origin}\\\\n   File: %{file}\\\\n   Line: %{line}\"},\"invalid_relation_option\":{\"message\":\"Invalid association option :%{option} for association \\'%{name}\\' on class %{klass}.\",\"resolution\":\"Valid options are: %{valid_options}, make sure you use only those.\",\"summary\":\"An invalid option was provided for an association.\"},\"invalid_scope\":{\"message\":\"Defining a scope of value %{value} on %{klass} is not allowed.\",\"resolution\":\"Change the scope to be a proc wrapped criteria.\\\\n\\\\n Example:\\\\n   class Band\\\\n     include Mongoid::Document\\\\n     scope :inactive, -\\\\u003e{ where(active: false) }\\\\n   end\\\\n\\\\n\",\"summary\":\"Scopes in Mongoid must be procs that wrap criteria objects.\"},\"invalid_session_nesting\":{\"message\":\"A session was started while another session was being used.\",\"resolution\":\"Only use one session at a time; sessions cannot be nested.\",\"summary\":\"Sessions cannot be nested. Only one session can be used in a thread at once.\"},\"invalid_session_use\":{\"message\":\"A session was attempted to be used with a model whose client cannot use that session.\",\"resolution\":\"Only execute operations on the model class or instances of the model through which the session was created. Otherwise, ensure that all models on which operations are executed in the session block share the same driver client. For example, a model may have a different client specified in its \\'store_in\\' options.\\\\n\\\\n\",\"summary\":\"Sessions are started via driver clients (Model#mongo_client) and, in most cases, driver clients are shared across models. When different models have their own clients, a session cannot be obtained via one model and used for operations on another model.\"},\"invalid_set_polymorphic_relation\":{\"message\":\"The %{name} attribute can\\'t be set to an instance of %{other_klass} as %{other_klass} has multiple associations referencing %{klass} as %{name}.\",\"resolution\":\"Set the values from the parent, or redefine the association with only a single definition in the parent.\",\"summary\":\"If the parent class of a polymorphic association has multiple definitions for the same association, the values must be set from the parent side and not the child side since Mongoid cannot determine from the child side which association to go in.\"},\"invalid_storage_options\":{\"message\":\"Invalid options passed to %{klass}.store_in: %{options}.\",\"resolution\":\"Change the options passed to store_in to match the documented API, and ensure all keys in the options hash are symbols.\\\\n\\\\n Example:\\\\n   class Band\\\\n     include Mongoid::Document\\\\n     store_in collection: \\'artists\\', database: \\'music\\'\\\\n   end\\\\n\\\\n\",\"summary\":\"The :store_in macro takes only a hash of parameters with the keys :database, :collection, :collection_options, or :client.\"},\"invalid_time\":{\"message\":\"\\'%{value}\\' is not a valid Time.\",\"resolution\":\"Make sure to pass parsable values to the field setter for Date, DateTime, and Time objects. When this is a String it needs to be valid for Time.parse. Other objects must be valid to pass to Time.local.\",\"summary\":\"Mongoid tries to serialize the values for Date, DateTime, and Time into proper UTC times to store in the database. The provided value could not be parsed.\"},\"inverse_not_found\":{\"message\":\"When adding a(n) %{klass} to %{base}#%{name}, Mongoid could not determine the inverse foreign key to set. The attempted key was \\'%{inverse}\\'.\",\"resolution\":\"If an inverse is not required, like a belongs_to or has_and_belongs_to_many, ensure that :inverse_of =\\\\u003e nil is set on the association. If the inverse is needed, most likely the inverse cannot be figured out from the names of the associations and you will need to explicitly tell Mongoid on the association what the inverse is.\\\\n\\\\n Example:\\\\n   class Car\\\\n     include Mongoid::Document\\\\n     has_one :engine, class_name: \\\\\"Motor\\\\\", inverse_of: :machine\\\\n   end\\\\n\\\\n   class Motor\\\\n     include Mongoid::Document\\\\n     belongs_to :machine, class_name: \\\\\"Car\\\\\", inverse_of: :engine\\\\n   end\",\"summary\":\"When adding a document to an association, Mongoid attempts to link the newly added document to the base of the association in memory, as well as set the foreign key to link them on the database side. In this case Mongoid could not determine what the inverse foreign key was.\"},\"message_title\":\"message\",\"mixed_client_configuration\":{\"message\":\"Both uri and standard configuration options defined for client: \\'%{name}\\'.\",\"resolution\":\"Provide either only a uri as configuration or only standard options.\",\"summary\":\"Instead of simply giving uri or standard options a preference order, Mongoid assumes that you have made a mistake in your configuration and requires that you provide one or the other, but not both. The options that were provided were: %{config}.\"},\"mixed_relations\":{\"message\":\"Referencing a(n) %{embedded} document from the %{root} document via a non-embedded association is not allowed since the %{embedded} is embedded.\",\"resolution\":\"Consider not embedding %{embedded}, or do the key storage and access in a custom manner in the application code.\",\"summary\":\"In order to properly access a(n) %{embedded} from %{root} the reference would need to go through the root document of %{embedded}. In a simple case this would require Mongoid to store an extra foreign key for the root, in more complex cases where %{embedded} is multiple levels deep a key would need to be stored for each parent up the hierarchy.\"},\"nested_attributes_metadata_not_found\":{\"message\":\"Could not find metadata for association \\'%{name}\\' on model: %{klass}.\",\"resolution\":\"Make sure that there is an association defined named \\'%{name}\\' on %{klass} or that the association definition comes before the accepts_nested_attributes_for macro in the model - order matters so that Mongoid has access to the metadata.\\\\n\\\\n Example:\\\\n   class Band\\\\n     include Mongoid::Document\\\\n     has_many :albums\\\\n     accepts_nested_attributes_for :albums\\\\n   end\\\\n\\\\n\",\"summary\":\"When defining nested attributes for an association, Mongoid needs to access the metadata for the association \\'%{name}\\' in order if add autosave functionality to it, if applicable. Either no association named \\'%{name}\\' could be found, or the association had not been defined yet.\"},\"no_client_config\":{\"message\":\"No configuration could be found for a client named \\'%{name}\\'.\",\"resolution\":\"Double check your mongoid.yml to make sure under the clients key that a configuration exists for \\'%{name}\\'. If you have set the configuration programmatically, ensure that \\'%{name}\\' exists in the configuration hash.\",\"summary\":\"When attempting to create the new client, Mongoid could not find a client configuration for the name: \\'%{name}\\'. This is necessary in order to know the host, port, and options needed to connect.\"},\"no_client_database\":{\"message\":\"No database provided for client configuration: :%{name}.\",\"resolution\":\"If configuring via a mongoid.yml, ensure that within your :%{name} section a :database value for the client\\'s default database is defined.\\\\n\\\\n Example:\\\\n   development:\\\\n     clients:\\\\n       %{name}:\\\\n         database: my_app_db\\\\n         hosts:\\\\n           - localhost:27017\\\\n\\\\n\",\"summary\":\"Each client configuration must provide a database so Mongoid knows where the default database to persist to. What was provided was: %{config}.\"},\"no_client_hosts\":{\"message\":\"No hosts provided for client configuration: :%{name}.\",\"resolution\":\"If configuring via a mongoid.yml, ensure that within your :%{name} section a :hosts value for the client hosts is defined.\\\\n\\\\n Example:\\\\n   development:\\\\n     clients:\\\\n       %{name}:\\\\n         database: my_app_db\\\\n         hosts:\\\\n           - localhost:27017\\\\n\\\\n\",\"summary\":\"Each client configuration must provide hosts so Mongoid knows where the database server is located. What was provided was: %{config}.\"},\"no_clients_config\":{\"message\":\"No clients configuration provided.\",\"resolution\":\"Double check your mongoid.yml to make sure that you have a top-level clients key with at least 1 default client configuration for it. You can regenerate a new mongoid.yml for assistance via `rails g mongoid:config`.\\\\n\\\\n Example:\\\\n   development:\\\\n     clients:\\\\n       default:\\\\n         database: mongoid_dev\\\\n         hosts:\\\\n           - localhost:27017\\\\n\\\\n\",\"summary\":\"Mongoid\\'s configuration requires that you provide details about each client that can be connected to, and requires in the clients config at least 1 default client to exist.\"},\"no_default_client\":{\"message\":\"No default client configuration is defined.\",\"resolution\":\"If configuring via a mongoid.yml, ensure that within your :clients section a :default client is defined.\\\\n\\\\n Example:\\\\n   development:\\\\n     clients:\\\\n       default:\\\\n         hosts:\\\\n           - localhost:27017\\\\n\\\\n\",\"summary\":\"The configuration provided settings for: %{keys}, but Mongoid requires a :default to be defined at minimum.\"},\"no_documents_found\":{\"message\":\"Could not find a document of class %{klass}.\",\"resolution\":\"Create a document of class %{klass} or use a finder method that does not raise an exception when no documents are found.\",\"summary\":\"Mongoid attempted to find a document of the class %{klass} but none exist.\"},\"no_environment\":{\"message\":\"Could not load the configuration since no environment was defined.\",\"resolution\":\"Please ensure an environment is set in one of the listed locations. The environment must be explicitly set.\",\"summary\":\"Mongoid could not determine the environment to use because it was not specified in any of the following locations: Rails.env, Sinatra::Base.environment, ENV[\\\\\"RACK_ENV\\\\\"], ENV[\\\\\"MONGOID_ENV\\\\\"]. Without knowing the environment, Mongoid cannot load its configuration.\"},\"no_map_reduce_output\":{\"message\":\"No output location was specified for the map/reduce operation.\",\"resolution\":\"Provide the location that the output of the operation is to go by chaining an #out call to the map/reduce.\\\\n\\\\n Example:\\\\n   Band.map_reduce(map, reduce).out(inline: 1)\\\\n\\\\n Valid options for the out function are:\\\\n   inline: 1\\\\n   merge: \\'collection-name\\'\\\\n   replace: \\'collection-name\\'\\\\n   reduce: \\'collection-name\\'\\\\n\\\\n\",\"summary\":\"When executing a map/reduce, you must provide the output location of the results. The attempted command was: %{command}.\"},\"no_metadata\":{\"message\":\"Metadata not found for document of type %{klass}.\",\"resolution\":\"Ensure that your associations on the %{klass} model are all properly defined, and that the inverse associations are also properly defined. Embedded associations must have both the parent (embeds_one/embeds_many) and the inverse (embedded_in) present in order to work properly.\",\"summary\":\"Mongoid sets the metadata of an association on the document when it is either loaded from within the association, or added to one. The presence of the metadata is required in order to provide various functionality around associations. Most likely you are getting this error because the document is embedded and was attempted to be persisted without being associated with a parent, or the association was not properly defined.\"},\"no_parent\":{\"message\":\"Cannot persist embedded document %{klass} without a parent document.\",\"resolution\":\"Ensure that you\\'ve set the parent association if instantiating the embedded document directly, or always create new embedded documents via the parent association.\",\"summary\":\"If the document is embedded, in order to be persisted it must always have a reference to its parent document. This is most likely caused by either calling %{klass}.create or %{klass}.create! without setting the parent document as an attribute.\"},\"readonly_attribute\":{\"message\":\"Attempted to set the readonly attribute \\'%{name}\\' with the value: %{value}.\",\"resolution\":\"Don\\'t define \\'%{name}\\' as readonly, or do not attempt to update its value after the document is persisted.\",\"summary\":\"Attributes flagged as readonly via Model.attr_readonly can only have values set when the document is a new record.\"},\"readonly_document\":{\"message\":\"Attempted to persist a readonly document of class \\'%{klass}\\'.\",\"resolution\":\"Don\\'t attempt to persist documents that are flagged as readonly.\",\"summary\":\"Documents that are marked readonly cannot be persisted.\"},\"resolution_title\":\"resolution\",\"scope_overwrite\":{\"message\":\"Cannot create scope :%{scope_name}, because of existing method %{model_name}.%{scope_name}.\",\"resolution\":\"Change the name of the scope so it does not conflict with the already defined method %{model_name}, or set the configuration option Mongoid.scope_overwrite_exception to false, which is its default. In this case a warning will be logged.\",\"summary\":\"When defining a scope that conflicts with a method that already exists on the model, this error will get raised if Mongoid.scope_overwrite_exception is set to true.\"},\"sessions_not_supported\":{\"message\":\"Sessions are not supported by the connected server(s).\",\"resolution\":\"Verify that all servers in your deployment are at least version 3.6 or don\\'t attempt to use sessions with older server versions.\",\"summary\":\"A session was attempted to be used with a MongoDB server version that doesn\\'t support sessions. Sessions are supported in MongoDB server versions 3.6 and higher.\"},\"summary_title\":\"summary\",\"too_many_nested_attribute_records\":{\"message\":\"Accepting nested attributes for %{association} is limited to %{limit} documents.\",\"resolution\":\"The limit is set as an option to the macro, for example: accepts_nested_attributes_for :%{association}, limit: %{limit}. Consider raising this limit or making sure no more are sent than the set value.\",\"summary\":\"More documents were sent to be processed than the allowed limit.\"},\"unknown_attribute\":{\"message\":\"Attempted to set a value for \\'%{name}\\' which is not allowed on the model %{klass}.\",\"resolution\":\"Define the field \\'%{name}\\' in %{klass}, or include Mongoid::Attributes::Dynamic in %{klass} if you intend to store values in fields that are not explicitly defined.\",\"summary\":\"%{klass}#%{name}= was called but there is no \\'%{name}\\' field defined in the model, and Mongoid::Attributes::Dynamic is not included. This error is also raised instead of NoMethodError if the unknown attribute is passed to any method that accepts an attributes hash, such as #attributes=.\"},\"unknown_model\":{\"message\":\"Attempted to instantiate an object of the unknown model \\'%{klass}\\'.\",\"resolution\":\"The _type field is a reserved one used by Mongoid to determine the class for instantiating an object. Please don\\'t save data in this field or ensure that any values in this field correspond to valid models.\",\"summary\":\"A document with the value \\'%{value}\\' at the key \\'_type\\' was used to instantiate a model object but Mongoid cannot find this Class.\"},\"unsaved_document\":{\"message\":\"Attempted to save %{document} before the parent %{base}.\",\"resolution\":\"Make sure to only use create or create! when the parent document %{base} is persisted.\",\"summary\":\"You cannot call create or create! through the association (%{document}) whose parent (%{base}) is not already saved. This would cause the database to be out of sync since the child could potentially reference a nonexistent parent.\"},\"unsupported_javascript\":{\"message\":\"Executing Javascript $where selector on an embedded criteria is not supported.\",\"resolution\":\"Please provide a standard hash to #where when the criteria is for an embedded association.\",\"summary\":\"Mongoid only supports providing a hash of arguments to #where criterion on embedded documents. Since %{klass} is embedded, the expression %{javascript} is not allowed.\"},\"validations\":{\"message\":\"Validation of %{document} failed.\",\"resolution\":\"Try persisting the document with valid data or remove the validations.\",\"summary\":\"The following errors were found: %{errors}\"}}}},\"number\":{\"currency\":{\"format\":{\"delimiter\":\",\",\"format\":\"%u%n\",\"negative_format\":\"-%u%n\",\"precision\":2,\"separator\":\".\",\"significant\":false,\"strip_insignificant_zeros\":false,\"unit\":\"$\"}},\"format\":{\"delimiter\":\",\",\"precision\":3,\"round_mode\":\"default\",\"separator\":\".\",\"significant\":false,\"strip_insignificant_zeros\":false},\"human\":{\"decimal_units\":{\"format\":\"%n %u\",\"units\":{\"billion\":\"Billion\",\"million\":\"Million\",\"quadrillion\":\"Quadrillion\",\"thousand\":\"Thousand\",\"trillion\":\"Trillion\",\"unit\":\"\"}},\"format\":{\"delimiter\":\"\",\"precision\":3,\"significant\":true,\"strip_insignificant_zeros\":true},\"storage_units\":{\"format\":\"%n %u\",\"units\":{\"byte\":{\"one\":\"Byte\",\"other\":\"Bytes\"},\"eb\":\"EB\",\"gb\":\"GB\",\"kb\":\"KB\",\"mb\":\"MB\",\"pb\":\"PB\",\"tb\":\"TB\",\"zb\":\"ZB\"}}},\"nth\":{},\"percentage\":{\"format\":{\"delimiter\":\"\",\"format\":\"%n%\"}},\"precision\":{\"format\":{\"delimiter\":\"\"}}},\"simple_form\":{\"error_notification\":{\"default_message\":\"Please review the problems below:\"},\"no\":\"No\",\"required\":{\"mark\":\"*\",\"text\":\"required\"},\"yes\":\"Yes\"},\"support\":{\"array\":{\"last_word_connector\":\", and \",\"two_words_connector\":\" and \",\"words_connector\":\", \"}},\"time\":{\"am\":\"am\",\"formats\":{\"default\":\"%a, %d %b %Y %H:%M:%S %z\",\"long\":\"%B %d, %Y %H:%M\",\"short\":\"%d %b %H:%M\"},\"pm\":\"pm\"},\"users\":{\"confirmations\":{\"new\":{\"legend\":\"Resend your %{brand_name} confirmation instructions\",\"message\":\"We need to confirm your email address to complete the sign up process. Supply your email address, below, and we will send you instructions on how to confirm your address.\",\"submit_button\":\"Send Confirmation Instructions\",\"title\":\"Resend confirmation instructions | %{brand_name}\"},\"show\":{\"legend\":\"Check your inbox for a confirmation email\",\"message\":\"If your e-mail exists in our database we have sent you a message with instructions. Check your inbox (or spam folder) for a message from \\'%{default_from_email}\\' containing the confirmation link.\",\"title\":\"Awaiting confirmation | %{brand_name}\"}},\"passwords\":{\"new\":{\"failures\":\"Note: If you make more than 5 sequential failed attempts to sign in with your %{brand_name} password, your account will be (temporarily) locked. Check your inbox for instruction on how to unlock your account, or we can\",\"legend\":\"Reset your %{brand_name} password\",\"message\":\"Supply your email address, below, and we will send you instructions on how to reset your password.\",\"resend_link\":\"resend a new set of unlock instructions\",\"submit_button\":\"Send Reset Instructions\",\"title\":\"Reset password | %{brand_name}\"},\"show\":{\"didnt_receive_email\":\"Didn\\'t receive the email?\",\"legend\":\"Password reset instructions sent\",\"message\":\"If your e-mail exists in our database we have sent you a message with password reset instructions. Check your inbox (or spam folder) for a message from \\'%{default_from_email}\\'.\",\"resend_link\":\"you can request another one here\",\"title\":\"Awaiting reset | %{brand_name}\"}}},\"will_paginate\":{\"container_aria_label\":\"Pagination\",\"next_label\":\"Next \\\\u0026#8594;\",\"page_aria_label\":\"Page %{page}\",\"page_entries_info\":{\"multi_page\":\"Displaying %{model} %{from} - %{to} of %{count} in total\",\"multi_page_html\":\"Displaying %{model} \\\\u003cb\\\\u003e%{from}\\\\u0026nbsp;-\\\\u0026nbsp;%{to}\\\\u003c/b\\\\u003e of \\\\u003cb\\\\u003e%{count}\\\\u003c/b\\\\u003e in total\",\"single_page\":{\"one\":\"Displaying 1 %{model}\",\"other\":\"Displaying all %{count} %{model}\",\"zero\":\"No %{model} found\"},\"single_page_html\":{\"one\":\"Displaying \\\\u003cb\\\\u003e1\\\\u003c/b\\\\u003e %{model}\",\"other\":\"Displaying \\\\u003cb\\\\u003eall\\\\u0026nbsp;%{count}\\\\u003c/b\\\\u003e %{model}\",\"zero\":\"No %{model} found\"}},\"page_gap\":\"\\\\u0026hellip;\",\"previous_label\":\"\\\\u0026#8592; Previous\"}}'));\nI18n.translations[\"fa\"] = I18n.extend((I18n.translations[\"fa\"] || {}), JSON.parse('{\"activerecord\":{\"errors\":{\"messages\":{\"record_invalid\":\"Validation failed: %{errors}\",\"restrict_dependent_destroy\":{\"has_many\":\"Cannot delete record because dependent %{record} exist\",\"has_one\":\"Cannot delete record because a dependent %{record} exists\"}}}},\"bulk_uploads\":{\"email_local_part\":{\"empty_parameter\":\"No file uploaded\",\"error\":\"File Upload failed: %{error_message}\",\"success\":\"File was successfully uploaded\"}},\"common\":{\"crm\":{\"salesforce\":{\"forgot_password\":\"If you have forgotten your Salesforce password, please follow the instructions provided on the Salesforce sign in page.\",\"sign_in_button\":\"Sign In with Salesforce\"}}},\"contact\":{\"default_from_email\":\"info@zymewire.com\",\"phone_numbers\":[{\"label\":\"US\",\"phone\":\"1-844-996-3321\"},{\"label\":\"UK\",\"phone\":\"+44-208-133-9963\"}],\"support_email\":\"support@zymewire.com\"},\"date\":{\"abbr_day_names\":[\"Sun\",\"Mon\",\"Tue\",\"Wed\",\"Thu\",\"Fri\",\"Sat\"],\"abbr_month_names\":[null,\"Jan\",\"Feb\",\"Mar\",\"Apr\",\"May\",\"Jun\",\"Jul\",\"Aug\",\"Sep\",\"Oct\",\"Nov\",\"Dec\"],\"day_names\":[\"Sunday\",\"Monday\",\"Tuesday\",\"Wednesday\",\"Thursday\",\"Friday\",\"Saturday\"],\"formats\":{\"default\":\"%Y-%m-%d\",\"long\":\"%B %d, %Y\",\"short\":\"%b %d\"},\"month_names\":[null,\"January\",\"February\",\"March\",\"April\",\"May\",\"June\",\"July\",\"August\",\"September\",\"October\",\"November\",\"December\"],\"order\":[\"year\",\"month\",\"day\"]},\"datetime\":{\"distance_in_words\":{\"about_x_hours\":{\"one\":\"about 1 hour\",\"other\":\"about %{count} hours\"},\"about_x_months\":{\"one\":\"about 1 month\",\"other\":\"about %{count} months\"},\"about_x_years\":{\"one\":\"about 1 year\",\"other\":\"about %{count} years\"},\"almost_x_years\":{\"one\":\"almost 1 year\",\"other\":\"almost %{count} years\"},\"half_a_minute\":\"half a minute\",\"less_than_x_minutes\":{\"one\":\"less than a minute\",\"other\":\"less than %{count} minutes\"},\"less_than_x_seconds\":{\"one\":\"less than 1 second\",\"other\":\"less than %{count} seconds\"},\"over_x_years\":{\"one\":\"over 1 year\",\"other\":\"over %{count} years\"},\"x_days\":{\"one\":\"1 day\",\"other\":\"%{count} days\"},\"x_minutes\":{\"one\":\"1 minute\",\"other\":\"%{count} minutes\"},\"x_months\":{\"one\":\"1 month\",\"other\":\"%{count} months\"},\"x_seconds\":{\"one\":\"1 second\",\"other\":\"%{count} seconds\"}},\"prompts\":{\"day\":\"Day\",\"hour\":\"Hour\",\"minute\":\"Minute\",\"month\":\"Month\",\"second\":\"Seconds\",\"year\":\"Year\"}},\"default_host\":\"https://www.zymewire.com\",\"devise\":{\"confirmations\":{\"confirmed\":\"Your account was successfully confirmed. Please sign in.\",\"send_instructions\":\"Your email has not been confirmed. We need to confirm your email account before you can sign in. Please check your inbox or spam folder for an email from \\'info@zymewire.com\\' or request a new one.\",\"send_paranoid_instructions\":\"If your e-mail exists on our database, you will receive an email with instructions about how to confirm your account in a few minutes.\"},\"failure\":{\"already_authenticated\":\"You are already signed in.\",\"expired\":\"حساب شما به دلیل عدم فعالیت منقضی شده است، لطفاً با مدیر سایت تماس بگیرید.\",\"inactive\":\"Your account was not activated yet.\",\"invalid\":\"Invalid email or password. If you use Salesforce, use the \\'Have Salesforce?\\' panel.\",\"invalid_token\":\"Invalid authentication token.\",\"last_attempt\":\"You have one more attempt before your account is locked.\",\"locked\":\"Your account is locked.\",\"not_active\":\"Your account has been de-activated, if you think this is a mistake please contact us\",\"not_found_in_database\":\"Invalid %{authentication_keys} or password.\",\"session_limited\":\"از اطلاعات ورود شما در مرورگر دیگری استفاده شده است، برای ادامه در این مرورگر لطفاً دوباره وارد سیستم شوید\",\"timeout\":\"Your session expired, please sign in again to continue.\",\"unauthenticated\":\"You need to sign in or sign up before continuing.\",\"unconfirmed\":\"We must confirm your email before you can continue. Please check your inbox or spam folder for a confirmation email from \\'info@zymewire.com\\' or request a new one.\"},\"invalid_captcha\":\"اطلاعات وارد شده در کپچا نامعتبر بود\",\"invalid_security_question\":\"پاسخ سوال امنیتی نامعتبر بود\",\"mailer\":{\"confirmation_instructions\":{\"subject\":\"Confirmation instructions for Zymewire.com\"},\"email_changed\":{\"subject\":\"Email Changed\"},\"password_change\":{\"subject\":\"Password Changed\"},\"reset_password_instructions\":{\"subject\":\"Reset password instructions for Zymewire.com\"},\"unlock_instructions\":{\"subject\":\"Unlock Instructions for Zymewire.com\"}},\"omniauth_callbacks\":{\"failure\":\"Could not authorize you from %{kind} because \\\\\"%{reason}\\\\\".\",\"success\":\"Successfully authorized from %{kind} account.\"},\"paranoid_verification_code\":{\"show\":{\"submit\":\"ارسال\",\"submit_verification_code\":\"ارسال کد تاییدیه\",\"verification_code\":\"کد تاییدیه\"},\"updated\":\"کد تأیید پذیرفته شد\"},\"paranoid_verify\":{\"code_required\":\"لطفاً کدی را که تیم پشتیبانی ما ارائه کرده است وارد کنید\"},\"password_expired\":{\"change_required\":\"رمز عبور شما منقضی شده است ،لطفاً رمز خود را تمدید کنید\",\"show\":{\"change_my_password\":\"تغییر رمز عبور\",\"current_password\":\"رمز عبور جاری\",\"new_password\":\"رمز عبور جدید\",\"new_password_confirmation\":\"تکرار رمز جدید\",\"renew_your_password\":\"ساختن رمز عبور جدید\"},\"updated\":\"رمز جدید شما ذخیره شده است\"},\"passwords\":{\"no_token\":\"You can\\'t access this page without coming from a password reset email. If you do come from a password reset email, please make sure you used the full URL provided.\",\"send_instructions\":\"You will receive an email with instructions about how to reset your password in a few minutes.\",\"send_paranoid_instructions\":\"If your e-mail exists on our database, you will receive a password recovery link on your e-mail\",\"updated\":\"Your password was changed successfully. You are now signed in.\",\"updated_not_active\":\"Your password was changed successfully.\"},\"registrations\":{\"destroyed\":\"Bye! Your account was successfully cancelled. We hope to see you again soon.\",\"signed_up\":\"Welcome! You have signed up successfully.\",\"signed_up_but_inactive\":\"You have signed up successfully. However, we could not sign you in because your account is not yet activated.\",\"signed_up_but_locked\":\"You have signed up successfully. However, we could not sign you in because your account is locked.\",\"signed_up_but_unconfirmed\":\"A message with a confirmation link has been sent to your email address. Please open the link to activate your account.\",\"update_needs_confirmation\":\"You updated your account successfully, but we need to verify your new email address. Please check your email and click on the confirm link to finalize confirming your new email address.\",\"updated\":\"You updated your account successfully.\",\"updated_but_not_signed_in\":\"Your account has been updated successfully, but since your password was changed, you need to sign in again.\"},\"sessions\":{\"already_signed_out\":\"Signed out successfully.\",\"signed_in\":\"Signed in successfully.\",\"signed_out\":\"Signed out successfully.\"},\"unlocks\":{\"send_instructions\":\"You will receive an email with instructions about how to unlock your account in a few minutes.\",\"send_paranoid_instructions\":\"If your account exists, you will receive an email with instructions about how to unlock it in a few minutes.\",\"unlocked\":\"Your account has been unlocked successfully. Please sign in to continue.\"}},\"download\":\"Download\",\"download_30_days\":\"This link will be available for 30 days after which the file will be removed from our servers.\",\"enumerize\":{\"blocklisted_contact\":{\"provider\":{\"insideview\":\"InsideView\",\"zephyr\":\"Zephyr\"}}},\"errors\":{\"format\":\"%{attribute} %{message}\",\"messages\":{\"accepted\":\"must be accepted\",\"already_confirmed\":\"was already confirmed, please try signing in\",\"blank\":\"can\\'t be blank\",\"confirmation\":\"doesn\\'t match %{attribute}\",\"confirmation_period_expired\":\"needs to be confirmed within %{period}, please request a new one\",\"empty\":\"can\\'t be empty\",\"equal_to\":\"must be equal to %{count}\",\"equal_to_current_password\":\"باید متفاوت با رمز عبور فعلی باشد\",\"equal_to_email\":\"باید متفاوت از ایمیل باشد\",\"even\":\"must be even\",\"exclusion\":\"is reserved\",\"expired\":\"has expired, please request a new one\",\"greater_than\":\"must be greater than %{count}\",\"greater_than_or_equal_to\":\"must be greater than or equal to %{count}\",\"in\":\"must be in %{count}\",\"inclusion\":\"is not included in the list\",\"invalid\":\"is invalid\",\"less_than\":\"must be less than %{count}\",\"less_than_or_equal_to\":\"must be less than or equal to %{count}\",\"model_invalid\":\"Validation failed: %{errors}\",\"not_a_number\":\"is not a number\",\"not_an_integer\":\"must be an integer\",\"not_found\":\"not found\",\"not_locked\":\"was not locked\",\"not_saved\":{\"one\":\"1 error prohibited this %{resource} from being saved:\",\"other\":\"%{count} errors prohibited this %{resource} from being saved:\"},\"odd\":\"must be odd\",\"other_than\":\"must be other than %{count}\",\"password_complexity\":{\"digit\":{\"one\":\"باید حداقل یک رقم داشته باشد\",\"other\":\"باید حداقل %{count} عدد داشته باشد\"},\"lower\":{\"one\":\"باید حداقل شامل یک حرف کوچک باشد\",\"other\":\"باید حداقل %{count} حروف کوچک داشته باشد\"},\"symbol\":{\"one\":\"باید حداقل دارای یک علامت یا کارکتر خاص باشد\",\"other\":\"باید حداقل دارای %{count} علائم یا کارکتر های خاص باشد\"},\"upper\":{\"one\":\"باید حداقل یک حرف بزرگ داشته باشد\",\"other\":\"باید حداقل %{count} حروف بزرگ داشته باشد\"}},\"password_format\":\"Must contain uppercase AND lowercase letters and at least one number\",\"password_too_long\":\"is too long\",\"present\":\"must be blank\",\"required\":\"must exist\",\"taken\":\"has already been taken\",\"taken_in_past\":\"قبلا استفاده شده است\",\"too_long\":{\"one\":\"is too long (maximum is 1 character)\",\"other\":\"is too long (maximum is %{count} characters)\"},\"too_short\":{\"one\":\"is too short (minimum is 1 character)\",\"other\":\"is too short (minimum is %{count} characters)\"},\"wrong_length\":{\"one\":\"is the wrong length (should be 1 character)\",\"other\":\"is the wrong length (should be %{count} characters)\"}}},\"flash\":{\"actions\":{\"create\":{\"notice\":\"%{resource_name} was successfully created.\"},\"destroy\":{\"alert\":\"%{resource_name} could not be destroyed.\",\"notice\":\"%{resource_name} was successfully destroyed.\"},\"update\":{\"notice\":\"%{resource_name} was successfully updated.\"}}},\"hello_world\":\"Hello world\",\"helpers\":{\"select\":{\"prompt\":\"Please select\"},\"submit\":{\"create\":\"Create %{model}\",\"submit\":\"Save %{model}\",\"update\":\"Update %{model}\"}},\"hi\":\"Hi\",\"mailers\":{\"common\":{\"chummy_sign_off\":\"Have a good one.\",\"final_note\":\"P.S.: If you think you received this email accidentally, then something weird could be going on. Hit reply and a member of the %{brand_name} team will investigate.\",\"team_sign_off\":\"- The %{brand_name} Team\"},\"confirmation_instructions_email\":{\"crm\":{\"salesforce\":{\"resource_confirmed\":\"Someone has requested a resend of a confirmation email. You do not need to confirm your email address because your account is configured to use Salesforce to sign in.\",\"resource_unconfirmed\":\"You do not need to confirm your email address because your account is configured to use Salesforce to sign in, please complete the sign up process by clicking the button below to sign in to %{brand_name} via Salesforce.\"}},\"non_crm\":{\"confirm_link\":\"Confirm my account\",\"welcome\":\"Welcome to %{brand_name}. As the final step in the process you\\'ll need to confirm your account by clicking on the link below.\"},\"subject\":\"Confirmation instructions for %{domain}\"},\"flagged_events_mailer\":{\"from\":\"Flagged events - %{brand_name} \\\\u003cflagged_events@mailer.%{domain}\\\\u003e\"},\"mobile_registration_email\":{\"alert_cs_registration_locked\":{\"subject\":\"%{brand_name}: user has had mobile registration locked, too many failed attempts\"},\"dispatch_registration_PIN\":{\"further_instructions\":\"If you are NOT attempting to register for the %{brand_name} Mobile app then please let us know at %{support_email_link} - thank you.\",\"introduction\":\"Here is your mobile app registration PIN:\",\"subject\":\"%{brand_name} Mobile Registration Verification\"},\"too_many_failed_attempts\":{\"introduction\":\"We have received too many failed mobile device registration attempts for your account and we will block any further requests. If you have not attempted to register a mobile device with us in the last hour then please let us know as it is likely someone has tried on your behalf. If you have been trying to register a device please contact %{support_email_link} and we can help unlock your account and get you registered.\",\"subject\":\"%{brand_name}: too many failed registration attempts\"}},\"org_list_download_mail\":{\"dispatch_link\":{\"introduction\":\"We have finished meshing your %{crm_brand_name} data with the companies in your \\\\\"%{list_name}\\\\\" list.\",\"subject\":\"%{brand_name}: your file download of \\'%{list_name}\\' is ready\"},\"failed\":{\"instructions\":\"You could try again in a little while. If you already have and are receiving this email again, please contact us at %{support_email_link}\",\"introduction\":\"We are really sorry, but something went wrong with creating your download of %{crm_brand_name} data for your \\\\\"%{list_name}\\\\\" list.\",\"subject\":\"%{brand_name}: your file download of \\'%{list_name}\\' failed\"}},\"reset_password_instructions_email\":{\"crm\":{\"salesforce\":{\"change_requested\":\"Someone has requested a change to your password. Your account is configured to use Salesforce to sign in.\"}},\"fishy_fine_print\":\"If you did not request a password change, then something weird is going on. Someone may be trying to access your account (unsuccessfully). Please reply to this email and let us know. We will take steps to make sure it stops.\",\"non_crm\":{\"change_password_link\":\"Change my password\",\"change_requested\":\"Someone has requested a change to your password, you can do this via the link below.\"},\"subject\":\"Password reset instructions for %{domain}\"},\"sales_force_mail\":{\"processing_completed\":{\"bullet_points\":[\"Only show events associated with companies in your Salesforce account\",\"Add new contacts and accounts to your Salesforce account without leaving %{brand_name}\",\"Access the \\'Salesforce details\\' panel on company dashboards where you can see open tasks, team interactions, opportunities, and more!\"],\"further_instructions\":\"We\\'re here to help. If you run into any questions or challenges, please contact us at %{support_email_link} and a member of our team would be more than happy to help.\",\"get_the_most\":\"To get the most from the integration, check out the \\'Mine Salesforce for opportunities\\' guide in the Help Center.\",\"guide_button\":\"Take me to the guide\",\"introduction\":\"Good news - your Salesforce account is now integrated with %{brand_name}. Now you’ll be able to:\"}},\"segment_contact\":{\"report_manager\":{\"fail_subject\":\"%{brand_name}: The PDF report generation failed\",\"success_subject\":\"%{brand_name}: Your PDF for %{company_name} is attached\"}},\"sf_token_expiry_email\":{\"further_instructions\":\"If you run into any questions or challenges, please contact us at %{support_email_link} and a member of our team would be more than happy to help.\",\"introduction\":\"Unfortunately the connection established for you between %{brand_name} and your %{crm_brand_name} account has expired. We will not be able to update your lists in %{brand_name} to reflect your %{crm_brand_name} database. To re-establish the connection, you just need to log in to %{brand_name} using your %{crm_brand_name}.\",\"subject\":\"%{brand_name} to %{crm_brand_name} connection has expired\"},\"share_list_mail\":{\"introduction\":\"%{user_name} shared a list with you: \",\"subject\":\"[%{brand_name} - shared list] %{list_name}\"},\"trial_expiry_mail\":{\"seven_days_to_go\":{\"further_instructions\":\"A member of our fabulous Customer Success team will arrange a welcome call with you to understand your goals and priorities, and will then give you a personalized Tour de %{brand_name} so you can easily access the information that is most valuable to you.\",\"instructions\":\"If you\\'d like continued access to the platform with our flexible month-to-month subscription, please ensure you contact %{support_email_link} ahead of: %{deadline}\",\"introduction\":\"Time flies when you\\'re uncovering new business opportunities! Your %{brand_name} trial is coming to an end next week.\",\"sign_off\":\"We look forward to helping you reach your sales goals!\",\"subject\":\"Just a heads up that your %{brand_name} trial is ending in seven days\"},\"seven_days_to_go_warning_for_cs\":{\"introduction\":\"%{user_name} shared a list with you: \",\"subject\":\"[%{brand_name} - shared list] %{list_name}\"}},\"unlock_instructions_email\":{\"crm\":{\"salesforce\":{\"change_requested\":\"You are being sent this email either because of one too many unsuccessful non-Salesforce log-in attempts or someone has requested an unlock email. %{brand_name} has not locked your account because your account is configured to use Salesforce to sign in.\",\"password_forgotten\":\"If you have forgotten your Salesforce password or think your account has been locked by Salesforce, please follow the instructions provided on the Salesforce sign in page.\"}},\"fishy_fine_print\":\"If you have not been (unsuccessfully) trying to log in to your account, then something weird is going on. Someone may be trying to access your account (unsuccessfully). Please reply to this email and let us know. We will take steps to make sure it stops.\",\"non_crm\":{\"change_requested\":\"For security reasons we have locked your account because of too many log-in attempts. To unlock your account, click the link below.\",\"unlock_account_link\":\"Unlock my account\"},\"subject\":\"Unlock instructions for %{domain}\"}},\"mongoid\":{\"errors\":{\"messages\":{\"ambiguous_relationship\":{\"message\":\"Ambiguous associations %{candidates} defined on %{klass}.\",\"resolution\":\"On the %{name} association on %{inverse} you must add an :inverse_of option to specify the exact association on %{klass} that is the opposite of %{name}.\",\"summary\":\"When Mongoid attempts to set an inverse document of an association in memory, it needs to know which association it belongs to. When setting %{name}, Mongoid looked on the class %{inverse} for a matching association, but multiples were found that could potentially match: %{candidates}.\"},\"blank_in_locale\":\"can\\'t be blank in %{location}\",\"callbacks\":{\"message\":\"Calling %{method} on %{klass} resulted in a false return from a callback.\",\"resolution\":\"Double check all before callbacks to make sure they are not unintentionally returning false.\",\"summary\":\"If a before callback returns false when using Document.create!, Document#save!, or Document#update_attributes! this error will get raised since the document did not actually get saved.\"},\"calling_document_find_with_nil_is_invalid\":{\"message\":\"Calling Document.find with nil is invalid.\",\"resolution\":\"Most likely this is caused by passing parameters directly through to the find, and the parameter either is not present or the key from which it is accessed is incorrect.\",\"summary\":\"Document.find expects the parameters to be 1 or more ids, and will return a single document if 1 id is provided, otherwise an array of documents if multiple ids are provided.\"},\"create_collection_failure\":{\"message\":\"Cannot create collection %{collection_name} with options %{collection_options}. The following error was raised: %{error}.\",\"resolution\":\"Double check that collection options for the collection %{collection_name} are valid. Consult with Ruby driver documentation and MongoDB documentation if the desired options are supported by your version of the server.\",\"summary\":\"The server rejected createCollection command with given collection options. This may happen when some of the options are invalid, or not supported by your version of the server.\"},\"criteria_argument_required\":{\"message\":\"Calling Criteria methods with nil arguments is not allowed.\",\"resolution\":\"Invoke Criteria methods with non-nil arguments or omit the respective invocations.\",\"summary\":\"Arguments to Criteria methods cannot be nil, and most Criteria methods require at least one argument. Only logical operations (and, or, nor and not), `all\\' and `where\\' can be called without arguments. The method that was called with nil argument was: %{query_method}.\"},\"delete_restriction\":{\"message\":\"Cannot destroy %{document} because of dependent \\'%{relation}\\'.\",\"resolution\":\"Don\\'t attempt to delete the parent %{document} when it has children, or change the dependent option on the association.\",\"summary\":\"When defining \\'%{relation}\\' with a :dependent =\\\\u003e :restrict_with_error, Mongoid will raise an error when attempting to destroy the %{document} when the child \\'%{relation}\\' still has documents in it.\"},\"destroy_restrict_with_error_dependencies_exist\":\"is not empty and prevents the document from being destroyed\",\"document_not_destroyed\":{\"message\":\"%{klass} with id %{id} was not destroyed.\",\"resolution\":\"Check the before/after destroy callbacks to ensure that the return values are truthy for the chain to continue.\",\"summary\":\"When calling %{klass}#destroy! and a callback halts the destroy callback chain by returning a false value, the deletion will not actually occur.\"},\"document_not_found\":{\"message\":\"Document(s) not found for class %{klass} with id(s) %{missing}.\",\"resolution\":\"Search for an id that is in the database or set the Mongoid.raise_not_found_error configuration option to false, which will cause nil to be returned instead of raising this error when searching for a single id, or only the matched documents when searching for multiples.\",\"summary\":\"When calling %{klass}.find with an id or array of ids, each parameter must match a document in the database or this error will be raised. The search was for the id(s): %{searched} (%{total} total) and the following ids were not found: %{missing}.\"},\"document_with_attributes_not_found\":{\"message\":\"Document not found for class %{klass} with attributes %{attributes}.\",\"resolution\":\"Search for attributes that are in the database or set the Mongoid.raise_not_found_error configuration option to false, which will cause nil to be returned instead of raising this error.\",\"summary\":\"When calling %{klass}.find_by with a hash of attributes, all attributes provided must match a document in the database or this error will be raised.\"},\"document_with_shard_key_not_found\":{\"message\":\"Document not found for class %{klass} with id %{missing} and shard key %{shard_key}.\",\"resolution\":\"Search for an id/shard key that is in the database or set the Mongoid.raise_not_found_error configuration option to false, which will cause nil to be returned instead of raising this error.\",\"summary\":\"When calling %{klass}.find with an id and a shard key, each parameter must match a document in the database or this error will be raised. The search was for the id: %{missing} with shard_key: %{shard_key} and it was not found.\"},\"drop_collection_failure\":{\"message\":\"Cannot drop collection %{collection_name}.\",\"resolution\":\"Try to drop the collection manually using Ruby driver or mongo shell.\",\"summary\":\"Mongoid tried to drop collection %{collection_name}, but the collection still exists in the database.\"},\"empty_config_file\":{\"message\":\"Empty configuration file: %{path}.\",\"resolution\":\"Ensure your configuration file contains the correct contents. Refer to: https://www.mongodb.com/docs/mongoid/current/reference/configuration/\",\"summary\":\"Your mongoid.yml configuration file appears to be empty.\"},\"immutable_attribute\":{\"message\":\"Attempted to change the immutable attribute \\'%{name}\\' with the value: %{value}.\",\"resolution\":\"Do not attempt to update the value of \\'%{name}\\' after the document is persisted.\",\"summary\":\"Immutable attributes can only have values set when the document is a new record.\"},\"in_memory_collation_not_supported\":{\"message\":\"A collation option cannot be applied when querying documents in-memory.\",\"resolution\":\"Remove the collation option from the query.\",\"summary\":\"The query being run against documents in memory has a collation option set. A collation option is only supported if the query is executed on a MongoDB server with version \\\\u003e= 3.4.\"},\"invalid_async_query_executor\":{\"message\":\"Invalid async_query_executor option: %{executor}.\",\"resolution\":\"Pick an allowed option or fix the typo. If you were expecting the option to be there, please consult the following page with respect to Mongoid\\'s configuration:\\\\n\\\\n   https://www.mongodb.com/docs/mongoid/current/reference/configuration/#mongoid-configuration-options\",\"summary\":\"A invalid async query executor was specified. The valid options are: %{options}.\"},\"invalid_collection\":{\"message\":\"Access to the collection for %{klass} is not allowed.\",\"resolution\":\"For access to the collection that the embedded document is in, use %{klass}#_root.collection, or do not attempt to persist an embedded document without a parent set.\",\"summary\":\"%{klass}.collection was called, and %{klass} is an embedded document - it resides within the collection of the root document of the hierarchy.\"},\"invalid_config_file\":{\"message\":\"Invalid configuration file: %{path}.\",\"resolution\":\"Ensure your configuration file contains the correct contents. Refer to: https://www.mongodb.com/docs/mongoid/current/reference/configuration/\",\"summary\":\"Your mongoid.yml configuration file does not contain the correct file structure.\"},\"invalid_config_option\":{\"message\":\"Invalid configuration option: %{name}.\",\"resolution\":\"Remove the invalid option or fix the typo. If you were expecting the option to be there, please consult the following page with respect to Mongoid\\'s configuration:\\\\n\\\\n   http://mongoid.org/en/mongoid/docs/installation.html\",\"summary\":\"A invalid configuration option was provided in your mongoid.yml, or a typo is potentially present. The valid configuration options are: %{options}.\"},\"invalid_dependent_strategy\":{\"message\":\"Invalid dependent strategy: %{invalid_strategy}.\",\"resolution\":\"Change the dependent strategy to one of the valid types.\",\"summary\":\"An invalid dependent strategy was defined for the association: %{association}. The valid strategies are: %{valid_strategies}.\"},\"invalid_discriminator_key_target\":{\"message\":\"Setting the discriminator key on a child class is not allowed.\",\"resolution\":\"Try setting the discriminator key on %{superclass} or one of %{class_name}\\'s ancestors.\",\"summary\":\"The discriminator key on the class %{class_name} was attempted to be changed. Changing the discriminator key on a child class is not allowed.\"},\"invalid_dot_dollar_assignment\":{\"message\":\"Cannot set the %{attr} attribute on the %{klass} class.\",\"resolution\":\"In order to set fields that start with a dollar sign ($) or contain a dot/period (.), the aggregation pipeline can be used. MongoDB provides specific operators for working with these fields. Refer to the MongoDB documentation here: https://www.mongodb.com/docs/manual/core/dot-dollar-considerations/\",\"summary\":\"Calling the setters for fields that start with a dollar sign ($) or contain a dot/period (.) is prohibited. See the Mongoid documentation on Field Names with Dots/Periods (.) and Dollar Signs ($) for more information.\"},\"invalid_elem_match_operator\":{\"message\":\"Invalid $elemMatch operator \\'%{operator}\\'.\",\"resolution\":\"Valid field operators are: %{valid_operators}. Ensure you are using one of these operators.\",\"summary\":\"You misspelled an operator or are using an operator that Mongoid does not support.\"},\"invalid_estimated_count_criteria\":{\"message\":\"Invalid criteria for estimated_count.\",\"resolution\":\"Try calling estimated_count directly on the class: %{class_name}.estimated_count.\\\\n\\\\n  If the class defines a default scope, use unscoped: %{class_name}.unscoped.estimated_count.\",\"summary\":\"Estimated count is strictly a collection-level operation and cannot be called on a filtered criteria.\"},\"invalid_expression_operator\":{\"message\":\"Invalid expression operator \\'%{operator}\\'.\",\"resolution\":\"Valid expression operators are: %{valid_operators}. Ensure you are using one of these operators.\",\"summary\":\"You misspelled an operator, are using an operator that Mongoid does not support, or are trying to use a field-level operator on expression level.\"},\"invalid_field\":{\"message\":\"Defining a field named \\'%{field}\\' is not allowed.\",\"resolution\":\"Use Mongoid.destructive_fields to see what names are not allowed, and don\\'t use these names. These include names that also conflict with core Ruby methods on Object, Module, Enumerable, or included gems that inject methods into these or Mongoid internals.\",\"summary\":\"Defining this field would override the method \\'%{name}\\', which would cause issues with expectations around the original method and cause extremely hard to debug issues. The original method was defined in:\\\\n   Object: %{origin}\\\\n   File: %{file}\\\\n   Line: %{line}\"},\"invalid_field_operator\":{\"message\":\"Invalid field operator \\'%{operator}\\'.\",\"resolution\":\"Valid field operators are: %{valid_operators}. Ensure you are using one of these operators.\",\"summary\":\"You misspelled an operator, are using an operator that Mongoid does not support, or are trying to use an expression-level operator on field level.\"},\"invalid_field_option\":{\"message\":\"Invalid option :%{option} provided for field :%{name}.\",\"resolution\":\"When defining the field :%{name} on \\'%{klass}\\', please provide valid options for the field. These are currently: %{valid}. If you meant to define a custom field option, please do so first as follows:\\\\n\\\\n   Mongoid::Fields.option :%{option} do |model, field, value|\\\\n     # Your logic here...\\\\n   end\\\\n   class %{klass}\\\\n     include Mongoid::Document\\\\n     field :%{name}, %{option}: true\\\\n   end\\\\n\\\\n Refer to: https://www.mongodb.com/docs/mongoid/current/reference/fields/#custom-field-options\",\"summary\":\"Mongoid requires that you only provide valid options on each field definition in order to prevent unexpected behavior later on.\"},\"invalid_field_type\":{\"message\":\"Invalid field type %{type_inspection} for field \\'%{field}\\' on model \\'%{klass}\\'.\",\"resolution\":\"Please provide a valid type value for the field. Refer to: https://www.mongodb.com/docs/mongoid/current/reference/fields/#using-symbols-or-strings-instead-of-classes\",\"summary\":\"Model \\'%{klass}\\' defines a field \\'%{field}\\' with an unknown type value %{type_inspection}.\"},\"invalid_global_executor_concurrency\":{\"message\":\"Invalid global_executor_concurrency option.\",\"resolution\":\"Set global_executor_concurrency option to :global_thread_pool or remove global_executor_concurrency option.\",\"summary\":\"You set global_executor_concurrency while async_query_executor option is not set to :global_thread_pool. The global_executor_concurrency is allowed only for the global thread pool executor.\"},\"invalid_includes\":{\"message\":\"Invalid includes directive: %{klass}.includes(%{args})\",\"resolution\":\"Ensure that each parameter passed to %{klass}.includes is a valid name of an association on the %{klass} model. These are: %{relations}.\",\"summary\":\"Eager loading in Mongoid only supports providing arguments to %{klass}.includes that are the names of associations on the %{klass}.\"},\"invalid_index\":{\"message\":\"Invalid index specification on %{klass}: %{spec}, %{options}\",\"resolution\":\"Ensure that the index conforms to the correct syntax and has the correct options.\\\\n\\\\n Valid options are:\\\\n   background: true|false\\\\n   database: \\'database_name\\'\\\\n   name: \\'index_name\\'\\\\n   sparse: true|false\\\\n   unique: true|false\\\\n   min: 1\\\\n   max: 1\\\\n   bits: 26\\\\n   key: 26\\\\n   bucket_size : 1\\\\n   sphere_version : 1\\\\n   text_version : 1\\\\n   version : 1\\\\n   weights: { content: 1, title: 2 }\\\\n   expire_after_seconds: number_of_seconds\\\\n   partial_filter_expression\\\\n   storage_engine\\\\n   language_override\\\\n   default_language\\\\n   collation\\\\n   wildcard_projection: { \\'path.to.field.a\\': 1, \\'path.to.field.b\\': 0 }\\\\n Valid types are: 1, -1, \\'2d\\', \\'2dsphere\\', \\'geoHaystack (deprecated)\\', \\'text\\', \\'hashed\\'\\\\n\\\\n Example:\\\\n   class Band\\\\n     include Mongoid::Document\\\\n     index({ name: 1, label: -1 }, { sparse: true })\\\\n     index({ location: \\'2d\\' }, { background: true })\\\\n   end\\\\n\\\\n\",\"summary\":\"Indexes in Mongoid are defined as a hash of field name and direction/2d pairs, with a hash for any additional options.\"},\"invalid_options\":{\"message\":\"Invalid option :%{invalid} provided to association :%{name}.\",\"resolution\":\"Valid options are: %{valid}, make sure these are the ones you are using.\",\"summary\":\"Mongoid checks the options that are passed to the association macros to ensure that no ill side effects occur by letting something slip by.\"},\"invalid_path\":{\"message\":\"Having a root path assigned for %{klass} is invalid.\",\"resolution\":\"Most likely your embedded model, %{klass} is also referenced via a has_many from a root document in another collection. Double check the association definitions and fix any instances where embedded documents are improperly referenced from other collections.\",\"summary\":\"Mongoid has two different path objects for determining the location of a document in the database, Root and Embedded. This error is raised when an embedded document somehow gets a root path assigned.\"},\"invalid_persistence_option\":{\"message\":\"Invalid persistence option :%{invalid}.\",\"resolution\":\"Valid options are: %{valid}, make sure these are the ones you are using.\",\"summary\":\"The options used to change the persistence context must be one of the valid options for a mongo client, or a collection name.\"},\"invalid_relation\":{\"message\":\"Defining an association named \\'%{name}\\' is not allowed.\",\"resolution\":\"Use Mongoid.destructive_fields to see what names are not allowed, and don\\'t use these names. These include names that also conflict with core Ruby methods on Object, Module, Enumerable, or included gems that inject methods into these or Mongoid internals.\",\"summary\":\"Defining this association would override the method \\'%{name}\\', which would cause issues with expectations around the original method and cause extremely hard to debug issues. The original method was defined in:\\\\n   Object: %{origin}\\\\n   File: %{file}\\\\n   Line: %{line}\"},\"invalid_relation_option\":{\"message\":\"Invalid association option :%{option} for association \\'%{name}\\' on class %{klass}.\",\"resolution\":\"Valid options are: %{valid_options}, make sure you use only those.\",\"summary\":\"An invalid option was provided for an association.\"},\"invalid_scope\":{\"message\":\"Defining a scope of value %{value} on %{klass} is not allowed.\",\"resolution\":\"Change the scope to be a proc wrapped criteria.\\\\n\\\\n Example:\\\\n   class Band\\\\n     include Mongoid::Document\\\\n     scope :inactive, -\\\\u003e{ where(active: false) }\\\\n   end\\\\n\\\\n\",\"summary\":\"Scopes in Mongoid must be procs that wrap criteria objects.\"},\"invalid_session_nesting\":{\"message\":\"A session was started while another session was being used.\",\"resolution\":\"Only use one session at a time; sessions cannot be nested.\",\"summary\":\"Sessions cannot be nested. Only one session can be used in a thread at once.\"},\"invalid_session_use\":{\"message\":\"A session was attempted to be used with a model whose client cannot use that session.\",\"resolution\":\"Only execute operations on the model class or instances of the model through which the session was created. Otherwise, ensure that all models on which operations are executed in the session block share the same driver client. For example, a model may have a different client specified in its \\'store_in\\' options.\\\\n\\\\n\",\"summary\":\"Sessions are started via driver clients (Model#mongo_client) and, in most cases, driver clients are shared across models. When different models have their own clients, a session cannot be obtained via one model and used for operations on another model.\"},\"invalid_set_polymorphic_relation\":{\"message\":\"The %{name} attribute can\\'t be set to an instance of %{other_klass} as %{other_klass} has multiple associations referencing %{klass} as %{name}.\",\"resolution\":\"Set the values from the parent, or redefine the association with only a single definition in the parent.\",\"summary\":\"If the parent class of a polymorphic association has multiple definitions for the same association, the values must be set from the parent side and not the child side since Mongoid cannot determine from the child side which association to go in.\"},\"invalid_storage_options\":{\"message\":\"Invalid options passed to %{klass}.store_in: %{options}.\",\"resolution\":\"Change the options passed to store_in to match the documented API, and ensure all keys in the options hash are symbols.\\\\n\\\\n Example:\\\\n   class Band\\\\n     include Mongoid::Document\\\\n     store_in collection: \\'artists\\', database: \\'music\\'\\\\n   end\\\\n\\\\n\",\"summary\":\"The :store_in macro takes only a hash of parameters with the keys :database, :collection, :collection_options, or :client.\"},\"invalid_time\":{\"message\":\"\\'%{value}\\' is not a valid Time.\",\"resolution\":\"Make sure to pass parsable values to the field setter for Date, DateTime, and Time objects. When this is a String it needs to be valid for Time.parse. Other objects must be valid to pass to Time.local.\",\"summary\":\"Mongoid tries to serialize the values for Date, DateTime, and Time into proper UTC times to store in the database. The provided value could not be parsed.\"},\"inverse_not_found\":{\"message\":\"When adding a(n) %{klass} to %{base}#%{name}, Mongoid could not determine the inverse foreign key to set. The attempted key was \\'%{inverse}\\'.\",\"resolution\":\"If an inverse is not required, like a belongs_to or has_and_belongs_to_many, ensure that :inverse_of =\\\\u003e nil is set on the association. If the inverse is needed, most likely the inverse cannot be figured out from the names of the associations and you will need to explicitly tell Mongoid on the association what the inverse is.\\\\n\\\\n Example:\\\\n   class Car\\\\n     include Mongoid::Document\\\\n     has_one :engine, class_name: \\\\\"Motor\\\\\", inverse_of: :machine\\\\n   end\\\\n\\\\n   class Motor\\\\n     include Mongoid::Document\\\\n     belongs_to :machine, class_name: \\\\\"Car\\\\\", inverse_of: :engine\\\\n   end\",\"summary\":\"When adding a document to an association, Mongoid attempts to link the newly added document to the base of the association in memory, as well as set the foreign key to link them on the database side. In this case Mongoid could not determine what the inverse foreign key was.\"},\"message_title\":\"message\",\"mixed_client_configuration\":{\"message\":\"Both uri and standard configuration options defined for client: \\'%{name}\\'.\",\"resolution\":\"Provide either only a uri as configuration or only standard options.\",\"summary\":\"Instead of simply giving uri or standard options a preference order, Mongoid assumes that you have made a mistake in your configuration and requires that you provide one or the other, but not both. The options that were provided were: %{config}.\"},\"mixed_relations\":{\"message\":\"Referencing a(n) %{embedded} document from the %{root} document via a non-embedded association is not allowed since the %{embedded} is embedded.\",\"resolution\":\"Consider not embedding %{embedded}, or do the key storage and access in a custom manner in the application code.\",\"summary\":\"In order to properly access a(n) %{embedded} from %{root} the reference would need to go through the root document of %{embedded}. In a simple case this would require Mongoid to store an extra foreign key for the root, in more complex cases where %{embedded} is multiple levels deep a key would need to be stored for each parent up the hierarchy.\"},\"nested_attributes_metadata_not_found\":{\"message\":\"Could not find metadata for association \\'%{name}\\' on model: %{klass}.\",\"resolution\":\"Make sure that there is an association defined named \\'%{name}\\' on %{klass} or that the association definition comes before the accepts_nested_attributes_for macro in the model - order matters so that Mongoid has access to the metadata.\\\\n\\\\n Example:\\\\n   class Band\\\\n     include Mongoid::Document\\\\n     has_many :albums\\\\n     accepts_nested_attributes_for :albums\\\\n   end\\\\n\\\\n\",\"summary\":\"When defining nested attributes for an association, Mongoid needs to access the metadata for the association \\'%{name}\\' in order if add autosave functionality to it, if applicable. Either no association named \\'%{name}\\' could be found, or the association had not been defined yet.\"},\"no_client_config\":{\"message\":\"No configuration could be found for a client named \\'%{name}\\'.\",\"resolution\":\"Double check your mongoid.yml to make sure under the clients key that a configuration exists for \\'%{name}\\'. If you have set the configuration programmatically, ensure that \\'%{name}\\' exists in the configuration hash.\",\"summary\":\"When attempting to create the new client, Mongoid could not find a client configuration for the name: \\'%{name}\\'. This is necessary in order to know the host, port, and options needed to connect.\"},\"no_client_database\":{\"message\":\"No database provided for client configuration: :%{name}.\",\"resolution\":\"If configuring via a mongoid.yml, ensure that within your :%{name} section a :database value for the client\\'s default database is defined.\\\\n\\\\n Example:\\\\n   development:\\\\n     clients:\\\\n       %{name}:\\\\n         database: my_app_db\\\\n         hosts:\\\\n           - localhost:27017\\\\n\\\\n\",\"summary\":\"Each client configuration must provide a database so Mongoid knows where the default database to persist to. What was provided was: %{config}.\"},\"no_client_hosts\":{\"message\":\"No hosts provided for client configuration: :%{name}.\",\"resolution\":\"If configuring via a mongoid.yml, ensure that within your :%{name} section a :hosts value for the client hosts is defined.\\\\n\\\\n Example:\\\\n   development:\\\\n     clients:\\\\n       %{name}:\\\\n         database: my_app_db\\\\n         hosts:\\\\n           - localhost:27017\\\\n\\\\n\",\"summary\":\"Each client configuration must provide hosts so Mongoid knows where the database server is located. What was provided was: %{config}.\"},\"no_clients_config\":{\"message\":\"No clients configuration provided.\",\"resolution\":\"Double check your mongoid.yml to make sure that you have a top-level clients key with at least 1 default client configuration for it. You can regenerate a new mongoid.yml for assistance via `rails g mongoid:config`.\\\\n\\\\n Example:\\\\n   development:\\\\n     clients:\\\\n       default:\\\\n         database: mongoid_dev\\\\n         hosts:\\\\n           - localhost:27017\\\\n\\\\n\",\"summary\":\"Mongoid\\'s configuration requires that you provide details about each client that can be connected to, and requires in the clients config at least 1 default client to exist.\"},\"no_default_client\":{\"message\":\"No default client configuration is defined.\",\"resolution\":\"If configuring via a mongoid.yml, ensure that within your :clients section a :default client is defined.\\\\n\\\\n Example:\\\\n   development:\\\\n     clients:\\\\n       default:\\\\n         hosts:\\\\n           - localhost:27017\\\\n\\\\n\",\"summary\":\"The configuration provided settings for: %{keys}, but Mongoid requires a :default to be defined at minimum.\"},\"no_documents_found\":{\"message\":\"Could not find a document of class %{klass}.\",\"resolution\":\"Create a document of class %{klass} or use a finder method that does not raise an exception when no documents are found.\",\"summary\":\"Mongoid attempted to find a document of the class %{klass} but none exist.\"},\"no_environment\":{\"message\":\"Could not load the configuration since no environment was defined.\",\"resolution\":\"Please ensure an environment is set in one of the listed locations. The environment must be explicitly set.\",\"summary\":\"Mongoid could not determine the environment to use because it was not specified in any of the following locations: Rails.env, Sinatra::Base.environment, ENV[\\\\\"RACK_ENV\\\\\"], ENV[\\\\\"MONGOID_ENV\\\\\"]. Without knowing the environment, Mongoid cannot load its configuration.\"},\"no_map_reduce_output\":{\"message\":\"No output location was specified for the map/reduce operation.\",\"resolution\":\"Provide the location that the output of the operation is to go by chaining an #out call to the map/reduce.\\\\n\\\\n Example:\\\\n   Band.map_reduce(map, reduce).out(inline: 1)\\\\n\\\\n Valid options for the out function are:\\\\n   inline: 1\\\\n   merge: \\'collection-name\\'\\\\n   replace: \\'collection-name\\'\\\\n   reduce: \\'collection-name\\'\\\\n\\\\n\",\"summary\":\"When executing a map/reduce, you must provide the output location of the results. The attempted command was: %{command}.\"},\"no_metadata\":{\"message\":\"Metadata not found for document of type %{klass}.\",\"resolution\":\"Ensure that your associations on the %{klass} model are all properly defined, and that the inverse associations are also properly defined. Embedded associations must have both the parent (embeds_one/embeds_many) and the inverse (embedded_in) present in order to work properly.\",\"summary\":\"Mongoid sets the metadata of an association on the document when it is either loaded from within the association, or added to one. The presence of the metadata is required in order to provide various functionality around associations. Most likely you are getting this error because the document is embedded and was attempted to be persisted without being associated with a parent, or the association was not properly defined.\"},\"no_parent\":{\"message\":\"Cannot persist embedded document %{klass} without a parent document.\",\"resolution\":\"Ensure that you\\'ve set the parent association if instantiating the embedded document directly, or always create new embedded documents via the parent association.\",\"summary\":\"If the document is embedded, in order to be persisted it must always have a reference to its parent document. This is most likely caused by either calling %{klass}.create or %{klass}.create! without setting the parent document as an attribute.\"},\"readonly_attribute\":{\"message\":\"Attempted to set the readonly attribute \\'%{name}\\' with the value: %{value}.\",\"resolution\":\"Don\\'t define \\'%{name}\\' as readonly, or do not attempt to update its value after the document is persisted.\",\"summary\":\"Attributes flagged as readonly via Model.attr_readonly can only have values set when the document is a new record.\"},\"readonly_document\":{\"message\":\"Attempted to persist a readonly document of class \\'%{klass}\\'.\",\"resolution\":\"Don\\'t attempt to persist documents that are flagged as readonly.\",\"summary\":\"Documents that are marked readonly cannot be persisted.\"},\"resolution_title\":\"resolution\",\"scope_overwrite\":{\"message\":\"Cannot create scope :%{scope_name}, because of existing method %{model_name}.%{scope_name}.\",\"resolution\":\"Change the name of the scope so it does not conflict with the already defined method %{model_name}, or set the configuration option Mongoid.scope_overwrite_exception to false, which is its default. In this case a warning will be logged.\",\"summary\":\"When defining a scope that conflicts with a method that already exists on the model, this error will get raised if Mongoid.scope_overwrite_exception is set to true.\"},\"sessions_not_supported\":{\"message\":\"Sessions are not supported by the connected server(s).\",\"resolution\":\"Verify that all servers in your deployment are at least version 3.6 or don\\'t attempt to use sessions with older server versions.\",\"summary\":\"A session was attempted to be used with a MongoDB server version that doesn\\'t support sessions. Sessions are supported in MongoDB server versions 3.6 and higher.\"},\"summary_title\":\"summary\",\"too_many_nested_attribute_records\":{\"message\":\"Accepting nested attributes for %{association} is limited to %{limit} documents.\",\"resolution\":\"The limit is set as an option to the macro, for example: accepts_nested_attributes_for :%{association}, limit: %{limit}. Consider raising this limit or making sure no more are sent than the set value.\",\"summary\":\"More documents were sent to be processed than the allowed limit.\"},\"unknown_attribute\":{\"message\":\"Attempted to set a value for \\'%{name}\\' which is not allowed on the model %{klass}.\",\"resolution\":\"Define the field \\'%{name}\\' in %{klass}, or include Mongoid::Attributes::Dynamic in %{klass} if you intend to store values in fields that are not explicitly defined.\",\"summary\":\"%{klass}#%{name}= was called but there is no \\'%{name}\\' field defined in the model, and Mongoid::Attributes::Dynamic is not included. This error is also raised instead of NoMethodError if the unknown attribute is passed to any method that accepts an attributes hash, such as #attributes=.\"},\"unknown_model\":{\"message\":\"Attempted to instantiate an object of the unknown model \\'%{klass}\\'.\",\"resolution\":\"The _type field is a reserved one used by Mongoid to determine the class for instantiating an object. Please don\\'t save data in this field or ensure that any values in this field correspond to valid models.\",\"summary\":\"A document with the value \\'%{value}\\' at the key \\'_type\\' was used to instantiate a model object but Mongoid cannot find this Class.\"},\"unsaved_document\":{\"message\":\"Attempted to save %{document} before the parent %{base}.\",\"resolution\":\"Make sure to only use create or create! when the parent document %{base} is persisted.\",\"summary\":\"You cannot call create or create! through the association (%{document}) whose parent (%{base}) is not already saved. This would cause the database to be out of sync since the child could potentially reference a nonexistent parent.\"},\"unsupported_javascript\":{\"message\":\"Executing Javascript $where selector on an embedded criteria is not supported.\",\"resolution\":\"Please provide a standard hash to #where when the criteria is for an embedded association.\",\"summary\":\"Mongoid only supports providing a hash of arguments to #where criterion on embedded documents. Since %{klass} is embedded, the expression %{javascript} is not allowed.\"},\"validations\":{\"message\":\"Validation of %{document} failed.\",\"resolution\":\"Try persisting the document with valid data or remove the validations.\",\"summary\":\"The following errors were found: %{errors}\"}}}},\"number\":{\"currency\":{\"format\":{\"delimiter\":\",\",\"format\":\"%u%n\",\"negative_format\":\"-%u%n\",\"precision\":2,\"separator\":\".\",\"significant\":false,\"strip_insignificant_zeros\":false,\"unit\":\"$\"}},\"format\":{\"delimiter\":\",\",\"precision\":3,\"round_mode\":\"default\",\"separator\":\".\",\"significant\":false,\"strip_insignificant_zeros\":false},\"human\":{\"decimal_units\":{\"format\":\"%n %u\",\"units\":{\"billion\":\"Billion\",\"million\":\"Million\",\"quadrillion\":\"Quadrillion\",\"thousand\":\"Thousand\",\"trillion\":\"Trillion\",\"unit\":\"\"}},\"format\":{\"delimiter\":\"\",\"precision\":3,\"significant\":true,\"strip_insignificant_zeros\":true},\"storage_units\":{\"format\":\"%n %u\",\"units\":{\"byte\":{\"one\":\"Byte\",\"other\":\"Bytes\"},\"eb\":\"EB\",\"gb\":\"GB\",\"kb\":\"KB\",\"mb\":\"MB\",\"pb\":\"PB\",\"tb\":\"TB\",\"zb\":\"ZB\"}}},\"nth\":{},\"percentage\":{\"format\":{\"delimiter\":\"\",\"format\":\"%n%\"}},\"precision\":{\"format\":{\"delimiter\":\"\"}}},\"simple_form\":{\"error_notification\":{\"default_message\":\"Please review the problems below:\"},\"no\":\"No\",\"required\":{\"mark\":\"*\",\"text\":\"required\"},\"yes\":\"Yes\"},\"support\":{\"array\":{\"last_word_connector\":\", and \",\"two_words_connector\":\" and \",\"words_connector\":\", \"}},\"time\":{\"am\":\"am\",\"formats\":{\"default\":\"%a, %d %b %Y %H:%M:%S %z\",\"long\":\"%B %d, %Y %H:%M\",\"short\":\"%d %b %H:%M\"},\"pm\":\"pm\"},\"users\":{\"confirmations\":{\"new\":{\"legend\":\"Resend your %{brand_name} confirmation instructions\",\"message\":\"We need to confirm your email address to complete the sign up process. Supply your email address, below, and we will send you instructions on how to confirm your address.\",\"submit_button\":\"Send Confirmation Instructions\",\"title\":\"Resend confirmation instructions | %{brand_name}\"},\"show\":{\"legend\":\"Check your inbox for a confirmation email\",\"message\":\"If your e-mail exists in our database we have sent you a message with instructions. Check your inbox (or spam folder) for a message from \\'%{default_from_email}\\' containing the confirmation link.\",\"title\":\"Awaiting confirmation | %{brand_name}\"}},\"passwords\":{\"new\":{\"failures\":\"Note: If you make more than 5 sequential failed attempts to sign in with your %{brand_name} password, your account will be (temporarily) locked. Check your inbox for instruction on how to unlock your account, or we can\",\"legend\":\"Reset your %{brand_name} password\",\"message\":\"Supply your email address, below, and we will send you instructions on how to reset your password.\",\"resend_link\":\"resend a new set of unlock instructions\",\"submit_button\":\"Send Reset Instructions\",\"title\":\"Reset password | %{brand_name}\"},\"show\":{\"didnt_receive_email\":\"Didn\\'t receive the email?\",\"legend\":\"Password reset instructions sent\",\"message\":\"If your e-mail exists in our database we have sent you a message with password reset instructions. Check your inbox (or spam folder) for a message from \\'%{default_from_email}\\'.\",\"resend_link\":\"you can request another one here\",\"title\":\"Awaiting reset | %{brand_name}\"}}},\"will_paginate\":{\"container_aria_label\":\"Pagination\",\"next_label\":\"Next \\\\u0026#8594;\",\"page_aria_label\":\"Page %{page}\",\"page_entries_info\":{\"multi_page\":\"Displaying %{model} %{from} - %{to} of %{count} in total\",\"multi_page_html\":\"Displaying %{model} \\\\u003cb\\\\u003e%{from}\\\\u0026nbsp;-\\\\u0026nbsp;%{to}\\\\u003c/b\\\\u003e of \\\\u003cb\\\\u003e%{count}\\\\u003c/b\\\\u003e in total\",\"single_page\":{\"one\":\"Displaying 1 %{model}\",\"other\":\"Displaying all %{count} %{model}\",\"zero\":\"No %{model} found\"},\"single_page_html\":{\"one\":\"Displaying \\\\u003cb\\\\u003e1\\\\u003c/b\\\\u003e %{model}\",\"other\":\"Displaying \\\\u003cb\\\\u003eall\\\\u0026nbsp;%{count}\\\\u003c/b\\\\u003e %{model}\",\"zero\":\"No %{model} found\"}},\"page_gap\":\"\\\\u0026hellip;\",\"previous_label\":\"\\\\u0026#8592; Previous\"}}'));\nI18n.translations[\"fr\"] = I18n.extend((I18n.translations[\"fr\"] || {}), JSON.parse('{\"activerecord\":{\"errors\":{\"messages\":{\"record_invalid\":\"Validation failed: %{errors}\",\"restrict_dependent_destroy\":{\"has_many\":\"Cannot delete record because dependent %{record} exist\",\"has_one\":\"Cannot delete record because a dependent %{record} exists\"}}}},\"bulk_uploads\":{\"email_local_part\":{\"empty_parameter\":\"No file uploaded\",\"error\":\"File Upload failed: %{error_message}\",\"success\":\"File was successfully uploaded\"}},\"common\":{\"crm\":{\"salesforce\":{\"forgot_password\":\"If you have forgotten your Salesforce password, please follow the instructions provided on the Salesforce sign in page.\",\"sign_in_button\":\"Sign In with Salesforce\"}}},\"contact\":{\"default_from_email\":\"info@zymewire.com\",\"phone_numbers\":[{\"label\":\"US\",\"phone\":\"1-844-996-3321\"},{\"label\":\"UK\",\"phone\":\"+44-208-133-9963\"}],\"support_email\":\"support@zymewire.com\"},\"date\":{\"abbr_day_names\":[\"Sun\",\"Mon\",\"Tue\",\"Wed\",\"Thu\",\"Fri\",\"Sat\"],\"abbr_month_names\":[null,\"Jan\",\"Feb\",\"Mar\",\"Apr\",\"May\",\"Jun\",\"Jul\",\"Aug\",\"Sep\",\"Oct\",\"Nov\",\"Dec\"],\"day_names\":[\"Sunday\",\"Monday\",\"Tuesday\",\"Wednesday\",\"Thursday\",\"Friday\",\"Saturday\"],\"formats\":{\"default\":\"%Y-%m-%d\",\"long\":\"%B %d, %Y\",\"short\":\"%b %d\"},\"month_names\":[null,\"January\",\"February\",\"March\",\"April\",\"May\",\"June\",\"July\",\"August\",\"September\",\"October\",\"November\",\"December\"],\"order\":[\"year\",\"month\",\"day\"]},\"datetime\":{\"distance_in_words\":{\"about_x_hours\":{\"one\":\"about 1 hour\",\"other\":\"about %{count} hours\"},\"about_x_months\":{\"one\":\"about 1 month\",\"other\":\"about %{count} months\"},\"about_x_years\":{\"one\":\"about 1 year\",\"other\":\"about %{count} years\"},\"almost_x_years\":{\"one\":\"almost 1 year\",\"other\":\"almost %{count} years\"},\"half_a_minute\":\"half a minute\",\"less_than_x_minutes\":{\"one\":\"less than a minute\",\"other\":\"less than %{count} minutes\"},\"less_than_x_seconds\":{\"one\":\"less than 1 second\",\"other\":\"less than %{count} seconds\"},\"over_x_years\":{\"one\":\"over 1 year\",\"other\":\"over %{count} years\"},\"x_days\":{\"one\":\"1 day\",\"other\":\"%{count} days\"},\"x_minutes\":{\"one\":\"1 minute\",\"other\":\"%{count} minutes\"},\"x_months\":{\"one\":\"1 month\",\"other\":\"%{count} months\"},\"x_seconds\":{\"one\":\"1 second\",\"other\":\"%{count} seconds\"}},\"prompts\":{\"day\":\"Day\",\"hour\":\"Hour\",\"minute\":\"Minute\",\"month\":\"Month\",\"second\":\"Seconds\",\"year\":\"Year\"}},\"default_host\":\"https://www.zymewire.com\",\"devise\":{\"confirmations\":{\"confirmed\":\"Your account was successfully confirmed. Please sign in.\",\"send_instructions\":\"Your email has not been confirmed. We need to confirm your email account before you can sign in. Please check your inbox or spam folder for an email from \\'info@zymewire.com\\' or request a new one.\",\"send_paranoid_instructions\":\"If your e-mail exists on our database, you will receive an email with instructions about how to confirm your account in a few minutes.\"},\"failure\":{\"already_authenticated\":\"You are already signed in.\",\"expired\":\"Votre compte a expiré pour cause d\\'inactivité. Veuillez contacter l\\'administrateur du site\",\"inactive\":\"Your account was not activated yet.\",\"invalid\":\"Invalid email or password. If you use Salesforce, use the \\'Have Salesforce?\\' panel.\",\"invalid_token\":\"Invalid authentication token.\",\"last_attempt\":\"You have one more attempt before your account is locked.\",\"locked\":\"Your account is locked.\",\"not_active\":\"Your account has been de-activated, if you think this is a mistake please contact us\",\"not_found_in_database\":\"Invalid %{authentication_keys} or password.\",\"session_limited\":\"Vos identifiants de connexion ont été utilisés dans un autre navigateur. Veuillez vous reconnecter pour continuer dans ce navigateur\",\"timeout\":\"Your session expired, please sign in again to continue.\",\"unauthenticated\":\"You need to sign in or sign up before continuing.\",\"unconfirmed\":\"We must confirm your email before you can continue. Please check your inbox or spam folder for a confirmation email from \\'info@zymewire.com\\' or request a new one.\"},\"invalid_captcha\":\"Le captcha n\\'est pas valide\",\"invalid_security_question\":\"La réponse à la question de sécurité est invalide\",\"mailer\":{\"confirmation_instructions\":{\"subject\":\"Confirmation instructions for Zymewire.com\"},\"email_changed\":{\"subject\":\"Email Changed\"},\"password_change\":{\"subject\":\"Password Changed\"},\"reset_password_instructions\":{\"subject\":\"Reset password instructions for Zymewire.com\"},\"unlock_instructions\":{\"subject\":\"Unlock Instructions for Zymewire.com\"}},\"omniauth_callbacks\":{\"failure\":\"Could not authorize you from %{kind} because \\\\\"%{reason}\\\\\".\",\"success\":\"Successfully authorized from %{kind} account.\"},\"paranoid_verification_code\":{\"show\":{\"submit\":\"Soumettre\",\"submit_verification_code\":\"Soumettre le code de vérification\",\"verification_code\":\"Code de vérification\"},\"updated\":\"Code de vérification accepté\"},\"paranoid_verify\":{\"code_required\":\"Veuillez entrer le code fourni par notre équipe de support\"},\"password_expired\":{\"change_required\":\"Votre mot de passe a expiré. Veuillez en choisir un autre\",\"show\":{\"change_my_password\":\"Changer mon mot de passe\",\"current_password\":\"Mot de passe actuel\",\"new_password\":\"Nouveau mot de passe\",\"new_password_confirmation\":\"Confirmer le nouveau mot de passe\",\"renew_your_password\":\"Renouveler votre mot de passe\"},\"updated\":\"Votre nouveau mot de passe est enregistré\"},\"passwords\":{\"no_token\":\"You can\\'t access this page without coming from a password reset email. If you do come from a password reset email, please make sure you used the full URL provided.\",\"send_instructions\":\"You will receive an email with instructions about how to reset your password in a few minutes.\",\"send_paranoid_instructions\":\"If your e-mail exists on our database, you will receive a password recovery link on your e-mail\",\"updated\":\"Your password was changed successfully. You are now signed in.\",\"updated_not_active\":\"Your password was changed successfully.\"},\"registrations\":{\"destroyed\":\"Bye! Your account was successfully cancelled. We hope to see you again soon.\",\"signed_up\":\"Welcome! You have signed up successfully.\",\"signed_up_but_inactive\":\"You have signed up successfully. However, we could not sign you in because your account is not yet activated.\",\"signed_up_but_locked\":\"You have signed up successfully. However, we could not sign you in because your account is locked.\",\"signed_up_but_unconfirmed\":\"A message with a confirmation link has been sent to your email address. Please open the link to activate your account.\",\"update_needs_confirmation\":\"You updated your account successfully, but we need to verify your new email address. Please check your email and click on the confirm link to finalize confirming your new email address.\",\"updated\":\"You updated your account successfully.\",\"updated_but_not_signed_in\":\"Your account has been updated successfully, but since your password was changed, you need to sign in again.\"},\"sessions\":{\"already_signed_out\":\"Signed out successfully.\",\"signed_in\":\"Signed in successfully.\",\"signed_out\":\"Signed out successfully.\"},\"unlocks\":{\"send_instructions\":\"You will receive an email with instructions about how to unlock your account in a few minutes.\",\"send_paranoid_instructions\":\"If your account exists, you will receive an email with instructions about how to unlock it in a few minutes.\",\"unlocked\":\"Your account has been unlocked successfully. Please sign in to continue.\"}},\"download\":\"Download\",\"download_30_days\":\"This link will be available for 30 days after which the file will be removed from our servers.\",\"enumerize\":{\"blocklisted_contact\":{\"provider\":{\"insideview\":\"InsideView\",\"zephyr\":\"Zephyr\"}}},\"errors\":{\"format\":\"%{attribute} %{message}\",\"messages\":{\"accepted\":\"must be accepted\",\"already_confirmed\":\"was already confirmed, please try signing in\",\"blank\":\"can\\'t be blank\",\"confirmation\":\"doesn\\'t match %{attribute}\",\"confirmation_period_expired\":\"needs to be confirmed within %{period}, please request a new one\",\"empty\":\"can\\'t be empty\",\"equal_to\":\"must be equal to %{count}\",\"equal_to_current_password\":\"doit être différent de l\\'actuel\",\"equal_to_email\":\"doit être différent de l\\'e-mail\",\"even\":\"must be even\",\"exclusion\":\"is reserved\",\"expired\":\"has expired, please request a new one\",\"greater_than\":\"must be greater than %{count}\",\"greater_than_or_equal_to\":\"must be greater than or equal to %{count}\",\"in\":\"must be in %{count}\",\"inclusion\":\"is not included in the list\",\"invalid\":\"is invalid\",\"less_than\":\"must be less than %{count}\",\"less_than_or_equal_to\":\"must be less than or equal to %{count}\",\"model_invalid\":\"Validation failed: %{errors}\",\"not_a_number\":\"is not a number\",\"not_an_integer\":\"must be an integer\",\"not_found\":\"not found\",\"not_locked\":\"was not locked\",\"not_saved\":{\"one\":\"1 error prohibited this %{resource} from being saved:\",\"other\":\"%{count} errors prohibited this %{resource} from being saved:\"},\"odd\":\"must be odd\",\"other_than\":\"must be other than %{count}\",\"password_complexity\":{\"digit\":{\"one\":\"doit contenir au moins un chiffre\",\"other\":\"doit contenir au moins %{count} chiffres\"},\"lower\":{\"one\":\"doit contenir au moins une lettre minuscule\",\"other\":\"doit contenir au moins %{count} lettres minuscules\"},\"symbol\":{\"one\":\"doit contenir au moins un signe de ponctuation\",\"other\":\"doit contenir au moins %{count} signes de ponctuation\"},\"upper\":{\"one\":\"doit contenir au moins une lettre majuscule\",\"other\":\"doit contenir au moins %{count} lettres majuscules\"}},\"password_format\":\"Must contain uppercase AND lowercase letters and at least one number\",\"password_too_long\":\"is too long\",\"present\":\"must be blank\",\"required\":\"must exist\",\"taken\":\"has already been taken\",\"taken_in_past\":\"a été utilisé trop récemment. Veuillez en choisir un autre\",\"too_long\":{\"one\":\"is too long (maximum is 1 character)\",\"other\":\"is too long (maximum is %{count} characters)\"},\"too_short\":{\"one\":\"is too short (minimum is 1 character)\",\"other\":\"is too short (minimum is %{count} characters)\"},\"wrong_length\":{\"one\":\"is the wrong length (should be 1 character)\",\"other\":\"is the wrong length (should be %{count} characters)\"}}},\"flash\":{\"actions\":{\"create\":{\"notice\":\"%{resource_name} was successfully created.\"},\"destroy\":{\"alert\":\"%{resource_name} could not be destroyed.\",\"notice\":\"%{resource_name} was successfully destroyed.\"},\"update\":{\"notice\":\"%{resource_name} was successfully updated.\"}}},\"hello_world\":\"Hello world\",\"helpers\":{\"select\":{\"prompt\":\"Please select\"},\"submit\":{\"create\":\"Create %{model}\",\"submit\":\"Save %{model}\",\"update\":\"Update %{model}\"}},\"hi\":\"Hi\",\"mailers\":{\"common\":{\"chummy_sign_off\":\"Have a good one.\",\"final_note\":\"P.S.: If you think you received this email accidentally, then something weird could be going on. Hit reply and a member of the %{brand_name} team will investigate.\",\"team_sign_off\":\"- The %{brand_name} Team\"},\"confirmation_instructions_email\":{\"crm\":{\"salesforce\":{\"resource_confirmed\":\"Someone has requested a resend of a confirmation email. You do not need to confirm your email address because your account is configured to use Salesforce to sign in.\",\"resource_unconfirmed\":\"You do not need to confirm your email address because your account is configured to use Salesforce to sign in, please complete the sign up process by clicking the button below to sign in to %{brand_name} via Salesforce.\"}},\"non_crm\":{\"confirm_link\":\"Confirm my account\",\"welcome\":\"Welcome to %{brand_name}. As the final step in the process you\\'ll need to confirm your account by clicking on the link below.\"},\"subject\":\"Confirmation instructions for %{domain}\"},\"flagged_events_mailer\":{\"from\":\"Flagged events - %{brand_name} \\\\u003cflagged_events@mailer.%{domain}\\\\u003e\"},\"mobile_registration_email\":{\"alert_cs_registration_locked\":{\"subject\":\"%{brand_name}: user has had mobile registration locked, too many failed attempts\"},\"dispatch_registration_PIN\":{\"further_instructions\":\"If you are NOT attempting to register for the %{brand_name} Mobile app then please let us know at %{support_email_link} - thank you.\",\"introduction\":\"Here is your mobile app registration PIN:\",\"subject\":\"%{brand_name} Mobile Registration Verification\"},\"too_many_failed_attempts\":{\"introduction\":\"We have received too many failed mobile device registration attempts for your account and we will block any further requests. If you have not attempted to register a mobile device with us in the last hour then please let us know as it is likely someone has tried on your behalf. If you have been trying to register a device please contact %{support_email_link} and we can help unlock your account and get you registered.\",\"subject\":\"%{brand_name}: too many failed registration attempts\"}},\"org_list_download_mail\":{\"dispatch_link\":{\"introduction\":\"We have finished meshing your %{crm_brand_name} data with the companies in your \\\\\"%{list_name}\\\\\" list.\",\"subject\":\"%{brand_name}: your file download of \\'%{list_name}\\' is ready\"},\"failed\":{\"instructions\":\"You could try again in a little while. If you already have and are receiving this email again, please contact us at %{support_email_link}\",\"introduction\":\"We are really sorry, but something went wrong with creating your download of %{crm_brand_name} data for your \\\\\"%{list_name}\\\\\" list.\",\"subject\":\"%{brand_name}: your file download of \\'%{list_name}\\' failed\"}},\"reset_password_instructions_email\":{\"crm\":{\"salesforce\":{\"change_requested\":\"Someone has requested a change to your password. Your account is configured to use Salesforce to sign in.\"}},\"fishy_fine_print\":\"If you did not request a password change, then something weird is going on. Someone may be trying to access your account (unsuccessfully). Please reply to this email and let us know. We will take steps to make sure it stops.\",\"non_crm\":{\"change_password_link\":\"Change my password\",\"change_requested\":\"Someone has requested a change to your password, you can do this via the link below.\"},\"subject\":\"Password reset instructions for %{domain}\"},\"sales_force_mail\":{\"processing_completed\":{\"bullet_points\":[\"Only show events associated with companies in your Salesforce account\",\"Add new contacts and accounts to your Salesforce account without leaving %{brand_name}\",\"Access the \\'Salesforce details\\' panel on company dashboards where you can see open tasks, team interactions, opportunities, and more!\"],\"further_instructions\":\"We\\'re here to help. If you run into any questions or challenges, please contact us at %{support_email_link} and a member of our team would be more than happy to help.\",\"get_the_most\":\"To get the most from the integration, check out the \\'Mine Salesforce for opportunities\\' guide in the Help Center.\",\"guide_button\":\"Take me to the guide\",\"introduction\":\"Good news - your Salesforce account is now integrated with %{brand_name}. Now you’ll be able to:\"}},\"segment_contact\":{\"report_manager\":{\"fail_subject\":\"%{brand_name}: The PDF report generation failed\",\"success_subject\":\"%{brand_name}: Your PDF for %{company_name} is attached\"}},\"sf_token_expiry_email\":{\"further_instructions\":\"If you run into any questions or challenges, please contact us at %{support_email_link} and a member of our team would be more than happy to help.\",\"introduction\":\"Unfortunately the connection established for you between %{brand_name} and your %{crm_brand_name} account has expired. We will not be able to update your lists in %{brand_name} to reflect your %{crm_brand_name} database. To re-establish the connection, you just need to log in to %{brand_name} using your %{crm_brand_name}.\",\"subject\":\"%{brand_name} to %{crm_brand_name} connection has expired\"},\"share_list_mail\":{\"introduction\":\"%{user_name} shared a list with you: \",\"subject\":\"[%{brand_name} - shared list] %{list_name}\"},\"trial_expiry_mail\":{\"seven_days_to_go\":{\"further_instructions\":\"A member of our fabulous Customer Success team will arrange a welcome call with you to understand your goals and priorities, and will then give you a personalized Tour de %{brand_name} so you can easily access the information that is most valuable to you.\",\"instructions\":\"If you\\'d like continued access to the platform with our flexible month-to-month subscription, please ensure you contact %{support_email_link} ahead of: %{deadline}\",\"introduction\":\"Time flies when you\\'re uncovering new business opportunities! Your %{brand_name} trial is coming to an end next week.\",\"sign_off\":\"We look forward to helping you reach your sales goals!\",\"subject\":\"Just a heads up that your %{brand_name} trial is ending in seven days\"},\"seven_days_to_go_warning_for_cs\":{\"introduction\":\"%{user_name} shared a list with you: \",\"subject\":\"[%{brand_name} - shared list] %{list_name}\"}},\"unlock_instructions_email\":{\"crm\":{\"salesforce\":{\"change_requested\":\"You are being sent this email either because of one too many unsuccessful non-Salesforce log-in attempts or someone has requested an unlock email. %{brand_name} has not locked your account because your account is configured to use Salesforce to sign in.\",\"password_forgotten\":\"If you have forgotten your Salesforce password or think your account has been locked by Salesforce, please follow the instructions provided on the Salesforce sign in page.\"}},\"fishy_fine_print\":\"If you have not been (unsuccessfully) trying to log in to your account, then something weird is going on. Someone may be trying to access your account (unsuccessfully). Please reply to this email and let us know. We will take steps to make sure it stops.\",\"non_crm\":{\"change_requested\":\"For security reasons we have locked your account because of too many log-in attempts. To unlock your account, click the link below.\",\"unlock_account_link\":\"Unlock my account\"},\"subject\":\"Unlock instructions for %{domain}\"}},\"mongoid\":{\"errors\":{\"messages\":{\"ambiguous_relationship\":{\"message\":\"Ambiguous associations %{candidates} defined on %{klass}.\",\"resolution\":\"On the %{name} association on %{inverse} you must add an :inverse_of option to specify the exact association on %{klass} that is the opposite of %{name}.\",\"summary\":\"When Mongoid attempts to set an inverse document of an association in memory, it needs to know which association it belongs to. When setting %{name}, Mongoid looked on the class %{inverse} for a matching association, but multiples were found that could potentially match: %{candidates}.\"},\"blank_in_locale\":\"can\\'t be blank in %{location}\",\"callbacks\":{\"message\":\"Calling %{method} on %{klass} resulted in a false return from a callback.\",\"resolution\":\"Double check all before callbacks to make sure they are not unintentionally returning false.\",\"summary\":\"If a before callback returns false when using Document.create!, Document#save!, or Document#update_attributes! this error will get raised since the document did not actually get saved.\"},\"calling_document_find_with_nil_is_invalid\":{\"message\":\"Calling Document.find with nil is invalid.\",\"resolution\":\"Most likely this is caused by passing parameters directly through to the find, and the parameter either is not present or the key from which it is accessed is incorrect.\",\"summary\":\"Document.find expects the parameters to be 1 or more ids, and will return a single document if 1 id is provided, otherwise an array of documents if multiple ids are provided.\"},\"create_collection_failure\":{\"message\":\"Cannot create collection %{collection_name} with options %{collection_options}. The following error was raised: %{error}.\",\"resolution\":\"Double check that collection options for the collection %{collection_name} are valid. Consult with Ruby driver documentation and MongoDB documentation if the desired options are supported by your version of the server.\",\"summary\":\"The server rejected createCollection command with given collection options. This may happen when some of the options are invalid, or not supported by your version of the server.\"},\"criteria_argument_required\":{\"message\":\"Calling Criteria methods with nil arguments is not allowed.\",\"resolution\":\"Invoke Criteria methods with non-nil arguments or omit the respective invocations.\",\"summary\":\"Arguments to Criteria methods cannot be nil, and most Criteria methods require at least one argument. Only logical operations (and, or, nor and not), `all\\' and `where\\' can be called without arguments. The method that was called with nil argument was: %{query_method}.\"},\"delete_restriction\":{\"message\":\"Cannot destroy %{document} because of dependent \\'%{relation}\\'.\",\"resolution\":\"Don\\'t attempt to delete the parent %{document} when it has children, or change the dependent option on the association.\",\"summary\":\"When defining \\'%{relation}\\' with a :dependent =\\\\u003e :restrict_with_error, Mongoid will raise an error when attempting to destroy the %{document} when the child \\'%{relation}\\' still has documents in it.\"},\"destroy_restrict_with_error_dependencies_exist\":\"is not empty and prevents the document from being destroyed\",\"document_not_destroyed\":{\"message\":\"%{klass} with id %{id} was not destroyed.\",\"resolution\":\"Check the before/after destroy callbacks to ensure that the return values are truthy for the chain to continue.\",\"summary\":\"When calling %{klass}#destroy! and a callback halts the destroy callback chain by returning a false value, the deletion will not actually occur.\"},\"document_not_found\":{\"message\":\"Document(s) not found for class %{klass} with id(s) %{missing}.\",\"resolution\":\"Search for an id that is in the database or set the Mongoid.raise_not_found_error configuration option to false, which will cause nil to be returned instead of raising this error when searching for a single id, or only the matched documents when searching for multiples.\",\"summary\":\"When calling %{klass}.find with an id or array of ids, each parameter must match a document in the database or this error will be raised. The search was for the id(s): %{searched} (%{total} total) and the following ids were not found: %{missing}.\"},\"document_with_attributes_not_found\":{\"message\":\"Document not found for class %{klass} with attributes %{attributes}.\",\"resolution\":\"Search for attributes that are in the database or set the Mongoid.raise_not_found_error configuration option to false, which will cause nil to be returned instead of raising this error.\",\"summary\":\"When calling %{klass}.find_by with a hash of attributes, all attributes provided must match a document in the database or this error will be raised.\"},\"document_with_shard_key_not_found\":{\"message\":\"Document not found for class %{klass} with id %{missing} and shard key %{shard_key}.\",\"resolution\":\"Search for an id/shard key that is in the database or set the Mongoid.raise_not_found_error configuration option to false, which will cause nil to be returned instead of raising this error.\",\"summary\":\"When calling %{klass}.find with an id and a shard key, each parameter must match a document in the database or this error will be raised. The search was for the id: %{missing} with shard_key: %{shard_key} and it was not found.\"},\"drop_collection_failure\":{\"message\":\"Cannot drop collection %{collection_name}.\",\"resolution\":\"Try to drop the collection manually using Ruby driver or mongo shell.\",\"summary\":\"Mongoid tried to drop collection %{collection_name}, but the collection still exists in the database.\"},\"empty_config_file\":{\"message\":\"Empty configuration file: %{path}.\",\"resolution\":\"Ensure your configuration file contains the correct contents. Refer to: https://www.mongodb.com/docs/mongoid/current/reference/configuration/\",\"summary\":\"Your mongoid.yml configuration file appears to be empty.\"},\"immutable_attribute\":{\"message\":\"Attempted to change the immutable attribute \\'%{name}\\' with the value: %{value}.\",\"resolution\":\"Do not attempt to update the value of \\'%{name}\\' after the document is persisted.\",\"summary\":\"Immutable attributes can only have values set when the document is a new record.\"},\"in_memory_collation_not_supported\":{\"message\":\"A collation option cannot be applied when querying documents in-memory.\",\"resolution\":\"Remove the collation option from the query.\",\"summary\":\"The query being run against documents in memory has a collation option set. A collation option is only supported if the query is executed on a MongoDB server with version \\\\u003e= 3.4.\"},\"invalid_async_query_executor\":{\"message\":\"Invalid async_query_executor option: %{executor}.\",\"resolution\":\"Pick an allowed option or fix the typo. If you were expecting the option to be there, please consult the following page with respect to Mongoid\\'s configuration:\\\\n\\\\n   https://www.mongodb.com/docs/mongoid/current/reference/configuration/#mongoid-configuration-options\",\"summary\":\"A invalid async query executor was specified. The valid options are: %{options}.\"},\"invalid_collection\":{\"message\":\"Access to the collection for %{klass} is not allowed.\",\"resolution\":\"For access to the collection that the embedded document is in, use %{klass}#_root.collection, or do not attempt to persist an embedded document without a parent set.\",\"summary\":\"%{klass}.collection was called, and %{klass} is an embedded document - it resides within the collection of the root document of the hierarchy.\"},\"invalid_config_file\":{\"message\":\"Invalid configuration file: %{path}.\",\"resolution\":\"Ensure your configuration file contains the correct contents. Refer to: https://www.mongodb.com/docs/mongoid/current/reference/configuration/\",\"summary\":\"Your mongoid.yml configuration file does not contain the correct file structure.\"},\"invalid_config_option\":{\"message\":\"Invalid configuration option: %{name}.\",\"resolution\":\"Remove the invalid option or fix the typo. If you were expecting the option to be there, please consult the following page with respect to Mongoid\\'s configuration:\\\\n\\\\n   http://mongoid.org/en/mongoid/docs/installation.html\",\"summary\":\"A invalid configuration option was provided in your mongoid.yml, or a typo is potentially present. The valid configuration options are: %{options}.\"},\"invalid_dependent_strategy\":{\"message\":\"Invalid dependent strategy: %{invalid_strategy}.\",\"resolution\":\"Change the dependent strategy to one of the valid types.\",\"summary\":\"An invalid dependent strategy was defined for the association: %{association}. The valid strategies are: %{valid_strategies}.\"},\"invalid_discriminator_key_target\":{\"message\":\"Setting the discriminator key on a child class is not allowed.\",\"resolution\":\"Try setting the discriminator key on %{superclass} or one of %{class_name}\\'s ancestors.\",\"summary\":\"The discriminator key on the class %{class_name} was attempted to be changed. Changing the discriminator key on a child class is not allowed.\"},\"invalid_dot_dollar_assignment\":{\"message\":\"Cannot set the %{attr} attribute on the %{klass} class.\",\"resolution\":\"In order to set fields that start with a dollar sign ($) or contain a dot/period (.), the aggregation pipeline can be used. MongoDB provides specific operators for working with these fields. Refer to the MongoDB documentation here: https://www.mongodb.com/docs/manual/core/dot-dollar-considerations/\",\"summary\":\"Calling the setters for fields that start with a dollar sign ($) or contain a dot/period (.) is prohibited. See the Mongoid documentation on Field Names with Dots/Periods (.) and Dollar Signs ($) for more information.\"},\"invalid_elem_match_operator\":{\"message\":\"Invalid $elemMatch operator \\'%{operator}\\'.\",\"resolution\":\"Valid field operators are: %{valid_operators}. Ensure you are using one of these operators.\",\"summary\":\"You misspelled an operator or are using an operator that Mongoid does not support.\"},\"invalid_estimated_count_criteria\":{\"message\":\"Invalid criteria for estimated_count.\",\"resolution\":\"Try calling estimated_count directly on the class: %{class_name}.estimated_count.\\\\n\\\\n  If the class defines a default scope, use unscoped: %{class_name}.unscoped.estimated_count.\",\"summary\":\"Estimated count is strictly a collection-level operation and cannot be called on a filtered criteria.\"},\"invalid_expression_operator\":{\"message\":\"Invalid expression operator \\'%{operator}\\'.\",\"resolution\":\"Valid expression operators are: %{valid_operators}. Ensure you are using one of these operators.\",\"summary\":\"You misspelled an operator, are using an operator that Mongoid does not support, or are trying to use a field-level operator on expression level.\"},\"invalid_field\":{\"message\":\"Defining a field named \\'%{field}\\' is not allowed.\",\"resolution\":\"Use Mongoid.destructive_fields to see what names are not allowed, and don\\'t use these names. These include names that also conflict with core Ruby methods on Object, Module, Enumerable, or included gems that inject methods into these or Mongoid internals.\",\"summary\":\"Defining this field would override the method \\'%{name}\\', which would cause issues with expectations around the original method and cause extremely hard to debug issues. The original method was defined in:\\\\n   Object: %{origin}\\\\n   File: %{file}\\\\n   Line: %{line}\"},\"invalid_field_operator\":{\"message\":\"Invalid field operator \\'%{operator}\\'.\",\"resolution\":\"Valid field operators are: %{valid_operators}. Ensure you are using one of these operators.\",\"summary\":\"You misspelled an operator, are using an operator that Mongoid does not support, or are trying to use an expression-level operator on field level.\"},\"invalid_field_option\":{\"message\":\"Invalid option :%{option} provided for field :%{name}.\",\"resolution\":\"When defining the field :%{name} on \\'%{klass}\\', please provide valid options for the field. These are currently: %{valid}. If you meant to define a custom field option, please do so first as follows:\\\\n\\\\n   Mongoid::Fields.option :%{option} do |model, field, value|\\\\n     # Your logic here...\\\\n   end\\\\n   class %{klass}\\\\n     include Mongoid::Document\\\\n     field :%{name}, %{option}: true\\\\n   end\\\\n\\\\n Refer to: https://www.mongodb.com/docs/mongoid/current/reference/fields/#custom-field-options\",\"summary\":\"Mongoid requires that you only provide valid options on each field definition in order to prevent unexpected behavior later on.\"},\"invalid_field_type\":{\"message\":\"Invalid field type %{type_inspection} for field \\'%{field}\\' on model \\'%{klass}\\'.\",\"resolution\":\"Please provide a valid type value for the field. Refer to: https://www.mongodb.com/docs/mongoid/current/reference/fields/#using-symbols-or-strings-instead-of-classes\",\"summary\":\"Model \\'%{klass}\\' defines a field \\'%{field}\\' with an unknown type value %{type_inspection}.\"},\"invalid_global_executor_concurrency\":{\"message\":\"Invalid global_executor_concurrency option.\",\"resolution\":\"Set global_executor_concurrency option to :global_thread_pool or remove global_executor_concurrency option.\",\"summary\":\"You set global_executor_concurrency while async_query_executor option is not set to :global_thread_pool. The global_executor_concurrency is allowed only for the global thread pool executor.\"},\"invalid_includes\":{\"message\":\"Invalid includes directive: %{klass}.includes(%{args})\",\"resolution\":\"Ensure that each parameter passed to %{klass}.includes is a valid name of an association on the %{klass} model. These are: %{relations}.\",\"summary\":\"Eager loading in Mongoid only supports providing arguments to %{klass}.includes that are the names of associations on the %{klass}.\"},\"invalid_index\":{\"message\":\"Invalid index specification on %{klass}: %{spec}, %{options}\",\"resolution\":\"Ensure that the index conforms to the correct syntax and has the correct options.\\\\n\\\\n Valid options are:\\\\n   background: true|false\\\\n   database: \\'database_name\\'\\\\n   name: \\'index_name\\'\\\\n   sparse: true|false\\\\n   unique: true|false\\\\n   min: 1\\\\n   max: 1\\\\n   bits: 26\\\\n   key: 26\\\\n   bucket_size : 1\\\\n   sphere_version : 1\\\\n   text_version : 1\\\\n   version : 1\\\\n   weights: { content: 1, title: 2 }\\\\n   expire_after_seconds: number_of_seconds\\\\n   partial_filter_expression\\\\n   storage_engine\\\\n   language_override\\\\n   default_language\\\\n   collation\\\\n   wildcard_projection: { \\'path.to.field.a\\': 1, \\'path.to.field.b\\': 0 }\\\\n Valid types are: 1, -1, \\'2d\\', \\'2dsphere\\', \\'geoHaystack (deprecated)\\', \\'text\\', \\'hashed\\'\\\\n\\\\n Example:\\\\n   class Band\\\\n     include Mongoid::Document\\\\n     index({ name: 1, label: -1 }, { sparse: true })\\\\n     index({ location: \\'2d\\' }, { background: true })\\\\n   end\\\\n\\\\n\",\"summary\":\"Indexes in Mongoid are defined as a hash of field name and direction/2d pairs, with a hash for any additional options.\"},\"invalid_options\":{\"message\":\"Invalid option :%{invalid} provided to association :%{name}.\",\"resolution\":\"Valid options are: %{valid}, make sure these are the ones you are using.\",\"summary\":\"Mongoid checks the options that are passed to the association macros to ensure that no ill side effects occur by letting something slip by.\"},\"invalid_path\":{\"message\":\"Having a root path assigned for %{klass} is invalid.\",\"resolution\":\"Most likely your embedded model, %{klass} is also referenced via a has_many from a root document in another collection. Double check the association definitions and fix any instances where embedded documents are improperly referenced from other collections.\",\"summary\":\"Mongoid has two different path objects for determining the location of a document in the database, Root and Embedded. This error is raised when an embedded document somehow gets a root path assigned.\"},\"invalid_persistence_option\":{\"message\":\"Invalid persistence option :%{invalid}.\",\"resolution\":\"Valid options are: %{valid}, make sure these are the ones you are using.\",\"summary\":\"The options used to change the persistence context must be one of the valid options for a mongo client, or a collection name.\"},\"invalid_relation\":{\"message\":\"Defining an association named \\'%{name}\\' is not allowed.\",\"resolution\":\"Use Mongoid.destructive_fields to see what names are not allowed, and don\\'t use these names. These include names that also conflict with core Ruby methods on Object, Module, Enumerable, or included gems that inject methods into these or Mongoid internals.\",\"summary\":\"Defining this association would override the method \\'%{name}\\', which would cause issues with expectations around the original method and cause extremely hard to debug issues. The original method was defined in:\\\\n   Object: %{origin}\\\\n   File: %{file}\\\\n   Line: %{line}\"},\"invalid_relation_option\":{\"message\":\"Invalid association option :%{option} for association \\'%{name}\\' on class %{klass}.\",\"resolution\":\"Valid options are: %{valid_options}, make sure you use only those.\",\"summary\":\"An invalid option was provided for an association.\"},\"invalid_scope\":{\"message\":\"Defining a scope of value %{value} on %{klass} is not allowed.\",\"resolution\":\"Change the scope to be a proc wrapped criteria.\\\\n\\\\n Example:\\\\n   class Band\\\\n     include Mongoid::Document\\\\n     scope :inactive, -\\\\u003e{ where(active: false) }\\\\n   end\\\\n\\\\n\",\"summary\":\"Scopes in Mongoid must be procs that wrap criteria objects.\"},\"invalid_session_nesting\":{\"message\":\"A session was started while another session was being used.\",\"resolution\":\"Only use one session at a time; sessions cannot be nested.\",\"summary\":\"Sessions cannot be nested. Only one session can be used in a thread at once.\"},\"invalid_session_use\":{\"message\":\"A session was attempted to be used with a model whose client cannot use that session.\",\"resolution\":\"Only execute operations on the model class or instances of the model through which the session was created. Otherwise, ensure that all models on which operations are executed in the session block share the same driver client. For example, a model may have a different client specified in its \\'store_in\\' options.\\\\n\\\\n\",\"summary\":\"Sessions are started via driver clients (Model#mongo_client) and, in most cases, driver clients are shared across models. When different models have their own clients, a session cannot be obtained via one model and used for operations on another model.\"},\"invalid_set_polymorphic_relation\":{\"message\":\"The %{name} attribute can\\'t be set to an instance of %{other_klass} as %{other_klass} has multiple associations referencing %{klass} as %{name}.\",\"resolution\":\"Set the values from the parent, or redefine the association with only a single definition in the parent.\",\"summary\":\"If the parent class of a polymorphic association has multiple definitions for the same association, the values must be set from the parent side and not the child side since Mongoid cannot determine from the child side which association to go in.\"},\"invalid_storage_options\":{\"message\":\"Invalid options passed to %{klass}.store_in: %{options}.\",\"resolution\":\"Change the options passed to store_in to match the documented API, and ensure all keys in the options hash are symbols.\\\\n\\\\n Example:\\\\n   class Band\\\\n     include Mongoid::Document\\\\n     store_in collection: \\'artists\\', database: \\'music\\'\\\\n   end\\\\n\\\\n\",\"summary\":\"The :store_in macro takes only a hash of parameters with the keys :database, :collection, :collection_options, or :client.\"},\"invalid_time\":{\"message\":\"\\'%{value}\\' is not a valid Time.\",\"resolution\":\"Make sure to pass parsable values to the field setter for Date, DateTime, and Time objects. When this is a String it needs to be valid for Time.parse. Other objects must be valid to pass to Time.local.\",\"summary\":\"Mongoid tries to serialize the values for Date, DateTime, and Time into proper UTC times to store in the database. The provided value could not be parsed.\"},\"inverse_not_found\":{\"message\":\"When adding a(n) %{klass} to %{base}#%{name}, Mongoid could not determine the inverse foreign key to set. The attempted key was \\'%{inverse}\\'.\",\"resolution\":\"If an inverse is not required, like a belongs_to or has_and_belongs_to_many, ensure that :inverse_of =\\\\u003e nil is set on the association. If the inverse is needed, most likely the inverse cannot be figured out from the names of the associations and you will need to explicitly tell Mongoid on the association what the inverse is.\\\\n\\\\n Example:\\\\n   class Car\\\\n     include Mongoid::Document\\\\n     has_one :engine, class_name: \\\\\"Motor\\\\\", inverse_of: :machine\\\\n   end\\\\n\\\\n   class Motor\\\\n     include Mongoid::Document\\\\n     belongs_to :machine, class_name: \\\\\"Car\\\\\", inverse_of: :engine\\\\n   end\",\"summary\":\"When adding a document to an association, Mongoid attempts to link the newly added document to the base of the association in memory, as well as set the foreign key to link them on the database side. In this case Mongoid could not determine what the inverse foreign key was.\"},\"message_title\":\"message\",\"mixed_client_configuration\":{\"message\":\"Both uri and standard configuration options defined for client: \\'%{name}\\'.\",\"resolution\":\"Provide either only a uri as configuration or only standard options.\",\"summary\":\"Instead of simply giving uri or standard options a preference order, Mongoid assumes that you have made a mistake in your configuration and requires that you provide one or the other, but not both. The options that were provided were: %{config}.\"},\"mixed_relations\":{\"message\":\"Referencing a(n) %{embedded} document from the %{root} document via a non-embedded association is not allowed since the %{embedded} is embedded.\",\"resolution\":\"Consider not embedding %{embedded}, or do the key storage and access in a custom manner in the application code.\",\"summary\":\"In order to properly access a(n) %{embedded} from %{root} the reference would need to go through the root document of %{embedded}. In a simple case this would require Mongoid to store an extra foreign key for the root, in more complex cases where %{embedded} is multiple levels deep a key would need to be stored for each parent up the hierarchy.\"},\"nested_attributes_metadata_not_found\":{\"message\":\"Could not find metadata for association \\'%{name}\\' on model: %{klass}.\",\"resolution\":\"Make sure that there is an association defined named \\'%{name}\\' on %{klass} or that the association definition comes before the accepts_nested_attributes_for macro in the model - order matters so that Mongoid has access to the metadata.\\\\n\\\\n Example:\\\\n   class Band\\\\n     include Mongoid::Document\\\\n     has_many :albums\\\\n     accepts_nested_attributes_for :albums\\\\n   end\\\\n\\\\n\",\"summary\":\"When defining nested attributes for an association, Mongoid needs to access the metadata for the association \\'%{name}\\' in order if add autosave functionality to it, if applicable. Either no association named \\'%{name}\\' could be found, or the association had not been defined yet.\"},\"no_client_config\":{\"message\":\"No configuration could be found for a client named \\'%{name}\\'.\",\"resolution\":\"Double check your mongoid.yml to make sure under the clients key that a configuration exists for \\'%{name}\\'. If you have set the configuration programmatically, ensure that \\'%{name}\\' exists in the configuration hash.\",\"summary\":\"When attempting to create the new client, Mongoid could not find a client configuration for the name: \\'%{name}\\'. This is necessary in order to know the host, port, and options needed to connect.\"},\"no_client_database\":{\"message\":\"No database provided for client configuration: :%{name}.\",\"resolution\":\"If configuring via a mongoid.yml, ensure that within your :%{name} section a :database value for the client\\'s default database is defined.\\\\n\\\\n Example:\\\\n   development:\\\\n     clients:\\\\n       %{name}:\\\\n         database: my_app_db\\\\n         hosts:\\\\n           - localhost:27017\\\\n\\\\n\",\"summary\":\"Each client configuration must provide a database so Mongoid knows where the default database to persist to. What was provided was: %{config}.\"},\"no_client_hosts\":{\"message\":\"No hosts provided for client configuration: :%{name}.\",\"resolution\":\"If configuring via a mongoid.yml, ensure that within your :%{name} section a :hosts value for the client hosts is defined.\\\\n\\\\n Example:\\\\n   development:\\\\n     clients:\\\\n       %{name}:\\\\n         database: my_app_db\\\\n         hosts:\\\\n           - localhost:27017\\\\n\\\\n\",\"summary\":\"Each client configuration must provide hosts so Mongoid knows where the database server is located. What was provided was: %{config}.\"},\"no_clients_config\":{\"message\":\"No clients configuration provided.\",\"resolution\":\"Double check your mongoid.yml to make sure that you have a top-level clients key with at least 1 default client configuration for it. You can regenerate a new mongoid.yml for assistance via `rails g mongoid:config`.\\\\n\\\\n Example:\\\\n   development:\\\\n     clients:\\\\n       default:\\\\n         database: mongoid_dev\\\\n         hosts:\\\\n           - localhost:27017\\\\n\\\\n\",\"summary\":\"Mongoid\\'s configuration requires that you provide details about each client that can be connected to, and requires in the clients config at least 1 default client to exist.\"},\"no_default_client\":{\"message\":\"No default client configuration is defined.\",\"resolution\":\"If configuring via a mongoid.yml, ensure that within your :clients section a :default client is defined.\\\\n\\\\n Example:\\\\n   development:\\\\n     clients:\\\\n       default:\\\\n         hosts:\\\\n           - localhost:27017\\\\n\\\\n\",\"summary\":\"The configuration provided settings for: %{keys}, but Mongoid requires a :default to be defined at minimum.\"},\"no_documents_found\":{\"message\":\"Could not find a document of class %{klass}.\",\"resolution\":\"Create a document of class %{klass} or use a finder method that does not raise an exception when no documents are found.\",\"summary\":\"Mongoid attempted to find a document of the class %{klass} but none exist.\"},\"no_environment\":{\"message\":\"Could not load the configuration since no environment was defined.\",\"resolution\":\"Please ensure an environment is set in one of the listed locations. The environment must be explicitly set.\",\"summary\":\"Mongoid could not determine the environment to use because it was not specified in any of the following locations: Rails.env, Sinatra::Base.environment, ENV[\\\\\"RACK_ENV\\\\\"], ENV[\\\\\"MONGOID_ENV\\\\\"]. Without knowing the environment, Mongoid cannot load its configuration.\"},\"no_map_reduce_output\":{\"message\":\"No output location was specified for the map/reduce operation.\",\"resolution\":\"Provide the location that the output of the operation is to go by chaining an #out call to the map/reduce.\\\\n\\\\n Example:\\\\n   Band.map_reduce(map, reduce).out(inline: 1)\\\\n\\\\n Valid options for the out function are:\\\\n   inline: 1\\\\n   merge: \\'collection-name\\'\\\\n   replace: \\'collection-name\\'\\\\n   reduce: \\'collection-name\\'\\\\n\\\\n\",\"summary\":\"When executing a map/reduce, you must provide the output location of the results. The attempted command was: %{command}.\"},\"no_metadata\":{\"message\":\"Metadata not found for document of type %{klass}.\",\"resolution\":\"Ensure that your associations on the %{klass} model are all properly defined, and that the inverse associations are also properly defined. Embedded associations must have both the parent (embeds_one/embeds_many) and the inverse (embedded_in) present in order to work properly.\",\"summary\":\"Mongoid sets the metadata of an association on the document when it is either loaded from within the association, or added to one. The presence of the metadata is required in order to provide various functionality around associations. Most likely you are getting this error because the document is embedded and was attempted to be persisted without being associated with a parent, or the association was not properly defined.\"},\"no_parent\":{\"message\":\"Cannot persist embedded document %{klass} without a parent document.\",\"resolution\":\"Ensure that you\\'ve set the parent association if instantiating the embedded document directly, or always create new embedded documents via the parent association.\",\"summary\":\"If the document is embedded, in order to be persisted it must always have a reference to its parent document. This is most likely caused by either calling %{klass}.create or %{klass}.create! without setting the parent document as an attribute.\"},\"readonly_attribute\":{\"message\":\"Attempted to set the readonly attribute \\'%{name}\\' with the value: %{value}.\",\"resolution\":\"Don\\'t define \\'%{name}\\' as readonly, or do not attempt to update its value after the document is persisted.\",\"summary\":\"Attributes flagged as readonly via Model.attr_readonly can only have values set when the document is a new record.\"},\"readonly_document\":{\"message\":\"Attempted to persist a readonly document of class \\'%{klass}\\'.\",\"resolution\":\"Don\\'t attempt to persist documents that are flagged as readonly.\",\"summary\":\"Documents that are marked readonly cannot be persisted.\"},\"resolution_title\":\"resolution\",\"scope_overwrite\":{\"message\":\"Cannot create scope :%{scope_name}, because of existing method %{model_name}.%{scope_name}.\",\"resolution\":\"Change the name of the scope so it does not conflict with the already defined method %{model_name}, or set the configuration option Mongoid.scope_overwrite_exception to false, which is its default. In this case a warning will be logged.\",\"summary\":\"When defining a scope that conflicts with a method that already exists on the model, this error will get raised if Mongoid.scope_overwrite_exception is set to true.\"},\"sessions_not_supported\":{\"message\":\"Sessions are not supported by the connected server(s).\",\"resolution\":\"Verify that all servers in your deployment are at least version 3.6 or don\\'t attempt to use sessions with older server versions.\",\"summary\":\"A session was attempted to be used with a MongoDB server version that doesn\\'t support sessions. Sessions are supported in MongoDB server versions 3.6 and higher.\"},\"summary_title\":\"summary\",\"too_many_nested_attribute_records\":{\"message\":\"Accepting nested attributes for %{association} is limited to %{limit} documents.\",\"resolution\":\"The limit is set as an option to the macro, for example: accepts_nested_attributes_for :%{association}, limit: %{limit}. Consider raising this limit or making sure no more are sent than the set value.\",\"summary\":\"More documents were sent to be processed than the allowed limit.\"},\"unknown_attribute\":{\"message\":\"Attempted to set a value for \\'%{name}\\' which is not allowed on the model %{klass}.\",\"resolution\":\"Define the field \\'%{name}\\' in %{klass}, or include Mongoid::Attributes::Dynamic in %{klass} if you intend to store values in fields that are not explicitly defined.\",\"summary\":\"%{klass}#%{name}= was called but there is no \\'%{name}\\' field defined in the model, and Mongoid::Attributes::Dynamic is not included. This error is also raised instead of NoMethodError if the unknown attribute is passed to any method that accepts an attributes hash, such as #attributes=.\"},\"unknown_model\":{\"message\":\"Attempted to instantiate an object of the unknown model \\'%{klass}\\'.\",\"resolution\":\"The _type field is a reserved one used by Mongoid to determine the class for instantiating an object. Please don\\'t save data in this field or ensure that any values in this field correspond to valid models.\",\"summary\":\"A document with the value \\'%{value}\\' at the key \\'_type\\' was used to instantiate a model object but Mongoid cannot find this Class.\"},\"unsaved_document\":{\"message\":\"Attempted to save %{document} before the parent %{base}.\",\"resolution\":\"Make sure to only use create or create! when the parent document %{base} is persisted.\",\"summary\":\"You cannot call create or create! through the association (%{document}) whose parent (%{base}) is not already saved. This would cause the database to be out of sync since the child could potentially reference a nonexistent parent.\"},\"unsupported_javascript\":{\"message\":\"Executing Javascript $where selector on an embedded criteria is not supported.\",\"resolution\":\"Please provide a standard hash to #where when the criteria is for an embedded association.\",\"summary\":\"Mongoid only supports providing a hash of arguments to #where criterion on embedded documents. Since %{klass} is embedded, the expression %{javascript} is not allowed.\"},\"validations\":{\"message\":\"Validation of %{document} failed.\",\"resolution\":\"Try persisting the document with valid data or remove the validations.\",\"summary\":\"The following errors were found: %{errors}\"}}}},\"number\":{\"currency\":{\"format\":{\"delimiter\":\",\",\"format\":\"%u%n\",\"negative_format\":\"-%u%n\",\"precision\":2,\"separator\":\".\",\"significant\":false,\"strip_insignificant_zeros\":false,\"unit\":\"$\"}},\"format\":{\"delimiter\":\",\",\"precision\":3,\"round_mode\":\"default\",\"separator\":\".\",\"significant\":false,\"strip_insignificant_zeros\":false},\"human\":{\"decimal_units\":{\"format\":\"%n %u\",\"units\":{\"billion\":\"Billion\",\"million\":\"Million\",\"quadrillion\":\"Quadrillion\",\"thousand\":\"Thousand\",\"trillion\":\"Trillion\",\"unit\":\"\"}},\"format\":{\"delimiter\":\"\",\"precision\":3,\"significant\":true,\"strip_insignificant_zeros\":true},\"storage_units\":{\"format\":\"%n %u\",\"units\":{\"byte\":{\"one\":\"Byte\",\"other\":\"Bytes\"},\"eb\":\"EB\",\"gb\":\"GB\",\"kb\":\"KB\",\"mb\":\"MB\",\"pb\":\"PB\",\"tb\":\"TB\",\"zb\":\"ZB\"}}},\"nth\":{},\"percentage\":{\"format\":{\"delimiter\":\"\",\"format\":\"%n%\"}},\"precision\":{\"format\":{\"delimiter\":\"\"}}},\"simple_form\":{\"error_notification\":{\"default_message\":\"Please review the problems below:\"},\"no\":\"No\",\"required\":{\"mark\":\"*\",\"text\":\"required\"},\"yes\":\"Yes\"},\"support\":{\"array\":{\"last_word_connector\":\", and \",\"two_words_connector\":\" and \",\"words_connector\":\", \"}},\"time\":{\"am\":\"am\",\"formats\":{\"default\":\"%a, %d %b %Y %H:%M:%S %z\",\"long\":\"%B %d, %Y %H:%M\",\"short\":\"%d %b %H:%M\"},\"pm\":\"pm\"},\"users\":{\"confirmations\":{\"new\":{\"legend\":\"Resend your %{brand_name} confirmation instructions\",\"message\":\"We need to confirm your email address to complete the sign up process. Supply your email address, below, and we will send you instructions on how to confirm your address.\",\"submit_button\":\"Send Confirmation Instructions\",\"title\":\"Resend confirmation instructions | %{brand_name}\"},\"show\":{\"legend\":\"Check your inbox for a confirmation email\",\"message\":\"If your e-mail exists in our database we have sent you a message with instructions. Check your inbox (or spam folder) for a message from \\'%{default_from_email}\\' containing the confirmation link.\",\"title\":\"Awaiting confirmation | %{brand_name}\"}},\"passwords\":{\"new\":{\"failures\":\"Note: If you make more than 5 sequential failed attempts to sign in with your %{brand_name} password, your account will be (temporarily) locked. Check your inbox for instruction on how to unlock your account, or we can\",\"legend\":\"Reset your %{brand_name} password\",\"message\":\"Supply your email address, below, and we will send you instructions on how to reset your password.\",\"resend_link\":\"resend a new set of unlock instructions\",\"submit_button\":\"Send Reset Instructions\",\"title\":\"Reset password | %{brand_name}\"},\"show\":{\"didnt_receive_email\":\"Didn\\'t receive the email?\",\"legend\":\"Password reset instructions sent\",\"message\":\"If your e-mail exists in our database we have sent you a message with password reset instructions. Check your inbox (or spam folder) for a message from \\'%{default_from_email}\\'.\",\"resend_link\":\"you can request another one here\",\"title\":\"Awaiting reset | %{brand_name}\"}}},\"will_paginate\":{\"container_aria_label\":\"Pagination\",\"next_label\":\"Next \\\\u0026#8594;\",\"page_aria_label\":\"Page %{page}\",\"page_entries_info\":{\"multi_page\":\"Displaying %{model} %{from} - %{to} of %{count} in total\",\"multi_page_html\":\"Displaying %{model} \\\\u003cb\\\\u003e%{from}\\\\u0026nbsp;-\\\\u0026nbsp;%{to}\\\\u003c/b\\\\u003e of \\\\u003cb\\\\u003e%{count}\\\\u003c/b\\\\u003e in total\",\"single_page\":{\"one\":\"Displaying 1 %{model}\",\"other\":\"Displaying all %{count} %{model}\",\"zero\":\"No %{model} found\"},\"single_page_html\":{\"one\":\"Displaying \\\\u003cb\\\\u003e1\\\\u003c/b\\\\u003e %{model}\",\"other\":\"Displaying \\\\u003cb\\\\u003eall\\\\u0026nbsp;%{count}\\\\u003c/b\\\\u003e %{model}\",\"zero\":\"No %{model} found\"}},\"page_gap\":\"\\\\u0026hellip;\",\"previous_label\":\"\\\\u0026#8592; Previous\"}}'));\nI18n.translations[\"hi\"] = I18n.extend((I18n.translations[\"hi\"] || {}), JSON.parse('{\"activerecord\":{\"errors\":{\"messages\":{\"record_invalid\":\"Validation failed: %{errors}\",\"restrict_dependent_destroy\":{\"has_many\":\"Cannot delete record because dependent %{record} exist\",\"has_one\":\"Cannot delete record because a dependent %{record} exists\"}}}},\"bulk_uploads\":{\"email_local_part\":{\"empty_parameter\":\"No file uploaded\",\"error\":\"File Upload failed: %{error_message}\",\"success\":\"File was successfully uploaded\"}},\"common\":{\"crm\":{\"salesforce\":{\"forgot_password\":\"If you have forgotten your Salesforce password, please follow the instructions provided on the Salesforce sign in page.\",\"sign_in_button\":\"Sign In with Salesforce\"}}},\"contact\":{\"default_from_email\":\"info@zymewire.com\",\"phone_numbers\":[{\"label\":\"US\",\"phone\":\"1-844-996-3321\"},{\"label\":\"UK\",\"phone\":\"+44-208-133-9963\"}],\"support_email\":\"support@zymewire.com\"},\"date\":{\"abbr_day_names\":[\"Sun\",\"Mon\",\"Tue\",\"Wed\",\"Thu\",\"Fri\",\"Sat\"],\"abbr_month_names\":[null,\"Jan\",\"Feb\",\"Mar\",\"Apr\",\"May\",\"Jun\",\"Jul\",\"Aug\",\"Sep\",\"Oct\",\"Nov\",\"Dec\"],\"day_names\":[\"Sunday\",\"Monday\",\"Tuesday\",\"Wednesday\",\"Thursday\",\"Friday\",\"Saturday\"],\"formats\":{\"default\":\"%Y-%m-%d\",\"long\":\"%B %d, %Y\",\"short\":\"%b %d\"},\"month_names\":[null,\"January\",\"February\",\"March\",\"April\",\"May\",\"June\",\"July\",\"August\",\"September\",\"October\",\"November\",\"December\"],\"order\":[\"year\",\"month\",\"day\"]},\"datetime\":{\"distance_in_words\":{\"about_x_hours\":{\"one\":\"about 1 hour\",\"other\":\"about %{count} hours\"},\"about_x_months\":{\"one\":\"about 1 month\",\"other\":\"about %{count} months\"},\"about_x_years\":{\"one\":\"about 1 year\",\"other\":\"about %{count} years\"},\"almost_x_years\":{\"one\":\"almost 1 year\",\"other\":\"almost %{count} years\"},\"half_a_minute\":\"half a minute\",\"less_than_x_minutes\":{\"one\":\"less than a minute\",\"other\":\"less than %{count} minutes\"},\"less_than_x_seconds\":{\"one\":\"less than 1 second\",\"other\":\"less than %{count} seconds\"},\"over_x_years\":{\"one\":\"over 1 year\",\"other\":\"over %{count} years\"},\"x_days\":{\"one\":\"1 day\",\"other\":\"%{count} days\"},\"x_minutes\":{\"one\":\"1 minute\",\"other\":\"%{count} minutes\"},\"x_months\":{\"one\":\"1 month\",\"other\":\"%{count} months\"},\"x_seconds\":{\"one\":\"1 second\",\"other\":\"%{count} seconds\"}},\"prompts\":{\"day\":\"Day\",\"hour\":\"Hour\",\"minute\":\"Minute\",\"month\":\"Month\",\"second\":\"Seconds\",\"year\":\"Year\"}},\"default_host\":\"https://www.zymewire.com\",\"devise\":{\"confirmations\":{\"confirmed\":\"Your account was successfully confirmed. Please sign in.\",\"send_instructions\":\"Your email has not been confirmed. We need to confirm your email account before you can sign in. Please check your inbox or spam folder for an email from \\'info@zymewire.com\\' or request a new one.\",\"send_paranoid_instructions\":\"If your e-mail exists on our database, you will receive an email with instructions about how to confirm your account in a few minutes.\"},\"failure\":{\"already_authenticated\":\"You are already signed in.\",\"expired\":\"कोई गतिविधि न होने के कारण खाता बंद हो गया, सिस्टम व्यवस्थापक से संपर्क करें\",\"inactive\":\"Your account was not activated yet.\",\"invalid\":\"Invalid email or password. If you use Salesforce, use the \\'Have Salesforce?\\' panel.\",\"invalid_token\":\"Invalid authentication token.\",\"last_attempt\":\"You have one more attempt before your account is locked.\",\"locked\":\"Your account is locked.\",\"not_active\":\"Your account has been de-activated, if you think this is a mistake please contact us\",\"not_found_in_database\":\"Invalid %{authentication_keys} or password.\",\"session_limited\":\"जानकारी, दूसरे ब्राउज़र में उपयोग की गयी थी जारी रखने फिर से साइन-इन करे\",\"timeout\":\"Your session expired, please sign in again to continue.\",\"unauthenticated\":\"You need to sign in or sign up before continuing.\",\"unconfirmed\":\"We must confirm your email before you can continue. Please check your inbox or spam folder for a confirmation email from \\'info@zymewire.com\\' or request a new one.\"},\"invalid_captcha\":\"अमान्य कॅप्टचा\",\"invalid_security_question\":\"अमान्य सुरक्षा उत्तर\",\"mailer\":{\"confirmation_instructions\":{\"subject\":\"Confirmation instructions for Zymewire.com\"},\"email_changed\":{\"subject\":\"Email Changed\"},\"password_change\":{\"subject\":\"Password Changed\"},\"reset_password_instructions\":{\"subject\":\"Reset password instructions for Zymewire.com\"},\"unlock_instructions\":{\"subject\":\"Unlock Instructions for Zymewire.com\"}},\"omniauth_callbacks\":{\"failure\":\"Could not authorize you from %{kind} because \\\\\"%{reason}\\\\\".\",\"success\":\"Successfully authorized from %{kind} account.\"},\"paranoid_verification_code\":{\"show\":{\"submit\":\"सबमिट\",\"submit_verification_code\":\"वेरिफिकेशन कोड डाले\",\"verification_code\":\"वेरिफिकेशन कोड\"},\"updated\":\"सत्यापन कोड स्वीकार किया गया\"},\"paranoid_verify\":{\"code_required\":\"सपोर्ट टीम द्वारा दिया गया कोड डाले\"},\"password_expired\":{\"change_required\":\"पासवर्ड अमान्य हो चुका, पासवर्ड बदले\",\"show\":{\"change_my_password\":\"पासवर्ड बदले\",\"current_password\":\"वर्तमान पासवर्ड\",\"new_password\":\"नया पासवर्ड\",\"new_password_confirmation\":\"नए पासवर्ड की पुष्टि करें\",\"renew_your_password\":\"पासवर्ड बदले\"},\"updated\":\"पासवर्ड अद्यतन किया गया\"},\"passwords\":{\"no_token\":\"You can\\'t access this page without coming from a password reset email. If you do come from a password reset email, please make sure you used the full URL provided.\",\"send_instructions\":\"You will receive an email with instructions about how to reset your password in a few minutes.\",\"send_paranoid_instructions\":\"If your e-mail exists on our database, you will receive a password recovery link on your e-mail\",\"updated\":\"Your password was changed successfully. You are now signed in.\",\"updated_not_active\":\"Your password was changed successfully.\"},\"registrations\":{\"destroyed\":\"Bye! Your account was successfully cancelled. We hope to see you again soon.\",\"signed_up\":\"Welcome! You have signed up successfully.\",\"signed_up_but_inactive\":\"You have signed up successfully. However, we could not sign you in because your account is not yet activated.\",\"signed_up_but_locked\":\"You have signed up successfully. However, we could not sign you in because your account is locked.\",\"signed_up_but_unconfirmed\":\"A message with a confirmation link has been sent to your email address. Please open the link to activate your account.\",\"update_needs_confirmation\":\"You updated your account successfully, but we need to verify your new email address. Please check your email and click on the confirm link to finalize confirming your new email address.\",\"updated\":\"You updated your account successfully.\",\"updated_but_not_signed_in\":\"Your account has been updated successfully, but since your password was changed, you need to sign in again.\"},\"sessions\":{\"already_signed_out\":\"Signed out successfully.\",\"signed_in\":\"Signed in successfully.\",\"signed_out\":\"Signed out successfully.\"},\"unlocks\":{\"send_instructions\":\"You will receive an email with instructions about how to unlock your account in a few minutes.\",\"send_paranoid_instructions\":\"If your account exists, you will receive an email with instructions about how to unlock it in a few minutes.\",\"unlocked\":\"Your account has been unlocked successfully. Please sign in to continue.\"}},\"download\":\"Download\",\"download_30_days\":\"This link will be available for 30 days after which the file will be removed from our servers.\",\"enumerize\":{\"blocklisted_contact\":{\"provider\":{\"insideview\":\"InsideView\",\"zephyr\":\"Zephyr\"}}},\"errors\":{\"format\":\"%{attribute} %{message}\",\"messages\":{\"accepted\":\"must be accepted\",\"already_confirmed\":\"was already confirmed, please try signing in\",\"blank\":\"can\\'t be blank\",\"confirmation\":\"doesn\\'t match %{attribute}\",\"confirmation_period_expired\":\"needs to be confirmed within %{period}, please request a new one\",\"empty\":\"can\\'t be empty\",\"equal_to\":\"must be equal to %{count}\",\"equal_to_current_password\":\"नया पासवर्ड, वर्तमान पासवर्ड से भिन्न होना चाहिए\",\"equal_to_email\":\"ईमेल से अलग होना चाहिए\",\"even\":\"must be even\",\"exclusion\":\"is reserved\",\"expired\":\"has expired, please request a new one\",\"greater_than\":\"must be greater than %{count}\",\"greater_than_or_equal_to\":\"must be greater than or equal to %{count}\",\"in\":\"must be in %{count}\",\"inclusion\":\"is not included in the list\",\"invalid\":\"is invalid\",\"less_than\":\"must be less than %{count}\",\"less_than_or_equal_to\":\"must be less than or equal to %{count}\",\"model_invalid\":\"Validation failed: %{errors}\",\"not_a_number\":\"is not a number\",\"not_an_integer\":\"must be an integer\",\"not_found\":\"not found\",\"not_locked\":\"was not locked\",\"not_saved\":{\"one\":\"1 error prohibited this %{resource} from being saved:\",\"other\":\"%{count} errors prohibited this %{resource} from being saved:\"},\"odd\":\"must be odd\",\"other_than\":\"must be other than %{count}\",\"password_complexity\":{\"digit\":{\"one\":\"एक अंक होना चाहिए\",\"other\":\"कम से कम %{count} अंक होने चाहिए\"},\"lower\":{\"one\":\"एक लोअर-केस अक्षर होना चाहिए\",\"other\":\"कम से कम %{count} अक्षर होने चाहिए\"},\"symbol\":{\"one\":\"एक चिन्ह होना चाहिए\",\"other\":\"कम से कम %{count} चिन्ह होने चाहिए\"},\"upper\":{\"one\":\"एक अपर-केस अक्षर होना चाहिए\",\"other\":\"कम से कम %{count} अपर-केस अक्षर होने चाहिए\"}},\"password_format\":\"Must contain uppercase AND lowercase letters and at least one number\",\"password_too_long\":\"is too long\",\"present\":\"must be blank\",\"required\":\"must exist\",\"taken\":\"has already been taken\",\"taken_in_past\":\"यह पासवर्ड, आपके द्वारा पूर्व मे प्रयोग किया जा चुका है\",\"too_long\":{\"one\":\"is too long (maximum is 1 character)\",\"other\":\"is too long (maximum is %{count} characters)\"},\"too_short\":{\"one\":\"is too short (minimum is 1 character)\",\"other\":\"is too short (minimum is %{count} characters)\"},\"wrong_length\":{\"one\":\"is the wrong length (should be 1 character)\",\"other\":\"is the wrong length (should be %{count} characters)\"}}},\"flash\":{\"actions\":{\"create\":{\"notice\":\"%{resource_name} was successfully created.\"},\"destroy\":{\"alert\":\"%{resource_name} could not be destroyed.\",\"notice\":\"%{resource_name} was successfully destroyed.\"},\"update\":{\"notice\":\"%{resource_name} was successfully updated.\"}}},\"hello_world\":\"Hello world\",\"helpers\":{\"select\":{\"prompt\":\"Please select\"},\"submit\":{\"create\":\"Create %{model}\",\"submit\":\"Save %{model}\",\"update\":\"Update %{model}\"}},\"hi\":\"Hi\",\"mailers\":{\"common\":{\"chummy_sign_off\":\"Have a good one.\",\"final_note\":\"P.S.: If you think you received this email accidentally, then something weird could be going on. Hit reply and a member of the %{brand_name} team will investigate.\",\"team_sign_off\":\"- The %{brand_name} Team\"},\"confirmation_instructions_email\":{\"crm\":{\"salesforce\":{\"resource_confirmed\":\"Someone has requested a resend of a confirmation email. You do not need to confirm your email address because your account is configured to use Salesforce to sign in.\",\"resource_unconfirmed\":\"You do not need to confirm your email address because your account is configured to use Salesforce to sign in, please complete the sign up process by clicking the button below to sign in to %{brand_name} via Salesforce.\"}},\"non_crm\":{\"confirm_link\":\"Confirm my account\",\"welcome\":\"Welcome to %{brand_name}. As the final step in the process you\\'ll need to confirm your account by clicking on the link below.\"},\"subject\":\"Confirmation instructions for %{domain}\"},\"flagged_events_mailer\":{\"from\":\"Flagged events - %{brand_name} \\\\u003cflagged_events@mailer.%{domain}\\\\u003e\"},\"mobile_registration_email\":{\"alert_cs_registration_locked\":{\"subject\":\"%{brand_name}: user has had mobile registration locked, too many failed attempts\"},\"dispatch_registration_PIN\":{\"further_instructions\":\"If you are NOT attempting to register for the %{brand_name} Mobile app then please let us know at %{support_email_link} - thank you.\",\"introduction\":\"Here is your mobile app registration PIN:\",\"subject\":\"%{brand_name} Mobile Registration Verification\"},\"too_many_failed_attempts\":{\"introduction\":\"We have received too many failed mobile device registration attempts for your account and we will block any further requests. If you have not attempted to register a mobile device with us in the last hour then please let us know as it is likely someone has tried on your behalf. If you have been trying to register a device please contact %{support_email_link} and we can help unlock your account and get you registered.\",\"subject\":\"%{brand_name}: too many failed registration attempts\"}},\"org_list_download_mail\":{\"dispatch_link\":{\"introduction\":\"We have finished meshing your %{crm_brand_name} data with the companies in your \\\\\"%{list_name}\\\\\" list.\",\"subject\":\"%{brand_name}: your file download of \\'%{list_name}\\' is ready\"},\"failed\":{\"instructions\":\"You could try again in a little while. If you already have and are receiving this email again, please contact us at %{support_email_link}\",\"introduction\":\"We are really sorry, but something went wrong with creating your download of %{crm_brand_name} data for your \\\\\"%{list_name}\\\\\" list.\",\"subject\":\"%{brand_name}: your file download of \\'%{list_name}\\' failed\"}},\"reset_password_instructions_email\":{\"crm\":{\"salesforce\":{\"change_requested\":\"Someone has requested a change to your password. Your account is configured to use Salesforce to sign in.\"}},\"fishy_fine_print\":\"If you did not request a password change, then something weird is going on. Someone may be trying to access your account (unsuccessfully). Please reply to this email and let us know. We will take steps to make sure it stops.\",\"non_crm\":{\"change_password_link\":\"Change my password\",\"change_requested\":\"Someone has requested a change to your password, you can do this via the link below.\"},\"subject\":\"Password reset instructions for %{domain}\"},\"sales_force_mail\":{\"processing_completed\":{\"bullet_points\":[\"Only show events associated with companies in your Salesforce account\",\"Add new contacts and accounts to your Salesforce account without leaving %{brand_name}\",\"Access the \\'Salesforce details\\' panel on company dashboards where you can see open tasks, team interactions, opportunities, and more!\"],\"further_instructions\":\"We\\'re here to help. If you run into any questions or challenges, please contact us at %{support_email_link} and a member of our team would be more than happy to help.\",\"get_the_most\":\"To get the most from the integration, check out the \\'Mine Salesforce for opportunities\\' guide in the Help Center.\",\"guide_button\":\"Take me to the guide\",\"introduction\":\"Good news - your Salesforce account is now integrated with %{brand_name}. Now you’ll be able to:\"}},\"segment_contact\":{\"report_manager\":{\"fail_subject\":\"%{brand_name}: The PDF report generation failed\",\"success_subject\":\"%{brand_name}: Your PDF for %{company_name} is attached\"}},\"sf_token_expiry_email\":{\"further_instructions\":\"If you run into any questions or challenges, please contact us at %{support_email_link} and a member of our team would be more than happy to help.\",\"introduction\":\"Unfortunately the connection established for you between %{brand_name} and your %{crm_brand_name} account has expired. We will not be able to update your lists in %{brand_name} to reflect your %{crm_brand_name} database. To re-establish the connection, you just need to log in to %{brand_name} using your %{crm_brand_name}.\",\"subject\":\"%{brand_name} to %{crm_brand_name} connection has expired\"},\"share_list_mail\":{\"introduction\":\"%{user_name} shared a list with you: \",\"subject\":\"[%{brand_name} - shared list] %{list_name}\"},\"trial_expiry_mail\":{\"seven_days_to_go\":{\"further_instructions\":\"A member of our fabulous Customer Success team will arrange a welcome call with you to understand your goals and priorities, and will then give you a personalized Tour de %{brand_name} so you can easily access the information that is most valuable to you.\",\"instructions\":\"If you\\'d like continued access to the platform with our flexible month-to-month subscription, please ensure you contact %{support_email_link} ahead of: %{deadline}\",\"introduction\":\"Time flies when you\\'re uncovering new business opportunities! Your %{brand_name} trial is coming to an end next week.\",\"sign_off\":\"We look forward to helping you reach your sales goals!\",\"subject\":\"Just a heads up that your %{brand_name} trial is ending in seven days\"},\"seven_days_to_go_warning_for_cs\":{\"introduction\":\"%{user_name} shared a list with you: \",\"subject\":\"[%{brand_name} - shared list] %{list_name}\"}},\"unlock_instructions_email\":{\"crm\":{\"salesforce\":{\"change_requested\":\"You are being sent this email either because of one too many unsuccessful non-Salesforce log-in attempts or someone has requested an unlock email. %{brand_name} has not locked your account because your account is configured to use Salesforce to sign in.\",\"password_forgotten\":\"If you have forgotten your Salesforce password or think your account has been locked by Salesforce, please follow the instructions provided on the Salesforce sign in page.\"}},\"fishy_fine_print\":\"If you have not been (unsuccessfully) trying to log in to your account, then something weird is going on. Someone may be trying to access your account (unsuccessfully). Please reply to this email and let us know. We will take steps to make sure it stops.\",\"non_crm\":{\"change_requested\":\"For security reasons we have locked your account because of too many log-in attempts. To unlock your account, click the link below.\",\"unlock_account_link\":\"Unlock my account\"},\"subject\":\"Unlock instructions for %{domain}\"}},\"mongoid\":{\"errors\":{\"messages\":{\"ambiguous_relationship\":{\"message\":\"Ambiguous associations %{candidates} defined on %{klass}.\",\"resolution\":\"On the %{name} association on %{inverse} you must add an :inverse_of option to specify the exact association on %{klass} that is the opposite of %{name}.\",\"summary\":\"When Mongoid attempts to set an inverse document of an association in memory, it needs to know which association it belongs to. When setting %{name}, Mongoid looked on the class %{inverse} for a matching association, but multiples were found that could potentially match: %{candidates}.\"},\"blank_in_locale\":\"can\\'t be blank in %{location}\",\"callbacks\":{\"message\":\"Calling %{method} on %{klass} resulted in a false return from a callback.\",\"resolution\":\"Double check all before callbacks to make sure they are not unintentionally returning false.\",\"summary\":\"If a before callback returns false when using Document.create!, Document#save!, or Document#update_attributes! this error will get raised since the document did not actually get saved.\"},\"calling_document_find_with_nil_is_invalid\":{\"message\":\"Calling Document.find with nil is invalid.\",\"resolution\":\"Most likely this is caused by passing parameters directly through to the find, and the parameter either is not present or the key from which it is accessed is incorrect.\",\"summary\":\"Document.find expects the parameters to be 1 or more ids, and will return a single document if 1 id is provided, otherwise an array of documents if multiple ids are provided.\"},\"create_collection_failure\":{\"message\":\"Cannot create collection %{collection_name} with options %{collection_options}. The following error was raised: %{error}.\",\"resolution\":\"Double check that collection options for the collection %{collection_name} are valid. Consult with Ruby driver documentation and MongoDB documentation if the desired options are supported by your version of the server.\",\"summary\":\"The server rejected createCollection command with given collection options. This may happen when some of the options are invalid, or not supported by your version of the server.\"},\"criteria_argument_required\":{\"message\":\"Calling Criteria methods with nil arguments is not allowed.\",\"resolution\":\"Invoke Criteria methods with non-nil arguments or omit the respective invocations.\",\"summary\":\"Arguments to Criteria methods cannot be nil, and most Criteria methods require at least one argument. Only logical operations (and, or, nor and not), `all\\' and `where\\' can be called without arguments. The method that was called with nil argument was: %{query_method}.\"},\"delete_restriction\":{\"message\":\"Cannot destroy %{document} because of dependent \\'%{relation}\\'.\",\"resolution\":\"Don\\'t attempt to delete the parent %{document} when it has children, or change the dependent option on the association.\",\"summary\":\"When defining \\'%{relation}\\' with a :dependent =\\\\u003e :restrict_with_error, Mongoid will raise an error when attempting to destroy the %{document} when the child \\'%{relation}\\' still has documents in it.\"},\"destroy_restrict_with_error_dependencies_exist\":\"is not empty and prevents the document from being destroyed\",\"document_not_destroyed\":{\"message\":\"%{klass} with id %{id} was not destroyed.\",\"resolution\":\"Check the before/after destroy callbacks to ensure that the return values are truthy for the chain to continue.\",\"summary\":\"When calling %{klass}#destroy! and a callback halts the destroy callback chain by returning a false value, the deletion will not actually occur.\"},\"document_not_found\":{\"message\":\"Document(s) not found for class %{klass} with id(s) %{missing}.\",\"resolution\":\"Search for an id that is in the database or set the Mongoid.raise_not_found_error configuration option to false, which will cause nil to be returned instead of raising this error when searching for a single id, or only the matched documents when searching for multiples.\",\"summary\":\"When calling %{klass}.find with an id or array of ids, each parameter must match a document in the database or this error will be raised. The search was for the id(s): %{searched} (%{total} total) and the following ids were not found: %{missing}.\"},\"document_with_attributes_not_found\":{\"message\":\"Document not found for class %{klass} with attributes %{attributes}.\",\"resolution\":\"Search for attributes that are in the database or set the Mongoid.raise_not_found_error configuration option to false, which will cause nil to be returned instead of raising this error.\",\"summary\":\"When calling %{klass}.find_by with a hash of attributes, all attributes provided must match a document in the database or this error will be raised.\"},\"document_with_shard_key_not_found\":{\"message\":\"Document not found for class %{klass} with id %{missing} and shard key %{shard_key}.\",\"resolution\":\"Search for an id/shard key that is in the database or set the Mongoid.raise_not_found_error configuration option to false, which will cause nil to be returned instead of raising this error.\",\"summary\":\"When calling %{klass}.find with an id and a shard key, each parameter must match a document in the database or this error will be raised. The search was for the id: %{missing} with shard_key: %{shard_key} and it was not found.\"},\"drop_collection_failure\":{\"message\":\"Cannot drop collection %{collection_name}.\",\"resolution\":\"Try to drop the collection manually using Ruby driver or mongo shell.\",\"summary\":\"Mongoid tried to drop collection %{collection_name}, but the collection still exists in the database.\"},\"empty_config_file\":{\"message\":\"Empty configuration file: %{path}.\",\"resolution\":\"Ensure your configuration file contains the correct contents. Refer to: https://www.mongodb.com/docs/mongoid/current/reference/configuration/\",\"summary\":\"Your mongoid.yml configuration file appears to be empty.\"},\"immutable_attribute\":{\"message\":\"Attempted to change the immutable attribute \\'%{name}\\' with the value: %{value}.\",\"resolution\":\"Do not attempt to update the value of \\'%{name}\\' after the document is persisted.\",\"summary\":\"Immutable attributes can only have values set when the document is a new record.\"},\"in_memory_collation_not_supported\":{\"message\":\"A collation option cannot be applied when querying documents in-memory.\",\"resolution\":\"Remove the collation option from the query.\",\"summary\":\"The query being run against documents in memory has a collation option set. A collation option is only supported if the query is executed on a MongoDB server with version \\\\u003e= 3.4.\"},\"invalid_async_query_executor\":{\"message\":\"Invalid async_query_executor option: %{executor}.\",\"resolution\":\"Pick an allowed option or fix the typo. If you were expecting the option to be there, please consult the following page with respect to Mongoid\\'s configuration:\\\\n\\\\n   https://www.mongodb.com/docs/mongoid/current/reference/configuration/#mongoid-configuration-options\",\"summary\":\"A invalid async query executor was specified. The valid options are: %{options}.\"},\"invalid_collection\":{\"message\":\"Access to the collection for %{klass} is not allowed.\",\"resolution\":\"For access to the collection that the embedded document is in, use %{klass}#_root.collection, or do not attempt to persist an embedded document without a parent set.\",\"summary\":\"%{klass}.collection was called, and %{klass} is an embedded document - it resides within the collection of the root document of the hierarchy.\"},\"invalid_config_file\":{\"message\":\"Invalid configuration file: %{path}.\",\"resolution\":\"Ensure your configuration file contains the correct contents. Refer to: https://www.mongodb.com/docs/mongoid/current/reference/configuration/\",\"summary\":\"Your mongoid.yml configuration file does not contain the correct file structure.\"},\"invalid_config_option\":{\"message\":\"Invalid configuration option: %{name}.\",\"resolution\":\"Remove the invalid option or fix the typo. If you were expecting the option to be there, please consult the following page with respect to Mongoid\\'s configuration:\\\\n\\\\n   http://mongoid.org/en/mongoid/docs/installation.html\",\"summary\":\"A invalid configuration option was provided in your mongoid.yml, or a typo is potentially present. The valid configuration options are: %{options}.\"},\"invalid_dependent_strategy\":{\"message\":\"Invalid dependent strategy: %{invalid_strategy}.\",\"resolution\":\"Change the dependent strategy to one of the valid types.\",\"summary\":\"An invalid dependent strategy was defined for the association: %{association}. The valid strategies are: %{valid_strategies}.\"},\"invalid_discriminator_key_target\":{\"message\":\"Setting the discriminator key on a child class is not allowed.\",\"resolution\":\"Try setting the discriminator key on %{superclass} or one of %{class_name}\\'s ancestors.\",\"summary\":\"The discriminator key on the class %{class_name} was attempted to be changed. Changing the discriminator key on a child class is not allowed.\"},\"invalid_dot_dollar_assignment\":{\"message\":\"Cannot set the %{attr} attribute on the %{klass} class.\",\"resolution\":\"In order to set fields that start with a dollar sign ($) or contain a dot/period (.), the aggregation pipeline can be used. MongoDB provides specific operators for working with these fields. Refer to the MongoDB documentation here: https://www.mongodb.com/docs/manual/core/dot-dollar-considerations/\",\"summary\":\"Calling the setters for fields that start with a dollar sign ($) or contain a dot/period (.) is prohibited. See the Mongoid documentation on Field Names with Dots/Periods (.) and Dollar Signs ($) for more information.\"},\"invalid_elem_match_operator\":{\"message\":\"Invalid $elemMatch operator \\'%{operator}\\'.\",\"resolution\":\"Valid field operators are: %{valid_operators}. Ensure you are using one of these operators.\",\"summary\":\"You misspelled an operator or are using an operator that Mongoid does not support.\"},\"invalid_estimated_count_criteria\":{\"message\":\"Invalid criteria for estimated_count.\",\"resolution\":\"Try calling estimated_count directly on the class: %{class_name}.estimated_count.\\\\n\\\\n  If the class defines a default scope, use unscoped: %{class_name}.unscoped.estimated_count.\",\"summary\":\"Estimated count is strictly a collection-level operation and cannot be called on a filtered criteria.\"},\"invalid_expression_operator\":{\"message\":\"Invalid expression operator \\'%{operator}\\'.\",\"resolution\":\"Valid expression operators are: %{valid_operators}. Ensure you are using one of these operators.\",\"summary\":\"You misspelled an operator, are using an operator that Mongoid does not support, or are trying to use a field-level operator on expression level.\"},\"invalid_field\":{\"message\":\"Defining a field named \\'%{field}\\' is not allowed.\",\"resolution\":\"Use Mongoid.destructive_fields to see what names are not allowed, and don\\'t use these names. These include names that also conflict with core Ruby methods on Object, Module, Enumerable, or included gems that inject methods into these or Mongoid internals.\",\"summary\":\"Defining this field would override the method \\'%{name}\\', which would cause issues with expectations around the original method and cause extremely hard to debug issues. The original method was defined in:\\\\n   Object: %{origin}\\\\n   File: %{file}\\\\n   Line: %{line}\"},\"invalid_field_operator\":{\"message\":\"Invalid field operator \\'%{operator}\\'.\",\"resolution\":\"Valid field operators are: %{valid_operators}. Ensure you are using one of these operators.\",\"summary\":\"You misspelled an operator, are using an operator that Mongoid does not support, or are trying to use an expression-level operator on field level.\"},\"invalid_field_option\":{\"message\":\"Invalid option :%{option} provided for field :%{name}.\",\"resolution\":\"When defining the field :%{name} on \\'%{klass}\\', please provide valid options for the field. These are currently: %{valid}. If you meant to define a custom field option, please do so first as follows:\\\\n\\\\n   Mongoid::Fields.option :%{option} do |model, field, value|\\\\n     # Your logic here...\\\\n   end\\\\n   class %{klass}\\\\n     include Mongoid::Document\\\\n     field :%{name}, %{option}: true\\\\n   end\\\\n\\\\n Refer to: https://www.mongodb.com/docs/mongoid/current/reference/fields/#custom-field-options\",\"summary\":\"Mongoid requires that you only provide valid options on each field definition in order to prevent unexpected behavior later on.\"},\"invalid_field_type\":{\"message\":\"Invalid field type %{type_inspection} for field \\'%{field}\\' on model \\'%{klass}\\'.\",\"resolution\":\"Please provide a valid type value for the field. Refer to: https://www.mongodb.com/docs/mongoid/current/reference/fields/#using-symbols-or-strings-instead-of-classes\",\"summary\":\"Model \\'%{klass}\\' defines a field \\'%{field}\\' with an unknown type value %{type_inspection}.\"},\"invalid_global_executor_concurrency\":{\"message\":\"Invalid global_executor_concurrency option.\",\"resolution\":\"Set global_executor_concurrency option to :global_thread_pool or remove global_executor_concurrency option.\",\"summary\":\"You set global_executor_concurrency while async_query_executor option is not set to :global_thread_pool. The global_executor_concurrency is allowed only for the global thread pool executor.\"},\"invalid_includes\":{\"message\":\"Invalid includes directive: %{klass}.includes(%{args})\",\"resolution\":\"Ensure that each parameter passed to %{klass}.includes is a valid name of an association on the %{klass} model. These are: %{relations}.\",\"summary\":\"Eager loading in Mongoid only supports providing arguments to %{klass}.includes that are the names of associations on the %{klass}.\"},\"invalid_index\":{\"message\":\"Invalid index specification on %{klass}: %{spec}, %{options}\",\"resolution\":\"Ensure that the index conforms to the correct syntax and has the correct options.\\\\n\\\\n Valid options are:\\\\n   background: true|false\\\\n   database: \\'database_name\\'\\\\n   name: \\'index_name\\'\\\\n   sparse: true|false\\\\n   unique: true|false\\\\n   min: 1\\\\n   max: 1\\\\n   bits: 26\\\\n   key: 26\\\\n   bucket_size : 1\\\\n   sphere_version : 1\\\\n   text_version : 1\\\\n   version : 1\\\\n   weights: { content: 1, title: 2 }\\\\n   expire_after_seconds: number_of_seconds\\\\n   partial_filter_expression\\\\n   storage_engine\\\\n   language_override\\\\n   default_language\\\\n   collation\\\\n   wildcard_projection: { \\'path.to.field.a\\': 1, \\'path.to.field.b\\': 0 }\\\\n Valid types are: 1, -1, \\'2d\\', \\'2dsphere\\', \\'geoHaystack (deprecated)\\', \\'text\\', \\'hashed\\'\\\\n\\\\n Example:\\\\n   class Band\\\\n     include Mongoid::Document\\\\n     index({ name: 1, label: -1 }, { sparse: true })\\\\n     index({ location: \\'2d\\' }, { background: true })\\\\n   end\\\\n\\\\n\",\"summary\":\"Indexes in Mongoid are defined as a hash of field name and direction/2d pairs, with a hash for any additional options.\"},\"invalid_options\":{\"message\":\"Invalid option :%{invalid} provided to association :%{name}.\",\"resolution\":\"Valid options are: %{valid}, make sure these are the ones you are using.\",\"summary\":\"Mongoid checks the options that are passed to the association macros to ensure that no ill side effects occur by letting something slip by.\"},\"invalid_path\":{\"message\":\"Having a root path assigned for %{klass} is invalid.\",\"resolution\":\"Most likely your embedded model, %{klass} is also referenced via a has_many from a root document in another collection. Double check the association definitions and fix any instances where embedded documents are improperly referenced from other collections.\",\"summary\":\"Mongoid has two different path objects for determining the location of a document in the database, Root and Embedded. This error is raised when an embedded document somehow gets a root path assigned.\"},\"invalid_persistence_option\":{\"message\":\"Invalid persistence option :%{invalid}.\",\"resolution\":\"Valid options are: %{valid}, make sure these are the ones you are using.\",\"summary\":\"The options used to change the persistence context must be one of the valid options for a mongo client, or a collection name.\"},\"invalid_relation\":{\"message\":\"Defining an association named \\'%{name}\\' is not allowed.\",\"resolution\":\"Use Mongoid.destructive_fields to see what names are not allowed, and don\\'t use these names. These include names that also conflict with core Ruby methods on Object, Module, Enumerable, or included gems that inject methods into these or Mongoid internals.\",\"summary\":\"Defining this association would override the method \\'%{name}\\', which would cause issues with expectations around the original method and cause extremely hard to debug issues. The original method was defined in:\\\\n   Object: %{origin}\\\\n   File: %{file}\\\\n   Line: %{line}\"},\"invalid_relation_option\":{\"message\":\"Invalid association option :%{option} for association \\'%{name}\\' on class %{klass}.\",\"resolution\":\"Valid options are: %{valid_options}, make sure you use only those.\",\"summary\":\"An invalid option was provided for an association.\"},\"invalid_scope\":{\"message\":\"Defining a scope of value %{value} on %{klass} is not allowed.\",\"resolution\":\"Change the scope to be a proc wrapped criteria.\\\\n\\\\n Example:\\\\n   class Band\\\\n     include Mongoid::Document\\\\n     scope :inactive, -\\\\u003e{ where(active: false) }\\\\n   end\\\\n\\\\n\",\"summary\":\"Scopes in Mongoid must be procs that wrap criteria objects.\"},\"invalid_session_nesting\":{\"message\":\"A session was started while another session was being used.\",\"resolution\":\"Only use one session at a time; sessions cannot be nested.\",\"summary\":\"Sessions cannot be nested. Only one session can be used in a thread at once.\"},\"invalid_session_use\":{\"message\":\"A session was attempted to be used with a model whose client cannot use that session.\",\"resolution\":\"Only execute operations on the model class or instances of the model through which the session was created. Otherwise, ensure that all models on which operations are executed in the session block share the same driver client. For example, a model may have a different client specified in its \\'store_in\\' options.\\\\n\\\\n\",\"summary\":\"Sessions are started via driver clients (Model#mongo_client) and, in most cases, driver clients are shared across models. When different models have their own clients, a session cannot be obtained via one model and used for operations on another model.\"},\"invalid_set_polymorphic_relation\":{\"message\":\"The %{name} attribute can\\'t be set to an instance of %{other_klass} as %{other_klass} has multiple associations referencing %{klass} as %{name}.\",\"resolution\":\"Set the values from the parent, or redefine the association with only a single definition in the parent.\",\"summary\":\"If the parent class of a polymorphic association has multiple definitions for the same association, the values must be set from the parent side and not the child side since Mongoid cannot determine from the child side which association to go in.\"},\"invalid_storage_options\":{\"message\":\"Invalid options passed to %{klass}.store_in: %{options}.\",\"resolution\":\"Change the options passed to store_in to match the documented API, and ensure all keys in the options hash are symbols.\\\\n\\\\n Example:\\\\n   class Band\\\\n     include Mongoid::Document\\\\n     store_in collection: \\'artists\\', database: \\'music\\'\\\\n   end\\\\n\\\\n\",\"summary\":\"The :store_in macro takes only a hash of parameters with the keys :database, :collection, :collection_options, or :client.\"},\"invalid_time\":{\"message\":\"\\'%{value}\\' is not a valid Time.\",\"resolution\":\"Make sure to pass parsable values to the field setter for Date, DateTime, and Time objects. When this is a String it needs to be valid for Time.parse. Other objects must be valid to pass to Time.local.\",\"summary\":\"Mongoid tries to serialize the values for Date, DateTime, and Time into proper UTC times to store in the database. The provided value could not be parsed.\"},\"inverse_not_found\":{\"message\":\"When adding a(n) %{klass} to %{base}#%{name}, Mongoid could not determine the inverse foreign key to set. The attempted key was \\'%{inverse}\\'.\",\"resolution\":\"If an inverse is not required, like a belongs_to or has_and_belongs_to_many, ensure that :inverse_of =\\\\u003e nil is set on the association. If the inverse is needed, most likely the inverse cannot be figured out from the names of the associations and you will need to explicitly tell Mongoid on the association what the inverse is.\\\\n\\\\n Example:\\\\n   class Car\\\\n     include Mongoid::Document\\\\n     has_one :engine, class_name: \\\\\"Motor\\\\\", inverse_of: :machine\\\\n   end\\\\n\\\\n   class Motor\\\\n     include Mongoid::Document\\\\n     belongs_to :machine, class_name: \\\\\"Car\\\\\", inverse_of: :engine\\\\n   end\",\"summary\":\"When adding a document to an association, Mongoid attempts to link the newly added document to the base of the association in memory, as well as set the foreign key to link them on the database side. In this case Mongoid could not determine what the inverse foreign key was.\"},\"message_title\":\"message\",\"mixed_client_configuration\":{\"message\":\"Both uri and standard configuration options defined for client: \\'%{name}\\'.\",\"resolution\":\"Provide either only a uri as configuration or only standard options.\",\"summary\":\"Instead of simply giving uri or standard options a preference order, Mongoid assumes that you have made a mistake in your configuration and requires that you provide one or the other, but not both. The options that were provided were: %{config}.\"},\"mixed_relations\":{\"message\":\"Referencing a(n) %{embedded} document from the %{root} document via a non-embedded association is not allowed since the %{embedded} is embedded.\",\"resolution\":\"Consider not embedding %{embedded}, or do the key storage and access in a custom manner in the application code.\",\"summary\":\"In order to properly access a(n) %{embedded} from %{root} the reference would need to go through the root document of %{embedded}. In a simple case this would require Mongoid to store an extra foreign key for the root, in more complex cases where %{embedded} is multiple levels deep a key would need to be stored for each parent up the hierarchy.\"},\"nested_attributes_metadata_not_found\":{\"message\":\"Could not find metadata for association \\'%{name}\\' on model: %{klass}.\",\"resolution\":\"Make sure that there is an association defined named \\'%{name}\\' on %{klass} or that the association definition comes before the accepts_nested_attributes_for macro in the model - order matters so that Mongoid has access to the metadata.\\\\n\\\\n Example:\\\\n   class Band\\\\n     include Mongoid::Document\\\\n     has_many :albums\\\\n     accepts_nested_attributes_for :albums\\\\n   end\\\\n\\\\n\",\"summary\":\"When defining nested attributes for an association, Mongoid needs to access the metadata for the association \\'%{name}\\' in order if add autosave functionality to it, if applicable. Either no association named \\'%{name}\\' could be found, or the association had not been defined yet.\"},\"no_client_config\":{\"message\":\"No configuration could be found for a client named \\'%{name}\\'.\",\"resolution\":\"Double check your mongoid.yml to make sure under the clients key that a configuration exists for \\'%{name}\\'. If you have set the configuration programmatically, ensure that \\'%{name}\\' exists in the configuration hash.\",\"summary\":\"When attempting to create the new client, Mongoid could not find a client configuration for the name: \\'%{name}\\'. This is necessary in order to know the host, port, and options needed to connect.\"},\"no_client_database\":{\"message\":\"No database provided for client configuration: :%{name}.\",\"resolution\":\"If configuring via a mongoid.yml, ensure that within your :%{name} section a :database value for the client\\'s default database is defined.\\\\n\\\\n Example:\\\\n   development:\\\\n     clients:\\\\n       %{name}:\\\\n         database: my_app_db\\\\n         hosts:\\\\n           - localhost:27017\\\\n\\\\n\",\"summary\":\"Each client configuration must provide a database so Mongoid knows where the default database to persist to. What was provided was: %{config}.\"},\"no_client_hosts\":{\"message\":\"No hosts provided for client configuration: :%{name}.\",\"resolution\":\"If configuring via a mongoid.yml, ensure that within your :%{name} section a :hosts value for the client hosts is defined.\\\\n\\\\n Example:\\\\n   development:\\\\n     clients:\\\\n       %{name}:\\\\n         database: my_app_db\\\\n         hosts:\\\\n           - localhost:27017\\\\n\\\\n\",\"summary\":\"Each client configuration must provide hosts so Mongoid knows where the database server is located. What was provided was: %{config}.\"},\"no_clients_config\":{\"message\":\"No clients configuration provided.\",\"resolution\":\"Double check your mongoid.yml to make sure that you have a top-level clients key with at least 1 default client configuration for it. You can regenerate a new mongoid.yml for assistance via `rails g mongoid:config`.\\\\n\\\\n Example:\\\\n   development:\\\\n     clients:\\\\n       default:\\\\n         database: mongoid_dev\\\\n         hosts:\\\\n           - localhost:27017\\\\n\\\\n\",\"summary\":\"Mongoid\\'s configuration requires that you provide details about each client that can be connected to, and requires in the clients config at least 1 default client to exist.\"},\"no_default_client\":{\"message\":\"No default client configuration is defined.\",\"resolution\":\"If configuring via a mongoid.yml, ensure that within your :clients section a :default client is defined.\\\\n\\\\n Example:\\\\n   development:\\\\n     clients:\\\\n       default:\\\\n         hosts:\\\\n           - localhost:27017\\\\n\\\\n\",\"summary\":\"The configuration provided settings for: %{keys}, but Mongoid requires a :default to be defined at minimum.\"},\"no_documents_found\":{\"message\":\"Could not find a document of class %{klass}.\",\"resolution\":\"Create a document of class %{klass} or use a finder method that does not raise an exception when no documents are found.\",\"summary\":\"Mongoid attempted to find a document of the class %{klass} but none exist.\"},\"no_environment\":{\"message\":\"Could not load the configuration since no environment was defined.\",\"resolution\":\"Please ensure an environment is set in one of the listed locations. The environment must be explicitly set.\",\"summary\":\"Mongoid could not determine the environment to use because it was not specified in any of the following locations: Rails.env, Sinatra::Base.environment, ENV[\\\\\"RACK_ENV\\\\\"], ENV[\\\\\"MONGOID_ENV\\\\\"]. Without knowing the environment, Mongoid cannot load its configuration.\"},\"no_map_reduce_output\":{\"message\":\"No output location was specified for the map/reduce operation.\",\"resolution\":\"Provide the location that the output of the operation is to go by chaining an #out call to the map/reduce.\\\\n\\\\n Example:\\\\n   Band.map_reduce(map, reduce).out(inline: 1)\\\\n\\\\n Valid options for the out function are:\\\\n   inline: 1\\\\n   merge: \\'collection-name\\'\\\\n   replace: \\'collection-name\\'\\\\n   reduce: \\'collection-name\\'\\\\n\\\\n\",\"summary\":\"When executing a map/reduce, you must provide the output location of the results. The attempted command was: %{command}.\"},\"no_metadata\":{\"message\":\"Metadata not found for document of type %{klass}.\",\"resolution\":\"Ensure that your associations on the %{klass} model are all properly defined, and that the inverse associations are also properly defined. Embedded associations must have both the parent (embeds_one/embeds_many) and the inverse (embedded_in) present in order to work properly.\",\"summary\":\"Mongoid sets the metadata of an association on the document when it is either loaded from within the association, or added to one. The presence of the metadata is required in order to provide various functionality around associations. Most likely you are getting this error because the document is embedded and was attempted to be persisted without being associated with a parent, or the association was not properly defined.\"},\"no_parent\":{\"message\":\"Cannot persist embedded document %{klass} without a parent document.\",\"resolution\":\"Ensure that you\\'ve set the parent association if instantiating the embedded document directly, or always create new embedded documents via the parent association.\",\"summary\":\"If the document is embedded, in order to be persisted it must always have a reference to its parent document. This is most likely caused by either calling %{klass}.create or %{klass}.create! without setting the parent document as an attribute.\"},\"readonly_attribute\":{\"message\":\"Attempted to set the readonly attribute \\'%{name}\\' with the value: %{value}.\",\"resolution\":\"Don\\'t define \\'%{name}\\' as readonly, or do not attempt to update its value after the document is persisted.\",\"summary\":\"Attributes flagged as readonly via Model.attr_readonly can only have values set when the document is a new record.\"},\"readonly_document\":{\"message\":\"Attempted to persist a readonly document of class \\'%{klass}\\'.\",\"resolution\":\"Don\\'t attempt to persist documents that are flagged as readonly.\",\"summary\":\"Documents that are marked readonly cannot be persisted.\"},\"resolution_title\":\"resolution\",\"scope_overwrite\":{\"message\":\"Cannot create scope :%{scope_name}, because of existing method %{model_name}.%{scope_name}.\",\"resolution\":\"Change the name of the scope so it does not conflict with the already defined method %{model_name}, or set the configuration option Mongoid.scope_overwrite_exception to false, which is its default. In this case a warning will be logged.\",\"summary\":\"When defining a scope that conflicts with a method that already exists on the model, this error will get raised if Mongoid.scope_overwrite_exception is set to true.\"},\"sessions_not_supported\":{\"message\":\"Sessions are not supported by the connected server(s).\",\"resolution\":\"Verify that all servers in your deployment are at least version 3.6 or don\\'t attempt to use sessions with older server versions.\",\"summary\":\"A session was attempted to be used with a MongoDB server version that doesn\\'t support sessions. Sessions are supported in MongoDB server versions 3.6 and higher.\"},\"summary_title\":\"summary\",\"too_many_nested_attribute_records\":{\"message\":\"Accepting nested attributes for %{association} is limited to %{limit} documents.\",\"resolution\":\"The limit is set as an option to the macro, for example: accepts_nested_attributes_for :%{association}, limit: %{limit}. Consider raising this limit or making sure no more are sent than the set value.\",\"summary\":\"More documents were sent to be processed than the allowed limit.\"},\"unknown_attribute\":{\"message\":\"Attempted to set a value for \\'%{name}\\' which is not allowed on the model %{klass}.\",\"resolution\":\"Define the field \\'%{name}\\' in %{klass}, or include Mongoid::Attributes::Dynamic in %{klass} if you intend to store values in fields that are not explicitly defined.\",\"summary\":\"%{klass}#%{name}= was called but there is no \\'%{name}\\' field defined in the model, and Mongoid::Attributes::Dynamic is not included. This error is also raised instead of NoMethodError if the unknown attribute is passed to any method that accepts an attributes hash, such as #attributes=.\"},\"unknown_model\":{\"message\":\"Attempted to instantiate an object of the unknown model \\'%{klass}\\'.\",\"resolution\":\"The _type field is a reserved one used by Mongoid to determine the class for instantiating an object. Please don\\'t save data in this field or ensure that any values in this field correspond to valid models.\",\"summary\":\"A document with the value \\'%{value}\\' at the key \\'_type\\' was used to instantiate a model object but Mongoid cannot find this Class.\"},\"unsaved_document\":{\"message\":\"Attempted to save %{document} before the parent %{base}.\",\"resolution\":\"Make sure to only use create or create! when the parent document %{base} is persisted.\",\"summary\":\"You cannot call create or create! through the association (%{document}) whose parent (%{base}) is not already saved. This would cause the database to be out of sync since the child could potentially reference a nonexistent parent.\"},\"unsupported_javascript\":{\"message\":\"Executing Javascript $where selector on an embedded criteria is not supported.\",\"resolution\":\"Please provide a standard hash to #where when the criteria is for an embedded association.\",\"summary\":\"Mongoid only supports providing a hash of arguments to #where criterion on embedded documents. Since %{klass} is embedded, the expression %{javascript} is not allowed.\"},\"validations\":{\"message\":\"Validation of %{document} failed.\",\"resolution\":\"Try persisting the document with valid data or remove the validations.\",\"summary\":\"The following errors were found: %{errors}\"}}}},\"number\":{\"currency\":{\"format\":{\"delimiter\":\",\",\"format\":\"%u%n\",\"negative_format\":\"-%u%n\",\"precision\":2,\"separator\":\".\",\"significant\":false,\"strip_insignificant_zeros\":false,\"unit\":\"$\"}},\"format\":{\"delimiter\":\",\",\"precision\":3,\"round_mode\":\"default\",\"separator\":\".\",\"significant\":false,\"strip_insignificant_zeros\":false},\"human\":{\"decimal_units\":{\"format\":\"%n %u\",\"units\":{\"billion\":\"Billion\",\"million\":\"Million\",\"quadrillion\":\"Quadrillion\",\"thousand\":\"Thousand\",\"trillion\":\"Trillion\",\"unit\":\"\"}},\"format\":{\"delimiter\":\"\",\"precision\":3,\"significant\":true,\"strip_insignificant_zeros\":true},\"storage_units\":{\"format\":\"%n %u\",\"units\":{\"byte\":{\"one\":\"Byte\",\"other\":\"Bytes\"},\"eb\":\"EB\",\"gb\":\"GB\",\"kb\":\"KB\",\"mb\":\"MB\",\"pb\":\"PB\",\"tb\":\"TB\",\"zb\":\"ZB\"}}},\"nth\":{},\"percentage\":{\"format\":{\"delimiter\":\"\",\"format\":\"%n%\"}},\"precision\":{\"format\":{\"delimiter\":\"\"}}},\"simple_form\":{\"error_notification\":{\"default_message\":\"Please review the problems below:\"},\"no\":\"No\",\"required\":{\"mark\":\"*\",\"text\":\"required\"},\"yes\":\"Yes\"},\"support\":{\"array\":{\"last_word_connector\":\", and \",\"two_words_connector\":\" and \",\"words_connector\":\", \"}},\"time\":{\"am\":\"am\",\"formats\":{\"default\":\"%a, %d %b %Y %H:%M:%S %z\",\"long\":\"%B %d, %Y %H:%M\",\"short\":\"%d %b %H:%M\"},\"pm\":\"pm\"},\"users\":{\"confirmations\":{\"new\":{\"legend\":\"Resend your %{brand_name} confirmation instructions\",\"message\":\"We need to confirm your email address to complete the sign up process. Supply your email address, below, and we will send you instructions on how to confirm your address.\",\"submit_button\":\"Send Confirmation Instructions\",\"title\":\"Resend confirmation instructions | %{brand_name}\"},\"show\":{\"legend\":\"Check your inbox for a confirmation email\",\"message\":\"If your e-mail exists in our database we have sent you a message with instructions. Check your inbox (or spam folder) for a message from \\'%{default_from_email}\\' containing the confirmation link.\",\"title\":\"Awaiting confirmation | %{brand_name}\"}},\"passwords\":{\"new\":{\"failures\":\"Note: If you make more than 5 sequential failed attempts to sign in with your %{brand_name} password, your account will be (temporarily) locked. Check your inbox for instruction on how to unlock your account, or we can\",\"legend\":\"Reset your %{brand_name} password\",\"message\":\"Supply your email address, below, and we will send you instructions on how to reset your password.\",\"resend_link\":\"resend a new set of unlock instructions\",\"submit_button\":\"Send Reset Instructions\",\"title\":\"Reset password | %{brand_name}\"},\"show\":{\"didnt_receive_email\":\"Didn\\'t receive the email?\",\"legend\":\"Password reset instructions sent\",\"message\":\"If your e-mail exists in our database we have sent you a message with password reset instructions. Check your inbox (or spam folder) for a message from \\'%{default_from_email}\\'.\",\"resend_link\":\"you can request another one here\",\"title\":\"Awaiting reset | %{brand_name}\"}}},\"will_paginate\":{\"container_aria_label\":\"Pagination\",\"next_label\":\"Next \\\\u0026#8594;\",\"page_aria_label\":\"Page %{page}\",\"page_entries_info\":{\"multi_page\":\"Displaying %{model} %{from} - %{to} of %{count} in total\",\"multi_page_html\":\"Displaying %{model} \\\\u003cb\\\\u003e%{from}\\\\u0026nbsp;-\\\\u0026nbsp;%{to}\\\\u003c/b\\\\u003e of \\\\u003cb\\\\u003e%{count}\\\\u003c/b\\\\u003e in total\",\"single_page\":{\"one\":\"Displaying 1 %{model}\",\"other\":\"Displaying all %{count} %{model}\",\"zero\":\"No %{model} found\"},\"single_page_html\":{\"one\":\"Displaying \\\\u003cb\\\\u003e1\\\\u003c/b\\\\u003e %{model}\",\"other\":\"Displaying \\\\u003cb\\\\u003eall\\\\u0026nbsp;%{count}\\\\u003c/b\\\\u003e %{model}\",\"zero\":\"No %{model} found\"}},\"page_gap\":\"\\\\u0026hellip;\",\"previous_label\":\"\\\\u0026#8592; Previous\"}}'));\nI18n.translations[\"inova\"] = I18n.extend((I18n.translations[\"inova\"] || {}), JSON.parse('{\"activerecord\":{\"errors\":{\"messages\":{\"record_invalid\":\"Validation failed: %{errors}\",\"restrict_dependent_destroy\":{\"has_many\":\"Cannot delete record because dependent %{record} exist\",\"has_one\":\"Cannot delete record because a dependent %{record} exists\"}}}},\"brand\":{\"logo\":{\"full_image\":{\"file_name\":\"full_logo.png\",\"path\":\"images/brand_specific/inova/full_logo.png\"},\"header\":{\"path\":\"/images/brand_specific/inova/header.png\"},\"mark_only\":{\"file_name\":\"mark_only.png\",\"path\":\"images/brand_specific/inova/mark_only.png\"}},\"meta\":{\"description\":\"Inova: Accelerate biopharma partnering.\",\"image\":\"https://app.nurtureiq-inova.io/images/brand_specific/inova/full_logo.png\",\"title\":\"Inova: Accelerate biopharma partnering.\"},\"name\":\"Inova\",\"tag_line\":\"Accelerate biopharma partnering.\"},\"bulk_uploads\":{\"email_local_part\":{\"empty_parameter\":\"No file uploaded\",\"error\":\"File Upload failed: %{error_message}\",\"success\":\"File was successfully uploaded\"}},\"common\":{\"crm\":{\"salesforce\":{\"forgot_password\":\"If you have forgotten your Salesforce password, please follow the instructions provided on the Salesforce sign in page.\",\"sign_in_button\":\"Sign In with Salesforce\"}}},\"contact\":{\"default_from_email\":\"info@nurtureiq-inova.io\",\"phone_numbers\":[{\"label\":\"US\",\"phone\":\"1-844-996-3321\"},{\"label\":\"UK\",\"phone\":\"+44-208-133-9963\"}],\"support_email\":\"support@nurtureiq-inova.io\"},\"date\":{\"abbr_day_names\":[\"Sun\",\"Mon\",\"Tue\",\"Wed\",\"Thu\",\"Fri\",\"Sat\"],\"abbr_month_names\":[null,\"Jan\",\"Feb\",\"Mar\",\"Apr\",\"May\",\"Jun\",\"Jul\",\"Aug\",\"Sep\",\"Oct\",\"Nov\",\"Dec\"],\"day_names\":[\"Sunday\",\"Monday\",\"Tuesday\",\"Wednesday\",\"Thursday\",\"Friday\",\"Saturday\"],\"formats\":{\"default\":\"%Y-%m-%d\",\"long\":\"%B %d, %Y\",\"short\":\"%b %d\"},\"month_names\":[null,\"January\",\"February\",\"March\",\"April\",\"May\",\"June\",\"July\",\"August\",\"September\",\"October\",\"November\",\"December\"],\"order\":[\"year\",\"month\",\"day\"]},\"datetime\":{\"distance_in_words\":{\"about_x_hours\":{\"one\":\"about 1 hour\",\"other\":\"about %{count} hours\"},\"about_x_months\":{\"one\":\"about 1 month\",\"other\":\"about %{count} months\"},\"about_x_years\":{\"one\":\"about 1 year\",\"other\":\"about %{count} years\"},\"almost_x_years\":{\"one\":\"almost 1 year\",\"other\":\"almost %{count} years\"},\"half_a_minute\":\"half a minute\",\"less_than_x_minutes\":{\"one\":\"less than a minute\",\"other\":\"less than %{count} minutes\"},\"less_than_x_seconds\":{\"one\":\"less than 1 second\",\"other\":\"less than %{count} seconds\"},\"over_x_years\":{\"one\":\"over 1 year\",\"other\":\"over %{count} years\"},\"x_days\":{\"one\":\"1 day\",\"other\":\"%{count} days\"},\"x_minutes\":{\"one\":\"1 minute\",\"other\":\"%{count} minutes\"},\"x_months\":{\"one\":\"1 month\",\"other\":\"%{count} months\"},\"x_seconds\":{\"one\":\"1 second\",\"other\":\"%{count} seconds\"}},\"prompts\":{\"day\":\"Day\",\"hour\":\"Hour\",\"minute\":\"Minute\",\"month\":\"Month\",\"second\":\"Seconds\",\"year\":\"Year\"}},\"default_host\":\"https://app.nurtureiq-inova.io\",\"devise\":{\"confirmations\":{\"confirmed\":\"Your account was successfully confirmed. Please sign in.\",\"send_instructions\":\"Your email has not been confirmed. We need to confirm your email account before you can sign in. Please check your inbox or spam folder for an email from \\'info@zymewire.com\\' or request a new one.\",\"send_paranoid_instructions\":\"If your e-mail exists on our database, you will receive an email with instructions about how to confirm your account in a few minutes.\"},\"failure\":{\"already_authenticated\":\"You are already signed in.\",\"expired\":\"Your account has expired due to inactivity. Please contact the site administrator.\",\"inactive\":\"Your account was not activated yet.\",\"invalid\":\"Invalid email or password. If you use Salesforce, use the \\'Have Salesforce?\\' panel.\",\"invalid_token\":\"Invalid authentication token.\",\"last_attempt\":\"You have one more attempt before your account is locked.\",\"locked\":\"Your account is locked.\",\"not_active\":\"Your account has been de-activated, if you think this is a mistake please contact us\",\"not_found_in_database\":\"Invalid %{authentication_keys} or password.\",\"session_limited\":\"Your login credentials were used in another browser. Please sign in again to continue in this browser.\",\"timeout\":\"Your session expired, please sign in again to continue.\",\"unauthenticated\":\"You need to sign in or sign up before continuing.\",\"unconfirmed\":\"We must confirm your email before you can continue. Please check your inbox or spam folder for a confirmation email from \\'info@zymewire.com\\' or request a new one.\"},\"invalid_captcha\":\"The captcha input is not valid!\",\"invalid_security_question\":\"The security question answer was invalid.\",\"mailer\":{\"confirmation_instructions\":{\"subject\":\"Confirmation instructions for Zymewire.com\"},\"email_changed\":{\"subject\":\"Email Changed\"},\"password_change\":{\"subject\":\"Password Changed\"},\"reset_password_instructions\":{\"subject\":\"Reset password instructions for Zymewire.com\"},\"unlock_instructions\":{\"subject\":\"Unlock Instructions for Zymewire.com\"}},\"omniauth_callbacks\":{\"failure\":\"Could not authorize you from %{kind} because \\\\\"%{reason}\\\\\".\",\"success\":\"Successfully authorized from %{kind} account.\"},\"paranoid_verification_code\":{\"show\":{\"submit\":\"Submit\",\"submit_verification_code\":\"Submit verification code\",\"verification_code\":\"Verification code\"},\"updated\":\"Verification code accepted\"},\"paranoid_verify\":{\"code_required\":\"Please enter the code our support team provided\"},\"password_expired\":{\"change_required\":\"Your password has expired. Please choose a new password!\",\"show\":{\"change_my_password\":\"Change my password\",\"current_password\":\"Current password\",\"new_password\":\"New password\",\"new_password_confirmation\":\"Confirm new password\",\"renew_your_password\":\"Renew your password\"},\"updated\":\"Your new password is saved.\"},\"passwords\":{\"no_token\":\"You can\\'t access this page without coming from a password reset email. If you do come from a password reset email, please make sure you used the full URL provided.\",\"send_instructions\":\"You will receive an email with instructions about how to reset your password in a few minutes.\",\"send_paranoid_instructions\":\"If your e-mail exists on our database, you will receive a password recovery link on your e-mail\",\"updated\":\"Your password was changed successfully. You are now signed in.\",\"updated_not_active\":\"Your password was changed successfully.\"},\"registrations\":{\"destroyed\":\"Bye! Your account was successfully cancelled. We hope to see you again soon.\",\"signed_up\":\"Welcome! You have signed up successfully.\",\"signed_up_but_inactive\":\"You have signed up successfully. However, we could not sign you in because your account is not yet activated.\",\"signed_up_but_locked\":\"You have signed up successfully. However, we could not sign you in because your account is locked.\",\"signed_up_but_unconfirmed\":\"A message with a confirmation link has been sent to your email address. Please open the link to activate your account.\",\"update_needs_confirmation\":\"You updated your account successfully, but we need to verify your new email address. Please check your email and click on the confirm link to finalize confirming your new email address.\",\"updated\":\"You updated your account successfully.\",\"updated_but_not_signed_in\":\"Your account has been updated successfully, but since your password was changed, you need to sign in again.\"},\"sessions\":{\"already_signed_out\":\"Signed out successfully.\",\"signed_in\":\"Signed in successfully.\",\"signed_out\":\"Signed out successfully.\"},\"unlocks\":{\"send_instructions\":\"You will receive an email with instructions about how to unlock your account in a few minutes.\",\"send_paranoid_instructions\":\"If your account exists, you will receive an email with instructions about how to unlock it in a few minutes.\",\"unlocked\":\"Your account has been unlocked successfully. Please sign in to continue.\"}},\"disable_crm_login_option\":\"true\",\"domain\":\"nurtureiq-inova.io\",\"download\":\"Download\",\"download_30_days\":\"This link will be available for 30 days after which the file will be removed from our servers.\",\"enumerize\":{\"blocklisted_contact\":{\"provider\":{\"insideview\":\"InsideView\",\"zephyr\":\"Zephyr\"}}},\"errors\":{\"format\":\"%{attribute} %{message}\",\"messages\":{\"accepted\":\"must be accepted\",\"already_confirmed\":\"was already confirmed, please try signing in\",\"blank\":\"can\\'t be blank\",\"confirmation\":\"doesn\\'t match %{attribute}\",\"confirmation_period_expired\":\"needs to be confirmed within %{period}, please request a new one\",\"empty\":\"can\\'t be empty\",\"equal_to\":\"must be equal to %{count}\",\"equal_to_current_password\":\"Sorry, must be different to your current password!\",\"equal_to_email\":\"must be different than the email.\",\"even\":\"must be even\",\"exclusion\":\"is reserved\",\"expired\":\"has expired, please request a new one\",\"greater_than\":\"must be greater than %{count}\",\"greater_than_or_equal_to\":\"must be greater than or equal to %{count}\",\"in\":\"must be in %{count}\",\"inclusion\":\"is not included in the list\",\"invalid\":\"is invalid\",\"less_than\":\"must be less than %{count}\",\"less_than_or_equal_to\":\"must be less than or equal to %{count}\",\"model_invalid\":\"Validation failed: %{errors}\",\"not_a_number\":\"is not a number\",\"not_an_integer\":\"must be an integer\",\"not_found\":\"not found\",\"not_locked\":\"was not locked\",\"not_saved\":{\"one\":\"1 error prohibited this %{resource} from being saved:\",\"other\":\"%{count} errors prohibited this %{resource} from being saved:\"},\"odd\":\"must be odd\",\"other_than\":\"must be other than %{count}\",\"password_complexity\":{\"digit\":{\"one\":\"must contain at least one digit\",\"other\":\"must contain at least %{count} digits\"},\"lower\":{\"one\":\"must contain at least one lower-case letter\",\"other\":\"must contain at least %{count} lower-case letters\"},\"symbol\":{\"one\":\"must contain at least one punctuation mark or symbol\",\"other\":\"must contain at least %{count} punctuation marks or symbols\"},\"upper\":{\"one\":\"must contain at least one upper-case letter\",\"other\":\"must contain at least %{count} upper-case letters\"}},\"password_format\":\"Must contain uppercase AND lowercase letters and at least one number\",\"password_too_long\":\"is too long\",\"present\":\"must be blank\",\"required\":\"must exist\",\"taken\":\"has already been taken\",\"taken_in_past\":\"Sorry, you have used this password before!\",\"too_long\":{\"one\":\"is too long (maximum is 1 character)\",\"other\":\"is too long (maximum is %{count} characters)\"},\"too_short\":{\"one\":\"is too short (minimum is 1 character)\",\"other\":\"is too short (minimum is %{count} characters)\"},\"wrong_length\":{\"one\":\"is the wrong length (should be 1 character)\",\"other\":\"is the wrong length (should be %{count} characters)\"}}},\"flash\":{\"actions\":{\"create\":{\"notice\":\"%{resource_name} was successfully created.\"},\"destroy\":{\"alert\":\"%{resource_name} could not be destroyed.\",\"notice\":\"%{resource_name} was successfully destroyed.\"},\"update\":{\"notice\":\"%{resource_name} was successfully updated.\"}}},\"hello_world\":\"Hello world\",\"help\":{\"articles\":{\"crm_mining\":\"/help/articles/13976-mine-your-companys-salesforce-for-opportunities\",\"finding_contact_info\":\"/help/articles/13987-finding-contact-information\",\"guide_d\":\"/help/guide_d\",\"guide_g\":\"/help/guide_g\",\"guide_h\":\"/help/guide_h\",\"guide_i\":\"/help/guide_i\",\"guide_j\":\"/help/guide_j\",\"list_crud_c\":\"/help/articles/13985-generating-a-list\",\"list_crud_u\":\"/help/articles/18991-adding-and-removing-individual-companies-from-a-list\",\"map_search\":\"/help/articles/13980-map-based-searching\",\"saving_feeds\":\"/help/articles/13986-saving-feeds\"},\"site\":\"https://nurtureiq.helpsite.com/\"},\"helpers\":{\"select\":{\"prompt\":\"Please select\"},\"submit\":{\"create\":\"Create %{model}\",\"submit\":\"Save %{model}\",\"update\":\"Update %{model}\"}},\"hi\":\"Hi\",\"industry\":\"drug_sponsor\",\"mailers\":{\"common\":{\"chummy_sign_off\":\"Have a good one.\",\"final_note\":\"P.S.: If you think you received this email accidentally, then something weird could be going on. Hit reply and a member of the %{brand_name} team will investigate.\",\"team_sign_off\":\"- The %{brand_name} Team\"},\"confirmation_instructions_email\":{\"crm\":{\"salesforce\":{\"resource_confirmed\":\"Someone has requested a resend of a confirmation email. You do not need to confirm your email address because your account is configured to use Salesforce to sign in.\",\"resource_unconfirmed\":\"You do not need to confirm your email address because your account is configured to use Salesforce to sign in, please complete the sign up process by clicking the button below to sign in to %{brand_name} via Salesforce.\"}},\"non_crm\":{\"confirm_link\":\"Confirm my account\",\"welcome\":\"Welcome to %{brand_name}. As the final step in the process you\\'ll need to confirm your account by clicking on the link below.\"},\"subject\":\"Confirmation instructions for %{domain}\"},\"flagged_events_mailer\":{\"from\":\"Flagged events - %{brand_name} \\\\u003cflagged_events@mailer.%{domain}\\\\u003e\"},\"mobile_registration_email\":{\"alert_cs_registration_locked\":{\"subject\":\"%{brand_name}: user has had mobile registration locked, too many failed attempts\"},\"dispatch_registration_PIN\":{\"further_instructions\":\"If you are NOT attempting to register for the %{brand_name} Mobile app then please let us know at %{support_email_link} - thank you.\",\"introduction\":\"Here is your mobile app registration PIN:\",\"subject\":\"%{brand_name} Mobile Registration Verification\"},\"too_many_failed_attempts\":{\"introduction\":\"We have received too many failed mobile device registration attempts for your account and we will block any further requests. If you have not attempted to register a mobile device with us in the last hour then please let us know as it is likely someone has tried on your behalf. If you have been trying to register a device please contact %{support_email_link} and we can help unlock your account and get you registered.\",\"subject\":\"%{brand_name}: too many failed registration attempts\"}},\"org_list_download_mail\":{\"dispatch_link\":{\"introduction\":\"We have finished meshing your %{crm_brand_name} data with the companies in your \\\\\"%{list_name}\\\\\" list.\",\"subject\":\"%{brand_name}: your file download of \\'%{list_name}\\' is ready\"},\"failed\":{\"instructions\":\"You could try again in a little while. If you already have and are receiving this email again, please contact us at %{support_email_link}\",\"introduction\":\"We are really sorry, but something went wrong with creating your download of %{crm_brand_name} data for your \\\\\"%{list_name}\\\\\" list.\",\"subject\":\"%{brand_name}: your file download of \\'%{list_name}\\' failed\"}},\"reset_password_instructions_email\":{\"crm\":{\"salesforce\":{\"change_requested\":\"Someone has requested a change to your password. Your account is configured to use Salesforce to sign in.\"}},\"fishy_fine_print\":\"If you did not request a password change, then something weird is going on. Someone may be trying to access your account (unsuccessfully). Please reply to this email and let us know. We will take steps to make sure it stops.\",\"non_crm\":{\"change_password_link\":\"Change my password\",\"change_requested\":\"Someone has requested a change to your password, you can do this via the link below.\"},\"subject\":\"Password reset instructions for %{domain}\"},\"sales_force_mail\":{\"processing_completed\":{\"bullet_points\":[\"Only show events associated with companies in your Salesforce account\",\"Add new contacts and accounts to your Salesforce account without leaving %{brand_name}\",\"Access the \\'Salesforce details\\' panel on company dashboards where you can see open tasks, team interactions, opportunities, and more!\"],\"further_instructions\":\"We\\'re here to help. If you run into any questions or challenges, please contact us at %{support_email_link} and a member of our team would be more than happy to help.\",\"get_the_most\":\"To get the most from the integration, check out the \\'Mine Salesforce for opportunities\\' guide in the Help Center.\",\"guide_button\":\"Take me to the guide\",\"introduction\":\"Good news - your Salesforce account is now integrated with %{brand_name}. Now you’ll be able to:\"}},\"segment_contact\":{\"report_manager\":{\"fail_subject\":\"%{brand_name}: The PDF report generation failed\",\"success_subject\":\"%{brand_name}: Your PDF for %{company_name} is attached\"}},\"sf_token_expiry_email\":{\"further_instructions\":\"If you run into any questions or challenges, please contact us at %{support_email_link} and a member of our team would be more than happy to help.\",\"introduction\":\"Unfortunately the connection established for you between %{brand_name} and your %{crm_brand_name} account has expired. We will not be able to update your lists in %{brand_name} to reflect your %{crm_brand_name} database. To re-establish the connection, you just need to log in to %{brand_name} using your %{crm_brand_name}.\",\"subject\":\"%{brand_name} to %{crm_brand_name} connection has expired\"},\"share_list_mail\":{\"introduction\":\"%{user_name} shared a list with you: \",\"subject\":\"[%{brand_name} - shared list] %{list_name}\"},\"trial_expiry_mail\":{\"seven_days_to_go\":{\"further_instructions\":\"A member of our fabulous Customer Success team will arrange a welcome call with you to understand your goals and priorities, and will then give you a personalized Tour de %{brand_name} so you can easily access the information that is most valuable to you.\",\"instructions\":\"If you\\'d like continued access to the platform with our flexible month-to-month subscription, please ensure you contact %{support_email_link} ahead of: %{deadline}\",\"introduction\":\"Time flies when you\\'re uncovering new business opportunities! Your %{brand_name} trial is coming to an end next week.\",\"sign_off\":\"We look forward to helping you reach your sales goals!\",\"subject\":\"Just a heads up that your %{brand_name} trial is ending in seven days\"},\"seven_days_to_go_warning_for_cs\":{\"introduction\":\"%{user_name} shared a list with you: \",\"subject\":\"[%{brand_name} - shared list] %{list_name}\"}},\"unlock_instructions_email\":{\"crm\":{\"salesforce\":{\"change_requested\":\"You are being sent this email either because of one too many unsuccessful non-Salesforce log-in attempts or someone has requested an unlock email. %{brand_name} has not locked your account because your account is configured to use Salesforce to sign in.\",\"password_forgotten\":\"If you have forgotten your Salesforce password or think your account has been locked by Salesforce, please follow the instructions provided on the Salesforce sign in page.\"}},\"fishy_fine_print\":\"If you have not been (unsuccessfully) trying to log in to your account, then something weird is going on. Someone may be trying to access your account (unsuccessfully). Please reply to this email and let us know. We will take steps to make sure it stops.\",\"non_crm\":{\"change_requested\":\"For security reasons we have locked your account because of too many log-in attempts. To unlock your account, click the link below.\",\"unlock_account_link\":\"Unlock my account\"},\"subject\":\"Unlock instructions for %{domain}\"}},\"mobile_website\":{\"cta\":\"\",\"cta_link\":\"\",\"header\":\"Desktop Access Only\",\"message\":\"Head to your desktop to sign into the Inova application.\",\"prompt\":\"\"},\"mongoid\":{\"errors\":{\"messages\":{\"ambiguous_relationship\":{\"message\":\"Ambiguous associations %{candidates} defined on %{klass}.\",\"resolution\":\"On the %{name} association on %{inverse} you must add an :inverse_of option to specify the exact association on %{klass} that is the opposite of %{name}.\",\"summary\":\"When Mongoid attempts to set an inverse document of an association in memory, it needs to know which association it belongs to. When setting %{name}, Mongoid looked on the class %{inverse} for a matching association, but multiples were found that could potentially match: %{candidates}.\"},\"blank_in_locale\":\"can\\'t be blank in %{location}\",\"callbacks\":{\"message\":\"Calling %{method} on %{klass} resulted in a false return from a callback.\",\"resolution\":\"Double check all before callbacks to make sure they are not unintentionally returning false.\",\"summary\":\"If a before callback returns false when using Document.create!, Document#save!, or Document#update_attributes! this error will get raised since the document did not actually get saved.\"},\"calling_document_find_with_nil_is_invalid\":{\"message\":\"Calling Document.find with nil is invalid.\",\"resolution\":\"Most likely this is caused by passing parameters directly through to the find, and the parameter either is not present or the key from which it is accessed is incorrect.\",\"summary\":\"Document.find expects the parameters to be 1 or more ids, and will return a single document if 1 id is provided, otherwise an array of documents if multiple ids are provided.\"},\"create_collection_failure\":{\"message\":\"Cannot create collection %{collection_name} with options %{collection_options}. The following error was raised: %{error}.\",\"resolution\":\"Double check that collection options for the collection %{collection_name} are valid. Consult with Ruby driver documentation and MongoDB documentation if the desired options are supported by your version of the server.\",\"summary\":\"The server rejected createCollection command with given collection options. This may happen when some of the options are invalid, or not supported by your version of the server.\"},\"criteria_argument_required\":{\"message\":\"Calling Criteria methods with nil arguments is not allowed.\",\"resolution\":\"Invoke Criteria methods with non-nil arguments or omit the respective invocations.\",\"summary\":\"Arguments to Criteria methods cannot be nil, and most Criteria methods require at least one argument. Only logical operations (and, or, nor and not), `all\\' and `where\\' can be called without arguments. The method that was called with nil argument was: %{query_method}.\"},\"delete_restriction\":{\"message\":\"Cannot destroy %{document} because of dependent \\'%{relation}\\'.\",\"resolution\":\"Don\\'t attempt to delete the parent %{document} when it has children, or change the dependent option on the association.\",\"summary\":\"When defining \\'%{relation}\\' with a :dependent =\\\\u003e :restrict_with_error, Mongoid will raise an error when attempting to destroy the %{document} when the child \\'%{relation}\\' still has documents in it.\"},\"destroy_restrict_with_error_dependencies_exist\":\"is not empty and prevents the document from being destroyed\",\"document_not_destroyed\":{\"message\":\"%{klass} with id %{id} was not destroyed.\",\"resolution\":\"Check the before/after destroy callbacks to ensure that the return values are truthy for the chain to continue.\",\"summary\":\"When calling %{klass}#destroy! and a callback halts the destroy callback chain by returning a false value, the deletion will not actually occur.\"},\"document_not_found\":{\"message\":\"Document(s) not found for class %{klass} with id(s) %{missing}.\",\"resolution\":\"Search for an id that is in the database or set the Mongoid.raise_not_found_error configuration option to false, which will cause nil to be returned instead of raising this error when searching for a single id, or only the matched documents when searching for multiples.\",\"summary\":\"When calling %{klass}.find with an id or array of ids, each parameter must match a document in the database or this error will be raised. The search was for the id(s): %{searched} (%{total} total) and the following ids were not found: %{missing}.\"},\"document_with_attributes_not_found\":{\"message\":\"Document not found for class %{klass} with attributes %{attributes}.\",\"resolution\":\"Search for attributes that are in the database or set the Mongoid.raise_not_found_error configuration option to false, which will cause nil to be returned instead of raising this error.\",\"summary\":\"When calling %{klass}.find_by with a hash of attributes, all attributes provided must match a document in the database or this error will be raised.\"},\"document_with_shard_key_not_found\":{\"message\":\"Document not found for class %{klass} with id %{missing} and shard key %{shard_key}.\",\"resolution\":\"Search for an id/shard key that is in the database or set the Mongoid.raise_not_found_error configuration option to false, which will cause nil to be returned instead of raising this error.\",\"summary\":\"When calling %{klass}.find with an id and a shard key, each parameter must match a document in the database or this error will be raised. The search was for the id: %{missing} with shard_key: %{shard_key} and it was not found.\"},\"drop_collection_failure\":{\"message\":\"Cannot drop collection %{collection_name}.\",\"resolution\":\"Try to drop the collection manually using Ruby driver or mongo shell.\",\"summary\":\"Mongoid tried to drop collection %{collection_name}, but the collection still exists in the database.\"},\"empty_config_file\":{\"message\":\"Empty configuration file: %{path}.\",\"resolution\":\"Ensure your configuration file contains the correct contents. Refer to: https://www.mongodb.com/docs/mongoid/current/reference/configuration/\",\"summary\":\"Your mongoid.yml configuration file appears to be empty.\"},\"immutable_attribute\":{\"message\":\"Attempted to change the immutable attribute \\'%{name}\\' with the value: %{value}.\",\"resolution\":\"Do not attempt to update the value of \\'%{name}\\' after the document is persisted.\",\"summary\":\"Immutable attributes can only have values set when the document is a new record.\"},\"in_memory_collation_not_supported\":{\"message\":\"A collation option cannot be applied when querying documents in-memory.\",\"resolution\":\"Remove the collation option from the query.\",\"summary\":\"The query being run against documents in memory has a collation option set. A collation option is only supported if the query is executed on a MongoDB server with version \\\\u003e= 3.4.\"},\"invalid_async_query_executor\":{\"message\":\"Invalid async_query_executor option: %{executor}.\",\"resolution\":\"Pick an allowed option or fix the typo. If you were expecting the option to be there, please consult the following page with respect to Mongoid\\'s configuration:\\\\n\\\\n   https://www.mongodb.com/docs/mongoid/current/reference/configuration/#mongoid-configuration-options\",\"summary\":\"A invalid async query executor was specified. The valid options are: %{options}.\"},\"invalid_collection\":{\"message\":\"Access to the collection for %{klass} is not allowed.\",\"resolution\":\"For access to the collection that the embedded document is in, use %{klass}#_root.collection, or do not attempt to persist an embedded document without a parent set.\",\"summary\":\"%{klass}.collection was called, and %{klass} is an embedded document - it resides within the collection of the root document of the hierarchy.\"},\"invalid_config_file\":{\"message\":\"Invalid configuration file: %{path}.\",\"resolution\":\"Ensure your configuration file contains the correct contents. Refer to: https://www.mongodb.com/docs/mongoid/current/reference/configuration/\",\"summary\":\"Your mongoid.yml configuration file does not contain the correct file structure.\"},\"invalid_config_option\":{\"message\":\"Invalid configuration option: %{name}.\",\"resolution\":\"Remove the invalid option or fix the typo. If you were expecting the option to be there, please consult the following page with respect to Mongoid\\'s configuration:\\\\n\\\\n   http://mongoid.org/en/mongoid/docs/installation.html\",\"summary\":\"A invalid configuration option was provided in your mongoid.yml, or a typo is potentially present. The valid configuration options are: %{options}.\"},\"invalid_dependent_strategy\":{\"message\":\"Invalid dependent strategy: %{invalid_strategy}.\",\"resolution\":\"Change the dependent strategy to one of the valid types.\",\"summary\":\"An invalid dependent strategy was defined for the association: %{association}. The valid strategies are: %{valid_strategies}.\"},\"invalid_discriminator_key_target\":{\"message\":\"Setting the discriminator key on a child class is not allowed.\",\"resolution\":\"Try setting the discriminator key on %{superclass} or one of %{class_name}\\'s ancestors.\",\"summary\":\"The discriminator key on the class %{class_name} was attempted to be changed. Changing the discriminator key on a child class is not allowed.\"},\"invalid_dot_dollar_assignment\":{\"message\":\"Cannot set the %{attr} attribute on the %{klass} class.\",\"resolution\":\"In order to set fields that start with a dollar sign ($) or contain a dot/period (.), the aggregation pipeline can be used. MongoDB provides specific operators for working with these fields. Refer to the MongoDB documentation here: https://www.mongodb.com/docs/manual/core/dot-dollar-considerations/\",\"summary\":\"Calling the setters for fields that start with a dollar sign ($) or contain a dot/period (.) is prohibited. See the Mongoid documentation on Field Names with Dots/Periods (.) and Dollar Signs ($) for more information.\"},\"invalid_elem_match_operator\":{\"message\":\"Invalid $elemMatch operator \\'%{operator}\\'.\",\"resolution\":\"Valid field operators are: %{valid_operators}. Ensure you are using one of these operators.\",\"summary\":\"You misspelled an operator or are using an operator that Mongoid does not support.\"},\"invalid_estimated_count_criteria\":{\"message\":\"Invalid criteria for estimated_count.\",\"resolution\":\"Try calling estimated_count directly on the class: %{class_name}.estimated_count.\\\\n\\\\n  If the class defines a default scope, use unscoped: %{class_name}.unscoped.estimated_count.\",\"summary\":\"Estimated count is strictly a collection-level operation and cannot be called on a filtered criteria.\"},\"invalid_expression_operator\":{\"message\":\"Invalid expression operator \\'%{operator}\\'.\",\"resolution\":\"Valid expression operators are: %{valid_operators}. Ensure you are using one of these operators.\",\"summary\":\"You misspelled an operator, are using an operator that Mongoid does not support, or are trying to use a field-level operator on expression level.\"},\"invalid_field\":{\"message\":\"Defining a field named \\'%{field}\\' is not allowed.\",\"resolution\":\"Use Mongoid.destructive_fields to see what names are not allowed, and don\\'t use these names. These include names that also conflict with core Ruby methods on Object, Module, Enumerable, or included gems that inject methods into these or Mongoid internals.\",\"summary\":\"Defining this field would override the method \\'%{name}\\', which would cause issues with expectations around the original method and cause extremely hard to debug issues. The original method was defined in:\\\\n   Object: %{origin}\\\\n   File: %{file}\\\\n   Line: %{line}\"},\"invalid_field_operator\":{\"message\":\"Invalid field operator \\'%{operator}\\'.\",\"resolution\":\"Valid field operators are: %{valid_operators}. Ensure you are using one of these operators.\",\"summary\":\"You misspelled an operator, are using an operator that Mongoid does not support, or are trying to use an expression-level operator on field level.\"},\"invalid_field_option\":{\"message\":\"Invalid option :%{option} provided for field :%{name}.\",\"resolution\":\"When defining the field :%{name} on \\'%{klass}\\', please provide valid options for the field. These are currently: %{valid}. If you meant to define a custom field option, please do so first as follows:\\\\n\\\\n   Mongoid::Fields.option :%{option} do |model, field, value|\\\\n     # Your logic here...\\\\n   end\\\\n   class %{klass}\\\\n     include Mongoid::Document\\\\n     field :%{name}, %{option}: true\\\\n   end\\\\n\\\\n Refer to: https://www.mongodb.com/docs/mongoid/current/reference/fields/#custom-field-options\",\"summary\":\"Mongoid requires that you only provide valid options on each field definition in order to prevent unexpected behavior later on.\"},\"invalid_field_type\":{\"message\":\"Invalid field type %{type_inspection} for field \\'%{field}\\' on model \\'%{klass}\\'.\",\"resolution\":\"Please provide a valid type value for the field. Refer to: https://www.mongodb.com/docs/mongoid/current/reference/fields/#using-symbols-or-strings-instead-of-classes\",\"summary\":\"Model \\'%{klass}\\' defines a field \\'%{field}\\' with an unknown type value %{type_inspection}.\"},\"invalid_global_executor_concurrency\":{\"message\":\"Invalid global_executor_concurrency option.\",\"resolution\":\"Set global_executor_concurrency option to :global_thread_pool or remove global_executor_concurrency option.\",\"summary\":\"You set global_executor_concurrency while async_query_executor option is not set to :global_thread_pool. The global_executor_concurrency is allowed only for the global thread pool executor.\"},\"invalid_includes\":{\"message\":\"Invalid includes directive: %{klass}.includes(%{args})\",\"resolution\":\"Ensure that each parameter passed to %{klass}.includes is a valid name of an association on the %{klass} model. These are: %{relations}.\",\"summary\":\"Eager loading in Mongoid only supports providing arguments to %{klass}.includes that are the names of associations on the %{klass}.\"},\"invalid_index\":{\"message\":\"Invalid index specification on %{klass}: %{spec}, %{options}\",\"resolution\":\"Ensure that the index conforms to the correct syntax and has the correct options.\\\\n\\\\n Valid options are:\\\\n   background: true|false\\\\n   database: \\'database_name\\'\\\\n   name: \\'index_name\\'\\\\n   sparse: true|false\\\\n   unique: true|false\\\\n   min: 1\\\\n   max: 1\\\\n   bits: 26\\\\n   key: 26\\\\n   bucket_size : 1\\\\n   sphere_version : 1\\\\n   text_version : 1\\\\n   version : 1\\\\n   weights: { content: 1, title: 2 }\\\\n   expire_after_seconds: number_of_seconds\\\\n   partial_filter_expression\\\\n   storage_engine\\\\n   language_override\\\\n   default_language\\\\n   collation\\\\n   wildcard_projection: { \\'path.to.field.a\\': 1, \\'path.to.field.b\\': 0 }\\\\n Valid types are: 1, -1, \\'2d\\', \\'2dsphere\\', \\'geoHaystack (deprecated)\\', \\'text\\', \\'hashed\\'\\\\n\\\\n Example:\\\\n   class Band\\\\n     include Mongoid::Document\\\\n     index({ name: 1, label: -1 }, { sparse: true })\\\\n     index({ location: \\'2d\\' }, { background: true })\\\\n   end\\\\n\\\\n\",\"summary\":\"Indexes in Mongoid are defined as a hash of field name and direction/2d pairs, with a hash for any additional options.\"},\"invalid_options\":{\"message\":\"Invalid option :%{invalid} provided to association :%{name}.\",\"resolution\":\"Valid options are: %{valid}, make sure these are the ones you are using.\",\"summary\":\"Mongoid checks the options that are passed to the association macros to ensure that no ill side effects occur by letting something slip by.\"},\"invalid_path\":{\"message\":\"Having a root path assigned for %{klass} is invalid.\",\"resolution\":\"Most likely your embedded model, %{klass} is also referenced via a has_many from a root document in another collection. Double check the association definitions and fix any instances where embedded documents are improperly referenced from other collections.\",\"summary\":\"Mongoid has two different path objects for determining the location of a document in the database, Root and Embedded. This error is raised when an embedded document somehow gets a root path assigned.\"},\"invalid_persistence_option\":{\"message\":\"Invalid persistence option :%{invalid}.\",\"resolution\":\"Valid options are: %{valid}, make sure these are the ones you are using.\",\"summary\":\"The options used to change the persistence context must be one of the valid options for a mongo client, or a collection name.\"},\"invalid_relation\":{\"message\":\"Defining an association named \\'%{name}\\' is not allowed.\",\"resolution\":\"Use Mongoid.destructive_fields to see what names are not allowed, and don\\'t use these names. These include names that also conflict with core Ruby methods on Object, Module, Enumerable, or included gems that inject methods into these or Mongoid internals.\",\"summary\":\"Defining this association would override the method \\'%{name}\\', which would cause issues with expectations around the original method and cause extremely hard to debug issues. The original method was defined in:\\\\n   Object: %{origin}\\\\n   File: %{file}\\\\n   Line: %{line}\"},\"invalid_relation_option\":{\"message\":\"Invalid association option :%{option} for association \\'%{name}\\' on class %{klass}.\",\"resolution\":\"Valid options are: %{valid_options}, make sure you use only those.\",\"summary\":\"An invalid option was provided for an association.\"},\"invalid_scope\":{\"message\":\"Defining a scope of value %{value} on %{klass} is not allowed.\",\"resolution\":\"Change the scope to be a proc wrapped criteria.\\\\n\\\\n Example:\\\\n   class Band\\\\n     include Mongoid::Document\\\\n     scope :inactive, -\\\\u003e{ where(active: false) }\\\\n   end\\\\n\\\\n\",\"summary\":\"Scopes in Mongoid must be procs that wrap criteria objects.\"},\"invalid_session_nesting\":{\"message\":\"A session was started while another session was being used.\",\"resolution\":\"Only use one session at a time; sessions cannot be nested.\",\"summary\":\"Sessions cannot be nested. Only one session can be used in a thread at once.\"},\"invalid_session_use\":{\"message\":\"A session was attempted to be used with a model whose client cannot use that session.\",\"resolution\":\"Only execute operations on the model class or instances of the model through which the session was created. Otherwise, ensure that all models on which operations are executed in the session block share the same driver client. For example, a model may have a different client specified in its \\'store_in\\' options.\\\\n\\\\n\",\"summary\":\"Sessions are started via driver clients (Model#mongo_client) and, in most cases, driver clients are shared across models. When different models have their own clients, a session cannot be obtained via one model and used for operations on another model.\"},\"invalid_set_polymorphic_relation\":{\"message\":\"The %{name} attribute can\\'t be set to an instance of %{other_klass} as %{other_klass} has multiple associations referencing %{klass} as %{name}.\",\"resolution\":\"Set the values from the parent, or redefine the association with only a single definition in the parent.\",\"summary\":\"If the parent class of a polymorphic association has multiple definitions for the same association, the values must be set from the parent side and not the child side since Mongoid cannot determine from the child side which association to go in.\"},\"invalid_storage_options\":{\"message\":\"Invalid options passed to %{klass}.store_in: %{options}.\",\"resolution\":\"Change the options passed to store_in to match the documented API, and ensure all keys in the options hash are symbols.\\\\n\\\\n Example:\\\\n   class Band\\\\n     include Mongoid::Document\\\\n     store_in collection: \\'artists\\', database: \\'music\\'\\\\n   end\\\\n\\\\n\",\"summary\":\"The :store_in macro takes only a hash of parameters with the keys :database, :collection, :collection_options, or :client.\"},\"invalid_time\":{\"message\":\"\\'%{value}\\' is not a valid Time.\",\"resolution\":\"Make sure to pass parsable values to the field setter for Date, DateTime, and Time objects. When this is a String it needs to be valid for Time.parse. Other objects must be valid to pass to Time.local.\",\"summary\":\"Mongoid tries to serialize the values for Date, DateTime, and Time into proper UTC times to store in the database. The provided value could not be parsed.\"},\"inverse_not_found\":{\"message\":\"When adding a(n) %{klass} to %{base}#%{name}, Mongoid could not determine the inverse foreign key to set. The attempted key was \\'%{inverse}\\'.\",\"resolution\":\"If an inverse is not required, like a belongs_to or has_and_belongs_to_many, ensure that :inverse_of =\\\\u003e nil is set on the association. If the inverse is needed, most likely the inverse cannot be figured out from the names of the associations and you will need to explicitly tell Mongoid on the association what the inverse is.\\\\n\\\\n Example:\\\\n   class Car\\\\n     include Mongoid::Document\\\\n     has_one :engine, class_name: \\\\\"Motor\\\\\", inverse_of: :machine\\\\n   end\\\\n\\\\n   class Motor\\\\n     include Mongoid::Document\\\\n     belongs_to :machine, class_name: \\\\\"Car\\\\\", inverse_of: :engine\\\\n   end\",\"summary\":\"When adding a document to an association, Mongoid attempts to link the newly added document to the base of the association in memory, as well as set the foreign key to link them on the database side. In this case Mongoid could not determine what the inverse foreign key was.\"},\"message_title\":\"message\",\"mixed_client_configuration\":{\"message\":\"Both uri and standard configuration options defined for client: \\'%{name}\\'.\",\"resolution\":\"Provide either only a uri as configuration or only standard options.\",\"summary\":\"Instead of simply giving uri or standard options a preference order, Mongoid assumes that you have made a mistake in your configuration and requires that you provide one or the other, but not both. The options that were provided were: %{config}.\"},\"mixed_relations\":{\"message\":\"Referencing a(n) %{embedded} document from the %{root} document via a non-embedded association is not allowed since the %{embedded} is embedded.\",\"resolution\":\"Consider not embedding %{embedded}, or do the key storage and access in a custom manner in the application code.\",\"summary\":\"In order to properly access a(n) %{embedded} from %{root} the reference would need to go through the root document of %{embedded}. In a simple case this would require Mongoid to store an extra foreign key for the root, in more complex cases where %{embedded} is multiple levels deep a key would need to be stored for each parent up the hierarchy.\"},\"nested_attributes_metadata_not_found\":{\"message\":\"Could not find metadata for association \\'%{name}\\' on model: %{klass}.\",\"resolution\":\"Make sure that there is an association defined named \\'%{name}\\' on %{klass} or that the association definition comes before the accepts_nested_attributes_for macro in the model - order matters so that Mongoid has access to the metadata.\\\\n\\\\n Example:\\\\n   class Band\\\\n     include Mongoid::Document\\\\n     has_many :albums\\\\n     accepts_nested_attributes_for :albums\\\\n   end\\\\n\\\\n\",\"summary\":\"When defining nested attributes for an association, Mongoid needs to access the metadata for the association \\'%{name}\\' in order if add autosave functionality to it, if applicable. Either no association named \\'%{name}\\' could be found, or the association had not been defined yet.\"},\"no_client_config\":{\"message\":\"No configuration could be found for a client named \\'%{name}\\'.\",\"resolution\":\"Double check your mongoid.yml to make sure under the clients key that a configuration exists for \\'%{name}\\'. If you have set the configuration programmatically, ensure that \\'%{name}\\' exists in the configuration hash.\",\"summary\":\"When attempting to create the new client, Mongoid could not find a client configuration for the name: \\'%{name}\\'. This is necessary in order to know the host, port, and options needed to connect.\"},\"no_client_database\":{\"message\":\"No database provided for client configuration: :%{name}.\",\"resolution\":\"If configuring via a mongoid.yml, ensure that within your :%{name} section a :database value for the client\\'s default database is defined.\\\\n\\\\n Example:\\\\n   development:\\\\n     clients:\\\\n       %{name}:\\\\n         database: my_app_db\\\\n         hosts:\\\\n           - localhost:27017\\\\n\\\\n\",\"summary\":\"Each client configuration must provide a database so Mongoid knows where the default database to persist to. What was provided was: %{config}.\"},\"no_client_hosts\":{\"message\":\"No hosts provided for client configuration: :%{name}.\",\"resolution\":\"If configuring via a mongoid.yml, ensure that within your :%{name} section a :hosts value for the client hosts is defined.\\\\n\\\\n Example:\\\\n   development:\\\\n     clients:\\\\n       %{name}:\\\\n         database: my_app_db\\\\n         hosts:\\\\n           - localhost:27017\\\\n\\\\n\",\"summary\":\"Each client configuration must provide hosts so Mongoid knows where the database server is located. What was provided was: %{config}.\"},\"no_clients_config\":{\"message\":\"No clients configuration provided.\",\"resolution\":\"Double check your mongoid.yml to make sure that you have a top-level clients key with at least 1 default client configuration for it. You can regenerate a new mongoid.yml for assistance via `rails g mongoid:config`.\\\\n\\\\n Example:\\\\n   development:\\\\n     clients:\\\\n       default:\\\\n         database: mongoid_dev\\\\n         hosts:\\\\n           - localhost:27017\\\\n\\\\n\",\"summary\":\"Mongoid\\'s configuration requires that you provide details about each client that can be connected to, and requires in the clients config at least 1 default client to exist.\"},\"no_default_client\":{\"message\":\"No default client configuration is defined.\",\"resolution\":\"If configuring via a mongoid.yml, ensure that within your :clients section a :default client is defined.\\\\n\\\\n Example:\\\\n   development:\\\\n     clients:\\\\n       default:\\\\n         hosts:\\\\n           - localhost:27017\\\\n\\\\n\",\"summary\":\"The configuration provided settings for: %{keys}, but Mongoid requires a :default to be defined at minimum.\"},\"no_documents_found\":{\"message\":\"Could not find a document of class %{klass}.\",\"resolution\":\"Create a document of class %{klass} or use a finder method that does not raise an exception when no documents are found.\",\"summary\":\"Mongoid attempted to find a document of the class %{klass} but none exist.\"},\"no_environment\":{\"message\":\"Could not load the configuration since no environment was defined.\",\"resolution\":\"Please ensure an environment is set in one of the listed locations. The environment must be explicitly set.\",\"summary\":\"Mongoid could not determine the environment to use because it was not specified in any of the following locations: Rails.env, Sinatra::Base.environment, ENV[\\\\\"RACK_ENV\\\\\"], ENV[\\\\\"MONGOID_ENV\\\\\"]. Without knowing the environment, Mongoid cannot load its configuration.\"},\"no_map_reduce_output\":{\"message\":\"No output location was specified for the map/reduce operation.\",\"resolution\":\"Provide the location that the output of the operation is to go by chaining an #out call to the map/reduce.\\\\n\\\\n Example:\\\\n   Band.map_reduce(map, reduce).out(inline: 1)\\\\n\\\\n Valid options for the out function are:\\\\n   inline: 1\\\\n   merge: \\'collection-name\\'\\\\n   replace: \\'collection-name\\'\\\\n   reduce: \\'collection-name\\'\\\\n\\\\n\",\"summary\":\"When executing a map/reduce, you must provide the output location of the results. The attempted command was: %{command}.\"},\"no_metadata\":{\"message\":\"Metadata not found for document of type %{klass}.\",\"resolution\":\"Ensure that your associations on the %{klass} model are all properly defined, and that the inverse associations are also properly defined. Embedded associations must have both the parent (embeds_one/embeds_many) and the inverse (embedded_in) present in order to work properly.\",\"summary\":\"Mongoid sets the metadata of an association on the document when it is either loaded from within the association, or added to one. The presence of the metadata is required in order to provide various functionality around associations. Most likely you are getting this error because the document is embedded and was attempted to be persisted without being associated with a parent, or the association was not properly defined.\"},\"no_parent\":{\"message\":\"Cannot persist embedded document %{klass} without a parent document.\",\"resolution\":\"Ensure that you\\'ve set the parent association if instantiating the embedded document directly, or always create new embedded documents via the parent association.\",\"summary\":\"If the document is embedded, in order to be persisted it must always have a reference to its parent document. This is most likely caused by either calling %{klass}.create or %{klass}.create! without setting the parent document as an attribute.\"},\"readonly_attribute\":{\"message\":\"Attempted to set the readonly attribute \\'%{name}\\' with the value: %{value}.\",\"resolution\":\"Don\\'t define \\'%{name}\\' as readonly, or do not attempt to update its value after the document is persisted.\",\"summary\":\"Attributes flagged as readonly via Model.attr_readonly can only have values set when the document is a new record.\"},\"readonly_document\":{\"message\":\"Attempted to persist a readonly document of class \\'%{klass}\\'.\",\"resolution\":\"Don\\'t attempt to persist documents that are flagged as readonly.\",\"summary\":\"Documents that are marked readonly cannot be persisted.\"},\"resolution_title\":\"resolution\",\"scope_overwrite\":{\"message\":\"Cannot create scope :%{scope_name}, because of existing method %{model_name}.%{scope_name}.\",\"resolution\":\"Change the name of the scope so it does not conflict with the already defined method %{model_name}, or set the configuration option Mongoid.scope_overwrite_exception to false, which is its default. In this case a warning will be logged.\",\"summary\":\"When defining a scope that conflicts with a method that already exists on the model, this error will get raised if Mongoid.scope_overwrite_exception is set to true.\"},\"sessions_not_supported\":{\"message\":\"Sessions are not supported by the connected server(s).\",\"resolution\":\"Verify that all servers in your deployment are at least version 3.6 or don\\'t attempt to use sessions with older server versions.\",\"summary\":\"A session was attempted to be used with a MongoDB server version that doesn\\'t support sessions. Sessions are supported in MongoDB server versions 3.6 and higher.\"},\"summary_title\":\"summary\",\"too_many_nested_attribute_records\":{\"message\":\"Accepting nested attributes for %{association} is limited to %{limit} documents.\",\"resolution\":\"The limit is set as an option to the macro, for example: accepts_nested_attributes_for :%{association}, limit: %{limit}. Consider raising this limit or making sure no more are sent than the set value.\",\"summary\":\"More documents were sent to be processed than the allowed limit.\"},\"unknown_attribute\":{\"message\":\"Attempted to set a value for \\'%{name}\\' which is not allowed on the model %{klass}.\",\"resolution\":\"Define the field \\'%{name}\\' in %{klass}, or include Mongoid::Attributes::Dynamic in %{klass} if you intend to store values in fields that are not explicitly defined.\",\"summary\":\"%{klass}#%{name}= was called but there is no \\'%{name}\\' field defined in the model, and Mongoid::Attributes::Dynamic is not included. This error is also raised instead of NoMethodError if the unknown attribute is passed to any method that accepts an attributes hash, such as #attributes=.\"},\"unknown_model\":{\"message\":\"Attempted to instantiate an object of the unknown model \\'%{klass}\\'.\",\"resolution\":\"The _type field is a reserved one used by Mongoid to determine the class for instantiating an object. Please don\\'t save data in this field or ensure that any values in this field correspond to valid models.\",\"summary\":\"A document with the value \\'%{value}\\' at the key \\'_type\\' was used to instantiate a model object but Mongoid cannot find this Class.\"},\"unsaved_document\":{\"message\":\"Attempted to save %{document} before the parent %{base}.\",\"resolution\":\"Make sure to only use create or create! when the parent document %{base} is persisted.\",\"summary\":\"You cannot call create or create! through the association (%{document}) whose parent (%{base}) is not already saved. This would cause the database to be out of sync since the child could potentially reference a nonexistent parent.\"},\"unsupported_javascript\":{\"message\":\"Executing Javascript $where selector on an embedded criteria is not supported.\",\"resolution\":\"Please provide a standard hash to #where when the criteria is for an embedded association.\",\"summary\":\"Mongoid only supports providing a hash of arguments to #where criterion on embedded documents. Since %{klass} is embedded, the expression %{javascript} is not allowed.\"},\"validations\":{\"message\":\"Validation of %{document} failed.\",\"resolution\":\"Try persisting the document with valid data or remove the validations.\",\"summary\":\"The following errors were found: %{errors}\"}}}},\"number\":{\"currency\":{\"format\":{\"delimiter\":\",\",\"format\":\"%u%n\",\"negative_format\":\"-%u%n\",\"precision\":2,\"separator\":\".\",\"significant\":false,\"strip_insignificant_zeros\":false,\"unit\":\"$\"}},\"format\":{\"delimiter\":\",\",\"precision\":3,\"round_mode\":\"default\",\"separator\":\".\",\"significant\":false,\"strip_insignificant_zeros\":false},\"human\":{\"decimal_units\":{\"format\":\"%n %u\",\"units\":{\"billion\":\"Billion\",\"million\":\"Million\",\"quadrillion\":\"Quadrillion\",\"thousand\":\"Thousand\",\"trillion\":\"Trillion\",\"unit\":\"\"}},\"format\":{\"delimiter\":\"\",\"precision\":3,\"significant\":true,\"strip_insignificant_zeros\":true},\"storage_units\":{\"format\":\"%n %u\",\"units\":{\"byte\":{\"one\":\"Byte\",\"other\":\"Bytes\"},\"eb\":\"EB\",\"gb\":\"GB\",\"kb\":\"KB\",\"mb\":\"MB\",\"pb\":\"PB\",\"tb\":\"TB\",\"zb\":\"ZB\"}}},\"nth\":{},\"percentage\":{\"format\":{\"delimiter\":\"\",\"format\":\"%n%\"}},\"precision\":{\"format\":{\"delimiter\":\"\"}}},\"pivot_list_column_value\":{\"non_sponsor_org\":\"non-sponsor\"},\"pivot_list_download\":{\"id\":\"NIQ_ID\"},\"simple_form\":{\"error_notification\":{\"default_message\":\"Please review the problems below:\"},\"no\":\"No\",\"required\":{\"mark\":\"*\",\"text\":\"required\"},\"yes\":\"Yes\"},\"support\":{\"array\":{\"last_word_connector\":\", and \",\"two_words_connector\":\" and \",\"words_connector\":\", \"}},\"terminology\":{\"all_orgs_list_category\":\"Companies\",\"companies_in_your_sf_label\":\"Companies in your Salesforce\",\"company_based_in\":\"Sponsor company based in\",\"company_location\":\"Sponsor Company Location\",\"neglected_target_label\":\"Neglected Sponsors\",\"sponsor\":\"Drug Sponsor\",\"sponsor_orgs_list_category\":\"Sponsor Companies\",\"target_organization_title\":\"Sponsor\"},\"time\":{\"am\":\"am\",\"formats\":{\"default\":\"%a, %d %b %Y %H:%M:%S %z\",\"long\":\"%B %d, %Y %H:%M\",\"short\":\"%d %b %H:%M\"},\"pm\":\"pm\"},\"users\":{\"confirmations\":{\"new\":{\"legend\":\"Resend your %{brand_name} confirmation instructions\",\"message\":\"We need to confirm your email address to complete the sign up process. Supply your email address, below, and we will send you instructions on how to confirm your address.\",\"submit_button\":\"Send Confirmation Instructions\",\"title\":\"Resend confirmation instructions | %{brand_name}\"},\"show\":{\"legend\":\"Check your inbox for a confirmation email\",\"message\":\"If your e-mail exists in our database we have sent you a message with instructions. Check your inbox (or spam folder) for a message from \\'%{default_from_email}\\' containing the confirmation link.\",\"title\":\"Awaiting confirmation | %{brand_name}\"}},\"passwords\":{\"new\":{\"failures\":\"Note: If you make more than 5 sequential failed attempts to sign in with your %{brand_name} password, your account will be (temporarily) locked. Check your inbox for instruction on how to unlock your account, or we can\",\"legend\":\"Reset your %{brand_name} password\",\"message\":\"Supply your email address, below, and we will send you instructions on how to reset your password.\",\"resend_link\":\"resend a new set of unlock instructions\",\"submit_button\":\"Send Reset Instructions\",\"title\":\"Reset password | %{brand_name}\"},\"show\":{\"didnt_receive_email\":\"Didn\\'t receive the email?\",\"legend\":\"Password reset instructions sent\",\"message\":\"If your e-mail exists in our database we have sent you a message with password reset instructions. Check your inbox (or spam folder) for a message from \\'%{default_from_email}\\'.\",\"resend_link\":\"you can request another one here\",\"title\":\"Awaiting reset | %{brand_name}\"}}},\"will_paginate\":{\"container_aria_label\":\"Pagination\",\"next_label\":\"Next \\\\u0026#8594;\",\"page_aria_label\":\"Page %{page}\",\"page_entries_info\":{\"multi_page\":\"Displaying %{model} %{from} - %{to} of %{count} in total\",\"multi_page_html\":\"Displaying %{model} \\\\u003cb\\\\u003e%{from}\\\\u0026nbsp;-\\\\u0026nbsp;%{to}\\\\u003c/b\\\\u003e of \\\\u003cb\\\\u003e%{count}\\\\u003c/b\\\\u003e in total\",\"single_page\":{\"one\":\"Displaying 1 %{model}\",\"other\":\"Displaying all %{count} %{model}\",\"zero\":\"No %{model} found\"},\"single_page_html\":{\"one\":\"Displaying \\\\u003cb\\\\u003e1\\\\u003c/b\\\\u003e %{model}\",\"other\":\"Displaying \\\\u003cb\\\\u003eall\\\\u0026nbsp;%{count}\\\\u003c/b\\\\u003e %{model}\",\"zero\":\"No %{model} found\"}},\"page_gap\":\"\\\\u0026hellip;\",\"previous_label\":\"\\\\u0026#8592; Previous\"},\"x_mailer_header\":\"clicks.nurtureiq-inova.io\"}'));\nI18n.translations[\"it\"] = I18n.extend((I18n.translations[\"it\"] || {}), JSON.parse('{\"activerecord\":{\"errors\":{\"messages\":{\"record_invalid\":\"Validation failed: %{errors}\",\"restrict_dependent_destroy\":{\"has_many\":\"Cannot delete record because dependent %{record} exist\",\"has_one\":\"Cannot delete record because a dependent %{record} exists\"}}}},\"bulk_uploads\":{\"email_local_part\":{\"empty_parameter\":\"No file uploaded\",\"error\":\"File Upload failed: %{error_message}\",\"success\":\"File was successfully uploaded\"}},\"common\":{\"crm\":{\"salesforce\":{\"forgot_password\":\"If you have forgotten your Salesforce password, please follow the instructions provided on the Salesforce sign in page.\",\"sign_in_button\":\"Sign In with Salesforce\"}}},\"contact\":{\"default_from_email\":\"info@zymewire.com\",\"phone_numbers\":[{\"label\":\"US\",\"phone\":\"1-844-996-3321\"},{\"label\":\"UK\",\"phone\":\"+44-208-133-9963\"}],\"support_email\":\"support@zymewire.com\"},\"date\":{\"abbr_day_names\":[\"Sun\",\"Mon\",\"Tue\",\"Wed\",\"Thu\",\"Fri\",\"Sat\"],\"abbr_month_names\":[null,\"Jan\",\"Feb\",\"Mar\",\"Apr\",\"May\",\"Jun\",\"Jul\",\"Aug\",\"Sep\",\"Oct\",\"Nov\",\"Dec\"],\"day_names\":[\"Sunday\",\"Monday\",\"Tuesday\",\"Wednesday\",\"Thursday\",\"Friday\",\"Saturday\"],\"formats\":{\"default\":\"%Y-%m-%d\",\"long\":\"%B %d, %Y\",\"short\":\"%b %d\"},\"month_names\":[null,\"January\",\"February\",\"March\",\"April\",\"May\",\"June\",\"July\",\"August\",\"September\",\"October\",\"November\",\"December\"],\"order\":[\"year\",\"month\",\"day\"]},\"datetime\":{\"distance_in_words\":{\"about_x_hours\":{\"one\":\"about 1 hour\",\"other\":\"about %{count} hours\"},\"about_x_months\":{\"one\":\"about 1 month\",\"other\":\"about %{count} months\"},\"about_x_years\":{\"one\":\"about 1 year\",\"other\":\"about %{count} years\"},\"almost_x_years\":{\"one\":\"almost 1 year\",\"other\":\"almost %{count} years\"},\"half_a_minute\":\"half a minute\",\"less_than_x_minutes\":{\"one\":\"less than a minute\",\"other\":\"less than %{count} minutes\"},\"less_than_x_seconds\":{\"one\":\"less than 1 second\",\"other\":\"less than %{count} seconds\"},\"over_x_years\":{\"one\":\"over 1 year\",\"other\":\"over %{count} years\"},\"x_days\":{\"one\":\"1 day\",\"other\":\"%{count} days\"},\"x_minutes\":{\"one\":\"1 minute\",\"other\":\"%{count} minutes\"},\"x_months\":{\"one\":\"1 month\",\"other\":\"%{count} months\"},\"x_seconds\":{\"one\":\"1 second\",\"other\":\"%{count} seconds\"}},\"prompts\":{\"day\":\"Day\",\"hour\":\"Hour\",\"minute\":\"Minute\",\"month\":\"Month\",\"second\":\"Seconds\",\"year\":\"Year\"}},\"default_host\":\"https://www.zymewire.com\",\"devise\":{\"confirmations\":{\"confirmed\":\"Your account was successfully confirmed. Please sign in.\",\"send_instructions\":\"Your email has not been confirmed. We need to confirm your email account before you can sign in. Please check your inbox or spam folder for an email from \\'info@zymewire.com\\' or request a new one.\",\"send_paranoid_instructions\":\"If your e-mail exists on our database, you will receive an email with instructions about how to confirm your account in a few minutes.\"},\"failure\":{\"already_authenticated\":\"You are already signed in.\",\"expired\":\"Il tuo account è stato bloccato per inattività. Contatta l amministratore del sito.\",\"inactive\":\"Your account was not activated yet.\",\"invalid\":\"Invalid email or password. If you use Salesforce, use the \\'Have Salesforce?\\' panel.\",\"invalid_token\":\"Invalid authentication token.\",\"last_attempt\":\"You have one more attempt before your account is locked.\",\"locked\":\"Your account is locked.\",\"not_active\":\"Your account has been de-activated, if you think this is a mistake please contact us\",\"not_found_in_database\":\"Invalid %{authentication_keys} or password.\",\"session_limited\":\"Hai effettuato l accesso in un altro browser. Fai nuovamente l accesso per connetterti in questo.\",\"timeout\":\"Your session expired, please sign in again to continue.\",\"unauthenticated\":\"You need to sign in or sign up before continuing.\",\"unconfirmed\":\"We must confirm your email before you can continue. Please check your inbox or spam folder for a confirmation email from \\'info@zymewire.com\\' or request a new one.\"},\"invalid_captcha\":\"Il captcha inserito non è valido!\",\"invalid_security_question\":\"La risposta alla domanda di sicurezza non è valida.\",\"mailer\":{\"confirmation_instructions\":{\"subject\":\"Confirmation instructions for Zymewire.com\"},\"email_changed\":{\"subject\":\"Email Changed\"},\"password_change\":{\"subject\":\"Password Changed\"},\"reset_password_instructions\":{\"subject\":\"Reset password instructions for Zymewire.com\"},\"unlock_instructions\":{\"subject\":\"Unlock Instructions for Zymewire.com\"}},\"omniauth_callbacks\":{\"failure\":\"Could not authorize you from %{kind} because \\\\\"%{reason}\\\\\".\",\"success\":\"Successfully authorized from %{kind} account.\"},\"paranoid_verification_code\":{\"show\":{\"submit\":\"Invia\",\"submit_verification_code\":\"Invia codice di verifica\",\"verification_code\":\"Codice di verifica\"},\"updated\":\"Codice di verifica accettato\"},\"paranoid_verify\":{\"code_required\":\"Inserisci il codice fornito dal nostro team di supporto\"},\"password_expired\":{\"change_required\":\"La tua password è scaduta. Si prega di rinnovarla!\",\"show\":{\"change_my_password\":\"Cambia la mia password\",\"current_password\":\"Password attuale\",\"new_password\":\"Nuova password\",\"new_password_confirmation\":\"Conferma nuova password\",\"renew_your_password\":\"Rinnova la tua password\"},\"updated\":\"La tua nuova password è stata salvata.\"},\"passwords\":{\"no_token\":\"You can\\'t access this page without coming from a password reset email. If you do come from a password reset email, please make sure you used the full URL provided.\",\"send_instructions\":\"You will receive an email with instructions about how to reset your password in a few minutes.\",\"send_paranoid_instructions\":\"If your e-mail exists on our database, you will receive a password recovery link on your e-mail\",\"updated\":\"Your password was changed successfully. You are now signed in.\",\"updated_not_active\":\"Your password was changed successfully.\"},\"registrations\":{\"destroyed\":\"Bye! Your account was successfully cancelled. We hope to see you again soon.\",\"signed_up\":\"Welcome! You have signed up successfully.\",\"signed_up_but_inactive\":\"You have signed up successfully. However, we could not sign you in because your account is not yet activated.\",\"signed_up_but_locked\":\"You have signed up successfully. However, we could not sign you in because your account is locked.\",\"signed_up_but_unconfirmed\":\"A message with a confirmation link has been sent to your email address. Please open the link to activate your account.\",\"update_needs_confirmation\":\"You updated your account successfully, but we need to verify your new email address. Please check your email and click on the confirm link to finalize confirming your new email address.\",\"updated\":\"You updated your account successfully.\",\"updated_but_not_signed_in\":\"Your account has been updated successfully, but since your password was changed, you need to sign in again.\"},\"sessions\":{\"already_signed_out\":\"Signed out successfully.\",\"signed_in\":\"Signed in successfully.\",\"signed_out\":\"Signed out successfully.\"},\"unlocks\":{\"send_instructions\":\"You will receive an email with instructions about how to unlock your account in a few minutes.\",\"send_paranoid_instructions\":\"If your account exists, you will receive an email with instructions about how to unlock it in a few minutes.\",\"unlocked\":\"Your account has been unlocked successfully. Please sign in to continue.\"}},\"download\":\"Download\",\"download_30_days\":\"This link will be available for 30 days after which the file will be removed from our servers.\",\"enumerize\":{\"blocklisted_contact\":{\"provider\":{\"insideview\":\"InsideView\",\"zephyr\":\"Zephyr\"}}},\"errors\":{\"format\":\"%{attribute} %{message}\",\"messages\":{\"accepted\":\"must be accepted\",\"already_confirmed\":\"was already confirmed, please try signing in\",\"blank\":\"can\\'t be blank\",\"confirmation\":\"doesn\\'t match %{attribute}\",\"confirmation_period_expired\":\"needs to be confirmed within %{period}, please request a new one\",\"empty\":\"can\\'t be empty\",\"equal_to\":\"must be equal to %{count}\",\"equal_to_current_password\":\" deve essere differente dalla password corrente!\",\"equal_to_email\":\"deve essere differente dall\\'email\",\"even\":\"must be even\",\"exclusion\":\"is reserved\",\"expired\":\"has expired, please request a new one\",\"greater_than\":\"must be greater than %{count}\",\"greater_than_or_equal_to\":\"must be greater than or equal to %{count}\",\"in\":\"must be in %{count}\",\"inclusion\":\"is not included in the list\",\"invalid\":\"is invalid\",\"less_than\":\"must be less than %{count}\",\"less_than_or_equal_to\":\"must be less than or equal to %{count}\",\"model_invalid\":\"Validation failed: %{errors}\",\"not_a_number\":\"is not a number\",\"not_an_integer\":\"must be an integer\",\"not_found\":\"not found\",\"not_locked\":\"was not locked\",\"not_saved\":{\"one\":\"1 error prohibited this %{resource} from being saved:\",\"other\":\"%{count} errors prohibited this %{resource} from being saved:\"},\"odd\":\"must be odd\",\"other_than\":\"must be other than %{count}\",\"password_complexity\":{\"digit\":{\"one\":\"deve contenere almeno una cifra\",\"other\":\"deve contenere almeno %{count} cifre\"},\"lower\":{\"one\":\"deve contenere almeno una lettera minuscola\",\"other\":\"deve contenere almeno %{count} lettere minuscole\"},\"symbol\":{\"one\":\"deve contenere almeno un simbolo di punteggiatura o un simbolo speciale\",\"other\":\"deve contenere almeno %{count} tra simboli di punteggiatura e simboli speciali\"},\"upper\":{\"one\":\"deve contenere almeno una lettera maiuscola\",\"other\":\"deve contenere almeno %{count} lettere maiuscole\"}},\"password_format\":\"Must contain uppercase AND lowercase letters and at least one number\",\"password_too_long\":\"is too long\",\"present\":\"must be blank\",\"required\":\"must exist\",\"taken\":\"has already been taken\",\"taken_in_past\":\"è stata gia\\' utilizzata in passato!\",\"too_long\":{\"one\":\"is too long (maximum is 1 character)\",\"other\":\"is too long (maximum is %{count} characters)\"},\"too_short\":{\"one\":\"is too short (minimum is 1 character)\",\"other\":\"is too short (minimum is %{count} characters)\"},\"wrong_length\":{\"one\":\"is the wrong length (should be 1 character)\",\"other\":\"is the wrong length (should be %{count} characters)\"}}},\"flash\":{\"actions\":{\"create\":{\"notice\":\"%{resource_name} was successfully created.\"},\"destroy\":{\"alert\":\"%{resource_name} could not be destroyed.\",\"notice\":\"%{resource_name} was successfully destroyed.\"},\"update\":{\"notice\":\"%{resource_name} was successfully updated.\"}}},\"hello_world\":\"Hello world\",\"helpers\":{\"select\":{\"prompt\":\"Please select\"},\"submit\":{\"create\":\"Create %{model}\",\"submit\":\"Save %{model}\",\"update\":\"Update %{model}\"}},\"hi\":\"Hi\",\"mailers\":{\"common\":{\"chummy_sign_off\":\"Have a good one.\",\"final_note\":\"P.S.: If you think you received this email accidentally, then something weird could be going on. Hit reply and a member of the %{brand_name} team will investigate.\",\"team_sign_off\":\"- The %{brand_name} Team\"},\"confirmation_instructions_email\":{\"crm\":{\"salesforce\":{\"resource_confirmed\":\"Someone has requested a resend of a confirmation email. You do not need to confirm your email address because your account is configured to use Salesforce to sign in.\",\"resource_unconfirmed\":\"You do not need to confirm your email address because your account is configured to use Salesforce to sign in, please complete the sign up process by clicking the button below to sign in to %{brand_name} via Salesforce.\"}},\"non_crm\":{\"confirm_link\":\"Confirm my account\",\"welcome\":\"Welcome to %{brand_name}. As the final step in the process you\\'ll need to confirm your account by clicking on the link below.\"},\"subject\":\"Confirmation instructions for %{domain}\"},\"flagged_events_mailer\":{\"from\":\"Flagged events - %{brand_name} \\\\u003cflagged_events@mailer.%{domain}\\\\u003e\"},\"mobile_registration_email\":{\"alert_cs_registration_locked\":{\"subject\":\"%{brand_name}: user has had mobile registration locked, too many failed attempts\"},\"dispatch_registration_PIN\":{\"further_instructions\":\"If you are NOT attempting to register for the %{brand_name} Mobile app then please let us know at %{support_email_link} - thank you.\",\"introduction\":\"Here is your mobile app registration PIN:\",\"subject\":\"%{brand_name} Mobile Registration Verification\"},\"too_many_failed_attempts\":{\"introduction\":\"We have received too many failed mobile device registration attempts for your account and we will block any further requests. If you have not attempted to register a mobile device with us in the last hour then please let us know as it is likely someone has tried on your behalf. If you have been trying to register a device please contact %{support_email_link} and we can help unlock your account and get you registered.\",\"subject\":\"%{brand_name}: too many failed registration attempts\"}},\"org_list_download_mail\":{\"dispatch_link\":{\"introduction\":\"We have finished meshing your %{crm_brand_name} data with the companies in your \\\\\"%{list_name}\\\\\" list.\",\"subject\":\"%{brand_name}: your file download of \\'%{list_name}\\' is ready\"},\"failed\":{\"instructions\":\"You could try again in a little while. If you already have and are receiving this email again, please contact us at %{support_email_link}\",\"introduction\":\"We are really sorry, but something went wrong with creating your download of %{crm_brand_name} data for your \\\\\"%{list_name}\\\\\" list.\",\"subject\":\"%{brand_name}: your file download of \\'%{list_name}\\' failed\"}},\"reset_password_instructions_email\":{\"crm\":{\"salesforce\":{\"change_requested\":\"Someone has requested a change to your password. Your account is configured to use Salesforce to sign in.\"}},\"fishy_fine_print\":\"If you did not request a password change, then something weird is going on. Someone may be trying to access your account (unsuccessfully). Please reply to this email and let us know. We will take steps to make sure it stops.\",\"non_crm\":{\"change_password_link\":\"Change my password\",\"change_requested\":\"Someone has requested a change to your password, you can do this via the link below.\"},\"subject\":\"Password reset instructions for %{domain}\"},\"sales_force_mail\":{\"processing_completed\":{\"bullet_points\":[\"Only show events associated with companies in your Salesforce account\",\"Add new contacts and accounts to your Salesforce account without leaving %{brand_name}\",\"Access the \\'Salesforce details\\' panel on company dashboards where you can see open tasks, team interactions, opportunities, and more!\"],\"further_instructions\":\"We\\'re here to help. If you run into any questions or challenges, please contact us at %{support_email_link} and a member of our team would be more than happy to help.\",\"get_the_most\":\"To get the most from the integration, check out the \\'Mine Salesforce for opportunities\\' guide in the Help Center.\",\"guide_button\":\"Take me to the guide\",\"introduction\":\"Good news - your Salesforce account is now integrated with %{brand_name}. Now you’ll be able to:\"}},\"segment_contact\":{\"report_manager\":{\"fail_subject\":\"%{brand_name}: The PDF report generation failed\",\"success_subject\":\"%{brand_name}: Your PDF for %{company_name} is attached\"}},\"sf_token_expiry_email\":{\"further_instructions\":\"If you run into any questions or challenges, please contact us at %{support_email_link} and a member of our team would be more than happy to help.\",\"introduction\":\"Unfortunately the connection established for you between %{brand_name} and your %{crm_brand_name} account has expired. We will not be able to update your lists in %{brand_name} to reflect your %{crm_brand_name} database. To re-establish the connection, you just need to log in to %{brand_name} using your %{crm_brand_name}.\",\"subject\":\"%{brand_name} to %{crm_brand_name} connection has expired\"},\"share_list_mail\":{\"introduction\":\"%{user_name} shared a list with you: \",\"subject\":\"[%{brand_name} - shared list] %{list_name}\"},\"trial_expiry_mail\":{\"seven_days_to_go\":{\"further_instructions\":\"A member of our fabulous Customer Success team will arrange a welcome call with you to understand your goals and priorities, and will then give you a personalized Tour de %{brand_name} so you can easily access the information that is most valuable to you.\",\"instructions\":\"If you\\'d like continued access to the platform with our flexible month-to-month subscription, please ensure you contact %{support_email_link} ahead of: %{deadline}\",\"introduction\":\"Time flies when you\\'re uncovering new business opportunities! Your %{brand_name} trial is coming to an end next week.\",\"sign_off\":\"We look forward to helping you reach your sales goals!\",\"subject\":\"Just a heads up that your %{brand_name} trial is ending in seven days\"},\"seven_days_to_go_warning_for_cs\":{\"introduction\":\"%{user_name} shared a list with you: \",\"subject\":\"[%{brand_name} - shared list] %{list_name}\"}},\"unlock_instructions_email\":{\"crm\":{\"salesforce\":{\"change_requested\":\"You are being sent this email either because of one too many unsuccessful non-Salesforce log-in attempts or someone has requested an unlock email. %{brand_name} has not locked your account because your account is configured to use Salesforce to sign in.\",\"password_forgotten\":\"If you have forgotten your Salesforce password or think your account has been locked by Salesforce, please follow the instructions provided on the Salesforce sign in page.\"}},\"fishy_fine_print\":\"If you have not been (unsuccessfully) trying to log in to your account, then something weird is going on. Someone may be trying to access your account (unsuccessfully). Please reply to this email and let us know. We will take steps to make sure it stops.\",\"non_crm\":{\"change_requested\":\"For security reasons we have locked your account because of too many log-in attempts. To unlock your account, click the link below.\",\"unlock_account_link\":\"Unlock my account\"},\"subject\":\"Unlock instructions for %{domain}\"}},\"mongoid\":{\"errors\":{\"messages\":{\"ambiguous_relationship\":{\"message\":\"Ambiguous associations %{candidates} defined on %{klass}.\",\"resolution\":\"On the %{name} association on %{inverse} you must add an :inverse_of option to specify the exact association on %{klass} that is the opposite of %{name}.\",\"summary\":\"When Mongoid attempts to set an inverse document of an association in memory, it needs to know which association it belongs to. When setting %{name}, Mongoid looked on the class %{inverse} for a matching association, but multiples were found that could potentially match: %{candidates}.\"},\"blank_in_locale\":\"can\\'t be blank in %{location}\",\"callbacks\":{\"message\":\"Calling %{method} on %{klass} resulted in a false return from a callback.\",\"resolution\":\"Double check all before callbacks to make sure they are not unintentionally returning false.\",\"summary\":\"If a before callback returns false when using Document.create!, Document#save!, or Document#update_attributes! this error will get raised since the document did not actually get saved.\"},\"calling_document_find_with_nil_is_invalid\":{\"message\":\"Calling Document.find with nil is invalid.\",\"resolution\":\"Most likely this is caused by passing parameters directly through to the find, and the parameter either is not present or the key from which it is accessed is incorrect.\",\"summary\":\"Document.find expects the parameters to be 1 or more ids, and will return a single document if 1 id is provided, otherwise an array of documents if multiple ids are provided.\"},\"create_collection_failure\":{\"message\":\"Cannot create collection %{collection_name} with options %{collection_options}. The following error was raised: %{error}.\",\"resolution\":\"Double check that collection options for the collection %{collection_name} are valid. Consult with Ruby driver documentation and MongoDB documentation if the desired options are supported by your version of the server.\",\"summary\":\"The server rejected createCollection command with given collection options. This may happen when some of the options are invalid, or not supported by your version of the server.\"},\"criteria_argument_required\":{\"message\":\"Calling Criteria methods with nil arguments is not allowed.\",\"resolution\":\"Invoke Criteria methods with non-nil arguments or omit the respective invocations.\",\"summary\":\"Arguments to Criteria methods cannot be nil, and most Criteria methods require at least one argument. Only logical operations (and, or, nor and not), `all\\' and `where\\' can be called without arguments. The method that was called with nil argument was: %{query_method}.\"},\"delete_restriction\":{\"message\":\"Cannot destroy %{document} because of dependent \\'%{relation}\\'.\",\"resolution\":\"Don\\'t attempt to delete the parent %{document} when it has children, or change the dependent option on the association.\",\"summary\":\"When defining \\'%{relation}\\' with a :dependent =\\\\u003e :restrict_with_error, Mongoid will raise an error when attempting to destroy the %{document} when the child \\'%{relation}\\' still has documents in it.\"},\"destroy_restrict_with_error_dependencies_exist\":\"is not empty and prevents the document from being destroyed\",\"document_not_destroyed\":{\"message\":\"%{klass} with id %{id} was not destroyed.\",\"resolution\":\"Check the before/after destroy callbacks to ensure that the return values are truthy for the chain to continue.\",\"summary\":\"When calling %{klass}#destroy! and a callback halts the destroy callback chain by returning a false value, the deletion will not actually occur.\"},\"document_not_found\":{\"message\":\"Document(s) not found for class %{klass} with id(s) %{missing}.\",\"resolution\":\"Search for an id that is in the database or set the Mongoid.raise_not_found_error configuration option to false, which will cause nil to be returned instead of raising this error when searching for a single id, or only the matched documents when searching for multiples.\",\"summary\":\"When calling %{klass}.find with an id or array of ids, each parameter must match a document in the database or this error will be raised. The search was for the id(s): %{searched} (%{total} total) and the following ids were not found: %{missing}.\"},\"document_with_attributes_not_found\":{\"message\":\"Document not found for class %{klass} with attributes %{attributes}.\",\"resolution\":\"Search for attributes that are in the database or set the Mongoid.raise_not_found_error configuration option to false, which will cause nil to be returned instead of raising this error.\",\"summary\":\"When calling %{klass}.find_by with a hash of attributes, all attributes provided must match a document in the database or this error will be raised.\"},\"document_with_shard_key_not_found\":{\"message\":\"Document not found for class %{klass} with id %{missing} and shard key %{shard_key}.\",\"resolution\":\"Search for an id/shard key that is in the database or set the Mongoid.raise_not_found_error configuration option to false, which will cause nil to be returned instead of raising this error.\",\"summary\":\"When calling %{klass}.find with an id and a shard key, each parameter must match a document in the database or this error will be raised. The search was for the id: %{missing} with shard_key: %{shard_key} and it was not found.\"},\"drop_collection_failure\":{\"message\":\"Cannot drop collection %{collection_name}.\",\"resolution\":\"Try to drop the collection manually using Ruby driver or mongo shell.\",\"summary\":\"Mongoid tried to drop collection %{collection_name}, but the collection still exists in the database.\"},\"empty_config_file\":{\"message\":\"Empty configuration file: %{path}.\",\"resolution\":\"Ensure your configuration file contains the correct contents. Refer to: https://www.mongodb.com/docs/mongoid/current/reference/configuration/\",\"summary\":\"Your mongoid.yml configuration file appears to be empty.\"},\"immutable_attribute\":{\"message\":\"Attempted to change the immutable attribute \\'%{name}\\' with the value: %{value}.\",\"resolution\":\"Do not attempt to update the value of \\'%{name}\\' after the document is persisted.\",\"summary\":\"Immutable attributes can only have values set when the document is a new record.\"},\"in_memory_collation_not_supported\":{\"message\":\"A collation option cannot be applied when querying documents in-memory.\",\"resolution\":\"Remove the collation option from the query.\",\"summary\":\"The query being run against documents in memory has a collation option set. A collation option is only supported if the query is executed on a MongoDB server with version \\\\u003e= 3.4.\"},\"invalid_async_query_executor\":{\"message\":\"Invalid async_query_executor option: %{executor}.\",\"resolution\":\"Pick an allowed option or fix the typo. If you were expecting the option to be there, please consult the following page with respect to Mongoid\\'s configuration:\\\\n\\\\n   https://www.mongodb.com/docs/mongoid/current/reference/configuration/#mongoid-configuration-options\",\"summary\":\"A invalid async query executor was specified. The valid options are: %{options}.\"},\"invalid_collection\":{\"message\":\"Access to the collection for %{klass} is not allowed.\",\"resolution\":\"For access to the collection that the embedded document is in, use %{klass}#_root.collection, or do not attempt to persist an embedded document without a parent set.\",\"summary\":\"%{klass}.collection was called, and %{klass} is an embedded document - it resides within the collection of the root document of the hierarchy.\"},\"invalid_config_file\":{\"message\":\"Invalid configuration file: %{path}.\",\"resolution\":\"Ensure your configuration file contains the correct contents. Refer to: https://www.mongodb.com/docs/mongoid/current/reference/configuration/\",\"summary\":\"Your mongoid.yml configuration file does not contain the correct file structure.\"},\"invalid_config_option\":{\"message\":\"Invalid configuration option: %{name}.\",\"resolution\":\"Remove the invalid option or fix the typo. If you were expecting the option to be there, please consult the following page with respect to Mongoid\\'s configuration:\\\\n\\\\n   http://mongoid.org/en/mongoid/docs/installation.html\",\"summary\":\"A invalid configuration option was provided in your mongoid.yml, or a typo is potentially present. The valid configuration options are: %{options}.\"},\"invalid_dependent_strategy\":{\"message\":\"Invalid dependent strategy: %{invalid_strategy}.\",\"resolution\":\"Change the dependent strategy to one of the valid types.\",\"summary\":\"An invalid dependent strategy was defined for the association: %{association}. The valid strategies are: %{valid_strategies}.\"},\"invalid_discriminator_key_target\":{\"message\":\"Setting the discriminator key on a child class is not allowed.\",\"resolution\":\"Try setting the discriminator key on %{superclass} or one of %{class_name}\\'s ancestors.\",\"summary\":\"The discriminator key on the class %{class_name} was attempted to be changed. Changing the discriminator key on a child class is not allowed.\"},\"invalid_dot_dollar_assignment\":{\"message\":\"Cannot set the %{attr} attribute on the %{klass} class.\",\"resolution\":\"In order to set fields that start with a dollar sign ($) or contain a dot/period (.), the aggregation pipeline can be used. MongoDB provides specific operators for working with these fields. Refer to the MongoDB documentation here: https://www.mongodb.com/docs/manual/core/dot-dollar-considerations/\",\"summary\":\"Calling the setters for fields that start with a dollar sign ($) or contain a dot/period (.) is prohibited. See the Mongoid documentation on Field Names with Dots/Periods (.) and Dollar Signs ($) for more information.\"},\"invalid_elem_match_operator\":{\"message\":\"Invalid $elemMatch operator \\'%{operator}\\'.\",\"resolution\":\"Valid field operators are: %{valid_operators}. Ensure you are using one of these operators.\",\"summary\":\"You misspelled an operator or are using an operator that Mongoid does not support.\"},\"invalid_estimated_count_criteria\":{\"message\":\"Invalid criteria for estimated_count.\",\"resolution\":\"Try calling estimated_count directly on the class: %{class_name}.estimated_count.\\\\n\\\\n  If the class defines a default scope, use unscoped: %{class_name}.unscoped.estimated_count.\",\"summary\":\"Estimated count is strictly a collection-level operation and cannot be called on a filtered criteria.\"},\"invalid_expression_operator\":{\"message\":\"Invalid expression operator \\'%{operator}\\'.\",\"resolution\":\"Valid expression operators are: %{valid_operators}. Ensure you are using one of these operators.\",\"summary\":\"You misspelled an operator, are using an operator that Mongoid does not support, or are trying to use a field-level operator on expression level.\"},\"invalid_field\":{\"message\":\"Defining a field named \\'%{field}\\' is not allowed.\",\"resolution\":\"Use Mongoid.destructive_fields to see what names are not allowed, and don\\'t use these names. These include names that also conflict with core Ruby methods on Object, Module, Enumerable, or included gems that inject methods into these or Mongoid internals.\",\"summary\":\"Defining this field would override the method \\'%{name}\\', which would cause issues with expectations around the original method and cause extremely hard to debug issues. The original method was defined in:\\\\n   Object: %{origin}\\\\n   File: %{file}\\\\n   Line: %{line}\"},\"invalid_field_operator\":{\"message\":\"Invalid field operator \\'%{operator}\\'.\",\"resolution\":\"Valid field operators are: %{valid_operators}. Ensure you are using one of these operators.\",\"summary\":\"You misspelled an operator, are using an operator that Mongoid does not support, or are trying to use an expression-level operator on field level.\"},\"invalid_field_option\":{\"message\":\"Invalid option :%{option} provided for field :%{name}.\",\"resolution\":\"When defining the field :%{name} on \\'%{klass}\\', please provide valid options for the field. These are currently: %{valid}. If you meant to define a custom field option, please do so first as follows:\\\\n\\\\n   Mongoid::Fields.option :%{option} do |model, field, value|\\\\n     # Your logic here...\\\\n   end\\\\n   class %{klass}\\\\n     include Mongoid::Document\\\\n     field :%{name}, %{option}: true\\\\n   end\\\\n\\\\n Refer to: https://www.mongodb.com/docs/mongoid/current/reference/fields/#custom-field-options\",\"summary\":\"Mongoid requires that you only provide valid options on each field definition in order to prevent unexpected behavior later on.\"},\"invalid_field_type\":{\"message\":\"Invalid field type %{type_inspection} for field \\'%{field}\\' on model \\'%{klass}\\'.\",\"resolution\":\"Please provide a valid type value for the field. Refer to: https://www.mongodb.com/docs/mongoid/current/reference/fields/#using-symbols-or-strings-instead-of-classes\",\"summary\":\"Model \\'%{klass}\\' defines a field \\'%{field}\\' with an unknown type value %{type_inspection}.\"},\"invalid_global_executor_concurrency\":{\"message\":\"Invalid global_executor_concurrency option.\",\"resolution\":\"Set global_executor_concurrency option to :global_thread_pool or remove global_executor_concurrency option.\",\"summary\":\"You set global_executor_concurrency while async_query_executor option is not set to :global_thread_pool. The global_executor_concurrency is allowed only for the global thread pool executor.\"},\"invalid_includes\":{\"message\":\"Invalid includes directive: %{klass}.includes(%{args})\",\"resolution\":\"Ensure that each parameter passed to %{klass}.includes is a valid name of an association on the %{klass} model. These are: %{relations}.\",\"summary\":\"Eager loading in Mongoid only supports providing arguments to %{klass}.includes that are the names of associations on the %{klass}.\"},\"invalid_index\":{\"message\":\"Invalid index specification on %{klass}: %{spec}, %{options}\",\"resolution\":\"Ensure that the index conforms to the correct syntax and has the correct options.\\\\n\\\\n Valid options are:\\\\n   background: true|false\\\\n   database: \\'database_name\\'\\\\n   name: \\'index_name\\'\\\\n   sparse: true|false\\\\n   unique: true|false\\\\n   min: 1\\\\n   max: 1\\\\n   bits: 26\\\\n   key: 26\\\\n   bucket_size : 1\\\\n   sphere_version : 1\\\\n   text_version : 1\\\\n   version : 1\\\\n   weights: { content: 1, title: 2 }\\\\n   expire_after_seconds: number_of_seconds\\\\n   partial_filter_expression\\\\n   storage_engine\\\\n   language_override\\\\n   default_language\\\\n   collation\\\\n   wildcard_projection: { \\'path.to.field.a\\': 1, \\'path.to.field.b\\': 0 }\\\\n Valid types are: 1, -1, \\'2d\\', \\'2dsphere\\', \\'geoHaystack (deprecated)\\', \\'text\\', \\'hashed\\'\\\\n\\\\n Example:\\\\n   class Band\\\\n     include Mongoid::Document\\\\n     index({ name: 1, label: -1 }, { sparse: true })\\\\n     index({ location: \\'2d\\' }, { background: true })\\\\n   end\\\\n\\\\n\",\"summary\":\"Indexes in Mongoid are defined as a hash of field name and direction/2d pairs, with a hash for any additional options.\"},\"invalid_options\":{\"message\":\"Invalid option :%{invalid} provided to association :%{name}.\",\"resolution\":\"Valid options are: %{valid}, make sure these are the ones you are using.\",\"summary\":\"Mongoid checks the options that are passed to the association macros to ensure that no ill side effects occur by letting something slip by.\"},\"invalid_path\":{\"message\":\"Having a root path assigned for %{klass} is invalid.\",\"resolution\":\"Most likely your embedded model, %{klass} is also referenced via a has_many from a root document in another collection. Double check the association definitions and fix any instances where embedded documents are improperly referenced from other collections.\",\"summary\":\"Mongoid has two different path objects for determining the location of a document in the database, Root and Embedded. This error is raised when an embedded document somehow gets a root path assigned.\"},\"invalid_persistence_option\":{\"message\":\"Invalid persistence option :%{invalid}.\",\"resolution\":\"Valid options are: %{valid}, make sure these are the ones you are using.\",\"summary\":\"The options used to change the persistence context must be one of the valid options for a mongo client, or a collection name.\"},\"invalid_relation\":{\"message\":\"Defining an association named \\'%{name}\\' is not allowed.\",\"resolution\":\"Use Mongoid.destructive_fields to see what names are not allowed, and don\\'t use these names. These include names that also conflict with core Ruby methods on Object, Module, Enumerable, or included gems that inject methods into these or Mongoid internals.\",\"summary\":\"Defining this association would override the method \\'%{name}\\', which would cause issues with expectations around the original method and cause extremely hard to debug issues. The original method was defined in:\\\\n   Object: %{origin}\\\\n   File: %{file}\\\\n   Line: %{line}\"},\"invalid_relation_option\":{\"message\":\"Invalid association option :%{option} for association \\'%{name}\\' on class %{klass}.\",\"resolution\":\"Valid options are: %{valid_options}, make sure you use only those.\",\"summary\":\"An invalid option was provided for an association.\"},\"invalid_scope\":{\"message\":\"Defining a scope of value %{value} on %{klass} is not allowed.\",\"resolution\":\"Change the scope to be a proc wrapped criteria.\\\\n\\\\n Example:\\\\n   class Band\\\\n     include Mongoid::Document\\\\n     scope :inactive, -\\\\u003e{ where(active: false) }\\\\n   end\\\\n\\\\n\",\"summary\":\"Scopes in Mongoid must be procs that wrap criteria objects.\"},\"invalid_session_nesting\":{\"message\":\"A session was started while another session was being used.\",\"resolution\":\"Only use one session at a time; sessions cannot be nested.\",\"summary\":\"Sessions cannot be nested. Only one session can be used in a thread at once.\"},\"invalid_session_use\":{\"message\":\"A session was attempted to be used with a model whose client cannot use that session.\",\"resolution\":\"Only execute operations on the model class or instances of the model through which the session was created. Otherwise, ensure that all models on which operations are executed in the session block share the same driver client. For example, a model may have a different client specified in its \\'store_in\\' options.\\\\n\\\\n\",\"summary\":\"Sessions are started via driver clients (Model#mongo_client) and, in most cases, driver clients are shared across models. When different models have their own clients, a session cannot be obtained via one model and used for operations on another model.\"},\"invalid_set_polymorphic_relation\":{\"message\":\"The %{name} attribute can\\'t be set to an instance of %{other_klass} as %{other_klass} has multiple associations referencing %{klass} as %{name}.\",\"resolution\":\"Set the values from the parent, or redefine the association with only a single definition in the parent.\",\"summary\":\"If the parent class of a polymorphic association has multiple definitions for the same association, the values must be set from the parent side and not the child side since Mongoid cannot determine from the child side which association to go in.\"},\"invalid_storage_options\":{\"message\":\"Invalid options passed to %{klass}.store_in: %{options}.\",\"resolution\":\"Change the options passed to store_in to match the documented API, and ensure all keys in the options hash are symbols.\\\\n\\\\n Example:\\\\n   class Band\\\\n     include Mongoid::Document\\\\n     store_in collection: \\'artists\\', database: \\'music\\'\\\\n   end\\\\n\\\\n\",\"summary\":\"The :store_in macro takes only a hash of parameters with the keys :database, :collection, :collection_options, or :client.\"},\"invalid_time\":{\"message\":\"\\'%{value}\\' is not a valid Time.\",\"resolution\":\"Make sure to pass parsable values to the field setter for Date, DateTime, and Time objects. When this is a String it needs to be valid for Time.parse. Other objects must be valid to pass to Time.local.\",\"summary\":\"Mongoid tries to serialize the values for Date, DateTime, and Time into proper UTC times to store in the database. The provided value could not be parsed.\"},\"inverse_not_found\":{\"message\":\"When adding a(n) %{klass} to %{base}#%{name}, Mongoid could not determine the inverse foreign key to set. The attempted key was \\'%{inverse}\\'.\",\"resolution\":\"If an inverse is not required, like a belongs_to or has_and_belongs_to_many, ensure that :inverse_of =\\\\u003e nil is set on the association. If the inverse is needed, most likely the inverse cannot be figured out from the names of the associations and you will need to explicitly tell Mongoid on the association what the inverse is.\\\\n\\\\n Example:\\\\n   class Car\\\\n     include Mongoid::Document\\\\n     has_one :engine, class_name: \\\\\"Motor\\\\\", inverse_of: :machine\\\\n   end\\\\n\\\\n   class Motor\\\\n     include Mongoid::Document\\\\n     belongs_to :machine, class_name: \\\\\"Car\\\\\", inverse_of: :engine\\\\n   end\",\"summary\":\"When adding a document to an association, Mongoid attempts to link the newly added document to the base of the association in memory, as well as set the foreign key to link them on the database side. In this case Mongoid could not determine what the inverse foreign key was.\"},\"message_title\":\"message\",\"mixed_client_configuration\":{\"message\":\"Both uri and standard configuration options defined for client: \\'%{name}\\'.\",\"resolution\":\"Provide either only a uri as configuration or only standard options.\",\"summary\":\"Instead of simply giving uri or standard options a preference order, Mongoid assumes that you have made a mistake in your configuration and requires that you provide one or the other, but not both. The options that were provided were: %{config}.\"},\"mixed_relations\":{\"message\":\"Referencing a(n) %{embedded} document from the %{root} document via a non-embedded association is not allowed since the %{embedded} is embedded.\",\"resolution\":\"Consider not embedding %{embedded}, or do the key storage and access in a custom manner in the application code.\",\"summary\":\"In order to properly access a(n) %{embedded} from %{root} the reference would need to go through the root document of %{embedded}. In a simple case this would require Mongoid to store an extra foreign key for the root, in more complex cases where %{embedded} is multiple levels deep a key would need to be stored for each parent up the hierarchy.\"},\"nested_attributes_metadata_not_found\":{\"message\":\"Could not find metadata for association \\'%{name}\\' on model: %{klass}.\",\"resolution\":\"Make sure that there is an association defined named \\'%{name}\\' on %{klass} or that the association definition comes before the accepts_nested_attributes_for macro in the model - order matters so that Mongoid has access to the metadata.\\\\n\\\\n Example:\\\\n   class Band\\\\n     include Mongoid::Document\\\\n     has_many :albums\\\\n     accepts_nested_attributes_for :albums\\\\n   end\\\\n\\\\n\",\"summary\":\"When defining nested attributes for an association, Mongoid needs to access the metadata for the association \\'%{name}\\' in order if add autosave functionality to it, if applicable. Either no association named \\'%{name}\\' could be found, or the association had not been defined yet.\"},\"no_client_config\":{\"message\":\"No configuration could be found for a client named \\'%{name}\\'.\",\"resolution\":\"Double check your mongoid.yml to make sure under the clients key that a configuration exists for \\'%{name}\\'. If you have set the configuration programmatically, ensure that \\'%{name}\\' exists in the configuration hash.\",\"summary\":\"When attempting to create the new client, Mongoid could not find a client configuration for the name: \\'%{name}\\'. This is necessary in order to know the host, port, and options needed to connect.\"},\"no_client_database\":{\"message\":\"No database provided for client configuration: :%{name}.\",\"resolution\":\"If configuring via a mongoid.yml, ensure that within your :%{name} section a :database value for the client\\'s default database is defined.\\\\n\\\\n Example:\\\\n   development:\\\\n     clients:\\\\n       %{name}:\\\\n         database: my_app_db\\\\n         hosts:\\\\n           - localhost:27017\\\\n\\\\n\",\"summary\":\"Each client configuration must provide a database so Mongoid knows where the default database to persist to. What was provided was: %{config}.\"},\"no_client_hosts\":{\"message\":\"No hosts provided for client configuration: :%{name}.\",\"resolution\":\"If configuring via a mongoid.yml, ensure that within your :%{name} section a :hosts value for the client hosts is defined.\\\\n\\\\n Example:\\\\n   development:\\\\n     clients:\\\\n       %{name}:\\\\n         database: my_app_db\\\\n         hosts:\\\\n           - localhost:27017\\\\n\\\\n\",\"summary\":\"Each client configuration must provide hosts so Mongoid knows where the database server is located. What was provided was: %{config}.\"},\"no_clients_config\":{\"message\":\"No clients configuration provided.\",\"resolution\":\"Double check your mongoid.yml to make sure that you have a top-level clients key with at least 1 default client configuration for it. You can regenerate a new mongoid.yml for assistance via `rails g mongoid:config`.\\\\n\\\\n Example:\\\\n   development:\\\\n     clients:\\\\n       default:\\\\n         database: mongoid_dev\\\\n         hosts:\\\\n           - localhost:27017\\\\n\\\\n\",\"summary\":\"Mongoid\\'s configuration requires that you provide details about each client that can be connected to, and requires in the clients config at least 1 default client to exist.\"},\"no_default_client\":{\"message\":\"No default client configuration is defined.\",\"resolution\":\"If configuring via a mongoid.yml, ensure that within your :clients section a :default client is defined.\\\\n\\\\n Example:\\\\n   development:\\\\n     clients:\\\\n       default:\\\\n         hosts:\\\\n           - localhost:27017\\\\n\\\\n\",\"summary\":\"The configuration provided settings for: %{keys}, but Mongoid requires a :default to be defined at minimum.\"},\"no_documents_found\":{\"message\":\"Could not find a document of class %{klass}.\",\"resolution\":\"Create a document of class %{klass} or use a finder method that does not raise an exception when no documents are found.\",\"summary\":\"Mongoid attempted to find a document of the class %{klass} but none exist.\"},\"no_environment\":{\"message\":\"Could not load the configuration since no environment was defined.\",\"resolution\":\"Please ensure an environment is set in one of the listed locations. The environment must be explicitly set.\",\"summary\":\"Mongoid could not determine the environment to use because it was not specified in any of the following locations: Rails.env, Sinatra::Base.environment, ENV[\\\\\"RACK_ENV\\\\\"], ENV[\\\\\"MONGOID_ENV\\\\\"]. Without knowing the environment, Mongoid cannot load its configuration.\"},\"no_map_reduce_output\":{\"message\":\"No output location was specified for the map/reduce operation.\",\"resolution\":\"Provide the location that the output of the operation is to go by chaining an #out call to the map/reduce.\\\\n\\\\n Example:\\\\n   Band.map_reduce(map, reduce).out(inline: 1)\\\\n\\\\n Valid options for the out function are:\\\\n   inline: 1\\\\n   merge: \\'collection-name\\'\\\\n   replace: \\'collection-name\\'\\\\n   reduce: \\'collection-name\\'\\\\n\\\\n\",\"summary\":\"When executing a map/reduce, you must provide the output location of the results. The attempted command was: %{command}.\"},\"no_metadata\":{\"message\":\"Metadata not found for document of type %{klass}.\",\"resolution\":\"Ensure that your associations on the %{klass} model are all properly defined, and that the inverse associations are also properly defined. Embedded associations must have both the parent (embeds_one/embeds_many) and the inverse (embedded_in) present in order to work properly.\",\"summary\":\"Mongoid sets the metadata of an association on the document when it is either loaded from within the association, or added to one. The presence of the metadata is required in order to provide various functionality around associations. Most likely you are getting this error because the document is embedded and was attempted to be persisted without being associated with a parent, or the association was not properly defined.\"},\"no_parent\":{\"message\":\"Cannot persist embedded document %{klass} without a parent document.\",\"resolution\":\"Ensure that you\\'ve set the parent association if instantiating the embedded document directly, or always create new embedded documents via the parent association.\",\"summary\":\"If the document is embedded, in order to be persisted it must always have a reference to its parent document. This is most likely caused by either calling %{klass}.create or %{klass}.create! without setting the parent document as an attribute.\"},\"readonly_attribute\":{\"message\":\"Attempted to set the readonly attribute \\'%{name}\\' with the value: %{value}.\",\"resolution\":\"Don\\'t define \\'%{name}\\' as readonly, or do not attempt to update its value after the document is persisted.\",\"summary\":\"Attributes flagged as readonly via Model.attr_readonly can only have values set when the document is a new record.\"},\"readonly_document\":{\"message\":\"Attempted to persist a readonly document of class \\'%{klass}\\'.\",\"resolution\":\"Don\\'t attempt to persist documents that are flagged as readonly.\",\"summary\":\"Documents that are marked readonly cannot be persisted.\"},\"resolution_title\":\"resolution\",\"scope_overwrite\":{\"message\":\"Cannot create scope :%{scope_name}, because of existing method %{model_name}.%{scope_name}.\",\"resolution\":\"Change the name of the scope so it does not conflict with the already defined method %{model_name}, or set the configuration option Mongoid.scope_overwrite_exception to false, which is its default. In this case a warning will be logged.\",\"summary\":\"When defining a scope that conflicts with a method that already exists on the model, this error will get raised if Mongoid.scope_overwrite_exception is set to true.\"},\"sessions_not_supported\":{\"message\":\"Sessions are not supported by the connected server(s).\",\"resolution\":\"Verify that all servers in your deployment are at least version 3.6 or don\\'t attempt to use sessions with older server versions.\",\"summary\":\"A session was attempted to be used with a MongoDB server version that doesn\\'t support sessions. Sessions are supported in MongoDB server versions 3.6 and higher.\"},\"summary_title\":\"summary\",\"too_many_nested_attribute_records\":{\"message\":\"Accepting nested attributes for %{association} is limited to %{limit} documents.\",\"resolution\":\"The limit is set as an option to the macro, for example: accepts_nested_attributes_for :%{association}, limit: %{limit}. Consider raising this limit or making sure no more are sent than the set value.\",\"summary\":\"More documents were sent to be processed than the allowed limit.\"},\"unknown_attribute\":{\"message\":\"Attempted to set a value for \\'%{name}\\' which is not allowed on the model %{klass}.\",\"resolution\":\"Define the field \\'%{name}\\' in %{klass}, or include Mongoid::Attributes::Dynamic in %{klass} if you intend to store values in fields that are not explicitly defined.\",\"summary\":\"%{klass}#%{name}= was called but there is no \\'%{name}\\' field defined in the model, and Mongoid::Attributes::Dynamic is not included. This error is also raised instead of NoMethodError if the unknown attribute is passed to any method that accepts an attributes hash, such as #attributes=.\"},\"unknown_model\":{\"message\":\"Attempted to instantiate an object of the unknown model \\'%{klass}\\'.\",\"resolution\":\"The _type field is a reserved one used by Mongoid to determine the class for instantiating an object. Please don\\'t save data in this field or ensure that any values in this field correspond to valid models.\",\"summary\":\"A document with the value \\'%{value}\\' at the key \\'_type\\' was used to instantiate a model object but Mongoid cannot find this Class.\"},\"unsaved_document\":{\"message\":\"Attempted to save %{document} before the parent %{base}.\",\"resolution\":\"Make sure to only use create or create! when the parent document %{base} is persisted.\",\"summary\":\"You cannot call create or create! through the association (%{document}) whose parent (%{base}) is not already saved. This would cause the database to be out of sync since the child could potentially reference a nonexistent parent.\"},\"unsupported_javascript\":{\"message\":\"Executing Javascript $where selector on an embedded criteria is not supported.\",\"resolution\":\"Please provide a standard hash to #where when the criteria is for an embedded association.\",\"summary\":\"Mongoid only supports providing a hash of arguments to #where criterion on embedded documents. Since %{klass} is embedded, the expression %{javascript} is not allowed.\"},\"validations\":{\"message\":\"Validation of %{document} failed.\",\"resolution\":\"Try persisting the document with valid data or remove the validations.\",\"summary\":\"The following errors were found: %{errors}\"}}}},\"number\":{\"currency\":{\"format\":{\"delimiter\":\",\",\"format\":\"%u%n\",\"negative_format\":\"-%u%n\",\"precision\":2,\"separator\":\".\",\"significant\":false,\"strip_insignificant_zeros\":false,\"unit\":\"$\"}},\"format\":{\"delimiter\":\",\",\"precision\":3,\"round_mode\":\"default\",\"separator\":\".\",\"significant\":false,\"strip_insignificant_zeros\":false},\"human\":{\"decimal_units\":{\"format\":\"%n %u\",\"units\":{\"billion\":\"Billion\",\"million\":\"Million\",\"quadrillion\":\"Quadrillion\",\"thousand\":\"Thousand\",\"trillion\":\"Trillion\",\"unit\":\"\"}},\"format\":{\"delimiter\":\"\",\"precision\":3,\"significant\":true,\"strip_insignificant_zeros\":true},\"storage_units\":{\"format\":\"%n %u\",\"units\":{\"byte\":{\"one\":\"Byte\",\"other\":\"Bytes\"},\"eb\":\"EB\",\"gb\":\"GB\",\"kb\":\"KB\",\"mb\":\"MB\",\"pb\":\"PB\",\"tb\":\"TB\",\"zb\":\"ZB\"}}},\"nth\":{},\"percentage\":{\"format\":{\"delimiter\":\"\",\"format\":\"%n%\"}},\"precision\":{\"format\":{\"delimiter\":\"\"}}},\"simple_form\":{\"error_notification\":{\"default_message\":\"Please review the problems below:\"},\"no\":\"No\",\"required\":{\"mark\":\"*\",\"text\":\"required\"},\"yes\":\"Yes\"},\"support\":{\"array\":{\"last_word_connector\":\", and \",\"two_words_connector\":\" and \",\"words_connector\":\", \"}},\"time\":{\"am\":\"am\",\"formats\":{\"default\":\"%a, %d %b %Y %H:%M:%S %z\",\"long\":\"%B %d, %Y %H:%M\",\"short\":\"%d %b %H:%M\"},\"pm\":\"pm\"},\"users\":{\"confirmations\":{\"new\":{\"legend\":\"Resend your %{brand_name} confirmation instructions\",\"message\":\"We need to confirm your email address to complete the sign up process. Supply your email address, below, and we will send you instructions on how to confirm your address.\",\"submit_button\":\"Send Confirmation Instructions\",\"title\":\"Resend confirmation instructions | %{brand_name}\"},\"show\":{\"legend\":\"Check your inbox for a confirmation email\",\"message\":\"If your e-mail exists in our database we have sent you a message with instructions. Check your inbox (or spam folder) for a message from \\'%{default_from_email}\\' containing the confirmation link.\",\"title\":\"Awaiting confirmation | %{brand_name}\"}},\"passwords\":{\"new\":{\"failures\":\"Note: If you make more than 5 sequential failed attempts to sign in with your %{brand_name} password, your account will be (temporarily) locked. Check your inbox for instruction on how to unlock your account, or we can\",\"legend\":\"Reset your %{brand_name} password\",\"message\":\"Supply your email address, below, and we will send you instructions on how to reset your password.\",\"resend_link\":\"resend a new set of unlock instructions\",\"submit_button\":\"Send Reset Instructions\",\"title\":\"Reset password | %{brand_name}\"},\"show\":{\"didnt_receive_email\":\"Didn\\'t receive the email?\",\"legend\":\"Password reset instructions sent\",\"message\":\"If your e-mail exists in our database we have sent you a message with password reset instructions. Check your inbox (or spam folder) for a message from \\'%{default_from_email}\\'.\",\"resend_link\":\"you can request another one here\",\"title\":\"Awaiting reset | %{brand_name}\"}}},\"will_paginate\":{\"container_aria_label\":\"Pagination\",\"next_label\":\"Next \\\\u0026#8594;\",\"page_aria_label\":\"Page %{page}\",\"page_entries_info\":{\"multi_page\":\"Displaying %{model} %{from} - %{to} of %{count} in total\",\"multi_page_html\":\"Displaying %{model} \\\\u003cb\\\\u003e%{from}\\\\u0026nbsp;-\\\\u0026nbsp;%{to}\\\\u003c/b\\\\u003e of \\\\u003cb\\\\u003e%{count}\\\\u003c/b\\\\u003e in total\",\"single_page\":{\"one\":\"Displaying 1 %{model}\",\"other\":\"Displaying all %{count} %{model}\",\"zero\":\"No %{model} found\"},\"single_page_html\":{\"one\":\"Displaying \\\\u003cb\\\\u003e1\\\\u003c/b\\\\u003e %{model}\",\"other\":\"Displaying \\\\u003cb\\\\u003eall\\\\u0026nbsp;%{count}\\\\u003c/b\\\\u003e %{model}\",\"zero\":\"No %{model} found\"}},\"page_gap\":\"\\\\u0026hellip;\",\"previous_label\":\"\\\\u0026#8592; Previous\"}}'));\nI18n.translations[\"ja\"] = I18n.extend((I18n.translations[\"ja\"] || {}), JSON.parse('{\"activerecord\":{\"errors\":{\"messages\":{\"record_invalid\":\"Validation failed: %{errors}\",\"restrict_dependent_destroy\":{\"has_many\":\"Cannot delete record because dependent %{record} exist\",\"has_one\":\"Cannot delete record because a dependent %{record} exists\"}}}},\"bulk_uploads\":{\"email_local_part\":{\"empty_parameter\":\"No file uploaded\",\"error\":\"File Upload failed: %{error_message}\",\"success\":\"File was successfully uploaded\"}},\"common\":{\"crm\":{\"salesforce\":{\"forgot_password\":\"If you have forgotten your Salesforce password, please follow the instructions provided on the Salesforce sign in page.\",\"sign_in_button\":\"Sign In with Salesforce\"}}},\"contact\":{\"default_from_email\":\"info@zymewire.com\",\"phone_numbers\":[{\"label\":\"US\",\"phone\":\"1-844-996-3321\"},{\"label\":\"UK\",\"phone\":\"+44-208-133-9963\"}],\"support_email\":\"support@zymewire.com\"},\"date\":{\"abbr_day_names\":[\"Sun\",\"Mon\",\"Tue\",\"Wed\",\"Thu\",\"Fri\",\"Sat\"],\"abbr_month_names\":[null,\"Jan\",\"Feb\",\"Mar\",\"Apr\",\"May\",\"Jun\",\"Jul\",\"Aug\",\"Sep\",\"Oct\",\"Nov\",\"Dec\"],\"day_names\":[\"Sunday\",\"Monday\",\"Tuesday\",\"Wednesday\",\"Thursday\",\"Friday\",\"Saturday\"],\"formats\":{\"default\":\"%Y-%m-%d\",\"long\":\"%B %d, %Y\",\"short\":\"%b %d\"},\"month_names\":[null,\"January\",\"February\",\"March\",\"April\",\"May\",\"June\",\"July\",\"August\",\"September\",\"October\",\"November\",\"December\"],\"order\":[\"year\",\"month\",\"day\"]},\"datetime\":{\"distance_in_words\":{\"about_x_hours\":{\"one\":\"about 1 hour\",\"other\":\"about %{count} hours\"},\"about_x_months\":{\"one\":\"about 1 month\",\"other\":\"about %{count} months\"},\"about_x_years\":{\"one\":\"about 1 year\",\"other\":\"about %{count} years\"},\"almost_x_years\":{\"one\":\"almost 1 year\",\"other\":\"almost %{count} years\"},\"half_a_minute\":\"half a minute\",\"less_than_x_minutes\":{\"one\":\"less than a minute\",\"other\":\"less than %{count} minutes\"},\"less_than_x_seconds\":{\"one\":\"less than 1 second\",\"other\":\"less than %{count} seconds\"},\"over_x_years\":{\"one\":\"over 1 year\",\"other\":\"over %{count} years\"},\"x_days\":{\"one\":\"1 day\",\"other\":\"%{count} days\"},\"x_minutes\":{\"one\":\"1 minute\",\"other\":\"%{count} minutes\"},\"x_months\":{\"one\":\"1 month\",\"other\":\"%{count} months\"},\"x_seconds\":{\"one\":\"1 second\",\"other\":\"%{count} seconds\"}},\"prompts\":{\"day\":\"Day\",\"hour\":\"Hour\",\"minute\":\"Minute\",\"month\":\"Month\",\"second\":\"Seconds\",\"year\":\"Year\"}},\"default_host\":\"https://www.zymewire.com\",\"devise\":{\"confirmations\":{\"confirmed\":\"Your account was successfully confirmed. Please sign in.\",\"send_instructions\":\"Your email has not been confirmed. We need to confirm your email account before you can sign in. Please check your inbox or spam folder for an email from \\'info@zymewire.com\\' or request a new one.\",\"send_paranoid_instructions\":\"If your e-mail exists on our database, you will receive an email with instructions about how to confirm your account in a few minutes.\"},\"failure\":{\"already_authenticated\":\"You are already signed in.\",\"expired\":\"活動がなかったため、あなたのアカウントは期限切れとなりました。サイト管理者に連絡してください。\",\"inactive\":\"Your account was not activated yet.\",\"invalid\":\"Invalid email or password. If you use Salesforce, use the \\'Have Salesforce?\\' panel.\",\"invalid_token\":\"Invalid authentication token.\",\"last_attempt\":\"You have one more attempt before your account is locked.\",\"locked\":\"Your account is locked.\",\"not_active\":\"Your account has been de-activated, if you think this is a mistake please contact us\",\"not_found_in_database\":\"Invalid %{authentication_keys} or password.\",\"session_limited\":\"他のブラウザでログインされました。このブラウザで続ける場合は、もう一度サインインしてください。\",\"timeout\":\"Your session expired, please sign in again to continue.\",\"unauthenticated\":\"You need to sign in or sign up before continuing.\",\"unconfirmed\":\"We must confirm your email before you can continue. Please check your inbox or spam folder for a confirmation email from \\'info@zymewire.com\\' or request a new one.\"},\"invalid_captcha\":\"キャプチャ入力が不正です。\",\"invalid_security_question\":\"セキュリティ質問に対する回答が不正です。\",\"mailer\":{\"confirmation_instructions\":{\"subject\":\"Confirmation instructions for Zymewire.com\"},\"email_changed\":{\"subject\":\"Email Changed\"},\"password_change\":{\"subject\":\"Password Changed\"},\"reset_password_instructions\":{\"subject\":\"Reset password instructions for Zymewire.com\"},\"unlock_instructions\":{\"subject\":\"Unlock Instructions for Zymewire.com\"}},\"omniauth_callbacks\":{\"failure\":\"Could not authorize you from %{kind} because \\\\\"%{reason}\\\\\".\",\"success\":\"Successfully authorized from %{kind} account.\"},\"paranoid_verification_code\":{\"show\":{\"submit\":\"参加する\",\"submit_verification_code\":\"確認コードを送信する\",\"verification_code\":\"検証コード\"},\"updated\":\"確認コードを受け入れました\"},\"paranoid_verify\":{\"code_required\":\"サポートチームに提供された認証コードを入力してください。\"},\"password_expired\":{\"change_required\":\"パスワードが期限切れです。パスワードを新しく設定してください。\",\"show\":{\"change_my_password\":\"パスワードを変更する\",\"current_password\":\"現在のパスワード\",\"new_password\":\"新しいパスワード\",\"new_password_confirmation\":\"新しいパスワードを確認\",\"renew_your_password\":\"パスワードを更新する\"},\"updated\":\"新しいパスワードが保存されました。\"},\"passwords\":{\"no_token\":\"You can\\'t access this page without coming from a password reset email. If you do come from a password reset email, please make sure you used the full URL provided.\",\"send_instructions\":\"You will receive an email with instructions about how to reset your password in a few minutes.\",\"send_paranoid_instructions\":\"If your e-mail exists on our database, you will receive a password recovery link on your e-mail\",\"updated\":\"Your password was changed successfully. You are now signed in.\",\"updated_not_active\":\"Your password was changed successfully.\"},\"registrations\":{\"destroyed\":\"Bye! Your account was successfully cancelled. We hope to see you again soon.\",\"signed_up\":\"Welcome! You have signed up successfully.\",\"signed_up_but_inactive\":\"You have signed up successfully. However, we could not sign you in because your account is not yet activated.\",\"signed_up_but_locked\":\"You have signed up successfully. However, we could not sign you in because your account is locked.\",\"signed_up_but_unconfirmed\":\"A message with a confirmation link has been sent to your email address. Please open the link to activate your account.\",\"update_needs_confirmation\":\"You updated your account successfully, but we need to verify your new email address. Please check your email and click on the confirm link to finalize confirming your new email address.\",\"updated\":\"You updated your account successfully.\",\"updated_but_not_signed_in\":\"Your account has been updated successfully, but since your password was changed, you need to sign in again.\"},\"sessions\":{\"already_signed_out\":\"Signed out successfully.\",\"signed_in\":\"Signed in successfully.\",\"signed_out\":\"Signed out successfully.\"},\"unlocks\":{\"send_instructions\":\"You will receive an email with instructions about how to unlock your account in a few minutes.\",\"send_paranoid_instructions\":\"If your account exists, you will receive an email with instructions about how to unlock it in a few minutes.\",\"unlocked\":\"Your account has been unlocked successfully. Please sign in to continue.\"}},\"download\":\"Download\",\"download_30_days\":\"This link will be available for 30 days after which the file will be removed from our servers.\",\"enumerize\":{\"blocklisted_contact\":{\"provider\":{\"insideview\":\"InsideView\",\"zephyr\":\"Zephyr\"}}},\"errors\":{\"format\":\"%{attribute} %{message}\",\"messages\":{\"accepted\":\"must be accepted\",\"already_confirmed\":\"was already confirmed, please try signing in\",\"blank\":\"can\\'t be blank\",\"confirmation\":\"doesn\\'t match %{attribute}\",\"confirmation_period_expired\":\"needs to be confirmed within %{period}, please request a new one\",\"empty\":\"can\\'t be empty\",\"equal_to\":\"must be equal to %{count}\",\"equal_to_current_password\":\"は現在のパスワードと異なるものである必要があります。\",\"equal_to_email\":\"メールとは異なる必要があります\",\"even\":\"must be even\",\"exclusion\":\"is reserved\",\"expired\":\"has expired, please request a new one\",\"greater_than\":\"must be greater than %{count}\",\"greater_than_or_equal_to\":\"must be greater than or equal to %{count}\",\"in\":\"must be in %{count}\",\"inclusion\":\"is not included in the list\",\"invalid\":\"is invalid\",\"less_than\":\"must be less than %{count}\",\"less_than_or_equal_to\":\"must be less than or equal to %{count}\",\"model_invalid\":\"Validation failed: %{errors}\",\"not_a_number\":\"is not a number\",\"not_an_integer\":\"must be an integer\",\"not_found\":\"not found\",\"not_locked\":\"was not locked\",\"not_saved\":{\"one\":\"1 error prohibited this %{resource} from being saved:\",\"other\":\"%{count} errors prohibited this %{resource} from being saved:\"},\"odd\":\"must be odd\",\"other_than\":\"must be other than %{count}\",\"password_complexity\":{\"digit\":{\"one\":\"は最低1つの数字を含む必要があります。\",\"other\":\"は最低%{count}つの数字を含む必要があります。\"},\"lower\":{\"one\":\"は最低1つの小文字英字を含む必要があります。\",\"other\":\"は最低%{count}つの小文字英字を含む必要があります。\"},\"symbol\":{\"one\":\"は最低1つの記号を含む必要があります。\",\"other\":\"は最低%{count}つの記号を含む必要があります。\"},\"upper\":{\"one\":\"は最低1つの大文字英字を含む必要があります。\",\"other\":\"は最低%{count}つの大文字英字を含む必要があります。\"}},\"password_format\":\"Must contain uppercase AND lowercase letters and at least one number\",\"password_too_long\":\"is too long\",\"present\":\"must be blank\",\"required\":\"must exist\",\"taken\":\"has already been taken\",\"taken_in_past\":\"は既に使われています。\",\"too_long\":{\"one\":\"is too long (maximum is 1 character)\",\"other\":\"is too long (maximum is %{count} characters)\"},\"too_short\":{\"one\":\"is too short (minimum is 1 character)\",\"other\":\"is too short (minimum is %{count} characters)\"},\"wrong_length\":{\"one\":\"is the wrong length (should be 1 character)\",\"other\":\"is the wrong length (should be %{count} characters)\"}}},\"flash\":{\"actions\":{\"create\":{\"notice\":\"%{resource_name} was successfully created.\"},\"destroy\":{\"alert\":\"%{resource_name} could not be destroyed.\",\"notice\":\"%{resource_name} was successfully destroyed.\"},\"update\":{\"notice\":\"%{resource_name} was successfully updated.\"}}},\"hello_world\":\"Hello world\",\"helpers\":{\"select\":{\"prompt\":\"Please select\"},\"submit\":{\"create\":\"Create %{model}\",\"submit\":\"Save %{model}\",\"update\":\"Update %{model}\"}},\"hi\":\"Hi\",\"mailers\":{\"common\":{\"chummy_sign_off\":\"Have a good one.\",\"final_note\":\"P.S.: If you think you received this email accidentally, then something weird could be going on. Hit reply and a member of the %{brand_name} team will investigate.\",\"team_sign_off\":\"- The %{brand_name} Team\"},\"confirmation_instructions_email\":{\"crm\":{\"salesforce\":{\"resource_confirmed\":\"Someone has requested a resend of a confirmation email. You do not need to confirm your email address because your account is configured to use Salesforce to sign in.\",\"resource_unconfirmed\":\"You do not need to confirm your email address because your account is configured to use Salesforce to sign in, please complete the sign up process by clicking the button below to sign in to %{brand_name} via Salesforce.\"}},\"non_crm\":{\"confirm_link\":\"Confirm my account\",\"welcome\":\"Welcome to %{brand_name}. As the final step in the process you\\'ll need to confirm your account by clicking on the link below.\"},\"subject\":\"Confirmation instructions for %{domain}\"},\"flagged_events_mailer\":{\"from\":\"Flagged events - %{brand_name} \\\\u003cflagged_events@mailer.%{domain}\\\\u003e\"},\"mobile_registration_email\":{\"alert_cs_registration_locked\":{\"subject\":\"%{brand_name}: user has had mobile registration locked, too many failed attempts\"},\"dispatch_registration_PIN\":{\"further_instructions\":\"If you are NOT attempting to register for the %{brand_name} Mobile app then please let us know at %{support_email_link} - thank you.\",\"introduction\":\"Here is your mobile app registration PIN:\",\"subject\":\"%{brand_name} Mobile Registration Verification\"},\"too_many_failed_attempts\":{\"introduction\":\"We have received too many failed mobile device registration attempts for your account and we will block any further requests. If you have not attempted to register a mobile device with us in the last hour then please let us know as it is likely someone has tried on your behalf. If you have been trying to register a device please contact %{support_email_link} and we can help unlock your account and get you registered.\",\"subject\":\"%{brand_name}: too many failed registration attempts\"}},\"org_list_download_mail\":{\"dispatch_link\":{\"introduction\":\"We have finished meshing your %{crm_brand_name} data with the companies in your \\\\\"%{list_name}\\\\\" list.\",\"subject\":\"%{brand_name}: your file download of \\'%{list_name}\\' is ready\"},\"failed\":{\"instructions\":\"You could try again in a little while. If you already have and are receiving this email again, please contact us at %{support_email_link}\",\"introduction\":\"We are really sorry, but something went wrong with creating your download of %{crm_brand_name} data for your \\\\\"%{list_name}\\\\\" list.\",\"subject\":\"%{brand_name}: your file download of \\'%{list_name}\\' failed\"}},\"reset_password_instructions_email\":{\"crm\":{\"salesforce\":{\"change_requested\":\"Someone has requested a change to your password. Your account is configured to use Salesforce to sign in.\"}},\"fishy_fine_print\":\"If you did not request a password change, then something weird is going on. Someone may be trying to access your account (unsuccessfully). Please reply to this email and let us know. We will take steps to make sure it stops.\",\"non_crm\":{\"change_password_link\":\"Change my password\",\"change_requested\":\"Someone has requested a change to your password, you can do this via the link below.\"},\"subject\":\"Password reset instructions for %{domain}\"},\"sales_force_mail\":{\"processing_completed\":{\"bullet_points\":[\"Only show events associated with companies in your Salesforce account\",\"Add new contacts and accounts to your Salesforce account without leaving %{brand_name}\",\"Access the \\'Salesforce details\\' panel on company dashboards where you can see open tasks, team interactions, opportunities, and more!\"],\"further_instructions\":\"We\\'re here to help. If you run into any questions or challenges, please contact us at %{support_email_link} and a member of our team would be more than happy to help.\",\"get_the_most\":\"To get the most from the integration, check out the \\'Mine Salesforce for opportunities\\' guide in the Help Center.\",\"guide_button\":\"Take me to the guide\",\"introduction\":\"Good news - your Salesforce account is now integrated with %{brand_name}. Now you’ll be able to:\"}},\"segment_contact\":{\"report_manager\":{\"fail_subject\":\"%{brand_name}: The PDF report generation failed\",\"success_subject\":\"%{brand_name}: Your PDF for %{company_name} is attached\"}},\"sf_token_expiry_email\":{\"further_instructions\":\"If you run into any questions or challenges, please contact us at %{support_email_link} and a member of our team would be more than happy to help.\",\"introduction\":\"Unfortunately the connection established for you between %{brand_name} and your %{crm_brand_name} account has expired. We will not be able to update your lists in %{brand_name} to reflect your %{crm_brand_name} database. To re-establish the connection, you just need to log in to %{brand_name} using your %{crm_brand_name}.\",\"subject\":\"%{brand_name} to %{crm_brand_name} connection has expired\"},\"share_list_mail\":{\"introduction\":\"%{user_name} shared a list with you: \",\"subject\":\"[%{brand_name} - shared list] %{list_name}\"},\"trial_expiry_mail\":{\"seven_days_to_go\":{\"further_instructions\":\"A member of our fabulous Customer Success team will arrange a welcome call with you to understand your goals and priorities, and will then give you a personalized Tour de %{brand_name} so you can easily access the information that is most valuable to you.\",\"instructions\":\"If you\\'d like continued access to the platform with our flexible month-to-month subscription, please ensure you contact %{support_email_link} ahead of: %{deadline}\",\"introduction\":\"Time flies when you\\'re uncovering new business opportunities! Your %{brand_name} trial is coming to an end next week.\",\"sign_off\":\"We look forward to helping you reach your sales goals!\",\"subject\":\"Just a heads up that your %{brand_name} trial is ending in seven days\"},\"seven_days_to_go_warning_for_cs\":{\"introduction\":\"%{user_name} shared a list with you: \",\"subject\":\"[%{brand_name} - shared list] %{list_name}\"}},\"unlock_instructions_email\":{\"crm\":{\"salesforce\":{\"change_requested\":\"You are being sent this email either because of one too many unsuccessful non-Salesforce log-in attempts or someone has requested an unlock email. %{brand_name} has not locked your account because your account is configured to use Salesforce to sign in.\",\"password_forgotten\":\"If you have forgotten your Salesforce password or think your account has been locked by Salesforce, please follow the instructions provided on the Salesforce sign in page.\"}},\"fishy_fine_print\":\"If you have not been (unsuccessfully) trying to log in to your account, then something weird is going on. Someone may be trying to access your account (unsuccessfully). Please reply to this email and let us know. We will take steps to make sure it stops.\",\"non_crm\":{\"change_requested\":\"For security reasons we have locked your account because of too many log-in attempts. To unlock your account, click the link below.\",\"unlock_account_link\":\"Unlock my account\"},\"subject\":\"Unlock instructions for %{domain}\"}},\"mongoid\":{\"errors\":{\"messages\":{\"ambiguous_relationship\":{\"message\":\"Ambiguous associations %{candidates} defined on %{klass}.\",\"resolution\":\"On the %{name} association on %{inverse} you must add an :inverse_of option to specify the exact association on %{klass} that is the opposite of %{name}.\",\"summary\":\"When Mongoid attempts to set an inverse document of an association in memory, it needs to know which association it belongs to. When setting %{name}, Mongoid looked on the class %{inverse} for a matching association, but multiples were found that could potentially match: %{candidates}.\"},\"blank_in_locale\":\"can\\'t be blank in %{location}\",\"callbacks\":{\"message\":\"Calling %{method} on %{klass} resulted in a false return from a callback.\",\"resolution\":\"Double check all before callbacks to make sure they are not unintentionally returning false.\",\"summary\":\"If a before callback returns false when using Document.create!, Document#save!, or Document#update_attributes! this error will get raised since the document did not actually get saved.\"},\"calling_document_find_with_nil_is_invalid\":{\"message\":\"Calling Document.find with nil is invalid.\",\"resolution\":\"Most likely this is caused by passing parameters directly through to the find, and the parameter either is not present or the key from which it is accessed is incorrect.\",\"summary\":\"Document.find expects the parameters to be 1 or more ids, and will return a single document if 1 id is provided, otherwise an array of documents if multiple ids are provided.\"},\"create_collection_failure\":{\"message\":\"Cannot create collection %{collection_name} with options %{collection_options}. The following error was raised: %{error}.\",\"resolution\":\"Double check that collection options for the collection %{collection_name} are valid. Consult with Ruby driver documentation and MongoDB documentation if the desired options are supported by your version of the server.\",\"summary\":\"The server rejected createCollection command with given collection options. This may happen when some of the options are invalid, or not supported by your version of the server.\"},\"criteria_argument_required\":{\"message\":\"Calling Criteria methods with nil arguments is not allowed.\",\"resolution\":\"Invoke Criteria methods with non-nil arguments or omit the respective invocations.\",\"summary\":\"Arguments to Criteria methods cannot be nil, and most Criteria methods require at least one argument. Only logical operations (and, or, nor and not), `all\\' and `where\\' can be called without arguments. The method that was called with nil argument was: %{query_method}.\"},\"delete_restriction\":{\"message\":\"Cannot destroy %{document} because of dependent \\'%{relation}\\'.\",\"resolution\":\"Don\\'t attempt to delete the parent %{document} when it has children, or change the dependent option on the association.\",\"summary\":\"When defining \\'%{relation}\\' with a :dependent =\\\\u003e :restrict_with_error, Mongoid will raise an error when attempting to destroy the %{document} when the child \\'%{relation}\\' still has documents in it.\"},\"destroy_restrict_with_error_dependencies_exist\":\"is not empty and prevents the document from being destroyed\",\"document_not_destroyed\":{\"message\":\"%{klass} with id %{id} was not destroyed.\",\"resolution\":\"Check the before/after destroy callbacks to ensure that the return values are truthy for the chain to continue.\",\"summary\":\"When calling %{klass}#destroy! and a callback halts the destroy callback chain by returning a false value, the deletion will not actually occur.\"},\"document_not_found\":{\"message\":\"Document(s) not found for class %{klass} with id(s) %{missing}.\",\"resolution\":\"Search for an id that is in the database or set the Mongoid.raise_not_found_error configuration option to false, which will cause nil to be returned instead of raising this error when searching for a single id, or only the matched documents when searching for multiples.\",\"summary\":\"When calling %{klass}.find with an id or array of ids, each parameter must match a document in the database or this error will be raised. The search was for the id(s): %{searched} (%{total} total) and the following ids were not found: %{missing}.\"},\"document_with_attributes_not_found\":{\"message\":\"Document not found for class %{klass} with attributes %{attributes}.\",\"resolution\":\"Search for attributes that are in the database or set the Mongoid.raise_not_found_error configuration option to false, which will cause nil to be returned instead of raising this error.\",\"summary\":\"When calling %{klass}.find_by with a hash of attributes, all attributes provided must match a document in the database or this error will be raised.\"},\"document_with_shard_key_not_found\":{\"message\":\"Document not found for class %{klass} with id %{missing} and shard key %{shard_key}.\",\"resolution\":\"Search for an id/shard key that is in the database or set the Mongoid.raise_not_found_error configuration option to false, which will cause nil to be returned instead of raising this error.\",\"summary\":\"When calling %{klass}.find with an id and a shard key, each parameter must match a document in the database or this error will be raised. The search was for the id: %{missing} with shard_key: %{shard_key} and it was not found.\"},\"drop_collection_failure\":{\"message\":\"Cannot drop collection %{collection_name}.\",\"resolution\":\"Try to drop the collection manually using Ruby driver or mongo shell.\",\"summary\":\"Mongoid tried to drop collection %{collection_name}, but the collection still exists in the database.\"},\"empty_config_file\":{\"message\":\"Empty configuration file: %{path}.\",\"resolution\":\"Ensure your configuration file contains the correct contents. Refer to: https://www.mongodb.com/docs/mongoid/current/reference/configuration/\",\"summary\":\"Your mongoid.yml configuration file appears to be empty.\"},\"immutable_attribute\":{\"message\":\"Attempted to change the immutable attribute \\'%{name}\\' with the value: %{value}.\",\"resolution\":\"Do not attempt to update the value of \\'%{name}\\' after the document is persisted.\",\"summary\":\"Immutable attributes can only have values set when the document is a new record.\"},\"in_memory_collation_not_supported\":{\"message\":\"A collation option cannot be applied when querying documents in-memory.\",\"resolution\":\"Remove the collation option from the query.\",\"summary\":\"The query being run against documents in memory has a collation option set. A collation option is only supported if the query is executed on a MongoDB server with version \\\\u003e= 3.4.\"},\"invalid_async_query_executor\":{\"message\":\"Invalid async_query_executor option: %{executor}.\",\"resolution\":\"Pick an allowed option or fix the typo. If you were expecting the option to be there, please consult the following page with respect to Mongoid\\'s configuration:\\\\n\\\\n   https://www.mongodb.com/docs/mongoid/current/reference/configuration/#mongoid-configuration-options\",\"summary\":\"A invalid async query executor was specified. The valid options are: %{options}.\"},\"invalid_collection\":{\"message\":\"Access to the collection for %{klass} is not allowed.\",\"resolution\":\"For access to the collection that the embedded document is in, use %{klass}#_root.collection, or do not attempt to persist an embedded document without a parent set.\",\"summary\":\"%{klass}.collection was called, and %{klass} is an embedded document - it resides within the collection of the root document of the hierarchy.\"},\"invalid_config_file\":{\"message\":\"Invalid configuration file: %{path}.\",\"resolution\":\"Ensure your configuration file contains the correct contents. Refer to: https://www.mongodb.com/docs/mongoid/current/reference/configuration/\",\"summary\":\"Your mongoid.yml configuration file does not contain the correct file structure.\"},\"invalid_config_option\":{\"message\":\"Invalid configuration option: %{name}.\",\"resolution\":\"Remove the invalid option or fix the typo. If you were expecting the option to be there, please consult the following page with respect to Mongoid\\'s configuration:\\\\n\\\\n   http://mongoid.org/en/mongoid/docs/installation.html\",\"summary\":\"A invalid configuration option was provided in your mongoid.yml, or a typo is potentially present. The valid configuration options are: %{options}.\"},\"invalid_dependent_strategy\":{\"message\":\"Invalid dependent strategy: %{invalid_strategy}.\",\"resolution\":\"Change the dependent strategy to one of the valid types.\",\"summary\":\"An invalid dependent strategy was defined for the association: %{association}. The valid strategies are: %{valid_strategies}.\"},\"invalid_discriminator_key_target\":{\"message\":\"Setting the discriminator key on a child class is not allowed.\",\"resolution\":\"Try setting the discriminator key on %{superclass} or one of %{class_name}\\'s ancestors.\",\"summary\":\"The discriminator key on the class %{class_name} was attempted to be changed. Changing the discriminator key on a child class is not allowed.\"},\"invalid_dot_dollar_assignment\":{\"message\":\"Cannot set the %{attr} attribute on the %{klass} class.\",\"resolution\":\"In order to set fields that start with a dollar sign ($) or contain a dot/period (.), the aggregation pipeline can be used. MongoDB provides specific operators for working with these fields. Refer to the MongoDB documentation here: https://www.mongodb.com/docs/manual/core/dot-dollar-considerations/\",\"summary\":\"Calling the setters for fields that start with a dollar sign ($) or contain a dot/period (.) is prohibited. See the Mongoid documentation on Field Names with Dots/Periods (.) and Dollar Signs ($) for more information.\"},\"invalid_elem_match_operator\":{\"message\":\"Invalid $elemMatch operator \\'%{operator}\\'.\",\"resolution\":\"Valid field operators are: %{valid_operators}. Ensure you are using one of these operators.\",\"summary\":\"You misspelled an operator or are using an operator that Mongoid does not support.\"},\"invalid_estimated_count_criteria\":{\"message\":\"Invalid criteria for estimated_count.\",\"resolution\":\"Try calling estimated_count directly on the class: %{class_name}.estimated_count.\\\\n\\\\n  If the class defines a default scope, use unscoped: %{class_name}.unscoped.estimated_count.\",\"summary\":\"Estimated count is strictly a collection-level operation and cannot be called on a filtered criteria.\"},\"invalid_expression_operator\":{\"message\":\"Invalid expression operator \\'%{operator}\\'.\",\"resolution\":\"Valid expression operators are: %{valid_operators}. Ensure you are using one of these operators.\",\"summary\":\"You misspelled an operator, are using an operator that Mongoid does not support, or are trying to use a field-level operator on expression level.\"},\"invalid_field\":{\"message\":\"Defining a field named \\'%{field}\\' is not allowed.\",\"resolution\":\"Use Mongoid.destructive_fields to see what names are not allowed, and don\\'t use these names. These include names that also conflict with core Ruby methods on Object, Module, Enumerable, or included gems that inject methods into these or Mongoid internals.\",\"summary\":\"Defining this field would override the method \\'%{name}\\', which would cause issues with expectations around the original method and cause extremely hard to debug issues. The original method was defined in:\\\\n   Object: %{origin}\\\\n   File: %{file}\\\\n   Line: %{line}\"},\"invalid_field_operator\":{\"message\":\"Invalid field operator \\'%{operator}\\'.\",\"resolution\":\"Valid field operators are: %{valid_operators}. Ensure you are using one of these operators.\",\"summary\":\"You misspelled an operator, are using an operator that Mongoid does not support, or are trying to use an expression-level operator on field level.\"},\"invalid_field_option\":{\"message\":\"Invalid option :%{option} provided for field :%{name}.\",\"resolution\":\"When defining the field :%{name} on \\'%{klass}\\', please provide valid options for the field. These are currently: %{valid}. If you meant to define a custom field option, please do so first as follows:\\\\n\\\\n   Mongoid::Fields.option :%{option} do |model, field, value|\\\\n     # Your logic here...\\\\n   end\\\\n   class %{klass}\\\\n     include Mongoid::Document\\\\n     field :%{name}, %{option}: true\\\\n   end\\\\n\\\\n Refer to: https://www.mongodb.com/docs/mongoid/current/reference/fields/#custom-field-options\",\"summary\":\"Mongoid requires that you only provide valid options on each field definition in order to prevent unexpected behavior later on.\"},\"invalid_field_type\":{\"message\":\"Invalid field type %{type_inspection} for field \\'%{field}\\' on model \\'%{klass}\\'.\",\"resolution\":\"Please provide a valid type value for the field. Refer to: https://www.mongodb.com/docs/mongoid/current/reference/fields/#using-symbols-or-strings-instead-of-classes\",\"summary\":\"Model \\'%{klass}\\' defines a field \\'%{field}\\' with an unknown type value %{type_inspection}.\"},\"invalid_global_executor_concurrency\":{\"message\":\"Invalid global_executor_concurrency option.\",\"resolution\":\"Set global_executor_concurrency option to :global_thread_pool or remove global_executor_concurrency option.\",\"summary\":\"You set global_executor_concurrency while async_query_executor option is not set to :global_thread_pool. The global_executor_concurrency is allowed only for the global thread pool executor.\"},\"invalid_includes\":{\"message\":\"Invalid includes directive: %{klass}.includes(%{args})\",\"resolution\":\"Ensure that each parameter passed to %{klass}.includes is a valid name of an association on the %{klass} model. These are: %{relations}.\",\"summary\":\"Eager loading in Mongoid only supports providing arguments to %{klass}.includes that are the names of associations on the %{klass}.\"},\"invalid_index\":{\"message\":\"Invalid index specification on %{klass}: %{spec}, %{options}\",\"resolution\":\"Ensure that the index conforms to the correct syntax and has the correct options.\\\\n\\\\n Valid options are:\\\\n   background: true|false\\\\n   database: \\'database_name\\'\\\\n   name: \\'index_name\\'\\\\n   sparse: true|false\\\\n   unique: true|false\\\\n   min: 1\\\\n   max: 1\\\\n   bits: 26\\\\n   key: 26\\\\n   bucket_size : 1\\\\n   sphere_version : 1\\\\n   text_version : 1\\\\n   version : 1\\\\n   weights: { content: 1, title: 2 }\\\\n   expire_after_seconds: number_of_seconds\\\\n   partial_filter_expression\\\\n   storage_engine\\\\n   language_override\\\\n   default_language\\\\n   collation\\\\n   wildcard_projection: { \\'path.to.field.a\\': 1, \\'path.to.field.b\\': 0 }\\\\n Valid types are: 1, -1, \\'2d\\', \\'2dsphere\\', \\'geoHaystack (deprecated)\\', \\'text\\', \\'hashed\\'\\\\n\\\\n Example:\\\\n   class Band\\\\n     include Mongoid::Document\\\\n     index({ name: 1, label: -1 }, { sparse: true })\\\\n     index({ location: \\'2d\\' }, { background: true })\\\\n   end\\\\n\\\\n\",\"summary\":\"Indexes in Mongoid are defined as a hash of field name and direction/2d pairs, with a hash for any additional options.\"},\"invalid_options\":{\"message\":\"Invalid option :%{invalid} provided to association :%{name}.\",\"resolution\":\"Valid options are: %{valid}, make sure these are the ones you are using.\",\"summary\":\"Mongoid checks the options that are passed to the association macros to ensure that no ill side effects occur by letting something slip by.\"},\"invalid_path\":{\"message\":\"Having a root path assigned for %{klass} is invalid.\",\"resolution\":\"Most likely your embedded model, %{klass} is also referenced via a has_many from a root document in another collection. Double check the association definitions and fix any instances where embedded documents are improperly referenced from other collections.\",\"summary\":\"Mongoid has two different path objects for determining the location of a document in the database, Root and Embedded. This error is raised when an embedded document somehow gets a root path assigned.\"},\"invalid_persistence_option\":{\"message\":\"Invalid persistence option :%{invalid}.\",\"resolution\":\"Valid options are: %{valid}, make sure these are the ones you are using.\",\"summary\":\"The options used to change the persistence context must be one of the valid options for a mongo client, or a collection name.\"},\"invalid_relation\":{\"message\":\"Defining an association named \\'%{name}\\' is not allowed.\",\"resolution\":\"Use Mongoid.destructive_fields to see what names are not allowed, and don\\'t use these names. These include names that also conflict with core Ruby methods on Object, Module, Enumerable, or included gems that inject methods into these or Mongoid internals.\",\"summary\":\"Defining this association would override the method \\'%{name}\\', which would cause issues with expectations around the original method and cause extremely hard to debug issues. The original method was defined in:\\\\n   Object: %{origin}\\\\n   File: %{file}\\\\n   Line: %{line}\"},\"invalid_relation_option\":{\"message\":\"Invalid association option :%{option} for association \\'%{name}\\' on class %{klass}.\",\"resolution\":\"Valid options are: %{valid_options}, make sure you use only those.\",\"summary\":\"An invalid option was provided for an association.\"},\"invalid_scope\":{\"message\":\"Defining a scope of value %{value} on %{klass} is not allowed.\",\"resolution\":\"Change the scope to be a proc wrapped criteria.\\\\n\\\\n Example:\\\\n   class Band\\\\n     include Mongoid::Document\\\\n     scope :inactive, -\\\\u003e{ where(active: false) }\\\\n   end\\\\n\\\\n\",\"summary\":\"Scopes in Mongoid must be procs that wrap criteria objects.\"},\"invalid_session_nesting\":{\"message\":\"A session was started while another session was being used.\",\"resolution\":\"Only use one session at a time; sessions cannot be nested.\",\"summary\":\"Sessions cannot be nested. Only one session can be used in a thread at once.\"},\"invalid_session_use\":{\"message\":\"A session was attempted to be used with a model whose client cannot use that session.\",\"resolution\":\"Only execute operations on the model class or instances of the model through which the session was created. Otherwise, ensure that all models on which operations are executed in the session block share the same driver client. For example, a model may have a different client specified in its \\'store_in\\' options.\\\\n\\\\n\",\"summary\":\"Sessions are started via driver clients (Model#mongo_client) and, in most cases, driver clients are shared across models. When different models have their own clients, a session cannot be obtained via one model and used for operations on another model.\"},\"invalid_set_polymorphic_relation\":{\"message\":\"The %{name} attribute can\\'t be set to an instance of %{other_klass} as %{other_klass} has multiple associations referencing %{klass} as %{name}.\",\"resolution\":\"Set the values from the parent, or redefine the association with only a single definition in the parent.\",\"summary\":\"If the parent class of a polymorphic association has multiple definitions for the same association, the values must be set from the parent side and not the child side since Mongoid cannot determine from the child side which association to go in.\"},\"invalid_storage_options\":{\"message\":\"Invalid options passed to %{klass}.store_in: %{options}.\",\"resolution\":\"Change the options passed to store_in to match the documented API, and ensure all keys in the options hash are symbols.\\\\n\\\\n Example:\\\\n   class Band\\\\n     include Mongoid::Document\\\\n     store_in collection: \\'artists\\', database: \\'music\\'\\\\n   end\\\\n\\\\n\",\"summary\":\"The :store_in macro takes only a hash of parameters with the keys :database, :collection, :collection_options, or :client.\"},\"invalid_time\":{\"message\":\"\\'%{value}\\' is not a valid Time.\",\"resolution\":\"Make sure to pass parsable values to the field setter for Date, DateTime, and Time objects. When this is a String it needs to be valid for Time.parse. Other objects must be valid to pass to Time.local.\",\"summary\":\"Mongoid tries to serialize the values for Date, DateTime, and Time into proper UTC times to store in the database. The provided value could not be parsed.\"},\"inverse_not_found\":{\"message\":\"When adding a(n) %{klass} to %{base}#%{name}, Mongoid could not determine the inverse foreign key to set. The attempted key was \\'%{inverse}\\'.\",\"resolution\":\"If an inverse is not required, like a belongs_to or has_and_belongs_to_many, ensure that :inverse_of =\\\\u003e nil is set on the association. If the inverse is needed, most likely the inverse cannot be figured out from the names of the associations and you will need to explicitly tell Mongoid on the association what the inverse is.\\\\n\\\\n Example:\\\\n   class Car\\\\n     include Mongoid::Document\\\\n     has_one :engine, class_name: \\\\\"Motor\\\\\", inverse_of: :machine\\\\n   end\\\\n\\\\n   class Motor\\\\n     include Mongoid::Document\\\\n     belongs_to :machine, class_name: \\\\\"Car\\\\\", inverse_of: :engine\\\\n   end\",\"summary\":\"When adding a document to an association, Mongoid attempts to link the newly added document to the base of the association in memory, as well as set the foreign key to link them on the database side. In this case Mongoid could not determine what the inverse foreign key was.\"},\"message_title\":\"message\",\"mixed_client_configuration\":{\"message\":\"Both uri and standard configuration options defined for client: \\'%{name}\\'.\",\"resolution\":\"Provide either only a uri as configuration or only standard options.\",\"summary\":\"Instead of simply giving uri or standard options a preference order, Mongoid assumes that you have made a mistake in your configuration and requires that you provide one or the other, but not both. The options that were provided were: %{config}.\"},\"mixed_relations\":{\"message\":\"Referencing a(n) %{embedded} document from the %{root} document via a non-embedded association is not allowed since the %{embedded} is embedded.\",\"resolution\":\"Consider not embedding %{embedded}, or do the key storage and access in a custom manner in the application code.\",\"summary\":\"In order to properly access a(n) %{embedded} from %{root} the reference would need to go through the root document of %{embedded}. In a simple case this would require Mongoid to store an extra foreign key for the root, in more complex cases where %{embedded} is multiple levels deep a key would need to be stored for each parent up the hierarchy.\"},\"nested_attributes_metadata_not_found\":{\"message\":\"Could not find metadata for association \\'%{name}\\' on model: %{klass}.\",\"resolution\":\"Make sure that there is an association defined named \\'%{name}\\' on %{klass} or that the association definition comes before the accepts_nested_attributes_for macro in the model - order matters so that Mongoid has access to the metadata.\\\\n\\\\n Example:\\\\n   class Band\\\\n     include Mongoid::Document\\\\n     has_many :albums\\\\n     accepts_nested_attributes_for :albums\\\\n   end\\\\n\\\\n\",\"summary\":\"When defining nested attributes for an association, Mongoid needs to access the metadata for the association \\'%{name}\\' in order if add autosave functionality to it, if applicable. Either no association named \\'%{name}\\' could be found, or the association had not been defined yet.\"},\"no_client_config\":{\"message\":\"No configuration could be found for a client named \\'%{name}\\'.\",\"resolution\":\"Double check your mongoid.yml to make sure under the clients key that a configuration exists for \\'%{name}\\'. If you have set the configuration programmatically, ensure that \\'%{name}\\' exists in the configuration hash.\",\"summary\":\"When attempting to create the new client, Mongoid could not find a client configuration for the name: \\'%{name}\\'. This is necessary in order to know the host, port, and options needed to connect.\"},\"no_client_database\":{\"message\":\"No database provided for client configuration: :%{name}.\",\"resolution\":\"If configuring via a mongoid.yml, ensure that within your :%{name} section a :database value for the client\\'s default database is defined.\\\\n\\\\n Example:\\\\n   development:\\\\n     clients:\\\\n       %{name}:\\\\n         database: my_app_db\\\\n         hosts:\\\\n           - localhost:27017\\\\n\\\\n\",\"summary\":\"Each client configuration must provide a database so Mongoid knows where the default database to persist to. What was provided was: %{config}.\"},\"no_client_hosts\":{\"message\":\"No hosts provided for client configuration: :%{name}.\",\"resolution\":\"If configuring via a mongoid.yml, ensure that within your :%{name} section a :hosts value for the client hosts is defined.\\\\n\\\\n Example:\\\\n   development:\\\\n     clients:\\\\n       %{name}:\\\\n         database: my_app_db\\\\n         hosts:\\\\n           - localhost:27017\\\\n\\\\n\",\"summary\":\"Each client configuration must provide hosts so Mongoid knows where the database server is located. What was provided was: %{config}.\"},\"no_clients_config\":{\"message\":\"No clients configuration provided.\",\"resolution\":\"Double check your mongoid.yml to make sure that you have a top-level clients key with at least 1 default client configuration for it. You can regenerate a new mongoid.yml for assistance via `rails g mongoid:config`.\\\\n\\\\n Example:\\\\n   development:\\\\n     clients:\\\\n       default:\\\\n         database: mongoid_dev\\\\n         hosts:\\\\n           - localhost:27017\\\\n\\\\n\",\"summary\":\"Mongoid\\'s configuration requires that you provide details about each client that can be connected to, and requires in the clients config at least 1 default client to exist.\"},\"no_default_client\":{\"message\":\"No default client configuration is defined.\",\"resolution\":\"If configuring via a mongoid.yml, ensure that within your :clients section a :default client is defined.\\\\n\\\\n Example:\\\\n   development:\\\\n     clients:\\\\n       default:\\\\n         hosts:\\\\n           - localhost:27017\\\\n\\\\n\",\"summary\":\"The configuration provided settings for: %{keys}, but Mongoid requires a :default to be defined at minimum.\"},\"no_documents_found\":{\"message\":\"Could not find a document of class %{klass}.\",\"resolution\":\"Create a document of class %{klass} or use a finder method that does not raise an exception when no documents are found.\",\"summary\":\"Mongoid attempted to find a document of the class %{klass} but none exist.\"},\"no_environment\":{\"message\":\"Could not load the configuration since no environment was defined.\",\"resolution\":\"Please ensure an environment is set in one of the listed locations. The environment must be explicitly set.\",\"summary\":\"Mongoid could not determine the environment to use because it was not specified in any of the following locations: Rails.env, Sinatra::Base.environment, ENV[\\\\\"RACK_ENV\\\\\"], ENV[\\\\\"MONGOID_ENV\\\\\"]. Without knowing the environment, Mongoid cannot load its configuration.\"},\"no_map_reduce_output\":{\"message\":\"No output location was specified for the map/reduce operation.\",\"resolution\":\"Provide the location that the output of the operation is to go by chaining an #out call to the map/reduce.\\\\n\\\\n Example:\\\\n   Band.map_reduce(map, reduce).out(inline: 1)\\\\n\\\\n Valid options for the out function are:\\\\n   inline: 1\\\\n   merge: \\'collection-name\\'\\\\n   replace: \\'collection-name\\'\\\\n   reduce: \\'collection-name\\'\\\\n\\\\n\",\"summary\":\"When executing a map/reduce, you must provide the output location of the results. The attempted command was: %{command}.\"},\"no_metadata\":{\"message\":\"Metadata not found for document of type %{klass}.\",\"resolution\":\"Ensure that your associations on the %{klass} model are all properly defined, and that the inverse associations are also properly defined. Embedded associations must have both the parent (embeds_one/embeds_many) and the inverse (embedded_in) present in order to work properly.\",\"summary\":\"Mongoid sets the metadata of an association on the document when it is either loaded from within the association, or added to one. The presence of the metadata is required in order to provide various functionality around associations. Most likely you are getting this error because the document is embedded and was attempted to be persisted without being associated with a parent, or the association was not properly defined.\"},\"no_parent\":{\"message\":\"Cannot persist embedded document %{klass} without a parent document.\",\"resolution\":\"Ensure that you\\'ve set the parent association if instantiating the embedded document directly, or always create new embedded documents via the parent association.\",\"summary\":\"If the document is embedded, in order to be persisted it must always have a reference to its parent document. This is most likely caused by either calling %{klass}.create or %{klass}.create! without setting the parent document as an attribute.\"},\"readonly_attribute\":{\"message\":\"Attempted to set the readonly attribute \\'%{name}\\' with the value: %{value}.\",\"resolution\":\"Don\\'t define \\'%{name}\\' as readonly, or do not attempt to update its value after the document is persisted.\",\"summary\":\"Attributes flagged as readonly via Model.attr_readonly can only have values set when the document is a new record.\"},\"readonly_document\":{\"message\":\"Attempted to persist a readonly document of class \\'%{klass}\\'.\",\"resolution\":\"Don\\'t attempt to persist documents that are flagged as readonly.\",\"summary\":\"Documents that are marked readonly cannot be persisted.\"},\"resolution_title\":\"resolution\",\"scope_overwrite\":{\"message\":\"Cannot create scope :%{scope_name}, because of existing method %{model_name}.%{scope_name}.\",\"resolution\":\"Change the name of the scope so it does not conflict with the already defined method %{model_name}, or set the configuration option Mongoid.scope_overwrite_exception to false, which is its default. In this case a warning will be logged.\",\"summary\":\"When defining a scope that conflicts with a method that already exists on the model, this error will get raised if Mongoid.scope_overwrite_exception is set to true.\"},\"sessions_not_supported\":{\"message\":\"Sessions are not supported by the connected server(s).\",\"resolution\":\"Verify that all servers in your deployment are at least version 3.6 or don\\'t attempt to use sessions with older server versions.\",\"summary\":\"A session was attempted to be used with a MongoDB server version that doesn\\'t support sessions. Sessions are supported in MongoDB server versions 3.6 and higher.\"},\"summary_title\":\"summary\",\"too_many_nested_attribute_records\":{\"message\":\"Accepting nested attributes for %{association} is limited to %{limit} documents.\",\"resolution\":\"The limit is set as an option to the macro, for example: accepts_nested_attributes_for :%{association}, limit: %{limit}. Consider raising this limit or making sure no more are sent than the set value.\",\"summary\":\"More documents were sent to be processed than the allowed limit.\"},\"unknown_attribute\":{\"message\":\"Attempted to set a value for \\'%{name}\\' which is not allowed on the model %{klass}.\",\"resolution\":\"Define the field \\'%{name}\\' in %{klass}, or include Mongoid::Attributes::Dynamic in %{klass} if you intend to store values in fields that are not explicitly defined.\",\"summary\":\"%{klass}#%{name}= was called but there is no \\'%{name}\\' field defined in the model, and Mongoid::Attributes::Dynamic is not included. This error is also raised instead of NoMethodError if the unknown attribute is passed to any method that accepts an attributes hash, such as #attributes=.\"},\"unknown_model\":{\"message\":\"Attempted to instantiate an object of the unknown model \\'%{klass}\\'.\",\"resolution\":\"The _type field is a reserved one used by Mongoid to determine the class for instantiating an object. Please don\\'t save data in this field or ensure that any values in this field correspond to valid models.\",\"summary\":\"A document with the value \\'%{value}\\' at the key \\'_type\\' was used to instantiate a model object but Mongoid cannot find this Class.\"},\"unsaved_document\":{\"message\":\"Attempted to save %{document} before the parent %{base}.\",\"resolution\":\"Make sure to only use create or create! when the parent document %{base} is persisted.\",\"summary\":\"You cannot call create or create! through the association (%{document}) whose parent (%{base}) is not already saved. This would cause the database to be out of sync since the child could potentially reference a nonexistent parent.\"},\"unsupported_javascript\":{\"message\":\"Executing Javascript $where selector on an embedded criteria is not supported.\",\"resolution\":\"Please provide a standard hash to #where when the criteria is for an embedded association.\",\"summary\":\"Mongoid only supports providing a hash of arguments to #where criterion on embedded documents. Since %{klass} is embedded, the expression %{javascript} is not allowed.\"},\"validations\":{\"message\":\"Validation of %{document} failed.\",\"resolution\":\"Try persisting the document with valid data or remove the validations.\",\"summary\":\"The following errors were found: %{errors}\"}}}},\"number\":{\"currency\":{\"format\":{\"delimiter\":\",\",\"format\":\"%u%n\",\"negative_format\":\"-%u%n\",\"precision\":2,\"separator\":\".\",\"significant\":false,\"strip_insignificant_zeros\":false,\"unit\":\"$\"}},\"format\":{\"delimiter\":\",\",\"precision\":3,\"round_mode\":\"default\",\"separator\":\".\",\"significant\":false,\"strip_insignificant_zeros\":false},\"human\":{\"decimal_units\":{\"format\":\"%n %u\",\"units\":{\"billion\":\"Billion\",\"million\":\"Million\",\"quadrillion\":\"Quadrillion\",\"thousand\":\"Thousand\",\"trillion\":\"Trillion\",\"unit\":\"\"}},\"format\":{\"delimiter\":\"\",\"precision\":3,\"significant\":true,\"strip_insignificant_zeros\":true},\"storage_units\":{\"format\":\"%n %u\",\"units\":{\"byte\":{\"one\":\"Byte\",\"other\":\"Bytes\"},\"eb\":\"EB\",\"gb\":\"GB\",\"kb\":\"KB\",\"mb\":\"MB\",\"pb\":\"PB\",\"tb\":\"TB\",\"zb\":\"ZB\"}}},\"nth\":{},\"percentage\":{\"format\":{\"delimiter\":\"\",\"format\":\"%n%\"}},\"precision\":{\"format\":{\"delimiter\":\"\"}}},\"simple_form\":{\"error_notification\":{\"default_message\":\"Please review the problems below:\"},\"no\":\"No\",\"required\":{\"mark\":\"*\",\"text\":\"required\"},\"yes\":\"Yes\"},\"support\":{\"array\":{\"last_word_connector\":\", and \",\"two_words_connector\":\" and \",\"words_connector\":\", \"}},\"time\":{\"am\":\"am\",\"formats\":{\"default\":\"%a, %d %b %Y %H:%M:%S %z\",\"long\":\"%B %d, %Y %H:%M\",\"short\":\"%d %b %H:%M\"},\"pm\":\"pm\"},\"users\":{\"confirmations\":{\"new\":{\"legend\":\"Resend your %{brand_name} confirmation instructions\",\"message\":\"We need to confirm your email address to complete the sign up process. Supply your email address, below, and we will send you instructions on how to confirm your address.\",\"submit_button\":\"Send Confirmation Instructions\",\"title\":\"Resend confirmation instructions | %{brand_name}\"},\"show\":{\"legend\":\"Check your inbox for a confirmation email\",\"message\":\"If your e-mail exists in our database we have sent you a message with instructions. Check your inbox (or spam folder) for a message from \\'%{default_from_email}\\' containing the confirmation link.\",\"title\":\"Awaiting confirmation | %{brand_name}\"}},\"passwords\":{\"new\":{\"failures\":\"Note: If you make more than 5 sequential failed attempts to sign in with your %{brand_name} password, your account will be (temporarily) locked. Check your inbox for instruction on how to unlock your account, or we can\",\"legend\":\"Reset your %{brand_name} password\",\"message\":\"Supply your email address, below, and we will send you instructions on how to reset your password.\",\"resend_link\":\"resend a new set of unlock instructions\",\"submit_button\":\"Send Reset Instructions\",\"title\":\"Reset password | %{brand_name}\"},\"show\":{\"didnt_receive_email\":\"Didn\\'t receive the email?\",\"legend\":\"Password reset instructions sent\",\"message\":\"If your e-mail exists in our database we have sent you a message with password reset instructions. Check your inbox (or spam folder) for a message from \\'%{default_from_email}\\'.\",\"resend_link\":\"you can request another one here\",\"title\":\"Awaiting reset | %{brand_name}\"}}},\"will_paginate\":{\"container_aria_label\":\"Pagination\",\"next_label\":\"Next \\\\u0026#8594;\",\"page_aria_label\":\"Page %{page}\",\"page_entries_info\":{\"multi_page\":\"Displaying %{model} %{from} - %{to} of %{count} in total\",\"multi_page_html\":\"Displaying %{model} \\\\u003cb\\\\u003e%{from}\\\\u0026nbsp;-\\\\u0026nbsp;%{to}\\\\u003c/b\\\\u003e of \\\\u003cb\\\\u003e%{count}\\\\u003c/b\\\\u003e in total\",\"single_page\":{\"one\":\"Displaying 1 %{model}\",\"other\":\"Displaying all %{count} %{model}\",\"zero\":\"No %{model} found\"},\"single_page_html\":{\"one\":\"Displaying \\\\u003cb\\\\u003e1\\\\u003c/b\\\\u003e %{model}\",\"other\":\"Displaying \\\\u003cb\\\\u003eall\\\\u0026nbsp;%{count}\\\\u003c/b\\\\u003e %{model}\",\"zero\":\"No %{model} found\"}},\"page_gap\":\"\\\\u0026hellip;\",\"previous_label\":\"\\\\u0026#8592; Previous\"}}'));\nI18n.translations[\"labza\"] = I18n.extend((I18n.translations[\"labza\"] || {}), JSON.parse('{\"activerecord\":{\"errors\":{\"messages\":{\"record_invalid\":\"Validation failed: %{errors}\",\"restrict_dependent_destroy\":{\"has_many\":\"Cannot delete record because dependent %{record} exist\",\"has_one\":\"Cannot delete record because a dependent %{record} exists\"}}}},\"brand\":{\"logo\":{\"full_image\":{\"file_name\":\"labza_wordmark.png\",\"path\":\"images/brand_specific/labza/labza_wordmark.png\"},\"header\":{\"path\":\"images/brand_specific/labza/labza_wordmark.png\"},\"mark_only\":{\"file_name\":\"favicon.png\",\"path\":\"images/brand_specific/labza/favicon.png\"}},\"meta\":{\"description\":\"Labza is a sales intelligence management system specifically designed for teams selling complex scientific research tools\",\"image\":\"https://app.labza.com/images/brand_specific/labza/labza_wordmark.png\",\"title\":\"The lab intelligence tool for sellers\"},\"name\":\"Labza\",\"tag_line\":\"Lab intel for sellers\"},\"bulk_uploads\":{\"email_local_part\":{\"empty_parameter\":\"No file uploaded\",\"error\":\"File Upload failed: %{error_message}\",\"success\":\"File was successfully uploaded\"}},\"common\":{\"crm\":{\"salesforce\":{\"forgot_password\":\"If you have forgotten your Salesforce password, please follow the instructions provided on the Salesforce sign in page.\",\"sign_in_button\":\"Sign In with Salesforce\"}}},\"contact\":{\"default_from_email\":\"info@labza.com\",\"phone_numbers\":[{\"label\":\"US\",\"phone\":\"1-917-997-9006\"}],\"support_email\":\"support@labza.com\"},\"date\":{\"abbr_day_names\":[\"Sun\",\"Mon\",\"Tue\",\"Wed\",\"Thu\",\"Fri\",\"Sat\"],\"abbr_month_names\":[null,\"Jan\",\"Feb\",\"Mar\",\"Apr\",\"May\",\"Jun\",\"Jul\",\"Aug\",\"Sep\",\"Oct\",\"Nov\",\"Dec\"],\"day_names\":[\"Sunday\",\"Monday\",\"Tuesday\",\"Wednesday\",\"Thursday\",\"Friday\",\"Saturday\"],\"formats\":{\"default\":\"%Y-%m-%d\",\"long\":\"%B %d, %Y\",\"short\":\"%b %d\"},\"month_names\":[null,\"January\",\"February\",\"March\",\"April\",\"May\",\"June\",\"July\",\"August\",\"September\",\"October\",\"November\",\"December\"],\"order\":[\"year\",\"month\",\"day\"]},\"datetime\":{\"distance_in_words\":{\"about_x_hours\":{\"one\":\"about 1 hour\",\"other\":\"about %{count} hours\"},\"about_x_months\":{\"one\":\"about 1 month\",\"other\":\"about %{count} months\"},\"about_x_years\":{\"one\":\"about 1 year\",\"other\":\"about %{count} years\"},\"almost_x_years\":{\"one\":\"almost 1 year\",\"other\":\"almost %{count} years\"},\"half_a_minute\":\"half a minute\",\"less_than_x_minutes\":{\"one\":\"less than a minute\",\"other\":\"less than %{count} minutes\"},\"less_than_x_seconds\":{\"one\":\"less than 1 second\",\"other\":\"less than %{count} seconds\"},\"over_x_years\":{\"one\":\"over 1 year\",\"other\":\"over %{count} years\"},\"x_days\":{\"one\":\"1 day\",\"other\":\"%{count} days\"},\"x_minutes\":{\"one\":\"1 minute\",\"other\":\"%{count} minutes\"},\"x_months\":{\"one\":\"1 month\",\"other\":\"%{count} months\"},\"x_seconds\":{\"one\":\"1 second\",\"other\":\"%{count} seconds\"}},\"prompts\":{\"day\":\"Day\",\"hour\":\"Hour\",\"minute\":\"Minute\",\"month\":\"Month\",\"second\":\"Seconds\",\"year\":\"Year\"}},\"default_host\":\"https://app.labza.com\",\"devise\":{\"confirmations\":{\"confirmed\":\"Your account was successfully confirmed. Please sign in.\",\"send_instructions\":\"Your email has not been confirmed. We need to confirm your email account before you can sign in. Please check your inbox or spam folder for an email from \\'info@zymewire.com\\' or request a new one.\",\"send_paranoid_instructions\":\"If your e-mail exists on our database, you will receive an email with instructions about how to confirm your account in a few minutes.\"},\"failure\":{\"already_authenticated\":\"You are already signed in.\",\"expired\":\"Your account has expired due to inactivity. Please contact the site administrator.\",\"inactive\":\"Your account was not activated yet.\",\"invalid\":\"Invalid email or password. If you use Salesforce, use the \\'Have Salesforce?\\' panel.\",\"invalid_token\":\"Invalid authentication token.\",\"last_attempt\":\"You have one more attempt before your account is locked.\",\"locked\":\"Your account is locked.\",\"not_active\":\"Your account has been de-activated, if you think this is a mistake please contact us\",\"not_found_in_database\":\"Invalid %{authentication_keys} or password.\",\"session_limited\":\"Your login credentials were used in another browser. Please sign in again to continue in this browser.\",\"timeout\":\"Your session expired, please sign in again to continue.\",\"unauthenticated\":\"You need to sign in or sign up before continuing.\",\"unconfirmed\":\"We must confirm your email before you can continue. Please check your inbox or spam folder for a confirmation email from \\'info@zymewire.com\\' or request a new one.\"},\"invalid_captcha\":\"The captcha input is not valid!\",\"invalid_security_question\":\"The security question answer was invalid.\",\"mailer\":{\"confirmation_instructions\":{\"subject\":\"Confirmation instructions for Zymewire.com\"},\"email_changed\":{\"subject\":\"Email Changed\"},\"password_change\":{\"subject\":\"Password Changed\"},\"reset_password_instructions\":{\"subject\":\"Reset password instructions for Zymewire.com\"},\"unlock_instructions\":{\"subject\":\"Unlock Instructions for Zymewire.com\"}},\"omniauth_callbacks\":{\"failure\":\"Could not authorize you from %{kind} because \\\\\"%{reason}\\\\\".\",\"success\":\"Successfully authorized from %{kind} account.\"},\"paranoid_verification_code\":{\"show\":{\"submit\":\"Submit\",\"submit_verification_code\":\"Submit verification code\",\"verification_code\":\"Verification code\"},\"updated\":\"Verification code accepted\"},\"paranoid_verify\":{\"code_required\":\"Please enter the code our support team provided\"},\"password_expired\":{\"change_required\":\"Your password has expired. Please choose a new password!\",\"show\":{\"change_my_password\":\"Change my password\",\"current_password\":\"Current password\",\"new_password\":\"New password\",\"new_password_confirmation\":\"Confirm new password\",\"renew_your_password\":\"Renew your password\"},\"updated\":\"Your new password is saved.\"},\"passwords\":{\"no_token\":\"You can\\'t access this page without coming from a password reset email. If you do come from a password reset email, please make sure you used the full URL provided.\",\"send_instructions\":\"You will receive an email with instructions about how to reset your password in a few minutes.\",\"send_paranoid_instructions\":\"If your e-mail exists on our database, you will receive a password recovery link on your e-mail\",\"updated\":\"Your password was changed successfully. You are now signed in.\",\"updated_not_active\":\"Your password was changed successfully.\"},\"registrations\":{\"destroyed\":\"Bye! Your account was successfully cancelled. We hope to see you again soon.\",\"signed_up\":\"Welcome! You have signed up successfully.\",\"signed_up_but_inactive\":\"You have signed up successfully. However, we could not sign you in because your account is not yet activated.\",\"signed_up_but_locked\":\"You have signed up successfully. However, we could not sign you in because your account is locked.\",\"signed_up_but_unconfirmed\":\"A message with a confirmation link has been sent to your email address. Please open the link to activate your account.\",\"update_needs_confirmation\":\"You updated your account successfully, but we need to verify your new email address. Please check your email and click on the confirm link to finalize confirming your new email address.\",\"updated\":\"You updated your account successfully.\",\"updated_but_not_signed_in\":\"Your account has been updated successfully, but since your password was changed, you need to sign in again.\"},\"sessions\":{\"already_signed_out\":\"Signed out successfully.\",\"signed_in\":\"Signed in successfully.\",\"signed_out\":\"Signed out successfully.\"},\"unlocks\":{\"send_instructions\":\"You will receive an email with instructions about how to unlock your account in a few minutes.\",\"send_paranoid_instructions\":\"If your account exists, you will receive an email with instructions about how to unlock it in a few minutes.\",\"unlocked\":\"Your account has been unlocked successfully. Please sign in to continue.\"}},\"disable_crm_login_option\":\"true\",\"domain\":\"labza.com\",\"download\":\"Download\",\"download_30_days\":\"This link will be available for 30 days after which the file will be removed from our servers.\",\"enumerize\":{\"blocklisted_contact\":{\"provider\":{\"insideview\":\"InsideView\",\"zephyr\":\"Zephyr\"}}},\"errors\":{\"format\":\"%{attribute} %{message}\",\"messages\":{\"accepted\":\"must be accepted\",\"already_confirmed\":\"was already confirmed, please try signing in\",\"blank\":\"can\\'t be blank\",\"confirmation\":\"doesn\\'t match %{attribute}\",\"confirmation_period_expired\":\"needs to be confirmed within %{period}, please request a new one\",\"empty\":\"can\\'t be empty\",\"equal_to\":\"must be equal to %{count}\",\"equal_to_current_password\":\"Sorry, must be different to your current password!\",\"equal_to_email\":\"must be different than the email.\",\"even\":\"must be even\",\"exclusion\":\"is reserved\",\"expired\":\"has expired, please request a new one\",\"greater_than\":\"must be greater than %{count}\",\"greater_than_or_equal_to\":\"must be greater than or equal to %{count}\",\"in\":\"must be in %{count}\",\"inclusion\":\"is not included in the list\",\"invalid\":\"is invalid\",\"less_than\":\"must be less than %{count}\",\"less_than_or_equal_to\":\"must be less than or equal to %{count}\",\"model_invalid\":\"Validation failed: %{errors}\",\"not_a_number\":\"is not a number\",\"not_an_integer\":\"must be an integer\",\"not_found\":\"not found\",\"not_locked\":\"was not locked\",\"not_saved\":{\"one\":\"1 error prohibited this %{resource} from being saved:\",\"other\":\"%{count} errors prohibited this %{resource} from being saved:\"},\"odd\":\"must be odd\",\"other_than\":\"must be other than %{count}\",\"password_complexity\":{\"digit\":{\"one\":\"must contain at least one digit\",\"other\":\"must contain at least %{count} digits\"},\"lower\":{\"one\":\"must contain at least one lower-case letter\",\"other\":\"must contain at least %{count} lower-case letters\"},\"symbol\":{\"one\":\"must contain at least one punctuation mark or symbol\",\"other\":\"must contain at least %{count} punctuation marks or symbols\"},\"upper\":{\"one\":\"must contain at least one upper-case letter\",\"other\":\"must contain at least %{count} upper-case letters\"}},\"password_format\":\"Must contain uppercase AND lowercase letters and at least one number\",\"password_too_long\":\"is too long\",\"present\":\"must be blank\",\"required\":\"must exist\",\"taken\":\"has already been taken\",\"taken_in_past\":\"Sorry, you have used this password before!\",\"too_long\":{\"one\":\"is too long (maximum is 1 character)\",\"other\":\"is too long (maximum is %{count} characters)\"},\"too_short\":{\"one\":\"is too short (minimum is 1 character)\",\"other\":\"is too short (minimum is %{count} characters)\"},\"wrong_length\":{\"one\":\"is the wrong length (should be 1 character)\",\"other\":\"is the wrong length (should be %{count} characters)\"}}},\"flash\":{\"actions\":{\"create\":{\"notice\":\"%{resource_name} was successfully created.\"},\"destroy\":{\"alert\":\"%{resource_name} could not be destroyed.\",\"notice\":\"%{resource_name} was successfully destroyed.\"},\"update\":{\"notice\":\"%{resource_name} was successfully updated.\"}}},\"hello_world\":\"Hello world\",\"help\":{\"articles\":{\"crm_mining\":\"\",\"finding_contact_info\":\"\",\"guide_d\":\"\",\"guide_g\":\"\",\"guide_h\":\"\",\"guide_i\":\"\",\"guide_j\":\"\",\"list_crud_c\":\"\",\"list_crud_u\":\"\",\"map_search\":\"\",\"saving_feeds\":\"\"},\"site\":null},\"helpers\":{\"select\":{\"prompt\":\"Please select\"},\"submit\":{\"create\":\"Create %{model}\",\"submit\":\"Save %{model}\",\"update\":\"Update %{model}\"}},\"hi\":\"Hi\",\"industry\":\"Scientific Assessment\",\"mailers\":{\"common\":{\"chummy_sign_off\":\"Have a good one.\",\"final_note\":\"P.S.: If you think you received this email accidentally, then something weird could be going on. Hit reply and a member of the %{brand_name} team will investigate.\",\"team_sign_off\":\"- The %{brand_name} Team\"},\"confirmation_instructions_email\":{\"crm\":{\"salesforce\":{\"resource_confirmed\":\"Someone has requested a resend of a confirmation email. You do not need to confirm your email address because your account is configured to use Salesforce to sign in.\",\"resource_unconfirmed\":\"You do not need to confirm your email address because your account is configured to use Salesforce to sign in, please complete the sign up process by clicking the button below to sign in to %{brand_name} via Salesforce.\"}},\"non_crm\":{\"confirm_link\":\"Confirm my account\",\"welcome\":\"Welcome to %{brand_name}. As the final step in the process you\\'ll need to confirm your account by clicking on the link below.\"},\"subject\":\"Confirmation instructions for %{domain}\"},\"flagged_events_mailer\":{\"from\":\"Flagged events - %{brand_name} \\\\u003cflagged_events@mailer.%{domain}\\\\u003e\"},\"mobile_registration_email\":{\"alert_cs_registration_locked\":{\"subject\":\"%{brand_name}: user has had mobile registration locked, too many failed attempts\"},\"dispatch_registration_PIN\":{\"further_instructions\":\"If you are NOT attempting to register for the %{brand_name} Mobile app then please let us know at %{support_email_link} - thank you.\",\"introduction\":\"Here is your mobile app registration PIN:\",\"subject\":\"%{brand_name} Mobile Registration Verification\"},\"too_many_failed_attempts\":{\"introduction\":\"We have received too many failed mobile device registration attempts for your account and we will block any further requests. If you have not attempted to register a mobile device with us in the last hour then please let us know as it is likely someone has tried on your behalf. If you have been trying to register a device please contact %{support_email_link} and we can help unlock your account and get you registered.\",\"subject\":\"%{brand_name}: too many failed registration attempts\"}},\"org_list_download_mail\":{\"dispatch_link\":{\"introduction\":\"We have finished meshing your %{crm_brand_name} data with the companies in your \\\\\"%{list_name}\\\\\" list.\",\"subject\":\"%{brand_name}: your file download of \\'%{list_name}\\' is ready\"},\"failed\":{\"instructions\":\"You could try again in a little while. If you already have and are receiving this email again, please contact us at %{support_email_link}\",\"introduction\":\"We are really sorry, but something went wrong with creating your download of %{crm_brand_name} data for your \\\\\"%{list_name}\\\\\" list.\",\"subject\":\"%{brand_name}: your file download of \\'%{list_name}\\' failed\"}},\"reset_password_instructions_email\":{\"crm\":{\"salesforce\":{\"change_requested\":\"Someone has requested a change to your password. Your account is configured to use Salesforce to sign in.\"}},\"fishy_fine_print\":\"If you did not request a password change, then something weird is going on. Someone may be trying to access your account (unsuccessfully). Please reply to this email and let us know. We will take steps to make sure it stops.\",\"non_crm\":{\"change_password_link\":\"Change my password\",\"change_requested\":\"Someone has requested a change to your password, you can do this via the link below.\"},\"subject\":\"Password reset instructions for %{domain}\"},\"sales_force_mail\":{\"processing_completed\":{\"bullet_points\":[\"Only show events associated with companies in your Salesforce account\",\"Add new contacts and accounts to your Salesforce account without leaving %{brand_name}\",\"Access the \\'Salesforce details\\' panel on company dashboards where you can see open tasks, team interactions, opportunities, and more!\"],\"further_instructions\":\"We\\'re here to help. If you run into any questions or challenges, please contact us at %{support_email_link} and a member of our team would be more than happy to help.\",\"get_the_most\":\"To get the most from the integration, check out the \\'Mine Salesforce for opportunities\\' guide in the Help Center.\",\"guide_button\":\"Take me to the guide\",\"introduction\":\"Good news - your Salesforce account is now integrated with %{brand_name}. Now you’ll be able to:\"}},\"segment_contact\":{\"report_manager\":{\"fail_subject\":\"%{brand_name}: The PDF report generation failed\",\"success_subject\":\"%{brand_name}: Your PDF for %{company_name} is attached\"}},\"sf_token_expiry_email\":{\"further_instructions\":\"If you run into any questions or challenges, please contact us at %{support_email_link} and a member of our team would be more than happy to help.\",\"introduction\":\"Unfortunately the connection established for you between %{brand_name} and your %{crm_brand_name} account has expired. We will not be able to update your lists in %{brand_name} to reflect your %{crm_brand_name} database. To re-establish the connection, you just need to log in to %{brand_name} using your %{crm_brand_name}.\",\"subject\":\"%{brand_name} to %{crm_brand_name} connection has expired\"},\"share_list_mail\":{\"introduction\":\"%{user_name} shared a list with you: \",\"subject\":\"[%{brand_name} - shared list] %{list_name}\"},\"trial_expiry_mail\":{\"seven_days_to_go\":{\"further_instructions\":\"A member of our fabulous Customer Success team will arrange a welcome call with you to understand your goals and priorities, and will then give you a personalized Tour de %{brand_name} so you can easily access the information that is most valuable to you.\",\"instructions\":\"If you\\'d like continued access to the platform with our flexible month-to-month subscription, please ensure you contact %{support_email_link} ahead of: %{deadline}\",\"introduction\":\"Time flies when you\\'re uncovering new business opportunities! Your %{brand_name} trial is coming to an end next week.\",\"sign_off\":\"We look forward to helping you reach your sales goals!\",\"subject\":\"Just a heads up that your %{brand_name} trial is ending in seven days\"},\"seven_days_to_go_warning_for_cs\":{\"introduction\":\"%{user_name} shared a list with you: \",\"subject\":\"[%{brand_name} - shared list] %{list_name}\"}},\"unlock_instructions_email\":{\"crm\":{\"salesforce\":{\"change_requested\":\"You are being sent this email either because of one too many unsuccessful non-Salesforce log-in attempts or someone has requested an unlock email. %{brand_name} has not locked your account because your account is configured to use Salesforce to sign in.\",\"password_forgotten\":\"If you have forgotten your Salesforce password or think your account has been locked by Salesforce, please follow the instructions provided on the Salesforce sign in page.\"}},\"fishy_fine_print\":\"If you have not been (unsuccessfully) trying to log in to your account, then something weird is going on. Someone may be trying to access your account (unsuccessfully). Please reply to this email and let us know. We will take steps to make sure it stops.\",\"non_crm\":{\"change_requested\":\"For security reasons we have locked your account because of too many log-in attempts. To unlock your account, click the link below.\",\"unlock_account_link\":\"Unlock my account\"},\"subject\":\"Unlock instructions for %{domain}\"}},\"mobile_website\":{\"cta\":null,\"cta_link\":null,\"header\":null,\"message\":null,\"prompt\":null},\"mongoid\":{\"errors\":{\"messages\":{\"ambiguous_relationship\":{\"message\":\"Ambiguous associations %{candidates} defined on %{klass}.\",\"resolution\":\"On the %{name} association on %{inverse} you must add an :inverse_of option to specify the exact association on %{klass} that is the opposite of %{name}.\",\"summary\":\"When Mongoid attempts to set an inverse document of an association in memory, it needs to know which association it belongs to. When setting %{name}, Mongoid looked on the class %{inverse} for a matching association, but multiples were found that could potentially match: %{candidates}.\"},\"blank_in_locale\":\"can\\'t be blank in %{location}\",\"callbacks\":{\"message\":\"Calling %{method} on %{klass} resulted in a false return from a callback.\",\"resolution\":\"Double check all before callbacks to make sure they are not unintentionally returning false.\",\"summary\":\"If a before callback returns false when using Document.create!, Document#save!, or Document#update_attributes! this error will get raised since the document did not actually get saved.\"},\"calling_document_find_with_nil_is_invalid\":{\"message\":\"Calling Document.find with nil is invalid.\",\"resolution\":\"Most likely this is caused by passing parameters directly through to the find, and the parameter either is not present or the key from which it is accessed is incorrect.\",\"summary\":\"Document.find expects the parameters to be 1 or more ids, and will return a single document if 1 id is provided, otherwise an array of documents if multiple ids are provided.\"},\"create_collection_failure\":{\"message\":\"Cannot create collection %{collection_name} with options %{collection_options}. The following error was raised: %{error}.\",\"resolution\":\"Double check that collection options for the collection %{collection_name} are valid. Consult with Ruby driver documentation and MongoDB documentation if the desired options are supported by your version of the server.\",\"summary\":\"The server rejected createCollection command with given collection options. This may happen when some of the options are invalid, or not supported by your version of the server.\"},\"criteria_argument_required\":{\"message\":\"Calling Criteria methods with nil arguments is not allowed.\",\"resolution\":\"Invoke Criteria methods with non-nil arguments or omit the respective invocations.\",\"summary\":\"Arguments to Criteria methods cannot be nil, and most Criteria methods require at least one argument. Only logical operations (and, or, nor and not), `all\\' and `where\\' can be called without arguments. The method that was called with nil argument was: %{query_method}.\"},\"delete_restriction\":{\"message\":\"Cannot destroy %{document} because of dependent \\'%{relation}\\'.\",\"resolution\":\"Don\\'t attempt to delete the parent %{document} when it has children, or change the dependent option on the association.\",\"summary\":\"When defining \\'%{relation}\\' with a :dependent =\\\\u003e :restrict_with_error, Mongoid will raise an error when attempting to destroy the %{document} when the child \\'%{relation}\\' still has documents in it.\"},\"destroy_restrict_with_error_dependencies_exist\":\"is not empty and prevents the document from being destroyed\",\"document_not_destroyed\":{\"message\":\"%{klass} with id %{id} was not destroyed.\",\"resolution\":\"Check the before/after destroy callbacks to ensure that the return values are truthy for the chain to continue.\",\"summary\":\"When calling %{klass}#destroy! and a callback halts the destroy callback chain by returning a false value, the deletion will not actually occur.\"},\"document_not_found\":{\"message\":\"Document(s) not found for class %{klass} with id(s) %{missing}.\",\"resolution\":\"Search for an id that is in the database or set the Mongoid.raise_not_found_error configuration option to false, which will cause nil to be returned instead of raising this error when searching for a single id, or only the matched documents when searching for multiples.\",\"summary\":\"When calling %{klass}.find with an id or array of ids, each parameter must match a document in the database or this error will be raised. The search was for the id(s): %{searched} (%{total} total) and the following ids were not found: %{missing}.\"},\"document_with_attributes_not_found\":{\"message\":\"Document not found for class %{klass} with attributes %{attributes}.\",\"resolution\":\"Search for attributes that are in the database or set the Mongoid.raise_not_found_error configuration option to false, which will cause nil to be returned instead of raising this error.\",\"summary\":\"When calling %{klass}.find_by with a hash of attributes, all attributes provided must match a document in the database or this error will be raised.\"},\"document_with_shard_key_not_found\":{\"message\":\"Document not found for class %{klass} with id %{missing} and shard key %{shard_key}.\",\"resolution\":\"Search for an id/shard key that is in the database or set the Mongoid.raise_not_found_error configuration option to false, which will cause nil to be returned instead of raising this error.\",\"summary\":\"When calling %{klass}.find with an id and a shard key, each parameter must match a document in the database or this error will be raised. The search was for the id: %{missing} with shard_key: %{shard_key} and it was not found.\"},\"drop_collection_failure\":{\"message\":\"Cannot drop collection %{collection_name}.\",\"resolution\":\"Try to drop the collection manually using Ruby driver or mongo shell.\",\"summary\":\"Mongoid tried to drop collection %{collection_name}, but the collection still exists in the database.\"},\"empty_config_file\":{\"message\":\"Empty configuration file: %{path}.\",\"resolution\":\"Ensure your configuration file contains the correct contents. Refer to: https://www.mongodb.com/docs/mongoid/current/reference/configuration/\",\"summary\":\"Your mongoid.yml configuration file appears to be empty.\"},\"immutable_attribute\":{\"message\":\"Attempted to change the immutable attribute \\'%{name}\\' with the value: %{value}.\",\"resolution\":\"Do not attempt to update the value of \\'%{name}\\' after the document is persisted.\",\"summary\":\"Immutable attributes can only have values set when the document is a new record.\"},\"in_memory_collation_not_supported\":{\"message\":\"A collation option cannot be applied when querying documents in-memory.\",\"resolution\":\"Remove the collation option from the query.\",\"summary\":\"The query being run against documents in memory has a collation option set. A collation option is only supported if the query is executed on a MongoDB server with version \\\\u003e= 3.4.\"},\"invalid_async_query_executor\":{\"message\":\"Invalid async_query_executor option: %{executor}.\",\"resolution\":\"Pick an allowed option or fix the typo. If you were expecting the option to be there, please consult the following page with respect to Mongoid\\'s configuration:\\\\n\\\\n   https://www.mongodb.com/docs/mongoid/current/reference/configuration/#mongoid-configuration-options\",\"summary\":\"A invalid async query executor was specified. The valid options are: %{options}.\"},\"invalid_collection\":{\"message\":\"Access to the collection for %{klass} is not allowed.\",\"resolution\":\"For access to the collection that the embedded document is in, use %{klass}#_root.collection, or do not attempt to persist an embedded document without a parent set.\",\"summary\":\"%{klass}.collection was called, and %{klass} is an embedded document - it resides within the collection of the root document of the hierarchy.\"},\"invalid_config_file\":{\"message\":\"Invalid configuration file: %{path}.\",\"resolution\":\"Ensure your configuration file contains the correct contents. Refer to: https://www.mongodb.com/docs/mongoid/current/reference/configuration/\",\"summary\":\"Your mongoid.yml configuration file does not contain the correct file structure.\"},\"invalid_config_option\":{\"message\":\"Invalid configuration option: %{name}.\",\"resolution\":\"Remove the invalid option or fix the typo. If you were expecting the option to be there, please consult the following page with respect to Mongoid\\'s configuration:\\\\n\\\\n   http://mongoid.org/en/mongoid/docs/installation.html\",\"summary\":\"A invalid configuration option was provided in your mongoid.yml, or a typo is potentially present. The valid configuration options are: %{options}.\"},\"invalid_dependent_strategy\":{\"message\":\"Invalid dependent strategy: %{invalid_strategy}.\",\"resolution\":\"Change the dependent strategy to one of the valid types.\",\"summary\":\"An invalid dependent strategy was defined for the association: %{association}. The valid strategies are: %{valid_strategies}.\"},\"invalid_discriminator_key_target\":{\"message\":\"Setting the discriminator key on a child class is not allowed.\",\"resolution\":\"Try setting the discriminator key on %{superclass} or one of %{class_name}\\'s ancestors.\",\"summary\":\"The discriminator key on the class %{class_name} was attempted to be changed. Changing the discriminator key on a child class is not allowed.\"},\"invalid_dot_dollar_assignment\":{\"message\":\"Cannot set the %{attr} attribute on the %{klass} class.\",\"resolution\":\"In order to set fields that start with a dollar sign ($) or contain a dot/period (.), the aggregation pipeline can be used. MongoDB provides specific operators for working with these fields. Refer to the MongoDB documentation here: https://www.mongodb.com/docs/manual/core/dot-dollar-considerations/\",\"summary\":\"Calling the setters for fields that start with a dollar sign ($) or contain a dot/period (.) is prohibited. See the Mongoid documentation on Field Names with Dots/Periods (.) and Dollar Signs ($) for more information.\"},\"invalid_elem_match_operator\":{\"message\":\"Invalid $elemMatch operator \\'%{operator}\\'.\",\"resolution\":\"Valid field operators are: %{valid_operators}. Ensure you are using one of these operators.\",\"summary\":\"You misspelled an operator or are using an operator that Mongoid does not support.\"},\"invalid_estimated_count_criteria\":{\"message\":\"Invalid criteria for estimated_count.\",\"resolution\":\"Try calling estimated_count directly on the class: %{class_name}.estimated_count.\\\\n\\\\n  If the class defines a default scope, use unscoped: %{class_name}.unscoped.estimated_count.\",\"summary\":\"Estimated count is strictly a collection-level operation and cannot be called on a filtered criteria.\"},\"invalid_expression_operator\":{\"message\":\"Invalid expression operator \\'%{operator}\\'.\",\"resolution\":\"Valid expression operators are: %{valid_operators}. Ensure you are using one of these operators.\",\"summary\":\"You misspelled an operator, are using an operator that Mongoid does not support, or are trying to use a field-level operator on expression level.\"},\"invalid_field\":{\"message\":\"Defining a field named \\'%{field}\\' is not allowed.\",\"resolution\":\"Use Mongoid.destructive_fields to see what names are not allowed, and don\\'t use these names. These include names that also conflict with core Ruby methods on Object, Module, Enumerable, or included gems that inject methods into these or Mongoid internals.\",\"summary\":\"Defining this field would override the method \\'%{name}\\', which would cause issues with expectations around the original method and cause extremely hard to debug issues. The original method was defined in:\\\\n   Object: %{origin}\\\\n   File: %{file}\\\\n   Line: %{line}\"},\"invalid_field_operator\":{\"message\":\"Invalid field operator \\'%{operator}\\'.\",\"resolution\":\"Valid field operators are: %{valid_operators}. Ensure you are using one of these operators.\",\"summary\":\"You misspelled an operator, are using an operator that Mongoid does not support, or are trying to use an expression-level operator on field level.\"},\"invalid_field_option\":{\"message\":\"Invalid option :%{option} provided for field :%{name}.\",\"resolution\":\"When defining the field :%{name} on \\'%{klass}\\', please provide valid options for the field. These are currently: %{valid}. If you meant to define a custom field option, please do so first as follows:\\\\n\\\\n   Mongoid::Fields.option :%{option} do |model, field, value|\\\\n     # Your logic here...\\\\n   end\\\\n   class %{klass}\\\\n     include Mongoid::Document\\\\n     field :%{name}, %{option}: true\\\\n   end\\\\n\\\\n Refer to: https://www.mongodb.com/docs/mongoid/current/reference/fields/#custom-field-options\",\"summary\":\"Mongoid requires that you only provide valid options on each field definition in order to prevent unexpected behavior later on.\"},\"invalid_field_type\":{\"message\":\"Invalid field type %{type_inspection} for field \\'%{field}\\' on model \\'%{klass}\\'.\",\"resolution\":\"Please provide a valid type value for the field. Refer to: https://www.mongodb.com/docs/mongoid/current/reference/fields/#using-symbols-or-strings-instead-of-classes\",\"summary\":\"Model \\'%{klass}\\' defines a field \\'%{field}\\' with an unknown type value %{type_inspection}.\"},\"invalid_global_executor_concurrency\":{\"message\":\"Invalid global_executor_concurrency option.\",\"resolution\":\"Set global_executor_concurrency option to :global_thread_pool or remove global_executor_concurrency option.\",\"summary\":\"You set global_executor_concurrency while async_query_executor option is not set to :global_thread_pool. The global_executor_concurrency is allowed only for the global thread pool executor.\"},\"invalid_includes\":{\"message\":\"Invalid includes directive: %{klass}.includes(%{args})\",\"resolution\":\"Ensure that each parameter passed to %{klass}.includes is a valid name of an association on the %{klass} model. These are: %{relations}.\",\"summary\":\"Eager loading in Mongoid only supports providing arguments to %{klass}.includes that are the names of associations on the %{klass}.\"},\"invalid_index\":{\"message\":\"Invalid index specification on %{klass}: %{spec}, %{options}\",\"resolution\":\"Ensure that the index conforms to the correct syntax and has the correct options.\\\\n\\\\n Valid options are:\\\\n   background: true|false\\\\n   database: \\'database_name\\'\\\\n   name: \\'index_name\\'\\\\n   sparse: true|false\\\\n   unique: true|false\\\\n   min: 1\\\\n   max: 1\\\\n   bits: 26\\\\n   key: 26\\\\n   bucket_size : 1\\\\n   sphere_version : 1\\\\n   text_version : 1\\\\n   version : 1\\\\n   weights: { content: 1, title: 2 }\\\\n   expire_after_seconds: number_of_seconds\\\\n   partial_filter_expression\\\\n   storage_engine\\\\n   language_override\\\\n   default_language\\\\n   collation\\\\n   wildcard_projection: { \\'path.to.field.a\\': 1, \\'path.to.field.b\\': 0 }\\\\n Valid types are: 1, -1, \\'2d\\', \\'2dsphere\\', \\'geoHaystack (deprecated)\\', \\'text\\', \\'hashed\\'\\\\n\\\\n Example:\\\\n   class Band\\\\n     include Mongoid::Document\\\\n     index({ name: 1, label: -1 }, { sparse: true })\\\\n     index({ location: \\'2d\\' }, { background: true })\\\\n   end\\\\n\\\\n\",\"summary\":\"Indexes in Mongoid are defined as a hash of field name and direction/2d pairs, with a hash for any additional options.\"},\"invalid_options\":{\"message\":\"Invalid option :%{invalid} provided to association :%{name}.\",\"resolution\":\"Valid options are: %{valid}, make sure these are the ones you are using.\",\"summary\":\"Mongoid checks the options that are passed to the association macros to ensure that no ill side effects occur by letting something slip by.\"},\"invalid_path\":{\"message\":\"Having a root path assigned for %{klass} is invalid.\",\"resolution\":\"Most likely your embedded model, %{klass} is also referenced via a has_many from a root document in another collection. Double check the association definitions and fix any instances where embedded documents are improperly referenced from other collections.\",\"summary\":\"Mongoid has two different path objects for determining the location of a document in the database, Root and Embedded. This error is raised when an embedded document somehow gets a root path assigned.\"},\"invalid_persistence_option\":{\"message\":\"Invalid persistence option :%{invalid}.\",\"resolution\":\"Valid options are: %{valid}, make sure these are the ones you are using.\",\"summary\":\"The options used to change the persistence context must be one of the valid options for a mongo client, or a collection name.\"},\"invalid_relation\":{\"message\":\"Defining an association named \\'%{name}\\' is not allowed.\",\"resolution\":\"Use Mongoid.destructive_fields to see what names are not allowed, and don\\'t use these names. These include names that also conflict with core Ruby methods on Object, Module, Enumerable, or included gems that inject methods into these or Mongoid internals.\",\"summary\":\"Defining this association would override the method \\'%{name}\\', which would cause issues with expectations around the original method and cause extremely hard to debug issues. The original method was defined in:\\\\n   Object: %{origin}\\\\n   File: %{file}\\\\n   Line: %{line}\"},\"invalid_relation_option\":{\"message\":\"Invalid association option :%{option} for association \\'%{name}\\' on class %{klass}.\",\"resolution\":\"Valid options are: %{valid_options}, make sure you use only those.\",\"summary\":\"An invalid option was provided for an association.\"},\"invalid_scope\":{\"message\":\"Defining a scope of value %{value} on %{klass} is not allowed.\",\"resolution\":\"Change the scope to be a proc wrapped criteria.\\\\n\\\\n Example:\\\\n   class Band\\\\n     include Mongoid::Document\\\\n     scope :inactive, -\\\\u003e{ where(active: false) }\\\\n   end\\\\n\\\\n\",\"summary\":\"Scopes in Mongoid must be procs that wrap criteria objects.\"},\"invalid_session_nesting\":{\"message\":\"A session was started while another session was being used.\",\"resolution\":\"Only use one session at a time; sessions cannot be nested.\",\"summary\":\"Sessions cannot be nested. Only one session can be used in a thread at once.\"},\"invalid_session_use\":{\"message\":\"A session was attempted to be used with a model whose client cannot use that session.\",\"resolution\":\"Only execute operations on the model class or instances of the model through which the session was created. Otherwise, ensure that all models on which operations are executed in the session block share the same driver client. For example, a model may have a different client specified in its \\'store_in\\' options.\\\\n\\\\n\",\"summary\":\"Sessions are started via driver clients (Model#mongo_client) and, in most cases, driver clients are shared across models. When different models have their own clients, a session cannot be obtained via one model and used for operations on another model.\"},\"invalid_set_polymorphic_relation\":{\"message\":\"The %{name} attribute can\\'t be set to an instance of %{other_klass} as %{other_klass} has multiple associations referencing %{klass} as %{name}.\",\"resolution\":\"Set the values from the parent, or redefine the association with only a single definition in the parent.\",\"summary\":\"If the parent class of a polymorphic association has multiple definitions for the same association, the values must be set from the parent side and not the child side since Mongoid cannot determine from the child side which association to go in.\"},\"invalid_storage_options\":{\"message\":\"Invalid options passed to %{klass}.store_in: %{options}.\",\"resolution\":\"Change the options passed to store_in to match the documented API, and ensure all keys in the options hash are symbols.\\\\n\\\\n Example:\\\\n   class Band\\\\n     include Mongoid::Document\\\\n     store_in collection: \\'artists\\', database: \\'music\\'\\\\n   end\\\\n\\\\n\",\"summary\":\"The :store_in macro takes only a hash of parameters with the keys :database, :collection, :collection_options, or :client.\"},\"invalid_time\":{\"message\":\"\\'%{value}\\' is not a valid Time.\",\"resolution\":\"Make sure to pass parsable values to the field setter for Date, DateTime, and Time objects. When this is a String it needs to be valid for Time.parse. Other objects must be valid to pass to Time.local.\",\"summary\":\"Mongoid tries to serialize the values for Date, DateTime, and Time into proper UTC times to store in the database. The provided value could not be parsed.\"},\"inverse_not_found\":{\"message\":\"When adding a(n) %{klass} to %{base}#%{name}, Mongoid could not determine the inverse foreign key to set. The attempted key was \\'%{inverse}\\'.\",\"resolution\":\"If an inverse is not required, like a belongs_to or has_and_belongs_to_many, ensure that :inverse_of =\\\\u003e nil is set on the association. If the inverse is needed, most likely the inverse cannot be figured out from the names of the associations and you will need to explicitly tell Mongoid on the association what the inverse is.\\\\n\\\\n Example:\\\\n   class Car\\\\n     include Mongoid::Document\\\\n     has_one :engine, class_name: \\\\\"Motor\\\\\", inverse_of: :machine\\\\n   end\\\\n\\\\n   class Motor\\\\n     include Mongoid::Document\\\\n     belongs_to :machine, class_name: \\\\\"Car\\\\\", inverse_of: :engine\\\\n   end\",\"summary\":\"When adding a document to an association, Mongoid attempts to link the newly added document to the base of the association in memory, as well as set the foreign key to link them on the database side. In this case Mongoid could not determine what the inverse foreign key was.\"},\"message_title\":\"message\",\"mixed_client_configuration\":{\"message\":\"Both uri and standard configuration options defined for client: \\'%{name}\\'.\",\"resolution\":\"Provide either only a uri as configuration or only standard options.\",\"summary\":\"Instead of simply giving uri or standard options a preference order, Mongoid assumes that you have made a mistake in your configuration and requires that you provide one or the other, but not both. The options that were provided were: %{config}.\"},\"mixed_relations\":{\"message\":\"Referencing a(n) %{embedded} document from the %{root} document via a non-embedded association is not allowed since the %{embedded} is embedded.\",\"resolution\":\"Consider not embedding %{embedded}, or do the key storage and access in a custom manner in the application code.\",\"summary\":\"In order to properly access a(n) %{embedded} from %{root} the reference would need to go through the root document of %{embedded}. In a simple case this would require Mongoid to store an extra foreign key for the root, in more complex cases where %{embedded} is multiple levels deep a key would need to be stored for each parent up the hierarchy.\"},\"nested_attributes_metadata_not_found\":{\"message\":\"Could not find metadata for association \\'%{name}\\' on model: %{klass}.\",\"resolution\":\"Make sure that there is an association defined named \\'%{name}\\' on %{klass} or that the association definition comes before the accepts_nested_attributes_for macro in the model - order matters so that Mongoid has access to the metadata.\\\\n\\\\n Example:\\\\n   class Band\\\\n     include Mongoid::Document\\\\n     has_many :albums\\\\n     accepts_nested_attributes_for :albums\\\\n   end\\\\n\\\\n\",\"summary\":\"When defining nested attributes for an association, Mongoid needs to access the metadata for the association \\'%{name}\\' in order if add autosave functionality to it, if applicable. Either no association named \\'%{name}\\' could be found, or the association had not been defined yet.\"},\"no_client_config\":{\"message\":\"No configuration could be found for a client named \\'%{name}\\'.\",\"resolution\":\"Double check your mongoid.yml to make sure under the clients key that a configuration exists for \\'%{name}\\'. If you have set the configuration programmatically, ensure that \\'%{name}\\' exists in the configuration hash.\",\"summary\":\"When attempting to create the new client, Mongoid could not find a client configuration for the name: \\'%{name}\\'. This is necessary in order to know the host, port, and options needed to connect.\"},\"no_client_database\":{\"message\":\"No database provided for client configuration: :%{name}.\",\"resolution\":\"If configuring via a mongoid.yml, ensure that within your :%{name} section a :database value for the client\\'s default database is defined.\\\\n\\\\n Example:\\\\n   development:\\\\n     clients:\\\\n       %{name}:\\\\n         database: my_app_db\\\\n         hosts:\\\\n           - localhost:27017\\\\n\\\\n\",\"summary\":\"Each client configuration must provide a database so Mongoid knows where the default database to persist to. What was provided was: %{config}.\"},\"no_client_hosts\":{\"message\":\"No hosts provided for client configuration: :%{name}.\",\"resolution\":\"If configuring via a mongoid.yml, ensure that within your :%{name} section a :hosts value for the client hosts is defined.\\\\n\\\\n Example:\\\\n   development:\\\\n     clients:\\\\n       %{name}:\\\\n         database: my_app_db\\\\n         hosts:\\\\n           - localhost:27017\\\\n\\\\n\",\"summary\":\"Each client configuration must provide hosts so Mongoid knows where the database server is located. What was provided was: %{config}.\"},\"no_clients_config\":{\"message\":\"No clients configuration provided.\",\"resolution\":\"Double check your mongoid.yml to make sure that you have a top-level clients key with at least 1 default client configuration for it. You can regenerate a new mongoid.yml for assistance via `rails g mongoid:config`.\\\\n\\\\n Example:\\\\n   development:\\\\n     clients:\\\\n       default:\\\\n         database: mongoid_dev\\\\n         hosts:\\\\n           - localhost:27017\\\\n\\\\n\",\"summary\":\"Mongoid\\'s configuration requires that you provide details about each client that can be connected to, and requires in the clients config at least 1 default client to exist.\"},\"no_default_client\":{\"message\":\"No default client configuration is defined.\",\"resolution\":\"If configuring via a mongoid.yml, ensure that within your :clients section a :default client is defined.\\\\n\\\\n Example:\\\\n   development:\\\\n     clients:\\\\n       default:\\\\n         hosts:\\\\n           - localhost:27017\\\\n\\\\n\",\"summary\":\"The configuration provided settings for: %{keys}, but Mongoid requires a :default to be defined at minimum.\"},\"no_documents_found\":{\"message\":\"Could not find a document of class %{klass}.\",\"resolution\":\"Create a document of class %{klass} or use a finder method that does not raise an exception when no documents are found.\",\"summary\":\"Mongoid attempted to find a document of the class %{klass} but none exist.\"},\"no_environment\":{\"message\":\"Could not load the configuration since no environment was defined.\",\"resolution\":\"Please ensure an environment is set in one of the listed locations. The environment must be explicitly set.\",\"summary\":\"Mongoid could not determine the environment to use because it was not specified in any of the following locations: Rails.env, Sinatra::Base.environment, ENV[\\\\\"RACK_ENV\\\\\"], ENV[\\\\\"MONGOID_ENV\\\\\"]. Without knowing the environment, Mongoid cannot load its configuration.\"},\"no_map_reduce_output\":{\"message\":\"No output location was specified for the map/reduce operation.\",\"resolution\":\"Provide the location that the output of the operation is to go by chaining an #out call to the map/reduce.\\\\n\\\\n Example:\\\\n   Band.map_reduce(map, reduce).out(inline: 1)\\\\n\\\\n Valid options for the out function are:\\\\n   inline: 1\\\\n   merge: \\'collection-name\\'\\\\n   replace: \\'collection-name\\'\\\\n   reduce: \\'collection-name\\'\\\\n\\\\n\",\"summary\":\"When executing a map/reduce, you must provide the output location of the results. The attempted command was: %{command}.\"},\"no_metadata\":{\"message\":\"Metadata not found for document of type %{klass}.\",\"resolution\":\"Ensure that your associations on the %{klass} model are all properly defined, and that the inverse associations are also properly defined. Embedded associations must have both the parent (embeds_one/embeds_many) and the inverse (embedded_in) present in order to work properly.\",\"summary\":\"Mongoid sets the metadata of an association on the document when it is either loaded from within the association, or added to one. The presence of the metadata is required in order to provide various functionality around associations. Most likely you are getting this error because the document is embedded and was attempted to be persisted without being associated with a parent, or the association was not properly defined.\"},\"no_parent\":{\"message\":\"Cannot persist embedded document %{klass} without a parent document.\",\"resolution\":\"Ensure that you\\'ve set the parent association if instantiating the embedded document directly, or always create new embedded documents via the parent association.\",\"summary\":\"If the document is embedded, in order to be persisted it must always have a reference to its parent document. This is most likely caused by either calling %{klass}.create or %{klass}.create! without setting the parent document as an attribute.\"},\"readonly_attribute\":{\"message\":\"Attempted to set the readonly attribute \\'%{name}\\' with the value: %{value}.\",\"resolution\":\"Don\\'t define \\'%{name}\\' as readonly, or do not attempt to update its value after the document is persisted.\",\"summary\":\"Attributes flagged as readonly via Model.attr_readonly can only have values set when the document is a new record.\"},\"readonly_document\":{\"message\":\"Attempted to persist a readonly document of class \\'%{klass}\\'.\",\"resolution\":\"Don\\'t attempt to persist documents that are flagged as readonly.\",\"summary\":\"Documents that are marked readonly cannot be persisted.\"},\"resolution_title\":\"resolution\",\"scope_overwrite\":{\"message\":\"Cannot create scope :%{scope_name}, because of existing method %{model_name}.%{scope_name}.\",\"resolution\":\"Change the name of the scope so it does not conflict with the already defined method %{model_name}, or set the configuration option Mongoid.scope_overwrite_exception to false, which is its default. In this case a warning will be logged.\",\"summary\":\"When defining a scope that conflicts with a method that already exists on the model, this error will get raised if Mongoid.scope_overwrite_exception is set to true.\"},\"sessions_not_supported\":{\"message\":\"Sessions are not supported by the connected server(s).\",\"resolution\":\"Verify that all servers in your deployment are at least version 3.6 or don\\'t attempt to use sessions with older server versions.\",\"summary\":\"A session was attempted to be used with a MongoDB server version that doesn\\'t support sessions. Sessions are supported in MongoDB server versions 3.6 and higher.\"},\"summary_title\":\"summary\",\"too_many_nested_attribute_records\":{\"message\":\"Accepting nested attributes for %{association} is limited to %{limit} documents.\",\"resolution\":\"The limit is set as an option to the macro, for example: accepts_nested_attributes_for :%{association}, limit: %{limit}. Consider raising this limit or making sure no more are sent than the set value.\",\"summary\":\"More documents were sent to be processed than the allowed limit.\"},\"unknown_attribute\":{\"message\":\"Attempted to set a value for \\'%{name}\\' which is not allowed on the model %{klass}.\",\"resolution\":\"Define the field \\'%{name}\\' in %{klass}, or include Mongoid::Attributes::Dynamic in %{klass} if you intend to store values in fields that are not explicitly defined.\",\"summary\":\"%{klass}#%{name}= was called but there is no \\'%{name}\\' field defined in the model, and Mongoid::Attributes::Dynamic is not included. This error is also raised instead of NoMethodError if the unknown attribute is passed to any method that accepts an attributes hash, such as #attributes=.\"},\"unknown_model\":{\"message\":\"Attempted to instantiate an object of the unknown model \\'%{klass}\\'.\",\"resolution\":\"The _type field is a reserved one used by Mongoid to determine the class for instantiating an object. Please don\\'t save data in this field or ensure that any values in this field correspond to valid models.\",\"summary\":\"A document with the value \\'%{value}\\' at the key \\'_type\\' was used to instantiate a model object but Mongoid cannot find this Class.\"},\"unsaved_document\":{\"message\":\"Attempted to save %{document} before the parent %{base}.\",\"resolution\":\"Make sure to only use create or create! when the parent document %{base} is persisted.\",\"summary\":\"You cannot call create or create! through the association (%{document}) whose parent (%{base}) is not already saved. This would cause the database to be out of sync since the child could potentially reference a nonexistent parent.\"},\"unsupported_javascript\":{\"message\":\"Executing Javascript $where selector on an embedded criteria is not supported.\",\"resolution\":\"Please provide a standard hash to #where when the criteria is for an embedded association.\",\"summary\":\"Mongoid only supports providing a hash of arguments to #where criterion on embedded documents. Since %{klass} is embedded, the expression %{javascript} is not allowed.\"},\"validations\":{\"message\":\"Validation of %{document} failed.\",\"resolution\":\"Try persisting the document with valid data or remove the validations.\",\"summary\":\"The following errors were found: %{errors}\"}}}},\"number\":{\"currency\":{\"format\":{\"delimiter\":\",\",\"format\":\"%u%n\",\"negative_format\":\"-%u%n\",\"precision\":2,\"separator\":\".\",\"significant\":false,\"strip_insignificant_zeros\":false,\"unit\":\"$\"}},\"format\":{\"delimiter\":\",\",\"precision\":3,\"round_mode\":\"default\",\"separator\":\".\",\"significant\":false,\"strip_insignificant_zeros\":false},\"human\":{\"decimal_units\":{\"format\":\"%n %u\",\"units\":{\"billion\":\"Billion\",\"million\":\"Million\",\"quadrillion\":\"Quadrillion\",\"thousand\":\"Thousand\",\"trillion\":\"Trillion\",\"unit\":\"\"}},\"format\":{\"delimiter\":\"\",\"precision\":3,\"significant\":true,\"strip_insignificant_zeros\":true},\"storage_units\":{\"format\":\"%n %u\",\"units\":{\"byte\":{\"one\":\"Byte\",\"other\":\"Bytes\"},\"eb\":\"EB\",\"gb\":\"GB\",\"kb\":\"KB\",\"mb\":\"MB\",\"pb\":\"PB\",\"tb\":\"TB\",\"zb\":\"ZB\"}}},\"nth\":{},\"percentage\":{\"format\":{\"delimiter\":\"\",\"format\":\"%n%\"}},\"precision\":{\"format\":{\"delimiter\":\"\"}}},\"pivot_list_column_value\":{\"non_sponsor_org\":\"Non Lab\"},\"pivot_list_download\":{\"id\":\"LZ_ID\"},\"simple_form\":{\"error_notification\":{\"default_message\":\"Please review the problems below:\"},\"no\":\"No\",\"required\":{\"mark\":\"*\",\"text\":\"required\"},\"yes\":\"Yes\"},\"support\":{\"array\":{\"last_word_connector\":\", and \",\"two_words_connector\":\" and \",\"words_connector\":\", \"}},\"terminology\":{\"all_orgs_list_category\":\"Organizations\",\"companies_in_your_sf_label\":\"Companies in your Salesforce\",\"company_based_in\":\"Lab located in\",\"company_location\":\"Lab Location\",\"neglected_target_label\":\"Neglected Labs\",\"sponsor\":\"Lab\",\"sponsor_orgs_list_category\":\"Labs\",\"target_organization_title\":\"Lab\"},\"time\":{\"am\":\"am\",\"formats\":{\"default\":\"%a, %d %b %Y %H:%M:%S %z\",\"long\":\"%B %d, %Y %H:%M\",\"short\":\"%d %b %H:%M\"},\"pm\":\"pm\"},\"users\":{\"confirmations\":{\"new\":{\"legend\":\"Resend your %{brand_name} confirmation instructions\",\"message\":\"We need to confirm your email address to complete the sign up process. Supply your email address, below, and we will send you instructions on how to confirm your address.\",\"submit_button\":\"Send Confirmation Instructions\",\"title\":\"Resend confirmation instructions | %{brand_name}\"},\"show\":{\"legend\":\"Check your inbox for a confirmation email\",\"message\":\"If your e-mail exists in our database we have sent you a message with instructions. Check your inbox (or spam folder) for a message from \\'%{default_from_email}\\' containing the confirmation link.\",\"title\":\"Awaiting confirmation | %{brand_name}\"}},\"passwords\":{\"new\":{\"failures\":\"Note: If you make more than 5 sequential failed attempts to sign in with your %{brand_name} password, your account will be (temporarily) locked. Check your inbox for instruction on how to unlock your account, or we can\",\"legend\":\"Reset your %{brand_name} password\",\"message\":\"Supply your email address, below, and we will send you instructions on how to reset your password.\",\"resend_link\":\"resend a new set of unlock instructions\",\"submit_button\":\"Send Reset Instructions\",\"title\":\"Reset password | %{brand_name}\"},\"show\":{\"didnt_receive_email\":\"Didn\\'t receive the email?\",\"legend\":\"Password reset instructions sent\",\"message\":\"If your e-mail exists in our database we have sent you a message with password reset instructions. Check your inbox (or spam folder) for a message from \\'%{default_from_email}\\'.\",\"resend_link\":\"you can request another one here\",\"title\":\"Awaiting reset | %{brand_name}\"}}},\"will_paginate\":{\"container_aria_label\":\"Pagination\",\"next_label\":\"Next \\\\u0026#8594;\",\"page_aria_label\":\"Page %{page}\",\"page_entries_info\":{\"multi_page\":\"Displaying %{model} %{from} - %{to} of %{count} in total\",\"multi_page_html\":\"Displaying %{model} \\\\u003cb\\\\u003e%{from}\\\\u0026nbsp;-\\\\u0026nbsp;%{to}\\\\u003c/b\\\\u003e of \\\\u003cb\\\\u003e%{count}\\\\u003c/b\\\\u003e in total\",\"single_page\":{\"one\":\"Displaying 1 %{model}\",\"other\":\"Displaying all %{count} %{model}\",\"zero\":\"No %{model} found\"},\"single_page_html\":{\"one\":\"Displaying \\\\u003cb\\\\u003e1\\\\u003c/b\\\\u003e %{model}\",\"other\":\"Displaying \\\\u003cb\\\\u003eall\\\\u0026nbsp;%{count}\\\\u003c/b\\\\u003e %{model}\",\"zero\":\"No %{model} found\"}},\"page_gap\":\"\\\\u0026hellip;\",\"previous_label\":\"\\\\u0026#8592; Previous\"},\"x_mailer_header\":\"clicks.labza.com\"}'));\nI18n.translations[\"nl\"] = I18n.extend((I18n.translations[\"nl\"] || {}), JSON.parse('{\"activerecord\":{\"errors\":{\"messages\":{\"record_invalid\":\"Validation failed: %{errors}\",\"restrict_dependent_destroy\":{\"has_many\":\"Cannot delete record because dependent %{record} exist\",\"has_one\":\"Cannot delete record because a dependent %{record} exists\"}}}},\"bulk_uploads\":{\"email_local_part\":{\"empty_parameter\":\"No file uploaded\",\"error\":\"File Upload failed: %{error_message}\",\"success\":\"File was successfully uploaded\"}},\"common\":{\"crm\":{\"salesforce\":{\"forgot_password\":\"If you have forgotten your Salesforce password, please follow the instructions provided on the Salesforce sign in page.\",\"sign_in_button\":\"Sign In with Salesforce\"}}},\"contact\":{\"default_from_email\":\"info@zymewire.com\",\"phone_numbers\":[{\"label\":\"US\",\"phone\":\"1-844-996-3321\"},{\"label\":\"UK\",\"phone\":\"+44-208-133-9963\"}],\"support_email\":\"support@zymewire.com\"},\"date\":{\"abbr_day_names\":[\"Sun\",\"Mon\",\"Tue\",\"Wed\",\"Thu\",\"Fri\",\"Sat\"],\"abbr_month_names\":[null,\"Jan\",\"Feb\",\"Mar\",\"Apr\",\"May\",\"Jun\",\"Jul\",\"Aug\",\"Sep\",\"Oct\",\"Nov\",\"Dec\"],\"day_names\":[\"Sunday\",\"Monday\",\"Tuesday\",\"Wednesday\",\"Thursday\",\"Friday\",\"Saturday\"],\"formats\":{\"default\":\"%Y-%m-%d\",\"long\":\"%B %d, %Y\",\"short\":\"%b %d\"},\"month_names\":[null,\"January\",\"February\",\"March\",\"April\",\"May\",\"June\",\"July\",\"August\",\"September\",\"October\",\"November\",\"December\"],\"order\":[\"year\",\"month\",\"day\"]},\"datetime\":{\"distance_in_words\":{\"about_x_hours\":{\"one\":\"about 1 hour\",\"other\":\"about %{count} hours\"},\"about_x_months\":{\"one\":\"about 1 month\",\"other\":\"about %{count} months\"},\"about_x_years\":{\"one\":\"about 1 year\",\"other\":\"about %{count} years\"},\"almost_x_years\":{\"one\":\"almost 1 year\",\"other\":\"almost %{count} years\"},\"half_a_minute\":\"half a minute\",\"less_than_x_minutes\":{\"one\":\"less than a minute\",\"other\":\"less than %{count} minutes\"},\"less_than_x_seconds\":{\"one\":\"less than 1 second\",\"other\":\"less than %{count} seconds\"},\"over_x_years\":{\"one\":\"over 1 year\",\"other\":\"over %{count} years\"},\"x_days\":{\"one\":\"1 day\",\"other\":\"%{count} days\"},\"x_minutes\":{\"one\":\"1 minute\",\"other\":\"%{count} minutes\"},\"x_months\":{\"one\":\"1 month\",\"other\":\"%{count} months\"},\"x_seconds\":{\"one\":\"1 second\",\"other\":\"%{count} seconds\"}},\"prompts\":{\"day\":\"Day\",\"hour\":\"Hour\",\"minute\":\"Minute\",\"month\":\"Month\",\"second\":\"Seconds\",\"year\":\"Year\"}},\"default_host\":\"https://www.zymewire.com\",\"devise\":{\"confirmations\":{\"confirmed\":\"Your account was successfully confirmed. Please sign in.\",\"send_instructions\":\"Your email has not been confirmed. We need to confirm your email account before you can sign in. Please check your inbox or spam folder for an email from \\'info@zymewire.com\\' or request a new one.\",\"send_paranoid_instructions\":\"If your e-mail exists on our database, you will receive an email with instructions about how to confirm your account in a few minutes.\"},\"failure\":{\"already_authenticated\":\"You are already signed in.\",\"expired\":\"Je account is verlopen. Neem contact op met de site beheerder.\",\"inactive\":\"Your account was not activated yet.\",\"invalid\":\"Invalid email or password. If you use Salesforce, use the \\'Have Salesforce?\\' panel.\",\"invalid_token\":\"Invalid authentication token.\",\"last_attempt\":\"You have one more attempt before your account is locked.\",\"locked\":\"Your account is locked.\",\"not_active\":\"Your account has been de-activated, if you think this is a mistake please contact us\",\"not_found_in_database\":\"Invalid %{authentication_keys} or password.\",\"session_limited\":\"Je login is in een andere browser gebruikt. Log hier opnieuw in.\",\"timeout\":\"Your session expired, please sign in again to continue.\",\"unauthenticated\":\"You need to sign in or sign up before continuing.\",\"unconfirmed\":\"We must confirm your email before you can continue. Please check your inbox or spam folder for a confirmation email from \\'info@zymewire.com\\' or request a new one.\"},\"invalid_captcha\":\"De captcha invoer was ongeldig.\",\"invalid_security_question\":\"Het antwoord op de beveiligingsvraag was niet correct.\",\"mailer\":{\"confirmation_instructions\":{\"subject\":\"Confirmation instructions for Zymewire.com\"},\"email_changed\":{\"subject\":\"Email Changed\"},\"password_change\":{\"subject\":\"Password Changed\"},\"reset_password_instructions\":{\"subject\":\"Reset password instructions for Zymewire.com\"},\"unlock_instructions\":{\"subject\":\"Unlock Instructions for Zymewire.com\"}},\"omniauth_callbacks\":{\"failure\":\"Could not authorize you from %{kind} because \\\\\"%{reason}\\\\\".\",\"success\":\"Successfully authorized from %{kind} account.\"},\"paranoid_verification_code\":{\"show\":{\"submit\":\"Verstuur\",\"submit_verification_code\":\"Verstuur verificatie code\",\"verification_code\":\"Verificatie code\"},\"updated\":\"Verificatiecode geaccepteerd\"},\"paranoid_verify\":{\"code_required\":\"Voer de aangeleverde code in\"},\"password_expired\":{\"change_required\":\"Het wachtwoord is verlopen. Vernieuw je wachtwoord.\",\"show\":{\"change_my_password\":\"Verander mijn wachtwoord\",\"current_password\":\"Huidig wachtwoord\",\"new_password\":\"Nieuw wachtwoord\",\"new_password_confirmation\":\"Bevestig het nieuwe wachtwoord\",\"renew_your_password\":\"Vernieuw je wachtwoord\"},\"updated\":\"Het nieuwe wachtwoord is opgeslagen.\"},\"passwords\":{\"no_token\":\"You can\\'t access this page without coming from a password reset email. If you do come from a password reset email, please make sure you used the full URL provided.\",\"send_instructions\":\"You will receive an email with instructions about how to reset your password in a few minutes.\",\"send_paranoid_instructions\":\"If your e-mail exists on our database, you will receive a password recovery link on your e-mail\",\"updated\":\"Your password was changed successfully. You are now signed in.\",\"updated_not_active\":\"Your password was changed successfully.\"},\"registrations\":{\"destroyed\":\"Bye! Your account was successfully cancelled. We hope to see you again soon.\",\"signed_up\":\"Welcome! You have signed up successfully.\",\"signed_up_but_inactive\":\"You have signed up successfully. However, we could not sign you in because your account is not yet activated.\",\"signed_up_but_locked\":\"You have signed up successfully. However, we could not sign you in because your account is locked.\",\"signed_up_but_unconfirmed\":\"A message with a confirmation link has been sent to your email address. Please open the link to activate your account.\",\"update_needs_confirmation\":\"You updated your account successfully, but we need to verify your new email address. Please check your email and click on the confirm link to finalize confirming your new email address.\",\"updated\":\"You updated your account successfully.\",\"updated_but_not_signed_in\":\"Your account has been updated successfully, but since your password was changed, you need to sign in again.\"},\"sessions\":{\"already_signed_out\":\"Signed out successfully.\",\"signed_in\":\"Signed in successfully.\",\"signed_out\":\"Signed out successfully.\"},\"unlocks\":{\"send_instructions\":\"You will receive an email with instructions about how to unlock your account in a few minutes.\",\"send_paranoid_instructions\":\"If your account exists, you will receive an email with instructions about how to unlock it in a few minutes.\",\"unlocked\":\"Your account has been unlocked successfully. Please sign in to continue.\"}},\"download\":\"Download\",\"download_30_days\":\"This link will be available for 30 days after which the file will be removed from our servers.\",\"enumerize\":{\"blocklisted_contact\":{\"provider\":{\"insideview\":\"InsideView\",\"zephyr\":\"Zephyr\"}}},\"errors\":{\"format\":\"%{attribute} %{message}\",\"messages\":{\"accepted\":\"must be accepted\",\"already_confirmed\":\"was already confirmed, please try signing in\",\"blank\":\"can\\'t be blank\",\"confirmation\":\"doesn\\'t match %{attribute}\",\"confirmation_period_expired\":\"needs to be confirmed within %{period}, please request a new one\",\"empty\":\"can\\'t be empty\",\"equal_to\":\"must be equal to %{count}\",\"equal_to_current_password\":\"moet verschillen van het huidige wachtwoord.\",\"equal_to_email\":\"moet anders zijn dan de e-mail\",\"even\":\"must be even\",\"exclusion\":\"is reserved\",\"expired\":\"has expired, please request a new one\",\"greater_than\":\"must be greater than %{count}\",\"greater_than_or_equal_to\":\"must be greater than or equal to %{count}\",\"in\":\"must be in %{count}\",\"inclusion\":\"is not included in the list\",\"invalid\":\"is invalid\",\"less_than\":\"must be less than %{count}\",\"less_than_or_equal_to\":\"must be less than or equal to %{count}\",\"model_invalid\":\"Validation failed: %{errors}\",\"not_a_number\":\"is not a number\",\"not_an_integer\":\"must be an integer\",\"not_found\":\"not found\",\"not_locked\":\"was not locked\",\"not_saved\":{\"one\":\"1 error prohibited this %{resource} from being saved:\",\"other\":\"%{count} errors prohibited this %{resource} from being saved:\"},\"odd\":\"must be odd\",\"other_than\":\"must be other than %{count}\",\"password_complexity\":{\"digit\":{\"one\":\"moet minimaal 1 cijfer bevatten\",\"other\":\"moet minimaal %{count} cijfers bevatten\"},\"lower\":{\"one\":\"moet minimaal 1 kleine letter bevatten\",\"other\":\"moet minimaal %{count} kleine letters bevatten\"},\"symbol\":{\"one\":\"moet minimaal 1 leesteken of symbool bevatten\",\"other\":\"moet minimaal %{count} leestekens of symbolen bevatten\"},\"upper\":{\"one\":\"moet minimaal 1 hoofdletter bevatten\",\"other\":\"moet minimaal %{count} hoofdletters bevatten\"}},\"password_format\":\"Must contain uppercase AND lowercase letters and at least one number\",\"password_too_long\":\"is too long\",\"present\":\"must be blank\",\"required\":\"must exist\",\"taken\":\"has already been taken\",\"taken_in_past\":\"is eerder gebruikt.\",\"too_long\":{\"one\":\"is too long (maximum is 1 character)\",\"other\":\"is too long (maximum is %{count} characters)\"},\"too_short\":{\"one\":\"is too short (minimum is 1 character)\",\"other\":\"is too short (minimum is %{count} characters)\"},\"wrong_length\":{\"one\":\"is the wrong length (should be 1 character)\",\"other\":\"is the wrong length (should be %{count} characters)\"}}},\"flash\":{\"actions\":{\"create\":{\"notice\":\"%{resource_name} was successfully created.\"},\"destroy\":{\"alert\":\"%{resource_name} could not be destroyed.\",\"notice\":\"%{resource_name} was successfully destroyed.\"},\"update\":{\"notice\":\"%{resource_name} was successfully updated.\"}}},\"hello_world\":\"Hello world\",\"helpers\":{\"select\":{\"prompt\":\"Please select\"},\"submit\":{\"create\":\"Create %{model}\",\"submit\":\"Save %{model}\",\"update\":\"Update %{model}\"}},\"hi\":\"Hi\",\"mailers\":{\"common\":{\"chummy_sign_off\":\"Have a good one.\",\"final_note\":\"P.S.: If you think you received this email accidentally, then something weird could be going on. Hit reply and a member of the %{brand_name} team will investigate.\",\"team_sign_off\":\"- The %{brand_name} Team\"},\"confirmation_instructions_email\":{\"crm\":{\"salesforce\":{\"resource_confirmed\":\"Someone has requested a resend of a confirmation email. You do not need to confirm your email address because your account is configured to use Salesforce to sign in.\",\"resource_unconfirmed\":\"You do not need to confirm your email address because your account is configured to use Salesforce to sign in, please complete the sign up process by clicking the button below to sign in to %{brand_name} via Salesforce.\"}},\"non_crm\":{\"confirm_link\":\"Confirm my account\",\"welcome\":\"Welcome to %{brand_name}. As the final step in the process you\\'ll need to confirm your account by clicking on the link below.\"},\"subject\":\"Confirmation instructions for %{domain}\"},\"flagged_events_mailer\":{\"from\":\"Flagged events - %{brand_name} \\\\u003cflagged_events@mailer.%{domain}\\\\u003e\"},\"mobile_registration_email\":{\"alert_cs_registration_locked\":{\"subject\":\"%{brand_name}: user has had mobile registration locked, too many failed attempts\"},\"dispatch_registration_PIN\":{\"further_instructions\":\"If you are NOT attempting to register for the %{brand_name} Mobile app then please let us know at %{support_email_link} - thank you.\",\"introduction\":\"Here is your mobile app registration PIN:\",\"subject\":\"%{brand_name} Mobile Registration Verification\"},\"too_many_failed_attempts\":{\"introduction\":\"We have received too many failed mobile device registration attempts for your account and we will block any further requests. If you have not attempted to register a mobile device with us in the last hour then please let us know as it is likely someone has tried on your behalf. If you have been trying to register a device please contact %{support_email_link} and we can help unlock your account and get you registered.\",\"subject\":\"%{brand_name}: too many failed registration attempts\"}},\"org_list_download_mail\":{\"dispatch_link\":{\"introduction\":\"We have finished meshing your %{crm_brand_name} data with the companies in your \\\\\"%{list_name}\\\\\" list.\",\"subject\":\"%{brand_name}: your file download of \\'%{list_name}\\' is ready\"},\"failed\":{\"instructions\":\"You could try again in a little while. If you already have and are receiving this email again, please contact us at %{support_email_link}\",\"introduction\":\"We are really sorry, but something went wrong with creating your download of %{crm_brand_name} data for your \\\\\"%{list_name}\\\\\" list.\",\"subject\":\"%{brand_name}: your file download of \\'%{list_name}\\' failed\"}},\"reset_password_instructions_email\":{\"crm\":{\"salesforce\":{\"change_requested\":\"Someone has requested a change to your password. Your account is configured to use Salesforce to sign in.\"}},\"fishy_fine_print\":\"If you did not request a password change, then something weird is going on. Someone may be trying to access your account (unsuccessfully). Please reply to this email and let us know. We will take steps to make sure it stops.\",\"non_crm\":{\"change_password_link\":\"Change my password\",\"change_requested\":\"Someone has requested a change to your password, you can do this via the link below.\"},\"subject\":\"Password reset instructions for %{domain}\"},\"sales_force_mail\":{\"processing_completed\":{\"bullet_points\":[\"Only show events associated with companies in your Salesforce account\",\"Add new contacts and accounts to your Salesforce account without leaving %{brand_name}\",\"Access the \\'Salesforce details\\' panel on company dashboards where you can see open tasks, team interactions, opportunities, and more!\"],\"further_instructions\":\"We\\'re here to help. If you run into any questions or challenges, please contact us at %{support_email_link} and a member of our team would be more than happy to help.\",\"get_the_most\":\"To get the most from the integration, check out the \\'Mine Salesforce for opportunities\\' guide in the Help Center.\",\"guide_button\":\"Take me to the guide\",\"introduction\":\"Good news - your Salesforce account is now integrated with %{brand_name}. Now you’ll be able to:\"}},\"segment_contact\":{\"report_manager\":{\"fail_subject\":\"%{brand_name}: The PDF report generation failed\",\"success_subject\":\"%{brand_name}: Your PDF for %{company_name} is attached\"}},\"sf_token_expiry_email\":{\"further_instructions\":\"If you run into any questions or challenges, please contact us at %{support_email_link} and a member of our team would be more than happy to help.\",\"introduction\":\"Unfortunately the connection established for you between %{brand_name} and your %{crm_brand_name} account has expired. We will not be able to update your lists in %{brand_name} to reflect your %{crm_brand_name} database. To re-establish the connection, you just need to log in to %{brand_name} using your %{crm_brand_name}.\",\"subject\":\"%{brand_name} to %{crm_brand_name} connection has expired\"},\"share_list_mail\":{\"introduction\":\"%{user_name} shared a list with you: \",\"subject\":\"[%{brand_name} - shared list] %{list_name}\"},\"trial_expiry_mail\":{\"seven_days_to_go\":{\"further_instructions\":\"A member of our fabulous Customer Success team will arrange a welcome call with you to understand your goals and priorities, and will then give you a personalized Tour de %{brand_name} so you can easily access the information that is most valuable to you.\",\"instructions\":\"If you\\'d like continued access to the platform with our flexible month-to-month subscription, please ensure you contact %{support_email_link} ahead of: %{deadline}\",\"introduction\":\"Time flies when you\\'re uncovering new business opportunities! Your %{brand_name} trial is coming to an end next week.\",\"sign_off\":\"We look forward to helping you reach your sales goals!\",\"subject\":\"Just a heads up that your %{brand_name} trial is ending in seven days\"},\"seven_days_to_go_warning_for_cs\":{\"introduction\":\"%{user_name} shared a list with you: \",\"subject\":\"[%{brand_name} - shared list] %{list_name}\"}},\"unlock_instructions_email\":{\"crm\":{\"salesforce\":{\"change_requested\":\"You are being sent this email either because of one too many unsuccessful non-Salesforce log-in attempts or someone has requested an unlock email. %{brand_name} has not locked your account because your account is configured to use Salesforce to sign in.\",\"password_forgotten\":\"If you have forgotten your Salesforce password or think your account has been locked by Salesforce, please follow the instructions provided on the Salesforce sign in page.\"}},\"fishy_fine_print\":\"If you have not been (unsuccessfully) trying to log in to your account, then something weird is going on. Someone may be trying to access your account (unsuccessfully). Please reply to this email and let us know. We will take steps to make sure it stops.\",\"non_crm\":{\"change_requested\":\"For security reasons we have locked your account because of too many log-in attempts. To unlock your account, click the link below.\",\"unlock_account_link\":\"Unlock my account\"},\"subject\":\"Unlock instructions for %{domain}\"}},\"mongoid\":{\"errors\":{\"messages\":{\"ambiguous_relationship\":{\"message\":\"Ambiguous associations %{candidates} defined on %{klass}.\",\"resolution\":\"On the %{name} association on %{inverse} you must add an :inverse_of option to specify the exact association on %{klass} that is the opposite of %{name}.\",\"summary\":\"When Mongoid attempts to set an inverse document of an association in memory, it needs to know which association it belongs to. When setting %{name}, Mongoid looked on the class %{inverse} for a matching association, but multiples were found that could potentially match: %{candidates}.\"},\"blank_in_locale\":\"can\\'t be blank in %{location}\",\"callbacks\":{\"message\":\"Calling %{method} on %{klass} resulted in a false return from a callback.\",\"resolution\":\"Double check all before callbacks to make sure they are not unintentionally returning false.\",\"summary\":\"If a before callback returns false when using Document.create!, Document#save!, or Document#update_attributes! this error will get raised since the document did not actually get saved.\"},\"calling_document_find_with_nil_is_invalid\":{\"message\":\"Calling Document.find with nil is invalid.\",\"resolution\":\"Most likely this is caused by passing parameters directly through to the find, and the parameter either is not present or the key from which it is accessed is incorrect.\",\"summary\":\"Document.find expects the parameters to be 1 or more ids, and will return a single document if 1 id is provided, otherwise an array of documents if multiple ids are provided.\"},\"create_collection_failure\":{\"message\":\"Cannot create collection %{collection_name} with options %{collection_options}. The following error was raised: %{error}.\",\"resolution\":\"Double check that collection options for the collection %{collection_name} are valid. Consult with Ruby driver documentation and MongoDB documentation if the desired options are supported by your version of the server.\",\"summary\":\"The server rejected createCollection command with given collection options. This may happen when some of the options are invalid, or not supported by your version of the server.\"},\"criteria_argument_required\":{\"message\":\"Calling Criteria methods with nil arguments is not allowed.\",\"resolution\":\"Invoke Criteria methods with non-nil arguments or omit the respective invocations.\",\"summary\":\"Arguments to Criteria methods cannot be nil, and most Criteria methods require at least one argument. Only logical operations (and, or, nor and not), `all\\' and `where\\' can be called without arguments. The method that was called with nil argument was: %{query_method}.\"},\"delete_restriction\":{\"message\":\"Cannot destroy %{document} because of dependent \\'%{relation}\\'.\",\"resolution\":\"Don\\'t attempt to delete the parent %{document} when it has children, or change the dependent option on the association.\",\"summary\":\"When defining \\'%{relation}\\' with a :dependent =\\\\u003e :restrict_with_error, Mongoid will raise an error when attempting to destroy the %{document} when the child \\'%{relation}\\' still has documents in it.\"},\"destroy_restrict_with_error_dependencies_exist\":\"is not empty and prevents the document from being destroyed\",\"document_not_destroyed\":{\"message\":\"%{klass} with id %{id} was not destroyed.\",\"resolution\":\"Check the before/after destroy callbacks to ensure that the return values are truthy for the chain to continue.\",\"summary\":\"When calling %{klass}#destroy! and a callback halts the destroy callback chain by returning a false value, the deletion will not actually occur.\"},\"document_not_found\":{\"message\":\"Document(s) not found for class %{klass} with id(s) %{missing}.\",\"resolution\":\"Search for an id that is in the database or set the Mongoid.raise_not_found_error configuration option to false, which will cause nil to be returned instead of raising this error when searching for a single id, or only the matched documents when searching for multiples.\",\"summary\":\"When calling %{klass}.find with an id or array of ids, each parameter must match a document in the database or this error will be raised. The search was for the id(s): %{searched} (%{total} total) and the following ids were not found: %{missing}.\"},\"document_with_attributes_not_found\":{\"message\":\"Document not found for class %{klass} with attributes %{attributes}.\",\"resolution\":\"Search for attributes that are in the database or set the Mongoid.raise_not_found_error configuration option to false, which will cause nil to be returned instead of raising this error.\",\"summary\":\"When calling %{klass}.find_by with a hash of attributes, all attributes provided must match a document in the database or this error will be raised.\"},\"document_with_shard_key_not_found\":{\"message\":\"Document not found for class %{klass} with id %{missing} and shard key %{shard_key}.\",\"resolution\":\"Search for an id/shard key that is in the database or set the Mongoid.raise_not_found_error configuration option to false, which will cause nil to be returned instead of raising this error.\",\"summary\":\"When calling %{klass}.find with an id and a shard key, each parameter must match a document in the database or this error will be raised. The search was for the id: %{missing} with shard_key: %{shard_key} and it was not found.\"},\"drop_collection_failure\":{\"message\":\"Cannot drop collection %{collection_name}.\",\"resolution\":\"Try to drop the collection manually using Ruby driver or mongo shell.\",\"summary\":\"Mongoid tried to drop collection %{collection_name}, but the collection still exists in the database.\"},\"empty_config_file\":{\"message\":\"Empty configuration file: %{path}.\",\"resolution\":\"Ensure your configuration file contains the correct contents. Refer to: https://www.mongodb.com/docs/mongoid/current/reference/configuration/\",\"summary\":\"Your mongoid.yml configuration file appears to be empty.\"},\"immutable_attribute\":{\"message\":\"Attempted to change the immutable attribute \\'%{name}\\' with the value: %{value}.\",\"resolution\":\"Do not attempt to update the value of \\'%{name}\\' after the document is persisted.\",\"summary\":\"Immutable attributes can only have values set when the document is a new record.\"},\"in_memory_collation_not_supported\":{\"message\":\"A collation option cannot be applied when querying documents in-memory.\",\"resolution\":\"Remove the collation option from the query.\",\"summary\":\"The query being run against documents in memory has a collation option set. A collation option is only supported if the query is executed on a MongoDB server with version \\\\u003e= 3.4.\"},\"invalid_async_query_executor\":{\"message\":\"Invalid async_query_executor option: %{executor}.\",\"resolution\":\"Pick an allowed option or fix the typo. If you were expecting the option to be there, please consult the following page with respect to Mongoid\\'s configuration:\\\\n\\\\n   https://www.mongodb.com/docs/mongoid/current/reference/configuration/#mongoid-configuration-options\",\"summary\":\"A invalid async query executor was specified. The valid options are: %{options}.\"},\"invalid_collection\":{\"message\":\"Access to the collection for %{klass} is not allowed.\",\"resolution\":\"For access to the collection that the embedded document is in, use %{klass}#_root.collection, or do not attempt to persist an embedded document without a parent set.\",\"summary\":\"%{klass}.collection was called, and %{klass} is an embedded document - it resides within the collection of the root document of the hierarchy.\"},\"invalid_config_file\":{\"message\":\"Invalid configuration file: %{path}.\",\"resolution\":\"Ensure your configuration file contains the correct contents. Refer to: https://www.mongodb.com/docs/mongoid/current/reference/configuration/\",\"summary\":\"Your mongoid.yml configuration file does not contain the correct file structure.\"},\"invalid_config_option\":{\"message\":\"Invalid configuration option: %{name}.\",\"resolution\":\"Remove the invalid option or fix the typo. If you were expecting the option to be there, please consult the following page with respect to Mongoid\\'s configuration:\\\\n\\\\n   http://mongoid.org/en/mongoid/docs/installation.html\",\"summary\":\"A invalid configuration option was provided in your mongoid.yml, or a typo is potentially present. The valid configuration options are: %{options}.\"},\"invalid_dependent_strategy\":{\"message\":\"Invalid dependent strategy: %{invalid_strategy}.\",\"resolution\":\"Change the dependent strategy to one of the valid types.\",\"summary\":\"An invalid dependent strategy was defined for the association: %{association}. The valid strategies are: %{valid_strategies}.\"},\"invalid_discriminator_key_target\":{\"message\":\"Setting the discriminator key on a child class is not allowed.\",\"resolution\":\"Try setting the discriminator key on %{superclass} or one of %{class_name}\\'s ancestors.\",\"summary\":\"The discriminator key on the class %{class_name} was attempted to be changed. Changing the discriminator key on a child class is not allowed.\"},\"invalid_dot_dollar_assignment\":{\"message\":\"Cannot set the %{attr} attribute on the %{klass} class.\",\"resolution\":\"In order to set fields that start with a dollar sign ($) or contain a dot/period (.), the aggregation pipeline can be used. MongoDB provides specific operators for working with these fields. Refer to the MongoDB documentation here: https://www.mongodb.com/docs/manual/core/dot-dollar-considerations/\",\"summary\":\"Calling the setters for fields that start with a dollar sign ($) or contain a dot/period (.) is prohibited. See the Mongoid documentation on Field Names with Dots/Periods (.) and Dollar Signs ($) for more information.\"},\"invalid_elem_match_operator\":{\"message\":\"Invalid $elemMatch operator \\'%{operator}\\'.\",\"resolution\":\"Valid field operators are: %{valid_operators}. Ensure you are using one of these operators.\",\"summary\":\"You misspelled an operator or are using an operator that Mongoid does not support.\"},\"invalid_estimated_count_criteria\":{\"message\":\"Invalid criteria for estimated_count.\",\"resolution\":\"Try calling estimated_count directly on the class: %{class_name}.estimated_count.\\\\n\\\\n  If the class defines a default scope, use unscoped: %{class_name}.unscoped.estimated_count.\",\"summary\":\"Estimated count is strictly a collection-level operation and cannot be called on a filtered criteria.\"},\"invalid_expression_operator\":{\"message\":\"Invalid expression operator \\'%{operator}\\'.\",\"resolution\":\"Valid expression operators are: %{valid_operators}. Ensure you are using one of these operators.\",\"summary\":\"You misspelled an operator, are using an operator that Mongoid does not support, or are trying to use a field-level operator on expression level.\"},\"invalid_field\":{\"message\":\"Defining a field named \\'%{field}\\' is not allowed.\",\"resolution\":\"Use Mongoid.destructive_fields to see what names are not allowed, and don\\'t use these names. These include names that also conflict with core Ruby methods on Object, Module, Enumerable, or included gems that inject methods into these or Mongoid internals.\",\"summary\":\"Defining this field would override the method \\'%{name}\\', which would cause issues with expectations around the original method and cause extremely hard to debug issues. The original method was defined in:\\\\n   Object: %{origin}\\\\n   File: %{file}\\\\n   Line: %{line}\"},\"invalid_field_operator\":{\"message\":\"Invalid field operator \\'%{operator}\\'.\",\"resolution\":\"Valid field operators are: %{valid_operators}. Ensure you are using one of these operators.\",\"summary\":\"You misspelled an operator, are using an operator that Mongoid does not support, or are trying to use an expression-level operator on field level.\"},\"invalid_field_option\":{\"message\":\"Invalid option :%{option} provided for field :%{name}.\",\"resolution\":\"When defining the field :%{name} on \\'%{klass}\\', please provide valid options for the field. These are currently: %{valid}. If you meant to define a custom field option, please do so first as follows:\\\\n\\\\n   Mongoid::Fields.option :%{option} do |model, field, value|\\\\n     # Your logic here...\\\\n   end\\\\n   class %{klass}\\\\n     include Mongoid::Document\\\\n     field :%{name}, %{option}: true\\\\n   end\\\\n\\\\n Refer to: https://www.mongodb.com/docs/mongoid/current/reference/fields/#custom-field-options\",\"summary\":\"Mongoid requires that you only provide valid options on each field definition in order to prevent unexpected behavior later on.\"},\"invalid_field_type\":{\"message\":\"Invalid field type %{type_inspection} for field \\'%{field}\\' on model \\'%{klass}\\'.\",\"resolution\":\"Please provide a valid type value for the field. Refer to: https://www.mongodb.com/docs/mongoid/current/reference/fields/#using-symbols-or-strings-instead-of-classes\",\"summary\":\"Model \\'%{klass}\\' defines a field \\'%{field}\\' with an unknown type value %{type_inspection}.\"},\"invalid_global_executor_concurrency\":{\"message\":\"Invalid global_executor_concurrency option.\",\"resolution\":\"Set global_executor_concurrency option to :global_thread_pool or remove global_executor_concurrency option.\",\"summary\":\"You set global_executor_concurrency while async_query_executor option is not set to :global_thread_pool. The global_executor_concurrency is allowed only for the global thread pool executor.\"},\"invalid_includes\":{\"message\":\"Invalid includes directive: %{klass}.includes(%{args})\",\"resolution\":\"Ensure that each parameter passed to %{klass}.includes is a valid name of an association on the %{klass} model. These are: %{relations}.\",\"summary\":\"Eager loading in Mongoid only supports providing arguments to %{klass}.includes that are the names of associations on the %{klass}.\"},\"invalid_index\":{\"message\":\"Invalid index specification on %{klass}: %{spec}, %{options}\",\"resolution\":\"Ensure that the index conforms to the correct syntax and has the correct options.\\\\n\\\\n Valid options are:\\\\n   background: true|false\\\\n   database: \\'database_name\\'\\\\n   name: \\'index_name\\'\\\\n   sparse: true|false\\\\n   unique: true|false\\\\n   min: 1\\\\n   max: 1\\\\n   bits: 26\\\\n   key: 26\\\\n   bucket_size : 1\\\\n   sphere_version : 1\\\\n   text_version : 1\\\\n   version : 1\\\\n   weights: { content: 1, title: 2 }\\\\n   expire_after_seconds: number_of_seconds\\\\n   partial_filter_expression\\\\n   storage_engine\\\\n   language_override\\\\n   default_language\\\\n   collation\\\\n   wildcard_projection: { \\'path.to.field.a\\': 1, \\'path.to.field.b\\': 0 }\\\\n Valid types are: 1, -1, \\'2d\\', \\'2dsphere\\', \\'geoHaystack (deprecated)\\', \\'text\\', \\'hashed\\'\\\\n\\\\n Example:\\\\n   class Band\\\\n     include Mongoid::Document\\\\n     index({ name: 1, label: -1 }, { sparse: true })\\\\n     index({ location: \\'2d\\' }, { background: true })\\\\n   end\\\\n\\\\n\",\"summary\":\"Indexes in Mongoid are defined as a hash of field name and direction/2d pairs, with a hash for any additional options.\"},\"invalid_options\":{\"message\":\"Invalid option :%{invalid} provided to association :%{name}.\",\"resolution\":\"Valid options are: %{valid}, make sure these are the ones you are using.\",\"summary\":\"Mongoid checks the options that are passed to the association macros to ensure that no ill side effects occur by letting something slip by.\"},\"invalid_path\":{\"message\":\"Having a root path assigned for %{klass} is invalid.\",\"resolution\":\"Most likely your embedded model, %{klass} is also referenced via a has_many from a root document in another collection. Double check the association definitions and fix any instances where embedded documents are improperly referenced from other collections.\",\"summary\":\"Mongoid has two different path objects for determining the location of a document in the database, Root and Embedded. This error is raised when an embedded document somehow gets a root path assigned.\"},\"invalid_persistence_option\":{\"message\":\"Invalid persistence option :%{invalid}.\",\"resolution\":\"Valid options are: %{valid}, make sure these are the ones you are using.\",\"summary\":\"The options used to change the persistence context must be one of the valid options for a mongo client, or a collection name.\"},\"invalid_relation\":{\"message\":\"Defining an association named \\'%{name}\\' is not allowed.\",\"resolution\":\"Use Mongoid.destructive_fields to see what names are not allowed, and don\\'t use these names. These include names that also conflict with core Ruby methods on Object, Module, Enumerable, or included gems that inject methods into these or Mongoid internals.\",\"summary\":\"Defining this association would override the method \\'%{name}\\', which would cause issues with expectations around the original method and cause extremely hard to debug issues. The original method was defined in:\\\\n   Object: %{origin}\\\\n   File: %{file}\\\\n   Line: %{line}\"},\"invalid_relation_option\":{\"message\":\"Invalid association option :%{option} for association \\'%{name}\\' on class %{klass}.\",\"resolution\":\"Valid options are: %{valid_options}, make sure you use only those.\",\"summary\":\"An invalid option was provided for an association.\"},\"invalid_scope\":{\"message\":\"Defining a scope of value %{value} on %{klass} is not allowed.\",\"resolution\":\"Change the scope to be a proc wrapped criteria.\\\\n\\\\n Example:\\\\n   class Band\\\\n     include Mongoid::Document\\\\n     scope :inactive, -\\\\u003e{ where(active: false) }\\\\n   end\\\\n\\\\n\",\"summary\":\"Scopes in Mongoid must be procs that wrap criteria objects.\"},\"invalid_session_nesting\":{\"message\":\"A session was started while another session was being used.\",\"resolution\":\"Only use one session at a time; sessions cannot be nested.\",\"summary\":\"Sessions cannot be nested. Only one session can be used in a thread at once.\"},\"invalid_session_use\":{\"message\":\"A session was attempted to be used with a model whose client cannot use that session.\",\"resolution\":\"Only execute operations on the model class or instances of the model through which the session was created. Otherwise, ensure that all models on which operations are executed in the session block share the same driver client. For example, a model may have a different client specified in its \\'store_in\\' options.\\\\n\\\\n\",\"summary\":\"Sessions are started via driver clients (Model#mongo_client) and, in most cases, driver clients are shared across models. When different models have their own clients, a session cannot be obtained via one model and used for operations on another model.\"},\"invalid_set_polymorphic_relation\":{\"message\":\"The %{name} attribute can\\'t be set to an instance of %{other_klass} as %{other_klass} has multiple associations referencing %{klass} as %{name}.\",\"resolution\":\"Set the values from the parent, or redefine the association with only a single definition in the parent.\",\"summary\":\"If the parent class of a polymorphic association has multiple definitions for the same association, the values must be set from the parent side and not the child side since Mongoid cannot determine from the child side which association to go in.\"},\"invalid_storage_options\":{\"message\":\"Invalid options passed to %{klass}.store_in: %{options}.\",\"resolution\":\"Change the options passed to store_in to match the documented API, and ensure all keys in the options hash are symbols.\\\\n\\\\n Example:\\\\n   class Band\\\\n     include Mongoid::Document\\\\n     store_in collection: \\'artists\\', database: \\'music\\'\\\\n   end\\\\n\\\\n\",\"summary\":\"The :store_in macro takes only a hash of parameters with the keys :database, :collection, :collection_options, or :client.\"},\"invalid_time\":{\"message\":\"\\'%{value}\\' is not a valid Time.\",\"resolution\":\"Make sure to pass parsable values to the field setter for Date, DateTime, and Time objects. When this is a String it needs to be valid for Time.parse. Other objects must be valid to pass to Time.local.\",\"summary\":\"Mongoid tries to serialize the values for Date, DateTime, and Time into proper UTC times to store in the database. The provided value could not be parsed.\"},\"inverse_not_found\":{\"message\":\"When adding a(n) %{klass} to %{base}#%{name}, Mongoid could not determine the inverse foreign key to set. The attempted key was \\'%{inverse}\\'.\",\"resolution\":\"If an inverse is not required, like a belongs_to or has_and_belongs_to_many, ensure that :inverse_of =\\\\u003e nil is set on the association. If the inverse is needed, most likely the inverse cannot be figured out from the names of the associations and you will need to explicitly tell Mongoid on the association what the inverse is.\\\\n\\\\n Example:\\\\n   class Car\\\\n     include Mongoid::Document\\\\n     has_one :engine, class_name: \\\\\"Motor\\\\\", inverse_of: :machine\\\\n   end\\\\n\\\\n   class Motor\\\\n     include Mongoid::Document\\\\n     belongs_to :machine, class_name: \\\\\"Car\\\\\", inverse_of: :engine\\\\n   end\",\"summary\":\"When adding a document to an association, Mongoid attempts to link the newly added document to the base of the association in memory, as well as set the foreign key to link them on the database side. In this case Mongoid could not determine what the inverse foreign key was.\"},\"message_title\":\"message\",\"mixed_client_configuration\":{\"message\":\"Both uri and standard configuration options defined for client: \\'%{name}\\'.\",\"resolution\":\"Provide either only a uri as configuration or only standard options.\",\"summary\":\"Instead of simply giving uri or standard options a preference order, Mongoid assumes that you have made a mistake in your configuration and requires that you provide one or the other, but not both. The options that were provided were: %{config}.\"},\"mixed_relations\":{\"message\":\"Referencing a(n) %{embedded} document from the %{root} document via a non-embedded association is not allowed since the %{embedded} is embedded.\",\"resolution\":\"Consider not embedding %{embedded}, or do the key storage and access in a custom manner in the application code.\",\"summary\":\"In order to properly access a(n) %{embedded} from %{root} the reference would need to go through the root document of %{embedded}. In a simple case this would require Mongoid to store an extra foreign key for the root, in more complex cases where %{embedded} is multiple levels deep a key would need to be stored for each parent up the hierarchy.\"},\"nested_attributes_metadata_not_found\":{\"message\":\"Could not find metadata for association \\'%{name}\\' on model: %{klass}.\",\"resolution\":\"Make sure that there is an association defined named \\'%{name}\\' on %{klass} or that the association definition comes before the accepts_nested_attributes_for macro in the model - order matters so that Mongoid has access to the metadata.\\\\n\\\\n Example:\\\\n   class Band\\\\n     include Mongoid::Document\\\\n     has_many :albums\\\\n     accepts_nested_attributes_for :albums\\\\n   end\\\\n\\\\n\",\"summary\":\"When defining nested attributes for an association, Mongoid needs to access the metadata for the association \\'%{name}\\' in order if add autosave functionality to it, if applicable. Either no association named \\'%{name}\\' could be found, or the association had not been defined yet.\"},\"no_client_config\":{\"message\":\"No configuration could be found for a client named \\'%{name}\\'.\",\"resolution\":\"Double check your mongoid.yml to make sure under the clients key that a configuration exists for \\'%{name}\\'. If you have set the configuration programmatically, ensure that \\'%{name}\\' exists in the configuration hash.\",\"summary\":\"When attempting to create the new client, Mongoid could not find a client configuration for the name: \\'%{name}\\'. This is necessary in order to know the host, port, and options needed to connect.\"},\"no_client_database\":{\"message\":\"No database provided for client configuration: :%{name}.\",\"resolution\":\"If configuring via a mongoid.yml, ensure that within your :%{name} section a :database value for the client\\'s default database is defined.\\\\n\\\\n Example:\\\\n   development:\\\\n     clients:\\\\n       %{name}:\\\\n         database: my_app_db\\\\n         hosts:\\\\n           - localhost:27017\\\\n\\\\n\",\"summary\":\"Each client configuration must provide a database so Mongoid knows where the default database to persist to. What was provided was: %{config}.\"},\"no_client_hosts\":{\"message\":\"No hosts provided for client configuration: :%{name}.\",\"resolution\":\"If configuring via a mongoid.yml, ensure that within your :%{name} section a :hosts value for the client hosts is defined.\\\\n\\\\n Example:\\\\n   development:\\\\n     clients:\\\\n       %{name}:\\\\n         database: my_app_db\\\\n         hosts:\\\\n           - localhost:27017\\\\n\\\\n\",\"summary\":\"Each client configuration must provide hosts so Mongoid knows where the database server is located. What was provided was: %{config}.\"},\"no_clients_config\":{\"message\":\"No clients configuration provided.\",\"resolution\":\"Double check your mongoid.yml to make sure that you have a top-level clients key with at least 1 default client configuration for it. You can regenerate a new mongoid.yml for assistance via `rails g mongoid:config`.\\\\n\\\\n Example:\\\\n   development:\\\\n     clients:\\\\n       default:\\\\n         database: mongoid_dev\\\\n         hosts:\\\\n           - localhost:27017\\\\n\\\\n\",\"summary\":\"Mongoid\\'s configuration requires that you provide details about each client that can be connected to, and requires in the clients config at least 1 default client to exist.\"},\"no_default_client\":{\"message\":\"No default client configuration is defined.\",\"resolution\":\"If configuring via a mongoid.yml, ensure that within your :clients section a :default client is defined.\\\\n\\\\n Example:\\\\n   development:\\\\n     clients:\\\\n       default:\\\\n         hosts:\\\\n           - localhost:27017\\\\n\\\\n\",\"summary\":\"The configuration provided settings for: %{keys}, but Mongoid requires a :default to be defined at minimum.\"},\"no_documents_found\":{\"message\":\"Could not find a document of class %{klass}.\",\"resolution\":\"Create a document of class %{klass} or use a finder method that does not raise an exception when no documents are found.\",\"summary\":\"Mongoid attempted to find a document of the class %{klass} but none exist.\"},\"no_environment\":{\"message\":\"Could not load the configuration since no environment was defined.\",\"resolution\":\"Please ensure an environment is set in one of the listed locations. The environment must be explicitly set.\",\"summary\":\"Mongoid could not determine the environment to use because it was not specified in any of the following locations: Rails.env, Sinatra::Base.environment, ENV[\\\\\"RACK_ENV\\\\\"], ENV[\\\\\"MONGOID_ENV\\\\\"]. Without knowing the environment, Mongoid cannot load its configuration.\"},\"no_map_reduce_output\":{\"message\":\"No output location was specified for the map/reduce operation.\",\"resolution\":\"Provide the location that the output of the operation is to go by chaining an #out call to the map/reduce.\\\\n\\\\n Example:\\\\n   Band.map_reduce(map, reduce).out(inline: 1)\\\\n\\\\n Valid options for the out function are:\\\\n   inline: 1\\\\n   merge: \\'collection-name\\'\\\\n   replace: \\'collection-name\\'\\\\n   reduce: \\'collection-name\\'\\\\n\\\\n\",\"summary\":\"When executing a map/reduce, you must provide the output location of the results. The attempted command was: %{command}.\"},\"no_metadata\":{\"message\":\"Metadata not found for document of type %{klass}.\",\"resolution\":\"Ensure that your associations on the %{klass} model are all properly defined, and that the inverse associations are also properly defined. Embedded associations must have both the parent (embeds_one/embeds_many) and the inverse (embedded_in) present in order to work properly.\",\"summary\":\"Mongoid sets the metadata of an association on the document when it is either loaded from within the association, or added to one. The presence of the metadata is required in order to provide various functionality around associations. Most likely you are getting this error because the document is embedded and was attempted to be persisted without being associated with a parent, or the association was not properly defined.\"},\"no_parent\":{\"message\":\"Cannot persist embedded document %{klass} without a parent document.\",\"resolution\":\"Ensure that you\\'ve set the parent association if instantiating the embedded document directly, or always create new embedded documents via the parent association.\",\"summary\":\"If the document is embedded, in order to be persisted it must always have a reference to its parent document. This is most likely caused by either calling %{klass}.create or %{klass}.create! without setting the parent document as an attribute.\"},\"readonly_attribute\":{\"message\":\"Attempted to set the readonly attribute \\'%{name}\\' with the value: %{value}.\",\"resolution\":\"Don\\'t define \\'%{name}\\' as readonly, or do not attempt to update its value after the document is persisted.\",\"summary\":\"Attributes flagged as readonly via Model.attr_readonly can only have values set when the document is a new record.\"},\"readonly_document\":{\"message\":\"Attempted to persist a readonly document of class \\'%{klass}\\'.\",\"resolution\":\"Don\\'t attempt to persist documents that are flagged as readonly.\",\"summary\":\"Documents that are marked readonly cannot be persisted.\"},\"resolution_title\":\"resolution\",\"scope_overwrite\":{\"message\":\"Cannot create scope :%{scope_name}, because of existing method %{model_name}.%{scope_name}.\",\"resolution\":\"Change the name of the scope so it does not conflict with the already defined method %{model_name}, or set the configuration option Mongoid.scope_overwrite_exception to false, which is its default. In this case a warning will be logged.\",\"summary\":\"When defining a scope that conflicts with a method that already exists on the model, this error will get raised if Mongoid.scope_overwrite_exception is set to true.\"},\"sessions_not_supported\":{\"message\":\"Sessions are not supported by the connected server(s).\",\"resolution\":\"Verify that all servers in your deployment are at least version 3.6 or don\\'t attempt to use sessions with older server versions.\",\"summary\":\"A session was attempted to be used with a MongoDB server version that doesn\\'t support sessions. Sessions are supported in MongoDB server versions 3.6 and higher.\"},\"summary_title\":\"summary\",\"too_many_nested_attribute_records\":{\"message\":\"Accepting nested attributes for %{association} is limited to %{limit} documents.\",\"resolution\":\"The limit is set as an option to the macro, for example: accepts_nested_attributes_for :%{association}, limit: %{limit}. Consider raising this limit or making sure no more are sent than the set value.\",\"summary\":\"More documents were sent to be processed than the allowed limit.\"},\"unknown_attribute\":{\"message\":\"Attempted to set a value for \\'%{name}\\' which is not allowed on the model %{klass}.\",\"resolution\":\"Define the field \\'%{name}\\' in %{klass}, or include Mongoid::Attributes::Dynamic in %{klass} if you intend to store values in fields that are not explicitly defined.\",\"summary\":\"%{klass}#%{name}= was called but there is no \\'%{name}\\' field defined in the model, and Mongoid::Attributes::Dynamic is not included. This error is also raised instead of NoMethodError if the unknown attribute is passed to any method that accepts an attributes hash, such as #attributes=.\"},\"unknown_model\":{\"message\":\"Attempted to instantiate an object of the unknown model \\'%{klass}\\'.\",\"resolution\":\"The _type field is a reserved one used by Mongoid to determine the class for instantiating an object. Please don\\'t save data in this field or ensure that any values in this field correspond to valid models.\",\"summary\":\"A document with the value \\'%{value}\\' at the key \\'_type\\' was used to instantiate a model object but Mongoid cannot find this Class.\"},\"unsaved_document\":{\"message\":\"Attempted to save %{document} before the parent %{base}.\",\"resolution\":\"Make sure to only use create or create! when the parent document %{base} is persisted.\",\"summary\":\"You cannot call create or create! through the association (%{document}) whose parent (%{base}) is not already saved. This would cause the database to be out of sync since the child could potentially reference a nonexistent parent.\"},\"unsupported_javascript\":{\"message\":\"Executing Javascript $where selector on an embedded criteria is not supported.\",\"resolution\":\"Please provide a standard hash to #where when the criteria is for an embedded association.\",\"summary\":\"Mongoid only supports providing a hash of arguments to #where criterion on embedded documents. Since %{klass} is embedded, the expression %{javascript} is not allowed.\"},\"validations\":{\"message\":\"Validation of %{document} failed.\",\"resolution\":\"Try persisting the document with valid data or remove the validations.\",\"summary\":\"The following errors were found: %{errors}\"}}}},\"number\":{\"currency\":{\"format\":{\"delimiter\":\",\",\"format\":\"%u%n\",\"negative_format\":\"-%u%n\",\"precision\":2,\"separator\":\".\",\"significant\":false,\"strip_insignificant_zeros\":false,\"unit\":\"$\"}},\"format\":{\"delimiter\":\",\",\"precision\":3,\"round_mode\":\"default\",\"separator\":\".\",\"significant\":false,\"strip_insignificant_zeros\":false},\"human\":{\"decimal_units\":{\"format\":\"%n %u\",\"units\":{\"billion\":\"Billion\",\"million\":\"Million\",\"quadrillion\":\"Quadrillion\",\"thousand\":\"Thousand\",\"trillion\":\"Trillion\",\"unit\":\"\"}},\"format\":{\"delimiter\":\"\",\"precision\":3,\"significant\":true,\"strip_insignificant_zeros\":true},\"storage_units\":{\"format\":\"%n %u\",\"units\":{\"byte\":{\"one\":\"Byte\",\"other\":\"Bytes\"},\"eb\":\"EB\",\"gb\":\"GB\",\"kb\":\"KB\",\"mb\":\"MB\",\"pb\":\"PB\",\"tb\":\"TB\",\"zb\":\"ZB\"}}},\"nth\":{},\"percentage\":{\"format\":{\"delimiter\":\"\",\"format\":\"%n%\"}},\"precision\":{\"format\":{\"delimiter\":\"\"}}},\"simple_form\":{\"error_notification\":{\"default_message\":\"Please review the problems below:\"},\"no\":\"No\",\"required\":{\"mark\":\"*\",\"text\":\"required\"},\"yes\":\"Yes\"},\"support\":{\"array\":{\"last_word_connector\":\", and \",\"two_words_connector\":\" and \",\"words_connector\":\", \"}},\"time\":{\"am\":\"am\",\"formats\":{\"default\":\"%a, %d %b %Y %H:%M:%S %z\",\"long\":\"%B %d, %Y %H:%M\",\"short\":\"%d %b %H:%M\"},\"pm\":\"pm\"},\"users\":{\"confirmations\":{\"new\":{\"legend\":\"Resend your %{brand_name} confirmation instructions\",\"message\":\"We need to confirm your email address to complete the sign up process. Supply your email address, below, and we will send you instructions on how to confirm your address.\",\"submit_button\":\"Send Confirmation Instructions\",\"title\":\"Resend confirmation instructions | %{brand_name}\"},\"show\":{\"legend\":\"Check your inbox for a confirmation email\",\"message\":\"If your e-mail exists in our database we have sent you a message with instructions. Check your inbox (or spam folder) for a message from \\'%{default_from_email}\\' containing the confirmation link.\",\"title\":\"Awaiting confirmation | %{brand_name}\"}},\"passwords\":{\"new\":{\"failures\":\"Note: If you make more than 5 sequential failed attempts to sign in with your %{brand_name} password, your account will be (temporarily) locked. Check your inbox for instruction on how to unlock your account, or we can\",\"legend\":\"Reset your %{brand_name} password\",\"message\":\"Supply your email address, below, and we will send you instructions on how to reset your password.\",\"resend_link\":\"resend a new set of unlock instructions\",\"submit_button\":\"Send Reset Instructions\",\"title\":\"Reset password | %{brand_name}\"},\"show\":{\"didnt_receive_email\":\"Didn\\'t receive the email?\",\"legend\":\"Password reset instructions sent\",\"message\":\"If your e-mail exists in our database we have sent you a message with password reset instructions. Check your inbox (or spam folder) for a message from \\'%{default_from_email}\\'.\",\"resend_link\":\"you can request another one here\",\"title\":\"Awaiting reset | %{brand_name}\"}}},\"will_paginate\":{\"container_aria_label\":\"Pagination\",\"next_label\":\"Next \\\\u0026#8594;\",\"page_aria_label\":\"Page %{page}\",\"page_entries_info\":{\"multi_page\":\"Displaying %{model} %{from} - %{to} of %{count} in total\",\"multi_page_html\":\"Displaying %{model} \\\\u003cb\\\\u003e%{from}\\\\u0026nbsp;-\\\\u0026nbsp;%{to}\\\\u003c/b\\\\u003e of \\\\u003cb\\\\u003e%{count}\\\\u003c/b\\\\u003e in total\",\"single_page\":{\"one\":\"Displaying 1 %{model}\",\"other\":\"Displaying all %{count} %{model}\",\"zero\":\"No %{model} found\"},\"single_page_html\":{\"one\":\"Displaying \\\\u003cb\\\\u003e1\\\\u003c/b\\\\u003e %{model}\",\"other\":\"Displaying \\\\u003cb\\\\u003eall\\\\u0026nbsp;%{count}\\\\u003c/b\\\\u003e %{model}\",\"zero\":\"No %{model} found\"}},\"page_gap\":\"\\\\u0026hellip;\",\"previous_label\":\"\\\\u0026#8592; Previous\"}}'));\nI18n.translations[\"pt\"] = I18n.extend((I18n.translations[\"pt\"] || {}), JSON.parse('{\"activerecord\":{\"errors\":{\"messages\":{\"record_invalid\":\"Validation failed: %{errors}\",\"restrict_dependent_destroy\":{\"has_many\":\"Cannot delete record because dependent %{record} exist\",\"has_one\":\"Cannot delete record because a dependent %{record} exists\"}}}},\"bulk_uploads\":{\"email_local_part\":{\"empty_parameter\":\"No file uploaded\",\"error\":\"File Upload failed: %{error_message}\",\"success\":\"File was successfully uploaded\"}},\"common\":{\"crm\":{\"salesforce\":{\"forgot_password\":\"If you have forgotten your Salesforce password, please follow the instructions provided on the Salesforce sign in page.\",\"sign_in_button\":\"Sign In with Salesforce\"}}},\"contact\":{\"default_from_email\":\"info@zymewire.com\",\"phone_numbers\":[{\"label\":\"US\",\"phone\":\"1-844-996-3321\"},{\"label\":\"UK\",\"phone\":\"+44-208-133-9963\"}],\"support_email\":\"support@zymewire.com\"},\"date\":{\"abbr_day_names\":[\"Sun\",\"Mon\",\"Tue\",\"Wed\",\"Thu\",\"Fri\",\"Sat\"],\"abbr_month_names\":[null,\"Jan\",\"Feb\",\"Mar\",\"Apr\",\"May\",\"Jun\",\"Jul\",\"Aug\",\"Sep\",\"Oct\",\"Nov\",\"Dec\"],\"day_names\":[\"Sunday\",\"Monday\",\"Tuesday\",\"Wednesday\",\"Thursday\",\"Friday\",\"Saturday\"],\"formats\":{\"default\":\"%Y-%m-%d\",\"long\":\"%B %d, %Y\",\"short\":\"%b %d\"},\"month_names\":[null,\"January\",\"February\",\"March\",\"April\",\"May\",\"June\",\"July\",\"August\",\"September\",\"October\",\"November\",\"December\"],\"order\":[\"year\",\"month\",\"day\"]},\"datetime\":{\"distance_in_words\":{\"about_x_hours\":{\"one\":\"about 1 hour\",\"other\":\"about %{count} hours\"},\"about_x_months\":{\"one\":\"about 1 month\",\"other\":\"about %{count} months\"},\"about_x_years\":{\"one\":\"about 1 year\",\"other\":\"about %{count} years\"},\"almost_x_years\":{\"one\":\"almost 1 year\",\"other\":\"almost %{count} years\"},\"half_a_minute\":\"half a minute\",\"less_than_x_minutes\":{\"one\":\"less than a minute\",\"other\":\"less than %{count} minutes\"},\"less_than_x_seconds\":{\"one\":\"less than 1 second\",\"other\":\"less than %{count} seconds\"},\"over_x_years\":{\"one\":\"over 1 year\",\"other\":\"over %{count} years\"},\"x_days\":{\"one\":\"1 day\",\"other\":\"%{count} days\"},\"x_minutes\":{\"one\":\"1 minute\",\"other\":\"%{count} minutes\"},\"x_months\":{\"one\":\"1 month\",\"other\":\"%{count} months\"},\"x_seconds\":{\"one\":\"1 second\",\"other\":\"%{count} seconds\"}},\"prompts\":{\"day\":\"Day\",\"hour\":\"Hour\",\"minute\":\"Minute\",\"month\":\"Month\",\"second\":\"Seconds\",\"year\":\"Year\"}},\"default_host\":\"https://www.zymewire.com\",\"devise\":{\"confirmations\":{\"confirmed\":\"Your account was successfully confirmed. Please sign in.\",\"send_instructions\":\"Your email has not been confirmed. We need to confirm your email account before you can sign in. Please check your inbox or spam folder for an email from \\'info@zymewire.com\\' or request a new one.\",\"send_paranoid_instructions\":\"If your e-mail exists on our database, you will receive an email with instructions about how to confirm your account in a few minutes.\"},\"failure\":{\"already_authenticated\":\"You are already signed in.\",\"expired\":\"Sua conta expirou por inatividade. Por favor contate o administrador do site.\",\"inactive\":\"Your account was not activated yet.\",\"invalid\":\"Invalid email or password. If you use Salesforce, use the \\'Have Salesforce?\\' panel.\",\"invalid_token\":\"Invalid authentication token.\",\"last_attempt\":\"You have one more attempt before your account is locked.\",\"locked\":\"Your account is locked.\",\"not_active\":\"Your account has been de-activated, if you think this is a mistake please contact us\",\"not_found_in_database\":\"Invalid %{authentication_keys} or password.\",\"session_limited\":\"Seu login foi utilizado em outro local. Faça o login novamente para continuar.\",\"timeout\":\"Your session expired, please sign in again to continue.\",\"unauthenticated\":\"You need to sign in or sign up before continuing.\",\"unconfirmed\":\"We must confirm your email before you can continue. Please check your inbox or spam folder for a confirmation email from \\'info@zymewire.com\\' or request a new one.\"},\"invalid_captcha\":\"O captcha está errado.\",\"invalid_security_question\":\"A resposta da pergunta de segurança está errada.\",\"mailer\":{\"confirmation_instructions\":{\"subject\":\"Confirmation instructions for Zymewire.com\"},\"email_changed\":{\"subject\":\"Email Changed\"},\"password_change\":{\"subject\":\"Password Changed\"},\"reset_password_instructions\":{\"subject\":\"Reset password instructions for Zymewire.com\"},\"unlock_instructions\":{\"subject\":\"Unlock Instructions for Zymewire.com\"}},\"omniauth_callbacks\":{\"failure\":\"Could not authorize you from %{kind} because \\\\\"%{reason}\\\\\".\",\"success\":\"Successfully authorized from %{kind} account.\"},\"paranoid_verification_code\":{\"show\":{\"submit\":\"Enviar\",\"submit_verification_code\":\"Enviar código de verificação\",\"verification_code\":\"Código de verificação\"},\"updated\":\"Código de verificação aceito\"},\"paranoid_verify\":{\"code_required\":\"Por favor entre o código que a equipe de suporte enviou\"},\"password_expired\":{\"change_required\":\"Sua senha expirou. Renove sua senha por favor.\",\"show\":{\"change_my_password\":\"Mudar minha senha\",\"current_password\":\"Senha atual\",\"new_password\":\"Senha nova\",\"new_password_confirmation\":\"Confirmar senha nova\",\"renew_your_password\":\"Renove sua senha\"},\"updated\":\"A nova senha foi salva.\"},\"passwords\":{\"no_token\":\"You can\\'t access this page without coming from a password reset email. If you do come from a password reset email, please make sure you used the full URL provided.\",\"send_instructions\":\"You will receive an email with instructions about how to reset your password in a few minutes.\",\"send_paranoid_instructions\":\"If your e-mail exists on our database, you will receive a password recovery link on your e-mail\",\"updated\":\"Your password was changed successfully. You are now signed in.\",\"updated_not_active\":\"Your password was changed successfully.\"},\"registrations\":{\"destroyed\":\"Bye! Your account was successfully cancelled. We hope to see you again soon.\",\"signed_up\":\"Welcome! You have signed up successfully.\",\"signed_up_but_inactive\":\"You have signed up successfully. However, we could not sign you in because your account is not yet activated.\",\"signed_up_but_locked\":\"You have signed up successfully. However, we could not sign you in because your account is locked.\",\"signed_up_but_unconfirmed\":\"A message with a confirmation link has been sent to your email address. Please open the link to activate your account.\",\"update_needs_confirmation\":\"You updated your account successfully, but we need to verify your new email address. Please check your email and click on the confirm link to finalize confirming your new email address.\",\"updated\":\"You updated your account successfully.\",\"updated_but_not_signed_in\":\"Your account has been updated successfully, but since your password was changed, you need to sign in again.\"},\"sessions\":{\"already_signed_out\":\"Signed out successfully.\",\"signed_in\":\"Signed in successfully.\",\"signed_out\":\"Signed out successfully.\"},\"unlocks\":{\"send_instructions\":\"You will receive an email with instructions about how to unlock your account in a few minutes.\",\"send_paranoid_instructions\":\"If your account exists, you will receive an email with instructions about how to unlock it in a few minutes.\",\"unlocked\":\"Your account has been unlocked successfully. Please sign in to continue.\"}},\"download\":\"Download\",\"download_30_days\":\"This link will be available for 30 days after which the file will be removed from our servers.\",\"enumerize\":{\"blocklisted_contact\":{\"provider\":{\"insideview\":\"InsideView\",\"zephyr\":\"Zephyr\"}}},\"errors\":{\"format\":\"%{attribute} %{message}\",\"messages\":{\"accepted\":\"must be accepted\",\"already_confirmed\":\"was already confirmed, please try signing in\",\"blank\":\"can\\'t be blank\",\"confirmation\":\"doesn\\'t match %{attribute}\",\"confirmation_period_expired\":\"needs to be confirmed within %{period}, please request a new one\",\"empty\":\"can\\'t be empty\",\"equal_to\":\"must be equal to %{count}\",\"equal_to_current_password\":\"deve ser diferente da senha atual.\",\"equal_to_email\":\"deve ser diferente do e-mail.\",\"even\":\"must be even\",\"exclusion\":\"is reserved\",\"expired\":\"has expired, please request a new one\",\"greater_than\":\"must be greater than %{count}\",\"greater_than_or_equal_to\":\"must be greater than or equal to %{count}\",\"in\":\"must be in %{count}\",\"inclusion\":\"is not included in the list\",\"invalid\":\"is invalid\",\"less_than\":\"must be less than %{count}\",\"less_than_or_equal_to\":\"must be less than or equal to %{count}\",\"model_invalid\":\"Validation failed: %{errors}\",\"not_a_number\":\"is not a number\",\"not_an_integer\":\"must be an integer\",\"not_found\":\"not found\",\"not_locked\":\"was not locked\",\"not_saved\":{\"one\":\"1 error prohibited this %{resource} from being saved:\",\"other\":\"%{count} errors prohibited this %{resource} from being saved:\"},\"odd\":\"must be odd\",\"other_than\":\"must be other than %{count}\",\"password_complexity\":{\"digit\":{\"one\":\"deve conter ao menos um dígito\",\"other\":\"deve conter ao menos %{count} dígitos\"},\"lower\":{\"one\":\"deve conter ao menos uma letra minúscula\",\"other\":\"deve conter ao menos %{count} letras minúsculas\"},\"symbol\":{\"one\":\"deve conter ao menos um símbolo\",\"other\":\"deve conter ao menos %{count} símbolos\"},\"upper\":{\"one\":\"deve conter ao menos uma letra maiúscula\",\"other\":\"deve conter ao menos %{count} letras maiúsculas\"}},\"password_format\":\"Must contain uppercase AND lowercase letters and at least one number\",\"password_too_long\":\"is too long\",\"present\":\"must be blank\",\"required\":\"must exist\",\"taken\":\"has already been taken\",\"taken_in_past\":\"foi usada anteriormente.\",\"too_long\":{\"one\":\"is too long (maximum is 1 character)\",\"other\":\"is too long (maximum is %{count} characters)\"},\"too_short\":{\"one\":\"is too short (minimum is 1 character)\",\"other\":\"is too short (minimum is %{count} characters)\"},\"wrong_length\":{\"one\":\"is the wrong length (should be 1 character)\",\"other\":\"is the wrong length (should be %{count} characters)\"}}},\"flash\":{\"actions\":{\"create\":{\"notice\":\"%{resource_name} was successfully created.\"},\"destroy\":{\"alert\":\"%{resource_name} could not be destroyed.\",\"notice\":\"%{resource_name} was successfully destroyed.\"},\"update\":{\"notice\":\"%{resource_name} was successfully updated.\"}}},\"hello_world\":\"Hello world\",\"helpers\":{\"select\":{\"prompt\":\"Please select\"},\"submit\":{\"create\":\"Create %{model}\",\"submit\":\"Save %{model}\",\"update\":\"Update %{model}\"}},\"hi\":\"Hi\",\"mailers\":{\"common\":{\"chummy_sign_off\":\"Have a good one.\",\"final_note\":\"P.S.: If you think you received this email accidentally, then something weird could be going on. Hit reply and a member of the %{brand_name} team will investigate.\",\"team_sign_off\":\"- The %{brand_name} Team\"},\"confirmation_instructions_email\":{\"crm\":{\"salesforce\":{\"resource_confirmed\":\"Someone has requested a resend of a confirmation email. You do not need to confirm your email address because your account is configured to use Salesforce to sign in.\",\"resource_unconfirmed\":\"You do not need to confirm your email address because your account is configured to use Salesforce to sign in, please complete the sign up process by clicking the button below to sign in to %{brand_name} via Salesforce.\"}},\"non_crm\":{\"confirm_link\":\"Confirm my account\",\"welcome\":\"Welcome to %{brand_name}. As the final step in the process you\\'ll need to confirm your account by clicking on the link below.\"},\"subject\":\"Confirmation instructions for %{domain}\"},\"flagged_events_mailer\":{\"from\":\"Flagged events - %{brand_name} \\\\u003cflagged_events@mailer.%{domain}\\\\u003e\"},\"mobile_registration_email\":{\"alert_cs_registration_locked\":{\"subject\":\"%{brand_name}: user has had mobile registration locked, too many failed attempts\"},\"dispatch_registration_PIN\":{\"further_instructions\":\"If you are NOT attempting to register for the %{brand_name} Mobile app then please let us know at %{support_email_link} - thank you.\",\"introduction\":\"Here is your mobile app registration PIN:\",\"subject\":\"%{brand_name} Mobile Registration Verification\"},\"too_many_failed_attempts\":{\"introduction\":\"We have received too many failed mobile device registration attempts for your account and we will block any further requests. If you have not attempted to register a mobile device with us in the last hour then please let us know as it is likely someone has tried on your behalf. If you have been trying to register a device please contact %{support_email_link} and we can help unlock your account and get you registered.\",\"subject\":\"%{brand_name}: too many failed registration attempts\"}},\"org_list_download_mail\":{\"dispatch_link\":{\"introduction\":\"We have finished meshing your %{crm_brand_name} data with the companies in your \\\\\"%{list_name}\\\\\" list.\",\"subject\":\"%{brand_name}: your file download of \\'%{list_name}\\' is ready\"},\"failed\":{\"instructions\":\"You could try again in a little while. If you already have and are receiving this email again, please contact us at %{support_email_link}\",\"introduction\":\"We are really sorry, but something went wrong with creating your download of %{crm_brand_name} data for your \\\\\"%{list_name}\\\\\" list.\",\"subject\":\"%{brand_name}: your file download of \\'%{list_name}\\' failed\"}},\"reset_password_instructions_email\":{\"crm\":{\"salesforce\":{\"change_requested\":\"Someone has requested a change to your password. Your account is configured to use Salesforce to sign in.\"}},\"fishy_fine_print\":\"If you did not request a password change, then something weird is going on. Someone may be trying to access your account (unsuccessfully). Please reply to this email and let us know. We will take steps to make sure it stops.\",\"non_crm\":{\"change_password_link\":\"Change my password\",\"change_requested\":\"Someone has requested a change to your password, you can do this via the link below.\"},\"subject\":\"Password reset instructions for %{domain}\"},\"sales_force_mail\":{\"processing_completed\":{\"bullet_points\":[\"Only show events associated with companies in your Salesforce account\",\"Add new contacts and accounts to your Salesforce account without leaving %{brand_name}\",\"Access the \\'Salesforce details\\' panel on company dashboards where you can see open tasks, team interactions, opportunities, and more!\"],\"further_instructions\":\"We\\'re here to help. If you run into any questions or challenges, please contact us at %{support_email_link} and a member of our team would be more than happy to help.\",\"get_the_most\":\"To get the most from the integration, check out the \\'Mine Salesforce for opportunities\\' guide in the Help Center.\",\"guide_button\":\"Take me to the guide\",\"introduction\":\"Good news - your Salesforce account is now integrated with %{brand_name}. Now you’ll be able to:\"}},\"segment_contact\":{\"report_manager\":{\"fail_subject\":\"%{brand_name}: The PDF report generation failed\",\"success_subject\":\"%{brand_name}: Your PDF for %{company_name} is attached\"}},\"sf_token_expiry_email\":{\"further_instructions\":\"If you run into any questions or challenges, please contact us at %{support_email_link} and a member of our team would be more than happy to help.\",\"introduction\":\"Unfortunately the connection established for you between %{brand_name} and your %{crm_brand_name} account has expired. We will not be able to update your lists in %{brand_name} to reflect your %{crm_brand_name} database. To re-establish the connection, you just need to log in to %{brand_name} using your %{crm_brand_name}.\",\"subject\":\"%{brand_name} to %{crm_brand_name} connection has expired\"},\"share_list_mail\":{\"introduction\":\"%{user_name} shared a list with you: \",\"subject\":\"[%{brand_name} - shared list] %{list_name}\"},\"trial_expiry_mail\":{\"seven_days_to_go\":{\"further_instructions\":\"A member of our fabulous Customer Success team will arrange a welcome call with you to understand your goals and priorities, and will then give you a personalized Tour de %{brand_name} so you can easily access the information that is most valuable to you.\",\"instructions\":\"If you\\'d like continued access to the platform with our flexible month-to-month subscription, please ensure you contact %{support_email_link} ahead of: %{deadline}\",\"introduction\":\"Time flies when you\\'re uncovering new business opportunities! Your %{brand_name} trial is coming to an end next week.\",\"sign_off\":\"We look forward to helping you reach your sales goals!\",\"subject\":\"Just a heads up that your %{brand_name} trial is ending in seven days\"},\"seven_days_to_go_warning_for_cs\":{\"introduction\":\"%{user_name} shared a list with you: \",\"subject\":\"[%{brand_name} - shared list] %{list_name}\"}},\"unlock_instructions_email\":{\"crm\":{\"salesforce\":{\"change_requested\":\"You are being sent this email either because of one too many unsuccessful non-Salesforce log-in attempts or someone has requested an unlock email. %{brand_name} has not locked your account because your account is configured to use Salesforce to sign in.\",\"password_forgotten\":\"If you have forgotten your Salesforce password or think your account has been locked by Salesforce, please follow the instructions provided on the Salesforce sign in page.\"}},\"fishy_fine_print\":\"If you have not been (unsuccessfully) trying to log in to your account, then something weird is going on. Someone may be trying to access your account (unsuccessfully). Please reply to this email and let us know. We will take steps to make sure it stops.\",\"non_crm\":{\"change_requested\":\"For security reasons we have locked your account because of too many log-in attempts. To unlock your account, click the link below.\",\"unlock_account_link\":\"Unlock my account\"},\"subject\":\"Unlock instructions for %{domain}\"}},\"mongoid\":{\"errors\":{\"messages\":{\"ambiguous_relationship\":{\"message\":\"Ambiguous associations %{candidates} defined on %{klass}.\",\"resolution\":\"On the %{name} association on %{inverse} you must add an :inverse_of option to specify the exact association on %{klass} that is the opposite of %{name}.\",\"summary\":\"When Mongoid attempts to set an inverse document of an association in memory, it needs to know which association it belongs to. When setting %{name}, Mongoid looked on the class %{inverse} for a matching association, but multiples were found that could potentially match: %{candidates}.\"},\"blank_in_locale\":\"can\\'t be blank in %{location}\",\"callbacks\":{\"message\":\"Calling %{method} on %{klass} resulted in a false return from a callback.\",\"resolution\":\"Double check all before callbacks to make sure they are not unintentionally returning false.\",\"summary\":\"If a before callback returns false when using Document.create!, Document#save!, or Document#update_attributes! this error will get raised since the document did not actually get saved.\"},\"calling_document_find_with_nil_is_invalid\":{\"message\":\"Calling Document.find with nil is invalid.\",\"resolution\":\"Most likely this is caused by passing parameters directly through to the find, and the parameter either is not present or the key from which it is accessed is incorrect.\",\"summary\":\"Document.find expects the parameters to be 1 or more ids, and will return a single document if 1 id is provided, otherwise an array of documents if multiple ids are provided.\"},\"create_collection_failure\":{\"message\":\"Cannot create collection %{collection_name} with options %{collection_options}. The following error was raised: %{error}.\",\"resolution\":\"Double check that collection options for the collection %{collection_name} are valid. Consult with Ruby driver documentation and MongoDB documentation if the desired options are supported by your version of the server.\",\"summary\":\"The server rejected createCollection command with given collection options. This may happen when some of the options are invalid, or not supported by your version of the server.\"},\"criteria_argument_required\":{\"message\":\"Calling Criteria methods with nil arguments is not allowed.\",\"resolution\":\"Invoke Criteria methods with non-nil arguments or omit the respective invocations.\",\"summary\":\"Arguments to Criteria methods cannot be nil, and most Criteria methods require at least one argument. Only logical operations (and, or, nor and not), `all\\' and `where\\' can be called without arguments. The method that was called with nil argument was: %{query_method}.\"},\"delete_restriction\":{\"message\":\"Cannot destroy %{document} because of dependent \\'%{relation}\\'.\",\"resolution\":\"Don\\'t attempt to delete the parent %{document} when it has children, or change the dependent option on the association.\",\"summary\":\"When defining \\'%{relation}\\' with a :dependent =\\\\u003e :restrict_with_error, Mongoid will raise an error when attempting to destroy the %{document} when the child \\'%{relation}\\' still has documents in it.\"},\"destroy_restrict_with_error_dependencies_exist\":\"is not empty and prevents the document from being destroyed\",\"document_not_destroyed\":{\"message\":\"%{klass} with id %{id} was not destroyed.\",\"resolution\":\"Check the before/after destroy callbacks to ensure that the return values are truthy for the chain to continue.\",\"summary\":\"When calling %{klass}#destroy! and a callback halts the destroy callback chain by returning a false value, the deletion will not actually occur.\"},\"document_not_found\":{\"message\":\"Document(s) not found for class %{klass} with id(s) %{missing}.\",\"resolution\":\"Search for an id that is in the database or set the Mongoid.raise_not_found_error configuration option to false, which will cause nil to be returned instead of raising this error when searching for a single id, or only the matched documents when searching for multiples.\",\"summary\":\"When calling %{klass}.find with an id or array of ids, each parameter must match a document in the database or this error will be raised. The search was for the id(s): %{searched} (%{total} total) and the following ids were not found: %{missing}.\"},\"document_with_attributes_not_found\":{\"message\":\"Document not found for class %{klass} with attributes %{attributes}.\",\"resolution\":\"Search for attributes that are in the database or set the Mongoid.raise_not_found_error configuration option to false, which will cause nil to be returned instead of raising this error.\",\"summary\":\"When calling %{klass}.find_by with a hash of attributes, all attributes provided must match a document in the database or this error will be raised.\"},\"document_with_shard_key_not_found\":{\"message\":\"Document not found for class %{klass} with id %{missing} and shard key %{shard_key}.\",\"resolution\":\"Search for an id/shard key that is in the database or set the Mongoid.raise_not_found_error configuration option to false, which will cause nil to be returned instead of raising this error.\",\"summary\":\"When calling %{klass}.find with an id and a shard key, each parameter must match a document in the database or this error will be raised. The search was for the id: %{missing} with shard_key: %{shard_key} and it was not found.\"},\"drop_collection_failure\":{\"message\":\"Cannot drop collection %{collection_name}.\",\"resolution\":\"Try to drop the collection manually using Ruby driver or mongo shell.\",\"summary\":\"Mongoid tried to drop collection %{collection_name}, but the collection still exists in the database.\"},\"empty_config_file\":{\"message\":\"Empty configuration file: %{path}.\",\"resolution\":\"Ensure your configuration file contains the correct contents. Refer to: https://www.mongodb.com/docs/mongoid/current/reference/configuration/\",\"summary\":\"Your mongoid.yml configuration file appears to be empty.\"},\"immutable_attribute\":{\"message\":\"Attempted to change the immutable attribute \\'%{name}\\' with the value: %{value}.\",\"resolution\":\"Do not attempt to update the value of \\'%{name}\\' after the document is persisted.\",\"summary\":\"Immutable attributes can only have values set when the document is a new record.\"},\"in_memory_collation_not_supported\":{\"message\":\"A collation option cannot be applied when querying documents in-memory.\",\"resolution\":\"Remove the collation option from the query.\",\"summary\":\"The query being run against documents in memory has a collation option set. A collation option is only supported if the query is executed on a MongoDB server with version \\\\u003e= 3.4.\"},\"invalid_async_query_executor\":{\"message\":\"Invalid async_query_executor option: %{executor}.\",\"resolution\":\"Pick an allowed option or fix the typo. If you were expecting the option to be there, please consult the following page with respect to Mongoid\\'s configuration:\\\\n\\\\n   https://www.mongodb.com/docs/mongoid/current/reference/configuration/#mongoid-configuration-options\",\"summary\":\"A invalid async query executor was specified. The valid options are: %{options}.\"},\"invalid_collection\":{\"message\":\"Access to the collection for %{klass} is not allowed.\",\"resolution\":\"For access to the collection that the embedded document is in, use %{klass}#_root.collection, or do not attempt to persist an embedded document without a parent set.\",\"summary\":\"%{klass}.collection was called, and %{klass} is an embedded document - it resides within the collection of the root document of the hierarchy.\"},\"invalid_config_file\":{\"message\":\"Invalid configuration file: %{path}.\",\"resolution\":\"Ensure your configuration file contains the correct contents. Refer to: https://www.mongodb.com/docs/mongoid/current/reference/configuration/\",\"summary\":\"Your mongoid.yml configuration file does not contain the correct file structure.\"},\"invalid_config_option\":{\"message\":\"Invalid configuration option: %{name}.\",\"resolution\":\"Remove the invalid option or fix the typo. If you were expecting the option to be there, please consult the following page with respect to Mongoid\\'s configuration:\\\\n\\\\n   http://mongoid.org/en/mongoid/docs/installation.html\",\"summary\":\"A invalid configuration option was provided in your mongoid.yml, or a typo is potentially present. The valid configuration options are: %{options}.\"},\"invalid_dependent_strategy\":{\"message\":\"Invalid dependent strategy: %{invalid_strategy}.\",\"resolution\":\"Change the dependent strategy to one of the valid types.\",\"summary\":\"An invalid dependent strategy was defined for the association: %{association}. The valid strategies are: %{valid_strategies}.\"},\"invalid_discriminator_key_target\":{\"message\":\"Setting the discriminator key on a child class is not allowed.\",\"resolution\":\"Try setting the discriminator key on %{superclass} or one of %{class_name}\\'s ancestors.\",\"summary\":\"The discriminator key on the class %{class_name} was attempted to be changed. Changing the discriminator key on a child class is not allowed.\"},\"invalid_dot_dollar_assignment\":{\"message\":\"Cannot set the %{attr} attribute on the %{klass} class.\",\"resolution\":\"In order to set fields that start with a dollar sign ($) or contain a dot/period (.), the aggregation pipeline can be used. MongoDB provides specific operators for working with these fields. Refer to the MongoDB documentation here: https://www.mongodb.com/docs/manual/core/dot-dollar-considerations/\",\"summary\":\"Calling the setters for fields that start with a dollar sign ($) or contain a dot/period (.) is prohibited. See the Mongoid documentation on Field Names with Dots/Periods (.) and Dollar Signs ($) for more information.\"},\"invalid_elem_match_operator\":{\"message\":\"Invalid $elemMatch operator \\'%{operator}\\'.\",\"resolution\":\"Valid field operators are: %{valid_operators}. Ensure you are using one of these operators.\",\"summary\":\"You misspelled an operator or are using an operator that Mongoid does not support.\"},\"invalid_estimated_count_criteria\":{\"message\":\"Invalid criteria for estimated_count.\",\"resolution\":\"Try calling estimated_count directly on the class: %{class_name}.estimated_count.\\\\n\\\\n  If the class defines a default scope, use unscoped: %{class_name}.unscoped.estimated_count.\",\"summary\":\"Estimated count is strictly a collection-level operation and cannot be called on a filtered criteria.\"},\"invalid_expression_operator\":{\"message\":\"Invalid expression operator \\'%{operator}\\'.\",\"resolution\":\"Valid expression operators are: %{valid_operators}. Ensure you are using one of these operators.\",\"summary\":\"You misspelled an operator, are using an operator that Mongoid does not support, or are trying to use a field-level operator on expression level.\"},\"invalid_field\":{\"message\":\"Defining a field named \\'%{field}\\' is not allowed.\",\"resolution\":\"Use Mongoid.destructive_fields to see what names are not allowed, and don\\'t use these names. These include names that also conflict with core Ruby methods on Object, Module, Enumerable, or included gems that inject methods into these or Mongoid internals.\",\"summary\":\"Defining this field would override the method \\'%{name}\\', which would cause issues with expectations around the original method and cause extremely hard to debug issues. The original method was defined in:\\\\n   Object: %{origin}\\\\n   File: %{file}\\\\n   Line: %{line}\"},\"invalid_field_operator\":{\"message\":\"Invalid field operator \\'%{operator}\\'.\",\"resolution\":\"Valid field operators are: %{valid_operators}. Ensure you are using one of these operators.\",\"summary\":\"You misspelled an operator, are using an operator that Mongoid does not support, or are trying to use an expression-level operator on field level.\"},\"invalid_field_option\":{\"message\":\"Invalid option :%{option} provided for field :%{name}.\",\"resolution\":\"When defining the field :%{name} on \\'%{klass}\\', please provide valid options for the field. These are currently: %{valid}. If you meant to define a custom field option, please do so first as follows:\\\\n\\\\n   Mongoid::Fields.option :%{option} do |model, field, value|\\\\n     # Your logic here...\\\\n   end\\\\n   class %{klass}\\\\n     include Mongoid::Document\\\\n     field :%{name}, %{option}: true\\\\n   end\\\\n\\\\n Refer to: https://www.mongodb.com/docs/mongoid/current/reference/fields/#custom-field-options\",\"summary\":\"Mongoid requires that you only provide valid options on each field definition in order to prevent unexpected behavior later on.\"},\"invalid_field_type\":{\"message\":\"Invalid field type %{type_inspection} for field \\'%{field}\\' on model \\'%{klass}\\'.\",\"resolution\":\"Please provide a valid type value for the field. Refer to: https://www.mongodb.com/docs/mongoid/current/reference/fields/#using-symbols-or-strings-instead-of-classes\",\"summary\":\"Model \\'%{klass}\\' defines a field \\'%{field}\\' with an unknown type value %{type_inspection}.\"},\"invalid_global_executor_concurrency\":{\"message\":\"Invalid global_executor_concurrency option.\",\"resolution\":\"Set global_executor_concurrency option to :global_thread_pool or remove global_executor_concurrency option.\",\"summary\":\"You set global_executor_concurrency while async_query_executor option is not set to :global_thread_pool. The global_executor_concurrency is allowed only for the global thread pool executor.\"},\"invalid_includes\":{\"message\":\"Invalid includes directive: %{klass}.includes(%{args})\",\"resolution\":\"Ensure that each parameter passed to %{klass}.includes is a valid name of an association on the %{klass} model. These are: %{relations}.\",\"summary\":\"Eager loading in Mongoid only supports providing arguments to %{klass}.includes that are the names of associations on the %{klass}.\"},\"invalid_index\":{\"message\":\"Invalid index specification on %{klass}: %{spec}, %{options}\",\"resolution\":\"Ensure that the index conforms to the correct syntax and has the correct options.\\\\n\\\\n Valid options are:\\\\n   background: true|false\\\\n   database: \\'database_name\\'\\\\n   name: \\'index_name\\'\\\\n   sparse: true|false\\\\n   unique: true|false\\\\n   min: 1\\\\n   max: 1\\\\n   bits: 26\\\\n   key: 26\\\\n   bucket_size : 1\\\\n   sphere_version : 1\\\\n   text_version : 1\\\\n   version : 1\\\\n   weights: { content: 1, title: 2 }\\\\n   expire_after_seconds: number_of_seconds\\\\n   partial_filter_expression\\\\n   storage_engine\\\\n   language_override\\\\n   default_language\\\\n   collation\\\\n   wildcard_projection: { \\'path.to.field.a\\': 1, \\'path.to.field.b\\': 0 }\\\\n Valid types are: 1, -1, \\'2d\\', \\'2dsphere\\', \\'geoHaystack (deprecated)\\', \\'text\\', \\'hashed\\'\\\\n\\\\n Example:\\\\n   class Band\\\\n     include Mongoid::Document\\\\n     index({ name: 1, label: -1 }, { sparse: true })\\\\n     index({ location: \\'2d\\' }, { background: true })\\\\n   end\\\\n\\\\n\",\"summary\":\"Indexes in Mongoid are defined as a hash of field name and direction/2d pairs, with a hash for any additional options.\"},\"invalid_options\":{\"message\":\"Invalid option :%{invalid} provided to association :%{name}.\",\"resolution\":\"Valid options are: %{valid}, make sure these are the ones you are using.\",\"summary\":\"Mongoid checks the options that are passed to the association macros to ensure that no ill side effects occur by letting something slip by.\"},\"invalid_path\":{\"message\":\"Having a root path assigned for %{klass} is invalid.\",\"resolution\":\"Most likely your embedded model, %{klass} is also referenced via a has_many from a root document in another collection. Double check the association definitions and fix any instances where embedded documents are improperly referenced from other collections.\",\"summary\":\"Mongoid has two different path objects for determining the location of a document in the database, Root and Embedded. This error is raised when an embedded document somehow gets a root path assigned.\"},\"invalid_persistence_option\":{\"message\":\"Invalid persistence option :%{invalid}.\",\"resolution\":\"Valid options are: %{valid}, make sure these are the ones you are using.\",\"summary\":\"The options used to change the persistence context must be one of the valid options for a mongo client, or a collection name.\"},\"invalid_relation\":{\"message\":\"Defining an association named \\'%{name}\\' is not allowed.\",\"resolution\":\"Use Mongoid.destructive_fields to see what names are not allowed, and don\\'t use these names. These include names that also conflict with core Ruby methods on Object, Module, Enumerable, or included gems that inject methods into these or Mongoid internals.\",\"summary\":\"Defining this association would override the method \\'%{name}\\', which would cause issues with expectations around the original method and cause extremely hard to debug issues. The original method was defined in:\\\\n   Object: %{origin}\\\\n   File: %{file}\\\\n   Line: %{line}\"},\"invalid_relation_option\":{\"message\":\"Invalid association option :%{option} for association \\'%{name}\\' on class %{klass}.\",\"resolution\":\"Valid options are: %{valid_options}, make sure you use only those.\",\"summary\":\"An invalid option was provided for an association.\"},\"invalid_scope\":{\"message\":\"Defining a scope of value %{value} on %{klass} is not allowed.\",\"resolution\":\"Change the scope to be a proc wrapped criteria.\\\\n\\\\n Example:\\\\n   class Band\\\\n     include Mongoid::Document\\\\n     scope :inactive, -\\\\u003e{ where(active: false) }\\\\n   end\\\\n\\\\n\",\"summary\":\"Scopes in Mongoid must be procs that wrap criteria objects.\"},\"invalid_session_nesting\":{\"message\":\"A session was started while another session was being used.\",\"resolution\":\"Only use one session at a time; sessions cannot be nested.\",\"summary\":\"Sessions cannot be nested. Only one session can be used in a thread at once.\"},\"invalid_session_use\":{\"message\":\"A session was attempted to be used with a model whose client cannot use that session.\",\"resolution\":\"Only execute operations on the model class or instances of the model through which the session was created. Otherwise, ensure that all models on which operations are executed in the session block share the same driver client. For example, a model may have a different client specified in its \\'store_in\\' options.\\\\n\\\\n\",\"summary\":\"Sessions are started via driver clients (Model#mongo_client) and, in most cases, driver clients are shared across models. When different models have their own clients, a session cannot be obtained via one model and used for operations on another model.\"},\"invalid_set_polymorphic_relation\":{\"message\":\"The %{name} attribute can\\'t be set to an instance of %{other_klass} as %{other_klass} has multiple associations referencing %{klass} as %{name}.\",\"resolution\":\"Set the values from the parent, or redefine the association with only a single definition in the parent.\",\"summary\":\"If the parent class of a polymorphic association has multiple definitions for the same association, the values must be set from the parent side and not the child side since Mongoid cannot determine from the child side which association to go in.\"},\"invalid_storage_options\":{\"message\":\"Invalid options passed to %{klass}.store_in: %{options}.\",\"resolution\":\"Change the options passed to store_in to match the documented API, and ensure all keys in the options hash are symbols.\\\\n\\\\n Example:\\\\n   class Band\\\\n     include Mongoid::Document\\\\n     store_in collection: \\'artists\\', database: \\'music\\'\\\\n   end\\\\n\\\\n\",\"summary\":\"The :store_in macro takes only a hash of parameters with the keys :database, :collection, :collection_options, or :client.\"},\"invalid_time\":{\"message\":\"\\'%{value}\\' is not a valid Time.\",\"resolution\":\"Make sure to pass parsable values to the field setter for Date, DateTime, and Time objects. When this is a String it needs to be valid for Time.parse. Other objects must be valid to pass to Time.local.\",\"summary\":\"Mongoid tries to serialize the values for Date, DateTime, and Time into proper UTC times to store in the database. The provided value could not be parsed.\"},\"inverse_not_found\":{\"message\":\"When adding a(n) %{klass} to %{base}#%{name}, Mongoid could not determine the inverse foreign key to set. The attempted key was \\'%{inverse}\\'.\",\"resolution\":\"If an inverse is not required, like a belongs_to or has_and_belongs_to_many, ensure that :inverse_of =\\\\u003e nil is set on the association. If the inverse is needed, most likely the inverse cannot be figured out from the names of the associations and you will need to explicitly tell Mongoid on the association what the inverse is.\\\\n\\\\n Example:\\\\n   class Car\\\\n     include Mongoid::Document\\\\n     has_one :engine, class_name: \\\\\"Motor\\\\\", inverse_of: :machine\\\\n   end\\\\n\\\\n   class Motor\\\\n     include Mongoid::Document\\\\n     belongs_to :machine, class_name: \\\\\"Car\\\\\", inverse_of: :engine\\\\n   end\",\"summary\":\"When adding a document to an association, Mongoid attempts to link the newly added document to the base of the association in memory, as well as set the foreign key to link them on the database side. In this case Mongoid could not determine what the inverse foreign key was.\"},\"message_title\":\"message\",\"mixed_client_configuration\":{\"message\":\"Both uri and standard configuration options defined for client: \\'%{name}\\'.\",\"resolution\":\"Provide either only a uri as configuration or only standard options.\",\"summary\":\"Instead of simply giving uri or standard options a preference order, Mongoid assumes that you have made a mistake in your configuration and requires that you provide one or the other, but not both. The options that were provided were: %{config}.\"},\"mixed_relations\":{\"message\":\"Referencing a(n) %{embedded} document from the %{root} document via a non-embedded association is not allowed since the %{embedded} is embedded.\",\"resolution\":\"Consider not embedding %{embedded}, or do the key storage and access in a custom manner in the application code.\",\"summary\":\"In order to properly access a(n) %{embedded} from %{root} the reference would need to go through the root document of %{embedded}. In a simple case this would require Mongoid to store an extra foreign key for the root, in more complex cases where %{embedded} is multiple levels deep a key would need to be stored for each parent up the hierarchy.\"},\"nested_attributes_metadata_not_found\":{\"message\":\"Could not find metadata for association \\'%{name}\\' on model: %{klass}.\",\"resolution\":\"Make sure that there is an association defined named \\'%{name}\\' on %{klass} or that the association definition comes before the accepts_nested_attributes_for macro in the model - order matters so that Mongoid has access to the metadata.\\\\n\\\\n Example:\\\\n   class Band\\\\n     include Mongoid::Document\\\\n     has_many :albums\\\\n     accepts_nested_attributes_for :albums\\\\n   end\\\\n\\\\n\",\"summary\":\"When defining nested attributes for an association, Mongoid needs to access the metadata for the association \\'%{name}\\' in order if add autosave functionality to it, if applicable. Either no association named \\'%{name}\\' could be found, or the association had not been defined yet.\"},\"no_client_config\":{\"message\":\"No configuration could be found for a client named \\'%{name}\\'.\",\"resolution\":\"Double check your mongoid.yml to make sure under the clients key that a configuration exists for \\'%{name}\\'. If you have set the configuration programmatically, ensure that \\'%{name}\\' exists in the configuration hash.\",\"summary\":\"When attempting to create the new client, Mongoid could not find a client configuration for the name: \\'%{name}\\'. This is necessary in order to know the host, port, and options needed to connect.\"},\"no_client_database\":{\"message\":\"No database provided for client configuration: :%{name}.\",\"resolution\":\"If configuring via a mongoid.yml, ensure that within your :%{name} section a :database value for the client\\'s default database is defined.\\\\n\\\\n Example:\\\\n   development:\\\\n     clients:\\\\n       %{name}:\\\\n         database: my_app_db\\\\n         hosts:\\\\n           - localhost:27017\\\\n\\\\n\",\"summary\":\"Each client configuration must provide a database so Mongoid knows where the default database to persist to. What was provided was: %{config}.\"},\"no_client_hosts\":{\"message\":\"No hosts provided for client configuration: :%{name}.\",\"resolution\":\"If configuring via a mongoid.yml, ensure that within your :%{name} section a :hosts value for the client hosts is defined.\\\\n\\\\n Example:\\\\n   development:\\\\n     clients:\\\\n       %{name}:\\\\n         database: my_app_db\\\\n         hosts:\\\\n           - localhost:27017\\\\n\\\\n\",\"summary\":\"Each client configuration must provide hosts so Mongoid knows where the database server is located. What was provided was: %{config}.\"},\"no_clients_config\":{\"message\":\"No clients configuration provided.\",\"resolution\":\"Double check your mongoid.yml to make sure that you have a top-level clients key with at least 1 default client configuration for it. You can regenerate a new mongoid.yml for assistance via `rails g mongoid:config`.\\\\n\\\\n Example:\\\\n   development:\\\\n     clients:\\\\n       default:\\\\n         database: mongoid_dev\\\\n         hosts:\\\\n           - localhost:27017\\\\n\\\\n\",\"summary\":\"Mongoid\\'s configuration requires that you provide details about each client that can be connected to, and requires in the clients config at least 1 default client to exist.\"},\"no_default_client\":{\"message\":\"No default client configuration is defined.\",\"resolution\":\"If configuring via a mongoid.yml, ensure that within your :clients section a :default client is defined.\\\\n\\\\n Example:\\\\n   development:\\\\n     clients:\\\\n       default:\\\\n         hosts:\\\\n           - localhost:27017\\\\n\\\\n\",\"summary\":\"The configuration provided settings for: %{keys}, but Mongoid requires a :default to be defined at minimum.\"},\"no_documents_found\":{\"message\":\"Could not find a document of class %{klass}.\",\"resolution\":\"Create a document of class %{klass} or use a finder method that does not raise an exception when no documents are found.\",\"summary\":\"Mongoid attempted to find a document of the class %{klass} but none exist.\"},\"no_environment\":{\"message\":\"Could not load the configuration since no environment was defined.\",\"resolution\":\"Please ensure an environment is set in one of the listed locations. The environment must be explicitly set.\",\"summary\":\"Mongoid could not determine the environment to use because it was not specified in any of the following locations: Rails.env, Sinatra::Base.environment, ENV[\\\\\"RACK_ENV\\\\\"], ENV[\\\\\"MONGOID_ENV\\\\\"]. Without knowing the environment, Mongoid cannot load its configuration.\"},\"no_map_reduce_output\":{\"message\":\"No output location was specified for the map/reduce operation.\",\"resolution\":\"Provide the location that the output of the operation is to go by chaining an #out call to the map/reduce.\\\\n\\\\n Example:\\\\n   Band.map_reduce(map, reduce).out(inline: 1)\\\\n\\\\n Valid options for the out function are:\\\\n   inline: 1\\\\n   merge: \\'collection-name\\'\\\\n   replace: \\'collection-name\\'\\\\n   reduce: \\'collection-name\\'\\\\n\\\\n\",\"summary\":\"When executing a map/reduce, you must provide the output location of the results. The attempted command was: %{command}.\"},\"no_metadata\":{\"message\":\"Metadata not found for document of type %{klass}.\",\"resolution\":\"Ensure that your associations on the %{klass} model are all properly defined, and that the inverse associations are also properly defined. Embedded associations must have both the parent (embeds_one/embeds_many) and the inverse (embedded_in) present in order to work properly.\",\"summary\":\"Mongoid sets the metadata of an association on the document when it is either loaded from within the association, or added to one. The presence of the metadata is required in order to provide various functionality around associations. Most likely you are getting this error because the document is embedded and was attempted to be persisted without being associated with a parent, or the association was not properly defined.\"},\"no_parent\":{\"message\":\"Cannot persist embedded document %{klass} without a parent document.\",\"resolution\":\"Ensure that you\\'ve set the parent association if instantiating the embedded document directly, or always create new embedded documents via the parent association.\",\"summary\":\"If the document is embedded, in order to be persisted it must always have a reference to its parent document. This is most likely caused by either calling %{klass}.create or %{klass}.create! without setting the parent document as an attribute.\"},\"readonly_attribute\":{\"message\":\"Attempted to set the readonly attribute \\'%{name}\\' with the value: %{value}.\",\"resolution\":\"Don\\'t define \\'%{name}\\' as readonly, or do not attempt to update its value after the document is persisted.\",\"summary\":\"Attributes flagged as readonly via Model.attr_readonly can only have values set when the document is a new record.\"},\"readonly_document\":{\"message\":\"Attempted to persist a readonly document of class \\'%{klass}\\'.\",\"resolution\":\"Don\\'t attempt to persist documents that are flagged as readonly.\",\"summary\":\"Documents that are marked readonly cannot be persisted.\"},\"resolution_title\":\"resolution\",\"scope_overwrite\":{\"message\":\"Cannot create scope :%{scope_name}, because of existing method %{model_name}.%{scope_name}.\",\"resolution\":\"Change the name of the scope so it does not conflict with the already defined method %{model_name}, or set the configuration option Mongoid.scope_overwrite_exception to false, which is its default. In this case a warning will be logged.\",\"summary\":\"When defining a scope that conflicts with a method that already exists on the model, this error will get raised if Mongoid.scope_overwrite_exception is set to true.\"},\"sessions_not_supported\":{\"message\":\"Sessions are not supported by the connected server(s).\",\"resolution\":\"Verify that all servers in your deployment are at least version 3.6 or don\\'t attempt to use sessions with older server versions.\",\"summary\":\"A session was attempted to be used with a MongoDB server version that doesn\\'t support sessions. Sessions are supported in MongoDB server versions 3.6 and higher.\"},\"summary_title\":\"summary\",\"too_many_nested_attribute_records\":{\"message\":\"Accepting nested attributes for %{association} is limited to %{limit} documents.\",\"resolution\":\"The limit is set as an option to the macro, for example: accepts_nested_attributes_for :%{association}, limit: %{limit}. Consider raising this limit or making sure no more are sent than the set value.\",\"summary\":\"More documents were sent to be processed than the allowed limit.\"},\"unknown_attribute\":{\"message\":\"Attempted to set a value for \\'%{name}\\' which is not allowed on the model %{klass}.\",\"resolution\":\"Define the field \\'%{name}\\' in %{klass}, or include Mongoid::Attributes::Dynamic in %{klass} if you intend to store values in fields that are not explicitly defined.\",\"summary\":\"%{klass}#%{name}= was called but there is no \\'%{name}\\' field defined in the model, and Mongoid::Attributes::Dynamic is not included. This error is also raised instead of NoMethodError if the unknown attribute is passed to any method that accepts an attributes hash, such as #attributes=.\"},\"unknown_model\":{\"message\":\"Attempted to instantiate an object of the unknown model \\'%{klass}\\'.\",\"resolution\":\"The _type field is a reserved one used by Mongoid to determine the class for instantiating an object. Please don\\'t save data in this field or ensure that any values in this field correspond to valid models.\",\"summary\":\"A document with the value \\'%{value}\\' at the key \\'_type\\' was used to instantiate a model object but Mongoid cannot find this Class.\"},\"unsaved_document\":{\"message\":\"Attempted to save %{document} before the parent %{base}.\",\"resolution\":\"Make sure to only use create or create! when the parent document %{base} is persisted.\",\"summary\":\"You cannot call create or create! through the association (%{document}) whose parent (%{base}) is not already saved. This would cause the database to be out of sync since the child could potentially reference a nonexistent parent.\"},\"unsupported_javascript\":{\"message\":\"Executing Javascript $where selector on an embedded criteria is not supported.\",\"resolution\":\"Please provide a standard hash to #where when the criteria is for an embedded association.\",\"summary\":\"Mongoid only supports providing a hash of arguments to #where criterion on embedded documents. Since %{klass} is embedded, the expression %{javascript} is not allowed.\"},\"validations\":{\"message\":\"Validation of %{document} failed.\",\"resolution\":\"Try persisting the document with valid data or remove the validations.\",\"summary\":\"The following errors were found: %{errors}\"}}}},\"number\":{\"currency\":{\"format\":{\"delimiter\":\",\",\"format\":\"%u%n\",\"negative_format\":\"-%u%n\",\"precision\":2,\"separator\":\".\",\"significant\":false,\"strip_insignificant_zeros\":false,\"unit\":\"$\"}},\"format\":{\"delimiter\":\",\",\"precision\":3,\"round_mode\":\"default\",\"separator\":\".\",\"significant\":false,\"strip_insignificant_zeros\":false},\"human\":{\"decimal_units\":{\"format\":\"%n %u\",\"units\":{\"billion\":\"Billion\",\"million\":\"Million\",\"quadrillion\":\"Quadrillion\",\"thousand\":\"Thousand\",\"trillion\":\"Trillion\",\"unit\":\"\"}},\"format\":{\"delimiter\":\"\",\"precision\":3,\"significant\":true,\"strip_insignificant_zeros\":true},\"storage_units\":{\"format\":\"%n %u\",\"units\":{\"byte\":{\"one\":\"Byte\",\"other\":\"Bytes\"},\"eb\":\"EB\",\"gb\":\"GB\",\"kb\":\"KB\",\"mb\":\"MB\",\"pb\":\"PB\",\"tb\":\"TB\",\"zb\":\"ZB\"}}},\"nth\":{},\"percentage\":{\"format\":{\"delimiter\":\"\",\"format\":\"%n%\"}},\"precision\":{\"format\":{\"delimiter\":\"\"}}},\"simple_form\":{\"error_notification\":{\"default_message\":\"Please review the problems below:\"},\"no\":\"No\",\"required\":{\"mark\":\"*\",\"text\":\"required\"},\"yes\":\"Yes\"},\"support\":{\"array\":{\"last_word_connector\":\", and \",\"two_words_connector\":\" and \",\"words_connector\":\", \"}},\"time\":{\"am\":\"am\",\"formats\":{\"default\":\"%a, %d %b %Y %H:%M:%S %z\",\"long\":\"%B %d, %Y %H:%M\",\"short\":\"%d %b %H:%M\"},\"pm\":\"pm\"},\"users\":{\"confirmations\":{\"new\":{\"legend\":\"Resend your %{brand_name} confirmation instructions\",\"message\":\"We need to confirm your email address to complete the sign up process. Supply your email address, below, and we will send you instructions on how to confirm your address.\",\"submit_button\":\"Send Confirmation Instructions\",\"title\":\"Resend confirmation instructions | %{brand_name}\"},\"show\":{\"legend\":\"Check your inbox for a confirmation email\",\"message\":\"If your e-mail exists in our database we have sent you a message with instructions. Check your inbox (or spam folder) for a message from \\'%{default_from_email}\\' containing the confirmation link.\",\"title\":\"Awaiting confirmation | %{brand_name}\"}},\"passwords\":{\"new\":{\"failures\":\"Note: If you make more than 5 sequential failed attempts to sign in with your %{brand_name} password, your account will be (temporarily) locked. Check your inbox for instruction on how to unlock your account, or we can\",\"legend\":\"Reset your %{brand_name} password\",\"message\":\"Supply your email address, below, and we will send you instructions on how to reset your password.\",\"resend_link\":\"resend a new set of unlock instructions\",\"submit_button\":\"Send Reset Instructions\",\"title\":\"Reset password | %{brand_name}\"},\"show\":{\"didnt_receive_email\":\"Didn\\'t receive the email?\",\"legend\":\"Password reset instructions sent\",\"message\":\"If your e-mail exists in our database we have sent you a message with password reset instructions. Check your inbox (or spam folder) for a message from \\'%{default_from_email}\\'.\",\"resend_link\":\"you can request another one here\",\"title\":\"Awaiting reset | %{brand_name}\"}}},\"will_paginate\":{\"container_aria_label\":\"Pagination\",\"next_label\":\"Next \\\\u0026#8594;\",\"page_aria_label\":\"Page %{page}\",\"page_entries_info\":{\"multi_page\":\"Displaying %{model} %{from} - %{to} of %{count} in total\",\"multi_page_html\":\"Displaying %{model} \\\\u003cb\\\\u003e%{from}\\\\u0026nbsp;-\\\\u0026nbsp;%{to}\\\\u003c/b\\\\u003e of \\\\u003cb\\\\u003e%{count}\\\\u003c/b\\\\u003e in total\",\"single_page\":{\"one\":\"Displaying 1 %{model}\",\"other\":\"Displaying all %{count} %{model}\",\"zero\":\"No %{model} found\"},\"single_page_html\":{\"one\":\"Displaying \\\\u003cb\\\\u003e1\\\\u003c/b\\\\u003e %{model}\",\"other\":\"Displaying \\\\u003cb\\\\u003eall\\\\u0026nbsp;%{count}\\\\u003c/b\\\\u003e %{model}\",\"zero\":\"No %{model} found\"}},\"page_gap\":\"\\\\u0026hellip;\",\"previous_label\":\"\\\\u0026#8592; Previous\"}}'));\nI18n.translations[\"ru\"] = I18n.extend((I18n.translations[\"ru\"] || {}), JSON.parse('{\"activerecord\":{\"errors\":{\"messages\":{\"record_invalid\":\"Validation failed: %{errors}\",\"restrict_dependent_destroy\":{\"has_many\":\"Cannot delete record because dependent %{record} exist\",\"has_one\":\"Cannot delete record because a dependent %{record} exists\"}}}},\"bulk_uploads\":{\"email_local_part\":{\"empty_parameter\":\"No file uploaded\",\"error\":\"File Upload failed: %{error_message}\",\"success\":\"File was successfully uploaded\"}},\"common\":{\"crm\":{\"salesforce\":{\"forgot_password\":\"If you have forgotten your Salesforce password, please follow the instructions provided on the Salesforce sign in page.\",\"sign_in_button\":\"Sign In with Salesforce\"}}},\"contact\":{\"default_from_email\":\"info@zymewire.com\",\"phone_numbers\":[{\"label\":\"US\",\"phone\":\"1-844-996-3321\"},{\"label\":\"UK\",\"phone\":\"+44-208-133-9963\"}],\"support_email\":\"support@zymewire.com\"},\"date\":{\"abbr_day_names\":[\"Sun\",\"Mon\",\"Tue\",\"Wed\",\"Thu\",\"Fri\",\"Sat\"],\"abbr_month_names\":[null,\"Jan\",\"Feb\",\"Mar\",\"Apr\",\"May\",\"Jun\",\"Jul\",\"Aug\",\"Sep\",\"Oct\",\"Nov\",\"Dec\"],\"day_names\":[\"Sunday\",\"Monday\",\"Tuesday\",\"Wednesday\",\"Thursday\",\"Friday\",\"Saturday\"],\"formats\":{\"default\":\"%Y-%m-%d\",\"long\":\"%B %d, %Y\",\"short\":\"%b %d\"},\"month_names\":[null,\"January\",\"February\",\"March\",\"April\",\"May\",\"June\",\"July\",\"August\",\"September\",\"October\",\"November\",\"December\"],\"order\":[\"year\",\"month\",\"day\"]},\"datetime\":{\"distance_in_words\":{\"about_x_hours\":{\"one\":\"about 1 hour\",\"other\":\"about %{count} hours\"},\"about_x_months\":{\"one\":\"about 1 month\",\"other\":\"about %{count} months\"},\"about_x_years\":{\"one\":\"about 1 year\",\"other\":\"about %{count} years\"},\"almost_x_years\":{\"one\":\"almost 1 year\",\"other\":\"almost %{count} years\"},\"half_a_minute\":\"half a minute\",\"less_than_x_minutes\":{\"one\":\"less than a minute\",\"other\":\"less than %{count} minutes\"},\"less_than_x_seconds\":{\"one\":\"less than 1 second\",\"other\":\"less than %{count} seconds\"},\"over_x_years\":{\"one\":\"over 1 year\",\"other\":\"over %{count} years\"},\"x_days\":{\"one\":\"1 day\",\"other\":\"%{count} days\"},\"x_minutes\":{\"one\":\"1 minute\",\"other\":\"%{count} minutes\"},\"x_months\":{\"one\":\"1 month\",\"other\":\"%{count} months\"},\"x_seconds\":{\"one\":\"1 second\",\"other\":\"%{count} seconds\"}},\"prompts\":{\"day\":\"Day\",\"hour\":\"Hour\",\"minute\":\"Minute\",\"month\":\"Month\",\"second\":\"Seconds\",\"year\":\"Year\"}},\"default_host\":\"https://www.zymewire.com\",\"devise\":{\"confirmations\":{\"confirmed\":\"Your account was successfully confirmed. Please sign in.\",\"send_instructions\":\"Your email has not been confirmed. We need to confirm your email account before you can sign in. Please check your inbox or spam folder for an email from \\'info@zymewire.com\\' or request a new one.\",\"send_paranoid_instructions\":\"If your e-mail exists on our database, you will receive an email with instructions about how to confirm your account in a few minutes.\"},\"failure\":{\"already_authenticated\":\"You are already signed in.\",\"expired\":\"Ваш аккаунт устарел из-за неактивности. Пожалуйста, свяжитесь с администратором.\",\"inactive\":\"Your account was not activated yet.\",\"invalid\":\"Invalid email or password. If you use Salesforce, use the \\'Have Salesforce?\\' panel.\",\"invalid_token\":\"Invalid authentication token.\",\"last_attempt\":\"You have one more attempt before your account is locked.\",\"locked\":\"Your account is locked.\",\"not_active\":\"Your account has been de-activated, if you think this is a mistake please contact us\",\"not_found_in_database\":\"Invalid %{authentication_keys} or password.\",\"session_limited\":\"Ваши параметры входа используются в другом браузере. Пожалуйста, авторизуйтесь снова, чтобы продолжить в этом браузере.\",\"timeout\":\"Your session expired, please sign in again to continue.\",\"unauthenticated\":\"You need to sign in or sign up before continuing.\",\"unconfirmed\":\"We must confirm your email before you can continue. Please check your inbox or spam folder for a confirmation email from \\'info@zymewire.com\\' or request a new one.\"},\"invalid_captcha\":\"Введен неправильный код капчи.\",\"invalid_security_question\":\"Ответ на секретный вопрос был неверным.\",\"mailer\":{\"confirmation_instructions\":{\"subject\":\"Confirmation instructions for Zymewire.com\"},\"email_changed\":{\"subject\":\"Email Changed\"},\"password_change\":{\"subject\":\"Password Changed\"},\"reset_password_instructions\":{\"subject\":\"Reset password instructions for Zymewire.com\"},\"unlock_instructions\":{\"subject\":\"Unlock Instructions for Zymewire.com\"}},\"omniauth_callbacks\":{\"failure\":\"Could not authorize you from %{kind} because \\\\\"%{reason}\\\\\".\",\"success\":\"Successfully authorized from %{kind} account.\"},\"paranoid_verification_code\":{\"show\":{\"submit\":\"Отправить\",\"submit_verification_code\":\"Ввод кода подтверждения\",\"verification_code\":\"Код подверждения\"},\"updated\":\"Код подтверждения принят\"},\"paranoid_verify\":{\"code_required\":\"Пожалуйста введите код, полученный от нашей команды поддержки\"},\"password_expired\":{\"change_required\":\"Ваш пароль устарел. Пожалуйста, установите новый.\",\"show\":{\"change_my_password\":\"Поменять пароль\",\"current_password\":\"Текущий пароль\",\"new_password\":\"Новый пароль\",\"new_password_confirmation\":\"Подтвердите новый пароль\",\"renew_your_password\":\"Смена пароля\"},\"updated\":\"Ваш новый пароль сохранен.\"},\"passwords\":{\"no_token\":\"You can\\'t access this page without coming from a password reset email. If you do come from a password reset email, please make sure you used the full URL provided.\",\"send_instructions\":\"You will receive an email with instructions about how to reset your password in a few minutes.\",\"send_paranoid_instructions\":\"If your e-mail exists on our database, you will receive a password recovery link on your e-mail\",\"updated\":\"Your password was changed successfully. You are now signed in.\",\"updated_not_active\":\"Your password was changed successfully.\"},\"registrations\":{\"destroyed\":\"Bye! Your account was successfully cancelled. We hope to see you again soon.\",\"signed_up\":\"Welcome! You have signed up successfully.\",\"signed_up_but_inactive\":\"You have signed up successfully. However, we could not sign you in because your account is not yet activated.\",\"signed_up_but_locked\":\"You have signed up successfully. However, we could not sign you in because your account is locked.\",\"signed_up_but_unconfirmed\":\"A message with a confirmation link has been sent to your email address. Please open the link to activate your account.\",\"update_needs_confirmation\":\"You updated your account successfully, but we need to verify your new email address. Please check your email and click on the confirm link to finalize confirming your new email address.\",\"updated\":\"You updated your account successfully.\",\"updated_but_not_signed_in\":\"Your account has been updated successfully, but since your password was changed, you need to sign in again.\"},\"sessions\":{\"already_signed_out\":\"Signed out successfully.\",\"signed_in\":\"Signed in successfully.\",\"signed_out\":\"Signed out successfully.\"},\"unlocks\":{\"send_instructions\":\"You will receive an email with instructions about how to unlock your account in a few minutes.\",\"send_paranoid_instructions\":\"If your account exists, you will receive an email with instructions about how to unlock it in a few minutes.\",\"unlocked\":\"Your account has been unlocked successfully. Please sign in to continue.\"}},\"download\":\"Download\",\"download_30_days\":\"This link will be available for 30 days after which the file will be removed from our servers.\",\"enumerize\":{\"blocklisted_contact\":{\"provider\":{\"insideview\":\"InsideView\",\"zephyr\":\"Zephyr\"}}},\"errors\":{\"format\":\"%{attribute} %{message}\",\"messages\":{\"accepted\":\"must be accepted\",\"already_confirmed\":\"was already confirmed, please try signing in\",\"blank\":\"can\\'t be blank\",\"confirmation\":\"doesn\\'t match %{attribute}\",\"confirmation_period_expired\":\"needs to be confirmed within %{period}, please request a new one\",\"empty\":\"can\\'t be empty\",\"equal_to\":\"must be equal to %{count}\",\"equal_to_current_password\":\"должен отличаться от текущего пароля.\",\"equal_to_email\":\"должно отличаться от адреса электронной почты.\",\"even\":\"must be even\",\"exclusion\":\"is reserved\",\"expired\":\"has expired, please request a new one\",\"greater_than\":\"must be greater than %{count}\",\"greater_than_or_equal_to\":\"must be greater than or equal to %{count}\",\"in\":\"must be in %{count}\",\"inclusion\":\"is not included in the list\",\"invalid\":\"is invalid\",\"less_than\":\"must be less than %{count}\",\"less_than_or_equal_to\":\"must be less than or equal to %{count}\",\"model_invalid\":\"Validation failed: %{errors}\",\"not_a_number\":\"is not a number\",\"not_an_integer\":\"must be an integer\",\"not_found\":\"not found\",\"not_locked\":\"was not locked\",\"not_saved\":{\"one\":\"1 error prohibited this %{resource} from being saved:\",\"other\":\"%{count} errors prohibited this %{resource} from being saved:\"},\"odd\":\"must be odd\",\"other_than\":\"must be other than %{count}\",\"password_complexity\":{\"digit\":{\"few\":\"должен содержать хотя бы %{count} цифры\",\"many\":\"должен содержать хотя бы %{count} цифр\",\"one\":\"должен содержать хотя бы одну цифру\",\"other\":\"должен содержать хотя бы %{count} цифры\"},\"lower\":{\"few\":\"должен содержать хотя бы %{count} строчные буквы\",\"many\":\"должен содержать хотя бы %{count} строчных букв\",\"one\":\"должен содержать хотя бы одну строчную букву\",\"other\":\"должен содержать хотя бы %{count} строчных букв\"},\"symbol\":{\"few\":\"должен содержать хотя бы %{count} знака пунктуации или символа\",\"many\":\"должен содержать хотя бы %{count} знаков пунктуации или символов\",\"one\":\"должен содержать хотя бы один знак пунктуации или символ\",\"other\":\"должен содержать хотя бы %{count} знаков пунктуации или символов\"},\"upper\":{\"few\":\"должен содержать хотя бы %{count} прописные буквы\",\"many\":\"должен содержать хотя бы %{count} прописных букв\",\"one\":\"должен содержать хотя бы одну прописную букву\",\"other\":\"должен содержать хотя бы %{count} прописных букв\"}},\"password_format\":\"Must contain uppercase AND lowercase letters and at least one number\",\"password_too_long\":\"is too long\",\"present\":\"must be blank\",\"required\":\"must exist\",\"taken\":\"has already been taken\",\"taken_in_past\":\"уже ранее использовался.\",\"too_long\":{\"one\":\"is too long (maximum is 1 character)\",\"other\":\"is too long (maximum is %{count} characters)\"},\"too_short\":{\"one\":\"is too short (minimum is 1 character)\",\"other\":\"is too short (minimum is %{count} characters)\"},\"wrong_length\":{\"one\":\"is the wrong length (should be 1 character)\",\"other\":\"is the wrong length (should be %{count} characters)\"}}},\"flash\":{\"actions\":{\"create\":{\"notice\":\"%{resource_name} was successfully created.\"},\"destroy\":{\"alert\":\"%{resource_name} could not be destroyed.\",\"notice\":\"%{resource_name} was successfully destroyed.\"},\"update\":{\"notice\":\"%{resource_name} was successfully updated.\"}}},\"hello_world\":\"Hello world\",\"helpers\":{\"select\":{\"prompt\":\"Please select\"},\"submit\":{\"create\":\"Create %{model}\",\"submit\":\"Save %{model}\",\"update\":\"Update %{model}\"}},\"hi\":\"Hi\",\"mailers\":{\"common\":{\"chummy_sign_off\":\"Have a good one.\",\"final_note\":\"P.S.: If you think you received this email accidentally, then something weird could be going on. Hit reply and a member of the %{brand_name} team will investigate.\",\"team_sign_off\":\"- The %{brand_name} Team\"},\"confirmation_instructions_email\":{\"crm\":{\"salesforce\":{\"resource_confirmed\":\"Someone has requested a resend of a confirmation email. You do not need to confirm your email address because your account is configured to use Salesforce to sign in.\",\"resource_unconfirmed\":\"You do not need to confirm your email address because your account is configured to use Salesforce to sign in, please complete the sign up process by clicking the button below to sign in to %{brand_name} via Salesforce.\"}},\"non_crm\":{\"confirm_link\":\"Confirm my account\",\"welcome\":\"Welcome to %{brand_name}. As the final step in the process you\\'ll need to confirm your account by clicking on the link below.\"},\"subject\":\"Confirmation instructions for %{domain}\"},\"flagged_events_mailer\":{\"from\":\"Flagged events - %{brand_name} \\\\u003cflagged_events@mailer.%{domain}\\\\u003e\"},\"mobile_registration_email\":{\"alert_cs_registration_locked\":{\"subject\":\"%{brand_name}: user has had mobile registration locked, too many failed attempts\"},\"dispatch_registration_PIN\":{\"further_instructions\":\"If you are NOT attempting to register for the %{brand_name} Mobile app then please let us know at %{support_email_link} - thank you.\",\"introduction\":\"Here is your mobile app registration PIN:\",\"subject\":\"%{brand_name} Mobile Registration Verification\"},\"too_many_failed_attempts\":{\"introduction\":\"We have received too many failed mobile device registration attempts for your account and we will block any further requests. If you have not attempted to register a mobile device with us in the last hour then please let us know as it is likely someone has tried on your behalf. If you have been trying to register a device please contact %{support_email_link} and we can help unlock your account and get you registered.\",\"subject\":\"%{brand_name}: too many failed registration attempts\"}},\"org_list_download_mail\":{\"dispatch_link\":{\"introduction\":\"We have finished meshing your %{crm_brand_name} data with the companies in your \\\\\"%{list_name}\\\\\" list.\",\"subject\":\"%{brand_name}: your file download of \\'%{list_name}\\' is ready\"},\"failed\":{\"instructions\":\"You could try again in a little while. If you already have and are receiving this email again, please contact us at %{support_email_link}\",\"introduction\":\"We are really sorry, but something went wrong with creating your download of %{crm_brand_name} data for your \\\\\"%{list_name}\\\\\" list.\",\"subject\":\"%{brand_name}: your file download of \\'%{list_name}\\' failed\"}},\"reset_password_instructions_email\":{\"crm\":{\"salesforce\":{\"change_requested\":\"Someone has requested a change to your password. Your account is configured to use Salesforce to sign in.\"}},\"fishy_fine_print\":\"If you did not request a password change, then something weird is going on. Someone may be trying to access your account (unsuccessfully). Please reply to this email and let us know. We will take steps to make sure it stops.\",\"non_crm\":{\"change_password_link\":\"Change my password\",\"change_requested\":\"Someone has requested a change to your password, you can do this via the link below.\"},\"subject\":\"Password reset instructions for %{domain}\"},\"sales_force_mail\":{\"processing_completed\":{\"bullet_points\":[\"Only show events associated with companies in your Salesforce account\",\"Add new contacts and accounts to your Salesforce account without leaving %{brand_name}\",\"Access the \\'Salesforce details\\' panel on company dashboards where you can see open tasks, team interactions, opportunities, and more!\"],\"further_instructions\":\"We\\'re here to help. If you run into any questions or challenges, please contact us at %{support_email_link} and a member of our team would be more than happy to help.\",\"get_the_most\":\"To get the most from the integration, check out the \\'Mine Salesforce for opportunities\\' guide in the Help Center.\",\"guide_button\":\"Take me to the guide\",\"introduction\":\"Good news - your Salesforce account is now integrated with %{brand_name}. Now you’ll be able to:\"}},\"segment_contact\":{\"report_manager\":{\"fail_subject\":\"%{brand_name}: The PDF report generation failed\",\"success_subject\":\"%{brand_name}: Your PDF for %{company_name} is attached\"}},\"sf_token_expiry_email\":{\"further_instructions\":\"If you run into any questions or challenges, please contact us at %{support_email_link} and a member of our team would be more than happy to help.\",\"introduction\":\"Unfortunately the connection established for you between %{brand_name} and your %{crm_brand_name} account has expired. We will not be able to update your lists in %{brand_name} to reflect your %{crm_brand_name} database. To re-establish the connection, you just need to log in to %{brand_name} using your %{crm_brand_name}.\",\"subject\":\"%{brand_name} to %{crm_brand_name} connection has expired\"},\"share_list_mail\":{\"introduction\":\"%{user_name} shared a list with you: \",\"subject\":\"[%{brand_name} - shared list] %{list_name}\"},\"trial_expiry_mail\":{\"seven_days_to_go\":{\"further_instructions\":\"A member of our fabulous Customer Success team will arrange a welcome call with you to understand your goals and priorities, and will then give you a personalized Tour de %{brand_name} so you can easily access the information that is most valuable to you.\",\"instructions\":\"If you\\'d like continued access to the platform with our flexible month-to-month subscription, please ensure you contact %{support_email_link} ahead of: %{deadline}\",\"introduction\":\"Time flies when you\\'re uncovering new business opportunities! Your %{brand_name} trial is coming to an end next week.\",\"sign_off\":\"We look forward to helping you reach your sales goals!\",\"subject\":\"Just a heads up that your %{brand_name} trial is ending in seven days\"},\"seven_days_to_go_warning_for_cs\":{\"introduction\":\"%{user_name} shared a list with you: \",\"subject\":\"[%{brand_name} - shared list] %{list_name}\"}},\"unlock_instructions_email\":{\"crm\":{\"salesforce\":{\"change_requested\":\"You are being sent this email either because of one too many unsuccessful non-Salesforce log-in attempts or someone has requested an unlock email. %{brand_name} has not locked your account because your account is configured to use Salesforce to sign in.\",\"password_forgotten\":\"If you have forgotten your Salesforce password or think your account has been locked by Salesforce, please follow the instructions provided on the Salesforce sign in page.\"}},\"fishy_fine_print\":\"If you have not been (unsuccessfully) trying to log in to your account, then something weird is going on. Someone may be trying to access your account (unsuccessfully). Please reply to this email and let us know. We will take steps to make sure it stops.\",\"non_crm\":{\"change_requested\":\"For security reasons we have locked your account because of too many log-in attempts. To unlock your account, click the link below.\",\"unlock_account_link\":\"Unlock my account\"},\"subject\":\"Unlock instructions for %{domain}\"}},\"mongoid\":{\"errors\":{\"messages\":{\"ambiguous_relationship\":{\"message\":\"Ambiguous associations %{candidates} defined on %{klass}.\",\"resolution\":\"On the %{name} association on %{inverse} you must add an :inverse_of option to specify the exact association on %{klass} that is the opposite of %{name}.\",\"summary\":\"When Mongoid attempts to set an inverse document of an association in memory, it needs to know which association it belongs to. When setting %{name}, Mongoid looked on the class %{inverse} for a matching association, but multiples were found that could potentially match: %{candidates}.\"},\"blank_in_locale\":\"can\\'t be blank in %{location}\",\"callbacks\":{\"message\":\"Calling %{method} on %{klass} resulted in a false return from a callback.\",\"resolution\":\"Double check all before callbacks to make sure they are not unintentionally returning false.\",\"summary\":\"If a before callback returns false when using Document.create!, Document#save!, or Document#update_attributes! this error will get raised since the document did not actually get saved.\"},\"calling_document_find_with_nil_is_invalid\":{\"message\":\"Calling Document.find with nil is invalid.\",\"resolution\":\"Most likely this is caused by passing parameters directly through to the find, and the parameter either is not present or the key from which it is accessed is incorrect.\",\"summary\":\"Document.find expects the parameters to be 1 or more ids, and will return a single document if 1 id is provided, otherwise an array of documents if multiple ids are provided.\"},\"create_collection_failure\":{\"message\":\"Cannot create collection %{collection_name} with options %{collection_options}. The following error was raised: %{error}.\",\"resolution\":\"Double check that collection options for the collection %{collection_name} are valid. Consult with Ruby driver documentation and MongoDB documentation if the desired options are supported by your version of the server.\",\"summary\":\"The server rejected createCollection command with given collection options. This may happen when some of the options are invalid, or not supported by your version of the server.\"},\"criteria_argument_required\":{\"message\":\"Calling Criteria methods with nil arguments is not allowed.\",\"resolution\":\"Invoke Criteria methods with non-nil arguments or omit the respective invocations.\",\"summary\":\"Arguments to Criteria methods cannot be nil, and most Criteria methods require at least one argument. Only logical operations (and, or, nor and not), `all\\' and `where\\' can be called without arguments. The method that was called with nil argument was: %{query_method}.\"},\"delete_restriction\":{\"message\":\"Cannot destroy %{document} because of dependent \\'%{relation}\\'.\",\"resolution\":\"Don\\'t attempt to delete the parent %{document} when it has children, or change the dependent option on the association.\",\"summary\":\"When defining \\'%{relation}\\' with a :dependent =\\\\u003e :restrict_with_error, Mongoid will raise an error when attempting to destroy the %{document} when the child \\'%{relation}\\' still has documents in it.\"},\"destroy_restrict_with_error_dependencies_exist\":\"is not empty and prevents the document from being destroyed\",\"document_not_destroyed\":{\"message\":\"%{klass} with id %{id} was not destroyed.\",\"resolution\":\"Check the before/after destroy callbacks to ensure that the return values are truthy for the chain to continue.\",\"summary\":\"When calling %{klass}#destroy! and a callback halts the destroy callback chain by returning a false value, the deletion will not actually occur.\"},\"document_not_found\":{\"message\":\"Document(s) not found for class %{klass} with id(s) %{missing}.\",\"resolution\":\"Search for an id that is in the database or set the Mongoid.raise_not_found_error configuration option to false, which will cause nil to be returned instead of raising this error when searching for a single id, or only the matched documents when searching for multiples.\",\"summary\":\"When calling %{klass}.find with an id or array of ids, each parameter must match a document in the database or this error will be raised. The search was for the id(s): %{searched} (%{total} total) and the following ids were not found: %{missing}.\"},\"document_with_attributes_not_found\":{\"message\":\"Document not found for class %{klass} with attributes %{attributes}.\",\"resolution\":\"Search for attributes that are in the database or set the Mongoid.raise_not_found_error configuration option to false, which will cause nil to be returned instead of raising this error.\",\"summary\":\"When calling %{klass}.find_by with a hash of attributes, all attributes provided must match a document in the database or this error will be raised.\"},\"document_with_shard_key_not_found\":{\"message\":\"Document not found for class %{klass} with id %{missing} and shard key %{shard_key}.\",\"resolution\":\"Search for an id/shard key that is in the database or set the Mongoid.raise_not_found_error configuration option to false, which will cause nil to be returned instead of raising this error.\",\"summary\":\"When calling %{klass}.find with an id and a shard key, each parameter must match a document in the database or this error will be raised. The search was for the id: %{missing} with shard_key: %{shard_key} and it was not found.\"},\"drop_collection_failure\":{\"message\":\"Cannot drop collection %{collection_name}.\",\"resolution\":\"Try to drop the collection manually using Ruby driver or mongo shell.\",\"summary\":\"Mongoid tried to drop collection %{collection_name}, but the collection still exists in the database.\"},\"empty_config_file\":{\"message\":\"Empty configuration file: %{path}.\",\"resolution\":\"Ensure your configuration file contains the correct contents. Refer to: https://www.mongodb.com/docs/mongoid/current/reference/configuration/\",\"summary\":\"Your mongoid.yml configuration file appears to be empty.\"},\"immutable_attribute\":{\"message\":\"Attempted to change the immutable attribute \\'%{name}\\' with the value: %{value}.\",\"resolution\":\"Do not attempt to update the value of \\'%{name}\\' after the document is persisted.\",\"summary\":\"Immutable attributes can only have values set when the document is a new record.\"},\"in_memory_collation_not_supported\":{\"message\":\"A collation option cannot be applied when querying documents in-memory.\",\"resolution\":\"Remove the collation option from the query.\",\"summary\":\"The query being run against documents in memory has a collation option set. A collation option is only supported if the query is executed on a MongoDB server with version \\\\u003e= 3.4.\"},\"invalid_async_query_executor\":{\"message\":\"Invalid async_query_executor option: %{executor}.\",\"resolution\":\"Pick an allowed option or fix the typo. If you were expecting the option to be there, please consult the following page with respect to Mongoid\\'s configuration:\\\\n\\\\n   https://www.mongodb.com/docs/mongoid/current/reference/configuration/#mongoid-configuration-options\",\"summary\":\"A invalid async query executor was specified. The valid options are: %{options}.\"},\"invalid_collection\":{\"message\":\"Access to the collection for %{klass} is not allowed.\",\"resolution\":\"For access to the collection that the embedded document is in, use %{klass}#_root.collection, or do not attempt to persist an embedded document without a parent set.\",\"summary\":\"%{klass}.collection was called, and %{klass} is an embedded document - it resides within the collection of the root document of the hierarchy.\"},\"invalid_config_file\":{\"message\":\"Invalid configuration file: %{path}.\",\"resolution\":\"Ensure your configuration file contains the correct contents. Refer to: https://www.mongodb.com/docs/mongoid/current/reference/configuration/\",\"summary\":\"Your mongoid.yml configuration file does not contain the correct file structure.\"},\"invalid_config_option\":{\"message\":\"Invalid configuration option: %{name}.\",\"resolution\":\"Remove the invalid option or fix the typo. If you were expecting the option to be there, please consult the following page with respect to Mongoid\\'s configuration:\\\\n\\\\n   http://mongoid.org/en/mongoid/docs/installation.html\",\"summary\":\"A invalid configuration option was provided in your mongoid.yml, or a typo is potentially present. The valid configuration options are: %{options}.\"},\"invalid_dependent_strategy\":{\"message\":\"Invalid dependent strategy: %{invalid_strategy}.\",\"resolution\":\"Change the dependent strategy to one of the valid types.\",\"summary\":\"An invalid dependent strategy was defined for the association: %{association}. The valid strategies are: %{valid_strategies}.\"},\"invalid_discriminator_key_target\":{\"message\":\"Setting the discriminator key on a child class is not allowed.\",\"resolution\":\"Try setting the discriminator key on %{superclass} or one of %{class_name}\\'s ancestors.\",\"summary\":\"The discriminator key on the class %{class_name} was attempted to be changed. Changing the discriminator key on a child class is not allowed.\"},\"invalid_dot_dollar_assignment\":{\"message\":\"Cannot set the %{attr} attribute on the %{klass} class.\",\"resolution\":\"In order to set fields that start with a dollar sign ($) or contain a dot/period (.), the aggregation pipeline can be used. MongoDB provides specific operators for working with these fields. Refer to the MongoDB documentation here: https://www.mongodb.com/docs/manual/core/dot-dollar-considerations/\",\"summary\":\"Calling the setters for fields that start with a dollar sign ($) or contain a dot/period (.) is prohibited. See the Mongoid documentation on Field Names with Dots/Periods (.) and Dollar Signs ($) for more information.\"},\"invalid_elem_match_operator\":{\"message\":\"Invalid $elemMatch operator \\'%{operator}\\'.\",\"resolution\":\"Valid field operators are: %{valid_operators}. Ensure you are using one of these operators.\",\"summary\":\"You misspelled an operator or are using an operator that Mongoid does not support.\"},\"invalid_estimated_count_criteria\":{\"message\":\"Invalid criteria for estimated_count.\",\"resolution\":\"Try calling estimated_count directly on the class: %{class_name}.estimated_count.\\\\n\\\\n  If the class defines a default scope, use unscoped: %{class_name}.unscoped.estimated_count.\",\"summary\":\"Estimated count is strictly a collection-level operation and cannot be called on a filtered criteria.\"},\"invalid_expression_operator\":{\"message\":\"Invalid expression operator \\'%{operator}\\'.\",\"resolution\":\"Valid expression operators are: %{valid_operators}. Ensure you are using one of these operators.\",\"summary\":\"You misspelled an operator, are using an operator that Mongoid does not support, or are trying to use a field-level operator on expression level.\"},\"invalid_field\":{\"message\":\"Defining a field named \\'%{field}\\' is not allowed.\",\"resolution\":\"Use Mongoid.destructive_fields to see what names are not allowed, and don\\'t use these names. These include names that also conflict with core Ruby methods on Object, Module, Enumerable, or included gems that inject methods into these or Mongoid internals.\",\"summary\":\"Defining this field would override the method \\'%{name}\\', which would cause issues with expectations around the original method and cause extremely hard to debug issues. The original method was defined in:\\\\n   Object: %{origin}\\\\n   File: %{file}\\\\n   Line: %{line}\"},\"invalid_field_operator\":{\"message\":\"Invalid field operator \\'%{operator}\\'.\",\"resolution\":\"Valid field operators are: %{valid_operators}. Ensure you are using one of these operators.\",\"summary\":\"You misspelled an operator, are using an operator that Mongoid does not support, or are trying to use an expression-level operator on field level.\"},\"invalid_field_option\":{\"message\":\"Invalid option :%{option} provided for field :%{name}.\",\"resolution\":\"When defining the field :%{name} on \\'%{klass}\\', please provide valid options for the field. These are currently: %{valid}. If you meant to define a custom field option, please do so first as follows:\\\\n\\\\n   Mongoid::Fields.option :%{option} do |model, field, value|\\\\n     # Your logic here...\\\\n   end\\\\n   class %{klass}\\\\n     include Mongoid::Document\\\\n     field :%{name}, %{option}: true\\\\n   end\\\\n\\\\n Refer to: https://www.mongodb.com/docs/mongoid/current/reference/fields/#custom-field-options\",\"summary\":\"Mongoid requires that you only provide valid options on each field definition in order to prevent unexpected behavior later on.\"},\"invalid_field_type\":{\"message\":\"Invalid field type %{type_inspection} for field \\'%{field}\\' on model \\'%{klass}\\'.\",\"resolution\":\"Please provide a valid type value for the field. Refer to: https://www.mongodb.com/docs/mongoid/current/reference/fields/#using-symbols-or-strings-instead-of-classes\",\"summary\":\"Model \\'%{klass}\\' defines a field \\'%{field}\\' with an unknown type value %{type_inspection}.\"},\"invalid_global_executor_concurrency\":{\"message\":\"Invalid global_executor_concurrency option.\",\"resolution\":\"Set global_executor_concurrency option to :global_thread_pool or remove global_executor_concurrency option.\",\"summary\":\"You set global_executor_concurrency while async_query_executor option is not set to :global_thread_pool. The global_executor_concurrency is allowed only for the global thread pool executor.\"},\"invalid_includes\":{\"message\":\"Invalid includes directive: %{klass}.includes(%{args})\",\"resolution\":\"Ensure that each parameter passed to %{klass}.includes is a valid name of an association on the %{klass} model. These are: %{relations}.\",\"summary\":\"Eager loading in Mongoid only supports providing arguments to %{klass}.includes that are the names of associations on the %{klass}.\"},\"invalid_index\":{\"message\":\"Invalid index specification on %{klass}: %{spec}, %{options}\",\"resolution\":\"Ensure that the index conforms to the correct syntax and has the correct options.\\\\n\\\\n Valid options are:\\\\n   background: true|false\\\\n   database: \\'database_name\\'\\\\n   name: \\'index_name\\'\\\\n   sparse: true|false\\\\n   unique: true|false\\\\n   min: 1\\\\n   max: 1\\\\n   bits: 26\\\\n   key: 26\\\\n   bucket_size : 1\\\\n   sphere_version : 1\\\\n   text_version : 1\\\\n   version : 1\\\\n   weights: { content: 1, title: 2 }\\\\n   expire_after_seconds: number_of_seconds\\\\n   partial_filter_expression\\\\n   storage_engine\\\\n   language_override\\\\n   default_language\\\\n   collation\\\\n   wildcard_projection: { \\'path.to.field.a\\': 1, \\'path.to.field.b\\': 0 }\\\\n Valid types are: 1, -1, \\'2d\\', \\'2dsphere\\', \\'geoHaystack (deprecated)\\', \\'text\\', \\'hashed\\'\\\\n\\\\n Example:\\\\n   class Band\\\\n     include Mongoid::Document\\\\n     index({ name: 1, label: -1 }, { sparse: true })\\\\n     index({ location: \\'2d\\' }, { background: true })\\\\n   end\\\\n\\\\n\",\"summary\":\"Indexes in Mongoid are defined as a hash of field name and direction/2d pairs, with a hash for any additional options.\"},\"invalid_options\":{\"message\":\"Invalid option :%{invalid} provided to association :%{name}.\",\"resolution\":\"Valid options are: %{valid}, make sure these are the ones you are using.\",\"summary\":\"Mongoid checks the options that are passed to the association macros to ensure that no ill side effects occur by letting something slip by.\"},\"invalid_path\":{\"message\":\"Having a root path assigned for %{klass} is invalid.\",\"resolution\":\"Most likely your embedded model, %{klass} is also referenced via a has_many from a root document in another collection. Double check the association definitions and fix any instances where embedded documents are improperly referenced from other collections.\",\"summary\":\"Mongoid has two different path objects for determining the location of a document in the database, Root and Embedded. This error is raised when an embedded document somehow gets a root path assigned.\"},\"invalid_persistence_option\":{\"message\":\"Invalid persistence option :%{invalid}.\",\"resolution\":\"Valid options are: %{valid}, make sure these are the ones you are using.\",\"summary\":\"The options used to change the persistence context must be one of the valid options for a mongo client, or a collection name.\"},\"invalid_relation\":{\"message\":\"Defining an association named \\'%{name}\\' is not allowed.\",\"resolution\":\"Use Mongoid.destructive_fields to see what names are not allowed, and don\\'t use these names. These include names that also conflict with core Ruby methods on Object, Module, Enumerable, or included gems that inject methods into these or Mongoid internals.\",\"summary\":\"Defining this association would override the method \\'%{name}\\', which would cause issues with expectations around the original method and cause extremely hard to debug issues. The original method was defined in:\\\\n   Object: %{origin}\\\\n   File: %{file}\\\\n   Line: %{line}\"},\"invalid_relation_option\":{\"message\":\"Invalid association option :%{option} for association \\'%{name}\\' on class %{klass}.\",\"resolution\":\"Valid options are: %{valid_options}, make sure you use only those.\",\"summary\":\"An invalid option was provided for an association.\"},\"invalid_scope\":{\"message\":\"Defining a scope of value %{value} on %{klass} is not allowed.\",\"resolution\":\"Change the scope to be a proc wrapped criteria.\\\\n\\\\n Example:\\\\n   class Band\\\\n     include Mongoid::Document\\\\n     scope :inactive, -\\\\u003e{ where(active: false) }\\\\n   end\\\\n\\\\n\",\"summary\":\"Scopes in Mongoid must be procs that wrap criteria objects.\"},\"invalid_session_nesting\":{\"message\":\"A session was started while another session was being used.\",\"resolution\":\"Only use one session at a time; sessions cannot be nested.\",\"summary\":\"Sessions cannot be nested. Only one session can be used in a thread at once.\"},\"invalid_session_use\":{\"message\":\"A session was attempted to be used with a model whose client cannot use that session.\",\"resolution\":\"Only execute operations on the model class or instances of the model through which the session was created. Otherwise, ensure that all models on which operations are executed in the session block share the same driver client. For example, a model may have a different client specified in its \\'store_in\\' options.\\\\n\\\\n\",\"summary\":\"Sessions are started via driver clients (Model#mongo_client) and, in most cases, driver clients are shared across models. When different models have their own clients, a session cannot be obtained via one model and used for operations on another model.\"},\"invalid_set_polymorphic_relation\":{\"message\":\"The %{name} attribute can\\'t be set to an instance of %{other_klass} as %{other_klass} has multiple associations referencing %{klass} as %{name}.\",\"resolution\":\"Set the values from the parent, or redefine the association with only a single definition in the parent.\",\"summary\":\"If the parent class of a polymorphic association has multiple definitions for the same association, the values must be set from the parent side and not the child side since Mongoid cannot determine from the child side which association to go in.\"},\"invalid_storage_options\":{\"message\":\"Invalid options passed to %{klass}.store_in: %{options}.\",\"resolution\":\"Change the options passed to store_in to match the documented API, and ensure all keys in the options hash are symbols.\\\\n\\\\n Example:\\\\n   class Band\\\\n     include Mongoid::Document\\\\n     store_in collection: \\'artists\\', database: \\'music\\'\\\\n   end\\\\n\\\\n\",\"summary\":\"The :store_in macro takes only a hash of parameters with the keys :database, :collection, :collection_options, or :client.\"},\"invalid_time\":{\"message\":\"\\'%{value}\\' is not a valid Time.\",\"resolution\":\"Make sure to pass parsable values to the field setter for Date, DateTime, and Time objects. When this is a String it needs to be valid for Time.parse. Other objects must be valid to pass to Time.local.\",\"summary\":\"Mongoid tries to serialize the values for Date, DateTime, and Time into proper UTC times to store in the database. The provided value could not be parsed.\"},\"inverse_not_found\":{\"message\":\"When adding a(n) %{klass} to %{base}#%{name}, Mongoid could not determine the inverse foreign key to set. The attempted key was \\'%{inverse}\\'.\",\"resolution\":\"If an inverse is not required, like a belongs_to or has_and_belongs_to_many, ensure that :inverse_of =\\\\u003e nil is set on the association. If the inverse is needed, most likely the inverse cannot be figured out from the names of the associations and you will need to explicitly tell Mongoid on the association what the inverse is.\\\\n\\\\n Example:\\\\n   class Car\\\\n     include Mongoid::Document\\\\n     has_one :engine, class_name: \\\\\"Motor\\\\\", inverse_of: :machine\\\\n   end\\\\n\\\\n   class Motor\\\\n     include Mongoid::Document\\\\n     belongs_to :machine, class_name: \\\\\"Car\\\\\", inverse_of: :engine\\\\n   end\",\"summary\":\"When adding a document to an association, Mongoid attempts to link the newly added document to the base of the association in memory, as well as set the foreign key to link them on the database side. In this case Mongoid could not determine what the inverse foreign key was.\"},\"message_title\":\"message\",\"mixed_client_configuration\":{\"message\":\"Both uri and standard configuration options defined for client: \\'%{name}\\'.\",\"resolution\":\"Provide either only a uri as configuration or only standard options.\",\"summary\":\"Instead of simply giving uri or standard options a preference order, Mongoid assumes that you have made a mistake in your configuration and requires that you provide one or the other, but not both. The options that were provided were: %{config}.\"},\"mixed_relations\":{\"message\":\"Referencing a(n) %{embedded} document from the %{root} document via a non-embedded association is not allowed since the %{embedded} is embedded.\",\"resolution\":\"Consider not embedding %{embedded}, or do the key storage and access in a custom manner in the application code.\",\"summary\":\"In order to properly access a(n) %{embedded} from %{root} the reference would need to go through the root document of %{embedded}. In a simple case this would require Mongoid to store an extra foreign key for the root, in more complex cases where %{embedded} is multiple levels deep a key would need to be stored for each parent up the hierarchy.\"},\"nested_attributes_metadata_not_found\":{\"message\":\"Could not find metadata for association \\'%{name}\\' on model: %{klass}.\",\"resolution\":\"Make sure that there is an association defined named \\'%{name}\\' on %{klass} or that the association definition comes before the accepts_nested_attributes_for macro in the model - order matters so that Mongoid has access to the metadata.\\\\n\\\\n Example:\\\\n   class Band\\\\n     include Mongoid::Document\\\\n     has_many :albums\\\\n     accepts_nested_attributes_for :albums\\\\n   end\\\\n\\\\n\",\"summary\":\"When defining nested attributes for an association, Mongoid needs to access the metadata for the association \\'%{name}\\' in order if add autosave functionality to it, if applicable. Either no association named \\'%{name}\\' could be found, or the association had not been defined yet.\"},\"no_client_config\":{\"message\":\"No configuration could be found for a client named \\'%{name}\\'.\",\"resolution\":\"Double check your mongoid.yml to make sure under the clients key that a configuration exists for \\'%{name}\\'. If you have set the configuration programmatically, ensure that \\'%{name}\\' exists in the configuration hash.\",\"summary\":\"When attempting to create the new client, Mongoid could not find a client configuration for the name: \\'%{name}\\'. This is necessary in order to know the host, port, and options needed to connect.\"},\"no_client_database\":{\"message\":\"No database provided for client configuration: :%{name}.\",\"resolution\":\"If configuring via a mongoid.yml, ensure that within your :%{name} section a :database value for the client\\'s default database is defined.\\\\n\\\\n Example:\\\\n   development:\\\\n     clients:\\\\n       %{name}:\\\\n         database: my_app_db\\\\n         hosts:\\\\n           - localhost:27017\\\\n\\\\n\",\"summary\":\"Each client configuration must provide a database so Mongoid knows where the default database to persist to. What was provided was: %{config}.\"},\"no_client_hosts\":{\"message\":\"No hosts provided for client configuration: :%{name}.\",\"resolution\":\"If configuring via a mongoid.yml, ensure that within your :%{name} section a :hosts value for the client hosts is defined.\\\\n\\\\n Example:\\\\n   development:\\\\n     clients:\\\\n       %{name}:\\\\n         database: my_app_db\\\\n         hosts:\\\\n           - localhost:27017\\\\n\\\\n\",\"summary\":\"Each client configuration must provide hosts so Mongoid knows where the database server is located. What was provided was: %{config}.\"},\"no_clients_config\":{\"message\":\"No clients configuration provided.\",\"resolution\":\"Double check your mongoid.yml to make sure that you have a top-level clients key with at least 1 default client configuration for it. You can regenerate a new mongoid.yml for assistance via `rails g mongoid:config`.\\\\n\\\\n Example:\\\\n   development:\\\\n     clients:\\\\n       default:\\\\n         database: mongoid_dev\\\\n         hosts:\\\\n           - localhost:27017\\\\n\\\\n\",\"summary\":\"Mongoid\\'s configuration requires that you provide details about each client that can be connected to, and requires in the clients config at least 1 default client to exist.\"},\"no_default_client\":{\"message\":\"No default client configuration is defined.\",\"resolution\":\"If configuring via a mongoid.yml, ensure that within your :clients section a :default client is defined.\\\\n\\\\n Example:\\\\n   development:\\\\n     clients:\\\\n       default:\\\\n         hosts:\\\\n           - localhost:27017\\\\n\\\\n\",\"summary\":\"The configuration provided settings for: %{keys}, but Mongoid requires a :default to be defined at minimum.\"},\"no_documents_found\":{\"message\":\"Could not find a document of class %{klass}.\",\"resolution\":\"Create a document of class %{klass} or use a finder method that does not raise an exception when no documents are found.\",\"summary\":\"Mongoid attempted to find a document of the class %{klass} but none exist.\"},\"no_environment\":{\"message\":\"Could not load the configuration since no environment was defined.\",\"resolution\":\"Please ensure an environment is set in one of the listed locations. The environment must be explicitly set.\",\"summary\":\"Mongoid could not determine the environment to use because it was not specified in any of the following locations: Rails.env, Sinatra::Base.environment, ENV[\\\\\"RACK_ENV\\\\\"], ENV[\\\\\"MONGOID_ENV\\\\\"]. Without knowing the environment, Mongoid cannot load its configuration.\"},\"no_map_reduce_output\":{\"message\":\"No output location was specified for the map/reduce operation.\",\"resolution\":\"Provide the location that the output of the operation is to go by chaining an #out call to the map/reduce.\\\\n\\\\n Example:\\\\n   Band.map_reduce(map, reduce).out(inline: 1)\\\\n\\\\n Valid options for the out function are:\\\\n   inline: 1\\\\n   merge: \\'collection-name\\'\\\\n   replace: \\'collection-name\\'\\\\n   reduce: \\'collection-name\\'\\\\n\\\\n\",\"summary\":\"When executing a map/reduce, you must provide the output location of the results. The attempted command was: %{command}.\"},\"no_metadata\":{\"message\":\"Metadata not found for document of type %{klass}.\",\"resolution\":\"Ensure that your associations on the %{klass} model are all properly defined, and that the inverse associations are also properly defined. Embedded associations must have both the parent (embeds_one/embeds_many) and the inverse (embedded_in) present in order to work properly.\",\"summary\":\"Mongoid sets the metadata of an association on the document when it is either loaded from within the association, or added to one. The presence of the metadata is required in order to provide various functionality around associations. Most likely you are getting this error because the document is embedded and was attempted to be persisted without being associated with a parent, or the association was not properly defined.\"},\"no_parent\":{\"message\":\"Cannot persist embedded document %{klass} without a parent document.\",\"resolution\":\"Ensure that you\\'ve set the parent association if instantiating the embedded document directly, or always create new embedded documents via the parent association.\",\"summary\":\"If the document is embedded, in order to be persisted it must always have a reference to its parent document. This is most likely caused by either calling %{klass}.create or %{klass}.create! without setting the parent document as an attribute.\"},\"readonly_attribute\":{\"message\":\"Attempted to set the readonly attribute \\'%{name}\\' with the value: %{value}.\",\"resolution\":\"Don\\'t define \\'%{name}\\' as readonly, or do not attempt to update its value after the document is persisted.\",\"summary\":\"Attributes flagged as readonly via Model.attr_readonly can only have values set when the document is a new record.\"},\"readonly_document\":{\"message\":\"Attempted to persist a readonly document of class \\'%{klass}\\'.\",\"resolution\":\"Don\\'t attempt to persist documents that are flagged as readonly.\",\"summary\":\"Documents that are marked readonly cannot be persisted.\"},\"resolution_title\":\"resolution\",\"scope_overwrite\":{\"message\":\"Cannot create scope :%{scope_name}, because of existing method %{model_name}.%{scope_name}.\",\"resolution\":\"Change the name of the scope so it does not conflict with the already defined method %{model_name}, or set the configuration option Mongoid.scope_overwrite_exception to false, which is its default. In this case a warning will be logged.\",\"summary\":\"When defining a scope that conflicts with a method that already exists on the model, this error will get raised if Mongoid.scope_overwrite_exception is set to true.\"},\"sessions_not_supported\":{\"message\":\"Sessions are not supported by the connected server(s).\",\"resolution\":\"Verify that all servers in your deployment are at least version 3.6 or don\\'t attempt to use sessions with older server versions.\",\"summary\":\"A session was attempted to be used with a MongoDB server version that doesn\\'t support sessions. Sessions are supported in MongoDB server versions 3.6 and higher.\"},\"summary_title\":\"summary\",\"too_many_nested_attribute_records\":{\"message\":\"Accepting nested attributes for %{association} is limited to %{limit} documents.\",\"resolution\":\"The limit is set as an option to the macro, for example: accepts_nested_attributes_for :%{association}, limit: %{limit}. Consider raising this limit or making sure no more are sent than the set value.\",\"summary\":\"More documents were sent to be processed than the allowed limit.\"},\"unknown_attribute\":{\"message\":\"Attempted to set a value for \\'%{name}\\' which is not allowed on the model %{klass}.\",\"resolution\":\"Define the field \\'%{name}\\' in %{klass}, or include Mongoid::Attributes::Dynamic in %{klass} if you intend to store values in fields that are not explicitly defined.\",\"summary\":\"%{klass}#%{name}= was called but there is no \\'%{name}\\' field defined in the model, and Mongoid::Attributes::Dynamic is not included. This error is also raised instead of NoMethodError if the unknown attribute is passed to any method that accepts an attributes hash, such as #attributes=.\"},\"unknown_model\":{\"message\":\"Attempted to instantiate an object of the unknown model \\'%{klass}\\'.\",\"resolution\":\"The _type field is a reserved one used by Mongoid to determine the class for instantiating an object. Please don\\'t save data in this field or ensure that any values in this field correspond to valid models.\",\"summary\":\"A document with the value \\'%{value}\\' at the key \\'_type\\' was used to instantiate a model object but Mongoid cannot find this Class.\"},\"unsaved_document\":{\"message\":\"Attempted to save %{document} before the parent %{base}.\",\"resolution\":\"Make sure to only use create or create! when the parent document %{base} is persisted.\",\"summary\":\"You cannot call create or create! through the association (%{document}) whose parent (%{base}) is not already saved. This would cause the database to be out of sync since the child could potentially reference a nonexistent parent.\"},\"unsupported_javascript\":{\"message\":\"Executing Javascript $where selector on an embedded criteria is not supported.\",\"resolution\":\"Please provide a standard hash to #where when the criteria is for an embedded association.\",\"summary\":\"Mongoid only supports providing a hash of arguments to #where criterion on embedded documents. Since %{klass} is embedded, the expression %{javascript} is not allowed.\"},\"validations\":{\"message\":\"Validation of %{document} failed.\",\"resolution\":\"Try persisting the document with valid data or remove the validations.\",\"summary\":\"The following errors were found: %{errors}\"}}}},\"number\":{\"currency\":{\"format\":{\"delimiter\":\",\",\"format\":\"%u%n\",\"negative_format\":\"-%u%n\",\"precision\":2,\"separator\":\".\",\"significant\":false,\"strip_insignificant_zeros\":false,\"unit\":\"$\"}},\"format\":{\"delimiter\":\",\",\"precision\":3,\"round_mode\":\"default\",\"separator\":\".\",\"significant\":false,\"strip_insignificant_zeros\":false},\"human\":{\"decimal_units\":{\"format\":\"%n %u\",\"units\":{\"billion\":\"Billion\",\"million\":\"Million\",\"quadrillion\":\"Quadrillion\",\"thousand\":\"Thousand\",\"trillion\":\"Trillion\",\"unit\":\"\"}},\"format\":{\"delimiter\":\"\",\"precision\":3,\"significant\":true,\"strip_insignificant_zeros\":true},\"storage_units\":{\"format\":\"%n %u\",\"units\":{\"byte\":{\"one\":\"Byte\",\"other\":\"Bytes\"},\"eb\":\"EB\",\"gb\":\"GB\",\"kb\":\"KB\",\"mb\":\"MB\",\"pb\":\"PB\",\"tb\":\"TB\",\"zb\":\"ZB\"}}},\"nth\":{},\"percentage\":{\"format\":{\"delimiter\":\"\",\"format\":\"%n%\"}},\"precision\":{\"format\":{\"delimiter\":\"\"}}},\"simple_form\":{\"error_notification\":{\"default_message\":\"Please review the problems below:\"},\"no\":\"No\",\"required\":{\"mark\":\"*\",\"text\":\"required\"},\"yes\":\"Yes\"},\"support\":{\"array\":{\"last_word_connector\":\", and \",\"two_words_connector\":\" and \",\"words_connector\":\", \"}},\"time\":{\"am\":\"am\",\"formats\":{\"default\":\"%a, %d %b %Y %H:%M:%S %z\",\"long\":\"%B %d, %Y %H:%M\",\"short\":\"%d %b %H:%M\"},\"pm\":\"pm\"},\"users\":{\"confirmations\":{\"new\":{\"legend\":\"Resend your %{brand_name} confirmation instructions\",\"message\":\"We need to confirm your email address to complete the sign up process. Supply your email address, below, and we will send you instructions on how to confirm your address.\",\"submit_button\":\"Send Confirmation Instructions\",\"title\":\"Resend confirmation instructions | %{brand_name}\"},\"show\":{\"legend\":\"Check your inbox for a confirmation email\",\"message\":\"If your e-mail exists in our database we have sent you a message with instructions. Check your inbox (or spam folder) for a message from \\'%{default_from_email}\\' containing the confirmation link.\",\"title\":\"Awaiting confirmation | %{brand_name}\"}},\"passwords\":{\"new\":{\"failures\":\"Note: If you make more than 5 sequential failed attempts to sign in with your %{brand_name} password, your account will be (temporarily) locked. Check your inbox for instruction on how to unlock your account, or we can\",\"legend\":\"Reset your %{brand_name} password\",\"message\":\"Supply your email address, below, and we will send you instructions on how to reset your password.\",\"resend_link\":\"resend a new set of unlock instructions\",\"submit_button\":\"Send Reset Instructions\",\"title\":\"Reset password | %{brand_name}\"},\"show\":{\"didnt_receive_email\":\"Didn\\'t receive the email?\",\"legend\":\"Password reset instructions sent\",\"message\":\"If your e-mail exists in our database we have sent you a message with password reset instructions. Check your inbox (or spam folder) for a message from \\'%{default_from_email}\\'.\",\"resend_link\":\"you can request another one here\",\"title\":\"Awaiting reset | %{brand_name}\"}}},\"will_paginate\":{\"container_aria_label\":\"Pagination\",\"next_label\":\"Next \\\\u0026#8594;\",\"page_aria_label\":\"Page %{page}\",\"page_entries_info\":{\"multi_page\":\"Displaying %{model} %{from} - %{to} of %{count} in total\",\"multi_page_html\":\"Displaying %{model} \\\\u003cb\\\\u003e%{from}\\\\u0026nbsp;-\\\\u0026nbsp;%{to}\\\\u003c/b\\\\u003e of \\\\u003cb\\\\u003e%{count}\\\\u003c/b\\\\u003e in total\",\"single_page\":{\"one\":\"Displaying 1 %{model}\",\"other\":\"Displaying all %{count} %{model}\",\"zero\":\"No %{model} found\"},\"single_page_html\":{\"one\":\"Displaying \\\\u003cb\\\\u003e1\\\\u003c/b\\\\u003e %{model}\",\"other\":\"Displaying \\\\u003cb\\\\u003eall\\\\u0026nbsp;%{count}\\\\u003c/b\\\\u003e %{model}\",\"zero\":\"No %{model} found\"}},\"page_gap\":\"\\\\u0026hellip;\",\"previous_label\":\"\\\\u0026#8592; Previous\"}}'));\nI18n.translations[\"special_chem\"] = I18n.extend((I18n.translations[\"special_chem\"] || {}), JSON.parse('{\"activerecord\":{\"errors\":{\"messages\":{\"record_invalid\":\"Validation failed: %{errors}\",\"restrict_dependent_destroy\":{\"has_many\":\"Cannot delete record because dependent %{record} exist\",\"has_one\":\"Cannot delete record because a dependent %{record} exists\"}}}},\"brand\":{\"logo\":{\"full_image\":{\"file_name\":\"zymewire_logo_full.png\",\"path\":\"images/brand_specific/zymewire/zymewire_logo_full.png\"},\"header\":{\"path\":\"/images/brand_specific/zymewire/zymewire_logo_black_trans.png\"},\"mark_only\":{\"file_name\":\"zymewire_logo_z_only.png\",\"path\":\"images/brand_specific/zymewire/zymewire_logo_z_only.png\"}},\"meta\":{\"description\":\"Speciality Chemicals: You have chemistry together.\",\"image\":\"https://speciality_chemicals.lumerate.com/images/brand_specific/zymewire/zymewire_logo_full.png\",\"title\":\"Speciality Chemicals: You have chemistry together.\"},\"name\":\"Speciality Chemicals\",\"tag_line\":\"You have chemistry together.\"},\"bulk_uploads\":{\"email_local_part\":{\"empty_parameter\":\"No file uploaded\",\"error\":\"File Upload failed: %{error_message}\",\"success\":\"File was successfully uploaded\"}},\"common\":{\"crm\":{\"salesforce\":{\"forgot_password\":\"If you have forgotten your Salesforce password, please follow the instructions provided on the Salesforce sign in page.\",\"sign_in_button\":\"Sign In with Salesforce\"}}},\"contact\":{\"default_from_email\":\"info@zymewire.com\",\"phone_numbers\":[{\"label\":\"US\",\"phone\":\"1-844-996-3321\"},{\"label\":\"UK\",\"phone\":\"+44-208-133-9963\"}],\"support_email\":\"pete@lumerate.com\"},\"date\":{\"abbr_day_names\":[\"Sun\",\"Mon\",\"Tue\",\"Wed\",\"Thu\",\"Fri\",\"Sat\"],\"abbr_month_names\":[null,\"Jan\",\"Feb\",\"Mar\",\"Apr\",\"May\",\"Jun\",\"Jul\",\"Aug\",\"Sep\",\"Oct\",\"Nov\",\"Dec\"],\"day_names\":[\"Sunday\",\"Monday\",\"Tuesday\",\"Wednesday\",\"Thursday\",\"Friday\",\"Saturday\"],\"formats\":{\"default\":\"%Y-%m-%d\",\"long\":\"%B %d, %Y\",\"short\":\"%b %d\"},\"month_names\":[null,\"January\",\"February\",\"March\",\"April\",\"May\",\"June\",\"July\",\"August\",\"September\",\"October\",\"November\",\"December\"],\"order\":[\"year\",\"month\",\"day\"]},\"datetime\":{\"distance_in_words\":{\"about_x_hours\":{\"one\":\"about 1 hour\",\"other\":\"about %{count} hours\"},\"about_x_months\":{\"one\":\"about 1 month\",\"other\":\"about %{count} months\"},\"about_x_years\":{\"one\":\"about 1 year\",\"other\":\"about %{count} years\"},\"almost_x_years\":{\"one\":\"almost 1 year\",\"other\":\"almost %{count} years\"},\"half_a_minute\":\"half a minute\",\"less_than_x_minutes\":{\"one\":\"less than a minute\",\"other\":\"less than %{count} minutes\"},\"less_than_x_seconds\":{\"one\":\"less than 1 second\",\"other\":\"less than %{count} seconds\"},\"over_x_years\":{\"one\":\"over 1 year\",\"other\":\"over %{count} years\"},\"x_days\":{\"one\":\"1 day\",\"other\":\"%{count} days\"},\"x_minutes\":{\"one\":\"1 minute\",\"other\":\"%{count} minutes\"},\"x_months\":{\"one\":\"1 month\",\"other\":\"%{count} months\"},\"x_seconds\":{\"one\":\"1 second\",\"other\":\"%{count} seconds\"}},\"prompts\":{\"day\":\"Day\",\"hour\":\"Hour\",\"minute\":\"Minute\",\"month\":\"Month\",\"second\":\"Seconds\",\"year\":\"Year\"}},\"default_host\":\"https://speciality_chemicals.lumerate.com\",\"devise\":{\"confirmations\":{\"confirmed\":\"Your account was successfully confirmed. Please sign in.\",\"send_instructions\":\"Your email has not been confirmed. We need to confirm your email account before you can sign in. Please check your inbox or spam folder for an email from \\'info@zymewire.com\\' or request a new one.\",\"send_paranoid_instructions\":\"If your e-mail exists on our database, you will receive an email with instructions about how to confirm your account in a few minutes.\"},\"failure\":{\"already_authenticated\":\"You are already signed in.\",\"expired\":\"Your account has expired due to inactivity. Please contact the site administrator.\",\"inactive\":\"Your account was not activated yet.\",\"invalid\":\"Invalid email or password. If you use Salesforce, use the \\'Have Salesforce?\\' panel.\",\"invalid_token\":\"Invalid authentication token.\",\"last_attempt\":\"You have one more attempt before your account is locked.\",\"locked\":\"Your account is locked.\",\"not_active\":\"Your account has been de-activated, if you think this is a mistake please contact us\",\"not_found_in_database\":\"Invalid %{authentication_keys} or password.\",\"session_limited\":\"Your login credentials were used in another browser. Please sign in again to continue in this browser.\",\"timeout\":\"Your session expired, please sign in again to continue.\",\"unauthenticated\":\"You need to sign in or sign up before continuing.\",\"unconfirmed\":\"We must confirm your email before you can continue. Please check your inbox or spam folder for a confirmation email from \\'info@zymewire.com\\' or request a new one.\"},\"invalid_captcha\":\"The captcha input is not valid!\",\"invalid_security_question\":\"The security question answer was invalid.\",\"mailer\":{\"confirmation_instructions\":{\"subject\":\"Confirmation instructions for Zymewire.com\"},\"email_changed\":{\"subject\":\"Email Changed\"},\"password_change\":{\"subject\":\"Password Changed\"},\"reset_password_instructions\":{\"subject\":\"Reset password instructions for Zymewire.com\"},\"unlock_instructions\":{\"subject\":\"Unlock Instructions for Zymewire.com\"}},\"omniauth_callbacks\":{\"failure\":\"Could not authorize you from %{kind} because \\\\\"%{reason}\\\\\".\",\"success\":\"Successfully authorized from %{kind} account.\"},\"paranoid_verification_code\":{\"show\":{\"submit\":\"Submit\",\"submit_verification_code\":\"Submit verification code\",\"verification_code\":\"Verification code\"},\"updated\":\"Verification code accepted\"},\"paranoid_verify\":{\"code_required\":\"Please enter the code our support team provided\"},\"password_expired\":{\"change_required\":\"Your password has expired. Please choose a new password!\",\"show\":{\"change_my_password\":\"Change my password\",\"current_password\":\"Current password\",\"new_password\":\"New password\",\"new_password_confirmation\":\"Confirm new password\",\"renew_your_password\":\"Renew your password\"},\"updated\":\"Your new password is saved.\"},\"passwords\":{\"no_token\":\"You can\\'t access this page without coming from a password reset email. If you do come from a password reset email, please make sure you used the full URL provided.\",\"send_instructions\":\"You will receive an email with instructions about how to reset your password in a few minutes.\",\"send_paranoid_instructions\":\"If your e-mail exists on our database, you will receive a password recovery link on your e-mail\",\"updated\":\"Your password was changed successfully. You are now signed in.\",\"updated_not_active\":\"Your password was changed successfully.\"},\"registrations\":{\"destroyed\":\"Bye! Your account was successfully cancelled. We hope to see you again soon.\",\"signed_up\":\"Welcome! You have signed up successfully.\",\"signed_up_but_inactive\":\"You have signed up successfully. However, we could not sign you in because your account is not yet activated.\",\"signed_up_but_locked\":\"You have signed up successfully. However, we could not sign you in because your account is locked.\",\"signed_up_but_unconfirmed\":\"A message with a confirmation link has been sent to your email address. Please open the link to activate your account.\",\"update_needs_confirmation\":\"You updated your account successfully, but we need to verify your new email address. Please check your email and click on the confirm link to finalize confirming your new email address.\",\"updated\":\"You updated your account successfully.\",\"updated_but_not_signed_in\":\"Your account has been updated successfully, but since your password was changed, you need to sign in again.\"},\"sessions\":{\"already_signed_out\":\"Signed out successfully.\",\"signed_in\":\"Signed in successfully.\",\"signed_out\":\"Signed out successfully.\"},\"unlocks\":{\"send_instructions\":\"You will receive an email with instructions about how to unlock your account in a few minutes.\",\"send_paranoid_instructions\":\"If your account exists, you will receive an email with instructions about how to unlock it in a few minutes.\",\"unlocked\":\"Your account has been unlocked successfully. Please sign in to continue.\"}},\"domain\":\"speciality_chemicals.lumerate.com\",\"download\":\"Download\",\"download_30_days\":\"This link will be available for 30 days after which the file will be removed from our servers.\",\"enumerize\":{\"blocklisted_contact\":{\"provider\":{\"insideview\":\"InsideView\",\"zephyr\":\"Zephyr\"}}},\"errors\":{\"format\":\"%{attribute} %{message}\",\"messages\":{\"accepted\":\"must be accepted\",\"already_confirmed\":\"was already confirmed, please try signing in\",\"blank\":\"can\\'t be blank\",\"confirmation\":\"doesn\\'t match %{attribute}\",\"confirmation_period_expired\":\"needs to be confirmed within %{period}, please request a new one\",\"empty\":\"can\\'t be empty\",\"equal_to\":\"must be equal to %{count}\",\"equal_to_current_password\":\"Sorry, must be different to your current password!\",\"equal_to_email\":\"must be different than the email.\",\"even\":\"must be even\",\"exclusion\":\"is reserved\",\"expired\":\"has expired, please request a new one\",\"greater_than\":\"must be greater than %{count}\",\"greater_than_or_equal_to\":\"must be greater than or equal to %{count}\",\"in\":\"must be in %{count}\",\"inclusion\":\"is not included in the list\",\"invalid\":\"is invalid\",\"less_than\":\"must be less than %{count}\",\"less_than_or_equal_to\":\"must be less than or equal to %{count}\",\"model_invalid\":\"Validation failed: %{errors}\",\"not_a_number\":\"is not a number\",\"not_an_integer\":\"must be an integer\",\"not_found\":\"not found\",\"not_locked\":\"was not locked\",\"not_saved\":{\"one\":\"1 error prohibited this %{resource} from being saved:\",\"other\":\"%{count} errors prohibited this %{resource} from being saved:\"},\"odd\":\"must be odd\",\"other_than\":\"must be other than %{count}\",\"password_complexity\":{\"digit\":{\"one\":\"must contain at least one digit\",\"other\":\"must contain at least %{count} digits\"},\"lower\":{\"one\":\"must contain at least one lower-case letter\",\"other\":\"must contain at least %{count} lower-case letters\"},\"symbol\":{\"one\":\"must contain at least one punctuation mark or symbol\",\"other\":\"must contain at least %{count} punctuation marks or symbols\"},\"upper\":{\"one\":\"must contain at least one upper-case letter\",\"other\":\"must contain at least %{count} upper-case letters\"}},\"password_format\":\"Must contain uppercase AND lowercase letters and at least one number\",\"password_too_long\":\"is too long\",\"present\":\"must be blank\",\"required\":\"must exist\",\"taken\":\"has already been taken\",\"taken_in_past\":\"Sorry, you have used this password before!\",\"too_long\":{\"one\":\"is too long (maximum is 1 character)\",\"other\":\"is too long (maximum is %{count} characters)\"},\"too_short\":{\"one\":\"is too short (minimum is 1 character)\",\"other\":\"is too short (minimum is %{count} characters)\"},\"wrong_length\":{\"one\":\"is the wrong length (should be 1 character)\",\"other\":\"is the wrong length (should be %{count} characters)\"}}},\"flash\":{\"actions\":{\"create\":{\"notice\":\"%{resource_name} was successfully created.\"},\"destroy\":{\"alert\":\"%{resource_name} could not be destroyed.\",\"notice\":\"%{resource_name} was successfully destroyed.\"},\"update\":{\"notice\":\"%{resource_name} was successfully updated.\"}}},\"hello_world\":\"Hello world\",\"help\":{\"articles\":{\"crm_mining\":\"/help/articles/13976-mine-your-companys-salesforce-for-opportunities\",\"finding_contact_info\":\"/help/articles/13987-finding-contact-information\",\"guide_d\":\"/help/guide_d\",\"guide_g\":\"/help/guide_g\",\"guide_h\":\"/help/guide_h\",\"guide_i\":\"/help/guide_i\",\"guide_j\":\"/help/guide_j\",\"list_crud_c\":\"/help/articles/13985-generating-a-list\",\"list_crud_u\":\"/help/articles/18991-adding-and-removing-individual-companies-from-a-list\",\"map_search\":\"/help/articles/13980-map-based-searching\",\"saving_feeds\":\"/help/articles/13986-saving-feeds\"},\"site\":\"https://zymewire.helpsite.com/\"},\"helpers\":{\"select\":{\"prompt\":\"Please select\"},\"submit\":{\"create\":\"Create %{model}\",\"submit\":\"Save %{model}\",\"update\":\"Update %{model}\"}},\"hi\":\"Hi\",\"industry\":\"speciality chemical processor\",\"mailers\":{\"common\":{\"chummy_sign_off\":\"Have a good one.\",\"final_note\":\"P.S.: If you think you received this email accidentally, then something weird could be going on. Hit reply and a member of the %{brand_name} team will investigate.\",\"team_sign_off\":\"- The %{brand_name} Team\"},\"confirmation_instructions_email\":{\"crm\":{\"salesforce\":{\"resource_confirmed\":\"Someone has requested a resend of a confirmation email. You do not need to confirm your email address because your account is configured to use Salesforce to sign in.\",\"resource_unconfirmed\":\"You do not need to confirm your email address because your account is configured to use Salesforce to sign in, please complete the sign up process by clicking the button below to sign in to %{brand_name} via Salesforce.\"}},\"non_crm\":{\"confirm_link\":\"Confirm my account\",\"welcome\":\"Welcome to %{brand_name}. As the final step in the process you\\'ll need to confirm your account by clicking on the link below.\"},\"subject\":\"Confirmation instructions for %{domain}\"},\"flagged_events_mailer\":{\"from\":\"Flagged events - %{brand_name} \\\\u003cflagged_events@mailer.%{domain}\\\\u003e\"},\"mobile_registration_email\":{\"alert_cs_registration_locked\":{\"subject\":\"%{brand_name}: user has had mobile registration locked, too many failed attempts\"},\"dispatch_registration_PIN\":{\"further_instructions\":\"If you are NOT attempting to register for the %{brand_name} Mobile app then please let us know at %{support_email_link} - thank you.\",\"introduction\":\"Here is your mobile app registration PIN:\",\"subject\":\"%{brand_name} Mobile Registration Verification\"},\"too_many_failed_attempts\":{\"introduction\":\"We have received too many failed mobile device registration attempts for your account and we will block any further requests. If you have not attempted to register a mobile device with us in the last hour then please let us know as it is likely someone has tried on your behalf. If you have been trying to register a device please contact %{support_email_link} and we can help unlock your account and get you registered.\",\"subject\":\"%{brand_name}: too many failed registration attempts\"}},\"org_list_download_mail\":{\"dispatch_link\":{\"introduction\":\"We have finished meshing your %{crm_brand_name} data with the companies in your \\\\\"%{list_name}\\\\\" list.\",\"subject\":\"%{brand_name}: your file download of \\'%{list_name}\\' is ready\"},\"failed\":{\"instructions\":\"You could try again in a little while. If you already have and are receiving this email again, please contact us at %{support_email_link}\",\"introduction\":\"We are really sorry, but something went wrong with creating your download of %{crm_brand_name} data for your \\\\\"%{list_name}\\\\\" list.\",\"subject\":\"%{brand_name}: your file download of \\'%{list_name}\\' failed\"}},\"reset_password_instructions_email\":{\"crm\":{\"salesforce\":{\"change_requested\":\"Someone has requested a change to your password. Your account is configured to use Salesforce to sign in.\"}},\"fishy_fine_print\":\"If you did not request a password change, then something weird is going on. Someone may be trying to access your account (unsuccessfully). Please reply to this email and let us know. We will take steps to make sure it stops.\",\"non_crm\":{\"change_password_link\":\"Change my password\",\"change_requested\":\"Someone has requested a change to your password, you can do this via the link below.\"},\"subject\":\"Password reset instructions for %{domain}\"},\"sales_force_mail\":{\"processing_completed\":{\"bullet_points\":[\"Only show events associated with companies in your Salesforce account\",\"Add new contacts and accounts to your Salesforce account without leaving %{brand_name}\",\"Access the \\'Salesforce details\\' panel on company dashboards where you can see open tasks, team interactions, opportunities, and more!\"],\"further_instructions\":\"We\\'re here to help. If you run into any questions or challenges, please contact us at %{support_email_link} and a member of our team would be more than happy to help.\",\"get_the_most\":\"To get the most from the integration, check out the \\'Mine Salesforce for opportunities\\' guide in the Help Center.\",\"guide_button\":\"Take me to the guide\",\"introduction\":\"Good news - your Salesforce account is now integrated with %{brand_name}. Now you’ll be able to:\"}},\"segment_contact\":{\"report_manager\":{\"fail_subject\":\"%{brand_name}: The PDF report generation failed\",\"success_subject\":\"%{brand_name}: Your PDF for %{company_name} is attached\"}},\"sf_token_expiry_email\":{\"further_instructions\":\"If you run into any questions or challenges, please contact us at %{support_email_link} and a member of our team would be more than happy to help.\",\"introduction\":\"Unfortunately the connection established for you between %{brand_name} and your %{crm_brand_name} account has expired. We will not be able to update your lists in %{brand_name} to reflect your %{crm_brand_name} database. To re-establish the connection, you just need to log in to %{brand_name} using your %{crm_brand_name}.\",\"subject\":\"%{brand_name} to %{crm_brand_name} connection has expired\"},\"share_list_mail\":{\"introduction\":\"%{user_name} shared a list with you: \",\"subject\":\"[%{brand_name} - shared list] %{list_name}\"},\"trial_expiry_mail\":{\"seven_days_to_go\":{\"further_instructions\":\"A member of our fabulous Customer Success team will arrange a welcome call with you to understand your goals and priorities, and will then give you a personalized Tour de %{brand_name} so you can easily access the information that is most valuable to you.\",\"instructions\":\"If you\\'d like continued access to the platform with our flexible month-to-month subscription, please ensure you contact %{support_email_link} ahead of: %{deadline}\",\"introduction\":\"Time flies when you\\'re uncovering new business opportunities! Your %{brand_name} trial is coming to an end next week.\",\"sign_off\":\"We look forward to helping you reach your sales goals!\",\"subject\":\"Just a heads up that your %{brand_name} trial is ending in seven days\"},\"seven_days_to_go_warning_for_cs\":{\"introduction\":\"%{user_name} shared a list with you: \",\"subject\":\"[%{brand_name} - shared list] %{list_name}\"}},\"unlock_instructions_email\":{\"crm\":{\"salesforce\":{\"change_requested\":\"You are being sent this email either because of one too many unsuccessful non-Salesforce log-in attempts or someone has requested an unlock email. %{brand_name} has not locked your account because your account is configured to use Salesforce to sign in.\",\"password_forgotten\":\"If you have forgotten your Salesforce password or think your account has been locked by Salesforce, please follow the instructions provided on the Salesforce sign in page.\"}},\"fishy_fine_print\":\"If you have not been (unsuccessfully) trying to log in to your account, then something weird is going on. Someone may be trying to access your account (unsuccessfully). Please reply to this email and let us know. We will take steps to make sure it stops.\",\"non_crm\":{\"change_requested\":\"For security reasons we have locked your account because of too many log-in attempts. To unlock your account, click the link below.\",\"unlock_account_link\":\"Unlock my account\"},\"subject\":\"Unlock instructions for %{domain}\"}},\"mobile_website\":{\"cta\":\"\",\"cta_link\":\"\",\"header\":\"Desktop Access Only\",\"message\":\"Head to your desktop to sign into the Speciality Chemicals application.\",\"prompt\":\"\"},\"mongoid\":{\"errors\":{\"messages\":{\"ambiguous_relationship\":{\"message\":\"Ambiguous associations %{candidates} defined on %{klass}.\",\"resolution\":\"On the %{name} association on %{inverse} you must add an :inverse_of option to specify the exact association on %{klass} that is the opposite of %{name}.\",\"summary\":\"When Mongoid attempts to set an inverse document of an association in memory, it needs to know which association it belongs to. When setting %{name}, Mongoid looked on the class %{inverse} for a matching association, but multiples were found that could potentially match: %{candidates}.\"},\"blank_in_locale\":\"can\\'t be blank in %{location}\",\"callbacks\":{\"message\":\"Calling %{method} on %{klass} resulted in a false return from a callback.\",\"resolution\":\"Double check all before callbacks to make sure they are not unintentionally returning false.\",\"summary\":\"If a before callback returns false when using Document.create!, Document#save!, or Document#update_attributes! this error will get raised since the document did not actually get saved.\"},\"calling_document_find_with_nil_is_invalid\":{\"message\":\"Calling Document.find with nil is invalid.\",\"resolution\":\"Most likely this is caused by passing parameters directly through to the find, and the parameter either is not present or the key from which it is accessed is incorrect.\",\"summary\":\"Document.find expects the parameters to be 1 or more ids, and will return a single document if 1 id is provided, otherwise an array of documents if multiple ids are provided.\"},\"create_collection_failure\":{\"message\":\"Cannot create collection %{collection_name} with options %{collection_options}. The following error was raised: %{error}.\",\"resolution\":\"Double check that collection options for the collection %{collection_name} are valid. Consult with Ruby driver documentation and MongoDB documentation if the desired options are supported by your version of the server.\",\"summary\":\"The server rejected createCollection command with given collection options. This may happen when some of the options are invalid, or not supported by your version of the server.\"},\"criteria_argument_required\":{\"message\":\"Calling Criteria methods with nil arguments is not allowed.\",\"resolution\":\"Invoke Criteria methods with non-nil arguments or omit the respective invocations.\",\"summary\":\"Arguments to Criteria methods cannot be nil, and most Criteria methods require at least one argument. Only logical operations (and, or, nor and not), `all\\' and `where\\' can be called without arguments. The method that was called with nil argument was: %{query_method}.\"},\"delete_restriction\":{\"message\":\"Cannot destroy %{document} because of dependent \\'%{relation}\\'.\",\"resolution\":\"Don\\'t attempt to delete the parent %{document} when it has children, or change the dependent option on the association.\",\"summary\":\"When defining \\'%{relation}\\' with a :dependent =\\\\u003e :restrict_with_error, Mongoid will raise an error when attempting to destroy the %{document} when the child \\'%{relation}\\' still has documents in it.\"},\"destroy_restrict_with_error_dependencies_exist\":\"is not empty and prevents the document from being destroyed\",\"document_not_destroyed\":{\"message\":\"%{klass} with id %{id} was not destroyed.\",\"resolution\":\"Check the before/after destroy callbacks to ensure that the return values are truthy for the chain to continue.\",\"summary\":\"When calling %{klass}#destroy! and a callback halts the destroy callback chain by returning a false value, the deletion will not actually occur.\"},\"document_not_found\":{\"message\":\"Document(s) not found for class %{klass} with id(s) %{missing}.\",\"resolution\":\"Search for an id that is in the database or set the Mongoid.raise_not_found_error configuration option to false, which will cause nil to be returned instead of raising this error when searching for a single id, or only the matched documents when searching for multiples.\",\"summary\":\"When calling %{klass}.find with an id or array of ids, each parameter must match a document in the database or this error will be raised. The search was for the id(s): %{searched} (%{total} total) and the following ids were not found: %{missing}.\"},\"document_with_attributes_not_found\":{\"message\":\"Document not found for class %{klass} with attributes %{attributes}.\",\"resolution\":\"Search for attributes that are in the database or set the Mongoid.raise_not_found_error configuration option to false, which will cause nil to be returned instead of raising this error.\",\"summary\":\"When calling %{klass}.find_by with a hash of attributes, all attributes provided must match a document in the database or this error will be raised.\"},\"document_with_shard_key_not_found\":{\"message\":\"Document not found for class %{klass} with id %{missing} and shard key %{shard_key}.\",\"resolution\":\"Search for an id/shard key that is in the database or set the Mongoid.raise_not_found_error configuration option to false, which will cause nil to be returned instead of raising this error.\",\"summary\":\"When calling %{klass}.find with an id and a shard key, each parameter must match a document in the database or this error will be raised. The search was for the id: %{missing} with shard_key: %{shard_key} and it was not found.\"},\"drop_collection_failure\":{\"message\":\"Cannot drop collection %{collection_name}.\",\"resolution\":\"Try to drop the collection manually using Ruby driver or mongo shell.\",\"summary\":\"Mongoid tried to drop collection %{collection_name}, but the collection still exists in the database.\"},\"empty_config_file\":{\"message\":\"Empty configuration file: %{path}.\",\"resolution\":\"Ensure your configuration file contains the correct contents. Refer to: https://www.mongodb.com/docs/mongoid/current/reference/configuration/\",\"summary\":\"Your mongoid.yml configuration file appears to be empty.\"},\"immutable_attribute\":{\"message\":\"Attempted to change the immutable attribute \\'%{name}\\' with the value: %{value}.\",\"resolution\":\"Do not attempt to update the value of \\'%{name}\\' after the document is persisted.\",\"summary\":\"Immutable attributes can only have values set when the document is a new record.\"},\"in_memory_collation_not_supported\":{\"message\":\"A collation option cannot be applied when querying documents in-memory.\",\"resolution\":\"Remove the collation option from the query.\",\"summary\":\"The query being run against documents in memory has a collation option set. A collation option is only supported if the query is executed on a MongoDB server with version \\\\u003e= 3.4.\"},\"invalid_async_query_executor\":{\"message\":\"Invalid async_query_executor option: %{executor}.\",\"resolution\":\"Pick an allowed option or fix the typo. If you were expecting the option to be there, please consult the following page with respect to Mongoid\\'s configuration:\\\\n\\\\n   https://www.mongodb.com/docs/mongoid/current/reference/configuration/#mongoid-configuration-options\",\"summary\":\"A invalid async query executor was specified. The valid options are: %{options}.\"},\"invalid_collection\":{\"message\":\"Access to the collection for %{klass} is not allowed.\",\"resolution\":\"For access to the collection that the embedded document is in, use %{klass}#_root.collection, or do not attempt to persist an embedded document without a parent set.\",\"summary\":\"%{klass}.collection was called, and %{klass} is an embedded document - it resides within the collection of the root document of the hierarchy.\"},\"invalid_config_file\":{\"message\":\"Invalid configuration file: %{path}.\",\"resolution\":\"Ensure your configuration file contains the correct contents. Refer to: https://www.mongodb.com/docs/mongoid/current/reference/configuration/\",\"summary\":\"Your mongoid.yml configuration file does not contain the correct file structure.\"},\"invalid_config_option\":{\"message\":\"Invalid configuration option: %{name}.\",\"resolution\":\"Remove the invalid option or fix the typo. If you were expecting the option to be there, please consult the following page with respect to Mongoid\\'s configuration:\\\\n\\\\n   http://mongoid.org/en/mongoid/docs/installation.html\",\"summary\":\"A invalid configuration option was provided in your mongoid.yml, or a typo is potentially present. The valid configuration options are: %{options}.\"},\"invalid_dependent_strategy\":{\"message\":\"Invalid dependent strategy: %{invalid_strategy}.\",\"resolution\":\"Change the dependent strategy to one of the valid types.\",\"summary\":\"An invalid dependent strategy was defined for the association: %{association}. The valid strategies are: %{valid_strategies}.\"},\"invalid_discriminator_key_target\":{\"message\":\"Setting the discriminator key on a child class is not allowed.\",\"resolution\":\"Try setting the discriminator key on %{superclass} or one of %{class_name}\\'s ancestors.\",\"summary\":\"The discriminator key on the class %{class_name} was attempted to be changed. Changing the discriminator key on a child class is not allowed.\"},\"invalid_dot_dollar_assignment\":{\"message\":\"Cannot set the %{attr} attribute on the %{klass} class.\",\"resolution\":\"In order to set fields that start with a dollar sign ($) or contain a dot/period (.), the aggregation pipeline can be used. MongoDB provides specific operators for working with these fields. Refer to the MongoDB documentation here: https://www.mongodb.com/docs/manual/core/dot-dollar-considerations/\",\"summary\":\"Calling the setters for fields that start with a dollar sign ($) or contain a dot/period (.) is prohibited. See the Mongoid documentation on Field Names with Dots/Periods (.) and Dollar Signs ($) for more information.\"},\"invalid_elem_match_operator\":{\"message\":\"Invalid $elemMatch operator \\'%{operator}\\'.\",\"resolution\":\"Valid field operators are: %{valid_operators}. Ensure you are using one of these operators.\",\"summary\":\"You misspelled an operator or are using an operator that Mongoid does not support.\"},\"invalid_estimated_count_criteria\":{\"message\":\"Invalid criteria for estimated_count.\",\"resolution\":\"Try calling estimated_count directly on the class: %{class_name}.estimated_count.\\\\n\\\\n  If the class defines a default scope, use unscoped: %{class_name}.unscoped.estimated_count.\",\"summary\":\"Estimated count is strictly a collection-level operation and cannot be called on a filtered criteria.\"},\"invalid_expression_operator\":{\"message\":\"Invalid expression operator \\'%{operator}\\'.\",\"resolution\":\"Valid expression operators are: %{valid_operators}. Ensure you are using one of these operators.\",\"summary\":\"You misspelled an operator, are using an operator that Mongoid does not support, or are trying to use a field-level operator on expression level.\"},\"invalid_field\":{\"message\":\"Defining a field named \\'%{field}\\' is not allowed.\",\"resolution\":\"Use Mongoid.destructive_fields to see what names are not allowed, and don\\'t use these names. These include names that also conflict with core Ruby methods on Object, Module, Enumerable, or included gems that inject methods into these or Mongoid internals.\",\"summary\":\"Defining this field would override the method \\'%{name}\\', which would cause issues with expectations around the original method and cause extremely hard to debug issues. The original method was defined in:\\\\n   Object: %{origin}\\\\n   File: %{file}\\\\n   Line: %{line}\"},\"invalid_field_operator\":{\"message\":\"Invalid field operator \\'%{operator}\\'.\",\"resolution\":\"Valid field operators are: %{valid_operators}. Ensure you are using one of these operators.\",\"summary\":\"You misspelled an operator, are using an operator that Mongoid does not support, or are trying to use an expression-level operator on field level.\"},\"invalid_field_option\":{\"message\":\"Invalid option :%{option} provided for field :%{name}.\",\"resolution\":\"When defining the field :%{name} on \\'%{klass}\\', please provide valid options for the field. These are currently: %{valid}. If you meant to define a custom field option, please do so first as follows:\\\\n\\\\n   Mongoid::Fields.option :%{option} do |model, field, value|\\\\n     # Your logic here...\\\\n   end\\\\n   class %{klass}\\\\n     include Mongoid::Document\\\\n     field :%{name}, %{option}: true\\\\n   end\\\\n\\\\n Refer to: https://www.mongodb.com/docs/mongoid/current/reference/fields/#custom-field-options\",\"summary\":\"Mongoid requires that you only provide valid options on each field definition in order to prevent unexpected behavior later on.\"},\"invalid_field_type\":{\"message\":\"Invalid field type %{type_inspection} for field \\'%{field}\\' on model \\'%{klass}\\'.\",\"resolution\":\"Please provide a valid type value for the field. Refer to: https://www.mongodb.com/docs/mongoid/current/reference/fields/#using-symbols-or-strings-instead-of-classes\",\"summary\":\"Model \\'%{klass}\\' defines a field \\'%{field}\\' with an unknown type value %{type_inspection}.\"},\"invalid_global_executor_concurrency\":{\"message\":\"Invalid global_executor_concurrency option.\",\"resolution\":\"Set global_executor_concurrency option to :global_thread_pool or remove global_executor_concurrency option.\",\"summary\":\"You set global_executor_concurrency while async_query_executor option is not set to :global_thread_pool. The global_executor_concurrency is allowed only for the global thread pool executor.\"},\"invalid_includes\":{\"message\":\"Invalid includes directive: %{klass}.includes(%{args})\",\"resolution\":\"Ensure that each parameter passed to %{klass}.includes is a valid name of an association on the %{klass} model. These are: %{relations}.\",\"summary\":\"Eager loading in Mongoid only supports providing arguments to %{klass}.includes that are the names of associations on the %{klass}.\"},\"invalid_index\":{\"message\":\"Invalid index specification on %{klass}: %{spec}, %{options}\",\"resolution\":\"Ensure that the index conforms to the correct syntax and has the correct options.\\\\n\\\\n Valid options are:\\\\n   background: true|false\\\\n   database: \\'database_name\\'\\\\n   name: \\'index_name\\'\\\\n   sparse: true|false\\\\n   unique: true|false\\\\n   min: 1\\\\n   max: 1\\\\n   bits: 26\\\\n   key: 26\\\\n   bucket_size : 1\\\\n   sphere_version : 1\\\\n   text_version : 1\\\\n   version : 1\\\\n   weights: { content: 1, title: 2 }\\\\n   expire_after_seconds: number_of_seconds\\\\n   partial_filter_expression\\\\n   storage_engine\\\\n   language_override\\\\n   default_language\\\\n   collation\\\\n   wildcard_projection: { \\'path.to.field.a\\': 1, \\'path.to.field.b\\': 0 }\\\\n Valid types are: 1, -1, \\'2d\\', \\'2dsphere\\', \\'geoHaystack (deprecated)\\', \\'text\\', \\'hashed\\'\\\\n\\\\n Example:\\\\n   class Band\\\\n     include Mongoid::Document\\\\n     index({ name: 1, label: -1 }, { sparse: true })\\\\n     index({ location: \\'2d\\' }, { background: true })\\\\n   end\\\\n\\\\n\",\"summary\":\"Indexes in Mongoid are defined as a hash of field name and direction/2d pairs, with a hash for any additional options.\"},\"invalid_options\":{\"message\":\"Invalid option :%{invalid} provided to association :%{name}.\",\"resolution\":\"Valid options are: %{valid}, make sure these are the ones you are using.\",\"summary\":\"Mongoid checks the options that are passed to the association macros to ensure that no ill side effects occur by letting something slip by.\"},\"invalid_path\":{\"message\":\"Having a root path assigned for %{klass} is invalid.\",\"resolution\":\"Most likely your embedded model, %{klass} is also referenced via a has_many from a root document in another collection. Double check the association definitions and fix any instances where embedded documents are improperly referenced from other collections.\",\"summary\":\"Mongoid has two different path objects for determining the location of a document in the database, Root and Embedded. This error is raised when an embedded document somehow gets a root path assigned.\"},\"invalid_persistence_option\":{\"message\":\"Invalid persistence option :%{invalid}.\",\"resolution\":\"Valid options are: %{valid}, make sure these are the ones you are using.\",\"summary\":\"The options used to change the persistence context must be one of the valid options for a mongo client, or a collection name.\"},\"invalid_relation\":{\"message\":\"Defining an association named \\'%{name}\\' is not allowed.\",\"resolution\":\"Use Mongoid.destructive_fields to see what names are not allowed, and don\\'t use these names. These include names that also conflict with core Ruby methods on Object, Module, Enumerable, or included gems that inject methods into these or Mongoid internals.\",\"summary\":\"Defining this association would override the method \\'%{name}\\', which would cause issues with expectations around the original method and cause extremely hard to debug issues. The original method was defined in:\\\\n   Object: %{origin}\\\\n   File: %{file}\\\\n   Line: %{line}\"},\"invalid_relation_option\":{\"message\":\"Invalid association option :%{option} for association \\'%{name}\\' on class %{klass}.\",\"resolution\":\"Valid options are: %{valid_options}, make sure you use only those.\",\"summary\":\"An invalid option was provided for an association.\"},\"invalid_scope\":{\"message\":\"Defining a scope of value %{value} on %{klass} is not allowed.\",\"resolution\":\"Change the scope to be a proc wrapped criteria.\\\\n\\\\n Example:\\\\n   class Band\\\\n     include Mongoid::Document\\\\n     scope :inactive, -\\\\u003e{ where(active: false) }\\\\n   end\\\\n\\\\n\",\"summary\":\"Scopes in Mongoid must be procs that wrap criteria objects.\"},\"invalid_session_nesting\":{\"message\":\"A session was started while another session was being used.\",\"resolution\":\"Only use one session at a time; sessions cannot be nested.\",\"summary\":\"Sessions cannot be nested. Only one session can be used in a thread at once.\"},\"invalid_session_use\":{\"message\":\"A session was attempted to be used with a model whose client cannot use that session.\",\"resolution\":\"Only execute operations on the model class or instances of the model through which the session was created. Otherwise, ensure that all models on which operations are executed in the session block share the same driver client. For example, a model may have a different client specified in its \\'store_in\\' options.\\\\n\\\\n\",\"summary\":\"Sessions are started via driver clients (Model#mongo_client) and, in most cases, driver clients are shared across models. When different models have their own clients, a session cannot be obtained via one model and used for operations on another model.\"},\"invalid_set_polymorphic_relation\":{\"message\":\"The %{name} attribute can\\'t be set to an instance of %{other_klass} as %{other_klass} has multiple associations referencing %{klass} as %{name}.\",\"resolution\":\"Set the values from the parent, or redefine the association with only a single definition in the parent.\",\"summary\":\"If the parent class of a polymorphic association has multiple definitions for the same association, the values must be set from the parent side and not the child side since Mongoid cannot determine from the child side which association to go in.\"},\"invalid_storage_options\":{\"message\":\"Invalid options passed to %{klass}.store_in: %{options}.\",\"resolution\":\"Change the options passed to store_in to match the documented API, and ensure all keys in the options hash are symbols.\\\\n\\\\n Example:\\\\n   class Band\\\\n     include Mongoid::Document\\\\n     store_in collection: \\'artists\\', database: \\'music\\'\\\\n   end\\\\n\\\\n\",\"summary\":\"The :store_in macro takes only a hash of parameters with the keys :database, :collection, :collection_options, or :client.\"},\"invalid_time\":{\"message\":\"\\'%{value}\\' is not a valid Time.\",\"resolution\":\"Make sure to pass parsable values to the field setter for Date, DateTime, and Time objects. When this is a String it needs to be valid for Time.parse. Other objects must be valid to pass to Time.local.\",\"summary\":\"Mongoid tries to serialize the values for Date, DateTime, and Time into proper UTC times to store in the database. The provided value could not be parsed.\"},\"inverse_not_found\":{\"message\":\"When adding a(n) %{klass} to %{base}#%{name}, Mongoid could not determine the inverse foreign key to set. The attempted key was \\'%{inverse}\\'.\",\"resolution\":\"If an inverse is not required, like a belongs_to or has_and_belongs_to_many, ensure that :inverse_of =\\\\u003e nil is set on the association. If the inverse is needed, most likely the inverse cannot be figured out from the names of the associations and you will need to explicitly tell Mongoid on the association what the inverse is.\\\\n\\\\n Example:\\\\n   class Car\\\\n     include Mongoid::Document\\\\n     has_one :engine, class_name: \\\\\"Motor\\\\\", inverse_of: :machine\\\\n   end\\\\n\\\\n   class Motor\\\\n     include Mongoid::Document\\\\n     belongs_to :machine, class_name: \\\\\"Car\\\\\", inverse_of: :engine\\\\n   end\",\"summary\":\"When adding a document to an association, Mongoid attempts to link the newly added document to the base of the association in memory, as well as set the foreign key to link them on the database side. In this case Mongoid could not determine what the inverse foreign key was.\"},\"message_title\":\"message\",\"mixed_client_configuration\":{\"message\":\"Both uri and standard configuration options defined for client: \\'%{name}\\'.\",\"resolution\":\"Provide either only a uri as configuration or only standard options.\",\"summary\":\"Instead of simply giving uri or standard options a preference order, Mongoid assumes that you have made a mistake in your configuration and requires that you provide one or the other, but not both. The options that were provided were: %{config}.\"},\"mixed_relations\":{\"message\":\"Referencing a(n) %{embedded} document from the %{root} document via a non-embedded association is not allowed since the %{embedded} is embedded.\",\"resolution\":\"Consider not embedding %{embedded}, or do the key storage and access in a custom manner in the application code.\",\"summary\":\"In order to properly access a(n) %{embedded} from %{root} the reference would need to go through the root document of %{embedded}. In a simple case this would require Mongoid to store an extra foreign key for the root, in more complex cases where %{embedded} is multiple levels deep a key would need to be stored for each parent up the hierarchy.\"},\"nested_attributes_metadata_not_found\":{\"message\":\"Could not find metadata for association \\'%{name}\\' on model: %{klass}.\",\"resolution\":\"Make sure that there is an association defined named \\'%{name}\\' on %{klass} or that the association definition comes before the accepts_nested_attributes_for macro in the model - order matters so that Mongoid has access to the metadata.\\\\n\\\\n Example:\\\\n   class Band\\\\n     include Mongoid::Document\\\\n     has_many :albums\\\\n     accepts_nested_attributes_for :albums\\\\n   end\\\\n\\\\n\",\"summary\":\"When defining nested attributes for an association, Mongoid needs to access the metadata for the association \\'%{name}\\' in order if add autosave functionality to it, if applicable. Either no association named \\'%{name}\\' could be found, or the association had not been defined yet.\"},\"no_client_config\":{\"message\":\"No configuration could be found for a client named \\'%{name}\\'.\",\"resolution\":\"Double check your mongoid.yml to make sure under the clients key that a configuration exists for \\'%{name}\\'. If you have set the configuration programmatically, ensure that \\'%{name}\\' exists in the configuration hash.\",\"summary\":\"When attempting to create the new client, Mongoid could not find a client configuration for the name: \\'%{name}\\'. This is necessary in order to know the host, port, and options needed to connect.\"},\"no_client_database\":{\"message\":\"No database provided for client configuration: :%{name}.\",\"resolution\":\"If configuring via a mongoid.yml, ensure that within your :%{name} section a :database value for the client\\'s default database is defined.\\\\n\\\\n Example:\\\\n   development:\\\\n     clients:\\\\n       %{name}:\\\\n         database: my_app_db\\\\n         hosts:\\\\n           - localhost:27017\\\\n\\\\n\",\"summary\":\"Each client configuration must provide a database so Mongoid knows where the default database to persist to. What was provided was: %{config}.\"},\"no_client_hosts\":{\"message\":\"No hosts provided for client configuration: :%{name}.\",\"resolution\":\"If configuring via a mongoid.yml, ensure that within your :%{name} section a :hosts value for the client hosts is defined.\\\\n\\\\n Example:\\\\n   development:\\\\n     clients:\\\\n       %{name}:\\\\n         database: my_app_db\\\\n         hosts:\\\\n           - localhost:27017\\\\n\\\\n\",\"summary\":\"Each client configuration must provide hosts so Mongoid knows where the database server is located. What was provided was: %{config}.\"},\"no_clients_config\":{\"message\":\"No clients configuration provided.\",\"resolution\":\"Double check your mongoid.yml to make sure that you have a top-level clients key with at least 1 default client configuration for it. You can regenerate a new mongoid.yml for assistance via `rails g mongoid:config`.\\\\n\\\\n Example:\\\\n   development:\\\\n     clients:\\\\n       default:\\\\n         database: mongoid_dev\\\\n         hosts:\\\\n           - localhost:27017\\\\n\\\\n\",\"summary\":\"Mongoid\\'s configuration requires that you provide details about each client that can be connected to, and requires in the clients config at least 1 default client to exist.\"},\"no_default_client\":{\"message\":\"No default client configuration is defined.\",\"resolution\":\"If configuring via a mongoid.yml, ensure that within your :clients section a :default client is defined.\\\\n\\\\n Example:\\\\n   development:\\\\n     clients:\\\\n       default:\\\\n         hosts:\\\\n           - localhost:27017\\\\n\\\\n\",\"summary\":\"The configuration provided settings for: %{keys}, but Mongoid requires a :default to be defined at minimum.\"},\"no_documents_found\":{\"message\":\"Could not find a document of class %{klass}.\",\"resolution\":\"Create a document of class %{klass} or use a finder method that does not raise an exception when no documents are found.\",\"summary\":\"Mongoid attempted to find a document of the class %{klass} but none exist.\"},\"no_environment\":{\"message\":\"Could not load the configuration since no environment was defined.\",\"resolution\":\"Please ensure an environment is set in one of the listed locations. The environment must be explicitly set.\",\"summary\":\"Mongoid could not determine the environment to use because it was not specified in any of the following locations: Rails.env, Sinatra::Base.environment, ENV[\\\\\"RACK_ENV\\\\\"], ENV[\\\\\"MONGOID_ENV\\\\\"]. Without knowing the environment, Mongoid cannot load its configuration.\"},\"no_map_reduce_output\":{\"message\":\"No output location was specified for the map/reduce operation.\",\"resolution\":\"Provide the location that the output of the operation is to go by chaining an #out call to the map/reduce.\\\\n\\\\n Example:\\\\n   Band.map_reduce(map, reduce).out(inline: 1)\\\\n\\\\n Valid options for the out function are:\\\\n   inline: 1\\\\n   merge: \\'collection-name\\'\\\\n   replace: \\'collection-name\\'\\\\n   reduce: \\'collection-name\\'\\\\n\\\\n\",\"summary\":\"When executing a map/reduce, you must provide the output location of the results. The attempted command was: %{command}.\"},\"no_metadata\":{\"message\":\"Metadata not found for document of type %{klass}.\",\"resolution\":\"Ensure that your associations on the %{klass} model are all properly defined, and that the inverse associations are also properly defined. Embedded associations must have both the parent (embeds_one/embeds_many) and the inverse (embedded_in) present in order to work properly.\",\"summary\":\"Mongoid sets the metadata of an association on the document when it is either loaded from within the association, or added to one. The presence of the metadata is required in order to provide various functionality around associations. Most likely you are getting this error because the document is embedded and was attempted to be persisted without being associated with a parent, or the association was not properly defined.\"},\"no_parent\":{\"message\":\"Cannot persist embedded document %{klass} without a parent document.\",\"resolution\":\"Ensure that you\\'ve set the parent association if instantiating the embedded document directly, or always create new embedded documents via the parent association.\",\"summary\":\"If the document is embedded, in order to be persisted it must always have a reference to its parent document. This is most likely caused by either calling %{klass}.create or %{klass}.create! without setting the parent document as an attribute.\"},\"readonly_attribute\":{\"message\":\"Attempted to set the readonly attribute \\'%{name}\\' with the value: %{value}.\",\"resolution\":\"Don\\'t define \\'%{name}\\' as readonly, or do not attempt to update its value after the document is persisted.\",\"summary\":\"Attributes flagged as readonly via Model.attr_readonly can only have values set when the document is a new record.\"},\"readonly_document\":{\"message\":\"Attempted to persist a readonly document of class \\'%{klass}\\'.\",\"resolution\":\"Don\\'t attempt to persist documents that are flagged as readonly.\",\"summary\":\"Documents that are marked readonly cannot be persisted.\"},\"resolution_title\":\"resolution\",\"scope_overwrite\":{\"message\":\"Cannot create scope :%{scope_name}, because of existing method %{model_name}.%{scope_name}.\",\"resolution\":\"Change the name of the scope so it does not conflict with the already defined method %{model_name}, or set the configuration option Mongoid.scope_overwrite_exception to false, which is its default. In this case a warning will be logged.\",\"summary\":\"When defining a scope that conflicts with a method that already exists on the model, this error will get raised if Mongoid.scope_overwrite_exception is set to true.\"},\"sessions_not_supported\":{\"message\":\"Sessions are not supported by the connected server(s).\",\"resolution\":\"Verify that all servers in your deployment are at least version 3.6 or don\\'t attempt to use sessions with older server versions.\",\"summary\":\"A session was attempted to be used with a MongoDB server version that doesn\\'t support sessions. Sessions are supported in MongoDB server versions 3.6 and higher.\"},\"summary_title\":\"summary\",\"too_many_nested_attribute_records\":{\"message\":\"Accepting nested attributes for %{association} is limited to %{limit} documents.\",\"resolution\":\"The limit is set as an option to the macro, for example: accepts_nested_attributes_for :%{association}, limit: %{limit}. Consider raising this limit or making sure no more are sent than the set value.\",\"summary\":\"More documents were sent to be processed than the allowed limit.\"},\"unknown_attribute\":{\"message\":\"Attempted to set a value for \\'%{name}\\' which is not allowed on the model %{klass}.\",\"resolution\":\"Define the field \\'%{name}\\' in %{klass}, or include Mongoid::Attributes::Dynamic in %{klass} if you intend to store values in fields that are not explicitly defined.\",\"summary\":\"%{klass}#%{name}= was called but there is no \\'%{name}\\' field defined in the model, and Mongoid::Attributes::Dynamic is not included. This error is also raised instead of NoMethodError if the unknown attribute is passed to any method that accepts an attributes hash, such as #attributes=.\"},\"unknown_model\":{\"message\":\"Attempted to instantiate an object of the unknown model \\'%{klass}\\'.\",\"resolution\":\"The _type field is a reserved one used by Mongoid to determine the class for instantiating an object. Please don\\'t save data in this field or ensure that any values in this field correspond to valid models.\",\"summary\":\"A document with the value \\'%{value}\\' at the key \\'_type\\' was used to instantiate a model object but Mongoid cannot find this Class.\"},\"unsaved_document\":{\"message\":\"Attempted to save %{document} before the parent %{base}.\",\"resolution\":\"Make sure to only use create or create! when the parent document %{base} is persisted.\",\"summary\":\"You cannot call create or create! through the association (%{document}) whose parent (%{base}) is not already saved. This would cause the database to be out of sync since the child could potentially reference a nonexistent parent.\"},\"unsupported_javascript\":{\"message\":\"Executing Javascript $where selector on an embedded criteria is not supported.\",\"resolution\":\"Please provide a standard hash to #where when the criteria is for an embedded association.\",\"summary\":\"Mongoid only supports providing a hash of arguments to #where criterion on embedded documents. Since %{klass} is embedded, the expression %{javascript} is not allowed.\"},\"validations\":{\"message\":\"Validation of %{document} failed.\",\"resolution\":\"Try persisting the document with valid data or remove the validations.\",\"summary\":\"The following errors were found: %{errors}\"}}}},\"number\":{\"currency\":{\"format\":{\"delimiter\":\",\",\"format\":\"%u%n\",\"negative_format\":\"-%u%n\",\"precision\":2,\"separator\":\".\",\"significant\":false,\"strip_insignificant_zeros\":false,\"unit\":\"$\"}},\"format\":{\"delimiter\":\",\",\"precision\":3,\"round_mode\":\"default\",\"separator\":\".\",\"significant\":false,\"strip_insignificant_zeros\":false},\"human\":{\"decimal_units\":{\"format\":\"%n %u\",\"units\":{\"billion\":\"Billion\",\"million\":\"Million\",\"quadrillion\":\"Quadrillion\",\"thousand\":\"Thousand\",\"trillion\":\"Trillion\",\"unit\":\"\"}},\"format\":{\"delimiter\":\"\",\"precision\":3,\"significant\":true,\"strip_insignificant_zeros\":true},\"storage_units\":{\"format\":\"%n %u\",\"units\":{\"byte\":{\"one\":\"Byte\",\"other\":\"Bytes\"},\"eb\":\"EB\",\"gb\":\"GB\",\"kb\":\"KB\",\"mb\":\"MB\",\"pb\":\"PB\",\"tb\":\"TB\",\"zb\":\"ZB\"}}},\"nth\":{},\"percentage\":{\"format\":{\"delimiter\":\"\",\"format\":\"%n%\"}},\"precision\":{\"format\":{\"delimiter\":\"\"}}},\"pivot_list_column_value\":{\"non_sponsor_org\":\"non-processor\"},\"pivot_list_download\":{\"id\":\"ZW_ID\"},\"simple_form\":{\"error_notification\":{\"default_message\":\"Please review the problems below:\"},\"no\":\"No\",\"required\":{\"mark\":\"*\",\"text\":\"required\"},\"yes\":\"Yes\"},\"support\":{\"array\":{\"last_word_connector\":\", and \",\"two_words_connector\":\" and \",\"words_connector\":\", \"}},\"terminology\":{\"all_orgs_list_category\":\"Companies\",\"companies_in_your_sf_label\":\"Companies in your Salesforce\",\"company_based_in\":\"Processor company based in\",\"company_location\":\"Processor Company Location\",\"neglected_target_label\":\"Neglected processors\",\"sponsor\":\"Chemical Processor\",\"sponsor_orgs_list_category\":\"Chemical Processors\",\"target_organization_title\":\"Chemical processor\"},\"time\":{\"am\":\"am\",\"formats\":{\"default\":\"%a, %d %b %Y %H:%M:%S %z\",\"long\":\"%B %d, %Y %H:%M\",\"short\":\"%d %b %H:%M\"},\"pm\":\"pm\"},\"users\":{\"confirmations\":{\"new\":{\"legend\":\"Resend your %{brand_name} confirmation instructions\",\"message\":\"We need to confirm your email address to complete the sign up process. Supply your email address, below, and we will send you instructions on how to confirm your address.\",\"submit_button\":\"Send Confirmation Instructions\",\"title\":\"Resend confirmation instructions | %{brand_name}\"},\"show\":{\"legend\":\"Check your inbox for a confirmation email\",\"message\":\"If your e-mail exists in our database we have sent you a message with instructions. Check your inbox (or spam folder) for a message from \\'%{default_from_email}\\' containing the confirmation link.\",\"title\":\"Awaiting confirmation | %{brand_name}\"}},\"passwords\":{\"new\":{\"failures\":\"Note: If you make more than 5 sequential failed attempts to sign in with your %{brand_name} password, your account will be (temporarily) locked. Check your inbox for instruction on how to unlock your account, or we can\",\"legend\":\"Reset your %{brand_name} password\",\"message\":\"Supply your email address, below, and we will send you instructions on how to reset your password.\",\"resend_link\":\"resend a new set of unlock instructions\",\"submit_button\":\"Send Reset Instructions\",\"title\":\"Reset password | %{brand_name}\"},\"show\":{\"didnt_receive_email\":\"Didn\\'t receive the email?\",\"legend\":\"Password reset instructions sent\",\"message\":\"If your e-mail exists in our database we have sent you a message with password reset instructions. Check your inbox (or spam folder) for a message from \\'%{default_from_email}\\'.\",\"resend_link\":\"you can request another one here\",\"title\":\"Awaiting reset | %{brand_name}\"}}},\"will_paginate\":{\"container_aria_label\":\"Pagination\",\"next_label\":\"Next \\\\u0026#8594;\",\"page_aria_label\":\"Page %{page}\",\"page_entries_info\":{\"multi_page\":\"Displaying %{model} %{from} - %{to} of %{count} in total\",\"multi_page_html\":\"Displaying %{model} \\\\u003cb\\\\u003e%{from}\\\\u0026nbsp;-\\\\u0026nbsp;%{to}\\\\u003c/b\\\\u003e of \\\\u003cb\\\\u003e%{count}\\\\u003c/b\\\\u003e in total\",\"single_page\":{\"one\":\"Displaying 1 %{model}\",\"other\":\"Displaying all %{count} %{model}\",\"zero\":\"No %{model} found\"},\"single_page_html\":{\"one\":\"Displaying \\\\u003cb\\\\u003e1\\\\u003c/b\\\\u003e %{model}\",\"other\":\"Displaying \\\\u003cb\\\\u003eall\\\\u0026nbsp;%{count}\\\\u003c/b\\\\u003e %{model}\",\"zero\":\"No %{model} found\"}},\"page_gap\":\"\\\\u0026hellip;\",\"previous_label\":\"\\\\u0026#8592; Previous\"},\"x_mailer_header\":\"clicks.zymewire.com\"}'));\nI18n.translations[\"tr\"] = I18n.extend((I18n.translations[\"tr\"] || {}), JSON.parse('{\"activerecord\":{\"errors\":{\"messages\":{\"record_invalid\":\"Validation failed: %{errors}\",\"restrict_dependent_destroy\":{\"has_many\":\"Cannot delete record because dependent %{record} exist\",\"has_one\":\"Cannot delete record because a dependent %{record} exists\"}}}},\"bulk_uploads\":{\"email_local_part\":{\"empty_parameter\":\"No file uploaded\",\"error\":\"File Upload failed: %{error_message}\",\"success\":\"File was successfully uploaded\"}},\"common\":{\"crm\":{\"salesforce\":{\"forgot_password\":\"If you have forgotten your Salesforce password, please follow the instructions provided on the Salesforce sign in page.\",\"sign_in_button\":\"Sign In with Salesforce\"}}},\"contact\":{\"default_from_email\":\"info@zymewire.com\",\"phone_numbers\":[{\"label\":\"US\",\"phone\":\"1-844-996-3321\"},{\"label\":\"UK\",\"phone\":\"+44-208-133-9963\"}],\"support_email\":\"support@zymewire.com\"},\"date\":{\"abbr_day_names\":[\"Sun\",\"Mon\",\"Tue\",\"Wed\",\"Thu\",\"Fri\",\"Sat\"],\"abbr_month_names\":[null,\"Jan\",\"Feb\",\"Mar\",\"Apr\",\"May\",\"Jun\",\"Jul\",\"Aug\",\"Sep\",\"Oct\",\"Nov\",\"Dec\"],\"day_names\":[\"Sunday\",\"Monday\",\"Tuesday\",\"Wednesday\",\"Thursday\",\"Friday\",\"Saturday\"],\"formats\":{\"default\":\"%Y-%m-%d\",\"long\":\"%B %d, %Y\",\"short\":\"%b %d\"},\"month_names\":[null,\"January\",\"February\",\"March\",\"April\",\"May\",\"June\",\"July\",\"August\",\"September\",\"October\",\"November\",\"December\"],\"order\":[\"year\",\"month\",\"day\"]},\"datetime\":{\"distance_in_words\":{\"about_x_hours\":{\"one\":\"about 1 hour\",\"other\":\"about %{count} hours\"},\"about_x_months\":{\"one\":\"about 1 month\",\"other\":\"about %{count} months\"},\"about_x_years\":{\"one\":\"about 1 year\",\"other\":\"about %{count} years\"},\"almost_x_years\":{\"one\":\"almost 1 year\",\"other\":\"almost %{count} years\"},\"half_a_minute\":\"half a minute\",\"less_than_x_minutes\":{\"one\":\"less than a minute\",\"other\":\"less than %{count} minutes\"},\"less_than_x_seconds\":{\"one\":\"less than 1 second\",\"other\":\"less than %{count} seconds\"},\"over_x_years\":{\"one\":\"over 1 year\",\"other\":\"over %{count} years\"},\"x_days\":{\"one\":\"1 day\",\"other\":\"%{count} days\"},\"x_minutes\":{\"one\":\"1 minute\",\"other\":\"%{count} minutes\"},\"x_months\":{\"one\":\"1 month\",\"other\":\"%{count} months\"},\"x_seconds\":{\"one\":\"1 second\",\"other\":\"%{count} seconds\"}},\"prompts\":{\"day\":\"Day\",\"hour\":\"Hour\",\"minute\":\"Minute\",\"month\":\"Month\",\"second\":\"Seconds\",\"year\":\"Year\"}},\"default_host\":\"https://www.zymewire.com\",\"devise\":{\"confirmations\":{\"confirmed\":\"Your account was successfully confirmed. Please sign in.\",\"send_instructions\":\"Your email has not been confirmed. We need to confirm your email account before you can sign in. Please check your inbox or spam folder for an email from \\'info@zymewire.com\\' or request a new one.\",\"send_paranoid_instructions\":\"If your e-mail exists on our database, you will receive an email with instructions about how to confirm your account in a few minutes.\"},\"failure\":{\"already_authenticated\":\"You are already signed in.\",\"expired\":\"Hesabınız aktif olarak kullanılmadığı için artık geçerli değil. Lütfen yönetici ile irtibata geçin.\",\"inactive\":\"Your account was not activated yet.\",\"invalid\":\"Invalid email or password. If you use Salesforce, use the \\'Have Salesforce?\\' panel.\",\"invalid_token\":\"Invalid authentication token.\",\"last_attempt\":\"You have one more attempt before your account is locked.\",\"locked\":\"Your account is locked.\",\"not_active\":\"Your account has been de-activated, if you think this is a mistake please contact us\",\"not_found_in_database\":\"Invalid %{authentication_keys} or password.\",\"session_limited\":\"Hesabınıza başka bir tarayıcıdan giriş yapılmış. Lütfen devam etmek için yeniden giriş yapın.\",\"timeout\":\"Your session expired, please sign in again to continue.\",\"unauthenticated\":\"You need to sign in or sign up before continuing.\",\"unconfirmed\":\"We must confirm your email before you can continue. Please check your inbox or spam folder for a confirmation email from \\'info@zymewire.com\\' or request a new one.\"},\"invalid_captcha\":\"Captcha hatalı.\",\"invalid_security_question\":\"Güvenlik sorusunun cevabı yanlış.\",\"mailer\":{\"confirmation_instructions\":{\"subject\":\"Confirmation instructions for Zymewire.com\"},\"email_changed\":{\"subject\":\"Email Changed\"},\"password_change\":{\"subject\":\"Password Changed\"},\"reset_password_instructions\":{\"subject\":\"Reset password instructions for Zymewire.com\"},\"unlock_instructions\":{\"subject\":\"Unlock Instructions for Zymewire.com\"}},\"omniauth_callbacks\":{\"failure\":\"Could not authorize you from %{kind} because \\\\\"%{reason}\\\\\".\",\"success\":\"Successfully authorized from %{kind} account.\"},\"paranoid_verification_code\":{\"show\":{\"submit\":\"Gönder\",\"submit_verification_code\":\"Doğrulama kodunu gönder\",\"verification_code\":\"Doğrulama kodu\"},\"updated\":\"Doğrulama kodu kabul edildi\"},\"paranoid_verify\":{\"code_required\":\"Destek ekibimizden aldığınız kodu girin.\"},\"password_expired\":{\"change_required\":\"Parolanızın geçerlilik süresi dolmuş. Lütfen parolanızı yenileyin.\",\"show\":{\"change_my_password\":\"Şifremi Değiştir\",\"current_password\":\"Mevcut Şifre\",\"new_password\":\"Yeni Şifre\",\"new_password_confirmation\":\"Yeni şifreyi onayla\",\"renew_your_password\":\"Şifrenizi yenileyin\"},\"updated\":\"Yeni parolanız kaydedildi.\"},\"passwords\":{\"no_token\":\"You can\\'t access this page without coming from a password reset email. If you do come from a password reset email, please make sure you used the full URL provided.\",\"send_instructions\":\"You will receive an email with instructions about how to reset your password in a few minutes.\",\"send_paranoid_instructions\":\"If your e-mail exists on our database, you will receive a password recovery link on your e-mail\",\"updated\":\"Your password was changed successfully. You are now signed in.\",\"updated_not_active\":\"Your password was changed successfully.\"},\"registrations\":{\"destroyed\":\"Bye! Your account was successfully cancelled. We hope to see you again soon.\",\"signed_up\":\"Welcome! You have signed up successfully.\",\"signed_up_but_inactive\":\"You have signed up successfully. However, we could not sign you in because your account is not yet activated.\",\"signed_up_but_locked\":\"You have signed up successfully. However, we could not sign you in because your account is locked.\",\"signed_up_but_unconfirmed\":\"A message with a confirmation link has been sent to your email address. Please open the link to activate your account.\",\"update_needs_confirmation\":\"You updated your account successfully, but we need to verify your new email address. Please check your email and click on the confirm link to finalize confirming your new email address.\",\"updated\":\"You updated your account successfully.\",\"updated_but_not_signed_in\":\"Your account has been updated successfully, but since your password was changed, you need to sign in again.\"},\"sessions\":{\"already_signed_out\":\"Signed out successfully.\",\"signed_in\":\"Signed in successfully.\",\"signed_out\":\"Signed out successfully.\"},\"unlocks\":{\"send_instructions\":\"You will receive an email with instructions about how to unlock your account in a few minutes.\",\"send_paranoid_instructions\":\"If your account exists, you will receive an email with instructions about how to unlock it in a few minutes.\",\"unlocked\":\"Your account has been unlocked successfully. Please sign in to continue.\"}},\"download\":\"Download\",\"download_30_days\":\"This link will be available for 30 days after which the file will be removed from our servers.\",\"enumerize\":{\"blocklisted_contact\":{\"provider\":{\"insideview\":\"InsideView\",\"zephyr\":\"Zephyr\"}}},\"errors\":{\"format\":\"%{attribute} %{message}\",\"messages\":{\"accepted\":\"must be accepted\",\"already_confirmed\":\"was already confirmed, please try signing in\",\"blank\":\"can\\'t be blank\",\"confirmation\":\"doesn\\'t match %{attribute}\",\"confirmation_period_expired\":\"needs to be confirmed within %{period}, please request a new one\",\"empty\":\"can\\'t be empty\",\"equal_to\":\"must be equal to %{count}\",\"equal_to_current_password\":\"mevcut paroladan farklı olmalı.\",\"equal_to_email\":\"e-postadan farklı olmalı.\",\"even\":\"must be even\",\"exclusion\":\"is reserved\",\"expired\":\"has expired, please request a new one\",\"greater_than\":\"must be greater than %{count}\",\"greater_than_or_equal_to\":\"must be greater than or equal to %{count}\",\"in\":\"must be in %{count}\",\"inclusion\":\"is not included in the list\",\"invalid\":\"is invalid\",\"less_than\":\"must be less than %{count}\",\"less_than_or_equal_to\":\"must be less than or equal to %{count}\",\"model_invalid\":\"Validation failed: %{errors}\",\"not_a_number\":\"is not a number\",\"not_an_integer\":\"must be an integer\",\"not_found\":\"not found\",\"not_locked\":\"was not locked\",\"not_saved\":{\"one\":\"1 error prohibited this %{resource} from being saved:\",\"other\":\"%{count} errors prohibited this %{resource} from being saved:\"},\"odd\":\"must be odd\",\"other_than\":\"must be other than %{count}\",\"password_complexity\":{\"digit\":{\"one\":\"en az bir rakam içermelidir\",\"other\":\"en az %{count} basamak içermelidir\"},\"lower\":{\"one\":\"en az bir küçük harf içermelidir\",\"other\":\"en az %{count} küçük harf içermelidir\"},\"symbol\":{\"one\":\"en az bir noktalama işareti veya sembolü içermelidir\",\"other\":\"en az %{count} noktalama işareti veya sembolü içermelidir\"},\"upper\":{\"one\":\"en az bir büyük harf içermelidir\",\"other\":\"en az %{count} büyük harf içermelidir\"}},\"password_format\":\"Must contain uppercase AND lowercase letters and at least one number\",\"password_too_long\":\"is too long\",\"present\":\"must be blank\",\"required\":\"must exist\",\"taken\":\"has already been taken\",\"taken_in_past\":\"daha önce kullanıldı.\",\"too_long\":{\"one\":\"is too long (maximum is 1 character)\",\"other\":\"is too long (maximum is %{count} characters)\"},\"too_short\":{\"one\":\"is too short (minimum is 1 character)\",\"other\":\"is too short (minimum is %{count} characters)\"},\"wrong_length\":{\"one\":\"is the wrong length (should be 1 character)\",\"other\":\"is the wrong length (should be %{count} characters)\"}}},\"flash\":{\"actions\":{\"create\":{\"notice\":\"%{resource_name} was successfully created.\"},\"destroy\":{\"alert\":\"%{resource_name} could not be destroyed.\",\"notice\":\"%{resource_name} was successfully destroyed.\"},\"update\":{\"notice\":\"%{resource_name} was successfully updated.\"}}},\"hello_world\":\"Hello world\",\"helpers\":{\"select\":{\"prompt\":\"Please select\"},\"submit\":{\"create\":\"Create %{model}\",\"submit\":\"Save %{model}\",\"update\":\"Update %{model}\"}},\"hi\":\"Hi\",\"mailers\":{\"common\":{\"chummy_sign_off\":\"Have a good one.\",\"final_note\":\"P.S.: If you think you received this email accidentally, then something weird could be going on. Hit reply and a member of the %{brand_name} team will investigate.\",\"team_sign_off\":\"- The %{brand_name} Team\"},\"confirmation_instructions_email\":{\"crm\":{\"salesforce\":{\"resource_confirmed\":\"Someone has requested a resend of a confirmation email. You do not need to confirm your email address because your account is configured to use Salesforce to sign in.\",\"resource_unconfirmed\":\"You do not need to confirm your email address because your account is configured to use Salesforce to sign in, please complete the sign up process by clicking the button below to sign in to %{brand_name} via Salesforce.\"}},\"non_crm\":{\"confirm_link\":\"Confirm my account\",\"welcome\":\"Welcome to %{brand_name}. As the final step in the process you\\'ll need to confirm your account by clicking on the link below.\"},\"subject\":\"Confirmation instructions for %{domain}\"},\"flagged_events_mailer\":{\"from\":\"Flagged events - %{brand_name} \\\\u003cflagged_events@mailer.%{domain}\\\\u003e\"},\"mobile_registration_email\":{\"alert_cs_registration_locked\":{\"subject\":\"%{brand_name}: user has had mobile registration locked, too many failed attempts\"},\"dispatch_registration_PIN\":{\"further_instructions\":\"If you are NOT attempting to register for the %{brand_name} Mobile app then please let us know at %{support_email_link} - thank you.\",\"introduction\":\"Here is your mobile app registration PIN:\",\"subject\":\"%{brand_name} Mobile Registration Verification\"},\"too_many_failed_attempts\":{\"introduction\":\"We have received too many failed mobile device registration attempts for your account and we will block any further requests. If you have not attempted to register a mobile device with us in the last hour then please let us know as it is likely someone has tried on your behalf. If you have been trying to register a device please contact %{support_email_link} and we can help unlock your account and get you registered.\",\"subject\":\"%{brand_name}: too many failed registration attempts\"}},\"org_list_download_mail\":{\"dispatch_link\":{\"introduction\":\"We have finished meshing your %{crm_brand_name} data with the companies in your \\\\\"%{list_name}\\\\\" list.\",\"subject\":\"%{brand_name}: your file download of \\'%{list_name}\\' is ready\"},\"failed\":{\"instructions\":\"You could try again in a little while. If you already have and are receiving this email again, please contact us at %{support_email_link}\",\"introduction\":\"We are really sorry, but something went wrong with creating your download of %{crm_brand_name} data for your \\\\\"%{list_name}\\\\\" list.\",\"subject\":\"%{brand_name}: your file download of \\'%{list_name}\\' failed\"}},\"reset_password_instructions_email\":{\"crm\":{\"salesforce\":{\"change_requested\":\"Someone has requested a change to your password. Your account is configured to use Salesforce to sign in.\"}},\"fishy_fine_print\":\"If you did not request a password change, then something weird is going on. Someone may be trying to access your account (unsuccessfully). Please reply to this email and let us know. We will take steps to make sure it stops.\",\"non_crm\":{\"change_password_link\":\"Change my password\",\"change_requested\":\"Someone has requested a change to your password, you can do this via the link below.\"},\"subject\":\"Password reset instructions for %{domain}\"},\"sales_force_mail\":{\"processing_completed\":{\"bullet_points\":[\"Only show events associated with companies in your Salesforce account\",\"Add new contacts and accounts to your Salesforce account without leaving %{brand_name}\",\"Access the \\'Salesforce details\\' panel on company dashboards where you can see open tasks, team interactions, opportunities, and more!\"],\"further_instructions\":\"We\\'re here to help. If you run into any questions or challenges, please contact us at %{support_email_link} and a member of our team would be more than happy to help.\",\"get_the_most\":\"To get the most from the integration, check out the \\'Mine Salesforce for opportunities\\' guide in the Help Center.\",\"guide_button\":\"Take me to the guide\",\"introduction\":\"Good news - your Salesforce account is now integrated with %{brand_name}. Now you’ll be able to:\"}},\"segment_contact\":{\"report_manager\":{\"fail_subject\":\"%{brand_name}: The PDF report generation failed\",\"success_subject\":\"%{brand_name}: Your PDF for %{company_name} is attached\"}},\"sf_token_expiry_email\":{\"further_instructions\":\"If you run into any questions or challenges, please contact us at %{support_email_link} and a member of our team would be more than happy to help.\",\"introduction\":\"Unfortunately the connection established for you between %{brand_name} and your %{crm_brand_name} account has expired. We will not be able to update your lists in %{brand_name} to reflect your %{crm_brand_name} database. To re-establish the connection, you just need to log in to %{brand_name} using your %{crm_brand_name}.\",\"subject\":\"%{brand_name} to %{crm_brand_name} connection has expired\"},\"share_list_mail\":{\"introduction\":\"%{user_name} shared a list with you: \",\"subject\":\"[%{brand_name} - shared list] %{list_name}\"},\"trial_expiry_mail\":{\"seven_days_to_go\":{\"further_instructions\":\"A member of our fabulous Customer Success team will arrange a welcome call with you to understand your goals and priorities, and will then give you a personalized Tour de %{brand_name} so you can easily access the information that is most valuable to you.\",\"instructions\":\"If you\\'d like continued access to the platform with our flexible month-to-month subscription, please ensure you contact %{support_email_link} ahead of: %{deadline}\",\"introduction\":\"Time flies when you\\'re uncovering new business opportunities! Your %{brand_name} trial is coming to an end next week.\",\"sign_off\":\"We look forward to helping you reach your sales goals!\",\"subject\":\"Just a heads up that your %{brand_name} trial is ending in seven days\"},\"seven_days_to_go_warning_for_cs\":{\"introduction\":\"%{user_name} shared a list with you: \",\"subject\":\"[%{brand_name} - shared list] %{list_name}\"}},\"unlock_instructions_email\":{\"crm\":{\"salesforce\":{\"change_requested\":\"You are being sent this email either because of one too many unsuccessful non-Salesforce log-in attempts or someone has requested an unlock email. %{brand_name} has not locked your account because your account is configured to use Salesforce to sign in.\",\"password_forgotten\":\"If you have forgotten your Salesforce password or think your account has been locked by Salesforce, please follow the instructions provided on the Salesforce sign in page.\"}},\"fishy_fine_print\":\"If you have not been (unsuccessfully) trying to log in to your account, then something weird is going on. Someone may be trying to access your account (unsuccessfully). Please reply to this email and let us know. We will take steps to make sure it stops.\",\"non_crm\":{\"change_requested\":\"For security reasons we have locked your account because of too many log-in attempts. To unlock your account, click the link below.\",\"unlock_account_link\":\"Unlock my account\"},\"subject\":\"Unlock instructions for %{domain}\"}},\"mongoid\":{\"errors\":{\"messages\":{\"ambiguous_relationship\":{\"message\":\"Ambiguous associations %{candidates} defined on %{klass}.\",\"resolution\":\"On the %{name} association on %{inverse} you must add an :inverse_of option to specify the exact association on %{klass} that is the opposite of %{name}.\",\"summary\":\"When Mongoid attempts to set an inverse document of an association in memory, it needs to know which association it belongs to. When setting %{name}, Mongoid looked on the class %{inverse} for a matching association, but multiples were found that could potentially match: %{candidates}.\"},\"blank_in_locale\":\"can\\'t be blank in %{location}\",\"callbacks\":{\"message\":\"Calling %{method} on %{klass} resulted in a false return from a callback.\",\"resolution\":\"Double check all before callbacks to make sure they are not unintentionally returning false.\",\"summary\":\"If a before callback returns false when using Document.create!, Document#save!, or Document#update_attributes! this error will get raised since the document did not actually get saved.\"},\"calling_document_find_with_nil_is_invalid\":{\"message\":\"Calling Document.find with nil is invalid.\",\"resolution\":\"Most likely this is caused by passing parameters directly through to the find, and the parameter either is not present or the key from which it is accessed is incorrect.\",\"summary\":\"Document.find expects the parameters to be 1 or more ids, and will return a single document if 1 id is provided, otherwise an array of documents if multiple ids are provided.\"},\"create_collection_failure\":{\"message\":\"Cannot create collection %{collection_name} with options %{collection_options}. The following error was raised: %{error}.\",\"resolution\":\"Double check that collection options for the collection %{collection_name} are valid. Consult with Ruby driver documentation and MongoDB documentation if the desired options are supported by your version of the server.\",\"summary\":\"The server rejected createCollection command with given collection options. This may happen when some of the options are invalid, or not supported by your version of the server.\"},\"criteria_argument_required\":{\"message\":\"Calling Criteria methods with nil arguments is not allowed.\",\"resolution\":\"Invoke Criteria methods with non-nil arguments or omit the respective invocations.\",\"summary\":\"Arguments to Criteria methods cannot be nil, and most Criteria methods require at least one argument. Only logical operations (and, or, nor and not), `all\\' and `where\\' can be called without arguments. The method that was called with nil argument was: %{query_method}.\"},\"delete_restriction\":{\"message\":\"Cannot destroy %{document} because of dependent \\'%{relation}\\'.\",\"resolution\":\"Don\\'t attempt to delete the parent %{document} when it has children, or change the dependent option on the association.\",\"summary\":\"When defining \\'%{relation}\\' with a :dependent =\\\\u003e :restrict_with_error, Mongoid will raise an error when attempting to destroy the %{document} when the child \\'%{relation}\\' still has documents in it.\"},\"destroy_restrict_with_error_dependencies_exist\":\"is not empty and prevents the document from being destroyed\",\"document_not_destroyed\":{\"message\":\"%{klass} with id %{id} was not destroyed.\",\"resolution\":\"Check the before/after destroy callbacks to ensure that the return values are truthy for the chain to continue.\",\"summary\":\"When calling %{klass}#destroy! and a callback halts the destroy callback chain by returning a false value, the deletion will not actually occur.\"},\"document_not_found\":{\"message\":\"Document(s) not found for class %{klass} with id(s) %{missing}.\",\"resolution\":\"Search for an id that is in the database or set the Mongoid.raise_not_found_error configuration option to false, which will cause nil to be returned instead of raising this error when searching for a single id, or only the matched documents when searching for multiples.\",\"summary\":\"When calling %{klass}.find with an id or array of ids, each parameter must match a document in the database or this error will be raised. The search was for the id(s): %{searched} (%{total} total) and the following ids were not found: %{missing}.\"},\"document_with_attributes_not_found\":{\"message\":\"Document not found for class %{klass} with attributes %{attributes}.\",\"resolution\":\"Search for attributes that are in the database or set the Mongoid.raise_not_found_error configuration option to false, which will cause nil to be returned instead of raising this error.\",\"summary\":\"When calling %{klass}.find_by with a hash of attributes, all attributes provided must match a document in the database or this error will be raised.\"},\"document_with_shard_key_not_found\":{\"message\":\"Document not found for class %{klass} with id %{missing} and shard key %{shard_key}.\",\"resolution\":\"Search for an id/shard key that is in the database or set the Mongoid.raise_not_found_error configuration option to false, which will cause nil to be returned instead of raising this error.\",\"summary\":\"When calling %{klass}.find with an id and a shard key, each parameter must match a document in the database or this error will be raised. The search was for the id: %{missing} with shard_key: %{shard_key} and it was not found.\"},\"drop_collection_failure\":{\"message\":\"Cannot drop collection %{collection_name}.\",\"resolution\":\"Try to drop the collection manually using Ruby driver or mongo shell.\",\"summary\":\"Mongoid tried to drop collection %{collection_name}, but the collection still exists in the database.\"},\"empty_config_file\":{\"message\":\"Empty configuration file: %{path}.\",\"resolution\":\"Ensure your configuration file contains the correct contents. Refer to: https://www.mongodb.com/docs/mongoid/current/reference/configuration/\",\"summary\":\"Your mongoid.yml configuration file appears to be empty.\"},\"immutable_attribute\":{\"message\":\"Attempted to change the immutable attribute \\'%{name}\\' with the value: %{value}.\",\"resolution\":\"Do not attempt to update the value of \\'%{name}\\' after the document is persisted.\",\"summary\":\"Immutable attributes can only have values set when the document is a new record.\"},\"in_memory_collation_not_supported\":{\"message\":\"A collation option cannot be applied when querying documents in-memory.\",\"resolution\":\"Remove the collation option from the query.\",\"summary\":\"The query being run against documents in memory has a collation option set. A collation option is only supported if the query is executed on a MongoDB server with version \\\\u003e= 3.4.\"},\"invalid_async_query_executor\":{\"message\":\"Invalid async_query_executor option: %{executor}.\",\"resolution\":\"Pick an allowed option or fix the typo. If you were expecting the option to be there, please consult the following page with respect to Mongoid\\'s configuration:\\\\n\\\\n   https://www.mongodb.com/docs/mongoid/current/reference/configuration/#mongoid-configuration-options\",\"summary\":\"A invalid async query executor was specified. The valid options are: %{options}.\"},\"invalid_collection\":{\"message\":\"Access to the collection for %{klass} is not allowed.\",\"resolution\":\"For access to the collection that the embedded document is in, use %{klass}#_root.collection, or do not attempt to persist an embedded document without a parent set.\",\"summary\":\"%{klass}.collection was called, and %{klass} is an embedded document - it resides within the collection of the root document of the hierarchy.\"},\"invalid_config_file\":{\"message\":\"Invalid configuration file: %{path}.\",\"resolution\":\"Ensure your configuration file contains the correct contents. Refer to: https://www.mongodb.com/docs/mongoid/current/reference/configuration/\",\"summary\":\"Your mongoid.yml configuration file does not contain the correct file structure.\"},\"invalid_config_option\":{\"message\":\"Invalid configuration option: %{name}.\",\"resolution\":\"Remove the invalid option or fix the typo. If you were expecting the option to be there, please consult the following page with respect to Mongoid\\'s configuration:\\\\n\\\\n   http://mongoid.org/en/mongoid/docs/installation.html\",\"summary\":\"A invalid configuration option was provided in your mongoid.yml, or a typo is potentially present. The valid configuration options are: %{options}.\"},\"invalid_dependent_strategy\":{\"message\":\"Invalid dependent strategy: %{invalid_strategy}.\",\"resolution\":\"Change the dependent strategy to one of the valid types.\",\"summary\":\"An invalid dependent strategy was defined for the association: %{association}. The valid strategies are: %{valid_strategies}.\"},\"invalid_discriminator_key_target\":{\"message\":\"Setting the discriminator key on a child class is not allowed.\",\"resolution\":\"Try setting the discriminator key on %{superclass} or one of %{class_name}\\'s ancestors.\",\"summary\":\"The discriminator key on the class %{class_name} was attempted to be changed. Changing the discriminator key on a child class is not allowed.\"},\"invalid_dot_dollar_assignment\":{\"message\":\"Cannot set the %{attr} attribute on the %{klass} class.\",\"resolution\":\"In order to set fields that start with a dollar sign ($) or contain a dot/period (.), the aggregation pipeline can be used. MongoDB provides specific operators for working with these fields. Refer to the MongoDB documentation here: https://www.mongodb.com/docs/manual/core/dot-dollar-considerations/\",\"summary\":\"Calling the setters for fields that start with a dollar sign ($) or contain a dot/period (.) is prohibited. See the Mongoid documentation on Field Names with Dots/Periods (.) and Dollar Signs ($) for more information.\"},\"invalid_elem_match_operator\":{\"message\":\"Invalid $elemMatch operator \\'%{operator}\\'.\",\"resolution\":\"Valid field operators are: %{valid_operators}. Ensure you are using one of these operators.\",\"summary\":\"You misspelled an operator or are using an operator that Mongoid does not support.\"},\"invalid_estimated_count_criteria\":{\"message\":\"Invalid criteria for estimated_count.\",\"resolution\":\"Try calling estimated_count directly on the class: %{class_name}.estimated_count.\\\\n\\\\n  If the class defines a default scope, use unscoped: %{class_name}.unscoped.estimated_count.\",\"summary\":\"Estimated count is strictly a collection-level operation and cannot be called on a filtered criteria.\"},\"invalid_expression_operator\":{\"message\":\"Invalid expression operator \\'%{operator}\\'.\",\"resolution\":\"Valid expression operators are: %{valid_operators}. Ensure you are using one of these operators.\",\"summary\":\"You misspelled an operator, are using an operator that Mongoid does not support, or are trying to use a field-level operator on expression level.\"},\"invalid_field\":{\"message\":\"Defining a field named \\'%{field}\\' is not allowed.\",\"resolution\":\"Use Mongoid.destructive_fields to see what names are not allowed, and don\\'t use these names. These include names that also conflict with core Ruby methods on Object, Module, Enumerable, or included gems that inject methods into these or Mongoid internals.\",\"summary\":\"Defining this field would override the method \\'%{name}\\', which would cause issues with expectations around the original method and cause extremely hard to debug issues. The original method was defined in:\\\\n   Object: %{origin}\\\\n   File: %{file}\\\\n   Line: %{line}\"},\"invalid_field_operator\":{\"message\":\"Invalid field operator \\'%{operator}\\'.\",\"resolution\":\"Valid field operators are: %{valid_operators}. Ensure you are using one of these operators.\",\"summary\":\"You misspelled an operator, are using an operator that Mongoid does not support, or are trying to use an expression-level operator on field level.\"},\"invalid_field_option\":{\"message\":\"Invalid option :%{option} provided for field :%{name}.\",\"resolution\":\"When defining the field :%{name} on \\'%{klass}\\', please provide valid options for the field. These are currently: %{valid}. If you meant to define a custom field option, please do so first as follows:\\\\n\\\\n   Mongoid::Fields.option :%{option} do |model, field, value|\\\\n     # Your logic here...\\\\n   end\\\\n   class %{klass}\\\\n     include Mongoid::Document\\\\n     field :%{name}, %{option}: true\\\\n   end\\\\n\\\\n Refer to: https://www.mongodb.com/docs/mongoid/current/reference/fields/#custom-field-options\",\"summary\":\"Mongoid requires that you only provide valid options on each field definition in order to prevent unexpected behavior later on.\"},\"invalid_field_type\":{\"message\":\"Invalid field type %{type_inspection} for field \\'%{field}\\' on model \\'%{klass}\\'.\",\"resolution\":\"Please provide a valid type value for the field. Refer to: https://www.mongodb.com/docs/mongoid/current/reference/fields/#using-symbols-or-strings-instead-of-classes\",\"summary\":\"Model \\'%{klass}\\' defines a field \\'%{field}\\' with an unknown type value %{type_inspection}.\"},\"invalid_global_executor_concurrency\":{\"message\":\"Invalid global_executor_concurrency option.\",\"resolution\":\"Set global_executor_concurrency option to :global_thread_pool or remove global_executor_concurrency option.\",\"summary\":\"You set global_executor_concurrency while async_query_executor option is not set to :global_thread_pool. The global_executor_concurrency is allowed only for the global thread pool executor.\"},\"invalid_includes\":{\"message\":\"Invalid includes directive: %{klass}.includes(%{args})\",\"resolution\":\"Ensure that each parameter passed to %{klass}.includes is a valid name of an association on the %{klass} model. These are: %{relations}.\",\"summary\":\"Eager loading in Mongoid only supports providing arguments to %{klass}.includes that are the names of associations on the %{klass}.\"},\"invalid_index\":{\"message\":\"Invalid index specification on %{klass}: %{spec}, %{options}\",\"resolution\":\"Ensure that the index conforms to the correct syntax and has the correct options.\\\\n\\\\n Valid options are:\\\\n   background: true|false\\\\n   database: \\'database_name\\'\\\\n   name: \\'index_name\\'\\\\n   sparse: true|false\\\\n   unique: true|false\\\\n   min: 1\\\\n   max: 1\\\\n   bits: 26\\\\n   key: 26\\\\n   bucket_size : 1\\\\n   sphere_version : 1\\\\n   text_version : 1\\\\n   version : 1\\\\n   weights: { content: 1, title: 2 }\\\\n   expire_after_seconds: number_of_seconds\\\\n   partial_filter_expression\\\\n   storage_engine\\\\n   language_override\\\\n   default_language\\\\n   collation\\\\n   wildcard_projection: { \\'path.to.field.a\\': 1, \\'path.to.field.b\\': 0 }\\\\n Valid types are: 1, -1, \\'2d\\', \\'2dsphere\\', \\'geoHaystack (deprecated)\\', \\'text\\', \\'hashed\\'\\\\n\\\\n Example:\\\\n   class Band\\\\n     include Mongoid::Document\\\\n     index({ name: 1, label: -1 }, { sparse: true })\\\\n     index({ location: \\'2d\\' }, { background: true })\\\\n   end\\\\n\\\\n\",\"summary\":\"Indexes in Mongoid are defined as a hash of field name and direction/2d pairs, with a hash for any additional options.\"},\"invalid_options\":{\"message\":\"Invalid option :%{invalid} provided to association :%{name}.\",\"resolution\":\"Valid options are: %{valid}, make sure these are the ones you are using.\",\"summary\":\"Mongoid checks the options that are passed to the association macros to ensure that no ill side effects occur by letting something slip by.\"},\"invalid_path\":{\"message\":\"Having a root path assigned for %{klass} is invalid.\",\"resolution\":\"Most likely your embedded model, %{klass} is also referenced via a has_many from a root document in another collection. Double check the association definitions and fix any instances where embedded documents are improperly referenced from other collections.\",\"summary\":\"Mongoid has two different path objects for determining the location of a document in the database, Root and Embedded. This error is raised when an embedded document somehow gets a root path assigned.\"},\"invalid_persistence_option\":{\"message\":\"Invalid persistence option :%{invalid}.\",\"resolution\":\"Valid options are: %{valid}, make sure these are the ones you are using.\",\"summary\":\"The options used to change the persistence context must be one of the valid options for a mongo client, or a collection name.\"},\"invalid_relation\":{\"message\":\"Defining an association named \\'%{name}\\' is not allowed.\",\"resolution\":\"Use Mongoid.destructive_fields to see what names are not allowed, and don\\'t use these names. These include names that also conflict with core Ruby methods on Object, Module, Enumerable, or included gems that inject methods into these or Mongoid internals.\",\"summary\":\"Defining this association would override the method \\'%{name}\\', which would cause issues with expectations around the original method and cause extremely hard to debug issues. The original method was defined in:\\\\n   Object: %{origin}\\\\n   File: %{file}\\\\n   Line: %{line}\"},\"invalid_relation_option\":{\"message\":\"Invalid association option :%{option} for association \\'%{name}\\' on class %{klass}.\",\"resolution\":\"Valid options are: %{valid_options}, make sure you use only those.\",\"summary\":\"An invalid option was provided for an association.\"},\"invalid_scope\":{\"message\":\"Defining a scope of value %{value} on %{klass} is not allowed.\",\"resolution\":\"Change the scope to be a proc wrapped criteria.\\\\n\\\\n Example:\\\\n   class Band\\\\n     include Mongoid::Document\\\\n     scope :inactive, -\\\\u003e{ where(active: false) }\\\\n   end\\\\n\\\\n\",\"summary\":\"Scopes in Mongoid must be procs that wrap criteria objects.\"},\"invalid_session_nesting\":{\"message\":\"A session was started while another session was being used.\",\"resolution\":\"Only use one session at a time; sessions cannot be nested.\",\"summary\":\"Sessions cannot be nested. Only one session can be used in a thread at once.\"},\"invalid_session_use\":{\"message\":\"A session was attempted to be used with a model whose client cannot use that session.\",\"resolution\":\"Only execute operations on the model class or instances of the model through which the session was created. Otherwise, ensure that all models on which operations are executed in the session block share the same driver client. For example, a model may have a different client specified in its \\'store_in\\' options.\\\\n\\\\n\",\"summary\":\"Sessions are started via driver clients (Model#mongo_client) and, in most cases, driver clients are shared across models. When different models have their own clients, a session cannot be obtained via one model and used for operations on another model.\"},\"invalid_set_polymorphic_relation\":{\"message\":\"The %{name} attribute can\\'t be set to an instance of %{other_klass} as %{other_klass} has multiple associations referencing %{klass} as %{name}.\",\"resolution\":\"Set the values from the parent, or redefine the association with only a single definition in the parent.\",\"summary\":\"If the parent class of a polymorphic association has multiple definitions for the same association, the values must be set from the parent side and not the child side since Mongoid cannot determine from the child side which association to go in.\"},\"invalid_storage_options\":{\"message\":\"Invalid options passed to %{klass}.store_in: %{options}.\",\"resolution\":\"Change the options passed to store_in to match the documented API, and ensure all keys in the options hash are symbols.\\\\n\\\\n Example:\\\\n   class Band\\\\n     include Mongoid::Document\\\\n     store_in collection: \\'artists\\', database: \\'music\\'\\\\n   end\\\\n\\\\n\",\"summary\":\"The :store_in macro takes only a hash of parameters with the keys :database, :collection, :collection_options, or :client.\"},\"invalid_time\":{\"message\":\"\\'%{value}\\' is not a valid Time.\",\"resolution\":\"Make sure to pass parsable values to the field setter for Date, DateTime, and Time objects. When this is a String it needs to be valid for Time.parse. Other objects must be valid to pass to Time.local.\",\"summary\":\"Mongoid tries to serialize the values for Date, DateTime, and Time into proper UTC times to store in the database. The provided value could not be parsed.\"},\"inverse_not_found\":{\"message\":\"When adding a(n) %{klass} to %{base}#%{name}, Mongoid could not determine the inverse foreign key to set. The attempted key was \\'%{inverse}\\'.\",\"resolution\":\"If an inverse is not required, like a belongs_to or has_and_belongs_to_many, ensure that :inverse_of =\\\\u003e nil is set on the association. If the inverse is needed, most likely the inverse cannot be figured out from the names of the associations and you will need to explicitly tell Mongoid on the association what the inverse is.\\\\n\\\\n Example:\\\\n   class Car\\\\n     include Mongoid::Document\\\\n     has_one :engine, class_name: \\\\\"Motor\\\\\", inverse_of: :machine\\\\n   end\\\\n\\\\n   class Motor\\\\n     include Mongoid::Document\\\\n     belongs_to :machine, class_name: \\\\\"Car\\\\\", inverse_of: :engine\\\\n   end\",\"summary\":\"When adding a document to an association, Mongoid attempts to link the newly added document to the base of the association in memory, as well as set the foreign key to link them on the database side. In this case Mongoid could not determine what the inverse foreign key was.\"},\"message_title\":\"message\",\"mixed_client_configuration\":{\"message\":\"Both uri and standard configuration options defined for client: \\'%{name}\\'.\",\"resolution\":\"Provide either only a uri as configuration or only standard options.\",\"summary\":\"Instead of simply giving uri or standard options a preference order, Mongoid assumes that you have made a mistake in your configuration and requires that you provide one or the other, but not both. The options that were provided were: %{config}.\"},\"mixed_relations\":{\"message\":\"Referencing a(n) %{embedded} document from the %{root} document via a non-embedded association is not allowed since the %{embedded} is embedded.\",\"resolution\":\"Consider not embedding %{embedded}, or do the key storage and access in a custom manner in the application code.\",\"summary\":\"In order to properly access a(n) %{embedded} from %{root} the reference would need to go through the root document of %{embedded}. In a simple case this would require Mongoid to store an extra foreign key for the root, in more complex cases where %{embedded} is multiple levels deep a key would need to be stored for each parent up the hierarchy.\"},\"nested_attributes_metadata_not_found\":{\"message\":\"Could not find metadata for association \\'%{name}\\' on model: %{klass}.\",\"resolution\":\"Make sure that there is an association defined named \\'%{name}\\' on %{klass} or that the association definition comes before the accepts_nested_attributes_for macro in the model - order matters so that Mongoid has access to the metadata.\\\\n\\\\n Example:\\\\n   class Band\\\\n     include Mongoid::Document\\\\n     has_many :albums\\\\n     accepts_nested_attributes_for :albums\\\\n   end\\\\n\\\\n\",\"summary\":\"When defining nested attributes for an association, Mongoid needs to access the metadata for the association \\'%{name}\\' in order if add autosave functionality to it, if applicable. Either no association named \\'%{name}\\' could be found, or the association had not been defined yet.\"},\"no_client_config\":{\"message\":\"No configuration could be found for a client named \\'%{name}\\'.\",\"resolution\":\"Double check your mongoid.yml to make sure under the clients key that a configuration exists for \\'%{name}\\'. If you have set the configuration programmatically, ensure that \\'%{name}\\' exists in the configuration hash.\",\"summary\":\"When attempting to create the new client, Mongoid could not find a client configuration for the name: \\'%{name}\\'. This is necessary in order to know the host, port, and options needed to connect.\"},\"no_client_database\":{\"message\":\"No database provided for client configuration: :%{name}.\",\"resolution\":\"If configuring via a mongoid.yml, ensure that within your :%{name} section a :database value for the client\\'s default database is defined.\\\\n\\\\n Example:\\\\n   development:\\\\n     clients:\\\\n       %{name}:\\\\n         database: my_app_db\\\\n         hosts:\\\\n           - localhost:27017\\\\n\\\\n\",\"summary\":\"Each client configuration must provide a database so Mongoid knows where the default database to persist to. What was provided was: %{config}.\"},\"no_client_hosts\":{\"message\":\"No hosts provided for client configuration: :%{name}.\",\"resolution\":\"If configuring via a mongoid.yml, ensure that within your :%{name} section a :hosts value for the client hosts is defined.\\\\n\\\\n Example:\\\\n   development:\\\\n     clients:\\\\n       %{name}:\\\\n         database: my_app_db\\\\n         hosts:\\\\n           - localhost:27017\\\\n\\\\n\",\"summary\":\"Each client configuration must provide hosts so Mongoid knows where the database server is located. What was provided was: %{config}.\"},\"no_clients_config\":{\"message\":\"No clients configuration provided.\",\"resolution\":\"Double check your mongoid.yml to make sure that you have a top-level clients key with at least 1 default client configuration for it. You can regenerate a new mongoid.yml for assistance via `rails g mongoid:config`.\\\\n\\\\n Example:\\\\n   development:\\\\n     clients:\\\\n       default:\\\\n         database: mongoid_dev\\\\n         hosts:\\\\n           - localhost:27017\\\\n\\\\n\",\"summary\":\"Mongoid\\'s configuration requires that you provide details about each client that can be connected to, and requires in the clients config at least 1 default client to exist.\"},\"no_default_client\":{\"message\":\"No default client configuration is defined.\",\"resolution\":\"If configuring via a mongoid.yml, ensure that within your :clients section a :default client is defined.\\\\n\\\\n Example:\\\\n   development:\\\\n     clients:\\\\n       default:\\\\n         hosts:\\\\n           - localhost:27017\\\\n\\\\n\",\"summary\":\"The configuration provided settings for: %{keys}, but Mongoid requires a :default to be defined at minimum.\"},\"no_documents_found\":{\"message\":\"Could not find a document of class %{klass}.\",\"resolution\":\"Create a document of class %{klass} or use a finder method that does not raise an exception when no documents are found.\",\"summary\":\"Mongoid attempted to find a document of the class %{klass} but none exist.\"},\"no_environment\":{\"message\":\"Could not load the configuration since no environment was defined.\",\"resolution\":\"Please ensure an environment is set in one of the listed locations. The environment must be explicitly set.\",\"summary\":\"Mongoid could not determine the environment to use because it was not specified in any of the following locations: Rails.env, Sinatra::Base.environment, ENV[\\\\\"RACK_ENV\\\\\"], ENV[\\\\\"MONGOID_ENV\\\\\"]. Without knowing the environment, Mongoid cannot load its configuration.\"},\"no_map_reduce_output\":{\"message\":\"No output location was specified for the map/reduce operation.\",\"resolution\":\"Provide the location that the output of the operation is to go by chaining an #out call to the map/reduce.\\\\n\\\\n Example:\\\\n   Band.map_reduce(map, reduce).out(inline: 1)\\\\n\\\\n Valid options for the out function are:\\\\n   inline: 1\\\\n   merge: \\'collection-name\\'\\\\n   replace: \\'collection-name\\'\\\\n   reduce: \\'collection-name\\'\\\\n\\\\n\",\"summary\":\"When executing a map/reduce, you must provide the output location of the results. The attempted command was: %{command}.\"},\"no_metadata\":{\"message\":\"Metadata not found for document of type %{klass}.\",\"resolution\":\"Ensure that your associations on the %{klass} model are all properly defined, and that the inverse associations are also properly defined. Embedded associations must have both the parent (embeds_one/embeds_many) and the inverse (embedded_in) present in order to work properly.\",\"summary\":\"Mongoid sets the metadata of an association on the document when it is either loaded from within the association, or added to one. The presence of the metadata is required in order to provide various functionality around associations. Most likely you are getting this error because the document is embedded and was attempted to be persisted without being associated with a parent, or the association was not properly defined.\"},\"no_parent\":{\"message\":\"Cannot persist embedded document %{klass} without a parent document.\",\"resolution\":\"Ensure that you\\'ve set the parent association if instantiating the embedded document directly, or always create new embedded documents via the parent association.\",\"summary\":\"If the document is embedded, in order to be persisted it must always have a reference to its parent document. This is most likely caused by either calling %{klass}.create or %{klass}.create! without setting the parent document as an attribute.\"},\"readonly_attribute\":{\"message\":\"Attempted to set the readonly attribute \\'%{name}\\' with the value: %{value}.\",\"resolution\":\"Don\\'t define \\'%{name}\\' as readonly, or do not attempt to update its value after the document is persisted.\",\"summary\":\"Attributes flagged as readonly via Model.attr_readonly can only have values set when the document is a new record.\"},\"readonly_document\":{\"message\":\"Attempted to persist a readonly document of class \\'%{klass}\\'.\",\"resolution\":\"Don\\'t attempt to persist documents that are flagged as readonly.\",\"summary\":\"Documents that are marked readonly cannot be persisted.\"},\"resolution_title\":\"resolution\",\"scope_overwrite\":{\"message\":\"Cannot create scope :%{scope_name}, because of existing method %{model_name}.%{scope_name}.\",\"resolution\":\"Change the name of the scope so it does not conflict with the already defined method %{model_name}, or set the configuration option Mongoid.scope_overwrite_exception to false, which is its default. In this case a warning will be logged.\",\"summary\":\"When defining a scope that conflicts with a method that already exists on the model, this error will get raised if Mongoid.scope_overwrite_exception is set to true.\"},\"sessions_not_supported\":{\"message\":\"Sessions are not supported by the connected server(s).\",\"resolution\":\"Verify that all servers in your deployment are at least version 3.6 or don\\'t attempt to use sessions with older server versions.\",\"summary\":\"A session was attempted to be used with a MongoDB server version that doesn\\'t support sessions. Sessions are supported in MongoDB server versions 3.6 and higher.\"},\"summary_title\":\"summary\",\"too_many_nested_attribute_records\":{\"message\":\"Accepting nested attributes for %{association} is limited to %{limit} documents.\",\"resolution\":\"The limit is set as an option to the macro, for example: accepts_nested_attributes_for :%{association}, limit: %{limit}. Consider raising this limit or making sure no more are sent than the set value.\",\"summary\":\"More documents were sent to be processed than the allowed limit.\"},\"unknown_attribute\":{\"message\":\"Attempted to set a value for \\'%{name}\\' which is not allowed on the model %{klass}.\",\"resolution\":\"Define the field \\'%{name}\\' in %{klass}, or include Mongoid::Attributes::Dynamic in %{klass} if you intend to store values in fields that are not explicitly defined.\",\"summary\":\"%{klass}#%{name}= was called but there is no \\'%{name}\\' field defined in the model, and Mongoid::Attributes::Dynamic is not included. This error is also raised instead of NoMethodError if the unknown attribute is passed to any method that accepts an attributes hash, such as #attributes=.\"},\"unknown_model\":{\"message\":\"Attempted to instantiate an object of the unknown model \\'%{klass}\\'.\",\"resolution\":\"The _type field is a reserved one used by Mongoid to determine the class for instantiating an object. Please don\\'t save data in this field or ensure that any values in this field correspond to valid models.\",\"summary\":\"A document with the value \\'%{value}\\' at the key \\'_type\\' was used to instantiate a model object but Mongoid cannot find this Class.\"},\"unsaved_document\":{\"message\":\"Attempted to save %{document} before the parent %{base}.\",\"resolution\":\"Make sure to only use create or create! when the parent document %{base} is persisted.\",\"summary\":\"You cannot call create or create! through the association (%{document}) whose parent (%{base}) is not already saved. This would cause the database to be out of sync since the child could potentially reference a nonexistent parent.\"},\"unsupported_javascript\":{\"message\":\"Executing Javascript $where selector on an embedded criteria is not supported.\",\"resolution\":\"Please provide a standard hash to #where when the criteria is for an embedded association.\",\"summary\":\"Mongoid only supports providing a hash of arguments to #where criterion on embedded documents. Since %{klass} is embedded, the expression %{javascript} is not allowed.\"},\"validations\":{\"message\":\"Validation of %{document} failed.\",\"resolution\":\"Try persisting the document with valid data or remove the validations.\",\"summary\":\"The following errors were found: %{errors}\"}}}},\"number\":{\"currency\":{\"format\":{\"delimiter\":\",\",\"format\":\"%u%n\",\"negative_format\":\"-%u%n\",\"precision\":2,\"separator\":\".\",\"significant\":false,\"strip_insignificant_zeros\":false,\"unit\":\"$\"}},\"format\":{\"delimiter\":\",\",\"precision\":3,\"round_mode\":\"default\",\"separator\":\".\",\"significant\":false,\"strip_insignificant_zeros\":false},\"human\":{\"decimal_units\":{\"format\":\"%n %u\",\"units\":{\"billion\":\"Billion\",\"million\":\"Million\",\"quadrillion\":\"Quadrillion\",\"thousand\":\"Thousand\",\"trillion\":\"Trillion\",\"unit\":\"\"}},\"format\":{\"delimiter\":\"\",\"precision\":3,\"significant\":true,\"strip_insignificant_zeros\":true},\"storage_units\":{\"format\":\"%n %u\",\"units\":{\"byte\":{\"one\":\"Byte\",\"other\":\"Bytes\"},\"eb\":\"EB\",\"gb\":\"GB\",\"kb\":\"KB\",\"mb\":\"MB\",\"pb\":\"PB\",\"tb\":\"TB\",\"zb\":\"ZB\"}}},\"nth\":{},\"percentage\":{\"format\":{\"delimiter\":\"\",\"format\":\"%n%\"}},\"precision\":{\"format\":{\"delimiter\":\"\"}}},\"simple_form\":{\"error_notification\":{\"default_message\":\"Please review the problems below:\"},\"no\":\"No\",\"required\":{\"mark\":\"*\",\"text\":\"required\"},\"yes\":\"Yes\"},\"support\":{\"array\":{\"last_word_connector\":\", and \",\"two_words_connector\":\" and \",\"words_connector\":\", \"}},\"time\":{\"am\":\"am\",\"formats\":{\"default\":\"%a, %d %b %Y %H:%M:%S %z\",\"long\":\"%B %d, %Y %H:%M\",\"short\":\"%d %b %H:%M\"},\"pm\":\"pm\"},\"users\":{\"confirmations\":{\"new\":{\"legend\":\"Resend your %{brand_name} confirmation instructions\",\"message\":\"We need to confirm your email address to complete the sign up process. Supply your email address, below, and we will send you instructions on how to confirm your address.\",\"submit_button\":\"Send Confirmation Instructions\",\"title\":\"Resend confirmation instructions | %{brand_name}\"},\"show\":{\"legend\":\"Check your inbox for a confirmation email\",\"message\":\"If your e-mail exists in our database we have sent you a message with instructions. Check your inbox (or spam folder) for a message from \\'%{default_from_email}\\' containing the confirmation link.\",\"title\":\"Awaiting confirmation | %{brand_name}\"}},\"passwords\":{\"new\":{\"failures\":\"Note: If you make more than 5 sequential failed attempts to sign in with your %{brand_name} password, your account will be (temporarily) locked. Check your inbox for instruction on how to unlock your account, or we can\",\"legend\":\"Reset your %{brand_name} password\",\"message\":\"Supply your email address, below, and we will send you instructions on how to reset your password.\",\"resend_link\":\"resend a new set of unlock instructions\",\"submit_button\":\"Send Reset Instructions\",\"title\":\"Reset password | %{brand_name}\"},\"show\":{\"didnt_receive_email\":\"Didn\\'t receive the email?\",\"legend\":\"Password reset instructions sent\",\"message\":\"If your e-mail exists in our database we have sent you a message with password reset instructions. Check your inbox (or spam folder) for a message from \\'%{default_from_email}\\'.\",\"resend_link\":\"you can request another one here\",\"title\":\"Awaiting reset | %{brand_name}\"}}},\"will_paginate\":{\"container_aria_label\":\"Pagination\",\"next_label\":\"Next \\\\u0026#8594;\",\"page_aria_label\":\"Page %{page}\",\"page_entries_info\":{\"multi_page\":\"Displaying %{model} %{from} - %{to} of %{count} in total\",\"multi_page_html\":\"Displaying %{model} \\\\u003cb\\\\u003e%{from}\\\\u0026nbsp;-\\\\u0026nbsp;%{to}\\\\u003c/b\\\\u003e of \\\\u003cb\\\\u003e%{count}\\\\u003c/b\\\\u003e in total\",\"single_page\":{\"one\":\"Displaying 1 %{model}\",\"other\":\"Displaying all %{count} %{model}\",\"zero\":\"No %{model} found\"},\"single_page_html\":{\"one\":\"Displaying \\\\u003cb\\\\u003e1\\\\u003c/b\\\\u003e %{model}\",\"other\":\"Displaying \\\\u003cb\\\\u003eall\\\\u0026nbsp;%{count}\\\\u003c/b\\\\u003e %{model}\",\"zero\":\"No %{model} found\"}},\"page_gap\":\"\\\\u0026hellip;\",\"previous_label\":\"\\\\u0026#8592; Previous\"}}'));\nI18n.translations[\"uk\"] = I18n.extend((I18n.translations[\"uk\"] || {}), JSON.parse('{\"activerecord\":{\"errors\":{\"messages\":{\"record_invalid\":\"Validation failed: %{errors}\",\"restrict_dependent_destroy\":{\"has_many\":\"Cannot delete record because dependent %{record} exist\",\"has_one\":\"Cannot delete record because a dependent %{record} exists\"}}}},\"bulk_uploads\":{\"email_local_part\":{\"empty_parameter\":\"No file uploaded\",\"error\":\"File Upload failed: %{error_message}\",\"success\":\"File was successfully uploaded\"}},\"common\":{\"crm\":{\"salesforce\":{\"forgot_password\":\"If you have forgotten your Salesforce password, please follow the instructions provided on the Salesforce sign in page.\",\"sign_in_button\":\"Sign In with Salesforce\"}}},\"contact\":{\"default_from_email\":\"info@zymewire.com\",\"phone_numbers\":[{\"label\":\"US\",\"phone\":\"1-844-996-3321\"},{\"label\":\"UK\",\"phone\":\"+44-208-133-9963\"}],\"support_email\":\"support@zymewire.com\"},\"date\":{\"abbr_day_names\":[\"Sun\",\"Mon\",\"Tue\",\"Wed\",\"Thu\",\"Fri\",\"Sat\"],\"abbr_month_names\":[null,\"Jan\",\"Feb\",\"Mar\",\"Apr\",\"May\",\"Jun\",\"Jul\",\"Aug\",\"Sep\",\"Oct\",\"Nov\",\"Dec\"],\"day_names\":[\"Sunday\",\"Monday\",\"Tuesday\",\"Wednesday\",\"Thursday\",\"Friday\",\"Saturday\"],\"formats\":{\"default\":\"%Y-%m-%d\",\"long\":\"%B %d, %Y\",\"short\":\"%b %d\"},\"month_names\":[null,\"January\",\"February\",\"March\",\"April\",\"May\",\"June\",\"July\",\"August\",\"September\",\"October\",\"November\",\"December\"],\"order\":[\"year\",\"month\",\"day\"]},\"datetime\":{\"distance_in_words\":{\"about_x_hours\":{\"one\":\"about 1 hour\",\"other\":\"about %{count} hours\"},\"about_x_months\":{\"one\":\"about 1 month\",\"other\":\"about %{count} months\"},\"about_x_years\":{\"one\":\"about 1 year\",\"other\":\"about %{count} years\"},\"almost_x_years\":{\"one\":\"almost 1 year\",\"other\":\"almost %{count} years\"},\"half_a_minute\":\"half a minute\",\"less_than_x_minutes\":{\"one\":\"less than a minute\",\"other\":\"less than %{count} minutes\"},\"less_than_x_seconds\":{\"one\":\"less than 1 second\",\"other\":\"less than %{count} seconds\"},\"over_x_years\":{\"one\":\"over 1 year\",\"other\":\"over %{count} years\"},\"x_days\":{\"one\":\"1 day\",\"other\":\"%{count} days\"},\"x_minutes\":{\"one\":\"1 minute\",\"other\":\"%{count} minutes\"},\"x_months\":{\"one\":\"1 month\",\"other\":\"%{count} months\"},\"x_seconds\":{\"one\":\"1 second\",\"other\":\"%{count} seconds\"}},\"prompts\":{\"day\":\"Day\",\"hour\":\"Hour\",\"minute\":\"Minute\",\"month\":\"Month\",\"second\":\"Seconds\",\"year\":\"Year\"}},\"default_host\":\"https://www.zymewire.com\",\"devise\":{\"confirmations\":{\"confirmed\":\"Your account was successfully confirmed. Please sign in.\",\"send_instructions\":\"Your email has not been confirmed. We need to confirm your email account before you can sign in. Please check your inbox or spam folder for an email from \\'info@zymewire.com\\' or request a new one.\",\"send_paranoid_instructions\":\"If your e-mail exists on our database, you will receive an email with instructions about how to confirm your account in a few minutes.\"},\"failure\":{\"already_authenticated\":\"You are already signed in.\",\"expired\":\"Ваш аккаунт застарів через неактивність. Будь ласка, зв\\'яжіться з адміністратором.\",\"inactive\":\"Your account was not activated yet.\",\"invalid\":\"Invalid email or password. If you use Salesforce, use the \\'Have Salesforce?\\' panel.\",\"invalid_token\":\"Invalid authentication token.\",\"last_attempt\":\"You have one more attempt before your account is locked.\",\"locked\":\"Your account is locked.\",\"not_active\":\"Your account has been de-activated, if you think this is a mistake please contact us\",\"not_found_in_database\":\"Invalid %{authentication_keys} or password.\",\"session_limited\":\"Ваші облікові дані були використані в іншому браузері. Будь ласка, авторизуйтесь знову щоб продовжити в цьому браузері.\",\"timeout\":\"Your session expired, please sign in again to continue.\",\"unauthenticated\":\"You need to sign in or sign up before continuing.\",\"unconfirmed\":\"We must confirm your email before you can continue. Please check your inbox or spam folder for a confirmation email from \\'info@zymewire.com\\' or request a new one.\"},\"invalid_captcha\":\"Введення капчі недійсне.\",\"invalid_security_question\":\"Неправильна відповідь на секретне питання.\",\"mailer\":{\"confirmation_instructions\":{\"subject\":\"Confirmation instructions for Zymewire.com\"},\"email_changed\":{\"subject\":\"Email Changed\"},\"password_change\":{\"subject\":\"Password Changed\"},\"reset_password_instructions\":{\"subject\":\"Reset password instructions for Zymewire.com\"},\"unlock_instructions\":{\"subject\":\"Unlock Instructions for Zymewire.com\"}},\"omniauth_callbacks\":{\"failure\":\"Could not authorize you from %{kind} because \\\\\"%{reason}\\\\\".\",\"success\":\"Successfully authorized from %{kind} account.\"},\"paranoid_verification_code\":{\"show\":{\"submit\":\"Відправити\",\"submit_verification_code\":\"Відправити код підтвердження\",\"verification_code\":\"Код підтвердження\"},\"updated\":\"Код підтвердження прийнято\"},\"paranoid_verify\":{\"code_required\":\"Введіть, будь ласка, код від нашої команди підтримки\"},\"password_expired\":{\"change_required\":\"Ваш пароль застарілий. Будь ласка, оновіть пароль.\",\"show\":{\"change_my_password\":\"Змінити пароль\",\"current_password\":\"Теперішній пароль\",\"new_password\":\"Новий пароль\",\"new_password_confirmation\":\"Підтвердити новий пароль\",\"renew_your_password\":\"Оновити свій пароль\"},\"updated\":\"Ваш новий пароль збережено.\"},\"passwords\":{\"no_token\":\"You can\\'t access this page without coming from a password reset email. If you do come from a password reset email, please make sure you used the full URL provided.\",\"send_instructions\":\"You will receive an email with instructions about how to reset your password in a few minutes.\",\"send_paranoid_instructions\":\"If your e-mail exists on our database, you will receive a password recovery link on your e-mail\",\"updated\":\"Your password was changed successfully. You are now signed in.\",\"updated_not_active\":\"Your password was changed successfully.\"},\"registrations\":{\"destroyed\":\"Bye! Your account was successfully cancelled. We hope to see you again soon.\",\"signed_up\":\"Welcome! You have signed up successfully.\",\"signed_up_but_inactive\":\"You have signed up successfully. However, we could not sign you in because your account is not yet activated.\",\"signed_up_but_locked\":\"You have signed up successfully. However, we could not sign you in because your account is locked.\",\"signed_up_but_unconfirmed\":\"A message with a confirmation link has been sent to your email address. Please open the link to activate your account.\",\"update_needs_confirmation\":\"You updated your account successfully, but we need to verify your new email address. Please check your email and click on the confirm link to finalize confirming your new email address.\",\"updated\":\"You updated your account successfully.\",\"updated_but_not_signed_in\":\"Your account has been updated successfully, but since your password was changed, you need to sign in again.\"},\"sessions\":{\"already_signed_out\":\"Signed out successfully.\",\"signed_in\":\"Signed in successfully.\",\"signed_out\":\"Signed out successfully.\"},\"unlocks\":{\"send_instructions\":\"You will receive an email with instructions about how to unlock your account in a few minutes.\",\"send_paranoid_instructions\":\"If your account exists, you will receive an email with instructions about how to unlock it in a few minutes.\",\"unlocked\":\"Your account has been unlocked successfully. Please sign in to continue.\"}},\"download\":\"Download\",\"download_30_days\":\"This link will be available for 30 days after which the file will be removed from our servers.\",\"enumerize\":{\"blocklisted_contact\":{\"provider\":{\"insideview\":\"InsideView\",\"zephyr\":\"Zephyr\"}}},\"errors\":{\"format\":\"%{attribute} %{message}\",\"messages\":{\"accepted\":\"must be accepted\",\"already_confirmed\":\"was already confirmed, please try signing in\",\"blank\":\"can\\'t be blank\",\"confirmation\":\"doesn\\'t match %{attribute}\",\"confirmation_period_expired\":\"needs to be confirmed within %{period}, please request a new one\",\"empty\":\"can\\'t be empty\",\"equal_to\":\"must be equal to %{count}\",\"equal_to_current_password\":\"має відрізнятися від поточного паролю.\",\"equal_to_email\":\"має відрізнятися від електронної пошти.\",\"even\":\"must be even\",\"exclusion\":\"is reserved\",\"expired\":\"has expired, please request a new one\",\"greater_than\":\"must be greater than %{count}\",\"greater_than_or_equal_to\":\"must be greater than or equal to %{count}\",\"in\":\"must be in %{count}\",\"inclusion\":\"is not included in the list\",\"invalid\":\"is invalid\",\"less_than\":\"must be less than %{count}\",\"less_than_or_equal_to\":\"must be less than or equal to %{count}\",\"model_invalid\":\"Validation failed: %{errors}\",\"not_a_number\":\"is not a number\",\"not_an_integer\":\"must be an integer\",\"not_found\":\"not found\",\"not_locked\":\"was not locked\",\"not_saved\":{\"one\":\"1 error prohibited this %{resource} from being saved:\",\"other\":\"%{count} errors prohibited this %{resource} from being saved:\"},\"odd\":\"must be odd\",\"other_than\":\"must be other than %{count}\",\"password_complexity\":{\"digit\":{\"few\":\"повинен включати хоча б %{count} цифри\",\"many\":\"повинен включати хоча б %{count} цифр\",\"one\":\"повинен включати хоча б одну цифру\",\"other\":\"повинен включати хоча б %{count} цифри\"},\"lower\":{\"few\":\"повинен включати хоча б %{count} малі букви\",\"many\":\"повинен включати хоча б %{count} малих букв\",\"one\":\"повинен включати хоча б одну малу букву\",\"other\":\"повинен включати хоча б %{count} малі букви\"},\"symbol\":{\"few\":\"повинен включати хоча б %{count} розділові знаки або символи\",\"many\":\"повинен включати хоча б %{count} розділових знаків або символів\",\"one\":\"повинен включати хоча б один розділовий знак або символ\",\"other\":\"повинен включати хоча б %{count} розділові знаки або символи\"},\"upper\":{\"few\":\"повинен включати хоча б %{count} прописні букви\",\"many\":\"повинен включати хоча б %{count} прописних букв\",\"one\":\"повинен включати хоча б одну прописну букву\",\"other\":\"повинен включати хоча б %{count} прописні букви\"}},\"password_format\":\"Must contain uppercase AND lowercase letters and at least one number\",\"password_too_long\":\"is too long\",\"present\":\"must be blank\",\"required\":\"must exist\",\"taken\":\"has already been taken\",\"taken_in_past\":\"раніше використовувався.\",\"too_long\":{\"one\":\"is too long (maximum is 1 character)\",\"other\":\"is too long (maximum is %{count} characters)\"},\"too_short\":{\"one\":\"is too short (minimum is 1 character)\",\"other\":\"is too short (minimum is %{count} characters)\"},\"wrong_length\":{\"one\":\"is the wrong length (should be 1 character)\",\"other\":\"is the wrong length (should be %{count} characters)\"}}},\"flash\":{\"actions\":{\"create\":{\"notice\":\"%{resource_name} was successfully created.\"},\"destroy\":{\"alert\":\"%{resource_name} could not be destroyed.\",\"notice\":\"%{resource_name} was successfully destroyed.\"},\"update\":{\"notice\":\"%{resource_name} was successfully updated.\"}}},\"hello_world\":\"Hello world\",\"helpers\":{\"select\":{\"prompt\":\"Please select\"},\"submit\":{\"create\":\"Create %{model}\",\"submit\":\"Save %{model}\",\"update\":\"Update %{model}\"}},\"hi\":\"Hi\",\"mailers\":{\"common\":{\"chummy_sign_off\":\"Have a good one.\",\"final_note\":\"P.S.: If you think you received this email accidentally, then something weird could be going on. Hit reply and a member of the %{brand_name} team will investigate.\",\"team_sign_off\":\"- The %{brand_name} Team\"},\"confirmation_instructions_email\":{\"crm\":{\"salesforce\":{\"resource_confirmed\":\"Someone has requested a resend of a confirmation email. You do not need to confirm your email address because your account is configured to use Salesforce to sign in.\",\"resource_unconfirmed\":\"You do not need to confirm your email address because your account is configured to use Salesforce to sign in, please complete the sign up process by clicking the button below to sign in to %{brand_name} via Salesforce.\"}},\"non_crm\":{\"confirm_link\":\"Confirm my account\",\"welcome\":\"Welcome to %{brand_name}. As the final step in the process you\\'ll need to confirm your account by clicking on the link below.\"},\"subject\":\"Confirmation instructions for %{domain}\"},\"flagged_events_mailer\":{\"from\":\"Flagged events - %{brand_name} \\\\u003cflagged_events@mailer.%{domain}\\\\u003e\"},\"mobile_registration_email\":{\"alert_cs_registration_locked\":{\"subject\":\"%{brand_name}: user has had mobile registration locked, too many failed attempts\"},\"dispatch_registration_PIN\":{\"further_instructions\":\"If you are NOT attempting to register for the %{brand_name} Mobile app then please let us know at %{support_email_link} - thank you.\",\"introduction\":\"Here is your mobile app registration PIN:\",\"subject\":\"%{brand_name} Mobile Registration Verification\"},\"too_many_failed_attempts\":{\"introduction\":\"We have received too many failed mobile device registration attempts for your account and we will block any further requests. If you have not attempted to register a mobile device with us in the last hour then please let us know as it is likely someone has tried on your behalf. If you have been trying to register a device please contact %{support_email_link} and we can help unlock your account and get you registered.\",\"subject\":\"%{brand_name}: too many failed registration attempts\"}},\"org_list_download_mail\":{\"dispatch_link\":{\"introduction\":\"We have finished meshing your %{crm_brand_name} data with the companies in your \\\\\"%{list_name}\\\\\" list.\",\"subject\":\"%{brand_name}: your file download of \\'%{list_name}\\' is ready\"},\"failed\":{\"instructions\":\"You could try again in a little while. If you already have and are receiving this email again, please contact us at %{support_email_link}\",\"introduction\":\"We are really sorry, but something went wrong with creating your download of %{crm_brand_name} data for your \\\\\"%{list_name}\\\\\" list.\",\"subject\":\"%{brand_name}: your file download of \\'%{list_name}\\' failed\"}},\"reset_password_instructions_email\":{\"crm\":{\"salesforce\":{\"change_requested\":\"Someone has requested a change to your password. Your account is configured to use Salesforce to sign in.\"}},\"fishy_fine_print\":\"If you did not request a password change, then something weird is going on. Someone may be trying to access your account (unsuccessfully). Please reply to this email and let us know. We will take steps to make sure it stops.\",\"non_crm\":{\"change_password_link\":\"Change my password\",\"change_requested\":\"Someone has requested a change to your password, you can do this via the link below.\"},\"subject\":\"Password reset instructions for %{domain}\"},\"sales_force_mail\":{\"processing_completed\":{\"bullet_points\":[\"Only show events associated with companies in your Salesforce account\",\"Add new contacts and accounts to your Salesforce account without leaving %{brand_name}\",\"Access the \\'Salesforce details\\' panel on company dashboards where you can see open tasks, team interactions, opportunities, and more!\"],\"further_instructions\":\"We\\'re here to help. If you run into any questions or challenges, please contact us at %{support_email_link} and a member of our team would be more than happy to help.\",\"get_the_most\":\"To get the most from the integration, check out the \\'Mine Salesforce for opportunities\\' guide in the Help Center.\",\"guide_button\":\"Take me to the guide\",\"introduction\":\"Good news - your Salesforce account is now integrated with %{brand_name}. Now you’ll be able to:\"}},\"segment_contact\":{\"report_manager\":{\"fail_subject\":\"%{brand_name}: The PDF report generation failed\",\"success_subject\":\"%{brand_name}: Your PDF for %{company_name} is attached\"}},\"sf_token_expiry_email\":{\"further_instructions\":\"If you run into any questions or challenges, please contact us at %{support_email_link} and a member of our team would be more than happy to help.\",\"introduction\":\"Unfortunately the connection established for you between %{brand_name} and your %{crm_brand_name} account has expired. We will not be able to update your lists in %{brand_name} to reflect your %{crm_brand_name} database. To re-establish the connection, you just need to log in to %{brand_name} using your %{crm_brand_name}.\",\"subject\":\"%{brand_name} to %{crm_brand_name} connection has expired\"},\"share_list_mail\":{\"introduction\":\"%{user_name} shared a list with you: \",\"subject\":\"[%{brand_name} - shared list] %{list_name}\"},\"trial_expiry_mail\":{\"seven_days_to_go\":{\"further_instructions\":\"A member of our fabulous Customer Success team will arrange a welcome call with you to understand your goals and priorities, and will then give you a personalized Tour de %{brand_name} so you can easily access the information that is most valuable to you.\",\"instructions\":\"If you\\'d like continued access to the platform with our flexible month-to-month subscription, please ensure you contact %{support_email_link} ahead of: %{deadline}\",\"introduction\":\"Time flies when you\\'re uncovering new business opportunities! Your %{brand_name} trial is coming to an end next week.\",\"sign_off\":\"We look forward to helping you reach your sales goals!\",\"subject\":\"Just a heads up that your %{brand_name} trial is ending in seven days\"},\"seven_days_to_go_warning_for_cs\":{\"introduction\":\"%{user_name} shared a list with you: \",\"subject\":\"[%{brand_name} - shared list] %{list_name}\"}},\"unlock_instructions_email\":{\"crm\":{\"salesforce\":{\"change_requested\":\"You are being sent this email either because of one too many unsuccessful non-Salesforce log-in attempts or someone has requested an unlock email. %{brand_name} has not locked your account because your account is configured to use Salesforce to sign in.\",\"password_forgotten\":\"If you have forgotten your Salesforce password or think your account has been locked by Salesforce, please follow the instructions provided on the Salesforce sign in page.\"}},\"fishy_fine_print\":\"If you have not been (unsuccessfully) trying to log in to your account, then something weird is going on. Someone may be trying to access your account (unsuccessfully). Please reply to this email and let us know. We will take steps to make sure it stops.\",\"non_crm\":{\"change_requested\":\"For security reasons we have locked your account because of too many log-in attempts. To unlock your account, click the link below.\",\"unlock_account_link\":\"Unlock my account\"},\"subject\":\"Unlock instructions for %{domain}\"}},\"mongoid\":{\"errors\":{\"messages\":{\"ambiguous_relationship\":{\"message\":\"Ambiguous associations %{candidates} defined on %{klass}.\",\"resolution\":\"On the %{name} association on %{inverse} you must add an :inverse_of option to specify the exact association on %{klass} that is the opposite of %{name}.\",\"summary\":\"When Mongoid attempts to set an inverse document of an association in memory, it needs to know which association it belongs to. When setting %{name}, Mongoid looked on the class %{inverse} for a matching association, but multiples were found that could potentially match: %{candidates}.\"},\"blank_in_locale\":\"can\\'t be blank in %{location}\",\"callbacks\":{\"message\":\"Calling %{method} on %{klass} resulted in a false return from a callback.\",\"resolution\":\"Double check all before callbacks to make sure they are not unintentionally returning false.\",\"summary\":\"If a before callback returns false when using Document.create!, Document#save!, or Document#update_attributes! this error will get raised since the document did not actually get saved.\"},\"calling_document_find_with_nil_is_invalid\":{\"message\":\"Calling Document.find with nil is invalid.\",\"resolution\":\"Most likely this is caused by passing parameters directly through to the find, and the parameter either is not present or the key from which it is accessed is incorrect.\",\"summary\":\"Document.find expects the parameters to be 1 or more ids, and will return a single document if 1 id is provided, otherwise an array of documents if multiple ids are provided.\"},\"create_collection_failure\":{\"message\":\"Cannot create collection %{collection_name} with options %{collection_options}. The following error was raised: %{error}.\",\"resolution\":\"Double check that collection options for the collection %{collection_name} are valid. Consult with Ruby driver documentation and MongoDB documentation if the desired options are supported by your version of the server.\",\"summary\":\"The server rejected createCollection command with given collection options. This may happen when some of the options are invalid, or not supported by your version of the server.\"},\"criteria_argument_required\":{\"message\":\"Calling Criteria methods with nil arguments is not allowed.\",\"resolution\":\"Invoke Criteria methods with non-nil arguments or omit the respective invocations.\",\"summary\":\"Arguments to Criteria methods cannot be nil, and most Criteria methods require at least one argument. Only logical operations (and, or, nor and not), `all\\' and `where\\' can be called without arguments. The method that was called with nil argument was: %{query_method}.\"},\"delete_restriction\":{\"message\":\"Cannot destroy %{document} because of dependent \\'%{relation}\\'.\",\"resolution\":\"Don\\'t attempt to delete the parent %{document} when it has children, or change the dependent option on the association.\",\"summary\":\"When defining \\'%{relation}\\' with a :dependent =\\\\u003e :restrict_with_error, Mongoid will raise an error when attempting to destroy the %{document} when the child \\'%{relation}\\' still has documents in it.\"},\"destroy_restrict_with_error_dependencies_exist\":\"is not empty and prevents the document from being destroyed\",\"document_not_destroyed\":{\"message\":\"%{klass} with id %{id} was not destroyed.\",\"resolution\":\"Check the before/after destroy callbacks to ensure that the return values are truthy for the chain to continue.\",\"summary\":\"When calling %{klass}#destroy! and a callback halts the destroy callback chain by returning a false value, the deletion will not actually occur.\"},\"document_not_found\":{\"message\":\"Document(s) not found for class %{klass} with id(s) %{missing}.\",\"resolution\":\"Search for an id that is in the database or set the Mongoid.raise_not_found_error configuration option to false, which will cause nil to be returned instead of raising this error when searching for a single id, or only the matched documents when searching for multiples.\",\"summary\":\"When calling %{klass}.find with an id or array of ids, each parameter must match a document in the database or this error will be raised. The search was for the id(s): %{searched} (%{total} total) and the following ids were not found: %{missing}.\"},\"document_with_attributes_not_found\":{\"message\":\"Document not found for class %{klass} with attributes %{attributes}.\",\"resolution\":\"Search for attributes that are in the database or set the Mongoid.raise_not_found_error configuration option to false, which will cause nil to be returned instead of raising this error.\",\"summary\":\"When calling %{klass}.find_by with a hash of attributes, all attributes provided must match a document in the database or this error will be raised.\"},\"document_with_shard_key_not_found\":{\"message\":\"Document not found for class %{klass} with id %{missing} and shard key %{shard_key}.\",\"resolution\":\"Search for an id/shard key that is in the database or set the Mongoid.raise_not_found_error configuration option to false, which will cause nil to be returned instead of raising this error.\",\"summary\":\"When calling %{klass}.find with an id and a shard key, each parameter must match a document in the database or this error will be raised. The search was for the id: %{missing} with shard_key: %{shard_key} and it was not found.\"},\"drop_collection_failure\":{\"message\":\"Cannot drop collection %{collection_name}.\",\"resolution\":\"Try to drop the collection manually using Ruby driver or mongo shell.\",\"summary\":\"Mongoid tried to drop collection %{collection_name}, but the collection still exists in the database.\"},\"empty_config_file\":{\"message\":\"Empty configuration file: %{path}.\",\"resolution\":\"Ensure your configuration file contains the correct contents. Refer to: https://www.mongodb.com/docs/mongoid/current/reference/configuration/\",\"summary\":\"Your mongoid.yml configuration file appears to be empty.\"},\"immutable_attribute\":{\"message\":\"Attempted to change the immutable attribute \\'%{name}\\' with the value: %{value}.\",\"resolution\":\"Do not attempt to update the value of \\'%{name}\\' after the document is persisted.\",\"summary\":\"Immutable attributes can only have values set when the document is a new record.\"},\"in_memory_collation_not_supported\":{\"message\":\"A collation option cannot be applied when querying documents in-memory.\",\"resolution\":\"Remove the collation option from the query.\",\"summary\":\"The query being run against documents in memory has a collation option set. A collation option is only supported if the query is executed on a MongoDB server with version \\\\u003e= 3.4.\"},\"invalid_async_query_executor\":{\"message\":\"Invalid async_query_executor option: %{executor}.\",\"resolution\":\"Pick an allowed option or fix the typo. If you were expecting the option to be there, please consult the following page with respect to Mongoid\\'s configuration:\\\\n\\\\n   https://www.mongodb.com/docs/mongoid/current/reference/configuration/#mongoid-configuration-options\",\"summary\":\"A invalid async query executor was specified. The valid options are: %{options}.\"},\"invalid_collection\":{\"message\":\"Access to the collection for %{klass} is not allowed.\",\"resolution\":\"For access to the collection that the embedded document is in, use %{klass}#_root.collection, or do not attempt to persist an embedded document without a parent set.\",\"summary\":\"%{klass}.collection was called, and %{klass} is an embedded document - it resides within the collection of the root document of the hierarchy.\"},\"invalid_config_file\":{\"message\":\"Invalid configuration file: %{path}.\",\"resolution\":\"Ensure your configuration file contains the correct contents. Refer to: https://www.mongodb.com/docs/mongoid/current/reference/configuration/\",\"summary\":\"Your mongoid.yml configuration file does not contain the correct file structure.\"},\"invalid_config_option\":{\"message\":\"Invalid configuration option: %{name}.\",\"resolution\":\"Remove the invalid option or fix the typo. If you were expecting the option to be there, please consult the following page with respect to Mongoid\\'s configuration:\\\\n\\\\n   http://mongoid.org/en/mongoid/docs/installation.html\",\"summary\":\"A invalid configuration option was provided in your mongoid.yml, or a typo is potentially present. The valid configuration options are: %{options}.\"},\"invalid_dependent_strategy\":{\"message\":\"Invalid dependent strategy: %{invalid_strategy}.\",\"resolution\":\"Change the dependent strategy to one of the valid types.\",\"summary\":\"An invalid dependent strategy was defined for the association: %{association}. The valid strategies are: %{valid_strategies}.\"},\"invalid_discriminator_key_target\":{\"message\":\"Setting the discriminator key on a child class is not allowed.\",\"resolution\":\"Try setting the discriminator key on %{superclass} or one of %{class_name}\\'s ancestors.\",\"summary\":\"The discriminator key on the class %{class_name} was attempted to be changed. Changing the discriminator key on a child class is not allowed.\"},\"invalid_dot_dollar_assignment\":{\"message\":\"Cannot set the %{attr} attribute on the %{klass} class.\",\"resolution\":\"In order to set fields that start with a dollar sign ($) or contain a dot/period (.), the aggregation pipeline can be used. MongoDB provides specific operators for working with these fields. Refer to the MongoDB documentation here: https://www.mongodb.com/docs/manual/core/dot-dollar-considerations/\",\"summary\":\"Calling the setters for fields that start with a dollar sign ($) or contain a dot/period (.) is prohibited. See the Mongoid documentation on Field Names with Dots/Periods (.) and Dollar Signs ($) for more information.\"},\"invalid_elem_match_operator\":{\"message\":\"Invalid $elemMatch operator \\'%{operator}\\'.\",\"resolution\":\"Valid field operators are: %{valid_operators}. Ensure you are using one of these operators.\",\"summary\":\"You misspelled an operator or are using an operator that Mongoid does not support.\"},\"invalid_estimated_count_criteria\":{\"message\":\"Invalid criteria for estimated_count.\",\"resolution\":\"Try calling estimated_count directly on the class: %{class_name}.estimated_count.\\\\n\\\\n  If the class defines a default scope, use unscoped: %{class_name}.unscoped.estimated_count.\",\"summary\":\"Estimated count is strictly a collection-level operation and cannot be called on a filtered criteria.\"},\"invalid_expression_operator\":{\"message\":\"Invalid expression operator \\'%{operator}\\'.\",\"resolution\":\"Valid expression operators are: %{valid_operators}. Ensure you are using one of these operators.\",\"summary\":\"You misspelled an operator, are using an operator that Mongoid does not support, or are trying to use a field-level operator on expression level.\"},\"invalid_field\":{\"message\":\"Defining a field named \\'%{field}\\' is not allowed.\",\"resolution\":\"Use Mongoid.destructive_fields to see what names are not allowed, and don\\'t use these names. These include names that also conflict with core Ruby methods on Object, Module, Enumerable, or included gems that inject methods into these or Mongoid internals.\",\"summary\":\"Defining this field would override the method \\'%{name}\\', which would cause issues with expectations around the original method and cause extremely hard to debug issues. The original method was defined in:\\\\n   Object: %{origin}\\\\n   File: %{file}\\\\n   Line: %{line}\"},\"invalid_field_operator\":{\"message\":\"Invalid field operator \\'%{operator}\\'.\",\"resolution\":\"Valid field operators are: %{valid_operators}. Ensure you are using one of these operators.\",\"summary\":\"You misspelled an operator, are using an operator that Mongoid does not support, or are trying to use an expression-level operator on field level.\"},\"invalid_field_option\":{\"message\":\"Invalid option :%{option} provided for field :%{name}.\",\"resolution\":\"When defining the field :%{name} on \\'%{klass}\\', please provide valid options for the field. These are currently: %{valid}. If you meant to define a custom field option, please do so first as follows:\\\\n\\\\n   Mongoid::Fields.option :%{option} do |model, field, value|\\\\n     # Your logic here...\\\\n   end\\\\n   class %{klass}\\\\n     include Mongoid::Document\\\\n     field :%{name}, %{option}: true\\\\n   end\\\\n\\\\n Refer to: https://www.mongodb.com/docs/mongoid/current/reference/fields/#custom-field-options\",\"summary\":\"Mongoid requires that you only provide valid options on each field definition in order to prevent unexpected behavior later on.\"},\"invalid_field_type\":{\"message\":\"Invalid field type %{type_inspection} for field \\'%{field}\\' on model \\'%{klass}\\'.\",\"resolution\":\"Please provide a valid type value for the field. Refer to: https://www.mongodb.com/docs/mongoid/current/reference/fields/#using-symbols-or-strings-instead-of-classes\",\"summary\":\"Model \\'%{klass}\\' defines a field \\'%{field}\\' with an unknown type value %{type_inspection}.\"},\"invalid_global_executor_concurrency\":{\"message\":\"Invalid global_executor_concurrency option.\",\"resolution\":\"Set global_executor_concurrency option to :global_thread_pool or remove global_executor_concurrency option.\",\"summary\":\"You set global_executor_concurrency while async_query_executor option is not set to :global_thread_pool. The global_executor_concurrency is allowed only for the global thread pool executor.\"},\"invalid_includes\":{\"message\":\"Invalid includes directive: %{klass}.includes(%{args})\",\"resolution\":\"Ensure that each parameter passed to %{klass}.includes is a valid name of an association on the %{klass} model. These are: %{relations}.\",\"summary\":\"Eager loading in Mongoid only supports providing arguments to %{klass}.includes that are the names of associations on the %{klass}.\"},\"invalid_index\":{\"message\":\"Invalid index specification on %{klass}: %{spec}, %{options}\",\"resolution\":\"Ensure that the index conforms to the correct syntax and has the correct options.\\\\n\\\\n Valid options are:\\\\n   background: true|false\\\\n   database: \\'database_name\\'\\\\n   name: \\'index_name\\'\\\\n   sparse: true|false\\\\n   unique: true|false\\\\n   min: 1\\\\n   max: 1\\\\n   bits: 26\\\\n   key: 26\\\\n   bucket_size : 1\\\\n   sphere_version : 1\\\\n   text_version : 1\\\\n   version : 1\\\\n   weights: { content: 1, title: 2 }\\\\n   expire_after_seconds: number_of_seconds\\\\n   partial_filter_expression\\\\n   storage_engine\\\\n   language_override\\\\n   default_language\\\\n   collation\\\\n   wildcard_projection: { \\'path.to.field.a\\': 1, \\'path.to.field.b\\': 0 }\\\\n Valid types are: 1, -1, \\'2d\\', \\'2dsphere\\', \\'geoHaystack (deprecated)\\', \\'text\\', \\'hashed\\'\\\\n\\\\n Example:\\\\n   class Band\\\\n     include Mongoid::Document\\\\n     index({ name: 1, label: -1 }, { sparse: true })\\\\n     index({ location: \\'2d\\' }, { background: true })\\\\n   end\\\\n\\\\n\",\"summary\":\"Indexes in Mongoid are defined as a hash of field name and direction/2d pairs, with a hash for any additional options.\"},\"invalid_options\":{\"message\":\"Invalid option :%{invalid} provided to association :%{name}.\",\"resolution\":\"Valid options are: %{valid}, make sure these are the ones you are using.\",\"summary\":\"Mongoid checks the options that are passed to the association macros to ensure that no ill side effects occur by letting something slip by.\"},\"invalid_path\":{\"message\":\"Having a root path assigned for %{klass} is invalid.\",\"resolution\":\"Most likely your embedded model, %{klass} is also referenced via a has_many from a root document in another collection. Double check the association definitions and fix any instances where embedded documents are improperly referenced from other collections.\",\"summary\":\"Mongoid has two different path objects for determining the location of a document in the database, Root and Embedded. This error is raised when an embedded document somehow gets a root path assigned.\"},\"invalid_persistence_option\":{\"message\":\"Invalid persistence option :%{invalid}.\",\"resolution\":\"Valid options are: %{valid}, make sure these are the ones you are using.\",\"summary\":\"The options used to change the persistence context must be one of the valid options for a mongo client, or a collection name.\"},\"invalid_relation\":{\"message\":\"Defining an association named \\'%{name}\\' is not allowed.\",\"resolution\":\"Use Mongoid.destructive_fields to see what names are not allowed, and don\\'t use these names. These include names that also conflict with core Ruby methods on Object, Module, Enumerable, or included gems that inject methods into these or Mongoid internals.\",\"summary\":\"Defining this association would override the method \\'%{name}\\', which would cause issues with expectations around the original method and cause extremely hard to debug issues. The original method was defined in:\\\\n   Object: %{origin}\\\\n   File: %{file}\\\\n   Line: %{line}\"},\"invalid_relation_option\":{\"message\":\"Invalid association option :%{option} for association \\'%{name}\\' on class %{klass}.\",\"resolution\":\"Valid options are: %{valid_options}, make sure you use only those.\",\"summary\":\"An invalid option was provided for an association.\"},\"invalid_scope\":{\"message\":\"Defining a scope of value %{value} on %{klass} is not allowed.\",\"resolution\":\"Change the scope to be a proc wrapped criteria.\\\\n\\\\n Example:\\\\n   class Band\\\\n     include Mongoid::Document\\\\n     scope :inactive, -\\\\u003e{ where(active: false) }\\\\n   end\\\\n\\\\n\",\"summary\":\"Scopes in Mongoid must be procs that wrap criteria objects.\"},\"invalid_session_nesting\":{\"message\":\"A session was started while another session was being used.\",\"resolution\":\"Only use one session at a time; sessions cannot be nested.\",\"summary\":\"Sessions cannot be nested. Only one session can be used in a thread at once.\"},\"invalid_session_use\":{\"message\":\"A session was attempted to be used with a model whose client cannot use that session.\",\"resolution\":\"Only execute operations on the model class or instances of the model through which the session was created. Otherwise, ensure that all models on which operations are executed in the session block share the same driver client. For example, a model may have a different client specified in its \\'store_in\\' options.\\\\n\\\\n\",\"summary\":\"Sessions are started via driver clients (Model#mongo_client) and, in most cases, driver clients are shared across models. When different models have their own clients, a session cannot be obtained via one model and used for operations on another model.\"},\"invalid_set_polymorphic_relation\":{\"message\":\"The %{name} attribute can\\'t be set to an instance of %{other_klass} as %{other_klass} has multiple associations referencing %{klass} as %{name}.\",\"resolution\":\"Set the values from the parent, or redefine the association with only a single definition in the parent.\",\"summary\":\"If the parent class of a polymorphic association has multiple definitions for the same association, the values must be set from the parent side and not the child side since Mongoid cannot determine from the child side which association to go in.\"},\"invalid_storage_options\":{\"message\":\"Invalid options passed to %{klass}.store_in: %{options}.\",\"resolution\":\"Change the options passed to store_in to match the documented API, and ensure all keys in the options hash are symbols.\\\\n\\\\n Example:\\\\n   class Band\\\\n     include Mongoid::Document\\\\n     store_in collection: \\'artists\\', database: \\'music\\'\\\\n   end\\\\n\\\\n\",\"summary\":\"The :store_in macro takes only a hash of parameters with the keys :database, :collection, :collection_options, or :client.\"},\"invalid_time\":{\"message\":\"\\'%{value}\\' is not a valid Time.\",\"resolution\":\"Make sure to pass parsable values to the field setter for Date, DateTime, and Time objects. When this is a String it needs to be valid for Time.parse. Other objects must be valid to pass to Time.local.\",\"summary\":\"Mongoid tries to serialize the values for Date, DateTime, and Time into proper UTC times to store in the database. The provided value could not be parsed.\"},\"inverse_not_found\":{\"message\":\"When adding a(n) %{klass} to %{base}#%{name}, Mongoid could not determine the inverse foreign key to set. The attempted key was \\'%{inverse}\\'.\",\"resolution\":\"If an inverse is not required, like a belongs_to or has_and_belongs_to_many, ensure that :inverse_of =\\\\u003e nil is set on the association. If the inverse is needed, most likely the inverse cannot be figured out from the names of the associations and you will need to explicitly tell Mongoid on the association what the inverse is.\\\\n\\\\n Example:\\\\n   class Car\\\\n     include Mongoid::Document\\\\n     has_one :engine, class_name: \\\\\"Motor\\\\\", inverse_of: :machine\\\\n   end\\\\n\\\\n   class Motor\\\\n     include Mongoid::Document\\\\n     belongs_to :machine, class_name: \\\\\"Car\\\\\", inverse_of: :engine\\\\n   end\",\"summary\":\"When adding a document to an association, Mongoid attempts to link the newly added document to the base of the association in memory, as well as set the foreign key to link them on the database side. In this case Mongoid could not determine what the inverse foreign key was.\"},\"message_title\":\"message\",\"mixed_client_configuration\":{\"message\":\"Both uri and standard configuration options defined for client: \\'%{name}\\'.\",\"resolution\":\"Provide either only a uri as configuration or only standard options.\",\"summary\":\"Instead of simply giving uri or standard options a preference order, Mongoid assumes that you have made a mistake in your configuration and requires that you provide one or the other, but not both. The options that were provided were: %{config}.\"},\"mixed_relations\":{\"message\":\"Referencing a(n) %{embedded} document from the %{root} document via a non-embedded association is not allowed since the %{embedded} is embedded.\",\"resolution\":\"Consider not embedding %{embedded}, or do the key storage and access in a custom manner in the application code.\",\"summary\":\"In order to properly access a(n) %{embedded} from %{root} the reference would need to go through the root document of %{embedded}. In a simple case this would require Mongoid to store an extra foreign key for the root, in more complex cases where %{embedded} is multiple levels deep a key would need to be stored for each parent up the hierarchy.\"},\"nested_attributes_metadata_not_found\":{\"message\":\"Could not find metadata for association \\'%{name}\\' on model: %{klass}.\",\"resolution\":\"Make sure that there is an association defined named \\'%{name}\\' on %{klass} or that the association definition comes before the accepts_nested_attributes_for macro in the model - order matters so that Mongoid has access to the metadata.\\\\n\\\\n Example:\\\\n   class Band\\\\n     include Mongoid::Document\\\\n     has_many :albums\\\\n     accepts_nested_attributes_for :albums\\\\n   end\\\\n\\\\n\",\"summary\":\"When defining nested attributes for an association, Mongoid needs to access the metadata for the association \\'%{name}\\' in order if add autosave functionality to it, if applicable. Either no association named \\'%{name}\\' could be found, or the association had not been defined yet.\"},\"no_client_config\":{\"message\":\"No configuration could be found for a client named \\'%{name}\\'.\",\"resolution\":\"Double check your mongoid.yml to make sure under the clients key that a configuration exists for \\'%{name}\\'. If you have set the configuration programmatically, ensure that \\'%{name}\\' exists in the configuration hash.\",\"summary\":\"When attempting to create the new client, Mongoid could not find a client configuration for the name: \\'%{name}\\'. This is necessary in order to know the host, port, and options needed to connect.\"},\"no_client_database\":{\"message\":\"No database provided for client configuration: :%{name}.\",\"resolution\":\"If configuring via a mongoid.yml, ensure that within your :%{name} section a :database value for the client\\'s default database is defined.\\\\n\\\\n Example:\\\\n   development:\\\\n     clients:\\\\n       %{name}:\\\\n         database: my_app_db\\\\n         hosts:\\\\n           - localhost:27017\\\\n\\\\n\",\"summary\":\"Each client configuration must provide a database so Mongoid knows where the default database to persist to. What was provided was: %{config}.\"},\"no_client_hosts\":{\"message\":\"No hosts provided for client configuration: :%{name}.\",\"resolution\":\"If configuring via a mongoid.yml, ensure that within your :%{name} section a :hosts value for the client hosts is defined.\\\\n\\\\n Example:\\\\n   development:\\\\n     clients:\\\\n       %{name}:\\\\n         database: my_app_db\\\\n         hosts:\\\\n           - localhost:27017\\\\n\\\\n\",\"summary\":\"Each client configuration must provide hosts so Mongoid knows where the database server is located. What was provided was: %{config}.\"},\"no_clients_config\":{\"message\":\"No clients configuration provided.\",\"resolution\":\"Double check your mongoid.yml to make sure that you have a top-level clients key with at least 1 default client configuration for it. You can regenerate a new mongoid.yml for assistance via `rails g mongoid:config`.\\\\n\\\\n Example:\\\\n   development:\\\\n     clients:\\\\n       default:\\\\n         database: mongoid_dev\\\\n         hosts:\\\\n           - localhost:27017\\\\n\\\\n\",\"summary\":\"Mongoid\\'s configuration requires that you provide details about each client that can be connected to, and requires in the clients config at least 1 default client to exist.\"},\"no_default_client\":{\"message\":\"No default client configuration is defined.\",\"resolution\":\"If configuring via a mongoid.yml, ensure that within your :clients section a :default client is defined.\\\\n\\\\n Example:\\\\n   development:\\\\n     clients:\\\\n       default:\\\\n         hosts:\\\\n           - localhost:27017\\\\n\\\\n\",\"summary\":\"The configuration provided settings for: %{keys}, but Mongoid requires a :default to be defined at minimum.\"},\"no_documents_found\":{\"message\":\"Could not find a document of class %{klass}.\",\"resolution\":\"Create a document of class %{klass} or use a finder method that does not raise an exception when no documents are found.\",\"summary\":\"Mongoid attempted to find a document of the class %{klass} but none exist.\"},\"no_environment\":{\"message\":\"Could not load the configuration since no environment was defined.\",\"resolution\":\"Please ensure an environment is set in one of the listed locations. The environment must be explicitly set.\",\"summary\":\"Mongoid could not determine the environment to use because it was not specified in any of the following locations: Rails.env, Sinatra::Base.environment, ENV[\\\\\"RACK_ENV\\\\\"], ENV[\\\\\"MONGOID_ENV\\\\\"]. Without knowing the environment, Mongoid cannot load its configuration.\"},\"no_map_reduce_output\":{\"message\":\"No output location was specified for the map/reduce operation.\",\"resolution\":\"Provide the location that the output of the operation is to go by chaining an #out call to the map/reduce.\\\\n\\\\n Example:\\\\n   Band.map_reduce(map, reduce).out(inline: 1)\\\\n\\\\n Valid options for the out function are:\\\\n   inline: 1\\\\n   merge: \\'collection-name\\'\\\\n   replace: \\'collection-name\\'\\\\n   reduce: \\'collection-name\\'\\\\n\\\\n\",\"summary\":\"When executing a map/reduce, you must provide the output location of the results. The attempted command was: %{command}.\"},\"no_metadata\":{\"message\":\"Metadata not found for document of type %{klass}.\",\"resolution\":\"Ensure that your associations on the %{klass} model are all properly defined, and that the inverse associations are also properly defined. Embedded associations must have both the parent (embeds_one/embeds_many) and the inverse (embedded_in) present in order to work properly.\",\"summary\":\"Mongoid sets the metadata of an association on the document when it is either loaded from within the association, or added to one. The presence of the metadata is required in order to provide various functionality around associations. Most likely you are getting this error because the document is embedded and was attempted to be persisted without being associated with a parent, or the association was not properly defined.\"},\"no_parent\":{\"message\":\"Cannot persist embedded document %{klass} without a parent document.\",\"resolution\":\"Ensure that you\\'ve set the parent association if instantiating the embedded document directly, or always create new embedded documents via the parent association.\",\"summary\":\"If the document is embedded, in order to be persisted it must always have a reference to its parent document. This is most likely caused by either calling %{klass}.create or %{klass}.create! without setting the parent document as an attribute.\"},\"readonly_attribute\":{\"message\":\"Attempted to set the readonly attribute \\'%{name}\\' with the value: %{value}.\",\"resolution\":\"Don\\'t define \\'%{name}\\' as readonly, or do not attempt to update its value after the document is persisted.\",\"summary\":\"Attributes flagged as readonly via Model.attr_readonly can only have values set when the document is a new record.\"},\"readonly_document\":{\"message\":\"Attempted to persist a readonly document of class \\'%{klass}\\'.\",\"resolution\":\"Don\\'t attempt to persist documents that are flagged as readonly.\",\"summary\":\"Documents that are marked readonly cannot be persisted.\"},\"resolution_title\":\"resolution\",\"scope_overwrite\":{\"message\":\"Cannot create scope :%{scope_name}, because of existing method %{model_name}.%{scope_name}.\",\"resolution\":\"Change the name of the scope so it does not conflict with the already defined method %{model_name}, or set the configuration option Mongoid.scope_overwrite_exception to false, which is its default. In this case a warning will be logged.\",\"summary\":\"When defining a scope that conflicts with a method that already exists on the model, this error will get raised if Mongoid.scope_overwrite_exception is set to true.\"},\"sessions_not_supported\":{\"message\":\"Sessions are not supported by the connected server(s).\",\"resolution\":\"Verify that all servers in your deployment are at least version 3.6 or don\\'t attempt to use sessions with older server versions.\",\"summary\":\"A session was attempted to be used with a MongoDB server version that doesn\\'t support sessions. Sessions are supported in MongoDB server versions 3.6 and higher.\"},\"summary_title\":\"summary\",\"too_many_nested_attribute_records\":{\"message\":\"Accepting nested attributes for %{association} is limited to %{limit} documents.\",\"resolution\":\"The limit is set as an option to the macro, for example: accepts_nested_attributes_for :%{association}, limit: %{limit}. Consider raising this limit or making sure no more are sent than the set value.\",\"summary\":\"More documents were sent to be processed than the allowed limit.\"},\"unknown_attribute\":{\"message\":\"Attempted to set a value for \\'%{name}\\' which is not allowed on the model %{klass}.\",\"resolution\":\"Define the field \\'%{name}\\' in %{klass}, or include Mongoid::Attributes::Dynamic in %{klass} if you intend to store values in fields that are not explicitly defined.\",\"summary\":\"%{klass}#%{name}= was called but there is no \\'%{name}\\' field defined in the model, and Mongoid::Attributes::Dynamic is not included. This error is also raised instead of NoMethodError if the unknown attribute is passed to any method that accepts an attributes hash, such as #attributes=.\"},\"unknown_model\":{\"message\":\"Attempted to instantiate an object of the unknown model \\'%{klass}\\'.\",\"resolution\":\"The _type field is a reserved one used by Mongoid to determine the class for instantiating an object. Please don\\'t save data in this field or ensure that any values in this field correspond to valid models.\",\"summary\":\"A document with the value \\'%{value}\\' at the key \\'_type\\' was used to instantiate a model object but Mongoid cannot find this Class.\"},\"unsaved_document\":{\"message\":\"Attempted to save %{document} before the parent %{base}.\",\"resolution\":\"Make sure to only use create or create! when the parent document %{base} is persisted.\",\"summary\":\"You cannot call create or create! through the association (%{document}) whose parent (%{base}) is not already saved. This would cause the database to be out of sync since the child could potentially reference a nonexistent parent.\"},\"unsupported_javascript\":{\"message\":\"Executing Javascript $where selector on an embedded criteria is not supported.\",\"resolution\":\"Please provide a standard hash to #where when the criteria is for an embedded association.\",\"summary\":\"Mongoid only supports providing a hash of arguments to #where criterion on embedded documents. Since %{klass} is embedded, the expression %{javascript} is not allowed.\"},\"validations\":{\"message\":\"Validation of %{document} failed.\",\"resolution\":\"Try persisting the document with valid data or remove the validations.\",\"summary\":\"The following errors were found: %{errors}\"}}}},\"number\":{\"currency\":{\"format\":{\"delimiter\":\",\",\"format\":\"%u%n\",\"negative_format\":\"-%u%n\",\"precision\":2,\"separator\":\".\",\"significant\":false,\"strip_insignificant_zeros\":false,\"unit\":\"$\"}},\"format\":{\"delimiter\":\",\",\"precision\":3,\"round_mode\":\"default\",\"separator\":\".\",\"significant\":false,\"strip_insignificant_zeros\":false},\"human\":{\"decimal_units\":{\"format\":\"%n %u\",\"units\":{\"billion\":\"Billion\",\"million\":\"Million\",\"quadrillion\":\"Quadrillion\",\"thousand\":\"Thousand\",\"trillion\":\"Trillion\",\"unit\":\"\"}},\"format\":{\"delimiter\":\"\",\"precision\":3,\"significant\":true,\"strip_insignificant_zeros\":true},\"storage_units\":{\"format\":\"%n %u\",\"units\":{\"byte\":{\"one\":\"Byte\",\"other\":\"Bytes\"},\"eb\":\"EB\",\"gb\":\"GB\",\"kb\":\"KB\",\"mb\":\"MB\",\"pb\":\"PB\",\"tb\":\"TB\",\"zb\":\"ZB\"}}},\"nth\":{},\"percentage\":{\"format\":{\"delimiter\":\"\",\"format\":\"%n%\"}},\"precision\":{\"format\":{\"delimiter\":\"\"}}},\"simple_form\":{\"error_notification\":{\"default_message\":\"Please review the problems below:\"},\"no\":\"No\",\"required\":{\"mark\":\"*\",\"text\":\"required\"},\"yes\":\"Yes\"},\"support\":{\"array\":{\"last_word_connector\":\", and \",\"two_words_connector\":\" and \",\"words_connector\":\", \"}},\"time\":{\"am\":\"am\",\"formats\":{\"default\":\"%a, %d %b %Y %H:%M:%S %z\",\"long\":\"%B %d, %Y %H:%M\",\"short\":\"%d %b %H:%M\"},\"pm\":\"pm\"},\"users\":{\"confirmations\":{\"new\":{\"legend\":\"Resend your %{brand_name} confirmation instructions\",\"message\":\"We need to confirm your email address to complete the sign up process. Supply your email address, below, and we will send you instructions on how to confirm your address.\",\"submit_button\":\"Send Confirmation Instructions\",\"title\":\"Resend confirmation instructions | %{brand_name}\"},\"show\":{\"legend\":\"Check your inbox for a confirmation email\",\"message\":\"If your e-mail exists in our database we have sent you a message with instructions. Check your inbox (or spam folder) for a message from \\'%{default_from_email}\\' containing the confirmation link.\",\"title\":\"Awaiting confirmation | %{brand_name}\"}},\"passwords\":{\"new\":{\"failures\":\"Note: If you make more than 5 sequential failed attempts to sign in with your %{brand_name} password, your account will be (temporarily) locked. Check your inbox for instruction on how to unlock your account, or we can\",\"legend\":\"Reset your %{brand_name} password\",\"message\":\"Supply your email address, below, and we will send you instructions on how to reset your password.\",\"resend_link\":\"resend a new set of unlock instructions\",\"submit_button\":\"Send Reset Instructions\",\"title\":\"Reset password | %{brand_name}\"},\"show\":{\"didnt_receive_email\":\"Didn\\'t receive the email?\",\"legend\":\"Password reset instructions sent\",\"message\":\"If your e-mail exists in our database we have sent you a message with password reset instructions. Check your inbox (or spam folder) for a message from \\'%{default_from_email}\\'.\",\"resend_link\":\"you can request another one here\",\"title\":\"Awaiting reset | %{brand_name}\"}}},\"will_paginate\":{\"container_aria_label\":\"Pagination\",\"next_label\":\"Next \\\\u0026#8594;\",\"page_aria_label\":\"Page %{page}\",\"page_entries_info\":{\"multi_page\":\"Displaying %{model} %{from} - %{to} of %{count} in total\",\"multi_page_html\":\"Displaying %{model} \\\\u003cb\\\\u003e%{from}\\\\u0026nbsp;-\\\\u0026nbsp;%{to}\\\\u003c/b\\\\u003e of \\\\u003cb\\\\u003e%{count}\\\\u003c/b\\\\u003e in total\",\"single_page\":{\"one\":\"Displaying 1 %{model}\",\"other\":\"Displaying all %{count} %{model}\",\"zero\":\"No %{model} found\"},\"single_page_html\":{\"one\":\"Displaying \\\\u003cb\\\\u003e1\\\\u003c/b\\\\u003e %{model}\",\"other\":\"Displaying \\\\u003cb\\\\u003eall\\\\u0026nbsp;%{count}\\\\u003c/b\\\\u003e %{model}\",\"zero\":\"No %{model} found\"}},\"page_gap\":\"\\\\u0026hellip;\",\"previous_label\":\"\\\\u0026#8592; Previous\"}}'));\nI18n.translations[\"zapyrus\"] = I18n.extend((I18n.translations[\"zapyrus\"] || {}), JSON.parse('{\"activerecord\":{\"errors\":{\"messages\":{\"record_invalid\":\"Validation failed: %{errors}\",\"restrict_dependent_destroy\":{\"has_many\":\"Cannot delete record because dependent %{record} exist\",\"has_one\":\"Cannot delete record because a dependent %{record} exists\"}}}},\"brand\":{\"logo\":{\"full_image\":{\"file_name\":\"zapyrus_logo_full.png\",\"path\":\"images/brand_specific/zapyrus/zapyrus_logo_full.png\"},\"header\":{\"path\":\"/images/brand_specific/zapyrus/zapyrus_logo_black_trans.png\"},\"mark_only\":{\"file_name\":\"zapyrus_logo_z_only.png\",\"path\":\"images/brand_specific/zapyrus/zapyrus_logo_z_only.png\"}},\"meta\":{\"description\":\"Zapyrus provides actionable sales intelligence into medical device, IVD/diagnostic, and SaMD/DTx companies.\",\"image\":\"https://app.zapyrus.com/images/brand_specific/zapyrus/meta_image.png\",\"title\":\"Zapyrus: Catalyze your sales.\"},\"name\":\"Zapyrus\",\"tag_line\":\"Catalyze your sales.\"},\"bulk_uploads\":{\"email_local_part\":{\"empty_parameter\":\"No file uploaded\",\"error\":\"File Upload failed: %{error_message}\",\"success\":\"File was successfully uploaded\"}},\"common\":{\"crm\":{\"salesforce\":{\"forgot_password\":\"If you have forgotten your Salesforce password, please follow the instructions provided on the Salesforce sign in page.\",\"sign_in_button\":\"Sign In with Salesforce\"}}},\"contact\":{\"default_from_email\":\"info@zapyrus.com\",\"phone_numbers\":[{\"label\":\"US\",\"phone\":\"1-844-996-3321\"},{\"label\":\"UK\",\"phone\":\"+44-208-133-9963\"}],\"support_email\":\"support@zapyrus.com\"},\"date\":{\"abbr_day_names\":[\"Sun\",\"Mon\",\"Tue\",\"Wed\",\"Thu\",\"Fri\",\"Sat\"],\"abbr_month_names\":[null,\"Jan\",\"Feb\",\"Mar\",\"Apr\",\"May\",\"Jun\",\"Jul\",\"Aug\",\"Sep\",\"Oct\",\"Nov\",\"Dec\"],\"day_names\":[\"Sunday\",\"Monday\",\"Tuesday\",\"Wednesday\",\"Thursday\",\"Friday\",\"Saturday\"],\"formats\":{\"default\":\"%Y-%m-%d\",\"long\":\"%B %d, %Y\",\"short\":\"%b %d\"},\"month_names\":[null,\"January\",\"February\",\"March\",\"April\",\"May\",\"June\",\"July\",\"August\",\"September\",\"October\",\"November\",\"December\"],\"order\":[\"year\",\"month\",\"day\"]},\"datetime\":{\"distance_in_words\":{\"about_x_hours\":{\"one\":\"about 1 hour\",\"other\":\"about %{count} hours\"},\"about_x_months\":{\"one\":\"about 1 month\",\"other\":\"about %{count} months\"},\"about_x_years\":{\"one\":\"about 1 year\",\"other\":\"about %{count} years\"},\"almost_x_years\":{\"one\":\"almost 1 year\",\"other\":\"almost %{count} years\"},\"half_a_minute\":\"half a minute\",\"less_than_x_minutes\":{\"one\":\"less than a minute\",\"other\":\"less than %{count} minutes\"},\"less_than_x_seconds\":{\"one\":\"less than 1 second\",\"other\":\"less than %{count} seconds\"},\"over_x_years\":{\"one\":\"over 1 year\",\"other\":\"over %{count} years\"},\"x_days\":{\"one\":\"1 day\",\"other\":\"%{count} days\"},\"x_minutes\":{\"one\":\"1 minute\",\"other\":\"%{count} minutes\"},\"x_months\":{\"one\":\"1 month\",\"other\":\"%{count} months\"},\"x_seconds\":{\"one\":\"1 second\",\"other\":\"%{count} seconds\"}},\"prompts\":{\"day\":\"Day\",\"hour\":\"Hour\",\"minute\":\"Minute\",\"month\":\"Month\",\"second\":\"Seconds\",\"year\":\"Year\"}},\"default_host\":\"https://app.zapyrus.com\",\"devise\":{\"confirmations\":{\"confirmed\":\"Your account was successfully confirmed. Please sign in.\",\"send_instructions\":\"Your email has not been confirmed. We need to confirm your email account before you can sign in. Please check your inbox or spam folder for an email from \\'info@zymewire.com\\' or request a new one.\",\"send_paranoid_instructions\":\"If your e-mail exists on our database, you will receive an email with instructions about how to confirm your account in a few minutes.\"},\"failure\":{\"already_authenticated\":\"You are already signed in.\",\"expired\":\"Your account has expired due to inactivity. Please contact the site administrator.\",\"inactive\":\"Your account was not activated yet.\",\"invalid\":\"Invalid email or password. If you use Salesforce, use the \\'Have Salesforce?\\' panel.\",\"invalid_token\":\"Invalid authentication token.\",\"last_attempt\":\"You have one more attempt before your account is locked.\",\"locked\":\"Your account is locked.\",\"not_active\":\"Your account has been de-activated, if you think this is a mistake please contact us\",\"not_found_in_database\":\"Invalid %{authentication_keys} or password.\",\"session_limited\":\"Your login credentials were used in another browser. Please sign in again to continue in this browser.\",\"timeout\":\"Your session expired, please sign in again to continue.\",\"unauthenticated\":\"You need to sign in or sign up before continuing.\",\"unconfirmed\":\"We must confirm your email before you can continue. Please check your inbox or spam folder for a confirmation email from \\'info@zymewire.com\\' or request a new one.\"},\"invalid_captcha\":\"The captcha input is not valid!\",\"invalid_security_question\":\"The security question answer was invalid.\",\"mailer\":{\"confirmation_instructions\":{\"subject\":\"Confirmation instructions for Zymewire.com\"},\"email_changed\":{\"subject\":\"Email Changed\"},\"password_change\":{\"subject\":\"Password Changed\"},\"reset_password_instructions\":{\"subject\":\"Reset password instructions for Zymewire.com\"},\"unlock_instructions\":{\"subject\":\"Unlock Instructions for Zymewire.com\"}},\"omniauth_callbacks\":{\"failure\":\"Could not authorize you from %{kind} because \\\\\"%{reason}\\\\\".\",\"success\":\"Successfully authorized from %{kind} account.\"},\"paranoid_verification_code\":{\"show\":{\"submit\":\"Submit\",\"submit_verification_code\":\"Submit verification code\",\"verification_code\":\"Verification code\"},\"updated\":\"Verification code accepted\"},\"paranoid_verify\":{\"code_required\":\"Please enter the code our support team provided\"},\"password_expired\":{\"change_required\":\"Your password has expired. Please choose a new password!\",\"show\":{\"change_my_password\":\"Change my password\",\"current_password\":\"Current password\",\"new_password\":\"New password\",\"new_password_confirmation\":\"Confirm new password\",\"renew_your_password\":\"Renew your password\"},\"updated\":\"Your new password is saved.\"},\"passwords\":{\"no_token\":\"You can\\'t access this page without coming from a password reset email. If you do come from a password reset email, please make sure you used the full URL provided.\",\"send_instructions\":\"You will receive an email with instructions about how to reset your password in a few minutes.\",\"send_paranoid_instructions\":\"If your e-mail exists on our database, you will receive a password recovery link on your e-mail\",\"updated\":\"Your password was changed successfully. You are now signed in.\",\"updated_not_active\":\"Your password was changed successfully.\"},\"registrations\":{\"destroyed\":\"Bye! Your account was successfully cancelled. We hope to see you again soon.\",\"signed_up\":\"Welcome! You have signed up successfully.\",\"signed_up_but_inactive\":\"You have signed up successfully. However, we could not sign you in because your account is not yet activated.\",\"signed_up_but_locked\":\"You have signed up successfully. However, we could not sign you in because your account is locked.\",\"signed_up_but_unconfirmed\":\"A message with a confirmation link has been sent to your email address. Please open the link to activate your account.\",\"update_needs_confirmation\":\"You updated your account successfully, but we need to verify your new email address. Please check your email and click on the confirm link to finalize confirming your new email address.\",\"updated\":\"You updated your account successfully.\",\"updated_but_not_signed_in\":\"Your account has been updated successfully, but since your password was changed, you need to sign in again.\"},\"sessions\":{\"already_signed_out\":\"Signed out successfully.\",\"signed_in\":\"Signed in successfully.\",\"signed_out\":\"Signed out successfully.\"},\"unlocks\":{\"send_instructions\":\"You will receive an email with instructions about how to unlock your account in a few minutes.\",\"send_paranoid_instructions\":\"If your account exists, you will receive an email with instructions about how to unlock it in a few minutes.\",\"unlocked\":\"Your account has been unlocked successfully. Please sign in to continue.\"}},\"disable_crm_login_option\":\"false\",\"domain\":\"zapyrus.com\",\"download\":\"Download\",\"download_30_days\":\"This link will be available for 30 days after which the file will be removed from our servers.\",\"enumerize\":{\"blocklisted_contact\":{\"provider\":{\"insideview\":\"InsideView\",\"zephyr\":\"Zephyr\"}}},\"errors\":{\"format\":\"%{attribute} %{message}\",\"messages\":{\"accepted\":\"must be accepted\",\"already_confirmed\":\"was already confirmed, please try signing in\",\"blank\":\"can\\'t be blank\",\"confirmation\":\"doesn\\'t match %{attribute}\",\"confirmation_period_expired\":\"needs to be confirmed within %{period}, please request a new one\",\"empty\":\"can\\'t be empty\",\"equal_to\":\"must be equal to %{count}\",\"equal_to_current_password\":\"Sorry, must be different to your current password!\",\"equal_to_email\":\"must be different than the email.\",\"even\":\"must be even\",\"exclusion\":\"is reserved\",\"expired\":\"has expired, please request a new one\",\"greater_than\":\"must be greater than %{count}\",\"greater_than_or_equal_to\":\"must be greater than or equal to %{count}\",\"in\":\"must be in %{count}\",\"inclusion\":\"is not included in the list\",\"invalid\":\"is invalid\",\"less_than\":\"must be less than %{count}\",\"less_than_or_equal_to\":\"must be less than or equal to %{count}\",\"model_invalid\":\"Validation failed: %{errors}\",\"not_a_number\":\"is not a number\",\"not_an_integer\":\"must be an integer\",\"not_found\":\"not found\",\"not_locked\":\"was not locked\",\"not_saved\":{\"one\":\"1 error prohibited this %{resource} from being saved:\",\"other\":\"%{count} errors prohibited this %{resource} from being saved:\"},\"odd\":\"must be odd\",\"other_than\":\"must be other than %{count}\",\"password_complexity\":{\"digit\":{\"one\":\"must contain at least one digit\",\"other\":\"must contain at least %{count} digits\"},\"lower\":{\"one\":\"must contain at least one lower-case letter\",\"other\":\"must contain at least %{count} lower-case letters\"},\"symbol\":{\"one\":\"must contain at least one punctuation mark or symbol\",\"other\":\"must contain at least %{count} punctuation marks or symbols\"},\"upper\":{\"one\":\"must contain at least one upper-case letter\",\"other\":\"must contain at least %{count} upper-case letters\"}},\"password_format\":\"Must contain uppercase AND lowercase letters and at least one number\",\"password_too_long\":\"is too long\",\"present\":\"must be blank\",\"required\":\"must exist\",\"taken\":\"has already been taken\",\"taken_in_past\":\"Sorry, you have used this password before!\",\"too_long\":{\"one\":\"is too long (maximum is 1 character)\",\"other\":\"is too long (maximum is %{count} characters)\"},\"too_short\":{\"one\":\"is too short (minimum is 1 character)\",\"other\":\"is too short (minimum is %{count} characters)\"},\"wrong_length\":{\"one\":\"is the wrong length (should be 1 character)\",\"other\":\"is the wrong length (should be %{count} characters)\"}}},\"flash\":{\"actions\":{\"create\":{\"notice\":\"%{resource_name} was successfully created.\"},\"destroy\":{\"alert\":\"%{resource_name} could not be destroyed.\",\"notice\":\"%{resource_name} was successfully destroyed.\"},\"update\":{\"notice\":\"%{resource_name} was successfully updated.\"}}},\"hello_world\":\"Hello world\",\"help\":{\"articles\":{\"crm_mining\":\"/help/articles/94315-mine-your-companys-salesforce-for-opportunities\",\"finding_contact_info\":\"/help/articles/94254-finding-contact-information-and-using-contact-search\",\"guide_d\":\"/help/articles\",\"guide_g\":\"/help/articles/94255-generating-a-list\",\"guide_h\":\"/help/articles\",\"guide_i\":\"/help/articles/94249-flagging-events\",\"guide_j\":\"/help/articles/94277-creating-a-territory\",\"list_crud_c\":\"/help/articles/94255-generating-a-list\",\"list_crud_u\":\"/help/articles/94256-adding-and-removing-individual-companies-from-a-list\",\"map_search\":\"/help/articles/94276-map-based-searching\",\"saving_feeds\":\"/help/articles/94252-saving-feeds\"},\"site\":\"https://zapyrus.helpsite.com/\"},\"helpers\":{\"select\":{\"prompt\":\"Please select\"},\"submit\":{\"create\":\"Create %{model}\",\"submit\":\"Save %{model}\",\"update\":\"Update %{model}\"}},\"hi\":\"Hi\",\"industry\":\"medical device\",\"mailers\":{\"common\":{\"chummy_sign_off\":\"Have a good one.\",\"final_note\":\"P.S.: If you think you received this email accidentally, then something weird could be going on. Hit reply and a member of the %{brand_name} team will investigate.\",\"team_sign_off\":\"- The %{brand_name} Team\"},\"confirmation_instructions_email\":{\"crm\":{\"salesforce\":{\"resource_confirmed\":\"Someone has requested a resend of a confirmation email. You do not need to confirm your email address because your account is configured to use Salesforce to sign in.\",\"resource_unconfirmed\":\"You do not need to confirm your email address because your account is configured to use Salesforce to sign in, please complete the sign up process by clicking the button below to sign in to %{brand_name} via Salesforce.\"}},\"non_crm\":{\"confirm_link\":\"Confirm my account\",\"welcome\":\"Welcome to %{brand_name}. As the final step in the process you\\'ll need to confirm your account by clicking on the link below.\"},\"subject\":\"Confirmation instructions for %{domain}\"},\"flagged_events_mailer\":{\"from\":\"Flagged events - %{brand_name} \\\\u003cflagged_events@mailer.%{domain}\\\\u003e\"},\"mobile_registration_email\":{\"alert_cs_registration_locked\":{\"subject\":\"%{brand_name}: user has had mobile registration locked, too many failed attempts\"},\"dispatch_registration_PIN\":{\"further_instructions\":\"If you are NOT attempting to register for the %{brand_name} Mobile app then please let us know at %{support_email_link} - thank you.\",\"introduction\":\"Here is your mobile app registration PIN:\",\"subject\":\"%{brand_name} Mobile Registration Verification\"},\"too_many_failed_attempts\":{\"introduction\":\"We have received too many failed mobile device registration attempts for your account and we will block any further requests. If you have not attempted to register a mobile device with us in the last hour then please let us know as it is likely someone has tried on your behalf. If you have been trying to register a device please contact %{support_email_link} and we can help unlock your account and get you registered.\",\"subject\":\"%{brand_name}: too many failed registration attempts\"}},\"org_list_download_mail\":{\"dispatch_link\":{\"introduction\":\"We have finished meshing your %{crm_brand_name} data with the companies in your \\\\\"%{list_name}\\\\\" list.\",\"subject\":\"%{brand_name}: your file download of \\'%{list_name}\\' is ready\"},\"failed\":{\"instructions\":\"You could try again in a little while. If you already have and are receiving this email again, please contact us at %{support_email_link}\",\"introduction\":\"We are really sorry, but something went wrong with creating your download of %{crm_brand_name} data for your \\\\\"%{list_name}\\\\\" list.\",\"subject\":\"%{brand_name}: your file download of \\'%{list_name}\\' failed\"}},\"reset_password_instructions_email\":{\"crm\":{\"salesforce\":{\"change_requested\":\"Someone has requested a change to your password. Your account is configured to use Salesforce to sign in.\"}},\"fishy_fine_print\":\"If you did not request a password change, then something weird is going on. Someone may be trying to access your account (unsuccessfully). Please reply to this email and let us know. We will take steps to make sure it stops.\",\"non_crm\":{\"change_password_link\":\"Change my password\",\"change_requested\":\"Someone has requested a change to your password, you can do this via the link below.\"},\"subject\":\"Password reset instructions for %{domain}\"},\"sales_force_mail\":{\"processing_completed\":{\"bullet_points\":[\"Only show events associated with companies in your Salesforce account\",\"Add new contacts and accounts to your Salesforce account without leaving %{brand_name}\",\"Access the \\'Salesforce details\\' panel on company dashboards where you can see open tasks, team interactions, opportunities, and more!\"],\"further_instructions\":\"We\\'re here to help. If you run into any questions or challenges, please contact us at %{support_email_link} and a member of our team would be more than happy to help.\",\"get_the_most\":\"To get the most from the integration, check out the \\'Mine Salesforce for opportunities\\' guide in the Help Center.\",\"guide_button\":\"Take me to the guide\",\"introduction\":\"Good news - your Salesforce account is now integrated with %{brand_name}. Now you’ll be able to:\"}},\"segment_contact\":{\"report_manager\":{\"fail_subject\":\"%{brand_name}: The PDF report generation failed\",\"success_subject\":\"%{brand_name}: Your PDF for %{company_name} is attached\"}},\"sf_token_expiry_email\":{\"further_instructions\":\"If you run into any questions or challenges, please contact us at %{support_email_link} and a member of our team would be more than happy to help.\",\"introduction\":\"Unfortunately the connection established for you between %{brand_name} and your %{crm_brand_name} account has expired. We will not be able to update your lists in %{brand_name} to reflect your %{crm_brand_name} database. To re-establish the connection, you just need to log in to %{brand_name} using your %{crm_brand_name}.\",\"subject\":\"%{brand_name} to %{crm_brand_name} connection has expired\"},\"share_list_mail\":{\"introduction\":\"%{user_name} shared a list with you: \",\"subject\":\"[%{brand_name} - shared list] %{list_name}\"},\"trial_expiry_mail\":{\"seven_days_to_go\":{\"further_instructions\":\"A member of our fabulous Customer Success team will arrange a welcome call with you to understand your goals and priorities, and will then give you a personalized Tour de %{brand_name} so you can easily access the information that is most valuable to you.\",\"instructions\":\"If you\\'d like continued access to the platform with our flexible month-to-month subscription, please ensure you contact %{support_email_link} ahead of: %{deadline}\",\"introduction\":\"Time flies when you\\'re uncovering new business opportunities! Your %{brand_name} trial is coming to an end next week.\",\"sign_off\":\"We look forward to helping you reach your sales goals!\",\"subject\":\"Just a heads up that your %{brand_name} trial is ending in seven days\"},\"seven_days_to_go_warning_for_cs\":{\"introduction\":\"%{user_name} shared a list with you: \",\"subject\":\"[%{brand_name} - shared list] %{list_name}\"}},\"unlock_instructions_email\":{\"crm\":{\"salesforce\":{\"change_requested\":\"You are being sent this email either because of one too many unsuccessful non-Salesforce log-in attempts or someone has requested an unlock email. %{brand_name} has not locked your account because your account is configured to use Salesforce to sign in.\",\"password_forgotten\":\"If you have forgotten your Salesforce password or think your account has been locked by Salesforce, please follow the instructions provided on the Salesforce sign in page.\"}},\"fishy_fine_print\":\"If you have not been (unsuccessfully) trying to log in to your account, then something weird is going on. Someone may be trying to access your account (unsuccessfully). Please reply to this email and let us know. We will take steps to make sure it stops.\",\"non_crm\":{\"change_requested\":\"For security reasons we have locked your account because of too many log-in attempts. To unlock your account, click the link below.\",\"unlock_account_link\":\"Unlock my account\"},\"subject\":\"Unlock instructions for %{domain}\"}},\"mobile_website\":{\"cta\":\"Get Notified\",\"cta_link\":\"https://share.hsforms.com/1qVfLrCJsQGiSBogpVRQYnAbm5d1\",\"header\":\"Coming soon!\",\"message\":\"Congrats! You\\'ve found our secret project. The Zapyrus mobile app.\",\"prompt\":\"It\\'s not ready yet, but please subscribe to our newsletter.\"},\"mongoid\":{\"errors\":{\"messages\":{\"ambiguous_relationship\":{\"message\":\"Ambiguous associations %{candidates} defined on %{klass}.\",\"resolution\":\"On the %{name} association on %{inverse} you must add an :inverse_of option to specify the exact association on %{klass} that is the opposite of %{name}.\",\"summary\":\"When Mongoid attempts to set an inverse document of an association in memory, it needs to know which association it belongs to. When setting %{name}, Mongoid looked on the class %{inverse} for a matching association, but multiples were found that could potentially match: %{candidates}.\"},\"blank_in_locale\":\"can\\'t be blank in %{location}\",\"callbacks\":{\"message\":\"Calling %{method} on %{klass} resulted in a false return from a callback.\",\"resolution\":\"Double check all before callbacks to make sure they are not unintentionally returning false.\",\"summary\":\"If a before callback returns false when using Document.create!, Document#save!, or Document#update_attributes! this error will get raised since the document did not actually get saved.\"},\"calling_document_find_with_nil_is_invalid\":{\"message\":\"Calling Document.find with nil is invalid.\",\"resolution\":\"Most likely this is caused by passing parameters directly through to the find, and the parameter either is not present or the key from which it is accessed is incorrect.\",\"summary\":\"Document.find expects the parameters to be 1 or more ids, and will return a single document if 1 id is provided, otherwise an array of documents if multiple ids are provided.\"},\"create_collection_failure\":{\"message\":\"Cannot create collection %{collection_name} with options %{collection_options}. The following error was raised: %{error}.\",\"resolution\":\"Double check that collection options for the collection %{collection_name} are valid. Consult with Ruby driver documentation and MongoDB documentation if the desired options are supported by your version of the server.\",\"summary\":\"The server rejected createCollection command with given collection options. This may happen when some of the options are invalid, or not supported by your version of the server.\"},\"criteria_argument_required\":{\"message\":\"Calling Criteria methods with nil arguments is not allowed.\",\"resolution\":\"Invoke Criteria methods with non-nil arguments or omit the respective invocations.\",\"summary\":\"Arguments to Criteria methods cannot be nil, and most Criteria methods require at least one argument. Only logical operations (and, or, nor and not), `all\\' and `where\\' can be called without arguments. The method that was called with nil argument was: %{query_method}.\"},\"delete_restriction\":{\"message\":\"Cannot destroy %{document} because of dependent \\'%{relation}\\'.\",\"resolution\":\"Don\\'t attempt to delete the parent %{document} when it has children, or change the dependent option on the association.\",\"summary\":\"When defining \\'%{relation}\\' with a :dependent =\\\\u003e :restrict_with_error, Mongoid will raise an error when attempting to destroy the %{document} when the child \\'%{relation}\\' still has documents in it.\"},\"destroy_restrict_with_error_dependencies_exist\":\"is not empty and prevents the document from being destroyed\",\"document_not_destroyed\":{\"message\":\"%{klass} with id %{id} was not destroyed.\",\"resolution\":\"Check the before/after destroy callbacks to ensure that the return values are truthy for the chain to continue.\",\"summary\":\"When calling %{klass}#destroy! and a callback halts the destroy callback chain by returning a false value, the deletion will not actually occur.\"},\"document_not_found\":{\"message\":\"Document(s) not found for class %{klass} with id(s) %{missing}.\",\"resolution\":\"Search for an id that is in the database or set the Mongoid.raise_not_found_error configuration option to false, which will cause nil to be returned instead of raising this error when searching for a single id, or only the matched documents when searching for multiples.\",\"summary\":\"When calling %{klass}.find with an id or array of ids, each parameter must match a document in the database or this error will be raised. The search was for the id(s): %{searched} (%{total} total) and the following ids were not found: %{missing}.\"},\"document_with_attributes_not_found\":{\"message\":\"Document not found for class %{klass} with attributes %{attributes}.\",\"resolution\":\"Search for attributes that are in the database or set the Mongoid.raise_not_found_error configuration option to false, which will cause nil to be returned instead of raising this error.\",\"summary\":\"When calling %{klass}.find_by with a hash of attributes, all attributes provided must match a document in the database or this error will be raised.\"},\"document_with_shard_key_not_found\":{\"message\":\"Document not found for class %{klass} with id %{missing} and shard key %{shard_key}.\",\"resolution\":\"Search for an id/shard key that is in the database or set the Mongoid.raise_not_found_error configuration option to false, which will cause nil to be returned instead of raising this error.\",\"summary\":\"When calling %{klass}.find with an id and a shard key, each parameter must match a document in the database or this error will be raised. The search was for the id: %{missing} with shard_key: %{shard_key} and it was not found.\"},\"drop_collection_failure\":{\"message\":\"Cannot drop collection %{collection_name}.\",\"resolution\":\"Try to drop the collection manually using Ruby driver or mongo shell.\",\"summary\":\"Mongoid tried to drop collection %{collection_name}, but the collection still exists in the database.\"},\"empty_config_file\":{\"message\":\"Empty configuration file: %{path}.\",\"resolution\":\"Ensure your configuration file contains the correct contents. Refer to: https://www.mongodb.com/docs/mongoid/current/reference/configuration/\",\"summary\":\"Your mongoid.yml configuration file appears to be empty.\"},\"immutable_attribute\":{\"message\":\"Attempted to change the immutable attribute \\'%{name}\\' with the value: %{value}.\",\"resolution\":\"Do not attempt to update the value of \\'%{name}\\' after the document is persisted.\",\"summary\":\"Immutable attributes can only have values set when the document is a new record.\"},\"in_memory_collation_not_supported\":{\"message\":\"A collation option cannot be applied when querying documents in-memory.\",\"resolution\":\"Remove the collation option from the query.\",\"summary\":\"The query being run against documents in memory has a collation option set. A collation option is only supported if the query is executed on a MongoDB server with version \\\\u003e= 3.4.\"},\"invalid_async_query_executor\":{\"message\":\"Invalid async_query_executor option: %{executor}.\",\"resolution\":\"Pick an allowed option or fix the typo. If you were expecting the option to be there, please consult the following page with respect to Mongoid\\'s configuration:\\\\n\\\\n   https://www.mongodb.com/docs/mongoid/current/reference/configuration/#mongoid-configuration-options\",\"summary\":\"A invalid async query executor was specified. The valid options are: %{options}.\"},\"invalid_collection\":{\"message\":\"Access to the collection for %{klass} is not allowed.\",\"resolution\":\"For access to the collection that the embedded document is in, use %{klass}#_root.collection, or do not attempt to persist an embedded document without a parent set.\",\"summary\":\"%{klass}.collection was called, and %{klass} is an embedded document - it resides within the collection of the root document of the hierarchy.\"},\"invalid_config_file\":{\"message\":\"Invalid configuration file: %{path}.\",\"resolution\":\"Ensure your configuration file contains the correct contents. Refer to: https://www.mongodb.com/docs/mongoid/current/reference/configuration/\",\"summary\":\"Your mongoid.yml configuration file does not contain the correct file structure.\"},\"invalid_config_option\":{\"message\":\"Invalid configuration option: %{name}.\",\"resolution\":\"Remove the invalid option or fix the typo. If you were expecting the option to be there, please consult the following page with respect to Mongoid\\'s configuration:\\\\n\\\\n   http://mongoid.org/en/mongoid/docs/installation.html\",\"summary\":\"A invalid configuration option was provided in your mongoid.yml, or a typo is potentially present. The valid configuration options are: %{options}.\"},\"invalid_dependent_strategy\":{\"message\":\"Invalid dependent strategy: %{invalid_strategy}.\",\"resolution\":\"Change the dependent strategy to one of the valid types.\",\"summary\":\"An invalid dependent strategy was defined for the association: %{association}. The valid strategies are: %{valid_strategies}.\"},\"invalid_discriminator_key_target\":{\"message\":\"Setting the discriminator key on a child class is not allowed.\",\"resolution\":\"Try setting the discriminator key on %{superclass} or one of %{class_name}\\'s ancestors.\",\"summary\":\"The discriminator key on the class %{class_name} was attempted to be changed. Changing the discriminator key on a child class is not allowed.\"},\"invalid_dot_dollar_assignment\":{\"message\":\"Cannot set the %{attr} attribute on the %{klass} class.\",\"resolution\":\"In order to set fields that start with a dollar sign ($) or contain a dot/period (.), the aggregation pipeline can be used. MongoDB provides specific operators for working with these fields. Refer to the MongoDB documentation here: https://www.mongodb.com/docs/manual/core/dot-dollar-considerations/\",\"summary\":\"Calling the setters for fields that start with a dollar sign ($) or contain a dot/period (.) is prohibited. See the Mongoid documentation on Field Names with Dots/Periods (.) and Dollar Signs ($) for more information.\"},\"invalid_elem_match_operator\":{\"message\":\"Invalid $elemMatch operator \\'%{operator}\\'.\",\"resolution\":\"Valid field operators are: %{valid_operators}. Ensure you are using one of these operators.\",\"summary\":\"You misspelled an operator or are using an operator that Mongoid does not support.\"},\"invalid_estimated_count_criteria\":{\"message\":\"Invalid criteria for estimated_count.\",\"resolution\":\"Try calling estimated_count directly on the class: %{class_name}.estimated_count.\\\\n\\\\n  If the class defines a default scope, use unscoped: %{class_name}.unscoped.estimated_count.\",\"summary\":\"Estimated count is strictly a collection-level operation and cannot be called on a filtered criteria.\"},\"invalid_expression_operator\":{\"message\":\"Invalid expression operator \\'%{operator}\\'.\",\"resolution\":\"Valid expression operators are: %{valid_operators}. Ensure you are using one of these operators.\",\"summary\":\"You misspelled an operator, are using an operator that Mongoid does not support, or are trying to use a field-level operator on expression level.\"},\"invalid_field\":{\"message\":\"Defining a field named \\'%{field}\\' is not allowed.\",\"resolution\":\"Use Mongoid.destructive_fields to see what names are not allowed, and don\\'t use these names. These include names that also conflict with core Ruby methods on Object, Module, Enumerable, or included gems that inject methods into these or Mongoid internals.\",\"summary\":\"Defining this field would override the method \\'%{name}\\', which would cause issues with expectations around the original method and cause extremely hard to debug issues. The original method was defined in:\\\\n   Object: %{origin}\\\\n   File: %{file}\\\\n   Line: %{line}\"},\"invalid_field_operator\":{\"message\":\"Invalid field operator \\'%{operator}\\'.\",\"resolution\":\"Valid field operators are: %{valid_operators}. Ensure you are using one of these operators.\",\"summary\":\"You misspelled an operator, are using an operator that Mongoid does not support, or are trying to use an expression-level operator on field level.\"},\"invalid_field_option\":{\"message\":\"Invalid option :%{option} provided for field :%{name}.\",\"resolution\":\"When defining the field :%{name} on \\'%{klass}\\', please provide valid options for the field. These are currently: %{valid}. If you meant to define a custom field option, please do so first as follows:\\\\n\\\\n   Mongoid::Fields.option :%{option} do |model, field, value|\\\\n     # Your logic here...\\\\n   end\\\\n   class %{klass}\\\\n     include Mongoid::Document\\\\n     field :%{name}, %{option}: true\\\\n   end\\\\n\\\\n Refer to: https://www.mongodb.com/docs/mongoid/current/reference/fields/#custom-field-options\",\"summary\":\"Mongoid requires that you only provide valid options on each field definition in order to prevent unexpected behavior later on.\"},\"invalid_field_type\":{\"message\":\"Invalid field type %{type_inspection} for field \\'%{field}\\' on model \\'%{klass}\\'.\",\"resolution\":\"Please provide a valid type value for the field. Refer to: https://www.mongodb.com/docs/mongoid/current/reference/fields/#using-symbols-or-strings-instead-of-classes\",\"summary\":\"Model \\'%{klass}\\' defines a field \\'%{field}\\' with an unknown type value %{type_inspection}.\"},\"invalid_global_executor_concurrency\":{\"message\":\"Invalid global_executor_concurrency option.\",\"resolution\":\"Set global_executor_concurrency option to :global_thread_pool or remove global_executor_concurrency option.\",\"summary\":\"You set global_executor_concurrency while async_query_executor option is not set to :global_thread_pool. The global_executor_concurrency is allowed only for the global thread pool executor.\"},\"invalid_includes\":{\"message\":\"Invalid includes directive: %{klass}.includes(%{args})\",\"resolution\":\"Ensure that each parameter passed to %{klass}.includes is a valid name of an association on the %{klass} model. These are: %{relations}.\",\"summary\":\"Eager loading in Mongoid only supports providing arguments to %{klass}.includes that are the names of associations on the %{klass}.\"},\"invalid_index\":{\"message\":\"Invalid index specification on %{klass}: %{spec}, %{options}\",\"resolution\":\"Ensure that the index conforms to the correct syntax and has the correct options.\\\\n\\\\n Valid options are:\\\\n   background: true|false\\\\n   database: \\'database_name\\'\\\\n   name: \\'index_name\\'\\\\n   sparse: true|false\\\\n   unique: true|false\\\\n   min: 1\\\\n   max: 1\\\\n   bits: 26\\\\n   key: 26\\\\n   bucket_size : 1\\\\n   sphere_version : 1\\\\n   text_version : 1\\\\n   version : 1\\\\n   weights: { content: 1, title: 2 }\\\\n   expire_after_seconds: number_of_seconds\\\\n   partial_filter_expression\\\\n   storage_engine\\\\n   language_override\\\\n   default_language\\\\n   collation\\\\n   wildcard_projection: { \\'path.to.field.a\\': 1, \\'path.to.field.b\\': 0 }\\\\n Valid types are: 1, -1, \\'2d\\', \\'2dsphere\\', \\'geoHaystack (deprecated)\\', \\'text\\', \\'hashed\\'\\\\n\\\\n Example:\\\\n   class Band\\\\n     include Mongoid::Document\\\\n     index({ name: 1, label: -1 }, { sparse: true })\\\\n     index({ location: \\'2d\\' }, { background: true })\\\\n   end\\\\n\\\\n\",\"summary\":\"Indexes in Mongoid are defined as a hash of field name and direction/2d pairs, with a hash for any additional options.\"},\"invalid_options\":{\"message\":\"Invalid option :%{invalid} provided to association :%{name}.\",\"resolution\":\"Valid options are: %{valid}, make sure these are the ones you are using.\",\"summary\":\"Mongoid checks the options that are passed to the association macros to ensure that no ill side effects occur by letting something slip by.\"},\"invalid_path\":{\"message\":\"Having a root path assigned for %{klass} is invalid.\",\"resolution\":\"Most likely your embedded model, %{klass} is also referenced via a has_many from a root document in another collection. Double check the association definitions and fix any instances where embedded documents are improperly referenced from other collections.\",\"summary\":\"Mongoid has two different path objects for determining the location of a document in the database, Root and Embedded. This error is raised when an embedded document somehow gets a root path assigned.\"},\"invalid_persistence_option\":{\"message\":\"Invalid persistence option :%{invalid}.\",\"resolution\":\"Valid options are: %{valid}, make sure these are the ones you are using.\",\"summary\":\"The options used to change the persistence context must be one of the valid options for a mongo client, or a collection name.\"},\"invalid_relation\":{\"message\":\"Defining an association named \\'%{name}\\' is not allowed.\",\"resolution\":\"Use Mongoid.destructive_fields to see what names are not allowed, and don\\'t use these names. These include names that also conflict with core Ruby methods on Object, Module, Enumerable, or included gems that inject methods into these or Mongoid internals.\",\"summary\":\"Defining this association would override the method \\'%{name}\\', which would cause issues with expectations around the original method and cause extremely hard to debug issues. The original method was defined in:\\\\n   Object: %{origin}\\\\n   File: %{file}\\\\n   Line: %{line}\"},\"invalid_relation_option\":{\"message\":\"Invalid association option :%{option} for association \\'%{name}\\' on class %{klass}.\",\"resolution\":\"Valid options are: %{valid_options}, make sure you use only those.\",\"summary\":\"An invalid option was provided for an association.\"},\"invalid_scope\":{\"message\":\"Defining a scope of value %{value} on %{klass} is not allowed.\",\"resolution\":\"Change the scope to be a proc wrapped criteria.\\\\n\\\\n Example:\\\\n   class Band\\\\n     include Mongoid::Document\\\\n     scope :inactive, -\\\\u003e{ where(active: false) }\\\\n   end\\\\n\\\\n\",\"summary\":\"Scopes in Mongoid must be procs that wrap criteria objects.\"},\"invalid_session_nesting\":{\"message\":\"A session was started while another session was being used.\",\"resolution\":\"Only use one session at a time; sessions cannot be nested.\",\"summary\":\"Sessions cannot be nested. Only one session can be used in a thread at once.\"},\"invalid_session_use\":{\"message\":\"A session was attempted to be used with a model whose client cannot use that session.\",\"resolution\":\"Only execute operations on the model class or instances of the model through which the session was created. Otherwise, ensure that all models on which operations are executed in the session block share the same driver client. For example, a model may have a different client specified in its \\'store_in\\' options.\\\\n\\\\n\",\"summary\":\"Sessions are started via driver clients (Model#mongo_client) and, in most cases, driver clients are shared across models. When different models have their own clients, a session cannot be obtained via one model and used for operations on another model.\"},\"invalid_set_polymorphic_relation\":{\"message\":\"The %{name} attribute can\\'t be set to an instance of %{other_klass} as %{other_klass} has multiple associations referencing %{klass} as %{name}.\",\"resolution\":\"Set the values from the parent, or redefine the association with only a single definition in the parent.\",\"summary\":\"If the parent class of a polymorphic association has multiple definitions for the same association, the values must be set from the parent side and not the child side since Mongoid cannot determine from the child side which association to go in.\"},\"invalid_storage_options\":{\"message\":\"Invalid options passed to %{klass}.store_in: %{options}.\",\"resolution\":\"Change the options passed to store_in to match the documented API, and ensure all keys in the options hash are symbols.\\\\n\\\\n Example:\\\\n   class Band\\\\n     include Mongoid::Document\\\\n     store_in collection: \\'artists\\', database: \\'music\\'\\\\n   end\\\\n\\\\n\",\"summary\":\"The :store_in macro takes only a hash of parameters with the keys :database, :collection, :collection_options, or :client.\"},\"invalid_time\":{\"message\":\"\\'%{value}\\' is not a valid Time.\",\"resolution\":\"Make sure to pass parsable values to the field setter for Date, DateTime, and Time objects. When this is a String it needs to be valid for Time.parse. Other objects must be valid to pass to Time.local.\",\"summary\":\"Mongoid tries to serialize the values for Date, DateTime, and Time into proper UTC times to store in the database. The provided value could not be parsed.\"},\"inverse_not_found\":{\"message\":\"When adding a(n) %{klass} to %{base}#%{name}, Mongoid could not determine the inverse foreign key to set. The attempted key was \\'%{inverse}\\'.\",\"resolution\":\"If an inverse is not required, like a belongs_to or has_and_belongs_to_many, ensure that :inverse_of =\\\\u003e nil is set on the association. If the inverse is needed, most likely the inverse cannot be figured out from the names of the associations and you will need to explicitly tell Mongoid on the association what the inverse is.\\\\n\\\\n Example:\\\\n   class Car\\\\n     include Mongoid::Document\\\\n     has_one :engine, class_name: \\\\\"Motor\\\\\", inverse_of: :machine\\\\n   end\\\\n\\\\n   class Motor\\\\n     include Mongoid::Document\\\\n     belongs_to :machine, class_name: \\\\\"Car\\\\\", inverse_of: :engine\\\\n   end\",\"summary\":\"When adding a document to an association, Mongoid attempts to link the newly added document to the base of the association in memory, as well as set the foreign key to link them on the database side. In this case Mongoid could not determine what the inverse foreign key was.\"},\"message_title\":\"message\",\"mixed_client_configuration\":{\"message\":\"Both uri and standard configuration options defined for client: \\'%{name}\\'.\",\"resolution\":\"Provide either only a uri as configuration or only standard options.\",\"summary\":\"Instead of simply giving uri or standard options a preference order, Mongoid assumes that you have made a mistake in your configuration and requires that you provide one or the other, but not both. The options that were provided were: %{config}.\"},\"mixed_relations\":{\"message\":\"Referencing a(n) %{embedded} document from the %{root} document via a non-embedded association is not allowed since the %{embedded} is embedded.\",\"resolution\":\"Consider not embedding %{embedded}, or do the key storage and access in a custom manner in the application code.\",\"summary\":\"In order to properly access a(n) %{embedded} from %{root} the reference would need to go through the root document of %{embedded}. In a simple case this would require Mongoid to store an extra foreign key for the root, in more complex cases where %{embedded} is multiple levels deep a key would need to be stored for each parent up the hierarchy.\"},\"nested_attributes_metadata_not_found\":{\"message\":\"Could not find metadata for association \\'%{name}\\' on model: %{klass}.\",\"resolution\":\"Make sure that there is an association defined named \\'%{name}\\' on %{klass} or that the association definition comes before the accepts_nested_attributes_for macro in the model - order matters so that Mongoid has access to the metadata.\\\\n\\\\n Example:\\\\n   class Band\\\\n     include Mongoid::Document\\\\n     has_many :albums\\\\n     accepts_nested_attributes_for :albums\\\\n   end\\\\n\\\\n\",\"summary\":\"When defining nested attributes for an association, Mongoid needs to access the metadata for the association \\'%{name}\\' in order if add autosave functionality to it, if applicable. Either no association named \\'%{name}\\' could be found, or the association had not been defined yet.\"},\"no_client_config\":{\"message\":\"No configuration could be found for a client named \\'%{name}\\'.\",\"resolution\":\"Double check your mongoid.yml to make sure under the clients key that a configuration exists for \\'%{name}\\'. If you have set the configuration programmatically, ensure that \\'%{name}\\' exists in the configuration hash.\",\"summary\":\"When attempting to create the new client, Mongoid could not find a client configuration for the name: \\'%{name}\\'. This is necessary in order to know the host, port, and options needed to connect.\"},\"no_client_database\":{\"message\":\"No database provided for client configuration: :%{name}.\",\"resolution\":\"If configuring via a mongoid.yml, ensure that within your :%{name} section a :database value for the client\\'s default database is defined.\\\\n\\\\n Example:\\\\n   development:\\\\n     clients:\\\\n       %{name}:\\\\n         database: my_app_db\\\\n         hosts:\\\\n           - localhost:27017\\\\n\\\\n\",\"summary\":\"Each client configuration must provide a database so Mongoid knows where the default database to persist to. What was provided was: %{config}.\"},\"no_client_hosts\":{\"message\":\"No hosts provided for client configuration: :%{name}.\",\"resolution\":\"If configuring via a mongoid.yml, ensure that within your :%{name} section a :hosts value for the client hosts is defined.\\\\n\\\\n Example:\\\\n   development:\\\\n     clients:\\\\n       %{name}:\\\\n         database: my_app_db\\\\n         hosts:\\\\n           - localhost:27017\\\\n\\\\n\",\"summary\":\"Each client configuration must provide hosts so Mongoid knows where the database server is located. What was provided was: %{config}.\"},\"no_clients_config\":{\"message\":\"No clients configuration provided.\",\"resolution\":\"Double check your mongoid.yml to make sure that you have a top-level clients key with at least 1 default client configuration for it. You can regenerate a new mongoid.yml for assistance via `rails g mongoid:config`.\\\\n\\\\n Example:\\\\n   development:\\\\n     clients:\\\\n       default:\\\\n         database: mongoid_dev\\\\n         hosts:\\\\n           - localhost:27017\\\\n\\\\n\",\"summary\":\"Mongoid\\'s configuration requires that you provide details about each client that can be connected to, and requires in the clients config at least 1 default client to exist.\"},\"no_default_client\":{\"message\":\"No default client configuration is defined.\",\"resolution\":\"If configuring via a mongoid.yml, ensure that within your :clients section a :default client is defined.\\\\n\\\\n Example:\\\\n   development:\\\\n     clients:\\\\n       default:\\\\n         hosts:\\\\n           - localhost:27017\\\\n\\\\n\",\"summary\":\"The configuration provided settings for: %{keys}, but Mongoid requires a :default to be defined at minimum.\"},\"no_documents_found\":{\"message\":\"Could not find a document of class %{klass}.\",\"resolution\":\"Create a document of class %{klass} or use a finder method that does not raise an exception when no documents are found.\",\"summary\":\"Mongoid attempted to find a document of the class %{klass} but none exist.\"},\"no_environment\":{\"message\":\"Could not load the configuration since no environment was defined.\",\"resolution\":\"Please ensure an environment is set in one of the listed locations. The environment must be explicitly set.\",\"summary\":\"Mongoid could not determine the environment to use because it was not specified in any of the following locations: Rails.env, Sinatra::Base.environment, ENV[\\\\\"RACK_ENV\\\\\"], ENV[\\\\\"MONGOID_ENV\\\\\"]. Without knowing the environment, Mongoid cannot load its configuration.\"},\"no_map_reduce_output\":{\"message\":\"No output location was specified for the map/reduce operation.\",\"resolution\":\"Provide the location that the output of the operation is to go by chaining an #out call to the map/reduce.\\\\n\\\\n Example:\\\\n   Band.map_reduce(map, reduce).out(inline: 1)\\\\n\\\\n Valid options for the out function are:\\\\n   inline: 1\\\\n   merge: \\'collection-name\\'\\\\n   replace: \\'collection-name\\'\\\\n   reduce: \\'collection-name\\'\\\\n\\\\n\",\"summary\":\"When executing a map/reduce, you must provide the output location of the results. The attempted command was: %{command}.\"},\"no_metadata\":{\"message\":\"Metadata not found for document of type %{klass}.\",\"resolution\":\"Ensure that your associations on the %{klass} model are all properly defined, and that the inverse associations are also properly defined. Embedded associations must have both the parent (embeds_one/embeds_many) and the inverse (embedded_in) present in order to work properly.\",\"summary\":\"Mongoid sets the metadata of an association on the document when it is either loaded from within the association, or added to one. The presence of the metadata is required in order to provide various functionality around associations. Most likely you are getting this error because the document is embedded and was attempted to be persisted without being associated with a parent, or the association was not properly defined.\"},\"no_parent\":{\"message\":\"Cannot persist embedded document %{klass} without a parent document.\",\"resolution\":\"Ensure that you\\'ve set the parent association if instantiating the embedded document directly, or always create new embedded documents via the parent association.\",\"summary\":\"If the document is embedded, in order to be persisted it must always have a reference to its parent document. This is most likely caused by either calling %{klass}.create or %{klass}.create! without setting the parent document as an attribute.\"},\"readonly_attribute\":{\"message\":\"Attempted to set the readonly attribute \\'%{name}\\' with the value: %{value}.\",\"resolution\":\"Don\\'t define \\'%{name}\\' as readonly, or do not attempt to update its value after the document is persisted.\",\"summary\":\"Attributes flagged as readonly via Model.attr_readonly can only have values set when the document is a new record.\"},\"readonly_document\":{\"message\":\"Attempted to persist a readonly document of class \\'%{klass}\\'.\",\"resolution\":\"Don\\'t attempt to persist documents that are flagged as readonly.\",\"summary\":\"Documents that are marked readonly cannot be persisted.\"},\"resolution_title\":\"resolution\",\"scope_overwrite\":{\"message\":\"Cannot create scope :%{scope_name}, because of existing method %{model_name}.%{scope_name}.\",\"resolution\":\"Change the name of the scope so it does not conflict with the already defined method %{model_name}, or set the configuration option Mongoid.scope_overwrite_exception to false, which is its default. In this case a warning will be logged.\",\"summary\":\"When defining a scope that conflicts with a method that already exists on the model, this error will get raised if Mongoid.scope_overwrite_exception is set to true.\"},\"sessions_not_supported\":{\"message\":\"Sessions are not supported by the connected server(s).\",\"resolution\":\"Verify that all servers in your deployment are at least version 3.6 or don\\'t attempt to use sessions with older server versions.\",\"summary\":\"A session was attempted to be used with a MongoDB server version that doesn\\'t support sessions. Sessions are supported in MongoDB server versions 3.6 and higher.\"},\"summary_title\":\"summary\",\"too_many_nested_attribute_records\":{\"message\":\"Accepting nested attributes for %{association} is limited to %{limit} documents.\",\"resolution\":\"The limit is set as an option to the macro, for example: accepts_nested_attributes_for :%{association}, limit: %{limit}. Consider raising this limit or making sure no more are sent than the set value.\",\"summary\":\"More documents were sent to be processed than the allowed limit.\"},\"unknown_attribute\":{\"message\":\"Attempted to set a value for \\'%{name}\\' which is not allowed on the model %{klass}.\",\"resolution\":\"Define the field \\'%{name}\\' in %{klass}, or include Mongoid::Attributes::Dynamic in %{klass} if you intend to store values in fields that are not explicitly defined.\",\"summary\":\"%{klass}#%{name}= was called but there is no \\'%{name}\\' field defined in the model, and Mongoid::Attributes::Dynamic is not included. This error is also raised instead of NoMethodError if the unknown attribute is passed to any method that accepts an attributes hash, such as #attributes=.\"},\"unknown_model\":{\"message\":\"Attempted to instantiate an object of the unknown model \\'%{klass}\\'.\",\"resolution\":\"The _type field is a reserved one used by Mongoid to determine the class for instantiating an object. Please don\\'t save data in this field or ensure that any values in this field correspond to valid models.\",\"summary\":\"A document with the value \\'%{value}\\' at the key \\'_type\\' was used to instantiate a model object but Mongoid cannot find this Class.\"},\"unsaved_document\":{\"message\":\"Attempted to save %{document} before the parent %{base}.\",\"resolution\":\"Make sure to only use create or create! when the parent document %{base} is persisted.\",\"summary\":\"You cannot call create or create! through the association (%{document}) whose parent (%{base}) is not already saved. This would cause the database to be out of sync since the child could potentially reference a nonexistent parent.\"},\"unsupported_javascript\":{\"message\":\"Executing Javascript $where selector on an embedded criteria is not supported.\",\"resolution\":\"Please provide a standard hash to #where when the criteria is for an embedded association.\",\"summary\":\"Mongoid only supports providing a hash of arguments to #where criterion on embedded documents. Since %{klass} is embedded, the expression %{javascript} is not allowed.\"},\"validations\":{\"message\":\"Validation of %{document} failed.\",\"resolution\":\"Try persisting the document with valid data or remove the validations.\",\"summary\":\"The following errors were found: %{errors}\"}}}},\"number\":{\"currency\":{\"format\":{\"delimiter\":\",\",\"format\":\"%u%n\",\"negative_format\":\"-%u%n\",\"precision\":2,\"separator\":\".\",\"significant\":false,\"strip_insignificant_zeros\":false,\"unit\":\"$\"}},\"format\":{\"delimiter\":\",\",\"precision\":3,\"round_mode\":\"default\",\"separator\":\".\",\"significant\":false,\"strip_insignificant_zeros\":false},\"human\":{\"decimal_units\":{\"format\":\"%n %u\",\"units\":{\"billion\":\"Billion\",\"million\":\"Million\",\"quadrillion\":\"Quadrillion\",\"thousand\":\"Thousand\",\"trillion\":\"Trillion\",\"unit\":\"\"}},\"format\":{\"delimiter\":\"\",\"precision\":3,\"significant\":true,\"strip_insignificant_zeros\":true},\"storage_units\":{\"format\":\"%n %u\",\"units\":{\"byte\":{\"one\":\"Byte\",\"other\":\"Bytes\"},\"eb\":\"EB\",\"gb\":\"GB\",\"kb\":\"KB\",\"mb\":\"MB\",\"pb\":\"PB\",\"tb\":\"TB\",\"zb\":\"ZB\"}}},\"nth\":{},\"percentage\":{\"format\":{\"delimiter\":\"\",\"format\":\"%n%\"}},\"precision\":{\"format\":{\"delimiter\":\"\"}}},\"pivot_list_column_value\":{\"non_sponsor_org\":\"Non Medtech OEM\"},\"pivot_list_download\":{\"id\":\"ZP_ID\"},\"simple_form\":{\"error_notification\":{\"default_message\":\"Please review the problems below:\"},\"no\":\"No\",\"required\":{\"mark\":\"*\",\"text\":\"required\"},\"yes\":\"Yes\"},\"support\":{\"array\":{\"last_word_connector\":\", and \",\"two_words_connector\":\" and \",\"words_connector\":\", \"}},\"terminology\":{\"all_orgs_list_category\":\"Companies\",\"companies_in_your_sf_label\":\"Companies in your Salesforce ⚡\",\"company_based_in\":\"MedTech company based in\",\"company_location\":\"MedTech Company Location\",\"neglected_target_label\":\"Neglected MedTech Companies ⚡\",\"sponsor\":\"MedTech Company\",\"sponsor_orgs_list_category\":\"MedTech Companies\",\"target_organization_title\":\"MedTech\"},\"time\":{\"am\":\"am\",\"formats\":{\"default\":\"%a, %d %b %Y %H:%M:%S %z\",\"long\":\"%B %d, %Y %H:%M\",\"short\":\"%d %b %H:%M\"},\"pm\":\"pm\"},\"users\":{\"confirmations\":{\"new\":{\"legend\":\"Resend your %{brand_name} confirmation instructions\",\"message\":\"We need to confirm your email address to complete the sign up process. Supply your email address, below, and we will send you instructions on how to confirm your address.\",\"submit_button\":\"Send Confirmation Instructions\",\"title\":\"Resend confirmation instructions | %{brand_name}\"},\"show\":{\"legend\":\"Check your inbox for a confirmation email\",\"message\":\"If your e-mail exists in our database we have sent you a message with instructions. Check your inbox (or spam folder) for a message from \\'%{default_from_email}\\' containing the confirmation link.\",\"title\":\"Awaiting confirmation | %{brand_name}\"}},\"passwords\":{\"new\":{\"failures\":\"Note: If you make more than 5 sequential failed attempts to sign in with your %{brand_name} password, your account will be (temporarily) locked. Check your inbox for instruction on how to unlock your account, or we can\",\"legend\":\"Reset your %{brand_name} password\",\"message\":\"Supply your email address, below, and we will send you instructions on how to reset your password.\",\"resend_link\":\"resend a new set of unlock instructions\",\"submit_button\":\"Send Reset Instructions\",\"title\":\"Reset password | %{brand_name}\"},\"show\":{\"didnt_receive_email\":\"Didn\\'t receive the email?\",\"legend\":\"Password reset instructions sent\",\"message\":\"If your e-mail exists in our database we have sent you a message with password reset instructions. Check your inbox (or spam folder) for a message from \\'%{default_from_email}\\'.\",\"resend_link\":\"you can request another one here\",\"title\":\"Awaiting reset | %{brand_name}\"}}},\"will_paginate\":{\"container_aria_label\":\"Pagination\",\"next_label\":\"Next \\\\u0026#8594;\",\"page_aria_label\":\"Page %{page}\",\"page_entries_info\":{\"multi_page\":\"Displaying %{model} %{from} - %{to} of %{count} in total\",\"multi_page_html\":\"Displaying %{model} \\\\u003cb\\\\u003e%{from}\\\\u0026nbsp;-\\\\u0026nbsp;%{to}\\\\u003c/b\\\\u003e of \\\\u003cb\\\\u003e%{count}\\\\u003c/b\\\\u003e in total\",\"single_page\":{\"one\":\"Displaying 1 %{model}\",\"other\":\"Displaying all %{count} %{model}\",\"zero\":\"No %{model} found\"},\"single_page_html\":{\"one\":\"Displaying \\\\u003cb\\\\u003e1\\\\u003c/b\\\\u003e %{model}\",\"other\":\"Displaying \\\\u003cb\\\\u003eall\\\\u0026nbsp;%{count}\\\\u003c/b\\\\u003e %{model}\",\"zero\":\"No %{model} found\"}},\"page_gap\":\"\\\\u0026hellip;\",\"previous_label\":\"\\\\u0026#8592; Previous\"},\"x_mailer_header\":\"clicks.zapyrus.com\"}'));\nI18n.translations[\"zebra\"] = I18n.extend((I18n.translations[\"zebra\"] || {}), JSON.parse('{\"activerecord\":{\"errors\":{\"messages\":{\"record_invalid\":\"Validation failed: %{errors}\",\"restrict_dependent_destroy\":{\"has_many\":\"Cannot delete record because dependent %{record} exist\",\"has_one\":\"Cannot delete record because a dependent %{record} exists\"}}}},\"brand\":{\"logo\":{\"full_image\":{\"file_name\":\"logo_dark_bkgrnd.png\",\"path\":\"images/brand_specific/zebra/logo_dark_bkgrnd.png\"},\"header\":{\"path\":\"/images/brand_specific/zebra/logo_dark_bkgrnd.png\"},\"mark_only\":{\"file_name\":\"logo_dark_bkgrnd.png\",\"path\":\"images/brand_specific/zebra/logo_dark_bkgrnd.png\"}},\"meta\":{\"description\":\"Zebricks is the only software solution designed for life-science industry professionals seeking comprehensive patient advocacy intelligence.\",\"image\":\"https://app.zebricks.com/images/brand_specific/zebra/meta_image.png\",\"title\":\"Zebricks: Real-time patient advocacy intelligence.\"},\"name\":\"Zebricks\",\"tag_line\":\"Putting patients first\"},\"bulk_uploads\":{\"email_local_part\":{\"empty_parameter\":\"No file uploaded\",\"error\":\"File Upload failed: %{error_message}\",\"success\":\"File was successfully uploaded\"}},\"common\":{\"crm\":{\"salesforce\":{\"forgot_password\":\"If you have forgotten your Salesforce password, please follow the instructions provided on the Salesforce sign in page.\",\"sign_in_button\":\"Sign In with Salesforce\"}}},\"contact\":{\"default_from_email\":\"patient_groups@zebricks.com \",\"phone_numbers\":[{\"label\":\"US\",\"phone\":\"1-844-996-3321\"},{\"label\":\"UK\",\"phone\":\"+44-208-133-9963\"}],\"support_email\":\"annemarie.bisson@zebricks.com \"},\"date\":{\"abbr_day_names\":[\"Sun\",\"Mon\",\"Tue\",\"Wed\",\"Thu\",\"Fri\",\"Sat\"],\"abbr_month_names\":[null,\"Jan\",\"Feb\",\"Mar\",\"Apr\",\"May\",\"Jun\",\"Jul\",\"Aug\",\"Sep\",\"Oct\",\"Nov\",\"Dec\"],\"day_names\":[\"Sunday\",\"Monday\",\"Tuesday\",\"Wednesday\",\"Thursday\",\"Friday\",\"Saturday\"],\"formats\":{\"default\":\"%Y-%m-%d\",\"long\":\"%B %d, %Y\",\"short\":\"%b %d\"},\"month_names\":[null,\"January\",\"February\",\"March\",\"April\",\"May\",\"June\",\"July\",\"August\",\"September\",\"October\",\"November\",\"December\"],\"order\":[\"year\",\"month\",\"day\"]},\"datetime\":{\"distance_in_words\":{\"about_x_hours\":{\"one\":\"about 1 hour\",\"other\":\"about %{count} hours\"},\"about_x_months\":{\"one\":\"about 1 month\",\"other\":\"about %{count} months\"},\"about_x_years\":{\"one\":\"about 1 year\",\"other\":\"about %{count} years\"},\"almost_x_years\":{\"one\":\"almost 1 year\",\"other\":\"almost %{count} years\"},\"half_a_minute\":\"half a minute\",\"less_than_x_minutes\":{\"one\":\"less than a minute\",\"other\":\"less than %{count} minutes\"},\"less_than_x_seconds\":{\"one\":\"less than 1 second\",\"other\":\"less than %{count} seconds\"},\"over_x_years\":{\"one\":\"over 1 year\",\"other\":\"over %{count} years\"},\"x_days\":{\"one\":\"1 day\",\"other\":\"%{count} days\"},\"x_minutes\":{\"one\":\"1 minute\",\"other\":\"%{count} minutes\"},\"x_months\":{\"one\":\"1 month\",\"other\":\"%{count} months\"},\"x_seconds\":{\"one\":\"1 second\",\"other\":\"%{count} seconds\"}},\"prompts\":{\"day\":\"Day\",\"hour\":\"Hour\",\"minute\":\"Minute\",\"month\":\"Month\",\"second\":\"Seconds\",\"year\":\"Year\"}},\"default_host\":\"https://app.zebricks.com\",\"devise\":{\"confirmations\":{\"confirmed\":\"Your account was successfully confirmed. Please sign in.\",\"send_instructions\":\"Your email has not been confirmed. We need to confirm your email account before you can sign in. Please check your inbox or spam folder for an email from \\'info@zymewire.com\\' or request a new one.\",\"send_paranoid_instructions\":\"If your e-mail exists on our database, you will receive an email with instructions about how to confirm your account in a few minutes.\"},\"failure\":{\"already_authenticated\":\"You are already signed in.\",\"expired\":\"Your account has expired due to inactivity. Please contact the site administrator.\",\"inactive\":\"Your account was not activated yet.\",\"invalid\":\"Invalid email or password. If you use Salesforce, use the \\'Have Salesforce?\\' panel.\",\"invalid_token\":\"Invalid authentication token.\",\"last_attempt\":\"You have one more attempt before your account is locked.\",\"locked\":\"Your account is locked.\",\"not_active\":\"Your account has been de-activated, if you think this is a mistake please contact us\",\"not_found_in_database\":\"Invalid %{authentication_keys} or password.\",\"session_limited\":\"Your login credentials were used in another browser. Please sign in again to continue in this browser.\",\"timeout\":\"Your session expired, please sign in again to continue.\",\"unauthenticated\":\"You need to sign in or sign up before continuing.\",\"unconfirmed\":\"We must confirm your email before you can continue. Please check your inbox or spam folder for a confirmation email from \\'info@zymewire.com\\' or request a new one.\"},\"invalid_captcha\":\"The captcha input is not valid!\",\"invalid_security_question\":\"The security question answer was invalid.\",\"mailer\":{\"confirmation_instructions\":{\"subject\":\"Confirmation instructions for Zymewire.com\"},\"email_changed\":{\"subject\":\"Email Changed\"},\"password_change\":{\"subject\":\"Password Changed\"},\"reset_password_instructions\":{\"subject\":\"Reset password instructions for Zymewire.com\"},\"unlock_instructions\":{\"subject\":\"Unlock Instructions for Zymewire.com\"}},\"omniauth_callbacks\":{\"failure\":\"Could not authorize you from %{kind} because \\\\\"%{reason}\\\\\".\",\"success\":\"Successfully authorized from %{kind} account.\"},\"paranoid_verification_code\":{\"show\":{\"submit\":\"Submit\",\"submit_verification_code\":\"Submit verification code\",\"verification_code\":\"Verification code\"},\"updated\":\"Verification code accepted\"},\"paranoid_verify\":{\"code_required\":\"Please enter the code our support team provided\"},\"password_expired\":{\"change_required\":\"Your password has expired. Please choose a new password!\",\"show\":{\"change_my_password\":\"Change my password\",\"current_password\":\"Current password\",\"new_password\":\"New password\",\"new_password_confirmation\":\"Confirm new password\",\"renew_your_password\":\"Renew your password\"},\"updated\":\"Your new password is saved.\"},\"passwords\":{\"no_token\":\"You can\\'t access this page without coming from a password reset email. If you do come from a password reset email, please make sure you used the full URL provided.\",\"send_instructions\":\"You will receive an email with instructions about how to reset your password in a few minutes.\",\"send_paranoid_instructions\":\"If your e-mail exists on our database, you will receive a password recovery link on your e-mail\",\"updated\":\"Your password was changed successfully. You are now signed in.\",\"updated_not_active\":\"Your password was changed successfully.\"},\"registrations\":{\"destroyed\":\"Bye! Your account was successfully cancelled. We hope to see you again soon.\",\"signed_up\":\"Welcome! You have signed up successfully.\",\"signed_up_but_inactive\":\"You have signed up successfully. However, we could not sign you in because your account is not yet activated.\",\"signed_up_but_locked\":\"You have signed up successfully. However, we could not sign you in because your account is locked.\",\"signed_up_but_unconfirmed\":\"A message with a confirmation link has been sent to your email address. Please open the link to activate your account.\",\"update_needs_confirmation\":\"You updated your account successfully, but we need to verify your new email address. Please check your email and click on the confirm link to finalize confirming your new email address.\",\"updated\":\"You updated your account successfully.\",\"updated_but_not_signed_in\":\"Your account has been updated successfully, but since your password was changed, you need to sign in again.\"},\"sessions\":{\"already_signed_out\":\"Signed out successfully.\",\"signed_in\":\"Signed in successfully.\",\"signed_out\":\"Signed out successfully.\"},\"unlocks\":{\"send_instructions\":\"You will receive an email with instructions about how to unlock your account in a few minutes.\",\"send_paranoid_instructions\":\"If your account exists, you will receive an email with instructions about how to unlock it in a few minutes.\",\"unlocked\":\"Your account has been unlocked successfully. Please sign in to continue.\"}},\"disable_crm_login_option\":\"true\",\"domain\":\"zebricks.com\",\"download\":\"Download\",\"download_30_days\":\"This link will be available for 30 days after which the file will be removed from our servers.\",\"enumerize\":{\"blocklisted_contact\":{\"provider\":{\"insideview\":\"InsideView\",\"zephyr\":\"Zephyr\"}}},\"errors\":{\"format\":\"%{attribute} %{message}\",\"messages\":{\"accepted\":\"must be accepted\",\"already_confirmed\":\"was already confirmed, please try signing in\",\"blank\":\"can\\'t be blank\",\"confirmation\":\"doesn\\'t match %{attribute}\",\"confirmation_period_expired\":\"needs to be confirmed within %{period}, please request a new one\",\"empty\":\"can\\'t be empty\",\"equal_to\":\"must be equal to %{count}\",\"equal_to_current_password\":\"Sorry, must be different to your current password!\",\"equal_to_email\":\"must be different than the email.\",\"even\":\"must be even\",\"exclusion\":\"is reserved\",\"expired\":\"has expired, please request a new one\",\"greater_than\":\"must be greater than %{count}\",\"greater_than_or_equal_to\":\"must be greater than or equal to %{count}\",\"in\":\"must be in %{count}\",\"inclusion\":\"is not included in the list\",\"invalid\":\"is invalid\",\"less_than\":\"must be less than %{count}\",\"less_than_or_equal_to\":\"must be less than or equal to %{count}\",\"model_invalid\":\"Validation failed: %{errors}\",\"not_a_number\":\"is not a number\",\"not_an_integer\":\"must be an integer\",\"not_found\":\"not found\",\"not_locked\":\"was not locked\",\"not_saved\":{\"one\":\"1 error prohibited this %{resource} from being saved:\",\"other\":\"%{count} errors prohibited this %{resource} from being saved:\"},\"odd\":\"must be odd\",\"other_than\":\"must be other than %{count}\",\"password_complexity\":{\"digit\":{\"one\":\"must contain at least one digit\",\"other\":\"must contain at least %{count} digits\"},\"lower\":{\"one\":\"must contain at least one lower-case letter\",\"other\":\"must contain at least %{count} lower-case letters\"},\"symbol\":{\"one\":\"must contain at least one punctuation mark or symbol\",\"other\":\"must contain at least %{count} punctuation marks or symbols\"},\"upper\":{\"one\":\"must contain at least one upper-case letter\",\"other\":\"must contain at least %{count} upper-case letters\"}},\"password_format\":\"Must contain uppercase AND lowercase letters and at least one number\",\"password_too_long\":\"is too long\",\"present\":\"must be blank\",\"required\":\"must exist\",\"taken\":\"has already been taken\",\"taken_in_past\":\"Sorry, you have used this password before!\",\"too_long\":{\"one\":\"is too long (maximum is 1 character)\",\"other\":\"is too long (maximum is %{count} characters)\"},\"too_short\":{\"one\":\"is too short (minimum is 1 character)\",\"other\":\"is too short (minimum is %{count} characters)\"},\"wrong_length\":{\"one\":\"is the wrong length (should be 1 character)\",\"other\":\"is the wrong length (should be %{count} characters)\"}}},\"flash\":{\"actions\":{\"create\":{\"notice\":\"%{resource_name} was successfully created.\"},\"destroy\":{\"alert\":\"%{resource_name} could not be destroyed.\",\"notice\":\"%{resource_name} was successfully destroyed.\"},\"update\":{\"notice\":\"%{resource_name} was successfully updated.\"}}},\"hello_world\":\"Hello world\",\"help\":{\"articles\":{\"crm_mining\":\"/help/articles/13976-mine-your-companys-salesforce-for-opportunities\",\"finding_contact_info\":\"/help/articles/13987-finding-contact-information\",\"guide_d\":\"/help/guide_d\",\"guide_g\":\"/help/guide_g\",\"guide_h\":\"/help/guide_h\",\"guide_i\":\"/help/guide_i\",\"guide_j\":\"/help/guide_j\",\"list_crud_c\":\"/help/articles/13985-generating-a-list\",\"list_crud_u\":\"/help/articles/18991-adding-and-removing-individual-companies-from-a-list\",\"map_search\":\"/help/articles/13980-map-based-searching\",\"saving_feeds\":\"/help/articles/13986-saving-feeds\"},\"site\":\"https://zebricks.helpsite.com/\"},\"helpers\":{\"select\":{\"prompt\":\"Please select\"},\"submit\":{\"create\":\"Create %{model}\",\"submit\":\"Save %{model}\",\"update\":\"Update %{model}\"}},\"hi\":\"Hi\",\"industry\":\"healthcare interest groups\",\"mailers\":{\"common\":{\"chummy_sign_off\":\"Have a good one.\",\"final_note\":\"P.S.: If you think you received this email accidentally, then something weird could be going on. Hit reply and a member of the %{brand_name} team will investigate.\",\"team_sign_off\":\"- The %{brand_name} Team\"},\"confirmation_instructions_email\":{\"crm\":{\"salesforce\":{\"resource_confirmed\":\"Someone has requested a resend of a confirmation email. You do not need to confirm your email address because your account is configured to use Salesforce to sign in.\",\"resource_unconfirmed\":\"You do not need to confirm your email address because your account is configured to use Salesforce to sign in, please complete the sign up process by clicking the button below to sign in to %{brand_name} via Salesforce.\"}},\"non_crm\":{\"confirm_link\":\"Confirm my account\",\"welcome\":\"Welcome to %{brand_name}. As the final step in the process you\\'ll need to confirm your account by clicking on the link below.\"},\"subject\":\"Confirmation instructions for %{domain}\"},\"flagged_events_mailer\":{\"from\":\"Flagged events - %{brand_name} \\\\u003cflagged_events@mailer.%{domain}\\\\u003e\"},\"mobile_registration_email\":{\"alert_cs_registration_locked\":{\"subject\":\"%{brand_name}: user has had mobile registration locked, too many failed attempts\"},\"dispatch_registration_PIN\":{\"further_instructions\":\"If you are NOT attempting to register for the %{brand_name} Mobile app then please let us know at %{support_email_link} - thank you.\",\"introduction\":\"Here is your mobile app registration PIN:\",\"subject\":\"%{brand_name} Mobile Registration Verification\"},\"too_many_failed_attempts\":{\"introduction\":\"We have received too many failed mobile device registration attempts for your account and we will block any further requests. If you have not attempted to register a mobile device with us in the last hour then please let us know as it is likely someone has tried on your behalf. If you have been trying to register a device please contact %{support_email_link} and we can help unlock your account and get you registered.\",\"subject\":\"%{brand_name}: too many failed registration attempts\"}},\"org_list_download_mail\":{\"dispatch_link\":{\"introduction\":\"We have finished meshing your %{crm_brand_name} data with the companies in your \\\\\"%{list_name}\\\\\" list.\",\"subject\":\"%{brand_name}: your file download of \\'%{list_name}\\' is ready\"},\"failed\":{\"instructions\":\"You could try again in a little while. If you already have and are receiving this email again, please contact us at %{support_email_link}\",\"introduction\":\"We are really sorry, but something went wrong with creating your download of %{crm_brand_name} data for your \\\\\"%{list_name}\\\\\" list.\",\"subject\":\"%{brand_name}: your file download of \\'%{list_name}\\' failed\"}},\"reset_password_instructions_email\":{\"crm\":{\"salesforce\":{\"change_requested\":\"Someone has requested a change to your password. Your account is configured to use Salesforce to sign in.\"}},\"fishy_fine_print\":\"If you did not request a password change, then something weird is going on. Someone may be trying to access your account (unsuccessfully). Please reply to this email and let us know. We will take steps to make sure it stops.\",\"non_crm\":{\"change_password_link\":\"Change my password\",\"change_requested\":\"Someone has requested a change to your password, you can do this via the link below.\"},\"subject\":\"Password reset instructions for %{domain}\"},\"sales_force_mail\":{\"processing_completed\":{\"bullet_points\":[\"Only show events associated with companies in your Salesforce account\",\"Add new contacts and accounts to your Salesforce account without leaving %{brand_name}\",\"Access the \\'Salesforce details\\' panel on company dashboards where you can see open tasks, team interactions, opportunities, and more!\"],\"further_instructions\":\"We\\'re here to help. If you run into any questions or challenges, please contact us at %{support_email_link} and a member of our team would be more than happy to help.\",\"get_the_most\":\"To get the most from the integration, check out the \\'Mine Salesforce for opportunities\\' guide in the Help Center.\",\"guide_button\":\"Take me to the guide\",\"introduction\":\"Good news - your Salesforce account is now integrated with %{brand_name}. Now you’ll be able to:\"}},\"segment_contact\":{\"report_manager\":{\"fail_subject\":\"%{brand_name}: The PDF report generation failed\",\"success_subject\":\"%{brand_name}: Your PDF for %{company_name} is attached\"}},\"sf_token_expiry_email\":{\"further_instructions\":\"If you run into any questions or challenges, please contact us at %{support_email_link} and a member of our team would be more than happy to help.\",\"introduction\":\"Unfortunately the connection established for you between %{brand_name} and your %{crm_brand_name} account has expired. We will not be able to update your lists in %{brand_name} to reflect your %{crm_brand_name} database. To re-establish the connection, you just need to log in to %{brand_name} using your %{crm_brand_name}.\",\"subject\":\"%{brand_name} to %{crm_brand_name} connection has expired\"},\"share_list_mail\":{\"introduction\":\"%{user_name} shared a list with you: \",\"subject\":\"[%{brand_name} - shared list] %{list_name}\"},\"trial_expiry_mail\":{\"seven_days_to_go\":{\"further_instructions\":\"A member of our fabulous Customer Success team will arrange a welcome call with you to understand your goals and priorities, and will then give you a personalized Tour de %{brand_name} so you can easily access the information that is most valuable to you.\",\"instructions\":\"If you\\'d like continued access to the platform with our flexible month-to-month subscription, please ensure you contact %{support_email_link} ahead of: %{deadline}\",\"introduction\":\"Time flies when you\\'re uncovering new business opportunities! Your %{brand_name} trial is coming to an end next week.\",\"sign_off\":\"We look forward to helping you reach your sales goals!\",\"subject\":\"Just a heads up that your %{brand_name} trial is ending in seven days\"},\"seven_days_to_go_warning_for_cs\":{\"introduction\":\"%{user_name} shared a list with you: \",\"subject\":\"[%{brand_name} - shared list] %{list_name}\"}},\"unlock_instructions_email\":{\"crm\":{\"salesforce\":{\"change_requested\":\"You are being sent this email either because of one too many unsuccessful non-Salesforce log-in attempts or someone has requested an unlock email. %{brand_name} has not locked your account because your account is configured to use Salesforce to sign in.\",\"password_forgotten\":\"If you have forgotten your Salesforce password or think your account has been locked by Salesforce, please follow the instructions provided on the Salesforce sign in page.\"}},\"fishy_fine_print\":\"If you have not been (unsuccessfully) trying to log in to your account, then something weird is going on. Someone may be trying to access your account (unsuccessfully). Please reply to this email and let us know. We will take steps to make sure it stops.\",\"non_crm\":{\"change_requested\":\"For security reasons we have locked your account because of too many log-in attempts. To unlock your account, click the link below.\",\"unlock_account_link\":\"Unlock my account\"},\"subject\":\"Unlock instructions for %{domain}\"}},\"mobile_website\":{\"cta\":\"Sign Up to Newsletter\",\"cta_link\":\"https://share.hsforms.com/1FtKCDTqSQrWmsviuJDnupgbm5d1\",\"header\":\"Desktop access only (For now!)\",\"message\":\"Head to your desktop to sign into Zebricks. The mobile app isn\\'t ready yet, but hopefully not for long!\",\"prompt\":\"Stay updated\"},\"mongoid\":{\"errors\":{\"messages\":{\"ambiguous_relationship\":{\"message\":\"Ambiguous associations %{candidates} defined on %{klass}.\",\"resolution\":\"On the %{name} association on %{inverse} you must add an :inverse_of option to specify the exact association on %{klass} that is the opposite of %{name}.\",\"summary\":\"When Mongoid attempts to set an inverse document of an association in memory, it needs to know which association it belongs to. When setting %{name}, Mongoid looked on the class %{inverse} for a matching association, but multiples were found that could potentially match: %{candidates}.\"},\"blank_in_locale\":\"can\\'t be blank in %{location}\",\"callbacks\":{\"message\":\"Calling %{method} on %{klass} resulted in a false return from a callback.\",\"resolution\":\"Double check all before callbacks to make sure they are not unintentionally returning false.\",\"summary\":\"If a before callback returns false when using Document.create!, Document#save!, or Document#update_attributes! this error will get raised since the document did not actually get saved.\"},\"calling_document_find_with_nil_is_invalid\":{\"message\":\"Calling Document.find with nil is invalid.\",\"resolution\":\"Most likely this is caused by passing parameters directly through to the find, and the parameter either is not present or the key from which it is accessed is incorrect.\",\"summary\":\"Document.find expects the parameters to be 1 or more ids, and will return a single document if 1 id is provided, otherwise an array of documents if multiple ids are provided.\"},\"create_collection_failure\":{\"message\":\"Cannot create collection %{collection_name} with options %{collection_options}. The following error was raised: %{error}.\",\"resolution\":\"Double check that collection options for the collection %{collection_name} are valid. Consult with Ruby driver documentation and MongoDB documentation if the desired options are supported by your version of the server.\",\"summary\":\"The server rejected createCollection command with given collection options. This may happen when some of the options are invalid, or not supported by your version of the server.\"},\"criteria_argument_required\":{\"message\":\"Calling Criteria methods with nil arguments is not allowed.\",\"resolution\":\"Invoke Criteria methods with non-nil arguments or omit the respective invocations.\",\"summary\":\"Arguments to Criteria methods cannot be nil, and most Criteria methods require at least one argument. Only logical operations (and, or, nor and not), `all\\' and `where\\' can be called without arguments. The method that was called with nil argument was: %{query_method}.\"},\"delete_restriction\":{\"message\":\"Cannot destroy %{document} because of dependent \\'%{relation}\\'.\",\"resolution\":\"Don\\'t attempt to delete the parent %{document} when it has children, or change the dependent option on the association.\",\"summary\":\"When defining \\'%{relation}\\' with a :dependent =\\\\u003e :restrict_with_error, Mongoid will raise an error when attempting to destroy the %{document} when the child \\'%{relation}\\' still has documents in it.\"},\"destroy_restrict_with_error_dependencies_exist\":\"is not empty and prevents the document from being destroyed\",\"document_not_destroyed\":{\"message\":\"%{klass} with id %{id} was not destroyed.\",\"resolution\":\"Check the before/after destroy callbacks to ensure that the return values are truthy for the chain to continue.\",\"summary\":\"When calling %{klass}#destroy! and a callback halts the destroy callback chain by returning a false value, the deletion will not actually occur.\"},\"document_not_found\":{\"message\":\"Document(s) not found for class %{klass} with id(s) %{missing}.\",\"resolution\":\"Search for an id that is in the database or set the Mongoid.raise_not_found_error configuration option to false, which will cause nil to be returned instead of raising this error when searching for a single id, or only the matched documents when searching for multiples.\",\"summary\":\"When calling %{klass}.find with an id or array of ids, each parameter must match a document in the database or this error will be raised. The search was for the id(s): %{searched} (%{total} total) and the following ids were not found: %{missing}.\"},\"document_with_attributes_not_found\":{\"message\":\"Document not found for class %{klass} with attributes %{attributes}.\",\"resolution\":\"Search for attributes that are in the database or set the Mongoid.raise_not_found_error configuration option to false, which will cause nil to be returned instead of raising this error.\",\"summary\":\"When calling %{klass}.find_by with a hash of attributes, all attributes provided must match a document in the database or this error will be raised.\"},\"document_with_shard_key_not_found\":{\"message\":\"Document not found for class %{klass} with id %{missing} and shard key %{shard_key}.\",\"resolution\":\"Search for an id/shard key that is in the database or set the Mongoid.raise_not_found_error configuration option to false, which will cause nil to be returned instead of raising this error.\",\"summary\":\"When calling %{klass}.find with an id and a shard key, each parameter must match a document in the database or this error will be raised. The search was for the id: %{missing} with shard_key: %{shard_key} and it was not found.\"},\"drop_collection_failure\":{\"message\":\"Cannot drop collection %{collection_name}.\",\"resolution\":\"Try to drop the collection manually using Ruby driver or mongo shell.\",\"summary\":\"Mongoid tried to drop collection %{collection_name}, but the collection still exists in the database.\"},\"empty_config_file\":{\"message\":\"Empty configuration file: %{path}.\",\"resolution\":\"Ensure your configuration file contains the correct contents. Refer to: https://www.mongodb.com/docs/mongoid/current/reference/configuration/\",\"summary\":\"Your mongoid.yml configuration file appears to be empty.\"},\"immutable_attribute\":{\"message\":\"Attempted to change the immutable attribute \\'%{name}\\' with the value: %{value}.\",\"resolution\":\"Do not attempt to update the value of \\'%{name}\\' after the document is persisted.\",\"summary\":\"Immutable attributes can only have values set when the document is a new record.\"},\"in_memory_collation_not_supported\":{\"message\":\"A collation option cannot be applied when querying documents in-memory.\",\"resolution\":\"Remove the collation option from the query.\",\"summary\":\"The query being run against documents in memory has a collation option set. A collation option is only supported if the query is executed on a MongoDB server with version \\\\u003e= 3.4.\"},\"invalid_async_query_executor\":{\"message\":\"Invalid async_query_executor option: %{executor}.\",\"resolution\":\"Pick an allowed option or fix the typo. If you were expecting the option to be there, please consult the following page with respect to Mongoid\\'s configuration:\\\\n\\\\n   https://www.mongodb.com/docs/mongoid/current/reference/configuration/#mongoid-configuration-options\",\"summary\":\"A invalid async query executor was specified. The valid options are: %{options}.\"},\"invalid_collection\":{\"message\":\"Access to the collection for %{klass} is not allowed.\",\"resolution\":\"For access to the collection that the embedded document is in, use %{klass}#_root.collection, or do not attempt to persist an embedded document without a parent set.\",\"summary\":\"%{klass}.collection was called, and %{klass} is an embedded document - it resides within the collection of the root document of the hierarchy.\"},\"invalid_config_file\":{\"message\":\"Invalid configuration file: %{path}.\",\"resolution\":\"Ensure your configuration file contains the correct contents. Refer to: https://www.mongodb.com/docs/mongoid/current/reference/configuration/\",\"summary\":\"Your mongoid.yml configuration file does not contain the correct file structure.\"},\"invalid_config_option\":{\"message\":\"Invalid configuration option: %{name}.\",\"resolution\":\"Remove the invalid option or fix the typo. If you were expecting the option to be there, please consult the following page with respect to Mongoid\\'s configuration:\\\\n\\\\n   http://mongoid.org/en/mongoid/docs/installation.html\",\"summary\":\"A invalid configuration option was provided in your mongoid.yml, or a typo is potentially present. The valid configuration options are: %{options}.\"},\"invalid_dependent_strategy\":{\"message\":\"Invalid dependent strategy: %{invalid_strategy}.\",\"resolution\":\"Change the dependent strategy to one of the valid types.\",\"summary\":\"An invalid dependent strategy was defined for the association: %{association}. The valid strategies are: %{valid_strategies}.\"},\"invalid_discriminator_key_target\":{\"message\":\"Setting the discriminator key on a child class is not allowed.\",\"resolution\":\"Try setting the discriminator key on %{superclass} or one of %{class_name}\\'s ancestors.\",\"summary\":\"The discriminator key on the class %{class_name} was attempted to be changed. Changing the discriminator key on a child class is not allowed.\"},\"invalid_dot_dollar_assignment\":{\"message\":\"Cannot set the %{attr} attribute on the %{klass} class.\",\"resolution\":\"In order to set fields that start with a dollar sign ($) or contain a dot/period (.), the aggregation pipeline can be used. MongoDB provides specific operators for working with these fields. Refer to the MongoDB documentation here: https://www.mongodb.com/docs/manual/core/dot-dollar-considerations/\",\"summary\":\"Calling the setters for fields that start with a dollar sign ($) or contain a dot/period (.) is prohibited. See the Mongoid documentation on Field Names with Dots/Periods (.) and Dollar Signs ($) for more information.\"},\"invalid_elem_match_operator\":{\"message\":\"Invalid $elemMatch operator \\'%{operator}\\'.\",\"resolution\":\"Valid field operators are: %{valid_operators}. Ensure you are using one of these operators.\",\"summary\":\"You misspelled an operator or are using an operator that Mongoid does not support.\"},\"invalid_estimated_count_criteria\":{\"message\":\"Invalid criteria for estimated_count.\",\"resolution\":\"Try calling estimated_count directly on the class: %{class_name}.estimated_count.\\\\n\\\\n  If the class defines a default scope, use unscoped: %{class_name}.unscoped.estimated_count.\",\"summary\":\"Estimated count is strictly a collection-level operation and cannot be called on a filtered criteria.\"},\"invalid_expression_operator\":{\"message\":\"Invalid expression operator \\'%{operator}\\'.\",\"resolution\":\"Valid expression operators are: %{valid_operators}. Ensure you are using one of these operators.\",\"summary\":\"You misspelled an operator, are using an operator that Mongoid does not support, or are trying to use a field-level operator on expression level.\"},\"invalid_field\":{\"message\":\"Defining a field named \\'%{field}\\' is not allowed.\",\"resolution\":\"Use Mongoid.destructive_fields to see what names are not allowed, and don\\'t use these names. These include names that also conflict with core Ruby methods on Object, Module, Enumerable, or included gems that inject methods into these or Mongoid internals.\",\"summary\":\"Defining this field would override the method \\'%{name}\\', which would cause issues with expectations around the original method and cause extremely hard to debug issues. The original method was defined in:\\\\n   Object: %{origin}\\\\n   File: %{file}\\\\n   Line: %{line}\"},\"invalid_field_operator\":{\"message\":\"Invalid field operator \\'%{operator}\\'.\",\"resolution\":\"Valid field operators are: %{valid_operators}. Ensure you are using one of these operators.\",\"summary\":\"You misspelled an operator, are using an operator that Mongoid does not support, or are trying to use an expression-level operator on field level.\"},\"invalid_field_option\":{\"message\":\"Invalid option :%{option} provided for field :%{name}.\",\"resolution\":\"When defining the field :%{name} on \\'%{klass}\\', please provide valid options for the field. These are currently: %{valid}. If you meant to define a custom field option, please do so first as follows:\\\\n\\\\n   Mongoid::Fields.option :%{option} do |model, field, value|\\\\n     # Your logic here...\\\\n   end\\\\n   class %{klass}\\\\n     include Mongoid::Document\\\\n     field :%{name}, %{option}: true\\\\n   end\\\\n\\\\n Refer to: https://www.mongodb.com/docs/mongoid/current/reference/fields/#custom-field-options\",\"summary\":\"Mongoid requires that you only provide valid options on each field definition in order to prevent unexpected behavior later on.\"},\"invalid_field_type\":{\"message\":\"Invalid field type %{type_inspection} for field \\'%{field}\\' on model \\'%{klass}\\'.\",\"resolution\":\"Please provide a valid type value for the field. Refer to: https://www.mongodb.com/docs/mongoid/current/reference/fields/#using-symbols-or-strings-instead-of-classes\",\"summary\":\"Model \\'%{klass}\\' defines a field \\'%{field}\\' with an unknown type value %{type_inspection}.\"},\"invalid_global_executor_concurrency\":{\"message\":\"Invalid global_executor_concurrency option.\",\"resolution\":\"Set global_executor_concurrency option to :global_thread_pool or remove global_executor_concurrency option.\",\"summary\":\"You set global_executor_concurrency while async_query_executor option is not set to :global_thread_pool. The global_executor_concurrency is allowed only for the global thread pool executor.\"},\"invalid_includes\":{\"message\":\"Invalid includes directive: %{klass}.includes(%{args})\",\"resolution\":\"Ensure that each parameter passed to %{klass}.includes is a valid name of an association on the %{klass} model. These are: %{relations}.\",\"summary\":\"Eager loading in Mongoid only supports providing arguments to %{klass}.includes that are the names of associations on the %{klass}.\"},\"invalid_index\":{\"message\":\"Invalid index specification on %{klass}: %{spec}, %{options}\",\"resolution\":\"Ensure that the index conforms to the correct syntax and has the correct options.\\\\n\\\\n Valid options are:\\\\n   background: true|false\\\\n   database: \\'database_name\\'\\\\n   name: \\'index_name\\'\\\\n   sparse: true|false\\\\n   unique: true|false\\\\n   min: 1\\\\n   max: 1\\\\n   bits: 26\\\\n   key: 26\\\\n   bucket_size : 1\\\\n   sphere_version : 1\\\\n   text_version : 1\\\\n   version : 1\\\\n   weights: { content: 1, title: 2 }\\\\n   expire_after_seconds: number_of_seconds\\\\n   partial_filter_expression\\\\n   storage_engine\\\\n   language_override\\\\n   default_language\\\\n   collation\\\\n   wildcard_projection: { \\'path.to.field.a\\': 1, \\'path.to.field.b\\': 0 }\\\\n Valid types are: 1, -1, \\'2d\\', \\'2dsphere\\', \\'geoHaystack (deprecated)\\', \\'text\\', \\'hashed\\'\\\\n\\\\n Example:\\\\n   class Band\\\\n     include Mongoid::Document\\\\n     index({ name: 1, label: -1 }, { sparse: true })\\\\n     index({ location: \\'2d\\' }, { background: true })\\\\n   end\\\\n\\\\n\",\"summary\":\"Indexes in Mongoid are defined as a hash of field name and direction/2d pairs, with a hash for any additional options.\"},\"invalid_options\":{\"message\":\"Invalid option :%{invalid} provided to association :%{name}.\",\"resolution\":\"Valid options are: %{valid}, make sure these are the ones you are using.\",\"summary\":\"Mongoid checks the options that are passed to the association macros to ensure that no ill side effects occur by letting something slip by.\"},\"invalid_path\":{\"message\":\"Having a root path assigned for %{klass} is invalid.\",\"resolution\":\"Most likely your embedded model, %{klass} is also referenced via a has_many from a root document in another collection. Double check the association definitions and fix any instances where embedded documents are improperly referenced from other collections.\",\"summary\":\"Mongoid has two different path objects for determining the location of a document in the database, Root and Embedded. This error is raised when an embedded document somehow gets a root path assigned.\"},\"invalid_persistence_option\":{\"message\":\"Invalid persistence option :%{invalid}.\",\"resolution\":\"Valid options are: %{valid}, make sure these are the ones you are using.\",\"summary\":\"The options used to change the persistence context must be one of the valid options for a mongo client, or a collection name.\"},\"invalid_relation\":{\"message\":\"Defining an association named \\'%{name}\\' is not allowed.\",\"resolution\":\"Use Mongoid.destructive_fields to see what names are not allowed, and don\\'t use these names. These include names that also conflict with core Ruby methods on Object, Module, Enumerable, or included gems that inject methods into these or Mongoid internals.\",\"summary\":\"Defining this association would override the method \\'%{name}\\', which would cause issues with expectations around the original method and cause extremely hard to debug issues. The original method was defined in:\\\\n   Object: %{origin}\\\\n   File: %{file}\\\\n   Line: %{line}\"},\"invalid_relation_option\":{\"message\":\"Invalid association option :%{option} for association \\'%{name}\\' on class %{klass}.\",\"resolution\":\"Valid options are: %{valid_options}, make sure you use only those.\",\"summary\":\"An invalid option was provided for an association.\"},\"invalid_scope\":{\"message\":\"Defining a scope of value %{value} on %{klass} is not allowed.\",\"resolution\":\"Change the scope to be a proc wrapped criteria.\\\\n\\\\n Example:\\\\n   class Band\\\\n     include Mongoid::Document\\\\n     scope :inactive, -\\\\u003e{ where(active: false) }\\\\n   end\\\\n\\\\n\",\"summary\":\"Scopes in Mongoid must be procs that wrap criteria objects.\"},\"invalid_session_nesting\":{\"message\":\"A session was started while another session was being used.\",\"resolution\":\"Only use one session at a time; sessions cannot be nested.\",\"summary\":\"Sessions cannot be nested. Only one session can be used in a thread at once.\"},\"invalid_session_use\":{\"message\":\"A session was attempted to be used with a model whose client cannot use that session.\",\"resolution\":\"Only execute operations on the model class or instances of the model through which the session was created. Otherwise, ensure that all models on which operations are executed in the session block share the same driver client. For example, a model may have a different client specified in its \\'store_in\\' options.\\\\n\\\\n\",\"summary\":\"Sessions are started via driver clients (Model#mongo_client) and, in most cases, driver clients are shared across models. When different models have their own clients, a session cannot be obtained via one model and used for operations on another model.\"},\"invalid_set_polymorphic_relation\":{\"message\":\"The %{name} attribute can\\'t be set to an instance of %{other_klass} as %{other_klass} has multiple associations referencing %{klass} as %{name}.\",\"resolution\":\"Set the values from the parent, or redefine the association with only a single definition in the parent.\",\"summary\":\"If the parent class of a polymorphic association has multiple definitions for the same association, the values must be set from the parent side and not the child side since Mongoid cannot determine from the child side which association to go in.\"},\"invalid_storage_options\":{\"message\":\"Invalid options passed to %{klass}.store_in: %{options}.\",\"resolution\":\"Change the options passed to store_in to match the documented API, and ensure all keys in the options hash are symbols.\\\\n\\\\n Example:\\\\n   class Band\\\\n     include Mongoid::Document\\\\n     store_in collection: \\'artists\\', database: \\'music\\'\\\\n   end\\\\n\\\\n\",\"summary\":\"The :store_in macro takes only a hash of parameters with the keys :database, :collection, :collection_options, or :client.\"},\"invalid_time\":{\"message\":\"\\'%{value}\\' is not a valid Time.\",\"resolution\":\"Make sure to pass parsable values to the field setter for Date, DateTime, and Time objects. When this is a String it needs to be valid for Time.parse. Other objects must be valid to pass to Time.local.\",\"summary\":\"Mongoid tries to serialize the values for Date, DateTime, and Time into proper UTC times to store in the database. The provided value could not be parsed.\"},\"inverse_not_found\":{\"message\":\"When adding a(n) %{klass} to %{base}#%{name}, Mongoid could not determine the inverse foreign key to set. The attempted key was \\'%{inverse}\\'.\",\"resolution\":\"If an inverse is not required, like a belongs_to or has_and_belongs_to_many, ensure that :inverse_of =\\\\u003e nil is set on the association. If the inverse is needed, most likely the inverse cannot be figured out from the names of the associations and you will need to explicitly tell Mongoid on the association what the inverse is.\\\\n\\\\n Example:\\\\n   class Car\\\\n     include Mongoid::Document\\\\n     has_one :engine, class_name: \\\\\"Motor\\\\\", inverse_of: :machine\\\\n   end\\\\n\\\\n   class Motor\\\\n     include Mongoid::Document\\\\n     belongs_to :machine, class_name: \\\\\"Car\\\\\", inverse_of: :engine\\\\n   end\",\"summary\":\"When adding a document to an association, Mongoid attempts to link the newly added document to the base of the association in memory, as well as set the foreign key to link them on the database side. In this case Mongoid could not determine what the inverse foreign key was.\"},\"message_title\":\"message\",\"mixed_client_configuration\":{\"message\":\"Both uri and standard configuration options defined for client: \\'%{name}\\'.\",\"resolution\":\"Provide either only a uri as configuration or only standard options.\",\"summary\":\"Instead of simply giving uri or standard options a preference order, Mongoid assumes that you have made a mistake in your configuration and requires that you provide one or the other, but not both. The options that were provided were: %{config}.\"},\"mixed_relations\":{\"message\":\"Referencing a(n) %{embedded} document from the %{root} document via a non-embedded association is not allowed since the %{embedded} is embedded.\",\"resolution\":\"Consider not embedding %{embedded}, or do the key storage and access in a custom manner in the application code.\",\"summary\":\"In order to properly access a(n) %{embedded} from %{root} the reference would need to go through the root document of %{embedded}. In a simple case this would require Mongoid to store an extra foreign key for the root, in more complex cases where %{embedded} is multiple levels deep a key would need to be stored for each parent up the hierarchy.\"},\"nested_attributes_metadata_not_found\":{\"message\":\"Could not find metadata for association \\'%{name}\\' on model: %{klass}.\",\"resolution\":\"Make sure that there is an association defined named \\'%{name}\\' on %{klass} or that the association definition comes before the accepts_nested_attributes_for macro in the model - order matters so that Mongoid has access to the metadata.\\\\n\\\\n Example:\\\\n   class Band\\\\n     include Mongoid::Document\\\\n     has_many :albums\\\\n     accepts_nested_attributes_for :albums\\\\n   end\\\\n\\\\n\",\"summary\":\"When defining nested attributes for an association, Mongoid needs to access the metadata for the association \\'%{name}\\' in order if add autosave functionality to it, if applicable. Either no association named \\'%{name}\\' could be found, or the association had not been defined yet.\"},\"no_client_config\":{\"message\":\"No configuration could be found for a client named \\'%{name}\\'.\",\"resolution\":\"Double check your mongoid.yml to make sure under the clients key that a configuration exists for \\'%{name}\\'. If you have set the configuration programmatically, ensure that \\'%{name}\\' exists in the configuration hash.\",\"summary\":\"When attempting to create the new client, Mongoid could not find a client configuration for the name: \\'%{name}\\'. This is necessary in order to know the host, port, and options needed to connect.\"},\"no_client_database\":{\"message\":\"No database provided for client configuration: :%{name}.\",\"resolution\":\"If configuring via a mongoid.yml, ensure that within your :%{name} section a :database value for the client\\'s default database is defined.\\\\n\\\\n Example:\\\\n   development:\\\\n     clients:\\\\n       %{name}:\\\\n         database: my_app_db\\\\n         hosts:\\\\n           - localhost:27017\\\\n\\\\n\",\"summary\":\"Each client configuration must provide a database so Mongoid knows where the default database to persist to. What was provided was: %{config}.\"},\"no_client_hosts\":{\"message\":\"No hosts provided for client configuration: :%{name}.\",\"resolution\":\"If configuring via a mongoid.yml, ensure that within your :%{name} section a :hosts value for the client hosts is defined.\\\\n\\\\n Example:\\\\n   development:\\\\n     clients:\\\\n       %{name}:\\\\n         database: my_app_db\\\\n         hosts:\\\\n           - localhost:27017\\\\n\\\\n\",\"summary\":\"Each client configuration must provide hosts so Mongoid knows where the database server is located. What was provided was: %{config}.\"},\"no_clients_config\":{\"message\":\"No clients configuration provided.\",\"resolution\":\"Double check your mongoid.yml to make sure that you have a top-level clients key with at least 1 default client configuration for it. You can regenerate a new mongoid.yml for assistance via `rails g mongoid:config`.\\\\n\\\\n Example:\\\\n   development:\\\\n     clients:\\\\n       default:\\\\n         database: mongoid_dev\\\\n         hosts:\\\\n           - localhost:27017\\\\n\\\\n\",\"summary\":\"Mongoid\\'s configuration requires that you provide details about each client that can be connected to, and requires in the clients config at least 1 default client to exist.\"},\"no_default_client\":{\"message\":\"No default client configuration is defined.\",\"resolution\":\"If configuring via a mongoid.yml, ensure that within your :clients section a :default client is defined.\\\\n\\\\n Example:\\\\n   development:\\\\n     clients:\\\\n       default:\\\\n         hosts:\\\\n           - localhost:27017\\\\n\\\\n\",\"summary\":\"The configuration provided settings for: %{keys}, but Mongoid requires a :default to be defined at minimum.\"},\"no_documents_found\":{\"message\":\"Could not find a document of class %{klass}.\",\"resolution\":\"Create a document of class %{klass} or use a finder method that does not raise an exception when no documents are found.\",\"summary\":\"Mongoid attempted to find a document of the class %{klass} but none exist.\"},\"no_environment\":{\"message\":\"Could not load the configuration since no environment was defined.\",\"resolution\":\"Please ensure an environment is set in one of the listed locations. The environment must be explicitly set.\",\"summary\":\"Mongoid could not determine the environment to use because it was not specified in any of the following locations: Rails.env, Sinatra::Base.environment, ENV[\\\\\"RACK_ENV\\\\\"], ENV[\\\\\"MONGOID_ENV\\\\\"]. Without knowing the environment, Mongoid cannot load its configuration.\"},\"no_map_reduce_output\":{\"message\":\"No output location was specified for the map/reduce operation.\",\"resolution\":\"Provide the location that the output of the operation is to go by chaining an #out call to the map/reduce.\\\\n\\\\n Example:\\\\n   Band.map_reduce(map, reduce).out(inline: 1)\\\\n\\\\n Valid options for the out function are:\\\\n   inline: 1\\\\n   merge: \\'collection-name\\'\\\\n   replace: \\'collection-name\\'\\\\n   reduce: \\'collection-name\\'\\\\n\\\\n\",\"summary\":\"When executing a map/reduce, you must provide the output location of the results. The attempted command was: %{command}.\"},\"no_metadata\":{\"message\":\"Metadata not found for document of type %{klass}.\",\"resolution\":\"Ensure that your associations on the %{klass} model are all properly defined, and that the inverse associations are also properly defined. Embedded associations must have both the parent (embeds_one/embeds_many) and the inverse (embedded_in) present in order to work properly.\",\"summary\":\"Mongoid sets the metadata of an association on the document when it is either loaded from within the association, or added to one. The presence of the metadata is required in order to provide various functionality around associations. Most likely you are getting this error because the document is embedded and was attempted to be persisted without being associated with a parent, or the association was not properly defined.\"},\"no_parent\":{\"message\":\"Cannot persist embedded document %{klass} without a parent document.\",\"resolution\":\"Ensure that you\\'ve set the parent association if instantiating the embedded document directly, or always create new embedded documents via the parent association.\",\"summary\":\"If the document is embedded, in order to be persisted it must always have a reference to its parent document. This is most likely caused by either calling %{klass}.create or %{klass}.create! without setting the parent document as an attribute.\"},\"readonly_attribute\":{\"message\":\"Attempted to set the readonly attribute \\'%{name}\\' with the value: %{value}.\",\"resolution\":\"Don\\'t define \\'%{name}\\' as readonly, or do not attempt to update its value after the document is persisted.\",\"summary\":\"Attributes flagged as readonly via Model.attr_readonly can only have values set when the document is a new record.\"},\"readonly_document\":{\"message\":\"Attempted to persist a readonly document of class \\'%{klass}\\'.\",\"resolution\":\"Don\\'t attempt to persist documents that are flagged as readonly.\",\"summary\":\"Documents that are marked readonly cannot be persisted.\"},\"resolution_title\":\"resolution\",\"scope_overwrite\":{\"message\":\"Cannot create scope :%{scope_name}, because of existing method %{model_name}.%{scope_name}.\",\"resolution\":\"Change the name of the scope so it does not conflict with the already defined method %{model_name}, or set the configuration option Mongoid.scope_overwrite_exception to false, which is its default. In this case a warning will be logged.\",\"summary\":\"When defining a scope that conflicts with a method that already exists on the model, this error will get raised if Mongoid.scope_overwrite_exception is set to true.\"},\"sessions_not_supported\":{\"message\":\"Sessions are not supported by the connected server(s).\",\"resolution\":\"Verify that all servers in your deployment are at least version 3.6 or don\\'t attempt to use sessions with older server versions.\",\"summary\":\"A session was attempted to be used with a MongoDB server version that doesn\\'t support sessions. Sessions are supported in MongoDB server versions 3.6 and higher.\"},\"summary_title\":\"summary\",\"too_many_nested_attribute_records\":{\"message\":\"Accepting nested attributes for %{association} is limited to %{limit} documents.\",\"resolution\":\"The limit is set as an option to the macro, for example: accepts_nested_attributes_for :%{association}, limit: %{limit}. Consider raising this limit or making sure no more are sent than the set value.\",\"summary\":\"More documents were sent to be processed than the allowed limit.\"},\"unknown_attribute\":{\"message\":\"Attempted to set a value for \\'%{name}\\' which is not allowed on the model %{klass}.\",\"resolution\":\"Define the field \\'%{name}\\' in %{klass}, or include Mongoid::Attributes::Dynamic in %{klass} if you intend to store values in fields that are not explicitly defined.\",\"summary\":\"%{klass}#%{name}= was called but there is no \\'%{name}\\' field defined in the model, and Mongoid::Attributes::Dynamic is not included. This error is also raised instead of NoMethodError if the unknown attribute is passed to any method that accepts an attributes hash, such as #attributes=.\"},\"unknown_model\":{\"message\":\"Attempted to instantiate an object of the unknown model \\'%{klass}\\'.\",\"resolution\":\"The _type field is a reserved one used by Mongoid to determine the class for instantiating an object. Please don\\'t save data in this field or ensure that any values in this field correspond to valid models.\",\"summary\":\"A document with the value \\'%{value}\\' at the key \\'_type\\' was used to instantiate a model object but Mongoid cannot find this Class.\"},\"unsaved_document\":{\"message\":\"Attempted to save %{document} before the parent %{base}.\",\"resolution\":\"Make sure to only use create or create! when the parent document %{base} is persisted.\",\"summary\":\"You cannot call create or create! through the association (%{document}) whose parent (%{base}) is not already saved. This would cause the database to be out of sync since the child could potentially reference a nonexistent parent.\"},\"unsupported_javascript\":{\"message\":\"Executing Javascript $where selector on an embedded criteria is not supported.\",\"resolution\":\"Please provide a standard hash to #where when the criteria is for an embedded association.\",\"summary\":\"Mongoid only supports providing a hash of arguments to #where criterion on embedded documents. Since %{klass} is embedded, the expression %{javascript} is not allowed.\"},\"validations\":{\"message\":\"Validation of %{document} failed.\",\"resolution\":\"Try persisting the document with valid data or remove the validations.\",\"summary\":\"The following errors were found: %{errors}\"}}}},\"number\":{\"currency\":{\"format\":{\"delimiter\":\",\",\"format\":\"%u%n\",\"negative_format\":\"-%u%n\",\"precision\":2,\"separator\":\".\",\"significant\":false,\"strip_insignificant_zeros\":false,\"unit\":\"$\"}},\"format\":{\"delimiter\":\",\",\"precision\":3,\"round_mode\":\"default\",\"separator\":\".\",\"significant\":false,\"strip_insignificant_zeros\":false},\"human\":{\"decimal_units\":{\"format\":\"%n %u\",\"units\":{\"billion\":\"Billion\",\"million\":\"Million\",\"quadrillion\":\"Quadrillion\",\"thousand\":\"Thousand\",\"trillion\":\"Trillion\",\"unit\":\"\"}},\"format\":{\"delimiter\":\"\",\"precision\":3,\"significant\":true,\"strip_insignificant_zeros\":true},\"storage_units\":{\"format\":\"%n %u\",\"units\":{\"byte\":{\"one\":\"Byte\",\"other\":\"Bytes\"},\"eb\":\"EB\",\"gb\":\"GB\",\"kb\":\"KB\",\"mb\":\"MB\",\"pb\":\"PB\",\"tb\":\"TB\",\"zb\":\"ZB\"}}},\"nth\":{},\"percentage\":{\"format\":{\"delimiter\":\"\",\"format\":\"%n%\"}},\"precision\":{\"format\":{\"delimiter\":\"\"}}},\"pivot_list_column_value\":{\"non_sponsor_org\":\"Not a Patient Group\"},\"pivot_list_download\":{\"id\":\"ZW_ID\"},\"simple_form\":{\"error_notification\":{\"default_message\":\"Please review the problems below:\"},\"no\":\"No\",\"required\":{\"mark\":\"*\",\"text\":\"required\"},\"yes\":\"Yes\"},\"support\":{\"array\":{\"last_word_connector\":\", and \",\"two_words_connector\":\" and \",\"words_connector\":\", \"}},\"terminology\":{\"all_orgs_list_category\":\"Companies\",\"companies_in_your_sf_label\":\"Companies in your Salesforce\",\"company_based_in\":\"Patient Group based in\",\"company_location\":\"Patient Group Location\",\"neglected_target_label\":\"Neglected Patient Group\",\"sponsor\":\"Patient Group\",\"sponsor_orgs_list_category\":\"Patient Groups\",\"target_organization_title\":\"Patient Group\"},\"time\":{\"am\":\"am\",\"formats\":{\"default\":\"%a, %d %b %Y %H:%M:%S %z\",\"long\":\"%B %d, %Y %H:%M\",\"short\":\"%d %b %H:%M\"},\"pm\":\"pm\"},\"users\":{\"confirmations\":{\"new\":{\"legend\":\"Resend your %{brand_name} confirmation instructions\",\"message\":\"We need to confirm your email address to complete the sign up process. Supply your email address, below, and we will send you instructions on how to confirm your address.\",\"submit_button\":\"Send Confirmation Instructions\",\"title\":\"Resend confirmation instructions | %{brand_name}\"},\"show\":{\"legend\":\"Check your inbox for a confirmation email\",\"message\":\"If your e-mail exists in our database we have sent you a message with instructions. Check your inbox (or spam folder) for a message from \\'%{default_from_email}\\' containing the confirmation link.\",\"title\":\"Awaiting confirmation | %{brand_name}\"}},\"passwords\":{\"new\":{\"failures\":\"Note: If you make more than 5 sequential failed attempts to sign in with your %{brand_name} password, your account will be (temporarily) locked. Check your inbox for instruction on how to unlock your account, or we can\",\"legend\":\"Reset your %{brand_name} password\",\"message\":\"Supply your email address, below, and we will send you instructions on how to reset your password.\",\"resend_link\":\"resend a new set of unlock instructions\",\"submit_button\":\"Send Reset Instructions\",\"title\":\"Reset password | %{brand_name}\"},\"show\":{\"didnt_receive_email\":\"Didn\\'t receive the email?\",\"legend\":\"Password reset instructions sent\",\"message\":\"If your e-mail exists in our database we have sent you a message with password reset instructions. Check your inbox (or spam folder) for a message from \\'%{default_from_email}\\'.\",\"resend_link\":\"you can request another one here\",\"title\":\"Awaiting reset | %{brand_name}\"}}},\"will_paginate\":{\"container_aria_label\":\"Pagination\",\"next_label\":\"Next \\\\u0026#8594;\",\"page_aria_label\":\"Page %{page}\",\"page_entries_info\":{\"multi_page\":\"Displaying %{model} %{from} - %{to} of %{count} in total\",\"multi_page_html\":\"Displaying %{model} \\\\u003cb\\\\u003e%{from}\\\\u0026nbsp;-\\\\u0026nbsp;%{to}\\\\u003c/b\\\\u003e of \\\\u003cb\\\\u003e%{count}\\\\u003c/b\\\\u003e in total\",\"single_page\":{\"one\":\"Displaying 1 %{model}\",\"other\":\"Displaying all %{count} %{model}\",\"zero\":\"No %{model} found\"},\"single_page_html\":{\"one\":\"Displaying \\\\u003cb\\\\u003e1\\\\u003c/b\\\\u003e %{model}\",\"other\":\"Displaying \\\\u003cb\\\\u003eall\\\\u0026nbsp;%{count}\\\\u003c/b\\\\u003e %{model}\",\"zero\":\"No %{model} found\"}},\"page_gap\":\"\\\\u0026hellip;\",\"previous_label\":\"\\\\u0026#8592; Previous\"},\"x_mailer_header\":\"clicks.zebricks.com\"}'));\nI18n.translations[\"zh_CN\"] = I18n.extend((I18n.translations[\"zh_CN\"] || {}), JSON.parse('{\"activerecord\":{\"errors\":{\"messages\":{\"record_invalid\":\"Validation failed: %{errors}\",\"restrict_dependent_destroy\":{\"has_many\":\"Cannot delete record because dependent %{record} exist\",\"has_one\":\"Cannot delete record because a dependent %{record} exists\"}}}},\"bulk_uploads\":{\"email_local_part\":{\"empty_parameter\":\"No file uploaded\",\"error\":\"File Upload failed: %{error_message}\",\"success\":\"File was successfully uploaded\"}},\"common\":{\"crm\":{\"salesforce\":{\"forgot_password\":\"If you have forgotten your Salesforce password, please follow the instructions provided on the Salesforce sign in page.\",\"sign_in_button\":\"Sign In with Salesforce\"}}},\"contact\":{\"default_from_email\":\"info@zymewire.com\",\"phone_numbers\":[{\"label\":\"US\",\"phone\":\"1-844-996-3321\"},{\"label\":\"UK\",\"phone\":\"+44-208-133-9963\"}],\"support_email\":\"support@zymewire.com\"},\"date\":{\"abbr_day_names\":[\"Sun\",\"Mon\",\"Tue\",\"Wed\",\"Thu\",\"Fri\",\"Sat\"],\"abbr_month_names\":[null,\"Jan\",\"Feb\",\"Mar\",\"Apr\",\"May\",\"Jun\",\"Jul\",\"Aug\",\"Sep\",\"Oct\",\"Nov\",\"Dec\"],\"day_names\":[\"Sunday\",\"Monday\",\"Tuesday\",\"Wednesday\",\"Thursday\",\"Friday\",\"Saturday\"],\"formats\":{\"default\":\"%Y-%m-%d\",\"long\":\"%B %d, %Y\",\"short\":\"%b %d\"},\"month_names\":[null,\"January\",\"February\",\"March\",\"April\",\"May\",\"June\",\"July\",\"August\",\"September\",\"October\",\"November\",\"December\"],\"order\":[\"year\",\"month\",\"day\"]},\"datetime\":{\"distance_in_words\":{\"about_x_hours\":{\"one\":\"about 1 hour\",\"other\":\"about %{count} hours\"},\"about_x_months\":{\"one\":\"about 1 month\",\"other\":\"about %{count} months\"},\"about_x_years\":{\"one\":\"about 1 year\",\"other\":\"about %{count} years\"},\"almost_x_years\":{\"one\":\"almost 1 year\",\"other\":\"almost %{count} years\"},\"half_a_minute\":\"half a minute\",\"less_than_x_minutes\":{\"one\":\"less than a minute\",\"other\":\"less than %{count} minutes\"},\"less_than_x_seconds\":{\"one\":\"less than 1 second\",\"other\":\"less than %{count} seconds\"},\"over_x_years\":{\"one\":\"over 1 year\",\"other\":\"over %{count} years\"},\"x_days\":{\"one\":\"1 day\",\"other\":\"%{count} days\"},\"x_minutes\":{\"one\":\"1 minute\",\"other\":\"%{count} minutes\"},\"x_months\":{\"one\":\"1 month\",\"other\":\"%{count} months\"},\"x_seconds\":{\"one\":\"1 second\",\"other\":\"%{count} seconds\"}},\"prompts\":{\"day\":\"Day\",\"hour\":\"Hour\",\"minute\":\"Minute\",\"month\":\"Month\",\"second\":\"Seconds\",\"year\":\"Year\"}},\"default_host\":\"https://www.zymewire.com\",\"devise\":{\"confirmations\":{\"confirmed\":\"Your account was successfully confirmed. Please sign in.\",\"send_instructions\":\"Your email has not been confirmed. We need to confirm your email account before you can sign in. Please check your inbox or spam folder for an email from \\'info@zymewire.com\\' or request a new one.\",\"send_paranoid_instructions\":\"If your e-mail exists on our database, you will receive an email with instructions about how to confirm your account in a few minutes.\"},\"failure\":{\"already_authenticated\":\"You are already signed in.\",\"expired\":\"由于不活跃,你的账户已过期。请联系站点管理员。\",\"inactive\":\"Your account was not activated yet.\",\"invalid\":\"Invalid email or password. If you use Salesforce, use the \\'Have Salesforce?\\' panel.\",\"invalid_token\":\"Invalid authentication token.\",\"last_attempt\":\"You have one more attempt before your account is locked.\",\"locked\":\"Your account is locked.\",\"not_active\":\"Your account has been de-activated, if you think this is a mistake please contact us\",\"not_found_in_database\":\"Invalid %{authentication_keys} or password.\",\"session_limited\":\"你的登录凭据已在另一个浏览器上被使用。请重新登录以在此浏览器继续。\",\"timeout\":\"Your session expired, please sign in again to continue.\",\"unauthenticated\":\"You need to sign in or sign up before continuing.\",\"unconfirmed\":\"We must confirm your email before you can continue. Please check your inbox or spam folder for a confirmation email from \\'info@zymewire.com\\' or request a new one.\"},\"invalid_captcha\":\"验证码无效。\",\"invalid_security_question\":\"安全问题答案无效。\",\"mailer\":{\"confirmation_instructions\":{\"subject\":\"Confirmation instructions for Zymewire.com\"},\"email_changed\":{\"subject\":\"Email Changed\"},\"password_change\":{\"subject\":\"Password Changed\"},\"reset_password_instructions\":{\"subject\":\"Reset password instructions for Zymewire.com\"},\"unlock_instructions\":{\"subject\":\"Unlock Instructions for Zymewire.com\"}},\"omniauth_callbacks\":{\"failure\":\"Could not authorize you from %{kind} because \\\\\"%{reason}\\\\\".\",\"success\":\"Successfully authorized from %{kind} account.\"},\"paranoid_verification_code\":{\"show\":{\"submit\":\"提交\",\"submit_verification_code\":\"提交验证码\",\"verification_code\":\"验证码\"},\"updated\":\"接受验证码\"},\"paranoid_verify\":{\"code_required\":\"请输入我们支持团队提供的代码\"},\"password_expired\":{\"change_required\":\"你的密码已过期,请更新密码。\",\"show\":{\"change_my_password\":\"更改密码\",\"current_password\":\"当前密码\",\"new_password\":\"新密码\",\"new_password_confirmation\":\"确认新密码\",\"renew_your_password\":\"更新你的密码\"},\"updated\":\"你的新密码已保存。\"},\"passwords\":{\"no_token\":\"You can\\'t access this page without coming from a password reset email. If you do come from a password reset email, please make sure you used the full URL provided.\",\"send_instructions\":\"You will receive an email with instructions about how to reset your password in a few minutes.\",\"send_paranoid_instructions\":\"If your e-mail exists on our database, you will receive a password recovery link on your e-mail\",\"updated\":\"Your password was changed successfully. You are now signed in.\",\"updated_not_active\":\"Your password was changed successfully.\"},\"registrations\":{\"destroyed\":\"Bye! Your account was successfully cancelled. We hope to see you again soon.\",\"signed_up\":\"Welcome! You have signed up successfully.\",\"signed_up_but_inactive\":\"You have signed up successfully. However, we could not sign you in because your account is not yet activated.\",\"signed_up_but_locked\":\"You have signed up successfully. However, we could not sign you in because your account is locked.\",\"signed_up_but_unconfirmed\":\"A message with a confirmation link has been sent to your email address. Please open the link to activate your account.\",\"update_needs_confirmation\":\"You updated your account successfully, but we need to verify your new email address. Please check your email and click on the confirm link to finalize confirming your new email address.\",\"updated\":\"You updated your account successfully.\",\"updated_but_not_signed_in\":\"Your account has been updated successfully, but since your password was changed, you need to sign in again.\"},\"sessions\":{\"already_signed_out\":\"Signed out successfully.\",\"signed_in\":\"Signed in successfully.\",\"signed_out\":\"Signed out successfully.\"},\"unlocks\":{\"send_instructions\":\"You will receive an email with instructions about how to unlock your account in a few minutes.\",\"send_paranoid_instructions\":\"If your account exists, you will receive an email with instructions about how to unlock it in a few minutes.\",\"unlocked\":\"Your account has been unlocked successfully. Please sign in to continue.\"}},\"download\":\"Download\",\"download_30_days\":\"This link will be available for 30 days after which the file will be removed from our servers.\",\"enumerize\":{\"blocklisted_contact\":{\"provider\":{\"insideview\":\"InsideView\",\"zephyr\":\"Zephyr\"}}},\"errors\":{\"format\":\"%{attribute} %{message}\",\"messages\":{\"accepted\":\"must be accepted\",\"already_confirmed\":\"was already confirmed, please try signing in\",\"blank\":\"can\\'t be blank\",\"confirmation\":\"doesn\\'t match %{attribute}\",\"confirmation_period_expired\":\"needs to be confirmed within %{period}, please request a new one\",\"empty\":\"can\\'t be empty\",\"equal_to\":\"must be equal to %{count}\",\"equal_to_current_password\":\"必须与当前密码不同。\",\"equal_to_email\":\"必须与电子邮件地址不同。\",\"even\":\"must be even\",\"exclusion\":\"is reserved\",\"expired\":\"has expired, please request a new one\",\"greater_than\":\"must be greater than %{count}\",\"greater_than_or_equal_to\":\"must be greater than or equal to %{count}\",\"in\":\"must be in %{count}\",\"inclusion\":\"is not included in the list\",\"invalid\":\"is invalid\",\"less_than\":\"must be less than %{count}\",\"less_than_or_equal_to\":\"must be less than or equal to %{count}\",\"model_invalid\":\"Validation failed: %{errors}\",\"not_a_number\":\"is not a number\",\"not_an_integer\":\"must be an integer\",\"not_found\":\"not found\",\"not_locked\":\"was not locked\",\"not_saved\":{\"one\":\"1 error prohibited this %{resource} from being saved:\",\"other\":\"%{count} errors prohibited this %{resource} from being saved:\"},\"odd\":\"must be odd\",\"other_than\":\"must be other than %{count}\",\"password_complexity\":{\"digit\":{\"one\":\"必须包含至少1个数字\",\"other\":\"必须包含至少%{count}个数字\"},\"lower\":{\"one\":\"必须包含至少1个小写字母\",\"other\":\"必须包含至少%{count}个小写字母\"},\"symbol\":{\"one\":\"必须包含至少1个特殊符号(!\\\\\"#$%\\\\u0026\\'()*+,-./:;\\\\u003c=\\\\u003e?@[\\\\\\\\]^_‘{|}~)\",\"other\":\"必须包含至少%{count}个特殊符号(!\\\\\"#$%\\\\u0026\\'()*+,-./:;\\\\u003c=\\\\u003e?@[\\\\\\\\]^_‘{|}~)\"},\"upper\":{\"one\":\"必须包含至少1个大写字母\",\"other\":\"必须包含至少%{count}个大写字母\"}},\"password_format\":\"Must contain uppercase AND lowercase letters and at least one number\",\"password_too_long\":\"is too long\",\"present\":\"must be blank\",\"required\":\"must exist\",\"taken\":\"has already been taken\",\"taken_in_past\":\"曾被使用过。\",\"too_long\":{\"one\":\"is too long (maximum is 1 character)\",\"other\":\"is too long (maximum is %{count} characters)\"},\"too_short\":{\"one\":\"is too short (minimum is 1 character)\",\"other\":\"is too short (minimum is %{count} characters)\"},\"wrong_length\":{\"one\":\"is the wrong length (should be 1 character)\",\"other\":\"is the wrong length (should be %{count} characters)\"}}},\"flash\":{\"actions\":{\"create\":{\"notice\":\"%{resource_name} was successfully created.\"},\"destroy\":{\"alert\":\"%{resource_name} could not be destroyed.\",\"notice\":\"%{resource_name} was successfully destroyed.\"},\"update\":{\"notice\":\"%{resource_name} was successfully updated.\"}}},\"hello_world\":\"Hello world\",\"helpers\":{\"select\":{\"prompt\":\"Please select\"},\"submit\":{\"create\":\"Create %{model}\",\"submit\":\"Save %{model}\",\"update\":\"Update %{model}\"}},\"hi\":\"Hi\",\"mailers\":{\"common\":{\"chummy_sign_off\":\"Have a good one.\",\"final_note\":\"P.S.: If you think you received this email accidentally, then something weird could be going on. Hit reply and a member of the %{brand_name} team will investigate.\",\"team_sign_off\":\"- The %{brand_name} Team\"},\"confirmation_instructions_email\":{\"crm\":{\"salesforce\":{\"resource_confirmed\":\"Someone has requested a resend of a confirmation email. You do not need to confirm your email address because your account is configured to use Salesforce to sign in.\",\"resource_unconfirmed\":\"You do not need to confirm your email address because your account is configured to use Salesforce to sign in, please complete the sign up process by clicking the button below to sign in to %{brand_name} via Salesforce.\"}},\"non_crm\":{\"confirm_link\":\"Confirm my account\",\"welcome\":\"Welcome to %{brand_name}. As the final step in the process you\\'ll need to confirm your account by clicking on the link below.\"},\"subject\":\"Confirmation instructions for %{domain}\"},\"flagged_events_mailer\":{\"from\":\"Flagged events - %{brand_name} \\\\u003cflagged_events@mailer.%{domain}\\\\u003e\"},\"mobile_registration_email\":{\"alert_cs_registration_locked\":{\"subject\":\"%{brand_name}: user has had mobile registration locked, too many failed attempts\"},\"dispatch_registration_PIN\":{\"further_instructions\":\"If you are NOT attempting to register for the %{brand_name} Mobile app then please let us know at %{support_email_link} - thank you.\",\"introduction\":\"Here is your mobile app registration PIN:\",\"subject\":\"%{brand_name} Mobile Registration Verification\"},\"too_many_failed_attempts\":{\"introduction\":\"We have received too many failed mobile device registration attempts for your account and we will block any further requests. If you have not attempted to register a mobile device with us in the last hour then please let us know as it is likely someone has tried on your behalf. If you have been trying to register a device please contact %{support_email_link} and we can help unlock your account and get you registered.\",\"subject\":\"%{brand_name}: too many failed registration attempts\"}},\"org_list_download_mail\":{\"dispatch_link\":{\"introduction\":\"We have finished meshing your %{crm_brand_name} data with the companies in your \\\\\"%{list_name}\\\\\" list.\",\"subject\":\"%{brand_name}: your file download of \\'%{list_name}\\' is ready\"},\"failed\":{\"instructions\":\"You could try again in a little while. If you already have and are receiving this email again, please contact us at %{support_email_link}\",\"introduction\":\"We are really sorry, but something went wrong with creating your download of %{crm_brand_name} data for your \\\\\"%{list_name}\\\\\" list.\",\"subject\":\"%{brand_name}: your file download of \\'%{list_name}\\' failed\"}},\"reset_password_instructions_email\":{\"crm\":{\"salesforce\":{\"change_requested\":\"Someone has requested a change to your password. Your account is configured to use Salesforce to sign in.\"}},\"fishy_fine_print\":\"If you did not request a password change, then something weird is going on. Someone may be trying to access your account (unsuccessfully). Please reply to this email and let us know. We will take steps to make sure it stops.\",\"non_crm\":{\"change_password_link\":\"Change my password\",\"change_requested\":\"Someone has requested a change to your password, you can do this via the link below.\"},\"subject\":\"Password reset instructions for %{domain}\"},\"sales_force_mail\":{\"processing_completed\":{\"bullet_points\":[\"Only show events associated with companies in your Salesforce account\",\"Add new contacts and accounts to your Salesforce account without leaving %{brand_name}\",\"Access the \\'Salesforce details\\' panel on company dashboards where you can see open tasks, team interactions, opportunities, and more!\"],\"further_instructions\":\"We\\'re here to help. If you run into any questions or challenges, please contact us at %{support_email_link} and a member of our team would be more than happy to help.\",\"get_the_most\":\"To get the most from the integration, check out the \\'Mine Salesforce for opportunities\\' guide in the Help Center.\",\"guide_button\":\"Take me to the guide\",\"introduction\":\"Good news - your Salesforce account is now integrated with %{brand_name}. Now you’ll be able to:\"}},\"segment_contact\":{\"report_manager\":{\"fail_subject\":\"%{brand_name}: The PDF report generation failed\",\"success_subject\":\"%{brand_name}: Your PDF for %{company_name} is attached\"}},\"sf_token_expiry_email\":{\"further_instructions\":\"If you run into any questions or challenges, please contact us at %{support_email_link} and a member of our team would be more than happy to help.\",\"introduction\":\"Unfortunately the connection established for you between %{brand_name} and your %{crm_brand_name} account has expired. We will not be able to update your lists in %{brand_name} to reflect your %{crm_brand_name} database. To re-establish the connection, you just need to log in to %{brand_name} using your %{crm_brand_name}.\",\"subject\":\"%{brand_name} to %{crm_brand_name} connection has expired\"},\"share_list_mail\":{\"introduction\":\"%{user_name} shared a list with you: \",\"subject\":\"[%{brand_name} - shared list] %{list_name}\"},\"trial_expiry_mail\":{\"seven_days_to_go\":{\"further_instructions\":\"A member of our fabulous Customer Success team will arrange a welcome call with you to understand your goals and priorities, and will then give you a personalized Tour de %{brand_name} so you can easily access the information that is most valuable to you.\",\"instructions\":\"If you\\'d like continued access to the platform with our flexible month-to-month subscription, please ensure you contact %{support_email_link} ahead of: %{deadline}\",\"introduction\":\"Time flies when you\\'re uncovering new business opportunities! Your %{brand_name} trial is coming to an end next week.\",\"sign_off\":\"We look forward to helping you reach your sales goals!\",\"subject\":\"Just a heads up that your %{brand_name} trial is ending in seven days\"},\"seven_days_to_go_warning_for_cs\":{\"introduction\":\"%{user_name} shared a list with you: \",\"subject\":\"[%{brand_name} - shared list] %{list_name}\"}},\"unlock_instructions_email\":{\"crm\":{\"salesforce\":{\"change_requested\":\"You are being sent this email either because of one too many unsuccessful non-Salesforce log-in attempts or someone has requested an unlock email. %{brand_name} has not locked your account because your account is configured to use Salesforce to sign in.\",\"password_forgotten\":\"If you have forgotten your Salesforce password or think your account has been locked by Salesforce, please follow the instructions provided on the Salesforce sign in page.\"}},\"fishy_fine_print\":\"If you have not been (unsuccessfully) trying to log in to your account, then something weird is going on. Someone may be trying to access your account (unsuccessfully). Please reply to this email and let us know. We will take steps to make sure it stops.\",\"non_crm\":{\"change_requested\":\"For security reasons we have locked your account because of too many log-in attempts. To unlock your account, click the link below.\",\"unlock_account_link\":\"Unlock my account\"},\"subject\":\"Unlock instructions for %{domain}\"}},\"mongoid\":{\"errors\":{\"messages\":{\"ambiguous_relationship\":{\"message\":\"Ambiguous associations %{candidates} defined on %{klass}.\",\"resolution\":\"On the %{name} association on %{inverse} you must add an :inverse_of option to specify the exact association on %{klass} that is the opposite of %{name}.\",\"summary\":\"When Mongoid attempts to set an inverse document of an association in memory, it needs to know which association it belongs to. When setting %{name}, Mongoid looked on the class %{inverse} for a matching association, but multiples were found that could potentially match: %{candidates}.\"},\"blank_in_locale\":\"can\\'t be blank in %{location}\",\"callbacks\":{\"message\":\"Calling %{method} on %{klass} resulted in a false return from a callback.\",\"resolution\":\"Double check all before callbacks to make sure they are not unintentionally returning false.\",\"summary\":\"If a before callback returns false when using Document.create!, Document#save!, or Document#update_attributes! this error will get raised since the document did not actually get saved.\"},\"calling_document_find_with_nil_is_invalid\":{\"message\":\"Calling Document.find with nil is invalid.\",\"resolution\":\"Most likely this is caused by passing parameters directly through to the find, and the parameter either is not present or the key from which it is accessed is incorrect.\",\"summary\":\"Document.find expects the parameters to be 1 or more ids, and will return a single document if 1 id is provided, otherwise an array of documents if multiple ids are provided.\"},\"create_collection_failure\":{\"message\":\"Cannot create collection %{collection_name} with options %{collection_options}. The following error was raised: %{error}.\",\"resolution\":\"Double check that collection options for the collection %{collection_name} are valid. Consult with Ruby driver documentation and MongoDB documentation if the desired options are supported by your version of the server.\",\"summary\":\"The server rejected createCollection command with given collection options. This may happen when some of the options are invalid, or not supported by your version of the server.\"},\"criteria_argument_required\":{\"message\":\"Calling Criteria methods with nil arguments is not allowed.\",\"resolution\":\"Invoke Criteria methods with non-nil arguments or omit the respective invocations.\",\"summary\":\"Arguments to Criteria methods cannot be nil, and most Criteria methods require at least one argument. Only logical operations (and, or, nor and not), `all\\' and `where\\' can be called without arguments. The method that was called with nil argument was: %{query_method}.\"},\"delete_restriction\":{\"message\":\"Cannot destroy %{document} because of dependent \\'%{relation}\\'.\",\"resolution\":\"Don\\'t attempt to delete the parent %{document} when it has children, or change the dependent option on the association.\",\"summary\":\"When defining \\'%{relation}\\' with a :dependent =\\\\u003e :restrict_with_error, Mongoid will raise an error when attempting to destroy the %{document} when the child \\'%{relation}\\' still has documents in it.\"},\"destroy_restrict_with_error_dependencies_exist\":\"is not empty and prevents the document from being destroyed\",\"document_not_destroyed\":{\"message\":\"%{klass} with id %{id} was not destroyed.\",\"resolution\":\"Check the before/after destroy callbacks to ensure that the return values are truthy for the chain to continue.\",\"summary\":\"When calling %{klass}#destroy! and a callback halts the destroy callback chain by returning a false value, the deletion will not actually occur.\"},\"document_not_found\":{\"message\":\"Document(s) not found for class %{klass} with id(s) %{missing}.\",\"resolution\":\"Search for an id that is in the database or set the Mongoid.raise_not_found_error configuration option to false, which will cause nil to be returned instead of raising this error when searching for a single id, or only the matched documents when searching for multiples.\",\"summary\":\"When calling %{klass}.find with an id or array of ids, each parameter must match a document in the database or this error will be raised. The search was for the id(s): %{searched} (%{total} total) and the following ids were not found: %{missing}.\"},\"document_with_attributes_not_found\":{\"message\":\"Document not found for class %{klass} with attributes %{attributes}.\",\"resolution\":\"Search for attributes that are in the database or set the Mongoid.raise_not_found_error configuration option to false, which will cause nil to be returned instead of raising this error.\",\"summary\":\"When calling %{klass}.find_by with a hash of attributes, all attributes provided must match a document in the database or this error will be raised.\"},\"document_with_shard_key_not_found\":{\"message\":\"Document not found for class %{klass} with id %{missing} and shard key %{shard_key}.\",\"resolution\":\"Search for an id/shard key that is in the database or set the Mongoid.raise_not_found_error configuration option to false, which will cause nil to be returned instead of raising this error.\",\"summary\":\"When calling %{klass}.find with an id and a shard key, each parameter must match a document in the database or this error will be raised. The search was for the id: %{missing} with shard_key: %{shard_key} and it was not found.\"},\"drop_collection_failure\":{\"message\":\"Cannot drop collection %{collection_name}.\",\"resolution\":\"Try to drop the collection manually using Ruby driver or mongo shell.\",\"summary\":\"Mongoid tried to drop collection %{collection_name}, but the collection still exists in the database.\"},\"empty_config_file\":{\"message\":\"Empty configuration file: %{path}.\",\"resolution\":\"Ensure your configuration file contains the correct contents. Refer to: https://www.mongodb.com/docs/mongoid/current/reference/configuration/\",\"summary\":\"Your mongoid.yml configuration file appears to be empty.\"},\"immutable_attribute\":{\"message\":\"Attempted to change the immutable attribute \\'%{name}\\' with the value: %{value}.\",\"resolution\":\"Do not attempt to update the value of \\'%{name}\\' after the document is persisted.\",\"summary\":\"Immutable attributes can only have values set when the document is a new record.\"},\"in_memory_collation_not_supported\":{\"message\":\"A collation option cannot be applied when querying documents in-memory.\",\"resolution\":\"Remove the collation option from the query.\",\"summary\":\"The query being run against documents in memory has a collation option set. A collation option is only supported if the query is executed on a MongoDB server with version \\\\u003e= 3.4.\"},\"invalid_async_query_executor\":{\"message\":\"Invalid async_query_executor option: %{executor}.\",\"resolution\":\"Pick an allowed option or fix the typo. If you were expecting the option to be there, please consult the following page with respect to Mongoid\\'s configuration:\\\\n\\\\n   https://www.mongodb.com/docs/mongoid/current/reference/configuration/#mongoid-configuration-options\",\"summary\":\"A invalid async query executor was specified. The valid options are: %{options}.\"},\"invalid_collection\":{\"message\":\"Access to the collection for %{klass} is not allowed.\",\"resolution\":\"For access to the collection that the embedded document is in, use %{klass}#_root.collection, or do not attempt to persist an embedded document without a parent set.\",\"summary\":\"%{klass}.collection was called, and %{klass} is an embedded document - it resides within the collection of the root document of the hierarchy.\"},\"invalid_config_file\":{\"message\":\"Invalid configuration file: %{path}.\",\"resolution\":\"Ensure your configuration file contains the correct contents. Refer to: https://www.mongodb.com/docs/mongoid/current/reference/configuration/\",\"summary\":\"Your mongoid.yml configuration file does not contain the correct file structure.\"},\"invalid_config_option\":{\"message\":\"Invalid configuration option: %{name}.\",\"resolution\":\"Remove the invalid option or fix the typo. If you were expecting the option to be there, please consult the following page with respect to Mongoid\\'s configuration:\\\\n\\\\n   http://mongoid.org/en/mongoid/docs/installation.html\",\"summary\":\"A invalid configuration option was provided in your mongoid.yml, or a typo is potentially present. The valid configuration options are: %{options}.\"},\"invalid_dependent_strategy\":{\"message\":\"Invalid dependent strategy: %{invalid_strategy}.\",\"resolution\":\"Change the dependent strategy to one of the valid types.\",\"summary\":\"An invalid dependent strategy was defined for the association: %{association}. The valid strategies are: %{valid_strategies}.\"},\"invalid_discriminator_key_target\":{\"message\":\"Setting the discriminator key on a child class is not allowed.\",\"resolution\":\"Try setting the discriminator key on %{superclass} or one of %{class_name}\\'s ancestors.\",\"summary\":\"The discriminator key on the class %{class_name} was attempted to be changed. Changing the discriminator key on a child class is not allowed.\"},\"invalid_dot_dollar_assignment\":{\"message\":\"Cannot set the %{attr} attribute on the %{klass} class.\",\"resolution\":\"In order to set fields that start with a dollar sign ($) or contain a dot/period (.), the aggregation pipeline can be used. MongoDB provides specific operators for working with these fields. Refer to the MongoDB documentation here: https://www.mongodb.com/docs/manual/core/dot-dollar-considerations/\",\"summary\":\"Calling the setters for fields that start with a dollar sign ($) or contain a dot/period (.) is prohibited. See the Mongoid documentation on Field Names with Dots/Periods (.) and Dollar Signs ($) for more information.\"},\"invalid_elem_match_operator\":{\"message\":\"Invalid $elemMatch operator \\'%{operator}\\'.\",\"resolution\":\"Valid field operators are: %{valid_operators}. Ensure you are using one of these operators.\",\"summary\":\"You misspelled an operator or are using an operator that Mongoid does not support.\"},\"invalid_estimated_count_criteria\":{\"message\":\"Invalid criteria for estimated_count.\",\"resolution\":\"Try calling estimated_count directly on the class: %{class_name}.estimated_count.\\\\n\\\\n  If the class defines a default scope, use unscoped: %{class_name}.unscoped.estimated_count.\",\"summary\":\"Estimated count is strictly a collection-level operation and cannot be called on a filtered criteria.\"},\"invalid_expression_operator\":{\"message\":\"Invalid expression operator \\'%{operator}\\'.\",\"resolution\":\"Valid expression operators are: %{valid_operators}. Ensure you are using one of these operators.\",\"summary\":\"You misspelled an operator, are using an operator that Mongoid does not support, or are trying to use a field-level operator on expression level.\"},\"invalid_field\":{\"message\":\"Defining a field named \\'%{field}\\' is not allowed.\",\"resolution\":\"Use Mongoid.destructive_fields to see what names are not allowed, and don\\'t use these names. These include names that also conflict with core Ruby methods on Object, Module, Enumerable, or included gems that inject methods into these or Mongoid internals.\",\"summary\":\"Defining this field would override the method \\'%{name}\\', which would cause issues with expectations around the original method and cause extremely hard to debug issues. The original method was defined in:\\\\n   Object: %{origin}\\\\n   File: %{file}\\\\n   Line: %{line}\"},\"invalid_field_operator\":{\"message\":\"Invalid field operator \\'%{operator}\\'.\",\"resolution\":\"Valid field operators are: %{valid_operators}. Ensure you are using one of these operators.\",\"summary\":\"You misspelled an operator, are using an operator that Mongoid does not support, or are trying to use an expression-level operator on field level.\"},\"invalid_field_option\":{\"message\":\"Invalid option :%{option} provided for field :%{name}.\",\"resolution\":\"When defining the field :%{name} on \\'%{klass}\\', please provide valid options for the field. These are currently: %{valid}. If you meant to define a custom field option, please do so first as follows:\\\\n\\\\n   Mongoid::Fields.option :%{option} do |model, field, value|\\\\n     # Your logic here...\\\\n   end\\\\n   class %{klass}\\\\n     include Mongoid::Document\\\\n     field :%{name}, %{option}: true\\\\n   end\\\\n\\\\n Refer to: https://www.mongodb.com/docs/mongoid/current/reference/fields/#custom-field-options\",\"summary\":\"Mongoid requires that you only provide valid options on each field definition in order to prevent unexpected behavior later on.\"},\"invalid_field_type\":{\"message\":\"Invalid field type %{type_inspection} for field \\'%{field}\\' on model \\'%{klass}\\'.\",\"resolution\":\"Please provide a valid type value for the field. Refer to: https://www.mongodb.com/docs/mongoid/current/reference/fields/#using-symbols-or-strings-instead-of-classes\",\"summary\":\"Model \\'%{klass}\\' defines a field \\'%{field}\\' with an unknown type value %{type_inspection}.\"},\"invalid_global_executor_concurrency\":{\"message\":\"Invalid global_executor_concurrency option.\",\"resolution\":\"Set global_executor_concurrency option to :global_thread_pool or remove global_executor_concurrency option.\",\"summary\":\"You set global_executor_concurrency while async_query_executor option is not set to :global_thread_pool. The global_executor_concurrency is allowed only for the global thread pool executor.\"},\"invalid_includes\":{\"message\":\"Invalid includes directive: %{klass}.includes(%{args})\",\"resolution\":\"Ensure that each parameter passed to %{klass}.includes is a valid name of an association on the %{klass} model. These are: %{relations}.\",\"summary\":\"Eager loading in Mongoid only supports providing arguments to %{klass}.includes that are the names of associations on the %{klass}.\"},\"invalid_index\":{\"message\":\"Invalid index specification on %{klass}: %{spec}, %{options}\",\"resolution\":\"Ensure that the index conforms to the correct syntax and has the correct options.\\\\n\\\\n Valid options are:\\\\n   background: true|false\\\\n   database: \\'database_name\\'\\\\n   name: \\'index_name\\'\\\\n   sparse: true|false\\\\n   unique: true|false\\\\n   min: 1\\\\n   max: 1\\\\n   bits: 26\\\\n   key: 26\\\\n   bucket_size : 1\\\\n   sphere_version : 1\\\\n   text_version : 1\\\\n   version : 1\\\\n   weights: { content: 1, title: 2 }\\\\n   expire_after_seconds: number_of_seconds\\\\n   partial_filter_expression\\\\n   storage_engine\\\\n   language_override\\\\n   default_language\\\\n   collation\\\\n   wildcard_projection: { \\'path.to.field.a\\': 1, \\'path.to.field.b\\': 0 }\\\\n Valid types are: 1, -1, \\'2d\\', \\'2dsphere\\', \\'geoHaystack (deprecated)\\', \\'text\\', \\'hashed\\'\\\\n\\\\n Example:\\\\n   class Band\\\\n     include Mongoid::Document\\\\n     index({ name: 1, label: -1 }, { sparse: true })\\\\n     index({ location: \\'2d\\' }, { background: true })\\\\n   end\\\\n\\\\n\",\"summary\":\"Indexes in Mongoid are defined as a hash of field name and direction/2d pairs, with a hash for any additional options.\"},\"invalid_options\":{\"message\":\"Invalid option :%{invalid} provided to association :%{name}.\",\"resolution\":\"Valid options are: %{valid}, make sure these are the ones you are using.\",\"summary\":\"Mongoid checks the options that are passed to the association macros to ensure that no ill side effects occur by letting something slip by.\"},\"invalid_path\":{\"message\":\"Having a root path assigned for %{klass} is invalid.\",\"resolution\":\"Most likely your embedded model, %{klass} is also referenced via a has_many from a root document in another collection. Double check the association definitions and fix any instances where embedded documents are improperly referenced from other collections.\",\"summary\":\"Mongoid has two different path objects for determining the location of a document in the database, Root and Embedded. This error is raised when an embedded document somehow gets a root path assigned.\"},\"invalid_persistence_option\":{\"message\":\"Invalid persistence option :%{invalid}.\",\"resolution\":\"Valid options are: %{valid}, make sure these are the ones you are using.\",\"summary\":\"The options used to change the persistence context must be one of the valid options for a mongo client, or a collection name.\"},\"invalid_relation\":{\"message\":\"Defining an association named \\'%{name}\\' is not allowed.\",\"resolution\":\"Use Mongoid.destructive_fields to see what names are not allowed, and don\\'t use these names. These include names that also conflict with core Ruby methods on Object, Module, Enumerable, or included gems that inject methods into these or Mongoid internals.\",\"summary\":\"Defining this association would override the method \\'%{name}\\', which would cause issues with expectations around the original method and cause extremely hard to debug issues. The original method was defined in:\\\\n   Object: %{origin}\\\\n   File: %{file}\\\\n   Line: %{line}\"},\"invalid_relation_option\":{\"message\":\"Invalid association option :%{option} for association \\'%{name}\\' on class %{klass}.\",\"resolution\":\"Valid options are: %{valid_options}, make sure you use only those.\",\"summary\":\"An invalid option was provided for an association.\"},\"invalid_scope\":{\"message\":\"Defining a scope of value %{value} on %{klass} is not allowed.\",\"resolution\":\"Change the scope to be a proc wrapped criteria.\\\\n\\\\n Example:\\\\n   class Band\\\\n     include Mongoid::Document\\\\n     scope :inactive, -\\\\u003e{ where(active: false) }\\\\n   end\\\\n\\\\n\",\"summary\":\"Scopes in Mongoid must be procs that wrap criteria objects.\"},\"invalid_session_nesting\":{\"message\":\"A session was started while another session was being used.\",\"resolution\":\"Only use one session at a time; sessions cannot be nested.\",\"summary\":\"Sessions cannot be nested. Only one session can be used in a thread at once.\"},\"invalid_session_use\":{\"message\":\"A session was attempted to be used with a model whose client cannot use that session.\",\"resolution\":\"Only execute operations on the model class or instances of the model through which the session was created. Otherwise, ensure that all models on which operations are executed in the session block share the same driver client. For example, a model may have a different client specified in its \\'store_in\\' options.\\\\n\\\\n\",\"summary\":\"Sessions are started via driver clients (Model#mongo_client) and, in most cases, driver clients are shared across models. When different models have their own clients, a session cannot be obtained via one model and used for operations on another model.\"},\"invalid_set_polymorphic_relation\":{\"message\":\"The %{name} attribute can\\'t be set to an instance of %{other_klass} as %{other_klass} has multiple associations referencing %{klass} as %{name}.\",\"resolution\":\"Set the values from the parent, or redefine the association with only a single definition in the parent.\",\"summary\":\"If the parent class of a polymorphic association has multiple definitions for the same association, the values must be set from the parent side and not the child side since Mongoid cannot determine from the child side which association to go in.\"},\"invalid_storage_options\":{\"message\":\"Invalid options passed to %{klass}.store_in: %{options}.\",\"resolution\":\"Change the options passed to store_in to match the documented API, and ensure all keys in the options hash are symbols.\\\\n\\\\n Example:\\\\n   class Band\\\\n     include Mongoid::Document\\\\n     store_in collection: \\'artists\\', database: \\'music\\'\\\\n   end\\\\n\\\\n\",\"summary\":\"The :store_in macro takes only a hash of parameters with the keys :database, :collection, :collection_options, or :client.\"},\"invalid_time\":{\"message\":\"\\'%{value}\\' is not a valid Time.\",\"resolution\":\"Make sure to pass parsable values to the field setter for Date, DateTime, and Time objects. When this is a String it needs to be valid for Time.parse. Other objects must be valid to pass to Time.local.\",\"summary\":\"Mongoid tries to serialize the values for Date, DateTime, and Time into proper UTC times to store in the database. The provided value could not be parsed.\"},\"inverse_not_found\":{\"message\":\"When adding a(n) %{klass} to %{base}#%{name}, Mongoid could not determine the inverse foreign key to set. The attempted key was \\'%{inverse}\\'.\",\"resolution\":\"If an inverse is not required, like a belongs_to or has_and_belongs_to_many, ensure that :inverse_of =\\\\u003e nil is set on the association. If the inverse is needed, most likely the inverse cannot be figured out from the names of the associations and you will need to explicitly tell Mongoid on the association what the inverse is.\\\\n\\\\n Example:\\\\n   class Car\\\\n     include Mongoid::Document\\\\n     has_one :engine, class_name: \\\\\"Motor\\\\\", inverse_of: :machine\\\\n   end\\\\n\\\\n   class Motor\\\\n     include Mongoid::Document\\\\n     belongs_to :machine, class_name: \\\\\"Car\\\\\", inverse_of: :engine\\\\n   end\",\"summary\":\"When adding a document to an association, Mongoid attempts to link the newly added document to the base of the association in memory, as well as set the foreign key to link them on the database side. In this case Mongoid could not determine what the inverse foreign key was.\"},\"message_title\":\"message\",\"mixed_client_configuration\":{\"message\":\"Both uri and standard configuration options defined for client: \\'%{name}\\'.\",\"resolution\":\"Provide either only a uri as configuration or only standard options.\",\"summary\":\"Instead of simply giving uri or standard options a preference order, Mongoid assumes that you have made a mistake in your configuration and requires that you provide one or the other, but not both. The options that were provided were: %{config}.\"},\"mixed_relations\":{\"message\":\"Referencing a(n) %{embedded} document from the %{root} document via a non-embedded association is not allowed since the %{embedded} is embedded.\",\"resolution\":\"Consider not embedding %{embedded}, or do the key storage and access in a custom manner in the application code.\",\"summary\":\"In order to properly access a(n) %{embedded} from %{root} the reference would need to go through the root document of %{embedded}. In a simple case this would require Mongoid to store an extra foreign key for the root, in more complex cases where %{embedded} is multiple levels deep a key would need to be stored for each parent up the hierarchy.\"},\"nested_attributes_metadata_not_found\":{\"message\":\"Could not find metadata for association \\'%{name}\\' on model: %{klass}.\",\"resolution\":\"Make sure that there is an association defined named \\'%{name}\\' on %{klass} or that the association definition comes before the accepts_nested_attributes_for macro in the model - order matters so that Mongoid has access to the metadata.\\\\n\\\\n Example:\\\\n   class Band\\\\n     include Mongoid::Document\\\\n     has_many :albums\\\\n     accepts_nested_attributes_for :albums\\\\n   end\\\\n\\\\n\",\"summary\":\"When defining nested attributes for an association, Mongoid needs to access the metadata for the association \\'%{name}\\' in order if add autosave functionality to it, if applicable. Either no association named \\'%{name}\\' could be found, or the association had not been defined yet.\"},\"no_client_config\":{\"message\":\"No configuration could be found for a client named \\'%{name}\\'.\",\"resolution\":\"Double check your mongoid.yml to make sure under the clients key that a configuration exists for \\'%{name}\\'. If you have set the configuration programmatically, ensure that \\'%{name}\\' exists in the configuration hash.\",\"summary\":\"When attempting to create the new client, Mongoid could not find a client configuration for the name: \\'%{name}\\'. This is necessary in order to know the host, port, and options needed to connect.\"},\"no_client_database\":{\"message\":\"No database provided for client configuration: :%{name}.\",\"resolution\":\"If configuring via a mongoid.yml, ensure that within your :%{name} section a :database value for the client\\'s default database is defined.\\\\n\\\\n Example:\\\\n   development:\\\\n     clients:\\\\n       %{name}:\\\\n         database: my_app_db\\\\n         hosts:\\\\n           - localhost:27017\\\\n\\\\n\",\"summary\":\"Each client configuration must provide a database so Mongoid knows where the default database to persist to. What was provided was: %{config}.\"},\"no_client_hosts\":{\"message\":\"No hosts provided for client configuration: :%{name}.\",\"resolution\":\"If configuring via a mongoid.yml, ensure that within your :%{name} section a :hosts value for the client hosts is defined.\\\\n\\\\n Example:\\\\n   development:\\\\n     clients:\\\\n       %{name}:\\\\n         database: my_app_db\\\\n         hosts:\\\\n           - localhost:27017\\\\n\\\\n\",\"summary\":\"Each client configuration must provide hosts so Mongoid knows where the database server is located. What was provided was: %{config}.\"},\"no_clients_config\":{\"message\":\"No clients configuration provided.\",\"resolution\":\"Double check your mongoid.yml to make sure that you have a top-level clients key with at least 1 default client configuration for it. You can regenerate a new mongoid.yml for assistance via `rails g mongoid:config`.\\\\n\\\\n Example:\\\\n   development:\\\\n     clients:\\\\n       default:\\\\n         database: mongoid_dev\\\\n         hosts:\\\\n           - localhost:27017\\\\n\\\\n\",\"summary\":\"Mongoid\\'s configuration requires that you provide details about each client that can be connected to, and requires in the clients config at least 1 default client to exist.\"},\"no_default_client\":{\"message\":\"No default client configuration is defined.\",\"resolution\":\"If configuring via a mongoid.yml, ensure that within your :clients section a :default client is defined.\\\\n\\\\n Example:\\\\n   development:\\\\n     clients:\\\\n       default:\\\\n         hosts:\\\\n           - localhost:27017\\\\n\\\\n\",\"summary\":\"The configuration provided settings for: %{keys}, but Mongoid requires a :default to be defined at minimum.\"},\"no_documents_found\":{\"message\":\"Could not find a document of class %{klass}.\",\"resolution\":\"Create a document of class %{klass} or use a finder method that does not raise an exception when no documents are found.\",\"summary\":\"Mongoid attempted to find a document of the class %{klass} but none exist.\"},\"no_environment\":{\"message\":\"Could not load the configuration since no environment was defined.\",\"resolution\":\"Please ensure an environment is set in one of the listed locations. The environment must be explicitly set.\",\"summary\":\"Mongoid could not determine the environment to use because it was not specified in any of the following locations: Rails.env, Sinatra::Base.environment, ENV[\\\\\"RACK_ENV\\\\\"], ENV[\\\\\"MONGOID_ENV\\\\\"]. Without knowing the environment, Mongoid cannot load its configuration.\"},\"no_map_reduce_output\":{\"message\":\"No output location was specified for the map/reduce operation.\",\"resolution\":\"Provide the location that the output of the operation is to go by chaining an #out call to the map/reduce.\\\\n\\\\n Example:\\\\n   Band.map_reduce(map, reduce).out(inline: 1)\\\\n\\\\n Valid options for the out function are:\\\\n   inline: 1\\\\n   merge: \\'collection-name\\'\\\\n   replace: \\'collection-name\\'\\\\n   reduce: \\'collection-name\\'\\\\n\\\\n\",\"summary\":\"When executing a map/reduce, you must provide the output location of the results. The attempted command was: %{command}.\"},\"no_metadata\":{\"message\":\"Metadata not found for document of type %{klass}.\",\"resolution\":\"Ensure that your associations on the %{klass} model are all properly defined, and that the inverse associations are also properly defined. Embedded associations must have both the parent (embeds_one/embeds_many) and the inverse (embedded_in) present in order to work properly.\",\"summary\":\"Mongoid sets the metadata of an association on the document when it is either loaded from within the association, or added to one. The presence of the metadata is required in order to provide various functionality around associations. Most likely you are getting this error because the document is embedded and was attempted to be persisted without being associated with a parent, or the association was not properly defined.\"},\"no_parent\":{\"message\":\"Cannot persist embedded document %{klass} without a parent document.\",\"resolution\":\"Ensure that you\\'ve set the parent association if instantiating the embedded document directly, or always create new embedded documents via the parent association.\",\"summary\":\"If the document is embedded, in order to be persisted it must always have a reference to its parent document. This is most likely caused by either calling %{klass}.create or %{klass}.create! without setting the parent document as an attribute.\"},\"readonly_attribute\":{\"message\":\"Attempted to set the readonly attribute \\'%{name}\\' with the value: %{value}.\",\"resolution\":\"Don\\'t define \\'%{name}\\' as readonly, or do not attempt to update its value after the document is persisted.\",\"summary\":\"Attributes flagged as readonly via Model.attr_readonly can only have values set when the document is a new record.\"},\"readonly_document\":{\"message\":\"Attempted to persist a readonly document of class \\'%{klass}\\'.\",\"resolution\":\"Don\\'t attempt to persist documents that are flagged as readonly.\",\"summary\":\"Documents that are marked readonly cannot be persisted.\"},\"resolution_title\":\"resolution\",\"scope_overwrite\":{\"message\":\"Cannot create scope :%{scope_name}, because of existing method %{model_name}.%{scope_name}.\",\"resolution\":\"Change the name of the scope so it does not conflict with the already defined method %{model_name}, or set the configuration option Mongoid.scope_overwrite_exception to false, which is its default. In this case a warning will be logged.\",\"summary\":\"When defining a scope that conflicts with a method that already exists on the model, this error will get raised if Mongoid.scope_overwrite_exception is set to true.\"},\"sessions_not_supported\":{\"message\":\"Sessions are not supported by the connected server(s).\",\"resolution\":\"Verify that all servers in your deployment are at least version 3.6 or don\\'t attempt to use sessions with older server versions.\",\"summary\":\"A session was attempted to be used with a MongoDB server version that doesn\\'t support sessions. Sessions are supported in MongoDB server versions 3.6 and higher.\"},\"summary_title\":\"summary\",\"too_many_nested_attribute_records\":{\"message\":\"Accepting nested attributes for %{association} is limited to %{limit} documents.\",\"resolution\":\"The limit is set as an option to the macro, for example: accepts_nested_attributes_for :%{association}, limit: %{limit}. Consider raising this limit or making sure no more are sent than the set value.\",\"summary\":\"More documents were sent to be processed than the allowed limit.\"},\"unknown_attribute\":{\"message\":\"Attempted to set a value for \\'%{name}\\' which is not allowed on the model %{klass}.\",\"resolution\":\"Define the field \\'%{name}\\' in %{klass}, or include Mongoid::Attributes::Dynamic in %{klass} if you intend to store values in fields that are not explicitly defined.\",\"summary\":\"%{klass}#%{name}= was called but there is no \\'%{name}\\' field defined in the model, and Mongoid::Attributes::Dynamic is not included. This error is also raised instead of NoMethodError if the unknown attribute is passed to any method that accepts an attributes hash, such as #attributes=.\"},\"unknown_model\":{\"message\":\"Attempted to instantiate an object of the unknown model \\'%{klass}\\'.\",\"resolution\":\"The _type field is a reserved one used by Mongoid to determine the class for instantiating an object. Please don\\'t save data in this field or ensure that any values in this field correspond to valid models.\",\"summary\":\"A document with the value \\'%{value}\\' at the key \\'_type\\' was used to instantiate a model object but Mongoid cannot find this Class.\"},\"unsaved_document\":{\"message\":\"Attempted to save %{document} before the parent %{base}.\",\"resolution\":\"Make sure to only use create or create! when the parent document %{base} is persisted.\",\"summary\":\"You cannot call create or create! through the association (%{document}) whose parent (%{base}) is not already saved. This would cause the database to be out of sync since the child could potentially reference a nonexistent parent.\"},\"unsupported_javascript\":{\"message\":\"Executing Javascript $where selector on an embedded criteria is not supported.\",\"resolution\":\"Please provide a standard hash to #where when the criteria is for an embedded association.\",\"summary\":\"Mongoid only supports providing a hash of arguments to #where criterion on embedded documents. Since %{klass} is embedded, the expression %{javascript} is not allowed.\"},\"validations\":{\"message\":\"Validation of %{document} failed.\",\"resolution\":\"Try persisting the document with valid data or remove the validations.\",\"summary\":\"The following errors were found: %{errors}\"}}}},\"number\":{\"currency\":{\"format\":{\"delimiter\":\",\",\"format\":\"%u%n\",\"negative_format\":\"-%u%n\",\"precision\":2,\"separator\":\".\",\"significant\":false,\"strip_insignificant_zeros\":false,\"unit\":\"$\"}},\"format\":{\"delimiter\":\",\",\"precision\":3,\"round_mode\":\"default\",\"separator\":\".\",\"significant\":false,\"strip_insignificant_zeros\":false},\"human\":{\"decimal_units\":{\"format\":\"%n %u\",\"units\":{\"billion\":\"Billion\",\"million\":\"Million\",\"quadrillion\":\"Quadrillion\",\"thousand\":\"Thousand\",\"trillion\":\"Trillion\",\"unit\":\"\"}},\"format\":{\"delimiter\":\"\",\"precision\":3,\"significant\":true,\"strip_insignificant_zeros\":true},\"storage_units\":{\"format\":\"%n %u\",\"units\":{\"byte\":{\"one\":\"Byte\",\"other\":\"Bytes\"},\"eb\":\"EB\",\"gb\":\"GB\",\"kb\":\"KB\",\"mb\":\"MB\",\"pb\":\"PB\",\"tb\":\"TB\",\"zb\":\"ZB\"}}},\"nth\":{},\"percentage\":{\"format\":{\"delimiter\":\"\",\"format\":\"%n%\"}},\"precision\":{\"format\":{\"delimiter\":\"\"}}},\"simple_form\":{\"error_notification\":{\"default_message\":\"Please review the problems below:\"},\"no\":\"No\",\"required\":{\"mark\":\"*\",\"text\":\"required\"},\"yes\":\"Yes\"},\"support\":{\"array\":{\"last_word_connector\":\", and \",\"two_words_connector\":\" and \",\"words_connector\":\", \"}},\"time\":{\"am\":\"am\",\"formats\":{\"default\":\"%a, %d %b %Y %H:%M:%S %z\",\"long\":\"%B %d, %Y %H:%M\",\"short\":\"%d %b %H:%M\"},\"pm\":\"pm\"},\"users\":{\"confirmations\":{\"new\":{\"legend\":\"Resend your %{brand_name} confirmation instructions\",\"message\":\"We need to confirm your email address to complete the sign up process. Supply your email address, below, and we will send you instructions on how to confirm your address.\",\"submit_button\":\"Send Confirmation Instructions\",\"title\":\"Resend confirmation instructions | %{brand_name}\"},\"show\":{\"legend\":\"Check your inbox for a confirmation email\",\"message\":\"If your e-mail exists in our database we have sent you a message with instructions. Check your inbox (or spam folder) for a message from \\'%{default_from_email}\\' containing the confirmation link.\",\"title\":\"Awaiting confirmation | %{brand_name}\"}},\"passwords\":{\"new\":{\"failures\":\"Note: If you make more than 5 sequential failed attempts to sign in with your %{brand_name} password, your account will be (temporarily) locked. Check your inbox for instruction on how to unlock your account, or we can\",\"legend\":\"Reset your %{brand_name} password\",\"message\":\"Supply your email address, below, and we will send you instructions on how to reset your password.\",\"resend_link\":\"resend a new set of unlock instructions\",\"submit_button\":\"Send Reset Instructions\",\"title\":\"Reset password | %{brand_name}\"},\"show\":{\"didnt_receive_email\":\"Didn\\'t receive the email?\",\"legend\":\"Password reset instructions sent\",\"message\":\"If your e-mail exists in our database we have sent you a message with password reset instructions. Check your inbox (or spam folder) for a message from \\'%{default_from_email}\\'.\",\"resend_link\":\"you can request another one here\",\"title\":\"Awaiting reset | %{brand_name}\"}}},\"will_paginate\":{\"container_aria_label\":\"Pagination\",\"next_label\":\"Next \\\\u0026#8594;\",\"page_aria_label\":\"Page %{page}\",\"page_entries_info\":{\"multi_page\":\"Displaying %{model} %{from} - %{to} of %{count} in total\",\"multi_page_html\":\"Displaying %{model} \\\\u003cb\\\\u003e%{from}\\\\u0026nbsp;-\\\\u0026nbsp;%{to}\\\\u003c/b\\\\u003e of \\\\u003cb\\\\u003e%{count}\\\\u003c/b\\\\u003e in total\",\"single_page\":{\"one\":\"Displaying 1 %{model}\",\"other\":\"Displaying all %{count} %{model}\",\"zero\":\"No %{model} found\"},\"single_page_html\":{\"one\":\"Displaying \\\\u003cb\\\\u003e1\\\\u003c/b\\\\u003e %{model}\",\"other\":\"Displaying \\\\u003cb\\\\u003eall\\\\u0026nbsp;%{count}\\\\u003c/b\\\\u003e %{model}\",\"zero\":\"No %{model} found\"}},\"page_gap\":\"\\\\u0026hellip;\",\"previous_label\":\"\\\\u0026#8592; Previous\"}}'));\nI18n.translations[\"zh_TW\"] = I18n.extend((I18n.translations[\"zh_TW\"] || {}), JSON.parse('{\"activerecord\":{\"errors\":{\"messages\":{\"record_invalid\":\"Validation failed: %{errors}\",\"restrict_dependent_destroy\":{\"has_many\":\"Cannot delete record because dependent %{record} exist\",\"has_one\":\"Cannot delete record because a dependent %{record} exists\"}}}},\"bulk_uploads\":{\"email_local_part\":{\"empty_parameter\":\"No file uploaded\",\"error\":\"File Upload failed: %{error_message}\",\"success\":\"File was successfully uploaded\"}},\"common\":{\"crm\":{\"salesforce\":{\"forgot_password\":\"If you have forgotten your Salesforce password, please follow the instructions provided on the Salesforce sign in page.\",\"sign_in_button\":\"Sign In with Salesforce\"}}},\"contact\":{\"default_from_email\":\"info@zymewire.com\",\"phone_numbers\":[{\"label\":\"US\",\"phone\":\"1-844-996-3321\"},{\"label\":\"UK\",\"phone\":\"+44-208-133-9963\"}],\"support_email\":\"support@zymewire.com\"},\"date\":{\"abbr_day_names\":[\"Sun\",\"Mon\",\"Tue\",\"Wed\",\"Thu\",\"Fri\",\"Sat\"],\"abbr_month_names\":[null,\"Jan\",\"Feb\",\"Mar\",\"Apr\",\"May\",\"Jun\",\"Jul\",\"Aug\",\"Sep\",\"Oct\",\"Nov\",\"Dec\"],\"day_names\":[\"Sunday\",\"Monday\",\"Tuesday\",\"Wednesday\",\"Thursday\",\"Friday\",\"Saturday\"],\"formats\":{\"default\":\"%Y-%m-%d\",\"long\":\"%B %d, %Y\",\"short\":\"%b %d\"},\"month_names\":[null,\"January\",\"February\",\"March\",\"April\",\"May\",\"June\",\"July\",\"August\",\"September\",\"October\",\"November\",\"December\"],\"order\":[\"year\",\"month\",\"day\"]},\"datetime\":{\"distance_in_words\":{\"about_x_hours\":{\"one\":\"about 1 hour\",\"other\":\"about %{count} hours\"},\"about_x_months\":{\"one\":\"about 1 month\",\"other\":\"about %{count} months\"},\"about_x_years\":{\"one\":\"about 1 year\",\"other\":\"about %{count} years\"},\"almost_x_years\":{\"one\":\"almost 1 year\",\"other\":\"almost %{count} years\"},\"half_a_minute\":\"half a minute\",\"less_than_x_minutes\":{\"one\":\"less than a minute\",\"other\":\"less than %{count} minutes\"},\"less_than_x_seconds\":{\"one\":\"less than 1 second\",\"other\":\"less than %{count} seconds\"},\"over_x_years\":{\"one\":\"over 1 year\",\"other\":\"over %{count} years\"},\"x_days\":{\"one\":\"1 day\",\"other\":\"%{count} days\"},\"x_minutes\":{\"one\":\"1 minute\",\"other\":\"%{count} minutes\"},\"x_months\":{\"one\":\"1 month\",\"other\":\"%{count} months\"},\"x_seconds\":{\"one\":\"1 second\",\"other\":\"%{count} seconds\"}},\"prompts\":{\"day\":\"Day\",\"hour\":\"Hour\",\"minute\":\"Minute\",\"month\":\"Month\",\"second\":\"Seconds\",\"year\":\"Year\"}},\"default_host\":\"https://www.zymewire.com\",\"devise\":{\"confirmations\":{\"confirmed\":\"Your account was successfully confirmed. Please sign in.\",\"send_instructions\":\"Your email has not been confirmed. We need to confirm your email account before you can sign in. Please check your inbox or spam folder for an email from \\'info@zymewire.com\\' or request a new one.\",\"send_paranoid_instructions\":\"If your e-mail exists on our database, you will receive an email with instructions about how to confirm your account in a few minutes.\"},\"failure\":{\"already_authenticated\":\"You are already signed in.\",\"expired\":\"你的帳號因過久沒使用而已經過期,請洽網站管理員。\",\"inactive\":\"Your account was not activated yet.\",\"invalid\":\"Invalid email or password. If you use Salesforce, use the \\'Have Salesforce?\\' panel.\",\"invalid_token\":\"Invalid authentication token.\",\"last_attempt\":\"You have one more attempt before your account is locked.\",\"locked\":\"Your account is locked.\",\"not_active\":\"Your account has been de-activated, if you think this is a mistake please contact us\",\"not_found_in_database\":\"Invalid %{authentication_keys} or password.\",\"session_limited\":\"你的登入憑證已在另一個瀏覽器上被使用,請重新登入以在此瀏覽器繼續使用。\",\"timeout\":\"Your session expired, please sign in again to continue.\",\"unauthenticated\":\"You need to sign in or sign up before continuing.\",\"unconfirmed\":\"We must confirm your email before you can continue. Please check your inbox or spam folder for a confirmation email from \\'info@zymewire.com\\' or request a new one.\"},\"invalid_captcha\":\"輸入的驗證碼無效。\",\"invalid_security_question\":\"安全問題答案無效。\",\"mailer\":{\"confirmation_instructions\":{\"subject\":\"Confirmation instructions for Zymewire.com\"},\"email_changed\":{\"subject\":\"Email Changed\"},\"password_change\":{\"subject\":\"Password Changed\"},\"reset_password_instructions\":{\"subject\":\"Reset password instructions for Zymewire.com\"},\"unlock_instructions\":{\"subject\":\"Unlock Instructions for Zymewire.com\"}},\"omniauth_callbacks\":{\"failure\":\"Could not authorize you from %{kind} because \\\\\"%{reason}\\\\\".\",\"success\":\"Successfully authorized from %{kind} account.\"},\"paranoid_verification_code\":{\"show\":{\"submit\":\"送出\",\"submit_verification_code\":\"送出驗證碼\",\"verification_code\":\"驗證碼\"},\"updated\":\"接受驗證碼\"},\"paranoid_verify\":{\"code_required\":\"請輸入由我們客服團隊提供的代碼\"},\"password_expired\":{\"change_required\":\"你的密碼已經過期,請更新密碼。\",\"show\":{\"change_my_password\":\"更改我的密碼\",\"current_password\":\"目前密碼\",\"new_password\":\"新密碼\",\"new_password_confirmation\":\"確認新密碼\",\"renew_your_password\":\"更新你的密碼\"},\"updated\":\"你的新密碼已儲存\"},\"passwords\":{\"no_token\":\"You can\\'t access this page without coming from a password reset email. If you do come from a password reset email, please make sure you used the full URL provided.\",\"send_instructions\":\"You will receive an email with instructions about how to reset your password in a few minutes.\",\"send_paranoid_instructions\":\"If your e-mail exists on our database, you will receive a password recovery link on your e-mail\",\"updated\":\"Your password was changed successfully. You are now signed in.\",\"updated_not_active\":\"Your password was changed successfully.\"},\"registrations\":{\"destroyed\":\"Bye! Your account was successfully cancelled. We hope to see you again soon.\",\"signed_up\":\"Welcome! You have signed up successfully.\",\"signed_up_but_inactive\":\"You have signed up successfully. However, we could not sign you in because your account is not yet activated.\",\"signed_up_but_locked\":\"You have signed up successfully. However, we could not sign you in because your account is locked.\",\"signed_up_but_unconfirmed\":\"A message with a confirmation link has been sent to your email address. Please open the link to activate your account.\",\"update_needs_confirmation\":\"You updated your account successfully, but we need to verify your new email address. Please check your email and click on the confirm link to finalize confirming your new email address.\",\"updated\":\"You updated your account successfully.\",\"updated_but_not_signed_in\":\"Your account has been updated successfully, but since your password was changed, you need to sign in again.\"},\"sessions\":{\"already_signed_out\":\"Signed out successfully.\",\"signed_in\":\"Signed in successfully.\",\"signed_out\":\"Signed out successfully.\"},\"unlocks\":{\"send_instructions\":\"You will receive an email with instructions about how to unlock your account in a few minutes.\",\"send_paranoid_instructions\":\"If your account exists, you will receive an email with instructions about how to unlock it in a few minutes.\",\"unlocked\":\"Your account has been unlocked successfully. Please sign in to continue.\"}},\"download\":\"Download\",\"download_30_days\":\"This link will be available for 30 days after which the file will be removed from our servers.\",\"enumerize\":{\"blocklisted_contact\":{\"provider\":{\"insideview\":\"InsideView\",\"zephyr\":\"Zephyr\"}}},\"errors\":{\"format\":\"%{attribute} %{message}\",\"messages\":{\"accepted\":\"must be accepted\",\"already_confirmed\":\"was already confirmed, please try signing in\",\"blank\":\"can\\'t be blank\",\"confirmation\":\"doesn\\'t match %{attribute}\",\"confirmation_period_expired\":\"needs to be confirmed within %{period}, please request a new one\",\"empty\":\"can\\'t be empty\",\"equal_to\":\"must be equal to %{count}\",\"equal_to_current_password\":\"必須與目前密碼不同。\",\"equal_to_email\":\"必須與電子郵件地址不同。\",\"even\":\"must be even\",\"exclusion\":\"is reserved\",\"expired\":\"has expired, please request a new one\",\"greater_than\":\"must be greater than %{count}\",\"greater_than_or_equal_to\":\"must be greater than or equal to %{count}\",\"in\":\"must be in %{count}\",\"inclusion\":\"is not included in the list\",\"invalid\":\"is invalid\",\"less_than\":\"must be less than %{count}\",\"less_than_or_equal_to\":\"must be less than or equal to %{count}\",\"model_invalid\":\"Validation failed: %{errors}\",\"not_a_number\":\"is not a number\",\"not_an_integer\":\"must be an integer\",\"not_found\":\"not found\",\"not_locked\":\"was not locked\",\"not_saved\":{\"one\":\"1 error prohibited this %{resource} from being saved:\",\"other\":\"%{count} errors prohibited this %{resource} from being saved:\"},\"odd\":\"must be odd\",\"other_than\":\"must be other than %{count}\",\"password_complexity\":{\"digit\":{\"one\":\"必須包含至少一個數字\",\"other\":\"必須包含至少 %{count} 個數字\"},\"lower\":{\"one\":\"必須包含至少一個小寫字母\",\"other\":\"必須包含至少 %{count} 個小寫字母\"},\"symbol\":{\"one\":\"必須包含至少一個特殊符號\",\"other\":\"必須包含至少 %{count} 個特殊符號\"},\"upper\":{\"one\":\"必須包含至少一個大寫字母\",\"other\":\"必須包含至少 %{count} 個大寫字母\"}},\"password_format\":\"Must contain uppercase AND lowercase letters and at least one number\",\"password_too_long\":\"is too long\",\"present\":\"must be blank\",\"required\":\"must exist\",\"taken\":\"has already been taken\",\"taken_in_past\":\"曾被使用過。\",\"too_long\":{\"one\":\"is too long (maximum is 1 character)\",\"other\":\"is too long (maximum is %{count} characters)\"},\"too_short\":{\"one\":\"is too short (minimum is 1 character)\",\"other\":\"is too short (minimum is %{count} characters)\"},\"wrong_length\":{\"one\":\"is the wrong length (should be 1 character)\",\"other\":\"is the wrong length (should be %{count} characters)\"}}},\"flash\":{\"actions\":{\"create\":{\"notice\":\"%{resource_name} was successfully created.\"},\"destroy\":{\"alert\":\"%{resource_name} could not be destroyed.\",\"notice\":\"%{resource_name} was successfully destroyed.\"},\"update\":{\"notice\":\"%{resource_name} was successfully updated.\"}}},\"hello_world\":\"Hello world\",\"helpers\":{\"select\":{\"prompt\":\"Please select\"},\"submit\":{\"create\":\"Create %{model}\",\"submit\":\"Save %{model}\",\"update\":\"Update %{model}\"}},\"hi\":\"Hi\",\"mailers\":{\"common\":{\"chummy_sign_off\":\"Have a good one.\",\"final_note\":\"P.S.: If you think you received this email accidentally, then something weird could be going on. Hit reply and a member of the %{brand_name} team will investigate.\",\"team_sign_off\":\"- The %{brand_name} Team\"},\"confirmation_instructions_email\":{\"crm\":{\"salesforce\":{\"resource_confirmed\":\"Someone has requested a resend of a confirmation email. You do not need to confirm your email address because your account is configured to use Salesforce to sign in.\",\"resource_unconfirmed\":\"You do not need to confirm your email address because your account is configured to use Salesforce to sign in, please complete the sign up process by clicking the button below to sign in to %{brand_name} via Salesforce.\"}},\"non_crm\":{\"confirm_link\":\"Confirm my account\",\"welcome\":\"Welcome to %{brand_name}. As the final step in the process you\\'ll need to confirm your account by clicking on the link below.\"},\"subject\":\"Confirmation instructions for %{domain}\"},\"flagged_events_mailer\":{\"from\":\"Flagged events - %{brand_name} \\\\u003cflagged_events@mailer.%{domain}\\\\u003e\"},\"mobile_registration_email\":{\"alert_cs_registration_locked\":{\"subject\":\"%{brand_name}: user has had mobile registration locked, too many failed attempts\"},\"dispatch_registration_PIN\":{\"further_instructions\":\"If you are NOT attempting to register for the %{brand_name} Mobile app then please let us know at %{support_email_link} - thank you.\",\"introduction\":\"Here is your mobile app registration PIN:\",\"subject\":\"%{brand_name} Mobile Registration Verification\"},\"too_many_failed_attempts\":{\"introduction\":\"We have received too many failed mobile device registration attempts for your account and we will block any further requests. If you have not attempted to register a mobile device with us in the last hour then please let us know as it is likely someone has tried on your behalf. If you have been trying to register a device please contact %{support_email_link} and we can help unlock your account and get you registered.\",\"subject\":\"%{brand_name}: too many failed registration attempts\"}},\"org_list_download_mail\":{\"dispatch_link\":{\"introduction\":\"We have finished meshing your %{crm_brand_name} data with the companies in your \\\\\"%{list_name}\\\\\" list.\",\"subject\":\"%{brand_name}: your file download of \\'%{list_name}\\' is ready\"},\"failed\":{\"instructions\":\"You could try again in a little while. If you already have and are receiving this email again, please contact us at %{support_email_link}\",\"introduction\":\"We are really sorry, but something went wrong with creating your download of %{crm_brand_name} data for your \\\\\"%{list_name}\\\\\" list.\",\"subject\":\"%{brand_name}: your file download of \\'%{list_name}\\' failed\"}},\"reset_password_instructions_email\":{\"crm\":{\"salesforce\":{\"change_requested\":\"Someone has requested a change to your password. Your account is configured to use Salesforce to sign in.\"}},\"fishy_fine_print\":\"If you did not request a password change, then something weird is going on. Someone may be trying to access your account (unsuccessfully). Please reply to this email and let us know. We will take steps to make sure it stops.\",\"non_crm\":{\"change_password_link\":\"Change my password\",\"change_requested\":\"Someone has requested a change to your password, you can do this via the link below.\"},\"subject\":\"Password reset instructions for %{domain}\"},\"sales_force_mail\":{\"processing_completed\":{\"bullet_points\":[\"Only show events associated with companies in your Salesforce account\",\"Add new contacts and accounts to your Salesforce account without leaving %{brand_name}\",\"Access the \\'Salesforce details\\' panel on company dashboards where you can see open tasks, team interactions, opportunities, and more!\"],\"further_instructions\":\"We\\'re here to help. If you run into any questions or challenges, please contact us at %{support_email_link} and a member of our team would be more than happy to help.\",\"get_the_most\":\"To get the most from the integration, check out the \\'Mine Salesforce for opportunities\\' guide in the Help Center.\",\"guide_button\":\"Take me to the guide\",\"introduction\":\"Good news - your Salesforce account is now integrated with %{brand_name}. Now you’ll be able to:\"}},\"segment_contact\":{\"report_manager\":{\"fail_subject\":\"%{brand_name}: The PDF report generation failed\",\"success_subject\":\"%{brand_name}: Your PDF for %{company_name} is attached\"}},\"sf_token_expiry_email\":{\"further_instructions\":\"If you run into any questions or challenges, please contact us at %{support_email_link} and a member of our team would be more than happy to help.\",\"introduction\":\"Unfortunately the connection established for you between %{brand_name} and your %{crm_brand_name} account has expired. We will not be able to update your lists in %{brand_name} to reflect your %{crm_brand_name} database. To re-establish the connection, you just need to log in to %{brand_name} using your %{crm_brand_name}.\",\"subject\":\"%{brand_name} to %{crm_brand_name} connection has expired\"},\"share_list_mail\":{\"introduction\":\"%{user_name} shared a list with you: \",\"subject\":\"[%{brand_name} - shared list] %{list_name}\"},\"trial_expiry_mail\":{\"seven_days_to_go\":{\"further_instructions\":\"A member of our fabulous Customer Success team will arrange a welcome call with you to understand your goals and priorities, and will then give you a personalized Tour de %{brand_name} so you can easily access the information that is most valuable to you.\",\"instructions\":\"If you\\'d like continued access to the platform with our flexible month-to-month subscription, please ensure you contact %{support_email_link} ahead of: %{deadline}\",\"introduction\":\"Time flies when you\\'re uncovering new business opportunities! Your %{brand_name} trial is coming to an end next week.\",\"sign_off\":\"We look forward to helping you reach your sales goals!\",\"subject\":\"Just a heads up that your %{brand_name} trial is ending in seven days\"},\"seven_days_to_go_warning_for_cs\":{\"introduction\":\"%{user_name} shared a list with you: \",\"subject\":\"[%{brand_name} - shared list] %{list_name}\"}},\"unlock_instructions_email\":{\"crm\":{\"salesforce\":{\"change_requested\":\"You are being sent this email either because of one too many unsuccessful non-Salesforce log-in attempts or someone has requested an unlock email. %{brand_name} has not locked your account because your account is configured to use Salesforce to sign in.\",\"password_forgotten\":\"If you have forgotten your Salesforce password or think your account has been locked by Salesforce, please follow the instructions provided on the Salesforce sign in page.\"}},\"fishy_fine_print\":\"If you have not been (unsuccessfully) trying to log in to your account, then something weird is going on. Someone may be trying to access your account (unsuccessfully). Please reply to this email and let us know. We will take steps to make sure it stops.\",\"non_crm\":{\"change_requested\":\"For security reasons we have locked your account because of too many log-in attempts. To unlock your account, click the link below.\",\"unlock_account_link\":\"Unlock my account\"},\"subject\":\"Unlock instructions for %{domain}\"}},\"mongoid\":{\"errors\":{\"messages\":{\"ambiguous_relationship\":{\"message\":\"Ambiguous associations %{candidates} defined on %{klass}.\",\"resolution\":\"On the %{name} association on %{inverse} you must add an :inverse_of option to specify the exact association on %{klass} that is the opposite of %{name}.\",\"summary\":\"When Mongoid attempts to set an inverse document of an association in memory, it needs to know which association it belongs to. When setting %{name}, Mongoid looked on the class %{inverse} for a matching association, but multiples were found that could potentially match: %{candidates}.\"},\"blank_in_locale\":\"can\\'t be blank in %{location}\",\"callbacks\":{\"message\":\"Calling %{method} on %{klass} resulted in a false return from a callback.\",\"resolution\":\"Double check all before callbacks to make sure they are not unintentionally returning false.\",\"summary\":\"If a before callback returns false when using Document.create!, Document#save!, or Document#update_attributes! this error will get raised since the document did not actually get saved.\"},\"calling_document_find_with_nil_is_invalid\":{\"message\":\"Calling Document.find with nil is invalid.\",\"resolution\":\"Most likely this is caused by passing parameters directly through to the find, and the parameter either is not present or the key from which it is accessed is incorrect.\",\"summary\":\"Document.find expects the parameters to be 1 or more ids, and will return a single document if 1 id is provided, otherwise an array of documents if multiple ids are provided.\"},\"create_collection_failure\":{\"message\":\"Cannot create collection %{collection_name} with options %{collection_options}. The following error was raised: %{error}.\",\"resolution\":\"Double check that collection options for the collection %{collection_name} are valid. Consult with Ruby driver documentation and MongoDB documentation if the desired options are supported by your version of the server.\",\"summary\":\"The server rejected createCollection command with given collection options. This may happen when some of the options are invalid, or not supported by your version of the server.\"},\"criteria_argument_required\":{\"message\":\"Calling Criteria methods with nil arguments is not allowed.\",\"resolution\":\"Invoke Criteria methods with non-nil arguments or omit the respective invocations.\",\"summary\":\"Arguments to Criteria methods cannot be nil, and most Criteria methods require at least one argument. Only logical operations (and, or, nor and not), `all\\' and `where\\' can be called without arguments. The method that was called with nil argument was: %{query_method}.\"},\"delete_restriction\":{\"message\":\"Cannot destroy %{document} because of dependent \\'%{relation}\\'.\",\"resolution\":\"Don\\'t attempt to delete the parent %{document} when it has children, or change the dependent option on the association.\",\"summary\":\"When defining \\'%{relation}\\' with a :dependent =\\\\u003e :restrict_with_error, Mongoid will raise an error when attempting to destroy the %{document} when the child \\'%{relation}\\' still has documents in it.\"},\"destroy_restrict_with_error_dependencies_exist\":\"is not empty and prevents the document from being destroyed\",\"document_not_destroyed\":{\"message\":\"%{klass} with id %{id} was not destroyed.\",\"resolution\":\"Check the before/after destroy callbacks to ensure that the return values are truthy for the chain to continue.\",\"summary\":\"When calling %{klass}#destroy! and a callback halts the destroy callback chain by returning a false value, the deletion will not actually occur.\"},\"document_not_found\":{\"message\":\"Document(s) not found for class %{klass} with id(s) %{missing}.\",\"resolution\":\"Search for an id that is in the database or set the Mongoid.raise_not_found_error configuration option to false, which will cause nil to be returned instead of raising this error when searching for a single id, or only the matched documents when searching for multiples.\",\"summary\":\"When calling %{klass}.find with an id or array of ids, each parameter must match a document in the database or this error will be raised. The search was for the id(s): %{searched} (%{total} total) and the following ids were not found: %{missing}.\"},\"document_with_attributes_not_found\":{\"message\":\"Document not found for class %{klass} with attributes %{attributes}.\",\"resolution\":\"Search for attributes that are in the database or set the Mongoid.raise_not_found_error configuration option to false, which will cause nil to be returned instead of raising this error.\",\"summary\":\"When calling %{klass}.find_by with a hash of attributes, all attributes provided must match a document in the database or this error will be raised.\"},\"document_with_shard_key_not_found\":{\"message\":\"Document not found for class %{klass} with id %{missing} and shard key %{shard_key}.\",\"resolution\":\"Search for an id/shard key that is in the database or set the Mongoid.raise_not_found_error configuration option to false, which will cause nil to be returned instead of raising this error.\",\"summary\":\"When calling %{klass}.find with an id and a shard key, each parameter must match a document in the database or this error will be raised. The search was for the id: %{missing} with shard_key: %{shard_key} and it was not found.\"},\"drop_collection_failure\":{\"message\":\"Cannot drop collection %{collection_name}.\",\"resolution\":\"Try to drop the collection manually using Ruby driver or mongo shell.\",\"summary\":\"Mongoid tried to drop collection %{collection_name}, but the collection still exists in the database.\"},\"empty_config_file\":{\"message\":\"Empty configuration file: %{path}.\",\"resolution\":\"Ensure your configuration file contains the correct contents. Refer to: https://www.mongodb.com/docs/mongoid/current/reference/configuration/\",\"summary\":\"Your mongoid.yml configuration file appears to be empty.\"},\"immutable_attribute\":{\"message\":\"Attempted to change the immutable attribute \\'%{name}\\' with the value: %{value}.\",\"resolution\":\"Do not attempt to update the value of \\'%{name}\\' after the document is persisted.\",\"summary\":\"Immutable attributes can only have values set when the document is a new record.\"},\"in_memory_collation_not_supported\":{\"message\":\"A collation option cannot be applied when querying documents in-memory.\",\"resolution\":\"Remove the collation option from the query.\",\"summary\":\"The query being run against documents in memory has a collation option set. A collation option is only supported if the query is executed on a MongoDB server with version \\\\u003e= 3.4.\"},\"invalid_async_query_executor\":{\"message\":\"Invalid async_query_executor option: %{executor}.\",\"resolution\":\"Pick an allowed option or fix the typo. If you were expecting the option to be there, please consult the following page with respect to Mongoid\\'s configuration:\\\\n\\\\n   https://www.mongodb.com/docs/mongoid/current/reference/configuration/#mongoid-configuration-options\",\"summary\":\"A invalid async query executor was specified. The valid options are: %{options}.\"},\"invalid_collection\":{\"message\":\"Access to the collection for %{klass} is not allowed.\",\"resolution\":\"For access to the collection that the embedded document is in, use %{klass}#_root.collection, or do not attempt to persist an embedded document without a parent set.\",\"summary\":\"%{klass}.collection was called, and %{klass} is an embedded document - it resides within the collection of the root document of the hierarchy.\"},\"invalid_config_file\":{\"message\":\"Invalid configuration file: %{path}.\",\"resolution\":\"Ensure your configuration file contains the correct contents. Refer to: https://www.mongodb.com/docs/mongoid/current/reference/configuration/\",\"summary\":\"Your mongoid.yml configuration file does not contain the correct file structure.\"},\"invalid_config_option\":{\"message\":\"Invalid configuration option: %{name}.\",\"resolution\":\"Remove the invalid option or fix the typo. If you were expecting the option to be there, please consult the following page with respect to Mongoid\\'s configuration:\\\\n\\\\n   http://mongoid.org/en/mongoid/docs/installation.html\",\"summary\":\"A invalid configuration option was provided in your mongoid.yml, or a typo is potentially present. The valid configuration options are: %{options}.\"},\"invalid_dependent_strategy\":{\"message\":\"Invalid dependent strategy: %{invalid_strategy}.\",\"resolution\":\"Change the dependent strategy to one of the valid types.\",\"summary\":\"An invalid dependent strategy was defined for the association: %{association}. The valid strategies are: %{valid_strategies}.\"},\"invalid_discriminator_key_target\":{\"message\":\"Setting the discriminator key on a child class is not allowed.\",\"resolution\":\"Try setting the discriminator key on %{superclass} or one of %{class_name}\\'s ancestors.\",\"summary\":\"The discriminator key on the class %{class_name} was attempted to be changed. Changing the discriminator key on a child class is not allowed.\"},\"invalid_dot_dollar_assignment\":{\"message\":\"Cannot set the %{attr} attribute on the %{klass} class.\",\"resolution\":\"In order to set fields that start with a dollar sign ($) or contain a dot/period (.), the aggregation pipeline can be used. MongoDB provides specific operators for working with these fields. Refer to the MongoDB documentation here: https://www.mongodb.com/docs/manual/core/dot-dollar-considerations/\",\"summary\":\"Calling the setters for fields that start with a dollar sign ($) or contain a dot/period (.) is prohibited. See the Mongoid documentation on Field Names with Dots/Periods (.) and Dollar Signs ($) for more information.\"},\"invalid_elem_match_operator\":{\"message\":\"Invalid $elemMatch operator \\'%{operator}\\'.\",\"resolution\":\"Valid field operators are: %{valid_operators}. Ensure you are using one of these operators.\",\"summary\":\"You misspelled an operator or are using an operator that Mongoid does not support.\"},\"invalid_estimated_count_criteria\":{\"message\":\"Invalid criteria for estimated_count.\",\"resolution\":\"Try calling estimated_count directly on the class: %{class_name}.estimated_count.\\\\n\\\\n  If the class defines a default scope, use unscoped: %{class_name}.unscoped.estimated_count.\",\"summary\":\"Estimated count is strictly a collection-level operation and cannot be called on a filtered criteria.\"},\"invalid_expression_operator\":{\"message\":\"Invalid expression operator \\'%{operator}\\'.\",\"resolution\":\"Valid expression operators are: %{valid_operators}. Ensure you are using one of these operators.\",\"summary\":\"You misspelled an operator, are using an operator that Mongoid does not support, or are trying to use a field-level operator on expression level.\"},\"invalid_field\":{\"message\":\"Defining a field named \\'%{field}\\' is not allowed.\",\"resolution\":\"Use Mongoid.destructive_fields to see what names are not allowed, and don\\'t use these names. These include names that also conflict with core Ruby methods on Object, Module, Enumerable, or included gems that inject methods into these or Mongoid internals.\",\"summary\":\"Defining this field would override the method \\'%{name}\\', which would cause issues with expectations around the original method and cause extremely hard to debug issues. The original method was defined in:\\\\n   Object: %{origin}\\\\n   File: %{file}\\\\n   Line: %{line}\"},\"invalid_field_operator\":{\"message\":\"Invalid field operator \\'%{operator}\\'.\",\"resolution\":\"Valid field operators are: %{valid_operators}. Ensure you are using one of these operators.\",\"summary\":\"You misspelled an operator, are using an operator that Mongoid does not support, or are trying to use an expression-level operator on field level.\"},\"invalid_field_option\":{\"message\":\"Invalid option :%{option} provided for field :%{name}.\",\"resolution\":\"When defining the field :%{name} on \\'%{klass}\\', please provide valid options for the field. These are currently: %{valid}. If you meant to define a custom field option, please do so first as follows:\\\\n\\\\n   Mongoid::Fields.option :%{option} do |model, field, value|\\\\n     # Your logic here...\\\\n   end\\\\n   class %{klass}\\\\n     include Mongoid::Document\\\\n     field :%{name}, %{option}: true\\\\n   end\\\\n\\\\n Refer to: https://www.mongodb.com/docs/mongoid/current/reference/fields/#custom-field-options\",\"summary\":\"Mongoid requires that you only provide valid options on each field definition in order to prevent unexpected behavior later on.\"},\"invalid_field_type\":{\"message\":\"Invalid field type %{type_inspection} for field \\'%{field}\\' on model \\'%{klass}\\'.\",\"resolution\":\"Please provide a valid type value for the field. Refer to: https://www.mongodb.com/docs/mongoid/current/reference/fields/#using-symbols-or-strings-instead-of-classes\",\"summary\":\"Model \\'%{klass}\\' defines a field \\'%{field}\\' with an unknown type value %{type_inspection}.\"},\"invalid_global_executor_concurrency\":{\"message\":\"Invalid global_executor_concurrency option.\",\"resolution\":\"Set global_executor_concurrency option to :global_thread_pool or remove global_executor_concurrency option.\",\"summary\":\"You set global_executor_concurrency while async_query_executor option is not set to :global_thread_pool. The global_executor_concurrency is allowed only for the global thread pool executor.\"},\"invalid_includes\":{\"message\":\"Invalid includes directive: %{klass}.includes(%{args})\",\"resolution\":\"Ensure that each parameter passed to %{klass}.includes is a valid name of an association on the %{klass} model. These are: %{relations}.\",\"summary\":\"Eager loading in Mongoid only supports providing arguments to %{klass}.includes that are the names of associations on the %{klass}.\"},\"invalid_index\":{\"message\":\"Invalid index specification on %{klass}: %{spec}, %{options}\",\"resolution\":\"Ensure that the index conforms to the correct syntax and has the correct options.\\\\n\\\\n Valid options are:\\\\n   background: true|false\\\\n   database: \\'database_name\\'\\\\n   name: \\'index_name\\'\\\\n   sparse: true|false\\\\n   unique: true|false\\\\n   min: 1\\\\n   max: 1\\\\n   bits: 26\\\\n   key: 26\\\\n   bucket_size : 1\\\\n   sphere_version : 1\\\\n   text_version : 1\\\\n   version : 1\\\\n   weights: { content: 1, title: 2 }\\\\n   expire_after_seconds: number_of_seconds\\\\n   partial_filter_expression\\\\n   storage_engine\\\\n   language_override\\\\n   default_language\\\\n   collation\\\\n   wildcard_projection: { \\'path.to.field.a\\': 1, \\'path.to.field.b\\': 0 }\\\\n Valid types are: 1, -1, \\'2d\\', \\'2dsphere\\', \\'geoHaystack (deprecated)\\', \\'text\\', \\'hashed\\'\\\\n\\\\n Example:\\\\n   class Band\\\\n     include Mongoid::Document\\\\n     index({ name: 1, label: -1 }, { sparse: true })\\\\n     index({ location: \\'2d\\' }, { background: true })\\\\n   end\\\\n\\\\n\",\"summary\":\"Indexes in Mongoid are defined as a hash of field name and direction/2d pairs, with a hash for any additional options.\"},\"invalid_options\":{\"message\":\"Invalid option :%{invalid} provided to association :%{name}.\",\"resolution\":\"Valid options are: %{valid}, make sure these are the ones you are using.\",\"summary\":\"Mongoid checks the options that are passed to the association macros to ensure that no ill side effects occur by letting something slip by.\"},\"invalid_path\":{\"message\":\"Having a root path assigned for %{klass} is invalid.\",\"resolution\":\"Most likely your embedded model, %{klass} is also referenced via a has_many from a root document in another collection. Double check the association definitions and fix any instances where embedded documents are improperly referenced from other collections.\",\"summary\":\"Mongoid has two different path objects for determining the location of a document in the database, Root and Embedded. This error is raised when an embedded document somehow gets a root path assigned.\"},\"invalid_persistence_option\":{\"message\":\"Invalid persistence option :%{invalid}.\",\"resolution\":\"Valid options are: %{valid}, make sure these are the ones you are using.\",\"summary\":\"The options used to change the persistence context must be one of the valid options for a mongo client, or a collection name.\"},\"invalid_relation\":{\"message\":\"Defining an association named \\'%{name}\\' is not allowed.\",\"resolution\":\"Use Mongoid.destructive_fields to see what names are not allowed, and don\\'t use these names. These include names that also conflict with core Ruby methods on Object, Module, Enumerable, or included gems that inject methods into these or Mongoid internals.\",\"summary\":\"Defining this association would override the method \\'%{name}\\', which would cause issues with expectations around the original method and cause extremely hard to debug issues. The original method was defined in:\\\\n   Object: %{origin}\\\\n   File: %{file}\\\\n   Line: %{line}\"},\"invalid_relation_option\":{\"message\":\"Invalid association option :%{option} for association \\'%{name}\\' on class %{klass}.\",\"resolution\":\"Valid options are: %{valid_options}, make sure you use only those.\",\"summary\":\"An invalid option was provided for an association.\"},\"invalid_scope\":{\"message\":\"Defining a scope of value %{value} on %{klass} is not allowed.\",\"resolution\":\"Change the scope to be a proc wrapped criteria.\\\\n\\\\n Example:\\\\n   class Band\\\\n     include Mongoid::Document\\\\n     scope :inactive, -\\\\u003e{ where(active: false) }\\\\n   end\\\\n\\\\n\",\"summary\":\"Scopes in Mongoid must be procs that wrap criteria objects.\"},\"invalid_session_nesting\":{\"message\":\"A session was started while another session was being used.\",\"resolution\":\"Only use one session at a time; sessions cannot be nested.\",\"summary\":\"Sessions cannot be nested. Only one session can be used in a thread at once.\"},\"invalid_session_use\":{\"message\":\"A session was attempted to be used with a model whose client cannot use that session.\",\"resolution\":\"Only execute operations on the model class or instances of the model through which the session was created. Otherwise, ensure that all models on which operations are executed in the session block share the same driver client. For example, a model may have a different client specified in its \\'store_in\\' options.\\\\n\\\\n\",\"summary\":\"Sessions are started via driver clients (Model#mongo_client) and, in most cases, driver clients are shared across models. When different models have their own clients, a session cannot be obtained via one model and used for operations on another model.\"},\"invalid_set_polymorphic_relation\":{\"message\":\"The %{name} attribute can\\'t be set to an instance of %{other_klass} as %{other_klass} has multiple associations referencing %{klass} as %{name}.\",\"resolution\":\"Set the values from the parent, or redefine the association with only a single definition in the parent.\",\"summary\":\"If the parent class of a polymorphic association has multiple definitions for the same association, the values must be set from the parent side and not the child side since Mongoid cannot determine from the child side which association to go in.\"},\"invalid_storage_options\":{\"message\":\"Invalid options passed to %{klass}.store_in: %{options}.\",\"resolution\":\"Change the options passed to store_in to match the documented API, and ensure all keys in the options hash are symbols.\\\\n\\\\n Example:\\\\n   class Band\\\\n     include Mongoid::Document\\\\n     store_in collection: \\'artists\\', database: \\'music\\'\\\\n   end\\\\n\\\\n\",\"summary\":\"The :store_in macro takes only a hash of parameters with the keys :database, :collection, :collection_options, or :client.\"},\"invalid_time\":{\"message\":\"\\'%{value}\\' is not a valid Time.\",\"resolution\":\"Make sure to pass parsable values to the field setter for Date, DateTime, and Time objects. When this is a String it needs to be valid for Time.parse. Other objects must be valid to pass to Time.local.\",\"summary\":\"Mongoid tries to serialize the values for Date, DateTime, and Time into proper UTC times to store in the database. The provided value could not be parsed.\"},\"inverse_not_found\":{\"message\":\"When adding a(n) %{klass} to %{base}#%{name}, Mongoid could not determine the inverse foreign key to set. The attempted key was \\'%{inverse}\\'.\",\"resolution\":\"If an inverse is not required, like a belongs_to or has_and_belongs_to_many, ensure that :inverse_of =\\\\u003e nil is set on the association. If the inverse is needed, most likely the inverse cannot be figured out from the names of the associations and you will need to explicitly tell Mongoid on the association what the inverse is.\\\\n\\\\n Example:\\\\n   class Car\\\\n     include Mongoid::Document\\\\n     has_one :engine, class_name: \\\\\"Motor\\\\\", inverse_of: :machine\\\\n   end\\\\n\\\\n   class Motor\\\\n     include Mongoid::Document\\\\n     belongs_to :machine, class_name: \\\\\"Car\\\\\", inverse_of: :engine\\\\n   end\",\"summary\":\"When adding a document to an association, Mongoid attempts to link the newly added document to the base of the association in memory, as well as set the foreign key to link them on the database side. In this case Mongoid could not determine what the inverse foreign key was.\"},\"message_title\":\"message\",\"mixed_client_configuration\":{\"message\":\"Both uri and standard configuration options defined for client: \\'%{name}\\'.\",\"resolution\":\"Provide either only a uri as configuration or only standard options.\",\"summary\":\"Instead of simply giving uri or standard options a preference order, Mongoid assumes that you have made a mistake in your configuration and requires that you provide one or the other, but not both. The options that were provided were: %{config}.\"},\"mixed_relations\":{\"message\":\"Referencing a(n) %{embedded} document from the %{root} document via a non-embedded association is not allowed since the %{embedded} is embedded.\",\"resolution\":\"Consider not embedding %{embedded}, or do the key storage and access in a custom manner in the application code.\",\"summary\":\"In order to properly access a(n) %{embedded} from %{root} the reference would need to go through the root document of %{embedded}. In a simple case this would require Mongoid to store an extra foreign key for the root, in more complex cases where %{embedded} is multiple levels deep a key would need to be stored for each parent up the hierarchy.\"},\"nested_attributes_metadata_not_found\":{\"message\":\"Could not find metadata for association \\'%{name}\\' on model: %{klass}.\",\"resolution\":\"Make sure that there is an association defined named \\'%{name}\\' on %{klass} or that the association definition comes before the accepts_nested_attributes_for macro in the model - order matters so that Mongoid has access to the metadata.\\\\n\\\\n Example:\\\\n   class Band\\\\n     include Mongoid::Document\\\\n     has_many :albums\\\\n     accepts_nested_attributes_for :albums\\\\n   end\\\\n\\\\n\",\"summary\":\"When defining nested attributes for an association, Mongoid needs to access the metadata for the association \\'%{name}\\' in order if add autosave functionality to it, if applicable. Either no association named \\'%{name}\\' could be found, or the association had not been defined yet.\"},\"no_client_config\":{\"message\":\"No configuration could be found for a client named \\'%{name}\\'.\",\"resolution\":\"Double check your mongoid.yml to make sure under the clients key that a configuration exists for \\'%{name}\\'. If you have set the configuration programmatically, ensure that \\'%{name}\\' exists in the configuration hash.\",\"summary\":\"When attempting to create the new client, Mongoid could not find a client configuration for the name: \\'%{name}\\'. This is necessary in order to know the host, port, and options needed to connect.\"},\"no_client_database\":{\"message\":\"No database provided for client configuration: :%{name}.\",\"resolution\":\"If configuring via a mongoid.yml, ensure that within your :%{name} section a :database value for the client\\'s default database is defined.\\\\n\\\\n Example:\\\\n   development:\\\\n     clients:\\\\n       %{name}:\\\\n         database: my_app_db\\\\n         hosts:\\\\n           - localhost:27017\\\\n\\\\n\",\"summary\":\"Each client configuration must provide a database so Mongoid knows where the default database to persist to. What was provided was: %{config}.\"},\"no_client_hosts\":{\"message\":\"No hosts provided for client configuration: :%{name}.\",\"resolution\":\"If configuring via a mongoid.yml, ensure that within your :%{name} section a :hosts value for the client hosts is defined.\\\\n\\\\n Example:\\\\n   development:\\\\n     clients:\\\\n       %{name}:\\\\n         database: my_app_db\\\\n         hosts:\\\\n           - localhost:27017\\\\n\\\\n\",\"summary\":\"Each client configuration must provide hosts so Mongoid knows where the database server is located. What was provided was: %{config}.\"},\"no_clients_config\":{\"message\":\"No clients configuration provided.\",\"resolution\":\"Double check your mongoid.yml to make sure that you have a top-level clients key with at least 1 default client configuration for it. You can regenerate a new mongoid.yml for assistance via `rails g mongoid:config`.\\\\n\\\\n Example:\\\\n   development:\\\\n     clients:\\\\n       default:\\\\n         database: mongoid_dev\\\\n         hosts:\\\\n           - localhost:27017\\\\n\\\\n\",\"summary\":\"Mongoid\\'s configuration requires that you provide details about each client that can be connected to, and requires in the clients config at least 1 default client to exist.\"},\"no_default_client\":{\"message\":\"No default client configuration is defined.\",\"resolution\":\"If configuring via a mongoid.yml, ensure that within your :clients section a :default client is defined.\\\\n\\\\n Example:\\\\n   development:\\\\n     clients:\\\\n       default:\\\\n         hosts:\\\\n           - localhost:27017\\\\n\\\\n\",\"summary\":\"The configuration provided settings for: %{keys}, but Mongoid requires a :default to be defined at minimum.\"},\"no_documents_found\":{\"message\":\"Could not find a document of class %{klass}.\",\"resolution\":\"Create a document of class %{klass} or use a finder method that does not raise an exception when no documents are found.\",\"summary\":\"Mongoid attempted to find a document of the class %{klass} but none exist.\"},\"no_environment\":{\"message\":\"Could not load the configuration since no environment was defined.\",\"resolution\":\"Please ensure an environment is set in one of the listed locations. The environment must be explicitly set.\",\"summary\":\"Mongoid could not determine the environment to use because it was not specified in any of the following locations: Rails.env, Sinatra::Base.environment, ENV[\\\\\"RACK_ENV\\\\\"], ENV[\\\\\"MONGOID_ENV\\\\\"]. Without knowing the environment, Mongoid cannot load its configuration.\"},\"no_map_reduce_output\":{\"message\":\"No output location was specified for the map/reduce operation.\",\"resolution\":\"Provide the location that the output of the operation is to go by chaining an #out call to the map/reduce.\\\\n\\\\n Example:\\\\n   Band.map_reduce(map, reduce).out(inline: 1)\\\\n\\\\n Valid options for the out function are:\\\\n   inline: 1\\\\n   merge: \\'collection-name\\'\\\\n   replace: \\'collection-name\\'\\\\n   reduce: \\'collection-name\\'\\\\n\\\\n\",\"summary\":\"When executing a map/reduce, you must provide the output location of the results. The attempted command was: %{command}.\"},\"no_metadata\":{\"message\":\"Metadata not found for document of type %{klass}.\",\"resolution\":\"Ensure that your associations on the %{klass} model are all properly defined, and that the inverse associations are also properly defined. Embedded associations must have both the parent (embeds_one/embeds_many) and the inverse (embedded_in) present in order to work properly.\",\"summary\":\"Mongoid sets the metadata of an association on the document when it is either loaded from within the association, or added to one. The presence of the metadata is required in order to provide various functionality around associations. Most likely you are getting this error because the document is embedded and was attempted to be persisted without being associated with a parent, or the association was not properly defined.\"},\"no_parent\":{\"message\":\"Cannot persist embedded document %{klass} without a parent document.\",\"resolution\":\"Ensure that you\\'ve set the parent association if instantiating the embedded document directly, or always create new embedded documents via the parent association.\",\"summary\":\"If the document is embedded, in order to be persisted it must always have a reference to its parent document. This is most likely caused by either calling %{klass}.create or %{klass}.create! without setting the parent document as an attribute.\"},\"readonly_attribute\":{\"message\":\"Attempted to set the readonly attribute \\'%{name}\\' with the value: %{value}.\",\"resolution\":\"Don\\'t define \\'%{name}\\' as readonly, or do not attempt to update its value after the document is persisted.\",\"summary\":\"Attributes flagged as readonly via Model.attr_readonly can only have values set when the document is a new record.\"},\"readonly_document\":{\"message\":\"Attempted to persist a readonly document of class \\'%{klass}\\'.\",\"resolution\":\"Don\\'t attempt to persist documents that are flagged as readonly.\",\"summary\":\"Documents that are marked readonly cannot be persisted.\"},\"resolution_title\":\"resolution\",\"scope_overwrite\":{\"message\":\"Cannot create scope :%{scope_name}, because of existing method %{model_name}.%{scope_name}.\",\"resolution\":\"Change the name of the scope so it does not conflict with the already defined method %{model_name}, or set the configuration option Mongoid.scope_overwrite_exception to false, which is its default. In this case a warning will be logged.\",\"summary\":\"When defining a scope that conflicts with a method that already exists on the model, this error will get raised if Mongoid.scope_overwrite_exception is set to true.\"},\"sessions_not_supported\":{\"message\":\"Sessions are not supported by the connected server(s).\",\"resolution\":\"Verify that all servers in your deployment are at least version 3.6 or don\\'t attempt to use sessions with older server versions.\",\"summary\":\"A session was attempted to be used with a MongoDB server version that doesn\\'t support sessions. Sessions are supported in MongoDB server versions 3.6 and higher.\"},\"summary_title\":\"summary\",\"too_many_nested_attribute_records\":{\"message\":\"Accepting nested attributes for %{association} is limited to %{limit} documents.\",\"resolution\":\"The limit is set as an option to the macro, for example: accepts_nested_attributes_for :%{association}, limit: %{limit}. Consider raising this limit or making sure no more are sent than the set value.\",\"summary\":\"More documents were sent to be processed than the allowed limit.\"},\"unknown_attribute\":{\"message\":\"Attempted to set a value for \\'%{name}\\' which is not allowed on the model %{klass}.\",\"resolution\":\"Define the field \\'%{name}\\' in %{klass}, or include Mongoid::Attributes::Dynamic in %{klass} if you intend to store values in fields that are not explicitly defined.\",\"summary\":\"%{klass}#%{name}= was called but there is no \\'%{name}\\' field defined in the model, and Mongoid::Attributes::Dynamic is not included. This error is also raised instead of NoMethodError if the unknown attribute is passed to any method that accepts an attributes hash, such as #attributes=.\"},\"unknown_model\":{\"message\":\"Attempted to instantiate an object of the unknown model \\'%{klass}\\'.\",\"resolution\":\"The _type field is a reserved one used by Mongoid to determine the class for instantiating an object. Please don\\'t save data in this field or ensure that any values in this field correspond to valid models.\",\"summary\":\"A document with the value \\'%{value}\\' at the key \\'_type\\' was used to instantiate a model object but Mongoid cannot find this Class.\"},\"unsaved_document\":{\"message\":\"Attempted to save %{document} before the parent %{base}.\",\"resolution\":\"Make sure to only use create or create! when the parent document %{base} is persisted.\",\"summary\":\"You cannot call create or create! through the association (%{document}) whose parent (%{base}) is not already saved. This would cause the database to be out of sync since the child could potentially reference a nonexistent parent.\"},\"unsupported_javascript\":{\"message\":\"Executing Javascript $where selector on an embedded criteria is not supported.\",\"resolution\":\"Please provide a standard hash to #where when the criteria is for an embedded association.\",\"summary\":\"Mongoid only supports providing a hash of arguments to #where criterion on embedded documents. Since %{klass} is embedded, the expression %{javascript} is not allowed.\"},\"validations\":{\"message\":\"Validation of %{document} failed.\",\"resolution\":\"Try persisting the document with valid data or remove the validations.\",\"summary\":\"The following errors were found: %{errors}\"}}}},\"number\":{\"currency\":{\"format\":{\"delimiter\":\",\",\"format\":\"%u%n\",\"negative_format\":\"-%u%n\",\"precision\":2,\"separator\":\".\",\"significant\":false,\"strip_insignificant_zeros\":false,\"unit\":\"$\"}},\"format\":{\"delimiter\":\",\",\"precision\":3,\"round_mode\":\"default\",\"separator\":\".\",\"significant\":false,\"strip_insignificant_zeros\":false},\"human\":{\"decimal_units\":{\"format\":\"%n %u\",\"units\":{\"billion\":\"Billion\",\"million\":\"Million\",\"quadrillion\":\"Quadrillion\",\"thousand\":\"Thousand\",\"trillion\":\"Trillion\",\"unit\":\"\"}},\"format\":{\"delimiter\":\"\",\"precision\":3,\"significant\":true,\"strip_insignificant_zeros\":true},\"storage_units\":{\"format\":\"%n %u\",\"units\":{\"byte\":{\"one\":\"Byte\",\"other\":\"Bytes\"},\"eb\":\"EB\",\"gb\":\"GB\",\"kb\":\"KB\",\"mb\":\"MB\",\"pb\":\"PB\",\"tb\":\"TB\",\"zb\":\"ZB\"}}},\"nth\":{},\"percentage\":{\"format\":{\"delimiter\":\"\",\"format\":\"%n%\"}},\"precision\":{\"format\":{\"delimiter\":\"\"}}},\"simple_form\":{\"error_notification\":{\"default_message\":\"Please review the problems below:\"},\"no\":\"No\",\"required\":{\"mark\":\"*\",\"text\":\"required\"},\"yes\":\"Yes\"},\"support\":{\"array\":{\"last_word_connector\":\", and \",\"two_words_connector\":\" and \",\"words_connector\":\", \"}},\"time\":{\"am\":\"am\",\"formats\":{\"default\":\"%a, %d %b %Y %H:%M:%S %z\",\"long\":\"%B %d, %Y %H:%M\",\"short\":\"%d %b %H:%M\"},\"pm\":\"pm\"},\"users\":{\"confirmations\":{\"new\":{\"legend\":\"Resend your %{brand_name} confirmation instructions\",\"message\":\"We need to confirm your email address to complete the sign up process. Supply your email address, below, and we will send you instructions on how to confirm your address.\",\"submit_button\":\"Send Confirmation Instructions\",\"title\":\"Resend confirmation instructions | %{brand_name}\"},\"show\":{\"legend\":\"Check your inbox for a confirmation email\",\"message\":\"If your e-mail exists in our database we have sent you a message with instructions. Check your inbox (or spam folder) for a message from \\'%{default_from_email}\\' containing the confirmation link.\",\"title\":\"Awaiting confirmation | %{brand_name}\"}},\"passwords\":{\"new\":{\"failures\":\"Note: If you make more than 5 sequential failed attempts to sign in with your %{brand_name} password, your account will be (temporarily) locked. Check your inbox for instruction on how to unlock your account, or we can\",\"legend\":\"Reset your %{brand_name} password\",\"message\":\"Supply your email address, below, and we will send you instructions on how to reset your password.\",\"resend_link\":\"resend a new set of unlock instructions\",\"submit_button\":\"Send Reset Instructions\",\"title\":\"Reset password | %{brand_name}\"},\"show\":{\"didnt_receive_email\":\"Didn\\'t receive the email?\",\"legend\":\"Password reset instructions sent\",\"message\":\"If your e-mail exists in our database we have sent you a message with password reset instructions. Check your inbox (or spam folder) for a message from \\'%{default_from_email}\\'.\",\"resend_link\":\"you can request another one here\",\"title\":\"Awaiting reset | %{brand_name}\"}}},\"will_paginate\":{\"container_aria_label\":\"Pagination\",\"next_label\":\"Next \\\\u0026#8594;\",\"page_aria_label\":\"Page %{page}\",\"page_entries_info\":{\"multi_page\":\"Displaying %{model} %{from} - %{to} of %{count} in total\",\"multi_page_html\":\"Displaying %{model} \\\\u003cb\\\\u003e%{from}\\\\u0026nbsp;-\\\\u0026nbsp;%{to}\\\\u003c/b\\\\u003e of \\\\u003cb\\\\u003e%{count}\\\\u003c/b\\\\u003e in total\",\"single_page\":{\"one\":\"Displaying 1 %{model}\",\"other\":\"Displaying all %{count} %{model}\",\"zero\":\"No %{model} found\"},\"single_page_html\":{\"one\":\"Displaying \\\\u003cb\\\\u003e1\\\\u003c/b\\\\u003e %{model}\",\"other\":\"Displaying \\\\u003cb\\\\u003eall\\\\u0026nbsp;%{count}\\\\u003c/b\\\\u003e %{model}\",\"zero\":\"No %{model} found\"}},\"page_gap\":\"\\\\u0026hellip;\",\"previous_label\":\"\\\\u0026#8592; Previous\"}}'));\nI18n.translations[\"zymewire\"] = I18n.extend((I18n.translations[\"zymewire\"] || {}), JSON.parse('{\"activerecord\":{\"errors\":{\"messages\":{\"record_invalid\":\"Validation failed: %{errors}\",\"restrict_dependent_destroy\":{\"has_many\":\"Cannot delete record because dependent %{record} exist\",\"has_one\":\"Cannot delete record because a dependent %{record} exists\"}}}},\"brand\":{\"logo\":{\"full_image\":{\"file_name\":\"zymewire_logo_full.png\",\"path\":\"images/brand_specific/zymewire/zymewire_logo_full.png\"},\"header\":{\"path\":\"/images/brand_specific/zymewire/zymewire_logo_black_trans.png\"},\"mark_only\":{\"file_name\":\"zymewire_logo_z_only.png\",\"path\":\"images/brand_specific/zymewire/zymewire_logo_z_only.png\"}},\"meta\":{\"description\":\"Zymewire offers a powerful sales intelligence platform tailored for the biotech and pharma industry. Access actionable insights and data to drive business development strategies. Trusted by leading CROs, CDMOs, and other service providers. Optimize your sales approach today!\",\"image\":\"https://www.zymewire.com/images/brand_specific/zymewire/meta_image.png\",\"title\":\"Zymewire: Catalyze your sales.\"},\"name\":\"Zymewire\",\"tag_line\":\"Catalyze your sales.\"},\"bulk_uploads\":{\"email_local_part\":{\"empty_parameter\":\"No file uploaded\",\"error\":\"File Upload failed: %{error_message}\",\"success\":\"File was successfully uploaded\"}},\"common\":{\"crm\":{\"salesforce\":{\"forgot_password\":\"If you have forgotten your Salesforce password, please follow the instructions provided on the Salesforce sign in page.\",\"sign_in_button\":\"Sign In with Salesforce\"}}},\"contact\":{\"default_from_email\":\"info@zymewire.com\",\"phone_numbers\":[{\"label\":\"US\",\"phone\":\"1-844-996-3321\"},{\"label\":\"UK\",\"phone\":\"+44-208-133-9963\"}],\"support_email\":\"support@zymewire.com\"},\"date\":{\"abbr_day_names\":[\"Sun\",\"Mon\",\"Tue\",\"Wed\",\"Thu\",\"Fri\",\"Sat\"],\"abbr_month_names\":[null,\"Jan\",\"Feb\",\"Mar\",\"Apr\",\"May\",\"Jun\",\"Jul\",\"Aug\",\"Sep\",\"Oct\",\"Nov\",\"Dec\"],\"day_names\":[\"Sunday\",\"Monday\",\"Tuesday\",\"Wednesday\",\"Thursday\",\"Friday\",\"Saturday\"],\"formats\":{\"default\":\"%Y-%m-%d\",\"long\":\"%B %d, %Y\",\"short\":\"%b %d\"},\"month_names\":[null,\"January\",\"February\",\"March\",\"April\",\"May\",\"June\",\"July\",\"August\",\"September\",\"October\",\"November\",\"December\"],\"order\":[\"year\",\"month\",\"day\"]},\"datetime\":{\"distance_in_words\":{\"about_x_hours\":{\"one\":\"about 1 hour\",\"other\":\"about %{count} hours\"},\"about_x_months\":{\"one\":\"about 1 month\",\"other\":\"about %{count} months\"},\"about_x_years\":{\"one\":\"about 1 year\",\"other\":\"about %{count} years\"},\"almost_x_years\":{\"one\":\"almost 1 year\",\"other\":\"almost %{count} years\"},\"half_a_minute\":\"half a minute\",\"less_than_x_minutes\":{\"one\":\"less than a minute\",\"other\":\"less than %{count} minutes\"},\"less_than_x_seconds\":{\"one\":\"less than 1 second\",\"other\":\"less than %{count} seconds\"},\"over_x_years\":{\"one\":\"over 1 year\",\"other\":\"over %{count} years\"},\"x_days\":{\"one\":\"1 day\",\"other\":\"%{count} days\"},\"x_minutes\":{\"one\":\"1 minute\",\"other\":\"%{count} minutes\"},\"x_months\":{\"one\":\"1 month\",\"other\":\"%{count} months\"},\"x_seconds\":{\"one\":\"1 second\",\"other\":\"%{count} seconds\"}},\"prompts\":{\"day\":\"Day\",\"hour\":\"Hour\",\"minute\":\"Minute\",\"month\":\"Month\",\"second\":\"Seconds\",\"year\":\"Year\"}},\"default_host\":\"https://www.zymewire.com\",\"devise\":{\"confirmations\":{\"confirmed\":\"Your account was successfully confirmed. Please sign in.\",\"send_instructions\":\"Your email has not been confirmed. We need to confirm your email account before you can sign in. Please check your inbox or spam folder for an email from \\'info@zymewire.com\\' or request a new one.\",\"send_paranoid_instructions\":\"If your e-mail exists on our database, you will receive an email with instructions about how to confirm your account in a few minutes.\"},\"failure\":{\"already_authenticated\":\"You are already signed in.\",\"expired\":\"Your account has expired due to inactivity. Please contact the site administrator.\",\"inactive\":\"Your account was not activated yet.\",\"invalid\":\"Invalid email or password. If you use Salesforce, use the \\'Have Salesforce?\\' panel.\",\"invalid_token\":\"Invalid authentication token.\",\"last_attempt\":\"You have one more attempt before your account is locked.\",\"locked\":\"Your account is locked.\",\"not_active\":\"Your account has been de-activated, if you think this is a mistake please contact us\",\"not_found_in_database\":\"Invalid %{authentication_keys} or password.\",\"session_limited\":\"Your login credentials were used in another browser. Please sign in again to continue in this browser.\",\"timeout\":\"Your session expired, please sign in again to continue.\",\"unauthenticated\":\"You need to sign in or sign up before continuing.\",\"unconfirmed\":\"We must confirm your email before you can continue. Please check your inbox or spam folder for a confirmation email from \\'info@zymewire.com\\' or request a new one.\"},\"invalid_captcha\":\"The captcha input is not valid!\",\"invalid_security_question\":\"The security question answer was invalid.\",\"mailer\":{\"confirmation_instructions\":{\"subject\":\"Confirmation instructions for Zymewire.com\"},\"email_changed\":{\"subject\":\"Email Changed\"},\"password_change\":{\"subject\":\"Password Changed\"},\"reset_password_instructions\":{\"subject\":\"Reset password instructions for Zymewire.com\"},\"unlock_instructions\":{\"subject\":\"Unlock Instructions for Zymewire.com\"}},\"omniauth_callbacks\":{\"failure\":\"Could not authorize you from %{kind} because \\\\\"%{reason}\\\\\".\",\"success\":\"Successfully authorized from %{kind} account.\"},\"paranoid_verification_code\":{\"show\":{\"submit\":\"Submit\",\"submit_verification_code\":\"Submit verification code\",\"verification_code\":\"Verification code\"},\"updated\":\"Verification code accepted\"},\"paranoid_verify\":{\"code_required\":\"Please enter the code our support team provided\"},\"password_expired\":{\"change_required\":\"Your password has expired. Please choose a new password!\",\"show\":{\"change_my_password\":\"Change my password\",\"current_password\":\"Current password\",\"new_password\":\"New password\",\"new_password_confirmation\":\"Confirm new password\",\"renew_your_password\":\"Renew your password\"},\"updated\":\"Your new password is saved.\"},\"passwords\":{\"no_token\":\"You can\\'t access this page without coming from a password reset email. If you do come from a password reset email, please make sure you used the full URL provided.\",\"send_instructions\":\"You will receive an email with instructions about how to reset your password in a few minutes.\",\"send_paranoid_instructions\":\"If your e-mail exists on our database, you will receive a password recovery link on your e-mail\",\"updated\":\"Your password was changed successfully. You are now signed in.\",\"updated_not_active\":\"Your password was changed successfully.\"},\"registrations\":{\"destroyed\":\"Bye! Your account was successfully cancelled. We hope to see you again soon.\",\"signed_up\":\"Welcome! You have signed up successfully.\",\"signed_up_but_inactive\":\"You have signed up successfully. However, we could not sign you in because your account is not yet activated.\",\"signed_up_but_locked\":\"You have signed up successfully. However, we could not sign you in because your account is locked.\",\"signed_up_but_unconfirmed\":\"A message with a confirmation link has been sent to your email address. Please open the link to activate your account.\",\"update_needs_confirmation\":\"You updated your account successfully, but we need to verify your new email address. Please check your email and click on the confirm link to finalize confirming your new email address.\",\"updated\":\"You updated your account successfully.\",\"updated_but_not_signed_in\":\"Your account has been updated successfully, but since your password was changed, you need to sign in again.\"},\"sessions\":{\"already_signed_out\":\"Signed out successfully.\",\"signed_in\":\"Signed in successfully.\",\"signed_out\":\"Signed out successfully.\"},\"unlocks\":{\"send_instructions\":\"You will receive an email with instructions about how to unlock your account in a few minutes.\",\"send_paranoid_instructions\":\"If your account exists, you will receive an email with instructions about how to unlock it in a few minutes.\",\"unlocked\":\"Your account has been unlocked successfully. Please sign in to continue.\"}},\"disable_crm_login_option\":\"false\",\"domain\":\"zymewire.com\",\"download\":\"Download\",\"download_30_days\":\"This link will be available for 30 days after which the file will be removed from our servers.\",\"enumerize\":{\"blocklisted_contact\":{\"provider\":{\"insideview\":\"InsideView\",\"zephyr\":\"Zephyr\"}}},\"errors\":{\"format\":\"%{attribute} %{message}\",\"messages\":{\"accepted\":\"must be accepted\",\"already_confirmed\":\"was already confirmed, please try signing in\",\"blank\":\"can\\'t be blank\",\"confirmation\":\"doesn\\'t match %{attribute}\",\"confirmation_period_expired\":\"needs to be confirmed within %{period}, please request a new one\",\"empty\":\"can\\'t be empty\",\"equal_to\":\"must be equal to %{count}\",\"equal_to_current_password\":\"Sorry, must be different to your current password!\",\"equal_to_email\":\"must be different than the email.\",\"even\":\"must be even\",\"exclusion\":\"is reserved\",\"expired\":\"has expired, please request a new one\",\"greater_than\":\"must be greater than %{count}\",\"greater_than_or_equal_to\":\"must be greater than or equal to %{count}\",\"in\":\"must be in %{count}\",\"inclusion\":\"is not included in the list\",\"invalid\":\"is invalid\",\"less_than\":\"must be less than %{count}\",\"less_than_or_equal_to\":\"must be less than or equal to %{count}\",\"model_invalid\":\"Validation failed: %{errors}\",\"not_a_number\":\"is not a number\",\"not_an_integer\":\"must be an integer\",\"not_found\":\"not found\",\"not_locked\":\"was not locked\",\"not_saved\":{\"one\":\"1 error prohibited this %{resource} from being saved:\",\"other\":\"%{count} errors prohibited this %{resource} from being saved:\"},\"odd\":\"must be odd\",\"other_than\":\"must be other than %{count}\",\"password_complexity\":{\"digit\":{\"one\":\"must contain at least one digit\",\"other\":\"must contain at least %{count} digits\"},\"lower\":{\"one\":\"must contain at least one lower-case letter\",\"other\":\"must contain at least %{count} lower-case letters\"},\"symbol\":{\"one\":\"must contain at least one punctuation mark or symbol\",\"other\":\"must contain at least %{count} punctuation marks or symbols\"},\"upper\":{\"one\":\"must contain at least one upper-case letter\",\"other\":\"must contain at least %{count} upper-case letters\"}},\"password_format\":\"Must contain uppercase AND lowercase letters and at least one number\",\"password_too_long\":\"is too long\",\"present\":\"must be blank\",\"required\":\"must exist\",\"taken\":\"has already been taken\",\"taken_in_past\":\"Sorry, you have used this password before!\",\"too_long\":{\"one\":\"is too long (maximum is 1 character)\",\"other\":\"is too long (maximum is %{count} characters)\"},\"too_short\":{\"one\":\"is too short (minimum is 1 character)\",\"other\":\"is too short (minimum is %{count} characters)\"},\"wrong_length\":{\"one\":\"is the wrong length (should be 1 character)\",\"other\":\"is the wrong length (should be %{count} characters)\"}}},\"flash\":{\"actions\":{\"create\":{\"notice\":\"%{resource_name} was successfully created.\"},\"destroy\":{\"alert\":\"%{resource_name} could not be destroyed.\",\"notice\":\"%{resource_name} was successfully destroyed.\"},\"update\":{\"notice\":\"%{resource_name} was successfully updated.\"}}},\"hello_world\":\"Hello world\",\"help\":{\"articles\":{\"crm_mining\":\"/help/articles/13976-mine-your-companys-salesforce-for-opportunities\",\"finding_contact_info\":\"/help/articles/13987-finding-contact-information\",\"guide_d\":\"/help/guide_d\",\"guide_g\":\"/help/guide_g\",\"guide_h\":\"/help/guide_h\",\"guide_i\":\"/help/guide_i\",\"guide_j\":\"/help/guide_j\",\"list_crud_c\":\"/help/articles/13985-generating-a-list\",\"list_crud_u\":\"/help/articles/18991-adding-and-removing-individual-companies-from-a-list\",\"map_search\":\"/help/articles/13980-map-based-searching\",\"saving_feeds\":\"/help/articles/13986-saving-feeds\"},\"site\":\"https://zymewire.helpsite.com/\"},\"helpers\":{\"select\":{\"prompt\":\"Please select\"},\"submit\":{\"create\":\"Create %{model}\",\"submit\":\"Save %{model}\",\"update\":\"Update %{model}\"}},\"hi\":\"Hi\",\"industry\":\"drug sponsor\",\"mailers\":{\"common\":{\"chummy_sign_off\":\"Have a good one.\",\"final_note\":\"P.S.: If you think you received this email accidentally, then something weird could be going on. Hit reply and a member of the %{brand_name} team will investigate.\",\"team_sign_off\":\"- The %{brand_name} Team\"},\"confirmation_instructions_email\":{\"crm\":{\"salesforce\":{\"resource_confirmed\":\"Someone has requested a resend of a confirmation email. You do not need to confirm your email address because your account is configured to use Salesforce to sign in.\",\"resource_unconfirmed\":\"You do not need to confirm your email address because your account is configured to use Salesforce to sign in, please complete the sign up process by clicking the button below to sign in to %{brand_name} via Salesforce.\"}},\"non_crm\":{\"confirm_link\":\"Confirm my account\",\"welcome\":\"Welcome to %{brand_name}. As the final step in the process you\\'ll need to confirm your account by clicking on the link below.\"},\"subject\":\"Confirmation instructions for %{domain}\"},\"flagged_events_mailer\":{\"from\":\"Flagged events - %{brand_name} \\\\u003cflagged_events@mailer.%{domain}\\\\u003e\"},\"mobile_registration_email\":{\"alert_cs_registration_locked\":{\"subject\":\"%{brand_name}: user has had mobile registration locked, too many failed attempts\"},\"dispatch_registration_PIN\":{\"further_instructions\":\"If you are NOT attempting to register for the %{brand_name} Mobile app then please let us know at %{support_email_link} - thank you.\",\"introduction\":\"Here is your mobile app registration PIN:\",\"subject\":\"%{brand_name} Mobile Registration Verification\"},\"too_many_failed_attempts\":{\"introduction\":\"We have received too many failed mobile device registration attempts for your account and we will block any further requests. If you have not attempted to register a mobile device with us in the last hour then please let us know as it is likely someone has tried on your behalf. If you have been trying to register a device please contact %{support_email_link} and we can help unlock your account and get you registered.\",\"subject\":\"%{brand_name}: too many failed registration attempts\"}},\"org_list_download_mail\":{\"dispatch_link\":{\"introduction\":\"We have finished meshing your %{crm_brand_name} data with the companies in your \\\\\"%{list_name}\\\\\" list.\",\"subject\":\"%{brand_name}: your file download of \\'%{list_name}\\' is ready\"},\"failed\":{\"instructions\":\"You could try again in a little while. If you already have and are receiving this email again, please contact us at %{support_email_link}\",\"introduction\":\"We are really sorry, but something went wrong with creating your download of %{crm_brand_name} data for your \\\\\"%{list_name}\\\\\" list.\",\"subject\":\"%{brand_name}: your file download of \\'%{list_name}\\' failed\"}},\"reset_password_instructions_email\":{\"crm\":{\"salesforce\":{\"change_requested\":\"Someone has requested a change to your password. Your account is configured to use Salesforce to sign in.\"}},\"fishy_fine_print\":\"If you did not request a password change, then something weird is going on. Someone may be trying to access your account (unsuccessfully). Please reply to this email and let us know. We will take steps to make sure it stops.\",\"non_crm\":{\"change_password_link\":\"Change my password\",\"change_requested\":\"Someone has requested a change to your password, you can do this via the link below.\"},\"subject\":\"Password reset instructions for %{domain}\"},\"sales_force_mail\":{\"processing_completed\":{\"bullet_points\":[\"Only show events associated with companies in your Salesforce account\",\"Add new contacts and accounts to your Salesforce account without leaving %{brand_name}\",\"Access the \\'Salesforce details\\' panel on company dashboards where you can see open tasks, team interactions, opportunities, and more!\"],\"further_instructions\":\"We\\'re here to help. If you run into any questions or challenges, please contact us at %{support_email_link} and a member of our team would be more than happy to help.\",\"get_the_most\":\"To get the most from the integration, check out the \\'Mine Salesforce for opportunities\\' guide in the Help Center.\",\"guide_button\":\"Take me to the guide\",\"introduction\":\"Good news - your Salesforce account is now integrated with %{brand_name}. Now you’ll be able to:\"}},\"segment_contact\":{\"report_manager\":{\"fail_subject\":\"%{brand_name}: The PDF report generation failed\",\"success_subject\":\"%{brand_name}: Your PDF for %{company_name} is attached\"}},\"sf_token_expiry_email\":{\"further_instructions\":\"If you run into any questions or challenges, please contact us at %{support_email_link} and a member of our team would be more than happy to help.\",\"introduction\":\"Unfortunately the connection established for you between %{brand_name} and your %{crm_brand_name} account has expired. We will not be able to update your lists in %{brand_name} to reflect your %{crm_brand_name} database. To re-establish the connection, you just need to log in to %{brand_name} using your %{crm_brand_name}.\",\"subject\":\"%{brand_name} to %{crm_brand_name} connection has expired\"},\"share_list_mail\":{\"introduction\":\"%{user_name} shared a list with you: \",\"subject\":\"[%{brand_name} - shared list] %{list_name}\"},\"trial_expiry_mail\":{\"seven_days_to_go\":{\"further_instructions\":\"A member of our fabulous Customer Success team will arrange a welcome call with you to understand your goals and priorities, and will then give you a personalized Tour de %{brand_name} so you can easily access the information that is most valuable to you.\",\"instructions\":\"If you\\'d like continued access to the platform with our flexible month-to-month subscription, please ensure you contact %{support_email_link} ahead of: %{deadline}\",\"introduction\":\"Time flies when you\\'re uncovering new business opportunities! Your %{brand_name} trial is coming to an end next week.\",\"sign_off\":\"We look forward to helping you reach your sales goals!\",\"subject\":\"Just a heads up that your %{brand_name} trial is ending in seven days\"},\"seven_days_to_go_warning_for_cs\":{\"introduction\":\"%{user_name} shared a list with you: \",\"subject\":\"[%{brand_name} - shared list] %{list_name}\"}},\"unlock_instructions_email\":{\"crm\":{\"salesforce\":{\"change_requested\":\"You are being sent this email either because of one too many unsuccessful non-Salesforce log-in attempts or someone has requested an unlock email. %{brand_name} has not locked your account because your account is configured to use Salesforce to sign in.\",\"password_forgotten\":\"If you have forgotten your Salesforce password or think your account has been locked by Salesforce, please follow the instructions provided on the Salesforce sign in page.\"}},\"fishy_fine_print\":\"If you have not been (unsuccessfully) trying to log in to your account, then something weird is going on. Someone may be trying to access your account (unsuccessfully). Please reply to this email and let us know. We will take steps to make sure it stops.\",\"non_crm\":{\"change_requested\":\"For security reasons we have locked your account because of too many log-in attempts. To unlock your account, click the link below.\",\"unlock_account_link\":\"Unlock my account\"},\"subject\":\"Unlock instructions for %{domain}\"}},\"mobile_website\":{\"cta\":\"Sign Up Here\",\"cta_link\":\"https://welcome.zymewire.com/\",\"header\":\"Great News!\",\"message\":\"Zymewire Feed Reader is now on both iPhone and Android.\",\"prompt\":\"Not currently a Zymewire user?\"},\"mongoid\":{\"errors\":{\"messages\":{\"ambiguous_relationship\":{\"message\":\"Ambiguous associations %{candidates} defined on %{klass}.\",\"resolution\":\"On the %{name} association on %{inverse} you must add an :inverse_of option to specify the exact association on %{klass} that is the opposite of %{name}.\",\"summary\":\"When Mongoid attempts to set an inverse document of an association in memory, it needs to know which association it belongs to. When setting %{name}, Mongoid looked on the class %{inverse} for a matching association, but multiples were found that could potentially match: %{candidates}.\"},\"blank_in_locale\":\"can\\'t be blank in %{location}\",\"callbacks\":{\"message\":\"Calling %{method} on %{klass} resulted in a false return from a callback.\",\"resolution\":\"Double check all before callbacks to make sure they are not unintentionally returning false.\",\"summary\":\"If a before callback returns false when using Document.create!, Document#save!, or Document#update_attributes! this error will get raised since the document did not actually get saved.\"},\"calling_document_find_with_nil_is_invalid\":{\"message\":\"Calling Document.find with nil is invalid.\",\"resolution\":\"Most likely this is caused by passing parameters directly through to the find, and the parameter either is not present or the key from which it is accessed is incorrect.\",\"summary\":\"Document.find expects the parameters to be 1 or more ids, and will return a single document if 1 id is provided, otherwise an array of documents if multiple ids are provided.\"},\"create_collection_failure\":{\"message\":\"Cannot create collection %{collection_name} with options %{collection_options}. The following error was raised: %{error}.\",\"resolution\":\"Double check that collection options for the collection %{collection_name} are valid. Consult with Ruby driver documentation and MongoDB documentation if the desired options are supported by your version of the server.\",\"summary\":\"The server rejected createCollection command with given collection options. This may happen when some of the options are invalid, or not supported by your version of the server.\"},\"criteria_argument_required\":{\"message\":\"Calling Criteria methods with nil arguments is not allowed.\",\"resolution\":\"Invoke Criteria methods with non-nil arguments or omit the respective invocations.\",\"summary\":\"Arguments to Criteria methods cannot be nil, and most Criteria methods require at least one argument. Only logical operations (and, or, nor and not), `all\\' and `where\\' can be called without arguments. The method that was called with nil argument was: %{query_method}.\"},\"delete_restriction\":{\"message\":\"Cannot destroy %{document} because of dependent \\'%{relation}\\'.\",\"resolution\":\"Don\\'t attempt to delete the parent %{document} when it has children, or change the dependent option on the association.\",\"summary\":\"When defining \\'%{relation}\\' with a :dependent =\\\\u003e :restrict_with_error, Mongoid will raise an error when attempting to destroy the %{document} when the child \\'%{relation}\\' still has documents in it.\"},\"destroy_restrict_with_error_dependencies_exist\":\"is not empty and prevents the document from being destroyed\",\"document_not_destroyed\":{\"message\":\"%{klass} with id %{id} was not destroyed.\",\"resolution\":\"Check the before/after destroy callbacks to ensure that the return values are truthy for the chain to continue.\",\"summary\":\"When calling %{klass}#destroy! and a callback halts the destroy callback chain by returning a false value, the deletion will not actually occur.\"},\"document_not_found\":{\"message\":\"Document(s) not found for class %{klass} with id(s) %{missing}.\",\"resolution\":\"Search for an id that is in the database or set the Mongoid.raise_not_found_error configuration option to false, which will cause nil to be returned instead of raising this error when searching for a single id, or only the matched documents when searching for multiples.\",\"summary\":\"When calling %{klass}.find with an id or array of ids, each parameter must match a document in the database or this error will be raised. The search was for the id(s): %{searched} (%{total} total) and the following ids were not found: %{missing}.\"},\"document_with_attributes_not_found\":{\"message\":\"Document not found for class %{klass} with attributes %{attributes}.\",\"resolution\":\"Search for attributes that are in the database or set the Mongoid.raise_not_found_error configuration option to false, which will cause nil to be returned instead of raising this error.\",\"summary\":\"When calling %{klass}.find_by with a hash of attributes, all attributes provided must match a document in the database or this error will be raised.\"},\"document_with_shard_key_not_found\":{\"message\":\"Document not found for class %{klass} with id %{missing} and shard key %{shard_key}.\",\"resolution\":\"Search for an id/shard key that is in the database or set the Mongoid.raise_not_found_error configuration option to false, which will cause nil to be returned instead of raising this error.\",\"summary\":\"When calling %{klass}.find with an id and a shard key, each parameter must match a document in the database or this error will be raised. The search was for the id: %{missing} with shard_key: %{shard_key} and it was not found.\"},\"drop_collection_failure\":{\"message\":\"Cannot drop collection %{collection_name}.\",\"resolution\":\"Try to drop the collection manually using Ruby driver or mongo shell.\",\"summary\":\"Mongoid tried to drop collection %{collection_name}, but the collection still exists in the database.\"},\"empty_config_file\":{\"message\":\"Empty configuration file: %{path}.\",\"resolution\":\"Ensure your configuration file contains the correct contents. Refer to: https://www.mongodb.com/docs/mongoid/current/reference/configuration/\",\"summary\":\"Your mongoid.yml configuration file appears to be empty.\"},\"immutable_attribute\":{\"message\":\"Attempted to change the immutable attribute \\'%{name}\\' with the value: %{value}.\",\"resolution\":\"Do not attempt to update the value of \\'%{name}\\' after the document is persisted.\",\"summary\":\"Immutable attributes can only have values set when the document is a new record.\"},\"in_memory_collation_not_supported\":{\"message\":\"A collation option cannot be applied when querying documents in-memory.\",\"resolution\":\"Remove the collation option from the query.\",\"summary\":\"The query being run against documents in memory has a collation option set. A collation option is only supported if the query is executed on a MongoDB server with version \\\\u003e= 3.4.\"},\"invalid_async_query_executor\":{\"message\":\"Invalid async_query_executor option: %{executor}.\",\"resolution\":\"Pick an allowed option or fix the typo. If you were expecting the option to be there, please consult the following page with respect to Mongoid\\'s configuration:\\\\n\\\\n   https://www.mongodb.com/docs/mongoid/current/reference/configuration/#mongoid-configuration-options\",\"summary\":\"A invalid async query executor was specified. The valid options are: %{options}.\"},\"invalid_collection\":{\"message\":\"Access to the collection for %{klass} is not allowed.\",\"resolution\":\"For access to the collection that the embedded document is in, use %{klass}#_root.collection, or do not attempt to persist an embedded document without a parent set.\",\"summary\":\"%{klass}.collection was called, and %{klass} is an embedded document - it resides within the collection of the root document of the hierarchy.\"},\"invalid_config_file\":{\"message\":\"Invalid configuration file: %{path}.\",\"resolution\":\"Ensure your configuration file contains the correct contents. Refer to: https://www.mongodb.com/docs/mongoid/current/reference/configuration/\",\"summary\":\"Your mongoid.yml configuration file does not contain the correct file structure.\"},\"invalid_config_option\":{\"message\":\"Invalid configuration option: %{name}.\",\"resolution\":\"Remove the invalid option or fix the typo. If you were expecting the option to be there, please consult the following page with respect to Mongoid\\'s configuration:\\\\n\\\\n   http://mongoid.org/en/mongoid/docs/installation.html\",\"summary\":\"A invalid configuration option was provided in your mongoid.yml, or a typo is potentially present. The valid configuration options are: %{options}.\"},\"invalid_dependent_strategy\":{\"message\":\"Invalid dependent strategy: %{invalid_strategy}.\",\"resolution\":\"Change the dependent strategy to one of the valid types.\",\"summary\":\"An invalid dependent strategy was defined for the association: %{association}. The valid strategies are: %{valid_strategies}.\"},\"invalid_discriminator_key_target\":{\"message\":\"Setting the discriminator key on a child class is not allowed.\",\"resolution\":\"Try setting the discriminator key on %{superclass} or one of %{class_name}\\'s ancestors.\",\"summary\":\"The discriminator key on the class %{class_name} was attempted to be changed. Changing the discriminator key on a child class is not allowed.\"},\"invalid_dot_dollar_assignment\":{\"message\":\"Cannot set the %{attr} attribute on the %{klass} class.\",\"resolution\":\"In order to set fields that start with a dollar sign ($) or contain a dot/period (.), the aggregation pipeline can be used. MongoDB provides specific operators for working with these fields. Refer to the MongoDB documentation here: https://www.mongodb.com/docs/manual/core/dot-dollar-considerations/\",\"summary\":\"Calling the setters for fields that start with a dollar sign ($) or contain a dot/period (.) is prohibited. See the Mongoid documentation on Field Names with Dots/Periods (.) and Dollar Signs ($) for more information.\"},\"invalid_elem_match_operator\":{\"message\":\"Invalid $elemMatch operator \\'%{operator}\\'.\",\"resolution\":\"Valid field operators are: %{valid_operators}. Ensure you are using one of these operators.\",\"summary\":\"You misspelled an operator or are using an operator that Mongoid does not support.\"},\"invalid_estimated_count_criteria\":{\"message\":\"Invalid criteria for estimated_count.\",\"resolution\":\"Try calling estimated_count directly on the class: %{class_name}.estimated_count.\\\\n\\\\n  If the class defines a default scope, use unscoped: %{class_name}.unscoped.estimated_count.\",\"summary\":\"Estimated count is strictly a collection-level operation and cannot be called on a filtered criteria.\"},\"invalid_expression_operator\":{\"message\":\"Invalid expression operator \\'%{operator}\\'.\",\"resolution\":\"Valid expression operators are: %{valid_operators}. Ensure you are using one of these operators.\",\"summary\":\"You misspelled an operator, are using an operator that Mongoid does not support, or are trying to use a field-level operator on expression level.\"},\"invalid_field\":{\"message\":\"Defining a field named \\'%{field}\\' is not allowed.\",\"resolution\":\"Use Mongoid.destructive_fields to see what names are not allowed, and don\\'t use these names. These include names that also conflict with core Ruby methods on Object, Module, Enumerable, or included gems that inject methods into these or Mongoid internals.\",\"summary\":\"Defining this field would override the method \\'%{name}\\', which would cause issues with expectations around the original method and cause extremely hard to debug issues. The original method was defined in:\\\\n   Object: %{origin}\\\\n   File: %{file}\\\\n   Line: %{line}\"},\"invalid_field_operator\":{\"message\":\"Invalid field operator \\'%{operator}\\'.\",\"resolution\":\"Valid field operators are: %{valid_operators}. Ensure you are using one of these operators.\",\"summary\":\"You misspelled an operator, are using an operator that Mongoid does not support, or are trying to use an expression-level operator on field level.\"},\"invalid_field_option\":{\"message\":\"Invalid option :%{option} provided for field :%{name}.\",\"resolution\":\"When defining the field :%{name} on \\'%{klass}\\', please provide valid options for the field. These are currently: %{valid}. If you meant to define a custom field option, please do so first as follows:\\\\n\\\\n   Mongoid::Fields.option :%{option} do |model, field, value|\\\\n     # Your logic here...\\\\n   end\\\\n   class %{klass}\\\\n     include Mongoid::Document\\\\n     field :%{name}, %{option}: true\\\\n   end\\\\n\\\\n Refer to: https://www.mongodb.com/docs/mongoid/current/reference/fields/#custom-field-options\",\"summary\":\"Mongoid requires that you only provide valid options on each field definition in order to prevent unexpected behavior later on.\"},\"invalid_field_type\":{\"message\":\"Invalid field type %{type_inspection} for field \\'%{field}\\' on model \\'%{klass}\\'.\",\"resolution\":\"Please provide a valid type value for the field. Refer to: https://www.mongodb.com/docs/mongoid/current/reference/fields/#using-symbols-or-strings-instead-of-classes\",\"summary\":\"Model \\'%{klass}\\' defines a field \\'%{field}\\' with an unknown type value %{type_inspection}.\"},\"invalid_global_executor_concurrency\":{\"message\":\"Invalid global_executor_concurrency option.\",\"resolution\":\"Set global_executor_concurrency option to :global_thread_pool or remove global_executor_concurrency option.\",\"summary\":\"You set global_executor_concurrency while async_query_executor option is not set to :global_thread_pool. The global_executor_concurrency is allowed only for the global thread pool executor.\"},\"invalid_includes\":{\"message\":\"Invalid includes directive: %{klass}.includes(%{args})\",\"resolution\":\"Ensure that each parameter passed to %{klass}.includes is a valid name of an association on the %{klass} model. These are: %{relations}.\",\"summary\":\"Eager loading in Mongoid only supports providing arguments to %{klass}.includes that are the names of associations on the %{klass}.\"},\"invalid_index\":{\"message\":\"Invalid index specification on %{klass}: %{spec}, %{options}\",\"resolution\":\"Ensure that the index conforms to the correct syntax and has the correct options.\\\\n\\\\n Valid options are:\\\\n   background: true|false\\\\n   database: \\'database_name\\'\\\\n   name: \\'index_name\\'\\\\n   sparse: true|false\\\\n   unique: true|false\\\\n   min: 1\\\\n   max: 1\\\\n   bits: 26\\\\n   key: 26\\\\n   bucket_size : 1\\\\n   sphere_version : 1\\\\n   text_version : 1\\\\n   version : 1\\\\n   weights: { content: 1, title: 2 }\\\\n   expire_after_seconds: number_of_seconds\\\\n   partial_filter_expression\\\\n   storage_engine\\\\n   language_override\\\\n   default_language\\\\n   collation\\\\n   wildcard_projection: { \\'path.to.field.a\\': 1, \\'path.to.field.b\\': 0 }\\\\n Valid types are: 1, -1, \\'2d\\', \\'2dsphere\\', \\'geoHaystack (deprecated)\\', \\'text\\', \\'hashed\\'\\\\n\\\\n Example:\\\\n   class Band\\\\n     include Mongoid::Document\\\\n     index({ name: 1, label: -1 }, { sparse: true })\\\\n     index({ location: \\'2d\\' }, { background: true })\\\\n   end\\\\n\\\\n\",\"summary\":\"Indexes in Mongoid are defined as a hash of field name and direction/2d pairs, with a hash for any additional options.\"},\"invalid_options\":{\"message\":\"Invalid option :%{invalid} provided to association :%{name}.\",\"resolution\":\"Valid options are: %{valid}, make sure these are the ones you are using.\",\"summary\":\"Mongoid checks the options that are passed to the association macros to ensure that no ill side effects occur by letting something slip by.\"},\"invalid_path\":{\"message\":\"Having a root path assigned for %{klass} is invalid.\",\"resolution\":\"Most likely your embedded model, %{klass} is also referenced via a has_many from a root document in another collection. Double check the association definitions and fix any instances where embedded documents are improperly referenced from other collections.\",\"summary\":\"Mongoid has two different path objects for determining the location of a document in the database, Root and Embedded. This error is raised when an embedded document somehow gets a root path assigned.\"},\"invalid_persistence_option\":{\"message\":\"Invalid persistence option :%{invalid}.\",\"resolution\":\"Valid options are: %{valid}, make sure these are the ones you are using.\",\"summary\":\"The options used to change the persistence context must be one of the valid options for a mongo client, or a collection name.\"},\"invalid_relation\":{\"message\":\"Defining an association named \\'%{name}\\' is not allowed.\",\"resolution\":\"Use Mongoid.destructive_fields to see what names are not allowed, and don\\'t use these names. These include names that also conflict with core Ruby methods on Object, Module, Enumerable, or included gems that inject methods into these or Mongoid internals.\",\"summary\":\"Defining this association would override the method \\'%{name}\\', which would cause issues with expectations around the original method and cause extremely hard to debug issues. The original method was defined in:\\\\n   Object: %{origin}\\\\n   File: %{file}\\\\n   Line: %{line}\"},\"invalid_relation_option\":{\"message\":\"Invalid association option :%{option} for association \\'%{name}\\' on class %{klass}.\",\"resolution\":\"Valid options are: %{valid_options}, make sure you use only those.\",\"summary\":\"An invalid option was provided for an association.\"},\"invalid_scope\":{\"message\":\"Defining a scope of value %{value} on %{klass} is not allowed.\",\"resolution\":\"Change the scope to be a proc wrapped criteria.\\\\n\\\\n Example:\\\\n   class Band\\\\n     include Mongoid::Document\\\\n     scope :inactive, -\\\\u003e{ where(active: false) }\\\\n   end\\\\n\\\\n\",\"summary\":\"Scopes in Mongoid must be procs that wrap criteria objects.\"},\"invalid_session_nesting\":{\"message\":\"A session was started while another session was being used.\",\"resolution\":\"Only use one session at a time; sessions cannot be nested.\",\"summary\":\"Sessions cannot be nested. Only one session can be used in a thread at once.\"},\"invalid_session_use\":{\"message\":\"A session was attempted to be used with a model whose client cannot use that session.\",\"resolution\":\"Only execute operations on the model class or instances of the model through which the session was created. Otherwise, ensure that all models on which operations are executed in the session block share the same driver client. For example, a model may have a different client specified in its \\'store_in\\' options.\\\\n\\\\n\",\"summary\":\"Sessions are started via driver clients (Model#mongo_client) and, in most cases, driver clients are shared across models. When different models have their own clients, a session cannot be obtained via one model and used for operations on another model.\"},\"invalid_set_polymorphic_relation\":{\"message\":\"The %{name} attribute can\\'t be set to an instance of %{other_klass} as %{other_klass} has multiple associations referencing %{klass} as %{name}.\",\"resolution\":\"Set the values from the parent, or redefine the association with only a single definition in the parent.\",\"summary\":\"If the parent class of a polymorphic association has multiple definitions for the same association, the values must be set from the parent side and not the child side since Mongoid cannot determine from the child side which association to go in.\"},\"invalid_storage_options\":{\"message\":\"Invalid options passed to %{klass}.store_in: %{options}.\",\"resolution\":\"Change the options passed to store_in to match the documented API, and ensure all keys in the options hash are symbols.\\\\n\\\\n Example:\\\\n   class Band\\\\n     include Mongoid::Document\\\\n     store_in collection: \\'artists\\', database: \\'music\\'\\\\n   end\\\\n\\\\n\",\"summary\":\"The :store_in macro takes only a hash of parameters with the keys :database, :collection, :collection_options, or :client.\"},\"invalid_time\":{\"message\":\"\\'%{value}\\' is not a valid Time.\",\"resolution\":\"Make sure to pass parsable values to the field setter for Date, DateTime, and Time objects. When this is a String it needs to be valid for Time.parse. Other objects must be valid to pass to Time.local.\",\"summary\":\"Mongoid tries to serialize the values for Date, DateTime, and Time into proper UTC times to store in the database. The provided value could not be parsed.\"},\"inverse_not_found\":{\"message\":\"When adding a(n) %{klass} to %{base}#%{name}, Mongoid could not determine the inverse foreign key to set. The attempted key was \\'%{inverse}\\'.\",\"resolution\":\"If an inverse is not required, like a belongs_to or has_and_belongs_to_many, ensure that :inverse_of =\\\\u003e nil is set on the association. If the inverse is needed, most likely the inverse cannot be figured out from the names of the associations and you will need to explicitly tell Mongoid on the association what the inverse is.\\\\n\\\\n Example:\\\\n   class Car\\\\n     include Mongoid::Document\\\\n     has_one :engine, class_name: \\\\\"Motor\\\\\", inverse_of: :machine\\\\n   end\\\\n\\\\n   class Motor\\\\n     include Mongoid::Document\\\\n     belongs_to :machine, class_name: \\\\\"Car\\\\\", inverse_of: :engine\\\\n   end\",\"summary\":\"When adding a document to an association, Mongoid attempts to link the newly added document to the base of the association in memory, as well as set the foreign key to link them on the database side. In this case Mongoid could not determine what the inverse foreign key was.\"},\"message_title\":\"message\",\"mixed_client_configuration\":{\"message\":\"Both uri and standard configuration options defined for client: \\'%{name}\\'.\",\"resolution\":\"Provide either only a uri as configuration or only standard options.\",\"summary\":\"Instead of simply giving uri or standard options a preference order, Mongoid assumes that you have made a mistake in your configuration and requires that you provide one or the other, but not both. The options that were provided were: %{config}.\"},\"mixed_relations\":{\"message\":\"Referencing a(n) %{embedded} document from the %{root} document via a non-embedded association is not allowed since the %{embedded} is embedded.\",\"resolution\":\"Consider not embedding %{embedded}, or do the key storage and access in a custom manner in the application code.\",\"summary\":\"In order to properly access a(n) %{embedded} from %{root} the reference would need to go through the root document of %{embedded}. In a simple case this would require Mongoid to store an extra foreign key for the root, in more complex cases where %{embedded} is multiple levels deep a key would need to be stored for each parent up the hierarchy.\"},\"nested_attributes_metadata_not_found\":{\"message\":\"Could not find metadata for association \\'%{name}\\' on model: %{klass}.\",\"resolution\":\"Make sure that there is an association defined named \\'%{name}\\' on %{klass} or that the association definition comes before the accepts_nested_attributes_for macro in the model - order matters so that Mongoid has access to the metadata.\\\\n\\\\n Example:\\\\n   class Band\\\\n     include Mongoid::Document\\\\n     has_many :albums\\\\n     accepts_nested_attributes_for :albums\\\\n   end\\\\n\\\\n\",\"summary\":\"When defining nested attributes for an association, Mongoid needs to access the metadata for the association \\'%{name}\\' in order if add autosave functionality to it, if applicable. Either no association named \\'%{name}\\' could be found, or the association had not been defined yet.\"},\"no_client_config\":{\"message\":\"No configuration could be found for a client named \\'%{name}\\'.\",\"resolution\":\"Double check your mongoid.yml to make sure under the clients key that a configuration exists for \\'%{name}\\'. If you have set the configuration programmatically, ensure that \\'%{name}\\' exists in the configuration hash.\",\"summary\":\"When attempting to create the new client, Mongoid could not find a client configuration for the name: \\'%{name}\\'. This is necessary in order to know the host, port, and options needed to connect.\"},\"no_client_database\":{\"message\":\"No database provided for client configuration: :%{name}.\",\"resolution\":\"If configuring via a mongoid.yml, ensure that within your :%{name} section a :database value for the client\\'s default database is defined.\\\\n\\\\n Example:\\\\n   development:\\\\n     clients:\\\\n       %{name}:\\\\n         database: my_app_db\\\\n         hosts:\\\\n           - localhost:27017\\\\n\\\\n\",\"summary\":\"Each client configuration must provide a database so Mongoid knows where the default database to persist to. What was provided was: %{config}.\"},\"no_client_hosts\":{\"message\":\"No hosts provided for client configuration: :%{name}.\",\"resolution\":\"If configuring via a mongoid.yml, ensure that within your :%{name} section a :hosts value for the client hosts is defined.\\\\n\\\\n Example:\\\\n   development:\\\\n     clients:\\\\n       %{name}:\\\\n         database: my_app_db\\\\n         hosts:\\\\n           - localhost:27017\\\\n\\\\n\",\"summary\":\"Each client configuration must provide hosts so Mongoid knows where the database server is located. What was provided was: %{config}.\"},\"no_clients_config\":{\"message\":\"No clients configuration provided.\",\"resolution\":\"Double check your mongoid.yml to make sure that you have a top-level clients key with at least 1 default client configuration for it. You can regenerate a new mongoid.yml for assistance via `rails g mongoid:config`.\\\\n\\\\n Example:\\\\n   development:\\\\n     clients:\\\\n       default:\\\\n         database: mongoid_dev\\\\n         hosts:\\\\n           - localhost:27017\\\\n\\\\n\",\"summary\":\"Mongoid\\'s configuration requires that you provide details about each client that can be connected to, and requires in the clients config at least 1 default client to exist.\"},\"no_default_client\":{\"message\":\"No default client configuration is defined.\",\"resolution\":\"If configuring via a mongoid.yml, ensure that within your :clients section a :default client is defined.\\\\n\\\\n Example:\\\\n   development:\\\\n     clients:\\\\n       default:\\\\n         hosts:\\\\n           - localhost:27017\\\\n\\\\n\",\"summary\":\"The configuration provided settings for: %{keys}, but Mongoid requires a :default to be defined at minimum.\"},\"no_documents_found\":{\"message\":\"Could not find a document of class %{klass}.\",\"resolution\":\"Create a document of class %{klass} or use a finder method that does not raise an exception when no documents are found.\",\"summary\":\"Mongoid attempted to find a document of the class %{klass} but none exist.\"},\"no_environment\":{\"message\":\"Could not load the configuration since no environment was defined.\",\"resolution\":\"Please ensure an environment is set in one of the listed locations. The environment must be explicitly set.\",\"summary\":\"Mongoid could not determine the environment to use because it was not specified in any of the following locations: Rails.env, Sinatra::Base.environment, ENV[\\\\\"RACK_ENV\\\\\"], ENV[\\\\\"MONGOID_ENV\\\\\"]. Without knowing the environment, Mongoid cannot load its configuration.\"},\"no_map_reduce_output\":{\"message\":\"No output location was specified for the map/reduce operation.\",\"resolution\":\"Provide the location that the output of the operation is to go by chaining an #out call to the map/reduce.\\\\n\\\\n Example:\\\\n   Band.map_reduce(map, reduce).out(inline: 1)\\\\n\\\\n Valid options for the out function are:\\\\n   inline: 1\\\\n   merge: \\'collection-name\\'\\\\n   replace: \\'collection-name\\'\\\\n   reduce: \\'collection-name\\'\\\\n\\\\n\",\"summary\":\"When executing a map/reduce, you must provide the output location of the results. The attempted command was: %{command}.\"},\"no_metadata\":{\"message\":\"Metadata not found for document of type %{klass}.\",\"resolution\":\"Ensure that your associations on the %{klass} model are all properly defined, and that the inverse associations are also properly defined. Embedded associations must have both the parent (embeds_one/embeds_many) and the inverse (embedded_in) present in order to work properly.\",\"summary\":\"Mongoid sets the metadata of an association on the document when it is either loaded from within the association, or added to one. The presence of the metadata is required in order to provide various functionality around associations. Most likely you are getting this error because the document is embedded and was attempted to be persisted without being associated with a parent, or the association was not properly defined.\"},\"no_parent\":{\"message\":\"Cannot persist embedded document %{klass} without a parent document.\",\"resolution\":\"Ensure that you\\'ve set the parent association if instantiating the embedded document directly, or always create new embedded documents via the parent association.\",\"summary\":\"If the document is embedded, in order to be persisted it must always have a reference to its parent document. This is most likely caused by either calling %{klass}.create or %{klass}.create! without setting the parent document as an attribute.\"},\"readonly_attribute\":{\"message\":\"Attempted to set the readonly attribute \\'%{name}\\' with the value: %{value}.\",\"resolution\":\"Don\\'t define \\'%{name}\\' as readonly, or do not attempt to update its value after the document is persisted.\",\"summary\":\"Attributes flagged as readonly via Model.attr_readonly can only have values set when the document is a new record.\"},\"readonly_document\":{\"message\":\"Attempted to persist a readonly document of class \\'%{klass}\\'.\",\"resolution\":\"Don\\'t attempt to persist documents that are flagged as readonly.\",\"summary\":\"Documents that are marked readonly cannot be persisted.\"},\"resolution_title\":\"resolution\",\"scope_overwrite\":{\"message\":\"Cannot create scope :%{scope_name}, because of existing method %{model_name}.%{scope_name}.\",\"resolution\":\"Change the name of the scope so it does not conflict with the already defined method %{model_name}, or set the configuration option Mongoid.scope_overwrite_exception to false, which is its default. In this case a warning will be logged.\",\"summary\":\"When defining a scope that conflicts with a method that already exists on the model, this error will get raised if Mongoid.scope_overwrite_exception is set to true.\"},\"sessions_not_supported\":{\"message\":\"Sessions are not supported by the connected server(s).\",\"resolution\":\"Verify that all servers in your deployment are at least version 3.6 or don\\'t attempt to use sessions with older server versions.\",\"summary\":\"A session was attempted to be used with a MongoDB server version that doesn\\'t support sessions. Sessions are supported in MongoDB server versions 3.6 and higher.\"},\"summary_title\":\"summary\",\"too_many_nested_attribute_records\":{\"message\":\"Accepting nested attributes for %{association} is limited to %{limit} documents.\",\"resolution\":\"The limit is set as an option to the macro, for example: accepts_nested_attributes_for :%{association}, limit: %{limit}. Consider raising this limit or making sure no more are sent than the set value.\",\"summary\":\"More documents were sent to be processed than the allowed limit.\"},\"unknown_attribute\":{\"message\":\"Attempted to set a value for \\'%{name}\\' which is not allowed on the model %{klass}.\",\"resolution\":\"Define the field \\'%{name}\\' in %{klass}, or include Mongoid::Attributes::Dynamic in %{klass} if you intend to store values in fields that are not explicitly defined.\",\"summary\":\"%{klass}#%{name}= was called but there is no \\'%{name}\\' field defined in the model, and Mongoid::Attributes::Dynamic is not included. This error is also raised instead of NoMethodError if the unknown attribute is passed to any method that accepts an attributes hash, such as #attributes=.\"},\"unknown_model\":{\"message\":\"Attempted to instantiate an object of the unknown model \\'%{klass}\\'.\",\"resolution\":\"The _type field is a reserved one used by Mongoid to determine the class for instantiating an object. Please don\\'t save data in this field or ensure that any values in this field correspond to valid models.\",\"summary\":\"A document with the value \\'%{value}\\' at the key \\'_type\\' was used to instantiate a model object but Mongoid cannot find this Class.\"},\"unsaved_document\":{\"message\":\"Attempted to save %{document} before the parent %{base}.\",\"resolution\":\"Make sure to only use create or create! when the parent document %{base} is persisted.\",\"summary\":\"You cannot call create or create! through the association (%{document}) whose parent (%{base}) is not already saved. This would cause the database to be out of sync since the child could potentially reference a nonexistent parent.\"},\"unsupported_javascript\":{\"message\":\"Executing Javascript $where selector on an embedded criteria is not supported.\",\"resolution\":\"Please provide a standard hash to #where when the criteria is for an embedded association.\",\"summary\":\"Mongoid only supports providing a hash of arguments to #where criterion on embedded documents. Since %{klass} is embedded, the expression %{javascript} is not allowed.\"},\"validations\":{\"message\":\"Validation of %{document} failed.\",\"resolution\":\"Try persisting the document with valid data or remove the validations.\",\"summary\":\"The following errors were found: %{errors}\"}}}},\"number\":{\"currency\":{\"format\":{\"delimiter\":\",\",\"format\":\"%u%n\",\"negative_format\":\"-%u%n\",\"precision\":2,\"separator\":\".\",\"significant\":false,\"strip_insignificant_zeros\":false,\"unit\":\"$\"}},\"format\":{\"delimiter\":\",\",\"precision\":3,\"round_mode\":\"default\",\"separator\":\".\",\"significant\":false,\"strip_insignificant_zeros\":false},\"human\":{\"decimal_units\":{\"format\":\"%n %u\",\"units\":{\"billion\":\"Billion\",\"million\":\"Million\",\"quadrillion\":\"Quadrillion\",\"thousand\":\"Thousand\",\"trillion\":\"Trillion\",\"unit\":\"\"}},\"format\":{\"delimiter\":\"\",\"precision\":3,\"significant\":true,\"strip_insignificant_zeros\":true},\"storage_units\":{\"format\":\"%n %u\",\"units\":{\"byte\":{\"one\":\"Byte\",\"other\":\"Bytes\"},\"eb\":\"EB\",\"gb\":\"GB\",\"kb\":\"KB\",\"mb\":\"MB\",\"pb\":\"PB\",\"tb\":\"TB\",\"zb\":\"ZB\"}}},\"nth\":{},\"percentage\":{\"format\":{\"delimiter\":\"\",\"format\":\"%n%\"}},\"precision\":{\"format\":{\"delimiter\":\"\"}}},\"pivot_list_column_value\":{\"non_sponsor_org\":\"non-sponsor\"},\"pivot_list_download\":{\"id\":\"ZW_ID\"},\"simple_form\":{\"error_notification\":{\"default_message\":\"Please review the problems below:\"},\"no\":\"No\",\"required\":{\"mark\":\"*\",\"text\":\"required\"},\"yes\":\"Yes\"},\"support\":{\"array\":{\"last_word_connector\":\", and \",\"two_words_connector\":\" and \",\"words_connector\":\", \"}},\"terminology\":{\"all_orgs_list_category\":\"Companies\",\"companies_in_your_sf_label\":\"Companies in your Salesforce\",\"company_based_in\":\"Sponsor company based in\",\"company_location\":\"Sponsor Company Location\",\"neglected_target_label\":\"Neglected Sponsors\",\"sponsor\":\"Drug Sponsor\",\"sponsor_orgs_list_category\":\"Sponsor Companies\",\"target_organization_title\":\"Sponsor\"},\"time\":{\"am\":\"am\",\"formats\":{\"default\":\"%a, %d %b %Y %H:%M:%S %z\",\"long\":\"%B %d, %Y %H:%M\",\"short\":\"%d %b %H:%M\"},\"pm\":\"pm\"},\"users\":{\"confirmations\":{\"new\":{\"legend\":\"Resend your %{brand_name} confirmation instructions\",\"message\":\"We need to confirm your email address to complete the sign up process. Supply your email address, below, and we will send you instructions on how to confirm your address.\",\"submit_button\":\"Send Confirmation Instructions\",\"title\":\"Resend confirmation instructions | %{brand_name}\"},\"show\":{\"legend\":\"Check your inbox for a confirmation email\",\"message\":\"If your e-mail exists in our database we have sent you a message with instructions. Check your inbox (or spam folder) for a message from \\'%{default_from_email}\\' containing the confirmation link.\",\"title\":\"Awaiting confirmation | %{brand_name}\"}},\"passwords\":{\"new\":{\"failures\":\"Note: If you make more than 5 sequential failed attempts to sign in with your %{brand_name} password, your account will be (temporarily) locked. Check your inbox for instruction on how to unlock your account, or we can\",\"legend\":\"Reset your %{brand_name} password\",\"message\":\"Supply your email address, below, and we will send you instructions on how to reset your password.\",\"resend_link\":\"resend a new set of unlock instructions\",\"submit_button\":\"Send Reset Instructions\",\"title\":\"Reset password | %{brand_name}\"},\"show\":{\"didnt_receive_email\":\"Didn\\'t receive the email?\",\"legend\":\"Password reset instructions sent\",\"message\":\"If your e-mail exists in our database we have sent you a message with password reset instructions. Check your inbox (or spam folder) for a message from \\'%{default_from_email}\\'.\",\"resend_link\":\"you can request another one here\",\"title\":\"Awaiting reset | %{brand_name}\"}}},\"will_paginate\":{\"container_aria_label\":\"Pagination\",\"next_label\":\"Next \\\\u0026#8594;\",\"page_aria_label\":\"Page %{page}\",\"page_entries_info\":{\"multi_page\":\"Displaying %{model} %{from} - %{to} of %{count} in total\",\"multi_page_html\":\"Displaying %{model} \\\\u003cb\\\\u003e%{from}\\\\u0026nbsp;-\\\\u0026nbsp;%{to}\\\\u003c/b\\\\u003e of \\\\u003cb\\\\u003e%{count}\\\\u003c/b\\\\u003e in total\",\"single_page\":{\"one\":\"Displaying 1 %{model}\",\"other\":\"Displaying all %{count} %{model}\",\"zero\":\"No %{model} found\"},\"single_page_html\":{\"one\":\"Displaying \\\\u003cb\\\\u003e1\\\\u003c/b\\\\u003e %{model}\",\"other\":\"Displaying \\\\u003cb\\\\u003eall\\\\u0026nbsp;%{count}\\\\u003c/b\\\\u003e %{model}\",\"zero\":\"No %{model} found\"}},\"page_gap\":\"\\\\u0026hellip;\",\"previous_label\":\"\\\\u0026#8592; Previous\"},\"x_mailer_header\":\"clicks.zymewire.com\"}'));\n","import moment from \"moment\";\n\nexport function formatDate(date) {\n return moment(date).format(\"MM-DD-YYYY\");\n}\n\nexport function parseDate(dateStr) {\n return moment(dateStr, \"MM-DD-YYYY\");\n}\n\n/**\n * True iff the keyDown event is valid for\n * manual entry into the input field.\n *\n * Only allows numbers and hyphens through.\n */\nexport function isKeyDownEventValidInput(event) {\n const allowedKeys = [\n \"Enter\",\n \"Backspace\",\n \"ModeChange\",\n \"ArrowLeft\",\n \"ArrowRight\",\n \"Tab\",\n ];\n\n if (\n allowedKeys.includes(event.key) ||\n event.ctrlKey ||\n event.altKey ||\n event.metaKey\n )\n return true;\n\n const isNumber = isFinite(event.key);\n const isHyphen = event.key === \"-\";\n\n if (isNumber || isHyphen) return true;\n return false;\n}\n\n/**\n * Why is this a function? We need to make sure that\n * this is always the latest copy of \"right now\",\n * as other components may use `new Date()`. Keeping\n * it static risks this date no longer being the current\n * \"now\", even if by a few seconds, which is enough\n * to cause boolean \"<\", \">=\", etc. checks to fail.\n *\n * @returns {Date} Current date\n */\nexport const DATEPICKER_MAX_DATE = () => new Date();\n","import { createRoot } from \"react-dom/client\";\n\nexport default class LegacyModalService {\n /** @type {import(\"react-dom/client\").Root} */\n static reactRoot = null;\n\n static init() {\n LegacyModalService._provision();\n }\n\n static openModal(element, props) {\n LegacyModalService.reactRoot.render(React.createElement(element, props));\n }\n\n static closeModal() {\n if (LegacyModalService.reactRoot) {\n LegacyModalService.reactRoot.unmount();\n LegacyModalService._provision();\n }\n }\n\n static _provision() {\n LegacyModalService.reactRoot = createRoot(\n document.getElementById(\"LDS-LEGACY-MODAL-ROOT\")\n );\n }\n}\n\nwindow.LegacyModalService = LegacyModalService;\n","const MutedCompaniesHeader = () => {\n return (\n
\n
\n

Look up sponsor companies you would like to exclude from searches and add them to Your Muted Companies list.

\n
\n
\n  \n
\n
\n

Your Muted Companies

\n

To exclude Your Muted Companies from a search, use the \"Hide My Muted Companies\" filter.

\n
\n
\n );\n};\n\nwindow.MutedCompaniesHeader = MutedCompaniesHeader;\nexport default MutedCompaniesHeader;\n","const assembleSuggestionsEntries = (props) => {\n return props.filteredSuggestions.map((suggestion, index) => {\n let cleaned_suggestion = suggestion.replace(/[^a-zA-Z ]/g, \"\");\n cleaned_suggestion = cleaned_suggestion.replace(/ /g, \"_\");\n return (\n \n {suggestion}\n \n );\n });\n};\n\nconst SuggestionsHolder = (props) => {\n let classNames = [\"autocomplete_suggestions\"].concat(props.classNames);\n return (\n
\n \n
\n )\n};\n\nconst AutocompleteSuggestions = (props) => {\n if (props.filteredSuggestions.length) {\n let suggestionsEntries = assembleSuggestionsEntries({filteredSuggestions:props.filteredSuggestions, onClick:props.onClick});\n return \n }\n else {\n let suggestionsEntries =
  • No {props.placeHolder} matching '{props.userInput}'
  • \n return \n }\n};\n\nwindow.AutocompleteSuggestions = AutocompleteSuggestions;\nexport default AutocompleteSuggestions;\n","import React from \"react\";\nimport PropTypes from \"prop-types\";\n\nexport default function Icon({\n className = \"\",\n filled = false,\n id,\n name = \"\",\n onClick = () => {},\n role = \"img\",\n style = {},\n}) {\n if (filled) name += \"-filled\";\n\n const classNames = [`icon-${name}`];\n if (className) {\n classNames.push(className);\n }\n\n return (\n \n );\n}\n\nIcon.propTypes = {\n className: PropTypes.string,\n filled: PropTypes.bool,\n name: PropTypes.string.isRequired,\n onClick: PropTypes.func,\n role: PropTypes.string,\n style: PropTypes.object,\n}\n","import React, { useRef } from \"react\";\nimport PropTypes from \"prop-types\";\n\nimport Icon from \"@javascript/reactComponents/lds/Icon\";\nimport { isString } from \"lodash\";\n\nfunction HelperText({\n helperTextStylesOverride = {},\n showHelperTextIcon = true,\n value = \"\",\n variant = \"none\",\n}) {\n const iconStyles = {\n visibility: showHelperTextIcon ? \"visible\" : \"hidden\",\n };\n\n return (\n \n \n {value}\n \n );\n}\n\n/**\n * The `autoComplete` prop supports all standard tokens defined by the HTML spec:\n * https://html.spec.whatwg.org/multipage/form-control-infrastructure.html#autofill\n * Common values permitted:\n * - \"on\" / \"off\" (Enable/disable autocomplete)\n * - \"name\", \"email\"\", \"password\" (Basic user info)\n * Other fields we can consider adding in the future\n * - Address fields: \"street-address\", \"postal-code\", \"address-level1\"\n * - Payment fields: \"cc-number\", \"cc-exp\", \"cc-csc\"\n * - Contact fields: \"tel\", \"url\"\n */\n\n\nconst Input = ({\n autoComplete = \"on\",\n className = \"\",\n disabled = false,\n focused = false,\n\n forceShowHelperText = false,\n height,\n\n helperText = \"\",\n helperTextStylesOverride = {},\n helperTextVariant = \"none\",\n id = null,\n\n label,\n labelPosition = \"inside\",\n leadingIcon,\n\n maxLength,\n maxWidth,\n minWidth,\n multiLine = false,\n name = \"\",\n onValueChange,\n onSubmit,\n placeholder = \" \",\n readOnly = false,\n\n showClearIcon = true,\n showHelperTextIcon = true,\n\n showLabel = true,\n size,\n trailingIcon,\n trailingIconOnClick = () => {},\n type = \"text\",\n\n value = \"\",\n variant = \"normal\",\n width = 219,\n}) => {\n const inputRef = useRef();\n\n const clearInput = (event) => {\n event.preventDefault();\n event.stopPropagation();\n\n inputRef.current?.focus();\n onValueChange(\"\");\n };\n\n const jsxInput = !isString(value) && React.isValidElement(value);\n const regularInput = !jsxInput && !multiLine;\n const multiLineInput = !jsxInput && multiLine;\n\n const parentClass = \"input-container-\" + size;\n\n const innerContainerClasses = [\n `input-inner-container-${size}`,\n `input-inner-container-${variant}`,\n ];\n\n const inputClasses = [`lds-input-${size}`, `input-${variant}`];\n const showLabelInside =\n showLabel &&\n labelPosition === \"inside\" &&\n (multiLineInput || size === \"large\");\n\n if (className) {\n inputClasses.push(className);\n }\n\n // Inner container\n if (multiLine) {\n innerContainerClasses.push(\"input-inner-container-multiLine-\" + size);\n inputClasses.push(\"input-multiLine-\" + size);\n }\n if (leadingIcon) {\n innerContainerClasses.push(\"has-leading-icon\");\n }\n if (disabled) {\n inputClasses.push(\"input-disable\");\n innerContainerClasses.push(\"input-inner-container-disable\");\n }\n if (focused) {\n innerContainerClasses.push(\"focused\");\n }\n\n // HTML Input\n if (showLabelInside) {\n inputClasses.push(\"input-has-label\");\n }\n\n const commonInputProps = {\n id,\n maxLength,\n onChange: (event) => onValueChange(event.target.value),\n onKeyUp: (event) => {\n if (onSubmit && event.key === \"Enter\") {\n onSubmit();\n }\n },\n placeholder,\n value,\n };\n\n if (name) {\n commonInputProps.name = name;\n }\n\n const renderInput = () => {\n if (regularInput) {\n commonInputProps.autoComplete = autoComplete;\n return (\n \n );\n }\n\n if (multiLineInput) {\n return (\n \n );\n }\n\n if (jsxInput) return value;\n\n return null;\n };\n\n const showOuterLabelTop = showLabel && labelPosition === \"top\";\n const outerLabelClassNames = [\"lds-input-outer-label-\" + size];\n\n if (showOuterLabelTop) {\n outerLabelClassNames.push(\"lds-input-outer-label-top\");\n }\n\n const outerLabel = (\n {label}\n );\n\n return (\n
    \n {showOuterLabelTop && outerLabel}\n\n
    \n {leadingIcon && }\n\n {renderInput()}\n\n {showLabelInside && }\n {showClearIcon && !multiLineInput && !readOnly && (\n \n )}\n\n {trailingIcon && (\n \n )}\n
    \n\n {(size !== \"small\" || forceShowHelperText) && (\n \n )}\n
    \n );\n};\n\nInput.propTypes = {\n autoComplete: PropTypes.oneOf([\n \"on\",\n \"off\",\n \"name\",\n \"email\",\n \"password\",\n \"new-password\",\n ]),\n className: PropTypes.string,\n disabled: PropTypes.bool,\n focused: PropTypes.bool,\n\n forceShowHelperText: PropTypes.bool,\n height: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),\n helperText: PropTypes.string,\n\n helperTextStylesOverride: PropTypes.object,\n helperTextVariant: PropTypes.oneOf([\n \"critical\",\n \"hidden\",\n \"info\",\n \"none\",\n \"success\",\n \"warning\",\n ]),\n id: PropTypes.string,\n\n label: PropTypes.string,\n labelPosition: PropTypes.oneOf([\"inside\", \"top\"]),\n leadingIcon: PropTypes.string,\n\n maxLength: PropTypes.number,\n maxWidth: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),\n minWidth: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),\n\n multiLine: PropTypes.bool,\n name: PropTypes.string,\n onValueChange: PropTypes.func.isRequired,\n onSubmit: PropTypes.func,\n\n placeholder: PropTypes.string,\n readOnly: PropTypes.bool,\n showClearIcon: PropTypes.bool,\n\n showHelperTextIcon: PropTypes.bool,\n showLabel: PropTypes.bool,\n size: PropTypes.oneOf([\"small\", \"medium\", \"large\"]).isRequired,\n\n trailingIcon: PropTypes.string,\n trailingIconOnClick: PropTypes.func,\n type: PropTypes.oneOf([\n \"text\",\n \"password\",\n \"email\",\n \"number\",\n \"tel\",\n \"url\",\n \"search\",\n \"date\",\n \"time\",\n \"datetime-local\",\n \"month\",\n \"week\",\n \"color\",\n ]),\n value: PropTypes.oneOfType([\n PropTypes.element,\n PropTypes.string,\n ]),\n\n variant: PropTypes.oneOf([\"critical\", \"normal\"]),\n width: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),\n};\n\nexport default Input;\n","import Input from \"../lds/Input\";\n\nconst SearchInput = createReactClass({\n timeout: 0,\n getInitialState: function () {\n return { value: \"\" };\n },\n doSearch: function(value){\n this.setState({value: value});\n\n if(this.timeout){\n clearTimeout(this.timeout);\n }\n this.timeout = setTimeout(() => {\n this.props.searchFunction(value)\n }, 300);\n },\n render: function(){\n let placeHolder = \"Type a \" + this.props.placeHolder + \" to search\",\n classes = (this.props.classNames || []).join(' ');\n\n return (\n \n );\n }\n }\n);\n\nwindow.SearchInput = SearchInput;\nexport default SearchInput;\n","import AutocompleteSuggestions from \"../generic/autocomplete/autocompleteSuggestions\";\nimport SearchInput from \"../generic/searchInput\";\n\nconst MutedCompaniesSearch = createReactClass({\n getInitialState: function(){\n return {\n userInput: '',\n filteredIds: null,\n filteredSuggestions: null\n }\n },\n searchCompanies: function(searchString) {\n const query = searchString.trim();\n if(query.length > 2){\n let excluded_orgs = MutedCompaniesStore.data.currentMuted.map(company => company.id)\n $.getJSON(\"/autocomplete/organizations\", {text: query, excluded_orgs: excluded_orgs}, function(response){\n const ids = [];\n const names = [];\n response.results.forEach(function(result, index){\n ids.push(result.id)\n names.push(result.official_name)\n });\n this.setState({userInput: query, filteredSuggestions: names, filteredIds: ids});\n }.bind(this));\n }\n else{\n this.setState({userInput: query, filteredSuggestions: null, filteredIds: null});\n }\n },\n onClick: function(e) {\n\n const companyName = e.currentTarget.innerText;\n const companyIdIndex = this.state.filteredSuggestions.indexOf(companyName);\n const companyId = this.state.filteredIds[companyIdIndex];\n\n MutedCompaniesActions.selectionAdded({id: companyId, name: companyName});\n\n this.setState(prevState => ({\n filteredSuggestions: _.without(prevState.filteredSuggestions, companyName),\n filteredIds: _.without(prevState.filteredIds, companyId)\n }));\n },\n render: function(){\n let classNames = this.props.classNames;\n let placeHolder = this.props.placeHolder;\n let suggestions = this.state.filteredSuggestions ? : null;\n return (\n
    \n
    \n \n
    \n {suggestions}\n
    \n );\n }\n});\n\nwindow.MutedCompaniesSearch = MutedCompaniesSearch;\nexport default MutedCompaniesSearch;\n","const ClearMutedCompaniesButton = createReactClass({\n mixins: [Reflux.connect(MutedCompaniesStore, \"store\")],\n render: function(){\n\n const clearSelections = function(e){\n e.stopPropagation();\n MutedCompaniesActions.clearSelections();\n };\n\n if(this.state.store.currentMuted.length > 0){\n return \n }\n else{\n return ;\n }\n }\n});\n\nwindow.ClearMutedCompaniesButton = ClearMutedCompaniesButton;\nexport default ClearMutedCompaniesButton;\n","const MutedCompanyHolder = (props) => {\n const labelClasses = [\"multirow_selection_label\"].concat(props.labelClasses);\n const link = {props.name};\n const div_id = props.id + \"_div\";\n return (\n
    \n
    props.onClick({id: props.id, name: props.name}, event)} id={div_id} className={labelClasses.join(' ')}>{link}
    \n
    \n )\n};\n\nconst MultiSelectCompanyHolder = (props) => {\n const name = props.company.name;\n const id = props.company.id;\n const classNames = [\"foldable\"].concat(props.classNames);\n const companyHolder = \n return (\n
    \n {companyHolder}\n
    \n );\n};\n\nwindow.MultiSelectCompanyHolder = MultiSelectCompanyHolder;\nexport default MultiSelectCompanyHolder;\n","import MultiSelectCompanyHolder from \"./multiSelectCompanyHolder\";\n\nconst SuggestedMutedCompanies = createReactClass({\n mixins: [Reflux.connect(MutedCompaniesStore, \"store\")],\n render: function() {\n const selectCompany = function(company, e){\n e.stopPropagation();\n MutedCompaniesActions.selectionAdded(company)\n };\n const suggestedCompanies = this.state.store.currentSuggested ? this.state.store.currentSuggested : [];\n const availableCompanies = suggestedCompanies.map(function(company, index){\n return \n });\n return (\n
    \n {availableCompanies}\n
    \n );\n }\n});\n\nwindow.SuggestedMutedCompanies = SuggestedMutedCompanies;\nexport default SuggestedMutedCompanies;\n","import MultiSelectCompanyHolder from \"./multiSelectCompanyHolder\";\n\nconst SelectedMutedCompanies = createReactClass({\n mixins: [Reflux.connect(MutedCompaniesStore, \"store\")],\n render: function () {\n const removeCompany = function(company, e){\n e.stopPropagation();\n console.log(company)\n MutedCompaniesActions.selectionRemoved(company)\n };\n let mutedCompanies = this.state.store.currentMuted.map(function(company, index){\n return \n });\n if(mutedCompanies.length < 1){\n mutedCompanies =

    None

    \n }\n return (\n
    \n {mutedCompanies}\n
    \n );\n }\n});\n\nwindow.SelectedMutedCompanies = SelectedMutedCompanies;\nexport default SelectedMutedCompanies;\n","const SaveSettingsButton = (props) => {\n let txt = props.changing ? \"Saving Changes\" : \"Save Changes\";\n let btn = props.changed ? : ;\n return (\n
    \n {btn}\n
    \n );\n};\n\nwindow.SaveSettingsButton = SaveSettingsButton;\nexport default SaveSettingsButton;\n","import SaveSettingsButton from \"./saveSettingsButton\";\n\nconst SaveMutedCompaniesButton = createReactClass({\n mixins: [Reflux.connect(MutedCompaniesStore, \"store\")],\n render: function() {\n let changing = this.state.store.settingsSubmitted;\n let changed = this.state.store.settingsChanged;\n return (\n \n );\n }\n});\n\nwindow.SaveMutedCompaniesButton = SaveMutedCompaniesButton;\nexport default SaveMutedCompaniesButton;\n","import ClearMutedCompaniesButton from \"./clearMutedCompaniesButton\";\nimport SuggestedMutedCompanies from \"./suggestedMutedCompanies\";\nimport SelectedMutedCompanies from \"./selectedMutedCompanies\";\nimport SaveMutedCompaniesButton from \"./saveMutedCompaniesButton\";\n\nconst MutedCompaniesSelectionPanels = () => {\n const saveMutedCompaniesSelection = function(e) {\n e.preventDefault();\n MutedCompaniesActions.saveChanges();\n };\n return (\n
    \n
    \n

    Suggested companies to mute

    \n \n
    \n
    \n \n
    \n
    \n

    Click to remove companies

    \n \n \n
    \n
    \n );\n};\n\nwindow.MutedCompaniesSelectionPanels = MutedCompaniesSelectionPanels;\nexport default MutedCompaniesSelectionPanels\n","import MutedCompaniesHeader from \"./mutedCompaniesHeader\";\nimport MutedCompaniesSearch from \"./mutedCompaniesSearch\";\nimport MutedCompaniesSelectionPanels from \"./mutedCompaniesSelectionPanels\";\n\nconst MutedCompaniesSelector = () => {\n return (\n
    \n \n \n \n
    \n );\n};\n\nwindow.MutedCompaniesSelector = MutedCompaniesSelector;\nexport default MutedCompaniesSelector;\n","/** True iff `num` is less than 0 or greater than max */\nfunction numOutsideRange(num, max) {\n return num < 0 || num > max;\n}\n\n/** True iff the bounding rect will extend beyond the viewport */\nexport function elementOverlapsViewport(element) {\n const { innerWidth, innerHeight } = window;\n const { x, y, width, height } = element.getBoundingClientRect();\n\n const topLeft = { x, y };\n const bottomRight = { x: x + width, y: y + height };\n\n const overlapsX =\n numOutsideRange(topLeft.x, innerWidth) ||\n numOutsideRange(bottomRight.x, innerWidth);\n\n const overlapsY =\n numOutsideRange(topLeft.y, innerHeight) ||\n numOutsideRange(bottomRight.y, innerHeight);\n\n const overlaps = overlapsX || overlapsY;\n\n return { overlaps, overlapsX, overlapsY };\n}\n\n// True iff given text element is wrapped text within a parent.\n// Taken with help from: https://stackoverflow.com/a/53281556.\n// NOTE: `element` must have an offsetHeight. This can be achieved\n// by making sure it doesn't have `display: none`.\nexport function isTextElementWrapped(element) {\n if (!element) return false;\n\n const { lineHeight } = getComputedStyle(element);\n const lineHeightParsed = parseFloat(lineHeight);\n\n return element.offsetHeight > lineHeightParsed;\n}\n\n/** True iff `element` overflows into scroll. */\nexport function elementHasScroll(element) {\n if (!element) return false;\n\n const style = getComputedStyle(element);\n const allowedOverflowStyles = [\"auto\", \"scroll\"];\n\n return (\n element.clientHeight < element.scrollHeight &&\n allowedOverflowStyles.includes(style.overflowY)\n );\n}\n\n/**\n * Returns array of elements that are ancestors\n * to `element` and have a scroll.\n */\nexport function allScrollableAncestors(element) {\n const ancestors = [];\n while (element) {\n if (elementHasScroll(element)) {\n ancestors.push(element);\n }\n element = element.parentElement;\n }\n\n return ancestors;\n}\n\n/**\n * Traverses component tree to the root\n * until a parent with scrollbar is found.\n * Returns null if none found\n */\nexport function findScrollableElement(element) {\n while (element && !elementHasScroll(element)) {\n element = element.parentElement;\n }\n\n return element;\n}\n","const POSITION_DIMENSION = {\n top: \"height\",\n bottom: \"height\",\n left: \"width\",\n right: \"width\",\n}\n\nconst OPPOSITE_POSITION = {\n top: \"bottom\",\n bottom: \"top\",\n left: \"right\",\n right: \"left\",\n}\n\nconst FLIP_POSITION = {\n height: \"right\",\n width: \"bottom\",\n}\n\nconst EDGE_GAP = \"var(--space-100)\";\n\nconst BORDER_WIDTH = \"4px\";\n\n// position: top || bottom || left || right\n// bounds: {height, width}\n// gap: int\nexport function positionPopover(position, bounds, element, trigger, {align, gap, flipAxisIfOverflows = true}) {\n // Jest knows no bounds (useWindowSize doesn't work)\n if (!bounds) {\n openPopover[position](element, trigger, {align, bounds: {}, gap, willOverflow: false});\n return;\n }\n\n const triggerRect = trigger.getBoundingClientRect();\n const elementRect = element.getBoundingClientRect();\n let finalPosition = position;\n const dimension = POSITION_DIMENSION[position];\n\n const availableSpace = (position) => {\n if ([\"top\", \"left\"].includes(position)) {\n return triggerRect[position];\n }\n\n return bounds[dimension] - triggerRect[position];\n }\n\n const willOverflow = (position) => {\n return availableSpace(position)\n < (elementRect[dimension] + gapInt(gap) + gapInt(EDGE_GAP));\n }\n\n if (willOverflow(position)) {\n if (flipAxisIfOverflows) {\n if(willOverflow(OPPOSITE_POSITION[position])) {\n return positionPopover(FLIP_POSITION[dimension], bounds, element, trigger, { align: \"center\", gap, flipAxisIfOverflows: false });\n }\n }\n\n if ([\"top\", \"bottom\"].includes(position)) {\n if (triggerRect.top > (bounds.height - triggerRect.bottom)) {\n finalPosition = \"top\";\n } else {\n finalPosition = \"bottom\";\n }\n } else if ([\"left\", \"right\"].includes(position)) {\n if (triggerRect.left > bounds.width - triggerRect.right) {\n finalPosition = \"left\";\n } else {\n finalPosition = \"right\";\n }\n }\n }\n\n openPopover[finalPosition](element, trigger, {align, bounds, gap, willOverflow});\n}\n\nconst gapInt = (gap) => {\n if (typeof gap === 'string' && gap.startsWith(\"var\")) {\n return parseInt(window.getComputedStyle(document.body).getPropertyValue(gap.substring(4, gap.length-1)));\n } else {\n return gap;\n }\n}\n\nconst gapStr = (gap) => {\n return Number.isInteger(gap) ? `${gap}px` : gap;\n}\n\nconst openPopover = {\n top: (element, trigger, { align, bounds, gap, willOverflow }) => {\n const styles = element.style;\n const triggerTop = trigger.getBoundingClientRect().top;\n\n if (willOverflow) {\n styles.maxHeight = `calc(${triggerTop}px - ${gap} - ${EDGE_GAP} - ${BORDER_WIDTH})`;\n }\n\n const rect = element.getBoundingClientRect();\n styles.top = `calc(${triggerTop - rect.height}px - ${gap}`;\n\n alignHorizontally(element, trigger, align, bounds)\n },\n\n bottom: (element, trigger, { align, bounds, gap, willOverflow }) => {\n const triggerBottom = trigger.getBoundingClientRect().bottom;\n const styles = element.style;\n\n if (willOverflow) {\n const calculatedHeight = bounds.height - triggerBottom\n styles.maxHeight = `calc(${calculatedHeight}px - ${gap} - ${EDGE_GAP} - ${BORDER_WIDTH})`;\n }\n\n styles.top = `calc(${triggerBottom}px + ${gap})`;\n\n alignHorizontally(element, trigger, align, bounds);\n },\n\n left: (element, trigger, { align, bounds, gap }) => {\n const { left } = trigger.getBoundingClientRect();\n\n const styles = element.style;\n const rect = element.getBoundingClientRect();\n styles.left = `calc(${left - rect.width}px - ${gapStr(gap)})`;\n\n alignVertically(element, trigger, align, bounds)\n },\n\n right: (element, trigger, { align, bounds, gap }) => {\n const { width, left } = trigger.getBoundingClientRect();\n const styles = element.style;\n\n styles.left = `calc(${left + width}px + ${gapStr(gap)})`;\n\n alignVertically(element, trigger, align, bounds)\n },\n}\n\n\nfunction alignVertically(element, trigger, align, bounds) {\n const triggerRect = trigger.getBoundingClientRect();\n const elementHeight = element.getBoundingClientRect().height;\n\n const styles = element.style;\n\n let topValue;\n\n switch (align) {\n case \"start\":\n topValue = triggerRect.top;\n break;\n case \"center\":\n topValue = triggerRect.top - (elementHeight - triggerRect.height)/2;\n break;\n\n default:\n break;\n }\n\n if (elementHeight + topValue > bounds.height) {\n topValue = `calc(${bounds.height - elementHeight}px - ${EDGE_GAP})`;\n } else {\n topValue = topValue + \"px\";\n }\n\n styles.top = topValue;\n}\n\nfunction alignHorizontally(element, trigger, align) {\n const {left, width} = trigger.getBoundingClientRect();\n const elementWidth = element.getBoundingClientRect().width;\n\n const styles = element.style;\n\n let leftValue;\n\n switch (align) {\n case \"start\":\n leftValue = left\n break;\n case \"center\":\n leftValue = left + (width - elementWidth)/2\n break;\n\n default:\n break;\n }\n\n styles.left = leftValue + \"px\";\n}\n\n/** Create intersection observer for given root, target and callback. */\nexport function createIntersectionObserverFor(root, target, callback) {\n const options = {\n root,\n threshold: 0,\n };\n\n const observer = new IntersectionObserver(callback, options);\n observer.observe(target);\n}\n\nexport function listenToScrollOnElement(element, callback) {\n element.addEventListener(\"scroll\", callback);\n\n return () => {\n element.removeEventListener(\"scroll\", callback);\n };\n};\n","import React, {\n useEffect,\n useRef,\n useState,\n} from \"react\";\n\nimport {\n useClickAway,\n useWindowSize,\n useWindowScroll,\n} from \"@uidotdev/usehooks\";\n\n\nimport PropTypes, { element } from \"prop-types\";\n\n\nimport {\n findScrollableElement,\n} from \"@javascript/reactComponents/utilities/DOMUtilities\";\n\nimport {\n createIntersectionObserverFor,\n listenToScrollOnElement,\n positionPopover,\n} from \"@javascript/reactComponents/utilities/PopoverUtilities\";\nimport { createPortal } from \"react-dom\";\n\n/** A component to render a surface next to an existing trigger. */\n\n\nexport default function Popover({\n align = \"start\",\n children,\n dropdownClassName = \"\",\n gap = \"var(--dropdown-list-space-marginT)\",\n maxWidth = null,\n nested = false,\n onClickOutside = () => {},\n onMouseLeave = () => {},\n onTriggerClick = () => {},\n open = false,\n popoverClassName = \"\",\n popoverPosition = \"bottom\",\n flipAxisIfOverflows,\n trigger,\n usePortal = false,\n}) {\n const handleClickOutside = (event) => {\n const target = event.target;\n\n // If click was on trigger, ignore\n if (!triggerRef.current.contains(target)) {\n onClickOutside();\n }\n };\n\n const [updatedPosition, setUpdatedPosition] = useState(\"\");\n\n const hiddenStyles = {\n visibility: \"hidden\",\n opacity: 0,\n pointerEvents: \"none\",\n };\n\n const clickOutsideRef = useClickAway(handleClickOutside);\n const windowDimensions = useWindowSize();\n const [{ x, y }, scrollTo] = useWindowScroll();\n\n const triggerRef = useRef(null);\n const bodyRef = useRef(null);\n\n const parentStyles = {\n position: \"relative\",\n };\n\n const triggerWidth = triggerRef.current?.getBoundingClientRect().width + \"px\";\n\n const bodyStyles = {\n position: \"fixed\",\n top: 0,\n left: 0,\n zIndex: 999,\n overflowX: \"visible\",\n\n // Note: Nested children don't have any bounds on their width,\n // rather they will grow/shrink with the content provided.\n width: \"max-content\",\n minWidth: !nested && triggerWidth,\n maxWidth: !nested && (maxWidth || triggerWidth),\n };\n\n const updatePopoverPosition = () => {\n if (!open) return;\n\n positionPopover(popoverPosition, windowDimensions, bodyRef.current, triggerRef.current, {\n align,\n gap: nested ? 0 : gap,\n flipAxisIfOverflows,\n });\n };\n\n const handleTriggerMove = () => {\n setUpdatedPosition(\"\");\n if (!open) return;\n updatePopoverPosition();\n };\n\n const handleIntersect = (entries) => {\n const visible = entries[0].isIntersecting;\n if (!visible) {\n if (nested) {\n onMouseLeave();\n } else {\n onClickOutside();\n }\n }\n };\n\n useEffect(() => {\n if (!triggerRef.current || !bodyRef.current) return;\n if (!open) return;\n if (updatedPosition) return;\n\n updatePopoverPosition();\n }, [open]);\n\n // When user changed screen resolution, track the new position\n useEffect(handleTriggerMove, [windowDimensions]);\n\n // Whenever user scrolls relative to the window, update popover position\n useEffect(() => {\n handleTriggerMove();\n }, [x, y]);\n\n // When user scrolls relative to a provided container\n useEffect(() => {\n if (!open) return;\n if (!triggerRef.current) return;\n\n const nearestScrollBody = findScrollableElement(triggerRef.current);\n if (!nearestScrollBody) return;\n\n const isRoot = !nearestScrollBody.parentElement;\n\n // Causes storybook to break otherwise, likely because it throws inside an iFrame :(\n if (!isRoot) {\n createIntersectionObserverFor(\n nearestScrollBody,\n triggerRef.current,\n handleIntersect\n );\n }\n\n return listenToScrollOnElement(nearestScrollBody, handleTriggerMove);\n });\n\n const popoverClassNames = [\"popover-container\"];\n if(popoverClassName) {\n popoverClassNames.push(popoverClassName);\n }\n\n const dropdownClassNames = [\"lds-dropdown-container\"];\n if(dropdownClassName) {\n dropdownClassNames.push(dropdownClassName)\n }\n\n const popoverContent = (\n
    \n
    \n
    \n {children}\n
    \n
    \n
    \n )\n\n let popoverContentRender = popoverContent\n \n // Legacy support. When rendering with portals, many feature tests\n // will fail because they scope find() queries to specific divs, rather\n // than the document body. This is a temporary patch to stop the bleed.\n // Ideally, we always use createPortal in the root popover.\n if (usePortal && !nested) {\n popoverContentRender = createPortal(popoverContent, document.body)\n }\n\n return (\n \n \n {trigger}\n \n\n {popoverContentRender}\n \n );\n}\n\nPopover.propTypes = {\n align: PropTypes.oneOf([\n \"center\",\n \"start\",\n ]),\n dropdownClassName: PropTypes.string,\n gap: PropTypes.string,\n\n maxWidth: PropTypes.oneOfType([\n PropTypes.string,\n PropTypes.oneOf([null])\n ]),\n nested: PropTypes.bool,\n onClickOutside: PropTypes.func,\n onMouseLeave: PropTypes.func,\n onTriggerClick: PropTypes.func,\n open: PropTypes.bool,\n popoverClassName: PropTypes.string,\n popoverPosition: PropTypes.oneOf([\"top\", \"bottom\", \"left\", \"right\"]).isRequired,\n trigger: PropTypes.element,\n usePortal: PropTypes.bool,\n};\n","import React, {\n createContext,\n forwardRef,\n useContext,\n useEffect,\n useImperativeHandle,\n useState,\n} from \"react\";\nimport PropTypes from \"prop-types\";\n\nimport Popover from \"@javascript/reactComponents/lds/Popover\";\n\nexport const DropdownContext = createContext({\n maxHeight: \"unset\",\n maxWidth: \"unset\",\n onItemSelected: () => {},\n setTrigger: () => {},\n size: \"large\",\n})\n\nexport const Dropdown = ({\n align = \"start\",\n bodyStyles = {},\n children,\n closeOnTriggerClick = true,\n dropdownClassName = \"\",\n /** The CSS gap value to apply between popover and the trigger */\n gap = \"var(--dropdown-list-space-marginT)\",\n id = \"\",\n maxHeight = \"unset\",\n maxWidth = \"unset\",\n nested = false,\n onDropdownClose = () => {},\n onDropdownOpen = () => {},\n onItemSelected = undefined,\n overflow,\n popoverClassName = \"\",\n popoverPosition = \"bottom\",\n flipAxisIfOverflows = false,\n\n size = \"large\",\n\n controlledOpen = undefined,\n\n ENABLE_LEGACY_DROPDOWN_SUPPORT = false,\n LEGACY_DROPDOWN_ID = \"\",\n usePortal,\n}, ref) => {\n const parentDropdownContext = useContext(DropdownContext)\n\n if (nested) {\n onItemSelected = onItemSelected || parentDropdownContext.onItemSelected;\n maxWidth = parentDropdownContext.maxWidth;\n maxHeight = parentDropdownContext.maxHeight;\n size = parentDropdownContext.size;\n } else {\n maxHeight = \"inherit\";\n }\n\n const [myTrigger, setTrigger] = useState(null)\n const [open, setOpen] = useState(false)\n\n const openDropdown = () => {\n if(controlledOpen !== undefined) return;\n\n setOpen(true);\n onDropdownOpen();\n };\n\n const closeDropdown = (force = false) => {\n if(controlledOpen !== undefined) return;\n\n // When true, we know this dropdown is the one\n // that we care about\n if (open || force) {\n setOpen(false);\n onDropdownClose();\n }\n }\n\n const handleTriggerClick = (event) => {\n if(controlledOpen !== undefined) return;\n\n if (closeOnTriggerClick && open) {\n closeDropdown()\n } else {\n openDropdown()\n }\n }\n\n const onUserSelectItem = (item) => {\n if (ENABLE_LEGACY_DROPDOWN_SUPPORT) {\n addItemToLegacyDropdown(LEGACY_DROPDOWN_ID, item.value || item.label)\n }\n\n closeDropdown();\n onItemSelected(item);\n }\n\n // Create a custom ref for Dropdown\n // https://react.dev/reference/react/useImperativeHandle#reference\n useImperativeHandle(\n ref,\n () => ({\n open: openDropdown,\n close: () => closeDropdown(true),\n }),\n []\n );\n\n const hasMaxHeight = maxHeight && maxHeight !== \"unset\"\n\n const dropdownListStyles = {\n ...bodyStyles,\n maxHeight,\n maxWidth,\n overflowY: overflow || (hasMaxHeight ? \"auto\" : \"unset\"),\n }\n\n // Sub-nav always open on hover\n const trigger =\n
    \n {myTrigger}\n
    \n\n return (\n \n nested && setOpen(false)}\n onTriggerClick={handleTriggerClick}\n open={(controlledOpen === undefined) ? open : controlledOpen}\n popoverClassName={popoverClassName}\n popoverPosition={nested ? \"right\" : popoverPosition}\n flipAxisIfOverflows={flipAxisIfOverflows}\n trigger={trigger}\n usePortal={usePortal}\n >\n
    \n {/* Lets triggers/list components mount so they can update state in parent */}\n {children}\n
    \n \n\n {/*\n In order to support legacy HTML/jQuery use-cases,\n we keep a hidden dropdown synced with whatever the\n user selects.\n */}\n {ENABLE_LEGACY_DROPDOWN_SUPPORT && (\n MUST have a child with matching value!\n // Otherwise the dropdowns `value` attribute is\n // always empty string.\n const dropdownOption = document.createElement(\"option\")\n dropdownOption.value = value\n dropdownOption.selected = true\n\n // Simulate proper DOM behaviour\n const existingOptions = [...legacyDropdown.getElementsByTagName(\"option\")]\n const alreadyExists = existingOptions.find(option => option.value === value)\n\n // Only one can be selected at a time\n existingOptions.forEach(option => { option.selected = false })\n\n // Prevent adding duplicates, some legacy jQuery MAY break idk\n if (alreadyExists) {\n alreadyExists.selected = true\n } else {\n legacyDropdown.appendChild(dropdownOption)\n legacyDropdown.value = value\n }\n\n // Useful for notifying any event listeners, such as in jQuery\n legacyDropdown.dispatchEvent(changeEvent)\n};\n\nDropdown.propTypes = {\n align: Popover.propTypes.align,\n bodyStyles: PropTypes.object,\n dropdownClassName: PropTypes.string,\n gap: Popover.propTypes.gap,\n closeOnTriggerClick: PropTypes.bool,\n id: PropTypes.string,\n maxHeight: PropTypes.string,\n maxWidth: PropTypes.string,\n nested: PropTypes.bool,\n onDropdownClose: PropTypes.func,\n onDropdownOpen: PropTypes.func,\n onItemSelected: PropTypes.func,\n popoverClassName: PropTypes.string,\n popoverPosition: Popover.propTypes.popoverPosition,\n size: PropTypes.oneOf([\"small\", \"medium\", \"large\"]),\n\n ENABLE_LEGACY_DROPDOWN_SUPPORT: PropTypes.bool,\n LEGACY_DROPDOWN_ID: PropTypes.string,\n};\n","import React, { useContext } from \"react\";\nimport PropTypes from \"prop-types\";\nimport DropdownList, { DropdownListContext } from \"./DropdownList\";\nimport { DropdownContext } from \"./Dropdown\";\nimport Icon from \"../Icon\";\n\n/** A component to render a list of dropdown items, grouped by a heading. */\nexport default function DropdownItemGroup({ group, leadingIcon, showDivider = true, label, children }) {\n\n return (\n
    \n \n\n {children ?\n children :\n }\n\n {showDivider && }\n
    \n );\n}\n\nexport function DropdownItemGroupHeading({ label, leadingIcon }) {\n const { size } = useContext(DropdownContext);\n\n return (\n
    \n { leadingIcon && }\n {label}\n
    \n );\n}\n\nexport function DropdownItemGroupDivider() {\n const { size } = useContext(DropdownContext);\n\n return
    ;\n}\n\n\nDropdownItemGroup.propTypes = {\n group: PropTypes.any,\n showDivider: PropTypes.bool,\n\n label: PropTypes.string,\n leadingIcon: PropTypes.string\n}\n\nDropdownItemGroupHeading.propTypes = {\n label: PropTypes.string.isRequired,\n leadingIcon: PropTypes.string\n}\n","import React, { useContext, useRef } from \"react\";\nimport PropTypes from \"prop-types\";\nimport Icon from \"../Icon\";\nimport { isTextElementWrapped } from \"../../utilities/DOMUtilities\";\nimport Dropdown, { DropdownContext, DropdownTrigger } from \"./Dropdown\";\nimport DropdownList, { DropdownListContext } from \"./DropdownList\";\n\nexport default function DropdownItem({\n allowSelect = true,\n groupedItems = null,\n href = null,\n hrefNewWindow = false,\n hrefOnClick = null, // this is legacy and to support both the href and onclick of user settings dropdown, circa 2015,\n id = \"\",\n label,\n leadingIcon = undefined,\n method = \"\",\n nestedItems = null,\n noneSelection = false,\n rel = \"\",\n selected = false,\n showDot = false,\n trailingIcon = undefined,\n value,\n variant = \"\"\n}) {\n const hasChildren = nestedItems || groupedItems;\n const userCanSelectItem = !hasChildren && allowSelect;\n\n let component =\n \n\n // this href logic started to creep in scope... a lot of it is to support the legacy logout dropdown item on the main nav\n // could be a candidate for refactor either into its own component or some other solution that fits.\n // -- GJ 2024.03.19\n\n if (href) {\n const attributes = { href };\n if (hrefOnClick) {\n attributes.onClick = hrefOnClick;\n }\n if (id) {\n attributes.id = id;\n }\n if(rel) {\n attributes.rel = rel;\n }\n if(method) {\n attributes[\"data-method\"] = method;\n }\n if (hrefNewWindow) {\n attributes.target = \"_blank\";\n }\n component = { component } \n }\n\n // Nested dropdown\n if (hasChildren) {\n return (\n \n \n { component }\n \n\n \n \n );\n }\n\n return component;\n}\n\nfunction DropdownItemRow({ id, label, value, leadingIcon, trailingIcon, allowSelect, selected, variant, noneSelection }) {\n const { size, onItemSelected } = useContext(DropdownContext);\n const listContext = useContext(DropdownListContext);\n\n const labelRef = useRef();\n\n // User can manually override icon per DropdownItem\n let finalLeadingIcon = leadingIcon === null ? null : (leadingIcon || listContext.leadingIcon);\n let finalTrailingIcon = trailingIcon === null ? null : (trailingIcon || listContext.trailingIcon);\n\n if (selected && finalLeadingIcon) finalLeadingIcon += \"-filled\";\n if (selected && finalTrailingIcon) finalTrailingIcon += \"-filled\";\n\n // Detect if label is wrapped, in which case the\n // leading icon should be top-aligned.\n const alignSelfStart = isTextElementWrapped(labelRef.current) ? \"align-self-start\" : \"\";\n\n const isSelected = selected ? \"selected\" : \"\";\n const hasVariant = variant ? `lds-dropdown-item-${variant}` : \"\";\n\n\n const rowClassNames = `lds-dropdown-item-${size} ${hasVariant} ${isSelected}`\n\n return (\n allowSelect && onItemSelected({ label, value, leadingIcon, trailingIcon, variant })}\n >\n {finalLeadingIcon && (\n \n )}\n\n {noneSelection ? (\n \n ) : (\n \n {label}\n \n )}\n\n {finalTrailingIcon && (\n <>\n
    \n \n \n )}\n
    \n );\n}\n\nfunction DropdownItemRowNoneSelection() {\n return (\n \n None\n \n );\n}\n\nDropdownItem.propTypes = {\n allowSelect: PropTypes.bool,\n groupedItems: PropTypes.array,\n href: PropTypes.string,\n hrefOnclick: PropTypes.func,\n id: PropTypes.string,\n label: PropTypes.string.isRequired,\n leadingIcon: PropTypes.string,\n method: PropTypes.string,\n nestedItems: PropTypes.array,\n rel: PropTypes.string,\n selected: PropTypes.bool,\n showDot: PropTypes.bool,\n trailingIcon: PropTypes.string,\n value: PropTypes.any,\n variant: PropTypes.oneOf([\"\", \"critical\", \"disabled\"])\n}\n","import React, { createContext, useContext } from \"react\";\nimport PropTypes from \"prop-types\";\nimport DropdownItemGroup from \"./DropdownItemGroup\";\nimport DropdownItem from \"./DropdownItem\";\n\nexport const DropdownListContext = createContext({\n leadingIcon: undefined,\n trailingIcon: undefined\n})\n\n/**\n * A component to render list of dropdown items.\n */\nexport default function DropdownList({\n children,\n hasNoneSelection = false,\n items,\n leadingIcon,\n maxHeight,\n trailingIcon\n}) {\n const parentContext = useContext(DropdownListContext);\n\n leadingIcon ||= parentContext.leadingIcon;\n trailingIcon ||= parentContext.trailingIcon;\n\n return (\n \n \n {children && children}\n\n {!children && hasNoneSelection && (\n \n )}\n {!children &&\n items.map((item) => {\n const grouped = !!item.groupedItems;\n\n return grouped ? (\n \n ) : (\n \n );\n })}\n
    \n \n );\n}\n\nDropdownList.propTypes = {\n hasNoneSelection: PropTypes.bool,\n items: PropTypes.array,\n leadingIcon: PropTypes.string,\n maxHeight: PropTypes.string,\n trailingIcon: PropTypes.string\n};\n","import React from \"react\";\nimport PropTypes from \"prop-types\";\nimport Icon from \"./Icon\";\n\nfunction NavItem({\n children,\n className = \"\",\n href = \"\",\n hrefOnClick,\n icon,\n id,\n title,\n variant,\n selectedItem,\n trailingIcon,\n}) {\n let attributes;\n if (href) {\n attributes = { href };\n }\n if (hrefOnClick) {\n attributes.onClick = hrefOnClick;\n }\n // Storybook blows up with this, browser does not...\n // so title is explicitly set in the anchor\n // if (title) {\n // attributes.title = title;\n // }\n const filled = id === selectedItem ? true : false;\n const selected = id === selectedItem ? \"selected\" : \"\";\n return (\n \n {icon && }\n {children}\n\n {trailingIcon && }\n \n );\n}\n\nexport const NavItemPropTypes = {\n children: PropTypes.string,\n className: PropTypes.string,\n href: PropTypes.string,\n hrefOnclick: PropTypes.func,\n icon: PropTypes.string,\n trailingIcon: PropTypes.string,\n id: PropTypes.string,\n title: PropTypes.string,\n variant: PropTypes.oneOf([\"button\", \"link\", \"logo\", \"trigger\"]).isRequired,\n selectedItem: PropTypes.string,\n};\n\nNavItem.propTypes = NavItemPropTypes;\nexport default NavItem;\n","import { useState } from \"react\";\nimport PropTypes from \"prop-types\";\n\nimport Dropdown, { DropdownTrigger } from \"@javascript/reactComponents/lds/dropdown/Dropdown\";\nimport DropdownList from \"@javascript/reactComponents/lds/dropdown/DropdownList\";\nimport NavItem from \"@javascript/reactComponents/lds/NavItem\";\n\nconst SettingsDropdown = ({\n items,\n navTrigger,\n}) => {\n\n const [useTrigger, setTrigger] = useState(navTrigger)\n\n const openDropdown = () => {\n const updatedTrigger = {\n ...useTrigger,\n className: navTrigger.selectedItem === \"settings_nav_item\" ? \"\" : \"nav_dropdown_hover_override\",\n trailingIcon: \"chevron-up\"\n };\n setTrigger(updatedTrigger);\n }\n\n const closeDropdown = () => {\n const updatedTrigger = {\n ...useTrigger,\n className: \"\",\n trailingIcon: \"chevron-down\"\n };\n setTrigger(updatedTrigger);\n }\n\n return(\n \n \n \n \n \n \n );\n};\n\nSettingsDropdown.propTypes = {\n items: PropTypes.array.isRequired,\n navTrigger: PropTypes.object,\n};\n\nwindow.SettingsDropdown = SettingsDropdown;\nexport default SettingsDropdown;\n","import React from \"react\";\nimport PropTypes from \"prop-types\";\nimport Icon from \"./Icon\";\n\nfunction Button({\n id,\n className,\n type,\n selected,\n children,\n block,\n size,\n variant,\n width,\n maxWidth,\n icon,\n style = {},\n trailingIcon,\n onClick,\n}) {\n maxWidth ||= \"unset\";\n width ||= \"unset\";\n className ||= \"\";\n\n return (\n \n {icon && }\n {children}\n\n {trailingIcon && (\n <>\n
    \n \n \n )}\n \n );\n}\n\nexport const ButtonPropTypes = {\n id: PropTypes.string,\n\n type: PropTypes.string,\n className: PropTypes.string,\n size: PropTypes.string.isRequired,\n variant: PropTypes.oneOf([\n \"primary\",\n \"secondary\",\n \"plain\",\n \"critical\",\n \"disable\",\n ]).isRequired,\n\n width: PropTypes.string,\n\n maxWidth: PropTypes.string,\n\n /** If button should grow to occupy all available space */\n block: PropTypes.bool,\n\n icon: PropTypes.string,\n onClick: PropTypes.func,\n selected: PropTypes.bool,\n style: PropTypes.object,\n};\n\nButton.propTypes = ButtonPropTypes\nexport default Button;\n","import Input from \"@javascript/reactComponents/lds/Input\";\nimport Button from \"@javascript/reactComponents/lds/Button\";\n\nimport { useState } from \"react\";\n\nconst ApolloApiPanel = () => {\n const [apiKey, setApiKey] = useState(\"\");\n const [saving, setSaving] = useState(false);\n const [errorMsg, setErrorMsg] = useState(\"\");\n const [errorLevel, setErrorLevel] = useState(\"\");\n\n const handleValueChange = (value) => {\n setApiKey(value);\n };\n\n const fetchAPIKey = async () => {\n const url = \"/settings/apollo_api_status\";\n const response = await fetch(url, {\n method: \"GET\",\n });\n\n if (response.ok) {\n const data = await response.json();\n return data.configured;\n }\n\n return false;\n };\n\n const handleSave = async () => {\n setSaving(true);\n\n const apiSet = await fetchAPIKey();\n let confirmed = null;\n\n if (apiSet) {\n confirmed = confirm(\"API key already exists. Are you sure?\");\n\n if (!confirmed) {\n setSaving(false);\n return;\n }\n }\n\n try {\n const url = \"/settings/save_apollo_api_key\";\n const response = await fetch(url, {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n \"X-CSRF-Token\": document.querySelector('meta[name=\"csrf-token\"]')\n .content,\n },\n body: JSON.stringify({ api_key: apiKey }),\n });\n\n if (response.ok) {\n const data = await response.json();\n if (data.success) {\n setErrorMsg(\"API key saved successfully!\");\n setErrorLevel(\"success\");\n setApiKey(\"\");\n } else {\n setErrorMsg(\"Invalid API key. Please check.\");\n setErrorLevel(\"error\");\n }\n } else {\n setErrorMsg(\"The API key could not be saved. Please try again later.\");\n setErrorLevel(\"error\");\n }\n } catch (error) {\n } finally {\n setSaving(false);\n }\n };\n\n const errorStyle = {\n color: errorLevel === \"error\" ? \"red\" : \"green\",\n fontWeight: \"bold\",\n paddingBottom: \"10px\",\n };\n\n const KEY_MAX_LENGTH = 22;\n const variant =\n saving || apiKey.length !== KEY_MAX_LENGTH ? \"disable\" : \"primary\";\n\n return (\n
    \n {errorMsg &&

    {errorMsg}

    }\n
    \n
    \n {}}\n onValueChange={handleValueChange}\n placeholder=\"Your Apollo API Key\"\n disabled={saving}\n size=\"medium\"\n showClearIcon={false}\n maxLength={KEY_MAX_LENGTH}\n value={apiKey}\n width={300}\n />\n
    \n
    \n {\n handleSave(apiKey);\n }}\n >\n {saving ? \"Saving...\" : \"Save\"}\n \n
    \n
    \n
    \n );\n};\n\nwindow.ApolloApiPanel = ApolloApiPanel;\nexport default ApolloApiPanel;\n","import { createContext } from \"react\";\n\nconst BannerContext = createContext({\n variant: \"info\",\n inverse: false,\n onDismiss: null,\n});\n\nexport default BannerContext;\n","import React from \"react\";\nimport PropTypes from \"prop-types\";\nimport BannerContext from \"./BannerContext\";\n\nconst BANNER_VARIANTS = Object.freeze([\n \"critical\",\n \"info\",\n \"success\",\n \"warning\",\n]);\n\nconst BANNER_ALERT_VARIANTS = Object.freeze([\"critical\", \"warning\"]);\n\nexport default function Banner({\n children,\n className,\n id,\n inverse = false,\n variant = \"info\",\n onDismiss,\n}) {\n const isAlert = () => {\n return BANNER_ALERT_VARIANTS.includes(variant);\n };\n\n const commonProps = {\n id,\n };\n\n const classNames = [\n \"lds-banner-container\",\n `lds-banner-container-${variant}${inverse ? \"-inverse\" : \"\"}`,\n ];\n\n if (className) {\n classNames.push(className);\n }\n\n return (\n \n \n {children}\n \n
    \n );\n}\n\nBanner.propTypes = {\n className: PropTypes.string,\n id: PropTypes.string,\n inverse: PropTypes.bool,\n variant: PropTypes.oneOf(BANNER_VARIANTS),\n onDismiss: PropTypes.func,\n};\n\nexport { BANNER_VARIANTS, BANNER_ALERT_VARIANTS };\n","import React from \"react\";\nimport PropTypes from \"prop-types\";\nimport Banner from \"@javascript/reactComponents/lds/notifications/Banner\";\nimport { useContext, useRef } from \"react\";\nimport BannerContext from \"./BannerContext\";\nimport Icon from \"../Icon\";\nimport { isTextElementWrapped } from \"@javascript/reactComponents/utilities/DOMUtilities\";\n\nexport default function BannerHeading({\n children,\n className,\n leadingIcon = null,\n trailingAction = null,\n variant,\n}) {\n const headingRef = useRef()\n const context = useContext(BannerContext);\n const { inverse, onDismiss } = context;\n\n variant ||= context.variant;\n leadingIcon ||= (\n \n );\n\n const classNames = [\n `lds-banner-heading`,\n `lds-banner-heading-${variant}${inverse ? \"-inverse\" : \"\"}`,\n ];\n\n if (className) {\n classNames.push(className);\n }\n\n const alignSelfStart = isTextElementWrapped(headingRef.current) ? \"align-self-start\" : \"center\";\n\n return (\n
    \n
    \n {leadingIcon}\n {children}\n
    \n\n
    \n {trailingAction && (\n
    \n {trailingAction}\n
    \n )}\n\n {onDismiss && }\n
    \n
    \n );\n}\n\nfunction CloseIcon() {\n const { onDismiss } = useContext(BannerContext);\n\n return (\n
    \n \n
    \n );\n}\n\nBannerHeading.propTypes = {\n className: PropTypes.string,\n leadingIcon: PropTypes.element,\n trailingAction: PropTypes.element,\n variant: Banner.propTypes.variant,\n};\n","import React from \"react\";\nimport PropTypes from \"prop-types\";\n\nimport Banner from \"./Banner\";\nimport BannerHeading from \"./BannerHeading\";\nimport Icon from \"../Icon\";\n\nconst Toast = ({\n headingClassName,\n id,\n title,\n trailingAction = null,\n inverse = false,\n variant = \"info\",\n}) => {\n\n const headingClassNames = [\"lds-banner-heading-light-font\"];\n\nif(headingClassName) {\n headingClassNames.push(headingClassName);\n }\n\n const leadingIcon = \n\n return (\n \n \n {title}\n \n \n );\n}\n\nToast.propTypes = {\n className: Banner.propTypes.className,\n id: Banner.propTypes.id,\n title: PropTypes.string,\n trailingAction: BannerHeading.propTypes.trailingAction,\n inverse: PropTypes.bool,\n variant: Banner.propTypes.variant,\n};\n\nwindow.Toast = Toast;\nexport default Toast;\n","import React from \"react\";\nimport PropTypes from \"prop-types\";\n\nimport Toast from \"@javascript/reactComponents/lds/notifications/Toast\";\n\nconst TOAST_FLASH_TYPE_MAP = {\n alert: \"warning\",\n error: \"critical\",\n notice: \"info\",\n success: \"success\",\n};\n\nexport default function FlashToast({ flashMessages = {} }) {\n const toastMessages = [];\n\n for (const messageType in flashMessages) {\n toastMessages.push(\n \n );\n }\n\n return
    {toastMessages}
    ;\n}\n\nFlashToast.propTypes = {\n flashMessages: PropTypes.shape({\n notice: PropTypes.string,\n alert: PropTypes.string,\n error: PropTypes.string,\n success: PropTypes.string,\n }),\n};\n\nwindow.FlashToast = FlashToast;\n\nexport { TOAST_FLASH_TYPE_MAP };\n","import { useLayoutEffect, useRef } from \"react\";\n\n/**\n * DANGEROUS!!!!!!\n *\n * This is meant as a backwards-compatability tool\n * until we've re-written all legacy components as React.\n *\n * This component will render the given HTML and execute any script\n * tags that it finds as well. Use this CAREFULLY as it's basically\n * the equivalent of blindly eval'ing code.\n *\n * Taken with help from: https://macarthur.me/posts/script-tags-in-react/\n */\n\nconst ComponentFromHTML = ({ html }) => {\n const containerRef = useRef();\n\n useLayoutEffect(() => {\n if (containerRef.current) {\n const fragment = document.createRange().createContextualFragment(html);\n\n const scripts = fragment.querySelectorAll('script');\n scripts.forEach((script) => {\n const scriptEl = document.createElement('script');\n Array.from(script.attributes).forEach(attr => scriptEl.setAttribute(attr.name, attr.value));\n scriptEl.textContent = script.textContent;\n script.parentNode.replaceChild(scriptEl, script);\n });\n\n containerRef.current.innerHTML = '';\n containerRef.current.appendChild(fragment);\n }\n }, [html]);\n\n return
    ;\n};\n\nexport default ComponentFromHTML;\n","import { createContext } from \"react\";\n\nexport default createContext({\n open: false,\n onClose: () => {},\n});\n","export function ModalBody({ className = \"\", children }) {\n return
    {children}
    ;\n}\n","import PropTypes from \"prop-types\";\n\nexport function ModalFooter({ align = \"start\", children }) {\n return (\n
    \n {children}\n
    \n );\n}\n\nModalFooter.propTypes = {\n align: PropTypes.string,\n};\n","import React from \"react\";\nimport PropTypes from \"prop-types\";\n\nfunction ButtonGroup({ id, size, children, className }) {\n return (\n \n {children}\n
    \n );\n}\n\nexport const ButtonGroupPropTypes = {\n size: PropTypes.oneOf([\"small\", \"medium\", \"large\", \"segmented\"]).isRequired,\n children: PropTypes.node.isRequired,\n};\n\nButtonGroup.propTypes = ButtonGroupPropTypes;\nexport default ButtonGroup;\n","import React from \"react\";\nimport PropTypes from \"prop-types\";\nimport Icon from \"../Icon\";\n\n/** A component for when the trailing icon inside a Chip is clickable */\nexport default function ChipAction({\n alignSelfStart,\n className,\n dataTestId,\n icon,\n onClick,\n size = \"medium\",\n variant = \"primary\",\n}) {\n const classNames = [\n \"lds-chip-action-container-\" + size,\n \"lds-chip-action-container-\" + variant,\n alignSelfStart || \"\",\n className || \"\",\n ];\n\n const disabled = variant === \"disabled\";\n\n const handleClick = (event) => {\n event.stopPropagation();\n onClick();\n };\n\n return (\n \n \n \n );\n}\n\nChipAction.propTypes = {\n alignSelfStart: PropTypes.string,\n className: PropTypes.string,\n dataTestId: PropTypes.string,\n icon: PropTypes.string,\n onClick: PropTypes.func,\n size: PropTypes.oneOf([\"small\", \"medium\"]),\n variant: PropTypes.oneOf([\n \"primary\",\n \"secondary\",\n \"primaryCritical\",\n \"secondaryCritical\",\n \"disabled\",\n ]),\n};\n","import React, { useRef, useLayoutEffect, useState } from \"react\";\nimport PropTypes from \"prop-types\";\n\nimport ChipAction from \"@javascript/reactComponents/lds/chips/ChipAction\";\nimport { isTextElementWrapped } from \"@javascript/reactComponents/utilities/DOMUtilities\";\n\nexport default function Chip({\n className,\n href,\n id,\n label,\n leadingIcon,\n onClick,\n selected = false,\n size = \"medium\",\n style = {},\n title,\n trailingIcon,\n trailingIconClassName,\n trailingIconOnClick,\n variant = \"primary\",\n width = \"fit-content\",\n}) {\n\n const classNames = [\"lds-chip-\" + size];\n const hasTrailingIcon = trailingIcon && trailingIconOnClick;\n\n const labelRef = useRef();\n const [isWrapped, setIsWrapped] = useState(false);\n\n const checkWrapping = () => {\n if (labelRef.current) {\n setIsWrapped(isTextElementWrapped(labelRef.current));\n }\n };\n\n useLayoutEffect(() => {\n checkWrapping();\n }, []);\n\n const alignSelfStart = isWrapped ? \"align-self-start\" : \"\";\n\n if(isWrapped) {\n classNames.push(\"multiline\");\n }\n\n const mergedStyle = {\n ...style,\n width: width,\n };\n\n if (!hasTrailingIcon) {\n if (trailingIcon) {\n console.warn(\n \"[LDS WARNING - Chip] Trailing icon must have an action attached.\"\n );\n } else if (trailingIconOnClick) {\n console.warn(\n \"[LDS WARNING - Chip] A trailing icon onClick was provided without a trailing icon.\"\n );\n }\n }\n\n if (variant !== \"none\") {\n classNames.push(\"lds-chip-\" + variant);\n }\n\n // When both onClick are provided, we only want the trailing icon hover/active effects to change\n if ((onClick && !trailingIconOnClick) || href) {\n classNames.push(\"lds-chip-selectable\");\n }\n\n if (leadingIcon) {\n classNames.push(\"lds-chip-has-leading-icon\");\n }\n\n if (trailingIcon) {\n classNames.push(\"lds-chip-has-trailing-icon\");\n }\n\n if (selected) {\n classNames.push(\"lds-chip-selected\")\n }\n\n if (!label) {\n classNames.push(\"lds-chip-no-label\")\n }\n\n if (href && onClick) {\n console.error(\n \"[LDS ERROR - Chip] Both `href` and `onClick` were provided to Chip. Only one is allowed at a time.\"\n );\n }\n\n const disabled = variant === \"disabled\";\n classNames.push(className);\n\n const ChipComponent = (\n \n {leadingIcon && (\n \n )}\n {\n labelRef.current = ref;\n }}\n className=\"lds-chip-label\"\n >\n {label}\n \n\n {hasTrailingIcon && (\n \n )}\n \n );\n\n if (href) {\n return (\n \n {ChipComponent}\n \n );\n } else {\n return ChipComponent\n }\n\n}\n\nChip.propTypes = {\n className: PropTypes.string,\n href: PropTypes.string,\n id: PropTypes.string,\n label: PropTypes.oneOfType([\n PropTypes.string,\n PropTypes.node\n ]).isRequired,\n leadingIcon: PropTypes.string,\n onClick: PropTypes.func,\n selected: PropTypes.bool,\n size: PropTypes.oneOf([\"small\", \"medium\"]),\n style: PropTypes.object,\n title: PropTypes.string,\n trailingIcon: PropTypes.string,\n trailingIconClassName: PropTypes.string,\n trailingIconOnClick: PropTypes.func,\n variant: PropTypes.oneOf([\n \"disabled\",\n \"none\",\n \"primary\",\n \"primaryCritical\",\n \"secondary\",\n \"secondaryCritical\",\n ]),\n width: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\n};\n","import React from \"react\";\n\nimport Chip from \"../../lds/chips/Chip\";\n\nexport default function EntityChip({ label, leadingIcon, size = \"medium\" }) {\n return (\n \n );\n}\n\nEntityChip.propTypes = {\n label: Chip.propTypes.label,\n size: Chip.propTypes.size,\n leadingIcon: Chip.propTypes.leadingIcon\n}\n","import React from \"react\";\n\nconst ScrollableList = ({ children, style }) => {\n return (\n
    \n {children}\n
    \n );\n};\n\nexport default ScrollableList;\n","export default function BannerBody({ children }) {\n return (\n
    \n {children}\n
    \n )\n}\n","import React, { useContext } from \"react\";\nimport EntityChip from \"../../../shared/chips/EntityChip\";\nimport { DeleteModalContext } from \"../ListDeleteModal\";\nimport ScrollableList from \"../ScrollableList\";\n\nimport BannerHeading from \"@javascript/reactComponents/lds/notifications/BannerHeading\";\nimport BannerBody from \"@javascript/reactComponents/lds/notifications/BannerBody\";\nimport Banner from \"@javascript/reactComponents/lds/notifications/Banner\";\n\nconst ListDeleteModalPreviewBody = () => {\n const { selectedLists } = useContext(DeleteModalContext);\n const isSingleList = selectedLists.size === 1;\n\n const listRows = [...selectedLists.values()].map((list) => {\n return (\n
    \n \n

    {list.name}

    \n
    \n );\n });\n\n return (\n <>\n \n This action is irreversible\n \n { isSingleList ?\n

    Are you sure you wish to delete this list? List once deleted cannot be retrieved again.

    \n :\n

    \n All the selected lists will be permanently removed and you won't be\n able to retrieve them, including the ones you've shared with your\n colleagues.\n

    \n }\n
    \n
    \n {listRows}\n \n );\n};\n\nexport default ListDeleteModalPreviewBody;\n","import React from \"react\";\nimport Toast from \"@javascript/reactComponents/lds/notifications/Toast\";\n\nconst ToastBanner = ({title, variant, className, children}) => {\n return(\n
    \n \n
    \n {children}\n
    \n
    \n )\n}\n\nexport default ToastBanner\n","import React from \"react\";\nimport PropTypes from \"prop-types\";\nimport Icon from \"@javascript/reactComponents/lds/Icon\";\n\nconst Heading = React.forwardRef(({\n children,\n className, \n containerClassName,\n extraGapTop,\n id,\n leadingIcon = \"\",\n size,\n tooltip = \"\",\n trailingAction,\n}, ref) => {\n const containerClassNames = [\"lds-heading-container-\" + size];\n const textClassNames = [\"lds-heading-\" + size];\n\n if (extraGapTop) {\n containerClassNames.push(\"extra-space-top\");\n }\n\n if(containerClassName) {\n containerClassNames.push(containerClassName);\n }\n\n containerClassNames.push(className)\n\n return (\n \n {leadingIcon && (\n \n )}\n {children}\n {trailingAction}\n \n );\n});\n\nHeading.displayName = \"Heading\";\n\nHeading.propTypes = {\n children: PropTypes.any,\n className: PropTypes.string,\n containerClassName: PropTypes.string,\n extraGapTop: PropTypes.bool,\n id: PropTypes.string,\n leadingIcon: PropTypes.string,\n size: PropTypes.oneOf([\"h1\", \"h2\", \"h3\", \"h4\"]).isRequired,\n tooltip: PropTypes.string,\n trailingAction: PropTypes.element,\n};\n\nexport default Heading;\n","import React, { useContext } from \"react\";\nimport Icon from \"../../../lds/Icon\";\nimport { DeleteModalContext } from \"../ListDeleteModal\";\nimport ToastBanner from \"../ToastBanner\";\nimport Heading from \"@javascript/reactComponents/lds/typography/Heading\";\nimport BannerHeading from \"@javascript/reactComponents/lds/notifications/BannerHeading\";\nimport BannerBody from \"@javascript/reactComponents/lds/notifications/BannerBody\";\nimport Banner from \"@javascript/reactComponents/lds/notifications/Banner\";\n\nconst ListDeleteModalDeletingBody = () => {\n const { selectedLists } = useContext(DeleteModalContext);\n\n return (\n
    \n \n\n \n Deleting {selectedLists.size} list{selectedLists.size === 1 ? \"\" : \"s\"}...\n \n\n \n Taking too long?\n \n

    \n You can close this window at any time and we will delete your lists in\n the background for you. Access all your generated lists by visiting{\" \"}\n Lists.\n

    \n
    \n
    \n
    \n );\n};\n\nexport default ListDeleteModalDeletingBody;\n","import React from \"react\";\nimport Icon from \"../../../lds/Icon\";\nimport Heading from \"@javascript/reactComponents/lds/typography/Heading\";\n\nconst ListDeleteModalSuccessBody = () => {\n return (\n
    \n \n\n \n Lists deleted successfully!\n \n
    \n );\n};\n\nexport default ListDeleteModalSuccessBody;\n","import React, { useContext } from \"react\";\nimport { DeleteModalContext } from \"../ListDeleteModal\";\nimport ListDeleteModalPreviewBody from \"./ListDeleteModalPreviewBody\";\nimport ListDeleteModalDeletingBody from \"./ListDeleteModalDeletingBody\";\nimport ListDeleteModalSuccessBody from \"./ListDeleteModalSuccessBody\";\n\nconst ListDeleteModalBody = () => {\n\n const { deleteState } = useContext(DeleteModalContext);\n\n switch(deleteState) {\n case \"preview\":\n return (\n \n )\n case \"deleting\":\n return(\n \n )\n case \"success\":\n return (\n \n )\n }\n}\n\nexport default ListDeleteModalBody;","import React, { useContext } from \"react\";\nimport Button from \"../../lds/Button\";\nimport { DeleteModalContext } from \"./ListDeleteModal\";\n\nconst DeleteListButtons = () => {\n const { cancelModal, setDeleteState, onDeleteLists, selectedLists, isFromIndividualListPage } = useContext(DeleteModalContext);\n const numLists = selectedLists.size;\n\n return (\n <>\n \n Cancel\n \n {\n if (isFromIndividualListPage) {\n onDeleteLists(null);\n } else {\n setDeleteState(\"deleting\");\n onDeleteLists(setDeleteState);\n }\n }}\n >\n Delete {numLists === 1 ? \"List\" : \"All \" + numLists + \" Lists\"}\n \n \n )\n}\n\nexport default DeleteListButtons;\n","import React, { useContext } from \"react\";\nimport Button from \"../../lds/Button\";\nimport { DeleteModalContext } from \"./ListDeleteModal\";\n\nconst CloseButton = () => {\n const { cancelModal, resetCategory, deleteState, lists } = useContext(DeleteModalContext);\n return (\n {\n if (deleteState === \"success\" && lists.length === 0) {\n resetCategory();\n }\n cancelModal();\n }}\n >\n Close\n \n )\n}\n\nexport default CloseButton;\n","import React, { useContext } from \"react\";\nimport { DeleteModalContext } from \"../ListDeleteModal\";\nimport DeleteListButtons from \"../DeleteListButtons\";\nimport CloseButton from \"../CloseButton\";\n\nconst ListDeleteModalActionsBar = () => {\n const { deleteState } = useContext(DeleteModalContext);\n\n return (\n deleteState === \"preview\" ? : \n )\n}\n\nexport default ListDeleteModalActionsBar;","import React, {useState, createContext} from \"react\";\nimport PropTypes from \"prop-types\";\nimport ButtonGroup from \"../../lds/ButtonGroup\";\nimport ListDeleteModalBody from \"./listDeleteModal/ListDeleteModalBody\";\nimport ListDeleteModalActionsBar from \"./listDeleteModal/ListDeleteModalActionsBar\";\nimport {Modal, ModalBody, ModalFooter, ModalHeader} from \"@javascript/reactComponents/lds/modal/Modal\";\n\nconst DeleteModalContext = createContext({\n onDeleteLists: (e) => {},\n cancelModal: (e) => {},\n resetCategory: (e) => {},\n selectedLists: new Map(),\n deleteState: \"\",\n setDeleteState: (e) => {},\n lists: [],\n isFromIndividualListPage: false,\n});\n\nconst ListDeleteModal = ({ onDeleteLists, cancelModal, resetCategory, selectedLists, lists, isFromIndividualListPage }) => {\n const [deleteState, setDeleteState] = useState(\"preview\");\n const isSingleList = selectedLists.size === 1;\n\n if (deleteState === \"deleting\" && selectedLists.size === 0) {\n setDeleteState(\"success\");\n }\n\n return (\n \n \n \n \n \n \n \n \n \n \n \n \n \n )\n}\n\nListDeleteModal.propTypes = {\n onDeleteLists: PropTypes.func.isRequired,\n cancelModal: PropTypes.func.isRequired,\n resetCategory: PropTypes.func.isRequired,\n selectedLists: PropTypes.instanceOf(Map).isRequired,\n}\n\nexport default ListDeleteModal;\nexport { DeleteModalContext };\nwindow.ListDeleteModal = ListDeleteModal;\n","import { useContext } from \"react\";\nimport PropTypes from \"prop-types\";\n\nimport Icon from \"@javascript/reactComponents/lds/Icon\";\nimport ModalContext from \"@javascript/reactComponents/lds/modal/ModalContext\";\nimport {DeleteModalContext} from \"@reactComponents/lists/v2/ListDeleteModal\";\n\nexport function ModalHeader({ allowClose = true, title, children }) {\n const { onClose } = useContext(ModalContext);\n const { resetCategory, deleteState, lists } = useContext(DeleteModalContext);\n\n return (\n
    \n {title}\n {children}\n\n
    \n\n {allowClose && (\n \n \n \n )}\n
    \n );\n}\n\nModalHeader.propTypes = {\n title: PropTypes.string,\n allowClose: PropTypes.bool,\n};\n","import { useClickAway, useLockBodyScroll } from \"@uidotdev/usehooks\";\n\nimport { createPortal } from \"react-dom\";\nimport { useContext } from \"react\";\nimport PropTypes from \"prop-types\";\n\nimport ModalContext from \"@javascript/reactComponents/lds/modal/ModalContext\";\nimport { useEffect } from \"react\";\n// Import and re-export Modal components\nexport { ModalBody } from \"@javascript/reactComponents/lds/modal/ModalBody\";\nexport { ModalFooter } from \"@javascript/reactComponents/lds/modal/ModalFooter\";\nexport { ModalHeader } from \"@javascript/reactComponents/lds/modal/ModalHeader\";\n\nfunction ModalBackdrop({ children, onClick }) {\n return (\n
    \n {children}\n
    \n );\n}\n\nfunction ModalInner({\n id,\n children,\n persistent = true,\n distanceFromTopViewport = null,\n size = \"medium\",\n maxHeight = \"80vh\",\n width = null,\n}) {\n const { onClose } = useContext(ModalContext);\n const closeFunction = persistent ? onClose : function () {};\n const modalContentRef = useClickAway(closeFunction);\n\n useEffect(() => {\n const originalOverflow = document.body.style.overflow\n document.body.style.overflow = \"hidden\"\n\n return () => {document.body.style.overflow = originalOverflow}\n }, [])\n\n const style = {\n width: width || `var(--modal-size-width-${size})`,\n maxHeight,\n };\n\n if (distanceFromTopViewport) {\n style.alignSelf = \"start\";\n style.marginTop = distanceFromTopViewport;\n }\n\n return (\n \n e.stopPropagation()}\n >\n {children}\n
    \n \n );\n}\n\nexport function Modal({\n onClose,\n open,\n // ModalInner.propTypes\n children,\n distanceFromTopViewport,\n id,\n maxHeight,\n persistent,\n size,\n verticallyCentered,\n width,\n}) {\n onClose ||= function () {};\n\n if (!open) return null;\n\n return createPortal(\n \n \n ,\n document.body\n );\n}\n\nModal.propTypes = {\n onClose: PropTypes.func,\n open: PropTypes.bool.isRequired,\n ...ModalInner.propTypes,\n};\n\nModalInner.propTypes = {\n distanceFromTopViewport: PropTypes.any,\n id: PropTypes.string,\n maxHeight: PropTypes.any,\n persistent: PropTypes.bool,\n size: PropTypes.oneOf([\"medium\", \"large\"]),\n verticallyCentered: PropTypes.bool,\n width: PropTypes.any,\n};\n","import PropTypes from \"prop-types\";\n\nimport ComponentFromHTML from \"@javascript/reactComponents/shared/ComponentFromHTML\";\nimport LegacyModalService from \"@javascript/globals/LegacyModalService\";\n\nimport {\n Modal,\n ModalHeader,\n} from \"@javascript/reactComponents/lds/modal/Modal\";\n\nexport default function GenericLegacyModal({\n distanceFromTopViewport = null,\n legacyModalContent,\n size = \"medium\",\n title,\n}) {\n\n return (\n \n {/*\n Title markup is somewhat more complex than body or footer\n so it's better if we don't have to write it every time\n */}\n {title && }\n\n \n \n );\n}\n\nGenericLegacyModal.propTypes = {\n distanceFromTopViewport: PropTypes.string,\n legacyModalContent: PropTypes.any,\n size: PropTypes.oneOf([\"medium\", \"large\"]),\n title: PropTypes.string,\n};\n\nwindow.GenericLegacyModal = GenericLegacyModal;\n","import { useEffect } from \"react\"\n\nconst GenericModal = (props) => {\n useEffect(() => {\n return () => {\n document.body.style.overflow = 'auto';\n }\n }, [])\n\n const modalStyles = {\n position: 'fixed',\n top: 0, left: 0, bottom: 0, right: 0,\n zIndex: 10000,\n backgroundColor: 'rgba(0,0,0,0.75)',\n\n display: 'flex',\n flexDirection: 'column',\n justifyContent: 'center',\n alignItems: 'center',\n }\n\n const modalContentStyle = {\n borderRadius: '5px',\n backgroundColor: 'white',\n ...(props.style || {})\n }\n\n if (!props.open) {\n document.body.style.overflow = 'auto'\n return null\n }\n\n document.body.style.overflow = 'hidden'\n\n return (\n
    \n
    \n { props.children }\n
    \n
    \n )\n}\n\nwindow.GenericModal = GenericModal;\nexport default GenericModal;\n","const GenericModalActions = ({ children, style }) => {\n const modalActionsStyle = {\n display: \"flex\",\n flexDirection: \"row\",\n padding: \"18px\",\n ...(style || {})\n }\n\n return (\n
    \n { children }\n
    \n )\n\n}\n\nwindow.GenericModalActions = GenericModalActions;\nexport default GenericModalActions;\n","const GenericModalBody = ({ style, children }) => {\n\n const styles = {\n flex: 1,\n padding: '18px',\n border: 'solid 1px rgba(0,0,0,0.1)',\n borderLeft: 'none',\n borderRight: 'none',\n ...style\n }\n\n return (\n
    \n { children }\n
    \n )\n}\n\n\n\nwindow.GenericModalBody = GenericModalBody;\nexport default GenericModalBody;","const GenericModalHeader = ({style, children}) => {\n\n const styles = {\n display: 'flex',\n flexDirection: 'row',\n alignItems: 'center',\n padding: '18px',\n fontSize: '14pt',\n ...style\n }\n\n return (\n
    \n { children }\n
    \n )\n}\n\nwindow.GenericModalHeader = GenericModalHeader;\nexport default GenericModalHeader;\n","import PropTypes from \"prop-types\";\n\nimport Button from \"@javascript/reactComponents/lds/Button\";\nimport Heading from \"@javascript/reactComponents/lds/typography/Heading\";\nimport Icon from \"@javascript/reactComponents/lds/Icon\";\nimport LegacyModalService from \"@javascript/globals/LegacyModalService\";\n\nimport {\n Modal,\n ModalBody,\n ModalFooter,\n ModalHeader,\n} from \"@javascript/reactComponents/lds/modal/Modal\";\n\nconst GenericErrorModal = ({\n distanceFromTopViewport= \"75px\",\n modalBody = \"We're sorry, but something went wrong. Please reload the page.\",\n modalHeader = \"Something went wrong\",\n onClose = LegacyModalService.closeModal,\n open= true,\n reloadPage = true,\n}) => {\n\n let modalFooter = (\n \n Close\n \n );\n\n const reloadThePage = () => {\n window.location.reload();\n };\n\n\n if(reloadPage) {\n modalFooter = (\n \n Reload Page\n \n );\n }\n\n return (\n \n \n {modalHeader}\n \n \n \n \n We encountered an unexpected error.\n \n

    {modalBody}

    \n \n \n {modalFooter}\n \n \n );\n};\n\nGenericErrorModal.propTypes = {\n distanceFromTopViewport: PropTypes.string,\n modalBody: PropTypes.string,\n modalHeader: PropTypes.string,\n onClose: PropTypes.func,\n open: PropTypes.bool,\n reloadPage: PropTypes.bool,\n};\n\nexport default GenericErrorModal;\n\nwindow.GenericErrorModal = GenericErrorModal;\n","import NavItem from \"../lds/NavItem\";\nimport PropTypes from \"prop-types\";\nimport SettingsDropdown from \"../settings/SettingsDropdown\";\n\nconst NavBarItems = ({\n navBarItems,\n selectedItem,\n settingsItems,\n settingsTrigger\n}) => {\n\n const navItems = navBarItems.map((item, index) => {\n return ;\n });\n\n const navTrigger = {...settingsTrigger, selectedItem: selectedItem, trailingIcon: \"chevron-down\"}\n\n const items = settingsItems.map(setting => ({\n ...setting,\n selected: selectedItem === `${setting.leadingIcon}_nav_item`\n }));\n\n return(\n
    \n {navItems}\n \n
    \n );\n}\n\nNavBarItems.propTypes = {\n navBarItems: PropTypes.array.isRequired,\n selectedItem: PropTypes.string,\n settingsItems: PropTypes.array.isRequired,\n settingsTrigger: PropTypes.object\n}\n\nwindow.NavBarItems = NavBarItems;\nexport default NavBarItems;\n","import AutocompleteSuggestions from \"./autocompleteSuggestions\";\nimport SearchInput from \"../searchInput\";\n\nconst GenericAutocomplete = createReactClass({\n getInitialState: function(){\n return {\n userInput: '',\n // List we use to check what suggestions are available\n // (requires an array of strings)\n masterList: this.props.suggestions,\n filteredSuggestions: this.props.suggestions.slice()\n }\n },\n // In the case that new suggestions become available, rerender the suggestions\n // (Needed when the masterlist of selectable objects is modified outside of this component)\n componentDidUpdate(prevProps) {\n if (prevProps.suggestions.length !== this.props.suggestions.length) {\n let filteredSuggestions = this.getFilteredSuggestions(this.props.suggestions.slice(), this.state.userInput)\n this.setState({filteredSuggestions: filteredSuggestions, masterList: this.props.suggestions});\n }\n },\n searchFunction: function(searchString) {\n let filteredSuggestions = this.getFilteredSuggestions(this.props.suggestions.slice(), searchString)\n this.setState({userInput: searchString, filteredSuggestions: filteredSuggestions});\n },\n onClick: function(e) {\n this.props.onClick(e.currentTarget.innerText, e)\n },\n getFilteredSuggestions: function(suggestionsAvailable, searchString) {\n return suggestionsAvailable.filter(\n suggestion =>\n suggestion.toLowerCase().indexOf(searchString.toLowerCase()) > -1\n );\n },\n render: function(){\n let classNames = this.props.classNames;\n let placeHolder = this.props.placeHolder;\n let suggestions = this.state.userInput ? : null;\n return (\n
    \n
    \n \n
    \n {suggestions}\n
    \n );\n }\n});\n\nwindow.GenericAutocomplete = GenericAutocomplete;\nexport default GenericAutocomplete;\n","const AffiliatedWithCard = (props) => {\n\n const toggleAffiliations = (e) => {\n e.stopPropagation();\n e.preventDefault();\n const toggleAllCharacteristics = $(\"#toggle_all_characteristics\");\n toggleAllCharacteristics.prop(\"checked\", !toggleAllCharacteristics.prop(\"checked\"));\n all_characteristics_opened();\n };\n\n return (\n
    \n {props.data.name}\n
    \n );\n};\n\nexport default AffiliatedWithCard;\n","import AffiliatedWithCard from \"./affiliatedWithCard\";\n\nconst AffiliatedWithCards = (props) => {\n const returnCards = _.map(props.data, function(data, index){\n return \n });\n return (\n <>{returnCards}\n );\n};\n\nwindow.AffiliatedWithCards = AffiliatedWithCards;\nexport default AffiliatedWithCards;\n","/**\n * React component that displays an organization's cumulative funding for one of 3 years: current, prior, or two years prior\n *\n * @author GJ \n * @namespace CumulativeFundingByYear\n * @memberof window unfortunately\n *\n * @component\n * @example\n * return (\n * \n * )\n *\n * @param {object} props Component props\n * @param {object} props.year number denoting the ordinal year, index 0\n * @param {object} props.yearData object denoting of that year's funding info\n *\n */\nconst CumulativeFundingByYear = (props) => {\n let amount = props.yearData.amount;\n let formattedAmount = makeMillions(amount);\n\n return (\n
    \n {props.yearData.label}{formattedAmount}\n
    \n );\n};\n\nCumulativeFundingByYear.propTypes = {\n yearData: PropTypes.shape({\n label: PropTypes.string,\n amount: PropTypes.number\n }).isRequired\n};\n\nexport default CumulativeFundingByYear;\n","import CumulativeFundingByYear from \"./cumulativeFundingByYear\";\n\n/**\n * React component that displays an organization's cumulative funding for the past 3 years\n *\n * @author GJ \n * @namespace CumulativeFundingCalendarYears\n *\n * @component\n * @example\n * return (\n * \n * )\n *\n * @param {object} props Component props\n * @param {array} props.yearsAvailable array of objects denoting of cumulative funding info for 3 years\n *\n */\nconst CumulativeFundingCalendarYears = (props) => {\n const cumulative_by_year = _.map(props.yearsAvailable, function(yearData, index){\n return \n });\n return (\n
    \n
    Total funding over the last 3 years ($USD)
    \n
    \n {cumulative_by_year}\n
    \n
    \n );\n};\n\nCumulativeFundingCalendarYears.propTypes = {\n yearsAvailable: PropTypes.array.isRequired,\n};\n\nwindow.CumulativeFundingCalendarYears = CumulativeFundingCalendarYears;\nexport default CumulativeFundingCalendarYears;\n","import * as PropTypes from \"prop-types\";\n\n/**\n * React component that displays whether an organization has had funding events in the quarter\n *\n * @author GJ \n * @namespace FundingQuarter\n * @memberof window unfortunately\n *\n * @component\n *\n * @param {object} props Component props\n * @param {string} props.url organization's url\n * @param {string} props.quarter the ordinal number of the quarter, index 0\n * @param {object} props.fundingData object of quarterly funding data\n * @param {object} props.orgName the organization's name\n *\n */\nconst FundingQuarter = (props) => {\n let eventCircle =
    lens
    ;\n let eventLink = \"No events found.\";\n let labelClasses = [\"funding_quarter_label\", \"funding_quarter_label_unlit\"];\n if(props.fundingData.count > 0){\n eventCircle =
    check_circle
    ;\n let url = props.url + props.fundingData.url + \"&facets%5Borganizations%5D%5B%5D=\" + encodeURI(props.orgName).replace(/&/g, \"%26\");\n url = decodeHTMLContent(url)\n\n eventLink = Funding events found.;\n labelClasses.splice(1, 1);\n }\n return (\n
    \n
    {props.fundingData.quarter}
    \n
    {props.fundingData.quarterFull}\n {eventCircle}\n
    \n
    {eventLink}
    \n
    \n );\n};\n\nFundingQuarter.propTypes = {\n url: PropTypes.string.isRequired,\n quarter: PropTypes.number.isRequired,\n fundingData: PropTypes.shape({\n count: PropTypes.number,\n quarter: PropTypes.string,\n quarterFull: PropTypes.string,\n url: PropTypes.string,\n year: PropTypes.string\n }).isRequired,\n orgName: PropTypes.string.isRequired\n};\n\nexport default FundingQuarter;\n","import * as PropTypes from \"prop-types\";\nimport FundingQuarter from \"./fundingQuarter\";\n\n/**\n * React component that displays an organization's funding events for the past 8 quarters and cumulative funding amounts for the past 3 years\n *\n * @author GJ \n * @namespace FundingEventsCard\n *\n * @component\n * @example\n * return (\n * \n * )\n *\n * @param {object} props Component props\n * @param {string} props.url organization's url\n * @param {string} props.orgName organization's name\n * @param {object} props.cumulativeFunding object of cumulative funding info for 3 years\n * @param {object} props.fundingEvents object of 8 quarters of funding events\n *\n */\nconst FundingEventsCard = (props) => {\n\n const quarters = _.map(props.fundingEvents, function(fundingData, index){\n return \n }.bind(this));\n\n let cumulativeCalendarYears = null;\n let cumulativeDescription = null;\n let fundingEventsBlurb = 'over the last 8 quarters'\n\n if(props.cumulativeFunding.yearsAvailable) {\n fundingEventsBlurb = 'Events found over the last 8 quarters'\n cumulativeDescription =

    calendar year funding ($USD): amount {props.orgName} has raised over the last 2 calendar years.

    \n cumulativeCalendarYears = \n }\n\n return (\n
    \n \n
    \n \n
    \n
    \n
    \n

    Funding Events Found by {props.brandName}

    \n

    for {props.orgName}

    \n
    \n
    \n
    \n {cumulativeDescription}\n

    over the last 8 quarters: number of funding events {props.orgName} has completed in the past 8 quarters. Click the links to see those funding events.

    \n
    \n
    \n
    \n

    Funding Events Found by {props.brandName}

    \n {cumulativeCalendarYears}\n

    {fundingEventsBlurb}

    \n
    \n {quarters}\n
    \n
    \n
    \n
    \n
    \n );\n};\n\nFundingEventsCard.propTypes = {\n url: PropTypes.string.isRequired,\n orgName: PropTypes.string.isRequired,\n brandName: PropTypes.string.isRequired,\n cumulativeFunding: PropTypes.shape({\n yearsAvailable: PropTypes.array\n }).isRequired,\n fundingEvents: PropTypes.array.isRequired\n};\n\nwindow.FundingEventsCard = FundingEventsCard;\nexport default FundingEventsCard;\n","const PhaseBar = (props) => {\n const barClasses = [\"barchart_phase_bar\"];\n let pixels = 0;\n let phaseCountClass = \"barchart_phase_count\";\n\n let activeLink = props.phase_data.count;\n if(parseFloat(props.phase_data.count) === 0){\n barClasses.push(\"no_studies\");\n }\n else{\n if(parseFloat(props.phase_data.count) > 99){\n phaseCountClass = \"barchart_phase_count_10\";\n }\n pixels = (props.phase_data.count/props.max_phase*320)+30\n const url = props.url + '/facet_search?query=registered&facets%5Borganizations%5D%5B%5D=' + encodeURI(props.org_name).replace(/&/g, \"%26\") + '&category=all_event&time_select=time_any&clin_stage%5B%5D=' + props.phase_data.query + '&clin_status%5B%5D=Recruiting&clin_status%5B%5D=Enrolling+by+invitation&clin_status%5B%5D=Active%2C+not+recruiting&scroll=0&feature_track=frominfographic'\n activeLink = {props.phase_data.count};\n }\n\n const barStyle = {\n width: pixels + \"px\"\n }\n return (\n
    \n
    \n {props.phase_data.name}\n
    \n
    \n
    \n {activeLink}\n
    \n
    \n
    \n );\n};\n\nexport default PhaseBar;\n","import PhaseBar from \"./phaseBar\";\n\nconst ActiveStudiesCard = (props) => {\n const phaseBars = _.map(props.studies.active.phases, function(phase_data, index){\n return \n });\n let activeLink = props.studies.active.count\n if(props.studies.active.count > 0){\n const url = props.url + '/facet_search?query=registered&facets%5Borganizations%5D%5B%5D=' + encodeURIComponent(props.comparable.org_name).replace(/&/g, \"%26\") + '&category=all_event&time_select=time_any&clin_stage%5B%5D=clin_stage_1&clin_stage%5B%5D=clin_stage_2&clin_stage%5B%5D=clin_stage_3&clin_stage%5B%5D=clin_stage_4&clin_status%5B%5D=Recruiting&clin_status%5B%5D=Enrolling+by+invitation&clin_status%5B%5D=Active%2C+not+recruiting&scroll=0&feature_track=frominfographic'\n activeLink = {props.studies.active.count}\n }\n return (\n
    \n \n
    \n \n
    \n
    \n
    \n

    Active Studies

    \n

    in total

    \n
    \n
    \n Total number of active studies (broken out by phase) as according to clinicaltrials.gov and updated {props.comparable.date}\n
    \n
    \n

    Active Studies

    \n

    by total and by phase

    \n
    {activeLink}
    \n
    \n {phaseBars}\n
    \n
    \n
    \n
    \n
    \n

    * according to clinicaltrials.gov

    \n

    As of {props.comparable.date}

    \n
    \n
    \n );\n};\n\nwindow.ActiveStudiesCard = ActiveStudiesCard;\nexport default ActiveStudiesCard;\n","const SfIndexRow = createReactClass({\n jumpHere: function (e){\n e.stopPropagation();\n e.preventDefault();\n SFPanelActions.jump(this.props.account_id);\n },\n render: function () {\n const classes = {owner:'',opps:'',last_activity:''};\n let link = {this.props.account_name};\n let owner = \"-\";\n let opps = \"-\";\n let last_activity = \"-\";\n if(this.props.owner !== false){\n owner = this.props.owner;\n classes.owner = \"fade_in\";\n }\n if(this.props.opps !== false){\n opps = this.props.opps;\n if(opps > 24){\n opps = \"24+\";\n }\n classes.opps = \"fade_in\";\n }\n if(this.props.last_activity !== false){\n last_activity = moment(this.props.last_activity).add(12, 'h').format(\"dddd, MMMM D, YYYY\");\n classes.last_activity = \"fade_in\";\n }\n if(this.props.loaded !== false){\n link = {this.props.account_name};\n }\n return (\n
    \n
    {link}
    \n
    {owner}
    \n
    {opps}
    \n
    {last_activity}
    \n
    \n );\n }\n});\n\nexport default SfIndexRow;\n","import SfIndexRow from \"./sfIndexRow\";\n\nconst SfIndexTable = createReactClass({\n mixins: [Reflux.listenTo(SFAccountActionsStore,\"update_accounts\")],\n getInitialState: function(){\n return {\n accounts: this.props.accounts\n }\n },\n update_accounts: function(accounts) {\n this.setState({\n accounts: accounts\n });\n },\n render: function () {\n const sf_account_list = this.state.accounts.map(function(account_data, index){\n return \n });\n return (\n
    \n
    \n
    Name
    \n
    Account Owner
    \n
    Opportunities
    \n
    Last Activity
    \n
    \n
    \n {sf_account_list}\n
    \n
    \n );\n }\n});\n\nexport default SfIndexTable;\n","const SfIndexReturn = (props) => {\n const indexClick = (e) => {\n e.stopPropagation();\n e.preventDefault();\n SFPanelActions.jump(\"sf_index_table\");\n };\n const leadsClick = (e) => {\n e.stopPropagation();\n e.preventDefault();\n SFPanelActions.jump(\"sf_leads_div\");\n };\n const leadsLink = props.lead_count > 0 ? Leads card : null;\n return (\n
    \n Accounts index
    \n {leadsLink}\n
    \n );\n};\n\nexport default SfIndexReturn;\n\n","const SfAccountRow = (props) => {\n return (\n
    \n {props.children}\n
    \n );\n};\n\nexport default SfAccountRow;\n","const SfAccountTeam = (props) => {\n if(props.account_team && props.account_team.length > 0) {\n var team_list = props.account_team.map(function (team_member) {\n if (team_member.zw_user) {\n return team_member.name;\n }\n else {\n return team_member.name + \" (Non-\"+I18n.t(\"brand.name\")+\" User)\";\n }\n }).join(\", \");\n return (\n
    Account team: {team_list}
    \n );\n }\n else {\n return false;\n }\n};\n\nexport default SfAccountTeam;\n","import SfAccountTeam from \"./sfAccountTeam\";\n\nconst SfAccountName = (props) => {\n const account_click = (e) => {\n e.stopPropagation()\n e.preventDefault()\n SFPanelActions.trackEngagementEvent('Go to account in SF', {});\n window.open(props.url, '_blank')\n };\n const owner_is_zw = props.owner?.zw_user ? props.owner?.name : props.owner?.name + \"(Non \"+ I18n.t(\"brand.name\") + \" User)\";\n return (\n
    \n {props.account.Name}\n
    \n Account owner: {owner_is_zw}\n \n
    \n );\n};\n\nexport default SfAccountName;\n","import SfIndexReturn from \"./sfIndexReturn\";\nimport SfAccountRow from \"./sfAccountRow\";\nimport SfAccountName from \"./sfAccountName\";\n\nconst SfAccountHeader = (props) => {\n const indexReturn = props.accounts_count > 1 ? : null;\n return (\n \n \n {indexReturn}\n \n )\n};\n\nexport default SfAccountHeader;\n","const SfTabNav = createReactClass({\n mixins: [Reflux.listenTo(SFTabActionsStore,\"change_selected\")],\n getInitialState: function(){\n return {\n tab_selected:this.props.tab_selected\n };\n },\n change_selected: function(account, tabSelected) {\n if(account == this.props.id){\n this.setState({\n tab_selected: tabSelected\n });\n }\n },\n switch_tab: function (ev){\n SFTabActions.selectedTab(this.props.id, this.props.tab_content.type);\n },\n render: function(){\n const num = this.props.tab_content.data.length < 100 ? this.props.tab_content.data.length : \"99+\";\n const liClasses = [\"tabbed_nav_li\"];\n if(this.state.tab_selected === this.props.tab_content.type){\n liClasses.push('tabbed_current_tab');\n }\n return (\n
  • {this.props.tab_content.name} ({num})
  • \n );\n }\n});\n\nexport default SfTabNav;\n","const SfUserComment = createReactClass({\n getInitialState: function(){\n return {expanded: false};\n },\n toggle_expand: function(){\n this.setState({expanded: !this.state.expanded});\n return false;\n },\n render: function(){\n const commentDisplay = this.props.comment;\n if(commentDisplay && commentDisplay.length > 0){\n const longComment = commentDisplay.length > 200;\n if(longComment){\n if(this.state.expanded){\n return (
    {commentDisplay} ... less
    );\n }\n else{\n return (
    {commentDisplay.substring(0, 200)} ... more
    );\n }\n }\n else{\n return
    {commentDisplay}
    \n }\n }\n else{\n return false;\n }\n }\n});\n\nexport default SfUserComment;\n","import SfUserComment from \"./sfUserComment\";\n\nconst SfUserActivity = (props) => {\n const trackActivity = () => {\n SFPanelActions.trackEngagementEvent(\"View activity in SF\", {});\n };\n const trackRelation = () => {\n SFPanelActions.trackEngagementEvent(\"View activity in SF\", {reason: \"relation\"});\n };\n const keyDate = props.due_date ? props.due_date : props.sort_date;\n const actDate = moment(keyDate).add(12, \"h\");\n let relatedTo;\n if(props.related_to){\n const title = \"See this \" + props.related_to.type + \" in Salesforce\";\n relatedTo = related to {props.related_to.type} {props.related_to.name};\n }\n return (\n
    \n
    \n\t\t\t\t\t\n\t\t\t\t\t\t{props.subject}\n\t\t\t\t\t\n \n\t\t\t\t\t\t{actDate.fromNow()}\n\t\t\t\t\t\n
    \n {relatedTo}\n \n
    \n );\n};\n\nexport default SfUserActivity;\n","import SfUserActivity from \"./sfUserActivity\";\n\nconst SfUserToggle = createReactClass({\n getInitialState: function(){\n return {\n folded_unfolded:this.props.activities.owner?.zw_user ? \"checked\" : \"\"\n };\n },\n quiet_react: function (){\n // The whole “having to quiet react” doesn’t really sit well with me. Open to other ideas here.\n const quiet = \"react\";\n },\n fold_unfold: function (){\n this.setState({folded_unfolded: (this.state.folded_unfolded == \"checked\") ? \"\" : \"checked\"});\n },\n render: function () {\n const toggleId = this.props.count + \"_\" + this.props.account_id + \"_\" + this.props.type;\n const toggleDiv = toggleId + \"_div\";\n let activityDate = this.props.activities.due_date ? this.props.activities.due_date : this.props.activities.sort_date;\n activityDate = moment(activityDate).add(12, \"h\");\n activityDate = activityDate.format(\"ddd, MMMM Do, YYYY\");\n let initials = \"\\u2022\";\n let printName = this.props.activities.owner?.name + \" (Non \" + I18n.t(\"brand.name\") + \" User)\";\n let hexColor = \"#ccc !important\";\n let className = \"sf_non_zw_gravatar\";\n if(this.props.activities.owner?.zw_user){\n className = \"sf_zw_gravatar\";\n initials = this.props.activities.owner.name.match(/\\b\\w/g) || [];\n initials = ((initials.shift() || \"\") + (initials.pop() || \"\")).toUpperCase();\n printName = this.props.activities.owner.name;\n hexColor = \"#\" + convert_to_rgb(hash_this(this.props.activities.ownerId)) + \" !important\";\n }\n return(\n
    \n \n
    \n
    \n
    {initials}
    {printName}\n
    \n
    \n {activityDate}\n
    \n
    \n
    \n \n
    \n
    \n )\n }\n});\n\nexport default SfUserToggle;\n","import SfUserToggle from \"./sfUserToggle\";\n\nconst SfActivities = createReactClass({\n getInitialState: function(){\n return {display: 3}\n },\n show_more: function(){\n SFPanelActions.trackEvent('display_more_sf_activity', \"Display more \" + this.props.tab_content.type + \" activity\", {});\n this.setState({display: this.state.display + 10});\n return false;\n },\n render: function () {\n if (_.isUndefined(this.props.tab_content.data) || this.props.tab_content.data.length < 1) {\n let activity = this.props.tab_content.name.toLowerCase()\n if(this.props.tab_content.type == 'all') {\n activity = 'interactions at all (team or otherwise)'\n }\n activity = activity.replace(I18n.t(\"brand.name\").toLowerCase(),I18n.t(\"brand.name\"))\n return (\n
    \n There are no {activity} for this {this.props.type}.\n
    \n );\n }\n else {\n let moreButton;\n let displayActivities = Object.keys(this.props.tab_content.data)\n if(this.state.display < displayActivities.length){\n const remainder = displayActivities.length - this.state.display;\n const next = remainder > 10 ? \"next 10\" : 'last ' + remainder;\n moreButton = (\n \n )\n }\n displayActivities = displayActivities.slice(0, this.state.display);\n const activities = displayActivities.map(function (user_data, index) {\n return \n }.bind(this));\n return (\n
    \n {activities}\n {moreButton}\n
    \n );\n }\n }\n});\n\nexport default SfActivities;\n","const SfOpportunity = (props) => {\n const trackOpportunity = () => {\n SFAccountActions.trackEvent(\"see_opportunity_in_salesforce\", \"User clicked link to see an opportunity in SF\", {});\n SFAccountActions.trackEngagementEvent(\"Go to opportunity in Salesforce\", {});\n };\n const actDate = moment(props.last_activity).add(12, 'h');\n return (\n
    \n

    {props.name}

    \n

    Status: {props.status} (last activity {actDate.fromNow()}, on {actDate.format(\"dddd, Do MMMM YYYY\")})

    \n
    \n );\n};\n\nexport default SfOpportunity;\n","import SfOpportunity from \"./sfOpportunity\";\n\nconst SfOpportunities = createReactClass({\n getInitialState: function(){\n return {display: 3};\n },\n show_more: function(){\n SFPanelActions.trackEvent(\"see_more_opportunities\",\"User clicked to view more SF opportunities\", {});\n this.setState({display: this.state.display + 10});\n return false;\n },\n render: function () {\n if(_.isUndefined(this.props.tab_content.data) || this.props.tab_content.data.length < 1) {\n return (\n
    \n There are no opportunities listed in Salesforce for this account.\n
    \n );\n }\n let moreButton;\n let displayOpportunities = Object.keys(this.props.tab_content.data)\n if(this.state.display < displayOpportunities.length){\n const remainder = displayOpportunities.length - this.state.display;\n const next = remainder > 10 ? \"next 10\" : 'last ' + remainder;\n moreButton = (\n \n )\n }\n displayOpportunities = this.props.tab_content.data.slice(0, this.state.display);\n const opportunities = displayOpportunities.map(function (opportunity) {\n return \n }.bind(this));\n return (\n
    \n {opportunities}\n {moreButton}\n
    \n );\n }\n});\n\nexport default SfOpportunities;\n","const SfContactURL = (props) => {\n const trackContact = () => {\n SFAccountActions.trackEvent('see_contact_in_salesforce','User clicked link to see a Contact in SF', {});\n SFAccountActions.trackEngagementEvent('View contact in SF', {});\n };\n let title;\n if(props.title){\n title = \", \" + props.title;\n }\n return (

    {props.name}{title}

    );\n};\n\nexport default SfContactURL;\n","const SfContactLastActivity = (props) => {\n let last_act;\n let temp_date;\n if(props.last_activity){\n temp_date = moment(props.last_activity).add(12, 'h');\n last_act = temp_date.format(\"MMMM Do, YYYY\");\n }\n else{\n temp_date = moment(props.created_date).add(12, 'h');\n last_act = \"None listed (record added \" + temp_date.format(\"MMMM Do, YYYY\") + \") \";\n }\n return (

    Last activity: {last_act}

    );\n};\n\nexport default SfContactLastActivity;\n","const SfContactEmail = (props) => {\n if(props.email){\n return

    {props.email}

    ;\n }\n else{\n return false;\n }\n};\n\nexport default SfContactEmail;\n","const SfContactPhone = (props) => {\n if(props.phone){\n return

    {props.phone}

    ;\n }\n else{\n return false;\n }\n};\n\nexport default SfContactPhone;\n","import SfContactURL from \"./sfContactUrl\";\nimport SfContactLastActivity from \"./sfContactLastActivity\";\nimport SfContactEmail from \"./sfContactEmail\";\nimport SfContactPhone from \"./sfContactPhone\";\n\nconst SfContact = (props) => {\n return (\n
    \n
    \n \n \n \n \n
    \n
    \n );\n};\n\nexport default SfContact;\n","import SfContact from \"./sfContact\";\n\nconst SfContacts = createReactClass({\n getInitialState: function(){\n return {display: 10}\n },\n show_more: function(){\n this.setState({display: this.state.display + 10});\n return false;\n },\n render: function () {\n if(_.isUndefined(this.props.tab_content.data) || this.props.tab_content.data.length < 1) {\n return (\n
    \n There are no contacts listed in Salesforce for this account.\n
    \n )\n }\n let moreButton;\n let displayContacts = Object.keys(this.props.tab_content.data)\n if(this.state.display < displayContacts.length){\n var remainder = displayContacts.length - this.state.display;\n var next = remainder > 10 ? \"next 10\" : 'last ' + remainder;\n moreButton = (\n \n )\n }\n displayContacts = this.props.tab_content.data.slice(0, this.state.display);\n const pairs = [];\n _.eachSlice(displayContacts, 2, function(pair){\n pairs.push(pair[0]);\n if(pair[1]){\n pairs.push(pair[1]);\n }\n });\n const contactRows = pairs.map(function (pair) {\n const key = \"pair\" + pair.url;\n return ;\n }.bind(this));\n return (\n
    \n {contactRows}\n {moreButton}\n
    \n );\n }\n});\n\nexport default SfContacts;\n","import React from \"react\";\n\nimport SfActivities from \"./sfActivities\";\nimport SfOpportunities from \"./sfOpportunities\";\nimport SfContacts from \"./sfContacts\";\n\nconst SfTabContent = createReactClass({\n mixins: [Reflux.listenTo(SFTabActionsStore,\"change_selected\")],\n getInitialState: function(){\n return {\n tab_selected:this.props.tab_selected,\n height:0\n };\n },\n change_selected: function(account, tabSelected) {\n if(account === this.props.account_id){\n this.setState({\n tab_selected: tabSelected\n });\n }\n },\n render: function(){\n const div_classes = [\"tabbed_content_div\"];\n if(this.state.tab_selected === this.props.tab_content.type){\n div_classes.push('tabbed_current_content');\n }\n const components = {\n tasks:SfActivities,\n team:SfActivities,\n all:SfActivities,\n opportunities:SfOpportunities,\n contacts:SfContacts\n };\n const component = components[this.props.tab_content.type];\n const content = React.createElement(component, {account_id:this.props.account_id, type:this.props.type, tab_content:this.props.tab_content});\n return (\n
    \n {content}\n
    \n )\n }\n});\n\nexport default SfTabContent;\n","import SfAccountHeader from \"./sfAccountHeader\";\nimport SfTabNav from \"./sfTabNav\";\nimport SfTabContent from \"./sfTabContent\";\n\nconst SfAccount = createReactClass({\n getInitialState: function(){\n return {folded_unfolded: 'checked'};\n },\n quiet_react: function (){\n // The whole “having to quiet react” doesn’t really sit well with me. Open to other ideas here.\n const quiet = 'react';\n },\n fold_unfold: function (){\n this.setState({folded_unfolded: (this.state.folded_unfolded == 'checked') ? '' : 'checked'})\n },\n render: function(){\n const team = this.props.activity_history.filter(function (activity) {\n return activity.owner?.zw_user == true;\n });\n const account_data = {\n folded_unfolded: 'checked',\n account_id:this.props.account.Id,\n sf_content: [\n {\n name: 'Open Tasks',\n data: this.props.open_activities,\n type:'tasks'\n },\n {\n name: I18n.t(\"brand.name\")+' Team Interactions',\n data: team,\n type:'team'\n },\n {\n name: 'All Interactions',\n data: this.props.activity_history,\n type:'all'\n },\n {\n name: 'Opportunities',\n data: this.props.opportunities,\n type:'opportunities',\n component: 'SFOpportunities'\n },\n {\n name: 'Contacts',\n data: this.props.contacts,\n type:'contacts',\n component: 'SFContacts'\n },\n ]\n }\n const toggle_id = this.props.company_id + \"_toggle\";\n return (\n
    \n \n \n
    \n
    \n
    \n
      \n {\n account_data.sf_content.map(function (content) {\n return ;\n }, this)\n }\n
    \n
    \n
    \n {\n account_data.sf_content.map(function (content) {\n return ;\n }, this)\n }\n
    \n
    \n
    \n
    \n )\n }\n});\n\nexport default SfAccount;\n","import SfAccount from \"./sfAccount\";\n\nconst SfAccountLoader = createReactClass({\n mixins: [Reflux.listenTo(SFAccountLoaderActionsStore,\"refreshAccount\")],\n componentDidMount: function() {\n const url = \"/company/\" + this.props.company_id + \"/sales_force_account_data\";\n $.get(url, {account_id: this.props.account_id}, function(account_data) {\n this.setState({account: account_data});\n }.bind(this));\n },\n refreshAccount: function(account_id){\n if(this.props.account_id === account_id){\n const url = \"/company/\" + this.props.company_id + \"/sales_force_account_data\";\n $.get(url, {account_id: this.props.account_id}, function(account_data) {\n this.setState({account: account_data});\n }.bind(this));\n }\n },\n render: function(){\n if(this.state && this.state.account) {\n for (var i = 0; i < this.props.accounts.length; i++) {\n if (this.props.accounts[i].account_id === this.state.account.account.Id) {\n this.props.accounts[i].opps = this.state.account.opportunities.length;\n this.props.accounts[i].owner = this.state.account.owner.name;\n this.props.accounts[i].loaded = true;\n if (this.state.account.activity_history && this.state.account.activity_history.length > 0) {\n this.props.accounts[i].last_activity = this.state.account.activity_history[0].due_date ? this.state.account.activity_history[0].due_date : this.state.account.activity_history[0].sort_date\n }\n }\n }\n SFAccountActions.updateAccounts(this.props.accounts)\n return (\n \n );\n }\n else{\n return (
    Loading, please be patient retrieving account information from Salesforce for {this.props.account_name}
    )\n }\n }\n});\n\nexport default SfAccountLoader;\n","const SfLeadsNotice = createReactClass({\n jumpHere: function (e){\n e.stopPropagation();\n e.preventDefault();\n SFPanelActions.jump(\"sf_leads_div\");\n },\n addLead: function(e) {\n e.stopPropagation();\n e.preventDefault();\n\n $(this.refs.new_sf_lead_alert).show();\n $(this.refs.link_to_create_sf_lead).hide();\n\n const mixpanelOptions = { action: \"add to salesforce modal triggered\", location: \"from company page\", type: \"add lead manually\" };\n triggerSFEngagementActionForClassicMode(mixpanelOptions);\n const addedFrom = \"Added from \" + I18n.t(\"brand.name\") + \" - to find other leads and to see the latest activity from \" + this.props.company_name + \" please visit \" + I18n.t(\"default_host\") + \"/company/\" + this.props.company_id;\n const url = \"https://na88.salesforce.com/00Q/e?lea3=\" + encodeURI(this.props.company_name) + \"&lea17=\" + encodeURI(addedFrom) + \".\"\n window.open(url, \"_blank\");\n },\n addLeadLightning:function(e){\n e.stopPropagation();\n e.preventDefault();\n const mixpanelOptions = { action: \"add to salesforce modal triggered\", location: \"from company page\", type: \"add lead manually\" };\n initiateAddToSalesforceModal(\"lead\", this.props.company_id, null, mixpanelOptions);\n },\n render: function () {\n let leads = \"is 1 lead\"\n let addLeadLink, leadMessage;\n if(this.props.lead_count === 0){\n leads = \"are no leads\";\n if(this.props.use_lightning){\n addLeadLink = Create a new lead in Salesforce.;\n }\n else{\n addLeadLink = Create a new lead in Salesforce.;\n }\n leadMessage = (\n
    \n
    \n
    \n ×\n

    After creating a new lead in Salesforce it may take up to a few minutes for {I18n.t(\"brand.name\")} and Salesforce to synchronize. You will need to refresh this page to see the new lead.

    \n
    \n
    \n
    \n )\n }\n else {\n if(this.props.lead_count > 1){\n leads = \"are \" + this.props.lead_count + \" leads\";\n }\n if(this.props.account_count > 0){\n leads = {leads};\n }\n }\n const companyName = this.props.company_name.replace(/\\.\\s*$/, \"\");\n return (\n
    \n There {leads} related to {companyName}. {addLeadLink}{leadMessage}\n
    \n );\n }\n});\n\nexport default SfLeadsNotice;\n","import SfTabNav from \"./sfTabNav\";\nimport SfTabContent from \"./sfTabContent\";\n\nconst SfLead = createReactClass({\n getInitialState: function(){\n const team = this.props.historical_activities.filter(function (activity) {\n return activity.owner?.zw_user == true;\n })\n return {\n folded_unfolded: 'checked',\n account_id:this.props.Id,\n sf_content: [\n {\n name: 'Open Tasks',\n data: this.props.open_activities,\n type:'tasks'\n },\n {\n name: I18n.t(\"brand.name\")+' Team Interactions',\n data: team,\n type:'team'\n },\n {\n name: 'All Interactions',\n data: this.props.historical_activities,\n type:'all'\n }\n ]\n }\n },\n track_lead: function(){\n SFPanelActions.trackEvent('see_lead_in_salesforce','User clicked link to see a Lead in SF', {});\n SFPanelActions.trackEngagementEvent('Go to Lead in Salesforce', {});\n },\n render: function(){\n const title = this.props.Title ? ', ' + this.props.Title : \"\";\n const email = this.props.Email ? {this.props.Email} : click to edit;\n const description = this.props.Description ?
    Description: {this.props.Description}
    : null;\n const createdDate = moment(this.props.CreatedDate).fromNow();\n const ownerIsZw = this.props.owner?.zw_user\n ? \"\"\n : \"(Non \" + I18n.t(\"brand.name\") + \" User)\";\n const ownerName = this.props.owner\n ? this.props.owner.name + \" \" + ownerIsZw\n : \"N/A\";\n\n return (\n
    \n
    \n
    \n \n {this.props.FirstName} {this.props.LastName}\n \n {title} at {this.props.Company}\n
    \n Email: {email}\n
    \n
    \n Registered: {createdDate}\n
    \n Lead owner:{\" \"}\n {ownerName}\n
    \n {description}\n
    \n
    \n
      \n {this.state.sf_content.map(function (content) {\n return (\n \n );\n }, this)}\n
    \n
    \n \n {this.state.sf_content.map(function (content) {\n // tab_calls++\n return (\n \n );\n }, this)}\n
    \n \n );\n }\n});\n\nexport default SfLead;\n","import SfIndexReturn from \"./sfIndexReturn\";\nimport SfLead from \"./sfLead\";\n\nconst SfLeadsPanel = createReactClass({\n mixins: [Reflux.listenTo(SFLeadPanelActionsStore, \"refreshLeads\")],\n getInitialState: function () {\n return {\n display: 3,\n folded_unfolded: \"checked\",\n leads: [],\n page: 1,\n };\n },\n componentDidMount: function () {\n const url =\n \"/company/\" + this.props.company_id + \"/sales_force_leads_for_org?page=1\";\n $.get(\n url,\n function (leads) {\n this.setState({ leads: leads });\n }.bind(this)\n );\n },\n refreshLeads: function () {\n const url =\n \"/company/\" + this.props.company_id + \"/sales_force_leads_for_org?page=1\";\n $.get(\n url,\n function (leads) {\n this.setState({ leads: leads });\n }.bind(this)\n );\n },\n quiet_react: function () {\n // The whole “having to quiet react” doesn’t really sit well with me. Open to other ideas here.\n const quiet = \"react\";\n },\n fold_unfold: function () {\n this.setState({\n folded_unfolded: this.state.folded_unfolded == \"checked\" ? \"\" : \"checked\",\n });\n },\n show_more: function () {\n this.state.page += 1;\n const url =\n \"/company/\" +\n this.props.company_id +\n \"/sales_force_leads_for_org?page=\" +\n this.state.page;\n\n $.get(\n url,\n function (newLeads) {\n this.setState((prevState) => ({\n leads: prevState.leads.concat(newLeads),\n display: this.state.display + 10,\n }));\n }.bind(this)\n );\n\n return false;\n },\n render: function () {\n let moreButton;\n if (this.props.lead_count == 0) {\n return null;\n } else {\n if (this.state.display < this.state.leads.length) {\n const remainder = this.state.leads.length - this.state.display;\n const next = remainder > 10 ? \"next 10\" : \"last \" + remainder;\n moreButton = (\n \n );\n }\n const indexReturn =\n this.props.accounts_count > 1 ? (\n \n ) : null;\n let leadsInDetails = (\n
    \n {\" \"}\n retrieving lead information from Salesforce for{\" \"}\n {this.props.company_name}\n
    \n );\n if (this.state.leads.length > 0) {\n const display_leads = this.state.leads.slice(0, this.state.display);\n leadsInDetails = display_leads.map(function (lead_data) {\n return (\n \n );\n });\n }\n return (\n
    \n \n \n
    \n Leads ({this.props.lead_count})\n
    \n {indexReturn}\n
    \n
    \n {leadsInDetails}\n {moreButton}\n
    \n \n );\n }\n },\n});\n\nexport default SfLeadsPanel;\n","import SfIndexTable from \"./sfIndexTable\";\nimport SfAccountLoader from \"./sfAccountLoader\";\nimport SfLeadsNotice from \"./sfLeadsNotice\";\nimport SfLeadsPanel from \"./sfLeadsPanel\";\nimport ButtonGroup from \"@javascript/reactComponents/lds/ButtonGroup\";\nimport Button from \"@javascript/reactComponents/lds/Button\";\n\nconst PAGE_SIZE = 5;\n\nconst SfPanel = createReactClass({\n UNSAFE_componentWillMount: function(){\n SFPanelActions.initialState(this.props.company_id, this.props.company_name);\n },\n getInitialState: function() {\n return {\n initialDisplayedAccounts: 0,\n displayedAccounts: PAGE_SIZE,\n }\n },\n previousPage: function () {\n this.setState({\n initialDisplayedAccounts: this.state.initialDisplayedAccounts - PAGE_SIZE,\n displayedAccounts: this.state.displayedAccounts - PAGE_SIZE,\n });\n },\n nextPage: function () {\n this.setState({\n initialDisplayedAccounts: this.state.initialDisplayedAccounts + PAGE_SIZE,\n displayedAccounts: this.state.displayedAccounts + PAGE_SIZE,\n });\n },\n addAccount: function(e) {\n e.stopPropagation();\n e.preventDefault();\n const mixpanel_options = { action: \"add to salesforce modal triggered\", location: \"from company page\", type: \"add account\" };\n triggerSFEngagementActionForClassicMode(mixpanel_options);\n const url = \"/company/\" + this.props.company_id + \"/add_company_as_new_account_in_sf\";\n const window_opened = window.open(url, '_blank');\n if (window_opened) {\n window_opened.focus();\n $(this.refs.new_sf_alert_account).show();\n $(this.refs.link_to_create_sf_account).hide();\n }\n else {\n $.growl.error({message: \"Please allow popup windows or visit your Salesforce account directly.\"});\n }\n },\n addAccountLightning:function(e){\n e.stopPropagation();\n e.preventDefault();\n const mixpanelOptions = { action: \"add to salesforce modal triggered\", location: \"from company page\", type: \"add account\" };\n initiateAddToSalesforceModal(\"account\", this.props.company_id, null, mixpanelOptions);\n },\n render: function(){\n let multi, sfIndex, accountList;\n let accountsCount = 0;\n let newAccount;\n const companyName = this.props.company_name.replace(/\\.\\s*$/, \"\");\n let maxAccounts = null;\n if(this.props.use_lightning){\n newAccount = ();\n }\n else{\n newAccount = ();\n }\n if(!this.props.accounts || this.props.accounts.length === 0){\n multi = (\n
    \n
    \n
    \n There were no accounts found in your Salesforce database for {companyName}.\n
    \n
    \n ×\n

    After creating a new account in Salesforce it may take up to a few minutes for {I18n.t(\"brand.name\")} and Salesforce to synchronize. You will need to refresh this page to see the new account.

    \n
    \n
    \n

    \n {newAccount}\n

    \n
    \n
    \n
    \n )\n } else {\n maxAccounts = this.props.accounts.slice(0, 99)\n let accounts = \"account\";\n accountsCount = maxAccounts.length\n if(maxAccounts.length > 1){\n accounts = 'accounts'\n sfIndex = ()\n }\n multi = (\n
    \n {I18n.t(\"brand.name\")} matched { maxAccounts.length } {accounts} for {companyName} in your Salesforce database. All matches are shown below.\n
    \n );\n accountList = maxAccounts.slice(this.state.initialDisplayedAccounts, this.state.displayedAccounts).map(function(account_data){\n return \n }.bind(this));\n }\n const sfLeadsNotice = ()\n const sfLeads = ()\n\n const paginatorButtons = maxAccounts &&\n \n \n\n \n \n\n return (
    \n {multi}\n {sfLeadsNotice}\n {sfIndex}\n {paginatorButtons}\n {accountList}\n {paginatorButtons}\n {sfLeads}\n
    );\n }\n});\n\nexport default SfPanel;\n","import SfPanel from \"./sfPanel\";\n\nconst SfPanelWrapper = createReactClass({\n mixins: [Reflux.listenTo(SFPanelWrapperActionsStore,\"updatePanel\")],\n getInitialState: function(){\n return {...this.props};\n },\n updatePanel: function(objectType, newSet) {\n switch(objectType) {\n case \"accounts\":\n this.setState({\n accounts: newSet\n });\n break;\n case \"leads\":\n this.setState({\n leads: newSet\n });\n SFLeadPanelActions.refreshLeads();\n break;\n }\n\n },\n render: function(){\n return \n }\n});\n\nwindow.SfPanelWrapper = SfPanelWrapper;\nexport default SfPanelWrapper;\n","const NoRelatedTherapies = (props) => {\n return(\n
    \n

    No matching drugs found.

    \n
    \n );\n};\n\nexport default NoRelatedTherapies;\n","const PaginationLinks = createReactClass({\n change: function(e){\n e.preventDefault();\n e.stopPropagation();\n this.props.changePage(this.props.page_number)\n },\n render: function () {\n const displayNumber = this.props.page_number + 1;\n const className = this.props.active ? \"active\" : \"\";\n return
  • \n {displayNumber}\n
  • ;\n }\n});\n\nwindow.PaginationLinks = PaginationLinks;\nexport default PaginationLinks;\n","import PaginationLinks from \"./paginationLinks\";\n\nconst PaginationHolder = createReactClass({\n render: function(){\n if(this.props.pages < 2){\n return false;\n }\n const pages = [];\n let startPage = 0;\n const leftRange = 5;\n let endPage = this.props.pages;\n const numberOfPages = this.props.pages;\n const paginationClasses = this.props.paginationClasses;\n if(this.props.displaySize < numberOfPages){\n endPage = this.props.displaySize;\n if(startPage != this.props.currentPage){\n startPage = this.props.currentPage - leftRange;\n if(startPage < 0){\n startPage = 0;\n }\n endPage = startPage + this.props.displaySize;\n if(endPage > numberOfPages){\n endPage = numberOfPages;\n }\n }\n }\n for(let i = startPage; i < endPage; i++){\n const active = i == this.props.currentPage\n pages.push();\n }\n return (\n
    \n
      \n {pages}\n
    \n
    \n )\n }\n});\n\nwindow.PaginationHolder = PaginationHolder;\nexport default PaginationHolder;\n","const RelatedTherapiesTable = (props) => {\n const maxNameLength = props.maxNameLength || 50;\n const errorCallback = props.errorCallback || console.error; // Fallback to console logs if no callback provided\n const therapiesReported = props.therapiesReported || new Set(); // If no therapies given, assume none have been reported\n\n /**Given the name of a therapy, truncate it to maxNameLength - 3 characters,\n * followed by ellipses if the name length is greater than maxNameLength\n * @param name The name of the therapy\n * @returns A truncated copy of the name, if name is larger than maxNameLength\n * */\n const truncateTherapyName = (name) => {\n return name.length > maxNameLength ? name.slice(0, (maxNameLength - name.length ) - 3) + \"...\" : name;\n }\n\n const therapies = props.listOfTherapies.map(function(therapy){\n // If therapy name is > 50 characters, we need to truncate it\n let therapyName = truncateTherapyName(therapy.name);\n let isTherapyReported = therapiesReported.has(therapy.id);\n\n return(\n \n {therapyName}\n {therapy.last_mentioned}\n {therapy.in_human_clinical_trials}\n \n {\n isTherapyReported ?\n

    Reported!

    \n :\n errorCallback(therapy)}>Report Mismatch\n }\n \n \n );\n });\n return(\n
    \n
    \n \n \n \n \n \n \n \n \n \n \n {therapies}\n \n
    \n Therapy Name\n \n Last mentioned\n \n Reached human clinical trials?\n \n Report Mismatch to {I18n.t(\"brand.name\")} team\n
    \n
    \n
    \n );\n};\n\nexport default RelatedTherapiesTable;\n","import PaginationHolder from \"../generic/pagination/paginationHolder\";\nimport RelatedTherapiesTable from \"./relatedTherapiesTable\";\n\nconst RelatedTherapiesFromList = (props) => {\n const paginationClasses = [\"pagination\", \"standard_pagination_holder\"];\n const displaySize = 10;\n return(\n
    \n

    Found {props.totalNumberOfTherapies} drugs.

    \n \n \n
    \n );\n};\n\nexport default RelatedTherapiesFromList;\n","import NoRelatedTherapies from \"./noRelatedTherapies\";\nimport RelatedTherapiesFromList from \"./relatedTherapiesFromList\";\n\nconst RelatedTherapiesContainer = createReactClass({\n mixins: [Reflux.connect(RelatedTherapiesStore)],\n getInitialState: function() {\n RelatedTherapiesActions.getTherapiesForOrg(this.props.org_id);\n return {\n page: 1,\n paginated_therapies: {}\n }\n },\n handleTherapyMismatch: function(therapy) {\n RelatedTherapiesActions.reportMismatchTherapy(therapy);\n },\n changePage: function(newPage) {\n // Generic pagination indexes at zero\n newPage += 1;\n if(newPage === this.state.page) { return; }\n\n this.setState({ page: newPage })\n },\n render: function() {\n let relatedTherapies;\n const maxNameLength = 50;\n const numberOfPages = Math.ceil(this.state.total_num_therapies / this.state.therapies_per_page);\n const currentPage = this.state.page - 1;\n const listOfTherapies = this.state.paginated_therapies[this.state.page];\n const totalNumberOfTherapies = this.state.total_num_therapies;\n\n // If the therapies are still loading\n if (!this.state.therapies_loaded) {\n relatedTherapies = \"Loading,;\n }\n // If we have no related therapies whatsoever\n else if (this.state.total_num_therapies === 0) {\n relatedTherapies = ;\n }\n // There are related therapies!\n else {\n relatedTherapies =\n \n }\n return(\n
    \n
    \n

    Pipeline and commercial drugs mentioned in the past 18 months

    \n
    \n {relatedTherapies}\n
    \n );\n }\n});\n\nwindow.RelatedTherapiesContainer = RelatedTherapiesContainer;\nexport default RelatedTherapiesContainer;\n","import Button from \"@javascript/reactComponents/lds/Button\";\nimport Icon from \"../lds/Icon\";\nimport Heading from \"../lds/typography/Heading\";\nimport LegacyModalService from \"@javascript/globals/LegacyModalService\";\n\nimport {\n ModalBody,\n ModalFooter,\n} from \"@javascript/reactComponents/lds/modal/Modal\";\n\nexport const SalesforceFormErrorMessages = ({ errors }) => {\n const errorText = (errorCode) => {\n const defaultMessage =\n \"Oops. There seems to be an error while creating a record in Salesforce. Please try again later. If the error occurs again please contact support.\";\n let message = errors.error_messages.join(\" and \") || defaultMessage;\n\n switch (errorCode) {\n case \"REQUIRED_FIELD_MISSING\":\n message = \"One or more required fields are missing\";\n break;\n case \"DUPLICATE_VALUE\":\n message = \"One or more unique fields has a duplicate value\";\n break;\n case \"JSON_PARSER_ERROR\":\n message = \"One or more fields has the wrong data type\";\n break;\n case \"UNKNOWN_EXCEPTION\":\n message =\n \"There was an error. Please check for duplicate records or for custom fields in Salesforce.\";\n break;\n }\n return message;\n };\n\n const errorMessages = () => {\n const errorStyle = {\n color: \"#FF0000\",\n };\n\n return errors.error_codes.map((error, i) => (\n
    \n

    {errorText(error)}

    \n
    \n ));\n };\n\n return (\n
    \n {errors.error_codes && errors.error_codes.length > 0\n ? errorMessages()\n : null}\n
    \n );\n};\n\nconst FormatMessage = ({ children }) => {\n return (\n <>\n \n {children}\n \n \n \n Cancel\n \n \n \n );\n};\n\nexport const SalesforceModalFormIssue = () => (\n \n \n \n There was an issue building the form. Please try again later.\n \n \n);\n\nexport const SalesforceModalLoading = ({ message }) => {\n const displayMessage = message || \"Please wait while we generate the form...\";\n\n return (\n \n \n {displayMessage}\n \n );\n};\n\nexport const SF_LOADING_MIN = 3000;\n","export const fieldInError = (errors, fieldName) => {\n let isMissing = false;\n if(errors){\n const error = _.find(errors.error_fields, function(error){\n return error.field === fieldName;\n });\n if(error){\n isMissing = true;\n }\n }\n return isMissing;\n};\n\nexport const commonFieldElements = (field, isMissing) => {\n const required = field.required ? \"*\" : \"\";\n\n const helperText = isMissing ? \"This field is required\" : \"\";\n const helperTextVariant = isMissing ? \"critical\" : \"hidden\";\n\n const placeholder = `${field.label}${required}`;\n\n return { helperText, helperTextVariant, placeholder };\n};\n","import { useState } from \"react\";\nimport PropTypes from \"prop-types\";\n\nimport Dropdown, { DropdownTrigger } from \"@javascript/reactComponents/lds/dropdown/Dropdown\";\nimport DropdownList from \"@javascript/reactComponents/lds/dropdown/DropdownList\";\nimport Input from \"@javascript/reactComponents/lds/Input\";\n\nimport { commonFieldElements, fieldInError } from \"@javascript/helpers/crmUtilities\";\n\nconst CRMDropdown = ({\n errors,\n field,\n}) => {\n\n const [useValue, setValue] = useState(field.value ? field.value : \"\");\n const [open, setOpen] = useState(false);\n\n const selectItem = (value) => {\n setValue(value);\n setOpen(false);\n };\n\n let isMissing = fieldInError(errors, field.name);\n const { helperText, helperTextVariant, placeholder } = commonFieldElements(field, isMissing);\n\n const inputClassName = useValue ? \"\" : \"dropdown-input-with-label-no-data\";\n\n const items = field.format.map((field) => {\n if (typeof field === \"object\" && field !== null) {\n const label = field.label ? field.label : \"--\";\n const value = field.value ? field.value : \"\";\n return({label: label, value: value, selected: value === useValue});\n }\n else {\n const label = \"None\";\n const value = \"\";\n return({label: label, value: value, selected: value === useValue});\n }\n });\n\n return (\n setOpen(false)}\n onDropdownOpen={() => setOpen(true)}\n onItemSelected={(item) => {\n selectItem(item.value)\n }}\n popoverClassName={\"crm-pulldown\"}\n size=\"large\"\n >\n \n
    setOpen(true)}>\n {}}\n label={placeholder}\n readOnly\n size=\"large\"\n trailingIcon={\"chevron-\" + (open ? \"up\" : \"down\")}\n value={useValue}\n width=\"100%\"\n />\n
    \n
    \n \n \n )\n};\n\nCRMDropdown.propTypes = {\n errors: PropTypes.oneOfType([\n PropTypes.bool,\n PropTypes.object,\n ]),\n field: PropTypes.object.isRequired,\n};\n\nexport default CRMDropdown;\n","import { useState } from \"react\";\nimport PropTypes from \"prop-types\";\n\nimport Input from \"@javascript/reactComponents/lds/Input\"\n\nimport {fieldInError, commonFieldElements} from \"@javascript/helpers/crmUtilities\";\n\nconst CRMInput = ({\n errors,\n field,\n}) => {\n\n const [useValue, setValue] = useState(field.value ? field.value : \"\");\n\n let isMissing = fieldInError(errors, field.name);\n const { helperText, helperTextVariant, placeholder } = commonFieldElements(field, isMissing);\n\n const disabled = field.name === \"AccountId\";\n\n let multiLine = false;\n let height = \"\";\n if(field.type === \"textarea\") {\n multiLine = true;\n height = \"var(--input-size-minHeight-large)\";\n }\n\n return (\n \n );\n};\n\nCRMInput.propTypes = {\n errors: PropTypes.oneOfType([\n PropTypes.bool,\n PropTypes.object,\n ]),\n field: PropTypes.object.isRequired,\n};\n\nexport default CRMInput;\n","import PropTypes from \"prop-types\";\n\nimport CRMDropdown from \"@javascript/reactComponents/companyDashboard/CRMDropdown\";\nimport CRMInput from \"@javascript/reactComponents/companyDashboard/CRMInput\";\n\nconst SfFormFields = ({\n errors,\n fields,\n}) => {\n\n const booleanFormat = [\n {\n \"active\": true,\n \"defaultValue\": true,\n \"label\": \"false\",\n \"validFor\": null,\n \"value\": \"false\"\n },\n {\n \"active\": true,\n \"defaultValue\": false,\n \"label\": \"true\",\n \"validFor\": null,\n \"value\": \"true\"\n }\n ];\n\n const sfFields = fields.map(function(f,i) {\n {\n switch(f.type) {\n case \"picklist\":\n const defaultOption = f.format.find(option => option.defaultValue === true);\n if (defaultOption && f.value === null) {\n f.value = defaultOption.value;\n }\n return \n case \"boolean\":\n f.value = f.value || \"false\";\n f.format = booleanFormat;\n return \n default:\n return \n }\n }\n });\n return
    {sfFields}
    \n};\n\nSfFormFields.propTypes = {\n errors: PropTypes.oneOfType([\n PropTypes.bool,\n PropTypes.object,\n ]),\n fields: PropTypes.arrayOf(\n PropTypes.shape({\n label: PropTypes.string,\n name: PropTypes.string,\n opt_custom: PropTypes.bool, // This is optional\n required: PropTypes.bool,\n type: PropTypes.string,\n })\n ).isRequired,\n};\n\nexport default SfFormFields;\n","import React from \"react\";\nimport PropTypes from \"prop-types\";\n\nimport SfFormFields from \"@javascript/reactComponents/companyDashboard/salesforce/sfFormFields\";\n\nconst SfTwoColumnFormFields = ({\n className,\n Component,\n errors,\n fields,\n}) => {\n\n const oddFieldsLength = fields.length % 2 !== 0;\n\n const renderField = (field, index) => {\n const isLastOdd = oddFieldsLength && index === fields.length - 1;\n const isLeftColumn = index % 2 === 0;\n\n const classNames = [\"input-group-vertical\", \"sf-input-group\"];\n\n let divStyle = {\n width: isLastOdd ? \"100%\" : \"50%\",\n boxSizing: \"border-box\",\n };\n\n if (!isLastOdd) {\n if (isLeftColumn) {\n classNames.push(\"sf-input-left-column\");\n } else {\n classNames.push(\"sf-input-right-column\");\n }\n }\n\n if (className) {\n classNames.push(className);\n }\n\n return (\n \n \n \n );\n };\n\n return (\n
    \n {fields.map(renderField)}\n
    \n );\n};\n\nSfTwoColumnFormFields.propTypes = {\n className: PropTypes.string,\n Component: PropTypes.elementType.isRequired,\n errors: SfFormFields.propTypes.errors,\n fields: SfFormFields.propTypes.fields,\n};\n\nexport default SfTwoColumnFormFields;\n","import SfFormFields from \"@javascript/reactComponents/companyDashboard/salesforce/sfFormFields\";\nimport SfTwoColumnFormFields from \"@javascript/reactComponents/companyDashboard/salesforce/SfTwoColumnFormFields\";\n\nconst SfFormFieldsCore = ({\n errors,\n fields,\n}) => {\n\n return (\n \n );\n};\n\nSfFormFieldsCore.propTypes = {\n errors: SfFormFields.propTypes.errors,\n fields: SfFormFields.propTypes.fields,\n};\n\nexport default SfFormFieldsCore;\n","import { useState, useRef, useEffect } from \"react\";\n\nimport Chip from \"@javascript/reactComponents/lds/chips/Chip\";\nimport SfFormFields from \"@javascript/reactComponents/companyDashboard/salesforce/sfFormFields\";\nimport SfTwoColumnFormFields from \"@javascript/reactComponents/companyDashboard/salesforce/SfTwoColumnFormFields\";\nimport Heading from \"@javascript/reactComponents/lds/typography/Heading\";\n\nconst SfFormFieldsOptional = ({\n errors,\n fields,\n}) => {\n const [expanded, setExpanded] = useState(false);\n const [render, setRender] = useState(false);\n const [hasInteracted, setHasInteracted] = useState(false);\n const headingRef = useRef(null);\n\n if (fields.length < 1) {\n return null;\n }\n\n const toggleExpand = () => {\n if (!expanded) {\n setRender(true);\n setTimeout(() => setExpanded(true), 50); // Small delay to ensure render happens first\n } else {\n setExpanded(false);\n setTimeout(() => setRender(false), 300); // Delay to match transition duration\n }\n if (!hasInteracted) {\n setHasInteracted(true);\n }\n };\n\n const trailingAction = (\n \n );\n\n useEffect(() => {\n if (hasInteracted && headingRef.current) {\n headingRef.current.scrollIntoView({\n behavior: 'smooth',\n block: expanded ? 'start' : 'end'\n });\n }\n }, [expanded, hasInteracted]);\n\n return (\n
    \n \n {fields.length} Custom Optional Fields\n \n {render && (\n \n \n
    \n )}\n \n );\n};\n\nSfFormFieldsOptional.propTypes = {\n errors: SfFormFields.propTypes.errors,\n fields: SfFormFields.propTypes.fields,\n};\n\nexport default SfFormFieldsOptional;\n","import _ from \"underscore\";\n\nimport Button from \"@javascript/reactComponents/lds/Button\";\nimport ButtonGroup from \"@javascript/reactComponents/lds/ButtonGroup\";\n\nimport Heading from \"@javascript/reactComponents/lds/typography/Heading\";\nimport Icon from \"@javascript/reactComponents/lds/Icon\";\nimport LegacyModalService from \"@javascript/globals/LegacyModalService\";\n\nimport {\n ModalBody,\n ModalFooter,\n} from \"@javascript/reactComponents/lds/modal/Modal\";\n\nimport {\n SalesforceFormErrorMessages,\n SalesforceModalFormIssue,\n SalesforceModalLoading,\n SF_LOADING_MIN\n} from \"@javascript/reactComponents/salesforce/SalesforceModalMessages\";\n\nimport SfFormFieldsCore from \"@javascript/reactComponents/companyDashboard/salesforce/sfFormFieldsCore\";\nimport SfFormFieldsOptional from \"@javascript/reactComponents/companyDashboard/salesforce/sfFormFieldsOptional\";\n\nconst SfAccountForm = createReactClass({\n getInitialState(){\n return {\n coreFields: null,\n created: false,\n errorBuildingForm: false,\n errors: false,\n optionalFields: null,\n };\n },\n retrieveSfAccountFields(){\n let url = \"/company/\" + this.props.org_id + \"/retrieve_salesforce_account_fields\";\n let self = this;\n\n let loadingTimeout = setTimeout(() => {\n loadingTimeout = undefined;\n }, SF_LOADING_MIN);\n\n $.ajax({\n url: url,\n type: \"GET\",\n headers: {\n // form_authenticity_token TODO: this is ignored, yet somehow the header is still set (deprecate this header and it still works)\n \"X-CSRF-Token\": \"<%= form_authenticity_token.to_s %>\"\n },\n success: function(results) {\n const validFields = crmHelpers.pruneInvalidFields(results.fields);\n const [coreFields, optionalFields] = _.partition(validFields, (field) => field.opt_custom !== true);\n\n let loadingInterval = setInterval(() => {\n if (loadingTimeout === undefined) {\n\n self.setState({\n coreFields: coreFields,\n optionalFields: optionalFields,\n });\n\n clearInterval(loadingInterval);\n }\n }, 500);\n },\n error: function(e) {\n console.error(e);\n self.setState({ errorBuildingForm: true });\n },\n statusCode: {\n 401: () => {\n location.reload()\n }\n }\n });\n },\n createAccount(e) {\n e.preventDefault();\n const data = $(\".sf-account-form\").serialize();\n const url = \"/company/\" + this.props.org_id + \"/create_salesforce_account\";\n let self = this;\n\n $.ajax({\n url: url,\n type: \"POST\",\n data: data,\n headers: {\n // form_authenticity_token TODO: this is ignored, yet somehow the header is still set (deprecate this header and it still works)\n \"X-CSRF-Token\": \"<%= form_authenticity_token.to_s %>\"\n },\n success: function(results) {\n if (results.response.status === 400) {\n self.setState({ errors: {error_fields: results.error_fields, error_messages: results.error_messages, error_codes: results.error_codes} });\n } else {\n self.setState({ errors: false, created: true });\n SFPanelWrapperActions.updateAccounts(results.accounts);\n }\n }\n });\n },\n\n // Renders the form entities\n // In the initial state it checks if state.coreFields has value:\n // IF IT DOES => Render the form with the fields\n // IF NOT => Then call retrieve() fields to get the required fields from the Restforce API\n // and display a message to the user informing them to wait while the form is\n // being generated\n render() {\n if (this.state.coreFields) {\n if (this.state.created) {\n return (\n <>\n \n \n Account added successfully!\n \n \n \n Close\n \n \n \n );\n }\n else {\n return (\n <>\n
    \n \n \n \n \n \n \n \n \n Cancel\n \n \n Add Account\n \n \n \n
    \n \n );\n }\n }\n else {\n if (this.state.errorBuildingForm) {\n return \n }\n else {\n this.retrieveSfAccountFields();\n return \n }\n }\n }\n});\n\nexport default SfAccountForm;\n","import _ from \"underscore\";\n\nimport Button from \"@javascript/reactComponents/lds/Button\";\nimport ButtonGroup from \"@javascript/reactComponents/lds/ButtonGroup\";\n\nimport Heading from \"@javascript/reactComponents/lds/typography/Heading\";\nimport Icon from \"@javascript/reactComponents/lds/Icon\";\nimport LegacyModalService from \"@javascript/globals/LegacyModalService\";\n\nimport {\n ModalBody,\n ModalFooter,\n} from \"@javascript/reactComponents/lds/modal/Modal\";\n\nimport {\n SalesforceFormErrorMessages,\n SalesforceModalFormIssue,\n SalesforceModalLoading,\n SF_LOADING_MIN,\n} from \"@javascript/reactComponents/salesforce/SalesforceModalMessages\";\n\nimport SfFormFieldsCore from \"@javascript/reactComponents/companyDashboard/salesforce/sfFormFieldsCore\";\nimport SfFormFieldsOptional from \"@javascript/reactComponents/companyDashboard/salesforce/sfFormFieldsOptional\";\n\nconst SfLeadForm = createReactClass({\n getInitialState(){\n return {\n contactSFLink: null,\n coreFields: null,\n created: false,\n errorBuildingForm: false,\n errors: false,\n optionalFields: null,\n };\n },\n retrieveSfLeadFields(){\n let url = \"/company/\" + this.props.org_id + \"/retrieve_salesforce_lead_fields\";\n let data = { zi_contact_id: this.props.zi_contact_id };\n let self = this;\n\n\n let loadingTimeout = setTimeout(() => {\n loadingTimeout = undefined;\n }, SF_LOADING_MIN);\n\n $.ajax({\n url: url,\n type: \"GET\",\n data: data,\n headers: {\n // form_authenticity_token TODO: this is ignored, yet somehow the header is still set (deprecate this header and it still works)\n \"X-CSRF-Token\": \"<%= form_authenticity_token.to_s %>\"\n },\n success: function(results) {\n const validFields = crmHelpers.pruneInvalidFields(results.fields);\n const [coreFields, optionalFields] = _.partition(validFields, (field) => field.opt_custom !== true);\n\n let loadingInterval = setInterval(() => {\n if (loadingTimeout === undefined) {\n self.setState({\n coreFields: coreFields,\n optionalFields: optionalFields,\n });\n\n clearInterval(loadingInterval);\n }\n }, 500);\n },\n error: function(e){\n console.error(e);\n self.setState({ errorBuildingForm: true });\n },\n statusCode: {\n 401: () => {\n location.reload()\n }\n }\n });\n },\n createLead(e) {\n e.preventDefault();\n const data = _.object(_.map( $(\".sf-account-form\").serializeArray(), _.values));\n data[\"org_id\"] = this.props.org_id;\n\n const url = \"/salesforce/leads/\";\n let self = this;\n\n $.ajax({\n url: url,\n type: \"POST\",\n data: data,\n headers: {\n // form_authenticity_token TODO: this is ignored, yet somehow the header is still set (deprecate this header and it still works)\n \"X-CSRF-Token\": \"<%= form_authenticity_token.to_s %>\"\n },\n success: function(results) {\n let params = data;\n\n if (results.response.status === 400) {\n self.setState({ errors: {error_fields: results.error_fields, error_codes: results.error_codes, error_messages: results.error_messages} });\n }\n else {\n\n let contactSFLink = null;\n\n self.setState({ errors: false, created: true, created_data: results, contactSFLink: contactSFLink});\n SFPanelWrapperActions.updateLeads(results.leads);\n }\n }\n });\n },\n\n viewLead (e) {\n e.preventDefault();\n if (this.state.contactSFLink){\n window.open(this.state.contactSFLink, '_blank');\n }\n },\n\n // Renders the form entities\n // In the initial state it checks if state.coreFields has value:\n // IF IT DOES => Render the form with the fields\n // IF NOT => Then call retrieve() fields to get the required fields from the Restforce API\n // and display a message to the user informing them to wait while the form is\n // being generated\n render() {\n console.log({state: this.state})\n if (this.state.coreFields) {\n if (this.state.created) {\n return (\n <>\n \n \n Lead added successfully!\n \n \n \n \n Close\n \n { this.state.contactSFLink && \n View in Salesforce\n \n }\n \n \n \n )\n }\n else {\n return (\n <>\n
    \n \n \n \n \n \n \n \n \n Cancel\n \n \n Add Lead\n \n \n \n
    \n \n )\n }\n } else {\n if (this.state.errorBuildingForm) {\n return \n }\n else {\n this.retrieveSfLeadFields();\n return \n }\n }\n }\n});\n\nexport default SfLeadForm;\n","import _ from \"underscore\";\n\nimport Button from \"@javascript/reactComponents/lds/Button\";\nimport ButtonGroup from \"@javascript/reactComponents/lds/ButtonGroup\";\n\nimport Heading from \"@javascript/reactComponents/lds/typography/Heading\";\nimport Icon from \"@javascript/reactComponents/lds/Icon\";\nimport LegacyModalService from \"@javascript/globals/LegacyModalService\";\n\nimport {\n ModalBody,\n ModalFooter,\n} from \"@javascript/reactComponents/lds/modal/Modal\";\n\nimport {\n SalesforceFormErrorMessages,\n SalesforceModalFormIssue,\n SalesforceModalLoading,\n SF_LOADING_MIN,\n} from \"@javascript/reactComponents/salesforce/SalesforceModalMessages\";\n\nimport SfFormFieldsCore from \"@javascript/reactComponents/companyDashboard/salesforce/sfFormFieldsCore\";\nimport SfFormFieldsOptional from \"@javascript/reactComponents/companyDashboard/salesforce/sfFormFieldsOptional\";\n\nconst SfContactForm = createReactClass({\n getInitialState(){\n return {\n contactSFLink: null,\n coreFields: null,\n created: false,\n errorBuildingForm: false,\n errors: false,\n optionalFields: null,\n };\n },\n retrieveSfContactFields(){\n let url = \"/company/\" + this.props.org_id + \"/retrieve_salesforce_contact_fields\";\n let data = { zi_contact_id: this.props.zi_contact_id, sf_org_id: this.props.sf_org_id };\n let self = this;\n\n let loadingTimeout = setTimeout(() => {\n loadingTimeout = undefined;\n }, SF_LOADING_MIN);\n\n $.ajax({\n url: url,\n type: \"GET\",\n data: data,\n headers: {\n // form_authenticity_token TODO: this is ignored, yet somehow the header is still set (deprecate this header and it still works)\n \"X-CSRF-Token\": \"<%= form_authenticity_token.to_s %>\"\n },\n success: function(results) {\n const validFields = crmHelpers.pruneInvalidFields(results.fields);\n const [coreFields, optionalFields] = _.partition(validFields, (field) => field.opt_custom !== true);\n\n let loadingInterval = setInterval(() => {\n if (loadingTimeout === undefined) {\n self.setState({\n coreFields: coreFields,\n optionalFields: optionalFields,\n });\n\n clearInterval(loadingInterval);\n }\n }, 500);\n },\n error: function(e) {\n console.error(e);\n self.setState({ errorBuildingForm: true });\n },\n statusCode: {\n 401: () => {\n location.reload()\n }\n }\n });\n },\n createContact(e) {\n e.preventDefault();\n let data = _.object(_.map( $(\".sf-account-form\").serializeArray(), _.values));\n\n const accountField = _.find(this.state.coreFields, function(field){\n return field.name === \"AccountId\";\n });\n\n data[\"AccountId\"] = accountField.value;\n data[\"org_id\"] = this.props.org_id;\n\n let url = \"/salesforce/contacts/\";\n let self = this;\n\n $.ajax({\n url: url,\n type: \"POST\",\n data: data,\n headers: {\n // form_authenticity_token TODO: this is ignored, yet somehow the header is still set (deprecate this header and it still works)\n \"X-CSRF-Token\": \"<%= form_authenticity_token.to_s %>\"\n },\n success: function(results) {\n let params = data;\n\n if (results.response.status === 400) {\n self.setState({\n errors: {\n error_fields: results.error_fields,\n error_messages: results.error_messages,\n error_codes: results.error_codes\n }\n });\n }\n else {\n let contactSFLink = null;\n\n self.setState({ errors: false, created: true, contactSFLink: contactSFLink });\n SFAccountLoaderActions.refreshAccount(results.account_id);\n }\n },\n error: function(e){\n if(e.status === 401){\n location.reload();\n }\n }\n });\n },\n\n viewContact (e) {\n e.preventDefault();\n if (this.state.contactSFLink){\n window.open(this.state.contactSFLink, '_blank');\n }\n },\n\n // Renders the form entities\n // In the initial state it checks if state.coreFields has value:\n // IF IT DOES => Render the form with the fields\n // IF NOT => Then call retrieve() fields to get the required fields from the Restforce API\n // and display a message to the user informing them to wait while the form is\n // being generated\n render() {\n if (this.state.coreFields) {\n if (this.state.created) {\n return (\n <>\n \n \n Contact added successfully!\n \n \n\n \n \n Close\n \n { this.state.contactSFLink && \n View in Salesforce\n \n }\n \n \n \n )\n }\n else {\n return (\n <>\n
    \n \n \n \n \n \n \n \n \n Cancel\n \n \n Add Contact\n \n \n \n
    \n \n )\n }\n }\n else {\n if (this.state.errorBuildingForm) {\n return \n }\n else {\n this.retrieveSfContactFields();\n return \n }\n }\n }\n});\n\nexport default SfContactForm;\n","import Button from \"@javascript/reactComponents/lds/Button\";\n\nconst SfContactButton = (props) => {\n const handleClick = (e) => {\n e.preventDefault();\n props.parent_method(\"contact\", props.sf_org_id)\n };\n return (\n \n Create New Contact at { props.sf_org_name }\n \n );\n};\n\nexport default SfContactButton;\n","import Button from \"@javascript/reactComponents/lds/Button\";\n\nimport LegacyModalService from \"@javascript/globals/LegacyModalService\";\n\nimport {\n ModalBody,\n ModalFooter,\n} from \"@javascript/reactComponents/lds/modal/Modal\";\n\nimport {\n SalesforceModalLoading,\n} from \"@javascript/reactComponents/salesforce/SalesforceModalMessages\";\nimport SfContactButton from \"@javascript/reactComponents/companyDashboard/salesforce/sfContactButton\";\n\nconst SfFormSelector = createReactClass({\n getInitialState() {\n return {\n salesforce_accounts: null\n }\n },\n getSalesforceAccounts() {\n let url = \"/company/\" + this.props.org_id + \"/retrieve_salesforce_accounts\";\n let self = this;\n\n let loadingTimeout = setTimeout(() => {\n loadingTimeout = undefined;\n }, 1000);\n\n $.ajax({\n url: url,\n type: \"POST\",\n data: { org_id: this.props.org_id },\n headers: {\n // form_authenticity_token TODO: this is ignored, yet somehow the header is still set (deprecate this header and it still works)\n \"X-CSRF-Token\": \"<%= form_authenticity_token.to_s %>\"\n },\n success: function(results) {\n let loadingInterval = setInterval(() => {\n if (loadingTimeout === undefined) {\n\n if (results.response === false) {\n alert(\"There was an error generating the form\");\n } else {\n self.setState({ salesforce_accounts: results });\n }\n\n clearInterval(loadingInterval);\n }\n }, 500);\n },\n error: function(e) {\n console.error(e);\n if(e.status === 401){\n location.reload();\n }\n }\n });\n },\n choseLead: function(e){\n e.preventDefault();\n this.props.parent_method(\"lead\", null);\n },\n\n render() {\n const holderStyle = {\n margin: \"20px\"\n };\n const buttonPad = {\n marginBottom: \"20px\"\n };\n if (this.state.salesforce_accounts) {\n return (\n <>\n \n {\n this.state.salesforce_accounts.sf_accounts.map(function(i, index){\n return (\n \n )\n }.bind(this))\n }\n \n Create New Lead\n \n \n \n \n Cancel\n \n \n \n )\n }\n else {\n this.getSalesforceAccounts();\n return \n }\n }\n});\n\nexport default SfFormSelector;\n","import SfAccountForm from \"./sfAccountForm\";\nimport SfLeadForm from \"./sfLeadForm\";\nimport SfContactForm from \"./sfContactForm\";\nimport SfFormSelector from \"./sfFormSelector\";\n\n\n/**\n * SfFormModal\n * -----------------------\n * The parent component that establishes a modal which would contain\n * the generated form. The body of the modal would contain either\n * one of two child components depending on which this.props.form\n * (if any) was selected.\n *\n * Example\n * -------\n * if the form is 'account' then it would render the form.\n * Else if a form wasn't set, then it would render the\n * component.\n *\n * Currently we have three types of form for the Salesforce integration:\n * - SfAccountForm\n * - SfLeadForm\n * - SfContactForm\n */\n\nconst SfFormModal = createReactClass({\n getInitialState(){\n return {\n form: this.props.form ? this.props.form : null, // The type of form (account, lead, or contact)\n sf_account_id: null\n };\n },\n updateFormState(form, sfOrgId) {\n const mixpanelAction = \"add to salesforce modal triggered\";\n const mixpanelActionType = form === \"lead\" ? \"add lead\" : \"add contact\";\n const mixpanelActionLocation = \"from contact search\";\n track_engagement(mixpanelAction, { type: mixpanelActionType, location: mixpanelActionLocation });\n this.setState({ form: form, sf_org_id: sfOrgId });\n },\n render(){\n if(this.state.form){\n if (this.state.form === \"account\") return ;\n if (this.state.form === \"lead\") return ;\n if (this.state.form === \"contact\") return ;\n }\n else{\n return \n }\n }\n});\n\nwindow.SfFormModal = SfFormModal;\nexport default SfFormModal;\n","const ArticleEventDetails = (props) => {\n const editEventUrl = \"administrate_event/\" + props.id + \"/edit_event\";\n return (\n
    \n

    Edit event: {props.title}

    \n
    \n );\n};\n\nexport default ArticleEventDetails;\n","const ArticleEventOrg = (props) => {\n const clickHandler = (e) => {\n e.preventDefault();\n props.toggleHandler(props.org._id);\n };\n let spanStyle;\n let sponsor;\n let spanClassName;\n if(props.org.is_drug_sponsor){\n const publishableConceptRefs = [...props.org.publishable_concept_refs];\n publishableConceptRefs.forEach((e, i) => publishableConceptRefs[i]=e.substring(0,12));\n sponsor = \" (\" + publishableConceptRefs.join(\", \") + \")\";\n spanClassName = \"action_link\";\n }\n else{\n spanStyle = {color: \"grey\"};\n }\n const url = \"/organizations/\" + props.org._id + \"/edit\";\n const iconClass = props.excluded ? \"icon-plus\" : \"icon-minus\";\n\n return (\n
  • {props.org.name}{sponsor} ({props.org.mention_count})
  • \n );\n};\n\nexport default ArticleEventOrg;\n","import ArticleEventOrg from \"./articleEventOrg\";\n\nconst IncludedOrgList = (props) => {\n if(props.orgs.length < 1 && props.excludedOrgs.length < 1){\n return (\n

    No organization matches were found

    \n );\n }\n else if(props.orgs.length < 1 ){\n return (\n

    No organization are included

    \n );\n }\n else {\n const sortedOrgs = _.sortBy(props.orgs, function(org){return - org.mention_count});\n const includedOrgList = sortedOrgs.map(function(org){\n return (\n \n );\n });\n return (\n
      {includedOrgList}
    \n );\n }\n};\n\nexport default IncludedOrgList;\n","const IgnoreEventButton = (props) => {\n const ignoreEvent = (e) => {\n e.preventDefault();\n const url = \"/commentary_article/\" + props._id + \"/ignore\";\n $.post(url)\n .done(function (result) {\n $(\"#pm_\" + props._id).fadeOut(\"fast\");\n })\n .fail(function (xhr, ajaxOptions, thrownError) {\n if (xhr.status === 401) {\n alert(\"Un-authorized status received\");\n $(\"#event_modal\").modal(\"hide\");\n window.location = \"/admin_home\";\n }\n else {\n // console.log(thrownError)\n }\n });\n };\n return (Ignore);\n};\n\nexport default IgnoreEventButton;\n","const RestoreEventButton = (props) => {\n const restoreEvent = (e) => {\n e.preventDefault();\n const url = \"/commentary_article/\" + props._id + \"/awaiting_publication\";\n $.post(url)\n .done(function (result) {\n $(\"#pm_\" + props._id).fadeOut(\"fast\");\n }.bind(this))\n .fail(function (xhr, ajaxOptions, thrownError) {\n if (xhr.status === 401) {\n alert(\"Un-authorized status received\");\n $(\"#event_modal\").modal(\"hide\");\n window.location = \"/admin_home\";\n }\n else {\n // console.log(thrownError);\n }\n });\n }\n return (\n Restore\n );\n};\n\nexport default RestoreEventButton;\n","const PublishEventButton = createReactClass({\n getInitialState: function(){\n return {publishing: false};\n },\n publishEvent: function(e){\n e.preventDefault();\n const orgIds = _.map(this.props.orgs, function(org){return org._id});\n const url = \"/commentary_article/\" + this.props._id + \"/publish\";\n $.post(url, {org_ids: orgIds})\n .done(function (result) {\n $(\"#pm_\" + this.props._id).fadeOut('fast');\n }.bind(this))\n .fail(function (xhr, ajaxOptions, thrownError) {\n if (xhr.status === 401) {\n alert(\"Un-authorized status received\")\n $(\"#event_modal\").modal('hide');\n window.location = \"/admin_home\";\n }\n else {\n // console.log(thrownError)\n }\n });\n this.setState({publishing: true});\n },\n publishHiddenEvent: function(e){\n e.preventDefault();\n const orgIds = _.map(this.props.orgs, function(org){return org._id});\n const url = \"/commentary_article/\" + this.props._id + \"/publish_hidden\";\n $.post(url, {org_ids: orgIds})\n .done(function (result) {\n $(\"#pm_\" + this.props._id).fadeOut('fast');\n }.bind(this))\n .fail(function (xhr, ajaxOptions, thrownError) {\n if (xhr.status === 401) {\n alert(\"Un-authorized status received\");\n $(\"#event_modal\").modal('hide');\n window.location = \"/admin_home\";\n }\n else {\n // console.log(thrownError)\n }\n });\n this.setState({publishing: true});\n },\n render: function() {\n if(_.find(this.props.orgs, function(org){return org.is_drug_sponsor;})){\n if(this.state.publishing){\n return (\n Publishing \n );\n }\n else {\n return (\n Create event Hidden event\n );\n }\n }\n else{\n return false;\n }\n }\n});\n\nexport default PublishEventButton;\n","import IgnoreEventButton from \"./ignoreEventButton\";\nimport RestoreEventButton from \"./restoreEventButton\";\nimport PublishEventButton from \"./publishEventButton\";\n\nconst ArticleEventActionPanel = (props) => {\n if(props.status === \"NOT_PROCESSED\" || props.status === \"PUBLISHED\"){\n return false;\n }\n let eventButton = ;\n if(props.status === \"IGNORED\"){\n eventButton = ;\n }\n const paragraphStyle = {width: \"100%\"};\n return (\n

    \n {eventButton}\n

    \n );\n};\n\nexport default ArticleEventActionPanel;\n","import ArticleEventOrg from \"./articleEventOrg\";\n\nconst ExcludedOrgList = (props) => {\n if(props.excludedOrgs.length < 1){\n return false;\n }\n const sortedOrgs = _.sortBy(props.excludedOrgs, function(org){return - org.mention_count});\n const excludedOrgs = sortedOrgs.map(function(org){\n return ;\n });\n return (

    Organizations that are excluded

      {excludedOrgs}
    );\n};\n\nexport default ExcludedOrgList;\n","import ArticleEventDetails from \"./articleEventDetails\";\nimport IncludedOrgList from \"./includedOrgList\";\nimport ArticleEventActionPanel from \"./articleEventActionPanel\";\nimport ExcludedOrgList from \"./excludedOrgList\";\n\nconst ArticleEventPanel = createReactClass({\n getInitialState: function () {\n if(this.props.article.status === \"PUBLISHED\"){\n if (this.props.article.event) {\n const eventEntities = _.map(this.props.article.event.entities, function(ent){return ent.name});\n const excludedOrgs = _.reject(this.props.article.orgs, function(org){ return _.contains(this, org.name)}.bind(eventEntities));\n const retainedOrgs = _.filter(this.props.article.orgs, function(org){ return _.contains(this, org.name)}.bind(eventEntities));\n const initState = _.extend({excludedOrgs:excludedOrgs}, this.props.article);\n initState.orgs = retainedOrgs;\n return initState;\n } else { // no event, but published\n const initState = _.extend( {excludedOrgs:[]}, this.props.article)\n return initState\n }\n }\n else if(this.props.article.status === \"AWAITING_PUBLISHING\" || this.props.article.status === \"IGNORED\"){\n const excludedOrgs = _.reject(this.props.article.orgs, function(org){ return _.contains(this, org._id)}.bind(this.props.article.predicted_org_ids));\n const retainedOrgs = _.filter(this.props.article.orgs, function(org){ return _.contains(this, org._id)}.bind(this.props.article.predicted_org_ids));\n const initState = _.extend({excludedOrgs:excludedOrgs}, this.props.article);\n initState.orgs = retainedOrgs;\n return initState;\n }\n else{\n return _.extend({excludedOrgs:[]}, this.props.article);\n }\n },\n toggleOrgOnList: function(orgId){\n if(this.props.article.status === \"PUBLISHED\"){\n return false;\n }\n let toggleOrg = _.find(this.state.orgs, function(org){return org._id === this.id}, {id: orgId});\n if(toggleOrg){\n const updatedOrgs = _.reject(this.state.orgs, function(org){return org._id === this.id}, {id: orgId});\n const updateExcludedOrgs = [...this.state.excludedOrgs];\n updateExcludedOrgs.push(toggleOrg);\n this.setState({orgs: updatedOrgs, excludedOrgs: updateExcludedOrgs});\n }\n else {\n toggleOrg = _.find(this.state.excludedOrgs, function(org){return org._id === this.id}, {id: orgId});\n if(toggleOrg){\n const updatedOrgs = _.reject(this.state.excludedOrgs, function(org){return org._id === this.id}, {id: orgId});\n this.state.orgs.push(toggleOrg);\n this.setState({excludedOrgs: updatedOrgs, orgs: this.state.orgs});\n }\n }\n },\n render: function () {\n let eventDetails;\n if(this.state.event){\n eventDetails = ;\n } else if (this.props.article.status === \"PUBLISHED\") {\n eventDetails =
    \n

    No event associated with published article

    \n
    \n }\n return (\n
    \n \n \n \n {eventDetails}\n
    \n );\n }\n});\n\nwindow.ArticleEventPanel = ArticleEventPanel;\nexport default ArticleEventPanel;\n","const EventRepublishButton = createReactClass({\n getInitialState: function() {\n return {count: this.props.count, dispatched: false};\n },\n UNSAFE_componentWillReceiveProps: function(nextProps) {\n if(this.state.count !== nextProps.count){\n this.setState({count: nextProps.count});\n }\n },\n updateCount: function(){\n $.getJSON(\"/administrate_event/event_awaiting_republishing_count\").done(function(data){\n this.setState({count: data.count, dispatched: false});\n }.bind(this));\n },\n componentDidMount: function() {\n setInterval(this.updateCount, 30000);\n },\n initaiateRepublishing: function(e){\n e.preventDefault();\n this.setState({dispatched: true});\n EventTableAction.initiateRepublishing();\n },\n render: function(){\n let republishText = \"Republish flagged events to search\";\n if(this.state.dispatched){\n republishText = \"Republish request sent\";\n }\n return (\n

    {republishText} ({this.state.count} awaiting republishing)

    \n );\n }\n});\n\nexport default EventRepublishButton;\n","const EventListTitle = (props) => {\n let eventType = \"Awaiting Publishing\";\n if(props.viz === \"hidden\"){\n eventType = \"Hidden\";\n }\n else if(props.viz === \"visible\"){\n eventType = \"Visible/Published\";\n }\n else if(props.viz === \"queued\"){\n eventType = \"queued\";\n }\n else if(props.viz === \"all\"){\n eventType = \"all\";\n }\n return (\n

    Event list - showing {eventType} events

    \n );\n};\n\nexport default EventListTitle;\n","const EventTitle = (props) => {\n const backgroundColor = \"#\" + props.event.color;\n const divStyle = {\n width: \"100%\",\n backgroundColor: backgroundColor,\n marginLeft: \"-8px\",\n marginRight: \"-8px\",\n marginTop: \"-8px\",\n padding: \"8px\"\n };\n const h4Style = {color: \"#fff\"};\n if(props.event.category === \"opinion\"){\n divStyle.backgroundColor = \"#fff\";\n divStyle.border = \"solid 1px #\" + props.event.color;\n h4Style.color = \"#\" + props.event.color;\n }\n return (\n
    \n

    {props.event.title}

    \n
    \n );\n};\n\nexport default EventTitle;\n","const EventDate = (props) => {\n const divStyle = {width: \"100%\", marginBottom: \"5px\", marginTop: \"5px\"};\n const dateString = moment(parseInt(props.event.dateMilli)).utcOffset(\"-0500\").format(\"MMMM Do YYYY, h:mm:ss a %:z\");\n return (\n
    \n \n {props.event.full_cat_name}\n {dateString}\n \n
    \n );\n};\n\nexport default EventDate;\n","const EventContent = (props) => {\n return (\n

    {props.event.content}

    \n );\n};\n\nexport default EventContent;\n","const OrgEntity = (props) => {\n const publishableConceptRefs = [...props.org.publishable_concept_refs];\n publishableConceptRefs.forEach((e, i) => publishableConceptRefs[i]=e.substring(0,12));\n const industries = ({publishableConceptRefs.join(\", \")})\n const location = props.org.location ? \" (\" + props.org.location + \")\" : null;\n return (\n {props.org.name}{location} {industries}; \n );\n};\n\nexport default OrgEntity;\n","import Reflux from \"reflux\";\nimport OrgEntity from \"./orgEntity\";\nimport EventTableStore from \"@javascript/stores/eventTableStore\";\n\nconst EventOrgEntities = createReactClass({\n mixins: [Reflux.connect(EventTableStore)],\n getInitialState: function(){\n return EventTableStore.eventData;\n },\n render: function () {\n let refsInEvent = [];\n const allIndustry = this.state.industry_type === \"\";\n const orgEntities = this.props.orgs.map(function (org) {\n refsInEvent = refsInEvent.concat(org.publishable_concept_refs);\n return ;\n });\n if (!allIndustry && !refsInEvent.includes(this.state.industry_type)) {\n return (\n
    {orgEntities}
    \n );\n }\n else {\n return (\n
    {orgEntities}
    \n );\n }\n }\n});\n\nexport default EventOrgEntities;\n","const NonOrgEntity = (props) => {\n const entityProperties = props.ent.prop_string ? \" \" + props.ent.prop_string : null;\n return (\n {props.ent.name}{entityProperties}; \n );\n};\n\nexport default NonOrgEntity;\n","import NonOrgEntity from \"./nonOrgEntity\";\n\nconst EventNonOrgEntities = (props) => {\n const nonOrgEntities = props.ents.map(function (ent) {\n return ;\n });\n return (\n
    {nonOrgEntities}
    \n );\n};\n\nexport default EventNonOrgEntities;\n","export const clinicalStageLabels = {\n \"pre_clin\": \"Preclinical/NC study\",\n \"clin_stage_1\": \"Ph.1 trial\",\n \"clin_stage_2\": \"Ph.2 trial\",\n \"clin_stage_3\": \"Ph.3 trial\",\n \"clin_stage_4\": \"Post-approval trial\"\n};\n","import { clinicalStageLabels } from \"../../../config/clinicalStages\";\n\nconst EventProperties = (props) => {\n if(props.event.independent_properties && props.event.independent_properties.clin_stage) {\n const eventProperties = props.event.independent_properties.clin_stage.map(function(prop){\n return {clinicalStageLabels[prop]}; ;\n });\n return (\n
    \n

    Properties: {eventProperties}

    \n
    \n );\n }\n else {\n return false;\n }\n};\n\nexport default EventProperties;\n","import EventOrgEntities from \"./eventOrgEntities\";\nimport EventNonOrgEntities from \"./eventNonOrgEntities\";\nimport EventProperties from \"./eventProperties\";\n\nconst EventEntities = (props) => {\n const orgs = _.filter(props.event.entities, function (ent) {\n return ent.ent_type === \"Organization\";\n });\n const otherEntities = _.filter(props.event.entities, function (ent) {\n return ent.ent_type !== \"Organization\";\n });\n const tableStyle = {marginBottom: \"-5px\", width: \"100%\"};\n const headerStyle = {borderStyle: \"none\", paddingBottom: \"0px\", width: \"50%\"};\n const cellStyle = {borderStyle: \"none\", width: \"50%\"};\n return (\n \n \n \n \n \n \n \n \n \n \n \n \n \n
    InvolvingEntities and properties
    \n \n \n \n \n
    \n );\n};\n\nexport default EventEntities;\n","const AdminModal = createReactClass({\n componentDidMount: function(){\n let modal = ReactDOM.findDOMNode(this);\n $(modal).modal('show');\n $(modal).on('hidden.bs.modal', this.props.handleHideModal);\n },\n render: function(){\n return (\n // if removing this modal system, we should consider the maps page. With the new, one modal for all approach, we've cured the problem of opening a modal from a modal (which erases the modal contents and replaces it). We need a way of preserving a modal that opens a new modal (modal from modal).\n
    \n
    \n {this.props.children}\n
    \n
    \n )\n }\n});\n\nwindow.AdminModal = AdminModal;\nexport default AdminModal;\n","const AdminModalHeader = createReactClass({\n render: function(){\n const titleStyle = { color:'#fff' };\n const divStyle = { backgroundColor: '#000' };\n return (\n
    \n

    \n {this.props.children}\n

    \n
    \n )\n }\n});\n\nwindow.AdminModalHeader = AdminModalHeader;\nexport default AdminModalHeader;\n","const AdminModalBody = (props) => {\n const divStyle = props.style || { paddingTop: '20px', paddingBottom: '20px' };\n return (\n
    \n {props.children}\n
    \n )\n};\n\nwindow.AdminModalBody = AdminModalBody;\nexport default AdminModalBody;\n\n","const EditEventDateForm = createReactClass({\n getInitialState: function () {\n return {\n eventDateString: moment(parseInt(this.props.event.dateMilli)).format(\"DD/MM/YYYY HH:mm\"),\n validDate: false,\n errors: \"\"\n }\n },\n handleDateChange: function (ev) {\n const eventDateString = ev.target.value;\n const momentValue = moment(eventDateString, \"DD/MM/YYYY HH:mm\", true)\n\n if (momentValue.isAfter(moment())) {\n this.setState({\n eventDateString: eventDateString,\n validDate: false,\n errors: \"Event date cannot be in the future\"\n });\n }\n else {\n this.setState({\n eventDateString: eventDateString,\n validDate: momentValue.isValid(),\n errors: \"\"\n });\n }\n\n },\n submitHandler: function (e) {\n e.preventDefault();\n const momentValue = moment(this.state.eventDateString, \"DD/MM/YYYY HH:mm\", true);\n if (momentValue.isValid()) {\n EventModifyModalAction.updateDate(momentValue);\n this.props.closeForm(e);\n }\n },\n setDateToNow: function (e) {\n e.preventDefault();\n const now = moment();\n EventModifyModalAction.updateDate(now);\n this.props.closeForm(e);\n },\n render: function () {\n const buttonStyle = {marginLeft: \"3px\"};\n const submitIcon = this.state.validDate ? \"icon-ok\" : \"icon-ok icon-white\";\n return (\n
    \n
    \n \n \n \n \n
    \n \n \n );\n }\n});\n\nexport default EditEventDateForm;\n","import EditEventDateForm from \"./editEventDateForm\";\n\nconst EventDateHandler = createReactClass({\n getInitialState: function () {\n return {showInputDateField: false, loading: false};\n },\n showDateInput: function (e) {\n e.preventDefault();\n this.setState({showInputDateField: true});\n },\n showDate: function (e) {\n e.preventDefault();\n this.setState({showInputDateField: false});\n },\n render: function () {\n const divStyle = {width: '100%', marginBottom: '5px', marginTop: '5px'};\n const dateString = moment(parseInt(this.props.event.dateMilli)).format(\"MMMM Do YYYY, h:mm:ss a\");\n if (this.state.showInputDateField) {\n return (\n
    \n \n
    \n );\n }\n else {\n return (\n
    \n \n {dateString}\n \n
    \n );\n }\n }\n});\n\nexport default EventDateHandler;\n","const EditOrgEntity = (props) => {\n const removeOrg = (e) => {\n e.preventDefault();\n EventModifyModalAction.removeEntity(props.org.rec_id);\n };\n const publishableConceptRefs = props.org.publishable_concept_refs ? [...props.org.publishable_concept_refs] : [];\n publishableConceptRefs.forEach((e, i) => publishableConceptRefs[i]=e.substring(0,12));\n const industries = publishableConceptRefs.length > 0 ? ({publishableConceptRefs.join(\", \")}) : null;\n const location = props.org.location ? \" (\" + props.org.location + \") \" : null;\n return (\n \n {props.org.name} {location}{industries};\n \n );\n};\n\nexport default EditOrgEntity;\n","import EditOrgEntity from \"./editOrgEntity\";\n\nconst EditEventOrgEntities = (props) => {\n const editOrgEntities = props.orgs.map(function (org) {\n return ;\n });\n return (\n
    {editOrgEntities}
    \n );\n};\n\nexport default EditEventOrgEntities;\n","const EditNonOrgEntity = (props) => {\n const removeEntity = (e) => {\n e.preventDefault();\n EventModifyModalAction.removeEntity(props.ent.rec_id);\n };\n const entityProperties = props.ent.prop_string ? \" \" + props.ent.prop_string : null;\n return (\n \n {props.ent.name} {entityProperties};\n \n );\n};\n\nexport default EditNonOrgEntity;\n","import EditNonOrgEntity from \"./editNonOrgEntity\";\n\nconst EditEventNonOrgEntities = (props) => {\n const editNonOrgEntities = props.ents.map(function (entity) {\n return ;\n });\n return (\n
    {editNonOrgEntities}
    \n );\n};\n\nexport default EditEventNonOrgEntities;\n","import { clinicalStageLabels } from \"../../../config/clinicalStages\";\n\nconst RemoveClinicalStage = (props) => {\n\n const removeStage = (e) => {\n e.preventDefault();\n EventModifyModalAction.removeClinStage(props.stage);\n };\n const stageName = clinicalStageLabels[props.stage];\n return (\n {stageName} \n );\n};\n\nexport default RemoveClinicalStage;\n","import RemoveClinicalStage from \"./removeClinicalStage\";\n\nconst EditEventProperties = (props) => {\n if (props.event.independent_properties && props.event.independent_properties.clin_stage) {\n const editEventProperties = props.event.independent_properties.clin_stage.map(function (stage, index) {\n return ;\n })\n return (\n

    \n Event properties: {editEventProperties}\n

    \n );\n }\n else {\n return false;\n }\n};\n\nexport default EditEventProperties;\n","import { clinicalStageLabels } from \"../../../config/clinicalStages\";\n\nconst AddClinicalStagePropertyPicker = (props) => {\n\n const handleChange = (event) => {\n EventModifyModalAction.addClinStage(event.target.value);\n };\n const properties = props.event.independent_properties;\n const currentStages = properties && properties.clin_stage ? properties.clin_stage : [];\n const unselectedStages = _.reject(_.keys(clinicalStageLabels), function (stage) {\n return _.contains(currentStages, stage);\n }, currentStages);\n\n const buttonStyle = {marginLeft: \"3px\"};\n\n if (unselectedStages.length > 0) {\n const stageOptions = unselectedStages.map(function (stage, index) {\n return ;\n });\n return (\n
    \n \n \n \n );\n }\n else {\n return false;\n }\n};\n\nexport default AddClinicalStagePropertyPicker;\n","import AddClinicalStagePropertyPicker from \"./addClinicalStagePropertyPicker\";\n\nconst AddClinicalTrialPropertyPanel = createReactClass({\n getInitialState: function () {\n return {closed: true};\n },\n toggleClose: function (e) {\n e.preventDefault();\n this.setState({closed: !this.state.closed});\n },\n render: function () {\n if (this.state.closed) {\n return (\n

    \n Add property\n

    \n );\n }\n else {\n return ;\n }\n }\n});\n\nexport default AddClinicalTrialPropertyPanel;\n","export const eventEditModalStyle = {\n table: {\n marginBottom: \"-5px\",\n width: \"100%\"\n },\n header: {\n borderStyle: \"none\",\n paddingBottom: \"0px\",\n width: \"50%\"\n },\n cell: {\n borderStyle: \"none\",\n width: \"50%\"\n },\n industryMismatch: {\n borderStyle: \"none\",\n width: \"50%\",\n backgroundColor: \"yellow\"\n },\n};\n","import EditEventOrgEntities from \"./editEventOrgEntities\";\nimport EditEventNonOrgEntities from \"./editEventNonOrgEntities\";\nimport EditEventProperties from \"./editEventProperties\";\nimport AddClinicalTrialPropertyPanel from \"./addClinicalTrialPropertyPanel\";\nimport { eventEditModalStyle } from \"../../../config/administrateEvent\";\n\nconst EditEventEntities = (props) => {\n const orgs = _.filter(props.event.entities, function (entity) {\n return entity.ent_type === \"Organization\";\n });\n const otherEntities = _.filter(props.event.entities, function (entity) {\n return entity.ent_type !== \"Organization\";\n });\n return (\n \n \n \n \n \n \n \n \n \n \n \n \n \n
    InvolvingEntities and properties
    \n \n \n \n \n \n
    \n );\n};\n\nexport default EditEventEntities;\n","const AddEntityLink = (props) => {\n const addEntity = (e) => {\n e.preventDefault();\n EventModifyModalAction.addEntity(props.entity);\n };\n const paragraphStyle = {marginBottom: \"3px\"};\n\n const publishableConceptRefs = props.entity.publishable_concept_refs ? [...props.entity.publishable_concept_refs] : [];\n publishableConceptRefs.forEach((e, i) => publishableConceptRefs[i]=e.substring(0,12));\n const industry = publishableConceptRefs.length > 0 ? ({publishableConceptRefs.join(\", \")}) : null;\n\n return (\n

    \n {props.entity.name} {industry}\n

    \n );\n};\n\nexport default AddEntityLink;\n","import AddEntityLink from \"./addEntityLink\";\n\nconst AddEntityLinks = (props) => {\n const addEntityLinks = props.entities.map(function(entity, index){\n return ;\n });\n return (\n
    \n {addEntityLinks}\n
    \n );\n};\n\nexport default AddEntityLinks;\n","import AddEntityLinks from \"./addEntityLinks\";\nimport { eventEditModalStyle } from \"../../../config/administrateEvent\";\n\nconst AddEntityLinksPanel = (props) => {\n return (\n \n \n \n \n \n \n \n \n );\n};\n\nexport default AddEntityLinksPanel;\n","import AddEntityLinksPanel from \"./addEntityLinksPanel\";\nimport { eventEditModalStyle } from \"../../../config/administrateEvent\";\n\nconst AddEntitiesFromDoc = createReactClass({\n getInitialState: function(){\n return {showLinks: true};\n },\n toggleDisplay: function(e){\n e.preventDefault();\n this.setState({showLinks: !this.state.showLinks});\n },\n render: function () {\n let orgs = _.filter(this.props.entities, function (ent) {\n return ent.ent_type === \"Organization\";\n });\n orgs = _.sortBy(orgs, function(org){ return org.name.toLowerCase()});\n let otherEntities = _.filter(this.props.entities, function (ent) {\n return ent.ent_type !== \"Organization\";\n });\n otherEntities = _.sortBy(otherEntities, function(ent){ return ent.name.toLowerCase()});\n\n let toggleText = \"..show\";\n if(this.state.showLinks){\n toggleText = \"hide\";\n }\n else{\n orgs = [];\n otherEntities = [];\n }\n return (\n \n \n \n \n \n \n \n \n \n \n
    Orgs in sourceOther entities in source {toggleText}
    \n );\n }\n});\n\nexport default AddEntitiesFromDoc;\n","import AddEntitiesFromDoc from \"./addEntitiesFromDoc\";\n\nconst AddEntityPanel = createReactClass({\n getInitialState: function () {\n return {sourceEntities: []};\n },\n componentDidMount: function () {\n const url = \"/administrate_event/\" + this.props.event.id + \"/initial_source_entities\";\n $.get(url, function (result) {\n this.setState({sourceEntities: result});\n }.bind(this));\n },\n render: function () {\n const currentEntityIds = _.map(this.props.event.entities, function (ent) {\n return ent.rec_id\n });\n const unusedEntityIds = _.reject(this.state.sourceEntities, function (ent) {\n return _.contains(currentEntityIds, ent.rec_id);\n }, currentEntityIds);\n\n return ;\n }\n});\n\nexport default AddEntityPanel;\n","const AutocompleteSearchPanel = (props) => {\n const handleChange = (event) => {\n EntSearchAction.searchFor(event.target.value);\n };\n return (\n \n );\n};\n\nexport default AutocompleteSearchPanel;\n","// this component is near identical to AddEntityLink\n// save for the action performed in addEntity\n// should be candidate for bits and bobs refactor\n// -- GJ 2023.10.09\n\nconst AutocompleteResult = (props) => {\n const addEntity = (e) => {\n e.preventDefault();\n EntSearchAction.choseEntity(props.entity);\n };\n const paragraphStyle = {marginBottom: \"3px\"};\n\n const publishableConceptRefs = props.entity.publishable_concept_refs ? [...props.entity.publishable_concept_refs] : [];\n publishableConceptRefs.forEach((e, i) => publishableConceptRefs[i]=e.substring(0,12));\n const industry = publishableConceptRefs.length > 0 ? ({publishableConceptRefs.join(\", \")}) : null;\n\n return (\n

    \n {props.entity.name} {industry}\n

    \n );\n};\n\nexport default AutocompleteResult;\n","import AutocompleteResult from \"./autocompleteResult\";\n\nconst AutocompleteResults = (props) => {\n if(props.results.length > 0) {\n const autocompleteResults = props.results.map(function(entity){\n return ;\n });\n return (\n
    \n {autocompleteResults}\n
    \n );\n }\n else{\n return false;\n }\n};\n\nexport default AutocompleteResults;\n","import Reflux from \"reflux\";\nimport AutocompleteSearchPanel from \"./autocompleteSearchPanel\";\nimport AutocompleteResults from \"./autocompleteResults\";\nimport { eventEditModalStyle } from \"../../../config/administrateEvent\";\n\nconst FindNewEntityPanel = createReactClass({\n mixins: [Reflux.connect(EntSearchStore)],\n getInitialState: function () {\n return EntSearchStore.data;\n },\n render: function(){\n return (\n \n \n \n \n \n \n \n
    \n \n \n \n
    \n )\n }\n});\n\nexport default FindNewEntityPanel;\n","const RemoveIndustryLink = (props) => {\n const removeIndustry = (e) => {\n e.preventDefault();\n EventModifyModalAction.removeIndustry(props.industry);\n };\n const paragraphStyle = {marginBottom: \"3px\"};\n return (\n

    \n {props.industry}\n

    \n );\n};\n\nexport default RemoveIndustryLink;\n","import RemoveIndustryLink from \"./removeIndustryLink\";\n\nconst RemoveIndustryLinks = (props) => {\n const industries = props.industries.map(function (industry, index) {\n return ;\n });\n return (\n
    {industries}
    \n )\n};\n\nexport default RemoveIndustryLinks;\n","const AddIndustryLink = (props) => {\n const addIndustry = (e) => {\n e.preventDefault();\n EventModifyModalAction.addIndustry(props.industry);\n };\n const paragraphStyle = {marginBottom: \"3px\"};\n return (\n

    \n {props.industry}\n

    \n );\n};\n\nexport default AddIndustryLink;\n","import AddEntityLink from \"./addEntityLink\";\nimport AddIndustryLink from \"./addIndustryLink\";\n\nconst AddIndustryLinks = (props) => {\n const addIndustryLinks = props.industries.map(function(ind){\n return ;\n });\n return (\n
    {addIndustryLinks}
    \n );\n};\n\nexport default AddIndustryLinks;\n","import RemoveIndustryLinks from \"./removeIndustryLinks\";\nimport AddIndustryLinks from \"./addIndustryLinks\";\nimport { eventEditModalStyle } from \"../../../config/administrateEvent\";\n\nconst EditIndustriesFromDoc = createReactClass({\n getInitialState: function(){\n return { showLinks: true, eventData: EventModifyModalStore.eventData };\n },\n toggleDisplay: function(e){\n e.preventDefault();\n this.setState({showLinks: !this.state.showLinks, eventData: EventModifyModalStore.eventData});\n },\n checkForMismatch: function(industries){\n const adminIndustry = this.state.eventData.admin_industry;\n let tdStyle = eventEditModalStyle.industryMismatch;\n let tdClassname = \"mismatched-industry-highlight\";\n if (industries.includes(adminIndustry)) {\n tdStyle = eventEditModalStyle.cell;\n tdClassname = \"\";\n }\n return (\n \n \n \n );\n },\n render: function () {\n let industries = this.props.industries;\n let possibleIndustries = this.props.possibleIndustries;\n let toggleText = \"..show\";\n if(this.state.showLinks){\n toggleText = \"hide\";\n }\n else{\n industries = [];\n possibleIndustries = [];\n }\n return (\n \n \n \n \n \n \n \n \n \n {this.checkForMismatch(industries)}\n \n \n \n
    IndustriesPossible Industries {toggleText}
    \n \n
    \n );\n }\n});\n\nexport default EditIndustriesFromDoc;\n","import EditIndustriesFromDoc from \"./editIndustriesFromDoc\";\nimport { getAllPublishableConceptRefs } from \"../../../helpers/administrateEvent\";\n\nconst EditIndustryPanel = (props) => {\n let industries = props.event.industry_concept_refs;\n let possibleIndustries = getAllPublishableConceptRefs(props.event.entities);\n possibleIndustries=possibleIndustries.filter(ind => !industries.includes(ind));\n return ;\n};\n\nexport default EditIndustryPanel;\n","const AdminModalFooter = (props) => {\n return (\n
    \n {props.children}\n
    \n )\n};\n\nwindow.AdminModalFooter = AdminModalFooter;\nexport default AdminModalFooter;\n","import AdminModalFooter from \"../../generic/modals/adminModalFooter\";\nimport { getAllPublishableConceptRefs } from \"../../../helpers/administrateEvent\";\n\nconst EditEventFooter = (props) => {\n const saveEvent = (e) => {\n e.preventDefault();\n EventModifyModalAction.saveEventChanges(false);\n };\n const saveEventVisible = (e) => {\n e.preventDefault();\n EventModifyModalAction.saveEventChanges(true);\n };\n const saveEventNow = (e) => {\n e.preventDefault();\n const now = moment();\n EventModifyModalAction.updateDate(now);\n EventModifyModalAction.saveEventChanges(true);\n };\n let saveButton;\n let cancelButton;\n let makeVisible;\n let publishAsNow;\n if (props.saving) {\n saveButton = Saving;\n cancelButton = ;\n }\n else {\n if(props.event.hidden){\n if(props.event.awaiting_first_publication){\n makeVisible = Make Visible;\n publishAsNow = Publish as Now;\n }\n else{\n makeVisible = Save and make visible;\n }\n }\n saveButton = Save;\n cancelButton = Cancel;\n }\n const hasPublishableEntities = _.find(props.event.entities, function(entity){\n return entity.is_publishable;\n });\n\n const allPublishableConceptRefs = getAllPublishableConceptRefs(props.event.entities);\n const hasPublishableIndustries = (props.event.industry_concept_refs.every(ind => allPublishableConceptRefs.includes(ind)) && props.event.industry_concept_refs.length > 0);\n\n if(!hasPublishableEntities || !hasPublishableIndustries){\n makeVisible = null;\n publishAsNow = null;\n saveButton = null;\n }\n return (\n \n {publishAsNow}\n {makeVisible}\n {saveButton}\n {cancelButton}\n \n );\n};\n\nexport default EditEventFooter;\n","import Reflux from \"reflux\";\nimport ReactDOM from \"react-dom\";\n\nimport AdminModal from \"../../generic/modals/adminModal\";\nimport AdminModalHeader from \"../../generic/modals/adminModalHeader\";\nimport AdminModalBody from \"../../generic/modals/adminModalBody\";\nimport EventDateHandler from \"./eventDateHandler\";\nimport EditEventEntities from \"./editEventEntities\";\nimport AddEntityPanel from \"./addEntityPanel\";\nimport FindNewEntityPanel from \"./findNewEntityPanel\";\nimport EditIndustryPanel from \"./editIndustryPanel\";\nimport EditEventFooter from \"./editEventFooter\";\n\nconst EventModifyModal = createReactClass({\n mixins: [Reflux.connect(EventModifyModalStore)],\n getInitialState: function () {\n const eventCopy = jQuery.extend(true, {}, this.props.event);\n return {event: eventCopy, eventData: EventModifyModalStore.eventData};\n },\n UNSAFE_componentWillMount: function () {\n const eventCopy = jQuery.extend(true, {}, this.props.event);\n EventModifyModalAction.initialLoad(eventCopy, this.props.handleHideModal, this.props.admin_industry);\n },\n componentDidMount() {\n setTimeout(\n function() {\n let eventElement = document.getElementById('modal_source_content_highlight');\n eventElement.scrollIntoView({behavior: \"smooth\", block: \"center\", inline: \"nearest\"});\t// The 'true' parameter will make it align-top; remove it if you experience any issues\n },300);\n },\n componentWillUnmount: function () {\n let modal = ReactDOM.findDOMNode(this.refs.event_modify_modal);\n $(modal).modal('hide');\n },\n eventHighlight: function () {\n let evContent = this.state.event.content.replace(/\\s?\\\"?\\.\\.\\.\\\"?\\s?/g, \"\");\n let evSourceContent = this.state.event.source_content;\n let splitContent = evSourceContent.split(evContent);\n let preEventText = splitContent[0];\n splitContent.shift();\n\n let boldEvent = {evContent};\n\n if (evSourceContent === preEventText) { // Auto-generated events may not have an exact match with their source doc.\n return (\n
    \n

    \n

    Event

    \n {boldEvent}\n
    \n

    Source Document

    \n {evSourceContent}\n

    \n
    \n );\n } else {\n return (\n
    \n

    \n {preEventText}\n {boldEvent}\n {splitContent.join(evContent)}\n

    \n
    \n );\n };\n },\n render: function () {\n return (\n \n Modifying event\n \n
    \n

    {this.state.event.title}

    \n
    \n
    \n {this.eventHighlight()}\n
    \n \n \n \n \n \n
    \n \n
    \n );\n }\n});\n\nexport default EventModifyModal;\n","import EventModifyModal from \"../eventModifyModal\";\n\nconst ModifyEvent = createReactClass({\n getInitialState: function(){\n return {\n view: {\n showModal: false\n },\n industry_type: \"\"\n };\n },\n handleHideModal: function(){\n this.setState({\n view: {\n showModal: false\n }\n });\n },\n handleShowModal: function(){\n this.setState({\n view: {\n showModal: true\n },\n industry_type: EventTableStore.eventData.industry_type\n });\n },\n render: function(){\n const event = _.clone(this.props.event);\n const adminIndustry = _.clone(this.state.industry_type);\n const eventModifyModal = this.state.view.showModal ? : null;\n return(\n
    \n Modify event...\n {eventModifyModal}\n
    \n );\n }\n});\n\nexport default ModifyEvent;\n","import EventTitle from \"./eventTitle\";\nimport EventDate from \"./eventDate\";\nimport EventContent from \"./eventContent\";\nimport EventEntities from \"./eventEntities\";\nimport ModifyEvent from \"./modifyEvent\";\n\nconst EventDisplayCell = (props) => {\n return (\n \n \n \n \n \n \n );\n};\n\nexport default EventDisplayCell;\n","const EventStatusCell = (props) => {\n let eventStatus = \"Visible\";\n if (props.event.hidden) {\n eventStatus = \"Hidden\";\n }\n if (props.event.awaiting_first_publication || props.event.republish_flag) {\n if(props.event.republish_flag) {\n eventStatus = eventStatus + \"/Queued for republishing\";\n }\n else{\n eventStatus = eventStatus + \"/Awaiting publishing\";\n }\n }\n if(props.event.loading){\n eventStatus =
    \"loading...\"
    ;\n }\n return (\n {eventStatus}\n );\n};\n\nexport default EventStatusCell;\n","const EventActionForVisible = (props) => {\n const hideEvent = (e) => {\n e.preventDefault();\n EventTableAction.hideEvent(props.event);\n };\n return (\n

    Hide

    \n );\n};\n\nexport default EventActionForVisible;\n","const EventActionForHiddenAndPublishable = (props) => {\n const makeVisible = (e) => {\n e.preventDefault();\n EventTableAction.showEvent(props.event);\n };\n const publishAsNow = (e) => {\n e.preventDefault();\n EventTableAction.publishAsNow(props.event);\n };\n return (\n
    \n

    \n Make visible\n

    \n

    \n Publish as NOW!\n

    \n
    \n );\n};\n\nexport default EventActionForHiddenAndPublishable;\n","import EventActionForVisible from \"./eventActionForVisible\";\nimport EventActionForHiddenAndPublishable from \"./eventActionForHiddenAndPublishable\";\n\n// this should be refactored... lots to grok\nconst EventActionCell = (props) => {\n if (!props.event.hidden) {\n return (\n \n );\n }\n if (props.event.industry_concept_refs.length === 0) {\n return

    Hidden event has no industry focus assigned

    \n }\n\n if (props.event.industry_concept_refs.length > 1) {\n return

    Hidden event with multiple industry focus

    \n }\n\n const eventIndustryConceptRef = props.event.industry_concept_refs[0];\n const isIndustryMatched = _.find(props.event.entities, function(ent){\n return ent.publishable_concept_refs.includes(eventIndustryConceptRef);\n });\n\n if (!isIndustryMatched){\n return (\n

    Hidden event with industry focus mismatch

    \n );\n }\n\n const hasPublishableEntities = _.find(props.event.entities, function(ent){\n return ent.is_publishable;\n });\n\n if (!hasPublishableEntities) {\n return (\n

    Hidden event has no publishable orgs associated

    \n );\n }\n\n return (\n \n );\n};\n\nexport default EventActionCell;\n","const EventCreatedByCell = (props) => {\n let text = \"\";\n if (props.event.created_by) {\n text = props.event.created_by;\n }\n return (\n {text}\n );\n};\n\nexport default EventCreatedByCell;\n","const EventEditCell = (props) => {\n const deleteEvent = (e) => {\n e.preventDefault();\n if(window.confirm(\"Are you really sure you want to delete this event? This cannot be undone!\")){\n EventTableAction.deleteEvent(props.event);\n }\n };\n const editUrl = props.event.id + \"/edit_event\";\n let deleteLink;\n if(props.event.awaiting_first_publication){\n deleteLink =

    delete

    ;\n }\n return (\n \n

    edit

    \n {deleteLink}\n \n );\n};\n\nexport default EventEditCell;\n","import EventDisplayCell from \"./eventDisplayCell\";\nimport EventStatusCell from \"./eventStatusCell\";\nimport EventActionCell from \"./eventActionCell\";\nimport EventCreatedByCell from \"./eventCreatedByCell\";\nimport EventEditCell from \"./eventEditCell\";\n\nconst EventRow = (props) => {\n const eventRowId = \"event_row_\" + props.event.id;\n return (\n \n \n \n \n \n \n \n );\n};\n\nexport default EventRow;\n","import EventRow from \"./eventRow\";\n\nconst EventTable = (props) => {\n const tableStyle = {backgroundColor: \"#fff\"};\n const eventRows = props.events.map(function (event) {\n return (\n \n );\n });\n return (\n \n \n \n \n \n \n \n \n \n \n \n {eventRows}\n \n
    EventVisibilityChange visibilityCreated byEdit
    \n );\n};\n\nexport default EventTable;\n","import Reflux from \"reflux\";\nimport EventRepublishButton from \"./eventRepublishButton\";\nimport EventListTitle from \"./eventListTitle\";\nimport EventTable from \"./eventTable\";\nimport EventTableStore from \"@javascript/stores/eventTableStore\";\n\nconst EventListPanel = createReactClass({\n mixins: [Reflux.connect(EventTableStore)],\n getInitialState: function () {\n return EventTableStore.eventData;\n },\n componentDidMount: function () {\n EventTableAction.initialLoad(this.props.events, this.props.viz, this.props.industry_type, this.props.query, this.props.init_repub_count, this.props.created_by, this.props.page);\n },\n render: function () {\n return (\n
    \n \n \n \n
    \n );\n }\n});\n\nwindow.EventListPanel = EventListPanel;\nexport default EventListPanel;\n","import PropTypes from \"prop-types\";\nimport { useContext, useEffect, useRef, useState } from \"react\";\nimport { AccordionContext } from \"./Accordion\";\n\nexport function AccordionContent({\n children,\n className,\n gap,\n lazy = true,\n maxHeight,\n style = {},\n id\n}) {\n const { open } = useContext(AccordionContext);\n\n const contentRef = useRef();\n const openedOnceRef = useRef(false);\n\n const handleTransitionEnd = () => {\n if (open) {\n contentRef.current.style.height = \"auto\";\n contentRef.current.style.marginTop = gap\n }\n };\n\n const updateContentHeight = () => {\n contentRef.current.style.marginTop = gap;\n contentRef.current.style.height = contentRef.current.scrollHeight + \"px\";\n };\n\n useEffect(() => {\n if (open) {\n openedOnceRef.current = true;\n\n updateContentHeight();\n } else {\n updateContentHeight();\n\n // Update on the next paint, so that it animates correctly\n setTimeout(() => {\n if (contentRef.current) {\n contentRef.current.style.height = \"0px\";\n contentRef.current.style.marginTop = \"0px\"\n }\n }, 10);\n }\n }, [open]);\n\n const classNames = [\"lds-accordion-content\", open ? \"open\" : \"\", className];\n\n return (\n \n {/* The component instance is lazy loaded. Makes animation + performance easier. */}\n {(open || openedOnceRef.current || !lazy) && children}\n \n );\n}\n\nAccordionContent.propTypes = {\n className: PropTypes.string,\n id: PropTypes.any,\n lazy: PropTypes.bool,\n maxHeight: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),\n style: PropTypes.object,\n};\n","import PropTypes from \"prop-types\";\nimport { useContext } from \"react\";\nimport { AccordionContext } from \"./Accordion\";\n\nexport function AccordionTrigger({ children, className, onClick, id }) {\n const { toggle } = useContext(AccordionContext);\n\n return (\n \n {children}\n \n );\n}\n\nAccordionTrigger.propTypes = {\n className: PropTypes.string,\n style: PropTypes.object,\n onClick: PropTypes.func,\n id: PropTypes.string,\n};\n","import PropTypes from \"prop-types\";\nimport { createContext, useEffect, useState } from \"react\";\nimport { isBoolean, isUndefined } from \"underscore\";\n\n// Allow clients to have cleaner imports\nexport { AccordionContent } from \"@javascript/reactComponents/lds/accordion/AccordionContent\";\nexport { AccordionTrigger } from \"@javascript/reactComponents/lds/accordion/AccordionTrigger\";\n\nexport const AccordionContext = createContext({\n open: false,\n toggle: () => {},\n});\n\nexport default function Accordion({\n id,\n className,\n children,\n initialOpen,\n open,\n style,\n}) {\n if (isBoolean(open) && isBoolean(initialOpen)) {\n console.warn(\n \"[LDS Accordion] A controlled accordion should not also have `initialOpen` provided.\"\n );\n }\n\n const [controlledOpen, setControlledOpen] = useState(!!(initialOpen || open));\n\n useEffect(() => {\n if (isBoolean(open)) {\n setControlledOpen(open);\n }\n }, [open]);\n\n const handleToggle = () => {\n if (isUndefined(open)) {\n setControlledOpen(!controlledOpen);\n }\n };\n\n const classNames = [\"lds-accordion-container\", className];\n\n return (\n \n
    \n {children}\n
    \n \n );\n}\n\nAccordion.propTypes = {\n className: PropTypes.string,\n initialOpen: PropTypes.bool,\n open: PropTypes.bool,\n style: PropTypes.object,\n};\n","/**\n * Constants for tracking search filter categories\n */\n\nexport const ALLOWED_SEARCH_FILTER_CATEGORY_TYPES = [\n \"sponsor_company_location\",\n \"company_activity\",\n \"company_relationship\",\n \"trial_phases\",\n \"user_lists\",\n \"trial_status\",\n \"organizations\",\n \"conditions\",\n \"therapies\"\n];\n\n\nexport const COMPANY_ACTIVITY_CATEGORY_TO_LABEL = Object.freeze({\n clin_movements: \"milestone\",\n opinion: \"opinion\",\n results_n_data: \"results\",\n cf_finding: \"funding\",\n partnering: \"partnering\",\n the_rest: \"other\",\n});\n","import { ALLOWED_SEARCH_FILTER_CATEGORY_TYPES } from \"@javascript/constants/search/search_constants\";\n\n\n\n\n/**\n * Removes a specified criteria value (and its HTML encoded version) from a search filter type.\n * The search filter types covered by FacetSearchStore.data.filterCriteria (and therefore this helper) are:\n *\n * - conditions\n * - organizations\n * - therapies\n *\n * It then updates the filter state, if necessary, and triggers a new search if a value was removed.\n *\n * @param {string} criteriaType - The type of filter criteria (e.g. 'conditions', 'organizations', 'therapies')\n * @param {string} criteriaValue - The value to remove from the filter\n * @returns {void} Returns early if value not found in filter\n *\n * @example\n * // Remove \"Acme Corp\" from organizations filter\n * removeSearchCriteriaFilter('organizations', 'Acme Corp');\n *\n * // Remove \"Bloating\" from conditions filter\n * removeSearchCriteriaFilter('conditions', 'Bloating');\n */\n\nexport const removeSearchCriteriaFilter = (criteriaType, criteriaValue) => {\n const currentCriteriaValues = FacetSearchStore.data.filterCriteria[criteriaType];\n const encodedValue = escapeHtml(criteriaValue);\n\n if (!_.include(currentCriteriaValues, criteriaValue) && !_.include(currentCriteriaValues, encodedValue)) {\n return;\n }\n\n const filteredCriteriaValues = _.filter(currentCriteriaValues, (value) => {\n const isNotMatch = value !== criteriaValue;\n const isNotEncodedMatch = value !== escapeHtml(criteriaValue);\n return isNotMatch && isNotEncodedMatch;\n });\n\n if (filteredCriteriaValues.length > 0) {\n FacetSearchStoreActions.updateFilterCriteria(criteriaType, filteredCriteriaValues);\n } else {\n FacetSearchStoreActions.removeFilterCriteria(criteriaType);\n }\n\n // Since we modified the current criteria values, trigger a search\n doEventSearch();\n};\n\n/**\n * Adds a search criteria value to a specified filter type if not already present.\n * Creates a new filter array if none exists for the type.\n * Optionally triggers a new search when filter is modified.\n *\n * @param {string} criteriaType - The type of filter criteria (e.g. 'conditions', 'organizations', 'therapies')\n * @param {string} criteriaValue - The value to add to the filter\n * @param {boolean} [shouldSearch=true] - Whether to trigger a new search after modifying filter\n * @returns {void} Returns early if value already exists in filter\n *\n * @example\n * // Add \"Acme Corp\" to organizations filter and search\n * addSearchCriteriaFilter('organizations', 'Acme Corp');\n *\n * // Add \"Bloating\" to conditions filter without searching\n * addSearchCriteriaFilter('conditions', 'Bloating', false);\n */\nexport const addSearchCriteriaFilter = (criteriaType, criteriaValue, shouldSearch = true) => {\n const currentCriteriaValues = FacetSearchStore.data.filterCriteria[criteriaType];\n const isExistingFilter = currentCriteriaValues !== undefined;\n\n // If a filter for a criteria type exists, check if value is already included\n if (isExistingFilter && _.include(currentCriteriaValues, criteriaValue)) {\n return;\n }\n\n // Update or create the filter\n if (isExistingFilter) {\n FacetSearchStoreActions.addToFilterCriteria(criteriaType, criteriaValue);\n } else {\n FacetSearchStoreActions.updateFilterCriteria(criteriaType, [criteriaValue]);\n }\n\n // Trigger search if requested\n if (shouldSearch) {\n doEventSearch();\n }\n};\n\n\n/**\n * Tracks the state change of a filter category\n * @param {boolean} isOpen - Whether the filter category is being opened (true) or closed (false)\n * @param {string} entity_type - The type of entity being filtered (one of the allowed values)\n */\nexport const trackSearchFilterCategoryState = (isOpen, categoryType) => {\n let trackingEventText = isOpen ? \"opened_filter_category\" : \"closed_filter_category\";\n let trackingText = isOpen ? \"Opened Filter Category\" : \"Closed Filter Category\";\n\n // Validate that categoryType is one of the allowed values\n if (!ALLOWED_SEARCH_FILTER_CATEGORY_TYPES.includes(categoryType)) {\n console.warn(`Invalid categoryType: ${categoryType}. Must be one of: ${ALLOWED_SEARCH_FILTER_CATEGORY_TYPES.join(\", \")}`);\n return; // Don't track if categoryType is invalid\n }\n\n track(trackingEventText, trackingText, { categoryType: categoryType });\n};\n","import { useLayoutEffect, useRef, useState } from \"react\";\nimport PropTypes from \"prop-types\";\n\nimport { isTextElementWrapped } from \"@javascript/reactComponents/utilities/DOMUtilities\";\n\nexport default function FilterItem({\n className,\n disabled = false,\n expanded = false,\n id,\n label,\n leadingContent,\n leadingContentClassName = \"\",\n nested = false,\n onLeadingContentClick,\n onWholeItemClick,\n selected = false,\n trailingContent,\n tooltip,\n variant,\n}) {\n const leadingContentRef = useRef();\n const [isWrapped, setIsWrapped] = useState(false)\n\n useLayoutEffect(() => {\n if (isTextElementWrapped(leadingContentRef.current)) {\n setIsWrapped(true)\n }\n }, [])\n\n if (onLeadingContentClick && onWholeItemClick) {\n console.warn(\"Conflicting click handlers detected: onLeadingContentClick could interfere with onWholeItemClick.\");\n }\n\n const classNames = [\n \"lds-filter-item-container\",\n disabled && \"disabled\",\n expanded && \"expanded\",\n isWrapped && \"align-start\",\n nested && \"nested\",\n onWholeItemClick && \"cursor-pointer\",\n selected && \"selected\",\n variant && `lds-filter-item-${variant}`,\n className, // Parent class always included last\n ].filter(Boolean);\n\n const leadingContentClassNames = [\n \"lds-filter-item-leading-content\",\n leadingContentClassName,\n onLeadingContentClick && !disabled && \"cursor-pointer\"\n ].filter(Boolean);\n\n return (\n
    \n
    \n {leadingContent}\n {label && {\n leadingContentRef.current = ref;\n }}\n >\n {label}\n
    }\n
    \n\n {trailingContent &&
    {trailingContent}
    }\n \n );\n}\n\nFilterItem.propTypes = {\n className: PropTypes.string,\n disabled: PropTypes.bool,\n expanded: PropTypes.bool,\n id: PropTypes.any,\n label: PropTypes.string,\n leadingContent: PropTypes.element,\n leadingContentClassName: PropTypes.string,\n nested: PropTypes.bool,\n onLeadingContentClick: PropTypes.func,\n onWholeItemClick: PropTypes.func,\n selected: PropTypes.bool,\n tooltip: PropTypes.string,\n trailingContent: PropTypes.element,\n variant: PropTypes.oneOf([\n \"brand\",\n \"funding\",\n \"milestone\",\n \"opinion\",\n \"other\",\n \"partnering\",\n \"results\",\n ]),\n};\n","import { useState } from \"react\";\nimport Reflux from \"reflux\";\n\nimport { COMPANY_ACTIVITY_CATEGORY_TO_LABEL } from \"@javascript/constants/search/search_constants\";\nimport { trackSearchFilterCategoryState } from \"@javascript/helpers/searchFilterUtilities\";\n\nimport Accordion from \"@javascript/reactComponents/lds/accordion/Accordion\";\nimport { AccordionContent } from \"@javascript/reactComponents/lds/accordion/AccordionContent\";\nimport { AccordionTrigger } from \"@javascript/reactComponents/lds/accordion/AccordionTrigger\";\n\nimport FacetSearchStore from \"@javascript/stores/facetSearchStore\";\nimport FilterItem from \"@javascript/reactComponents/lds/FilterItem\";\nimport Icon from \"@javascript/reactComponents/lds/Icon\";\n\nfunction FacetSearchCompanyActivity({ data, nested = false }) {\n const { content, id, name, parent, tooltip, type, value } = data;\n const selected = FacetSearchStore.data.activities.selected === id;\n\n const hasNestedItems = !!content && content.length > 0;\n const anyChildrenSelected =\n content &&\n content.find(\n (child) => child.id === FacetSearchStore.data.activities.selected\n );\n\n const [open, setOpen] = useState(!!anyChildrenSelected || selected);\n const toggle = () => {\n trackSearchFilterCategoryState(!open, \"company_activity\");\n setOpen(!open);\n }\n\n // Special behaviour: Clicking label doesn't close it\n // after it has been opened once\n const handleSelect = (event) => {\n event.stopPropagation();\n\n if (!open && !nested && hasNestedItems) {\n setOpen(true);\n }\n\n FacetSearchCompanyActivityActions.activitySelected(id);\n };\n\n let trailingIcon;\n if (hasNestedItems) {\n trailingIcon = \"chevron-\" + (open ? \"up\" : \"down\") + \"-centered\";\n } else {\n trailingIcon = \"placeholder\";\n }\n\n const trailingContent = (\n <>\n {value && value !== \"0\" && value}\n {/* Special behaviour: Trailing icon isn't shown for nested items, but should continue to occupy space... */}\n \n \n );\n\n let disabled = false;\n\n // Business REQ: When user is viewing a feed, and the feed was created with a Company Activity selected,\n // then all other options must be disabled.\n // Old comment: this logic will fail if we get grandchildren or deeper... will need a superset tag: \n // Zymewire.original_feed_query.category != this.props.element_data..superset\n if (\n Zymewire.original_feed_query &&\n typeof Zymewire.original_feed_query.category != \"undefined\"\n ) {\n disabled =\n Zymewire.original_feed_query.category !== \"all_event\" &&\n Zymewire.original_feed_query.category !== parent &&\n Zymewire.original_feed_query.category !== id;\n }\n\n const filterItem = (\n }\n leadingContentClassName={\"a_\" + id}\n nested={nested}\n onLeadingContentClick={handleSelect}\n selected={selected}\n tooltip={tooltip}\n trailingContent={trailingContent}\n variant={\n COMPANY_ACTIVITY_CATEGORY_TO_LABEL[id] || COMPANY_ACTIVITY_CATEGORY_TO_LABEL[parent] || \"other\"\n }\n disabled={disabled}\n />\n );\n\n if (!hasNestedItems) {\n return filterItem;\n } else {\n return (\n \n {filterItem}\n \n {content.map((item) => (\n \n ))}\n \n \n );\n }\n}\n\n// Default export uses createReactClass so we can listen to FacetSearchStore\nexport default createReactClass({\n mixins: [\n Reflux.listenTo(FacetSearchStore, function (data) {\n return data.activities;\n }),\n ],\n render() {\n return ;\n },\n});\n","import FacetSearchStore from \"@javascript/stores/facetSearchStore\";\nimport FilterItem from \"../lds/FilterItem\";\nimport Icon from \"../lds/Icon\";\n\nfunction FacetSearchCompanyWorkingOn({ data }) {\n const { name, id, type, value } = data;\n const selected = FacetSearchStore.data.affiliation.selected === id;\n const leadingContent = ;\n\n const handleSelect = () => {\n const selectedList = {\n orgListId: id,\n name: name,\n listType: \"public\",\n orgCount: value,\n };\n\n // TODO: Ideally, we move doEventSearch() into a store action, and\n // adjust how we determine if an option is selected or not,\n // in order to *exactly* match what is in production.\n FacetSearchListActions.listSelected(selectedList, { skipTrigger: true });\n FacetSearchAffiliatedWithActions.affiliationSelected(id, {\n skipTrigger: true,\n });\n\n doEventSearch();\n };\n return (\n \n );\n}\n\n// Default export uses createReactClass so we can listen to FacetSearchStore\nexport default createReactClass({\n mixins: [\n Reflux.listenTo(FacetSearchStore, function (data) {\n return data.affiliation;\n }),\n ],\n render() {\n return ;\n },\n});\n","import PropTypes from \"prop-types\";\n\nexport default function Divider({\n className = \"\",\n id = \"\",\n size = \"small\",\n variant = \"secondary\"\n}) {\n const classNames = [\"lds-divider\"];\n\n classNames.push(`lds-divider-${size}`);\n classNames.push(`lds-divider-${variant}`);\n classNames.push(className);\n\n return (\n
    \n );\n}\n\nDivider.propTypes = {\n className: PropTypes.string,\n id: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),\n size: PropTypes.oneOf([\"large\", \"small\"]),\n variant: PropTypes.oneOf([\"primary\", \"secondary\"]),\n};\n","// needs to refactored heavily... my first React project circa 2016 lol\n// and since we're upgrading it to do more, it now needs a store\n\nimport Accordion, { AccordionContent, AccordionTrigger } from \"@javascript/reactComponents/lds/accordion/Accordion\";\nimport Chip from \"@javascript/reactComponents/lds/chips/Chip\";\nimport Heading from \"@javascript/reactComponents/lds/typography/Heading\";\nimport FacetSearchCompanyActivity from \"./FacetSearchCompanyActivity\";\nimport FacetSearchCompanyWorkingOn from \"./FacetSearchCompanyWorkingOn\";\nimport Divider from \"../lds/Divider\";\n\n/**\n * Renders event categories (e.g. Milestone activity, funding activity, etc.) and\n * also handles clicking a given category or entire section.\n *\n * @component\n * \n * */\nconst FacetSections = createReactClass({\n mixins: [\n Reflux.connectFilter(FacetSearchStore, \"store\", function (data) {\n return data.activities\n }),\n ],\n getInitialState: function(){\n return {\n facet_filters: prep_facet_filters(),\n }\n },\n UNSAFE_componentWillMount:function(){\n const { facet_filters: { activities, affiliations } } = this.state\n\n FacetSearchCompanyActivityActions.activitiesInitialState(activities.selected);\n FacetSearchAffiliatedWithActions.affiliationsInitialState(affiliations);\n },\n render: function() {\n // Also controls which categories are highlighted,\n // so it needs to update on every render.\n const facet_sections = prep_facet_sections();\n\n return (\n
    \n { _.map(facet_sections, (facet_data) => ) }\n
    \n );\n }\n});\n\nvar FacetSection = createReactClass({\n getInitialState: function(){\n return {\n open: this.props.facet_data.id !== 'affiliated_with'\n }\n },\n toggle: function (){\n this.setState({ open: !this.state.open });\n },\n render: function(){\n const {open} = this.state\n var id = this.props.facet_data.id;\n let div_classes = ['facet_section_label', 'foldable_label'];\n\n // TODO: What is this feature flag supposed to accomplish??\n if(_.contains(Zymewire.user.feature_tags, \"cmo_concepts_and_associations\")) {\n div_classes.push('facet_section_label_CMO', 'foldable_label_CMO');\n }\n\n const iconForId = {\n activity_type: \"activity\",\n affiliated_with: \"microscope\"\n }\n \n const trailingAction = (\n <>\n
    \n \n \n );\n return (\n <>\n \n\n \n \n \n {this.props.facet_data.name}\n \n \n \n \n \n \n \n );\n }\n});\n\nvar FacetContent = createReactClass({\n render: function() {\n let div_classes = [\"flex-col\"];\n if(_.contains(Zymewire.user.feature_tags, \"cmo_concepts_and_associations\")) {\n div_classes.push('facet_section_foldable_content_CMO');\n }\n\n var facet_elements = _.map(this.props.content, function(element, index){\n if(element.type === 'activity'){\n return \n }\n else if(element.type === 'affiliation'){\n return \n }\n else {\n // houstonwehaveaquestionandthatquestionisWTF\n console.log('facet what?')\n return null\n }\n }.bind(this));\n return (\n
    \n {facet_elements}\n
    \n );\n }\n});\n\nwindow.FacetSections = FacetSections;\nexport default FacetSections;\n","/**\n * React component that displays a link to unfurl more items in a list\n *\n * @author\n * @namespace\n * @memberof\n *\n * @component\n * @example\n * return (\n * \n * )\n *\n * @param {String} facetType the type of facet this link is being used with, currently limited to: \"conditions\", \"organizations\", and \"therapies\"\n * @param {Number} bucketLength the length of the list of items to show\n * @param {Function} addMoreFacets unveil more of the list\n * @param {Number} displayCount the maximum amount of items to display before a call to action is displayed instead of \"... show more\"\n *\n */\n\nconst FilterCategoryShowMore = createReactClass({\n componentDidUpdate: function() {\n const showMoreWrapper = $(this.refs.showMoreWrapper);\n const facetType = this.props.facetType;\n const displayCount = this.props.displayCount;\n\n const over_30 = showMoreWrapper.find(\"#\" + facetType + \"_showing_30\");\n const link_id = showMoreWrapper.find(\"#\" + facetType + \"_more\");\n\n displayCount >= this.props.bucketLength ? link_id.hide() : link_id.show();\n displayCount == 30 && typeof Zymewire.is_mapping_page == \"undefined\"\n ? over_30.fadeIn(1000)\n : over_30.hide();\n },\n\n render: function() {\n const facetType = this.props.facetType;\n const bucketLength = this.props.bucketLength;\n\n let furtherText =

    Showing top 30: try narrowing your search

    ;\n let getMoreButton;\n let data = search_data();\n\n if (bucketLength > 10) {\n getMoreButton = (\n this.props.addMoreFacets(event)}\n >\n ...more\n \n );\n }\n\n if(!(empty_search(data))){\n furtherText = (

    \n createListFromQuery()}>More than 30... click to create a list\n

    );\n }\n\n return (\n
    \n {getMoreButton}\n {furtherText}\n
    \n )\n }\n});\n\nexport default FilterCategoryShowMore;\n","export const flattenLocationList = (locationList) => {\n let flattenedList = [];\n locationList.forEach(location =>{\n if(Array.isArray(location.children)) {\n flattenedList.push({code: location.code, name: location.name, parent: location.parent});\n flattenedList.push(...flattenLocationList(location.children));\n } else {\n flattenedList.push({code: location.code, name: location.name, parent: location.parent});\n }\n });\n return flattenedList;\n};\n\nexport const constructSelectableLocationList = (fullLocationList, selectedLocations) => {\n // locationHelpers should be refactored to this file\n fullLocationList = _.reject(fullLocationList, function(child){\n return locationHelpers.findLocationInList(child.code, selectedLocations);\n });\n for(let i = 0; i < fullLocationList.length; i++){\n const location = fullLocationList[i];\n if(Array.isArray(location.children)){\n location.children = constructSelectableLocationList(location.children, selectedLocations);\n }\n }\n return fullLocationList;\n};\n","import { constructSelectableLocationList, flattenLocationList } from \"@javascript/helpers/locations\";\nimport { trackSearchFilterCategoryState } from \"@javascript/helpers/searchFilterUtilities\";\n\nimport Accordion, { AccordionContent, AccordionTrigger } from \"@javascript/reactComponents/lds/accordion/Accordion\";\nimport Chip from \"@javascript/reactComponents/lds/chips/Chip\";\nimport Divider from \"@javascript/reactComponents/lds/Divider\";\n\nimport FilterItem from \"@javascript/reactComponents/lds/FilterItem\";\nimport Heading from \"@javascript/reactComponents/lds/typography/Heading\";\nimport Icon from \"@javascript/reactComponents/lds/Icon\";\n\n\n\n/**\n * The individual location row for Africa, Asia, Europe, etc...\n * Upon clicking, the provided callback is triggered\n *\n * @component\n * @param {{ id: string, name: string, callback: Function }} props\n *\n * */\nconst LocationSelectorEntry = ({ id, name, callback }) => {\n const trailingContent = Open to Select\n return (\n \n )\n}\n\n/**\n * Allows user to select event location, or My Territory. Will trigger new facet search on change.\n *\n * @component\n *\n * */\nvar LocationSelectorSection = createReactClass({\n mixins: [\n Reflux.connectFilter(FacetSearchStore, function (data) {\n return { location: data.location, facets: data.facets };\n }),\n ],\n getInitialState: function () {\n return {\n location: {\n ...FacetSearchLocationSlice,\n },\n facets: {\n ...FacetSearchResultsSlice,\n },\n open: false\n };\n },\n handleEditTerritory: function () {\n locationRedirect(\"/territories/edit\");\n },\n toggle() {\n trackSearchFilterCategoryState(!this.state.open, \"sponsor_company_location\");\n this.setState({ open: !this.state.open });\n },\n render: function () {\n const { open } = this.state\n\n const continentsWithLinkId = [];\n const sortedContinentList = Zymewire.region_list.fullLocationList.sort(\n (a, b) => (a.name > b.name ? 1 : b.name > a.name ? -1 : 0)\n );\n\n sortedContinentList.forEach((continent) => {\n continentsWithLinkId.push({ name: continent.name, id: continent.id });\n })\n\n const myTerritorySelected = _.includes(\n this.state.location.selectedLocationCodes,\n \"my_territory\"\n );\n\n const trailingAction = (\n <>\n
    \n \n \n );\n\n return (\n \n \n\n \n \n \n {Zymewire.facet_search_filters.sponsor_company_location}\n \n \n \n
    \n }\n onLeadingContentClick={\n FacetSearchLocationActions.myTerritoryClick\n }\n selected={myTerritorySelected}\n tooltip=\"You can filter your search by countries in your territory\"\n trailingContent={\n \n Edit\n \n }\n />\n\n {continentsWithLinkId.map((code) => (\n \n FacetSearchLocationActions.openLocationSelectorModal(\n code.name\n )\n }\n />\n ))}\n
    \n
    \n
    \n
    \n );\n },\n});\n\nconst LocationSelectorPanel = createReactClass({\n mixins: [Reflux.connectFilter(FacetSearchStore, function (data) { return {location: data.location} } )],\n getInitialState: function () {\n return {\n location: {\n ...FacetSearchLocationSlice\n }\n }\n },\n UNSAFE_componentWillMount:function(){\n FacetSearchLocationActions.locationWillMount({\n searchLocations:this.props.searchLocations,\n selectedLocation:this.props.selectedLocation\n });\n },\n\n // function that allows autocomplete to select a location by name\n selectLocation: function (location,e){\n e.stopPropagation();\n var currentSelectableLocations = this.getCurrentSelectableLocations();\n for(var loc of currentSelectableLocations){\n // Hacky solution to fix duplicate name issue\n // We only have 2 occurrences of duplicate names (Georgia and Puerto Rico) in our selectable list as of June 2020\n // Better solution would be to give each location a unique name in fullLocationList\n if(loc.name === location || loc.code === \"US_GA\" && location === \"Georgia, United States of America\" || loc.code === \"US_PR\" && location === \"Puerto Rico, United States of America\"){\n FacetSearchLocationActions.selectLocation(loc);\n return\n }\n }\n },\n getCurrentSelectableLocations: function(){\n // We pass a deep copy of fullLocations, so that any modifications we make to our copy won't effect the original\n const copyFullLocation = JSON.parse(JSON.stringify(this.state.location.fullLocationList))\n return flattenLocationList(constructSelectableLocationList(copyFullLocation, this.state.location.searchLocations));\n },\n render: function () {\n var locationNames = this.getCurrentSelectableLocations();\n // Get only the names of locations from our array of tuples\n locationNames = locationNames.map(function(location){\n // Hacky solution to fix duplicate name issue\n // We only have 2 occurrences of duplicate names (Georgia and Puerto Rico) in our selectable list as of June 2020\n // Better solution would be to give each location a unique name in fullLocationList\n if(location.code === \"US_GA\") {\n return \"Georgia, United States of America\"\n } else if (location.code === \"US_PR\") {\n return \"Puerto Rico, United States of America\"\n } else {\n return location.name\n }\n })\n\n return (\n
    \n \n \n \n
    \n );\n }\n});\n\nconst LocationSelectHeader = () => {\n return (\n
    \n
    \n

    Available location filters

    \n

    Look up countries or states then click to add them to your search

    \n
    \n
    \n  \n
    \n
    \n

    Location filters to search

    \n

    Click to remove countries or states

    \n
    \n
    \n );\n};\n\nconst LocationSelectingPanels = createReactClass({\n render: function () {\n return (\n
    \n
    \n \n
    \n
    \n \n
    \n
    \n \n \n
    \n
    \n );\n }\n});\n\nconst ClearLocationsButton = createReactClass({\n clearLocations: function(e){\n e.stopPropagation();\n FacetSearchLocationActions.clearLocations();\n },\n render: function(){\n if(this.props.location.searchLocations.length > 0){\n return \n }\n else{\n return \n }\n }\n});\n\nconst ModifySearchButton = createReactClass({\n saveChanges: function(e){\n e.stopPropagation();\n FacetSearchLocationActions.saveChanges();\n },\n cancelChanges: function(e){\n e.stopPropagation();\n close_modal_control()\n setTimeout(function() {\n ReactDOM.unmountComponentAtNode(document.getElementById('modal_content'));\n }, 400);\n },\n render: function(){\n const button = this.props.location.changed ? : ;\n return (\n
    \n {button}\n \n
    \n );\n }\n});\n\nconst LocationSelector = createReactClass({\n render: function () {\n var indent = 0;\n var locations = _.reject(this.props.location.fullLocationList, function(location){return locationHelpers.findLocationInList(location.name, this.props.location.searchLocations) }.bind(this)).map(function(location, index){\n return \n }.bind(this));\n return (\n
    \n {locations}\n
    \n );\n }\n});\n\nconst LocationHolder = createReactClass({\n getInitialState: function(){\n return {\n folded_unfolded:(this.props.selectedLocation === this.props.location.name) ? 'checked' : ''\n }\n },\n UNSAFE_componentWillReceiveProps(nextProps) {\n if(nextProps.parentOpen === 'closed'){\n this.setState({\n folded_unfolded: ''\n });\n }\n },\n componentDidMount() {\n if(this.props.expandSubs.indexOf(this.props.location.code) !== -1 && this.props.location.children && this.props.parentOpen === 'open'){\n $(ReactDOM.findDOMNode(this).parentNode).addClass('foldable_content_' + this.props.location.code);\n this.setState({\n folded_unfolded: 'checked'\n });\n }\n },\n fold_unfold: function (e){\n e.stopPropagation();\n this.setState({folded_unfolded: (this.state.folded_unfolded === 'checked') ? '' : 'checked'})\n $(e.target.parentElement.parentElement).toggleClass('foldable_content_' + this.props.location.code)\n if(this.props.indent === 0){\n $(e.target.parentElement).find('.foldable_content').attr('class', 'foldable_content');\n }\n },\n select_location: function (location,e){\n e.stopPropagation();\n this.props.location.code === 'Oceania' ? this.fold_unfold(e) : FacetSearchLocationActions.selectLocation(location);\n },\n quiet_react: function (){\n // The whole “having to quiet react” doesn’t really sit well with me. Open to other ideas here.\n const quiet = 'react';\n },\n render: function () {\n let toggle_arrow = this.props.location.code + '_arrow'\n var toggle_id = this.props.location.code + '_toggle';\n var div_id = this.props.location.code + '_div';\n var children\n var indent = this.props.indent\n var label_classes = ['foldable_indent_' + this.props.indent, 'location_label']\n var toggle_class = 'foldable_toggle_div foldable_toggle_div_' + this.props.indent\n var open = (this.state.folded_unfolded) ? 'open' : 'closed';\n var expandSubs = [];\n if(this.props.location.expand_subs){\n expandSubs = this.props.location.expand_subs;\n }\n if(this.props.location.children){\n indent = this.props.indent + 1\n children = _.reject(this.props.location.children, function(child){return locationHelpers.findLocationInList(child.code, this.props.searchLocations) }.bind(this)).map(function(location, index){\n return (\n
    \n \n
    \n );\n }.bind(this));\n label_classes.push('full_fold full_fold_location')\n }\n else {\n toggle_class = 'no_toggle_div'\n }\n var a_id= 'a_location_' + this.props.location.code\n var link = {this.props.location.name}\n // location_selector.js.jsx and territories.js.jsx are near identical and should be refactored into one\n var input_class = 'foldable_toggle standard_toggle'\n return (\n
    \n \n
    \n
    {link}
    \n {children}\n
    \n )\n }\n});\n\nconst SelectedLocations = createReactClass({\n render: function () {\n let locations = this.props.location.searchLocations.map(function(location, index){\n return \n });\n if(locations.length < 1){\n locations =

    Worldwide

    \n }\n const random = Math.random();\n return (\n
    \n {locations}\n
    \n );\n }\n});\n\nconst SelectedLocationHolder = createReactClass({\n deselectLocation: function(e){\n e.stopPropagation();\n FacetSearchLocationActions.deselectLocation(this.props.code)\n },\n render: function(){\n let name = this.props.name\n if(this.props.parent) {\n name = this.props.name + \", \" + this.props.parent;\n }\n return (\n
    \n
    \n {name}\n
    \n
    \n );\n }\n});\n\nwindow.LocationSelectorPanel = LocationSelectorPanel;\nwindow.LocationSelectorSection = LocationSelectorSection;\nexport default LocationSelectorSection;\n","import { trackSearchFilterCategoryState } from \"@javascript/helpers/searchFilterUtilities\";\n\nimport Accordion, { AccordionContent, AccordionTrigger } from \"@javascript/reactComponents/lds/accordion/Accordion\";\nimport Chip from \"@javascript/reactComponents/lds/chips/Chip\";\nimport Divider from \"@javascript/reactComponents/lds/Divider\";\nimport FilterItem from \"@javascript/reactComponents/lds/FilterItem\";\nimport Icon from \"@javascript/reactComponents/lds/Icon\";\nimport Heading from \"@javascript/reactComponents/lds/typography/Heading\";\n\nconst CRM_KEY = \"crm\";\nconst NEGLECTED_KEY = \"exclude_recent_sponsor\";\nconst MUTED_KEY = \"exclude_muted_companies\";\n\nfunction SalesforceFilterItem({selected, onClick}) {\n const leadingContent = <>\n \n \n \n\n return (\n {onClick(CRM_KEY, selected)} }\n selected={selected}\n tooltip=\"Filter events by companies you have in your Salesforce.\"\n />\n )\n}\n\nfunction NeglectedFilterItem({selected, onClick}) {\n const leadingContent = \n\n return (\n {onClick(NEGLECTED_KEY, selected)} }\n selected={selected}\n tooltip={`Filter events by companies that do not have Salesforce Activity by your ${I18n.t('brand.name')} team in the last 6 months.`}\n />\n )\n}\n\nfunction MutedCompaniesFilterItem({selected, onClick}) {\n const onEditClick = function(event) {\n event.preventDefault();\n event.stopPropagation();\n locationRedirect('/settings/muted_companies/edit');\n }\n\n const leadingContent = \n const trailingContent = Edit\n\n return (\n {onClick(selected)} }\n selected={selected}\n tooltip=\"Filter events to show your unmuted companies only.\"\n trailingContent={trailingContent}\n />\n )\n}\n\n/**\n * React component\n *\n * Shows checkboxes to filter the search by relationship to company.\n * Displays according to options set through the FacetSearchStore. Will trigger a new facet search on change.\n *\n * @component\n * */\n\nconst CompanyRelationshipSelector = createReactClass({\n mixins: [Reflux.connectFilter(FacetSearchStore, function (data) { return data.relationships } )],\n getInitialState() {\n return {\n ...FacetSearchCompanyRelationshipSlice,\n open: true,\n }\n },\n handleCheckboxChange: function (checkboxKey, currentlySelected) {\n if (currentlySelected) {\n FacetSearchCompanyRelationshipActions.removeCompanyRelationship(checkboxKey);\n } else {\n FacetSearchCompanyRelationshipActions.addCompanyRelationship(checkboxKey);\n }\n },\n handleMutedCompaniesChange: function (currentlySelected) {\n if (!currentlySelected) {\n Zymewire.external_track_action(\n 'exclude_muted_companies applied in search'\n )\n }\n\n this.handleCheckboxChange(MUTED_KEY, currentlySelected);\n },\n handleAccordionToggle: function () {\n trackSearchFilterCategoryState(!this.state.open, \"company_relationship\");\n this.setState({ open: !this.state.open });\n },\n\n render: function() {\n const relationshipsSelected = this.state.selected;\n\n const trailingAction = (\n <>\n
    \n \n \n );\n\n return (\n <>\n \n \n \n \n {Zymewire.facet_search_filters.company_relationship}\n \n \n \n {\n (this.state.authorizedSalesForce && this.state.salesforceCurrentlyProcessing) &&\n \n }\n\n {\n this.state.authorizedSalesForce &&\n \n }\n\n \n \n \n \n )\n }\n});\n\nwindow.CompanyRelationshipSelector = CompanyRelationshipSelector;\nexport default CompanyRelationshipSelector;\n","import React from \"react\";\nimport PropTypes from \"prop-types\";\n\nimport FilterItem from \"@javascript/reactComponents/lds/FilterItem\";\nimport Icon from \"@javascript/reactComponents/lds/Icon\";\n\nconst EntitySearchFilterItem = ({\n eventCount,\n itemName,\n leadingContent,\n onClick = () => {},\n tooltip,\n}) => {\n const handleWholeItemClick = (event) => {\n event.stopPropagation();\n $(\"body\").addClass(\"wait\");\n onClick(itemName);\n }\n\n const trailingContent = (\n <>\n {eventCount && eventCount !== \"0\" && commifyNumber(eventCount)}\n \n );\n\n return (\n \n );\n};\n\nEntitySearchFilterItem.propTypes = {\n eventCount: PropTypes.number,\n itemName: PropTypes.string.isRequired,\n leadingContent: PropTypes.oneOfType([\n PropTypes.element,\n PropTypes.oneOf([null])\n ]),\n onClick: PropTypes.func,\n tooltip: PropTypes.string,\n};\n\nexport default EntitySearchFilterItem;\n","import React from \"react\";\nimport PropTypes from \"prop-types\";\n\nimport { trackSearchFilterCategoryState } from \"@javascript/helpers/searchFilterUtilities\";\n\nimport Accordion, { AccordionContent, AccordionTrigger } from \"@javascript/reactComponents/lds/accordion/Accordion\";\nimport { addSearchCriteriaFilter } from \"@javascript/helpers/searchFilterUtilities\";\nimport Chip from \"@javascript/reactComponents/lds/chips/Chip\";\n\nimport Divider from \"@javascript/reactComponents/lds/Divider\";\nimport EntitySearchFilterItem from \"@javascript/reactComponents/facetSearch/entities/EntitySearchFilterItem\";\nimport Heading from \"@javascript/reactComponents/lds/typography/Heading\";\n\nimport Icon from \"@reactComponents/lds/Icon\";\n\nexport const EntitySearchFilter = createReactClass({\n propTypes: {\n config: PropTypes.shape({\n icon: PropTypes.string.isRequired,\n maxDisplayItems: PropTypes.number,\n showCrmInfo: PropTypes.bool,\n title: PropTypes.string.isRequired,\n tooltip: PropTypes.string.isRequired,\n }).isRequired,\n showTopDivider: PropTypes.bool,\n type: PropTypes.oneOf(['organizations', 'conditions', 'therapies']).isRequired,\n },\n\n mixins: [Reflux.connectFilter(FacetSearchStore, \"items\", function(data) {\n return data.facets[this.props.type];\n })],\n\n getInitialState: function(){\n return {\n displayAll: false,\n items: [],\n open: false,\n }\n },\n\n openCloseCategory: function (){\n trackSearchFilterCategoryState(!this.state.open, this.props.type);\n this.setState({ open: !this.state.open });\n },\n\n displayAll: function (event){\n event.preventDefault();\n event.stopPropagation();\n track(\"user_looked_at_more_facets\", \"View more facets\", {\n facet_type: this.props.type,\n });\n this.setState({ displayAll: true })\n },\n\n selectFilterItem: function (itemName){\n addSearchCriteriaFilter(this.props.type, itemName);\n },\n\n render() {\n const { config, showTopDivider, type } = this.props;\n const { icon, maxDisplayItems = 10, showCrmInfo = false, title, tooltip } = config;\n\n if(!showSelector(this.state.items, type)) {\n return null;\n }\n\n const trailingAction = (\n <>\n
    \n \n \n );\n\n const items = this.state.items.buckets;\n const selectedItems = FacetSearchStore.data.filterCriteria[type] || [];\n\n const selectedItemsWithHTMLVersions = new Set([\n ...selectedItems,\n ...selectedItems.map(item => escapeHtml(item))\n ]);\n\n const unselectedItems = items.filter(item =>\n !selectedItemsWithHTMLVersions.has(item.key)\n );\n\n const exceedsDisplayLimit = unselectedItems.length > maxDisplayItems && !this.state.displayAll;\n const exceedsMaxResults = items.length >= 30;\n\n const itemsToDisplay = exceedsDisplayLimit\n ? unselectedItems.slice(0, maxDisplayItems)\n : unselectedItems;\n\n const itemsDisplay = itemsToDisplay.map((item, index) => {\n const { sf_enabled, in_crm, key, doc_count } = item;\n const isSalesforceEnabled = showCrmInfo && sf_enabled;\n const isInSalesforce = showCrmInfo && in_crm;\n\n const leadingContent = isSalesforceEnabled ? (\n \n ) : null;\n\n const tooltip = isSalesforceEnabled\n ? `${key} is ${isInSalesforce ? '' : 'NOT'} in your Salesforce.`\n : `Click to filter your search to only events involving ${key}.`;\n\n return (\n \n );\n });\n\n const renderFooter = () => {\n if (exceedsDisplayLimit) {\n return (\n

    \n \n Show More\n \n

    \n );\n } else if (exceedsMaxResults) {\n if (empty_search(search_data())) {\n return (\n

    \n Showing top 30: try narrowing your search\n

    \n );\n }\n else {\n return (\n

    \n createListFromQuery()}\n >\n More than 30... click to create a list\n \n

    \n );\n }\n }\n return null;\n };\n\n return (\n <>\n {showTopDivider && }\n \n \n \n {title}\n \n \n \n {itemsDisplay.length > 0 ? (\n <>\n {itemsDisplay}\n {renderFooter()}\n \n ) : (\n

    All {type} selected.

    \n )}\n
    \n \n \n );\n }\n});\n\n\nEntitySearchFilter.defaultProps = {\n showTopDivider: true,\n};\n\nexport default EntitySearchFilter;\n","import React from \"react\";\n\nimport EntitySearchFilter from '@javascript/reactComponents/facetSearch/entities/EntitySearchFilter';\n\nconst ConditionsSearchFilter = () => {\n const config = {\n icon: \"variable\",\n maxDisplayItems: 10,\n showCrmInfo: false,\n title: Zymewire.facet_search_filters.conditions,\n tooltip: Zymewire.facet_panel_title_texts.conditions,\n };\n\n return (\n \n );\n};\n\nwindow.ConditionsSearchFilter = ConditionsSearchFilter;\nexport default ConditionsSearchFilter;\n\n","import React from \"react\";\n\nimport EntitySearchFilter from '@javascript/reactComponents/facetSearch/entities/EntitySearchFilter';\n\nconst OrganizationsSearchFilter = () => {\n const config = {\n icon: \"company\",\n maxDisplayItems: 10,\n showCrmInfo: true,\n title: Zymewire.facet_search_filters.organizations,\n tooltip: Zymewire.facet_panel_title_texts.organizations,\n };\n\n return (\n \n );\n};\n\nwindow.OrganizationsSearchFilter = OrganizationsSearchFilter;\nexport default OrganizationsSearchFilter;\n","import React from \"react\";\n\nimport EntitySearchFilter from '@javascript/reactComponents/facetSearch/entities/EntitySearchFilter';\n\nconst TherapiesSearchFilter = () => {\n const config = {\n icon: \"variable\",\n maxDisplayItems: 10,\n showCrmInfo: false,\n title: Zymewire.facet_search_filters.therapies,\n tooltip: Zymewire.facet_panel_title_texts.therapies,\n };\n\n return (\n \n );\n};\n\nwindow.TherapiesSearchFilter = TherapiesSearchFilter;\nexport default TherapiesSearchFilter;\n","import { useState } from \"react\";\n\nimport { trackSearchFilterCategoryState } from \"@javascript/helpers/searchFilterUtilities\";\n\nimport Accordion, { AccordionContent, AccordionTrigger } from \"@javascript/reactComponents/lds/accordion/Accordion\";\nimport Chip from \"@javascript/reactComponents/lds/chips/Chip\";\nimport Divider from \"@javascript/reactComponents/lds/Divider\";\n\nimport FilterItem from \"@javascript/reactComponents/lds/FilterItem\";\nimport Heading from \"@javascript/reactComponents/lds/typography/Heading\";\nimport Icon from \"@javascript/reactComponents/lds/Icon\";\n\nfunction UserListFilterItem({ index, list, selectedListId }) {\n const handleSelect = (list) =>\n FacetSearchListActions.listSelected(list, { doSearch: true });\n\n const isSelected = selectedListId === list._id\n\n return (\n \n }\n onLeadingContentClick={() => handleSelect(list)}\n selected={isSelected}\n />\n );\n}\n\n/**\n * Allows the user to filter events based on lists.\n * Will trigger a new facet search on change.\n *\n * @component\n *\n * */\nfunction UserListsSelectorInner({ lists, selectedListId }) {\n const [open, setOpen] = useState(false);\n const [showAll, setShowAll] = useState(false);\n const DISPLAY_LIMIT = 10;\n\n const trailingAction = (\n <>\n
    \n \n \n );\n\n const handleAccordionToggle = () => {\n trackSearchFilterCategoryState(!open, \"user_lists\");\n setOpen(!open)\n };\n\n const renderFooter = () => {\n if (lists.length > DISPLAY_LIMIT && !showAll) {\n return (\n

    \n setShowAll(true)}\n >\n Show All\n \n

    \n );\n }\n return null;\n };\n\n const displayedLists = showAll ? lists : lists.slice(0, DISPLAY_LIMIT);\n\n return (\n \n \n \n {Zymewire.facet_search_filters.user_lists}\n \n \n \n
    \n {displayedLists.map((list, index) => (\n \n ))}\n {renderFooter()}\n
    \n
    \n
    \n );\n}\n\nconst UserListSelector = createReactClass({\n mixins: [\n Reflux.connectFilter(FacetSearchStore, function (data) {\n return data.userLists;\n }),\n ],\n getInitialState() {\n return FacetSearchUserListSlice;\n },\n UNSAFE_componentWillMount: function() {\n $.getJSON(\"/facet_search/user_company_list_details\", function (data) {\n FacetSearchListActions.setListOfUsersLists(data);\n });\n },\n render: function () {\n const { lists, selected } = this.state;\n const selectedListId = selected && (selected.orgListId || selected.userListId)\n\n if (!Zymewire.user.feature_tags.includes(\"lists\")) {\n return null;\n }\n\n return (\n <>\n \n \n \n );\n },\n});\n\nwindow.UserListSelector = UserListSelector;\nexport default UserListSelector;\n","import { trackSearchFilterCategoryState } from \"@javascript/helpers/searchFilterUtilities\";\n\nimport Accordion, { AccordionContent, AccordionTrigger } from \"@javascript/reactComponents/lds/accordion/Accordion\";\nimport Chip from \"@javascript/reactComponents/lds/chips/Chip\";\nimport Divider from \"@javascript/reactComponents/lds/Divider\";\nimport FilterItem from \"@javascript/reactComponents/lds/FilterItem\";\nimport Icon from \"@javascript/reactComponents/lds/Icon\";\nimport Heading from \"@javascript/reactComponents/lds/typography/Heading\";\n\n/**\n * React component that displays a list of checkboxes for \"Clinical Trial Stages\"\n *\n * @params: none\n *\n */\nconst ClinicalTrialStagesSelector = createReactClass({\n mixins: [\n Reflux.connectFilter(\n FacetSearchStore,\n function(data) {\n return {\n clin_stage: data.facets.clin_stage,\n clinicalTrialStages: data.clinicalTrialStages\n }\n }\n )\n ],\n /** Important: this.state is an empty object on the first render. Once the store connects, it then gets populated.*/\n getInitialState() {\n return {\n open: true,\n }\n },\n\n handleAccordionToggle() {\n trackSearchFilterCategoryState(!this.state.open, \"trial_phases\");\n this.setState({ open: !this.state.open });\n },\n\n render() {\n\n // what is clin_stage and can we discard it?\n // seems like it could be a part of locked logic and could be replaced.\n // -- GJ 2023.02.27\n\n const { clinicalTrialStages, clin_stage } = this.state;\n\n const show = clin_stage && clin_stage.buckets && clin_stage.buckets.length > 0;\n\n if (!show) {\n return null;\n }\n\n const handleFilterItemToggle = (value) => {\n const clinicalTrialStagesSelected = [...this.state.clinicalTrialStages.selected];\n const selectedIndex = clinicalTrialStagesSelected.indexOf(value);\n\n if (selectedIndex > -1) {\n // remove the clinical trial stage from the array... we no longer wish to represent it as checked\n clinicalTrialStagesSelected.splice(selectedIndex, 1);\n } else {\n // add the clinical trial stage to the array... it should be checked now\n clinicalTrialStagesSelected.push(value);\n }\n FacetSearchStoreActions.clinicalTrialStagesUpdate(\n {selected: clinicalTrialStagesSelected},\n {doSearch: true, triggerStateUpdate: true}\n );\n }\n\n const {display, selected} = clinicalTrialStages;\n\n const trailingAction =\n <>\n
    \n \n ;\n\n const filterItems = Object.keys(display).map((key) => {\n const filterLabel = display[key];\n const isSelected = selected.indexOf(key) > -1;\n const leadingContent = \n const tooltip = `Filter events by specific mention of a ${filterLabel}`;\n\n return { handleFilterItemToggle(key) }}\n selected={isSelected}\n tooltip={tooltip} />\n });\n\n return (\n <>\n \n\n \n \n \n {Zymewire.facet_search_filters.trial_phases}\n \n \n \n {filterItems}\n \n \n \n )\n }\n})\n\nwindow.ClinicalTrialStagesSelector = ClinicalTrialStagesSelector;\nexport default ClinicalTrialStagesSelector;\n","import { trackSearchFilterCategoryState } from \"@javascript/helpers/searchFilterUtilities\";\n\nimport Accordion, { AccordionContent, AccordionTrigger } from \"@javascript/reactComponents/lds/accordion/Accordion\";\nimport Chip from \"@javascript/reactComponents/lds/chips/Chip\";\nimport Divider from \"@javascript/reactComponents/lds/Divider\";\n\nimport FilterItem from \"@javascript/reactComponents/lds/FilterItem\";\nimport Heading from \"@javascript/reactComponents/lds/typography/Heading\";\nimport Icon from \"@javascript/reactComponents/lds/Icon\";\n\n/**\n * React component that displays a list of search inputs (checkboxes) for \"Clinical Trial Status\"\n *\n * @params: none\n *\n */\nconst ClinicalTrialStatusSelector = createReactClass({\n mixins: [\n Reflux.connectFilter(\n FacetSearchStore,\n function(data) {\n return {\n clin_status: data.facets.clin_status,\n clinicalTrialStatuses: data.clinicalTrialStatuses,\n }\n }\n )\n ],\n /** Important: this.state is an empty object on the first render. Once the store connects, it then gets populated.*/\n getInitialState() {\n return {\n open: clinicalTrialStatuses.selected.length > 0,\n }\n },\n\n toggle() {\n trackSearchFilterCategoryState(!this.state.open, \"trial_status\");\n this.setState({ open: !this.state.open });\n },\n\n render() {\n const { clinicalTrialStatuses, clin_status } = this.state;\n const show = clin_status && clin_status.buckets && clin_status.buckets.length > 0;\n const { open } = this.state;\n\n if (!show) {\n return null;\n }\n\n const updateClinicalTrialStatusSelected = (value) => {\n const clinicalTrialStatusesSelected = [...this.state.clinicalTrialStatuses.selected];\n const selectedIndex = clinicalTrialStatusesSelected.indexOf(value);\n\n if (selectedIndex > -1) {\n // remove the clinical trial stage from the array... we no longer wish to represent it as checked\n clinicalTrialStatusesSelected.splice(selectedIndex, 1);\n } else {\n // add the clinical trial stage to the array... it should be checked now\n clinicalTrialStatusesSelected.push(value);\n }\n\n FacetSearchStoreActions.clinicalTrialStatusesUpdate(\n {selected: clinicalTrialStatusesSelected},\n {doSearch: true, triggerStateUpdate: true}\n );\n }\n\n const { display, selected } = clinicalTrialStatuses;\n\n const trailingAction = (\n <>\n
    \n \n \n );\n\n const statuses = Object.keys(display).map((key) => {\n const filterLabel = display[key];\n const isSelected = selected.indexOf(key) > -1;\n const leadingContent = \n const tooltip = `Filter events by trials with current status of ${filterLabel}`;\n\n return { updateClinicalTrialStatusSelected(key) }}\n selected={isSelected}\n tooltip={tooltip} />\n });\n\n return (\n
    \n \n\n \n \n \n {Zymewire.facet_search_filters.trial_status}\n \n \n \n {statuses}\n \n \n
    \n );\n }\n});\n\nwindow.ClinicalTrialStatusSelector = ClinicalTrialStatusSelector;\nexport default ClinicalTrialStatusSelector;\n","\n/**\n * Splits a URL into segments and removes empty strings\n * @param {string} url - The URL to parse\n * @returns {string[]} Array of URL segments\n */\nexport const parseUrlSegments = (url) => url.split('/').filter(Boolean);\n\n/**\n * Creates a matcher function for comparing URL segments against expected patterns\n * @param {string[]} expectedSegments - Array of expected segments, where '*' matches any value\n * @returns {function(string): boolean} Function that returns true if URL matches pattern\n */\nexport const createPathMatcher = (expectedSegments) => (url) => {\n const segments = parseUrlSegments(url);\n return segments.length === expectedSegments.length &&\n expectedSegments.every((expected, index) =>\n expected === '*' || segments[index] === expected\n );\n};\n\n/**\n * Determines the current page based on URL pattern matching.\n * In test environments, the page can be overridden using window.__TEST_PAGE__.\n * This is useful when testing components that require specific page contexts\n * but are mounted without a real URL path.\n *\n * @param {Object[]} patterns - Array of page patterns to match against\n * @param {string} defaultPage - Default page to return if no match is found\n * @returns {string} The matched pattern, test page override, or default page as fallback\n *\n * @example\n * // Normal usage\n * const page = getPageFromUrl(PAGE_PATTERNS, \"edit_feed\");\n *\n * @example\n * // In test environment\n * window.__TEST_PAGE__ = \"feeds\";\n * const page = getPageFromUrl(PAGE_PATTERNS, \"edit_feed\"); // Returns \"feeds\"\n */\nexport const getPageFromUrl = (patterns, defaultPage) => {\n if (typeof window !== 'undefined' && window.__TEST_PAGE__) {\n return window.__TEST_PAGE__;\n }\n\n const currentUrl = typeof window !== 'undefined'\n ? window.location.pathname\n : '';\n\n const matchedPage = patterns.find(\n ({ matcher }) => matcher(currentUrl)\n );\n\n return matchedPage?.pattern ?? defaultPage;\n};\n","import React from \"react\";\nimport createReactClass from \"create-react-class\";\n\nimport Chip from \"@javascript/reactComponents/lds/chips/Chip\";\nimport { createPathMatcher, getPageFromUrl, parseUrlSegments } from \"@javascript/helpers/urlUtilities\";\nimport FacetSearchStore from \"@javascript/stores/facetSearchStore\";\n\nconst PAGE_PATTERNS = [\n {\n pattern: \"facet_search\",\n matcher: createPathMatcher(['facet_search']),\n clearAll: () => {\n window.location.href = '/facet_search';\n }\n },\n {\n pattern: \"mapping\",\n matcher: createPathMatcher(['mapping']),\n clearAll: () => {\n window.location.href = '/mapping?time_select=time_any';\n }\n },\n {\n pattern: \"events\",\n matcher: createPathMatcher(['company', '*', 'events']),\n clearAll: (segments) => {\n window.location.href = `/company/${segments[1]}/events?time_select=time_any`;\n }\n },\n {\n pattern: \"display_saved_feed\",\n matcher: createPathMatcher(['feeds', '*', 'display_saved_feed']),\n clearAll: (segments) => {\n window.location.href = `/feeds/${segments[1]}/display_saved_feed?time_select=time_any`;\n }\n },\n {\n pattern: \"feeds\",\n matcher: createPathMatcher(['feeds', '*']),\n clearAll: (segments) => {\n window.location.href = `/feeds/${segments[1]}?time_select=time_any`;\n }\n },\n {\n pattern: \"edit\",\n matcher: createPathMatcher(['feeds', '*', 'edit']),\n clearAll: () => {\n FacetSearchStore.init();\n FacetSearchStore.trigger(FacetSearchStore.data);\n doEventSearch();\n }\n }\n];\n\nconst isInOriginalQuery = (queryKey, value, originalQuery) => {\n if (!originalQuery) return false;\n\n switch(queryKey) {\n case 'activities':\n return originalQuery.category === value;\n\n case 'affiliation':\n return Array.isArray(originalQuery.entity_list_refs) &&\n Object.keys(value?.orgListRefs || {}).every(ref =>\n originalQuery.entity_list_refs.includes(ref)\n );\n\n case 'aliasSearch':\n return Array.isArray(originalQuery.alias_search_refs) &&\n originalQuery.alias_search_refs.includes(value);\n\n case 'clin_stage':\n return Array.isArray(originalQuery.clin_stage) &&\n originalQuery.clin_stage.includes(value);\n\n case 'clin_status':\n return Array.isArray(originalQuery.clin_status) &&\n originalQuery.clin_status.includes(value);\n\n case 'filter_criteria':\n // If being called with individual values, treat as direct comparison\n if (Array.isArray(value) || typeof value !== 'object') {\n const facetMatch = Object.values(originalQuery.facets || {}).some(facetValues =>\n Array.isArray(facetValues) && _.isEqual(facetValues, value)\n );\n return facetMatch;\n }\n\n // If being called with full criteria object, check all facets\n return Object.entries(value).every(([facetKey, facetValues]) => {\n return _.isEqual(originalQuery.facets[facetKey], facetValues);\n });\n\n case 'geo_coordinates':\n return originalQuery.geo_box && _.isEqual(value, originalQuery.geo_box);\n\n case 'location':\n return Array.isArray(originalQuery.loc_codes) &&\n originalQuery.loc_codes.includes(value);\n\n case 'org_lists':\n return originalQuery.org_list_id === value?.orgListId;\n\n case 'relationships':\n return Array.isArray(originalQuery.relationships) &&\n originalQuery.relationships.includes(value);\n\n case 'query':\n return originalQuery.query === value?.queryTerm;\n\n case 'time_frame':\n // There is no time_frame in original query structure, so this is always new\n return false;\n\n case 'user_lists':\n return originalQuery.org_list_id === value?.selected?.orgListId;\n\n default:\n return false;\n }\n};\n\nconst FILTER_COUNTERS = {\n activities: {\n isValid: (activities) => activities?.selected && activities.selected !== 'all_event',\n count: (activities) => {\n const originalQuery = Zymewire.original_feed_query;\n return isInOriginalQuery('activities', activities?.selected, originalQuery) ? 0 : 1\n }\n },\n\n affiliation: {\n isValid: (affiliation) => !_.isEmpty(affiliation?.orgListRefs),\n count: (affiliation) => {\n const originalQuery = Zymewire.original_feed_query;\n if (!affiliation?.orgListRefs) return 0;\n return Object.entries(affiliation.orgListRefs)\n .filter(([ref]) => !isInOriginalQuery('affiliation', ref, originalQuery))\n .length;\n }\n },\n\n aliasSearch: {\n isValid: (alias) => alias?.aliasSearchRefs?.length > 0,\n count: (alias) => {\n const originalQuery = Zymewire.original_feed_query;\n if (!alias?.aliasSearchRefs) return 0;\n return alias.aliasSearchRefs\n .filter(ref => !isInOriginalQuery('alias_search', ref, originalQuery))\n .length;\n }\n },\n\n clinicalTrialStages: {\n isValid: (stages) => stages?.selected?.length > 0,\n count: (stages) => {\n const originalQuery = Zymewire.original_feed_query;\n if (!stages?.selected) return 0;\n return stages.selected\n .filter(stage => !isInOriginalQuery('clin_stage', stage, originalQuery))\n .length;\n }\n },\n\n clinicalTrialStatuses: {\n isValid: (statuses) => statuses?.selected?.length > 0,\n count: (statuses) => {\n const originalQuery = Zymewire.original_feed_query;\n if (!statuses?.selected) return 0;\n return statuses.selected\n .filter(status => !isInOriginalQuery('clin_status', status, originalQuery))\n .length;\n }\n },\n\n filterCriteria: {\n isValid: (criteria) => !_.isEmpty(criteria),\n count: (criteria) => {\n const originalQuery = Zymewire.original_feed_query;\n const currentPage = getPageFromUrl(PAGE_PATTERNS, \"facet_search\");\n const isCompanyEventsPage = currentPage === \"events\";\n\n // Remove _id field and get entries\n const criteriaWithoutId = _.omit(criteria, ['_id']);\n let totalCount = 0;\n\n // For each filter type (organizations, conditions, etc)\n Object.entries(criteriaWithoutId).forEach(([_, filterValues]) => {\n // Check if this filter exists in original query\n const isMatchingOriginal = isInOriginalQuery('filter_criteria', filterValues, originalQuery);\n\n if (!isMatchingOriginal) {\n // If it's an array (like organizations: [\"Pfizer\"]), count each value\n if (Array.isArray(filterValues)) {\n totalCount += filterValues.length;\n }\n // If it's a single value and it exists, count as 1\n else if (filterValues) {\n totalCount += 1;\n }\n }\n });\n\n // On company events page, reduce count by 1 to account for company\n if (isCompanyEventsPage) {\n return Math.max(0, totalCount - 1);\n }\n\n return totalCount;\n }\n },\n\n geoCoordinates: {\n isValid: (coords) => coords?.bottom_right_lat !== null,\n count: (coords) => {\n const originalQuery = Zymewire.original_feed_query;\n if (getPageFromUrl(PAGE_PATTERNS, \"facet_search\") === \"mapping\") return 0;\n return isInOriginalQuery('geo_coordinates', coords, originalQuery) ? 0 : 1;\n }\n },\n\n location: {\n isValid: (location) => location?.selectedLocationCodes?.length > 0,\n count: (location) => {\n const originalQuery = Zymewire.original_feed_query;\n if (!location?.selectedLocationCodes) return 0;\n return location.selectedLocationCodes\n .filter(code => !isInOriginalQuery('location', code, originalQuery))\n .length;\n }\n },\n\n relationships: {\n isValid: (relationships) => relationships?.selected?.length > 0,\n count: (relationships) => {\n const originalQuery = Zymewire.original_feed_query;\n if (!relationships?.selected) return 0;\n return relationships.selected\n .filter(rel => !isInOriginalQuery('relationships', rel, originalQuery))\n .length;\n }\n },\n\n searchTerm: {\n isValid: (term) => {\n if (!term) return false;\n return Object.values(term).some(value =>\n value &&\n value !== '' &&\n value !== null &&\n (typeof value === 'string' ? value.trim() !== '' : true)\n );\n },\n count: (term) => {\n const originalQuery = Zymewire.original_feed_query;\n return isInOriginalQuery('query', term, originalQuery) ? 0 : 1\n }\n },\n\n timeFrame: {\n isValid: (timeFrame) => timeFrame?.selected && timeFrame.selected !== 'time_any',\n count: (timeFrame) => {\n const originalQuery = Zymewire.original_feed_query;\n return isInOriginalQuery('time_frame', timeFrame?.selected, originalQuery) ? 0 : 1\n }\n },\n\n userLists: {\n isValid: (lists) => lists?.selected,\n count: (lists) => {\n const originalQuery = Zymewire.original_feed_query;\n return isInOriginalQuery('org_list_id', lists?.selected, originalQuery) ? 0 : 1\n }\n }\n};\n\nconst AppliedFiltersClearAll = createReactClass({\n mixins: [Reflux.connect(FacetSearchStore, \"appliedFilters\")],\n\n getInitialState() {\n return {\n appliedFilters: {}\n };\n },\n\n countAppliedFilters() {\n const filters = this.state.appliedFilters;\n if (!filters) return 0;\n\n const originalQuery = Zymewire.original_feed_query;\n\n return Object.entries(FILTER_COUNTERS).reduce((total, [key, counter]) => {\n const isValidResult = counter.isValid(filters[key]);\n if (isValidResult) {\n const count = counter.count(filters[key]);\n return total + count;\n }\n return total;\n }, 0);\n },\n\n handleClearAll() {\n $(\"body\").addClass(\"wait\");\n\n const currentPath = window.location.pathname;\n const segments = parseUrlSegments(currentPath);\n const currentPage = getPageFromUrl(PAGE_PATTERNS, \"facet_search\");\n\n const matchedPattern = PAGE_PATTERNS.find(p => p.pattern === currentPage);\n\n if (matchedPattern) {\n if(typeof matchedPattern.clearAll === \"function\") {\n matchedPattern.clearAll(segments);\n }\n else {\n window.location.href = \"/facet_search\";\n }\n }\n else {\n window.location.href = \"/facet_search\";\n }\n },\n\n render() {\n const filterCount = this.countAppliedFilters();\n\n if (filterCount === 0) return null;\n\n return (\n
    \n \n
    \n );\n }\n});\n\nexport default AppliedFiltersClearAll;\n","import Reflux from 'reflux';\n\nimport Chip from \"@reactComponents/lds/chips/Chip\";\nimport { FacetSearchAliasSearchActions } from '../../stores/actions/facetSearch/aliasSearchActions';\nimport FacetSearchStore from '../../stores/facetSearchStore';\n\nconst FacetSearchCriteriaAliasSearch = createReactClass({\n mixins: [Reflux.connectFilter(FacetSearchStore, ({ aliasSearch: aliasSearchRefs }) => aliasSearchRefs)],\n render() {\n const { aliasSearchRefs } = this.state;\n\n if (aliasSearchRefs) {\n const locked = ((Zymewire.original_feed_query || {}).alias_search_refs || []).length > 0\n let aliasSearchContent = [];\n aliasSearchRefs.forEach((aliasSearchRef) => {\n const displayValue = aliasSearchRef.display;\n const ref = aliasSearchRef.ref;\n aliasSearchContent.push(\n \n );\n });\n return (\n <>\n {aliasSearchContent}\n \n );\n }\n else {\n return null;\n }\n }\n});\n\nconst AliasSearchAppliedFilterEntry = ({\n aliasSearchRefsKey,\n displayValue,\n locked,\n}) => {\n\n let removeAliasSearch = () => {\n FacetSearchAliasSearchActions.removeAliasSearchRefs({ ref: aliasSearchRefsKey, display: displayValue });\n return false;\n };\n\n return (\n \n );\n};\n\nwindow.FacetSearchCriteriaAliasSearch = FacetSearchCriteriaAliasSearch;\nexport default FacetSearchCriteriaAliasSearch;\n\n","import Reflux from \"reflux\";\n\nimport Chip from \"@javascript/reactComponents/lds/chips/Chip\";\nimport FacetSearchStore from \"@javascript/stores/facetSearchStore\";\nimport { FacetSearchCompanyActivityActions } from \"@javascript/stores/actions/facetSearch/activityActions\";\n\nimport { COMPANY_ACTIVITY_CATEGORY_TO_LABEL } from \"@javascript/constants/search/search_constants\";\n\n\nconst FacetSearchCriteriaCategory = createReactClass({\n mixins: [\n Reflux.connectFilter(FacetSearchStore, function(data) { return data.activities })\n ],\n getInitialState() {\n return {\n ...(FacetSearchStore.data.activities),\n locked: this.isLocked(FacetSearchStore.data.activities.selected)\n }\n },\n\n isLocked(currentCat = this.state?.selected) {\n const original = Zymewire.original_feed_query;\n\n return (\n original &&\n original.category &&\n original.category !== \"all_event\" &&\n original.category === currentCat\n );\n },\n removeCategory() {\n if (this.state.locked) return;\n FacetSearchCompanyActivityActions.activityRemoved();\n },\n render() {\n let category\n\n const currentCat = this.state.selected\n\n if (currentCat !== 'all_event') {\n category = Zymewire.category_hash[currentCat]\n }\n\n if (category === null || category === undefined) return null;\n\n if (this.state.locked) {\n category[\"locked\"] = true;\n }\n\n let trailingIcon = \"cancel\";\n\n const label = `${Zymewire.facet_search_filters.company_activity}: ${category.name}`\n\n const activity = COMPANY_ACTIVITY_CATEGORY_TO_LABEL[category.category] || COMPANY_ACTIVITY_CATEGORY_TO_LABEL[category.parent] || \"other\";\n\n return (\n \n );\n }\n});\n\nwindow.FacetSearchCriteriaCategory = FacetSearchCriteriaCategory;\nexport default FacetSearchCriteriaCategory;\n","import Reflux from \"reflux\";\n\nimport Chip from \"@javascript/reactComponents/lds/chips/Chip\";\nimport FacetSearchStore from \"@javascript/stores/facetSearchStore\";\nimport { FacetSearchStoreActions } from \"@javascript/stores/actions/facetSearch/storeActions\";\n\nconst FacetSearchCriteriaClinicalStatus = createReactClass({\n mixins: [\n Reflux.connectFilter(\n FacetSearchStore,\n ({ clinicalTrialStatuses }) => clinicalTrialStatuses\n ),\n ],\n\n getInitialState() {\n return { ...FacetSearchStore.data.clinicalTrialStatuses };\n },\n\n render() {\n const { selected = [] } = this.state;\n\n if (!selected.length) return null;\n\n let originalStatus = (Zymewire.original_feed_query || {}).clin_status || [];\n\n if (originalStatus.length > 0) {\n $(\"#trial_status_panel\").hide();\n }\n\n const formatSelectedStatuses = (selected, originalStatuses) =>\n _.unique(selected).map((status, index) => ({\n last: index === selected.length - 1,\n locked: originalStatuses.includes(status),\n value: status,\n }));\n\n return (\n <>\n {formatSelectedStatuses(selected, originalStatus).map(\n ({ last, locked, value }) => (\n \n )\n )}\n \n );\n },\n});\n\nconst ClinicalStatusAppliedFilterEntry = ({ last, locked, value }) => {\n const handleClick = () => {\n if (locked) return;\n\n const clinicalTrialStatusesSelected = [\n ...FacetSearchStore.data.clinicalTrialStatuses.selected,\n ];\n const selectedIndex = clinicalTrialStatusesSelected.indexOf(value);\n\n if (selectedIndex > -1) {\n clinicalTrialStatusesSelected.splice(selectedIndex, 1);\n\n FacetSearchStoreActions.clinicalTrialStatusesUpdate(\n { selected: clinicalTrialStatusesSelected },\n { doSearch: true, triggerStateUpdate: false }\n );\n }\n\n return false;\n };\n\n const trialStatusDisplayName =\n FacetSearchStore.data.clinicalTrialStatuses.display[value];\n\n const label = (\n <>\n {Zymewire.facet_search_filters.trial_status}: {trialStatusDisplayName}\n {!last && OR}\n \n );\n\n return (\n \n );\n};\n\nwindow.FacetSearchCriteriaClinicalStatus = FacetSearchCriteriaClinicalStatus;\nexport default FacetSearchCriteriaClinicalStatus;\n","import Reflux from \"reflux\";\n\nimport Chip from \"@javascript/reactComponents/lds/chips/Chip\";\nimport FacetSearchStore from \"@javascript/stores/facetSearchStore\";\nimport { FacetSearchStoreActions } from \"@javascript/stores/actions/facetSearch/storeActions\";\n\nconst FacetSearchCriteriaClinicalTrialStages = createReactClass({\n mixins: [\n Reflux.connectFilter(FacetSearchStore, function (data) {\n return {\n display: data.clinicalTrialStages.display,\n selected: data.clinicalTrialStages.selected,\n };\n }),\n ],\n getInitialState() {\n return {\n display: FacetSearchStore.data.clinicalTrialStages.display,\n selected: FacetSearchStore.data.clinicalTrialStages.selected,\n };\n },\n shouldComponentUpdate: function (nextProps, nextState) {\n return this.state.selected.length !== nextState.selected.length;\n },\n render() {\n if(this.state.selected.length === 0) {\n return null;\n }\n else {\n // Zymewire.original_feed_query should probably be refactored to the FacetSearchStore under\n // searchTerms.originalQuery key\n // set on initial view, updated on any subsequent AJAX success\n const originalQuery = Zymewire.original_feed_query;\n\n let lastIndex = this.state.selected.length - 1\n\n let selectedList = this.state.selected.map((stage, index) => {\n\n let last = index === lastIndex;\n let name = this.state.display[stage];\n let locked = false;\n\n if (originalQuery) {\n if (originalQuery.clin_stage && originalQuery.clin_stage.length > 0) {\n if (_.contains(originalQuery.clin_stage, stage)) {\n locked = true;\n // this hide is ugly hacky and once we connect the clinical trial stages selector to the store in a future\n // refactor, we can safely junk this\n $('#trial_stages_panel').hide();\n }\n }\n }\n return \n });\n\n return(\n <>\n {selectedList}\n \n )\n }\n }\n});\n\nconst ClinicalTrialAppliedFilterEntry = ({\n last,\n locked,\n name,\n stage,\n}) => {\n\n\n let removeStage = (e) => {\n\n const clinicalTrialStagesSelected = [...FacetSearchStore.data.clinicalTrialStages.selected];\n const selectedIndex = clinicalTrialStagesSelected.indexOf(stage);\n\n if (selectedIndex > -1) {\n // remove the clinical trial stage from the array... we no longer wish to represent it as checked\n clinicalTrialStagesSelected.splice(selectedIndex, 1);\n } else {\n // add the clinical trial stage to the array... it should be checked now\n clinicalTrialStagesSelected.push(stage);\n }\n FacetSearchStoreActions.clinicalTrialStagesUpdate(\n { selected: clinicalTrialStagesSelected },\n { doSearch: true, triggerStateUpdate: false }\n );\n\n return false;\n };\n\n const label = (\n <>\n {Zymewire.facet_search_filters.trial_phases}: {name}\n {!last && OR}\n \n );\n\n return (\n \n );\n};\n\nwindow.FacetSearchCriteriaClinicalTrialStages = FacetSearchCriteriaClinicalTrialStages;\nexport default FacetSearchCriteriaClinicalTrialStages;\n","import Reflux from \"reflux\";\n\nimport Chip from \"@javascript/reactComponents/lds/chips/Chip\"\nimport FacetSearchStore from \"@javascript/stores/facetSearchStore\";\nimport { removeSearchCriteriaFilter } from \"@javascript/helpers/searchFilterUtilities\";\n\nconst FacetSearchCriteriaEntities = createReactClass({\n mixins: [\n Reflux.connectFilter(FacetSearchStore, function (data) {\n return {\n filterCriteria: data.filterCriteria,\n facets: data.facets,\n };\n }),\n ],\n getInitialState() {\n return {\n filterCriteria: FacetSearchStore.data.filterCriteria,\n facets: FacetSearchStore.data.facets,\n };\n },\n\n render() {\n const { filterCriteria, facets } = this.state;\n\n if (!filterCriteria || Object.keys(filterCriteria).length === 0) return null;\n\n const originalFacets = Zymewire.original_feed_query?.facets || {};\n const typeToIcon = {\n conditions: \"variable\",\n organizations: \"company\",\n therapies: \"variable\",\n };\n\n const criterias = Object.entries(filterCriteria).map(([type, terms]) => ({\n type,\n terms: terms.map((term) => {\n // First check if facets[type] exists and has terms\n const facetTerms = facets[type]?.terms || [];\n const facet = facetTerms.find(f => f.term === term) || { term, name: term, count: 0 };\n\n // Check for locked status\n if (originalFacets[type]?.includes(facet.term)) {\n facet.locked = true;\n }\n return facet;\n })\n }));\n\n const components = criterias.flatMap((criteria) =>\n criteria.terms.map((term) => (\n \n ))\n );\n\n return <>{components};\n\n }\n});\n\nconst EntityCriteriaEntry = ({\n criteriaDetails,\n criteriaType,\n icon,\n locked,\n}) => {\n\n const criteriaName = criteriaDetails.name;\n\n const entityNameMap = {\n medical_technologies: \"Medical Technologies\",\n pharma_ingredients: \"Pharma Ingredients\",\n trials: \"Trials\",\n conditions: \"Conditions\"\n };\n \n const getEntityDisplayName = () => {\n return Zymewire.facet_search_filters[criteriaType] || entityNameMap[criteriaType]\n }\n\n const removeCriteria = () => {\n if(locked) return false;\n removeSearchCriteriaFilter(criteriaType, criteriaName);\n };\n\n return (\n \n );\n};\n\nwindow.FacetSearchCriteriaEntities = FacetSearchCriteriaEntities;\nexport default FacetSearchCriteriaEntities;\n","import Reflux from \"reflux\";\n\nimport Chip from \"@javascript/reactComponents/lds/chips/Chip\";\nimport { FacetSearchAffiliatedWithActions } from \"@javascript/stores/actions/facetSearch/affiliatedWithActions\";\nimport FacetSearchStore from \"@javascript/stores/facetSearchStore\";\n\nconst FacetSearchCriteriaEntityValues = createReactClass({\n mixins: [Reflux.connectFilter(FacetSearchStore, ({affiliation: orgListRefs}) => orgListRefs)],\n render() {\n const {orgListRefs} = this.state;\n\n if (!orgListRefs) return null;\n\n const isLocked = Boolean(\n (Zymewire.original_feed_query?.entity_list_refs ?? []).length\n );\n\n const orgListEntries = Object.entries(orgListRefs).flatMap(\n ([refKey, values]) =>\n values.map((value, index) => ({\n refKey,\n value,\n index,\n }))\n );\n\n return (\n <>\n {orgListEntries.map(({refKey, value, index}) => (\n \n ))}\n \n );\n }\n});\n\nconst EntityValueEntry = ({ displayValue, locked, orgListRefsKey }) => {\n\n let removeOrgList = () => {\n if(locked) return false;\n FacetSearchAffiliatedWithActions.removeOrgListRef({ref: orgListRefsKey, display: displayValue});\n return false;\n };\n\n return (\n \n );\n}\n\nwindow.FacetSearchCriteriaEntityValues = FacetSearchCriteriaEntityValues;\nexport default FacetSearchCriteriaEntityValues;\n","import Reflux from \"reflux\";\n\nimport { createPathMatcher, getPageFromUrl } from \"@javascript/helpers/urlUtilities\";\n\nimport Chip from \"@javascript/reactComponents/lds/chips/Chip\";\nimport { FacetSearchGeoCoordinatesActions } from \"@javascript/stores/actions/facetSearch/geoCoordinatesActions\";\nimport FacetSearchStore from \"@javascript/stores/facetSearchStore\";\n\n/**\n * Renders the geographic coordinates filter chip when coordinates are set.\n * Coordinates are locked when present in the original feed query.\n *\n * @component\n * @listens {FacetSearchStore} Subscribes to geoCoordinates\n */\nconst FacetSearchCriteriaGeoCoordinates = createReactClass({\n mixins: [\n Reflux.connectFilter(FacetSearchStore, ({ geoCoordinates }) => ({ geoCoordinates }))\n ],\n\n getInitialState() {\n return {\n geoCoordinates: FacetSearchStore.data.geoCoordinates\n };\n },\n\n render() {\n const { geoCoordinates } = this.state;\n\n // Early return if no coordinates exist\n if (!geoCoordinates?.bottom_right_lat) {\n return null;\n }\n\n const PAGE_PATTERNS = [\n {\n pattern: \"mapping\",\n matcher: createPathMatcher(['mapping'])\n },\n ];\n\n const page = getPageFromUrl(PAGE_PATTERNS, \"facet_search\");\n const isMappingPage = page === \"mapping\";\n\n const hasOriginalMappingQuery = Boolean(Zymewire.original_feed_query?.geo_box);\n\n const isLocked = isMappingPage || hasOriginalMappingQuery;\n\n return ;\n }\n});\n\n\n/**\n * React component that actually displays the notice that mapping was used to filter a query. If the entry is a locked entry, as permitted on the feed view, then the entry's remove functions are disabled.\n *\n * @param {Boolean} locked is the filter removable or not\n */\n\nconst GeoCoordinatesEntry = ({ locked }) => {\n\n const removeGeoCoordinates = () => {\n // remove_geo_box();\n //\n //\n // found 2 instances of remove_geo_box -- different outcomes, same method name -- the outcome depends on context:\n //\n // if on the mapping page\n //\n // var cntr = new google.maps.LatLng(25.0, -30.0);\n // window.myMap.setCenter(cntr);\n // window.myMap.setZoom(2);\n // Zymewire.geo_box = current_bounding_box();\n\n // otherwise:\n //\n // Zymewire.geo_box = null;\n // doEventSearch();\n //\n //\n // the curious thing is that the call to doEventSearch() only occurs if you're not on the mapping page -- timebox\n // prevented investigation as to why and what's happening\n\n let bounds = {...FacetSearchGeoCoordinatesSlice};\n let doSearch = true;\n\n if(window.myMap) {\n const mapCenter = new google.maps.LatLng(25.0, -30.0);\n window.myMap.setCenter(mapCenter);\n window.myMap.setZoom(2);\n bounds = bounds_to_geo_box(window.myMap.getBounds());\n doSearch = false;\n }\n // need a story to deprecate the Zymewire.geo_box part of the kitchen sink\n // any logic requiring \"geo_box\" should get it from the store as the single source of truth\n Zymewire.geo_box = bounds;\n FacetSearchGeoCoordinatesActions.geoCoordinatesUpdate(bounds, { doSearch: doSearch, triggerStateUpdate: false });\n return false;\n };\n\n return (\n \n )\n}\n\nwindow.FacetSearchCriteriaGeoCoordinates = FacetSearchCriteriaGeoCoordinates;\nexport default FacetSearchCriteriaGeoCoordinates;\n","import Reflux from \"reflux\";\n\nimport Chip from \"@javascript/reactComponents/lds/chips/Chip\";\nimport { FacetSearchAffiliatedWithActions } from \"@javascript/stores/actions/facetSearch/affiliatedWithActions\";\nimport { FacetSearchListActions } from \"@javascript/stores/actions/facetSearch/listActions\";\nimport FacetSearchStore from \"@javascript/stores/facetSearchStore\";\n\nconst FacetSearchCriteriaList = createReactClass({\n mixins: [\n Reflux.connectFilter(FacetSearchStore, \"list\", function(data) {\n return data.userLists.selected\n })\n ],\n\n getInitialState() {\n return {\n list: FacetSearchStore.data.userLists.selected\n };\n },\n\n render() {\n const { list } = this.state;\n if (!list) return null;\n\n const originalListId = Zymewire.original_feed_query && (\n Zymewire.original_feed_query.user_list_id\n );\n\n const isPublicList = list.listType === \"public\";\n\n const isListIdMatching = list.userListId === originalListId;\n const locked = originalListId ? isListIdMatching : false;\n\n return ;\n }\n});\n\nconst ListAppliedFilterEntry = ({\n isPublicList,\n list,\n locked,\n}) => {\n const canSeeCmoLists = _.contains(Zymewire.user.feature_tags, \"cmo_concepts_and_associations\");\n\n const removeListOrAffiliation = () => {\n\n if (isPublicList && canSeeCmoLists) {\n FacetSearchAffiliatedWithActions.affiliationRemoved({ doSearch: true });\n } else {\n FacetSearchListActions.unselectList({ doSearch: true });\n }\n return false;\n };\n\n\n let label;\n let leadingIcon;\n if (isPublicList && canSeeCmoLists) {\n const affiliationName = list.name\n .replace(\"Drug sponsors affiliated with \", \"\")\n .replace(/\\b\\w/g, char => char.toUpperCase());\n label = `${Zymewire.facet_search_filters.affiliated_with}: ${affiliationName}`;\n leadingIcon = \"microscope\";\n } else {\n const entityType = String(list.entity_type);\n label = `${Zymewire.facet_search_filters.user_lists}: ${entityType} listed on ${list.name}`;\n leadingIcon = \"list\";\n }\n\n return (\n \n );\n};\n\nwindow.FacetSearchCriteriaList = FacetSearchCriteriaList;\nexport default FacetSearchCriteriaList;\n","import Reflux from \"reflux\";\n\nimport Chip from \"@javascript/reactComponents/lds/chips/Chip\";\nimport FacetSearchStore from \"@javascript/stores/facetSearchStore\";\nimport { FacetSearchLocationActions } from \"@javascript/stores/actions/facetSearch/locationActions\";\n\nconst FacetSearchCriteriaLocations = createReactClass({\n mixins: [\n Reflux.connectFilter(FacetSearchStore, function (data) {\n return {\n locations: data.location.selectedLocationCodes,\n };\n }),\n ],\n getInitialState() {\n return {\n locations: FacetSearchStore.data.location.selectedLocationCodes,\n };\n },\n render() {\n const { locations } = this.state;\n const locationsSelected = [];\n const lastIndex = locations.length - 1;\n\n for (let i = 0; i < locations.length; i++) {\n let isLast = lastIndex === i;\n if (locations[i] === \"my_territory\") {\n locationsSelected.push({\n name: \"Your territory\",\n value: locations[i],\n last: isLast,\n });\n } else {\n locationsSelected.push({\n name: Zymewire.loc_codes[locations[i]],\n value: locations[i],\n last: isLast,\n });\n }\n }\n\n // Lockery\n const original = Zymewire.original_feed_query;\n if (original && original.loc_codes && original.loc_codes.length > 0) {\n _.each(locationsSelected, function (locationSelected) {\n if (_.contains(original.loc_codes, locationSelected.value)) {\n locationSelected[\"locked\"] = true;\n }\n });\n $(\"#loc_code_panel\").hide();\n }\n\n if (locationsSelected.length > 0) {\n let locationsList = locationsSelected.map((location, index) => {\n return ;\n });\n\n return (\n <>\n {locationsList}\n \n );\n } else {\n return null;\n }\n },\n});\n\nconst LocationAppliedFilterEntry = ({ last, locked, name, value}) => {\n\n let removeLocation = () => {\n FacetSearchLocationActions.removeLocation(value);\n return false;\n };\n\n const label = (\n <>\n {Zymewire.facet_search_filters.sponsor_company_location}: {name}\n {!last && OR}\n \n );\n\n return (\n \n );\n}\n\nwindow.FacetSearchCriteriaLocations = FacetSearchCriteriaLocations;\nexport default FacetSearchCriteriaLocations;\n\n","import Reflux from \"reflux\";\n\nimport Chip from \"@reactComponents/lds/chips/Chip\";\nimport { FacetSearchCompanyRelationshipActions } from \"@javascript/stores/actions/facetSearch/companyRelationshipActions\";\nimport FacetSearchStore from \"@javascript/stores/facetSearchStore\";\n\nconst FacetSearchCriteriaMutedCompany = createReactClass({\n mixins: [Reflux.connectFilter(FacetSearchStore,\"selected\", function(data){\n return data.relationships.selected\n })],\n\n render(){\n const selected = this.state.selected;\n\n const relationshipsSelected = _.sortBy(selected, (rel) => -rel.length);\n const lastRelationshipSelected = relationshipsSelected.length -1;\n const relationshipProps = relationshipsSelected.map((relationship, index) => {\n return {\n name: Zymewire.relationship_properties[relationship],\n value: relationship,\n last: lastRelationshipSelected === index,\n }\n });\n\n let mutedCompanyList = null;\n\n if(relationshipProps.length > 0) {\n _.each(relationshipProps, function (prop) {\n if (prop.value === \"exclude_muted_companies\") {\n mutedCompanyList = prop;\n }\n });\n }\n\n if(!mutedCompanyList){\n return null;\n }\n\n let original = Zymewire.original_feed_query;\n\n let neededValuesPresent = original && original.relationships && original.relationships.length > 0;\n\n if(neededValuesPresent){\n mutedCompanyList.locked = _.contains(original.relationships, mutedCompanyList.value);\n $('.relationships-accordion').hide();\n }\n\n return (\n \n );\n }\n});\n\nconst MutedCompaniesAppliedFilterEntry = ({ listName, listValue, locked}) => {\n\n let removeList = () => {\n FacetSearchCompanyRelationshipActions.removeCompanyRelationship(listValue);\n return false;\n };\n\n return (\n \n );\n}\n\nwindow.FacetSearchCriteriaMutedCompany = FacetSearchCriteriaMutedCompany;\nexport default FacetSearchCriteriaMutedCompany;\n","import Reflux from \"reflux\";\n\nimport Chip from \"@reactComponents/lds/chips/Chip\";\nimport FacetSearchStore from \"@javascript/stores/facetSearchStore\";\n\nconst FacetSearchCriteriaQueryTerm = createReactClass({\n mixins: [\n Reflux.connectFilter(\n FacetSearchStore,\n ({searchTerm: {queryTerm, feedPageQueryTerm}}) =>\n ({queryTerm, feedPageQueryTerm})\n )\n ],\n\n getInitialState() {\n return {\n queryTerm: FacetSearchStore.data.searchTerm.queryTerm,\n feedPageQueryTerm: FacetSearchStore.data.searchTerm.feedPageQueryTerm,\n };\n },\n\n render(){\n let queryTerm = this.state.queryTerm;\n let feedPageQueryTerm;\n const originalFeedQuery = Zymewire.original_feed_query;\n\n if(originalFeedQuery){\n if (originalFeedQuery.query && $.trim(originalFeedQuery.query).length > 0){\n queryTerm = _.unescape(queryTerm);\n feedPageQueryTerm = decodeHTMLContent(_.unescape(originalFeedQuery.query));\n }\n }\n\n if (!queryTerm && !feedPageQueryTerm){\n return (null);\n }\n\n let editable = true;\n\n if (queryTerm && feedPageQueryTerm){\n editable = queryTerm.toLowerCase() !== feedPageQueryTerm.toLowerCase();\n }\n\n return(\n \n );\n\n }\n});\n\nconst QueryTermEntry = ({ editable, feedPageQueryTerm, queryTerm}) => {\n let startingIndex = decodeURI(queryTerm).toLowerCase().indexOf(decodeURI(feedPageQueryTerm).toLowerCase())\n let original_overlap = feedPageQueryTerm ? startingIndex > -1 : false;\n let matching_term;\n\n if (queryTerm && feedPageQueryTerm && !original_overlap){\n matching_term = `${queryTerm} with ${feedPageQueryTerm}`\n }\n else if (queryTerm){\n matching_term = queryTerm\n }\n else{\n matching_term = feedPageQueryTerm\n }\n\n let trailingIcon = \"cancel\";\n\n let clearQuery = () => {\n $(\".search-query\").val('');\n if($(\".typeahead\").length){\n $(\".typeahead\").typeahead('val', \"\");\n }\n FacetSearchStoreActions.setQueryTerm(\"\");\n doEventSearch();\n };\n\n return (\n \n )\n};\n\nwindow.FacetSearchCriteriaQueryTerm = FacetSearchCriteriaQueryTerm;\nexport default FacetSearchCriteriaQueryTerm;\n","import Reflux from \"reflux\";\n\nimport Chip from \"@javascript/reactComponents/lds/chips/Chip\";\nimport { FacetSearchCompanyRelationshipActions } from \"@javascript/stores/actions/facetSearch/companyRelationshipActions\";\nimport FacetSearchStore from \"@javascript/stores/facetSearchStore\";\n\nconst FacetSearchCriteriaRelationship = createReactClass({\n mixins: [\n Reflux.connectFilter(FacetSearchStore, function(data) { return data.relationships })\n ],\n\n getInitialState() {\n return { ...(FacetSearchStore.data.relationships) }\n },\n\n render () {\n const { selected, salesforceCurrentlyProcessing, authorizedSalesForce } = this.state;\n\n if (selected == null) return null\n\n let relationshipsSelected = selected.filter((rel) => rel !== \"exclude_muted_companies\");\n\n const shouldDisplay = (salesforceCurrentlyProcessing && authorizedSalesForce) && relationshipsSelected.length !== 0\n\n if (!shouldDisplay) return null\n\n const lastRelIndex = relationshipsSelected.length - 1;\n const originalRels = (Zymewire.original_feed_query || {}).relationships || []\n\n relationshipsSelected = _.sortBy(relationshipsSelected, (rel) => -rel.length)\n\n relationshipsSelected = relationshipsSelected.map((relationship, index) => {\n return {\n name: Zymewire.relationship_properties[relationship],\n value: relationship,\n last: lastRelIndex === index,\n locked: _.contains(originalRels, relationship),\n }\n });\n\n const componentFor = (prop) => {\n\n const conjunction = prop.value === 'exclude_recent_sponsor' ? ' AND' : ' OR'\n\n return ;\n\n };\n\n return(\n <>\n { relationshipsSelected.map((prop) => componentFor(prop)) }\n \n );\n }\n});\n\nconst RelationshipEntry = ({\n conjunction,\n last,\n locked,\n name,\n value,\n}) => {\n\n let removeRelationship = () => {\n FacetSearchCompanyRelationshipActions.removeCompanyRelationship(value)\n return false;\n };\n\n const label = (\n <>\n {Zymewire.facet_search_filters.company_relationship}: {name}\n {!last && {conjunction}}\n \n );\n\n return (\n \n );\n};\n\nwindow.FacetSearchCriteriaRelationship = FacetSearchCriteriaRelationship;\nexport default FacetSearchCriteriaRelationship;\n","import Reflux from \"reflux\";\n\nimport Chip from \"@reactComponents/lds/chips/Chip\";\nimport FacetSearchStore from \"@javascript/stores/facetSearchStore\";\n\nconst FacetSearchCriteriaTimeFrame = createReactClass({\n mixins: [\n Reflux.connectFilter(FacetSearchStore, function (data) {\n return data.timeFrame;\n }),\n ],\n getInitialState: function () {\n return {\n ...(FacetSearchStore.data.timeFrame)\n };\n },\n shouldComponentUpdate: function (nextProps, nextState) {\n return true\n },\n resetTimeSelect: function() {\n reset_time_select();\n },\n render: function(){\n // The URL is our source of truth here, since that is the active search\n const { selected, earliest, latest } = FacetSearchStore.getActiveTimeFrame();\n\n let timeFrameDescription = null;\n if (selected !== undefined && selected !== \"time_any\") {\n if (selected !== \"time_custom\") {\n timeFrameDescription = this.state.display.in + this.state.display.options[selected];\n }\n else if (earliest !== null) {\n const fromMoment = moment(earliest, this.state.display.format.moment);\n const toMoment = moment(latest, this.state.display.format.moment);\n timeFrameDescription = this.state.display.between + fromMoment.format(this.state.display.format.description) + \" and \" + toMoment.format(this.state.display.format.description);\n }\n }\n if (timeFrameDescription === null) return null;\n\n let trailingIcon = \"cancel\";\n\n return (\n \n );\n }\n});\n\nwindow.FacetSearchCriteriaTimeFrame = FacetSearchCriteriaTimeFrame;\nexport default FacetSearchCriteriaTimeFrame;\n","import AppliedFiltersClearAll from \"@reactComponents/facetSearchCriteria/AppliedFiltersClearAll\";\nimport FacetSearchCriteriaAliasSearch from \"@reactComponents/facetSearchCriteria/facetSearchCriteriaAliasSearch\";\nimport FacetSearchCriteriaCategory from \"@reactComponents/facetSearchCriteria/facetSearchCriteriaCategory\";\n\nimport FacetSearchCriteriaClinicalStatus from \"@reactComponents/facetSearchCriteria/facetSearchCriteriaClinicalStatus\";\nimport FacetSearchCriteriaClinicalTrialStages from \"@reactComponents/facetSearchCriteria/facetSearchCriteriaClinicalTrialStages\";\nimport FacetSearchCriteriaEntities from \"@reactComponents/facetSearchCriteria/facetSearchCriteriaEntities\";\n\nimport FacetSearchCriteriaEntityValues from \"@reactComponents/facetSearchCriteria/facetSearchCriteriaEntityValues\";\nimport FacetSearchCriteriaGeoCoordinates from \"@reactComponents/facetSearchCriteria/facetSearchCriteriaGeoCoordinates\";\nimport FacetSearchCriteriaList from \"@reactComponents/facetSearchCriteria/facetSearchCriteriaList\";\n\nimport FacetSearchCriteriaLocations from \"@reactComponents/facetSearchCriteria/facetSearchCriteriaLocations\";\nimport FacetSearchCriteriaMutedCompany from \"@reactComponents/facetSearchCriteria/facetSearchCriteriaMutedCompany\";\nimport FacetSearchCriteriaQueryTerm from \"@reactComponents/facetSearchCriteria/facetSearchCriteriaQueryTerm\";\n\nimport FacetSearchCriteriaRelationship from \"@reactComponents/facetSearchCriteria/facetSearchCriteriaRelationship\";\nimport FacetSearchCriteriaTimeFrame from \"@reactComponents/facetSearchCriteria/facetSearchCriteriaTimeFrame\";\nimport { useEffect, useRef } from \"react\";\n\nconst FacetSearchCriteriaContainer = () => {\n const criteriaPanelRef = useRef(null);\n\n useEffect(() => {\n document.getElementById(\"panel_container\").addEventListener(\"scroll\", _.debounce(() => {\n const heading = document.getElementById(\"applied-filters-heading-container\");\n const panel = criteriaPanelRef.current;\n\n if (!panel) {\n return;\n }\n\n const headingRect = heading.getBoundingClientRect();\n const panelRect = panel.getBoundingClientRect();\n\n if (headingRect.bottom >= panelRect.top) {\n heading.classList.add(\"applied-filters-heading-shadow\");\n } else {\n heading.classList.remove(\"applied-filters-heading-shadow\");\n }\n }, 100));\n }, []);\n\n return (\n
    \n
    \n
    \n \n \n \n \n \n \n \n \n \n \n \n \n \n
    \n \n
    \n
    \n )\n}\n\nwindow.FacetSearchCriteriaContainer = FacetSearchCriteriaContainer;\nexport default FacetSearchCriteriaContainer;\n","import FacetSearchStore from \"@javascript/stores/facetSearchStore\";\n\nimport Heading from \"@reactComponents/lds/typography/Heading\";\n\nconst FacetSearchCriteriaHeading = () => {\n // this should be refactored as initial state when hooking this component up to FacetSearchStore\n const total_count_formatted = commifyNumber(FacetSearchStore.data.total_count);\n\n return (\n
    \n Applied Filters\n

    Current search is narrowed to {total_count_formatted} event{FacetSearchStore.data.total_count === 1 ? \"\" : \"s\"}

    \n
    \n )\n}\n\nwindow.FacetSearchCriteriaHeading = FacetSearchCriteriaHeading;\nexport default FacetSearchCriteriaHeading;\n","import Reflux from \"reflux\";\nimport FacetSearchStore from \"../../stores/facetSearchStore\";\nimport { FacetSearchTimeFrameActions } from \"../../stores/actions/facetSearch/timeFrameActions\";\nimport Dropdown, { DropdownTrigger } from \"../lds/dropdown/Dropdown\";\nimport DropdownList from \"../lds/dropdown/DropdownList\";\nimport Input from \"../lds/Input\";\nimport { useState } from \"react\";\nimport createReactClass from \"create-react-class\";\n\nfunction TimeSelectDropdownInner({ dropdownRef, onCustomTimeSelect }) {\n const [open, setOpen] = useState(false);\n\n const items = [\n { label: \"Last 24 hours\", value: \"time_last_24h\" },\n { label: \"Last 3 days\", value: \"time_last_3d\" },\n { label: \"Last week\", value: \"time_last_wk\" },\n { label: \"Last month\", value: \"time_last_mon\" },\n { label: \"Last 3 months\", value: \"time_last_3m\" },\n { label: \"Last 6 months\", value: \"time_last_6m\" },\n { label: \"Last year\", value: \"time_last_1y\" },\n { label: \"Last 10 years\", value: \"time_any\" },\n { label: \"Custom date range\", value: \"time_custom\" },\n ];\n\n const selectedValue = FacetSearchStore.data.timeFrame.selected || \"time_any\";\n\n const selectedLabel = items.find(\n (item) => item.value === selectedValue\n ).label;\n\n const fullItems = items.map((item) => ({\n ...item,\n selected: item.value === selectedValue,\n }));\n\n const selectItem = (item) => {\n setOpen(false);\n\n const isTimeCustom = item.value === \"time_custom\";\n\n if (isTimeCustom) {\n onCustomTimeSelect(true);\n }\n\n FacetSearchTimeFrameActions.timeFrameUpdate({\n doSearch: !isTimeCustom,\n timeSelectValue: item.value,\n });\n };\n\n const handleDropdownClose = () => {\n // When custom time is selected, go back to Date range view\n if (open && selectedValue === \"time_custom\") {\n onCustomTimeSelect();\n }\n\n setOpen(false);\n };\n\n return (\n setOpen(true)}\n onDropdownClose={handleDropdownClose}\n ref={dropdownRef}\n >\n \n
    \n {}}\n size=\"small\"\n trailingIcon={\"chevron-\" + (open ? \"up\" : \"down\")}\n showClearIcon={false}\n width=\"100%\"\n focused={open}\n />\n
    \n
    \n\n \n \n );\n}\n\n// Wrap with a class component in order to use Reflux.connect\nconst TimeSelectDropdown = createReactClass({\n mixins: [\n Reflux.connectFilter(FacetSearchStore, function (data) {\n return {\n timeFrame: data.timeFrame,\n };\n }),\n ],\n\n render() {\n return (\n \n );\n },\n});\n\nexport default TimeSelectDropdown;\n\nwindow.TimeSelectDropdown = TimeSelectDropdown;\n","import { createContext } from \"react\";\n\nconst TWENTY_YEARS_FROM_NOW = new Date().getFullYear() + 20;\n\nexport const DEFAULT_MIN_DATE = new Date(2012, 0, 1);\n\n/** Ensure MAX_YEAR is always even */\nexport const DEFAULT_MAX_DATE =\n TWENTY_YEARS_FROM_NOW % 2 === 0\n ? new Date(TWENTY_YEARS_FROM_NOW, 0, 1)\n : new Date(TWENTY_YEARS_FROM_NOW + 1, 0, 1);\n\n// TODO as part of CALENDARCLEANUP: rename this file, alpha the args\nexport const CalendarContext = createContext({\n activeOverlay: null,\n minDate: DEFAULT_MIN_DATE,\n maxDate: DEFAULT_MAX_DATE,\n dismissOverlay: () => {},\n setActiveOverlay: () => {},\n toggleMonthOverlay: () => {},\n toggleYearOverlay: () => {},\n});\n\nexport const CalendarProvider = CalendarContext.Provider;\n","import React, { useContext } from \"react\";\nimport PropTypes from \"prop-types\";\n\nimport moment from \"moment\";\nimport _ from \"lodash\";\n\nimport { CalendarContext } from \"./CalendarContext\";\nimport { useDatePickerContext } from \"@rehookify/datepicker\";\nimport Icon from \"@javascript/reactComponents/lds/Icon\";\n\nexport const MONTH_NAMES = moment.months().map((month) => month.toUpperCase());\nconst INNER_YEAR_WIDTH = 32;\nconst INNER_MONTH_WIDTH = 28;\n\nexport function CalendarHeaderMenu({\n label,\n open = false,\n disabled = false,\n disabledPrev = false,\n disabledNext = false,\n onStep = () => {},\n onOpen = () => {},\n innerWidth = INNER_YEAR_WIDTH,\n id = \"\",\n}) {\n disabledPrev = disabledPrev || disabled;\n disabledNext = disabledNext || disabled;\n\n const prevClass = disabledPrev ? \"disabled\" : \"\";\n const nextClass = disabledNext ? \"disabled\" : \"\";\n\n const onPrev = () => {\n if (!disabledPrev) {\n onStep(\"prev\");\n }\n };\n\n const onNext = () => {\n if (!disabledNext) {\n onStep(\"next\");\n }\n };\n\n const testId = `lds-calendar-header-menu${id ? `-${id}` : \"\"}`;\n\n return (\n
    \n \n \n \n\n \n {label}\n \n \n\n \n \n \n
    \n );\n}\n\nexport default function CalendarHeader({ width }) {\n const {\n activeOverlay,\n minDate,\n maxDate,\n toggleMonthOverlay,\n toggleYearOverlay,\n } = useContext(CalendarContext);\n\n const {\n data: { calendars },\n propGetters: { addOffset, subtractOffset },\n } = useDatePickerContext();\n\n const styles = {};\n\n if (width) {\n styles.width = width;\n }\n\n const currentYear = calendars[0].year;\n const yearInt = parseInt(currentYear);\n\n const currentMonth = calendars[0].month.toUpperCase();\n const monthInt = MONTH_NAMES.indexOf(currentMonth);\n\n\n const disableNextYear = _.isDate(maxDate) && yearInt >= maxDate.getFullYear();\n const disablePrevYear = _.isDate(minDate) && yearInt <= minDate.getFullYear();\n\n // Disable the month when year is disabled and clicking would roll year over\n // (jan when first allowed year, dec when last allowed year)\n const disableNextMonth = disableNextYear && monthInt === 11;\n const disablePrevMonth = disablePrevYear && monthInt === 0;\n\n const stepOffset = (type, direction) => {\n const offset = { [type]: 1 };\n\n if (direction === \"next\") {\n addOffset(offset).onClick();\n } else {\n subtractOffset(offset).onClick();\n }\n };\n\n const stepYear = (direction) => {\n stepOffset(\"years\", direction);\n };\n\n const stepMonth = (direction) => {\n stepOffset(\"months\", direction);\n };\n\n return (\n
    \n \n \n
    \n );\n}\n\nCalendarHeader.propTypes = {\n width: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\n};\n","import PropTypes from \"prop-types\";\n\nimport { useDatePickerContext } from \"@rehookify/datepicker\";\n\nexport default function CalendarDate({\n onDateSelect = () => {},\n rehookifyDateDTO,\n}) {\n\n const {\n data: { calendars },\n propGetters: { addOffset, subtractOffset },\n } = useDatePickerContext();\n\n const firstDayOfCurrentMonth = calendars[0].days.find(day => day.inCurrentMonth).$date\n\n // interface between rehookifyDateDTO (which we do not control) and an\n // appropriately named set of variables we can use\n\n const dateObject = rehookifyDateDTO.$date;\n\n const inCurrentMonth = rehookifyDateDTO.inCurrentMonth;\n const isDisabled = rehookifyDateDTO.disabled;\n const isSelected = rehookifyDateDTO.selected;\n const isToday = rehookifyDateDTO.now;\n\n const thisDay = dateObject.getDate();\n const thisMonthIndex = dateObject.getMonth();\n\n\n const toggleDateSelection = () => {\n\n if (!inCurrentMonth) {\n if (dateObject < firstDayOfCurrentMonth) {\n subtractOffset({ months: 1 }).onClick();\n } else {\n addOffset({ months: 1 }).onClick();\n }\n }\n\n onDateSelect?.(rehookifyDateDTO);\n }\n\n const id = `calendarDate-${thisMonthIndex}-${thisDay}`;\n\n const classNames = [`lds-calendar-date${inCurrentMonth ? '-inside-month' : '-outside-month'}`];\n\n\n if (isToday) {\n classNames.push(\"today\");\n }\n\n if (isDisabled) {\n classNames.push(\"disabled\");\n }\n\n if (isSelected) {\n classNames.push(\"selected\");\n }\n\n return (\n \n {thisDay}\n
    \n );\n}\n\nCalendarDate.propTypes = {\n onDateSelect: PropTypes.func,\n rehookifyDateDTO: PropTypes.shape({\n $date: PropTypes.instanceOf(Date),\n disabled: PropTypes.bool,\n inCurrentMonth: PropTypes.bool,\n now: PropTypes.bool,\n selected: PropTypes.bool,\n }).isRequired,\n};\n","import React from \"react\";\n\nexport const WEEK_DAY_LABELS = [\"Su\", \"Mo\", \"Tu\", \"We\", \"Th\", \"Fr\", \"Sa\"];\n\nexport default function CalendarWeekDayLabels({}) {\n return (\n
    \n {WEEK_DAY_LABELS.map((day_label, index) => (\n {day_label}\n ))}\n
    \n );\n}\n","import { useContext } from \"react\";\nimport PropTypes from \"prop-types\";\nimport { chunk } from \"lodash\";\n\nimport { useDatePickerContext } from \"@rehookify/datepicker\";\nimport { CalendarContext } from \"./CalendarContext\";\n\nimport CalendarDate from \"@javascript/reactComponents/lds/datepicker/CalendarDate\";\nimport CalendarWeekDayLabels from \"@javascript/reactComponents/lds/datepicker/CalendarWeekDayLabels\";\n\nexport default function CalendarBody({\n onDateSelect = () => {},\n }) {\n\n const rehookifyContext = useDatePickerContext();\n\n const {\n minDate,\n maxDate,\n } = useContext(CalendarContext);\n\n const rehookifyCalendars = rehookifyContext.data.calendars;\n\n const currentMonth = rehookifyCalendars[0];\n\n const isCurrentDateInRange = (currentDate) => {\n const currentTime = currentDate.getTime();\n const minTime = minDate ? minDate.getTime() : -Infinity;\n const maxTime = maxDate ? maxDate.getTime() : Infinity;\n\n return currentTime >= minTime && currentTime <= maxTime;\n };\n\n// Generating calendar dates with conditional rendering based on date range\n const calendarDates = chunk(\n currentMonth.days.map((date, index) => {\n const isInRange = isCurrentDateInRange(date.$date);\n const dateProps = isInRange ? date : { ...date, disabled: true };\n\n return (\n \n );\n }),\n 7\n ).map((week, index) => (\n \n {week}\n
    \n ));\n\n const classNames = [\"lds-calendar-body\"];\n\n return (\n \n \n {calendarDates}\n
    \n );\n}\n\nCalendarBody.propTypes = {\n onDateSelect: PropTypes.func,\n};\n","import moment from \"moment\";\nimport Chip from \"@javascript/reactComponents/lds/chips/Chip\";\nimport { chunk } from \"lodash\";\nimport { useDatePickerContext } from \"@rehookify/datepicker\";\nimport { useContext } from \"react\";\nimport { CalendarContext } from \"./CalendarContext\";\n\nconst MONTHS_IN_YEAR = moment.months().map((month) => month.toUpperCase());\n\nexport default function QuickActionMonthSelector() {\n const {\n data: { calendars },\n propGetters: { addOffset, subtractOffset },\n } = useDatePickerContext();\n\n const { dismissOverlay } = useContext(CalendarContext);\n\n const currentMonth = calendars[0].month;\n\n const handleMonthClick = (month) => {\n const currentMonthIndex = MONTHS_IN_YEAR.indexOf(\n currentMonth.toUpperCase()\n );\n const desiredMonthIndex = MONTHS_IN_YEAR.indexOf(month);\n\n const offset = { months: Math.abs(currentMonthIndex - desiredMonthIndex) };\n if (desiredMonthIndex > currentMonthIndex) {\n addOffset(offset).onClick();\n } else {\n subtractOffset(offset).onClick();\n }\n\n dismissOverlay();\n };\n\n const monthChips = MONTHS_IN_YEAR.map((month) => {\n const selected =\n currentMonth.toLocaleLowerCase() === month.toLocaleLowerCase();\n return (\n handleMonthClick(month)}\n selected={selected}\n variant={selected ? \"primary\" : \"secondary\"}\n width=\"100%\"\n />\n );\n });\n\n const renderChunks = chunk(monthChips, 2);\n\n return renderChunks.map((chunk, index) => (\n
    \n {chunk}\n
    \n ));\n}\n","/**\n * True iff `year` is before `minDate` or after `maxDate`\n * @param {number} year The year to check\n * @param {Date} minDate The earliest date\n * @param {Date} maxDate The latest date\n */\nexport function yearOutsideRange(year, minDate, maxDate) {\n return year < minDate.getFullYear() || year > maxDate.getFullYear();\n}\n","import { chunk } from \"lodash\";\nimport Chip from \"@javascript/reactComponents/lds/chips/Chip\";\nimport { useDatePickerContext } from \"@rehookify/datepicker\";\nimport { useContext } from \"react\";\nimport {\n CalendarContext,\n DEFAULT_MAX_DATE,\n DEFAULT_MIN_DATE,\n} from \"./CalendarContext\";\nimport { yearOutsideRange } from \"@javascript/reactComponents/utilities/CalendarUtilities\";\n\nexport default function QuickActionYearSelector() {\n const {\n data: { calendars },\n propGetters: { addOffset, subtractOffset },\n } = useDatePickerContext();\n\n const { dismissOverlay, minDate, maxDate } = useContext(CalendarContext);\n\n const currentYear = parseInt(calendars[0].year);\n const minYear = DEFAULT_MIN_DATE.getFullYear();\n const maxYear = DEFAULT_MAX_DATE.getFullYear();\n\n const handleYearClick = (year) => {\n const offset = { years: Math.abs(currentYear - year) };\n\n if (year > currentYear) {\n addOffset(offset).onClick();\n } else {\n subtractOffset(offset).onClick();\n }\n\n dismissOverlay();\n };\n\n const yearChips = [];\n\n for (let year = minYear; year < maxYear; year++) {\n let variant = currentYear === year ? \"primary\" : \"secondary\";\n if (yearOutsideRange(year, minDate, maxDate)) {\n variant = \"disabled\";\n }\n\n yearChips.push(\n handleYearClick(year)}\n selected={year === currentYear}\n variant={variant}\n width=\"100%\"\n />\n );\n }\n\n const renderChunks = chunk(yearChips, 2);\n\n return renderChunks.map((chunk, index) => (\n
    \n {chunk}\n
    \n ));\n}\n","import React, { useContext, useEffect } from \"react\";\nimport PropTypes from \"prop-types\";\n\nimport { CalendarContext } from \"./CalendarContext\";\nimport { useDatePickerContext } from \"@rehookify/datepicker\";\n\nimport QuickActionMonthSelector from \"./QuickActionMonthSelector\";\nimport QuickActionYearSelector from \"./QuickActionYearSelector\";\n\nexport default function QuickActionContainer({\n className,\n}) {\n const { activeOverlay } = useContext(CalendarContext);\n const {\n data: { calendars },\n } = useDatePickerContext();\n\n const currentYear = parseInt(calendars[0].year);\n\n const showMonthSelector = activeOverlay === \"month\";\n\n let OverlayComponent;\n\n if (activeOverlay) {\n OverlayComponent = showMonthSelector\n ? QuickActionMonthSelector\n : QuickActionYearSelector;\n } else {\n OverlayComponent = React.Fragment;\n }\n\n // Scroll into view selected year, if year selector is shown\n useEffect(() => {\n if (activeOverlay === \"year\") {\n // The amount to nudge the scroll body so user can\n // see chips above/below\n const offset = 10;\n\n const targetChip = document.getElementById(\n \"lds-datepicker-quick-action-year-\" + currentYear\n );\n\n // When user tries to open to an invalid year\n if (!targetChip) {\n return;\n }\n\n const scrollContainer = targetChip.closest(\n \".lds-datepicker-quick-action-container\"\n );\n\n // Partially obscure some chips above, so user knows that they can scroll\n // On MacOS the scrollbar is hidden, so this UX cue is important for\n // for those users. Thanks Apple.\n let distanceToScroll = targetChip.offsetTop;\n distanceToScroll -= scrollContainer.clientHeight / 2;\n distanceToScroll -= targetChip.clientHeight / 2;\n distanceToScroll += offset;\n\n scrollContainer.scrollTop = distanceToScroll;\n }\n }, [activeOverlay]);\n\n if (!activeOverlay) {\n return null;\n }\n\n const classNames = [\"lds-datepicker-quick-action-container\"];\n\n if(className) {\n classNames.push(className);\n }\n\n return (\n \n \n
    \n );\n};\n\nQuickActionContainer.propTypes = {\n className: PropTypes.string,\n};\n","import React, { useEffect } from 'react';\nimport PropTypes from \"prop-types\";\n\nimport _ from \"lodash\";\n\nimport { DatePickerProvider } from \"@rehookify/datepicker\";\nimport { useClickAway } from \"@uidotdev/usehooks\";\n\nimport { CalendarProvider, DEFAULT_MAX_DATE, DEFAULT_MIN_DATE } from \"./CalendarContext\";\n\nimport CalendarHeader from \"./CalendarHeader\";\nimport CalendarBody from \"./CalendarBody\";\nimport QuickActionContainer from \"./QuickActionContainer\";\n\nconst Calendar = ({\n initialDate,\n maxDate = DEFAULT_MAX_DATE,\n minDate = DEFAULT_MIN_DATE,\n onDateSelected = () => {},\n variant = \"primary\"\n}) => {\n const [activeOverlay, setActiveOverlay] = React.useState(null);\n const [selectedDates, setSelectedDates] = React.useState([]);\n const [offsetDate, setOffsetDate] = React.useState(initialDate);\n\n const calendarRef = useClickAway(() => {\n if (activeOverlay) {\n setActiveOverlay(null);\n }\n });\n\n const toggleMonthOverlay = () => {\n setActiveOverlay(activeOverlay === \"month\" ? null : \"month\");\n };\n\n const toggleYearOverlay = () => {\n setActiveOverlay(activeOverlay === \"year\" ? null : \"year\");\n };\n\n const handleDateSelect = (dateDTO) => {\n const dateSelected = dateDTO.$date;\n if (!dateDTO || !dateSelected || !_.isDate(dateSelected)) {\n console.error(\"Invalid dateDTO:\", dateDTO);\n return;\n }\n setSelectedDates([dateSelected]);\n onDateSelected(dateSelected);\n };\n\n const handleDatesChange = (dates) => {\n const validDates = dates.filter(_.isDate);\n setSelectedDates(validDates);\n };\n\n useEffect(() => {\n if (_.isDate(initialDate)) {\n setSelectedDates([initialDate]);\n setOffsetDate(initialDate);\n }\n }, [initialDate]);\n\n return (\n \n setActiveOverlay(null),\n maxDate,\n minDate,\n setActiveOverlay,\n toggleMonthOverlay,\n toggleYearOverlay,\n }}\n >\n \n
    \n \n
    \n
    \n {activeOverlay && }\n \n
    \n
    \n \n \n );\n};\n\nCalendar.propTypes = {\n initialDate: PropTypes.oneOfType([\n PropTypes.instanceOf(Date),\n PropTypes.oneOf([null, undefined])\n ]),\n maxDate: PropTypes.oneOfType([\n PropTypes.instanceOf(Date),\n PropTypes.oneOf([null, undefined])\n ]),\n minDate: PropTypes.oneOfType([\n PropTypes.instanceOf(Date),\n PropTypes.oneOf([null, undefined])\n ]),\n onDateSelected: PropTypes.func,\n variant: PropTypes.oneOf([\"primary\", \"critical\"]),\n};\n\nexport default Calendar;\n","export default function CalendarActions({ children }) {\n return
    {children}
    ;\n}\n","export default function DatePickerHeader({ children }) {\n return
    {children}
    ;\n}\n","import React, { useEffect, useState } from \"react\";\nimport PropTypes from \"prop-types\";\n\nimport _ from \"lodash\";\n\nimport Button from \"@javascript/reactComponents/lds/Button\";\nimport Calendar from \"@javascript/reactComponents/lds/datepicker/Calendar\";\nimport CalendarActions from \"@javascript/reactComponents/lds/datepicker/CalendarActions\";\nimport DatePickerHeader from \"@javascript/reactComponents/lds/datepicker/DatePickerHeader\";\n\n/** \n * @param d1 {Date}\n * @param d2 {Date}\n */\nexport function datesEqual(d1, d2) {\n return (\n d1.getFullYear() === d2.getFullYear() &&\n d1.getMonth() === d2.getMonth() &&\n d1.getDate() === d2.getDate()\n );\n}\n\nconst DatePicker = ({\n dateStart,\n dateEnd,\n maxDate,\n minDate,\n // When a date is clicked by user, but NOT confirmed.\n onDateClick = () => {},\n onDateSelect = () => {},\n range = false,\n}) => {\n\n\n if (range && !(_.isDate(dateEnd) && !_.isNaN(dateEnd.getTime()))) {\n console.error(\"Range: Invalid dateEnd provided to DatePicker\");\n return null;\n }\n\n const [selectedStartDate, setSelectedStartDate] = useState(dateStart);\n const [selectedEndDate, setSelectedEndDate] = useState(dateEnd || null);\n\n const [rangeVariants, setRangeVariants] = useState({\n start: \"primary\",\n end: \"primary\",\n button: _.isDate(dateStart) ? \"primary\" : \"disable\",\n });\n\n const isBefore = (date, limit) => date && limit && date < limit;\n const isAfter = (date, limit) => date && limit && date > limit;\n\n const validateDates = (endDate, rangeIndicator, startDate) => {\n let startVariant = \"primary\";\n let endVariant = \"primary\";\n let buttonVariant = \"primary\";\n\n if (!startDate || !endDate) {\n if (!startDate && endDate) {\n startVariant = \"critical\";\n }\n } else if (rangeIndicator === \"start\") {\n if (startDate > endDate) {\n startVariant = \"critical\";\n }\n } else if (rangeIndicator === \"end\") {\n if (startDate > endDate) {\n endVariant = \"critical\";\n }\n }\n\n if (minDate) {\n if (isBefore(startDate, minDate) || isBefore(endDate, minDate)) {\n buttonVariant = \"disable\";\n }\n }\n\n if (maxDate) {\n if (isAfter(startDate, maxDate) || isAfter(endDate, maxDate)) {\n buttonVariant = \"disable\";\n }\n }\n\n if (startVariant === \"critical\" || endVariant === \"critical\") {\n buttonVariant = \"disable\";\n }\n\n if (!_.isDate(startDate)) {\n buttonVariant = \"disable\"\n }\n\n setRangeVariants({\n start: startVariant,\n end: endVariant,\n button: buttonVariant,\n });\n };\n\n const handleDateSelect = (\n dateSelected,\n rangeIndicator,\n ) => {\n if (rangeIndicator === \"end\") {\n setSelectedEndDate(dateSelected);\n validateDates(dateSelected, rangeIndicator, selectedStartDate);\n } else {\n setSelectedStartDate(dateSelected);\n validateDates(selectedEndDate, rangeIndicator, dateSelected);\n }\n };\n\n const handleConfirm = (event) => {\n event.preventDefault();\n\n if (onDateSelect) {\n if (range) {\n onDateSelect([selectedStartDate, selectedEndDate]);\n }\n else {\n onDateSelect([selectedStartDate]);\n }\n }\n };\n\n useEffect(() => {\n handleDateSelect(dateStart, \"start\");\n }, [dateStart]);\n\n useEffect(() => {\n handleDateSelect(dateEnd, \"end\");\n }, [dateEnd]);\n\n const buttonText = range ? \"Confirm Date Range\" : \"Confirm Selection\";\n\n return (\n
    \n {range ? (\n
    \n
    \n \n Start Date\n {\n onDateClick([dateSelected, selectedEndDate]);\n handleDateSelect(dateSelected, \"start\");\n }}\n variant={rangeVariants.start}\n />\n
    \n \n End Date\n {\n onDateClick([selectedStartDate, dateSelected]);\n handleDateSelect(dateSelected, \"end\");\n }}\n variant={rangeVariants.end}\n />\n
    \n
    \n
    \n ) : (\n <>\n Select Date\n {\n onDateClick([dateSelected]);\n handleDateSelect(dateSelected, null);\n }}\n variant={rangeVariants.start}\n />\n \n )}\n \n \n {buttonText}\n \n \n \n );\n};\n\nDatePicker.propTypes = {\n dateStart: PropTypes.oneOfType([\n PropTypes.instanceOf(Date),\n PropTypes.oneOf([null, undefined])\n ]),\n dateEnd: PropTypes.oneOfType([\n PropTypes.instanceOf(Date),\n PropTypes.oneOf([null, undefined])\n ]),\n maxDate: PropTypes.oneOfType([\n PropTypes.instanceOf(Date),\n PropTypes.oneOf([null, undefined])\n ]),\n minDate: PropTypes.oneOfType([\n PropTypes.instanceOf(Date),\n PropTypes.oneOf([null, undefined])\n ]),\n onCancel: PropTypes.func,\n onDateClick: PropTypes.func,\n onDateSelect: PropTypes.func,\n range: PropTypes.bool,\n};\n\nexport default DatePicker;\n","import Input from \"@javascript/reactComponents/lds/Input\";\nimport { useEffect, useRef, useState } from \"react\";\nimport { formatDate, isKeyDownEventValidInput, parseDate } from \"./timeSelectorHelpers\";\nimport { datesEqual } from \"@javascript/reactComponents/lds/datepicker/DatePicker\";\n\nexport default function FacetSearchTimeSelectMultiInput({\n start,\n end,\n onUpdateStart,\n onUpdateEnd,\n focused,\n onTrailingActionClick,\n dropdownOpen,\n dropdownRef,\n}) {\n // Update via ref value so that it doesn't cause the caret to jump\n const updateInputWithDate = (ref, date, force = false) => {\n if (ref.current) {\n // Prevent jitter, no need to update if they represent the same date\n const existingDate = parseDate(ref.current.value).toDate();\n\n if (datesEqual(existingDate, date) && !force) {\n return;\n }\n\n ref.current.value = formatDate(date);\n }\n };\n\n const handleInputBlur = (event, type) => {\n // When nothing given, revert to old value\n if (event.target.value.trim() === \"\") {\n type === \"start\" ? setStartText(formatDate(start)) : setEndText(formatDate(end))\n return\n }\n\n const date = parseDate(event.target.value).toDate();\n\n if (type === \"start\") {\n setStartText(event.target.value);\n updateInputWithDate(startRef, date, true);\n } else {\n setEndText(event.target.value);\n updateInputWithDate(endRef, date, true);\n }\n };\n\n // When user clicks the \"Enter\" key\n const handleKeyDown = (event, type) => {\n if (!isKeyDownEventValidInput(event)) {\n event.preventDefault();\n return\n }\n\n // No current way to stop the page from triggering a\n // search without some complicated logic. To account\n // for this, we update the store so that downstream\n // function such as search_data()\n // have access to the correct date range.\n FacetSearchTimeFrameActions.setDateRange(\n formatDate(start),\n formatDate(end)\n );\n\n if (event.key === \"Enter\") {\n handleInputBlur(event, type);\n dropdownRef.current.close();\n }\n };\n\n const isValidMoment = (momentDate) => {\n return momentDate.isValid();\n };\n\n const [startText, setStartText] = useState(formatDate(start));\n const [endText, setEndText] = useState(formatDate(end));\n\n const startRef = useRef();\n const endRef = useRef();\n\n const commonInputStyles = {\n flexGrow: 0,\n width: 77,\n };\n\n const inputValid = start <= end;\n\n // New data from parent\n useEffect(() => {\n updateInputWithDate(startRef, start);\n }, [start]);\n\n useEffect(() => {\n updateInputWithDate(endRef, end);\n }, [end]);\n\n // User manually edits From date\n useEffect(() => {\n let desiredStart = parseDate(startText);\n\n if (isValidMoment(desiredStart)) {\n onUpdateStart(desiredStart.toDate());\n }\n }, [startText]);\n\n // User manually edits To date\n useEffect(() => {\n let desiredEnd = parseDate(endText);\n\n if (isValidMoment(desiredEnd)) {\n onUpdateEnd(desiredEnd.toDate());\n }\n }, [endText]);\n\n useEffect(() => {\n if (!focused) {\n startRef.current.value = formatDate(start);\n endRef.current.value = formatDate(end);\n }\n }, [focused]);\n\n return (\n {}}\n maxWidth=\"100%\"\n showClearIcon={false}\n size=\"small\"\n trailingIcon={dropdownOpen ? \"chevron-up\" : \"chevron-down\"}\n trailingIconOnClick={onTrailingActionClick}\n value={\n \n setStartText(e.target.value)}\n onBlur={(e) => handleInputBlur(e, \"start\")}\n onKeyDown={(e) => handleKeyDown(e, \"start\")}\n style={commonInputStyles}\n />\n
    to
    \n setEndText(e.target.value)}\n onBlur={(e) => handleInputBlur(e, \"end\")}\n onKeyDown={(e) => handleKeyDown(e, \"end\")}\n style={commonInputStyles}\n />\n \n }\n variant={inputValid ? \"normal\" : \"critical\"}\n width=\"100%\"\n />\n );\n}\n","import DatePicker, {\n datesEqual,\n} from \"@javascript/reactComponents/lds/datepicker/DatePicker\";\nimport Dropdown, {\n DropdownTrigger,\n} from \"@javascript/reactComponents/lds/dropdown/Dropdown\";\n\nimport { useEffect, useRef, useState } from \"react\";\nimport { FacetSearchTimeFrameActions } from \"@javascript/stores/actions/facetSearch/timeFrameActions\";\nimport {\n DATEPICKER_MAX_DATE,\n formatDate,\n} from \"@javascript/reactComponents/facetSearch/timeSelector/timeSelectorHelpers\";\nimport FacetSearchTimeSelectMultiInput from \"@javascript/reactComponents/facetSearch/timeSelector/FacetSearchTimeSelectMultiInput\";\nimport { useIsFirstRender } from \"@uidotdev/usehooks\";\n\nconst HIDDEN_STYLES = {\n display: \"none\",\n};\n\nexport default function FacetSearchDateRangePicker({\n onDismiss,\n fromDate,\n toDate,\n dropdownRef,\n datePickerVisible,\n}) {\n const [dropdownOpen, setDropdownOpen] = useState(false);\n\n const [start, setStart] = useState(fromDate);\n const [end, setEnd] = useState(toDate);\n const isFirstRender = useIsFirstRender();\n\n const handleDateClick = (dates) => {\n if (!datesEqual(start, dates[0])) {\n setStart(dates[0]);\n }\n\n if (!datesEqual(end, dates[1])) {\n setEnd(dates[1]);\n }\n\n FacetSearchTimeFrameActions.setDateRange(\n formatDate(dates[0]),\n formatDate(dates[1])\n );\n };\n\n // When user clicks the Confirm button\n const handleDateSelect = () => {\n FacetSearchTimeFrameActions.setDateRange(\n formatDate(start),\n formatDate(end)\n );\n\n dropdownRef.current.close();\n\n // Taken from: app/views/shared/_search_bar.html.erb line 18\n save_searchbar_query();\n doEventSearch();\n };\n\n const handleChevronClick = (event) => {\n dropdownRef.current.close();\n onDismiss();\n };\n\n // FacetSearchStore has new data\n useEffect(() => {\n if (!datesEqual(fromDate, start)) {\n setStart(fromDate);\n }\n }, [fromDate]);\n\n useEffect(() => {\n if (!datesEqual(toDate, end)) {\n setEnd(toDate);\n }\n }, [toDate]);\n\n // When datepicker is dismissed, ensure FacetSearchStore has latest date range\n useEffect(() => {\n if (!dropdownOpen && !isFirstRender) {\n FacetSearchTimeFrameActions.setDateRange(\n formatDate(start),\n formatDate(end)\n );\n }\n }, [dropdownOpen]);\n\n return (\n setDropdownOpen(true)}\n onDropdownClose={() => setDropdownOpen(false)}\n closeOnTriggerClick={false}\n flipAxisIfOverflows={true}\n usePortal\n >\n \n \n \n\n
    \n \n
    \n \n );\n}\n","import React from \"react\";\nimport createReactClass from \"create-react-class\";\nimport Reflux from \"reflux\";\n\nimport moment from \"moment\";\n\nimport FacetSearchDateRangePicker from \"@reactComponents/facetSearch/timeSelector/FacetSearchDateRangePicker\";\nimport Heading from \"@reactComponents/lds/typography/Heading\";\nimport { parseDate } from \"@reactComponents/facetSearch/timeSelector/timeSelectorHelpers\";\nimport TimeSelectDropdown from \"@reactComponents/facetSearch/TimeSelectDropdown\";\n\nimport { createPathMatcher, getPageFromUrl, parseUrlSegments } from \"@javascript/helpers/urlUtilities\";\n\nconst HIDDEN_STYLES = {\n display: \"none\",\n};\n\nconst PAGE_PATTERNS = [\n {\n // avoid returning true for /feeds/ID/edit\n pattern: \"/feeds\",\n matcher: (url) => {\n const segments = parseUrlSegments(url);\n return (segments[0] === 'feeds' && segments.length === 2) || // /feeds/ID, /feeds/ID?params\n createPathMatcher(['feeds', '*', 'display_saved_feed'])(url); // /feeds/ID/display_saved_feed\n }\n },\n {\n pattern: \"/mapping\",\n matcher: createPathMatcher(['mapping'])\n },\n {\n pattern: \"/facet_search\",\n matcher: createPathMatcher(['facet_search'])\n },\n {\n pattern: \"/events\",\n matcher: createPathMatcher(['company', '*', 'events'])\n },\n {\n pattern: \"/sales_assistant\",\n matcher: (url) => {\n const terms = [\n \"trials\",\n \"therapies\",\n \"conditions\",\n \"medical_technologies\",\n \"pharma_ingredients\"\n ];\n const segments = parseUrlSegments(url);\n return (\n segments.length === 4 &&\n segments[0] === \"sales_assistant\" &&\n terms.includes(segments[1]) &&\n segments[3] === \"feed\"\n );\n }\n }\n];\n\nconst FacetSearchTimeSelector = createReactClass({\n mixins: [\n Reflux.connectFilter(FacetSearchStore, function (data) {\n return {\n timeFrame: data.timeFrame,\n };\n }),\n ],\n getInitialState() {\n return {\n datePickerRef: React.createRef(),\n page: getPageFromUrl(PAGE_PATTERNS, \"edit_feed\"),\n showRangePicker: false,\n timeSelectRef: React.createRef(),\n };\n },\n componentDidUpdate(prevProps, prevState) {\n const nowSelected = this.state.timeFrame.selected;\n const prevSelected = prevState.timeFrame?.selected;\n\n // Only care when selected timeframe is custom\n if (nowSelected === \"time_custom\" && nowSelected !== prevSelected) {\n this.setState({ showRangePicker: true });\n }\n },\n closeRangePicker() {\n this.setState({ showRangePicker: false });\n this.state.timeSelectRef.current.open();\n },\n openRangePicker(open) {\n this.setState({ showRangePicker: true });\n open && this.state.datePickerRef.current.open();\n },\n render() {\n\n if (this.state.page === \"edit_feed\") return null;\n\n const { showRangePicker } = this.state;\n let fromDate = parseDate(this.state.timeFrame?.from);\n let toDate = parseDate(this.state.timeFrame?.to);\n\n if (!fromDate.isValid()) {\n fromDate = moment().subtract(10, \"years\");\n }\n\n if (!toDate.isValid()) {\n toDate = moment();\n }\n\n const renderRangePicker =\n showRangePicker && this.state.timeFrame.selected === \"time_custom\";\n\n // Render both, but hide one using CSS to avoid jitter issues\n return (\n <>\n \n {Zymewire.facet_search_filters.date_range}\n \n
    \n \n
    \n\n
    \n \n
    \n \n );\n },\n});\n\nexport default FacetSearchTimeSelector;\n\nwindow.FacetSearchTimeSelector = FacetSearchTimeSelector;\n","const QueryActivityCategory = (props) => {\n if (props.search.category) {\n return (

    Activity Type: {props.search.category}

    );\n }\n else {\n return false;\n }\n}\n\nexport default QueryActivityCategory;\n","const QueryAliasSearchRefs = (props) => {\n if (props.search.alias_search_hash) {\n const alias_search_names = Object.values(props.search.alias_search_hash)\n\n var aliasSearchNames = alias_search_names.map(function (aliasSearchName, index) {\n return (

    {aliasSearchName}

    );\n });\n return (
    {aliasSearchNames}
    );\n }\n return false;\n}\n\nexport default QueryAliasSearchRefs;\n","const QueryClinStage = (props) => {\n if (props.search.clin_stage) {\n var count = 0;\n var facets = props.search.clin_stage.map(function (stage, index) {\n var stage_string = count > 0 ? \"OR \" + stage : stage;\n count = 1;\n return (

    {stage_string}

    );\n });\n\n return (
    {facets}
    );\n }\n else {\n return false;\n }\n}\n\nexport default QueryClinStage;\n","const QueryClinStatus = (props) => {\n if (props.search.clin_status) {\n var count = 0;\n var facets = props.search.clin_status.map(function (status, index) {\n var stat_string = count > 0 ? \"OR \" + status : status;\n count = 1;\n return (

    {stat_string}

    );\n });\n return (
    {facets}
    );\n }\n else {\n return false;\n }\n}\n\nexport default QueryClinStatus;\n","const QueryFacets = (props) => {\n if (props.search.facets) {\n var facets = props.search.facets.map(function (facet, index) {\n return (

    {facet}

    );\n });\n return (
    {facets}
    );\n }\n else {\n return false;\n }\n}\n\nexport default QueryFacets;\n","const QueryGeoCoords = (props) => {\n if (props.search.geo_box) {\n return (\n
    \n

    Sponsor companies located within geographic boundary of:

    \n
      \n
    • North boundary: {props.search.geo_box.top_left_lat}
    • \n
    • East boundary: {props.search.geo_box.bottom_right_lon}
    • \n
    • South boundary: {props.search.geo_box.bottom_right_lat}
    • \n
    • West boundary: {props.search.geo_box.top_left_lon}
    • \n
    \n
    \n );\n }\n else {\n return false;\n }\n}\n\nexport default QueryGeoCoords;\n","const QueryList = (props) => {\n if (props.search.list) {\n return (

    Listed on '{props.search.list}'

    );\n }\n else {\n return false;\n }\n}\n\nexport default QueryList;\n","const QueryLocations = (props) => {\n if (props.search.locations) {\n var count = 0;\n var locations = props.search.locations.map(function (loc, index) {\n var loc_string = count > 0 ? \"OR \" + loc : loc;\n count = 1;\n return (

    {loc_string}

    );\n });\n return (

    Sponsor companies based in:

    {locations}
    );\n }\n else {\n return false;\n }\n}\n\nexport default QueryLocations;\n","const QueryOrgListRefs = (props) => {\n if (props.search.org_list_refs) {\n var org_list_refs = props.search.org_list_refs.map(function (org_list_ref, index) {\n return (

    {org_list_ref}

    );\n });\n return (
    {org_list_refs}
    );\n }\n return false;\n}\n\nexport default QueryOrgListRefs;\n","const QueryRelationships = (props) => {\n if (props.search.relationships) {\n var no_recent_activity;\n var rel;\n var style = { paddingLeft: '10px' };\n\n if (_.contains(props.search.relationships, \"exclude_recent_sponsor\")) {\n var and = props.search.relationships.length > 1 ? \", AND\" : \"\";\n no_recent_activity =

    Companies with no team activity in the last 6 months in Salesforce{and}

    ;\n }\n\n if (_.contains(props.search.relationships, \"crm\")) {\n rel =

    Companies you have in your Salesforce

    ;\n }\n // this needs to be reworked\n if (_.contains(props.search.relationships, \"exclude_muted_companies\")) {\n rel =

    Only your unmuted companies

    ;\n }\n return
    {no_recent_activity}{rel}
    ;\n }\n else {\n return false;\n }\n}\n\nexport default QueryRelationships;\n","const QuerySearchTerm = (props) => {\n if (props.search.query) {\n return (

    Search words: {props.search.query}

    );\n }\n else {\n return false;\n }\n}\n\nexport default QuerySearchTerm;\n","const QueryTimeRange = (props) => {\n if (props.search.time) {\n return (

    Time Range: {props.search.time}

    );\n }\n else {\n return false;\n }\n}\n\nexport default QueryTimeRange;\n","import QueryActivityCategory from \"./queryActivityCategory\";\nimport QueryAliasSearchRefs from \"./queryAliasSearchRefs\";\nimport QueryClinStage from \"./queryClinStage\";\nimport QueryClinStatus from \"./queryClinStatus\";\nimport QueryFacets from \"./queryFacets\";\nimport QueryGeoCoords from \"./queryGeoCoords\";\nimport QueryList from \"./queryList\";\nimport QueryLocations from \"./queryLocations\";\nimport QueryOrgListRefs from \"./queryOrgListRefs\";\nimport QueryRelationships from \"./queryRelationships\";\nimport QuerySearchTerm from \"./querySearchTerm\";\nimport QueryTimeRange from \"./queryTimeRange\";\n\nconst SearchDescriptionPanel = (props) => {\n return (\n
    \n
    \n \n \n \n \n \n \n \n \n \n \n \n \n
    \n
    \n );\n}\n\nwindow.SearchDescriptionPanel = SearchDescriptionPanel;\nexport default SearchDescriptionPanel;\n","import { createContext, useState } from \"react\";\n\nexport const FeedsIndexContext = createContext({\n getCheckboxArray: () => [],\n getButtonState: () => \"disable\",\n toggleCheckbox: () => {},\n toggleSelectAll: () => {},\n});\n\nexport const FeedsIndexProvider = ({ feeds, setFeeds, children }) => {\n const [checkboxes, setCheckboxes] = useState({\n feeds: [],\n lists: [],\n });\n\n const toggleCheckbox = (group, value) => {\n setCheckboxes((prevCheckboxes) => {\n const updatedCheckboxes = {\n ...prevCheckboxes,\n [group]: prevCheckboxes[group].includes(value)\n ? prevCheckboxes[group].filter((item) => item !== value)\n : [...prevCheckboxes[group], value],\n };\n return updatedCheckboxes;\n });\n };\n\n const toggleSelectAll = (allIds, group) => {\n const currentCheckboxArray = getCheckboxArray(group);\n\n if (currentCheckboxArray.length === allIds.length) {\n setCheckboxes((prevCheckboxes) => ({\n ...prevCheckboxes,\n [group]: [],\n }));\n } else {\n setCheckboxes((prevCheckboxes) => ({\n ...prevCheckboxes,\n [group]: allIds,\n }));\n }\n };\n\n const getCheckboxArray = (group) => checkboxes[group];\n\n const getSelectedNames = (checkboxArray) => {\n return checkboxArray.map(\n (checkboxId) =>\n feeds.find((feed) => feed.ids.savedFeed === checkboxId)?.name\n );\n };\n\n const removeFeedsFromView = (feedIds) => {\n setFeeds(feeds.filter((feed) => !feedIds.includes(feed.ids.savedFeed)));\n };\n\n return (\n \n {children}\n \n );\n};\n","import { useContext, useState } from \"react\";\nimport Button from \"../lds/Button\";\nimport ButtonGroup from \"../lds/ButtonGroup\";\nimport Banner from \"../lds/notifications/Banner\";\nimport BannerBody from \"../lds/notifications/BannerBody\";\nimport BannerHeading from \"../lds/notifications/BannerHeading\";\nimport ModalContext from \"../lds/modal/ModalContext\";\nimport { ModalBody, ModalFooter, ModalHeader } from \"../lds/modal/Modal\";\nimport { FeedsIndexContext } from \"@javascript/stores/FeedsIndex\";\nimport Icon from \"../lds/Icon\";\nimport Heading from \"../lds/typography/Heading\";\n\nfunction DeleteConfirmationModal({ children }) {\n return (\n <>\n \n This action is irreversible\n \n All the selected feeds will be permanently removed and you won't be\n able to retrieve them, including the ones you've shared with your\n colleagues.\n \n \n\n
      {children}
    \n \n );\n}\n\nfunction DeleteProgressModal({ feedsCount }) {\n return (\n <>\n \n\n \n Deleting {feedsCount} feed{feedsCount !== 1 ? \"s\" : \"\"}...\n \n\n \n Taking too long?\n \n

    \n You can close this window at any time and we will delete your feeds\n in the background for you. Access all your saved feeds by visiting{\" \"}\n Feeds.\n

    \n
    \n
    \n \n );\n}\n\nfunction DeleteResultModal({ feedsCount }) {\n return (\n <>\n \n\n \n Feed{feedsCount !== 1 ? \"s\" : \"\"} deleted successfully!\n \n \n );\n}\n\nconst DeleteFeedsModal = function ({ group, feedsSelected }) {\n const { onClose } = useContext(ModalContext);\n const { getSelectedNames, removeFeedsFromView, toggleSelectAll } =\n useContext(FeedsIndexContext);\n\n // One of \"confirmation\", \"deleting\", \"result\"\n const [userFlowStep, setUserFlowStep] = useState(\"confirmation\");\n const [feedsCount] = useState(feedsSelected.length);\n\n const deleteSelectedFeeds = () => {\n const data = { feeds_selected: feedsSelected };\n\n setUserFlowStep(\"deleting\");\n\n removeFeedsFromView(feedsSelected);\n\n $.ajax({\n url: \"/feeds/delete_feeds\",\n type: \"POST\",\n data: data,\n success: function () {\n setTimeout(() => {\n setUserFlowStep(\"result\");\n toggleSelectAll([], group, true);\n }, 3000);\n },\n });\n };\n\n const whichFeeds =\n feedsSelected.length > 1 ? `All ${feedsSelected.length} Feeds` : \"Feed\";\n\n const feedsList = getSelectedNames(feedsSelected).map((feedName) => {\n return
  • {feedName}
  • ;\n });\n\n return (\n <>\n \n\n \n {userFlowStep === \"confirmation\" && (\n {feedsList}\n )}\n\n {userFlowStep === \"deleting\" && (\n \n )}\n\n {userFlowStep === \"result\" && (\n \n )}\n \n\n \n \n \n {userFlowStep === \"confirmation\" ? \"Cancel\" : \"Close\"}\n \n\n {userFlowStep === \"confirmation\" && (\n \n Delete {whichFeeds}\n \n )}\n \n \n \n );\n};\n\nwindow.DeleteFeedsModal = DeleteFeedsModal;\nexport default DeleteFeedsModal;\n","import Button from \"../lds/Button\";\nimport PropTypes from \"prop-types\";\nimport { FeedsIndexContext } from \"../../stores/FeedsIndex\";\nimport { Modal } from \"../lds/modal/Modal\";\nimport { useContext, useState } from \"react\";\nimport DeleteFeedsModal from \"./DeleteFeedsModal\";\n\nconst FeedsIndexDeleteButton = ({ group }) => {\n const { getCheckboxArray } = useContext(FeedsIndexContext);\n\n const groupCheckboxArray = getCheckboxArray(group);\n const buttonVariant = groupCheckboxArray.length > 0 ? \"critical\" : \"disable\";\n\n const [modalOpen, setModalOpen] = useState(false);\n const modalClose = () => setModalOpen(false);\n\n const onDeleteClick = () => {\n setModalOpen(groupCheckboxArray.length > 0);\n };\n\n return (\n <>\n \n\n \n \n \n \n );\n};\n\nFeedsIndexDeleteButton.propTypes = {\n group: PropTypes.string.isRequired,\n};\n\nexport default FeedsIndexDeleteButton;\n","import React, { createContext, useContext } from \"react\";\nimport PropTypes from \"prop-types\";\n\nexport const SelectionControlGroupContext = createContext({\n onSelection: undefined,\n});\n\nfunction SelectionControlGroup({\n children,\n itemComponent,\n nested = false,\n items = [],\n onSelection,\n}) {\n const parentContext = useContext(SelectionControlGroupContext);\n\n onSelection ||= parentContext.onSelection;\n\n const classNames = `lds-selection-control-group ${\n nested ? \"lds-selection-control-group-nested\" : \"\"\n }`;\n\n return (\n \n
    \n {children ? children : <>}\n {!children &&\n items.map((item) => React.createElement(itemComponent, { key: item.value, ...item }))}\n
    \n
    \n );\n}\n\nexport const SelectionControlGroupPropTypes = {\n onSelection: PropTypes.func,\n};\n\nSelectionControlGroup.propTypes = SelectionControlGroupPropTypes;\nexport default SelectionControlGroup;\n","import React, { useContext } from \"react\";\nimport PropTypes from \"prop-types\";\nimport Icon from \"../Icon\";\nimport { SelectionControlGroupContext } from \"./SelectionControlGroup\";\n\n// TODO: read \"onClick\" from context if exists\n\nfunction SelectionControl({\n className,\n id,\n icon,\n label,\n onClick,\n value,\n variant = \"active\", // TODO: change\n styleOverride = {},\n role,\n}) {\n const parentContext = useContext(SelectionControlGroupContext);\n\n onClick ||= parentContext.onSelection;\n\n const clicked = (value) => {\n if (variant !== \"disable\") {\n onClick(value);\n }\n };\n\n const classNames = [\"lds-selection-control\", `lds-selection-control-${variant}`];\n\n if(className) {\n classNames.push(className);\n }\n\n return (\n {\n clicked(value);\n }}\n role={role}\n style={styleOverride.container}\n >\n \n \n \n {label ? (\n {label}\n ) : (\n <>\n )}\n \n );\n}\n\nexport const SelectionControlPropTypes = {\n className: PropTypes.string,\n id: PropTypes.string,\n icon: PropTypes.string,\n label: PropTypes.string,\n onClick: PropTypes.func,\n value: PropTypes.string,\n variant: PropTypes.oneOf([\"active\", \"disable\"]),\n role: PropTypes.string,\n styleOverride: PropTypes.exact({\n container: PropTypes.object,\n label: PropTypes.object,\n }),\n};\n\nSelectionControl.propTypes = SelectionControlPropTypes;\nexport default SelectionControl;\n","import React from \"react\";\nimport PropTypes from \"prop-types\";\nimport SelectionControl from \"../selection_controls/SelectionControl\";\nimport SelectionControlGroup from \"./SelectionControlGroup\";\n\nconst CHECKBOX_STATES = Object.freeze({\n unselected: \"unselected\",\n selected: \"selected\",\n indeterminate: \"indeterminate\",\n});\n\nconst CHECKBOX_ICONS = Object.freeze({\n unselected: \"checkbox\",\n selected: \"checkbox-filled\",\n indeterminate: \"checkbox-indeterminate-filled\",\n});\n\nfunction CheckboxItem({\n className = \"\",\n id,\n label,\n nestedItems,\n onClick,\n selection = CHECKBOX_STATES.unselected,\n value,\n variant = \"active\", // TODO: replace\n\n ENABLE_LEGACY_CHECKBOX_SUPPORT = false,\n LEGACY_CHECKBOX_ID = \"\",\n styleOverride = {},\n}) {\n const commonProps = { className, id, onClick, label, value, variant };\n\n const checkbox = (\n <>\n \n {/*\n In order to support legacy HTML/jQuery use-cases,\n we keep a hidden checkbox synced with whatever the\n user selects.\n */}\n {ENABLE_LEGACY_CHECKBOX_SUPPORT ? (\n \n ) : (\n <>\n )}\n \n );\n\n return (\n <>\n {checkbox}\n {nestedItems ? (\n \n ) : (\n <>\n )}\n \n );\n}\n\nexport const CheckboxItemPropTypes = {\n className: PropTypes.string,\n id: PropTypes.string,\n label: PropTypes.string,\n nestedItems: PropTypes.array,\n onClick: PropTypes.func,\n selection: PropTypes.oneOf([\"selected\", \"unselected\", \"indeterminate\"]),\n value: PropTypes.string,\n variant: PropTypes.oneOf([\"active\", \"disable\"]),\n styleOverride: PropTypes.object,\n};\n\nCheckboxItem.propTypes = CheckboxItemPropTypes;\nexport default CheckboxItem;\nexport { CHECKBOX_STATES };\n","import { useContext } from \"react\";\nimport PropTypes from \"prop-types\";\n\nimport CheckboxItem, { CHECKBOX_STATES } from \"../lds/selection_controls/CheckboxItem\";\nimport { FeedsIndexContext } from \"../../stores/FeedsIndex\";\n\nconst FeedsIndexSelectAll = ({\n allIds,\n group,\n}) => {\n const { getCheckboxArray, toggleSelectAll } = useContext(FeedsIndexContext);\n\n const groupCheckboxArray = getCheckboxArray(group);\n const selectAllChecked = groupCheckboxArray.length === allIds.length ? CHECKBOX_STATES.selected : CHECKBOX_STATES.unselected;\n\n const onClickCheckbox = () => {\n toggleSelectAll(allIds, group);\n };\n\n return (\n \n );\n};\n\nFeedsIndexSelectAll.propTypes = {\n allIds: PropTypes.array.isRequired,\n group: PropTypes.string.isRequired,\n};\n\nexport default FeedsIndexSelectAll;\n","import React from \"react\";\nimport PropTypes from \"prop-types\";\n\nconst FeedsIndexTableHeader = ({\n className = \"\",\n field,\n label,\n onSortClick,\n sortData,\n}) => {\n\n const classNames = [\n \"tablesorter-header\",\n sortData.field === field ? `tablesorter-header${sortData.asc ? 'Asc' : 'Desc'}` : \"tablesorter-headerUnsorted\",\n ];\n\n if(className) {\n classNames.push(className);\n }\n\n return (\n <>\n onSortClick(field)} className={classNames.join(\" \")}>{label}\n \n );\n};\n\nFeedsIndexTableHeader.propTypes = {\n className: PropTypes.string,\n field: PropTypes.string.isRequired,\n label: PropTypes.string.isRequired,\n onSortClick: PropTypes.func.isRequired,\n sortData: PropTypes.object.isRequired,\n};\n\nexport default FeedsIndexTableHeader;\n","import { useState } from \"react\";\nimport Dropdown, { DropdownTrigger } from \"../lds/dropdown/Dropdown\";\nimport DropdownList from \"../lds/dropdown/DropdownList\";\nimport Input from \"../lds/Input\";\n\nconst EventCheckEmailSettings = ({\n currentSetting,\n id\n}) => {\n\n let settings = [\n {\n label: \"OFF\",\n leadingIcon: \"off\",\n selected: false,\n value: \"Off\",\n },\n {\n label: \"ON: Daily\",\n leadingIcon: \"email\",\n selected: false,\n value: \"daily\",\n },\n {\n label: \"ON: Weekly\",\n leadingIcon: \"email\",\n selected: false,\n value: \"weekly\",\n },\n ];\n\n const currentItems = settings.map((setting) => ({\n ...setting,\n selected: setting.value === currentSetting,\n }));\n\n const initialSetting = currentItems.find(\n (setting) => setting.value === currentSetting\n );\n\n const [selected, setSelected] = useState(\n initialSetting ? initialSetting : currentItems[0]\n );\n const [items, setItems] = useState(currentItems);\n const [open, setOpen] = useState(false);\n\n const setEventCheckEmailSetting = (item) => {\n setOpen(false)\n\n if (item.value !== selected.value) {\n const updatedSettings = items.map((setting) => ({\n ...setting,\n selected: setting.value === item.value,\n }));\n\n const matchingSetting = currentItems.find(\n (currentItem) => currentItem.value === item.value\n );\n\n setSelected(matchingSetting);\n setItems(updatedSettings);\n\n const url = \"/feeds/\" + id + \"/change_email_notification\";\n\n $.ajax({\n url: url,\n type: \"POST\",\n data: {\n notification_settings: item.value.toLowerCase(), // this is a tricky one -- this initial comes in as \"Off\" and needs to be sent back as \"off\" or it doesn't work.\n },\n error: function (xhr, ajaxOptions, thrownError) {\n if (xhr.status === 401) {\n alert(\"Un-authorized status received\");\n window.location = \"/users/sign_in\";\n } else {\n console.log(thrownError);\n }\n },\n });\n }\n };\n\n const triggerStyles = {\n marginBottom: \"10px\",\n maxWidth: \"170px\",\n };\n\n const leadingIcon = selected.leadingIcon + \"-filled\";\n\n return (\n setEventCheckEmailSetting(item)}\n onDropdownClose={() => setOpen(false)}\n >\n \n
    setOpen(true)}>\n {}}\n size=\"small\"\n width=\"100%\"\n trailingIcon={\"chevron-\" + (open ? \"up\" : \"down\")}\n />\n
    \n
    \n \n \n );\n};\n\nexport default EventCheckEmailSettings;\n","import React from \"react\";\nimport Chip from \"../../lds/chips/Chip\";\n\nexport default function NewEventChip({\n label,\n leadingIcon,\n size = \"medium\",\n href,\n}) {\n return (\n \n );\n}\n\nNewEventChip.propTypes = {\n label: Chip.propTypes.label,\n size: Chip.propTypes.size,\n leadingIcon: Chip.propTypes.leadingIcon,\n href: Chip.propTypes.href,\n};\n","import React, { useContext, useState } from \"react\";\nimport PropTypes from \"prop-types\";\n\nimport { FeedsIndexContext } from \"../../stores/FeedsIndex\";\n\nimport CheckboxItem, { CHECKBOX_STATES } from \"../lds/selection_controls/CheckboxItem\";\nimport Icon from \"../lds/Icon\";\n\nimport { updateUserHomeSettings } from \"../../helpers/feedManagement\";\n\nimport EventCheckEmailSettings from \"../events/EventCheckEmailSettings\";\nimport NewEventChip from \"../shared/chips/NewEventChip\";\n\nconst FeedsIndexTableRow = ({\n feed,\n group,\n}) => {\n\n const [data, setData] = useState(feed);\n const { getCheckboxArray, toggleCheckbox } = useContext(FeedsIndexContext);\n\n const groupCheckboxArray = getCheckboxArray(group);\n const deleteChecked = _.include(groupCheckboxArray, feed.ids.savedFeed) ? CHECKBOX_STATES.selected : CHECKBOX_STATES.unselected;\n\n const onShowOnUserHomeSelected = (value) => {\n updateUserHomeSettings(value);\n setData({ ...data, displayOnUserHome: !data.displayOnUserHome });\n };\n\n const updateDeleteFeedCheckbox = (value) => {\n toggleCheckbox(group, value);\n };\n\n const classNames = `rspec-feeds-index-${group}-row ${\n deleteChecked === CHECKBOX_STATES.selected ? \"delete_this_entry\" : \"\"\n }`;\n\n const canUseNewCompaniesOnFeed = _.contains(Zymewire.user.feature_tags, \"new_companies_on_feed\")\n\n const newCompaniesOnFeed = (canUseNewCompaniesOnFeed && feed.newCompanies) ? \"*\" : \"\";\n\n const newEvents = feed.newEventCount > 0 ? : \"-\";\n\n const lastChecked = moment.parseZone(feed.lastChecked).format('MMM DD YYYY');\n // const lastChecked = moment(feed.lastChecked).format(\"MMM D YYYY\");\n\n return (\n \n {feed.name} {newCompaniesOnFeed}\n \n {newEvents}\n {feed.eventsThisMonth}\n {lastChecked}\n \n
    \n \n \n
    \n \n \n
    \n \n
    \n \n \n \n \n \n );\n};\n\nFeedsIndexTableRow.propTypes = {\n feed: PropTypes.object.isRequired,\n group: PropTypes.string.isRequired,\n};\n\nexport default FeedsIndexTableRow;\n","export const updateUserHomeSettings = (id) => {\n const url = `/feeds/${id}/change_home_feed_display`;\n $.ajax({\n url: url,\n type: 'POST',\n success: function () {\n return true;\n },\n error: function (xhr, ajaxOptions, thrownError) {\n if (xhr.status == 401) {\n alert(\"Un-authorized status received\")\n window.location = \"/users/sign_in\"\n }\n else {\n console.log(thrownError)\n }\n return false;\n }\n });\n};\n\n","import React, { useState } from \"react\";\nimport PropTypes from \"prop-types\";\n\nimport { FeedsIndexProvider } from \"../../stores/FeedsIndex\";\n\nimport Icon from \"../lds/Icon\";\n\nimport FeedsIndexDeleteButton from \"./FeedsIndexDeleteButton\";\nimport FeedsIndexSelectAll from \"./FeedsIndexSelectAll\";\nimport FeedsIndexTableHeader from \"./FeedsIndexTableHeader\";\nimport FeedsIndexTableRow from \"./FeedsIndexTableRow\";\n\nconst FeedsIndexTable = ({\n feeds,\n group,\n tableData,\n}) => {\n\n const [initialFeeds, setInitialFeeds] = useState([...feeds]);\n\n const [sortData, setSortData] = useState({ field: \"name\", asc: true });\n\n const changeSort = (field) => {\n let ascending = true;\n if (sortData.field === field && sortData.asc === true) {\n ascending = false;\n }\n setSortData({ field: field, asc: ascending });\n }\n\n const normalizeValue = (value) => {\n if (typeof value === \"number\") {\n return value;\n }\n if (typeof value === \"string\") {\n const date = new Date(value);\n if (!isNaN(date.getTime())) {\n return date;\n }\n return value.toLowerCase();\n }\n if (value instanceof Date) {\n return value;\n }\n return value;\n };\n\n const sortedFeeds = [...initialFeeds].sort((a, b) => {\n const valueA = normalizeValue(a[sortData.field]);\n const valueB = normalizeValue(b[sortData.field]);\n\n if (valueA < valueB) {\n return sortData.asc === true ? -1 : 1;\n }\n if (valueA > valueB) {\n return sortData.asc === true ? 1 : -1;\n }\n return 0;\n });\n\n const allIds = [];\n\n const feedsIndexTableBody = sortedFeeds.map((feed) => {\n allIds.push(feed.ids.savedFeed);\n return (\n \n );\n });\n\n const tableHeaderData = [\n { className: \"\", field: \"name\", label: tableData[\"label\"] },\n { className: \"w-80\", field: \"newEventCount\", label: \"New Events\" },\n { className: \"w-80\", field: \"eventsThisMonth\", label: \"Last month\" },\n { className: \"w-100\", field: \"lastChecked\", label: \"Last Checked\" },\n ];\n\n const tableHeaders = tableHeaderData.map(({ className, field, label }, index) => {\n return (\n \n );\n });\n\n const deleteButton = ;\n const selectAllCheckbox = ;\n const tableId = `feeds-index-${group}-table`;\n\n return (\n \n
    \n

    {tableData[\"header\"]}

    \n
    \n \n \n \n {tableHeaders}\n \n \n \n \n \n \n {feedsIndexTableBody}\n \n
    \n Show on \n \n Check on my behalf \n \n {deleteButton}\n
    \n
    \n select all\n {selectAllCheckbox}\n
    \n
    \n
    \n );\n}\n\nFeedsIndexTable.propTypes = {\n feeds: PropTypes.array.isRequired,\n group: PropTypes.string.isRequired,\n tableData: PropTypes.object.isRequired,\n};\n\nexport default FeedsIndexTable;\nwindow.FeedsIndexTable = FeedsIndexTable;\n","const FlagThisEvent = (props) => \n
    \n
    \n
    \n
    \n
    \n
    {props.event_date}
    \n
    \n
    \n
    \n
    \n
    {props.title}
    \n
    \n
    \n
    \n
    \n
    \n\nexport default FlagThisEvent;\n","import Input from \"../lds/Input\";\n\nconst FlagEventComment = (props) => {\n const change = function (value) {\n props.updateComment(value);\n }\n\n var styl = { width: '100%' };\n return (\n
    \n Comment\n\n \n
    \n );\n}\n\nexport default FlagEventComment;\n","import React, { useState, useEffect, useMemo, useRef } from \"react\";\nimport PropTypes from \"prop-types\";\nimport moment from \"moment\";\n\nimport DatePicker from \"@javascript/reactComponents/lds/datepicker/DatePicker\";\nimport Dropdown, {\n DropdownTrigger,\n} from \"@javascript/reactComponents/lds/dropdown/Dropdown\";\n\nconst FlagEventDatePicker = ({\n className = \"\",\n id = \"flag_event_reminder\",\n direction,\n flaggedDate,\n isInThePast,\n onDateSelect = () => {},\n}) => {\n const [date, setDate] = useState(flaggedDate);\n const [isDatePickerVisible, setIsDatePickerVisible] = useState(false);\n const [pickerPlacement, setPickerPlacement] = useState(\"bottom\");\n\n const componentRef = useRef(null);\n\n const formattedDate = moment(date).format(\"MMMM DD, YYYY\");\n\n const getOptimalPlacement = () => {\n const { current } = componentRef;\n if (!current) return \"bottom\";\n\n const rect = current.getBoundingClientRect();\n const { innerWidth: viewportWidth, innerHeight: viewportHeight } = window;\n\n const DATEPICKER_WIDTH = 330;\n const DATEPICKER_HEIGHT = 430;\n\n const spaceBottom = viewportHeight - rect.bottom;\n const spaceLeft = rect.left;\n const spaceTop = rect.top;\n const spaceRight = viewportWidth - rect.right;\n\n // Check placement options in order of preference\n if (spaceBottom >= DATEPICKER_HEIGHT) return \"bottom\";\n if (spaceLeft >= DATEPICKER_WIDTH) return \"left\";\n if (spaceTop >= DATEPICKER_HEIGHT) return \"top\";\n if (spaceRight >= DATEPICKER_WIDTH) return \"right\";\n\n // If no space is available, default to bottom\n return \"bottom\";\n };\n\n const checkViewport = () => {\n let placement = getOptimalPlacement();\n\n // added for Storybook display\n if(direction) {\n placement = direction;\n }\n setPickerPlacement(placement);\n };\n\n useEffect(() => {\n checkViewport();\n window.addEventListener(\"resize\", checkViewport);\n return () => {\n window.removeEventListener(\"resize\", checkViewport);\n };\n }, [isDatePickerVisible]);\n\n useEffect(() => {\n setDate(flaggedDate);\n }, [flaggedDate]);\n\n const toggleDatePicker = () => {\n setIsDatePickerVisible(!isDatePickerVisible);\n };\n\n const handleDateSelect = ([selectedDate]) => {\n setDate(selectedDate);\n setIsDatePickerVisible(false);\n onDateSelect(selectedDate);\n dropdownRef.current.close();\n };\n\n const renderContent = () => {\n if (!date) {\n return at a future date.;\n }\n\n if (isInThePast) {\n return Send another reminder.;\n } else {\n return {formattedDate};\n }\n };\n\n const prefixText = () => {\n if (!date) {\n return \"Send yourself a reminder via email\";\n }\n\n if (isInThePast) {\n return `A reminder was sent ${formattedDate}.`;\n } else {\n return \"An email reminder will be sent\";\n }\n };\n\n const tomorrow = useMemo(() => {\n const date = new Date();\n date.setHours(0, 0, 0, 0);\n return date;\n }, []);\n\n const dropdownRef = React.createRef();\n\n const classNames = [\"flag-event-date-picker\"];\n\n if (className) {\n classNames.push(className);\n }\n\n return (\n
    \n {prefixText()}\n \n  {renderContent()}\n \n \n
    \n );\n};\n\nFlagEventDatePicker.propTypes = {\n className: PropTypes.string,\n id: PropTypes.string,\n direction: PropTypes.string,\n flaggedDate: PropTypes.oneOfType([\n PropTypes.instanceOf(Date),\n PropTypes.oneOf([null, undefined])\n ]),\n isInThePast: PropTypes.bool,\n onDateSelect: PropTypes.func,\n};\n\nexport default FlagEventDatePicker;\n","import createReactClass from \"create-react-class\";\nimport FlagEventDatePicker from \"@javascript/reactComponents/lds/datepicker/FlagEventDatePicker\";\nimport moment from \"moment\";\n\nconst FlagEventReminder = createReactClass({\n getInitialState: function () {\n const reminderAlreadySet = !!this.props.flagged_event_reminder\n\n return {\n reminder: reminderAlreadySet,\n dateSelected: reminderAlreadySet ? new Date(this.props.flagged_event_reminder) : null,\n };\n },\n handleDateSelect: function(dateSelected) {\n this.setState({ dateSelected, reminder: true });\n this.props.updateDate(moment(dateSelected).toDate())\n },\n cancel_reminder: function () {\n this.setState({ reminder: false, dateSelected: null });\n this.props.updateDate([]);\n },\n render: function () {\n var class_name = '';\n if (this.state.reminder) {\n class_name = ' show_cancel_flagged_event_reminder';\n }\n\n let isInThePast = false;\n const originalChosenDate = moment(this.props.flagged_event_reminder)\n\n if (originalChosenDate.isValid()) {\n isInThePast = originalChosenDate.isBefore(moment(), \"day\")\n }\n\n return (\n
    \n Reminder\n
    \n \n \n
    \n\n {/* Lets the \"Reminder\" lagend be readable */}\n
    \n
    \n );\n }\n});\n\nexport default FlagEventReminder;\n","import FlagThisEvent from \"./flagThisEvent\";\nimport FlagEventComment from \"./flagEventComment\";\nimport FlagEventReminder from \"./flagEventReminder\";\n\nconst FlagEventModalBody = (props) => (\n
    \n \n \n \n \n \n \n);\n\nexport default FlagEventModalBody;\n","import createReactClass from \"create-react-class\";\n\nimport FlagEventModalBody from \"@javascript/reactComponents/flagged_events/flagEventModalBody\";\nimport LegacyModalService from \"@javascript/globals/LegacyModalService\";\nimport { markFlagEventButtonAsFlagged } from \"@javascript/reactComponents/utilities/flagEventUtilities\";\nimport {\n Modal,\n ModalBody,\n ModalFooter,\n ModalHeader,\n} from \"@javascript/reactComponents/lds/modal/Modal\";\n\nconst FlagEventModal = createReactClass({\n getInitialState: function () {\n return { userList: this.props.users, comment: \"\", ruby_date: this.props.flagged_event_reminder };\n },\n UNSAFE_componentWillMount: function () {\n if (this.props.flag_for === 'others') {\n this.toggleUser(this.props.current_user);\n }\n },\n submit_form: function (e) {\n e.stopPropagation();\n e.preventDefault();\n $(\"body\").addClass(\"wait\");\n var url = \"/flagged_events/\" + this.props.event.id + \"/flag_for\";\n if (this.props.flag_for === 'others') {\n url = \"/flagged_events/\" + this.props.flagged_event_id + \"/flag_for_others\";\n }\n var data = {\n comment: this.state.comment,\n flagged_users: _.map(_.filter(this.state.userList, function (user) { return user.checked; }), function (u) { return u.id; })\n };\n if (this.state.ruby_date) {\n data.flagged_event_reminder = this.state.ruby_date;\n }\n $.ajax({\n url: url,\n type: 'POST',\n headers: {\n 'X-CSRF-Token': this.props.authenticity_token\n },\n data: data,\n success: function (result) {\n if (this.props.flag_for === 'others') {\n if (result.success === true) {\n display_comment_panel(this.props.flagged_event_id, result.confirmation_display);\n update_status_panel(this.props.flagged_event_id, 'update');\n LegacyModalService.closeModal();\n }\n else {\n $(\"body\").removeClass(\"wait\");\n LegacyModalService.closeModal();\n }\n }\n else {\n $(\"body\").removeClass(\"wait\");\n if (result.confirmation_display === null) {\n LegacyModalService.closeModal();\n }\n else {\n LegacyModalService.openModal(LDSFlagEventModalSuccess, { notifiedUsers: result.notified_users || [] })\n if (result.flagged_for_user) {\n const selector = '#flagged_' + this.props.event.id;\n markFlagEventButtonAsFlagged(selector);\n\n if (typeof events !== 'undefined') {\n var event = _.find(events, function (event) {\n return event.id == id;\n });\n event.flagged = true;\n }\n }\n }\n }\n }.bind(this)\n });\n return false;\n },\n toggleUser: function (user_id) {\n var user = _.find(this.state.userList, function (user) { return user.id == user_id; });\n if (user.currently_flagged == false) {\n user.checked = !user.checked;\n this.setState({ userList: this.state.userList });\n }\n },\n updateComment: function (comment) {\n this.setState({ comment: comment });\n },\n updateDate: function (date) {\n if (date instanceof Array) {\n if (date.length < 1) {\n this.setState({ ruby_date: null });\n }\n else {\n this.setState({ ruby_date: moment.tz(date[0], \"America/New_York\").utc().format() });\n }\n }\n else if (date) {\n this.setState({ ruby_date: moment.tz(date, \"America/New_York\").utc().format() });\n }\n else {\n this.setState({ ruby_date: null });\n }\n },\n render: function () {\n let button_text = 'Flag Event';\n\n if (this.props.flagged_event_reminder || (this.state.userList[0].name === 'You' && this.state.userList[0].currently_flagged)) {\n button_text = 'Update Flagged Event';\n }\n\n return (\n \n Flag an event\n\n \n \n \n\n \n
    \n \n Cancel\n \n \n {button_text}\n \n
    \n
    \n \n );\n }\n});\n\nwindow.FlagEventModal = FlagEventModal;\nexport default FlagEventModal;\n","import $ from \"jquery\";\n\nexport function markFlagEventButtonAsFlagged(selector) {\n const flagEventButton = $(selector);\n flagEventButton\n .removeClass(\"flag-event-button\")\n .addClass(\"flagged-event-button\");\n\n // Lets Backbone event_modal.jst.ejs template know that it's been flagged.\n // We should not be using data-* attributes in 2024 to pass around data...\n // strong refactor candidate for a store.\n flagEventButton.closest(\".event_wrapper\").data(\"flagged\", true);\n\n flagEventButton.html(` Flagged Event`);\n}\n","import PropTypes from \"prop-types\";\n\nimport Button from \"@javascript/reactComponents/lds/Button\";\nimport ButtonGroup from \"@javascript/reactComponents/lds/ButtonGroup\";\n\nimport GenericErrorModal from \"@javascript/reactComponents/generic/modals/GenericErrorModal\";\nimport Heading from \"@javascript/reactComponents/lds/typography/Heading\";\nimport Icon from \"@javascript/reactComponents/lds/Icon\";\n\nimport LegacyModalService from \"@javascript/globals/LegacyModalService\";\n\nimport {\n Modal,\n ModalBody,\n ModalFooter,\n ModalHeader,\n} from \"@javascript/reactComponents/lds/modal/Modal\";\nimport NavItem from \"@reactComponents/lds/NavItem\";\n\nconst CopyToNewListSuccess = ({\n errorData = null,\n fromListName = \"\",\n listEntries = 0,\n toListId = \"\",\n toListName = \"\",\n typeRef = \"\"\n}) => {\n if(errorData) {\n return (\n \n );\n }\n else {\n const goToList = () => {\n location.assign(`/lists/${toListId}`);\n };\n const iconStyle = {\n alignSelf: \"center\",\n };\n return(\n \n \n Copy to a new list\n \n \n \n \n List generated successfully!\n \n

    Successfully copied the {listEntries} {typeRef} on the list \"{fromListName}\" to \"{toListName}\".

    \n

    \n You can also access all your lists on  \n \n Lists\n \n   page.\n

    \n \n \n \n \n Close\n \n \n \n \n \n );\n }\n}\n\nCopyToNewListSuccess.propTypes = {\n errorData: PropTypes.oneOf([\n null,\n PropTypes.shape({\n title: PropTypes.string,\n message: PropTypes.string,\n }\n )\n ]),\n fromListName: PropTypes.string,\n listEntries: PropTypes.number,\n toListId: PropTypes.string,\n toListName: PropTypes.string,\n typeRef: PropTypes.string,\n};\n\nwindow.CopyToNewListSuccess = CopyToNewListSuccess;\nexport default CopyToNewListSuccess;\n","const DownloadPrimoCampaignButton = function (props) {\n let className = 'button-secondary';\n if (props.choice === props.type) {\n className = 'button-primary selected';\n }\n const classNames = [className, \"primo_list_type_\" + props.type, \"button-small\"];\n\n return (\n \n );\n};\n\nexport default DownloadPrimoCampaignButton\n","const NameThisListCard = (props) => \n
    \n
    \n
    {props.name}
    \n
    \n
    \n\nexport default NameThisListCard;","import Button from \"@javascript/reactComponents/lds/Button\";\nimport ButtonGroup from \"@javascript/reactComponents/lds/ButtonGroup\";\nimport DownloadPrimoCampaignButton from \"@javascript/reactComponents/lists/downloadPrimoPlModal/downloadPrimoCampaignButton\";\n\nimport GenericErrorModal from \"@javascript/reactComponents/generic/modals/GenericErrorModal\";\nimport Heading from \"@javascript/reactComponents/lds/typography/Heading\";\n\nimport Icon from \"@javascript/reactComponents/lds/Icon\";\nimport LegacyModalService from \"@javascript/globals/LegacyModalService\";\n\nimport {\n ModalBody,\n ModalFooter,\n} from \"@javascript/reactComponents/lds/modal/Modal\";\n\nimport NameThisListCard from \"@javascript/reactComponents/lists/nameThisListCard\";\n\nconst DownloadPrimoPlChoice = ({\n choice,\n list,\n updateChoice,\n}) => {\n\n /**\n * https://www.pivotaltracker.com/story/show/186622915\n * The keyword \"ref\" has a special meaning in React,\n * it should not be used.\n */\n const thisList = { ...list };\n thisList.list_ref = list.ref;\n thisList.ref = null;\n\n const campaign_types = {\n accounts: 'Accounts',\n contacts: 'Contacts Only',\n leads: 'Leads Only',\n contacts_and_leads: 'Contacts and Leads',\n };\n\n const campaign_buttons = Object.keys(campaign_types).map((entry, index) => (\n \n ));\n\n return (\n \n \n

    \n {I18n.t(\"brand.name\")} can help you build faster and more targeted marketing campaigns\n by automating the retrieval of leads, contacts, or accounts from Salesforce and combining\n them with company data from your PivotLists.\n

    \n

    \n You can also use this feature to push PivotList information across Salesforce so your\n custom fields stay up to date. The campaign Excel file will display the\n {I18n.t(\"brand.name\")} Organization ID and data columns from this PivotList alongside\n information and identifiers from Salesforce.\n

    \n

    Choose which Salesforce identifiers you wish to retrieve for this campaign:

    \n
      \n
    • Selecting 'Accounts' will return matching SF Account IDs and the Account Name.
    • \n
    • \n Selecting 'Contacts' will return the first name, last name, title, email, and date of\n last activity for Contacts whose company matches a company on your PivotList.\n
    • \n
    • \n Selecting 'Leads' will return the first name, last name, title, email, and date of last\n activity for existing leads whose company matches a company on your PivotList.\n
    • \n
    \n

    \n You will receive a link to a secure download when the file is ready. Note that assembling\n the file may take up to 1 hour depending on the length of your list.\n

    \n
    \n {campaign_buttons}\n
    \n
    \n );\n};\n\nconst DownloadPrimoPlModal = createReactClass({\n getInitialState: function(){\n return this.initial_state();\n },\n initial_state: function() {\n return ({\n checked: false,\n choice: null,\n downloadStarted: false,\n downloadSuccess: null,\n });\n },\n update_choice: function(choice){\n this.setState({ choice, checked: true });\n return false;\n },\n onCancel: function(){\n this.setState(this.initial_state());\n return false;\n },\n submit_form: function(e){\n e.stopPropagation();\n e.preventDefault();\n $(\"body\").addClass(\"wait\");\n\n $.ajax({\n url: `/lists/${this.props.list._id}/email_user_list_download?list_type=${this.state.choice}`,\n type: 'GET',\n headers: {\n 'X-CSRF-Token': this.props.authenticity_token\n },\n success: function (result) {\n Zymewire.mixpanel_track('build campaign', {type: this.state.choice});\n $(\"body\").removeClass(\"wait\");\n this.setState({\n downloadStarted: true,\n downloadSuccess: result.success,\n });\n }.bind(this),\n });\n\n return false;\n },\n render: function(){\n\n if (this.state.downloadSuccess === false) {\n return (\n \n );\n }\n\n const variant = this.state.checked ? \"primary\" : \"disable\";\n\n const modalBody = this.state.downloadStarted ? (\n \n \n Campaign Building Initiated\n

    \n The matching process has been initiated and your campaign file is being\n assembled.\n

    \n

    \n You will be emailed a link to a secure download when the process is complete.\n Note that assembling the file may take up to 1 hour depending on the length\n of your list.\n

    \n
    \n ) : (\n \n );\n\n const modalFooter = this.state.downloadStarted ? (\n \n Close\n \n ) : (\n \n \n Cancel\n \n \n Send Link\n \n \n );\n\n return (\n <>\n {modalBody}\n {modalFooter}\n \n );\n },\n});\n\nwindow.DownloadPrimoPlModal = DownloadPrimoPlModal;\nexport default DownloadPrimoPlModal;\n","const ModifyListButton = createReactClass({\n mixins: [Reflux.listenTo(ColumnControlsStore,\"change_control_state\"), Reflux.listenTo(FilteringActionsStore,\"change_filter_state\")],\n getInitialState: function(){\n return {\n button_type: this.props.list_view === 'list' ? 'enabled' : 'disabled'\n }\n },\n change_control_state: function(controls_open) {\n this.setState({\n button_type: controls_open === 'checked' ? 'disabled' : 'enabled'\n });\n },\n change_filter_state: function(filter_state) {\n this.setState({\n button_type: filter_state.open || this.props.list_view !== 'list' ? 'disabled' : 'enabled'\n });\n },\n toggle_controls: function (e){\n e.stopPropagation();\n if(!this.props.is_editable) { return; }\n\n Zymewire.mixpanel_track(\n \"Lists: modify columns\",\n {\n list_id: this.props.list_object.list_id,\n type_ref: this.props.list_object.type_ref,\n }\n );\n\n if(this.state.button_type !== 'disabled'){\n ColumnControlsActions.toggleColumnControls('checked')\n }\n },\n render: function () {\n const class_names = [\"button-small\"];\n\n if(this.state.button_type !== 'enabled' || !this.props.is_editable){\n class_names.push(\"button-disable\");\n }\n else{\n class_names.push(\"button-primary\");\n }\n\n return (\n
    \n \n
    \n );\n }\n});\n\nexport default ModifyListButton;\n","const FilterColumn = createReactClass({\n mixins: [Reflux.listenTo(FilteringActionsStore, 'change_state')],\n getInitialState(){\n return {column_selected: FilteringActionsStore.state.column_selected, column_filter: FilteringActionsStore.state.column_filters[this.props.index]};\n },\n select_column(e) {\n e.stopPropagation();\n FilteringActions.changeSelectedColumn(this.props.index);\n },\n change_state(new_state) {\n this.setState(state => (\n {...state, column_selected:new_state.column_selected}\n ));\n },\n render(){\n\n const class_names = ['column_overflow_protection'];\n const holder_class_names = ['filter_column_div'];\n if(this.state.column_selected === this.props.index){\n holder_class_names.push('filter_column_selected');\n }\n\n const column_class_names = ['filter_column_entry'];\n if(this.props.column_state.type === false){\n class_names.push('no_choice_link');\n column_class_names.push('filter_column_disabled');\n }\n else{\n class_names.push('action_link');\n }\n if(this.state.column_filter.filter.length > 0){\n column_class_names.push('filter_column_filtered');\n }\n\n return (\n \n );\n }\n});\n\n// TODO refactor this and FilterOptions into parent as there is no state/interaction at this container level\nconst FilterColumns = function(props) {\n const content = _.map(props.column_filter_options, function(column_state, index){\n if(index !== 0){ // skip filtering on companies for now\n return (\n \n );\n }\n });\n return (\n
    \n {content}\n
    \n );\n}\n\nexport default FilterColumns;\n","const FilterControlButton = function(props) {\n const class_names = props.button_data.class_names;\n return(\n \n )\n}\n\nexport default FilterControlButton;\n","const FilterOptions = function(props) {\n const content = _.map(props.column_filter_options, function(column_filter_option, index){\n if(index !== 0){ // skip filtering on companies for now\n return (\n \n );\n }\n });\n\n return (\n
    \n {content}\n
    \n );\n}\n\nconst FilterOption = createReactClass({\n mixins: [Reflux.listenTo(FilteringActionsStore, 'change_state')],\n getInitialState(){\n return {explanation: false, column_selected: FilteringActionsStore.state.column_selected, column_filter: FilteringActionsStore.state.column_filters[this.props.index]};\n },\n change_state(new_state) {\n this.setState(state => (\n {...state, column_selected:new_state.column_selected}\n ));\n },\n toggle_explanation(){\n this.setState(state => (\n {...state, explanation:!state.explanation}\n ));\n },\n render(){\n const class_names = ['column_filter_option'];\n if(this.state.column_selected === this.props.index){\n class_names.push('column_filter_option_selected');\n }\n\n\n let filter_option = '';\n const explanation_class_names = ['filter_options_explained'];\n const description_class_names = ['column_filter_description'];\n if(this.state.explanation){\n explanation_class_names.push('filter_options_close_explanation');\n description_class_names.push('column_filter_description_show');\n }\n if(this.props.column_filter_option.type === 'boolean'){\n filter_option = \n }\n else{\n filter_option = 'This column is not filterable.';\n }\n return (\n
    \n
    Filter Options
    \n {filter_option}\n
    {this.props.column_filter_option.description}
    \n
    \n );\n }\n});\n\nconst FilterBoolean = function(props) {\n const content = _.map(props.column_filter_option.options, function(option, index){\n let toggled = true;\n if (props.column_filter_option.current_filter.includes(option.value)){\n toggled = false;\n }\n return (\n \n );\n });\n\n return (\n
    \n {content}\n
    \n );\n}\n\nconst FilterToggle = createReactClass({\n getInitialState(){\n return {toggled: this.props.toggled, current_filter:FilteringActionsStore.state.column_filters[this.props.index]};\n },\n toggle_filter(e) {\n e.stopPropagation();\n FilteringActions.editFilter(this.props.index, this.props.filter_option.value, this.state.toggled); // previous toggle state, therefore if true (IE toggled and therefore included) we should add the value to the array (as this array will be used to search for entries *not* containing the value) and if false (IE not toggled and therefore excluded) we should remove the value from the array as we no longer wish to exclude the value from our search... capiche? JSON.stringify(obj1) === JSON.stringify(obj2)\n this.setState(state => (\n {...state, toggled:!state.toggled}\n ));\n },\n render(){\n const classNames = ['switch-toggle'];\n if(this.state.toggled){\n classNames.push('switch-toggle--on');\n }\n else{\n classNames.push('switch-toggle--off');\n }\n const toggleClassNames = ['switch switch--' + this.props.theme, 'switch--' + this.props.size];\n return (\n
    \n \n
    \n
    \n
    \n
    \n {this.props.filter_option.label}\n
    \n );\n }\n});\n\nexport default FilterOptions;\n","import FilterColumns from \"./filterColumns\";\nimport FilterControlButton from \"./filterControlButton\";\nimport FilterOptions from \"./filterOptions\";\n\n\nconst PivotlistFilterControls = createReactClass({\n mixins: [Reflux.listenTo(FilteringActionsStore, \"change_toggle_state\")],\n getInitialState: function () {\n return {open: FilteringActionsStore.state.open};\n },\n change_toggle_state: function(new_state) {\n // if open, we need to desat companies and companies header: see desat_list_companies_container in list_display.jsx\n this.setState(state => (\n {...state, open:new_state.open}\n ));\n },\n clear_all_filters: function(e, id) {\n e.preventDefault();\n e.stopPropagation();\n $(\"body\").addClass(\"wait\");\n $(\"html, body\").animate({ scrollTop: 0 }, 'fast');\n NProgress.configure({parent:'.filter_control_buttons', showSpinner:false});\n NProgress.start();\n const sort_field = getParameterByName('sort_field');\n const sort_by = getParameterByName('sort_by');\n const params = [];\n if(sort_field && sort_by){\n params.push('sort_field=' + sort_field);\n params.push('sort_by=' + sort_by)\n }\n window.location.href = '/lists/' + this.props.list_id + (params.length > 0 ) ? '?' + params.join('&') : '';\n },\n cancel_filters: function(e, id) {\n e.preventDefault();\n e.stopPropagation();\n FilteringActions.revertState();\n },\n apply_filters: function(e, id) {\n e.preventDefault();\n e.stopPropagation();\n const sort_field = getParameterByName('sort_field');\n const sort_by = getParameterByName('sort_by');\n const params = [];\n if(sort_field && sort_by){\n params.push('sort_field=' + sort_field);\n params.push('sort_by=' + sort_by);\n }\n if(JSON.stringify(FilteringActionsStore.state.orig_filters) !== JSON.stringify(FilteringActionsStore.state.column_filters)){\n params.push('filters=' + encodeURIComponent(JSON.stringify(FilteringActionsStore.state.column_filters)));\n FilteringActionsStore.state.column_filters.forEach( function( column ) {\n Zymewire.mixpanel_track('pivotlist filter applied', {type:column.type, column:column.full_name, filter:column.filter});\n } );\n }\n NProgress.configure({parent:'.filter_control_buttons', showSpinner:false});\n NProgress.start();\n window.location.href = '/lists/' + this.props.list_id + (params.length > 0 ) ? '?' + params.join('&') : '';\n },\n UNSAFE_componentWillMount:function(){\n const column_filters = this.props.filter_columns.map(function(column) {\n return {column:column.column_name, full_name: column.full_name, type: column.filter_options.type, filter:lodash.cloneDeep(column.current_filter)};\n });\n const orig_filters = this.props.filter_columns.map(function(column) {\n return {column:column.column_name, filter:column.current_filter};\n });\n FilteringActions.initialState(column_filters, orig_filters);\n },\n render: function () {\n const class_names = ['pivotlist_filter_controls_card'];\n\n if(this.state.open){\n class_names.push('swing_in_filter_controls');\n }\n\n const column_filter_options = this.props.filter_columns.map(function(column) {\n return {name: column.full_name, description: column.filter_options.description, type: column.filter_options.type, options:column.filter_options.options, current_filter:column.current_filter}\n });\n\n const filter_columns = ;\n const filter_options = ;\n const filter_buttons = [{'class_names':['button-small', 'button_green', 'filter_control_button_clear'], 'id':'clear_all_filters', 'label':'Clear all filters', 'action':this.clear_all_filters}, {'class_names':['button-small', 'button-primary', 'filter_control_button_apply'], 'id':'apply_all_filters', 'label':'Apply filters', 'action':this.apply_filters}, {'class_names':['button-small', 'button_light_grey', 'button-secondary', 'filter_control_button-secondary'], 'id':'cancel_filters', 'label':'Cancel', 'action':this.cancel_filters}];\n\n const filter_buttons_content = filter_buttons.map(function(button_data, index){\n return (\n \n );\n }.bind(this));\n\n if(this.props.list_length !== this.props.filtered_length){\n const pivotlist_count = document.getElementById('pivotlist_count');\n pivotlist_count.innerHTML = 'filtered to ' + this.props.filtered_length + ' companies';\n pivotlist_count.classList.add('pivotlist_filtered');\n }\n return (\n
    \n {this.state.open &&\n
    \n
    \n
    \n {filter_columns}\n
    \n {filter_options}\n
    \n
    \n {filter_buttons_content}\n
    \n
    \n }\n
    \n );\n }\n});\n\nexport default PivotlistFilterControls;\n","const ListTableHorizontalScroll = createReactClass({\n mixins: [Reflux.listenTo(ColumnControlsStore,\"toggleControlsState\")],\n getInitialState: function(){\n return {\n controlsOpen: '',\n }\n },\n toggleControlsState: function(controlsOpen) {\n\n if(controlsOpen === 'checked') {\n this.resetScroll();\n }\n\n this.setState({\n controlsOpen: controlsOpen\n });\n },\n componentDidMount: function() {\n this.scroller.addEventListener(\"scroll\", this.scrollController);\n\n const sortField = getParameterByName('sort_field');\n\n if(sortField !== null) {\n const findSortIndex = function (columnsChosen, sortField) {\n for (let i = 0; i < columnsChosen.length; i++) {\n if (columnsChosen[i].column_name === sortField) {\n return i;\n }\n }\n return 0;\n };\n\n let sortIndex = findSortIndex(this.props.columnsChosen, sortField);\n\n if(sortIndex > 4) {\n\n const scrollerPadding = 22;\n const scrollToHere = ((this.props.columnWidths[this.props.columnWidthsIndex] + scrollerPadding) * sortIndex);\n\n setTimeout(function(){$(this.scroller).animate({scrollLeft: scrollToHere}, 500);}.bind(this), 750);\n }\n\n }\n },\n componentWillUnmount: function() {\n this.scroller.removeEventListener(\"scroll\", this.scrollController);\n },\n resetScroll: function() {\n\n const listEntriesScrollData = document.getElementById(\"list_entries_scroll_data\");\n const listEntriesScrollHeader = document.getElementById(\"list_entries_scroll_header\");\n const listCompaniesScrollHeader = document.getElementById(\"list_companies_scroll_header\");\n\n const listCompaniesScrollData = document.getElementById(\"list_companies_scroll_data\")\n const headerForCompanies = document.getElementById(\"header_for_companies\")\n\n listCompaniesScrollData.classList.remove('pivotlist_horizontal_scroll_shadow');\n headerForCompanies.classList.remove('pivotlist_horizontal_scroll_shadow');\n listCompaniesScrollHeader.classList.remove('pivotlist_horizontal_scroll_shadow');\n\n $(listEntriesScrollData).animate({scrollLeft: 0}, 500);\n $(listEntriesScrollHeader).animate({scrollLeft: 0}, 500);\n $(listCompaniesScrollHeader).animate({scrollLeft: 0}, 500);\n $(this.scroller).animate({scrollLeft: 0}, 500);\n\n },\n scrollController: function() {\n\n if(this.state.controlsOpen === 'checked') {\n return;\n }\n\n const listEntriesScrollData = document.getElementById(\"list_entries_scroll_data\");\n const listEntriesScrollHeader = document.getElementById(\"list_entries_scroll_header\");\n const listCompaniesScrollHeader = document.getElementById(\"list_companies_scroll_header\");\n\n listEntriesScrollData.scrollLeft = listEntriesScrollHeader.scrollLeft = this.scroller.scrollLeft;\n\n const listCompaniesScrollData = document.getElementById(\"list_companies_scroll_data\")\n const headerForCompanies = document.getElementById(\"header_for_companies\")\n\n if(this.scroller.scrollLeft > 0) {\n listCompaniesScrollData.classList.add('pivotlist_horizontal_scroll_shadow');\n headerForCompanies.classList.add('pivotlist_horizontal_scroll_shadow');\n listCompaniesScrollHeader.classList.add('pivotlist_horizontal_scroll_shadow');\n }\n else {\n listCompaniesScrollData.classList.remove('pivotlist_horizontal_scroll_shadow');\n headerForCompanies.classList.remove('pivotlist_horizontal_scroll_shadow');\n listCompaniesScrollHeader.classList.remove('pivotlist_horizontal_scroll_shadow');\n }\n },\n render: function () {\n\n const containerClassNames = ['pivotlist_horizontal_scroll_container', 'pivotlist_scroll_container'];\n\n if(this.state.controlsOpen !== 'checked' && this.props.columnWidthsIndex >= 5) {\n containerClassNames.push('pivotlist_scroll_container_show');\n }\n else {\n containerClassNames.push('pivotlist_scroll_container_hide');\n }\n\n const scrollerPadding = 22;\n const scrollBarWidth = 7; // The space taken up by vertical scrollbar\n const scrollerWidth = ((this.props.columnWidths[this.props.columnWidthsIndex] + scrollerPadding) * this.props.columnWidthsIndex) - scrollBarWidth + 'px';\n const scrollerStyle = {width: scrollerWidth, minWidth: scrollerWidth, maxWidth: scrollerWidth};\n\n return (\n
    \n
    this.scroller = elem} id='pivotlist_horizontal_scroll' className='pivotlist_horizontal_scroll'>\n
    \n
    \n
    \n );\n }\n});\n\nexport default ListTableHorizontalScroll;\n","\nconst ListTableVerticalScroll = createReactClass({\n mixins: [Reflux.listenTo(pivotListColumnSettingsStore, 'updateContainerHeightState'), Reflux.listenTo(ColumnControlsStore,\"toggleControlsState\")],\n getInitialState: function(){\n return {\n controlsOpen: '',\n listTableContainerHeight: pivotListColumnSettingsStore.state.listTableContainerHeight\n }\n },\n updateContainerHeightState: function(newState) {\n this.setState({\n listTableContainerHeight:newState.listTableContainerHeight\n });\n },\n toggleControlsState: function(controlsOpen) {\n\n if(controlsOpen === 'checked') {\n this.resetScroll();\n }\n\n this.setState({\n controlsOpen: controlsOpen\n });\n },\n componentDidMount: function() {\n const scrollContainer = document.getElementById(\"list_entries_scroll_data\");\n scrollContainer.addEventListener(\"scroll\", this.scrollController);\n },\n componentWillUnmount: function() {\n const scrollContainer = document.getElementById(\"list_entries_scroll_data\");\n scrollContainer.removeEventListener(\"scroll\", this.scrollController);\n\n if (this.resizeObserver) {\n this.resizeObserver.disconnect();\n }\n },\n resetScroll: function() {\n\n const listEntriesScrollData = document.getElementById(\"list_entries_scroll_data\")\n const listCompaniesScrollData = document.getElementById(\"list_companies_scroll_data\")\n\n $(listEntriesScrollData).animate({scrollTop: 0}, 500);\n $(listCompaniesScrollData).animate({scrollTop: 0}, 500);\n\n const listEntriesScrollHeader = document.getElementById(\"list_entries_scroll_header\");\n const listCompaniesScrollHeader = document.getElementById(\"list_companies_scroll_header\");\n\n listEntriesScrollHeader.classList.remove('pivotlist_vertical_scroll_shadow');\n listCompaniesScrollHeader.classList.remove('pivotlist_vertical_scroll_shadow');\n\n },\n scrollController: function() {\n\n if(this.state.controlsOpen === 'checked') {\n return;\n }\n\n const listEntriesScrollData = document.getElementById(\"list_entries_scroll_data\")\n const listCompaniesScrollData = document.getElementById(\"list_companies_scroll_data\")\n listCompaniesScrollData.scrollTop = listEntriesScrollData.scrollTop // = this.scroller.scrollTop;\n\n const listEntriesScrollHeader = document.getElementById(\"list_entries_scroll_header\")\n const listCompaniesScrollHeader = document.getElementById(\"list_companies_scroll_header\")\n\n if(listEntriesScrollData.scrollTop > 0) {\n listEntriesScrollHeader.classList.add('pivotlist_vertical_scroll_shadow');\n listCompaniesScrollHeader.classList.add('pivotlist_vertical_scroll_shadow');\n }\n else {\n listEntriesScrollHeader.classList.remove('pivotlist_vertical_scroll_shadow');\n listCompaniesScrollHeader.classList.remove('pivotlist_vertical_scroll_shadow');\n }\n },\n render: function () {\n\n const containerClassNames = ['pivotlist_vertical_scroll_container', 'pivotlist_scroll_container'];\n const headerHeight = 70;\n const rowHeight = 57;\n\n const rowsBeforeScrollerAppears = Math.floor((this.state.listTableContainerHeight - headerHeight)/rowHeight);\n\n if(this.state.controlsOpen !== 'checked' && this.props.listLength > rowsBeforeScrollerAppears) {\n containerClassNames.push('pivotlist_scroll_container_show');\n }\n else {\n containerClassNames.push('pivotlist_scroll_container_hide');\n }\n\n const scrollerPadding = 75;\n const scrollerStyle = {height: (this.state.listTableContainerHeight - scrollerPadding) + 'px'};\n\n return (\n
    \n
    this.scroller = elem} id='pivotlist_vertical_scroll' className='pivotlist_vertical_scroll' style={scrollerStyle}>\n {/*
    */}\n
    \n
    \n );\n }\n});\n\nexport default ListTableVerticalScroll;\n","const CompanySfIcon = function(props) {\n let sf_lit = 'unlit';\n let in_sf = ' NOT';\n if(props.company_data.sf === true){\n sf_lit = 'lit';\n in_sf = ''\n }\n return (\n
    \n
    \n
    \n
    \n
    \n
    \n );\n}\n\nexport default CompanySfIcon;\n","const PivotlistSortIcon = function(props) {\n const class_names = ['pivotlist_sort_icon', 'sorted_by_' + props.current_sort, 'default_sorted_by_' + props.default_sort];\n return  ;\n}\n\nexport default PivotlistSortIcon;\n","import PivotlistSortIcon from \"./pivotListSortIcon\";\n\nvar HeaderCell = createReactClass({\n getInitialState: function(){\n return {\n current_sort:this.props.element.current_sort,\n default_sort:this.props.element.default_sort\n }\n },\n re_sort: function(){\n if(this.state.default_sort !== 'null'){\n $(\"body\").addClass(\"wait\");\n var current_sort = this.state.current_sort === 'false' ? (this.state.default_sort === 'false' ? 'asc' : this.state.default_sort) : (this.state.current_sort === 'desc' ? 'asc' : 'desc');\n Zymewire.mixpanel_track(\n \"Lists: column sorted\",\n {\n list_id: this.props.list_id,\n type_ref: this.props.type_ref,\n choice: this.props.element.full_name,\n },\n );\n window.location.href = '/lists/' + this.props.list_id + '?sort_field=' + this.props.element.column_name + '&sort_by=' + current_sort;\n }\n },\n render: function () {\n const classNames = ['list_header', 'list_column_calc', 'sorted_by_' + this.props.element.current_sort, 'default_sorted_by_' + this.props.element.default_sort, 'list_column_' + this.props.column_index];\n\n let filter_icon = null;\n let sort_icon = (this.props.element.current_sort === 'null' || this.props.column_index === 0) ? null : ;\n const header_name = this.props.element.full_name.split(': ');\n let link = header_name[0];\n if(this.state.default_sort !== 'null') {\n link = {header_name[0]}\n }\n let sub_header =
     
     
    ;\n let widthStyle = {};\n\n if(this.props.element.column_name !== 'companies' && header_name[1] !== 'Name'){\n sub_header = (\n
    {header_name[1]}
    \n )\n const widthAdjustment = this.props.columnWidths[this.props.column_index] + 'px';\n widthStyle = {width: widthAdjustment, maxWidth: widthAdjustment, minWidth: widthAdjustment};\n }\n return (\n
    {link}{sub_header}{sort_icon}{filter_icon}
    \n );\n }\n});\n\nconst HeaderRow = (props) => {\n var column_index = props.list_object.columns_chosen.length-1;\n var headerClasses = ['list_column_row list_header_row ', props.header_type];\n var content, columns;\n var column_settings = [];\n let companies_index_offset = 0;\n if(props.header_type === 'list_entity_header'){\n columns = props.list_object.columns_chosen.slice(0,1);\n }\n else{\n companies_index_offset = 1;\n columns = props.list_object.columns_chosen.slice(1);\n }\n if(columns.length === 0){\n var no_columns = {column_name:\"no_columns\", css_classes: null, current_filter:[], current_sort:\"false\", data_type:\"text\",default_sort:\"null\",description:\"To add columns, click the 'Modify Columns' button\", filter_options:{type:false, options:[], description:'Sorry.'}, full_name:\"(no columns chosen)\", name:\t\"(no columns chosen)\"};\n content = \n }\n else{\n content = _.map(columns, function(element, index){\n column_settings.push({data_type:element.data_type, current_sort:element.current_sort, default_sort:element.default_sort, column_index:column_index, column_name:element.column_name, css_classes:element.css_classes});\n return (\n \n );\n });\n }\n let scrollId = 'list_entries_scroll_header';\n if(props.header_type === 'list_column_header'){\n ColumnSettingsActions.adjustColumnSettings(column_settings)\n }\n else{\n scrollId = 'list_companies_scroll_header';\n CompanySettingsActions.adjustCompanySettings(column_settings)\n }\n return (\n
    \n {content}\n
    \n );\n}\n\nexport default HeaderRow;\n","import CompanySfIcon from \"../companySfIcon\";\nimport HeaderRow from \"./headerRow\";\n\nlet hacky_timer;\n\nconst CompanyRestore = (props) => {\n const restore_company = function() {\n RowRemovalActions.restoreCompany(props.company_data.id)\n }\n\n return (\n
    undo
    \n );\n}\n\nconst CompanyRemove = (props) => {\n const remove_company = function() {\n RowRemovalActions.removeCompany(props.list_id,props.company_data.id)\n }\n\n return (\n
    remove
    \n );\n}\n\nconst CompanyAdded = (props) => {\n const remove_company = function() {\n RowRemovalActions.removeCompany(props.list_id,props.company_data.id)\n }\n\n const added_date = moment.parseZone(props.company_data.added).format('MMM DD YYYY');\n return (\n
    Added: {added_date}
    \n );\n}\n\nconst CompanyRow = createReactClass({\n mixins: [Reflux.listenTo(CompanySettingsStore,\"update_settings\"), Reflux.listenTo(RowHoverStore,\"update_hover_state\"), Reflux.listenTo(RowRemovalStore,\"update_removal_state\")],\n getInitialState: function(){\n return {\n company_settings:[{current_sort:false, default_sort:'null'}],\n hover_id:false,\n hover_state:false,\n removal_state:false\n }\n },\n componentDidMount() {\n const targetId = \"pivot_list_value_row_\" + this.props.rowIndex;\n const target = document.getElementById(targetId);\n if (!target) {\n console.error(\"Unable to attach resize observer to:\", targetId);\n return;\n }\n\n this.resizeObserver = new ResizeObserver((entries) => {\n const leftStickyRow = \"pivotlist_column_zero_row_\" + this.props.rowIndex;\n const element = document.getElementById(leftStickyRow);\n\n element.style.height = entries[0].target.clientHeight + \"px\";\n });\n\n this.resizeObserver.observe(target);\n },\n componentWillUnmount() {\n if (this.resizeObserver) {\n this.resizeObserver.disconnect();\n }\n },\n update_settings: function(company_settings) {\n this.setState({\n company_settings: company_settings\n });\n },\n update_hover_state: function(hover_id) {\n if (!hover_id) return;\n if(hover_id === this.props.company_data.id){\n this.setState({\n hover_state: true\n });\n }\n else{\n this.setState({\n hover_state: false\n });\n }\n this.setState({\n hover_id: hover_id\n });\n },\n update_removal_state: function(removal_ids) {\n if(removal_ids.includes(this.props.company_data.id)){\n this.setState({\n removal_state: true\n });\n }\n else{\n this.setState({\n removal_state: false\n });\n }\n },\n mouse_over (e) {\n clearTimeout(hacky_timer);\n RowHoverActions.updateHover(this.props.company_data.id)\n },\n mouse_out (e) {\n hacky_timer = setTimeout(function() { RowHoverActions.updateHover(null) }, 71);\n },\n manage_lists (e){\n const id = \"list_manage_\" + this.props.company_data.id;\n display_list_modification_widget($('#' + id));\n return false;\n },\n render: function () {\n const hover_state = this.state.hover_state === true ? ' list_entry_hover' : '';\n let company_name = this.props.company_data.name;\n if (company_name.length > 40) {\n company_name = company_name.substr(0,40-3) + \"...\";\n }\n // Last visited feature\n const last_visited = this.props.company_data.last_visited;\n // Link tooltip\n const default_tooltip = \"Go to the \" + company_name + \" dashboard.\";\n const last_visited_tooltip = \"Last visited \" + company_name + \" dashboard \" + last_visited + \" ago.\";\n const tooltip = last_visited ? last_visited_tooltip : default_tooltip;\n // CSS link styling\n const default_link_classes = \"fancy_link event_organization\";\n const last_visited_classes = default_link_classes + \" visited_org_link\"\n const company_link_classes = last_visited ? last_visited_classes : default_link_classes;\n\n const company_id = this.props.company_data.id;\n const view_url = this.props.company_data.view_url;\n let sponsor_lit = 'unlit';\n let a_sponsor = ' NOT';\n if(this.props.company_data.sponsor === true){\n sponsor_lit = 'lit';\n a_sponsor = ''\n }\n let company_added;\n let company_removed = '';\n if(this.state.removal_state === true){\n if(this.state.hover_state === this.props.company_data.id){\n }\n company_added = ;\n company_removed = ' company_removed_fade'\n }\n else{\n if(this.state.hover_id === this.props.company_data.id && this.props.is_editable){\n company_added = \n }\n else{\n company_added = \n }\n }\n let company_sf = '';\n if(this.props.type_ref === \"organizations\" && this.props.display_sf){\n company_sf = \n }\n\n let class_names = (this.state.company_settings[0].css_classes) ? [this.state.company_settings[0].css_classes] : [];\n class_names.push('list_cell');\n class_names.push('list_company_cell');\n\n class_names.push('sorted_by_' + this.state.company_settings[0].current_sort);\n class_names.push('default_sorted_by_' + this.state.company_settings[0].default_sort);\n class_names.push(\"border-box\");\n\n if(this.props.is_editable === false && !_.include(class_names[0], 'fullstory_excluded')){\n class_names.push('fullstory_excluded');\n }\n\n let entityNameStyle = { marginLeft: \"90px\" };\n\n if (this.props.type_ref !== \"organizations\") {\n entityNameStyle = {\n marginLeft: \"0px\"\n }\n }\n\n return (\n
    \n
    \n
    \n
    \n {this.props.type_ref === \"organizations\" && \n
    \n
    \n
    \n
    \n
    \n
    \n {company_sf}\n
    \n \n \n \n
    \n
    \n }\n {company_added}\n
    \n
    \n {\n delayed_track(\n \"Mouse over entity (last visited)\",\n { entity_id: company_id, entity_name: company_name },\n { reset_scope: \"btst\" }\n )}}\n onMouseOut={() => reset_delayed_track(\"btst\") }\n href={view_url}\n className={company_link_classes}\n data-container=\"body\" title={tooltip}>\n {company_name}\n \n
    \n
    \n
    \n
    \n );\n }\n});\n\nconst CompanyRows = createReactClass({\n mixins: [Reflux.listenTo(pivotListColumnSettingsStore, 'updateContainerHeightState'), Reflux.listenTo(ColumnControlsStore,\"toggleControlsState\")],\n getInitialState: function(){\n return {\n controls_open: this.props.controls_open,\n listTableContainerHeight: pivotListColumnSettingsStore.state.listTableContainerHeight\n }\n },\n updateContainerHeightState: function(newState) {\n this.setState({\n listTableContainerHeight:newState.listTableContainerHeight\n });\n },\n toggleControlsState: function(controlsOpen) {\n this.setState({\n controls_open: controlsOpen\n });\n },\n componentDidMount: function() {\n this.scroller.addEventListener(\"wheel\", this.scrollController);\n },\n componentWillUnmount: function() {\n this.scroller.removeEventListener(\"wheel\", this.scrollController);\n },\n scrollController: function(e) {\n\n if(this.state.controlsOpen === 'checked') {\n return;\n }\n\n let delta = e.wheelDelta || -e.detail;\n let shiftKey = e.shiftKey;\n\n if(shiftKey === true) {\n const listEntriesScrollHeader = document.getElementById(\"list_entries_scroll_header\");\n ColumnControlsActions.scrollWheelControls(delta, shiftKey, listEntriesScrollHeader);\n }\n else {\n ColumnControlsActions.scrollWheelControls(delta, shiftKey, this.scroller);\n }\n\n },\n render: function () {\n\n const companies = this.props.list_object.list_entries.map(function(entry, index){\n if(entry[0]){\n return \n }\n else {\n\n const class_names = ['list_company_cell', 'list_cell', 'list_empty_cell'];\n\n return (\n
    \n
     
    \n
    \n )\n }\n }.bind(this));\n\n const class_names = ['list_companies_container'];\n\n if(this.state.controls_open === 'checked'){\n class_names.push('desat_list_companies_container');\n }\n const listTableContainerHeight = this.state.listTableContainerHeight - 69\n const istTableContainerHeightInPx = listTableContainerHeight + 'px';\n const adjustedStyle = {maxHeight: istTableContainerHeightInPx, height: istTableContainerHeightInPx, minHeight: istTableContainerHeightInPx, overflow: 'hidden'};\n\n const header = ;\n return (\n
    \n {header}\n
    this.scroller = elem} id='list_companies_scroll_data' className=\"list_companies_scroll_data\" style={adjustedStyle}>\n {companies}\n
    \n
    \n );\n }\n});\n\nexport default CompanyRows;\n","const AvailableLi = createReactClass({\n mixins: [Reflux.listenTo(DragStore,\"update_dragged\"), Reflux.listenTo(pivotListColumnSettingsStore, 'updateSettingsState')],\n getInitialState: function(){\n return {\n class_name:this.props.class_name,\n dragged:{},\n interactableColumnsCount: 0,\n fixedColumnsCount: 0\n }\n },\n update_dragged: function(dragged) {\n this.setState({\n dragged: dragged\n });\n },\n UNSAFE_componentWillMount: function(dragged) {\n if(pivotListColumnSettingsStore.state.interactableColumnsCount && pivotListColumnSettingsStore.state.interactableColumnsCount !== this.state.interactableColumnsCount) {\n this.setState({\n interactableColumnsCount: pivotListColumnSettingsStore.state.interactableColumnsCount,\n fixedColumnsCount: pivotListColumnSettingsStore.state.fixedColumnsCount\n });\n }\n },\n updateSettingsState(newState) {\n this.setState({\n interactableColumnsCount: newState.interactableColumnsCount,\n fixedColumnsCount: newState.fixedColumnsCount\n });\n },\n UNSAFE_componentWillReceiveProps: function(nextProps) {\n this.setState({class_name:nextProps.class_name});\n },\n componentDidMount: function() {\n this.available.addEventListener(\"dragstart\", this.drag_start);\n this.available.addEventListener(\"dragend\", this.drag_end);\n },\n componentWillUnmount: function() {\n this.available.removeEventListener(\"dragstart\", this.drag_start);\n this.available.removeEventListener(\"dragend\", this.drag_end);\n },\n drag_start: function(event){\n DragActions.setDragged('available', false, this.props);\n },\n drag_end: function(event){\n if(this.state.dragged.over === 'choice'){\n this.add_choice();\n }\n DragActions.setDragged(null, null, {});\n },\n add_choice: function(){\n if(this.state.class_name != 'column_choice_disabled'){\n Zymewire.mixpanel_track(\n \"Lists: column choice\",\n {\n list_id: this.props.list.list_id,\n type_ref: this.props.list.type_ref,\n choice: this.props.column_data.full_name,\n },\n );\n this.setState({\n class_name: 'column_choice_disabled'\n });\n setTimeout(function(){\n const interactableColumnsAvailable = this.state.interactableColumnsCount + this.state.fixedColumnsCount;\n ColumnsChosenActions.addToChosen(this.props.column_data, interactableColumnsAvailable);\n }.bind(this), 221)\n }\n },\n render: function(){\n const class_names = ['column_overflow_protection','rspec_column_available','action_link','columns_chosen_link'];\n if(this.state.class_name === 'column_choice_disabled'){\n class_names.push('column_overflow_protection no_choice_link');\n }\n let full_name = this.props.column_data.full_name;\n if (this.props.search_string) {\n const escapedSearchString = this.props.search_string.replace(/[.*+?^=!:${}()|\\[\\]\\/\\\\]/g, '\\\\$&');\n const regex = new RegExp(escapedSearchString, 'gi');\n const new_name = full_name.replace(regex, \"$&\");\n full_name = new_name;\n }\n return (\n
  • this.available = elem} title={this.props.column_data.description} onClick={this.add_choice} className={\"columns_choice \" + this.state.class_name + this.props.over_class} id={this.props.column_data.column_name}>\n \n
  • \n );\n }\n});\n\nexport default AvailableLi;\n","const ColumnChoicePagination = function(props) {\n const get_a_range = (from, to, step = 1) => {\n let i = from;\n const range = [];\n while (i <= to) {\n range.push(i);\n i += step;\n }\n return range;\n }\n\n const pagination_array = () => {\n const totalNumbers = 5;\n const totalBlocks = 10;\n if (props.totalColumnChoicePages > totalBlocks) {\n let pages = [];\n const left_bound = props.current_page - 1;\n const right_bound = props.current_page + 1;\n const before_last = props.totalColumnChoicePages - 1;\n const start_page = left_bound > 2 ? left_bound : 2;\n const last_page = right_bound < before_last ? right_bound : before_last;\n pages = get_a_range(start_page, last_page);\n const pages_length = pages.length;\n const single_spill_offset = totalNumbers - pages_length - 1;\n const left_spill = start_page > 2;\n const right_spill = last_page < before_last;\n if (left_spill && !right_spill) {\n const extraPages = get_a_range(start_page - single_spill_offset, start_page - 1);\n pages = ['LEFT', ...extraPages, ...pages];\n } else if (!left_spill && right_spill) {\n const extraPages = get_a_range(last_page + 1, last_page + single_spill_offset);\n pages = [...pages, ...extraPages, 'RIGHT'];\n } else if (left_spill && right_spill) {\n pages = ['LEFT', ...pages, 'RIGHT'];\n }\n return [1, ...pages, props.totalColumnChoicePages];\n }\n return get_a_range(1, props.totalColumnChoicePages);\n }\n\n const pages = pagination_array();\n\n return (\n \n );\n}\n\nexport default ColumnChoicePagination;\n","const FillerLi = () =>
  • FILLER
  • \n\nexport default FillerLi;\n","import stickybits from \"stickybits\";\nimport AvailableLi from \"./availableLi\";\nimport ColumnChoicePagination from \"./columnsChoicePagination\";\nimport FillerLi from \"./fillerLi\";\nimport SearchInput from \"../../../generic/searchInput\";\nimport Fuse from \"fuse.js\";\n\nconst AvailableColumns = createReactClass({\n mixins: [Reflux.listenTo(pivotListColumnSettingsStore, 'updateSettingsState'), Reflux.listenTo(ColumnsChosenStore,\"update_chosen\"), Reflux.listenTo(DragStore,\"update_dragged\")],\n getInitialState: function(){\n let columnsAvailable = this.props.columns_available.slice();\n let filteredColumnsAvailable = this.props.columns_available.slice();\n return {\n columnsChosen:this.props.columns_chosen.map(function(item) {\n return item.column_name\n }),\n dragged: {type:null, over:false, data:{}},\n current_page: 1,\n search_string: '',\n filteredColumnsAvailable: filteredColumnsAvailable,\n columnsAvailable: columnsAvailable,\n totalColumnChoicePages: pivotListColumnSettingsStore.state.totalColumnChoicePages,\n columnChoicesPerPage: pivotListColumnSettingsStore.state.columnChoicesPerPage,\n interactableColumnsCount: pivotListColumnSettingsStore.state.interactableColumnsCount,\n fixedColumnsCount: pivotListColumnSettingsStore.state.fixedColumnsCount,\n listTableContainerHeight: pivotListColumnSettingsStore.state.listTableContainerHeight\n }\n },\n updateSettingsState: function(newState) {\n this.setState({\n listTableContainerHeight:newState.listTableContainerHeight,\n totalColumnChoicePages: newState.totalColumnChoicePages,\n columnChoicesPerPage: newState.columnChoicesPerPage,\n interactableColumnsCount: newState.interactableColumnsCount,\n fixedColumnsCount: newState.fixedColumnsCount\n });\n },\n update_chosen: function(columnsChosen) {\n this.setState({\n columnsChosen: columnsChosen.map(function(item) {\n return item.column_name\n })\n });\n },\n update_dragged: function(dragged) {\n this.setState({\n dragged: dragged\n });\n },\n componentDidMount:function(){\n this.options_available.addEventListener(\"dragenter\", this.drag_enter);\n Sortable.create(document.getElementById('columns_available'), {\n animation: 150,\n group: {\n name: \"shared\",\n put: false,\n pull: \"clone\",\n revertClone: false,\n },\n sort: false,\n draggable:'.column_choice_enabled'\n });\n stickybits($('.columns_available'), {stickyBitStickyOffset: 40});\n },\n componentWillUnmount: function() {\n this.options_available.removeEventListener(\"dragenter\", this.drag_enter);\n },\n drag_enter: function(event){\n DragActions.setDragOver('available');\n },\n jump_to: function(page){\n this.go_to_page(page);\n },\n jump_left: function(e){\n e.preventDefault();\n this.go_to_page(this.state.current_page - 3)\n },\n jump_right: function(e){\n e.preventDefault();\n this.go_to_page(this.state.current_page + 3)\n },\n go_to_page:function(page) {\n const current_page = Math.max(0, Math.min(page, this.state.totalColumnChoicePages));\n const start = (current_page-1)*this.state.columnChoicesPerPage;\n const end = current_page*this.state.columnChoicesPerPage;\n this.setState({current_page:current_page, columnsAvailable:this.state.filteredColumnsAvailable.slice(start,end)});\n },\n searchColumns:function(search_string) {\n let preFilteredColumnsAvailable = this.props.columns_available.slice();\n const filteredColumnsAvailable = !search_string\n ? preFilteredColumnsAvailable\n : this.getSearchResults(preFilteredColumnsAvailable, search_string);\n let columnsAvailable = filteredColumnsAvailable.slice();\n this.setState({columnsAvailable:columnsAvailable.splice(0,this.state.columnChoicesPerPage), totalColumnChoicePages:Math.ceil(parseFloat(filteredColumnsAvailable.length/this.state.columnChoicesPerPage)), current_page:1, search_string:search_string, filteredColumnsAvailable:filteredColumnsAvailable});\n Zymewire.mixpanel_track(\n \"Lists: search columns\",\n {\n list_id: this.props.list.list_id,\n type_ref: this.props.list.type_ref,\n search_string: search_string,\n }\n )\n },\n getSearchResults:function(preFilteredColumnsAvailable,search_string){\n const fuseOptions = {\n keys: ['full_name','synonyms'],\n includeScore: true,\n ignoreLocation: true,\n threshold: 0.2\n };\n const fuse = new Fuse(preFilteredColumnsAvailable, fuseOptions);\n const searchResults = fuse.search(search_string);\n let filteredColumnsAvailable = preFilteredColumnsAvailable.filter(function (column) {\n return searchResults.some(result => result.item.full_name.toLowerCase() === column.full_name.toLowerCase());\n });\n return filteredColumnsAvailable;\n },\n render: function() {\n let number_of_column_options = this.state.filteredColumnsAvailable.length + ' column options';\n let over_spot = 0;\n let class_name = '';\n let interactableColumnsAvailable = this.state.interactableColumnsCount + this.state.fixedColumnsCount;\n if(this.state.dragged.over === 'available' && this.state.dragged.type === 'choice'){\n class_name = ' dragged_over';\n over_spot = 1;\n }\n let columnsAvailable = this.state.columnsAvailable.slice();\n columnsAvailable = columnsAvailable.splice(0, this.state.columnChoicesPerPage);\n if(this.state.search_string !== ''){\n number_of_column_options = (this.state.filteredColumnsAvailable.length === 1) ? this.state.filteredColumnsAvailable.length + ' MATCHING option' : this.state.filteredColumnsAvailable.length + ' MATCHING options';\n }\n if(columnsAvailable.length < this.state.columnChoicesPerPage){\n columnsAvailable = array_pad(columnsAvailable, this.state.columnChoicesPerPage, {column_name:'FILLER'});\n }\n const content = _.map(columnsAvailable.splice(0), function(element, index){\n if(element.column_name.startsWith('FILLER')){\n return (\n \n );\n }\n else if(!element.column_name.startsWith('sf_') || this.props.display_sf === true){\n let over_class = '';\n if(over_spot === 1 && (typeof this.state.dragged.data !== 'undefined')){\n if(element.column_name === this.state.dragged.data.column_data.column_name){\n over_spot = 0;\n over_class = ' pivot_drop_li';\n }\n }\n const class_name = (this.state.columnsChosen.length === interactableColumnsAvailable || this.state.columnsChosen.includes(element.column_name, 1)) ? 'column_choice_disabled' : 'column_choice_enabled';\n return (\n \n );\n }\n }.bind(this));\n const selectionsRemaining = (interactableColumnsAvailable-this.state.columnsChosen.length === 1) ? 'selection' : 'selections';\n const selectionsRemainingCount = interactableColumnsAvailable-this.state.columnsChosen.length;\n return(\n
    \n

    {number_of_column_options} ({interactableColumnsAvailable-this.state.columnsChosen.length} {selectionsRemaining} remaining):

    \n {/* TODO: REACTAPACKER */}\n \n
      this.options_available = elem} className=\"columns_available_ul\" id=\"columns_available\">\n {content}\n
    \n \n
    \n )\n }\n});\n\nexport default AvailableColumns;\n","const CancelColumnsButton = createReactClass({\n mixins: [Reflux.listenTo(SubmitFormStore,\"disable_button\")],\n getInitialState: function(){\n return {\n columns_chosen:this.props.columns_chosen,\n submit_form:this.props.columns_chosen\n }\n },\n disable_button: function(state) {\n this.setState({\n submit_form: true\n });\n },\n submit_changes: function (e){\n e.stopPropagation();\n ColumnControlsActions.toggleColumnControls('');\n ColumnsChosenActions.reset({...this.state.columns_chosen})\n },\n render: function () {\n const class_names = [\"cancel_columns_button\", \"button-small\"];\n if(this.state.submit_form === true){\n class_names.push(\"button-disable\");\n }\n else {\n class_names.push(\"button-secondary\");\n }\n return (\n \n );\n }\n});\n\nexport default CancelColumnsButton;\n","\nconst ModifyColumnsButton = createReactClass({\n mixins: [Reflux.listenTo(ColumnsChosenStore,\"change_button_state\")],\n getInitialState: function(){\n return {\n columns_chosen:this.props.columns_chosen,\n submit_form:false\n }\n },\n change_button_state: function(columns_chosen) {\n this.setState({\n columns_chosen:columns_chosen\n });\n },\n submit_form: function(e) {\n e.preventDefault();\n if(this.state.submit_form === false){\n this.submit_changes();\n }\n },\n submit_changes: function (){\n const choice = this.state.columns_chosen.filter(function(entry){\n return entry.full_name !== \"Company: Name\"\n }).map(function(obj) {\n return obj.full_name;\n })\n\n Zymewire.mixpanel_track(\n \"Lists: columns selected\",\n {\n list_id: this.props.list_id,\n type_ref: this.props.type_ref,\n choice: choice,\n }\n );\n\n $(\"body\").addClass(\"wait\");\n $(\"html, body\").animate({ scrollTop: 0 }, 'fast');\n NProgress.configure({parent:'.modify_list_header', showSpinner:false});\n NProgress.start();\n this.setState({\n submit_form:true\n });\n SubmitFormActions.disableButtons();\n\n const fd = new FormData()\n\n // Array field\n this.state.columns_chosen.forEach(column => {\n fd.append(\"columns_chosen[]\", column.column_name)\n })\n\n $.ajax({\n type: 'post',\n url: \"/lists/\" + this.props.list_id + \"/manage_chosen_columns\",\n processData: false,\n contentType: false,\n data: fd,\n complete: (xhr) => {\n if (xhr.status == 404) {\n window.location.replace(\"/lists\");\n } else {\n window.location.replace(\"/lists/\"+this.props.list_id+\"?page=1\");\n }\n }\n })\n },\n render: function () {\n\n\n let classNames = [\"modify_columns_button\", \"button-small\", \"button-primary\"];\n if(this.state.columns_chosen.length < 1 || this.state.submit_form === true){\n classNames.push(\"button-disable\");\n }\n\n const columns_chosen_ordered = this.state.columns_chosen.map(function(entry, index){\n return (\n \n );\n }.bind(this));\n\n return (\n
    \n \n {columns_chosen_ordered}\n \n
    \n );\n }\n});\n\nexport default ModifyColumnsButton;\n","const ClearColumnsButton = createReactClass({\n mixins: [Reflux.listenTo(ColumnsChosenStore,\"change_button_state\"),Reflux.listenTo(SubmitFormStore,\"disable_button\")],\n getInitialState: function(){\n return {\n button_type:this.props.columns_chosen.length > 1 ? 'enabled' : 'disabled',\n submit_form:false\n }\n },\n change_button_state: function(columns_chosen) {\n this.setState({\n button_type: columns_chosen.length > 1 ? 'enabled' : 'disabled'\n });\n },\n disable_button: function(state) {\n this.setState({\n submit_form: true\n });\n },\n submit_changes: function (e){\n e.stopPropagation();\n if(this.state.button_type !== 'disabled'){\n ColumnsChosenActions.clearAll()\n }\n },\n render: function () {\n\n let classNames = [\"clear_columns_button\", \"button-small\", \"button-secondary\"];\n if(this.state.button_type !== 'enabled' || this.state.submit_form === true){\n classNames.push(\"button-disable\");\n }\n return (\n \n );\n }\n});\n\nexport default ClearColumnsButton;\n","import ModifyColumnsButton from \"./modifyColumnsButtons\";\nimport ClearColumnsButton from \"./clearColumnsButton\";\n\nconst ModifyColumnsRow = (props) => {\n const modify_columns_button = ;\n const clear_columns_button = ;\n\n return (\n
    \n {clear_columns_button}\n {modify_columns_button}\n
    \n );\n}\n\nexport default ModifyColumnsRow;\n","const NoMoreChoices = createReactClass({\n mixins: [Reflux.listenTo(pivotListColumnSettingsStore, 'updateSettingsState'), Reflux.listenTo(ColumnsChosenStore,\"changeButtonState\")],\n\n getInitialState: function(){\n return {\n columnsChosen:this.props.columns_chosen,\n fixedColumnsCount: pivotListColumnSettingsStore.state.fixedColumnsCount,\n interactableColumnsCount: pivotListColumnSettingsStore.state.interactableColumnsCount\n }\n },\n updateSettingsState: function(newState) {\n this.setState({\n fixedColumnsCount:newState.fixedColumnsCount,\n interactableColumnsCount:newState.interactableColumnsCount\n });\n },\n changeButtonState: function(columnsChosen) {\n this.setState({\n columnsChosen:columnsChosen\n });\n },\n render: function () {\n const interactableColumnsAvailable = this.state.interactableColumnsCount + this.state.fixedColumnsCount\n const className = (this.state.columnsChosen.length === (interactableColumnsAvailable)) ? 'no_more_choices no_more_shown' : 'no_more_choices no_more_hidden';\n return (\n
    A limit of {this.state.interactableColumnsCount} columns has been reached.
    Remove a chosen column to replace it.
    \n );\n }\n});\n\nexport default NoMoreChoices;\n","var ChosenLi = createReactClass({\n mixins: [Reflux.listenTo(DragStore,\"update_dragged\")],\n getInitialState: function(){\n return {\n class_name:this.props.column_data.column_name === 'empty' ? 'column_slot_open' : 'draggable',\n column_data:this.props.column_data,\n dragged:{}\n }\n },\n update_dragged: function(dragged) {\n this.setState({\n dragged: dragged\n });\n },\n UNSAFE_componentWillReceiveProps: function(nextProps) {\n this.setState({class_name:nextProps.column_data.column_name === 'empty' ? 'column_slot_open' : 'draggable',column_data:nextProps.column_data});\n },\n componentDidMount: function() {\n this.chosen.addEventListener(\"dragstart\", this.drag_start);\n this.chosen.addEventListener(\"dragend\", this.drag_end);\n },\n componentWillUnmount: function() {\n this.chosen.removeEventListener(\"dragstart\", this.drag_start);\n this.chosen.removeEventListener(\"dragend\", this.drag_end);\n },\n drag_start: function(event){\n DragActions.setDragged('choice', false, this.props);\n },\n drag_end: function(event){\n if(this.state.dragged.over === 'available'){\n this.remove_choice();\n }\n DragActions.setDragged(null, null, {});\n },\n remove_choice: function(){\n this.setState({\n class_name: 'column_slot_open'\n });\n setTimeout(function(){\n ColumnsChosenActions.removeFromChosen(this.state.column_data)\n }.bind(this), 221);\n },\n render: function(){\n const action_link = this.state.column_data.column_name === 'empty' ? '' : {this.state.column_data.full_name};\n return (\n
  • this.chosen = elem} title={this.state.column_data.description} onClick={this.remove_choice} className={\"columns_choice \" + this.state.class_name + this.props.over_class} data-chosen={this.state.column_data.column_name} id={\"chosen_\" + this.state.column_data.column_name}>{action_link}
  • \n );\n }\n});\n\nexport default ChosenLi;\n","import ModifyColumnsRow from \"../columns/modifyColumnsRow\";\nimport NoMoreChoices from \"./noMoreChoices\";\nimport ChosenLi from \"./chosenLi\";\nimport stickybits from \"stickybits\";\n\nconst ChosenColumns = createReactClass({\n mixins: [Reflux.listenTo(ColumnsChosenStore,\"update_chosen\"), Reflux.listenTo(DragStore,\"update_dragged\"), Reflux.listenTo(pivotListColumnSettingsStore, 'updateSettingsState')],\n getInitialState: function(){\n return {\n columns_chosen:this.props.columns_chosen,\n dragged:{},\n interactableColumnsCount: 0\n }\n },\n update_chosen: function(columns_chosen) {\n this.setState({\n columns_chosen: columns_chosen\n });\n },\n update_dragged: function(dragged) {\n this.setState({\n dragged: dragged\n });\n },\n updateSettingsState: function(newState) {\n this.setState({\n interactableColumnsCount:newState.interactableColumnsCount\n });\n },\n componentDidMount:function(){\n this.chosen.addEventListener(\"dragenter\", this.drag_enter);\n Sortable.create(document.getElementById('columns_chosen'), {\n animation: 150,\n group: {\n name: \"shared\",\n put: false,\n pull: false,\n revertClone: false,\n },\n sort: true,\n draggable:'.draggable',\n onStart:function(evt){\n $('#' + evt.item.parentNode.id).toggleClass('no_hover_x');\n $('#' + evt.item.parentNode.id).find('.columns_chosen_link').toggleClass('fancy_link');\n $('#' + evt.item.parentNode.id).find('.columns_chosen_link').toggleClass('local_link');\n },\n onEnd:function(evt){\n $('#' + evt.item.parentNode.id).toggleClass('no_hover_x');\n $('#' + evt.item.parentNode.id).find('.columns_chosen_link').toggleClass('fancy_link');\n $('#' + evt.item.parentNode.id).find('.columns_chosen_link').toggleClass('local_link');\n const new_world_order = [];\n for (let i = 0; i < evt.to.children.length; i++) {\n new_world_order.push(evt.to.children[i].id.replace(\"chosen_\", \"\"));\n }\n ColumnsChosenActions.updateOrder(new_world_order)\n }\n });\n stickybits($('.columns_chosen'), {stickyBitStickyOffset: 40});\n },\n componentWillUnmount: function() {\n this.chosen.removeEventListener(\"dragenter\", this.drag_enter);\n },\n drag_enter: function(event){\n DragActions.setDragOver('choice');\n },\n render: function(){\n let over_spot = 0;\n var class_name = '';\n var column_entries = _.extend(new Array(this.state.interactableColumnsCount).fill({column_name:'empty',full_name:''}), this.state.columns_chosen.slice(1));\n var content;\n\n if(this.state.dragged.over === 'choice' && this.state.dragged.type === 'available'){\n class_name = ' dragged_over';\n over_spot = 1;\n }\n if(this.state.columns_chosen.length === 0){\n content = ''\n }\n else{\n content = _.map(column_entries, function(element, index){\n var over_class = '';\n if(over_spot === 1 && element.column_name === 'empty'){\n over_spot = 0;\n over_class = ' pivot_drop_li';\n }\n return (\n \n );\n }.bind(this));\n }\n return(\n
    \n

    Chosen columns (drag to sort, click to remove):

    \n
      this.chosen = elem} className=\"columns_chosen_ul\" id=\"columns_chosen\">\n {content}\n
    \n \n \n
    \n )\n }\n});\n\nexport default ChosenColumns;\n","import AvailableColumns from \"../availableColumns/availableColumns\";\nimport CancelColumnsButton from \"./cancelColumnsButton\";\nimport ChosenColumns from \"../chosenColumns/chosenColumns\"\nimport HeaderRow from \"./headerRow\";\n\nlet hacky_timer;\n\nconst ModifyListCheckbox = createReactClass({\n mixins: [Reflux.listenTo(ColumnControlsStore,\"toggle_controls\")],\n getInitialState: function(){\n return {\n controls_open:this.props.controls_open\n }\n },\n quiet_react: function (){\n // The whole “having to quiet react” doesn’t really sit well with me. Open to other ideas here.\n const quiet = 'react';\n },\n toggle_controls: function(controls_open) {\n this.setState({\n controls_open: controls_open\n });\n },\n render: function () {\n return (\n \n );\n }\n});\n\nconst ModifyListControls = (props) => {\n const available_columns =\n ;\n\n const chosen_columns =\n ;\n\n return (\n
    \n
    \n
    Modify Columns
    \n \n
    \n
    \n
    \n {available_columns}\n
    \n
    \n {chosen_columns}\n
    \n
    \n
    \n )\n}\n\nconst ColumnRow = createReactClass({\n mixins: [Reflux.listenTo(ColumnSettingsStore,\"update_settings\"),Reflux.listenTo(RowHoverStore,\"update_hover_state\"), Reflux.listenTo(RowRemovalStore,\"update_removal_state\")],\n getInitialState: function(){\n return {\n column_settings:[],\n hover_state:false,\n removal_state:false\n }\n },\n update_settings: function(column_settings) {\n this.setState({\n column_settings: column_settings\n });\n },\n update_hover_state: function(hover_id) {\n if(hover_id === this.props.column_data[0].id){\n this.setState({\n hover_state: true\n });\n }\n else{\n this.setState({\n hover_state: false\n });\n }\n },\n update_removal_state: function(removal_ids) {\n if(removal_ids.includes(this.props.column_data[0].id)){\n this.setState({\n removal_state: true\n });\n }\n else{\n this.setState({\n removal_state: false\n });\n }\n },\n mouse_over (e) {\n clearTimeout(hacky_timer);\n RowHoverActions.updateHover(this.props.column_data[0].id)\n },\n mouse_out (e) {\n hacky_timer = setTimeout(function() { RowHoverActions.updateHover(null) }, 71);\n },\n transform_trial_sponsor_hash: function(data_hash, max_name_length) {\n var sponsor_fragment = null;\n if (data_hash.sponsor) {\n sponsor_fragment = `(${I18n.t(\"terminology.target_organization_title\").toLowerCase()})`;\n } else {\n sponsor_fragment = `(non-${I18n.t(\"terminology.target_organization_title\").toLowerCase()})`;\n }\n\n var company_name = data_hash.name;\n if (company_name > max_name_length) {\n company_name = company_name.substring(0, max_name_length) + \"...\";\n }\n const company_dashboard_url = '' + company_name + '';\n return '' + company_dashboard_url + ' ' + sponsor_fragment + '';\n },\n transform_entity_relationship_hash: function(data_hash, max_name_length) {\n const entity_type_ref = data_hash.type_ref;\n const entity_id = data_hash.id;\n var entity_name = data_hash.name;\n\n if (entity_name > max_name_length) {\n entity_name = entity_name.substring(0, max_name_length) + \"...\";\n }\n\n const entity_dashboard_url = '/sales_assistant/' + entity_type_ref + '/' + entity_id;\n const entity_dashboard_href = '' + entity_name + '';\n return '' + entity_dashboard_href + '';\n },\n return_hash_value: function(column_name, data_hash, cellLength) {\n const data_return = [null,null];\n const data_copy = Object.assign({}, data_hash);\n const sponsor_relationship_column_names = [\n \"clinical_trial_lead_sponsor\",\n \"clinical_trial_collaborators\",\n ];\n const other_relationship_column_names = [\n \"therapy_drag_along_pharma_ingredient_id\",\n \"clinical_trial_first_condition\",\n \"clinical_trial_first_medical_technology\",\n \"clinical_trial_first_therapy\",\n \"most_mentioned_entities_for_trial_conditions\", // currently hidden\n \"most_mentioned_entities_for_organization_conditions\",\n \"most_mentioned_condition_in_last12_months\",\n \"therapy_owner\",\n ];\n\n if (column_name === 'added_from') {\n let type_length = 0;\n let type = '';\n if (data_hash.type) {\n type_length = data_hash.type.length;\n type = data_hash.type\n }\n if ((data_hash.title.length + type_length) > cellLength) {\n data_return[1] = data_hash.title;\n data_copy.title = data_copy.title.substr(0,cellLength-type_length) + \"...\";\n }\n if (data_hash.url) {\n data_return[0] = type + '' + data_copy.title + ''\n }\n else {\n data_return[0] = type + data_copy.title\n }\n }\n else if (sponsor_relationship_column_names.includes(column_name)) {\n data_return[0] = this.transform_trial_sponsor_hash(data_hash, cellLength);\n data_return[1] = data_hash.name;\n }\n else if (other_relationship_column_names.includes(column_name)) {\n data_return[0] = this.transform_entity_relationship_hash(data_hash, cellLength);\n data_return[1] = data_hash.name;\n }\n else {\n data_return[0] = \"WIBBLE WOBBLE\";\n data_return[1] = data_hash.name;\n }\n return data_return;\n },\n return_hash_array_value: function(column_name, data_hash_array, cellLength){\n const data_return = [null,null];\n const data_copy = Object.assign({}, data_hash_array);\n\n if (column_name === 'clinical_trial_collaborators') {\n var collaborator_info_array = data_hash_array.map(dh => this.transform_trial_sponsor_hash(dh, cellLength));\n data_return[0] = collaborator_info_array.join(',');\n data_return[1] = 'Collaborators';\n }\n return data_return\n },\n render: function () {\n var hover_state = this.state.hover_state === true ? ' list_entry_hover' : '';\n var sponsor = this.props.column_data[0].sponsor;\n var company_removed = '';\n /**\n * Truncate the cell value according to the num of columns (0 to 8 columns). More columns, less text:\n *\n * Num of columns | gt\n * 1 column -> 166\n * 2 columns -> 76\n * 3 columns -> 46\n * 4+ columns -> 25\n */\n const cellLengths = [0, 166, 76, 46, 25, 25, 25, 25, 25];\n let cellLength = cellLengths[this.state.column_settings.length]\n if(this.state.removal_state === true){\n company_removed = ' company_removed_fade'\n }\n\n const class_names = ['list_cell', 'list_other_cell', 'sorted_by_null', 'default_sorted_by_null', 'list_column_0'];\n\n const widthAdjustment = this.props.columnWidths[this.props.columnWidthsIndex] + 'px';\n const widthStyle = {\n width: widthAdjustment,\n maxWidth: widthAdjustment,\n minWidth: widthAdjustment,\n display: \"table-cell\"\n };\n\n var content =
     
    ;\n var column_name_to_null = {\n studies_twelve_m:'0',\n studies_i:'0',\n studies_ii:'0',\n studies_iii:'0',\n studies_iv:'0',\n studies_active:'0',\n employee_count:'---',\n studies_completed:'0',\n sf_accounts:'0',\n sf_leads:'0',\n sf_user:'no activity in the past year',\n sf_team:'no activity in the past year',\n sf_open:'N',\n sf_closed:'N',\n funding_twelve_m:'N',\n funding_twentyfour_m:'N',\n orphan_drug_twelve_m:'N',\n preclinical_twelve_m:'N',\n registered_phasei_twelve_m:'0',\n registered_phase_ii_twelve_m:'0',\n registered_phase_iii_twelve_m:'0',\n highest_phase_mentioned:'0'\n };\n var null_effect = [null,0,\"null\",\"0\",\"\"];\n var financial_columns = [\n 'cumulative_funding_current',\n 'cumulative_funding_prior_year',\n 'cumulative_funding_two_years_prior',\n 'r_and_d_expense_current_year',\n 'r_and_d_expense_prior_year',\n 'r_and_d_expense_two_years_prior',\n 'annual_revenue_prior_year',\n 'annual_revenue_two_years_prior',\n 'r_and_d_expense_most_recent',\n 'annual_revenue_most_recent',\n 'cumulative_funding_sum_of_current_and_last_year',\n 'cumulative_funding_sum_of_current_and_last_two_years',\n ]\n var signed_financial_columns = ['delta_between_this_year_and_last_year_funding']\n\n if(this.state.column_settings.length > 0){\n const lastActivityRegex = new RegExp(/last_activity$/);\n content = _.map(this.props.column_data, function(element, index){\n var settings_index = index-1;\n if(index !== 0) {\n var column_value = element;\n var hover_title = '';\n\n if (this.props.type_ref === \"organizations\" && !sponsor) {\n column_value = this.props.nonSponsorLabel;\n } else if(financial_columns.includes(this.state.column_settings[settings_index].column_name)){\n column_value = makeMillions(element);\n } else if (signed_financial_columns.includes(this.state.column_settings[settings_index].column_name)) {\n column_value = makeMillionsSigned(element);\n } else if(null_effect.includes(column_value)) {\n if(Object.keys(column_name_to_null).includes(this.state.column_settings[settings_index].column_name)){\n column_value = column_name_to_null[this.state.column_settings[settings_index].column_name];\n }\n else {\n column_value = '---';\n }\n }\n else {\n if(this.state.column_settings[settings_index].data_type === 'boolean') {\n if(element === true) {\n column_value = 'Y';\n }\n else{\n column_value = 'N';\n }\n }\n else if(this.state.column_settings[settings_index].data_type === 'date') {\n if(this.state.column_settings[settings_index].column_name.startsWith('sf_')){\n column_value = moment.parseZone(element).add(12, 'h').format(\"MMM DD YYYY\");\n }\n else{\n column_value = moment.parseZone(element).format(\"MMM DD YYYY\");\n }\n }\n else if(this.state.column_settings[settings_index].data_type === 'int') {\n column_value = commifyNumber(parseInt(element) || 0);\n if(this.state.column_settings[settings_index].column_name === 'employee_count'){\n if(element === 20000){\n column_value = '20,000+';\n }\n else{\n column_value = 'approx. ' + column_value;\n }\n }\n }\n else if (this.state.column_settings[settings_index].data_type === 'hash') {\n const columnName = this.state.column_settings[settings_index].column_name;\n var hash_return = this.return_hash_value(columnName, element, cellLength);\n column_value = hash_return[0];\n if (hash_return[1]) {\n hover_title = hash_return[1];\n }\n }\n else if(this.state.column_settings[settings_index].data_type === 'hash_array') {\n var hash_array_return = this.return_hash_array_value(this.state.column_settings[settings_index].column_name, element, cellLength);\n column_value = hash_array_return[0];\n if (hash_array_return[1]) {\n hover_title = hash_array_return[1];\n }\n }\n else if(!lastActivityRegex.test(this.state.column_settings[settings_index].column_name)) {\n if (column_value.length > cellLength) {\n hover_title = column_value;\n column_value = column_value.substr(0, cellLength) + \"...\";\n }\n }\n }\n let class_names = (this.state.column_settings[settings_index].css_classes) ? [this.state.column_settings[settings_index].css_classes] : [];\n class_names.push('list_cell', 'list_column_calc', 'rspec_cell_' + index);\n class_names.push('list_other_cell');\n class_names.push('sorted_by_' + this.state.column_settings[settings_index].current_sort);\n class_names.push('default_sorted_by_' + this.state.column_settings[settings_index].default_sort);\n\n if(this.props.is_editable === false && !_.include(class_names[0], 'fullstory_excluded')){\n class_names.push('fullstory_excluded');\n }\n\n return (\n \n \n \n );\n }\n }.bind(this));\n }\n\n return (\n
    \n {content}\n
    \n );\n }\n});\n\nconst EmptyColumnRow = createReactClass({\n mixins: [Reflux.listenTo(ColumnSettingsStore,\"update_settings\")],\n getInitialState: function(){\n return {\n column_settings:[]\n }\n },\n update_settings: function(column_settings) {\n this.setState({\n column_settings: column_settings\n });\n },\n render: function () {\n\n const classNames = ['list_cell', 'list_other_cell', 'list_empty_cell', 'sorted_by_null', 'default_sorted_by_null', 'list_column_0'];\n\n const widthAdjustment = this.props.columnWidths[this.props.columnWidthsIndex] + 'px';\n const widthStyle = {width: widthAdjustment, maxWidth: widthAdjustment, minWidth: widthAdjustment};\n\n let content =
     
    ;\n if(this.state.column_settings.length > 0){\n content = _.map(this.state.column_settings, function(element, index){\n\n const contentClassNames = ['list_cell', 'list_other_cell', 'list_column_calc', 'list_empty_cell', 'sorted_by_' + this.state.column_settings[index].current_sort, 'default_sorted_by_' + this.state.column_settings[index].default_sort, 'list_column_' + this.state.column_settings[index].column_index];\n\n return (\n
     
    \n );\n }.bind(this));\n }\n return (\n
    \n {content}\n
    \n );\n }\n});\n\nconst ColumnRows = createReactClass({\n mixins: [Reflux.listenTo(pivotListColumnSettingsStore, 'updateContainerHeightState'), Reflux.listenTo(ColumnControlsStore,\"toggleControlsState\")],\n getInitialState: function(){\n return {\n controlsOpen: '',\n listTableContainerHeight: pivotListColumnSettingsStore.state.listTableContainerHeight\n }\n },\n updateContainerHeightState: function(newState) {\n this.setState({\n listTableContainerHeight:newState.listTableContainerHeight\n });\n },\n toggleControlsState: function(controlsOpen) {\n this.setState({\n controlsOpen: controlsOpen\n });\n },\n componentDidMount: function() {\n this.scroller.addEventListener(\"wheel\", this.scrollController);\n },\n componentWillUnmount: function() {\n this.scroller.removeEventListener(\"wheel\", this.scrollController);\n },\n scrollController: function(e) {\n\n if(this.state.controlsOpen === 'checked') {\n return;\n }\n\n let delta = e.wheelDelta || -e.detail;\n let shiftKey = e.shiftKey;\n\n ColumnControlsActions.scrollWheelControls(delta, shiftKey, this.scroller);\n\n },\n render: function () {\n const columnWidthsIndex = this.props.list_object.columns_chosen.length-1;\n const listControls = ;\n const header = ;\n const columns = this.props.list_object.list_entries.map(function(entry, index){\n if(entry[0]){\n return \n }\n else {\n return \n }\n }.bind(this));\n const controls_open = this.props.list_view === 'first' ? 'checked' : '';\n const modify_list_checkbox = ;\n\n const listTableContainerHeight = this.state.listTableContainerHeight - 69\n const istTableContainerHeightInPx = listTableContainerHeight + 'px';\n const adjustedStyle = {maxHeight: istTableContainerHeightInPx, height: istTableContainerHeightInPx, minHeight: istTableContainerHeightInPx, overflow: 'hidden', overflowY: \"auto\"};\n\n const userIsModifyingColumns = this.state.controlsOpen === \"checked\";\n if (userIsModifyingColumns) {\n adjustedStyle.visibility = \"hidden\"\n }\n\n return (\n
    \n
    \n {modify_list_checkbox}\n
    \n {header}\n
    this.scroller = elem} id='list_entries_scroll_data' style={adjustedStyle}>\n {columns}\n
    \n
    \n
    \n {listControls}\n
    \n
    \n
    \n );\n }\n});\n\nexport default ColumnRows;\n","import ListTableHorizontalScroll from \"./listTableHorizontalScroll\";\nimport ListTableVerticalScroll from \"./listTableVerticalScroll\";\nimport CompanyRows from \"./companyRows\";\nimport ColumnRows from \"./columnRow\";\n\nconst ListTable = createReactClass({\n mixins: [Reflux.listenTo(pivotListColumnSettingsStore, 'updateSettingsState')],\n getInitialState: function(){\n return {\n listTableContainerHeight: pivotListColumnSettingsStore.state.listTableContainerHeight\n }\n },\n updateSettingsState: function(newState) {\n this.setState({\n listTableContainerHeight:newState.listTableContainerHeight\n });\n },\n render: function () {\n let horizontalScrolling = null;\n let verticalScrolling = null;\n\n const columnWidths = [820, 820, 400, 260, 190, 180, 180, 180, 180];\n\n const listTableContainerHeight = this.state.listTableContainerHeight + 'px';\n const columnWidthsIndex = this.props.list_object.columns_chosen.length-1;\n\n horizontalScrolling = ;\n verticalScrolling = ;\n\n let adjustedStyle = {maxHeight: listTableContainerHeight, height: listTableContainerHeight, minHeight: listTableContainerHeight, overflow: 'hidden'};\n\n return (\n
    \n {verticalScrolling}\n
    \n \n \n
    \n {horizontalScrolling}\n
    \n );\n }\n});\n\nexport default ListTable;\n","import ModifyListButton from \"./modifyListButton\";\nimport PivotlistFilterControls from \"./filterControls/pivotListFilterControls\";\nimport ListTable from \"./table/listTable\";\n\nconst ListDisplay = createReactClass({\n getInitialState: function(){\n return {\n controls_open:this.props.list_view === 'first' ? 'checked' : ''\n }\n },\n restore_company: function(company_id) {\n RowRemovalActions.refreshRestore(company_id)\n },\n remove_company: function(company_id, list_entry) {\n RowRemovalActions.refreshRemove(company_id, list_entry)\n },\n processLastActivityDate: function(listEntries, lastActivityIndex) {\n let returnData = [];\n _.each(listEntries, function(entry){\n let dateValue = \"---\";\n if(entry[lastActivityIndex] !== null) {\n dateValue = \"\" + moment.parseZone(entry[lastActivityIndex]).format(\"MMM DD YYYY\") + \"\";\n }\n entry[lastActivityIndex] = dateValue;\n returnData.push(entry);\n }, this);\n return returnData;\n },\n UNSAFE_componentWillMount:function(){\n const lastActivityRegex = new RegExp(/last_activity$/);\n const columnsChosen = this.props.list_object.columns_chosen;\n const lastActivityIndex = columnsChosen.findIndex(entry => lastActivityRegex.test(entry.column_name));\n if(lastActivityIndex !== -1) {\n this.props.list_object.columns_chosen[lastActivityIndex].data_type = \"text\";\n this.props.list_object.list_entries = this.processLastActivityDate(this.props.list_object.list_entries, lastActivityIndex);\n }\n\n const offset = 72; // $('.fixed_header_element').height() + $('.modify_list_header').height() + 40;\n let listTableContainerHeight = $(window).height();\n\n $(\"body\").addClass(\"list_body_overflow_y_hidden\");\n\n const getElementHeight = (domId) => {\n let domElement = document.querySelector(domId);\n let domStyle = window.getComputedStyle(domElement);\n let domMargin = parseFloat(domStyle['marginTop']) + parseFloat(domStyle['marginBottom']);\n return Math.ceil(domElement.offsetHeight + domMargin);\n };\n\n // temporary solution to the edge case of users with small screen and/or resolutions were unable to see the \"clear all\" and \"done\" buttons.\n // see bug description: https://www.pivotaltracker.com/story/show/179269095\n //\n // a more robust solution, one that takes into account more than 8 column choices, has been shelved for this simpler, less intensive approach.\n //\n // Further consideration will be needed to ensure that this story is fully delivered: https://www.pivotaltracker.com/story/show/177800985\n // specifically:\n //\n // \"Care should be taken to ensure that the \"clear all\" and \"done\" buttons are always visible no matter the number of columns, nor the size of the user's viewport.\"\n //\n // for now, our solution is to enforce a body scroll when list container height is less than the minimum required to show 8 column choices.\n //\n // if a user's viewport defines a list container height smaller than 440px (the bare minimum to see the aforementioned buttons):\n //\n // - we will add a CSS class to the body that forces a scrollbar on the y-axis of the body so that the user can see:\n // - the \"clear all\" and \"done\" buttons for the modify list view\n // - the pagination, if any, at the bottom of the page\n // - we will enforce a minimum list container height so that the buttons are always in view\n //\n // -- GJ 2021.09.23\n\n const minListTableContainerHeight = 440;\n\n const miscBuffer = 50; // Accounting for any margins/padding\n const paginationHeight = this.props.list_length >= 30 ? 72 : 0; // QuerySelector was not able to select will_paginate even with id at the time of rendering\n const bodyPadding = 60; // Padding on the body\n\n const listTitleSectionHeight = getElementHeight(\"#list_title_and_bread_crumbs\");\n const listCreationDetailsHeight = getElementHeight(\"#list_creation_details\");\n const pivotListButtonsHeight = getElementHeight(\"#pivot_list_buttons\");\n\n const reservedSpace = bodyPadding + listTitleSectionHeight + listCreationDetailsHeight + pivotListButtonsHeight + paginationHeight + miscBuffer;\n listTableContainerHeight = window.innerHeight - reservedSpace;\n\n if(listTableContainerHeight < minListTableContainerHeight) {\n $(\"body\").addClass(\"list_body_overflow_y_scroll\");\n listTableContainerHeight = minListTableContainerHeight;\n }\n\n const columnChoicesPerPage = parseInt((listTableContainerHeight-offset)/36)-3;\n\n const totalColumnChoicePages = Math.ceil(parseFloat(this.props.list_object.columns_available.length/columnChoicesPerPage))\n\n ColumnsChosenActions.initialState(this.props.list_object.columns_chosen)\n pivotListColumnSettingsActions.initialState(this.props.interactableColumnsCount, columnChoicesPerPage, totalColumnChoicePages, listTableContainerHeight)\n },\n render: function () {\n const class_names = ['list_container' , 'w-1200'];\n\n if(!this.props.is_editable){\n class_names.push('fullstory_excluded');\n }\n this.props.list_object.list_entries = _.extend(new Array(30).fill([]), this.props.list_object.list_entries);\n\n return (\n
    \n \n \n \n
    \n );\n }\n});\n\nwindow.ListDisplay = ListDisplay;\nexport default ListDisplay;\n","import React, { useState } from \"react\"\nimport Button from \"../lds/Button\";\n\nfunction ListFeedPanel(props) {\n const { list_id, linked_to_feed, list_type } = props;\n\n const [creatingFeed, setCreatingFeed] = useState(false)\n\n const onCreateFeed = async () => {\n try {\n setCreatingFeed(true)\n\n const response = await fetch(`/feeds/${list_id}/create_feed_for_list`, {\n method: \"POST\",\n headers: {\n \"X-CSRF-Token\": document.querySelector(\"meta[name='csrf-token']\").getAttribute(\"content\"),\n }\n })\n\n if (response.status==403) {\n const { max_feeds, user_feeds_count } = await response.json()\n LegacyModalService.openModal(MaxFeedsErrorModal, {\n maxFeedCount: max_feeds,\n currentFeedCount: user_feeds_count,\n reloadAction: onCreateFeed,\n });\n } else {\n const feedCreateModalHtml = await response.text()\n LegacyModalService.openModal(LDSFeedSaveModal, {\n legacyModalContent: feedCreateModalHtml,\n });\n }\n } catch(e) {\n throw e;\n } finally {\n setCreatingFeed(false)\n }\n }\n\n return <>\n
    \n { list_type == \"Companies\" && }\n\n  \n { !linked_to_feed && (\n \n { creatingFeed ? \"Creating feed\" : \"Save Feed\" }\n \n )}\n  \n\n { linked_to_feed ? : }\n
    \n \n}\n\n\nconst MapViewButton = ({ list_id }) => {\n const click_action = function(e){\n e.preventDefault();\n\n window.location.href = `/mapping?query=&category=all_event&time_select=time_any&user_list_id=${list_id}`;\n }\n\n return (\n \n );\n}\n\nvar ViewFeedButton = (props) => {\n const click_action = function(e){\n e.preventDefault();\n window.location.assign(\"/feeds/\" + props.feed_id + \"/display_saved_feed\");\n }\n\n return(\n \n );\n}\n\nvar ViewActivityButton = (props) => {\n let list_type = String(props.list_type);\n const click_action = function(e){\n e.preventDefault();\n\n var url = `/facet_search?user_list_id=${props.list_id}&category=all_event&time_select=time_any`;\n\n if(props.is_crm_list){\n url = \"/facet_search?relationships%5B%5D=crm&category=all_event&time_select=time_any\"\n }\n window.location.assign(url);\n }\n return(\n \n );\n}\n\n\nwindow.ListFeedPanel = ListFeedPanel;\nexport default ListFeedPanel;\n","// future home of zymewire.com/lists\n// for now, simply the modal confirming multiple deletes at once\n\nvar DeleteListsConfirmationModal = (props) => {\n const deleted_selected_lists = function(){\n $(\"body\").addClass(\"wait\");\n var data = {lists_selected: props.lists_selected}\n $.ajax({\n url: '/lists/delete_lists',\n type: 'POST',\n data: data,\n success: function () {\n window.location.href = '/lists';\n // close_modal_control();\n }\n });\n }\n \n const cancel_delete = function(){\n close_modal_control();\n }\n\n var lists = 'that list';\n var list = 'that list';\n if(props.lists_selected.length > 1){\n lists = 'all ' + props.lists_selected.length + ' lists';\n list = 'those lists';\n }\n return (\n
    \n
    \n \n

    Are you sure?

    \n
    \n
    \n
    \n
    \n
    \n

    Are you sure you wish to delete {lists}? Any feeds that depend on {list} will be deleted or modified. This action cannot be undone and may take up to 5 minutes, depending on the size of the lists.

    \n
    \n
    \n
    \n
    \n
    \n \n \n
    \n
    \n );\n}\n\nwindow.DeleteListsConfirmationModal = DeleteListsConfirmationModal;\nexport default DeleteListsConfirmationModal;\n","import LegacyModalService from \"@javascript/globals/LegacyModalService\";\nimport Button from \"../lds/Button\";\nimport ButtonGroup from \"../lds/ButtonGroup\";\nimport { ModalBody, ModalFooter } from \"../lds/modal/Modal\";\nimport NameThisListCard from \"./nameThisListCard\";\nimport Icon from \"../lds/Icon\";\nimport Heading from \"../lds/typography/Heading\";\n\nconst ShareListModalBody = (props) => {\n /**\n * https://www.pivotaltracker.com/story/show/186622915\n * The keyword \"ref\" has a special meaning in React,\n * it should not be used.\n */\n const list = { ...props.list };\n\n const ctaVariant = props.checked === 0 ? \"disable\" : \"primary\";\n\n return (\n
    \n \n \n \n
    \n Select the user(s) you wish to share this list with. An email\n containing a link to this list will then be sent to them.\n
    \n \n
    \n\n \n \n \n Cancel\n \n\n \n Share List\n \n \n \n
    \n );\n};\n\nconst ShareListModalSuccess = ({ listName, userNames }) => {\n let sharedWith = <>;\n let namesForDisplay = userNames.map((name) => ({name}));\n\n if (userNames.length === 1) {\n sharedWith = namesForDisplay[0];\n } else {\n const finalName = namesForDisplay.pop();\n\n if (namesForDisplay.length > 1) {\n namesForDisplay = namesForDisplay.map((name) => (<>{name}{\", \"}));\n }\n\n sharedWith = <>{namesForDisplay} and {finalName};\n }\n\n return (\n <>\n \n \n\n List shared successfully!\n\n

    \n The list \"{listName}\" was shared with {sharedWith}.\n

    \n
    \n\n \n \n Close\n \n \n \n );\n};\n\nconst ShareListModalError = () => {\n return (\n <>\n \n \n We encountered an unexpected error.\n

    We're sorry, but something went wrong. Please reload the page.

    \n
    \n\n \n {\n window.location.reload();\n }}\n >\n Reload Page\n \n \n \n );\n};\n\nvar ShareListModal = createReactClass({\n getInitialState: function () {\n return {\n users: this.props.users,\n comment: \"\",\n checked: 0,\n modalStep: \"initial\",\n usersSharedWith: [],\n };\n },\n\n submit_form: function (e) {\n e.stopPropagation();\n e.preventDefault();\n var data = {\n comment: this.state.comment,\n users: _.map(\n _.filter(this.state.users, function (user) {\n if (user) {\n return user.checked;\n }\n }),\n function (u) {\n if (u) {\n return u.id;\n }\n }\n ),\n };\n if (data.users.length > 0) {\n $(\"body\").addClass(\"wait\");\n $.ajax({\n url: \"/lists/\" + this.props.list._id + \"/share_list\",\n type: \"POST\",\n headers: {\n \"X-CSRF-Token\": this.props.authenticity_token,\n },\n data: data,\n success: function (result) {\n $(\"body\").removeClass(\"wait\");\n this.setState({\n modalStep: \"success\",\n usersSharedWith: result.users,\n });\n }.bind(this),\n error: function () {\n $(\"body\").removeClass(\"wait\");\n this.setState({ modalStep: \"error\" });\n }.bind(this),\n });\n } else {\n alert(\n \"Hey man... you have to choose at least someone to share this list with.\"\n );\n }\n return false;\n },\n\n toggleUser: function (user_id) {\n var user = _.find(this.state.users, function (user) {\n if (user && user.id) {\n return user.id == user_id;\n }\n });\n user.checked = !user.checked;\n var checked = this.state.checked;\n if (user.checked) {\n checked++;\n } else {\n checked--;\n }\n this.setState({ users: this.state.users, checked: checked });\n },\n\n updateComment: function (comment) {\n this.setState({ comment: comment });\n },\n\n render: function () {\n return (\n <>\n {this.state.modalStep === \"initial\" && (\n \n )}\n\n {this.state.modalStep === \"success\" && (\n \n )}\n\n {this.state.modalStep === \"error\" && }\n \n );\n },\n});\n\nwindow.ShareListModal = ShareListModal;\nexport default ShareListModal;\n","import createReactClass from \"create-react-class\";\nimport Input from \"../../lds/Input\"\nimport ListModalAction from \"@javascript/stores/actions/pivotLists/listModalActions\";\n\nconst ListName = createReactClass({\n getInitialState: function () {\n return {listName: this.props.listName};\n },\n UNSAFE_componentWillReceiveProps: function(new_props){\n if(this.state.listName != new_props.listName){\n this.setState({listName: new_props.listName});\n }\n },\n handleChange: function(value) {\n this.setState({listName: value})\n ListModalAction.updateListName(value);\n },\n switchFeedCreation: function(e){\n e.preventDefault();\n ListModalAction.switchFeedCreation();\n },\n createList:function(e){\n e.preventDefault();\n ListModalAction.createList();\n return;\n },\n render: function(){\n // console.log(\"Create feed is: \" + this.props.createFeed);\n var topMargin = {marginTop:'10px'};\n var hide_submit = {display:'none'};\n return (\n
    \n
    \n
    \n \n\n
    \n
    \n \n \n \n
    \n
    \n
    \n
    \n );\n\n }\n\n})\n\nexport default ListName;","const OrgListCountDescription = (props) => {\n const toggleOrgList = function(e){\n e.preventDefault();\n ListModalAction.switchDisplayOrgList();\n }\n\n var desc;\n var fixed_height = {height:'54px'};\n var display_org_list;\n if(props.displayOrgList){\n display_org_list = Hide preview;\n }\n else {\n\n display_org_list = Show preview\n }\n\n if(props.justSponsor){\n if(props.sponsorList.length < props.total_sponsors){\n desc =

    Your list will be generated from the { props.sponsorList.length} most active {props.total_sponsors} {I18n.t(\"terminology.target_organization_title\")} companies in your search (ranked by event count). {display_org_list}

    ;\n }\n else{\n desc =

    Your list will be generated from the { props.sponsorList.length} {I18n.t(\"terminology.target_organization_title\")} companies in your search (ranked by event count). {display_org_list}

    ;\n }\n }\n else{\n if(props.allOrgList.length < props.all_org_count){\n desc =

    Your list will be generated from the { props.allOrgList.length} most active {props.all_org_count} organizations in your search (ranked by event count). {display_org_list}

    ;\n }\n else{\n desc =

    Your list will be generated from the { props.allOrgList.length} organizations in your search (ranked by event count). {display_org_list}

    ;\n }\n\n }\n\n return (\n
    \n
    \n {desc}\n
    \n
    \n );\n}\n\nexport default OrgListCountDescription;\n","function EntityListDisplay ({entityList}) {\n var entityListItems = entityList.map(function (entity) {\n var name = shortenText(27, entity.name);\n const key = name + \"_\" + entity.count;\n\n return (\n
  • \n {name} ({entity.count})\n
  • \n );\n });\n return
      {entityListItems}
    ;\n};\n\nexport default EntityListDisplay;\n","import EntityListDisplay from \"./EntityListDisplay\";\n\nconst ListDisplayPanel = ({ entityList }) => {\n if (entityList.length > 5) {\n var leftList = entityList.slice(0, 5);\n var rightList = entityList.slice(5);\n return (\n
    \n
    \n \n
    \n
    \n \n
    \n
    \n );\n } else {\n return (\n
    \n
    \n \n
    \n
    \n );\n }\n};\n\nexport default ListDisplayPanel;\n","import ListDisplayPanel from \"./listDisplayPanel\";\n\nconst EntityListHolder = function ({ sliceSize = 10, page, entityList }) {\n const start = page * sliceSize;\n const end = start + sliceSize;\n const entityListPage = entityList.slice(start, end);\n return ;\n};\n\nexport default EntityListHolder;\n","// this should be junked and all instances of it replaced with PaginationLinks see above PaginationHolder\nconst PaginationPage = (props) => {\n const change = function (e) {\n e.preventDefault();\n e.stopPropagation();\n props.changePage(props.page_number);\n }\n\n var display_no = props.page_number + 1;\n var classname = props.active ? \"active\" : \"\";\n return (\n
  • \n {display_no}\n
  • \n )\n}\n\nexport default PaginationPage;","import PaginationPage from \"./paginationPage\";\n\n// deprecatethis:\n// the above components should be junked once we deprecate the can_use_flagged_event_reminder feature flag as they are only used with old flagging components\n// UserListPage -> refactored into PageOfSelectableUsers for use across the application\n// UserColumn -> refactored into ColumnOfSelectableUsers for use across the application\n// FlagUserCheckbox -> refactored into SelectableUser for use across the application\n// this should be junked and all instances of it replaced with PaginationHolder\nconst UserPagination = (props) => {\n if (props.pages < 2) {\n return false;\n }\n\n var pages = [];\n var start_page = 0;\n var end_page = props.pages;\n\n if (props.display_size < props.pages) {\n end_page = props.display_size;\n if (start_page != props.current_page) {\n start_page = props.current_page - 5;\n if (start_page < 0) {\n start_page = 0;\n }\n end_page = start_page + props.display_size;\n if (end_page > props.pages) {\n end_page = props.pages;\n }\n }\n }\n\n for (var i = start_page; i < end_page; i++) {\n var active = i == props.current_page;\n pages.push();\n }\n\n var pagination_classes = ['pagination', 'flag_event_pagination'];\n\n return (\n
    \n
      \n {pages}\n
    \n
    \n );\n}\n\nexport default UserPagination;\n","import EntityListHolder from \"./EntityListHolder\";\nimport UserPagination from \"../../flagged_events/userPagination\";\n\nconst PagingOrgList = ({\n pageSize = 10,\n displayPage,\n displayOrgList,\n justSponsor,\n sponsorList,\n allOrgList\n}) => {\n const changePage = (page) => ListModalAction.displayPage(page)\n if(displayOrgList == false){\n return false;\n }\n\n const currentEntityListsPage = justSponsor ? sponsorList : allOrgList;\n const pages = Math.ceil(currentEntityListsPage.length/pageSize)\n return (\n
    \n \n \n
    \n );\n}\n\nexport default PagingOrgList;\n","import OrgListCountDescription from \"./orgListCountDescription\";\nimport PagingOrgList from \"./pagingOrgList\";\n\nconst OrgListDisplayPanel = function(props){\n return (
    \n \n \n
    \n );\n};\n\nwindow.OrgListDisplayPanel = OrgListDisplayPanel;\nexport default OrgListDisplayPanel;\n","import React from \"react\";\nimport PropTypes from \"prop-types\";\nimport SelectionControl from \"../selection_controls/SelectionControl\";\n\nconst RADIO_STATES = Object.freeze({\n unselected: \"unselected\",\n selected: \"selected\",\n});\n\nconst RADIO_ICONS = Object.freeze({\n unselected: \"radio\",\n selected: \"radio-filled\",\n});\n\nfunction RadioButtonItem({\n id,\n label,\n onClick,\n selection = RADIO_STATES.unselected,\n value,\n variant = \"active\", // TODO: replace\n styleOverride = {},\n}) {\n const commonProps = { id, onClick, label, value, variant, styleOverride };\n\n return (\n <>\n \n \n );\n}\n\nexport const RadioButtonItemPropTypes = {\n id: PropTypes.string,\n label: PropTypes.string,\n onClick: PropTypes.func,\n selection: PropTypes.oneOf([\"selected\", \"unselected\"]),\n value: PropTypes.string,\n variant: PropTypes.oneOf([\"active\", \"disable\"]),\n styleOverride: PropTypes.object,\n};\n\nRadioButtonItem.propTypes = RadioButtonItemPropTypes;\nexport default RadioButtonItem;\nexport { RADIO_STATES };\n","import RadioButtonItem, {\n RADIO_STATES,\n} from \"../../lds/selection_controls/RadioButtonItem\";\n\nconst SponsorOnlyListSwitch = (props) => {\n const switchSponsorList = function (event) {\n ListModalAction.switchSponsorFlag();\n };\n\n if (props.map_display) {\n return false;\n }\n\n var all_orgs = !props.justSponsor;\n\n const selectAll = () => !all_orgs && switchSponsorList();\n const selectSponsors = () => all_orgs && switchSponsorList();\n\n return (\n
    \n

    List is to include:

    \n
    \n
    \n \n
    \n
    \n \n
    \n
    \n
    \n );\n};\n\nwindow.SponsorOnlyListSwitch = SponsorOnlyListSwitch;\nexport default SponsorOnlyListSwitch;\n","import { ModalBody } from \"@javascript/reactComponents/lds/modal/Modal\";\nimport ListName from \"./listName\";\nimport OrgListDisplayPanel from \"./orgListDisplayPanel\";\nimport SponsorOnlyListSwitch from \"./sponsorOnlyListSwitch\"\n\nconst ListModalBody = (props) => {\n\tvar list_display;\n\tif(props.total_sponsors > 0) {\n\t\t\tlist_display =
    \n\t\t\t\t\t\n\t\t\t\t\t
    ;\n\t}\n\telse {\n\t\t\tlist_display =

    No organizations match this search

    ;\n\t}\n\n\t\n\treturn (\n \n

    \n You are generating a list of the organizations mentioned in your current\n event search. Your current search is narrowed to events that involve{\" \"}\n ALL of the following...\n

    \n \n {list_display}\n
    \n );\n}\n\nexport default ListModalBody;\n","import LegacyModalService from \"@javascript/globals/LegacyModalService\";\nimport Button from \"../../lds/Button\";\nimport { ModalFooter } from \"@javascript/reactComponents/lds/modal/Modal\";\nimport ButtonGroup from \"@javascript/reactComponents/lds/ButtonGroup\";\n\nconst ListModalFooter = (props) => {\n const createNewList = function(e){\n e.preventDefault();\n\n if (props.listName.trim() === \"\") {\n return;\n }\n\n ListModalAction.createList();\n return;\n }\n\n let ctaClass = (props.listName.trim() === \"\" || props.total_sponsors <= 0) ? \"button-disable\" : \"\"\n\n if(props.saving_list){\n return (\n \n \n \n );\n }\n else {\n return (\n \n \n \n \n \n \n );\n }\n}\n\nexport default ListModalFooter;\n","import PropTypes from \"prop-types\";\n\nimport Button from \"@javascript/reactComponents/lds/Button\";\nimport ButtonGroup from \"@javascript/reactComponents/lds/ButtonGroup\";\n\nimport Heading from \"@javascript/reactComponents/lds/typography/Heading\";\nimport Icon from \"@javascript/reactComponents/lds/Icon\";\n\nimport {\n ModalBody,\n ModalFooter,\n} from \"@javascript/reactComponents/lds/modal/Modal\";\n\nimport NavItem from \"@javascript/reactComponents/lds/NavItem\";\n\nconst ListModalSuccess = ({\n listId,\n}) => {\n const goToList = () =>\n location.assign(`/lists/${listId}?list_view=first`);\n\n return (\n <>\n \n \n \n List generated successfully!\n \n

    \n You can also access all your lists on  \n \n Lists\n \n   page.\n

    \n \n \n \n \n Close\n \n \n Go to List\n \n \n \n \n );\n};\n\nListModalSuccess.propTypes = {\n listId: PropTypes.string,\n};\n\nexport default ListModalSuccess;\n","import LegacyModalService from \"@javascript/globals/LegacyModalService\";\nimport {\n Modal,\n ModalHeader,\n} from \"@javascript/reactComponents/lds/modal/Modal\";\nimport ListModalBody from \"./listModalBody\";\nimport ListModalFooter from \"./listModalFooter\";\nimport ListModalSuccess from \"./listModalSuccess\";\n\nconst ListModalPanel = createReactClass({\n mixins: [Reflux.connect(ListModalActionStore)],\n getInitialState: function () {\n return ListModalActionStore.listModalData;\n },\n componentDidMount: function () {\n ListModalAction.initialLoad({\n dataLoaded: true,\n sponsorList: this.props.sponsorList,\n allOrgList: this.props.allOrgList,\n total_sponsors: this.props.total_sponsors,\n all_org_count: this.props.all_org_count,\n query: this.props.query,\n listName: this.props.listName,\n base_query: this.props.base_query,\n map_display: this.props.map_display,\n });\n },\n render: function () {\n if (this.state.dataLoaded == false) {\n return false;\n }\n\n return (\n \n New list from current search\n\n {this.state.succeeded ? (\n \n ) : (\n <>\n \n \n
    \n \n )}\n \n );\n },\n});\n\nwindow.ListModalPanel = ListModalPanel;\nexport default ListModalPanel;\n","const UnorderedList = (props) => {\n const itemList = props.items_list.map(function (item, index) {\n return
  • {item}
  • ;\n });\n return (
      {itemList}
    );\n};\n\nexport default UnorderedList;\n","import UnorderedList from \"./unorderedList\";\n\nconst TwoColumnList = (props) => {\n const columnLength = 5\n const start = props.page * props.slice_size;\n const end = start + props.slice_size;\n const items = props.list.slice(start, end);\n let returnDisplay;\n\n if (items.length > columnLength) {\n const leftList = items.slice(0, columnLength);\n const rightList = items.slice(columnLength);\n returnDisplay =\n
    \n
    \n \n
    \n
    \n \n
    \n
    ;\n }\n else {\n returnDisplay =\n
    \n
    \n \n
    \n
    ;\n }\n return returnDisplay;\n};\n\nwindow.TwoColumnList = TwoColumnList;\nexport default TwoColumnList;\n","import TwoColumnList from \"../../generic/htmlElements/twoColumnList\";\nimport PaginationHolder from \"../../generic/pagination/paginationHolder\";\n\n//Used in _copy_to_existing_list_success_modal partial\nconst ExistingCopyList = createReactClass({\n getInitialState: function () {\n return {page: 0};\n },\n changePage: function (page_number) {\n this.setState({page: page_number});\n },\n\n render: function () {\n var slice_size = 10;\n var display_size = 10;\n var page = this.state.page;\n var changePage = this.changePage;\n var current_page = this.state.page;\n var duplicate_list = this.props.duplicateSponsors;\n var list_count = duplicate_list.length;\n var pages = Math.ceil(list_count / 10);\n\n var list = duplicate_list.map(function (org_name) {\n var name = shortenText(27, org_name);\n return name\n });\n\n var pagination_classes = ['pagination', 'standard_pagination_holder'];\n\n return (\n
    \n \n \n
    \n );\n }\n});\n\nwindow.ExistingCopyList = ExistingCopyList;\nexport default ExistingCopyList;","export const DEFAULT_CATEGORY = \"All\";\nexport const DEFAULT_LIST_TYPE = \"default\";\nexport const LIST_CREATE_REQUEST_UNSTARTED = \"LIST_CREATE_REQUEST_UNSTARTED\";\nexport const LIST_CREATE_REQUEST_STARTED = \"LIST_CREATE_REQUEST_STARTED\";\nexport const LIST_CREATE_REQUEST_SUCCESS = \"LIST_CREATE_REQUEST_SUCCESS\";\nexport const LIST_CREATE_REQUEST_FAILURE = \"LIST_CREATE_REQUEST_FAILURE\";\n","import PropTypes from \"prop-types\";\n\nexport default function Container({ children, className = \"\", id, style }) {\n const classNames = [\"lds-container\", className];\n return (\n
    \n {children}\n
    \n );\n}\n\nContainer.propTypes = {\n className: PropTypes.string,\n id: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),\n style: PropTypes.object\n};\n","import Reflux from \"reflux\";\n\nconst UserListsActions = Reflux.createActions([\n \"initialState\",\n \"loadMore\",\n \"sort\",\n \"searchName\",\n \"selectCategory\",\n \"selectList\",\n \"selectAllLists\",\n \"clearSearch\",\n \"confirmListsDeletion\",\n]);\n\nexport default UserListsActions;\n","import { DEFAULT_CATEGORY } from \"../../constants/lists/list_constants\";\n\nclass ListsStoreClient {\n constructor({ basePath }) {\n this.basePath = basePath;\n }\n\n async search(data) {\n const params = new URLSearchParams({\n name: data.params.name,\n page: data.params.page,\n category: data.selectedCategory,\n sort: data.selectedSortOption.value,\n });\n const url = new URL(\n `/${this.basePath}/search?${params}`,\n window.location.origin\n );\n\n try {\n const response = await fetch(url);\n if (response.ok) {\n const res = await response.json();\n data.totalCount = res.total_count;\n data.currentCount = res.lists.length;\n return res.lists;\n } else {\n console.error(response);\n }\n } catch (error) {\n console.error(error);\n }\n }\n\n async initialState(data) {\n this._resetAll(data);\n await this.fetchConfigs(data);\n const lists = await this.search(data);\n data.lists = lists;\n }\n\n async fetchConfigs(data) {\n const response = await fetch(`/${this.basePath}/configs`);\n const res = await response.json();\n\n data.sortOptions = res.sorting;\n data.selectedSortOption = data.sortOptions[0];\n const sum = Object.values(res.categories_count).reduce(\n (acc, curr) => acc + curr,\n 0\n );\n data.categories = { All: sum, ...res.categories_count };\n data.originalCategories = { ...data.categories };\n }\n\n async loadMore(data) {\n data.params.page++;\n const lists = await this.search(data);\n data.lists.push(...lists);\n data.currentCount = data.lists.length;\n }\n\n async sort(data, option) {\n data.selectedSortOption = option;\n data.params.page = 1;\n const lists = await this.search(data);\n data.lists = lists;\n }\n\n async searchName(data, name) {\n data.params.page = 1;\n data.params.name = name.trim();\n const lists = await this.search(data);\n data.lists = lists;\n }\n\n async selectCategory(data, category) {\n data.selectedCategory = category;\n data.selectedSortOption = data.sortOptions[0];\n data.params = {\n page: 1,\n name: \"\",\n };\n\n const lists = await this.search(data);\n data.lists = lists;\n }\n\n async clearSearch(data) {\n await this.searchName(data, \"\")\n }\n\n _resetAll(data) {\n data.params = {\n page: 1,\n name: \"\",\n };\n\n data.lists = [];\n data.selectedLists = new Map();\n data.selectedSortOption = data.sortOptions[0];\n data.selectedCategory = DEFAULT_CATEGORY;\n\n data.currentCount = 0;\n data.totalCount = 0;\n\n data.categories = { ...data.originalCategories };\n }\n}\n\nexport default ListsStoreClient;\n","import Reflux from \"reflux\";\nimport UserListsActions from \"../actions/lists/UserListsActions\";\nimport { DEFAULT_CATEGORY } from \"../../constants/lists/list_constants\";\nimport ListsStoreClient from \"./ListsStoreClient\";\n\nconst UserListsStore = Reflux.createStore({\n listenables: [UserListsActions],\n init() {\n this.storeClient = new ListsStoreClient({ basePath: \"user_lists\" });\n this.data = {\n categories: {},\n originalCategories: {},\n selectedCategory: DEFAULT_CATEGORY,\n sortOptions: [],\n selectedSortOption: \"\",\n lists: [],\n selectedList: null,\n selectedLists: new Map(),\n currentCount: 0,\n totalCount: 0,\n params: {\n name: \"\",\n page: 1,\n },\n };\n },\n getInitialState() {\n this.onInitialState();\n },\n async onInitialState() {\n await this.storeClient.initialState(this.data);\n this.trigger(this.data);\n },\n async onLoadMore() {\n await this.storeClient.loadMore(this.data);\n this.trigger(this.data);\n },\n async onSort(item) {\n await this.storeClient.sort(this.data, item);\n this.trigger(this.data);\n },\n async onSearchName(name) {\n await this.storeClient.searchName(this.data, name);\n this.trigger(this.data);\n },\n async onSelectCategory(label) {\n await this.storeClient.selectCategory(this.data, label);\n this.trigger(this.data);\n },\n async onClearSearch() {\n await this.storeClient.clearSearch(this.data)\n this.trigger(this.data)\n },\n async onConfirmListsDeletion() {\n const params = new URLSearchParams({\n list_ids: [...this.data.selectedLists.keys()],\n });\n\n const url = new URL(\n `/user_lists/destroy_lists?${params}`,\n window.location.origin\n );\n\n const csrfToken = document\n .querySelector(\"meta[name='csrf-token']\")\n .getAttribute(\"content\");\n\n const response = await fetch(url, {\n method: \"DELETE\",\n headers: { \"X-CSRF-Token\": csrfToken },\n });\n\n if (response.ok) {\n const currentCategory = this.data.selectedCategory;\n await this.storeClient.fetchConfigs(this.data);\n this.data.lists = await this.storeClient.search(this.data);\n this.data.selectedCategory = currentCategory;\n this.data.selectedLists = new Map();\n this.trigger(this.data);\n } else {\n console.error(response);\n }\n },\n onSelectList(list) {\n const { selectedLists } = this.data;\n\n if (selectedLists.has(list.id)) {\n selectedLists.delete(list.id);\n } else {\n selectedLists.set(list.id, list);\n }\n\n this.trigger(this.data);\n },\n onSelectAllLists() {\n // If user has selected all lists previously\n if (this.data.selectedLists.size === this.data.lists.length) {\n this.data.selectedLists = new Map();\n } else {\n this.data.lists.forEach((list) => this.data.selectedLists.set(list.id, list));\n }\n\n this.trigger(this.data);\n },\n});\n\nwindow.UserListsStore = UserListsStore;\nexport default UserListsStore;\n","import Button from \"../../lds/Button\";\nimport ButtonGroup from \"../../lds/ButtonGroup\";\n\nexport default function CategoryButtonGroup({\n categories,\n selected,\n onCategorySelected,\n}) {\n const allCategories = Object.keys(categories).map((key) => ({\n label: key,\n count: categories[key],\n }));\n\n const parentStyles = {\n paddingBottom: \"var(--space-600)\",\n };\n\n return (\n
    \n
    \n \n {allCategories.map(({ label, count }) => (\n onCategorySelected(label)}\n >\n {label} ({count})\n \n ))}\n \n
    \n
    \n );\n}\n","import { useState, useEffect } from \"react\";\nimport Button from \"../../lds/Button\";\nimport Input from \"../../lds/Input\";\nimport Dropdown, { DropdownTrigger } from \"../../lds/dropdown/Dropdown\";\nimport DropdownList from \"../../lds/dropdown/DropdownList\";\n\nexport default function SearchFilters({\n searchValue,\n sortOptions,\n selectedSortOption,\n onSortOptionUpdate,\n onSearchValueUpdate,\n}) {\n const [search, setSearch] = useState(\"\");\n const [open, setOpen] = useState(false);\n\n const handleItemSelected = (item) => {\n setOpen(false);\n onSortOptionUpdate(item);\n };\n\n sortOptions = [...sortOptions];\n sortOptions.forEach((opt) => {\n opt.selected = opt.value === selectedSortOption.value;\n });\n\n useEffect(() => {\n setSearch(searchValue);\n }, [searchValue]);\n\n return (\n
    \n onSearchValueUpdate(search)}\n size=\"medium\"\n placeholder=\"Search list names\"\n showLabel={false}\n leadingIcon={\"search\"}\n width=\"50%\"\n />\n onSearchValueUpdate(search)}\n >\n Search\n \n\n
    \n\n
    \n setOpen(false)}\n onItemSelected={handleItemSelected}\n >\n \n {}}\n size=\"medium\"\n showLabel={false}\n helperTextVariant=\"hidden\"\n trailingIcon={\"chevron-\" + (open ? \"up\" : \"down\")}\n value={selectedSortOption.label}\n width=\"100%\"\n />\n \n\n \n \n
    \n
    \n );\n}\n","import Button from \"../../lds/Button\";\n\nexport default function ListPageFooter({\n showSelectAll = false,\n currentCount,\n onLoadMore,\n onSelectAllLists,\n isAllSelected,\n footerText,\n disableLoadMore,\n}) {\n const variant = disableLoadMore ? \"disable\" : \"primary\";\n\n let selectAllBtn = null;\n if (showSelectAll) {\n selectAllBtn = (\n
    \n \n {}}\n />\n
    \n );\n }\n return (\n
    \n
    \n
    \n
    {footerText}
    \n
    {selectAllBtn}
    \n
    \n
    \n
    \n
    \n \n
    \n
    \n
    \n
    \n );\n}\n","import React, { useContext } from 'react';\nimport Button from '../../lds/Button';\nimport { TableContext } from './ListTable';\n\nfunction ListTableHeader() {\n const { showHeader, editable, enableDeleteBtn, onDeleteButtonClick } = useContext(TableContext);\n\n let deleteButton = null;\n\n if (editable) {\n const variant = enableDeleteBtn ? \"critical\" : \"disable\";\n\n deleteButton = (\n \n \n Delete\n \n \n );\n }\n\n const listNameStyles = {\n width: \"70%\",\n }\n\n return (\n \n {\n showHeader &&\n \n List Name\n Number of Entries\n {deleteButton}\n \n }\n\n \n )\n}\n\nexport default ListTableHeader;\n","import React, { useContext } from 'react';\n\nimport EntityChip from \"../../shared/chips/EntityChip\";\nimport { TableContext } from './ListTable';\n\nfunction ListRowChip({ label }) {\n const { showTag } = useContext(TableContext);\n\n if (!showTag) {\n return null;\n }\n\n return (\n \n )\n}\n\nexport default ListRowChip;\n","import React, { useContext } from \"react\";\nimport { TableContext } from \"./ListTable\";\nimport ListRowChip from \"./ListRowChip\";\n\nfunction ListTableRow({ list }) {\n const { editable, onListSelected, categories, selectedRows } =\n useContext(TableContext);\n let editColumn = null;\n\n if (editable) {\n editColumn = (\n \n \n \n );\n }\n\n return (\n \n \n \n \n \n {list.entity_count}\n \n {editColumn}\n \n );\n}\n\nexport default ListTableRow;\n","import React, { useContext } from 'react';\nimport { TableContext } from './ListTable';\nimport ListTableRow from './ListTableRow';\n\nfunction ListTableBody() {\n const { lists } = useContext(TableContext);\n\n const listRows = lists.map((list) => {\n return ;\n });\n\n return (\n \n {listRows}\n \n )\n}\n\nexport default ListTableBody;","import React from 'react';\nimport { createContext } from 'react';\nimport ListTableHeader from './ListTableHeader';\nimport ListTableBody from './ListTableBody';\n\nconst TableContext = createContext({\n onListSelected: (e) => {},\n lists: [],\n editable: false,\n showHeader: false,\n showTag: false,\n categories: [],\n enableDeleteBtn: false,\n selectedRows: new Map(),\n});\n\nfunction ListTable({\n lists,\n editable,\n showHeader,\n showTag,\n onListSelected,\n enableDeleteBtn,\n selectedRows,\n onDeleteButtonClick\n}) {\n\n const styles = {\n // Prevent weird top border when header isn't shown\n borderCollapse: showHeader ? \"separate\" : \"collapse\"\n }\n\n return (\n \n \n \n \n
    \n \n );\n}\n\nexport default ListTable;\nexport { TableContext };\n","import NO_LISTS_SVG from \"../../../../images/lds/no-lists.svg\";\n\n/** Render a helpful message when no lists present */\nexport default function NoLists() {\n // Currently no tokens for a margin top of 124px\n const style = { marginTop: \"124px\" };\n const textStyle = { marginTop: \"var(--space-1000)\" };\n\n return (\n \n \n\n \n You currently do not have any lists matching this list type\n \n
    \n );\n}\n","function ListSearchDescription({searchValue, selectedCategory, onClearSearch}) {\n return (\n
    \n \n Showing results for \n {searchValue}\n in \n {selectedCategory}\n \n  \n onClearSearch(searchValue)}>Clear Search\n \n
    \n )\n}\n\nexport default ListSearchDescription;\n","import { DEFAULT_CATEGORY } from \"@javascript/constants/lists/list_constants\";\nimport Container from \"@javascript/reactComponents/lds/Container\"\nimport UserListsStore from \"@javascript/stores/lists/UserListsStore\";\nimport UserListsActions from \"@javascript/stores/actions/lists/UserListsActions\";\nimport CategoryButtonGroup from \"./CategoryButtonGroup\";\nimport SearchFilters from \"./SearchFilters\";\nimport ListPageFooter from \"./ListPageFooter\";\nimport ListTable from \"./ListTable\";\nimport createReactClass from \"create-react-class\";\nimport ListDeleteModal from \"./ListDeleteModal\";\nimport NoLists from \"./NoLists\";\nimport ListSearchDescription from \"./ListSearchDescription\"\n\nconst UserListsComponent = createReactClass({\n mixins: [Reflux.connect(UserListsStore)],\n getInitialState() {\n return {\n ...UserListsStore.data,\n isModalOpen: false,\n };\n },\n render() {\n const {\n categories,\n selectedCategory,\n sortOptions,\n selectedSortOption,\n lists,\n selectedLists,\n currentCount,\n totalCount,\n isModalOpen,\n params: { name },\n } = this.state;\n\n if (!lists) return null;\n\n const blankSearch = name === \"\";\n const enableDeleteBtn = selectedLists.size > 0;\n const showTag = selectedCategory === DEFAULT_CATEGORY;\n\n let footerText = `Showing ${currentCount} of ${categories[selectedCategory]} lists `;\n if (!blankSearch) {\n footerText += \"based on search\";\n }\n\n const hasLists = categories[selectedCategory] > 0\n const hasFilteredLists = lists.length > 0;\n\n const listSearchResults = <>\n UserListsActions.selectList(list)}\n onDeleteButtonClick={() => {\n this.setState({ isModalOpen: true });\n }}\n />\n \n\n return (\n <>\n \n\n
    \n\n { hasLists || isModalOpen ?\n \n \n\n { !blankSearch && (\n \n )}\n\n { hasFilteredLists ? listSearchResults : }\n\n { isModalOpen && (\n {\n UserListsActions.confirmListsDeletion();\n }}\n cancelModal={() => {\n this.setState({ isModalOpen: false });\n }}\n resetCategory={() => {\n UserListsActions.selectCategory(DEFAULT_CATEGORY);\n }}\n selectedLists={selectedLists}\n lists={lists}\n />\n )}\n : \n }\n { hasFilteredLists && (\n \n )}\n \n );\n },\n});\n\nexport default UserListsComponent;\n","import Reflux from \"reflux\";\n\nconst ColleaguesListsActions = Reflux.createActions([\n \"initialState\",\n \"selectCategory\",\n]);\n\nexport default ColleaguesListsActions;\n","import Reflux from \"reflux\";\nimport ColleaguesListsActions from \"../actions/lists/ColleagueListsActions\";\nimport { DEFAULT_CATEGORY } from \"../../constants/lists/list_constants\";\n\nconst ColleaguesListsStore = Reflux.createStore({\n listenables: [ColleaguesListsActions],\n init() {\n this.data = {\n categories: {},\n selectedCategory: DEFAULT_CATEGORY,\n lists: [],\n _originalLists: [],\n };\n },\n async onInitialState({ categories }) {\n this.data.categories = {};\n this.data.selectedCategory = DEFAULT_CATEGORY;\n this.data.lists = [];\n this.data._originalLists = [];\n\n await this.configureCategoryOptions(categories);\n await this.getColleaguesLists();\n\n this.trigger(this.data);\n },\n onSelectCategory(category) {\n this.data.selectedCategory = category;\n\n // Filter\n let lists = [...this.data._originalLists];\n\n if (category !== \"All\") {\n lists = this.data._originalLists.filter(\n (list) => list.type_ref === category\n );\n }\n\n this.data.lists = this.formatUserLists(lists);\n this.trigger(this.data);\n },\n async configureCategoryOptions(categories) {\n this.data.categories = categories.reduce((acc, current) => {\n acc[current] = 0;\n return acc;\n }, {});\n },\n async getColleaguesLists() {\n const response = await fetch(\"/colleagues_lists\");\n\n if (response.ok) {\n const { lists } = await response.json();\n this.data._originalLists = lists;\n\n this.setcategories(lists);\n this.data.lists = this.formatUserLists(lists);\n } else {\n // TODO: Error handling\n }\n },\n /** Indexes the lists based on the first letter of each name */\n formatUserLists(lists) {\n const formatted = {};\n\n // Populate first-level index\n lists.forEach((list) => {\n const firstLetter = list.user.name[0].toUpperCase();\n formatted[firstLetter] ||= [];\n\n formatted[firstLetter].push(list);\n });\n\n // Sort each bucket\n Object.keys(formatted).forEach((letter) => {\n const bucket = formatted[letter];\n\n bucket.sort((listA, listB) =>\n listA.user.name > listB.user.name ? 1 : -1\n );\n });\n\n return formatted;\n },\n setcategories(lists) {\n Object.keys(this.data.categories).forEach((category) => {\n const count = lists.filter((list) => list.type_ref === category).length;\n this.data.categories[category] = count;\n });\n },\n});\n\nexport default ColleaguesListsStore;\n","import { useState, useEffect } from \"react\";\nimport ListTable from \"../ListTable\";\nimport ColleaguesListsStore from \"../../../../stores/lists/ColleagueListStore\";\n\n/** An expansion panel that grows to show a table */\nexport default function ColleaguesListRow({ lists, evenChild }) {\n const [open, setOpen] = useState(false);\n const { name, id } = lists[0].user;\n const panelStyle = {\n backgroundColor: evenChild ? \"var(--color-gray-200)\" : \"white\",\n };\n\n useEffect(() => {\n const params = new URLSearchParams(window.location.search);\n if (params.get('id') === id) {\n setOpen(true);\n }\n }, [id]);\n\n return (\n
    \n setOpen(!open)}\n >\n \n {name} ({lists.length})\n \n\n
    \n \n
    \n
    \n\n {open && }\n
    \n );\n}\n\nfunction ExpansionPanelBody({ lists }) {\n return (\n
    \n \n
    \n );\n}\n","import _ from \"lodash\";\nimport Heading from \"@javascript/reactComponents/lds/typography/Heading\";\nimport ColleaguesListRow from \"./ColleaguesListsRow\";\n\nexport default function ColleaguesListsSection({ letter, bucket }) {\n // Group bucket by user\n const groupedByUserId = _.groupBy(bucket, (entry) => entry.user.id);\n\n return (\n
    \n {letter}\n
    \n\n {Object.keys(groupedByUserId).map((userId, index) => (\n \n ))}\n
    \n );\n}\n","import Reflux from \"reflux\";\nimport createReactClass from \"create-react-class\";\nimport Container from \"@javascript/reactComponents/lds/Container\"\nimport ColleaguesListsStore from \"@javascript/stores/lists/ColleagueListStore\"\nimport ColleaguesListsActions from \"@javascript/stores/actions/lists/ColleagueListsActions\"\nimport ColleaguesListsSection from \"./colleaguesLists/ColleaguesListsSection\";\nimport CategoryButtonGroup from \"./CategoryButtonGroup\";\nimport NoLists from \"./NoLists\";\n\nconst ColleaguesLists = createReactClass({\n mixins: [Reflux.connect(ColleaguesListsStore)],\n componentDidMount() {\n ColleaguesListsActions.initialState({ categories: this.props.categories });\n },\n render() {\n const { lists } = this.state;\n\n // Loading\n if (!lists) return null;\n\n const letters = Object.keys(lists).sort();\n\n\n const sum = Object.values(this.state.categories).reduce(\n (acc, curr) => acc + curr,\n 0\n );\n const allCategories = { All: sum, ...this.state.categories };\n const hasColleaguesLists = letters.length > 0;\n\n return (\n <>\n \n\n
    \n\n { hasColleaguesLists ?\n \n {letters.map((letter) => (\n \n ))}\n : \n }\n \n );\n },\n});\n\nexport default ColleaguesLists;\n","import Reflux from \"reflux\";\n\nconst SalesforceListsActions = Reflux.createActions([\n \"initialState\",\n \"loadMore\",\n \"searchName\",\n \"selectCategory\",\n \"clearSearch\",\n \"sort\",\n]);\n\nexport default SalesforceListsActions;\n","import Reflux from \"reflux\";\nimport SalesforceListsActions from \"../actions/lists/SalesforceListsActions\";\nimport { DEFAULT_CATEGORY } from \"../../constants/lists/list_constants\";\nimport ListsStoreClient from \"./ListsStoreClient\";\n\nconst SalesforceListsStore = Reflux.createStore({\n listenables: [SalesforceListsActions],\n init() {\n this.storeClient = new ListsStoreClient({ basePath: \"salesforce_lists\" });\n this.data = {\n categories: {},\n originalCategories: {},\n selectedCategory: DEFAULT_CATEGORY,\n sortOptions: [],\n selectedSortOption: {},\n lists: [],\n currentCount: 0,\n totalCount: 0,\n params: {\n name: \"\",\n page: 1,\n },\n };\n },\n getInitialState() {\n this.onInitialState();\n },\n async onInitialState() {\n await this.storeClient.initialState(this.data);\n this.trigger(this.data);\n },\n\n async onLoadMore() {\n await this.storeClient.loadMore(this.data);\n this.trigger(this.data);\n },\n\n async onSort(sort) {\n await this.storeClient.sort(this.data, sort);\n this.trigger(this.data);\n },\n\n async onSearchName(name) {\n await this.storeClient.searchName(this.data, name);\n this.trigger(this.data);\n },\n\n async onSelectCategory(category) {\n await this.storeClient.selectCategory(this.data, category);\n this.trigger(this.data);\n },\n\n async onClearSearch() {\n await this.storeClient.clearSearch(this.data)\n this.trigger(this.data)\n },\n});\n\nexport default SalesforceListsStore;\n","import Reflux from \"reflux\";\nimport createReactClass from \"create-react-class\";\nimport { DEFAULT_CATEGORY } from \"@javascript/constants/lists/list_constants\";\nimport Container from \"@javascript/reactComponents/lds/Container\"\nimport SalesforceListsStore from \"@javascript/stores/lists/SalesforceListsStore\";\nimport SalesforceListsActions from \"@javascript/stores/actions/lists/SalesforceListsActions\";\nimport CategoryButtonGroup from \"./CategoryButtonGroup\";\nimport SearchFilters from \"./SearchFilters\";\nimport ListSearchDescription from \"./ListSearchDescription\"\nimport ListPageFooter from \"./ListPageFooter\";\nimport ListTable from \"./ListTable\";\nimport NoLists from \"./NoLists\";\n\nconst SalesforceLists = createReactClass({\n mixins: [Reflux.connect(SalesforceListsStore)],\n getInitialState() {\n return SalesforceListsStore.data;\n },\n render() {\n const {\n lists,\n currentCount,\n selectedCategory,\n categories,\n sortOptions,\n selectedSortOption,\n totalCount,\n params: { name },\n } = this.state;\n\n if (!lists) return null;\n\n const blankSearch = name === \"\";\n const showTag = selectedCategory == DEFAULT_CATEGORY;\n\n let footerText = `Showing ${currentCount} of ${categories[selectedCategory]} lists `;\n if (!blankSearch) {\n footerText += \"based on search\";\n }\n\n const hasLists = categories[selectedCategory] > 0;\n const hasFilteredLists = lists.length > 0;\n\n const listSearchResults = <>\n \n \n\n return (\n <>\n \n
    \n\n { hasLists ?\n \n \n { !blankSearch && (\n \n )}\n { hasFilteredLists ? listSearchResults : }\n : \n }\n { hasFilteredLists && (\n \n )}\n\n \n );\n },\n});\n\nexport default SalesforceLists;\n","import React, { createContext, useState } from \"react\";\nimport PropTypes from \"prop-types\";\n\nexport const TabContext = createContext({\n selectedTab: null,\n onTabSelected: () => {},\n updateIndicator: () => {},\n});\n\nexport default function TabGroup({\n selectedTab,\n onTabSelected = () => {},\n children,\n animated = true,\n}) {\n const [indicatorStyle, setIndicatorStyle] = useState({\n width: \"0px\",\n left: \"0px\",\n });\n\n const selectTab = (value, tabRef) => {\n onTabSelected(value);\n\n if (animated) {\n updateIndicator(tabRef);\n }\n };\n\n const updateIndicator = (tabRef) => {\n setIndicatorStyle({\n width: `${tabRef.current.offsetWidth}px`,\n left: `${tabRef.current.offsetLeft}px`,\n });\n };\n\n return (\n \n
    \n {children}\n \n
    \n \n );\n}\n\nTabGroup.propTypes = {\n selectedTab: PropTypes.string,\n onTabSelected: PropTypes.func,\n};\n","import React, { useState, createContext } from \"react\";\nimport PropTypes from \"prop-types\";\n\nimport TabGroup from \"./TabGroup\";\n\nexport const TabbedViewContext = createContext({\n registerComponent: () => {}\n})\n\nexport default function TabbedView({ initialTab, children }) {\n const [selectedTab, setSelectedTab] = useState(initialTab);\n const [componentRegistry, setRegistry] = useState({})\n\n const onTabSelected = (value) => {\n setSelectedTab(value);\n }\n\n const registerComponent = (key, component) => {\n setRegistry(currentRegistry => {\n const newRegistry = { ...currentRegistry }\n newRegistry[key] = component\n\n return newRegistry\n })\n }\n\n const ComponentToRender = componentRegistry[selectedTab]\n\n return (\n \n
    \n \n { children }\n \n\n
    \n { ComponentToRender && }\n
    \n
    \n
    \n )\n}\n\nTabbedView.propTypes = {\n initialTab: PropTypes.string,\n}\n","import React, { useContext, useEffect, useRef } from \"react\";\nimport PropTypes from \"prop-types\";\n\nimport Icon from \"../Icon\";\nimport { TabContext } from \"./TabGroup\";\nimport { TabbedViewContext } from \"./TabbedView\";\n\nexport default function Tab({\n id,\n label,\n value,\n component,\n leadingIcon = \"\",\n selected = false,\n onTabClicked = () => {},\n}) {\n const { selectedTab, onTabSelected, updateIndicator } =\n useContext(TabContext);\n const tabRef = useRef(null);\n const isSelected = selected || value === selectedTab;\n\n // Use a Component Registry to keep track of the tabs and the components they should render\n const { registerComponent } = useContext(TabbedViewContext);\n\n const recheckedOnce = useRef(false);\n\n useEffect(() => {\n registerComponent(value, component);\n }, [value, component]);\n\n // Trigger the tab selection if/when the tab changes size to keep the tab indicator on the parent updated\n const handleResize = () => {\n if (isSelected) updateIndicator(tabRef);\n };\n\n // ResizeObserver is undefined in Jest and we don't need it for the unit tests\n useEffect(() => {\n if (window.ResizeObserver) {\n const observer = new ResizeObserver(handleResize);\n observer.observe(tabRef.current);\n\n return () => {\n observer.unobserve(tabRef.current);\n };\n }\n }, []);\n\n // Handle the click before bubbling\n const clickTab = (event) => {\n onTabClicked(event);\n\n onTabSelected(value, tabRef);\n };\n\n // This is to fix an issue where the tab indicator does\n // not update properly on page load\n\n useEffect(() => {\n let timeout;\n\n if (recheckedOnce.current) {\n handleResize();\n } else {\n timeout = setTimeout(() => {\n recheckedOnce.current = true;\n handleResize();\n }, 100);\n }\n\n return () => clearTimeout(timeout);\n }, [selectedTab]);\n\n return (\n isSelected || clickTab(event)}\n role=\"tab\"\n aria-selected={isSelected ? \"true\" : \"false\"}\n >\n {leadingIcon && (\n \n \n \n )}\n {label}\n \n );\n}\n\nTab.propTypes = {\n label: PropTypes.string.isRequired,\n value: PropTypes.string.isRequired,\n\n component: PropTypes.func,\n leadingIcon: PropTypes.string,\n selected: PropTypes.bool,\n};\n","import Reflux from \"reflux\";\nimport createReactClass from \"create-react-class\";\n\nimport UserLists from \"./UserLists\";\nimport ColleaguesLists from \"./ColleaguesLists\";\nimport SalesforceLists from \"./SalesforceLists\";\nimport ListPageStore from \"../../../stores/listPageStore\";\nimport ListPageActions from \"../../../stores/actions/lists/listPageActions\";\nimport TabbedView from \"../../lds/tabs/TabbedView\";\nimport Tab from \"../../lds/tabs/Tab\";\nimport TabGroup from \"../../lds/tabs/TabGroup\";\n\nfunction NavigationTabs({ activeTab, onSelectTab, categories, canUseSalesforce }) {\n const tabContainerStyles = {\n paddingBottom: \"var(--space-600)\",\n };\n\n const tabsMapping = {\n \"My Lists\": UserLists,\n \"Colleagues' Lists\": ColleaguesLists,\n };\n\n if (canUseSalesforce) {\n tabsMapping[\"Salesforce Autogenerated Lists\"] = SalesforceLists;\n }\n\n const ActiveComponent = tabsMapping[activeTab] || <>;\n return (\n
    \n
    \n
    \n \n \n { canUseSalesforce && (\n <>}\n />\n )\n }\n <>}\n />\n \n
    \n
    \n\n
    \n \n
    \n
    \n );\n}\n\nconst ListPage = createReactClass({\n mixins: [Reflux.connect(ListPageStore)],\n selectTab(tab) {\n // Update URL so user can back-navigate\n const url = new URL(window.location)\n url.searchParams.set(\"tab\", tab)\n history.pushState(null, '', url);\n\n ListPageActions.selectTab(tab);\n },\n\n componentDidMount() {\n const urlParams = new URLSearchParams(window.location.search);\n const tab = urlParams.get('tab');\n const id = urlParams.get('id');\n const navHeight = 100; // Spacing from page top\n\n if (tab) {\n ListPageActions.selectTab(tab);\n }\n\n if (id) {\n setTimeout(() => {\n const anchorElement = document.getElementById(`user_${id}`);\n if (anchorElement) {\n const elementPosition = anchorElement.getBoundingClientRect().top + window.scrollY;\n const desiredScrollPosition = elementPosition - navHeight; // because of nav bar, need to scroll a little further to see object\n window.scrollTo({ top: desiredScrollPosition, behavior: 'smooth' });\n }\n }, 2000); // Delay to ensure the tab is rendered before scrolling\n }\n },\n\n render() {\n const { activeTab } = this.state;\n return (\n <>\n \n \n );\n },\n});\n\nwindow.ListPage = ListPage;\nexport default ListPage;\n","import Reflux from \"reflux\";\n\nconst UserListsCreateModalActions = Reflux.createActions([\n \"initialState\",\n \"createList\",\n]);\n\nexport default UserListsCreateModalActions;\n","import Reflux from \"reflux\";\nimport UserListsCreateModalActions from \"../actions/lists/UserListCreateModalActions\";\nimport qs from \"qs\";\nimport {\n LIST_CREATE_REQUEST_FAILURE,\n LIST_CREATE_REQUEST_STARTED,\n LIST_CREATE_REQUEST_SUCCESS,\n LIST_CREATE_REQUEST_UNSTARTED,\n} from \"../../constants/lists/list_constants\";\n\nconst UserListCreateModalStore = Reflux.createStore({\n listenables: [UserListsCreateModalActions],\n\n init() {\n this.data = {\n baseQuery: {},\n createListRequestStatus: LIST_CREATE_REQUEST_UNSTARTED,\n entityCountsDetails: {},\n isModalOpen: false,\n categoryListNames: {},\n listName: null,\n mapDisplay: false,\n query: {},\n showDetails: false,\n sourceSavedFeedId: null,\n };\n },\n\n setSourceSavedFeed(feedId) {\n this.data.sourceSavedFeedId = feedId;\n },\n\n getInitialState() {\n this.onInitialState();\n },\n\n async onInitialState() {\n let data = search_data();\n\n if (empty_search(data)) {\n return false;\n }\n\n if (current_bounding_box() != null) {\n data.geo_box = current_bounding_box();\n }\n\n if (this.data.sourceSavedFeedId) {\n data.saved_feed_id = this.data.sourceSavedFeedId;\n }\n\n const response = await fetch(\n `/user_lists/new?${qs.stringify(data, { arrayFormat: \"brackets\" })}`\n );\n\n if (response.ok) {\n const res = await response.json();\n\n _.each(res.entity_counts_details, (value) => {\n this.data.entityCountsDetails[value.category] = value;\n });\n\n this.data.query = res.query;\n this.data.baseQuery = res.base_query;\n this.data.categoryListNames = res.category_list_names;\n this.data.mapDisplay = res.map_display;\n this.data.showDetails = true;\n\n this.trigger(this.data);\n } else {\n console.error(response);\n }\n },\n\n resetState() {\n this.data = {\n isModalOpen: false,\n entityCountsDetails: {},\n query: {},\n listName: \"\",\n categoryListNames: {},\n baseQuery: {},\n mapDisplay: false,\n showDetails: false,\n createListRequestStatus: LIST_CREATE_REQUEST_UNSTARTED,\n sourceSavedFeedId: null,\n createdListId: null,\n };\n },\n\n setOpenModal() {\n this.data.isModalOpen = true;\n this.trigger(this.data);\n },\n\n onListNameChange(name) {\n this.data.listName = name;\n this.trigger(this.data);\n },\n\n async onCreateList(data) {\n this.data.createListRequestStatus = LIST_CREATE_REQUEST_STARTED;\n this.data.showDetails = false;\n this.trigger(this.data);\n\n const csrfToken = document\n .querySelector(\"meta[name='csrf-token']\")\n .getAttribute(\"content\");\n\n const jsonString = JSON.stringify(data);\n const utf8Bytes = new TextEncoder().encode(jsonString);\n let binaryString = \"\";\n\n for (let i = 0; i < utf8Bytes.length; i++) {\n binaryString += String.fromCharCode(utf8Bytes[i]);\n }\n\n const encodedData = btoa(binaryString);\n\n const response = await fetch(\"/user_lists\", {\n method: \"POST\",\n body: JSON.stringify({ data: encodedData }),\n headers: {\n \"Content-Type\": \"application/json\",\n \"X-CSRF-Token\": csrfToken,\n },\n });\n\n if (response.ok) {\n const responseData = await response.json();\n\n this.data.createdListId = responseData.list_id;\n this.data.createListRequestStatus = LIST_CREATE_REQUEST_SUCCESS;\n } else {\n this.data.createListRequestStatus = LIST_CREATE_REQUEST_FAILURE;\n }\n this.trigger(this.data);\n },\n});\n\nwindow.UserListCreateModalStore = UserListCreateModalStore;\nexport default UserListCreateModalStore;\n","import { useState, useContext } from \"react\";\nimport Dropdown, { DropdownTrigger } from \"../../../lds/dropdown/Dropdown\";\nimport DropdownList from \"../../../lds/dropdown/DropdownList\";\nimport DropdownItem from \"../../../lds/dropdown/DropdownItem\";\nimport Input from \"../../../lds/Input\";\nimport { DetailsSectionContext } from \"./DetailsSection\";\n\nconst CategoryDropdown = () => {\n const {\n entityCountsDetails,\n categorySelected,\n selectedCategory,\n defaultOptionValue\n } = useContext(DetailsSectionContext)\n\n const [open, setOpen] = useState(false);\n\n let dropdownItems = [];\n\n Object.keys(entityCountsDetails).forEach((category) => {\n const categoryDetails = entityCountsDetails[category];\n const label = `${categoryDetails.title} (${categoryDetails.total_count})`\n const selected = selectedCategory === category;\n\n dropdownItems.push(\n \n )\n });\n\n let label = \"Select a list type\";\n\n if (selectedCategory !== defaultOptionValue) {\n label = `${entityCountsDetails[selectedCategory].title} (${entityCountsDetails[selectedCategory].total_count})`\n }\n\n return (\n categorySelected(item.value)}\n onDropdownClose={() => setOpen(false)}\n >\n \n
    setOpen(true)}>\n {}}\n size=\"medium\"\n showLabel={false}\n helperTextVariant=\"hidden\"\n trailingIcon={\"chevron-\" + (open ? \"up\" : \"down\")}\n value={label}\n width=\"100%\"\n />\n
    \n
    \n \n \n {dropdownItems}\n \n \n );\n}\n\nexport default CategoryDropdown;\n","import CategoryDropdown from \"./CategoryDropdown\";\n\nconst CategorySelectionSection = () => {\n const styles = {\n backgroundColor: \"var(--color-bgFill-brand-subdued)\",\n borderRadius: \"4px\",\n padding: \"var(--space-medium)\",\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"space-between\",\n gap: \"var(--space-medium)\",\n }\n\n return (\n
    \n \n Choose List Type *\n \n
    \n \n
    \n
    \n )\n}\n\nexport default CategorySelectionSection;\n","import React from \"react\";\n\nconst ScrollableListItem = ({ filterName, filterValue }) => {\n return (\n
    \n {filterName}:\n
    \n {filterValue.map((value) => {\n return (\n

    \n {value}\n
    \n

    \n );\n })}\n
    \n
    \n );\n};\n\nexport default ScrollableListItem;\n","import ScrollableList from \"../ScrollableList\";\nimport ScrollableListItem from \"../ScrollableListItem\";\n\nconst SearchCriteriaPanel = (props) => {\n const styles = {\n display: \"flex\",\n flexDirection: \"column\",\n fontSize: \"16px\",\n justifyContent: \"flex-start\",\n alignItems: \"flex-start\",\n gap: \"var(--space-medium)\",\n };\n const details = queryDetails(props);\n return (\n \n {Object.keys(details).map((filterName) => {\n const value = details[filterName];\n return value.length > 0 ? (\n \n ) : (\n false\n );\n })}\n \n );\n};\n\nexport default SearchCriteriaPanel;\n\nfunction queryDetails(props) {\n let allDetails = Object.assign(\n {},\n timeRange(props),\n searchWord(props),\n activityType(props),\n listedOn(props),\n orgListRefs(props),\n aliasSearchRefs(props),\n relationships(props),\n clinicalStatus(props),\n clinicalStage(props),\n geoCoords(props),\n locations(props)\n );\n const facetDetails = facets(props);\n if (facetDetails) {\n allDetails = Object.assign(allDetails, ...facetDetails);\n }\n\n return allDetails;\n}\n\nfunction timeRange(props) {\n const time_range = props.search.time;\n\n if (!time_range) return false;\n\n return { [\"Time Range\"]: [time_range] };\n}\n\nfunction searchWord(props) {\n const query = props.search.query;\n\n if (!query) return false;\n\n return { [\"Search words\"]: [query] };\n}\n\nfunction activityType(props) {\n const category = props.search.category;\n\n if (!category) return false;\n\n return { [\"Activity Type\"]: [category] };\n}\n\nfunction listedOn(props) {\n const list = props.search.list;\n\n if (!list) return false;\n\n return { [\"Listed on\"]: [list] };\n}\n\nfunction facets(props) {\n const facets = props.baseQuery.facets;\n\n if (!facets) return false;\n\n return Object.keys(facets).map((facet) => {\n const capitalized = facet.charAt(0).toUpperCase() + facet.slice(1);\n return { [capitalized]: facets[facet] };\n });\n}\n\nfunction orgListRefs(props) {\n const org_list_refs = props.search.org_list_refs;\n\n if (!org_list_refs) return false;\n\n return {\n [\"Org List Refs\"]: Array.isArray(org_list_refs)\n ? org_list_refs\n : [org_list_refs],\n };\n}\n\nfunction aliasSearchRefs(props) {\n const alias_search_hash = props.search.alias_search_hash;\n\n if (!alias_search_hash) return false;\n\n return { [\"Alias Search\"]: Object.values(alias_search_hash) };\n}\n\nfunction relationships(props) {\n const relationships = props.search.relationships;\n\n if (!relationships || relationships.length === 0) return false;\n\n let no_recent_activity = \"\";\n let rel = \"\";\n\n if (_.contains(relationships, \"exclude_recent_sponsor\")) {\n var and = relationships.length > 1 ? \", AND \" : \"\";\n no_recent_activity = `Companies with no team activity in the last 6 months in Salesforce${and}`;\n }\n\n if (_.contains(relationships, \"crm\")) {\n rel = \"Companies you have in your Salesforce\";\n }\n\n if (_.contains(relationships, \"exclude_muted_companies\")) {\n rel = \"Only your unmuted companies\";\n }\n\n return { [\"Relationships\"]: [no_recent_activity + rel] };\n}\n\nfunction clinicalStatus(props) {\n const clin_status = props.search.clin_status;\n\n if (!clin_status) return false;\n\n return { [\"Clinical Status\"]: [clin_status.join(\" OR \")] };\n}\n\nfunction clinicalStage(props) {\n const clin_stage = props.search.clin_stage;\n\n if (!clin_stage) return false;\n\n return { [\"Clinical Stage\"]: [clin_stage.join(\" OR \")] };\n}\n\nfunction geoCoords(props) {\n const geo_box = props.search.geo_box;\n\n if (!geo_box) return false;\n\n return {\n [\"Geographic Boundary\"]: [\n `North boundary: ${geo_box.top_left_lat}`,\n `East boundary: ${geo_box.bottom_right_lon}`,\n `South boundary: ${geo_box.bottom_right_lat}`,\n `West boundary: ${geo_box.top_left_lon}`,\n ],\n };\n}\n\nfunction locations(props) {\n const locations = props.search.locations;\n\n if (!locations) return false;\n\n return { [\"Sponsor companies based in\"]: [locations.join(\" OR \")] };\n}\n","import { useContext } from \"react\";\n\nimport Input from \"../../../lds/Input\";\nimport { DetailsSectionContext } from \"./DetailsSection\";\n\nconst ListName = () => {\n const { name, onListNameChange } = useContext(DetailsSectionContext);\n\n return (\n
    \n \n \n
    \n )\n}\n\nexport default ListName;\n","import { useState } from 'react'; import EntityListHolder from '../../listModalPanel/EntityListHolder';\nimport UserPagination from '../../../flagged_events/userPagination';\n\nfunction PagedEntityListPreview({ entityList, pageSize = 10 }) {\n const [currentPage, setCurrentPage] = useState(0);\n\n const pageCount = Math.ceil(entityList.length/pageSize);\n return (\n <>\n
    \n \n \n
    \n \n );\n}\n\nexport default PagedEntityListPreview;\n","import { useContext, useState } from \"react\";\n\nimport Chip from \"../../../lds/chips/Chip\";\nimport ListName from \"./ListName\";\nimport { DetailsSectionContext } from \"./DetailsSection\";\nimport PagedEntityListPreview from \"./PagedEntityListPreview\";\n\nconst PreviewSection = () => {\n const { entityCountDetail } = useContext(DetailsSectionContext);\n const [showEntityListPreview, setShowEntityListPreview] = useState(false);\n\n const toggleEntityListPreview = () =>\n setShowEntityListPreview(!showEntityListPreview);\n\n if (!entityCountDetail) {\n return null;\n }\n\n return (\n
    \n Your list will be generated from the\n \n {entityCountDetail.entities.length}{\" \"}\n \n \n in your search (ranked by event count). {\" \"}\n \n {showEntityListPreview ? \"Hide Preview\" : \"Show Preview\"}\n \n
    \n {showEntityListPreview && }\n \n
    \n );\n};\n\nexport default PreviewSection;\n","import React from 'react';\nimport { createContext } from 'react';\n\nimport CategorySelectionSection from \"./CategorySelectSection\";\nimport SearchCriteriaPanel from \"./SearchCriteriaPanel\";\nimport { DEFAULT_LIST_TYPE } from \"../../../../constants/lists/list_constants\";\nimport PreviewSection from \"./PreviewSection\";\n\nconst DetailsSectionContext = createContext({\n query: \"\",\n entityCountsDetails: {},\n categorySelected: () => {},\n selectedCategory: DEFAULT_LIST_TYPE,\n name: \"\",\n onListNameChange: () => {},\n defaultOptionValue: DEFAULT_LIST_TYPE,\n entityCountDetail: {}\n});\n\nconst DetailsSection = ({ query, baseQuery, entityCountsDetails, categorySelected, selectedCategory, name, onListNameChange }) => {\n const entityCountDetail = entityCountsDetails[selectedCategory];\n\n return(\n \n

    \n You are generating a list from your current event search. Your current search is narrowed to events that involve the following active filters:\n

    \n \n \n \n \n )\n}\n\nexport default DetailsSection;\nexport { DetailsSectionContext };\n","import Icon from \"@javascript/reactComponents/lds/Icon\";\nimport ToastBanner from \"../ToastBanner\";\nimport Heading from \"@javascript/reactComponents/lds/typography/Heading\";\n\nconst ListCreateInProgress = ({ listName }) => {\n return (\n <>\n
    \n
    \n \n
    \n \n Generating your list...\n \n \n {listName}\n \n
    \n \n You can close this window at any time and we will generate your lists in\n the background for you. Access all your generated lists by visiting{\" \"}\n Lists.\n \n \n );\n};\n\nexport default ListCreateInProgress;\n","// Allowed list:\n//\n// \\s (white space)\n// \\w (word characters)\n// \\, (comma)\n// \\. (period)\n// \\* (asterisk)\n// \\- (hyphen)\n// \\+ (plus)\n// \\( (open parenthesis)\n// \\) (close parenthesis)\n// \\\" (double quote)\n// \\' (single quote)\n// \\_ (underscore)\n// \\@ (at symbol)\n//\nexport const sanitize = (str) => {\n let queryStr = str || \"\";\n queryStr = queryStr.replace(/[^\\w\\s\\,\\.\\*\\-\\+\\(\\)\\\"\\' _@]/g, \"\");\n return formatQuotations(queryStr);\n}\n\nfunction formatQuotations(str) {\n if ((str.match(/\"/g) || []).length % 2 === 1) {\n str = str.replace(/\"/, \"\");\n }\n\n if ((str.match(/'/g) || []).length % 2 === 1) {\n str = str.replace(/'/, \"\");\n }\n return str.trim();\n}\n","import Icon from \"@javascript/reactComponents/lds/Icon\";\nimport Heading from \"@javascript/reactComponents/lds/typography/Heading\";\nimport { sanitize } from \"@javascript/helpers/stringHelpers\";\n\nconst ListCreateSuccess = ({ listName }) => {\n return (\n
    \n \n \n
    \n\n \n List Generated Successfully!\n \n\n {sanitize(listName)}\n
    \n );\n};\n\nexport default ListCreateSuccess;\n","import Icon from \"@javascript/reactComponents/lds/Icon\";\nimport ToastBanner from \"../ToastBanner\";\nimport Heading from \"@javascript/reactComponents/lds/typography/Heading\";\n\nconst ListCreateSetup = () => {\n return (\n <>\n
    \n
    \n \n
    \n \n Fetching data...\n \n
    \n \n Setting up data to create your list. This may take a few moments.\n \n \n );\n};\n\nexport default ListCreateSetup;\n","import ListCreateInProgress from \"./ListCreateInProgress\";\nimport ListCreateSuccess from \"./ListCreateSuccess\";\nimport ListCreateSetup from \"./ListCreateSetup\"\n\nimport {\n LIST_CREATE_REQUEST_UNSTARTED,\n LIST_CREATE_REQUEST_STARTED,\n LIST_CREATE_REQUEST_SUCCESS,\n LIST_CREATE_REQUEST_FAILURE,\n} from \"../../../../constants/lists/list_constants\";\n\nconst ListCreateStatus = ({ status, listName }) => {\n return (\n <>\n {status === LIST_CREATE_REQUEST_UNSTARTED && }\n {status === LIST_CREATE_REQUEST_STARTED && (\n \n )}\n {status === LIST_CREATE_REQUEST_SUCCESS && (\n \n )}\n {status === LIST_CREATE_REQUEST_FAILURE && (\n
    Failed to create list
    \n )}\n \n );\n};\n\nexport default ListCreateStatus;\n","import React from \"react\";\nimport createReactClass from \"create-react-class\";\n\nimport {Modal, ModalBody, ModalFooter, ModalHeader} from \"@javascript/reactComponents/lds/modal/Modal\";\nimport ButtonGroup from \"../../lds/ButtonGroup\";\nimport Button from \"../../lds/Button\";\nimport UserListCreateModalStore from \"../../../stores/lists/UserListCreateModalStore\";\nimport {\n DEFAULT_LIST_TYPE,\n LIST_CREATE_REQUEST_SUCCESS,\n LIST_CREATE_REQUEST_UNSTARTED,\n LIST_CREATE_REQUEST_STARTED,\n LIST_CREATE_REQUEST_FAILURE,\n} from \"../../../constants/lists/list_constants\";\nimport DetailsSection from \"./listCreateModal/DetailsSection\";\nimport ListCreateStatus from \"./listCreateModal/ListCreateStatus\";\n\nconst ListCreateModal = createReactClass({\n mixins: [Reflux.connect(UserListCreateModalStore)],\n getInitialState() {\n return {\n ...UserListCreateModalStore.data,\n selectedCategory: DEFAULT_LIST_TYPE,\n };\n },\n\n cancelModal() {\n removeUserListCreateModal();\n },\n\n generateList(name) {\n if (\n this.state.selectedCategory === DEFAULT_LIST_TYPE ||\n this.state.createListRequestStatus !== LIST_CREATE_REQUEST_UNSTARTED\n ) {\n return;\n }\n\n const data = {\n base_query: this.state.baseQuery,\n query: this.state.query,\n name: name,\n entity_names: _.map(\n this.state.entityCountsDetails[this.state.selectedCategory].entities,\n \"name\"\n ),\n entity_ids: _.map(\n this.state.entityCountsDetails[this.state.selectedCategory].entities,\n \"id\"\n ),\n type_ref:\n this.state.entityCountsDetails[this.state.selectedCategory].type_ref,\n };\n\n UserListCreateModalStore.onCreateList(data);\n },\n\n categorySelected(value) {\n this.setState({\n selectedCategory: value,\n });\n this.listNameChange(this.state.categoryListNames[value])\n },\n\n generateListButtonVariant() {\n if (\n this.state.selectedCategory !== DEFAULT_LIST_TYPE &&\n this.state.createListRequestStatus === LIST_CREATE_REQUEST_UNSTARTED &&\n this.state.listName\n ) {\n return \"primary\";\n } else {\n return \"disable\";\n }\n },\n\n listNameChange(name) {\n this.setState({ listName: name });\n UserListCreateModalStore.onListNameChange(name);\n },\n\n render() {\n let name;\n\n // This is bit tricky, in order to allow editing the input we need to set the name to null\n // if it is default empty string then you cannot edit the input since it will get the current selectedCategory name\n // The only time we should be using the selectedCategory name is when the user has not entered a name and has just selected a category\n if (\n this.state.listName == null &&\n this.state.selectedCategory !== DEFAULT_LIST_TYPE\n ) {\n name = this.state.categoryListNames[this.state.selectedCategory];\n } else {\n name = this.state.listName;\n }\n\n return (\n \n \n \n {this.state.showDetails && (\n \n )}\n\n {!this.state.showDetails && (\n \n )}\n \n \n \n {(this.state.createListRequestStatus === LIST_CREATE_REQUEST_UNSTARTED || this.state.createListRequestStatus === LIST_CREATE_REQUEST_FAILURE) && (\n <>\n \n Cancel\n \n this.generateList(name)}\n >\n Generate List\n \n \n )}\n {this.state.createListRequestStatus === LIST_CREATE_REQUEST_STARTED && (\n \n Close\n \n )}\n {this.state.createListRequestStatus === LIST_CREATE_REQUEST_SUCCESS && (\n <>\n \n Close\n \n {\n window.location.href = `/lists/${this.state.createdListId}`;\n }}\n >\n Go To List\n \n \n )}\n \n \n \n );\n },\n});\n\nwindow.ListCreateModal = ListCreateModal;\nexport default ListCreateModal;\n","const ChooseSegmentContactReportHeader = () => {\n const closeModal = () => {\n close_modal_control();\n };\n return (\n
    \n
    \n

    Send PDF report to:

    \n
    \n );\n};\n\nexport default ChooseSegmentContactReportHeader;\n","const ChooseSegmentContactButton = (props) => {\n let className = \"button_unselected\";\n if(props.choice === props.type){\n className = \"button_selected\";\n }\n return (\n \n );\n};\n\nexport default ChooseSegmentContactButton;\n","import ChooseSegmentContactButton from \"./button\";\n\nconst ChooseSegmentContactReportBody = (props) => {\n\n const closeModal = () => {\n close_modal_control();\n return false;\n };\n\n let className = \"button-disable\";\n if(props.checked === true){\n // Make sure it's not disabled...\n className = \"\";\n }\n\n const spanClasses = [];\n const reportTypes = {\n me:\"Send to Me\",\n owner:\"Send to Owner\"\n };\n\n const reportButtons = Object.keys(reportTypes).map(function(entry, index) {\n if(props.choice === entry){\n spanClasses[index] = \"report_selected\";\n }\n else{\n spanClasses[index] = \"report_unselected\";\n }\n return \n });\n\n return (\n
    \n
    \n

    Choose who to email this report to:

    \n
      \n
    • Selecting \"Send to me\" will email the report to: {props.your_email}.
    • \n
    • Selecting \"Send to owner\" will email the report to: {props.report_data.owner_emails}.
    • \n
    \n
    \n
    \n {reportButtons}\n
    \n
    \n \n \n
    \n
    \n );\n};\n\nexport default ChooseSegmentContactReportBody;\n","import ChooseSegmentContactReportHeader from \"./header\";\nimport ChooseSegmentContactReportBody from \"./body\";\n\nconst ChooseSegmentContactReport = createReactClass({\n getInitialState: function(){\n return {\n choice:null,\n checked:false\n };\n },\n updateChoice: function(choice){\n this.setState({\n choice: choice,\n checked:true\n });\n return false;\n },\n submitForm: function(e){\n e.stopPropagation();\n e.preventDefault();\n $(\"body\").addClass(\"wait\");\n $.ajax({\n url: \"/penetration_report_detail/\" + this.props.report_data._id + \"/seg_con_send?send_to=\" + this.state.choice,\n type: \"GET\",\n headers: {\n \"X-CSRF-Token\": this.props.authenticity_token\n },\n success: function (result) {\n $(\"body\").removeClass(\"wait\");\n $(\"#admin_alert\").html(result.confirmation_display);\n $(\"#admin_alert\").removeClass(\"hide_admin_message\");\n close_modal_control();\n }.bind(this)\n });\n return false;\n },\n render: function(){\n return (\n
    \n \n \n
    \n );\n }\n});\n\nwindow.ChooseSegmentContactReport = ChooseSegmentContactReport;\nexport default ChooseSegmentContactReport;\n","const SignInLink = (props) => {\n const clickHandler = () => {\n if(props.id != props.current){\n window.location.href = props.url;\n }\n };\n const linkId = props.id + \"_link\";\n const aId = props.id + \"_a\";\n const img = \"/images/\" + props.id + \"_icon.png\";\n let link, linkDivClassname;\n if(props.id === props.current){\n link = props.title;\n linkDivClassname = \"disabled_link_div\";\n }\n else{\n link = {props.title};\n linkDivClassname = \"link_div\";\n }\n return (\n
    \n
    \n {props.title}\n
    \n
    \n {link}
    \n {props.sub_title}
    {props.desc}
    \n
    \n
    \n );\n};\n\nexport default SignInLink;\n"," const LinkBridge = (props) => {\n const divClass = props.current + \"_bridge\";\n return (\n \n );\n };\n\nexport default LinkBridge;\n","//\n// Example props passed to SignInLinks\n//\n// const signInLinks = [\n// { id:'sessions', title: 'Sign in', sub_title:'Already registered?', desc:'You can access Zymewire by signing in here.', url:'<%= new_session_path(resource) %>' },\n// { id:'registrations', title: 'Sign up', sub_title:'First time to Zymewire?', desc:'Create a new account by signing up here.', url:'<%= new_registration_path(resource) %>' },\n// { id:'passwords', title: 'Forgot your password?', sub_title:'It happens...', desc:'You can reset it here.', url:'<%= new_password_path(resource) %>' },\n// { id:'confirmations', title: 'Confirmation email?', sub_title:'Didn\\'t receive your sign up confirmation email?', desc:'Request another one here.', url:'<%= new_confirmation_path(resource) %>' },\n// { id:'info_form', title: 'Help', sub_title:'Have questions?', desc:'Contact the Zymewire Team.', url:'/contact' },\n//];\n//\n// \tsee app/views/layouts/guest_pages.html.erb\n// \tfor usage\n\nimport SignInLink from \"./signInLink\";\nimport LinkBridge from \"./linkBridge\";\n\nconst SignInLinks = createReactClass({\n getInitialState: function(){\n return { current : this.props.current };\n },\n changeCurrent: function( dest ){\n this.setState({current: dest });\n },\n render: function() {\n const signInLinks = _.map(this.props.signInLinks, function(linkdata, index){\n return ;\n }.bind(this));\n return (\n \n );\n }\n});\n\nwindow.SignInLinks = SignInLinks;\nexport default SignInLinks;\n","const SelectableUser = function(props) {\n const changed = () => {\n props.toggleUser(props.user.id);\n }\n\n let fullName = props.user.name;\n\n if (props.search_string) {\n let regex = new RegExp(props.searchString, 'gi');\n fullName = fullName.replace(regex, \"$&\");\n }\n\n let checkboxId = 'selectable_user_' + props.user.id;\n const labelClasses = ['fullstory_excluded', 'rspec_fullstory', 'checkbox'];\n\n if (props.user.currently_flagged) {\n labelClasses.push('checked');\n }\n\n return (\n \n );\n}\n\nexport default SelectableUser;\n","import SelectableUser from \"./selectableUser\";\n\nconst ColumnOfSelectableUsers = function(props) {\n let users = props.users.map(function (user, index) {\n return ;\n });\n\n return (\n
    \n {users}\n
    \n );\n}\n\nexport default ColumnOfSelectableUsers","import ColumnOfSelectableUsers from \"./columnOfSelectableUsers\";\n\nconst PageOfSelectableUsers = function(props) {\n let results;\n \n if (typeof props.userList != 'undefined' && props.userList instanceof Array) {\n const chunkOfUsers = chunkArray(props.userList, props.usersPerColumn);\n results = _.map(_.toArray(chunkOfUsers), function (users, index) {\n return ;\n });\n }\n else {\n results = 'No users found.';\n }\n\n return (\n
    \n {results}\n
    \n );\n}\n\nexport default PageOfSelectableUsers;\n","import PaginationHolder from \"../generic/pagination/paginationHolder\";\nimport SearchInput from \"../generic/searchInput\";\nimport PageOfSelectableUsers from \"./pageOfSelectableUsers\";\n\nconst PaginatedSelectableListOfUsers = createReactClass({\n getInitialState: function(){\n return {page: 0, userList:this.props.userList, searchString:''};\n },\n changePage: function(pageNumber){\n this.setState({page: pageNumber});\n },\n searchUsers: function(searchString){\n let usersAvailable = this.props.userList.slice();\n let filteredUsers = usersAvailable.filter(function (user) {\n return user.name.toLowerCase().indexOf(searchString.toLowerCase()) >= 0;\n });\n this.setState({userList:filteredUsers, searchString:searchString, page:0});\n for (const action of this.props.mixpanelActions) {\n Zymewire.mixpanel_track(action, {search_string:searchString})\n }\n },\n render: function(){\n let displaySize = this.props.columnsPerPage * this.props.usersPerColumn;\n let lists = [];\n let remainder = this.state.userList;\n while(remainder.length > 0){\n lists.push(_.first(remainder, displaySize));\n remainder = _.rest(remainder, displaySize);\n }\n let list = lists[this.state.page];\n let paginationClasses = ['pagination', 'standard_pagination_holder', 'search_enabled_user_pagination'];\n let fieldSetClasses = ['fullstory_excluded', 'sideways_grey_form_section'];\n if(lists.length > 1){\n fieldSetClasses.push('selectable_users_section')\n }\n else{\n fieldSetClasses.push('selectable_users_section_empty')\n }\n\n // Uniquely identify the generic search input\n let searchInputId = this.props.uniqueId + '_search_bar';\n\n // Always show search bar\n let topPagination = \n let bottomPagination = null;\n\n // Only show pagination if more than one page\n if(lists.length > 1) {\n bottomPagination = \n }\n\n return (\n
    \n {this.props.legend}\n
    \n {topPagination}\n
    \n \n {bottomPagination}\n
    \n );\n }\n});\n\nwindow.PaginatedSelectableListOfUsers = PaginatedSelectableListOfUsers\nexport default PaginatedSelectableListOfUsers;\n","import Button from \"@javascript/reactComponents/lds/Button\";\n\nimport {\n Modal,\n ModalBody,\n ModalFooter,\n ModalHeader,\n} from \"@javascript/reactComponents/lds/modal/Modal\";\n\nconst SearchErrorModal = createReactClass({\n mixins: [\n Reflux.connectFilter(FacetSearchStore, 'message', function(data) { return data.searchTerm.queryErrorMessage })\n ],\n onCancel() {\n FacetSearchStoreActions.clearQueryError();\n },\n render() {\n let allowModal = !_.isEmpty(this.state.message);\n return (\n \n \n Search Error\n \n \n { this.state.message + \" \"} See the Help Page for advanced search.\n \n \n \n Close\n \n \n \n )\n }\n})\n\nwindow.SearchErrorModal = SearchErrorModal;\nexport default SearchErrorModal;\n","import Button from \"@javascript/reactComponents/lds/Button\";\nimport ButtonGroup from \"@javascript/reactComponents/lds/ButtonGroup\";\n\nimport LegacyModalService from \"@javascript/globals/LegacyModalService\";\n\nimport {\n Modal,\n ModalBody,\n ModalFooter,\n ModalHeader,\n} from \"@javascript/reactComponents/lds/modal/Modal\";\n\nconst SessionExpiredContent = ({\n extendSession,\n}) => (\n \n \n Session Expired\n \n \n Your session has expired.\n \n \n \n Reload Page\n \n \n \n);\n\nconst SessionExtendContent = ({\n onCancel,\n extendSession,\n signOut,\n ttl,\n}) => (\n \n \n Session Expiration Warning\n \n \n Your session will expire in {ttl} seconds. Do you want to extend the session?\n \n \n \n \n Logout Now\n \n \n Extend Session\n \n \n \n \n);\n\nconst SessionTimeoutModal = createReactClass({\n mixins: [\n Reflux.connectFilter(UserStore, 'ttl', function(data) { return data.session.ttl }),\n ],\n getInitialState() {\n return {\n ttl: Infinity,\n allowModal: true\n };\n },\n componentDidMount() {\n UserActions.startSessionCheck()\n },\n cancelModal() {\n this.setState({ allowModal: false })\n },\n extendSession() {\n if (this.state.ttl <= 0) {\n window.location.reload();\n }\n else {\n $.ajax({\n url: '/extend_session',\n method: 'POST',\n success() {\n UserStore.checkUserSession();\n },\n })\n }\n },\n signOut() {\n $.ajax({\n url: '/users/sign_out',\n method: 'DELETE',\n success() { window.location.reload() }\n })\n },\n render() {\n const { allowModal, ttl } = this.state;\n const isSessionExpired = ttl <= 0;\n const isSessionExpiring = allowModal && ttl <= 60;\n\n if (isSessionExpired) {\n return (\n \n );\n }\n\n if (isSessionExpiring) {\n return (\n \n );\n }\n\n return null;\n }\n})\n\nwindow.SessionTimeoutModal = SessionTimeoutModal\nexport default SessionTimeoutModal;\n","const BootstrapRow = (props) => {\n const className = props.fluid ? \"row-fluid\" : \"row\"\n\n return (\n
    \n {props.children}\n
    \n );\n};\n\nwindow.BootstrapRow = BootstrapRow;\nexport default BootstrapRow;\n","const BootstrapSpan = (props) => {\n const divClassname = `span${props.wide}`;\n return (\n
    \n {props.children}\n
    \n );\n};\n\nwindow.BootstrapSpan = BootstrapSpan;\nexport default BootstrapSpan;\n","import BootstrapRow from \"../generic/htmlElements/bootstrapRow\";\nimport BootstrapSpan from \"../generic/htmlElements/bootstrapSpan\";\n\nconst TerritorySelectorHeader = () => {\n return (\n \n \n

    Look up countries or states then click to add them to your territory

    \n
    \n \n  \n \n \n

    Your territory

    \n

    Click to remove countries or states

    \n
    \n
    \n );\n};\n\nexport default TerritorySelectorHeader;\n","const TerritoryHolder = createReactClass({\n getInitialState: function(){\n return {\n folded_unfolded: \"\"\n };\n },\n UNSAFE_componentWillReceiveProps(nextProps) {\n if(nextProps.parent_open === \"closed\"){\n this.setState({\n folded_unfolded: \"\"\n });\n }\n },\n fold_unfold: function (e){\n e.stopPropagation();\n this.setState({folded_unfolded: (this.state.folded_unfolded === \"checked\") ? \"\" : \"checked\"});\n $(e.target.parentElement.parentElement).toggleClass(\"foldable_content_\" + this.props.location.code);\n if(this.props.indent === 0){\n $(e.target.parentElement).find(\".foldable_content\").attr(\"class\", \"foldable_content\");\n }\n },\n select_location: function (location, e){\n e.stopPropagation();\n this.props.location.code === \"Oceania\" ? this.fold_unfold(e) : TerritoriesAction.territorySelected(location);\n },\n render: function () {\n let toggleArrow = this.props.location.code + \"_arrow\";\n const toggleId = this.props.location.code + \"_toggle\";\n const divId = this.props.location.code + \"_div\";\n let children;\n let indent = this.props.indent;\n const labelClasses = [\"foldable_indent_\" + this.props.indent, \"location_label\"];\n let toggleClass = \"foldable_toggle_div foldable_toggle_div_\" + this.props.indent;\n const open = (this.state.folded_unfolded) ? \"open\" : \"closed\";\n if(this.props.location.children){\n indent = this.props.indent + 1;\n children = _.reject(this.props.location.children, function(child){return this.props.territoryIsContainedInList(child.code, this.props.userTerritoryList) }.bind(this)).map(function(location, index){\n return (\n
    \n \n
    \n );\n }.bind(this));\n labelClasses.push(\"full_fold full_fold_location\");\n }\n else {\n toggleClass = \"no_toggle_div\";\n }\n const aId= \"a_location_\" + this.props.location.code;\n const link = {this.props.location.name}; \n const inputClass = \"foldable_toggle standard_toggle\";\n return (\n
    \n \n
    \n
    {link}
    \n {children}\n
    \n )\n }\n});\n\nexport default TerritoryHolder;\n","import TerritoryHolder from \"./territoryHolder\";\n\nconst TerritorySelectorHolder = (props) => {\n const territoryIsContainedInList = (loc_code, territoryList) => {\n const res = _.findWhere(territoryList, {code:loc_code});\n return typeof res !== \"undefined\";\n };\n const indent = 0;\n const parentIsOpen = \"open\";\n const locations = _.reject(props.fullLocationList, function(child){return territoryIsContainedInList(child.name, props.userTerritoryList) }).map(function(location, index){\n return \n });\n return (\n
    \n {locations}\n
    \n );\n \n};\n\nexport default TerritorySelectorHolder;\n","const ClearTerritoriesButton = (props) => {\n const clearTerritory = (e) => {\n e.stopPropagation();\n TerritoriesAction.clearTerritory();\n };\n if(props.userTerritoryList.length > 0){\n return (\n \n );\n }\n else{\n return (\n \n );\n }\n};\n\nexport default ClearTerritoriesButton;\n","const SelectedTerritoryHolder = (props) => {\n const removeTerritory = (e) => {\n e.stopPropagation();\n TerritoriesAction.territoryRemoved(props);\n };\n let name = props.name;\n if(props.parent) {\n name = props.name + \", \" + props.parent;\n }\n return (\n
    \n
    \n {name}\n
    \n
    \n );\n};\n\nexport default SelectedTerritoryHolder;\n","import SelectedTerritoryHolder from \"./selectedTerritoriesHolder\";\n\nconst SelectedTerritories = (props) => {\n let locations = props.userTerritoryList.map(function(loc, index){\n return \n });\n if(locations.length < 1){\n locations =

    Worldwide

    ;\n }\n return (\n
    \n {locations}\n
    \n );\n};\n\nexport default SelectedTerritories;\n","const SaveChangesButton = (props) => {\n const saveChanges = (e) => {\n e.stopPropagation();\n TerritoriesAction.saveChanges();\n };\n const buttonText = props.changing ? \"Saving Changes\" : \"Save Changes\";\n let button = ;\n\n if(props.changed) {\n button = ;\n }\n return (\n
    \n {button}\n
    \n );\n};\n\nexport default SaveChangesButton;\n","import BootstrapRow from \"../generic/htmlElements/bootstrapRow\";\nimport BootstrapSpan from \"../generic/htmlElements/bootstrapSpan\";\nimport TerritorySelectorHolder from \"./territorySelectorHolder\";\nimport ClearTerritoriesButton from \"./clearTerritoriesButton\";\nimport SelectedTerritories from \"./selectedTerritories\";\nimport SaveChangesButton from \"./saveChangesButton\";\n\nconst TerritorySelectorPanels = (props) => {\n return (\n \n \n \n \n
    \n \n
    \n \n \n \n \n
    \n );\n};\n\nexport default TerritorySelectorPanels;\n","// locationSelector.jsx and territorySelector are near identical and should be refactored into one\n\nimport TerritorySelectorHeader from \"./territorySelectorHeader\";\nimport GenericAutocomplete from \"../generic/autocomplete/genericAutocomplete\";\nimport TerritorySelectorPanels from \"./territorySelectorPanels\";\nimport {constructSelectableLocationList, flattenLocationList} from \"../../helpers/locations\";\n\nconst TerritorySelector = createReactClass({\n mixins: [Reflux.connect(TerritoriesStore)],\n getInitialState: function () {\n return TerritoriesStore.data;\n },\n UNSAFE_componentWillMount:function(){\n const referrer = this.props.referrer ? this.props.referrer : \"/settings\";\n TerritoriesAction.initialState({fullLocationList:_.sortBy(Zymewire.region_list.fullLocationList, 'name'), userTerritoryList:this.props.userTerritoryList, changed: false, referrer: referrer});\n },\n select_location: function (location, e){\n e.stopPropagation();\n const currentSelectableLocations = this.getCurrentSelectableLocations();\n for(let loc of currentSelectableLocations){\n // Hacky solution to fix duplicate name issue\n // We only have 2 occurrences of duplicate names (Georgia and Puerto Rico) in our selectable list as of June 2020\n // Better solution would be to give each location a unique name in this.state.fullLocationList\n if(\n loc.name === location ||\n loc.code === \"US_GA\" && location === \"Georgia, United States of America\" ||\n loc.code === \"US_PR\" && location === \"Puerto Rico, United States of America\"\n ){\n TerritoriesAction.territorySelected(loc);\n return;\n }\n }\n },\n getCurrentSelectableLocations: function () {\n // We pass a deep copy of fullLocations, so that any modifications we make to our copy won't effect the original\n let copyFullLocation = JSON.parse(JSON.stringify(this.state.fullLocationList));\n return flattenLocationList(constructSelectableLocationList(copyFullLocation, this.state.userTerritoryList));\n },\n render: function () {\n let locationNames = this.getCurrentSelectableLocations();\n // Get only the names of locations from our array of tuples\n locationNames = locationNames.map(function(location){\n // Hacky solution to fix duplicate name issue\n // We only have 2 occurrences of duplicate names (Georgia and Puerto Rico) in our selectable list as of June 2020\n // Better solution would be to give each location a unique name in this.state.fullLocationList\n if(location.code === \"US_GA\") {\n return \"Georgia, United States of America\"\n } else if (location.code === \"US_PR\") {\n return \"Puerto Rico, United States of America\"\n } else {\n return location.name\n }\n });\n return (\n
    \n \n \n \n
    \n );\n }\n});\n\nwindow.TerritorySelector = TerritorySelector;\nexport default TerritorySelector;\n","import React, { useContext } from \"react\";\nimport PropTypes from \"prop-types\";\n\nimport { TabContext } from \"./TabGroup\";\nimport Tab from \"./Tab\";\n\nexport default function TabAnchor({ href, ...props }) {\n const { selectedTab } = useContext(TabContext);\n\n const isSelected = props.selected || props.value === selectedTab;\n\n return (\n <>\n {isSelected ? (\n \n ) : (\n \n \n \n )}\n \n );\n}\n\nTabAnchor.propTypes = {\n href: PropTypes.string.isRequired,\n};\n","import TabAnchor from \"../lds/tabs/TabAnchor\";\nimport TabGroup from \"../lds/tabs/TabGroup\";\n\nconst DashboardNavTabs = ({\n items,\n selectedItem\n }) => {\n\n const tabAnchors = items.map((item, index) => {\n return ;\n });\n\n return(\n {}}\n selectedTab={selectedItem}\n >\n {tabAnchors}\n \n );\n}\n\nwindow.DashboardNavTabs = DashboardNavTabs;\nexport default DashboardNavTabs;\n","const StudiesCard = (props) => {\n return (\n
    \n \n
    \n \n
    \n
    \n
    \n

    {props.title}

    \n

    {props.subtitle}

    \n
    \n
    \n
    \n {props.org_name} has {props.about} {props.count} studies {props.subtitle}. This is as according to clinicaltrials.gov and updated {props.comparable_date}\n
    \n
    \n
    \n

    {props.title}

    \n

    {props.subtitle}

    \n
    {props.count}
    \n
    \n
    \n
    \n
    \n

    * according to clinicaltrials.gov

    \n
    \n
    \n );\n};\n\nwindow.StudiesCard = StudiesCard;\nexport default StudiesCard;\n","const TherapeuticArea = (props) => {\n const hrClasses = [\"therapeutic_area_holder\"];\n let pixels = 10;\n if(props.therapeutic_data.count == \"0\"){\n hrClasses.push(\"therapeutic_area_holder_zero\");\n }\n else{\n pixels = (props.therapeutic_data.count/props.max_therapies*90) + 10;\n }\n const hrStyle = {\n width: pixels + \"%\"\n }\n return (\n
    \n {props.therapeutic_data.name}\n
    \n
    \n );\n};\n\nexport default TherapeuticArea;\n\n\n","import TherapeuticArea from \"./therapeuticArea\";\n\nconst TherapeuticAreaCard = (props) => {\n const therapeuticAreas = _.map(props.therapeutic_areas, function(therapeutic_data, index){\n return \n }.bind(this));\n return (\n
    \n \n
    \n \n
    \n
    \n
    \n

    Therapeutic Area of Focus

    \n

    in order of focus

    \n
    \n
    \n
    \n {props.org_name} has focus in the following therapeutic areas, sorted by the company's focus. Areas of focus that are greyed out indicated no events have taken place in that therapeutic area.\n
    \n
    \n
    \n

    Therapeutic Area of Focus

    \n

    in order of focus

    \n
    \n {therapeuticAreas}\n
    \n
    \n
    \n
    \n
    \n );\n};\n\nwindow.TherapeuticAreaCard = TherapeuticAreaCard;\nexport default TherapeuticAreaCard;\n","import BootstrapRow from \"./bootstrapRow\";\nimport BootstrapSpan from \"./bootstrapSpan\";\n\nconst BootstrapFullWidthRow = (props) => {\n return (\n \n \n {props.children}\n \n \n );\n};\n\nwindow.BootstrapFullWidthRow = BootstrapFullWidthRow;\nexport default BootstrapFullWidthRow;\n","import BootstrapRow from \"../../generic/htmlElements/bootstrapRow\";\nimport BootstrapSpan from \"../../generic/htmlElements/bootstrapSpan\";\n\nconst ZoomInfoHeader = function (props) {\n var total_credits_this_month =\n props.remaining_for_month + props.spent_this_month;\n var badge;\n var isApolloActive = _.contains(\n Zymewire.user.feature_tags,\n \"can_use_apollo_contact_search\"\n );\n\n if (!isApolloActive) {\n if (props.remaining_for_month > 0) {\n var title_text =\n \"You have \" +\n props.remaining_for_month +\n \" out of \" +\n total_credits_this_month +\n \" contact reveal credits remaining for this month. You can spend up to \" +\n props.allocation_per_month +\n \" credits each calendar month.\";\n badge = (\n
    \n

    \n \n {props.remaining_for_month}\n \n

    \n
    \n );\n } else {\n var title_text =\n \"Sorry, you have used all your credits for this month. You can spend up to \" +\n props.allocation_per_month +\n \" credits each calendar month. Contact \" +\n I18n.t(\"contact.support_email\") +\n \" if you want to discuss changing your limits.\";\n badge = (\n
    \n

    \n \n {props.remaining_for_month}\n \n

    \n
    \n );\n }\n }\n var img_style = { marginTop: \"-3px\" };\n const help_title_text =\n \"Not sure how to use \" +\n I18n.t(\"brand.name\") +\n \" to find new contacts? Click for an explanation.\";\n const help_url = I18n.t(\"help.articles.finding_contact_info\");\n return (\n \n \n

    \n Contact search{\" \"}\n \n Find out more.\n \n

    \n
    \n {badge}\n
    \n );\n};\n\nexport default ZoomInfoHeader;\n","import BootstrapFullWidthRow from \"../generic/htmlElements/bootstrapFullWidthRow\";\n\nconst CompanyDetailsPanel = createReactClass({\n getInitialState: function () {\n return { desc_short: true };\n },\n toggleDescription: function () {\n var short = !this.state.desc_short;\n this.setState({ desc_short: short });\n track('zoominfo_click_company_description', 'Expand company description', { company_name: this.props.name, description_short: short });\n },\n trackClickOutToCompany: function () {\n track('zoominfo_click_to_company', 'Go to original company record', { company_name: this.props.name, zinfo_url: this.props.provider_url });\n },\n render: function () {\n if (this.props.name) {\n let description_text;\n if (this.props.description && this.props.description.length > 0) {\n if (this.state.desc_short && this.props.description.length > 400) {\n var maxLength = 400; // maximum number of characters to extract\n\n //trim the string to the maximum length\n var trimmedString = this.props.description.substr(0, maxLength);\n\n //re-trim if we are in the middle of a word\n trimmedString = trimmedString.substr(0, Math.min(trimmedString.length, trimmedString.lastIndexOf(\" \")));\n description_text =

    {trimmedString}\n ...more\n

    ;\n }\n else {\n var less_link;\n if (this.props.description.length > 400) {\n less_link = (less);\n }\n description_text =
    \n

    {this.props.description} {less_link}

    \n

    \n See the '{this.props.name}' entry\n

    \n
    ;\n }\n }\n return (\n \n
    \n {description_text}\n
    \n
    \n );\n }\n else {\n return null;\n }\n }\n});\n\nexport default CompanyDetailsPanel;\n","const ZoominfoPersonName = function(props) {\n var isDeliverable = !(props.deliverability === 'undeliverable' || props.deliverability === '');\n var enableSFAddButon = isDeliverable;\n\n var addToSF;\n\n // In V3 we are allowing users to populate contacts even if they are undeliverable\n if (props.handleAddToSF && enableSFAddButon) {\n addToSF = ;\n }\n\n\n var locAddress;\n if (props.localAddress) {\n\n var addressString = _.uniq(_.compact([props.localAddress.city, props.localAddress.state, props.localAddress.country]));\n locAddress = {addressString.join(\", \")};\n }\n\n var revealed_ago;\n if (props.revealed_date) {\n revealed_ago = \" - revealed \" + moment(props.revealed_date).fromNow();\n }\n\n\n return (\n \n {props.FirstName} {props.LastName} {revealed_ago}\n
    \n {props.JobTitle}\n
    \n {locAddress}\n
    \n {/*This is confusing af and needs to be better... maybe indicate in the button*/}\n {/*\"Add to Salesforce\" for contacts not in SF at all*/}\n {/*\"Add again to Salesforce\" for contacts already in SF*/}\n {/*GJ - 2020.10.27*/}\n {addToSF}\n
    \n \n );\n}\n\nexport default ZoominfoPersonName;\n","const ZoominfoPersonCompany = function(props) {\n return (\n \n {props.CompanyName}\n \n );\n}\n\nexport default ZoominfoPersonCompany;\n","const CopyToClipBoardButton = function(props) {\n const copyText = (event) => {\n event.stopPropagation();\n event.preventDefault();\n\n let text = props.text\n\n var text_el = document.getElementById(props.uid);\n\n if (window.navigator.clipboard) {\n window.navigator.clipboard.writeText(text)\n } else {\n copyTextLegacy();\n }\n\n text_el.style.display = 'block'\n\n setTimeout(function() { text_el.style.display = \"none\" }, 1000)\n }\n\n /** \n * Very old browsers do not support `window.navigator.clipboard`.\n * This function may be retired in the future when we are confident\n * that all users have migrated to modern browsers.\n * \n * - Bilal, Oct. 5 2023\n */\n const copyTextLegacy = () => {\n const el = document.createElement('textarea');\n\n el.style.position = 'fixed';\n el.style.top = 0;\n el.style.left = 0;\n el.style.border = 'none';\n el.style.outline = 'none';\n el.style.boxShadow = 'none';\n el.style.background = 'transparent';\n el.value = props.text;\n\n document.body.appendChild(el);\n el.select();\n document.execCommand('copy');\n document.body.removeChild(el);\n }\n\n return (\n \n Copy\n Copied\n \n );\n}\n\nexport default CopyToClipBoardButton;\n","const FlagContactButton = createReactClass({\n getInitialState: function () {\n return {\n flagging: false\n };\n },\n flagContact: function(e){\n e.preventDefault();\n e.stopPropagation();\n if(this.state.flagging === false){\n this.setState({\n flagging: true\n });\n FlagContactActions.flagContact({\n orgName: this.props.orgName,\n organizationId: this.props.organizationId,\n contactId: this.props.contactId,\n personId: this.props.personId,\n deliverability: this.props.deliverability\n }\n )\n }\n },\n render: function () {\n\n const flagButtonClasses = ['button-small', 'button-secondary', 'rspec_flag_contact'];\n let buttonText = 'Click for credit if your email bounced';\n\n if(this.state.flagging === true) {\n buttonText = 'flagging...';\n flagButtonClasses.push('button-disable');\n }\n\n let flagContact = \n\n if(this.props.flagged === true) {\n flagContact = \"Credit request has been received and this contact is now under review.\"\n }\n\n const input_div_style = {position:'relative', float:'left', marginRight:'10px'};\n\n return (\n \n {flagContact}\n \n )\n\n }\n});\n\nexport default FlagContactButton;\n","import CopyToClipBoardButton from '../generic/copyToClipboardButton';\nimport FlagContactButton from \"./flagContactButton\";\n\nconst DeliverabilityMessage = createReactClass({\n isApolloActive: function () {\n return _.contains(Zymewire.user.feature_tags, \"can_use_apollo_contact_search\");\n },\n\n deliverabilityIndicator: function (deliverability) {\n const UNDELIVERABLE = {\n color: 'red',\n infoBody: 'No credits deducted. This email address is not active. For more details check out our help section',\n textDecoration: 'line-through',\n icon: 'fa fa-close'\n };\n const DEFAULT = {\n color: '',\n infoBody: '',\n textDecoration: 'none',\n icon: 'fa'\n };\n\n // we need to do this since DeliverabilityMessage is being used in generate email component\n // and we should not be showing the flag button in generate email.\n let passThese = {}\n\n if (!this.props.generateEmailSection) {\n passThese = {\n entityId: this.props.current_contact.entity_id,\n orgName: this.props.company.name,\n organizationId: this.props.org_id,\n contactId: this.props.provider_id,\n personId: this.props.entity_id,\n deliverability: this.props.deliverability,\n flagged: this.props.flagged\n };\n }\n\n switch (deliverability) {\n case 'deliverable':\n return this.deliverable(passThese);\n case 'undeliverable':\n return UNDELIVERABLE;\n case 'risky':\n return this.risky(passThese);\n default: {\n return DEFAULT;\n }\n }\n },\n\n deliverable: function(passThese) {\n var infoBody;\n\n if (!this.isApolloActive() && !this.props.generateEmailSection) {\n infoBody = this.props.revealedSection ? : '';\n } else if(this.isApolloActive()){\n infoBody = \"\";\n } else {\n infoBody = 'This email address is active. Go ahead and reach out. For more details check out our help section.';\n }\n\n return {\n color: 'green',\n infoBody,\n textDecoration: 'none',\n icon: 'fa fa-check'\n }\n },\n\n risky: function(passThese) {\n var infoBody;\n\n if (!this.props.generatedEmail) {\n return this.deliverable(passThese);\n }\n\n if (!this.isApolloActive() && !this.props.generateEmailSection && !this.props.generatedEmail) {\n infoBody = this.props.revealedSection ? : '';\n } else if(this.isApolloActive()){\n infoBody = \"\";\n } else {\n infoBody = 'No credits deducted. This email address may or may not be active. For more details check out our help section';\n }\n\n return {\n color: 'orange',\n infoBody: infoBody,\n textDecoration: 'none',\n icon: 'fa fa-exclamation'\n }\n },\n\n clickedEmail: function(e){\n ContactSearchAction.clickedEmail();\n },\n\n render: function () {\n\n let deliverability = {infoBody: this.props.loading_text}; //text field can be undefined initially.\n let email = this.props.email;\n let deliverability_result = this.props.deliverability_result;\n\n let score = this.props.score;\n let on_click_email = this.clickedEmail;\n let mail_to = \"mailto:\" + email;\n\n let email_detail;\n let deliverability_score_message;\n\n let deliverability_checker;\n let is_loading = !this.props.deliverability_result;\n let clipboard_uid = this.props.entity_id\n\n if (this.props.revealedSection){\n clipboard_uid += '_revealed_section'\n }\n\n let copyIcon = \n\n if (deliverability_result) {\n let deliverability_icon_style = {\n marginLeft: '5px',\n fontSize: '14px'\n };\n\n deliverability = this.deliverabilityIndicator(deliverability_result);\n const title = _.isString(deliverability.infoBody) ? deliverability.infoBody : \"\"\n\n email_detail = (\n
    \n \n {email}\n \n \n {copyIcon}\n
    \n );\n\n deliverability_checker =

    {deliverability.infoBody}

    ;\n\n }\n else {\n email_detail = (\n
    \n \n {email}\n \n {copyIcon}\n
    \n );\n\n deliverability_checker = (\n

    \n {deliverability.infoBody}\n \n

    \n );\n }\n\n return (\n
    \n {email_detail}\n {deliverability_score_message}\n
    \n {deliverability_checker}\n
    \n )\n }\n})\n\nexport default DeliverabilityMessage;\n","import DeliverabilityMessage from \"./deliverabilityMessage\";\n\nconst ContactDeliverabilityChecker = createReactClass({\n componentDidMount: function () {\n let current_contact = this.props.current_contact;\n let email = this.props.email || current_contact.email;\n let deliverability = this.props.deliverability || current_contact.deliverability;\n\n if (!this.props.updateCurrentContact || !email || deliverability) {\n return;\n }\n\n ContactSearchAction.checkDeliverability(current_contact.provider_id);\n\n },\n render: function () {\n let current_contact = this.props.current_contact;\n let revealedSection = this.props.revealedSection;\n let generatedEmail = this.props.generated_email || this.props.current_contact.generated_email;\n\n let email = this.props.current_contact.email;\n let deliverability_message;\n\n let loading_text = '...Performing validation on email from third party source...';\n\n if (email) {\n deliverability_message = ;\n }\n\n return (\n
    \n {deliverability_message}\n
    \n );\n }\n});\n\nexport default ContactDeliverabilityChecker;\n","import ContactSearchAction from \"../../../stores/actions/contactSearch/contactSearchActions\"\nimport ContactDeliverabilityChecker from \"../contactDeliverabilityChecker\";\n\nconst ZoomInfoRevealed = function(props) {\n const userClickedPhone = () => {\n ContactSearchAction.clickedPhone()\n }\n\n let revealedSection = props.revealedSection;\n\n var current_contact = props.current_contact;\n\n var mobile = current_contact.phone.mobile;\n var email = current_contact.email;\n var company_landline = current_contact.phone.company_landline;\n\n var direct_phone;\n if (mobile && (mobile != company_landline)) {\n var ph_no = mobile;\n var tel_to = \"tel:\" + ph_no;\n direct_phone = ;\n }\n\n var company_phone;\n if (company_landline) {\n var ph_no = company_landline;\n var tel_to = \"tel:\" + ph_no;\n company_phone = ;\n }\n\n var contactDetails;\n\n if (!(email || direct_phone || company_landline)) {\n contactDetails = (\n
    \n Sorry, our 3rd party contact info provider could not find a match. No credits were deducted.\n
    \n );\n } else {\n contactDetails = (
    \n {direct_phone}\n {company_phone}\n \n
    \n );\n }\n\n return (\n \n {contactDetails}\n \n );\n}\n\nexport default ZoomInfoRevealed;\n","const ZoominfoPersonRecordOpenCaret = function(props) {\n var class_name = props.open ? \"rspec_toggle_revealed_by fa fa-chevron-up action_link\" : \"rspec_toggle_revealed_by fa fa-chevron-down action_link\";\n return (\n \n \n \n );\n}\n\nexport default ZoominfoPersonRecordOpenCaret","const ZoominfoPersonLinks = createReactClass({\n clickToViewLIProfile: function () {\n track('zoominfo_click_out_to_LI_profile', 'Search LI from revealed contact', { profile_url: this.props.provider_url });\n track_engagement('Search LI from revealed contact', { profile_url: this.props.provider_url });\n },\n render: function () {\n if(this.props.linked_in_url){\n return (\n \n View on LinkedIn\n \n );\n }\n else {\n const li_url = 'https://www.linkedin.com/search/results/all/?keywords=' + encodeURIComponent([this.props.first_name, this.props.last_name, this.props.company_name].join(' ')) + '&origin=GLOBAL_SEARCH_HEADER';\n return (\n \n Check on LinkedIn\n \n );\n }\n\n\n\n }\n});\n\nexport default ZoominfoPersonLinks\n","const ZoominfoCompanyAddress = function(props) {\n var company_address;\n\n if (props.company && props.company.address) {\n company_address = props.company.address;\n }\n\n if (company_address) {\n var street;\n if (company_address.street) {\n street =
    {company_address.street}
    ;\n }\n var city;\n if (company_address.city) {\n city =
    {company_address.city}
    ;\n }\n var state;\n if (company_address.state) {\n state =
    {company_address.state}, {company_address.zip}
    ;\n }\n var country;\n var zi_hack = company_address.country;\n if (zi_hack) {\n country =
    {zi_hack}
    ;\n }\n return (\n \n {street}\n {city}\n {state}\n {country}\n \n );\n }\n else {\n return  ;\n }\n};\n\nexport default ZoominfoCompanyAddress;\n","const ZoominfoContactPurchasedDetails = function(props) {\n var revealed_date = moment(props.current_contact.created_at).format('MMM Do, YYYY');\n return (\n \n Revealed by {props.current_contact.purchased_by} on {revealed_date}\n \n );\n}\n\nexport default ZoominfoContactPurchasedDetails;\n","import ZoominfoPersonLinks from \"./zoominfoPersonLinks\";\nimport ZoominfoCompanyAddress from \"./zoominfoCompanyAddress\";\nimport ZoominfoContactPurchasedDetails from \"./zoominfoContactPurchasedDetails\";\n\nconst ZoominfoPurchasedContactFurtherDetails = function(props) {\n return (\n \n \n \n \n \n );\n}\n\nexport default ZoominfoPurchasedContactFurtherDetails","import ZoominfoPersonName from \"./zoominfoPersonName\";\nimport ZoominfoPersonCompany from \"./zoominfoPersonCompany\";\nimport BootstrapFullWidthRow from \"../../generic/htmlElements/bootstrapFullWidthRow\";\nimport ZoomInfoRevealed from \"./zoomInfoRevealed\";\nimport ZoominfoPersonRecordOpenCaret from \"./zoominfoPersonRecordOpenCaret\";\nimport ZoominfoPurchasedContactFurtherDetails from \"./zoominfoPurchasedContactFurtherDetails\";\n\nconst ZoominfoPurchasedContact = createReactClass({\n getInitialState: function () {\n return ({ open: false });\n },\n\n toggleOpenState: function (e) {\n if (!(_.contains(e.target.classList, 'dont_stop'))) {\n e.stopPropagation();\n e.preventDefault();\n var new_state = !this.state.open;\n this.setState({ open: new_state });\n }\n },\n\n handleAddToSF: function (e) {\n e.preventDefault();\n e.stopPropagation();\n var mixpanelOptions = { action: \"add to salesforce modal triggered\", location: \"from contact search\", type: \"contact or lead selection\" };\n ContactSearchAction.addContactToSalesforce(this.props.entity_id, mixpanelOptions);\n },\n\n render: function () {\n var further_details;\n if (this.state.open) {\n further_details = ;\n }\n var handleAddToSF;\n if (this.props.can_use_salesforce) {\n handleAddToSF = this.handleAddToSF;\n }\n\n return (\n \n
    \n \n \n \n \n\n \n\n \n \n \n {further_details}\n \n
    \n
    \n
    \n );\n }\n});\n\nexport default ZoominfoPurchasedContact","import ZoominfoPurchasedContact from \"./zoomInfo/zoominfoPurchasedContact\";\n\nconst ExistingContacts = createReactClass({\n getInitialState: function () {\n return { display_older: false };\n },\n toggleDisplayOlder: function (e) {\n e.preventDefault();\n this.setState({ display_older: true });\n },\n render: function () {\n if (this.props.current_contacts.length < 1) {\n return false;\n }\n\n var thirty_days_ago = moment().subtract(30, 'days');\n var display_list = _.filter(this.props.current_contacts, function (contact) {\n return thirty_days_ago.isBefore(contact.created_at);\n });\n\n var old_list = _.filter(this.props.current_contacts, function (contact) {\n return thirty_days_ago.isAfter(contact.created_at);\n });\n\n var more_button;\n if (old_list.length > 0 && !this.state.display_older) {\n more_button =

    Contacts revealed more than 30 days ago ({old_list.length})

    ;\n }\n\n var contacts_revealed_title = \"Contacts revealed in the last 30 days\";\n if (this.state.display_older) {\n display_list = this.props.current_contacts;\n contacts_revealed_title = \"Contacts revealed\";\n }\n var contact_list =

    - none -

    ;\n if (display_list.length > 0) {\n var contact_list = display_list.map(function (contact) {\n return ;\n }.bind(this));\n }\n return (\n
    \n

    {contacts_revealed_title}

    \n {contact_list}\n {more_button}\n

    Contact search

    \n
    \n );\n }\n});\n\nexport default ExistingContacts;\n","const ZoominfoResultsText = function(props) {\n if (props.totalResults > 100) {\n return (Retrieved the first 100 people of {props.totalResults} found);\n }\n else if (props.totalResults > 1) {\n return ({props.totalResults} people found);\n }\n else if (props.totalResults > 0) {\n return (1 person found);\n }\n else {\n return (No Contact Information Found: Input a first and last name to check for validated email formulas);\n }\n}\n\nexport default ZoominfoResultsText;\n","var NoInfoNotice = () => No information available yet from 3rd party contact database.;\n\nexport default NoInfoNotice;\n ","const ZoominfoPhoneAvailable = function(props) {\n var phone = null;\n\n if (!props.current_contact && props.phone.mobile) {\n phone = \"Phone\"\n }\n\n if(props.current_contact && props.current_contact.phone.mobile){\n var ph_no = props.current_contact.phone.mobile;\n var tel_to = \"tel:\" + ph_no;\n phone = Revealed\n }\n\n return (\n \n {phone}\n \n )\n}\n\nexport default ZoominfoPhoneAvailable;\n","const ZoominfoEmailAvailable = function(props) {\n // Show the text only if the company that we are in has\n // domain or the email is present from the contact provider\n // We are doing this can the validity checker doesnt send back\n // unless we have a domain. This is a degradation in the User experience.\n var email = 'Email';\n\n if (!props.showEmail) {\n email = null;\n }\n\n if(props.current_contact && props.current_contact.email){\n var email_add = props.current_contact.email;\n var mail_to = \"mailto:\" + email_add;\n email = Revealed\n }\n\n return (\n \n {email}\n \n )\n}\n\nexport default ZoominfoEmailAvailable;\n","const ZoominfoEmailReveal = function(props) {\n var email = \"***@***\";\n\n if (!props.showEmail) {\n email = \"\";\n }\n\n return (\n \n {email}\n \n );\n}\n\nexport default ZoominfoEmailReveal;\n","const ZoominfoPhoneReveal = function(props) {\n var phone = props.DirectPhone ? \"#######\" : \"\";\n\n if (!props.showPhone) {\n phone = \"\";\n }\n\n return (\n \n {phone}\n \n );\n}\n\nexport default ZoominfoPhoneReveal;\n","import Button from \"@javascript/reactComponents/lds/Button\";\nimport ButtonGroup from \"@javascript/reactComponents/lds/ButtonGroup\";\nimport {\n ModalBody,\n ModalFooter,\n ModalHeader,\n} from \"@javascript/reactComponents/lds/modal/Modal\";\n\nconst GDPRModal = function (props) {\n var contactLocation = props.location || \"an unlisted location\";\n\n var gdprThe = [\"Czech Republic\", \"Netherlands\", \"United Kingdom\"];\n if (gdprThe.includes(contactLocation)) {\n contactLocation = \"the \" + contactLocation;\n }\n\n return (\n <>\n \n\n \n

    \n This person appears to be from {contactLocation}. As data processors,\n neither our 3rd party contact providers, nor {I18n.t(\"brand.name\")}{\" \"}\n has explicit consent from this person for you to email them. To help\n you stay compliant with GDPR, please confirm that you are reaching out\n for business-to-business purposes between your business and this\n person's employer for one of the following reasons:\n

    \n
    \n

    \n 1) - Any reason, because I have confirmed this person is not\n in fact in the European Union (GDPR does not apply);\n

    \n

    \n OR 2a) usage is based on the person having given consent to\n the use of her or his personal data for one or more specific\n purposes;\n

    \n

    \n OR 2b) usage is necessary for the performance of a contract\n to which this person is party or in order to take steps at the\n request of this person prior to entering into a contract;\n

    \n

    \n OR 2c) processing is necessary for compliance with a legal\n obligation to which my company is subject;\n

    \n

    \n OR 2d) processing is necessary in order to protect the vital\n interests of this person or of another natural person;\n

    \n

    \n OR 2e) processing is necessary for the performance of a task\n carried out in the public interest or in the exercise of official\n authority vested in my company;\n

    \n

    \n OR 2f) processing is necessary for the purposes of the\n legitimate interests pursued by my company or by a third party,\n except where such interests are overridden by the interests or\n fundamental rights and freedoms of this person which require\n protection of personal data, in particular where the data subject is\n a child.\n

    \n
    \n
    \n\n \n \n \n Cancel\n \n\n \n Confirm\n \n \n \n \n );\n};\n\nexport default GDPRModal;\n","import { Modal } from \"@javascript/reactComponents/lds/modal/Modal\";\nimport GDPRModal from \"./GDPRModal\";\n\nconst ZoominfoBuyContact = createReactClass({\n getInitialState: function () {\n return {\n privacy_satisfied: true,\n gdpr_submitted: false,\n gdprModalOpen: false,\n gdprCountry: \"\",\n };\n },\n\n isApolloActive: function(){\n return Zymewire.user.feature_tags.includes(\"can_use_apollo_contact_search\");\n },\n\n hasCredits: function() {\n return this.props.credits_available > 0;\n },\n\n tooltipText: function(){\n var tooltipText = null;\n\n if (this.isApolloActive()) {\n return \"\";\n }\n\n if (!this.hasCredits()) {\n tooltipText = \"Sorry, you have no credits left for this month.\"\n } else if (this.props.showPhone && this.props.showEmail) {\n tooltipText = \"Use a single credit to see both their email address and phone number\";\n } else if (this.props.showEmail){\n tooltipText = \"Use a credit to see their email address\";\n } else {\n tooltipText = \"Reveal phone number without using credits\";\n }\n\n return tooltipText;\n },\n\n buyContact: function(){\n if(this.isApolloActive() || this.hasCredits()){\n if(this.state.privacy_satisfied === false){\n var zi_country_hack = null;\n if(this.props.LocalAddress){\n zi_country_hack = this.props.LocalAddress.country;\n }\n\n this.setState({\n gdprCountry: zi_country_hack,\n gdprModalOpen: true,\n });\n }\n else{\n $(\"body\").addClass(\"wait\");\n var locAddress;\n if(this.props.LocalAddress){\n var zi_country_hack = this.props.LocalAddress.country;\n var addressString = _.uniq(_.compact([this.props.LocalAddress.city, this.props.LocalAddress.state, zi_country_hack]));\n locAddress = addressString.join(\", \");\n }\n $(this.refs.revealButton).text('Sending...')\n setTimeout(function(){\n ContactSearchAction.buyContact(this.props.PersonId, locAddress, this.state.gdpr_submitted, this.props.provider);\n }.bind(this), 1000);\n }\n }\n },\n confirmPrivacy: function(e){\n this.setState({privacy_satisfied:true,gdpr_submitted:true}, this.buyContact);\n this.closeGdprModal();\n },\n closeGdprModal: function() {\n this.setState({gdprModalOpen: false});\n },\n componentDidMount:function(){\n var privacy_havens = ['Austria','Belgium','Bulgaria','Croatia','Cyprus','Czech Republic','Denmark','Estonia','Finland','France','Germany','Greece','Hungary','Ireland','Italy','Latvia','Lithuania','Luxembourg','Malta','Netherlands','Poland','Portugal','Romania','Slovakia','Slovenia','Spain','Sweden','United Kingdom'];\n if(this.props.LocalAddress){\n var zi_country_hack = this.props.LocalAddress.country;\n const gdprIndex = privacy_havens.findIndex(item => zi_country_hack.toLowerCase() === item.toLowerCase());\n if(gdprIndex !== -1){\n this.setState({privacy_satisfied: false});\n }\n }\n },\n render: function () {\n\n const class_names = ['button-small button-primary'];\n\n if(this.isApolloActive() || this.hasCredits()){\n class_names.push('rspec_reveal_contact');\n }\n else {\n class_names.push('button-disable');\n }\n\n return (\n \n \n \n \n \n \n );\n }\n});\n\nexport default ZoominfoBuyContact;","import ZoominfoEmailReveal from \"./zoominfoEmailReveal\";\nimport ZoominfoPhoneReveal from \"./zoominfoPhoneReveal\";\nimport ZoominfoPersonLinks from \"./zoominfoPersonLinks\";\nimport ZoominfoCompanyAddress from \"./zoominfoCompanyAddress\";\nimport ZoominfoBuyContact from \"./zoominfoBuyContact\";\nimport ZoomInfoRevealed from \"./zoomInfoRevealed\";\n\nconst ZoominfoFurtherPersonDetails = function(props) {\n var has_details = props.showPhone || props.showEmail;\n\n var buyButton = ;\n\n var last_section = [\n ,\n \n ];\n\n if(has_details){\n last_section.push(buyButton);\n }\n\n if(props.current_contact){\n if (props.current_contact.email || props.current_contact.phone.mobile) {\n last_section = \n } else {\n last_section = null;\n }\n }\n\n return (\n \n \n \n {last_section}\n \n );\n}\n\nexport default ZoominfoFurtherPersonDetails;\n\n","const ZoominfoLastReviewed = function(props) {\n if(props.LastUpdatedDate && props.LastUpdatedDate.trim().length > 0) {\n var mentioned = moment(props.LastUpdatedDate, \"YYYY-MM-DD\").fromNow();\n return (\n \n Last mentioned\n
    \n {mentioned}\n \n )\n }\n else{\n return ( );\n }\n}\n\nexport default ZoominfoLastReviewed;\n","import BootstrapFullWidthRow from \"../../generic/htmlElements/bootstrapFullWidthRow\";\nimport NoInfoNotice from \"./noInfoNotice\";\nimport ZoominfoPhoneAvailable from \"./zoomInfoPhoneAvailable\";\nimport ZoominfoEmailAvailable from \"./zoominfoEmailAvailable\";\nimport ZoominfoFurtherPersonDetails from \"./zoominfoFurtherPersonDetails\";\nimport ZoominfoLastReviewed from \"./zoominfoLastReviewed\";\nimport ZoominfoPersonCompany from \"./zoominfoPersonCompany\";\nimport ZoominfoPersonName from \"./zoominfoPersonName\";\nimport ZoominfoPersonRecordOpenCaret from \"./zoominfoPersonRecordOpenCaret\";\n\nconst ZoominfoPersonResult = createReactClass({\n getInitialState: function () {\n return ({open: false, current_contact: this.props.current_contact});\n },\n toggleOpenState: function (e) {\n if(!(_.contains(e.target.classList, 'dont_stop'))) {\n e.stopPropagation();\n e.preventDefault();\n var new_state = !this.state.open;\n this.setState({open: new_state});\n }\n },\n handleAddToSF: function(e){\n e.preventDefault();\n e.stopPropagation();\n ContactSearchAction.addContactToSalesforce(this.props.current_contact.entity_id, null);\n },\n\n updateCurrentContact: function(contact) {\n this.setState({current_contact: contact})\n },\n\n render: function () {\n var showEmail = ((this.props.company_domain && !this.props.hide_email) || this.props.email);\n var showPhone = this.props.phone.mobile;\n var has_details = showEmail || showPhone;\n\n var further_details;\n var zoominfo_contact_id = this.props.entity_id;\n\n if (this.state.open) {\n further_details = \n }\n\n var current_employment = this.props.company;\n var handleAddToSF;\n var current_contact = this.props.current_contact;\n\n var contactInfo = [\n ,\n ,\n ,\n \n ];\n\n\n if (!has_details) {\n contactInfo = ;\n }\n\n if(current_contact && this.props.can_use_salesforce){\n handleAddToSF = this.handleAddToSF;\n }\n\n return (\n \n
    \n \n \n \n \n \n {contactInfo}\n \n {further_details}\n \n
    \n
    \n
    \n )\n }\n});\n\nexport default ZoominfoPersonResult;\n","import ZoominfoPersonResult from \"./zoominfoPersonResult\";\n\nconst ZoominfoDisplayResults = function(props) {\n if( props.search_results.max_results === 0){\n return false;\n }\n\n var start = (props.start_point - 1) * 20;\n var end = start + 20;\n var people;\n\n people = props.search_results.records.slice(start, end).map(function (person) {\n var pers_id = person.entity_id;\n return \n }.bind(this));\n\n return (\n
    \n {people}\n
    \n )\n}\n\nexport default ZoominfoDisplayResults;\n","/**\n * WARNING: This component gets refs passed to it from\n * parent components. WHen refactoring to a function component,\n * this must be taken into account.\n * \n * Consider using React.forwardRef().\n * \n */\nconst PaginationBar = createReactClass({\n propTypes: {\n pageSize: PropTypes.number.isRequired,\n totalResults: PropTypes.number.isRequired,\n currentPage: PropTypes.number.isRequired,\n changePage: PropTypes.func.isRequired\n },\n render: function () {\n if (this.props.totalResults < this.props.pageSize) {\n return false;\n }\n var last_page = Math.ceil(this.props.totalResults / this.props.pageSize);\n var start_page = this.props.currentPage < 6 ? 1 : this.props.currentPage - 3\n var end_page = (last_page - this.props.currentPage) > 4 ? this.props.currentPage < 5 ? 9 : this.props.currentPage + 4 : last_page + 1;\n end_page = end_page > last_page ? last_page : end_page;\n var first_page;\n var start_section;\n if (start_page > 1) {\n first_page =
  • \n \n 1\n \n
  • ;\n start_section =
  • \n ...\n
  • ;\n }\n var main_section;\n var list = [];\n for (var i = start_page; i <= end_page; i++) {\n list.push(i);\n }\n main_section = list.map(function (i) {\n if (i == parseInt(this.props.currentPage)) {\n return (\n
  • \n {i}\n
  • \n );\n }\n else {\n return (\n
  • \n \n {i}\n \n
  • \n );\n }\n\n }.bind(this));\n\n var end_section;\n var terminal_page;\n if (end_page < last_page) {\n end_section =
  • \n ...\n
  • ;\n terminal_page =
  • \n \n {last_page}\n \n
  • ;\n }\n\n\n return (\n\n
    \n
      \n {first_page}\n {start_section}\n {main_section}\n {end_section}\n {terminal_page}\n
    \n
    \n\n )\n }\n});\n\nexport default PaginationBar;\n","import BootstrapRow from \"../generic/htmlElements/bootstrapRow\";\nimport BootstrapSpan from \"../generic/htmlElements/bootstrapSpan\";\nimport BootstrapFullWidthRow from \"../generic/htmlElements/bootstrapFullWidthRow\";\nimport ZoominfoResultsText from \"./zoomInfo/zoominfoResultsText\";\nimport ZoominfoDisplayResults from \"./zoomInfo/zoominfoDisplayResults\";\nimport PaginationBar from \"../generic/pagination/paginationBar\";\n\nconst ContactSearchResults = createReactClass({\n getInitialState: function () {\n return {\n page: this.props.page,\n paginationTop: 0,\n locationRef: null\n };\n },\n UNSAFE_componentWillReceiveProps: function(nextProps) {\n if(this.state.page != nextProps.page){\n this.setState({page: nextProps.page});\n }\n },\n componentDidUpdate: function() {\n if(this.state.locationRef === this.refs.bottomPaginationRef) {\n const paginationTop = this.getBottomPaginationTop();\n if(paginationTop !== this.state.paginationTop) {\n const diff = paginationTop - this.state.paginationTop;\n window.scrollBy(0, diff);\n }\n }\n },\n changePage: function (options, e) {\n e.preventDefault();\n e.stopPropagation();\n const paginationTop = this.getBottomPaginationTop();\n this.setState({locationRef: options.locationRef, paginationTop: paginationTop});\n ContactSearchAction.changePage(options.page);\n },\n getBottomPaginationTop: function() {\n const paginationRef = ReactDOM.findDOMNode(this.refs.bottomPaginationRef);\n return paginationRef.getBoundingClientRect().top;\n },\n\n render: function () {\n\n let currentPage = this.state.page;\n let changePage = this.changePage;\n let start_point = this.state.page;\n\n let displayLength = this.props.display_length;\n let hasResults = this.props.has_results;\n\n let secondResults = hasResults ? : null;\n\n return (\n
    \n \n \n \n \n \n
    \n \n
    \n
    \n
    \n \n \n \n \n \n \n \n \n
    \n {secondResults}\n
    \n
    \n
    \n
    \n )\n }\n})\n\nexport default ContactSearchResults;\n","import Reflux from 'reflux';\nimport ContactSearchAction from \"../../stores/actions/contactSearch/contactSearchActions\";\nimport ContactSearchStore from \"../../stores/contactSearch/contactSearchStore\";\nimport BootstrapFullWidthRow from \"../generic/htmlElements/bootstrapFullWidthRow\";\nimport DeliverabilityMessage from \"./deliverabilityMessage\";\n\nconst GenerateEmailBox = createReactClass({\n getInitialState: function () {\n return {\n is_button_clicked: false,\n hackySearchFlagNasty: this.props.hackySearchFlagNasty\n };\n },\n shouldComponentUpdate: function(nextProps) {\n if (nextProps.hackySearchFlagNasty !== this.state.hackySearchFlagNasty){\n this.setState({\n is_button_clicked: false,\n })\n }\n return nextProps.hackySearchFlagNasty !== this.state.hackySearchFlagNasty;\n },\n UNSAFE_componentWillUpdate(nextProps) {\n this.setState({\n hackySearchFlagNasty: nextProps.hackySearchFlagNasty\n })\n },\n generateEmail: function (e) {\n e.preventDefault();\n e.stopPropagation();\n if (this.props.user_zinfo.remaining_for_month > 0) {\n this.setState({\n is_button_clicked: true\n })\n $(\"body\").addClass(\"wait\");\n let params = {\n first_name: this.props.first_name.trim(),\n last_name: this.props.last_name.trim(),\n };\n ContactSearchAction.generateEmail(params)\n }\n },\n render: function () {\n let basedOn = {firstName: this.props.first_name, lastName: this.props.last_name, company: this.props.company_name}\n return (\n
    \n
    \n

    \n {basedOn.firstName} {basedOn.lastName} was not found. However, we are able to generate a \"Best Guess\" email address for this person. We will use what we know about the format of email addresses at {basedOn.company}, build an email address for {basedOn.firstName} {basedOn.lastName}, and check to see if it's valid. Be sure to include first and last name in your search for best results.\n

    \n

    \n Please be aware that if the email address is found to be deliverable, there will be a 1 credit deduction.\n

    \n
    \n \n
    \n )\n }\n});\n\nconst EmailFormatBestGuessBox = createReactClass({\n mixins: [Reflux.listenTo(ContactSearchStore,\"updateResults\")],\n getInitialState: function(){\n return {\n checkEmailFormatResults: ContactSearchStore.data.check_email_format_result\n }\n },\n updateResults: function(results) {\n this.setState({\n checkEmailFormatResults: results.check_email_format_result\n });\n },\n render: function(){\n let best_guess;\n if (this.state.checkEmailFormatResults) {\n if(this.state.checkEmailFormatResults.email) {\n best_guess = \n }\n else {\n best_guess =
    Could not find email
    \n }\n }\n else {\n best_guess = ;\n }\n return(\n \n
    \n \n \n \n \n \n \n \n
    \n
    {this.props.basedOn.firstName} {this.props.basedOn.lastName} at {this.props.basedOn.company}
    \n
    \n {best_guess}\n
    \n
    \n
    \n )\n }\n });\n\nconst EmailFormatRevealGuessButton = props => {\n let guessButtonToolTip = 'Use a credit to see their email address';\n if (props.credits_available < 1) {\n guessButtonToolTip = \"Sorry, you have no credits left for this month.\"\n }\n\n let guessButtonText = props.isButtonClicked ? (props.checkEmailFormatResults ? '' : 'Fetching Email') : 'Reveal Best Guess';\n return(\n
    \n \n
    \n );\n}\n\nexport default GenerateEmailBox;\n","import BootstrapFullWidthRow from \"../../generic/htmlElements/bootstrapFullWidthRow\";\nimport ContactSearchResults from \"../contactSearchResults\";\nimport GenerateEmailBox from \"../generateEmailBox\";\nimport Input from \"../../lds/Input\";\n\nconst ZoominfoSearch = createReactClass({\n mixins: [Reflux.listenTo(ContactSearchStore, \"updatePage\")],\n getInitialState: function () {\n return {\n search_params: { firstName: \"\", lastName: \"\", title: \"\" },\n validSearchFlag: false,\n hackySearchFlagNasty: true,\n page: ContactSearchStore.data.page\n };\n },\n changeSearchParams: function (search_params) {\n var new_params = _.extend(this.state.search_params, search_params);\n this.setState({ search_params: new_params });\n this.searchCheck();\n },\n searchCheck: function () {\n if (this.state.search_params.firstName.length >= 2 || this.state.search_params.lastName.length >= 2 || this.state.search_params.title.length >= 2) {\n this.setState({ validSearchFlag: true });\n } else {\n this.setState({ validSearchFlag: false });\n }\n },\n doSearch: function () {\n track('zoominfo_seacrh', 'Performed a search with 3rd party contact search', _.extend(this.state.search_params, { company: this.props.company_name }));\n this.setState({ hackySearchFlagNasty: !this.state.hackySearchFlagNasty });\n ContactSearchAction.search(_.extend(this.state.search_params));\n },\n updatePage: function (data) {\n this.setState({ page: data.page });\n },\n render: function () {\n let display_length = this.props.search_results.max_results > 100 ? 100 : parseInt(this.props.search_results.max_results);\n let has_results = this.props.search_results.max_results > 0;\n let results;\n let show_gen_email = this.props.show_gen_email;\n let company_domain = this.props.company_domain;\n let first_name = this.state.search_params.firstName;\n let last_name = this.state.search_params.lastName;\n\n if (!has_results && company_domain && show_gen_email) {\n results = ;\n } else {\n results = ;\n }\n\n return (
    \n \n \n \n {results}\n
    );\n }\n});\n\nconst ZoominfoSearchInputForm = createReactClass({\n handleChangeFirstName: function (value) {\n this.props.changeParams({ firstName: value });\n },\n handleChangeLastName: function (value) {\n this.props.changeParams({ lastName: value });\n },\n handleChangeTitle: function (value) {\n this.props.changeParams({ title: value });\n },\n handleSearch: function (e) {\n e.preventDefault();\n e.stopPropagation();\n this.props.do_search();\n },\n cancelSearch: function (e) {\n e.preventDefault();\n e.stopPropagation();\n this.props.changeParams({ firstName: '', lastName: '', title: '' });\n this.props.do_search();\n },\n render: function () {\n const searching = this.props.searching ? : null;\n\n let fname_placeholder = \"First name\";\n let lname_placeholder = \"Last name\";\n let title_placeholder = \"Title\";\n\n let searchButtonClasses = [\"button-small\", \"button-primary\", \"rspec_perform_contact_search\"];\n let cancelButtonClasses = [\"button-small\", \"button-secondary\", \"rspec_clear_contact_search\"];\n\n let title = \"\";\n if (!this.props.validSearchFlag) {\n searchButtonClasses.push(\"button-disable\");\n cancelButtonClasses.push(\"button-disable\");\n title = \"Requires at least one of the search fields to have 2 characters\";\n }\n\n let searchButton = ;\n let cancelButton = ;\n\n return (\n
    \n
    \n \n \n \n
    \n {searchButton}\n {cancelButton}\n
    \n\n \n {searching}\n \n \n
    \n );\n }\n});\n\nconst ThirdPartyContactSearchDiv = (props) => {\n return (\n \n );\n};\n\nexport default ZoominfoSearch;\n","import Reflux from \"reflux\";\nimport ContactSearchStore from \"../../stores/contactSearch/contactSearchStore\";\nimport ZoomInfoHeader from \"./zoomInfo/zoomInfoHeader\";\nimport CompanyDetailsPanel from \"./companyDetailsPanel\";\nimport ExistingContacts from \"./existingContacts\";\nimport ZoominfoSearch from \"./zoomInfo/zoominfoSearch\";\n\nconst ContactSearchPanel = createReactClass({\n mixins: [Reflux.connect(ContactSearchStore)],\n getInitialState: function () {\n return ContactSearchStore.data;\n },\n render: function () {\n if(this.state.user_zinfo) {\n return (\n
    \n \n \n \n \n
    \n );\n }\n else{\n return (

    Loading

    );\n }\n }\n});\n\nwindow.ContactSearchPanel = ContactSearchPanel;\nexport default ContactSearchPanel;\n","function DevTools() {\n const setBrand = (brand) => {\n $.post({\n url: \"/dev_tools/set_brand\",\n data: { brand },\n success: () => location.reload(),\n error: (error) => {\n console.error(\"Failed to set brand:\", error)\n },\n })\n }\n\n const { dev_tools: { available_brands, git_branch_truncated } } = window\n\n return (\n
    \n
    \n \n \n \n \n \n { git_branch_truncated }\n \n
    \n\n \n
    \n )\n}\n\nwindow.DevTools = DevTools\nexport default DevTools;\n","import { useRef, useState } from \"react\";\nimport Dropdown, { DropdownTrigger } from \"../lds/dropdown/Dropdown\";\nimport DropdownList from \"../lds/dropdown/DropdownList\";\nimport Input from \"../lds/Input\";\n\nexport default function CopyToExistingListDropdown({ lists }) {\n const [open, setOpen] = useState(false);\n\n const [search, setSearch] = useState(\"\");\n const [selected, setSelected] = useState();\n\n const triggerRef = useRef();\n\n const handleItemSelected = (item) => {\n $(\"#add_to_existing_list\").removeClass(\"button-disable\"); // necessary until we React+API the whole UX of this\n setSelected(item.label);\n setOpen(false);\n };\n\n const filteredItems = lists.filter((item) =>\n item.label.toLocaleLowerCase().includes(search.toLocaleLowerCase())\n );\n const hasItems = filteredItems.length > 0;\n\n const widthValue = triggerRef.current?.getBoundingClientRect().width\n const dropdownMaxWidth = widthValue ? widthValue + \"px\" : null;\n\n return (\n setOpen(false)}\n >\n \n setOpen(true)}\n ref={triggerRef}\n >\n {}}\n placeholder=\"Name of a list\"\n readOnly\n showLabel={true}\n size=\"medium\"\n trailingIcon={\"chevron-\" + (open ? \"up\" : \"down\")}\n value={selected}\n width=\"100%\"\n />\n
    \n \n\n \n \n \n );\n}\n\nwindow.CopyToExistingListDropdown = CopyToExistingListDropdown;\n","import CheckboxItem from \"../lds/selection_controls/CheckboxItem\";\nimport useCheckbox from \"../lds/hooks/useCheckbox\";\n\nexport default function IncludeFeedsOnHomePageCheckbox() {\n const checkbox = useCheckbox(true);\n\n return (\n \n );\n}\n\nwindow.IncludeFeedsOnHomePageCheckbox = IncludeFeedsOnHomePageCheckbox;\n","import { useState } from \"react\";\nimport { CHECKBOX_STATES } from \"../selection_controls/CheckboxItem\";\n/**\n * A React hook to make working with checkboxes easier.\n * This hook exposes a value `selection` and callback `onClick`\n * that will correctly interop with `CheckboxItem` component.\n * @param {boolean} initialValue\n *\n * @example\n * function MyCheckbox() {\n * const checkbox = useCheckbox(false)\n * return \n * }\n */\nexport default function useCheckbox(initialValue) {\n const [selection, setSelection] = useState(\n initialValue ? CHECKBOX_STATES.selected : CHECKBOX_STATES.unselected\n );\n\n const onClick = () => {\n if (selection === CHECKBOX_STATES.selected) {\n setSelection(CHECKBOX_STATES.unselected);\n } else {\n setSelection(CHECKBOX_STATES.selected);\n }\n };\n\n return { selection, onClick };\n}\n","import { useEffect, useState } from \"react\";\nimport Tab from \"../lds/tabs/Tab\";\nimport TabGroup from \"../lds/tabs/TabGroup\";\n\nexport default function FeedsTabs() {\n const tabMapping = {\n personal: \"#tab1\",\n colleague: \"#tab3\",\n };\n\n const reverseTabMapping = Object.keys(tabMapping).reduce((acc, curr) => {\n acc[tabMapping[curr]] = curr;\n return acc;\n }, {});\n\n const [colleaguesLoaded, setColleaguesLoaded] = useState(false);\n\n // User can refresh page when viewing colleagues' feeds\n const [selected, setSelected] = useState(\n reverseTabMapping[location.hash] || \"personal\"\n );\n\n useEffect(() => {\n if (selected === \"colleague\") {\n if (!colleaguesLoaded) {\n $.get(\"/feeds/colleagues_feeds\", function (data) {\n if ($(\"#tab3\").is(\":visible\")) {\n $(\"#tab3\").fadeOut(\"fast\", function () {\n $(\"#tab3\").html(data);\n $(\"#tab3\").fadeIn();\n });\n } else {\n $(\"#tab3\").html(data);\n }\n });\n setColleaguesLoaded(true);\n }\n }\n }, [selected]);\n\n const handleChange = (tab) => {\n setSelected(tab);\n location.assign(tabMapping[tab]);\n\n // Simulate existing behaviour\n setTimeout(() => window.scrollTo(0, 0), 0);\n };\n\n return (\n <>\n \n \n \n \n \n );\n}\n\nwindow.FeedsTabs = FeedsTabs;\n","import Tab from \"../lds/tabs/Tab\";\nimport TabAnchor from \"../lds/tabs/TabAnchor\";\nimport TabGroup from \"../lds/tabs/TabGroup\";\n\nexport default function FlaggedEventsTabs({ myFlaggedEvents }) {\n const selectedTab = myFlaggedEvents ? \"personal\" : \"colleague\";\n\n return (\n \n \n \n \n );\n}\n\nwindow.FlaggedEventsTabs = FlaggedEventsTabs;\n","import React, { useState } from \"react\";\nimport PropTypes from \"prop-types\";\n\nimport FlagEventDatePicker from \"@javascript/reactComponents/lds/datepicker/FlagEventDatePicker\";\nimport moment from \"moment\";\n\nconst FlagEventStatusPanel = ({\n eventId,\n isInThePast,\n mixpanelData,\n reminderDate,\n reminderId,\n}) => {\n\n const handleDateSelect = (date) => {\n $(\"body\").addClass(\"wait\");\n\n let momentTz = moment.tz(date, 'America/New_York').utc();\n // ruby_date from original implementation is set to 1PM\n momentTz.hour(13).minute(0).second(0);\n\n const ruby_date = momentTz.format()\n\n window.debug = { ruby_date, momentTz, date }\n\n Zymewire.mixpanel_track(\"Flagged event reminder\", {...mixpanelData, \"Reminder Date\": ruby_date});\n\n $.ajax({\n url: \"/flagged_events/\" + eventId + \"/add_reminder\",\n type: 'POST',\n data: {user_id: mixpanelData[\"Reminded user: ID\"], flagged_event_reminder: ruby_date},\n success: function (result) {\n $(\"body\").removeClass(\"wait\");\n setDate(date)\n setPast(false)\n setReminder(result._id)\n }\n });\n }\n\n const handleCancelReminder = () => {\n $(\"body\").addClass(\"wait\");\n $.ajax({\n url: \"/flagged_events/\" + eventId + \"/remove_reminder\",\n type: 'POST',\n data: {flagged_event_reminder_id: reminder},\n success: function (result) {\n $(\"body\").removeClass(\"wait\");\n setDate(null)\n setPast(true)\n setReminder(\"\")\n\n }\n });\n };\n\n let flaggedDate = null;\n\n let tempIcon = ;\n\n if (reminderDate) {\n flaggedDate = new Date(reminderDate);\n if (isNaN(flaggedDate.getTime())) {\n flaggedDate = null;\n }\n }\n\n const [date, setDate] = useState(flaggedDate);\n const [past, setPast] = useState(isInThePast);\n const [reminder, setReminder] = useState(reminderId);\n\n if(date) {\n tempIcon = ;\n if(!isInThePast) {\n tempIcon = ;\n }\n }\n\n return (\n <>\n {tempIcon}\n \n \n );\n};\n\nFlagEventStatusPanel.propTypes = {\n eventId: PropTypes.string.isRequired,\n isInThePast: PropTypes.bool.isRequired,\n mixpanelData: PropTypes.object.isRequired,\n reminderDate: PropTypes.string,\n reminderId: PropTypes.string.isRequired,\n};\n\nexport default FlagEventStatusPanel;\n\nwindow.FlagEventStatusPanel = FlagEventStatusPanel;\n","import { clone } from \"lodash\";\n\nimport Button from \"@javascript/reactComponents/lds/Button\";\nimport ButtonGroup from \"../lds/ButtonGroup\";\nimport Icon from \"../lds/Icon\";\nimport Heading from \"@javascript/reactComponents/lds/typography/Heading\";\nimport LegacyModalService from \"@javascript/globals/LegacyModalService\";\n\nimport {\n Modal,\n ModalBody,\n ModalFooter,\n ModalHeader,\n} from \"@javascript/reactComponents/lds/modal/Modal\";\n\nfunction NotifiedUsers({ listOfNames }) {\n listOfNames = clone(listOfNames);\n\n if (listOfNames.length === 1) {\n return (\n \n Notification sent to {listOfNames[0]}.\n \n );\n }\n\n const lastName = listOfNames.pop();\n\n // When more than two users are flagged, a comma before the word \"and\" should be present.\n const preceedingComma = listOfNames.length > 1 ? \",\" : \"\"\n\n return (\n \n Notifications sent to {listOfNames.join(\", \")}{preceedingComma} and{\" \"}\n {lastName}.\n \n );\n}\n\nexport function LDSFlagEventModalSuccess({ notifiedUsers }) {\n return (\n \n Flag an event\n \n \n\n Event flagged successfully!\n\n {notifiedUsers.length > 0 && (\n \n )}\n \n \n \n \n Close\n \n\n location.assign(\"/flagged_events\")}\n >\n Go to Event\n \n \n \n \n );\n}\n\nwindow.LDSFlagEventModalSuccess = LDSFlagEventModalSuccess;\n","import Button from \"@javascript/reactComponents/lds/Button\";\nimport ButtonGroup from \"@javascript/reactComponents/lds/ButtonGroup\";\nimport ComponentFromHTML from \"@javascript/reactComponents/shared/ComponentFromHTML\";\n\nimport Heading from \"@javascript/reactComponents/lds/typography/Heading\";\nimport Icon from \"@javascript/reactComponents/lds/Icon\";\nimport LegacyModalService from \"@javascript/globals/LegacyModalService\";\n\nimport {\n Modal,\n ModalBody,\n ModalFooter,\n ModalHeader,\n} from \"@javascript/reactComponents/lds/modal/Modal\";\n\nimport NavItem from \"@javascript/reactComponents/lds/NavItem\";\n\n\nfunction SuccessContent({ feedActionType, newFeedId }) {\n const goToFeed = () =>\n location.assign(`/feeds/${newFeedId}/display_saved_feed`);\n\n let title = \"New custom feed\";\n let heading = \"Feed saved successfully!\"\n\n switch (feedActionType) {\n case \"new\":\n case \"create\":\n break;\n case \"list\":\n title = \"New feed from your list\"\n break;\n case \"clone\":\n title = \"Copy this feed as...\"\n heading = \"Feed copied successfully!\"\n break;\n case \"update\":\n title = \"Changes have been saved\"\n heading = \"Feed updated successfully!\"\n break;\n\n default:\n break;\n }\n\n return (\n <>\n {title}\n\n \n\n \n\n {heading}\n\n
    \n You can also access all your feeds on  \n \n Feeds\n \n   page.\n
    \n
    \n\n \n \n \n Close\n \n \n \n \n \n );\n}\n\nexport default function LDSFeedSaveModal({\n feedActionType,\n newFeedId,\n legacyModalContent,\n}) {\n return (\n \n {legacyModalContent ? (\n \n ) : (\n \n )}\n \n );\n}\n\nwindow.LDSFeedSaveModal = LDSFeedSaveModal;\n","// Number related functions etc. required everywhere\n\n/**\n * The Number.isInteger() method determines whether the passed value is an integer. This is a polyfill for those browsers that don't support this method.\n *\n * @author GJ \n * Source: {@link https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/isInteger|Mozilla Dev Network}\n *\n * @param value the value to check.\n * @returns {boolean} True if value is an integer.\n */\nNumber.isInteger = Number.isInteger || function(value) {\n return typeof value === 'number' &&\n isFinite(value) &&\n Math.floor(value) === value;\n};\n\n/**\n * The commifyNumber method takes a number (int or string) and returns a comma separated string grouped by thousands\n *\n * @author GJ \n *\n * @param value the value to commify.\n * @returns {string} a commified number, E.G. 1,000\n */\nexport function commifyNumber(num) {\n return num.toString().replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\");\n}\n\n/**\n * The makeMillions method takes a number (int only) and returns a comma separated string (grouped by thousands of millions) representing an abbreviation of the number in millions\n *\n * @example\n * // \"$0 M\"\n * makeMillions(1000);\n *\n * @example\n * // \"$0.08 M\"\n * makeMillions(85000);\n *\n * @example\n * // \"$0.85 M\"\n * makeMillions(850000); // 850 thousand\n *\n * @example\n * // \"$85 M\"\n * makeMillions(85000000); // 85 million\n *\n * @example\n * // \"$8,500 M\"\n * makeMillions(8500000000); // 8.5 billion\n * \n * @author GJ \n *\n * @param amount {int} the value to work on.\n * @param nil_value {string} an optional value to return for nil values... the UI sometimes needs different presentations for nil\n * @returns {string} a comma formatted string standing for the original number reduced to it's representation in millions\n */\nfunction makeMillions(amount, nil_value) {\n if (typeof nil_value === 'undefined'){\n nil_value = '---'\n }\n let formatted_amount = nil_value;\n if(Number.isInteger(amount)) {\n if (amount > 1) {\n let mil_form = Math.floor(amount/10000)/100\n let mil_form_commify = commifyNumber(mil_form)\n formatted_amount = '$' + mil_form_commify + ' M';\n }\n else {\n formatted_amount = '$0 M'\n }\n }\n return formatted_amount;\n}\n\nfunction makeMillionsSigned(amount) {\n if (!Number.isInteger(amount)) {\n return '---';\n }\n \n let amountMillions = Math.floor(amount/10000)/100\n let commifiedValue = commifyNumber(Math.abs(amountMillions))\n let sign = amountMillions < 0 ? \"-\" : \"\"\n return `${sign}${commifiedValue} M`\n}\n\nwindow.commifyNumber = commifyNumber;\nwindow.makeMillions = makeMillions;\nwindow.makeMillionsSigned = makeMillionsSigned;\n","import React, { useState } from \"react\"\nimport { Modal, ModalBody, ModalFooter, ModalHeader } from \"../lds/modal/Modal\";\nimport Banner from \"../lds/notifications/Banner\";\nimport BannerHeading from \"../lds/notifications/BannerHeading\";\nimport BannerBody from \"../lds/notifications/BannerBody\";\nimport ButtonGroup from \"../lds/ButtonGroup\";\nimport Button from \"../lds/Button\";\nimport Icon from \"../lds/Icon\";\nimport Heading from \"../lds/typography/Heading\";\nimport { commifyNumber } from \"../../helpers/numbers\"\n\nexport default function MaxFeedsErrorModal({ reloadAction, maxFeedCount, currentFeedCount }) {\n const [loading, setLoading] = useState(false)\n const [maxFeeds, setMaxFeeds] = useState(maxFeedCount)\n const [feedCount, setFeedCount] = useState(currentFeedCount)\n\n const onReload = async () => {\n try {\n setLoading(true)\n await reloadAction()\n } catch(e) {\n if (e.status == 403) {\n let response = e.responseJSON\n setMaxFeeds(response.max_feeds)\n setFeedCount(response.user_feeds_count)\n } else {\n throw e;\n }\n } finally {\n setLoading(false)\n }\n }\n\n return <>\n \n \n { loading ? : <>\n \n \n }\n \n \n}\n\nfunction MaxFeedsModalBody({ maxFeeds }) {\n return <>\n \n \n \n You've reached the maximum amount of Feeds allowed on your current Edition ({commifyNumber(maxFeeds)})\n \n \n

    To create additional Feeds, consider upgrading to a subscription plan that offers more flexibility that fits your needs.

    \n

    Alternatively, you can delete one of your Feeds before you can save a new one.

    \n
    \n
    \n\n
    \n\n \n \n Here's a workaround for your current Edition\n \n \n \n Step 1: Open your Feeds page in a new tab by\n clicking here \n \n

    Step 2: Delete the Feed(s) you don't use very often

    \n

    Step 3: Return to this page and click the Reload button below

    \n
    \n
    \n
    \n \n}\n\nfunction MaxFeedsModalFooter({ onReload }) {\n return <>\n \n \n Reload\n Close\n \n \n \n}\n\nfunction ModalLoadingSmiley() {\n return \n
    \n
    \n \n
    \n \n Loading...\n \n
    \n
    \n}\n\nwindow.MaxFeedsErrorModal = MaxFeedsErrorModal;\n","import React, { useState } from \"react\";\nimport CheckboxItem, {\n CHECKBOX_STATES,\n} from \"../lds/selection_controls/CheckboxItem\";\nimport NewEventChip from \"../shared/chips/NewEventChip\"\n\nfunction HomeFeedTableRow({ feed, onSelected }) {\n const feedUrl = `/feeds/${feed.id}/display_saved_feed`;\n\n const goToFeed = () => {\n window.location = feedUrl;\n };\n\n return (\n \n \n

    \n {feed.name}\n

    \n \n goToFeed(feed.id)}>\n \n \n \n \n \n \n );\n}\n\nfunction HomeFeedTableBody({ initialFeeds = [] }) {\n const [feeds, setFeeds] = useState(initialFeeds);\n\n const onFeedCheckboxSelected = (value) => {\n change_home_page_setting(value);\n setFeeds(\n feeds.map((feed) => {\n return { ...feed, hidden: feed.id === value || feed.hidden }\n })\n );\n };\n\n return feeds.map((feed) => {\n return (\n \n );\n });\n}\n\nexport default HomeFeedTableBody;\n\nwindow.HomeFeedTableBody = HomeFeedTableBody;\n","import ComponentFromHTML from \"@javascript/reactComponents/shared/ComponentFromHTML\";\nimport LegacyModalService from \"@javascript/globals/LegacyModalService\";\nimport { Modal } from \"@javascript/reactComponents/lds/modal/Modal\";\n\nexport default function LDSFlagEventModal({ legacyModalContent }) {\n return (\n \n \n \n );\n}\n\nwindow.LDSFlagEventModal = LDSFlagEventModal;\n","import Tab from \"../lds/tabs/Tab\";\nimport TabAnchor from \"../lds/tabs/TabAnchor\";\nimport TabGroup from \"../lds/tabs/TabGroup\";\n\nexport default function ViewFeedTabs({\n selectedTab,\n feed,\n hasNewcomers,\n showNewcomers,\n showEdit,\n}) {\n\n const clickNewcomers = (event) => {\n event.preventDefault();\n trackNewcomersClick(\"View Newcomers\", `/feeds/${feed.id}/new_companies`, feed.id);\n }\n\n return (\n \n\n \n\n { showNewcomers &&\n \n }\n\n \n\n { showEdit &&\n \n }\n \n );\n}\n\nwindow.ViewFeedTabs = ViewFeedTabs;\n","import ComponentFromHTML from \"@javascript/reactComponents/shared/ComponentFromHTML\";\nimport LegacyModalService from \"@javascript/globals/LegacyModalService\";\nimport {\n Modal,\n} from \"@javascript/reactComponents/lds/modal/Modal\";\n\nconst SalesforceModal = ({\n legacyModalContent,\n}) => {\n\n return (\n \n \n \n );\n};\n\nexport default SalesforceModal;\nwindow.SalesforceModal = SalesforceModal;\n","import { createRoot } from \"react-dom/client\";\n\nimport \"../globals/LegacyModalService\";\n\nimport \"./settings/mutedCompaniesSelector\";\nimport \"./settings/SettingsDropdown\";\nimport \"./settings/apolloApiPanel\";\n\nimport \"./lds/notifications/Toast\";\nimport \"./shared/notifications/FlashToast\";\n\nimport \"./lds/modal/GenericLegacyModal\";\n\nimport \"./generic/modals/genericModal\";\nimport \"./generic/modals/genericModalActions\";\nimport \"./generic/modals/genericModalBody\";\nimport \"./generic/modals/genericModalHeader\";\nimport \"./generic/modals/GenericErrorModal\";\n\nimport \"./generic/NavBarItems\";\n\nimport \"./generic/autocomplete/genericAutocomplete\";\nimport \"./companyDashboard/affiliatedWithCards\";\n\nimport \"./companyDashboard/cumulativeFundingCalendarYears\";\nimport \"./companyDashboard/fundingEventsCard\";\nimport \"./companyDashboard/activeStudiesCard\";\nimport \"./companyDashboard/salesforce/sfPanelWrapper\";\n\nimport \"./companyDashboard/relatedTherapiesContainer\";\nimport \"./companyDashboard/salesforce/sfFormModal\";\n\nimport \"./admin/commentaryArticle/articleEventPanel\";\nimport \"./admin/administrateEvent/eventListPanel\";\n\nimport \"./facetSearch/facetSections\";\n\nimport \"./facetSearch/filterCategoryShowMore\";\nimport \"./facetSearch/locationSelector\";\n\nimport \"./facetSearch/companyRelationshipSelector\";\nimport \"./facetSearch/entities/ConditionsSearchFilter\";\nimport \"./facetSearch/entities/OrganizationsSearchFilter\";\nimport \"./facetSearch/entities/TherapiesSearchFilter\";\n// import \"./facetSearch/trialsSelector\";\nimport \"./facetSearch/userListSelector\";\nimport \"./facetSearch/clinicalTrialStagesSelector\";\nimport \"./facetSearch/clinicalTrialStatusSelector\";\n\nimport \"./facetSearchCriteria/facetSearchCriteriaContainer\";\nimport \"./facetSearchCriteria/facetSearchCriteriaHeading\";\nimport \"./facetSearch/TimeSelectDropdown\";\nimport \"./facetSearch/timeSelector/FacetSearchTimeSelector\";\n\nimport \"./search_description/searchDescriptionPanel\";\nimport \"./feeds/FeedsIndexTable\";\n\nimport \"./flagged_events/flagEventModal\";\n\nimport \"./lists/listModalPanel/CopyToNewListSuccess\";\n\nimport \"./lists/downloadPrimoPlModal/downloadPrimoPlModal\";\nimport \"./lists/listDisplay/listDisplay\";\nimport \"./lists/ListFeedPanel\";\nimport \"./lists/deleteListsConfirmationModal\";\n\nimport \"./lists/shareListModal\";\nimport \"./lists/listModalPanel/listModalPanel\";\nimport \"./lists/listModalPanel/existingCopyList\";\n\n// Lists V2\nimport \"./lists/v2/ListPage\";\nimport \"./lists/v2/ListCreateModal\";\n\nimport \"./segmentContact/chooseSegmentContactReport\";\n\nimport \"./signInLinks\";\nimport \"./users/paginatedSelectableListOfUsers\";\nimport \"./modals/SearchErrorModal\";\nimport \"./modals/SessionTimeoutModal\";\nimport \"./territorySelector\";\n\nimport \"./companyDashboard/DashboardNavTabs\";\nimport \"./companyDashboard/studiesCard\";\nimport \"./companyDashboard/therapeuticAreaCard\";\n\nimport \"./generic/htmlElements/bootstrapFullWidthRow\";\nimport \"./generic/htmlElements/bootstrapRow\";\nimport \"./generic/htmlElements/bootstrapSpan\";\nimport \"./generic/htmlElements/twoColumnList\";\nimport \"./generic/htmlElements/unorderedList\";\n\nimport \"./generic/modals/adminModal\";\nimport \"./generic/modals/adminModalBody\";\nimport \"./generic/modals/adminModalFooter\";\nimport \"./generic/modals/adminModalHeader\";\n\nimport \"./generic/pagination/paginationHolder\";\nimport \"./generic/pagination/paginationLinks\";\nimport \"./generic/autocomplete/autocompleteSuggestions\";\nimport \"./generic/searchInput\";\n\nimport \"./contactSearch/contactSearchPanel\";\nimport \"./devTools/devTools\";\n\nimport \"./lists/CopyToExistingListDropdown\";\nimport \"./feeds/IncludeFeedsOnHomePageCheckbox\";\n\nimport \"./flagged_events/FeedsTabs\";\nimport \"./flagged_events/FlagEventsTabs\";\nimport \"./flagged_events/FlagEventStatusPanel\";\nimport \"./flagged_events/LDSFlagEventModal\";\nimport \"./flagged_events/LDSFlagEventModalSuccess\";\n\nimport \"./feeds/ViewFeedTabs\";\nimport \"./feeds/LDSFeedSaveModal\";\nimport \"./feeds/MaxFeedsErrorModal\";\n\nimport \"./home/HomeFeedTableBody\";\n\n// TODO alpha\nimport \"./salesforce/SalesforceModal\";\n\nimport \"./../../javascripts/helpers/numbers\";\n\nwindow.createRoot = createRoot;\n","import Reflux from \"reflux\";\n\nconst ContactSearchAction = Reflux.createActions([\n \"search\",\n \"buyContact\",\n \"checkDeliverability\",\n \"initialState\",\n \"addContactToSalesforce\",\n \"clickedEmail\",\n \"clickedPhone\",\n \"contactAddedToSalesforce\",\n \"leadAddedToSalesforce\",\n \"generateEmail\",\n \"changePage\",\n \"updateRevealedContacts\",\n]);\n\nwindow.ContactSearchAction = ContactSearchAction;\nexport default ContactSearchAction;\n","import Reflux from \"reflux\"\n\n/**\n * Reflux action object\n *\n * @namespace FacetSearchCompanyActivityActions\n * @param [Array] of action names for use with FacetSearchCompanyActivityMutations\n */\nconst FacetSearchCompanyActivityActions = Reflux.createActions({\n activitiesInitialState: { sync: true },\n activitySelected: { sync: true },\n activityRemoved: { sync: true }\n});\n\n/**\n * Reflux store object\n *\n * @namespace FacetSearchCompanyActivityMutations\n *\n * Store listens to FacetSearchCompanyActivityActions events and updates its data object.\n * Is used from outside the component to set up data in different points of the lifecycle.\n */\nconst FacetSearchCompanyActivityMutations = {\n onActivitiesInitialState: function(data){\n if (data === 'all_event') data = null\n\n this.data.activities.selected = data;\n\n this.trigger(this.data);\n },\n onActivitySelected: function(activity, opts = { doSearch: true }){\n if (activity === 'all_event') activity = null\n this.data.activities.selected = activity;\n \n\n if (opts.doSearch) {\n doEventSearch().then(() => this.trigger(this.data))\n } else {\n this.trigger(this.data);\n }\n },\n onActivityRemoved: function(){\n this.data.activities.selected = null;\n doEventSearch().then(() => {\n this.trigger(this.data);\n }); \n }\n}\n\nwindow.FacetSearchCompanyActivityActions = FacetSearchCompanyActivityActions\nexport {\n FacetSearchCompanyActivityActions,\n FacetSearchCompanyActivityMutations\n}\n","import Reflux from \"reflux\"\n\n/**\n * Reflux action object\n *\n * @namespace FacetSearchAffiliatedWithActions\n * @param [Array] of action names for use with FacetSearchStoreMutations\n */\nconst FacetSearchAffiliatedWithActions = Reflux.createActions({\n affiliationsInitialState: { sync: true },\n affiliationRemoved: { sync: true },\n affiliationSelected: { sync: true },\n addOrgListRef: { sync: true },\n removeOrgListRef: { sync: true },\n setupOrgListRefs: { sync: true },\n});\n\n/**\n * Reflux store object\n *\n * @namespace FacetSearchAffiliatedWithMutations\n *\n * Store listens to FacetSearchAffiliatedWithActions events and updates its data object.\n * Is used from outside the component to set up data in different points of the lifecycle.\n */\nconst FacetSearchAffiliatedWithMutations = {\n onAffiliationsInitialState: function(data){\n this.data.affiliation = { ...(this.data.affiliation), ...data };\n\n this.trigger(this.data);\n },\n onAffiliationRemoved: function(opts = {}){\n this.data.affiliation.selected = null;\n FacetSearchListActions.unselectList({ skipTrigger: true })\n\n if (opts.doSearch) {\n doEventSearch().then(() => this.trigger(this.data))\n\n } else {\n this.trigger(this.data)\n }\n },\n onAffiliationSelected: function(affiliation, opts = {}){\n this.data.affiliation.selected = affiliation;\n\n if (!opts.skipTrigger) this.trigger(this.data);\n },\n onAddOrgListRef: function(orgListData, ajaxSearch = true) {\n // let's get a working copy\n const updatedOrgListRefs = JSON.parse(JSON.stringify(this.data.affiliation.orgListRefs));\n // does the org list ref exist as a key?\n if (this.data.affiliation.orgListRefs[orgListData.ref]) {\n // if so, let's add the display value to that ref's array\n const updatedDisplayValues = updatedOrgListRefs[orgListData.ref].concat(orgListData.display);\n // unless it already exists\n const filteredDisplayValues = updatedDisplayValues.filter((value, i, values) => values.indexOf(value) === i);\n updatedOrgListRefs[orgListData.ref] = filteredDisplayValues;\n }\n // otherwise, let's add the key and populate it with an array of one: the display value\n // this code is remnant from when we displayed synonyms and needed to keep track of all synonyms displayed\n // now we simply store the ref list description so this could be refactored to a string versus an array\n else {\n updatedOrgListRefs[orgListData.ref] = [orgListData.display];\n }\n\n this.data.affiliation.orgListRefs = updatedOrgListRefs;\n if(ajaxSearch) {\n doEventSearch();\n }\n },\n onRemoveOrgListRef: function(orgListData) {\n // let's get a working copy\n const updatedOrgListRefs = JSON.parse(JSON.stringify(this.data.affiliation.orgListRefs));\n\n // does the org list ref exist as a key?\n if (this.data.affiliation.orgListRefs[orgListData.ref]) {\n // then let's remove the display value from that ref's array, if it exists\n // this code is remnant from when we displayed synonyms and needed to keep track of all synonyms displayed\n // now we simply store the ref list description so this could be refactored to a string versus an array\n const displayValues = updatedOrgListRefs[orgListData.ref];\n const filteredDisplayValues = displayValues.filter((display) => display !== orgListData.display);\n // then, if there are no more display values for that ref list, remove the entry\n if (filteredDisplayValues.length === 0) {\n delete updatedOrgListRefs[orgListData.ref];\n }\n // otherwise, update the ref entry with the filtered list of display values\n else {\n updatedOrgListRefs[orgListData.ref] = filteredDisplayValues;\n }\n }\n this.data.affiliation.orgListRefs = updatedOrgListRefs;\n doEventSearch();\n },\n onSetupOrgListRefs: function(orgListRefs){\n this.data.affiliation.orgListRefs = orgListRefs;\n this.trigger(this.data);\n }\n}\n\nwindow.FacetSearchAffiliatedWithActions = FacetSearchAffiliatedWithActions\nexport {\n FacetSearchAffiliatedWithActions,\n FacetSearchAffiliatedWithMutations\n}\n","import { update } from 'lodash';\nimport Reflux from 'reflux';\n\n/**\n* Reflux action object\n*\n* @namespace FacetSearchAliasSearchActions\n* @param [Array] of action names for use with FacetSearchStoreMutations\n*/\n\nconst FacetSearchAliasSearchActions = Reflux.createActions({\n addAliasSearchRefs: { sync: true },\n removeAliasSearchRefs: { sync: true },\n setupAliasSearchRefs: { sync: true },\n});\n\n/**\n * Reflux store object\n *\n * @namespace FacetSearchAliasSearchMutations\n *\n * Store listens to FacetSearchAliasSearchMutations events and updates its data object.\n * Is used from outside the component to set up data in different points of the lifecycle.\n */\n\nconst FacetSearchAliasSearchMutations = {\n onAddAliasSearchRefs: function(aliasSearchData, ajaxSearch = true) {\n const updatedAliasSearchRefs = JSON.parse(JSON.stringify(this.data.aliasSearch.aliasSearchRefs));\n\n const existingRefs = updatedAliasSearchRefs.some(as => _.isEqual(as, aliasSearchData));\n\n if (!existingRefs) {\n updatedAliasSearchRefs.push(aliasSearchData);\n\n this.data.aliasSearch.aliasSearchRefs = updatedAliasSearchRefs;\n }\n\n if(ajaxSearch) {\n doEventSearch();\n }\n },\n\n onRemoveAliasSearchRefs: function(aliasSearchData) {\n let updatedAliasSearchRefs = JSON.parse(JSON.stringify(this.data.aliasSearch.aliasSearchRefs));\n\n const existingRefs = updatedAliasSearchRefs.some(as => _.isEqual(as, aliasSearchData));\n\n if (existingRefs) {\n updatedAliasSearchRefs = updatedAliasSearchRefs.filter(as => !_.isEqual(as, aliasSearchData));\n }\n\n this.data.aliasSearch.aliasSearchRefs = updatedAliasSearchRefs;\n\n doEventSearch();\n },\n\n onSetupAliasSearchRefs: function(aliasSearchRefs) {\n this.data.aliasSearch.aliasSearchRefs = aliasSearchRefs;\n this.trigger(this.data);\n },\n}\n\nwindow.FacetSearchAliasSearchActions = FacetSearchAliasSearchActions;\n\nexport {\n FacetSearchAliasSearchActions,\n FacetSearchAliasSearchMutations,\n}","import Reflux from \"reflux\"\n\n/**\n * Reflux action object\n *\n * @namespace FacetSearchCompanyRelationshipActions\n * @param [Array] of action names for use with FacetSearchCompanyRelationshipMutations\n */\nconst FacetSearchCompanyRelationshipActions = Reflux.createActions([\n \"addCompanyRelationship\",\n \"companyRelationshipsSetup\",\n \"removeCompanyRelationship\",\n \"updateCompanyRelationships\",\n]);\n\n/**\n * Reflux store object\n *\n * @namespace FacetSearchCompanyRelationshipMutations\n *\n * Store listens to FacetSearchCompanyRelationshipActions events and updates its data object.\n * Is used from outside the component to set up data in different points of the lifecycle.\n */\nconst FacetSearchCompanyRelationshipMutations = {\n onAddCompanyRelationship: function (relationship) {\n this.data.relationships.selected.push(relationship);\n doEventSearch();\n // this.trigger(this.data);\n },\n\n onCompanyRelationshipsSetup: function (condition, relationships) {\n this.data.relationships.salesforceCurrentlyProcessing = condition.salesforceCurrentlyProcessing;\n this.data.relationships.authorizedSalesForce = condition.authorizedSalesForce;\n this.data.relationships.selected = relationships;\n\n this.trigger(this.data);\n },\n\n onRemoveCompanyRelationship: function (relationship) {\n this.data.relationships.selected = _.reject(this.data.relationships.selected, function (relationshipSelected) {\n return relationshipSelected === relationship;\n });\n\n doEventSearch();\n // this.trigger(this.data);\n },\n\n onUpdateCompanyRelationships: function (relationships) {\n this.data.relationships.selected = relationships || [];\n this.trigger(this.data);\n },\n};\n\nwindow.FacetSearchCompanyRelationshipActions = FacetSearchCompanyRelationshipActions\nexport {\n FacetSearchCompanyRelationshipActions,\n FacetSearchCompanyRelationshipMutations\n}","import Reflux from \"reflux\"\n\n/**\n * Reflux action object\n *\n * @namespace FacetSearchGeoCoordinatesActions\n * @param [Array] of action names for use with FacetSearchGeoCoordinatesMutations\n */\nconst FacetSearchGeoCoordinatesActions = Reflux.createActions({\n geoCoordinatesUpdate: {sync: true},\n});\n\n/**\n * Reflux store object\n *\n * @namespace FacetSearchGeoCoordinatesMutations\n *\n * Store listens to FacetSearchGeoCoordinatesActions events and updates its data object.\n * These methods are used from both inside and outside the relevant components to manage state.\n */\n\nconst FacetSearchGeoCoordinatesMutations = {\n onGeoCoordinatesUpdate: function(geoCoordinates, options = {doSearch: false, triggerStateUpdate: false} ) {\n\n this.data.geoCoordinates = geoCoordinates;\n\n const { doSearch, triggerStateUpdate } = options;\n\n if(doSearch) {\n doEventSearch();\n }\n if(triggerStateUpdate) {\n this.trigger(this.data);\n }\n }\n};\n\nwindow.FacetSearchGeoCoordinatesActions = FacetSearchGeoCoordinatesActions\nexport {\n FacetSearchGeoCoordinatesActions,\n FacetSearchGeoCoordinatesMutations\n}\n","import Reflux from \"reflux\"\n\n/**\n * Reflux action object\n *\n * @namespace FacetSearchListActions\n * @param [Array] of action names for use with FacetSearchListMutations\n */\nconst FacetSearchListActions = Reflux.createActions({\n listSelected: { sync: true },\n unselectList: { sync: true },\n addList: { sync: true },\n setListOfUsersLists: { sync: true }\n});\n\n/**\n * Reflux store object\n *\n * @namespace FacetSearchLocationMutations\n *\n * Store listens to FacetSearchListActions events and updates its data object.\n * These methods are used from both inside and outside the relevant components to manage state.\n */\nconst FacetSearchListMutations = {\n onListSelected: function (list, opts = { doSearch: false, skipTrigger: false }) {\n if (!list) return\n\n const listId = list._id || list.org_list_id || list.orgListId || list.userListId || list.user_list_id;\n const listType = list.listType || list.list_type;\n const entity_type = list.entity_type || \"Entities\";\n\n const trigger = () => {\n if (!opts.skipTrigger) {\n this.trigger(this.data)\n }\n }\n\n if (this._publicListAssigned() && listType !== 'public') {\n this.data.affiliation.selected = null;\n }\n\n this.data.userLists.selected = {\n userListId: listId,\n name: list.name,\n listType: listType,\n orgCount: list.org_count,\n entity_type: entity_type,\n }\n\n if (opts.doSearch) {\n doEventSearch().then(trigger)\n } else {\n trigger()\n }\n },\n onUnselectList: function (opts = {}) {\n const trigger = () => {\n if (!opts.skipTrigger) {\n this.trigger(this.data)\n }\n }\n\n this.data.userLists.selected = null;\n\n if (opts.doSearch)\n doEventSearch().then(trigger)\n else\n trigger()\n },\n onAddList: function (list) {\n this.data.userLists.lists.push(list);\n this.trigger(this.data);\n },\n onSetListOfUsersLists: function (data) {\n let lists = this.data.userLists;\n\n lists.lists = data.lists;\n\n this.trigger(this.data);\n },\n _publicListAssigned() {\n const { affiliation, orgLists, userLists } = this.data;\n\n return !!(\n affiliation.selected ||\n (\n orgLists &&\n orgLists.selected &&\n orgLists.selected.listType === \"public\"\n ) ||\n (\n userLists &&\n userLists.selected &&\n userLists.selected.listType === \"public\"\n )\n )\n }\n};\n\nwindow.FacetSearchListActions = FacetSearchListActions\nexport {\n FacetSearchListActions,\n FacetSearchListMutations\n}\n","import Reflux from \"reflux\"\n\n/**\n * Reflux action object\n *\n * @namespace FacetSearchLocationActions\n * @param [Array] of action names for use with FacetSearchLocationMutations\n */\nconst FacetSearchLocationActions = Reflux.createActions([\n \"clearLocations\",\n \"deselectLocation\",\n \"locationWillMount\",\n \"myTerritoryClick\",\n \"openLocationSelectorModal\",\n \"removeLocation\",\n \"saveChanges\",\n \"selectLocation\",\n \"updateLocationState\",\n]);\n\n/**\n * Reflux store object\n *\n * @namespace FacetSearchLocationMutations\n *\n * Store listens to FacetSearchLocationActions events and updates its data object.\n * These methods are used from both inside and outside the relevant components to manage state.\n */\n\nconst FacetSearchLocationMutations = {\n cleanSelectedLocations: function(newLocation, existingLocations){\n if(newLocation.code.length === 2){\n return _.reject(existingLocations, function(location){return location.code.startsWith(newLocation.code)});\n }\n else if(newLocation.code.charAt(2) !== '_'){\n //assume it must be a continent\n const continent = _.find(this.data.location.fullLocationList, function(location){return location.code === newLocation.code});\n if(continent){\n _.each(continent.children, function(country){existingLocations = this.cleanSelectedLocations(country, existingLocations)}, this);\n }\n return existingLocations;\n }\n else{\n return existingLocations;\n }\n },\n onClearLocations: function(){\n this.data.location.searchLocations = new Array();\n this.data.location.changed = true;\n this.trigger(this.data);\n },\n onDeselectLocation: function(locationCode){\n this.data.location.searchLocations = _.reject(this.data.location.searchLocations, function(searchLocation){ return searchLocation.code === locationCode});\n this.data.location.changed = true;\n this.trigger(this.data);\n },\n onLocationWillMount: function(seedData) {\n const sortedLocations = _.sortBy(Zymewire.region_list.fullLocationList, 'name');\n this.data.location.fullLocationList = sortedLocations;\n this.data.location.searchLocations = seedData.searchLocations;\n this.data.location.selectedLocation = seedData.selectedLocation;\n this.trigger(this.data);\n },\n onMyTerritoryClick: function(){\n if(_.contains(this.data.location.selectedLocationCodes, \"my_territory\")){\n this.data.location.selectedLocationCodes = _.reject(this.data.location.selectedLocationCodes, function (ref) {\n return ref === \"my_territory\";\n });\n }\n else{\n this.data.location.selectedLocationCodes.push('my_territory');\n }\n doEventSearch();\n },\n onOpenLocationSelectorModal: function (selectedLocation) {\n const locationsConverted = find_the_needle(Zymewire.region_list, 'code', this.data.location.selectedLocationCodes);\n ReactDOM.render(React.createElement(LocationSelectorPanel, {\n searchLocations: locationsConverted,\n selectedLocation: selectedLocation\n }), document.getElementById(\"modal_content\"));\n\n open_modal_control();\n },\n onRemoveLocation: function(locationCode){\n this.data.location.selectedLocationCodes = _.reject(this.data.location.selectedLocationCodes, function (selectedLocationCode) {\n return selectedLocationCode === locationCode\n });\n doEventSearch();\n },\n onSaveChanges: function(){\n // is this going to cause re-renders galore?\n this.data.location.selectedLocationCodes = _.map(this.data.location.searchLocations, function(searchLocation){ return searchLocation.code; })\n\n // I hate this so much holy hell, it's a relic from when we used actual Checkboxes. This entire function\n // needs a deep refactor.\n const isMyTerritorySelected = $(\"#loc_my_territory\").find(\".icon-checkbox-filled\").length > 0\n if (isMyTerritorySelected) {\n this.data.location.selectedLocationCodes.push('my_territory');\n }\n this.data.location.selectedLocationCodes = _.uniq(this.data.location.selectedLocationCodes);\n doEventSearch()\n close_modal_control()\n setTimeout(function() {\n ReactDOM.unmountComponentAtNode(document.getElementById('modal_content'));\n }, 400);\n },\n onSelectLocation: function(location){\n this.data.location.searchLocations = this.cleanSelectedLocations(location, this.data.location.searchLocations);\n this.data.location.searchLocations.push(location);\n this.data.location.changed = true;\n this.data.location.searchLocations = _.sortBy(this.data.location.searchLocations, function(searchLocation){ return searchLocation.parent + \"\" + searchLocation.name;})\n this.trigger(this.data);\n },\n onUpdateLocationState: function(locationCodes) {\n this.data.location.selectedLocationCodes = _.uniq(locationCodes);\n this.trigger(this.data);\n }\n};\n\nwindow.FacetSearchLocationActions = FacetSearchLocationActions\nexport {\n FacetSearchLocationActions,\n FacetSearchLocationMutations\n}\n","import Reflux from \"reflux\"\nimport { FacetSearchAliasSearchActions } from \"./aliasSearchActions\";\n\n/**\n * Reflux action object\n *\n * @namespace FacetSearchStoreActions\n * @param [Array] of action names for use with FacetSearchStoreMutations\n */\nconst FacetSearchStoreActions = Reflux.createActions({\n\n // TODO alphabetize\n clinicalTrialStagesUpdate: { sync: true },\n clinicalTrialStatusesUpdate: { sync: true },\n\n updateFacetSearchResults: { sync: true },\n\n setFilterCriteria: { sync: true },\n updateFilterCriteria: { sync: true },\n addToFilterCriteria: { sync: true },\n removeFilterCriteria: { sync: true },\n\n setQueryTerm: { sync: true },\n clearQueryError: { sync: true },\n\n autocomplete: { sync: true },\n autocompleteAliasSearch: { sync: true },\n autocompleteEntityValue: { sync: true },\n autocompleteEntity: { sync: true },\n autocompleteLocation: { sync: true },\n autocompleteRecentSearch: { sync: true },\n autocompleteSpecialCases: { sync: true },\n autocompleteText: { sync: true },\n autocompleteUserHome: { sync: true },\n});\n\n/**\n * Reflux store object\n *\n * @namespace FacetSearchStoreMutations\n *\n * Store listens to FacetSearchStoreActions events and updates its data object.\n * Is used from outside the component to set up data in different points of the lifecycle.\n */\nconst FacetSearchStoreMutations = {\n // TODO alphabetize\n onClinicalTrialStagesUpdate: function(updateData, options = {doSearch: false, triggerStateUpdate: false} ) {\n const { doSearch, triggerStateUpdate } = options;\n const { clinicalTrialStages } = this.data\n\n const updatedState = {...clinicalTrialStages, ...updateData};\n\n const trigger = () => {\n if (triggerStateUpdate) this.trigger(this.data)\n }\n\n this.data.clinicalTrialStages = updatedState;\n\n if(doSearch) {\n doEventSearch().then(trigger);\n } else {\n trigger()\n }\n },\n onClinicalTrialStatusesUpdate: function(updateData, options = {doSearch: false, triggerStateUpdate: false} ) {\n const { doSearch, triggerStateUpdate } = options;\n const { clinicalTrialStatuses } = this.data\n\n const updatedState = {...clinicalTrialStatuses, ...updateData};\n\n this.data.clinicalTrialStatuses = updatedState;\n\n const trigger = () => {\n if (triggerStateUpdate) {\n this.trigger(this.data);\n }\n }\n\n\n if (doSearch) {\n doEventSearch().then(trigger);\n\n } else {\n trigger()\n }\n },\n onUpdateFacetSearchResults: function(results) {\n // TODO: Deep clone? Need to check if any nested attributes are mutated directly.\n this.data.facets = results.facets;\n this.data.total_count = results.count\n\n this.trigger(this.data)\n },\n onSetFilterCriteria(newCriteria) {\n this.data.filterCriteria = newCriteria\n },\n onUpdateFilterCriteria(type, value) {\n this.data.filterCriteria[type] = this.data.filterCriteria[type] || []\n\n this.data.filterCriteria[type] = value\n },\n onAddToFilterCriteria(type, value) {\n this.data.filterCriteria[type].push(value)\n },\n onRemoveFilterCriteria(type) {\n delete this.data.filterCriteria[type]\n },\n\n onSetQueryTerm(newTerm) {\n let res = validateQueryTerm(newTerm||\"\");\n if (res.valid) {\n this.data.searchTerm.queryTerm = newTerm;\n this.data.searchTerm.queryErrorMessage = null;\n } else {\n this.data.searchTerm.queryErrorMessage = res.errorMsg;\n this.trigger(this.data)\n }\n },\n\n onClearQueryError() {\n this.data.searchTerm.queryErrorMessage = null;\n this.trigger(this.data)\n },\n\n onAutocomplete: function(suggestion) {\n Zymewire.external_track_action(\"Autocomplete selection\", {\n entity_type: suggestion.type,\n text_chosen: suggestion.display,\n matched: suggestion.matched,\n });\n const actionMap = {\n alias_search: \"autocompleteAliasSearch\",\n default: \"autocompleteText\",\n entity: \"autocompleteText\",\n location: \"autocompleteLocation\",\n entity_value: \"autocompleteEntityValue\",\n recent_search: \"autocompleteRecentSearch\",\n special_cases: \"autocompleteSpecialCases\",\n text: \"autocompleteText\"\n }\n const action = actionMap[suggestion.type] || actionMap.default;\n FacetSearchStoreActions[action](suggestion);\n\n // Sync visible input with typeahead\n $(\"#query_text_box\").val($(\".typeahead\").typeahead('val'))\n },\n onAutocompleteAliasSearch: function(suggestion) {\n clearAutocompleteSuggestions();\n compoundLeftovers(suggestion.display, suggestion.official_name);\n FacetSearchAliasSearchActions.addAliasSearchRefs({ref: suggestion.ref, display: suggestion.official_name});\n },\n onAutocompleteEntityValue: function(suggestion) {\n clearAutocompleteSuggestions();\n compoundLeftovers(suggestion.display, suggestion.official_name);\n FacetSearchAffiliatedWithActions.addOrgListRef({ref: suggestion.ref, display: suggestion.official_name});\n },\n onAutocompleteEntity: function(suggestion) {\n clearAutocompleteSuggestions();\n compoundLeftovers(suggestion.display, suggestion.official_name);\n facet_search(suggestion.entity_type, suggestion.official_name);\n return true;\n },\n onAutocompleteLocation: function(suggestion) {\n clearAutocompleteSuggestions();\n //the places service is initialized in mapping.js\n places.getDetails({placeId: suggestion.place_id}, mapZoomToPlace);\n return true;\n },\n onAutocompleteRecentSearch: function(suggestion) {\n FacetSearchStoreActions.setQueryTerm(suggestion.matched);\n doEventSearch();\n return true;\n },\n onAutocompleteSpecialCases: function(suggestion) {\n FacetSearchStoreActions.setQueryTerm(suggestion.matched);\n doEventSearch();\n return true;\n },\n onAutocompleteText: function(suggestion) {\n FacetSearchStoreActions.setQueryTerm(suggestion.matched);\n doEventSearch();\n return true;\n },\n onAutocompleteUserHome: function(suggestion) {\n Zymewire.external_track_action(\"Autocomplete selection\", {\n entity_type: suggestion.type,\n text_chosen: suggestion.display,\n matched: suggestion.matched,\n });\n\n let suggested = suggestion.type === \"source_doc_search\" ? suggestion.matched : suggestion.display;\n\n clearAutocompleteSuggestions();\n compoundLeftovers(suggested, suggestion.official_name, true);\n\n if(suggestion.type === \"entity\") {\n FacetSearchStoreActions.setQueryTerm(suggestion.matched)\n }\n else if(suggestion.type === \"entity_value\") {\n FacetSearchAffiliatedWithActions.addOrgListRef({ref: suggestion.ref, display: suggestion.display}, false);\n }\n else if(suggestion.type === \"alias_search\") {\n FacetSearchAliasSearchActions.addAliasSearchRefs({ref: suggestion.ref, display: suggestion.display}, false);\n }\n else {\n FacetSearchStoreActions.setQueryTerm(suggested)\n }\n const searchData = search_data();\n window.location.href = \"/facet_search?\" + $.param(searchData);\n }\n}\n\nfunction validateQueryTerm(term) {\n if (!quotationsMatched(term)) {\n return { valid: false, errorMsg: \"Invalid search: please ensure all quotation marks (\\\", `) are closed.\" };\n }\n return { valid: true, errorMsg: null };\n}\n\nfunction quotationsMatched(str) {\n const quotationCharacters = ['\"', '`']\n\n let stack = [];\n for (let c of str) {\n if (!quotationCharacters.includes(c)) continue;\n\n if (stack[stack.length-1]===c) {\n stack.pop(); // quotation closed\n } else {\n stack.push(c); // new quotation opened\n }\n }\n return stack.length===0;\n}\n\nwindow.FacetSearchStoreActions = FacetSearchStoreActions\nexport {\n FacetSearchStoreActions,\n FacetSearchStoreMutations\n}\n","import Reflux from \"reflux\"\nimport { formatDate } from \"../../../reactComponents/facetSearch/timeSelector/timeSelectorHelpers\";\n\n/**\n * Reflux action object\n *\n * @namespace FacetSearchTimeFrameActions\n * @param [Array] of action names for use with FacetSearchTimeFrameMutations\n */\nconst FacetSearchTimeFrameActions = Reflux.createActions({\n timeFrameUpdate: {sync: true},\n timeFrameReset: {sync: true},\n setSelectedTimeFrame: {sync: true},\n setDateRange: { sync: true },\n});\n\n/**\n * Reflux store object\n *\n * @namespace FacetSearchCriteriaTimeFrameMutations\n *\n * Store listens to FacetSearchTimeFrameActions events and updates its data object.\n */\nconst FacetSearchTimeFrameMutations = {\n onTimeFrameUpdate: function(options = {doSearch: false, timeSelectValue: \"\"} ){\n const { doSearch, timeSelectValue } = options;\n\n // REFACTOR:\n // currently, this method is triggered when FacetSearchCriteriaTimeFrame's parent component is getting ready to mount\n // in future, the FacetSearchCriteriaTimeFrame component should be refactored to listen to the FacetSearchStore store\n // and the store should be initialized wherever we mount FacetSearchCriteriaTimeFrame's parent (FacetSearchCriteriaContainer)\n // and the store' time frame state should be updated by the UI, not by polling the UI via search_data()\n\n const refactorMe = search_data();\n\n let dataToBeRefactored = {\n selected: timeSelectValue || refactorMe.time_select,\n from: refactorMe.earliest_date || this.data.timeFrame.from,\n to: refactorMe.latest_date || this.data.timeFrame.to,\n }\n\n this.data.timeFrame = { ...(this.data.timeFrame), ...dataToBeRefactored };\n\n this.trigger(this.data);\n\n if(doSearch) {\n doEventSearch();\n }\n },\n\n onSetSelectedTimeFrame: function(timeFrame) {\n const params = new URLSearchParams(location.search);\n const earliest = params.get(\"earliest_date\");\n const latest = params.get(\"latest_date\");\n const formattedToday = formatDate(new Date());\n\n if (!timeFrame) {\n // It's possible that user wants custom range\n if (earliest || latest) {\n this.data.timeFrame.selected = \"time_custom\";\n this.data.timeFrame.from = earliest || formattedToday;\n this.data.timeFrame.to = latest || formattedToday;\n\n // $(\"#selector_date_range\").fadeOut(\"fast\", function () {\n // $(\"#custom_date_range\").fadeIn(\"fast\");\n // });\n } else {\n this.data.timeFrame.selected = \"time_any\";\n }\n } else {\n this.data.timeFrame.selected = timeFrame;\n\n if (timeFrame === \"time_custom\") {\n this.data.timeFrame.from = earliest || formattedToday;\n this.data.timeFrame.to = latest || formattedToday;\n }\n }\n\n this.trigger(this.data)\n },\n\n onTimeFrameReset: function(options = { doSearch: false}) {\n this.data.timeFrame = {\n ...(this.data.timeFrame),\n from: null,\n to: null,\n selected: \"time_any\",\n };\n\n this.trigger(this.data);\n\n if(options.doSearch) {\n doEventSearch();\n }\n },\n\n onSetDateRange(start, end) {\n this.data.timeFrame.from = start;\n this.data.timeFrame.to = end;\n\n this.trigger(this.data);\n },\n // Grab source of truth from the URL because it's almost\n // guaranteed to be the active one.\n getActiveTimeFrame() {\n const params = new URLSearchParams(location.search);\n const formattedToday = formatDate(new Date());\n\n let earliest = params.get(\"earliest_date\");\n let latest = params.get(\"latest_date\");\n let selected = params.get(\"time_select\") || this.data.timeFrame.selected\n\n if (selected === \"time_custom\") {\n earliest = earliest || formattedToday;\n latest = latest || formattedToday;\n } \n\n // Same as logic above, sometimes the URL doesn't\n // specify \"time_select\" while including earliest/latest\n // dates. If either is present, assume time_custom.\n if (!selected && (earliest || latest)) {\n selected = \"time_custom\";\n earliest = earliest || formattedToday;\n latest = latest || formattedToday;\n }\n\n return { selected, earliest, latest };\n },\n}\n\nwindow.FacetSearchTimeFrameActions = FacetSearchTimeFrameActions\nexport {\n FacetSearchTimeFrameActions,\n FacetSearchTimeFrameMutations\n}\n","import Reflux from \"reflux\";\n\nconst ListPageActions = Reflux.createActions({\n selectTab: { sync: true },\n});\n\nexport default ListPageActions;\n","import Reflux from \"reflux\";\n\nconst ListModalAction = Reflux.createActions([\n \"initialLoad\",\n \"switchSponsorFlag\",\n \"updateListName\",\n \"createList\",\n \"displayPage\",\n \"switchDisplayOrgList\",\n \"switchFeedCreation\",\n]);\n\nwindow.ListModalAction = ListModalAction;\nexport default ListModalAction;\n","import Reflux from \"reflux\";\nimport ContactSearchAction from \"../actions/contactSearch/contactSearchActions\";\n\nconst ContactSearchStore = Reflux.createStore({\n listenables: ContactSearchAction,\n init: function(){\n this.data = {};\n },\n onInitialState: function(data){\n this.data = data;\n //Explicitly set show_gen_email to false, even though undefined is fine\n this.data.show_gen_email = false\n this.trigger(this.data);\n },\n onSearch: function(search_params){\n var url = [location.protocol, '//', location.host, location.pathname].join('') + \"/rolodexes/search\";\n this.data.searching = true;\n this.data.check_email_format_result = null;\n $.get(url, search_params, function(response){\n track('zoominfo_search_results', 'Received contact search results', _.extend(search_params, {company_name: this.data.company_name, total_matches: response.max_results}));\n this.data.search_results = response;\n this.data.searching = false;\n this.data.show_gen_email = true;\n this.data.page = 1;\n this.trigger(this.data);\n }.bind(this));\n this.trigger(this.data);\n },\n onBuyContact: function(person_id, localAddress, gdpr_submitted, provider){\n var url = [location.protocol, '//', location.host, location.pathname].join('') + \"/rolodexes/\";\n\n $.post(url, {person_id: person_id, localAddress: localAddress, gdpr_submitted: gdpr_submitted, provider: provider}, function(response){\n $(\"body\").removeClass(\"wait\");\n\n this.data.user_zinfo = response.user_zinfo;\n this.data.current_contacts = response.current_contacts;\n if (typeof response.current_contacts === 'undefined') {\n alert(response.error);\n } else {\n track('zoominfo_purchased_contact', 'User purchased contact', {company_name: this.data.company_name});\n this.trigger(this.data);\n }\n }.bind(this));\n },\n onCheckDeliverability: function(providerId) {\n var url = [location.protocol, '//', location.host, location.pathname].join('') + \"/rolodexes/\" + providerId;\n\n $.ajax(url, { type: 'PUT'} ).then(function(response){\n this.data.user_zinfo = response.user_zinfo;\n this.data.current_contacts = response.current_contacts;\n this.trigger(this.data);\n }.bind(this));\n },\n addContactToSalesforce:function(zi_contact_id, mixpanelOptions){\n if(this.data.use_salesforce_lightning_compatible_form){\n initiateAddToSalesforceModal(null, this.data.org_id, zi_contact_id, mixpanelOptions);\n }\n else{\n triggerSFEngagementActionForClassicMode(mixpanelOptions);\n var url = [location.protocol, '//', location.host, location.pathname].join('') + \"/add_contact_to_sf_modal\";\n $.get(url,{zi_person_id: zi_contact_id},\n function (results) {\n LegacyModalService.openModal(GenericLegacyModal, {\n distanceFromTopViewport: \"75px\",\n legacyModalContent: results,\n title: \"Adding to Salesforce\",\n });\n }\n );\n }\n },\n onGenerateEmail:function(params){\n let url = [location.protocol, '//', location.host, location.pathname].join('') + \"/rolodexes/generate_email\";\n\n $.get(url, params, function(response){\n $(\"body\").removeClass(\"wait\");\n this.data.check_email_format_result = response;\n this.data.user_zinfo.remaining_for_month = response.remaining_for_month\n this.trigger(this.data);\n }.bind(this));\n },\n onContactAddedToSalesforce: function(response) {\n this.data.user_zinfo = response.user_zinfo;\n this.data.current_contacts = response.current_contacts;\n\n this.trigger(this.data)\n },\n onLeadAddedToSalesforce: function(response) {\n this.data.user_zinfo = response.user_zinfo;\n this.data.current_contacts = response.current_contacts;\n\n this.trigger(this.data)\n },\n onClickedEmail: function(){\n track('zoominfo_contact_clicked_email', 'User clicked the email for revealed contact', {company_name: this.data.company_name});\n },\n onClickedPhone: function(){\n track('zoominfo_contact_clicked_phone', 'User clicked the phone number for revealed contact',{company_name: this.data.company_name});\n },\n onChangePage: function(page){\n this.data.page = page;\n this.trigger(this.data)\n },\n onUpdateRevealedContacts: function(currentContacts){\n this.data.current_contacts = currentContacts;\n this.trigger(this.data)\n }\n});\n\nwindow.ContactSearchStore = ContactSearchStore;\nexport default ContactSearchStore;\n","import Reflux from \"reflux\";\n\nconst EventTableAction = Reflux.createActions([\"initialLoad\", \"publishAsNow\", \"hideEvent\", \"showEvent\", \"updateEvent\", \"deleteEvent\", \"initiateRepublishing\"]);\n\nwindow.EventTableAction = EventTableAction;\nexport default EventTableAction;\n","import Reflux from \"reflux\";\nimport EventTableAction from \"./actions/eventTableActions\";\n\nconst EventTableStore = Reflux.createStore({\n eventData: {events: [], viz: 'awaiting', industry_type: '', query: '', repub_count: 0, created_by: \"\", page: 1},\n listenables: EventTableAction,\n onInitialLoad: function (event_list, viz, industry_type, query, repub_count, created_by, page) {\n this.eventData.events = event_list;\n this.eventData.viz = viz;\n this.eventData.industry_type = industry_type\n this.eventData.query = query;\n this.eventData.repub_count = repub_count;\n this.eventData.created_by = created_by;\n this.eventData.page = page;\n this.trigger(this.eventData);\n },\n doEventVizUpdate: function(url, event){\n $.getJSON(url, { event_id: event.id, query: this.eventData.query, viz: this.eventData.viz, industry_type: this.eventData.industry_type, created_by: this.eventData.created_by, page: this.eventData.page})\n .done(function (result) {\n // console.log(result);\n this.eventData.events = result.events;\n this.eventData.repub_count = result.repub_count;\n this.trigger(this.eventData);\n\n }.bind(this))\n .fail(function (xhr, ajaxOptions, thrownError) {\n if (xhr.status == 401) {\n alert(\"Un-authorized status received\")\n $(\"#event_modal\").modal('hide');\n window.location = \"/admin_home\"\n }\n else {\n // console.log(thrownError)\n }\n });\n\n this.eventData.events = _.map(this.eventData.events, function(potential_ev){\n if(potential_ev.id == this){\n potential_ev['loading'] = true;\n return _.clone(potential_ev);\n }\n else{\n return potential_ev;\n }\n }, event.id);\n this.trigger(this.eventData);\n },\n onHideEvent: function(event){\n this.doEventVizUpdate(\"/administrate_event/hide_event_on_list\", event);\n },\n onShowEvent: function(event){\n this.doEventVizUpdate(\"/administrate_event/publish_event_on_list\", event);\n },\n onPublishAsNow: function(event){\n this.doEventVizUpdate(\"/administrate_event/publish_event_on_list_as_now\", event);\n },\n onDeleteEvent: function(event){\n this.doEventVizUpdate(\"/administrate_event/delete_event_on_list\", event);\n },\n onInitiateRepublishing: function(){\n $.getJSON(\"/administrate_event/push_all_events_to_search\").fail(function (xhr, ajaxOptions, thrownError) {\n if (xhr.status == 401) {\n alert(\"Un-authorized status received\")\n $(\"#event_modal\").modal('hide');\n window.location = \"/admin_home\"\n }\n else {\n // console.log(thrownError)\n }\n });\n },\n onUpdateEvent: function(event){\n this.eventData.events = _.map(this.eventData.events, function(potential_ev){\n if(potential_ev.id == this.id){\n return this;\n }\n else{\n return potential_ev;\n }\n }, event);\n this.trigger(this.eventData);\n }\n});\n\nwindow.EventTableStore = EventTableStore\nexport default EventTableStore\n","/** A schema to describe the Company Activity slice. */\nexport const FacetSearchCompanyActivitySlice = {\n selected: null\n}\n","/** A schema to describe the Affiliation slice. */\nexport const FacetSearchAffiliatedWithSlice = {\n selected: null,\n orgListRefs: {}\n}\n","/**\n * A schema to describe the Auto Complete slice.\n * Initially the slice will only have alias search. We will move\n * other autocomplete searches into this slice as we refactor.\n\n**/\nexport const FacetSearchAliasSearchSlice = {\n aliasSearchRefs: [],\n selected: null\n}\n","/** A schema to describe the clinicalTrialStages slice. */\nexport const FacetSearchClinicalTrialStagesSlice = {\n display: [],\n selected: [],\n}\n","/** A schema to describe the clinicalTrialStages slice. */\nexport const FacetSearchClinicalTrialStatusSlice = {\n display: [],\n selected: [],\n}","/** A schema + default values for what `this.data.relationships` looks like, */\nconst FacetSearchCompanyRelationshipSlice = {\n authorizedSalesForce: false,\n selected: [],\n salesforceCurrentlyProcessing: false\n}\n\nwindow.FacetSearchCompanyRelationshipSlice = FacetSearchCompanyRelationshipSlice\nexport { FacetSearchCompanyRelationshipSlice }","/**\n * A schema to describe the latitude and longitude aspects of a map filter applied to any given query.\n * the keys for this slice are snake case due to timebox for this refactor. Sorry.\n * */\nconst FacetSearchGeoCoordinatesSlice = {\n bottom_right_lat: null,\n bottom_right_lon: null,\n top_left_lat: null,\n top_left_lon: null,\n}\n\nwindow.FacetSearchGeoCoordinatesSlice = FacetSearchGeoCoordinatesSlice\nexport { FacetSearchGeoCoordinatesSlice }\n","const FacetSearchLocationSlice = {\n changed: false,\n fullLocationList: [],\n searchLocations: [],\n selectedLocation: null,\n selectedLocationCodes: []\n};\n\nwindow.FacetSearchLocationSlice = FacetSearchLocationSlice\nexport { FacetSearchLocationSlice }","const FacetSearchResultsSlice = {\n // Keys are kept here so at least we have some resemblance to a \"schema\"\n category_ref: undefined,\n clin_stage: undefined,\n clin_status: undefined,\n conditions: undefined,\n facet_expand_list: undefined,\n location_code: {\n buckets:[]\n },\n monthly_event_counts: null,\n organizations: undefined,\n therapies: undefined,\n trial: undefined\n}\n\nwindow.FacetSearchResultsSlice = FacetSearchResultsSlice\nexport { FacetSearchResultsSlice }","/** A schema to describe the time frame selected slice.\n * display is a set of options to display, a format for moment, and some language glue for the component\n * from is an object representing a from date from a date range, if chosen\n * selected is the current time option selected\n * to is an object representing a to date from a date range, if chosen\n * */\nexport const FacetSearchTimeFrameSlice = {\n // this really should be handled by our YAMLs for locale EN\n display: {\n between: \"Between \",\n format: {\n moment: \"MM-DD-YYYY\",\n description: \"MMM Do, YYYY\"\n },\n in: \"In \",\n options: {\n time_any: \"the last 10 years\",\n time_last_24h: \"the last 24 hours\",\n time_last_3d: \"the last 3 days\",\n time_last_wk: \"the last week\",\n time_last_mon: \"the last month\",\n time_last_3m: \"the last 3 months\",\n time_last_6m: \"the last 6 months\",\n time_last_1y: \"the last year\",\n time_custom: \"custom date range\",\n },\n },\n from: null,\n selected: \"time_any\",\n to: null,\n}\n","const FacetSearchUserListSlice = {\n lists: [],\n selected: null,\n userCanSeeLists: false,\n};\n\nwindow.FacetSearchUserListSlice = FacetSearchUserListSlice\nexport { FacetSearchUserListSlice }\n","import Reflux from \"reflux\"\nimport { FacetSearchCompanyActivityActions, FacetSearchCompanyActivityMutations } from \"./actions/facetSearch/activityActions\"\nimport { FacetSearchAliasSearchActions, FacetSearchAliasSearchMutations } from \"./actions/facetSearch/aliasSearchActions\";\nimport { FacetSearchAffiliatedWithActions, FacetSearchAffiliatedWithMutations } from \"./actions/facetSearch/affiliatedWithActions\";\nimport { FacetSearchListActions, FacetSearchListMutations } from \"./actions/facetSearch/listActions\"\nimport { FacetSearchCompanyRelationshipActions, FacetSearchCompanyRelationshipMutations } from \"./actions/facetSearch/companyRelationshipActions\";\nimport { FacetSearchGeoCoordinatesActions, FacetSearchGeoCoordinatesMutations } from \"./actions/facetSearch/geoCoordinatesActions\";\nimport { FacetSearchLocationActions, FacetSearchLocationMutations } from \"./actions/facetSearch/locationActions\";\nimport { FacetSearchStoreActions, FacetSearchStoreMutations } from \"./actions/facetSearch/storeActions\";\nimport { FacetSearchTimeFrameActions, FacetSearchTimeFrameMutations } from \"./actions/facetSearch/timeFrameActions\";\n\nimport { FacetSearchCompanyActivitySlice } from \"./slices/facetSearch/activitySlice\";\nimport { FacetSearchAffiliatedWithSlice } from \"./slices/facetSearch/affiliatedWithSlice\";\nimport { FacetSearchAliasSearchSlice } from \"./slices/facetSearch/aliasSearchSlice\";\nimport { FacetSearchClinicalTrialStagesSlice } from \"./slices/facetSearch/clinicalTrialStagesSlice\";\nimport { FacetSearchClinicalTrialStatusSlice } from \"./slices/facetSearch/clinicalTrialStatusSlice\";\nimport { FacetSearchCompanyRelationshipSlice } from \"./slices/facetSearch/companyRelationshipSlice\";\nimport { FacetSearchGeoCoordinatesSlice } from \"./slices/facetSearch/geoCoordinatesSlice\";\nimport { FacetSearchLocationSlice } from \"./slices/facetSearch/locationSlice\";\nimport { FacetSearchResultsSlice } from \"./slices/facetSearch/resultsSlice\";\nimport { FacetSearchTimeFrameSlice } from \"./slices/facetSearch/timeFrameSlice\";\nimport { FacetSearchUserListSlice } from \"./slices/facetSearch/userListSlice\"\n\nconst FacetSearchStore = Reflux.createStore({\n listenables: [\n FacetSearchAffiliatedWithActions,\n FacetSearchAliasSearchActions,\n FacetSearchCompanyActivityActions,\n FacetSearchListActions,\n FacetSearchCompanyRelationshipActions,\n FacetSearchGeoCoordinatesActions,\n FacetSearchLocationActions,\n FacetSearchStoreActions,\n FacetSearchTimeFrameActions,\n ],\n init: function () {\n this.data = {\n activities: {\n display: null,\n selected: null\n },\n affiliation: {\n ...FacetSearchAffiliatedWithSlice,\n },\n aliasSearch: {\n ...FacetSearchAliasSearchSlice,\n },\n clinicalTrialStages: {\n ...FacetSearchClinicalTrialStagesSlice,\n },\n clinicalTrialStatuses: {\n ...FacetSearchClinicalTrialStatusSlice,\n },\n events: [],\n facets: {\n ...FacetSearchResultsSlice\n },\n // Which filters are already selected for each type of entity, e.g. \"Pfizer\" already selected in org dropdown\n filterCriteria: {\n conditions: [],\n organizations: [],\n therapies: [],\n },\n geoCoordinates: {\n ...FacetSearchGeoCoordinatesSlice,\n },\n location: {\n ...FacetSearchLocationSlice\n },\n userLists: {\n ...FacetSearchUserListSlice\n },\n relationships: {\n ...FacetSearchCompanyRelationshipSlice\n },\n searchTerm: {\n feedPageQueryTerm: \"\",\n queryTerm: \"\",\n },\n timeFrame: {\n ...FacetSearchTimeFrameSlice\n },\n total_count: 0,\n }\n },\n\n /* Include any mutation functions here. Note that each mutation function MUST have a unique name! */\n\n ...FacetSearchAffiliatedWithMutations,\n ...FacetSearchAliasSearchMutations,\n ...FacetSearchCompanyActivityMutations,\n ...FacetSearchListMutations,\n ...FacetSearchCompanyRelationshipMutations,\n ...FacetSearchGeoCoordinatesMutations,\n ...FacetSearchLocationMutations,\n ...FacetSearchStoreMutations,\n ...FacetSearchTimeFrameMutations,\n});\n\nwindow.FacetSearchStore = FacetSearchStore;\nexport default FacetSearchStore;\n","import Reflux from \"reflux\";\nimport ListPageActions from \"./actions/lists/listPageActions\";\n\nconst ListPageStore = Reflux.createStore({\n listenables: [ListPageActions],\n getInitialState: function () {\n return {\n activeTab: \"My Lists\",\n };\n },\n onSelectTab: function (tab) {\n this.trigger({ activeTab: tab });\n },\n});\n\nexport default ListPageStore;\n","import Reflux from \"reflux\"\n\nconst UserActions = Reflux.createActions({\n init: { sync: true },\n setSessionTTL: { },\n\n /**\n * Update how long to wait between each session check.\n * Will automatically restart checking. Extremely useful\n * in RSpec feature tests.\n * */\n setSessionCheckFrequency: {},\n startSessionCheck: { },\n})\n\nconst UserStoreMutations = {\n onInit: function(data) {\n this.data = { ...(this.data), ...data }\n },\n onSetSessionTTL: function(ttl) {\n this.data.session.ttl = ttl\n\n if (ttl <= 0) {\n clearInterval(this.data.session.checkInterval)\n }\n\n this.trigger(this.data)\n },\n onStartSessionCheck: function() {\n if(this.data.onAdminSite) {\n console.warn('Running on Admin, skipping user session checks!')\n return\n }\n\n // Prevent more than one running!\n if (!this.data.session.checkInterval) {\n this.data.session.checkInterval = setInterval(this.checkUserSession, this.data.session.checkFrequency)\n }\n },\n onSetSessionCheckFrequency: function(newFrequency) {\n // Re-start the session check interval\n clearInterval(this.data.session.checkInterval)\n\n this.data.session.checkInterval = null\n this.data.session.checkFrequency = newFrequency\n this.onStartSessionCheck()\n },\n // Check user session.\n checkUserSession: function() {\n $.ajax({\n url: '/session_timeout',\n type: 'GET',\n success(result) {\n UserActions.setSessionTTL(result.ttl)\n },\n error(err) {\n // 401 indicates session expired, don't want\n // to capture errors such as 5xx which may\n // indicate server being down, user not having\n // internet, etc.\n if(err.status === 401) {\n UserActions.setSessionTTL(0)\n }\n }\n })\n }\n}\n\nwindow.UserActions = UserActions\nexport {\n UserActions,\n UserStoreMutations\n}\n","import Reflux from \"reflux\"\nimport { UserActions, UserStoreMutations } from \"./actions/userActions\"\n\nwindow.UserStore = Reflux.createStore({\n listenables: [\n UserActions\n ],\n init() {\n this.data = {\n session: {\n ttl: 1800, // Number of seconds before session expires\n checkFrequency: 30000,\n checkInterval: null,\n },\n onAdminSite: false\n }\n },\n\n /* Include any mutation functions here. Note that each mutation function MUST have a unique name! */\n ...UserStoreMutations\n})\n","import Reflux from \"reflux\";\n\nconst EventModifyModalAction = Reflux.createActions([\"initialLoad\", \"updateDate\", \"saveEventChanges\", \"removeEntity\", \"removeClinStage\", \"addClinStage\", \"addEntity\", \"addIndustry\", \"removeIndustry\"]);\n\nwindow.EventModifyModalAction = EventModifyModalAction;\nexport default EventModifyModalAction;\n","import Reflux from \"reflux\";\nimport EventModifyModalAction from \"./actions/eventModifyModalActions\";\nimport { getAllPublishableConceptRefs } from \"../helpers/administrateEvent\";\n\nconst EventModifyModalStore = Reflux.createStore({\n eventData: {event: {}, admin_industry: \"\", saving: false},\n listenables: EventModifyModalAction,\n onInitialLoad: function (event, hide_callback, admin_industry) {\n this.eventData.event = event;\n this.hide_callback = hide_callback;\n this.eventData.admin_industry = admin_industry;\n this.trigger(this.eventData);\n },\n onSaveEventChanges: function (make_vizible) {\n var url = \"/administrate_event/\" + this.eventData.event.id + \"/update_event_from_list\";\n if(make_vizible) {\n $.post(url, {event: this.eventData.event})\n .done(function (result) {\n // console.log(result);\n this.eventData.event = result;\n this.eventData.saving = false;\n this.trigger(this.eventData);\n EventTableAction.showEvent(this.eventData.event);\n this.hide_callback();\n\n }.bind(this))\n .fail(function (xhr, ajaxOptions, thrownError) {\n if (xhr.status == 401) {\n alert(\"Un-authorized status received\")\n $(\"#event_modal\").modal('hide');\n window.location = \"/admin_home\"\n } else if (xhr.status == 504) {\n alert(\"It seems like the server is a bit too busy. Please try again later!\")\n $(\"#event_modal\").modal('hide');\n window.location = \"/administrate_event/events\"\n }\n else {\n // console.log(thrownError)\n }\n });\n }\n else{\n $.post(url, {event: this.eventData.event})\n .done(function (result) {\n // console.log(result);\n this.eventData.event = result;\n this.eventData.saving = false;\n this.trigger(this.eventData);\n EventTableAction.updateEvent(result);\n this.hide_callback();\n\n }.bind(this))\n .fail(function (xhr, ajaxOptions, thrownError) {\n if (xhr.status == 401) {\n alert(\"Un-authorized status received\")\n $(\"#event_modal\").modal('hide');\n window.location = \"/admin_home\"\n } else if (xhr.status == 504) {\n alert(\"It seems like the server is a bit too busy. Please try again later!\")\n $(\"#event_modal\").modal('hide');\n window.location = \"/administrate_event/events\"\n }\n else {\n // console.log(thrownError)\n }\n });\n\n }\n this.eventData.saving = true;\n this.trigger(this.eventData);\n },\n onUpdateDate: function (date) {\n this.eventData.event.dateMilli = date.valueOf();\n this.trigger(this.eventData);\n },\n onRemoveEntity: function (rec_id) {\n this.eventData.event.entities = _.reject(this.eventData.event.entities, function (ent) {\n return ent.rec_id == this;\n }, rec_id);\n\n const possibleIndustries = getAllPublishableConceptRefs(this.eventData.event.entities);\n let industries = this.eventData.event.industry_concept_refs;\n if (possibleIndustries.length === 1){\n this.eventData.event.industry_concept_refs = possibleIndustries;\n }\n else{\n this.eventData.event.industry_concept_refs.forEach(function (ind){\n if (!possibleIndustries.includes(ind) || possibleIndustries.length < 1)\n industries = industries.filter(e => e != ind);\n });\n this.eventData.event.industry_concept_refs = industries;\n }\n this.trigger(this.eventData);\n },\n onRemoveClinStage: function (stage) {\n this.eventData.event.independent_properties.clin_stage = _.reject(this.eventData.event.independent_properties.clin_stage, function (stage) {\n return stage == this;\n }, stage);\n this.trigger(this.eventData);\n },\n onAddClinStage: function (stage) {\n if (this.eventData.event.independent_properties) {\n if (this.eventData.event.independent_properties.clin_stage) {\n this.eventData.event.independent_properties.clin_stage.push(stage)\n }\n else {\n this.eventData.event.independent_properties[\"clin_stage\"] = [stage]\n }\n }\n else {\n this.eventData.event[\"independent_properties\"] = {clin_stage: [stage]}\n }\n this.trigger(this.eventData);\n },\n onAddEntity: function(entity){\n this.eventData.event.entities.push(entity);\n const allIndustries = getAllPublishableConceptRefs(this.eventData.event.entities);\n if (allIndustries.length === 1){\n this.eventData.event.industry_concept_refs = allIndustries;\n }\n this.trigger(this.eventData);\n },\n onAddIndustry: function(industry){\n this.eventData.event.industry_concept_refs.push(industry);\n this.trigger(this.eventData);\n },\n onRemoveIndustry: function(industry){\n this.eventData.event.industry_concept_refs = this.eventData.event.industry_concept_refs.filter(e => e != industry);\n this.trigger(this.eventData);\n }\n});\n\nwindow.EventModifyModalStore = EventModifyModalStore\nexport default EventModifyModalStore;\n","import Reflux from \"reflux\";\n\nconst EntSearchAction = Reflux.createActions([\"searchFor\", \"choseEntity\"]);\n\nwindow.EntSearchAction = EntSearchAction;\nexport default EntSearchAction;\n","import Reflux from \"reflux\";\nimport EntSearchAction from \"./actions/entSearchActions\";\n\nconst EntSearchStore = Reflux.createStore({\n data: {search_string: '', results: []},\n listenables: EntSearchAction,\n onSearchFor: function(search_string){\n var srch = search_string.trim();\n this.data.search_string = search_string;\n if(srch.length > 2){\n // console.log(\"Doing search for \" + srch);\n $.getJSON(\"/administrate_event/ent_autocomplete_search\", {text: srch}, function(res){\n this.data = {results: res};\n this.trigger(this.data);\n }.bind(this));\n }\n else{\n this.data = {search_string: search_string , results: []}\n }\n this.trigger(this.data);\n },\n onChoseEntity: function(entity){\n EventModifyModalAction.addEntity(entity);\n this.data = {search_string: \"\", results: []};\n this.trigger(this.data);\n }\n});\n\nwindow.EntSearchStore = EntSearchStore;\nexport default EntSearchStore;\n","import Reflux from \"reflux\";\n\nconst SFPanelActions = Reflux.createActions([\n \"initialState\",\n \"trackEvent\",\n \"trackEngagementEvent\",\n \"jump\",\n]);\n\n// We should import the actions in the files they're used in, thereby doing away with this window.hack\n// But because the imports are used in files loaded by app/javascripts/applicaiton.js via //= require components\n// the import statement required for this is sprocketed into a require statement: not supported by the browser\nwindow.SFPanelActions = SFPanelActions;\nexport default SFPanelActions;\n","import Reflux from \"reflux\";\n\nimport SFPanelActions from \"../actions/salesForce/sFPanelActions\";\n\nconst SFPanelActionsStore = Reflux.createStore({\n listenables: SFPanelActions,\n init: function(){\n this.data_store = {company_id:null, company_name:null, selected:null}\n },\n onInitialState: function(company_id, company_name){\n this.data_store = {company_id:company_id, company_name:company_name}\n },\n onTrackEvent: function(ref, message, params){\n track(ref, message, _.extend(params, {organisation_id: this.data_store.company_id, org_name: this.data_store.company_name}))\n },\n onTrackEngagementEvent: function(message, params){\n track_engagement(message, _.extend(params, {organisation_id: this.data_store.company_id, org_name: this.data_store.company_name}))\n },\n onJump: function (account_id){\n $('html,body').animate({scrollTop: $('#' + account_id).offset().top-183}, 250);\n return false;\n }\n});\n\nwindow.SFPanelActionsStore = SFPanelActionsStore;\nexport default SFPanelActionsStore;\n","import Reflux from \"reflux\";\n\nconst SFAccountActions = Reflux.createActions([\"updateAccounts\"]);\n\n// We should import the actions in the files they're used in, thereby doing away with this window.hack\n// But because the imports are used in files loaded by app/javascripts/applicaiton.js via //= require components\n// the import statement required for this is sprocketed into a require statement: not supported by the browser\nwindow.SFAccountActions = SFAccountActions;\nexport default SFAccountActions;\n","import Reflux from \"reflux\";\n\nimport SFAccountActions from \"../actions/salesForce/sFAccountActions\";\n\nconst SFAccountActionsStore = Reflux.createStore({\n listenables: SFAccountActions,\n init: function(){\n this.data_store = {accounts:[]}\n },\n onUpdateAccounts: function(accounts){\n this.data_store.accounts = accounts\n this.trigger(this.data_store.accounts);\n }\n});\n\nwindow.SFAccountActionsStore = SFAccountActionsStore;\nexport default SFAccountActionsStore;\n","import Reflux from \"reflux\";\n\nconst SFTabActions = Reflux.createActions([\"selectedTab\"]);\n\n// We should import the actions in the files they're used in, thereby doing away with this window.hack\n// But because the imports are used in files loaded by app/javascripts/applicaiton.js via //= require components\n// the import statement required for this is sprocketed into a require statement: not supported by the browser\nwindow.SFTabActions = SFTabActions;\nexport default SFTabActions;\n","import Reflux from \"reflux\";\n\nimport SFTabActions from \"../actions/salesForce/sFTabActions\";\n\nconst SFTabActionsStore = Reflux.createStore({\n listenables: SFTabActions,\n onSelectedTab: function(account, tab_selected){\n this.trigger(account, tab_selected);\n }\n});\n\nwindow.SFTabActionsStore = SFTabActionsStore;\nexport default SFTabActionsStore;\n","import Reflux from \"reflux\";\n\nconst SFPanelWrapperActions = Reflux.createActions([\n \"updateAccounts\",\n \"updateLeads\",\n]);\n\n// We should import the actions in the files they're used in, thereby doing away with this window.hack\n// But because the imports are used in files loaded by app/javascripts/applicaiton.js via //= require components\n// the import statement required for this is sprocketed into a require statement: not supported by the browser\nwindow.SFPanelWrapperActions = SFPanelWrapperActions;\nexport default SFPanelWrapperActions;\n","import Reflux from \"reflux\";\n\nimport SFPanelWrapperActions from \"../actions/salesForce/sFPanelWrapperActions\";\n\nconst SFPanelWrapperActionsStore = Reflux.createStore({\n listenables: SFPanelWrapperActions,\n onUpdateAccounts: function(new_account_set){\n this.trigger('accounts', new_account_set);\n },\n onUpdateLeads: function(new_lead_set){\n this.trigger('leads', new_lead_set);\n }\n});\n\nwindow.SFPanelWrapperActionsStore = SFPanelWrapperActionsStore;\nexport default SFPanelWrapperActionsStore;\n","import Reflux from \"reflux\";\n\nconst SFLeadPanelActions = Reflux.createActions([\"refreshLeads\"]);\n\n// We should import the actions in the files they're used in, thereby doing away with this window.hack\n// But because the imports are used in files loaded by app/javascripts/applicaiton.js via //= require components\n// the import statement required for this is sprocketed into a require statement: not supported by the browser\nwindow.SFLeadPanelActions = SFLeadPanelActions;\nexport default SFLeadPanelActions;\n","import Reflux from \"reflux\";\n\nimport SFLeadPanelActions from \"../actions/salesForce/sFLeadPanelActions\";\n\nconst SFLeadPanelActionsStore = Reflux.createStore({\n listenables: SFLeadPanelActions,\n onRefreshLeads: function(){\n this.trigger();\n }\n});\n\nwindow.SFLeadPanelActionsStore = SFLeadPanelActionsStore;\nexport default SFLeadPanelActionsStore;\n","import Reflux from \"reflux\";\n\nconst SFAccountLoaderActions = Reflux.createActions([\"refreshAccount\"]);\n\n// We should import the actions in the files they're used in, thereby doing away with this window.hack\n// But because the imports are used in files loaded by app/javascripts/applicaiton.js via //= require components\n// the import statement required for this is sprocketed into a require statement: not supported by the browser\nwindow.SFAccountLoaderActions = SFAccountLoaderActions;\nexport default SFAccountLoaderActions;\n","import Reflux from \"reflux\";\n\nimport SFAccountLoaderActions from \"../actions/salesForce/sFAccountLoaderActions\";\n\nconst SFAccountLoaderActionsStore = Reflux.createStore({\n listenables: SFAccountLoaderActions,\n onRefreshAccount: function(account_id){\n this.trigger(account_id);\n }\n});\n\nwindow.SFAccountLoaderActionsStore = SFAccountLoaderActionsStore;\nexport default SFAccountLoaderActionsStore;\n","import Reflux from \"reflux\";\n\nconst RelatedTherapiesActions = Reflux.createActions([\n \"initialState\",\n \"getTherapiesForOrg\",\n \"reportMismatchTherapy\",\n]);\n\n// We should import the actions in the files they're used in, thereby doing away with this window.hack\n// But because the imports are used in files loaded by app/javascripts/applicaiton.js via //= require components\n// the import statement required for this is sprocketed into a require statement: not supported by the browser\nwindow.RelatedTherapiesActions = RelatedTherapiesActions;\nexport default RelatedTherapiesActions;\n","import Reflux from \"reflux\";\n\nimport RelatedTherapiesActions from \"./actions/relatedTherapiesActions\"\n\nconst RelatedTherapiesStore = Reflux.createStore({\n listenables: RelatedTherapiesActions,\n init: function(props){\n this.data = {\n therapy_relationships: { },\n all_related_therapies: [],\n paginated_therapies: { },\n therapies_reported: new Set(), // Keep track of all therapy IDs that have been reported as mismatch\n therapies_loaded: false,\n therapies_per_page: 10\n };\n },\n onInitialState: function(data){\n this.data = data;\n this.trigger(this.data);\n },\n onGetTherapiesForOrg: function (org_id) {\n var url = `/company/${org_id}/get_related_therapies`;\n\n // If we already have therapy data, return it\n if(this.data.therapies_loaded) { return this.data.related_therapies; }\n\n // Else, request it and memoize\n $.get(url,\n function(res) { this._updateRelatedTherapies(res); }.bind(this)\n );\n },\n onReportMismatchTherapy: function(therapy) {\n var activity = 'report_therapy_mistmatch';\n var message = 'Incorrect therapy relationship';\n var data = {\n org_id: this.data.therapy_relationships.org_id,\n org_name: this.data.therapy_relationships.org_name,\n therapy_id: therapy.id,\n therapy_name: therapy.name\n };\n track(activity, message, data);\n\n // Acknowledge this therapy as being reported\n this.data.therapies_reported.add(therapy.id);\n this.trigger(this.data);\n },\n _updateRelatedTherapies: function(data) {\n this.data = {\n ...this.data,\n therapy_relationships: data,\n all_related_therapies: data.related_therapies,\n therapies_loaded: true,\n total_num_therapies: data.total_therapies\n }\n\n this._paginateRelatedTherapies();\n this.trigger(this.data);\n },\n _paginateRelatedTherapies: function() {\n var paginated_therapies = { };\n var per_page = this.data.therapies_per_page;\n var all_therapies = this.data.all_related_therapies;\n\n // Keep track of what page we're on\n var index = 1\n\n // Assign a therapy data to each page\n for(var i = 0; i < all_therapies.length; i+=per_page){\n paginated_therapies[index] = all_therapies.slice(i, i + per_page)\n index += 1;\n }\n this.data.paginated_therapies = paginated_therapies;\n }\n});\n\nwindow.RelatedTherapiesStore = RelatedTherapiesStore;\nexport default RelatedTherapiesStore;\n","import Reflux from \"reflux\";\n\nconst ColumnSettingsActions = Reflux.createActions([\n \"adjustColumnSettings\",\n]);\n\n// We should import the actions in the files they're used in, thereby doing away with this window.hack\n// But because the imports are used in files loaded by app/javascripts/applicaiton.js via //= require components\n// the import statement required for this is sprocketed into a require statement: not supported by the browser\nwindow.ColumnSettingsActions = ColumnSettingsActions;\nexport default ColumnSettingsActions;\n","import Reflux from \"reflux\";\n\nimport ColumnSettingsActions from \"../actions/pivotLists/columnSettingsActions\";\n\nconst ColumnSettingsStore = Reflux.createStore({\n listenables: ColumnSettingsActions,\n init: function() {\n this.state = []\n },\n onAdjustColumnSettings: function(column_settings){\n this.state = column_settings;\n this.trigger(this.state);\n }\n});\n\nwindow.ColumnSettingsStore = ColumnSettingsStore;\nexport default ColumnSettingsStore;\n","import Reflux from \"reflux\";\n\nconst ColumnControlsActions = Reflux.createActions([\n \"toggleColumnControls\",\n \"scrollWheelControls\",\n]);\n\n// We should import the actions in the files they're used in, thereby doing away with this window.hack\n// But because the imports are used in files loaded by app/javascripts/applicaiton.js via //= require components\n// the import statement required for this is sprocketed into a require statement: not supported by the browser\nwindow.ColumnControlsActions = ColumnControlsActions;\nexport default ColumnControlsActions;\n","import Reflux from \"reflux\";\n\nimport ColumnControlsActions from \"../actions/pivotLists/columnControlsActions\";\n\nconst ColumnControlsStore = Reflux.createStore({\n listenables: ColumnControlsActions,\n init: function() {\n this.state = ''\n },\n onToggleColumnControls: function(controls_state){\n this.state = controls_state;\n this.trigger(this.state);\n },\n onScrollWheelControls: function(delta, shiftKey, scrollSection) {\n // this shouldn't be here -- but I'm loathe to:\n //\n // a. create loose functions all over the place\n // b. impose a namespace/regime for just this function without a formal architecture discussion around the proper composition of our JS codebase\n //\n // I played with import export for a bit but feel we should have a proper discussion on how to structure our code (namespacing, logical organization, component break up, stores etc.) before embarking on any path\n\n const listEntriesScrollData = document.getElementById(\"list_entries_scroll_data\");\n const listEntriesScrollHeader = document.getElementById(\"list_entries_scroll_header\");\n\n const listCompaniesScrollData = document.getElementById(\"list_companies_scroll_data\");\n const listCompaniesScrollHeader = document.getElementById(\"list_companies_scroll_header\");\n\n if(shiftKey === true) {\n\n scrollSection.scrollLeft += ( delta < 0 ? 1 : -1 ) * 50;\n\n const pivotlistHorizontalScroll = document.getElementById(\"pivotlist_horizontal_scroll\");\n const headerForCompanies = document.getElementById(\"header_for_companies\")\n\n listEntriesScrollData.scrollLeft = pivotlistHorizontalScroll.scrollLeft = listEntriesScrollHeader.scrollLeft = scrollSection.scrollLeft;\n\n if(scrollSection.scrollLeft > 0) {\n listCompaniesScrollData.classList.add('pivotlist_horizontal_scroll_shadow');\n headerForCompanies.classList.add('pivotlist_horizontal_scroll_shadow');\n listCompaniesScrollHeader.classList.add('pivotlist_horizontal_scroll_shadow');\n }\n else {\n listCompaniesScrollData.classList.remove('pivotlist_horizontal_scroll_shadow');\n headerForCompanies.classList.remove('pivotlist_horizontal_scroll_shadow');\n listCompaniesScrollHeader.classList.remove('pivotlist_horizontal_scroll_shadow');\n }\n\n }\n else {\n scrollSection.scrollTop += ( delta < 0 ? 1 : -1 ) * 50;\n\n const pivotlistVerticalScroll = document.getElementById(\"pivotlist_vertical_scroll\");\n\n listCompaniesScrollData.scrollTop = listEntriesScrollData.scrollTop = pivotlistVerticalScroll.scrollTop = scrollSection.scrollTop;\n\n if(scrollSection.scrollTop > 0) {\n listEntriesScrollHeader.classList.add('pivotlist_vertical_scroll_shadow');\n listCompaniesScrollHeader.classList.add('pivotlist_vertical_scroll_shadow');\n }\n else {\n listEntriesScrollHeader.classList.remove('pivotlist_vertical_scroll_shadow');\n listCompaniesScrollHeader.classList.remove('pivotlist_vertical_scroll_shadow');\n }\n }\n }\n});\n\nwindow.ColumnControlsStore = ColumnControlsStore;\nexport default ColumnControlsStore;\n","import Reflux from \"reflux\";\n\nconst ColumnsChosenActions = Reflux.createActions([\n \"initialState\",\n \"removeFromChosen\",\n \"addToChosen\",\n \"updateOrder\",\n \"clearAll\",\n \"reset\",\n]);\n\n// We should import the actions in the files they're used in, thereby doing away with this window.hack\n// But because the imports are used in files loaded by app/javascripts/applicaiton.js via //= require components\n// the import statement required for this is sprocketed into a require statement: not supported by the browser\nwindow.ColumnsChosenActions = ColumnsChosenActions;\nexport default ColumnsChosenActions;\n","import Reflux from \"reflux\";\n\nimport ColumnsChosenActions from \"../actions/pivotLists/columnsChosenActions\";\n\nconst ColumnsChosenStore = Reflux.createStore({\n listenables: ColumnsChosenActions,\n init: function() {\n this.state = []\n },\n onInitialState: function(chosen_columns){\n this.state = chosen_columns\n },\n onReset: function(reset){\n const resetFromHash = Object.keys(reset).map(key => reset[key]);\n this.state = resetFromHash;\n this.trigger(this.state);\n },\n onClearAll: function(){\n this.state = [this.state[0]];\n this.trigger(this.state);\n },\n onRemoveFromChosen: function(element_data){\n this.state = this.state.filter(function(current){\n return current.column_name !== element_data.column_name\n });\n this.trigger(this.state);\n },\n onUpdateOrder: function(order){\n this.trigger([]);\n this.onUpdateComplete(order)\n },\n onUpdateComplete: function(order){\n const sorting = order;\n const new_data = this.state.map(function(item) {\n const n = sorting.indexOf(item.column_name);\n sorting[n] = '';\n return [n, item]\n }).sort().map(function(j) {return j[1]});\n this.state = new_data;\n this.trigger(this.state);\n },\n onAddToChosen: function(element_data, interactableColumnsAvailable){\n if(this.state.length <= interactableColumnsAvailable){\n this.state.push(element_data);\n this.trigger(this.state);\n }\n }\n});\n\nwindow.ColumnsChosenStore = ColumnsChosenStore;\nexport default ColumnsChosenStore;\n","import Reflux from \"reflux\";\n\n// this seems poorly named -- or the rest of the column state management objects are. Probably the latter. Refactor required.\n// -- GJ 2023.08.30\n\nconst pivotListColumnSettingsActions = Reflux.createActions([\n \"initialState\",\n]);\n\n// We should import the actions in the files they're used in, thereby doing away with this window.hack\n// But because the imports are used in files loaded by app/javascripts/applicaiton.js via //= require components\n// the import statement required for this is sprocketed into a require statement: not supported by the browser\nwindow.pivotListColumnSettingsActions = pivotListColumnSettingsActions;\nexport default pivotListColumnSettingsActions;\n","import Reflux from \"reflux\";\n\nimport pivotListColumnSettingsActions from \"../actions/pivotLists/pivotlistColumnSettingsActions\";\n\nconst pivotListColumnSettingsStore = Reflux.createStore({\n listenables: pivotListColumnSettingsActions,\n init: function () {\n this.state = {\n fixedColumnsCount: 1,\n interactableColumnsCount: 4,\n columnChoicesPerPage: 0,\n totalColumnChoicePages: 0,\n listTableContainerHeight: 0\n };\n },\n onInitialState: function(interactableColumnsCount, columnChoicesPerPage, totalColumnChoicePages, listTableContainerHeight){\n this.state.interactableColumnsCount = interactableColumnsCount;\n this.state.columnChoicesPerPage = columnChoicesPerPage;\n this.state.totalColumnChoicePages = totalColumnChoicePages;\n this.state.listTableContainerHeight = listTableContainerHeight;\n this.trigger(this.state);\n }\n});\n\nwindow.pivotListColumnSettingsStore = pivotListColumnSettingsStore;\nexport default pivotListColumnSettingsStore;\n","import Reflux from \"reflux\";\n\nconst FlagContactActions = Reflux.createActions([\n \"flagContact\",\n]);\n\nwindow.FlagContactActions = FlagContactActions;\nexport default FlagContactActions;\n","import Reflux from \"reflux\";\n\nimport FlagContactActions from \"../actions/contactSearch/flagContactActions\";\n\nconst FlagContactStore = Reflux.createStore({\n listenables: FlagContactActions,\n init: function(){\n this.data = {\n contactDetails: {\n orgName: '',\n organizationId: '',\n contactId: '',\n personId: '',\n deliverability: ''\n }\n };\n },\n onFlagContact: function(contactDetails){\n\n $(\"body\").addClass(\"wait\");\n\n this.data.contactDetails.orgName = contactDetails.orgName;\n this.data.contactDetails.organizationId = contactDetails.organizationId;\n this.data.contactDetails.contactId = contactDetails.contactId;\n\n this.data.contactDetails.personId = contactDetails.personId;\n this.data.contactDetails.deliverability = contactDetails.deliverability;\n this.trigger(this.data);\n\n const url = [location.protocol, '//', location.host, location.pathname].join('') + \"/rolodexes/flag\";\n\n const flagParams = {org_name: contactDetails.orgName, organization_id: contactDetails.organizationId, contact_id: contactDetails.contactId, person_id: contactDetails.personId, deliverability: contactDetails.deliverability}\n $.get(url, flagParams, function(response){\n $(\"body\").removeClass(\"wait\");\n ContactSearchAction.updateRevealedContacts(response.current_contacts);\n }.bind(this));\n\n }\n});\n\nwindow.FlagContactStore = FlagContactStore;\nexport default FlagContactStore;\n","import Reflux from \"reflux\";\n\nconst FilteringActions = Reflux.createActions([\n \"initialState\",\n \"toggleFilteringOptions\",\n \"changeSelectedColumn\",\n \"editFilter\",\n \"revertState\",\n]);\n\nwindow.FilteringActions = FilteringActions;\nexport default FilteringActions;\n","import Reflux from \"reflux\";\n\nimport FilteringActions from \"../actions/pivotLists/filteringActions\";\n\nconst FilteringActionsStore = Reflux.createStore({\n\n listenables: FilteringActions,\n init: function(){\n const orig_filters = [];\n const column_filters = [];\n this.state = {open:false, changed:false, column_selected:null, orig_filters:orig_filters, column_filters:column_filters};\n },\n onInitialState: function(column_filters, orig_filters){\n this.state.orig_filters = orig_filters;\n this.state.column_filters = column_filters;\n this.trigger(this.state);\n },\n onToggleFilteringOptions: function(toggle, column_selected){\n this.state.open = toggle;\n this.state.column_selected = column_selected;\n this.trigger(this.state);\n },\n onChangeSelectedColumn: function(column_selected){\n this.state.column_selected = column_selected;\n this.trigger(this.state);\n },\n onEditFilter: function(index, value, state){\n const value_index = this.state.column_filters[index]['filter'].indexOf(value);\n if(state === true){\n if(value_index === -1){\n this.state.column_filters[index]['filter'].push(value);\n }\n }\n else{\n if (value_index > -1) {\n this.state.column_filters[index]['filter'].splice(value_index, 1);\n }\n }\n this.state.changed = JSON.stringify(this.state.orig_filters) !== JSON.stringify(this.state.column_filters);\n this.trigger(this.state);\n },\n onRevertState: function(){\n this.state = {open:false, changed:false, column_selected:null, orig_filters:this.state.orig_filters, column_filters:lodash.cloneDeep(this.state.orig_filters)};\n this.trigger(this.state);\n }\n});\n\nwindow.FilteringActionsStore = FilteringActionsStore;\nexport default FilteringActionsStore;\n","import Reflux from \"reflux\";\n\nconst CompanySettingsActions = Reflux.createActions([\n \"adjustCompanySettings\",\n]);\n\nwindow.CompanySettingsActions = CompanySettingsActions;\nexport default CompanySettingsActions;\n","import Reflux from \"reflux\";\n\nimport CompanySettingsActions from \"../actions/pivotLists/companySettingsActions\";\n\nconst CompanySettingsStore = Reflux.createStore({\n listenables: CompanySettingsActions,\n init: function() {\n this.state = []\n },\n onAdjustCompanySettings: function(company_settings){\n this.state = company_settings;\n this.trigger(this.state);\n }\n});\n\nwindow.CompanySettingsStore = CompanySettingsStore;\nexport default CompanySettingsStore;\n\n","import Reflux from \"reflux\";\n\nconst SubmitFormActions = Reflux.createActions([\n \"disableButtons\",\n]);\n\nwindow.SubmitFormActions = SubmitFormActions;\nexport default SubmitFormActions;\n","import Reflux from \"reflux\";\n\nimport SubmitFormActions from \"../actions/pivotLists/submitFormActions\";\n\nconst SubmitFormStore = Reflux.createStore({\n listenables: SubmitFormActions,\n init: function() {\n this.state = false\n },\n onDisableButtons: function(){\n this.state = true;\n this.trigger(this.state);\n }\n});\n\nwindow.SubmitFormStore = SubmitFormStore;\nexport default SubmitFormStore;\n\n","import Reflux from \"reflux\";\n\nconst DragActions = Reflux.createActions([\n \"setDragged\",\n \"setDragOver\",\n]);\n\n// We should import the actions in the files they're used in, thereby doing away with this window.hack\n// But because the imports are used in files loaded by app/javascripts/applicaiton.js via //= require components\n// the import statement required for this is sprocketed into a require statement: not supported by the browser\nwindow.DragActions = DragActions;\nexport default DragActions;\n","import Reflux from \"reflux\";\n\nimport DragActions from \"../actions/pivotLists/dragActions\";\n\nconst DragStore = Reflux.createStore({\n listenables: DragActions,\n init: function() {\n this.state = {type:null, over:false, data:{}}\n },\n onSetDragged: function(type, over, data){\n this.state = {type:type, over:over, data:data};\n this.trigger(this.state);\n },\n onSetDragOver: function(over){\n this.state.over = over;\n this.trigger(this.state);\n },\n});\n\nwindow.DragStore = DragStore;\nexport default DragStore;\n","import Reflux from \"reflux\";\n\nconst RowHoverActions = Reflux.createActions([\n \"updateHover\",\n]);\n\n// We should import the actions in the files they're used in, thereby doing away with this window.hack\n// But because the imports are used in files loaded by app/javascripts/applicaiton.js via //= require components\n// the import statement required for this is sprocketed into a require statement: not supported by the browser\nwindow.RowHoverActions = RowHoverActions;\nexport default RowHoverActions;\n","import Reflux from \"reflux\";\n\nimport RowHoverActions from \"../actions/pivotLists/rowHoverActions\";\n\nconst RowHoverStore = Reflux.createStore({\n listenables: RowHoverActions,\n init: function() {\n this.state = ''\n },\n onUpdateHover: function(hover_id){\n this.state = hover_id;\n this.trigger(this.state);\n }\n});\n\nwindow.RowHoverStore = RowHoverStore;\nexport default RowHoverStore;\n","import Reflux from \"reflux\";\n\nconst RowRemovalActions = Reflux.createActions([\n \"removeCompany\",\n \"restoreCompany\",\n \"refreshRemove\",\n \"refreshRestore\",\n]);\n\n// We should import the actions in the files they're used in, thereby doing away with this window.hack\n// But because the imports are used in files loaded by app/javascripts/applicaiton.js via //= require components\n// the import statement required for this is sprocketed into a require statement: not supported by the browser\nwindow.RowRemovalActions = RowRemovalActions;\nexport default RowRemovalActions;\n","import Reflux from \"reflux\";\n\nimport RowRemovalActions from \"../actions/pivotLists/rowRemovalActions\";\n\nconst RowRemovalStore = Reflux.createStore({\n listenables: RowRemovalActions,\n init: function() {\n this.state = [];\n this.removed_companies = {}\n },\n onRemoveCompany: function(list_id, entity_id){\n $(\"body\").addClass(\"wait\");\n $.get(\"/lists/\" + list_id + \"/remove_entity_from_list\", {entity_id: entity_id}, function (e) {\n $(\"body\").removeClass(\"wait\");\n this.onRefreshRemove(entity_id, e.list_entry)\n }.bind(this));\n },\n onRestoreCompany: function(company_id){\n $(\"body\").addClass(\"wait\");\n $.get('/lists/add_entry_back_to_list', {entry: this.removed_companies[company_id]}, function () {\n $(\"body\").removeClass(\"wait\");\n this.onRefreshRestore(company_id)\n }.bind(this));\n },\n onRefreshRemove: function(company_id,list_entry){\n this.removed_companies[company_id] = list_entry;\n this.state.push(company_id);\n this.trigger(this.state);\n },\n onRefreshRestore: function(company_id){\n this.state.remove(company_id);\n this.trigger(this.state);\n }\n});\n\nwindow.RowRemovalStore = RowRemovalStore;\nexport default RowRemovalStore;\n","import Reflux from \"reflux\";\nimport ListModalAction from \"../actions/pivotLists/listModalActions\";\nimport _ from \"underscore\";\nimport $ from \"jquery\";\n\nconst ListModalActionStore = Reflux.createStore({\n listModalData: {\n dataLoaded: false,\n justSponsor: false,\n displayPage: 0,\n displayOrgList: false,\n saving_list: false,\n succeeded: false,\n new_list_id: \"\",\n createFeed: false,\n },\n listenables: ListModalAction,\n onInitialLoad: function (modalData) {\n this.listModalData = _.extend(\n {\n dataLoaded: false,\n justSponsor: false,\n displayPage: 0,\n displayOrgList: false,\n saving_list: false,\n succeeded: false,\n new_list_id: \"\",\n },\n modalData\n );\n if (this.listModalData.map_display) {\n this.listModalData.justSponsor = true;\n }\n this.trigger(this.listModalData);\n },\n onSwitchSponsorFlag: function () {\n this.listModalData.justSponsor = !this.listModalData.justSponsor;\n this.listModalData.displayPage = 0;\n this.trigger(this.listModalData);\n },\n onDisplayPage: function (page) {\n this.listModalData.displayPage = page;\n this.trigger(this.listModalData);\n },\n onUpdateListName: function (name) {\n this.listModalData.listName = name;\n this.trigger(this.listModalData);\n },\n onSwitchDisplayOrgList: function () {\n this.listModalData.displayOrgList = !this.listModalData.displayOrgList;\n this.trigger(this.listModalData);\n },\n onSwitchFeedCreation: function () {\n this.listModalData.createFeed = !this.listModalData.createFeed;\n this.trigger(this.listModalData);\n },\n onCreateList: function () {\n const { listName } = this.listModalData;\n if (listName && listName.trim() === \"\") {\n return;\n }\n\n var list_names = this.listModalData.justSponsor\n ? _.map(this.listModalData.sponsorList, function (org) {\n return org.name;\n })\n : _.map(this.listModalData.allOrgList, function (org) {\n return org.name;\n });\n this.listModalData.saving_list = true;\n $.ajax({\n url: \"/lists/create_new_list_from_query\",\n type: \"POST\",\n data: {\n title: listName,\n query: this.listModalData.base_query,\n entity_names: list_names,\n create_feed: this.listModalData.createFeed,\n },\n success: function (result) {\n // console.log(result);\n this.listModalData.saving_list = false;\n this.listModalData.succeeded = true;\n this.listModalData.new_list_id = result.list_id;\n $.event.trigger({\n type: \"list_successfully_created\",\n message: \"Successfully created the list\",\n time: new Date(),\n });\n this.trigger(this.listModalData);\n }.bind(this),\n error: function (xhr, ajaxOptions, thrownError) {\n if (xhr.status == 401) {\n alert(\"Un-authorized status received\");\n $(\"#event_modal\").modal(\"hide\");\n window.location = \"/users/sign_in\";\n } else {\n // console.log(thrownError)\n }\n },\n });\n this.trigger(this.listModalData);\n return false;\n },\n});\n\nwindow.ListModalActionStore = ListModalActionStore;\nexport default ListModalActionStore;\n","import Reflux from \"reflux\";\n\nconst MutedCompaniesActions = Reflux.createActions([\n \"setup\",\n \"selectionAdded\",\n \"selectionRemoved\",\n \"clearSelections\",\n \"saveChanges\"\n]);\n\nwindow.MutedCompaniesActions = MutedCompaniesActions;\nexport default MutedCompaniesActions;\n","import Reflux from \"reflux\";\nimport MutedCompaniesActions from \"./actions/mutedCompaniesActions\";\n\nconst MutedCompaniesStore = Reflux.createStore({\n data: {},\n listenables: MutedCompaniesActions,\n getInitialState: function () {\n this.data = {\n suggestedCompanies: [],\n currentSuggested: [],\n mutedCompanies: [],\n currentMuted: [],\n settingsChanged: false,\n settingsSubmitted: false,\n referrer: '/settings'\n };\n return this.data;\n },\n onSetup: function(initialState){\n this.data = {\n suggestedCompanies: initialState.suggestedCompanies,\n currentSuggested: initialState.currentSuggested,\n mutedCompanies: initialState.mutedCompanies,\n currentMuted: JSON.parse(JSON.stringify(initialState.mutedCompanies)),\n settingsChanged: false,\n settingsSubmitted: false,\n referrer: initialState.referrer\n };\n this.trigger(this.data);\n },\n onClearSelections: function(){\n this.data.currentSuggested = JSON.parse(JSON.stringify(this.data.suggestedCompanies));\n this.data.currentMuted = [];\n this.data.settingsChanged = JSON.stringify(this.data.mutedCompanies) !== JSON.stringify(this.data.currentMuted);\n this.trigger(this.data);\n },\n onSaveChanges: function(){\n const currentMuted = this.data.currentMuted.map(company => company.id);\n $.ajax({\n method : \"PATCH\",\n url : \"/settings/muted_companies\",\n dataType: \"json\",\n data : {org_ids: currentMuted}\n }).done(function() {\n this.data.settingsChanged = true;\n this.trigger(this.data);\n window.location.assign(this.data.referrer)\n }.bind(this));\n this.data.settingsSubmitted = true;\n this.trigger(this.data);\n },\n onSelectionAdded: function(company){\n const suggestedCopy = this.data.currentSuggested.filter(function( suggestedCompany ) {\n return suggestedCompany.id !== company.id;\n });\n this.data.currentSuggested = suggestedCopy;\n\n const alreadyMuted = this.data.currentMuted.findIndex(mutedCompany => mutedCompany.id === company.id);\n if(alreadyMuted > -1) {\n return;\n }\n\n this.data.currentMuted.push(company);\n const mutedCopy = JSON.parse(JSON.stringify(this.data.currentMuted));\n mutedCopy.sort(function(a, b) {\n return a.name.toLowerCase().localeCompare(b.name.toLowerCase());\n })\n this.data.currentMuted = mutedCopy;\n this.data.settingsChanged = JSON.stringify(this.data.mutedCompanies) !== JSON.stringify(this.data.currentMuted);\n this.trigger(this.data);\n },\n onSelectionRemoved: function(company){\n const found = this.data.suggestedCompanies.some(suggested => suggested.id === company.id);\n const foundCurrent = this.data.currentSuggested.some(suggested => suggested.id === company.id);\n if(found && !foundCurrent) {\n this.data.currentSuggested.push(company);\n const suggestedCopy = JSON.parse(JSON.stringify(this.data.currentSuggested));\n suggestedCopy.sort(function(a, b) {\n return a.name.toLowerCase().localeCompare(b.name.toLowerCase());\n });\n this.data.currentSuggested = suggestedCopy;\n }\n const mutedCopy = this.data.currentMuted.filter(function( mutedCompany ) {\n return mutedCompany.id !== company.id;\n });\n this.data.currentMuted = mutedCopy;\n this.data.settingsChanged = JSON.stringify(this.data.mutedCompanies) !== JSON.stringify(this.data.currentMuted);\n this.trigger(this.data);\n }\n});\n\nwindow.MutedCompaniesStore = MutedCompaniesStore;\nexport default MutedCompaniesStore;\n","import Reflux from \"reflux\";\n\nconst TerritoriesAction = Reflux.createActions([\n \"initialState\", \n \"territorySelected\", \n \"territoryRemoved\", \n \"clearTerritory\", \n \"saveChanges\" \n]);\n\nwindow.TerritoriesAction = TerritoriesAction;\nexport default TerritoriesAction;\n","import Reflux from \"reflux\";\nimport TerritoriesAction from \"./actions/territoriesActions\";\n\nconst TerritoriesStore = Reflux.createStore({\n listenables: TerritoriesAction,\n init: function(){\n this.data = {fullLocationList:[], userTerritoryList:[], changed: false, referrer: \"/settings\"};\n },\n onInitialState: function(data){\n this.data = data;\n this.trigger(this.data);\n },\n cleanSelectedTerritories: function(new_loc, existing_locs){\n if(new_loc.code.length === 2){\n return _.reject(existing_locs, function(loc){return loc.code.startsWith(new_loc.code)});\n }\n else if(new_loc.code.charAt(2) !== '_'){\n //assume it must be a continent\n var continent = _.find(this.data.fullLocationList, function(con){return con.code === new_loc.code});\n if(continent){\n _.each(continent.children, function(country){existing_locs = this.cleanSelectedTerritories(country, existing_locs)}, this);\n }\n return existing_locs;\n }\n else{\n return existing_locs;\n }\n },\n onTerritorySelected: function(loc_code){\n this.data.userTerritoryList = this.cleanSelectedTerritories(loc_code, this.data.userTerritoryList);\n this.data.userTerritoryList.push(loc_code);\n this.data.changed = true;\n this.data.userTerritoryList = _.sortBy(this.data.userTerritoryList, function(loc){ return loc.parent + \"\" + loc.name;})\n this.trigger(this.data);\n },\n onTerritoryRemoved: function(loc_code){\n this.data.userTerritoryList = _.reject(this.data.userTerritoryList, function(loc){ return loc.code == loc_code.code});\n this.data.changed = true;\n this.trigger(this.data);\n },\n onClearTerritory: function(){\n this.data.userTerritoryList = new Array();\n this.data.changed = true;\n this.trigger(this.data);\n },\n onSaveChanges: function(){\n var data = this.data.userTerritoryList.length > 0 ? {territory: this.data.userTerritoryList} : {};\n $.ajax({\n type : \"POST\",\n url : \"/territories/update_territory\",\n dataType: 'json',\n contentType: 'application/json',\n data : JSON.stringify(data)\n }).done(function() {\n this.data.changed = true;\n this.trigger(this.data);\n window.location.assign(this.data.referrer)\n }.bind(this));\n this.data.changing = true\n this.trigger(this.data);\n }\n});\n\nwindow.TerritoriesStore = TerritoriesStore;\nexport default TerritoriesStore;\n","/**\n* The stores imported/defined here are made globally available.\n**/\nimport Reflux from \"reflux\";\n\nimport \"./facetSearchStore\";\nimport \"./userStore\";\n\nimport \"./eventModifyModalStore\";\nimport \"./eventTableStore\";\nimport \"./entSearchStore\";\n\nimport \"./salesForce/sFPanelActionsStore\";\nimport \"./salesForce/sFAccountActionsStore\";\nimport \"./salesForce/sFTabActionsStore\";\nimport \"./salesForce/sFPanelWrapperActionsStore\";\nimport \"./salesForce/sFLeadPanelActionsStore\";\nimport \"./salesForce/sFAccountLoaderActionsStore\";\n\nimport \"./relatedTherapiesStore\";\nimport \"./pivotLists/columnSettingsStore\";\nimport \"./pivotLists/columnControlsStore\";\nimport \"./pivotLists/columnsChosenStore\";\nimport \"./pivotLists/pivotlistColumnSettingsStore\";\n\nimport \"./contactSearch/flagContactStore\";\nimport \"./pivotLists/filteringActionsStore\";\nimport \"./pivotLists/companySettingsStore\";\nimport \"./pivotLists/submitFormStore\";\n\nimport \"./pivotLists/dragStore\";\nimport \"./pivotLists/rowHoverStore\";\nimport \"./pivotLists/rowRemovalStore\";\n\nimport \"./pivotLists/listModalActionStore\"\n\nimport \"./mutedCompaniesStore\";\nimport \"./territoriesStore\"\nimport \"./contactSearch/contactSearchStore\"\n\n\n// Lists v2\nimport \"./listPageStore\";\n\nwindow.Reflux = Reflux;\n","import I18n from 'i18n-js'\n\n\nI18n.defaultLocale = \"en\";\nI18n.fallbacks = true;\n\nwindow.I18n = I18n\n","import React from \"react\";\nimport ReactDOM from \"react-dom\";\nimport PropTypes from \"prop-types\";\nimport createReactClass from \"create-react-class\";\nimport PureRenderMixin from \"react-addons-pure-render-mixin\";\n\n\nwindow.React = React;\nwindow.PureRenderMixin = PureRenderMixin;\nwindow.createReactClass = createReactClass;\nwindow.React.createReactClass = createReactClass;\nwindow.PropTypes = PropTypes;\nwindow.ReactDOM = ReactDOM;\n","var map = {\n\t\"./af\": 2786,\n\t\"./af.js\": 2786,\n\t\"./ar\": 867,\n\t\"./ar-dz\": 4130,\n\t\"./ar-dz.js\": 4130,\n\t\"./ar-kw\": 6135,\n\t\"./ar-kw.js\": 6135,\n\t\"./ar-ly\": 6440,\n\t\"./ar-ly.js\": 6440,\n\t\"./ar-ma\": 7702,\n\t\"./ar-ma.js\": 7702,\n\t\"./ar-ps\": 315,\n\t\"./ar-ps.js\": 315,\n\t\"./ar-sa\": 6040,\n\t\"./ar-sa.js\": 6040,\n\t\"./ar-tn\": 7100,\n\t\"./ar-tn.js\": 7100,\n\t\"./ar.js\": 867,\n\t\"./az\": 1083,\n\t\"./az.js\": 1083,\n\t\"./be\": 9808,\n\t\"./be.js\": 9808,\n\t\"./bg\": 8338,\n\t\"./bg.js\": 8338,\n\t\"./bm\": 7438,\n\t\"./bm.js\": 7438,\n\t\"./bn\": 8905,\n\t\"./bn-bd\": 6225,\n\t\"./bn-bd.js\": 6225,\n\t\"./bn.js\": 8905,\n\t\"./bo\": 1560,\n\t\"./bo.js\": 1560,\n\t\"./br\": 1278,\n\t\"./br.js\": 1278,\n\t\"./bs\": 622,\n\t\"./bs.js\": 622,\n\t\"./ca\": 2468,\n\t\"./ca.js\": 2468,\n\t\"./cs\": 5822,\n\t\"./cs.js\": 5822,\n\t\"./cv\": 877,\n\t\"./cv.js\": 877,\n\t\"./cy\": 7373,\n\t\"./cy.js\": 7373,\n\t\"./da\": 4780,\n\t\"./da.js\": 4780,\n\t\"./de\": 9740,\n\t\"./de-at\": 217,\n\t\"./de-at.js\": 217,\n\t\"./de-ch\": 894,\n\t\"./de-ch.js\": 894,\n\t\"./de.js\": 9740,\n\t\"./dv\": 5300,\n\t\"./dv.js\": 5300,\n\t\"./el\": 837,\n\t\"./el.js\": 837,\n\t\"./en-au\": 8348,\n\t\"./en-au.js\": 8348,\n\t\"./en-ca\": 7925,\n\t\"./en-ca.js\": 7925,\n\t\"./en-gb\": 2243,\n\t\"./en-gb.js\": 2243,\n\t\"./en-ie\": 6436,\n\t\"./en-ie.js\": 6436,\n\t\"./en-il\": 7207,\n\t\"./en-il.js\": 7207,\n\t\"./en-in\": 4175,\n\t\"./en-in.js\": 4175,\n\t\"./en-nz\": 6319,\n\t\"./en-nz.js\": 6319,\n\t\"./en-sg\": 1662,\n\t\"./en-sg.js\": 1662,\n\t\"./eo\": 2915,\n\t\"./eo.js\": 2915,\n\t\"./es\": 5655,\n\t\"./es-do\": 5251,\n\t\"./es-do.js\": 5251,\n\t\"./es-mx\": 6112,\n\t\"./es-mx.js\": 6112,\n\t\"./es-us\": 1146,\n\t\"./es-us.js\": 1146,\n\t\"./es.js\": 5655,\n\t\"./et\": 5603,\n\t\"./et.js\": 5603,\n\t\"./eu\": 7763,\n\t\"./eu.js\": 7763,\n\t\"./fa\": 6959,\n\t\"./fa.js\": 6959,\n\t\"./fi\": 1897,\n\t\"./fi.js\": 1897,\n\t\"./fil\": 2549,\n\t\"./fil.js\": 2549,\n\t\"./fo\": 4694,\n\t\"./fo.js\": 4694,\n\t\"./fr\": 4470,\n\t\"./fr-ca\": 3049,\n\t\"./fr-ca.js\": 3049,\n\t\"./fr-ch\": 2330,\n\t\"./fr-ch.js\": 2330,\n\t\"./fr.js\": 4470,\n\t\"./fy\": 5044,\n\t\"./fy.js\": 5044,\n\t\"./ga\": 9295,\n\t\"./ga.js\": 9295,\n\t\"./gd\": 2101,\n\t\"./gd.js\": 2101,\n\t\"./gl\": 8794,\n\t\"./gl.js\": 8794,\n\t\"./gom-deva\": 7884,\n\t\"./gom-deva.js\": 7884,\n\t\"./gom-latn\": 3168,\n\t\"./gom-latn.js\": 3168,\n\t\"./gu\": 5349,\n\t\"./gu.js\": 5349,\n\t\"./he\": 4206,\n\t\"./he.js\": 4206,\n\t\"./hi\": 94,\n\t\"./hi.js\": 94,\n\t\"./hr\": 316,\n\t\"./hr.js\": 316,\n\t\"./hu\": 2138,\n\t\"./hu.js\": 2138,\n\t\"./hy-am\": 1423,\n\t\"./hy-am.js\": 1423,\n\t\"./id\": 9218,\n\t\"./id.js\": 9218,\n\t\"./is\": 135,\n\t\"./is.js\": 135,\n\t\"./it\": 626,\n\t\"./it-ch\": 150,\n\t\"./it-ch.js\": 150,\n\t\"./it.js\": 626,\n\t\"./ja\": 9183,\n\t\"./ja.js\": 9183,\n\t\"./jv\": 4286,\n\t\"./jv.js\": 4286,\n\t\"./ka\": 2105,\n\t\"./ka.js\": 2105,\n\t\"./kk\": 7772,\n\t\"./kk.js\": 7772,\n\t\"./km\": 8758,\n\t\"./km.js\": 8758,\n\t\"./kn\": 9282,\n\t\"./kn.js\": 9282,\n\t\"./ko\": 3730,\n\t\"./ko.js\": 3730,\n\t\"./ku\": 1408,\n\t\"./ku-kmr\": 563,\n\t\"./ku-kmr.js\": 563,\n\t\"./ku.js\": 1408,\n\t\"./ky\": 3291,\n\t\"./ky.js\": 3291,\n\t\"./lb\": 6841,\n\t\"./lb.js\": 6841,\n\t\"./lo\": 5466,\n\t\"./lo.js\": 5466,\n\t\"./lt\": 7010,\n\t\"./lt.js\": 7010,\n\t\"./lv\": 7595,\n\t\"./lv.js\": 7595,\n\t\"./me\": 9861,\n\t\"./me.js\": 9861,\n\t\"./mi\": 5493,\n\t\"./mi.js\": 5493,\n\t\"./mk\": 5966,\n\t\"./mk.js\": 5966,\n\t\"./ml\": 7341,\n\t\"./ml.js\": 7341,\n\t\"./mn\": 5115,\n\t\"./mn.js\": 5115,\n\t\"./mr\": 370,\n\t\"./mr.js\": 370,\n\t\"./ms\": 9847,\n\t\"./ms-my\": 1237,\n\t\"./ms-my.js\": 1237,\n\t\"./ms.js\": 9847,\n\t\"./mt\": 2126,\n\t\"./mt.js\": 2126,\n\t\"./my\": 6165,\n\t\"./my.js\": 6165,\n\t\"./nb\": 4924,\n\t\"./nb.js\": 4924,\n\t\"./ne\": 6744,\n\t\"./ne.js\": 6744,\n\t\"./nl\": 3901,\n\t\"./nl-be\": 9814,\n\t\"./nl-be.js\": 9814,\n\t\"./nl.js\": 3901,\n\t\"./nn\": 3877,\n\t\"./nn.js\": 3877,\n\t\"./oc-lnc\": 2135,\n\t\"./oc-lnc.js\": 2135,\n\t\"./pa-in\": 5858,\n\t\"./pa-in.js\": 5858,\n\t\"./pl\": 4495,\n\t\"./pl.js\": 4495,\n\t\"./pt\": 9520,\n\t\"./pt-br\": 7971,\n\t\"./pt-br.js\": 7971,\n\t\"./pt.js\": 9520,\n\t\"./ro\": 6459,\n\t\"./ro.js\": 6459,\n\t\"./ru\": 1793,\n\t\"./ru.js\": 1793,\n\t\"./sd\": 950,\n\t\"./sd.js\": 950,\n\t\"./se\": 490,\n\t\"./se.js\": 490,\n\t\"./si\": 124,\n\t\"./si.js\": 124,\n\t\"./sk\": 4249,\n\t\"./sk.js\": 4249,\n\t\"./sl\": 4985,\n\t\"./sl.js\": 4985,\n\t\"./sq\": 1104,\n\t\"./sq.js\": 1104,\n\t\"./sr\": 9131,\n\t\"./sr-cyrl\": 9915,\n\t\"./sr-cyrl.js\": 9915,\n\t\"./sr.js\": 9131,\n\t\"./ss\": 5893,\n\t\"./ss.js\": 5893,\n\t\"./sv\": 8760,\n\t\"./sv.js\": 8760,\n\t\"./sw\": 1172,\n\t\"./sw.js\": 1172,\n\t\"./ta\": 7333,\n\t\"./ta.js\": 7333,\n\t\"./te\": 3110,\n\t\"./te.js\": 3110,\n\t\"./tet\": 2095,\n\t\"./tet.js\": 2095,\n\t\"./tg\": 7321,\n\t\"./tg.js\": 7321,\n\t\"./th\": 9041,\n\t\"./th.js\": 9041,\n\t\"./tk\": 9005,\n\t\"./tk.js\": 9005,\n\t\"./tl-ph\": 5768,\n\t\"./tl-ph.js\": 5768,\n\t\"./tlh\": 9444,\n\t\"./tlh.js\": 9444,\n\t\"./tr\": 2397,\n\t\"./tr.js\": 2397,\n\t\"./tzl\": 8254,\n\t\"./tzl.js\": 8254,\n\t\"./tzm\": 1106,\n\t\"./tzm-latn\": 699,\n\t\"./tzm-latn.js\": 699,\n\t\"./tzm.js\": 1106,\n\t\"./ug-cn\": 9288,\n\t\"./ug-cn.js\": 9288,\n\t\"./uk\": 7691,\n\t\"./uk.js\": 7691,\n\t\"./ur\": 3795,\n\t\"./ur.js\": 3795,\n\t\"./uz\": 6791,\n\t\"./uz-latn\": 588,\n\t\"./uz-latn.js\": 588,\n\t\"./uz.js\": 6791,\n\t\"./vi\": 5666,\n\t\"./vi.js\": 5666,\n\t\"./x-pseudo\": 4378,\n\t\"./x-pseudo.js\": 4378,\n\t\"./yo\": 5805,\n\t\"./yo.js\": 5805,\n\t\"./zh-cn\": 3839,\n\t\"./zh-cn.js\": 3839,\n\t\"./zh-hk\": 5726,\n\t\"./zh-hk.js\": 5726,\n\t\"./zh-mo\": 9807,\n\t\"./zh-mo.js\": 9807,\n\t\"./zh-tw\": 4152,\n\t\"./zh-tw.js\": 4152\n};\n\n\nfunction webpackContext(req) {\n\tvar id = webpackContextResolve(req);\n\treturn __webpack_require__(id);\n}\nfunction webpackContextResolve(req) {\n\tif(!__webpack_require__.o(map, req)) {\n\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\te.code = 'MODULE_NOT_FOUND';\n\t\tthrow e;\n\t}\n\treturn map[req];\n}\nwebpackContext.keys = function webpackContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackContext.resolve = webpackContextResolve;\nmodule.exports = webpackContext;\nwebpackContext.id = 6700;"],"names":["map","webpackContext","req","id","webpackContextResolve","__webpack_require__","o","e","Error","code","keys","Object","resolve","module","exports","getAllPublishableConceptRefs","entities","allConceptRefs","_","filter","entity","ent_type","forEach","organization","concat","publishable_concept_refs","value","index","self","indexOf","I18n","translations","extend","JSON","parse","formatDate","date","moment","format","parseDate","dateStr","isKeyDownEventValidInput","event","includes","key","ctrlKey","altKey","metaKey","isNumber","isFinite","isHyphen","DATEPICKER_MAX_DATE","Date","LegacyModalService","static","init","_provision","openModal","element","props","reactRoot","render","React","createElement","closeModal","unmount","createRoot","document","getElementById","window","MutedCompaniesHeader","_jsxs","className","children","_jsx","SuggestionsHolder","classNames","join","suggestionsEntries","AutocompleteSuggestions","filteredSuggestions","length","suggestion","cleaned_suggestion","replace","onClick","assembleSuggestionsEntries","placeHolder","userInput","Icon","_ref","filled","name","role","style","push","propTypes","PropTypes","isRequired","HelperText","helperTextStylesOverride","showHelperTextIcon","variant","iconStyles","visibility","Input","_ref2","autoComplete","disabled","focused","forceShowHelperText","height","helperText","helperTextVariant","label","labelPosition","leadingIcon","maxLength","maxWidth","minWidth","multiLine","onValueChange","onSubmit","placeholder","readOnly","showClearIcon","showLabel","size","trailingIcon","trailingIconOnClick","type","width","inputRef","useRef","jsxInput","isString","regularInput","multiLineInput","parentClass","innerContainerClasses","inputClasses","showLabelInside","commonInputProps","onChange","target","onKeyUp","showOuterLabelTop","outerLabelClassNames","outerLabel","ref","preventDefault","stopPropagation","current","focus","SearchInput","createReactClass","displayName","timeout","getInitialState","doSearch","this","setState","clearTimeout","setTimeout","searchFunction","classes","state","MutedCompaniesSearch","filteredIds","searchCompanies","searchString","query","trim","excluded_orgs","MutedCompaniesStore","data","currentMuted","company","$","getJSON","text","response","ids","names","results","result","official_name","bind","companyName","currentTarget","innerText","companyIdIndex","companyId","MutedCompaniesActions","selectionAdded","prevState","without","suggestions","ClearMutedCompaniesButton","mixins","Reflux","connect","store","clearSelections","MutedCompanyHolder","labelClasses","link","div_id","MultiSelectCompanyHolder","companyHolder","SuggestedMutedCompanies","selectCompany","availableCompanies","currentSuggested","SelectedMutedCompanies","removeCompany","console","log","selectionRemoved","mutedCompanies","SaveSettingsButton","txt","changing","btn","changed","SaveMutedCompaniesButton","settingsSubmitted","settingsChanged","MutedCompaniesSelectionPanels","saveChanges","MutedCompaniesSelector","isTextElementWrapped","lineHeight","getComputedStyle","lineHeightParsed","parseFloat","offsetHeight","elementHasScroll","clientHeight","scrollHeight","overflowY","POSITION_DIMENSION","top","bottom","left","right","OPPOSITE_POSITION","FLIP_POSITION","EDGE_GAP","positionPopover","position","bounds","trigger","align","gap","flipAxisIfOverflows","openPopover","willOverflow","triggerRect","getBoundingClientRect","elementRect","finalPosition","dimension","availableSpace","gapInt","startsWith","parseInt","body","getPropertyValue","substring","gapStr","Number","isInteger","styles","triggerTop","maxHeight","rect","alignHorizontally","_ref3","triggerBottom","calculatedHeight","_ref4","alignVertically","_ref5","elementHeight","topValue","elementWidth","leftValue","Popover","dropdownClassName","nested","onClickOutside","onMouseLeave","onTriggerClick","open","popoverClassName","popoverPosition","usePortal","updatedPosition","setUpdatedPosition","useState","clickOutsideRef","useClickAway","triggerRef","contains","windowDimensions","useWindowSize","x","y","scrollTo","useWindowScroll","bodyRef","triggerWidth","bodyStyles","zIndex","overflowX","updatePopoverPosition","handleTriggerMove","handleIntersect","entries","isIntersecting","useEffect","nearestScrollBody","parentElement","findScrollableElement","root","IntersectionObserver","threshold","observe","callback","addEventListener","removeEventListener","listenToScrollOnElement","popoverClassNames","dropdownClassNames","popoverContent","opacity","pointerEvents","popoverContentRender","createPortal","DropdownContext","createContext","onItemSelected","setTrigger","Dropdown","closeOnTriggerClick","onDropdownClose","onDropdownOpen","overflow","controlledOpen","ENABLE_LEGACY_DROPDOWN_SUPPORT","LEGACY_DROPDOWN_ID","parentDropdownContext","useContext","myTrigger","setOpen","openDropdown","undefined","closeDropdown","arguments","useImperativeHandle","close","dropdownListStyles","onMouseOver","Provider","item","addItemToLegacyDropdown","display","forwardRef","DropdownTrigger","legacyDropdown","changeEvent","Event","dropdownOption","selected","existingOptions","getElementsByTagName","alreadyExists","find","option","appendChild","dispatchEvent","DropdownItemGroup","group","showDivider","DropdownItemGroupHeading","DropdownList","items","groupedItems","DropdownItemGroupDivider","DropdownItem","allowSelect","href","hrefNewWindow","hrefOnClick","method","nestedItems","noneSelection","rel","showDot","hasChildren","userCanSelectItem","component","DropdownItemRow","attributes","listContext","DropdownListContext","labelRef","finalLeadingIcon","finalTrailingIcon","alignSelfStart","rowClassNames","DropdownItemRowNoneSelection","overflowWrap","_Fragment","color","hrefOnclick","hasNoneSelection","parentContext","NavItem","icon","title","selectedItem","NavItemPropTypes","SettingsDropdown","navTrigger","useTrigger","updatedTrigger","Button","block","flexGrow","ButtonPropTypes","ApolloApiPanel","apiKey","setApiKey","saving","setSaving","errorMsg","setErrorMsg","errorLevel","setErrorLevel","handleSave","async","confirmed","fetch","ok","json","configured","fetchAPIKey","confirm","url","headers","querySelector","content","stringify","api_key","success","error","errorStyle","fontWeight","paddingBottom","inverse","onDismiss","BANNER_VARIANTS","freeze","BANNER_ALERT_VARIANTS","Banner","commonProps","BannerContext","BannerHeading","trailingAction","headingRef","context","alignSelf","CloseIcon","Toast","headingClassName","headingClassNames","TOAST_FLASH_TYPE_MAP","alert","notice","FlashToast","flashMessages","toastMessages","messageType","html","containerRef","useLayoutEffect","fragment","createRange","createContextualFragment","querySelectorAll","script","scriptEl","Array","from","attr","setAttribute","textContent","parentNode","replaceChild","innerHTML","onClose","ModalBody","ModalFooter","alignItems","ButtonGroup","ButtonGroupPropTypes","ChipAction","dataTestId","Boolean","Chip","trailingIconClassName","hasTrailingIcon","isWrapped","setIsWrapped","mergedStyle","warn","ChipComponent","EntityChip","BannerBody","ListDeleteModalPreviewBody","selectedLists","DeleteModalContext","isSingleList","listRows","values","list","type_ref","ScrollableList","marginTop","Heading","containerClassName","extraGapTop","tooltip","containerClassNames","textClassNames","ListDeleteModalDeletingBody","ListDeleteModalSuccessBody","ListDeleteModalBody","deleteState","DeleteListButtons","cancelModal","setDeleteState","onDeleteLists","isFromIndividualListPage","numLists","CloseButton","resetCategory","lists","ListDeleteModalActionsBar","Map","ListDeleteModal","Modal","distanceFromTopViewport","ModalHeader","allowClose","ModalContext","ModalBackdrop","ModalInner","persistent","closeFunction","originalOverflow","verticallyCentered","GenericLegacyModal","legacyModalContent","ComponentFromHTML","GenericModal","modalContentStyle","borderRadius","backgroundColor","flexDirection","justifyContent","GenericModalActions","modalActionsStyle","padding","GenericModalBody","flex","border","borderLeft","borderRight","GenericModalHeader","fontSize","GenericErrorModal","modalBody","modalHeader","reloadPage","modalFooter","reloadThePage","location","reload","NavBarItems","navBarItems","settingsItems","settingsTrigger","navItems","setting","GenericAutocomplete","masterList","slice","componentDidUpdate","prevProps","getFilteredSuggestions","suggestionsAvailable","toLowerCase","toggleAllCharacteristics","prop","all_characteristics_opened","AffiliatedWithCards","returnCards","AffiliatedWithCard","CumulativeFundingByYear","amount","yearData","formattedAmount","makeMillions","year","shape","string","number","CumulativeFundingCalendarYears","cumulative_by_year","yearsAvailable","array","FundingQuarter","eventCircle","eventLink","fundingData","count","encodeURI","orgName","decodeHTMLContent","splice","quarter","quarterFull","FundingEventsCard","quarters","fundingEvents","cumulativeCalendarYears","cumulativeDescription","fundingEventsBlurb","cumulativeFunding","htmlFor","brandName","barClasses","pixels","phaseCountClass","activeLink","phase_data","max_phase","org_name","barStyle","class","ActiveStudiesCard","phaseBars","studies","active","phases","PhaseBar","comparable","encodeURIComponent","jumpHere","SFPanelActions","jump","account_id","owner","opps","last_activity","account_name","add","loaded","listenTo","SFAccountActionsStore","accounts","update_accounts","sf_account_list","account_data","SfIndexRow","leadsLink","lead_count","fold_unfold","account_team","team_list","team_member","zw_user","t","owner_is_zw","trackEngagementEvent","account","Name","SfAccountTeam","indexReturn","accounts_count","SfIndexReturn","SfAccountRow","SfAccountName","SFTabActionsStore","tab_selected","change_selected","tabSelected","switch_tab","ev","SFTabActions","selectedTab","tab_content","num","liClasses","expanded","toggle_expand","commentDisplay","comment","trackRelation","reason","keyDate","due_date","sort_date","actDate","relatedTo","related_to","trackActivity","subject","fromNow","SfUserComment","description","folded_unfolded","activities","quiet_react","toggleId","toggleDiv","activityDate","initials","printName","hexColor","match","shift","pop","toUpperCase","convert_to_rgb","hash_this","ownerId","checked","SfUserActivity","show_more","trackEvent","isUndefined","activity","moreButton","displayActivities","remainder","next","user_data","SfUserToggle","trackOpportunity","SFAccountActions","status","displayOpportunities","opportunities","opportunity","SfOpportunity","sf_id","trackContact","last_act","temp_date","created_date","email","phone","SfContactURL","contacts","SfContactLastActivity","SfContactEmail","SfContactPhone","displayContacts","pairs","eachSlice","pair","contactRows","SfContact","div_classes","tasks","SfActivities","team","all","SfOpportunities","SfContacts","activity_history","Id","sf_content","open_activities","toggle_id","company_id","SfAccountHeader","SfTabNav","SfTabContent","SFAccountLoaderActionsStore","componentDidMount","get","refreshAccount","i","updateAccounts","SfAccount","sf_user_id","src","alt","marginRight","addLead","refs","new_sf_lead_alert","show","link_to_create_sf_lead","hide","triggerSFEngagementActionForClassicMode","action","addedFrom","company_name","addLeadLightning","initiateAddToSalesforceModal","addLeadLink","leadMessage","leads","use_lightning","cursor","paddingTop","marginBottom","account_count","historical_activities","track_lead","Title","Email","sf_url","Description","createdDate","CreatedDate","ownerIsZw","ownerName","FirstName","LastName","Company","SFLeadPanelActionsStore","page","refreshLeads","newLeads","leadsInDetails","lead_data","SfLead","UNSAFE_componentWillMount","initialState","initialDisplayedAccounts","displayedAccounts","previousPage","nextPage","addAccount","window_opened","new_sf_alert_account","link_to_create_sf_account","growl","message","addAccountLightning","multi","sfIndex","accountList","newAccount","accountsCount","maxAccounts","SfIndexTable","SfAccountLoader","sfLeadsNotice","SfLeadsNotice","sfLeads","SfLeadsPanel","paginatorButtons","SfPanelWrapper","SFPanelWrapperActionsStore","updatePanel","objectType","newSet","SFLeadPanelActions","SfPanel","PaginationLinks","change","changePage","page_number","displayNumber","PaginationHolder","pages","startPage","endPage","numberOfPages","paginationClasses","displaySize","currentPage","maxNameLength","errorCallback","therapiesReported","Set","therapies","listOfTherapies","therapy","therapyName","isTherapyReported","has","last_mentioned","in_human_clinical_trials","margin","totalNumberOfTherapies","RelatedTherapiesTable","RelatedTherapiesContainer","RelatedTherapiesStore","RelatedTherapiesActions","getTherapiesForOrg","org_id","paginated_therapies","handleTherapyMismatch","reportMismatchTherapy","newPage","relatedTherapies","Math","ceil","total_num_therapies","therapies_per_page","therapies_loaded","NoRelatedTherapies","RelatedTherapiesFromList","therapies_reported","marginLeft","SalesforceFormErrorMessages","errors","errorText","errorCode","error_messages","error_codes","errorMessages","FormatMessage","SalesforceModalFormIssue","SalesforceModalLoading","displayMessage","SF_LOADING_MIN","fieldInError","fieldName","isMissing","error_fields","field","commonFieldElements","required","CRMDropdown","useValue","setValue","inputClassName","CRMInput","SfFormFields","fields","booleanFormat","sfFields","f","defaultOption","defaultValue","opt_custom","SfTwoColumnFormFields","Component","oddFieldsLength","flexWrap","renderField","isLastOdd","divStyle","boxSizing","SfFormFieldsCore","SfFormFieldsOptional","setExpanded","setRender","hasInteracted","setHasInteracted","toggleExpand","scrollIntoView","behavior","transition","coreFields","created","errorBuildingForm","optionalFields","retrieveSfAccountFields","loadingTimeout","ajax","validFields","crmHelpers","pruneInvalidFields","loadingInterval","setInterval","clearInterval","statusCode","createAccount","serialize","SFPanelWrapperActions","contactSFLink","retrieveSfLeadFields","zi_contact_id","createLead","serializeArray","created_data","updateLeads","viewLead","retrieveSfContactFields","sf_org_id","createContact","accountField","SFAccountLoaderActions","viewContact","parent_method","sf_org_name","salesforce_accounts","getSalesforceAccounts","choseLead","sf_accounts","SfContactButton","SfFormModal","form","sf_account_id","updateFormState","sfOrgId","track_engagement","SfAccountForm","SfLeadForm","SfContactForm","SfFormSelector","editEventUrl","spanStyle","sponsor","spanClassName","org","is_drug_sponsor","publishableConceptRefs","_id","iconClass","excluded","toggleHandler","mention_count","orgs","excludedOrgs","includedOrgList","sortBy","ArticleEventOrg","toggleOrgHandler","article_id","post","done","fadeOut","fail","xhr","ajaxOptions","thrownError","modal","publishing","publishEvent","orgIds","org_ids","publishHiddenEvent","eventButton","IgnoreEventButton","RestoreEventButton","PublishEventButton","ArticleEventPanel","article","eventEntities","ent","reject","retainedOrgs","initState","predicted_org_ids","toggleOrgOnList","orgId","toggleOrg","updatedOrgs","updateExcludedOrgs","eventDetails","ArticleEventDetails","IncludedOrgList","ArticleEventActionPanel","ExcludedOrgList","dispatched","UNSAFE_componentWillReceiveProps","nextProps","updateCount","initaiateRepublishing","EventTableAction","initiateRepublishing","republishText","eventType","viz","h4Style","category","dateString","dateMilli","utcOffset","full_cat_name","industries","edit_link","EventTableStore","eventData","refsInEvent","allIndustry","industry_type","orgEntities","OrgEntity","rec_id","entityProperties","prop_string","nonOrgEntities","ents","NonOrgEntity","clinicalStageLabels","independent_properties","clin_stage","eventProperties","otherEntities","headerStyle","borderStyle","cellStyle","EventOrgEntities","EventNonOrgEntities","EventProperties","AdminModal","ReactDOM","findDOMNode","on","handleHideModal","AdminModalHeader","AdminModalBody","eventDateString","validDate","handleDateChange","momentValue","isAfter","isValid","submitHandler","EventModifyModalAction","updateDate","closeForm","setDateToNow","now","buttonStyle","submitIcon","showInputDateField","loading","showDateInput","showDate","EditEventDateForm","removeEntity","editOrgEntities","EditOrgEntity","editNonOrgEntities","EditNonOrgEntity","stageName","stage","removeClinStage","editEventProperties","RemoveClinicalStage","handleChange","addClinStage","properties","currentStages","unselectedStages","stageOptions","closeHandler","closed","toggleClose","AddClinicalStagePropertyPicker","eventEditModalStyle","table","header","cell","industryMismatch","EditEventOrgEntities","EditEventNonOrgEntities","EditEventProperties","AddClinicalTrialPropertyPanel","industry","addEntity","addEntityLinks","AddEntityLink","AddEntityLinks","other_ents","showLinks","toggleDisplay","toggleText","AddEntityLinksPanel","sourceEntities","currentEntityIds","unusedEntityIds","AddEntitiesFromDoc","search_string","EntSearchAction","searchFor","choseEntity","autocompleteResults","AutocompleteResult","EntSearchStore","AutocompleteSearchPanel","AutocompleteResults","removeIndustry","RemoveIndustryLink","addIndustry","addIndustryLinks","ind","AddIndustryLink","EventModifyModalStore","checkForMismatch","adminIndustry","admin_industry","tdStyle","tdClassname","RemoveIndustryLinks","possibleIndustries","AddIndustryLinks","industry_concept_refs","EditIndustriesFromDoc","AdminModalFooter","saveEvent","saveEventChanges","saveEventVisible","saveEventNow","saveButton","cancelButton","makeVisible","publishAsNow","hidden","awaiting_first_publication","hasPublishableEntities","is_publishable","allPublishableConceptRefs","hasPublishableIndustries","every","jQuery","eventCopy","initialLoad","inline","componentWillUnmount","event_modify_modal","eventHighlight","evContent","evSourceContent","source_content","splitContent","split","preEventText","boldEvent","EventDateHandler","EditEventEntities","AddEntityPanel","FindNewEntityPanel","EditIndustryPanel","EditEventFooter","view","showModal","handleShowModal","clone","eventModifyModal","EventModifyModal","EventTitle","EventDate","EventContent","EventEntities","ModifyEvent","eventStatus","republish_flag","hideEvent","showEvent","EventActionForVisible","eventIndustryConceptRef","EventActionForHiddenAndPublishable","created_by","deleteEvent","editUrl","deleteLink","eventRowId","EventDisplayCell","EventStatusCell","EventActionCell","EventCreatedByCell","EventEditCell","eventRows","events","EventRow","EventListPanel","init_repub_count","EventRepublishButton","repub_count","EventListTitle","EventTable","AccordionContent","lazy","AccordionContext","contentRef","openedOnceRef","updateContentHeight","onTransitionEnd","handleTransitionEnd","AccordionTrigger","toggle","Accordion","initialOpen","isBoolean","setControlledOpen","handleToggle","ALLOWED_SEARCH_FILTER_CATEGORY_TYPES","COMPANY_ACTIVITY_CATEGORY_TO_LABEL","clin_movements","opinion","results_n_data","cf_finding","partnering","the_rest","trackSearchFilterCategoryState","isOpen","categoryType","trackingEventText","trackingText","track","FilterItem","leadingContent","leadingContentClassName","onLeadingContentClick","onWholeItemClick","trailingContent","leadingContentRef","leadingContentClassNames","FacetSearchCompanyActivity","parent","FacetSearchStore","hasNestedItems","anyChildrenSelected","child","Zymewire","original_feed_query","filterItem","FacetSearchCompanyActivityActions","activitySelected","FacetSearchCompanyWorkingOn","affiliation","handleSelect","selectedList","orgListId","listType","orgCount","FacetSearchListActions","listSelected","skipTrigger","FacetSearchAffiliatedWithActions","affiliationSelected","doEventSearch","Divider","FacetSections","connectFilter","facet_filters","prep_facet_filters","affiliations","activitiesInitialState","affiliationsInitialState","facet_sections","prep_facet_sections","facet_data","FacetSection","user","feature_tags","activity_type","affiliated_with","FacetContent","facet_elements","showMoreWrapper","facetType","displayCount","over_30","link_id","bucketLength","is_mapping_page","fadeIn","getMoreButton","furtherText","search_data","isLoading","addMoreFacets","empty_search","createListFromQuery","flattenLocationList","locationList","flattenedList","isArray","constructSelectableLocationList","fullLocationList","selectedLocations","locationHelpers","findLocationInList","LocationSelectorEntry","LocationSelectorSection","facets","FacetSearchLocationSlice","FacetSearchResultsSlice","handleEditTerritory","locationRedirect","continentsWithLinkId","region_list","sort","a","b","continent","myTerritorySelected","selectedLocationCodes","facet_search_filters","sponsor_company_location","FacetSearchLocationActions","myTerritoryClick","openLocationSelectorModal","LocationSelectorPanel","locationWillMount","searchLocations","selectedLocation","selectLocation","currentSelectableLocations","getCurrentSelectableLocations","loc","copyFullLocation","locationNames","LocationSelectHeader","LocationSelectingPanels","LocationSelector","ClearLocationsButton","SelectedLocations","ModifySearchButton","clearLocations","cancelChanges","close_modal_control","unmountComponentAtNode","button","locations","LocationHolder","parentOpen","indent","expandSubs","addClass","toggleClass","select_location","toggle_arrow","label_classes","toggle_class","expand_subs","a_id","SelectedLocationHolder","random","deselectLocation","NEGLECTED_KEY","MUTED_KEY","SalesforceFilterItem","NeglectedFilterItem","MutedCompaniesFilterItem","CompanyRelationshipSelector","relationships","FacetSearchCompanyRelationshipSlice","handleCheckboxChange","checkboxKey","currentlySelected","FacetSearchCompanyRelationshipActions","removeCompanyRelationship","addCompanyRelationship","handleMutedCompaniesChange","external_track_action","handleAccordionToggle","relationshipsSelected","company_relationship","authorizedSalesForce","salesforceCurrentlyProcessing","EntitySearchFilterItem","eventCount","itemName","commifyNumber","EntitySearchFilter","config","maxDisplayItems","showCrmInfo","showTopDivider","displayAll","openCloseCategory","facet_type","selectFilterItem","criteriaType","criteriaValue","shouldSearch","currentCriteriaValues","filterCriteria","isExistingFilter","include","FacetSearchStoreActions","addToFilterCriteria","updateFilterCriteria","addSearchCriteriaFilter","showSelector","buckets","selectedItems","selectedItemsWithHTMLVersions","escapeHtml","unselectedItems","exceedsDisplayLimit","exceedsMaxResults","itemsDisplay","sf_enabled","in_crm","doc_count","isSalesforceEnabled","isInSalesforce","renderFooter","defaultProps","ConditionsSearchFilter","conditions","facet_panel_title_texts","OrganizationsSearchFilter","organizations","TherapiesSearchFilter","UserListFilterItem","selectedListId","isSelected","UserListsSelectorInner","showAll","setShowAll","displayedLists","user_lists","UserListSelector","userLists","FacetSearchUserListSlice","setListOfUsersLists","userListId","ClinicalTrialStagesSelector","clinicalTrialStages","handleFilterItemToggle","clinicalTrialStagesSelected","selectedIndex","clinicalTrialStagesUpdate","triggerStateUpdate","filterItems","filterLabel","trial_phases","ClinicalTrialStatusSelector","clin_status","clinicalTrialStatuses","updateClinicalTrialStatusSelected","clinicalTrialStatusesSelected","clinicalTrialStatusesUpdate","statuses","trial_status","parseUrlSegments","createPathMatcher","expectedSegments","segments","expected","getPageFromUrl","patterns","defaultPage","__TEST_PAGE__","currentUrl","pathname","matchedPage","matcher","pattern","PAGE_PATTERNS","clearAll","isInOriginalQuery","queryKey","originalQuery","entity_list_refs","orgListRefs","alias_search_refs","some","facetValues","isEqual","facetKey","geo_box","loc_codes","org_list_id","queryTerm","FILTER_COUNTERS","isEmpty","aliasSearch","alias","aliasSearchRefs","stages","criteria","isCompanyEventsPage","criteriaWithoutId","omit","totalCount","filterValues","max","geoCoordinates","coords","bottom_right_lat","searchTerm","term","timeFrame","appliedFilters","countAppliedFilters","filters","reduce","total","counter","handleClearAll","currentPath","matchedPattern","p","filterCount","FacetSearchCriteriaAliasSearch","locked","aliasSearchContent","aliasSearchRef","displayValue","AliasSearchAppliedFilterEntry","aliasSearchRefsKey","removeAliasSearch","FacetSearchAliasSearchActions","removeAliasSearchRefs","FacetSearchCriteriaCategory","isLocked","currentCat","original","removeCategory","activityRemoved","category_hash","company_activity","FacetSearchCriteriaClinicalStatus","originalStatus","formatSelectedStatuses","originalStatuses","unique","last","ClinicalStatusAppliedFilterEntry","trialStatusDisplayName","handleClick","FacetSearchCriteriaClinicalTrialStages","shouldComponentUpdate","nextState","lastIndex","ClinicalTrialAppliedFilterEntry","FacetSearchCriteriaEntities","originalFacets","typeToIcon","components","terms","facet","flatMap","EntityCriteriaEntry","criteriaDetails","criteriaName","entityNameMap","medical_technologies","pharma_ingredients","trials","removeCriteria","removeSearchCriteriaFilter","encodedValue","filteredCriteriaValues","isNotMatch","isNotEncodedMatch","removeFilterCriteria","FacetSearchCriteriaEntityValues","orgListEntries","refKey","EntityValueEntry","orgListRefsKey","removeOrgList","removeOrgListRef","FacetSearchCriteriaGeoCoordinates","isMappingPage","hasOriginalMappingQuery","GeoCoordinatesEntry","removeGeoCoordinates","FacetSearchGeoCoordinatesSlice","myMap","mapCenter","google","maps","LatLng","setCenter","setZoom","bounds_to_geo_box","getBounds","FacetSearchGeoCoordinatesActions","geoCoordinatesUpdate","FacetSearchCriteriaList","originalListId","user_list_id","isPublicList","isListIdMatching","ListAppliedFilterEntry","canSeeCmoLists","affiliationName","char","entityType","String","entity_type","removeListOrAffiliation","affiliationRemoved","unselectList","FacetSearchCriteriaLocations","locationsSelected","isLast","each","locationSelected","locationsList","LocationAppliedFilterEntry","removeLocation","FacetSearchCriteriaMutedCompany","lastRelationshipSelected","relationshipProps","relationship","relationship_properties","mutedCompanyList","MutedCompaniesAppliedFilterEntry","listName","listValue","removeList","FacetSearchCriteriaQueryTerm","feedPageQueryTerm","originalFeedQuery","unescape","editable","QueryTermEntry","matching_term","startingIndex","decodeURI","clearQuery","val","typeahead","setQueryTerm","FacetSearchCriteriaRelationship","lastRelIndex","originalRels","conjunction","RelationshipEntry","componentFor","removeRelationship","FacetSearchCriteriaTimeFrame","resetTimeSelect","reset_time_select","earliest","latest","getActiveTimeFrame","timeFrameDescription","in","options","fromMoment","toMoment","between","FacetSearchCriteriaContainer","criteriaPanelRef","debounce","heading","panel","headingRect","panelRect","classList","remove","AppliedFiltersClearAll","FacetSearchCriteriaHeading","total_count_formatted","total_count","TimeSelectDropdownInner","dropdownRef","onCustomTimeSelect","selectedValue","selectedLabel","fullItems","isTimeCustom","FacetSearchTimeFrameActions","timeFrameUpdate","timeSelectValue","handleDropdownClose","TimeSelectDropdown","TWENTY_YEARS_FROM_NOW","getFullYear","DEFAULT_MIN_DATE","DEFAULT_MAX_DATE","CalendarContext","activeOverlay","minDate","maxDate","dismissOverlay","setActiveOverlay","toggleMonthOverlay","toggleYearOverlay","CalendarProvider","MONTH_NAMES","month","INNER_YEAR_WIDTH","CalendarHeaderMenu","disabledPrev","disabledNext","onStep","onOpen","innerWidth","prevClass","nextClass","testId","onPrev","textAlign","onNext","CalendarHeader","calendars","propGetters","addOffset","subtractOffset","useDatePickerContext","currentYear","yearInt","currentMonth","monthInt","disableNextYear","disablePrevYear","disableNextMonth","disablePrevMonth","stepOffset","direction","offset","CalendarDate","onDateSelect","rehookifyDateDTO","firstDayOfCurrentMonth","days","day","inCurrentMonth","$date","dateObject","isDisabled","isToday","thisDay","getDate","getMonth","toggleDateSelection","months","WEEK_DAY_LABELS","CalendarWeekDayLabels","day_label","CalendarBody","rehookifyContext","calendarDates","chunk","dateProps","currentDate","currentTime","getTime","minTime","maxTime","Infinity","isCurrentDateInRange","week","MONTHS_IN_YEAR","QuickActionMonthSelector","monthChips","toLocaleLowerCase","currentMonthIndex","desiredMonthIndex","abs","handleMonthClick","yearOutsideRange","QuickActionYearSelector","minYear","maxYear","handleYearClick","years","yearChips","toString","QuickActionContainer","OverlayComponent","targetChip","scrollContainer","closest","distanceToScroll","offsetTop","scrollTop","Calendar","initialDate","onDateSelected","selectedDates","setSelectedDates","offsetDate","setOffsetDate","calendarRef","DatePickerProvider","calendar","mode","dates","onDatesChange","validDates","onOffsetChange","dateDTO","dateSelected","CalendarActions","DatePickerHeader","datesEqual","d1","d2","DatePicker","dateStart","dateEnd","onDateClick","range","selectedStartDate","setSelectedStartDate","selectedEndDate","setSelectedEndDate","rangeVariants","setRangeVariants","start","end","isBefore","limit","validateDates","endDate","rangeIndicator","startDate","startVariant","endVariant","buttonVariant","handleDateSelect","buttonText","onCancel","FacetSearchTimeSelectMultiInput","onUpdateStart","onUpdateEnd","onTrailingActionClick","dropdownOpen","updateInputWithDate","force","toDate","handleInputBlur","setStartText","setEndText","startRef","endRef","handleKeyDown","setDateRange","isValidMoment","momentDate","startText","endText","commonInputStyles","inputValid","desiredStart","desiredEnd","onBlur","onKeyDown","HIDDEN_STYLES","FacetSearchDateRangePicker","fromDate","datePickerVisible","setDropdownOpen","setStart","setEnd","isFirstRender","useIsFirstRender","save_searchbar_query","FacetSearchTimeSelector","datePickerRef","showRangePicker","timeSelectRef","nowSelected","prevSelected","closeRangePicker","openRangePicker","to","subtract","renderRangePicker","date_range","search","alias_search_hash","aliasSearchNames","aliasSearchName","stage_string","stat_string","top_left_lat","bottom_right_lon","top_left_lon","loc_string","org_list_refs","org_list_ref","no_recent_activity","and","paddingLeft","time","SearchDescriptionPanel","QueryTimeRange","QuerySearchTerm","QueryActivityCategory","QueryList","QueryFacets","QueryOrgListRefs","QueryAliasSearchRefs","QueryRelationships","QueryClinStatus","QueryClinStage","QueryGeoCoords","QueryLocations","FeedsIndexContext","getCheckboxArray","getButtonState","toggleCheckbox","toggleSelectAll","FeedsIndexProvider","feeds","setFeeds","checkboxes","setCheckboxes","prevCheckboxes","allIds","getSelectedNames","checkboxArray","checkboxId","feed","savedFeed","removeFeedsFromView","feedIds","DeleteConfirmationModal","DeleteProgressModal","feedsCount","DeleteResultModal","DeleteFeedsModal","feedsSelected","userFlowStep","setUserFlowStep","whichFeeds","feedsList","feedName","deleteSelectedFeeds","feeds_selected","FeedsIndexDeleteButton","groupCheckboxArray","modalOpen","setModalOpen","onDeleteClick","modalClose","uniq","SelectionControlGroupContext","onSelection","SelectionControlGroup","itemComponent","SelectionControlGroupPropTypes","SelectionControl","styleOverride","clicked","container","SelectionControlPropTypes","CHECKBOX_STATES","unselected","indeterminate","CHECKBOX_ICONS","CheckboxItem","selection","ENABLE_LEGACY_CHECKBOX_SUPPORT","LEGACY_CHECKBOX_ID","checkbox","CheckboxItemPropTypes","FeedsIndexSelectAll","selectAllChecked","onClickCheckbox","FeedsIndexTableHeader","onSortClick","sortData","asc","currentSetting","currentItems","initialSetting","setSelected","setItems","updatedSettings","matchingSetting","currentItem","notification_settings","setEventCheckEmailSetting","NewEventChip","FeedsIndexTableRow","setData","deleteChecked","newCompaniesOnFeed","newCompanies","newEvents","newEventCount","lastChecked","parseZone","userFeedMonitor","eventsThisMonth","displayOnUserHome","updateUserHomeSettings","EventCheckEmailSettings","eventCheckEmailSetting","FeedsIndexTable","tableData","initialFeeds","setInitialFeeds","setSortData","changeSort","ascending","normalizeValue","isNaN","sortedFeeds","valueA","valueB","feedsIndexTableBody","tableHeaders","deleteButton","selectAllCheckbox","tableId","event_date","updateComment","FlagEventDatePicker","flaggedDate","isInThePast","setDate","isDatePickerVisible","setIsDatePickerVisible","pickerPlacement","setPickerPlacement","componentRef","formattedDate","checkViewport","placement","getOptimalPlacement","viewportWidth","innerHeight","viewportHeight","spaceBottom","spaceLeft","spaceTop","spaceRight","toggleDatePicker","tomorrow","useMemo","setHours","selectedDate","reminderAlreadySet","flagged_event_reminder","reminder","cancel_reminder","class_name","originalChosenDate","submit_form","authenticity_token","FlagThisEvent","PaginatedSelectableListOfUsers","userList","toggleUser","featureFlags","feature_flags","uniqueId","mixpanelActions","columnsPerPage","usersPerColumn","legend","FlagEventComment","FlagEventReminder","flagged_event_id","users","FlagEventModal","ruby_date","flag_for","current_user","flagged_users","u","display_comment_panel","confirmation_display","update_status_panel","removeClass","LDSFlagEventModalSuccess","notifiedUsers","notified_users","flagged_for_user","selector","flagEventButton","markFlagEventButtonAsFlagged","flagged","user_id","currently_flagged","tz","utc","button_text","FlagEventModalBody","CopyToNewListSuccess","errorData","fromListName","listEntries","toListId","toListName","typeRef","goToList","assign","iconStyle","choice","update_choice","DownloadPrimoPlChoice","updateChoice","thisList","list_ref","campaign_types","contacts_and_leads","campaign_buttons","entry","DownloadPrimoCampaignButton","NameThisListCard","DownloadPrimoPlModal","initial_state","downloadStarted","downloadSuccess","mixpanel_track","ColumnControlsStore","FilteringActionsStore","button_type","list_view","change_control_state","controls_open","change_filter_state","filter_state","toggle_controls","is_editable","list_id","list_object","ColumnControlsActions","toggleColumnControls","class_names","FilterColumn","column_selected","column_filter","column_filters","select_column","FilteringActions","changeSelectedColumn","change_state","new_state","holder_class_names","column_class_names","column_state","column_filter_options","button_data","FilterOption","explanation","toggle_explanation","filter_option","explanation_class_names","description_class_names","column_filter_option","FilterBoolean","toggled","current_filter","FilterToggle","theme","toggle_filter","editFilter","toggleClassNames","change_toggle_state","clear_all_filters","animate","NProgress","configure","showSpinner","sort_field","getParameterByName","sort_by","params","cancel_filters","revertState","apply_filters","orig_filters","column","full_name","filter_columns","column_name","filter_options","lodash","cloneDeep","FilterColumns","FilterOptions","filter_buttons_content","FilterControlButton","click_control_button","list_length","filtered_length","pivotlist_count","controlsOpen","toggleControlsState","resetScroll","scroller","scrollController","sortField","findSortIndex","columnsChosen","sortIndex","scrollerPadding","scrollToHere","columnWidths","columnWidthsIndex","scrollLeft","listEntriesScrollData","listEntriesScrollHeader","listCompaniesScrollHeader","listCompaniesScrollData","headerForCompanies","scrollerWidth","scrollerStyle","elem","pivotListColumnSettingsStore","listTableContainerHeight","updateContainerHeightState","newState","resizeObserver","disconnect","rowsBeforeScrollerAppears","floor","listLength","sf_lit","in_sf","company_data","sf","current_sort","default_sort","HeaderCell","re_sort","column_index","sort_icon","PivotlistSortIcon","header_name","sub_header","widthStyle","widthAdjustment","columns","columns_chosen","headerClasses","header_type","column_settings","companies_index_offset","css_classes","data_type","filter_index","scrollId","ColumnSettingsActions","adjustColumnSettings","CompanySettingsActions","adjustCompanySettings","hacky_timer","CompanyRestore","RowRemovalActions","restoreCompany","CompanyRemove","CompanyAdded","added_date","added","CompanyRow","CompanySettingsStore","RowHoverStore","RowRemovalStore","company_settings","hover_id","hover_state","removal_state","targetId","rowIndex","ResizeObserver","leftStickyRow","update_settings","update_hover_state","update_removal_state","removal_ids","mouse_over","RowHoverActions","updateHover","mouse_out","manage_lists","display_list_modification_widget","substr","last_visited","default_link_classes","company_link_classes","view_url","company_added","sponsor_lit","a_sponsor","company_removed","company_sf","display_sf","CompanySfIcon","entityNameStyle","onMouseEnter","delayed_track","entity_id","entity_name","reset_scope","onMouseOut","reset_delayed_track","CompanyRows","delta","wheelDelta","detail","shiftKey","scrollWheelControls","companies","list_entries","istTableContainerHeightInPx","adjustedStyle","minHeight","HeaderRow","DragStore","dragged","interactableColumnsCount","fixedColumnsCount","update_dragged","updateSettingsState","available","drag_start","drag_end","DragActions","setDragged","over","add_choice","column_data","interactableColumnsAvailable","ColumnsChosenActions","addToChosen","escapedSearchString","regex","RegExp","new_name","over_class","dangerouslySetInnerHTML","__html","get_a_range","step","pagination_array","totalColumnChoicePages","left_bound","current_page","right_bound","before_last","start_page","last_page","single_spill_offset","left_spill","right_spill","extraPages","current_page_class","jump_left","jump_right","jump_to","FillerLi","ColumnsChosenStore","columnsAvailable","columns_available","filteredColumnsAvailable","columnChoicesPerPage","update_chosen","options_available","drag_enter","Sortable","create","animation","put","pull","revertClone","draggable","stickybits","stickyBitStickyOffset","setDragOver","go_to_page","min","searchColumns","preFilteredColumnsAvailable","getSearchResults","searchResults","Fuse","includeScore","ignoreLocation","number_of_column_options","over_spot","array_pad","AvailableLi","selectionsRemaining","ColumnChoicePagination","SubmitFormStore","disable_button","submit_changes","reset","change_button_state","obj","SubmitFormActions","disableButtons","fd","FormData","append","processData","contentType","complete","columns_chosen_ordered","acceptCharset","modify_columns_button","ModifyColumnsButton","clear_columns_button","ClearColumnsButton","changeButtonState","chosen","remove_choice","removeFromChosen","action_link","onStart","evt","onEnd","new_world_order","updateOrder","column_entries","fill","ChosenLi","ModifyColumnsRow","NoMoreChoices","ModifyListCheckbox","ModifyListControls","available_columns","AvailableColumns","chosen_columns","ChosenColumns","CancelColumnsButton","ColumnRow","ColumnSettingsStore","transform_trial_sponsor_hash","data_hash","max_name_length","sponsor_fragment","transform_entity_relationship_hash","entity_type_ref","return_hash_value","cellLength","data_return","data_copy","type_length","return_hash_array_value","data_hash_array","collaborator_info_array","dh","column_name_to_null","studies_twelve_m","studies_i","studies_ii","studies_iii","studies_iv","studies_active","employee_count","studies_completed","sf_leads","sf_user","sf_team","sf_open","sf_closed","funding_twelve_m","funding_twentyfour_m","orphan_drug_twelve_m","preclinical_twelve_m","registered_phasei_twelve_m","registered_phase_ii_twelve_m","registered_phase_iii_twelve_m","highest_phase_mentioned","null_effect","financial_columns","signed_financial_columns","lastActivityRegex","settings_index","column_value","hover_title","makeMillionsSigned","columnName","hash_return","hash_array_return","test","nonSponsorLabel","row_index","EmptyColumnRow","contentClassNames","ColumnRows","listControls","non_sponsor_label","modify_list_checkbox","horizontalScrolling","verticalScrolling","ListTableHorizontalScroll","ListTableVerticalScroll","ListDisplay","restore_company","refreshRestore","remove_company","list_entry","refreshRemove","processLastActivityDate","lastActivityIndex","returnData","dateValue","origin","findIndex","getElementHeight","domId","domElement","domStyle","domMargin","paginationHeight","reservedSpace","pivotListColumnSettingsActions","PivotlistFilterControls","ModifyListButton","ListTable","ListFeedPanel","linked_to_feed","list_type","creatingFeed","setCreatingFeed","onCreateFeed","getAttribute","max_feeds","user_feeds_count","MaxFeedsErrorModal","maxFeedCount","currentFeedCount","reloadAction","feedCreateModalHtml","LDSFeedSaveModal","MapViewButton","ViewFeedButton","ViewActivityButton","feed_id","is_crm_list","DeleteListsConfirmationModal","cancel_delete","lists_selected","ShareListModalBody","ctaVariant","ShareListModalSuccess","userNames","sharedWith","namesForDisplay","finalName","ShareListModalError","ShareListModal","modalStep","usersSharedWith","new_props","ListModalAction","updateListName","switchFeedCreation","createList","toggleOrgList","switchDisplayOrgList","desc","display_org_list","fixed_height","displayOrgList","justSponsor","sponsorList","total_sponsors","allOrgList","all_org_count","entityList","entityListItems","shortenText","leftList","rightList","EntityListDisplay","sliceSize","entityListPage","ListDisplayPanel","display_no","classname","end_page","display_size","PaginationPage","pageSize","displayPage","currentEntityListsPage","EntityListHolder","UserPagination","OrgListDisplayPanel","OrgListCountDescription","PagingOrgList","RADIO_STATES","RADIO_ICONS","RadioButtonItem","RadioButtonItemPropTypes","SponsorOnlyListSwitch","switchSponsorList","switchSponsorFlag","map_display","all_orgs","selectAll","selectSponsors","list_display","ListName","createNewList","ctaClass","saving_list","ListModalSuccess","listId","ListModalPanel","ListModalActionStore","listModalData","dataLoaded","base_query","succeeded","new_list_id","ListModalBody","ListModalFooter","itemList","items_list","TwoColumnList","slice_size","returnDisplay","UnorderedList","ExistingCopyList","duplicate_list","duplicateSponsors","list_count","DEFAULT_CATEGORY","DEFAULT_LIST_TYPE","LIST_CREATE_REQUEST_UNSTARTED","LIST_CREATE_REQUEST_STARTED","LIST_CREATE_REQUEST_SUCCESS","LIST_CREATE_REQUEST_FAILURE","Container","constructor","basePath","URLSearchParams","selectedCategory","selectedSortOption","URL","res","currentCount","_resetAll","fetchConfigs","sortOptions","sorting","sum","categories_count","acc","curr","categories","All","originalCategories","loadMore","searchName","selectCategory","clearSearch","UserListsStore","listenables","UserListsActions","storeClient","ListsStoreClient","onInitialState","onLoadMore","onSort","onSearchName","onSelectCategory","onClearSearch","onConfirmListsDeletion","list_ids","csrfToken","currentCategory","onSelectList","delete","set","onSelectAllLists","CategoryButtonGroup","onCategorySelected","allCategories","SearchFilters","searchValue","onSortOptionUpdate","onSearchValueUpdate","setSearch","opt","ListPageFooter","showSelectAll","isAllSelected","footerText","disableLoadMore","selectAllBtn","showHeader","enableDeleteBtn","onDeleteButtonClick","TableContext","showTag","onListSelected","selectedRows","editColumn","verticalAlign","ListRowChip","entity_count","ListTableRow","borderCollapse","ListTableHeader","ListTableBody","NoLists","NO_LISTS_SVG","isModalOpen","blankSearch","hasLists","hasFilteredLists","listSearchResults","selectList","ListSearchDescription","confirmListsDeletion","selectAllLists","ColleaguesListsActions","_originalLists","configureCategoryOptions","getColleaguesLists","formatUserLists","setcategories","formatted","firstLetter","letter","listA","listB","ColleaguesListRow","evenChild","panelStyle","ExpansionPanelBody","ColleaguesListsStore","ColleaguesListsSection","bucket","groupedByUserId","userId","letters","hasColleaguesLists","SalesforceListsActions","SalesforceListsStore","TabContext","onTabSelected","updateIndicator","TabGroup","animated","indicatorStyle","setIndicatorStyle","tabRef","offsetWidth","offsetLeft","selectTab","TabbedViewContext","registerComponent","Tab","onTabClicked","recheckedOnce","handleResize","observer","unobserve","clickTab","NavigationTabs","activeTab","onSelectTab","canUseSalesforce","tabsMapping","UserLists","ColleaguesLists","SalesforceLists","ActiveComponent","ListPage","ListPageStore","tab","searchParams","history","pushState","ListPageActions","urlParams","anchorElement","desiredScrollPosition","scrollY","UserListCreateModalStore","UserListsCreateModalActions","baseQuery","createListRequestStatus","entityCountsDetails","categoryListNames","mapDisplay","showDetails","sourceSavedFeedId","setSourceSavedFeed","feedId","current_bounding_box","saved_feed_id","qs","arrayFormat","entity_counts_details","category_list_names","resetState","createdListId","setOpenModal","onListNameChange","onCreateList","jsonString","utf8Bytes","TextEncoder","encode","binaryString","fromCharCode","encodedData","btoa","responseData","CategoryDropdown","categorySelected","defaultOptionValue","DetailsSectionContext","dropdownItems","categoryDetails","CategorySelectionSection","flexBasis","filterName","filterValue","details","allDetails","time_range","timeRange","searchWord","activityType","listedOn","clinicalStatus","clinicalStage","geoCoords","facetDetails","charAt","queryDetails","ScrollableListItem","setCurrentPage","pageCount","PreviewSection","entityCountDetail","showEntityListPreview","setShowEntityListPreview","toggleEntityListPreview","PagedEntityListPreview","SearchCriteriaPanel","ToastBanner","sanitize","str","queryStr","formatQuotations","ListCreateSetup","ListCreateInProgress","ListCreateSuccess","ListCreateModal","removeUserListCreateModal","generateList","entity_names","entity_ids","listNameChange","generateListButtonVariant","DetailsSection","ListCreateStatus","ChooseSegmentContactReportHeader","spanClasses","reportTypes","me","reportButtons","_createElement","ChooseSegmentContactButton","your_email","report_data","owner_emails","submitForm","ChooseSegmentContactReport","ChooseSegmentContactReportBody","linkId","aId","img","linkDivClassname","clickHandler","sub_title","divClass","SignInLinks","changeCurrent","dest","signInLinks","linkdata","SignInLink","LinkBridge","fullName","SelectableUser","chunkOfUsers","chunkArray","toArray","ColumnOfSelectableUsers","pageNumber","searchUsers","filteredUsers","first","rest","fieldSetClasses","searchInputId","topPagination","bottomPagination","PageOfSelectableUsers","SearchErrorModal","queryErrorMessage","clearQueryError","allowModal","SessionExpiredContent","extendSession","SessionExtendContent","signOut","ttl","SessionTimeoutModal","UserStore","session","UserActions","startSessionCheck","checkUserSession","isSessionExpiring","BootstrapRow","fluid","BootstrapSpan","divClassname","wide","TerritorySelectorHeader","TerritoryHolder","parent_open","TerritoriesAction","territorySelected","toggleArrow","divId","territoryIsContainedInList","userTerritoryList","loc_code","territoryList","findWhere","clearTerritory","territoryRemoved","SelectedTerritoryHolder","TerritorySelectorHolder","ClearTerritoriesButton","SelectedTerritories","SaveChangesButton","TerritorySelector","TerritoriesStore","referrer","TerritorySelectorPanels","TabAnchor","DashboardNavTabs","tabAnchors","StudiesCard","card_id","checkbox_id","subtitle","about","comparable_date","hrClasses","therapeutic_data","max_therapies","hrStyle","TherapeuticAreaCard","therapeuticAreas","therapeutic_areas","TherapeuticArea","BootstrapFullWidthRow","badge","total_credits_this_month","remaining_for_month","spent_this_month","title_text","allocation_per_month","help_title_text","help_url","desc_short","toggleDescription","short","description_short","trackClickOutToCompany","zinfo_url","provider_url","description_text","trimmedString","lastIndexOf","less_link","addToSF","locAddress","revealed_ago","enableSFAddButon","deliverability","handleAddToSF","localAddress","addressString","compact","city","country","revealed_date","JobTitle","CompanyName","copyTextLegacy","el","outline","boxShadow","background","select","execCommand","removeChild","text_el","uid","navigator","clipboard","writeText","flagging","flagContact","FlagContactActions","organizationId","contactId","personId","flagButtonClasses","float","isApolloActive","deliverabilityIndicator","UNDELIVERABLE","infoBody","textDecoration","DEFAULT","passThese","generateEmailSection","entityId","current_contact","provider_id","deliverable","risky","revealedSection","FlagContactButton","generatedEmail","clickedEmail","ContactSearchAction","email_detail","deliverability_checker","loading_text","deliverability_result","on_click_email","score","mail_to","clipboard_uid","copyIcon","CopyToClipBoardButton","deliverability_icon_style","deliverability_score_message","updateCurrentContact","checkDeliverability","deliverability_message","generated_email","DeliverabilityMessage","userClickedPhone","clickedPhone","direct_phone","company_phone","contactDetails","mobile","company_landline","tel_to","ph_no","ContactDeliverabilityChecker","colSpan","clickToViewLIProfile","profile_url","linked_in_url","li_url","first_name","last_name","company_address","address","street","zip","zi_hack","created_at","purchased_by","ZoominfoPersonLinks","ZoominfoCompanyAddress","ZoominfoContactPurchasedDetails","toggleOpenState","addContactToSalesforce","further_details","ZoominfoPurchasedContactFurtherDetails","can_use_salesforce","ZoominfoPersonName","designation","sales_force_contacts","sales_force_leads","ZoominfoPersonCompany","ZoomInfoRevealed","ZoominfoPersonRecordOpenCaret","display_older","toggleDisplayOlder","current_contacts","more_button","thirty_days_ago","display_list","contact","old_list","contacts_revealed_title","contact_list","ZoominfoPurchasedContact","company_details","totalResults","NoInfoNotice","showEmail","DirectPhone","showPhone","contactLocation","onConfirm","privacy_satisfied","gdpr_submitted","gdprModalOpen","gdprCountry","hasCredits","credits_available","tooltipText","buyContact","zi_country_hack","LocalAddress","revealButton","PersonId","provider","confirmPrivacy","closeGdprModal","GDPRModal","has_details","buyButton","ZoominfoBuyContact","EmailAddress","last_section","ZoominfoEmailReveal","ZoominfoPhoneReveal","LastUpdatedDate","mentioned","company_domain","hide_email","zoominfo_contact_id","ZoominfoFurtherPersonDetails","current_employment","contactInfo","ZoominfoEmailAvailable","ZoominfoPhoneAvailable","ZoominfoLastReviewed","last_updated","search_results","max_results","people","start_point","records","person","pers_id","ZoominfoPersonResult","user_zinfo","func","first_page","start_section","main_section","location_ref","end_section","terminal_page","locationRef","paginationTop","bottomPaginationRef","getBottomPaginationTop","diff","scrollBy","displayLength","display_length","secondResults","has_results","ZoominfoResultsText","PaginationBar","ZoominfoDisplayResults","GenerateEmailBox","is_button_clicked","hackySearchFlagNasty","UNSAFE_componentWillUpdate","generateEmail","basedOn","firstName","lastName","EmailFormatBestGuessBox","checkEmailFormatResults","check_email_format_result","checkEmailFormat","creditsAvailable","isButtonClicked","ContactSearchStore","updateResults","best_guess","EmailFormatRevealGuessButton","guessButtonToolTip","guessButtonText","ZoominfoSearch","search_params","validSearchFlag","changeSearchParams","new_params","searchCheck","updatePage","show_gen_email","ContactSearchResults","ZoominfoSearchInputForm","searching","changeParams","do_search","handleChangeFirstName","handleChangeLastName","handleChangeTitle","handleSearch","cancelSearch","searchButtonClasses","cancelButtonClasses","searchButton","ThirdPartyContactSearchDiv","modifier","ContactSearchPanel","ZoomInfoHeader","CompanyDetailsPanel","ExistingContacts","DevTools","setBrand","brand","dev_tools","available_brands","git_branch_truncated","viewBox","xmlns","d","require","CopyToExistingListDropdown","filteredItems","hasItems","widthValue","dropdownMaxWidth","IncludeFeedsOnHomePageCheckbox","initialValue","setSelection","useCheckbox","FeedsTabs","tabMapping","personal","colleague","reverseTabMapping","colleaguesLoaded","setColleaguesLoaded","hash","is","FlaggedEventsTabs","myFlaggedEvents","FlagEventStatusPanel","eventId","mixpanelData","reminderDate","reminderId","handleCancelReminder","flagged_event_reminder_id","setPast","setReminder","tempIcon","past","momentTz","hour","minute","second","debug","NotifiedUsers","listOfNames","preceedingComma","SuccessContent","feedActionType","newFeedId","goToFeed","MaxFeedsModalBody","maxFeeds","MaxFeedsModalFooter","onReload","ModalLoadingSmiley","HomeFeedTableRow","onSelected","feedUrl","new_event_count","HomeFeedTableBody","onFeedCheckboxSelected","change_home_page_setting","LDSFlagEventModal","ViewFeedTabs","hasNewcomers","showNewcomers","showEdit","hasEntity","trackNewcomersClick","hasSavedFeed","nil_value","formatted_amount","amountMillions","setLoading","setMaxFeeds","feedCount","setFeedCount","responseJSON","SalesforceModal","sync","FacetSearchCompanyActivityMutations","onActivitiesInitialState","onActivitySelected","opts","then","onActivityRemoved","addOrgListRef","setupOrgListRefs","FacetSearchAffiliatedWithMutations","onAffiliationsInitialState","onAffiliationRemoved","onAffiliationSelected","onAddOrgListRef","orgListData","ajaxSearch","updatedOrgListRefs","filteredDisplayValues","onRemoveOrgListRef","onSetupOrgListRefs","addAliasSearchRefs","setupAliasSearchRefs","FacetSearchAliasSearchMutations","onAddAliasSearchRefs","aliasSearchData","updatedAliasSearchRefs","as","onRemoveAliasSearchRefs","onSetupAliasSearchRefs","FacetSearchCompanyRelationshipMutations","onAddCompanyRelationship","onCompanyRelationshipsSetup","condition","onRemoveCompanyRelationship","relationshipSelected","onUpdateCompanyRelationships","FacetSearchGeoCoordinatesMutations","onGeoCoordinatesUpdate","addList","FacetSearchListMutations","_publicListAssigned","org_count","onUnselectList","onAddList","onSetListOfUsersLists","orgLists","FacetSearchLocationMutations","cleanSelectedLocations","newLocation","existingLocations","onClearLocations","onDeselectLocation","locationCode","searchLocation","onLocationWillMount","seedData","sortedLocations","onMyTerritoryClick","onOpenLocationSelectorModal","locationsConverted","find_the_needle","open_modal_control","onRemoveLocation","selectedLocationCode","onSaveChanges","onSelectLocation","onUpdateLocationState","locationCodes","updateFacetSearchResults","setFilterCriteria","autocomplete","autocompleteAliasSearch","autocompleteEntityValue","autocompleteEntity","autocompleteLocation","autocompleteRecentSearch","autocompleteSpecialCases","autocompleteText","autocompleteUserHome","FacetSearchStoreMutations","onClinicalTrialStagesUpdate","updateData","updatedState","onClinicalTrialStatusesUpdate","onUpdateFacetSearchResults","onSetFilterCriteria","newCriteria","onUpdateFilterCriteria","onAddToFilterCriteria","onRemoveFilterCriteria","onSetQueryTerm","newTerm","quotationCharacters","stack","c","quotationsMatched","valid","validateQueryTerm","onClearQueryError","onAutocomplete","text_chosen","matched","actionMap","alias_search","default","entity_value","recent_search","special_cases","onAutocompleteAliasSearch","clearAutocompleteSuggestions","compoundLeftovers","onAutocompleteEntityValue","onAutocompleteEntity","facet_search","onAutocompleteLocation","places","getDetails","placeId","place_id","mapZoomToPlace","onAutocompleteRecentSearch","onAutocompleteSpecialCases","onAutocompleteText","onAutocompleteUserHome","suggested","searchData","param","timeFrameReset","setSelectedTimeFrame","FacetSearchTimeFrameMutations","onTimeFrameUpdate","refactorMe","dataToBeRefactored","time_select","earliest_date","latest_date","onSetSelectedTimeFrame","formattedToday","onTimeFrameReset","onSetDateRange","onSearch","protocol","host","total_matches","onBuyContact","person_id","onCheckDeliverability","providerId","mixpanelOptions","use_salesforce_lightning_compatible_form","zi_person_id","onGenerateEmail","onContactAddedToSalesforce","onLeadAddedToSalesforce","onClickedEmail","onClickedPhone","onChangePage","onUpdateRevealedContacts","currentContacts","onInitialLoad","event_list","doEventVizUpdate","event_id","potential_ev","onHideEvent","onShowEvent","onPublishAsNow","onDeleteEvent","onInitiateRepublishing","onUpdateEvent","FacetSearchAffiliatedWithSlice","FacetSearchAliasSearchSlice","FacetSearchClinicalTrialStagesSlice","FacetSearchClinicalTrialStatusSlice","category_ref","facet_expand_list","location_code","monthly_event_counts","trial","FacetSearchTimeFrameSlice","time_any","time_last_24h","time_last_3d","time_last_wk","time_last_mon","time_last_3m","time_last_6m","time_last_1y","time_custom","userCanSeeLists","setSessionTTL","setSessionCheckFrequency","UserStoreMutations","onInit","onSetSessionTTL","checkInterval","onStartSessionCheck","onAdminSite","checkFrequency","onSetSessionCheckFrequency","newFrequency","err","hide_callback","onSaveEventChanges","make_vizible","updateEvent","onUpdateDate","valueOf","onRemoveEntity","onRemoveClinStage","onAddClinStage","onAddEntity","allIndustries","onAddIndustry","onRemoveIndustry","onSearchFor","srch","onChoseEntity","SFPanelActionsStore","data_store","onTrackEvent","organisation_id","onTrackEngagementEvent","onJump","onUpdateAccounts","onSelectedTab","new_account_set","onUpdateLeads","new_lead_set","onRefreshLeads","onRefreshAccount","therapy_relationships","all_related_therapies","onGetTherapiesForOrg","related_therapies","_updateRelatedTherapies","onReportMismatchTherapy","therapy_id","therapy_name","total_therapies","_paginateRelatedTherapies","per_page","all_therapies","onAdjustColumnSettings","onToggleColumnControls","controls_state","onScrollWheelControls","scrollSection","pivotlistHorizontalScroll","pivotlistVerticalScroll","onReset","resetFromHash","onClearAll","onRemoveFromChosen","element_data","onUpdateOrder","order","onUpdateComplete","new_data","n","j","onAddToChosen","FlagContactStore","onFlagContact","flagParams","organization_id","contact_id","updateRevealedContacts","onToggleFilteringOptions","onChangeSelectedColumn","onEditFilter","value_index","onRevertState","onAdjustCompanySettings","onDisableButtons","onSetDragged","onSetDragOver","onUpdateHover","removed_companies","onRemoveCompany","onRefreshRemove","onRestoreCompany","onRefreshRestore","createFeed","modalData","onSwitchSponsorFlag","onDisplayPage","onUpdateListName","onSwitchDisplayOrgList","onSwitchFeedCreation","list_names","create_feed","suggestedCompanies","onSetup","onClearSelections","dataType","onSelectionAdded","suggestedCopy","suggestedCompany","mutedCompany","mutedCopy","localeCompare","onSelectionRemoved","found","foundCurrent","cleanSelectedTerritories","new_loc","existing_locs","con","onTerritorySelected","onTerritoryRemoved","onClearTerritory","territory","PureRenderMixin"],"sourceRoot":""}