├── .babelrc.js ├── .build_scripts └── az-upload.js ├── .circleci └── config.yml ├── .dockerignore ├── .eslintrc.js ├── .gitattributes ├── .github ├── ISSUE_TEMPLATE │ ├── bug-report---production.md │ ├── bug-report---staging.md │ └── feature_request.md ├── issue_template.md └── workflows │ └── add-issue-to-backlog.yml ├── .gitignore ├── .nvmrc ├── .unimported.json ├── CHANGELOG.md ├── CONTRIBUTING.md ├── DOCS-GRID.md ├── Dockerfile ├── LICENSE ├── README.md ├── config ├── env.js ├── getHttpsConfig.js ├── jest │ ├── cssTransform.js │ └── fileTransform.js ├── modules.js ├── paths.js ├── pnpTs.js ├── webpack.config.js └── webpackDevServer.config.js ├── cypress-test.sh ├── docker-compose.yml ├── package.json ├── public ├── humans.txt ├── index.html └── robots.txt ├── scripts ├── build.js ├── start.js └── test.js ├── src ├── assets │ ├── env.js │ ├── graphics │ │ ├── content │ │ │ ├── 2020 │ │ │ │ ├── IFRC-icons-colour_Affected-people.svg │ │ │ │ ├── IFRC-icons-colour_Appeal-budget-Funding-Requirements.svg │ │ │ │ ├── IFRC-icons-colour_Cross-ns.svg │ │ │ │ ├── IFRC-icons-colour_DREF.svg │ │ │ │ ├── IFRC-icons-colour_Emergency-appeal.svg │ │ │ │ └── IFRC-icons-colour_Funding-Coverage.svg │ │ │ ├── .gitkeep │ │ │ ├── IFRC_Surge_01.jpg │ │ │ ├── IFRC_Surge_02.jpg │ │ │ ├── IMRoles.jpg │ │ │ ├── Pyramid.png │ │ │ ├── RIT400.jpg │ │ │ ├── adm.jpg │ │ │ ├── arc_logo.png │ │ │ ├── aurc_logo.svg │ │ │ ├── brc_logo.png │ │ │ ├── crc_logo.png │ │ │ ├── dnk_logo.png │ │ │ ├── download.svg │ │ │ ├── ericsson_logo.png │ │ │ ├── eru.jpg │ │ │ ├── esp_logo.svg │ │ │ ├── fact.jpg │ │ │ ├── frc_logo.png │ │ │ ├── heops.jpg │ │ │ ├── jrc_logo.png │ │ │ ├── nlrc_logo.jpg │ │ │ ├── operational_timeline_bodi.svg │ │ │ ├── operational_timeline_body.svg │ │ │ ├── operational_timeline_title.svg │ │ │ ├── pdc_logo.svg │ │ │ ├── per_approach.svg │ │ │ ├── per_approach_notext.png │ │ │ ├── per_approach_notext.svg │ │ │ ├── per_old.jpg │ │ │ ├── rdrt.jpg │ │ │ ├── swiss.svg │ │ │ ├── us_aid.svg │ │ │ ├── usr.jpg │ │ │ ├── wiki-help-header1.svg │ │ │ ├── wiki-help-section.png │ │ │ └── wiki-help-section.svg │ │ ├── layout │ │ │ ├── .gitkeep │ │ │ ├── FollowThisOperation.png │ │ │ ├── OpenInGO.png │ │ │ ├── ViewFullReport.png │ │ │ ├── card-mid-line.svg │ │ │ ├── card-tick.svg │ │ │ ├── card-x.svg │ │ │ ├── circle-information-hover.svg │ │ │ ├── circle-information.svg │ │ │ ├── close-full-screen.svg │ │ │ ├── country-plan.png │ │ │ ├── emergency-brand.svg │ │ │ ├── emergency.svg │ │ │ ├── eru-brand.svg │ │ │ ├── eru.svg │ │ │ ├── fact-brand.svg │ │ │ ├── fact.svg │ │ │ ├── full-screen.svg │ │ │ ├── fullscreen-square.svg │ │ │ ├── funding-coverage.svg │ │ │ ├── funding-requirements.svg │ │ │ ├── funding.svg │ │ │ ├── go-logo-2020-withbackground.svg │ │ │ ├── go-logo-2020.png │ │ │ ├── go-logo-2020.svg │ │ │ ├── go-logo-2020_orig.svg │ │ │ ├── go-logo-2020_orig_no_padding.svg │ │ │ ├── go-pdf-footer.png │ │ │ ├── heops-brand.svg │ │ │ ├── heops.svg │ │ │ ├── ifrc-square.png │ │ │ ├── ifrc_logo_2020.svg │ │ │ ├── logo-appeals.svg │ │ │ ├── logo-dref.svg │ │ │ ├── logo-icon.svg │ │ │ ├── people.svg │ │ │ ├── targeted-population.svg │ │ │ ├── tick.png │ │ │ └── x-thin.svg │ │ └── meta │ │ │ ├── .gitkeep │ │ │ ├── apple-touch-icon-114x114.png │ │ │ ├── apple-touch-icon-120x120.png │ │ │ ├── apple-touch-icon-144x144.png │ │ │ ├── apple-touch-icon-152x152.png │ │ │ ├── apple-touch-icon-57x57.png │ │ │ ├── apple-touch-icon-72x72.png │ │ │ ├── apple-touch-icon-76x76.png │ │ │ ├── apple-touch-icon.png │ │ │ └── favicon.ico │ └── icons │ │ ├── collecticons │ │ ├── affected-population.svg │ │ ├── arrow-down.svg │ │ ├── arrow-left.svg │ │ ├── arrow-loop.svg │ │ ├── arrow-right-diagonal.svg │ │ ├── arrow-right.svg │ │ ├── arrow-spin-clockwise.svg │ │ ├── arrow-up.svg │ │ ├── book.svg │ │ ├── calendar.svg │ │ ├── cash-bag.svg │ │ ├── cash-notes.svg │ │ ├── chevron-down.svg │ │ ├── chevron-left.svg │ │ ├── chevron-right.svg │ │ ├── chevron-step-backward.svg │ │ ├── chevron-step-forward.svg │ │ ├── chevron-up.svg │ │ ├── circle-exclamation.svg │ │ ├── circle-information.svg │ │ ├── circle-question.svg │ │ ├── circle-tick.svg │ │ ├── circle-xmark.svg │ │ ├── clipboard-list.svg │ │ ├── clock-back.svg │ │ ├── clock.svg │ │ ├── code.svg │ │ ├── cog.svg │ │ ├── compass.svg │ │ ├── devseed.svg │ │ ├── disc-xmark.svg │ │ ├── download.svg │ │ ├── ellipsis-horizontal.svg │ │ ├── ellipsis-vertical.svg │ │ ├── envelope.svg │ │ ├── facebook.svg │ │ ├── folder.svg │ │ ├── github.svg │ │ ├── globe.svg │ │ ├── google-plus.svg │ │ ├── grid-3x3.svg │ │ ├── hamburger-menu.svg │ │ ├── heart-full.svg │ │ ├── house.svg │ │ ├── humanitarian-assessment.svg │ │ ├── humanitarian-basecamp.svg │ │ ├── humanitarian-cash.svg │ │ ├── humanitarian-cea.svg │ │ ├── humanitarian-comms.svg │ │ ├── humanitarian-download.svg │ │ ├── humanitarian-health.svg │ │ ├── humanitarian-im.svg │ │ ├── humanitarian-itt.svg │ │ ├── humanitarian-livelihood.svg │ │ ├── humanitarian-logs.svg │ │ ├── humanitarian-opsmanagement.svg │ │ ├── humanitarian-other.svg │ │ ├── humanitarian-pdf.svg │ │ ├── humanitarian-pgi.svg │ │ ├── humanitarian-pmer.svg │ │ ├── humanitarian-relief.svg │ │ ├── humanitarian-security.svg │ │ ├── humanitarian-shelter.svg │ │ ├── humanitarian-wash.svg │ │ ├── id-editor.svg │ │ ├── link.svg │ │ ├── list.svg │ │ ├── location.svg │ │ ├── magnifier-left-grey.svg │ │ ├── magnifier-left.svg │ │ ├── magnifier-right.svg │ │ ├── map.svg │ │ ├── marker.svg │ │ ├── medium.svg │ │ ├── minus.svg │ │ ├── pages.svg │ │ ├── pencil.svg │ │ ├── people-arrows.svg │ │ ├── picture.svg │ │ ├── plus.svg │ │ ├── pop-up.svg │ │ ├── quote-left.svg │ │ ├── rc-appeals.svg │ │ ├── rc-appeals_2020.svg │ │ ├── rc-block.svg │ │ ├── rc.svg │ │ ├── rc_2020.svg │ │ ├── share.svg │ │ ├── slack.svg │ │ ├── sliders-horizontal.svg │ │ ├── sm-chevron-down.svg │ │ ├── sm-chevron-left.svg │ │ ├── sm-chevron-right.svg │ │ ├── sm-chevron-up.svg │ │ ├── sm-minus.svg │ │ ├── sm-plus.svg │ │ ├── sm-tick.svg │ │ ├── sm-triangle-down.svg │ │ ├── sm-triangle-left.svg │ │ ├── sm-triangle-right.svg │ │ ├── sm-triangle-up.svg │ │ ├── sm-xmark.svg │ │ ├── sort-asc.svg │ │ ├── sort-desc.svg │ │ ├── sort-none.svg │ │ ├── sort.svg │ │ ├── star-full.svg │ │ ├── text-block.svg │ │ ├── tick.svg │ │ ├── trash-bin.svg │ │ ├── triangle-down-grey.svg │ │ ├── triangle-down.svg │ │ ├── triangle-left.svg │ │ ├── triangle-right.svg │ │ ├── triangle-up.svg │ │ ├── twitter.svg │ │ ├── upload.svg │ │ ├── user.svg │ │ ├── xmark.svg │ │ └── youtube.svg │ │ └── icomoon │ │ ├── Read Me.txt │ │ ├── demo-files │ │ ├── demo.css │ │ └── demo.js │ │ ├── demo.html │ │ ├── fonts │ │ ├── icomoon.svg │ │ ├── icomoon.ttf │ │ └── icomoon.woff │ │ ├── selection.json │ │ └── style.css ├── index.js ├── root │ ├── Multiplexer │ │ ├── history.ts │ │ ├── index.js │ │ └── styles.module.scss │ ├── actions │ │ ├── index.js │ │ └── query-external.js │ ├── components │ │ ├── Alert │ │ │ ├── index.tsx │ │ │ └── styles.module.scss │ │ ├── AlertContainer │ │ │ ├── index.tsx │ │ │ └── styles.module.scss │ │ ├── AlertContext.tsx │ │ ├── AnonymousRoute.js │ │ ├── BasicModal │ │ │ ├── index.tsx │ │ │ └── styles.module.scss │ │ ├── BulletTextArea │ │ │ ├── index.tsx │ │ │ └── styles.module.scss │ │ ├── Button │ │ │ ├── index.tsx │ │ │ └── styles.module.scss │ │ ├── ButtonLikeLink │ │ │ ├── index.tsx │ │ │ └── styles.module.scss │ │ ├── Card │ │ │ ├── index.tsx │ │ │ └── styles.module.scss │ │ ├── Charts │ │ │ └── index.js │ │ ├── Checkbox │ │ │ ├── Checkmark │ │ │ │ └── index.tsx │ │ │ ├── index.tsx │ │ │ └── styles.module.scss │ │ ├── Checklist │ │ │ ├── index.tsx │ │ │ └── styles.module.scss │ │ ├── Chip │ │ │ ├── index.tsx │ │ │ └── styles.module.scss │ │ ├── ConfirmButton │ │ │ ├── index.tsx │ │ │ └── styles.module.scss │ │ ├── Container │ │ │ ├── index.tsx │ │ │ └── styles.module.scss │ │ ├── DREFFileImport │ │ │ ├── index.tsx │ │ │ └── styles.module.scss │ │ ├── DREFFileInput │ │ │ ├── index.tsx │ │ │ └── styles.module.scss │ │ ├── DateInput │ │ │ ├── index.tsx │ │ │ └── styles.module.scss │ │ ├── DateOutput │ │ │ ├── index.tsx │ │ │ └── styles.module.scss │ │ ├── Description │ │ │ ├── index.tsx │ │ │ └── styles.module.scss │ │ ├── DrefApplicationList │ │ │ ├── ActiveDrefList │ │ │ │ ├── ActiveDrefTable │ │ │ │ │ └── index.tsx │ │ │ │ ├── index.tsx │ │ │ │ └── styles.module.scss │ │ │ ├── CompletedDrefList │ │ │ │ ├── CompletedDrefTable │ │ │ │ │ └── index.tsx │ │ │ │ ├── index.tsx │ │ │ │ └── styles.module.scss │ │ │ ├── ShareUserModal │ │ │ │ ├── index.tsx │ │ │ │ └── styles.module.scss │ │ │ ├── index.tsx │ │ │ ├── styles.module.scss │ │ │ └── useDrefApplicationListOptions.ts │ │ ├── DrefExportButton │ │ │ └── index.tsx │ │ ├── DrefPdfDocument │ │ │ ├── AboutServicesOutput │ │ │ │ └── index.tsx │ │ │ ├── BudgetFileOutput │ │ │ │ └── index.tsx │ │ │ ├── ContactInformationOutput │ │ │ │ ├── ContactSection │ │ │ │ │ └── index.tsx │ │ │ │ └── index.tsx │ │ │ ├── EssentialInformationOutput │ │ │ │ └── index.tsx │ │ │ ├── EventDescriptionOutput │ │ │ │ └── index.tsx │ │ │ ├── HeadingOutput │ │ │ │ └── index.tsx │ │ │ ├── IcrcActionsOutput │ │ │ │ └── index.tsx │ │ │ ├── MovementPartnerOutput │ │ │ │ └── index.tsx │ │ │ ├── NationalSocietyOutput │ │ │ │ └── index.tsx │ │ │ ├── NeedIdentifiedOutput │ │ │ │ └── index.tsx │ │ │ ├── ObjectivesAndStrategy │ │ │ │ └── index.tsx │ │ │ ├── OtherActionsOutput │ │ │ │ └── index.tsx │ │ │ ├── PageNumberPdf │ │ │ │ └── index.tsx │ │ │ ├── PlannedInterventionOutput │ │ │ │ └── index.tsx │ │ │ ├── PreviousOperationOutput │ │ │ │ └── index.tsx │ │ │ ├── RiskAndSecurityOutput │ │ │ │ └── index.tsx │ │ │ ├── TargetedPopulationOutput │ │ │ │ └── index.tsx │ │ │ └── index.tsx │ │ ├── DropdownMenuItem │ │ │ ├── index.tsx │ │ │ └── styles.module.scss │ │ ├── ElementFragments │ │ │ ├── index.tsx │ │ │ └── styles.module.scss │ │ ├── EmergencyThreeWDetails │ │ │ ├── index.tsx │ │ │ └── styles.module.scss │ │ ├── EmergencyThreeWForm │ │ │ ├── ERUInput │ │ │ │ ├── index.tsx │ │ │ │ └── styles.module.scss │ │ │ ├── EmergencyEventInput │ │ │ │ └── index.tsx │ │ │ ├── SectorInput │ │ │ │ ├── ActivityInput │ │ │ │ │ ├── SupplyInput │ │ │ │ │ │ ├── index.tsx │ │ │ │ │ │ └── styles.module.scss │ │ │ │ │ ├── index.tsx │ │ │ │ │ └── styles.module.scss │ │ │ │ ├── CustomActivityInput │ │ │ │ │ ├── CustomSupplyInput │ │ │ │ │ │ ├── index.tsx │ │ │ │ │ │ └── styles.module.scss │ │ │ │ │ ├── index.tsx │ │ │ │ │ └── styles.module.scss │ │ │ │ ├── DisaggregationInputs │ │ │ │ │ ├── index.tsx │ │ │ │ │ └── styles.module.scss │ │ │ │ ├── PointInput │ │ │ │ │ ├── index.tsx │ │ │ │ │ └── styles.module.scss │ │ │ │ ├── index.tsx │ │ │ │ └── styles.module.scss │ │ │ ├── index.tsx │ │ │ ├── styles.module.scss │ │ │ └── useEmergencyThreeWOptions.ts │ │ ├── EmptyMessage │ │ │ ├── index.tsx │ │ │ └── styles.module.scss │ │ ├── EnvironmentBanner │ │ │ ├── index.js │ │ │ └── styles.module.scss │ │ ├── ExpandButton │ │ │ └── index.tsx │ │ ├── ExpandableContainer │ │ │ ├── index.tsx │ │ │ └── styles.module.scss │ │ ├── ExportProjectsButton │ │ │ └── index.tsx │ │ ├── ExportTableButton │ │ │ └── index.tsx │ │ ├── ExportableView │ │ │ ├── ExportButton.js │ │ │ ├── ExportContainer.js │ │ │ ├── ExportFooter.js │ │ │ ├── ExportHeader.js │ │ │ ├── ExportHiddenContent.js │ │ │ ├── ExportOnlyContent.js │ │ │ ├── exportContext.js │ │ │ ├── index.js │ │ │ └── styles.module.scss │ │ ├── FileInput │ │ │ ├── index.tsx │ │ │ └── styles.module.scss │ │ ├── FinalReportExport │ │ │ └── index.tsx │ │ ├── FinalReportPdfDocument │ │ │ ├── ContactInformationOutput │ │ │ │ ├── ContactSection │ │ │ │ │ └── index.tsx │ │ │ │ └── index.tsx │ │ │ ├── EssentialInformationOutput │ │ │ │ └── index.tsx │ │ │ ├── EventDescriptionOutput │ │ │ │ └── index.tsx │ │ │ ├── FinancialReportFileOutput │ │ │ │ └── index.tsx │ │ │ ├── HeadingOutput │ │ │ │ └── index.tsx │ │ │ ├── IcrcActionsOutput │ │ │ │ └── index.tsx │ │ │ ├── MovementPartnerOutput │ │ │ │ └── index.tsx │ │ │ ├── NationalSocietyOutput │ │ │ │ └── index.tsx │ │ │ ├── NeedIdentifiedOutput │ │ │ │ └── index.tsx │ │ │ ├── ObjectivesAndStrategy │ │ │ │ └── index.tsx │ │ │ ├── OtherActionsOutput │ │ │ │ └── index.tsx │ │ │ ├── PlannedInterventionOutput │ │ │ │ └── index.tsx │ │ │ ├── RiskAndSecurityOutput │ │ │ │ └── index.tsx │ │ │ ├── TargetedPopulationOutput │ │ │ │ └── index.tsx │ │ │ └── index.tsx │ │ ├── FlashUpdateFileInput │ │ │ └── index.tsx │ │ ├── Footer │ │ │ ├── index.tsx │ │ │ └── styles.module.scss │ │ ├── FullPageErrorMessage │ │ │ ├── index.tsx │ │ │ └── styles.module.scss │ │ ├── GoFileInput │ │ │ ├── index.tsx │ │ │ └── styles.module.scss │ │ ├── GoMapDisclaimer │ │ │ ├── index.tsx │ │ │ └── styles.module.scss │ │ ├── Header │ │ │ ├── index.tsx │ │ │ └── styles.module.scss │ │ ├── Heading │ │ │ ├── index.tsx │ │ │ └── styles.module.scss │ │ ├── InfoPopup │ │ │ ├── index.tsx │ │ │ └── styles.module.scss │ │ ├── InputContainer │ │ │ ├── index.tsx │ │ │ └── styles.module.scss │ │ ├── InputElementFragments │ │ │ ├── index.tsx │ │ │ └── styles.module.scss │ │ ├── InputError │ │ │ ├── index.tsx │ │ │ └── styles.module.scss │ │ ├── InputLabel │ │ │ ├── index.tsx │ │ │ └── styles.module.scss │ │ ├── InputSection │ │ │ ├── index.tsx │ │ │ └── styles.module.scss │ │ ├── KeyFigure │ │ │ ├── index.tsx │ │ │ └── styles.module.scss │ │ ├── LanguageSelect │ │ │ ├── index.js │ │ │ └── styles.module.scss │ │ ├── Link │ │ │ ├── index.tsx │ │ │ └── styles.module.scss │ │ ├── List.tsx │ │ ├── ListView │ │ │ ├── Message │ │ │ │ ├── index.tsx │ │ │ │ └── styles.module.scss │ │ │ └── index.tsx │ │ ├── MapEaseTo │ │ │ └── index.tsx │ │ ├── MapTooltipContent │ │ │ ├── index.tsx │ │ │ └── styles.module.scss │ │ ├── NewGlobalLoading │ │ │ ├── index.js │ │ │ └── styles.module.scss │ │ ├── NonFieldError │ │ │ ├── index.tsx │ │ │ └── styles.module.scss │ │ ├── NumberInput │ │ │ ├── index.tsx │ │ │ └── styles.module.scss │ │ ├── NumberOutput │ │ │ ├── index.tsx │ │ │ └── styles.module.scss │ │ ├── OperationalUpdateExport │ │ │ └── index.tsx │ │ ├── OperationalUpdatePdfDocument │ │ │ ├── AboutServicesOutput │ │ │ │ └── index.tsx │ │ │ ├── BudgetFileOutput │ │ │ │ └── index.tsx │ │ │ ├── ContactInformationOutput │ │ │ │ ├── ContactSection │ │ │ │ │ └── index.tsx │ │ │ │ └── index.tsx │ │ │ ├── EssentialInformationOutput │ │ │ │ └── index.tsx │ │ │ ├── EventDescriptionOutput │ │ │ │ └── index.tsx │ │ │ ├── HeadingOutput │ │ │ │ └── index.tsx │ │ │ ├── IcrcActionsOutput │ │ │ │ └── index.tsx │ │ │ ├── MovementPartnerOutput │ │ │ │ └── index.tsx │ │ │ ├── NationalSocietyOutput │ │ │ │ └── index.tsx │ │ │ ├── NeedIdentifiedOutput │ │ │ │ └── index.tsx │ │ │ ├── ObjectivesAndStrategy │ │ │ │ └── index.tsx │ │ │ ├── OtherActionsOutput │ │ │ │ └── index.tsx │ │ │ ├── PlannedInterventionOutput │ │ │ │ └── index.tsx │ │ │ ├── RiskAndSecurityOutput │ │ │ │ └── index.tsx │ │ │ ├── SummaryOfChangeOutput │ │ │ │ └── index.tsx │ │ │ ├── TargetedPopulationOutput │ │ │ │ └── index.tsx │ │ │ └── index.tsx │ │ ├── Page │ │ │ ├── index.tsx │ │ │ └── styles.module.scss │ │ ├── PageHeader │ │ │ ├── index.tsx │ │ │ └── styles.module.scss │ │ ├── Pager │ │ │ ├── index.tsx │ │ │ └── styles.module.scss │ │ ├── PdfTextOutput │ │ │ ├── index.tsx │ │ │ └── pdfStyles.ts │ │ ├── PrivateRoute.js │ │ ├── ProgressBar │ │ │ ├── index.tsx │ │ │ └── styles.module.scss │ │ ├── RadioInput │ │ │ ├── Radio │ │ │ │ ├── index.tsx │ │ │ │ └── styles.module.scss │ │ │ ├── index.tsx │ │ │ └── styles.module.scss │ │ ├── RawButton │ │ │ ├── index.tsx │ │ │ └── styles.module.scss │ │ ├── RawInput │ │ │ ├── index.tsx │ │ │ └── styles.module.scss │ │ ├── RawTextArea │ │ │ ├── index.tsx │ │ │ └── styles.module.scss │ │ ├── ReducedListDisplay │ │ │ ├── index.tsx │ │ │ └── styles.module.scss │ │ ├── RegionOutput │ │ │ ├── index.tsx │ │ │ └── styles.module.scss │ │ ├── RichTextArea │ │ │ ├── index.tsx │ │ │ └── styles.module.scss │ │ ├── RichTextOutput │ │ │ ├── index.tsx │ │ │ └── styles.module.scss │ │ ├── RiskImminentEventMap │ │ │ ├── ADAMEventMap │ │ │ │ ├── PointDetails │ │ │ │ │ ├── index.tsx │ │ │ │ │ └── styles.module.scss │ │ │ │ ├── Sidebar │ │ │ │ │ ├── EventDetail │ │ │ │ │ │ ├── index.tsx │ │ │ │ │ │ └── styles.module.scss │ │ │ │ │ ├── index.tsx │ │ │ │ │ └── styles.module.scss │ │ │ │ ├── index.tsx │ │ │ │ └── styles.module.scss │ │ │ ├── GDACSEventMap │ │ │ │ ├── PointDetails │ │ │ │ │ ├── index.tsx │ │ │ │ │ └── styles.module.scss │ │ │ │ ├── Sidebar │ │ │ │ │ ├── EventDetails │ │ │ │ │ │ ├── index.tsx │ │ │ │ │ │ └── styles.module.scss │ │ │ │ │ ├── index.tsx │ │ │ │ │ └── styles.module.scss │ │ │ │ ├── index.tsx │ │ │ │ └── styles.module.scss │ │ │ ├── MapFooter │ │ │ │ ├── index.tsx │ │ │ │ └── styles.module.scss │ │ │ ├── MeteoSwissEvent │ │ │ │ ├── PointDetails │ │ │ │ │ ├── index.tsx │ │ │ │ │ └── styles.module.scss │ │ │ │ ├── Sidebar │ │ │ │ │ ├── EventDetails │ │ │ │ │ │ ├── index.tsx │ │ │ │ │ │ └── styles.module.scss │ │ │ │ │ ├── index.tsx │ │ │ │ │ └── styles.module.scss │ │ │ │ ├── index.tsx │ │ │ │ └── styles.module.scss │ │ │ └── PDCEventMap │ │ │ │ ├── HazardMapImage │ │ │ │ └── index.tsx │ │ │ │ ├── PointDetails │ │ │ │ ├── index.tsx │ │ │ │ └── styles.module.scss │ │ │ │ ├── Sidebar │ │ │ │ ├── EventDetail │ │ │ │ │ ├── index.tsx │ │ │ │ │ └── styles.module.scss │ │ │ │ ├── index.tsx │ │ │ │ └── styles.module.scss │ │ │ │ ├── index.tsx │ │ │ │ └── styles.module.scss │ │ ├── RouterTabs │ │ │ └── index.js │ │ ├── SearchSelectInput │ │ │ ├── index.tsx │ │ │ └── styles.module.scss │ │ ├── SegmentInput │ │ │ ├── index.tsx │ │ │ └── styles.module.scss │ │ ├── SelectInput │ │ │ ├── index.tsx │ │ │ └── styles.module.scss │ │ ├── Svg │ │ │ ├── index.tsx │ │ │ └── styles.module.scss │ │ ├── Switch │ │ │ ├── SwitchIcon │ │ │ │ ├── index.tsx │ │ │ │ └── styles.module.scss │ │ │ └── index.tsx │ │ ├── Table │ │ │ ├── Cell │ │ │ │ └── index.tsx │ │ │ ├── HeaderCell │ │ │ │ ├── index.tsx │ │ │ │ └── styles.module.scss │ │ │ ├── TableData │ │ │ │ ├── index.tsx │ │ │ │ └── styles.module.scss │ │ │ ├── TableRow │ │ │ │ └── index.tsx │ │ │ ├── index.tsx │ │ │ ├── predefinedColumns.ts │ │ │ ├── styles.module.scss │ │ │ ├── types.ts │ │ │ ├── useDownloading.ts │ │ │ ├── useFiltering.ts │ │ │ ├── useHiding.ts │ │ │ ├── useOrdering.ts │ │ │ ├── useRowExpansion.tsx │ │ │ └── useSorting.ts │ │ ├── TableActions │ │ │ ├── index.tsx │ │ │ └── styles.module.scss │ │ ├── Tabs │ │ │ ├── Tab │ │ │ │ ├── index.tsx │ │ │ │ └── styles.module.scss │ │ │ ├── TabContext.tsx │ │ │ ├── TabList │ │ │ │ ├── index.tsx │ │ │ │ └── styles.module.scss │ │ │ ├── TabPanel │ │ │ │ └── index.tsx │ │ │ └── index.tsx │ │ ├── TextArea │ │ │ ├── index.tsx │ │ │ └── styles.module.scss │ │ ├── TextInput │ │ │ ├── index.tsx │ │ │ └── styles.module.scss │ │ ├── TextOutput │ │ │ ├── index.tsx │ │ │ └── styles.module.scss │ │ ├── ThreeWDetails │ │ │ ├── index.tsx │ │ │ └── styles.module.scss │ │ ├── ThreeWForm │ │ │ ├── AnnualSplitInput │ │ │ │ ├── index.tsx │ │ │ │ └── styles.module.scss │ │ │ ├── RegionSelectionInput │ │ │ │ ├── FilterOutput │ │ │ │ │ ├── index.tsx │ │ │ │ │ └── styles.module.scss │ │ │ │ ├── MapAdmin2Select.tsx │ │ │ │ ├── MapDistrictSelect.tsx │ │ │ │ ├── RegionSelectionModal │ │ │ │ │ ├── index.tsx │ │ │ │ │ └── styles.module.scss │ │ │ │ ├── common.ts │ │ │ │ ├── index.tsx │ │ │ │ └── styles.module.scss │ │ │ ├── index.tsx │ │ │ ├── styles.module.scss │ │ │ └── useThreeWOptions.ts │ │ ├── ThreeWList │ │ │ ├── index.tsx │ │ │ └── styles.module.scss │ │ ├── ThreeWSankey │ │ │ ├── index.js │ │ │ └── styles.module.scss │ │ ├── Translate │ │ │ ├── index.tsx │ │ │ └── styles.module.scss │ │ ├── TranslationWarningBanner │ │ │ ├── index.tsx │ │ │ └── styles.module.scss │ │ ├── UserSearchSelectInput │ │ │ ├── index.tsx │ │ │ └── styles.module.scss │ │ ├── WikiLink │ │ │ ├── index.tsx │ │ │ └── styles.module.scss │ │ ├── about │ │ │ └── video-carousel.js │ │ ├── admin-area-elements.js │ │ ├── auth-controls.js │ │ ├── backdrop.js │ │ ├── block-loading.js │ │ ├── breadcrumb.js │ │ ├── bullet-table.js │ │ ├── common │ │ │ ├── dropdown.js │ │ │ ├── filters │ │ │ │ └── date-filter-header.js │ │ │ ├── fullscreen-header.js │ │ │ ├── info-icon.js │ │ │ ├── key-figures-header.js │ │ │ ├── table-basic.js │ │ │ ├── toggle-button.js │ │ │ └── tooltip.js │ │ ├── confirm-modal.js │ │ ├── connected │ │ │ ├── alerts-table.js │ │ │ ├── all-personnel-table.js │ │ │ ├── appeals-table.js │ │ │ ├── emergencies-dash.js │ │ │ ├── emergencies-table.js │ │ │ ├── eru-table.js │ │ │ ├── field-reports-table.js │ │ │ ├── new-password.js │ │ │ ├── personnel-table.js │ │ │ ├── presentation-dash.js │ │ │ ├── styles.module.scss │ │ │ └── user-menu.js │ │ ├── contact-row.js │ │ ├── country-list.js │ │ ├── country │ │ │ ├── preparedness-column-graph.js │ │ │ ├── preparedness-overview.js │ │ │ ├── preparedness-phase-outcomes.js │ │ │ ├── preparedness-summary.js │ │ │ └── preparedness-work-plan.js │ │ ├── deployments │ │ │ ├── personnel-by-event-table.js │ │ │ └── readiness.js │ │ ├── display-table.js │ │ ├── dropdown-menu.js │ │ ├── emergencies │ │ │ ├── overview.js │ │ │ ├── snippets.js │ │ │ └── stats.js │ │ ├── error-panel.js │ │ ├── expandable.js │ │ ├── export-button-component.js │ │ ├── export-button-container.js │ │ ├── fold.js │ │ ├── form-elements │ │ │ ├── checkable.js │ │ │ ├── checkbox-group-actions.js │ │ │ ├── checkbox-group.js │ │ │ ├── checkbox.js │ │ │ ├── date-input.js │ │ │ ├── error.js │ │ │ ├── faram-checkbox.js │ │ │ ├── index.js │ │ │ ├── input-select.js │ │ │ ├── input.js │ │ │ ├── misc.js │ │ │ ├── number-input.js │ │ │ ├── radio-group.js │ │ │ ├── radio.js │ │ │ ├── raw-input.js │ │ │ ├── select-input.js │ │ │ ├── select.js │ │ │ ├── text-input.js │ │ │ └── textarea.js │ │ ├── formatted-date.js │ │ ├── formatted-number.js │ │ ├── global-header-banner.js │ │ ├── global-loading.js │ │ ├── header-region-button.js │ │ ├── highlighted-operations │ │ │ ├── index.js │ │ │ └── operation-card.js │ │ ├── map │ │ │ ├── common │ │ │ │ ├── download-button.js │ │ │ │ ├── emergencies-left-menu.js │ │ │ │ ├── map-component.js │ │ │ │ ├── map-footer.js │ │ │ │ └── map-header.js │ │ │ ├── country-map.js │ │ │ ├── deployments-map.js │ │ │ ├── emergencies-map.js │ │ │ ├── emergency-map.js │ │ │ ├── home-map │ │ │ │ ├── appeal-types-dropdown.js │ │ │ │ ├── emergency-types-dropdown.js │ │ │ │ ├── explanation-bubble.js │ │ │ │ ├── factory │ │ │ │ │ └── marker-layer-stylesheet-factory.js │ │ │ │ ├── filtering │ │ │ │ │ ├── comparator │ │ │ │ │ │ ├── appeal-type-comparator.js │ │ │ │ │ │ ├── date-comparator.js │ │ │ │ │ │ └── emergency-type-comparator.js │ │ │ │ │ └── filtering-processor.js │ │ │ │ └── operations-popover.js │ │ │ ├── main-map.js │ │ │ ├── per-map.js │ │ │ └── per-map │ │ │ │ ├── explanation-bubble.js │ │ │ │ ├── factory │ │ │ │ └── marker-layer-stylesheet-factory.js │ │ │ │ ├── operations-popover.js │ │ │ │ ├── per-phase-dropdown.js │ │ │ │ └── per-type-dropdown.js │ │ ├── mobile-navbar.js │ │ ├── modal.js │ │ ├── navbar.js │ │ ├── page-footer.js │ │ ├── per-forms │ │ │ ├── factory │ │ │ │ └── request-factory.js │ │ │ ├── per-account.js │ │ │ ├── per-form.js │ │ │ ├── per-overview.js │ │ │ └── per-table.js │ │ ├── pills.js │ │ ├── portal.js │ │ ├── preparedness │ │ │ ├── contact-per.js │ │ │ ├── factory │ │ │ │ └── national-societies-engaged-per-graph-data-factory.js │ │ │ ├── global-preparedness-highlights.js │ │ │ ├── national-societies-engaged-per.js │ │ │ └── preparedness-header.js │ │ ├── progress-labeled.js │ │ ├── progress.js │ │ ├── spinner.js │ │ ├── system-alerts.js │ │ ├── tab-content.js │ │ ├── text-output.js │ │ └── timeline-charts.js │ ├── config.js │ ├── declarations │ │ ├── docx4js.d.ts │ │ ├── png.d.ts │ │ ├── react-through.d.ts │ │ ├── scss.d.ts │ │ ├── svg.d.ts │ │ └── ttf.d.ts │ ├── hooks │ │ ├── index.js │ │ ├── useAlert.ts │ │ ├── useBasicLayout │ │ │ ├── index.tsx │ │ │ └── styles.module.scss │ │ ├── useBooleanState.ts │ │ ├── useConfirmation │ │ │ ├── index.tsx │ │ │ └── styles.module.scss │ │ ├── useDebouncedValue.ts │ │ ├── useDidUpdateEffect.ts │ │ ├── useDropHandler.tsx │ │ ├── useExportButton.js │ │ ├── useHash.ts │ │ ├── useInputState.ts │ │ └── useReduxState.ts │ ├── index.js │ ├── lang.js │ ├── languageContext.js │ ├── reducers │ │ ├── actions.js │ │ ├── admin-area.js │ │ ├── appeal-documents.js │ │ ├── appeals.js │ │ ├── countries.js │ │ ├── country-overview.js │ │ ├── csv.js │ │ ├── deployments.js │ │ ├── disaster-types.js │ │ ├── districts.js │ │ ├── domain-whitelist.js │ │ ├── email.js │ │ ├── emergencies.js │ │ ├── eru-owners.js │ │ ├── event.js │ │ ├── export-per-to-csv.js │ │ ├── external_partners.js │ │ ├── fdrs.js │ │ ├── field-report-form.js │ │ ├── field-report.js │ │ ├── field-reports.js │ │ ├── heops.js │ │ ├── index.js │ │ ├── lang-all.js │ │ ├── lang.js │ │ ├── main_contacts.js │ │ ├── ns-rapid-response.js │ │ ├── overall-stats.js │ │ ├── password.js │ │ ├── per-areas.js │ │ ├── per-components.js │ │ ├── per-form.js │ │ ├── per-latest-overview.js │ │ ├── per-overview.js │ │ ├── per-questions.js │ │ ├── personnel-by-event.js │ │ ├── profile.js │ │ ├── projects.js │ │ ├── regions.js │ │ ├── registration.js │ │ ├── resend-validation.js │ │ ├── situation-reports.js │ │ ├── subscriptions.js │ │ ├── supported_activities.js │ │ ├── surge-alerts.js │ │ └── user.js │ ├── resources │ │ ├── montserrat.bold.ttf │ │ ├── open-sans.bold.ttf │ │ ├── open-sans.italic.ttf │ │ └── open-sans.regular.ttf │ ├── schemas │ │ ├── new-password.js │ │ ├── per-overview.js │ │ └── register.js │ ├── selectors │ │ └── index.js │ ├── sentry.ts │ ├── types │ │ ├── common.ts │ │ ├── country.ts │ │ ├── dref.ts │ │ ├── eru.ts │ │ ├── event.ts │ │ ├── index.ts │ │ ├── project.ts │ │ ├── risk.ts │ │ └── user.ts │ ├── utils │ │ ├── appeal-type-constants.js │ │ ├── common.ts │ │ ├── constants.js │ │ ├── country-labels.js │ │ ├── download-starter.js │ │ ├── eru-types.js │ │ ├── exception │ │ │ └── FormatDateException.js │ │ ├── export-map.js │ │ ├── extendables.js │ │ ├── field-report-constants.js │ │ ├── form.ts │ │ ├── format.js │ │ ├── fullscreen.js │ │ ├── get-country-meta.js │ │ ├── get-new-map.js │ │ ├── get-per-components.js │ │ ├── get-per-process-type.js │ │ ├── ie.js │ │ ├── lang.js │ │ ├── map.ts │ │ ├── mapGeo │ │ │ └── index.tsx │ │ ├── mergeDeployData.js │ │ ├── network.js │ │ ├── pdf │ │ │ ├── pdfStyles.ts │ │ │ └── pdfVariables.ts │ │ ├── reducer-utils.js │ │ ├── request.js │ │ ├── resolveUrl.ts │ │ ├── restRequest │ │ │ ├── go.ts │ │ │ ├── index.ts │ │ │ ├── useRecursiveCsvRequest.ts │ │ │ └── useRecursiveRequest.ts │ │ ├── risk-icons │ │ │ ├── cyclone.png │ │ │ ├── cyclone.svg │ │ │ ├── drought.png │ │ │ ├── drought.svg │ │ │ ├── earthquake.png │ │ │ ├── flood.png │ │ │ ├── flood.svg │ │ │ ├── food-insecurity.svg │ │ │ ├── storm-surge.png │ │ │ └── wildfire.png │ │ ├── risk.ts │ │ ├── scrollToTop.ts │ │ ├── search.ts │ │ ├── special-map-labels.js │ │ ├── store.js │ │ └── utils.js │ └── views │ │ ├── AllEmergencyThreeW │ │ ├── index.tsx │ │ └── styles.module.scss │ │ ├── AllFlashUpdates │ │ ├── TableLists.tsx │ │ ├── flashUpdateTableColumns.ts │ │ ├── index.tsx │ │ └── styles.module.scss │ │ ├── AllThreeW │ │ ├── index.tsx │ │ └── styles.module.scss │ │ ├── ClearInitCache │ │ ├── index.js │ │ └── styles.module.scss │ │ ├── Country │ │ ├── CountryPlan │ │ │ ├── MembershipCoordinationTable │ │ │ │ ├── index.tsx │ │ │ │ └── styles.module.scss │ │ │ ├── StrategicPrioritiesTable │ │ │ │ ├── index.tsx │ │ │ │ └── styles.module.scss │ │ │ ├── index.tsx │ │ │ └── styles.module.scss │ │ ├── RiskWatch │ │ │ ├── ImminentEvents │ │ │ │ ├── ImminentEventsADAM │ │ │ │ │ ├── index.tsx │ │ │ │ │ └── styles.module.scss │ │ │ │ ├── ImminentEventsMeteoSwiss │ │ │ │ │ ├── index.tsx │ │ │ │ │ └── styles.module.scss │ │ │ │ ├── ImminentEventsPDC │ │ │ │ │ ├── index.tsx │ │ │ │ │ └── styles.module.scss │ │ │ │ ├── index.tsx │ │ │ │ └── styles.module.scss │ │ │ ├── ImminentEventsGDACS │ │ │ │ ├── index.tsx │ │ │ │ └── styles.module.scss │ │ │ ├── SeasonalRisk │ │ │ │ ├── ChartLegendItem │ │ │ │ │ ├── index.tsx │ │ │ │ │ └── styles.module.scss │ │ │ │ ├── HistoricalDataChart │ │ │ │ │ ├── index.tsx │ │ │ │ │ └── styles.module.scss │ │ │ │ ├── MonthSelector │ │ │ │ │ ├── index.tsx │ │ │ │ │ └── styles.module.scss │ │ │ │ ├── PossibleEarlyActionTable │ │ │ │ │ ├── index.tsx │ │ │ │ │ └── styles.module.scss │ │ │ │ ├── ReturnPeriodTable │ │ │ │ │ ├── index.tsx │ │ │ │ │ └── styles.module.scss │ │ │ │ ├── RiskBarChart │ │ │ │ │ ├── index.tsx │ │ │ │ │ └── styles.module.scss │ │ │ │ ├── RiskTable │ │ │ │ │ ├── index.tsx │ │ │ │ │ └── styles.module.scss │ │ │ │ ├── common.ts │ │ │ │ ├── index.tsx │ │ │ │ └── styles.module.scss │ │ │ ├── index.tsx │ │ │ └── styles.module.scss │ │ ├── ThreeW │ │ │ ├── InCountryProjects │ │ │ │ ├── Filters │ │ │ │ │ ├── index.tsx │ │ │ │ │ └── styles.module.scss │ │ │ │ ├── Map │ │ │ │ │ ├── index.tsx │ │ │ │ │ └── styles.module.scss │ │ │ │ ├── SankeyFilters │ │ │ │ │ ├── index.tsx │ │ │ │ │ └── styles.module.scss │ │ │ │ ├── index.tsx │ │ │ │ └── styles.module.scss │ │ │ ├── NSProjects │ │ │ │ ├── Filters │ │ │ │ │ ├── index.tsx │ │ │ │ │ └── styles.module.scss │ │ │ │ ├── Map │ │ │ │ │ ├── arrow.png │ │ │ │ │ ├── index.tsx │ │ │ │ │ └── styles.module.scss │ │ │ │ ├── SankeyFilters │ │ │ │ │ ├── index.tsx │ │ │ │ │ └── styles.module.scss │ │ │ │ ├── index.tsx │ │ │ │ └── styles.module.scss │ │ │ ├── ProjectDetailModal │ │ │ │ ├── index.tsx │ │ │ │ └── styles.module.scss │ │ │ ├── ProjectFlowSankey │ │ │ │ ├── index.tsx │ │ │ │ └── styles.module.scss │ │ │ ├── ProjectFormModal │ │ │ │ ├── index.tsx │ │ │ │ └── styles.module.scss │ │ │ ├── ProjectStatPieChart │ │ │ │ ├── index.tsx │ │ │ │ └── styles.module.scss │ │ │ ├── ProjectTableActions │ │ │ │ ├── index.tsx │ │ │ │ └── styles.module.scss │ │ │ ├── common.ts │ │ │ ├── export-headers.js │ │ │ ├── index.tsx │ │ │ ├── projectTableColumns.ts │ │ │ └── styles.module.scss │ │ └── index.js │ │ ├── CountryProfile │ │ ├── Card │ │ │ ├── index.js │ │ │ └── styles.module.scss │ │ ├── ClimateChart.js │ │ ├── Container │ │ │ ├── index.js │ │ │ └── styles.module.scss │ │ ├── ExternalSources.js │ │ ├── IndicatorOutput.js │ │ ├── InformIndicators.js │ │ ├── KeyClimateEvents.js │ │ ├── KeyDocuments.js │ │ ├── KeyIndicators.js │ │ ├── Map.js │ │ ├── NSIndicators.js │ │ ├── PastCrisesEvents.js │ │ ├── PastEpidemics.js │ │ ├── PastOperation.js │ │ ├── PopulationMap.js │ │ ├── SeasonalCalendar.js │ │ ├── SocialEvents.js │ │ ├── common.js │ │ ├── index.js │ │ └── styles.module.scss │ │ ├── Covid19ThreeWSankey │ │ ├── Filters.js │ │ ├── index.js │ │ └── styles.module.scss │ │ ├── DrefApplicationForm │ │ ├── ActionsFields │ │ │ ├── NSActionInput │ │ │ │ ├── index.tsx │ │ │ │ └── styles.module.scss │ │ │ ├── NeedInput │ │ │ │ ├── index.tsx │ │ │ │ └── styles.module.scss │ │ │ ├── index.tsx │ │ │ └── styles.module.scss │ │ ├── CaptionInput │ │ │ ├── index.tsx │ │ │ └── styles.module.scss │ │ ├── DrefOverview │ │ │ ├── CopyFieldReportSection │ │ │ │ ├── index.tsx │ │ │ │ └── styles.module.scss │ │ │ ├── CountryDistrictInput │ │ │ │ ├── index.tsx │ │ │ │ └── styles.module.scss │ │ │ ├── ImageWithCaptionInput │ │ │ │ ├── index.tsx │ │ │ │ └── styles.module.scss │ │ │ ├── index.tsx │ │ │ └── styles.module.scss │ │ ├── EventDetails │ │ │ ├── index.tsx │ │ │ └── styles.module.scss │ │ ├── ObsoletePayloadResolutionModal │ │ │ ├── index.tsx │ │ │ └── styles.module.scss │ │ ├── Response │ │ │ ├── IndicatorInput │ │ │ │ ├── index.tsx │ │ │ │ └── styles.module.scss │ │ │ ├── InterventionInput │ │ │ │ ├── index.tsx │ │ │ │ └── styles.module.scss │ │ │ ├── RiskSecurityInput │ │ │ │ ├── index.tsx │ │ │ │ └── styles.module.scss │ │ │ ├── index.tsx │ │ │ └── styles.module.scss │ │ ├── Submission │ │ │ ├── index.tsx │ │ │ └── styles.module.scss │ │ ├── common.tsx │ │ ├── import.ts │ │ ├── index.tsx │ │ ├── styles.module.scss │ │ └── useDrefFormOptions.ts │ │ ├── DrefOpPdfPreview │ │ ├── index.tsx │ │ └── styles.module.scss │ │ ├── DrefOperationalUpdateForm │ │ ├── EventDetails │ │ │ ├── index.tsx │ │ │ └── styles.module.scss │ │ ├── Needs │ │ │ ├── index.tsx │ │ │ └── styles.module.scss │ │ ├── ObsoletePayloadResolutionModal │ │ │ ├── index.tsx │ │ │ └── styles.module.scss │ │ ├── Operation │ │ │ ├── index.tsx │ │ │ └── styles.module.scss │ │ ├── Overview │ │ │ ├── index.tsx │ │ │ └── styles.module.scss │ │ ├── Submission │ │ │ ├── index.tsx │ │ │ └── styles.module.scss │ │ ├── common.tsx │ │ ├── index.tsx │ │ ├── styles.module.scss │ │ └── useDrefOperationalUpdateOptions.ts │ │ ├── DrefPdfPreview │ │ ├── index.tsx │ │ └── styles.module.scss │ │ ├── Emergency │ │ ├── Activities │ │ │ ├── ActivityMap │ │ │ │ ├── index.tsx │ │ │ │ └── styles.module.scss │ │ │ ├── Filters │ │ │ │ ├── index.tsx │ │ │ │ └── styles.module.scss │ │ │ ├── StatsPie │ │ │ │ ├── index.tsx │ │ │ │ └── styles.module.scss │ │ │ ├── index.tsx │ │ │ ├── projectTableColumns.tsx │ │ │ ├── styles.module.scss │ │ │ └── useProjectStats.ts │ │ └── index.js │ │ ├── EmergencyThreeW │ │ ├── index.tsx │ │ └── styles.module.scss │ │ ├── EmergencyThreeWEdit │ │ ├── index.tsx │ │ └── styles.module.scss │ │ ├── FieldReportForm │ │ ├── ActionsFields │ │ │ ├── CovidActionFields.tsx │ │ │ ├── index.tsx │ │ │ └── styles.module.scss │ │ ├── ContextFields │ │ │ ├── index.tsx │ │ │ └── styles.module.scss │ │ ├── EarlyActionsFields │ │ │ ├── index.tsx │ │ │ └── styles.module.scss │ │ ├── ResponseFields │ │ │ ├── index.tsx │ │ │ └── styles.module.scss │ │ ├── RiskAnalysisFields │ │ │ ├── index.tsx │ │ │ └── styles.module.scss │ │ ├── SituationFields │ │ │ ├── index.tsx │ │ │ └── styles.module.scss │ │ ├── common.tsx │ │ ├── index.tsx │ │ ├── styles.module.scss │ │ └── useFieldReportOptions.ts │ │ ├── FinalReportForm │ │ ├── EventDetails │ │ │ ├── index.tsx │ │ │ └── styles.module.scss │ │ ├── Needs │ │ │ ├── index.tsx │ │ │ └── styles.module.scss │ │ ├── ObsoletePayloadResolutionModal │ │ │ ├── index.tsx │ │ │ └── styles.module.scss │ │ ├── Operation │ │ │ ├── IndicatorInput │ │ │ │ ├── index.tsx │ │ │ │ └── styles.module.scss │ │ │ ├── InterventionInput │ │ │ │ ├── index.tsx │ │ │ │ └── styles.module.scss │ │ │ ├── index.tsx │ │ │ └── styles.module.scss │ │ ├── Overview │ │ │ ├── index.tsx │ │ │ └── styles.module.scss │ │ ├── Submission │ │ │ ├── index.tsx │ │ │ └── styles.module.scss │ │ ├── common.tsx │ │ ├── index.tsx │ │ ├── styles.module.scss │ │ └── useDreFinalReportOptions.ts │ │ ├── FinalReportPdfPreview │ │ ├── index.tsx │ │ └── styles.module.scss │ │ ├── FlashUpdateApplicationForm │ │ ├── ActionsInput │ │ │ ├── ActionInput │ │ │ │ ├── index.tsx │ │ │ │ └── styles.module.scss │ │ │ └── index.tsx │ │ ├── Context │ │ │ ├── CountryProvinceInput │ │ │ │ ├── index.tsx │ │ │ │ └── styles.module.scss │ │ │ ├── GraphicInput │ │ │ │ ├── index.tsx │ │ │ │ └── styles.module.scss │ │ │ ├── MapInput │ │ │ │ ├── index.tsx │ │ │ │ └── styles.module.scss │ │ │ ├── ReferenceInput │ │ │ │ ├── index.tsx │ │ │ │ └── styles.module.scss │ │ │ ├── index.tsx │ │ │ └── styles.module.scss │ │ ├── FocalPoint │ │ │ └── index.tsx │ │ ├── common.tsx │ │ ├── index.tsx │ │ ├── styles.module.scss │ │ └── useFlashUpdateFormOptions.ts │ │ ├── FlashUpdateReport │ │ ├── ExportButton │ │ │ ├── index.tsx │ │ │ └── styles.module.scss │ │ ├── ShareButton │ │ │ ├── index.tsx │ │ │ └── styles.module.scss │ │ ├── index.tsx │ │ └── styles.module.scss │ │ ├── FourHundredFour │ │ ├── index.tsx │ │ └── styles.module.scss │ │ ├── GlobalRiskWatch │ │ ├── ImminentEvents │ │ │ ├── ImminentEventsADAM │ │ │ │ ├── index.tsx │ │ │ │ └── styles.module.scss │ │ │ ├── ImminentEventsPDC │ │ │ │ ├── index.tsx │ │ │ │ └── styles.module.scss │ │ │ ├── index.tsx │ │ │ └── styles.module.scss │ │ ├── SeasonalRisk │ │ │ ├── CountryRiskBarChart │ │ │ │ ├── index.tsx │ │ │ │ └── styles.module.scss │ │ │ ├── Filters │ │ │ │ ├── FilterOutput │ │ │ │ │ ├── index.tsx │ │ │ │ │ └── styles.module.scss │ │ │ │ ├── index.tsx │ │ │ │ └── styles.module.scss │ │ │ ├── Map │ │ │ │ ├── Choropleth │ │ │ │ │ ├── index.tsx │ │ │ │ │ └── styles.module.scss │ │ │ │ ├── index.tsx │ │ │ │ └── styles.module.scss │ │ │ ├── common.ts │ │ │ ├── index.tsx │ │ │ └── styles.module.scss │ │ ├── index.tsx │ │ └── styles.module.scss │ │ ├── GlobalThreeW │ │ ├── Charts │ │ │ ├── index.tsx │ │ │ └── styles.module.scss │ │ ├── Filters │ │ │ ├── index.tsx │ │ │ └── styles.module.scss │ │ ├── Map │ │ │ ├── index.tsx │ │ │ └── styles.module.scss │ │ ├── common.ts │ │ ├── index.tsx │ │ └── styles.module.scss │ │ ├── NewThreeW │ │ ├── index.tsx │ │ └── styles.module.scss │ │ ├── RegionalRiskWatch │ │ ├── ImminentEvents │ │ │ ├── ImminentEventsADAM │ │ │ │ ├── index.tsx │ │ │ │ └── styles.module.scss │ │ │ ├── ImminentEventsGDACS │ │ │ │ ├── index.tsx │ │ │ │ └── styles.module.scss │ │ │ ├── ImminentEventsMeteoSwiss │ │ │ │ ├── index.tsx │ │ │ │ └── styles.module.scss │ │ │ ├── ImminentEventsPDC │ │ │ │ ├── index.tsx │ │ │ │ └── styles.module.scss │ │ │ ├── index.tsx │ │ │ └── styles.module.scss │ │ ├── SeasonalRisk │ │ │ ├── CountryRiskBarChart │ │ │ │ ├── index.tsx │ │ │ │ └── styles.module.scss │ │ │ ├── Filters │ │ │ │ ├── FilterOutput │ │ │ │ │ ├── index.tsx │ │ │ │ │ └── styles.module.scss │ │ │ │ ├── index.tsx │ │ │ │ └── styles.module.scss │ │ │ ├── HistoricalChart │ │ │ │ ├── index.tsx │ │ │ │ └── styles.module.scss │ │ │ ├── Map │ │ │ │ ├── Choropleth │ │ │ │ │ ├── index.tsx │ │ │ │ │ └── styles.module.scss │ │ │ │ ├── LegendItem │ │ │ │ │ ├── index.tsx │ │ │ │ │ └── styles.module.scss │ │ │ │ ├── MapLegend │ │ │ │ │ ├── index.tsx │ │ │ │ │ └── styles.module.scss │ │ │ │ ├── index.tsx │ │ │ │ └── styles.module.scss │ │ │ ├── common.ts │ │ │ ├── index.tsx │ │ │ └── styles.module.scss │ │ ├── index.tsx │ │ └── styles.module.scss │ │ ├── RegionalThreeW │ │ ├── activity-details.js │ │ ├── budget-overview.js │ │ ├── country-table.js │ │ ├── export-button.js │ │ ├── index.js │ │ ├── map.js │ │ ├── movement-activities-filters.js │ │ ├── ns-activities-filters.js │ │ ├── people-overview.js │ │ └── status-overview.js │ │ ├── Search │ │ ├── CountryList │ │ │ ├── index.tsx │ │ │ └── styles.module.scss │ │ ├── EmergencyPlanningTable │ │ │ ├── index.tsx │ │ │ └── styles.module.scss │ │ ├── EmergencyTable │ │ │ ├── index.tsx │ │ │ └── styles.module.scss │ │ ├── FieldReportTable │ │ │ ├── index.tsx │ │ │ └── styles.module.scss │ │ ├── ProjectTable │ │ │ ├── index.tsx │ │ │ └── styles.module.scss │ │ ├── ProvinceList │ │ │ ├── index.tsx │ │ │ └── styles.module.scss │ │ ├── RapidDeploymentTable │ │ │ ├── index.tsx │ │ │ └── styles.module.scss │ │ ├── RegionList │ │ │ ├── index.tsx │ │ │ └── styles.module.scss │ │ ├── SurgeAlertTable │ │ │ ├── index.tsx │ │ │ └── styles.module.scss │ │ ├── SurgeDeploymentTable │ │ │ ├── index.tsx │ │ │ └── styles.module.scss │ │ ├── index.tsx │ │ └── styles.module.scss │ │ ├── Surge │ │ ├── catalogue-of-surge-services-subpage.js │ │ ├── catalogue-of-surge-services.js │ │ ├── contentData │ │ │ ├── catalogue-of-surge-service-subpage-content.js │ │ │ ├── catalogue-of-surge-services-content.js │ │ │ ├── map-pdf-to-sharepoint.js │ │ │ └── operation-timeline-content.js │ │ ├── operational-timeline.js │ │ └── operationalTimelineToolbox.md │ │ ├── ThreeW │ │ ├── index.tsx │ │ └── styles.module.scss │ │ ├── ThreeWEdit │ │ ├── index.tsx │ │ └── styles.module.scss │ │ ├── TranslationDashboard │ │ ├── index.js │ │ └── styles.module.scss │ │ ├── about.js │ │ ├── account.js │ │ ├── app.js │ │ ├── deployments.js │ │ ├── emergencies.js │ │ ├── emergencyWrapper.js │ │ ├── field-report.js │ │ ├── home.js │ │ ├── login.js │ │ ├── password-change.js │ │ ├── per-assessment.js │ │ ├── preparedness.js │ │ ├── recover-account.js │ │ ├── recover-username.js │ │ ├── region.js │ │ ├── register.js │ │ ├── resend-validation.js │ │ └── table.js ├── styles │ ├── about │ │ └── _global.scss │ ├── components │ │ ├── _backdrop.scss │ │ ├── _common.scss │ │ ├── _dropdown-menu.scss │ │ ├── _formatted-date.scss │ │ ├── _formatted-number.scss │ │ └── _select.scss │ ├── core │ │ ├── _animation.scss │ │ ├── _base.scss │ │ ├── _box-heading-content.scss │ │ ├── _code.scss │ │ ├── _collecticons.scss │ │ ├── _grid.scss │ │ ├── _icomoon.scss │ │ ├── _media.scss │ │ ├── _skins.scss │ │ ├── _tables.scss │ │ ├── _tabs.scss │ │ ├── _typography.scss │ │ └── _utilities.scss │ ├── country │ │ └── _global.scss │ ├── deployments │ │ ├── _catalogueOfSurgeServices.scss │ │ ├── _global.scss │ │ ├── _operationalTimeline.scss │ │ └── _presenting.scss │ ├── emergencies │ │ └── _global.scss │ ├── emergency │ │ └── _global.scss │ ├── field-report │ │ ├── _display.scss │ │ ├── _form.scss │ │ └── _global.scss │ ├── forms │ │ └── per-form.scss │ ├── global │ │ ├── _alerts.scss │ │ ├── _box-heading-content.scss │ │ ├── _breadcrumbs.scss │ │ ├── _buttons.scss │ │ ├── _callouts.scss │ │ ├── _cards.scss │ │ ├── _charts.scss │ │ ├── _drops.scss │ │ ├── _folds.scss │ │ ├── _forms.scss │ │ ├── _frames.scss │ │ ├── _global-banner.scss │ │ ├── _icon-styles.scss │ │ ├── _iframe-embeds.scss │ │ ├── _inpages.scss │ │ ├── _labels.scss │ │ ├── _loading.scss │ │ ├── _login.scss │ │ ├── _modals.scss │ │ ├── _navs.scss │ │ ├── _page-prime-nav.scss │ │ ├── _pages.scss │ │ ├── _panels.scss │ │ ├── _pills.scss │ │ ├── _popovers.scss │ │ ├── _print.scss │ │ ├── _scrollbar-custom.scss │ │ ├── _states.scss │ │ ├── _text-output.scss │ │ ├── _tooltip.scss │ │ └── faram-inputs │ │ │ ├── _faram-checkbox.scss │ │ │ ├── _raw-input.scss │ │ │ ├── _select-input.scss │ │ │ └── _text-input.scss │ ├── header │ │ └── navbar.scss │ ├── home │ │ ├── _global.scss │ │ ├── _highlighted-emergencies.scss │ │ ├── _homemap.scss │ │ └── _presenting.scss │ ├── main.css.json │ ├── main.scss │ ├── preparedness │ │ └── _global.scss │ ├── region │ │ └── _global.scss │ ├── settings │ │ ├── _functions.scss │ │ ├── _mixins.scss │ │ └── _variables.scss │ └── vendor │ │ ├── _normalize.scss │ │ ├── _react-carousel.scss │ │ ├── _react-paginate.scss │ │ └── _react-select.scss └── wdyr.js ├── tsconfig.json └── yarn.lock /.gitattributes: -------------------------------------------------------------------------------- 1 | * text=auto -------------------------------------------------------------------------------- /.github/issue_template.md: -------------------------------------------------------------------------------- 1 | ## Issue 2 | 3 | *Please describe your issue. If possible, include when you first encountered the issue, who it affects, a link to a relevant page, and any other information that might be helpful in diagnosing it's cause.* 4 | 5 | ## Steps to reproduce 6 | 7 | *If you can reliably reproduce the issue, please list the steps taken to do so.* 8 | 9 | ## Expected behavior 10 | 11 | *Please describe how this feature should be working.* 12 | -------------------------------------------------------------------------------- /.github/workflows/add-issue-to-backlog.yml: -------------------------------------------------------------------------------- 1 | name: Add issues to Backlog 2 | 3 | on: 4 | issues: 5 | types: 6 | - opened 7 | 8 | jobs: 9 | add-to-project: 10 | name: Add issue to project 11 | runs-on: ubuntu-latest 12 | steps: 13 | - uses: actions/add-to-project@v0.4.0 14 | with: 15 | project-url: https://github.com/orgs/IFRCGo/projects/12 16 | github-token: ${{ secrets.ADD_TO_PROJECT_PAT }} 17 | -------------------------------------------------------------------------------- /.nvmrc: -------------------------------------------------------------------------------- 1 | 18 2 | -------------------------------------------------------------------------------- /.unimported.json: -------------------------------------------------------------------------------- 1 | { 2 | "entry": ["./src/index.js"], 3 | "ignorePatterns": ["**/node_modules/**", "build/**"], 4 | "ignoreUnimported": ["**/*.d.ts"], 5 | "extensions": [".ts", ".js", ".tsx", ".jsx"], 6 | "aliases": { 7 | "#actions/*": ["./src/root/actions/*"], 8 | "#components/*": ["./src/root/components/*"], 9 | "#config": ["./src/root/config"], 10 | "#hooks/*": ["./src/root/hooks/*"], 11 | "#types/*": ["./src/root/types/*"], 12 | "#types": ["./src/root/types"], 13 | "#lang": ["./src/root/lang"], 14 | "#selectors/*": ["./src/root/selectors/*"], 15 | "#utils/*": ["./src/root/utils/*"], 16 | "#views/*": ["./src/root/views/*"], 17 | "#root/*": ["./src/root/*"] 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /Dockerfile: -------------------------------------------------------------------------------- 1 | FROM node:18.14.1-buster 2 | 3 | LABEL maintainer="Togglecorp dev@togglecorp.com" 4 | 5 | RUN apt-get -y update\ 6 | && apt-get -y install --no-install-recommends git bash 7 | 8 | WORKDIR /code 9 | COPY . /code/ 10 | -------------------------------------------------------------------------------- /config/jest/cssTransform.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | // This is a custom Jest transformer turning style imports into empty objects. 4 | // http://facebook.github.io/jest/docs/en/webpack.html 5 | 6 | module.exports = { 7 | process() { 8 | return 'module.exports = {};'; 9 | }, 10 | getCacheKey() { 11 | // The output is always the same. 12 | return 'cssTransform'; 13 | }, 14 | }; 15 | -------------------------------------------------------------------------------- /config/pnpTs.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | const { resolveModuleName } = require('ts-pnp'); 4 | 5 | exports.resolveModuleName = ( 6 | typescript, 7 | moduleName, 8 | containingFile, 9 | compilerOptions, 10 | resolutionHost 11 | ) => { 12 | return resolveModuleName( 13 | moduleName, 14 | containingFile, 15 | compilerOptions, 16 | resolutionHost, 17 | typescript.resolveModuleName 18 | ); 19 | }; 20 | 21 | exports.resolveTypeReferenceDirective = ( 22 | typescript, 23 | moduleName, 24 | containingFile, 25 | compilerOptions, 26 | resolutionHost 27 | ) => { 28 | return resolveModuleName( 29 | moduleName, 30 | containingFile, 31 | compilerOptions, 32 | resolutionHost, 33 | typescript.resolveTypeReferenceDirective 34 | ); 35 | }; 36 | -------------------------------------------------------------------------------- /cypress-test.sh: -------------------------------------------------------------------------------- 1 | # Please check the details and the usable scripts here: 2 | # https://github.com/IFRCGo/go-infrastructure/tree/develop/e2e 3 | 4 | cd ~/V/test/cypress/; ./start 5 | -------------------------------------------------------------------------------- /docker-compose.yml: -------------------------------------------------------------------------------- 1 | version: '3.2' 2 | 3 | services: 4 | frontend: 5 | image: ifrc/go-frontend:latest 6 | build: ./ 7 | tty: true 8 | env_file: 9 | - .env 10 | command: bash -c 'git config --global --add safe.directory /code ; yarn install --frozen-lockfile && yarn start' 11 | # This git config command ^^^^^^ is required by git-revision-webpack-plugin – otherwise: 12 | # Command failed: git rev-parse HEAD, detected dubious ownership in repository 13 | volumes: 14 | - ./:/code 15 | ports: 16 | - '3000:3000' 17 | 18 | -------------------------------------------------------------------------------- /public/humans.txt: -------------------------------------------------------------------------------- 1 | _____ _ _ _____ _ 2 | | _ \ | | | | / ___| | | 3 | | | | |_____ _____| | ___ _ __ _ __ ___ ___ _ __ | |_ \ `--. ___ ___ __| | 4 | | | | / _ \ \ / / _ \ |/ _ \| '_ \| '_ ` _ \ / _ \ '_ \| __| `--. \/ _ \/ _ \/ _` | 5 | | |/ / __/\ V / __/ | (_) | |_) | | | | | | __/ | | | |_ /\__/ / __/ __/ (_| | 6 | |___/ \___| \_/ \___|_|\___/| .__/|_| |_| |_|\___|_| |_|\__| \____/ \___|\___|\__,_| 7 | | | 8 | |_| 9 | 10 | 11 | /* Team */ -------------------------------------------------------------------------------- /public/robots.txt: -------------------------------------------------------------------------------- 1 | # robotstxt.org/ 2 | 3 | User-agent: * 4 | Disallow: 5 | -------------------------------------------------------------------------------- /src/assets/env.js: -------------------------------------------------------------------------------- 1 | window.appSettings = {}; 2 | 3 | window.appSettings.environmentDisplayName = 'Prod site'; 4 | window.appSettings.apiUrl = 'https://goadmin.ifrc.org/'; 5 | window.appSettings.adminUrl = 'https://goadmin.ifrc.org/'; 6 | window.appSettings.fdrsAuth = ''; 7 | window.appSettings.mbtoken = ''; 8 | window.appSettings.showEnvBanner = 'false'; 9 | window.appSettings.riskApi = 'https://go-risk-staging.northeurope.cloudapp.azure.com/'; 10 | window.appSettings.riskAdminUrl = 'https://go-risk-staging.northeurope.cloudapp.azure.com/'; 11 | window.appSettings.tinyApiKey = ''; 12 | window.appSettings.sentryDsn = ''; 13 | window.appSettings.sentryTracesSampleRate = ''; 14 | window.appSettings.sentryNormalizeDepth = ''; 15 | 16 | 17 | -------------------------------------------------------------------------------- /src/assets/graphics/content/.gitkeep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IFRCGo/go-frontend/88eaf132b59b01f56891e4fece048c9809ad2ab5/src/assets/graphics/content/.gitkeep -------------------------------------------------------------------------------- /src/assets/graphics/content/IFRC_Surge_01.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IFRCGo/go-frontend/88eaf132b59b01f56891e4fece048c9809ad2ab5/src/assets/graphics/content/IFRC_Surge_01.jpg -------------------------------------------------------------------------------- /src/assets/graphics/content/IFRC_Surge_02.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IFRCGo/go-frontend/88eaf132b59b01f56891e4fece048c9809ad2ab5/src/assets/graphics/content/IFRC_Surge_02.jpg -------------------------------------------------------------------------------- /src/assets/graphics/content/IMRoles.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IFRCGo/go-frontend/88eaf132b59b01f56891e4fece048c9809ad2ab5/src/assets/graphics/content/IMRoles.jpg -------------------------------------------------------------------------------- /src/assets/graphics/content/Pyramid.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IFRCGo/go-frontend/88eaf132b59b01f56891e4fece048c9809ad2ab5/src/assets/graphics/content/Pyramid.png -------------------------------------------------------------------------------- /src/assets/graphics/content/RIT400.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IFRCGo/go-frontend/88eaf132b59b01f56891e4fece048c9809ad2ab5/src/assets/graphics/content/RIT400.jpg -------------------------------------------------------------------------------- /src/assets/graphics/content/adm.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IFRCGo/go-frontend/88eaf132b59b01f56891e4fece048c9809ad2ab5/src/assets/graphics/content/adm.jpg -------------------------------------------------------------------------------- /src/assets/graphics/content/arc_logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IFRCGo/go-frontend/88eaf132b59b01f56891e4fece048c9809ad2ab5/src/assets/graphics/content/arc_logo.png -------------------------------------------------------------------------------- /src/assets/graphics/content/brc_logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IFRCGo/go-frontend/88eaf132b59b01f56891e4fece048c9809ad2ab5/src/assets/graphics/content/brc_logo.png -------------------------------------------------------------------------------- /src/assets/graphics/content/crc_logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IFRCGo/go-frontend/88eaf132b59b01f56891e4fece048c9809ad2ab5/src/assets/graphics/content/crc_logo.png -------------------------------------------------------------------------------- /src/assets/graphics/content/dnk_logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IFRCGo/go-frontend/88eaf132b59b01f56891e4fece048c9809ad2ab5/src/assets/graphics/content/dnk_logo.png -------------------------------------------------------------------------------- /src/assets/graphics/content/ericsson_logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IFRCGo/go-frontend/88eaf132b59b01f56891e4fece048c9809ad2ab5/src/assets/graphics/content/ericsson_logo.png -------------------------------------------------------------------------------- /src/assets/graphics/content/eru.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IFRCGo/go-frontend/88eaf132b59b01f56891e4fece048c9809ad2ab5/src/assets/graphics/content/eru.jpg -------------------------------------------------------------------------------- /src/assets/graphics/content/fact.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IFRCGo/go-frontend/88eaf132b59b01f56891e4fece048c9809ad2ab5/src/assets/graphics/content/fact.jpg -------------------------------------------------------------------------------- /src/assets/graphics/content/frc_logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IFRCGo/go-frontend/88eaf132b59b01f56891e4fece048c9809ad2ab5/src/assets/graphics/content/frc_logo.png -------------------------------------------------------------------------------- /src/assets/graphics/content/heops.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IFRCGo/go-frontend/88eaf132b59b01f56891e4fece048c9809ad2ab5/src/assets/graphics/content/heops.jpg -------------------------------------------------------------------------------- /src/assets/graphics/content/jrc_logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IFRCGo/go-frontend/88eaf132b59b01f56891e4fece048c9809ad2ab5/src/assets/graphics/content/jrc_logo.png -------------------------------------------------------------------------------- /src/assets/graphics/content/nlrc_logo.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IFRCGo/go-frontend/88eaf132b59b01f56891e4fece048c9809ad2ab5/src/assets/graphics/content/nlrc_logo.jpg -------------------------------------------------------------------------------- /src/assets/graphics/content/operational_timeline_bodi.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | Size limitations – disabled huge SVG 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /src/assets/graphics/content/per_approach_notext.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IFRCGo/go-frontend/88eaf132b59b01f56891e4fece048c9809ad2ab5/src/assets/graphics/content/per_approach_notext.png -------------------------------------------------------------------------------- /src/assets/graphics/content/per_old.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IFRCGo/go-frontend/88eaf132b59b01f56891e4fece048c9809ad2ab5/src/assets/graphics/content/per_old.jpg -------------------------------------------------------------------------------- /src/assets/graphics/content/rdrt.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IFRCGo/go-frontend/88eaf132b59b01f56891e4fece048c9809ad2ab5/src/assets/graphics/content/rdrt.jpg -------------------------------------------------------------------------------- /src/assets/graphics/content/usr.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IFRCGo/go-frontend/88eaf132b59b01f56891e4fece048c9809ad2ab5/src/assets/graphics/content/usr.jpg -------------------------------------------------------------------------------- /src/assets/graphics/content/wiki-help-header1.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /src/assets/graphics/content/wiki-help-section.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IFRCGo/go-frontend/88eaf132b59b01f56891e4fece048c9809ad2ab5/src/assets/graphics/content/wiki-help-section.png -------------------------------------------------------------------------------- /src/assets/graphics/layout/.gitkeep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IFRCGo/go-frontend/88eaf132b59b01f56891e4fece048c9809ad2ab5/src/assets/graphics/layout/.gitkeep -------------------------------------------------------------------------------- /src/assets/graphics/layout/FollowThisOperation.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IFRCGo/go-frontend/88eaf132b59b01f56891e4fece048c9809ad2ab5/src/assets/graphics/layout/FollowThisOperation.png -------------------------------------------------------------------------------- /src/assets/graphics/layout/OpenInGO.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IFRCGo/go-frontend/88eaf132b59b01f56891e4fece048c9809ad2ab5/src/assets/graphics/layout/OpenInGO.png -------------------------------------------------------------------------------- /src/assets/graphics/layout/ViewFullReport.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IFRCGo/go-frontend/88eaf132b59b01f56891e4fece048c9809ad2ab5/src/assets/graphics/layout/ViewFullReport.png -------------------------------------------------------------------------------- /src/assets/graphics/layout/card-mid-line.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /src/assets/graphics/layout/card-tick.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /src/assets/graphics/layout/card-x.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /src/assets/graphics/layout/country-plan.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IFRCGo/go-frontend/88eaf132b59b01f56891e4fece048c9809ad2ab5/src/assets/graphics/layout/country-plan.png -------------------------------------------------------------------------------- /src/assets/graphics/layout/full-screen.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 8 | 54 all 9 | 10 | 11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /src/assets/graphics/layout/go-logo-2020.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IFRCGo/go-frontend/88eaf132b59b01f56891e4fece048c9809ad2ab5/src/assets/graphics/layout/go-logo-2020.png -------------------------------------------------------------------------------- /src/assets/graphics/layout/go-pdf-footer.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IFRCGo/go-frontend/88eaf132b59b01f56891e4fece048c9809ad2ab5/src/assets/graphics/layout/go-pdf-footer.png -------------------------------------------------------------------------------- /src/assets/graphics/layout/ifrc-square.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IFRCGo/go-frontend/88eaf132b59b01f56891e4fece048c9809ad2ab5/src/assets/graphics/layout/ifrc-square.png -------------------------------------------------------------------------------- /src/assets/graphics/layout/tick.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IFRCGo/go-frontend/88eaf132b59b01f56891e4fece048c9809ad2ab5/src/assets/graphics/layout/tick.png -------------------------------------------------------------------------------- /src/assets/graphics/layout/x-thin.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /src/assets/graphics/meta/.gitkeep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IFRCGo/go-frontend/88eaf132b59b01f56891e4fece048c9809ad2ab5/src/assets/graphics/meta/.gitkeep -------------------------------------------------------------------------------- /src/assets/graphics/meta/apple-touch-icon-114x114.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IFRCGo/go-frontend/88eaf132b59b01f56891e4fece048c9809ad2ab5/src/assets/graphics/meta/apple-touch-icon-114x114.png -------------------------------------------------------------------------------- /src/assets/graphics/meta/apple-touch-icon-120x120.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IFRCGo/go-frontend/88eaf132b59b01f56891e4fece048c9809ad2ab5/src/assets/graphics/meta/apple-touch-icon-120x120.png -------------------------------------------------------------------------------- /src/assets/graphics/meta/apple-touch-icon-144x144.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IFRCGo/go-frontend/88eaf132b59b01f56891e4fece048c9809ad2ab5/src/assets/graphics/meta/apple-touch-icon-144x144.png -------------------------------------------------------------------------------- /src/assets/graphics/meta/apple-touch-icon-152x152.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IFRCGo/go-frontend/88eaf132b59b01f56891e4fece048c9809ad2ab5/src/assets/graphics/meta/apple-touch-icon-152x152.png -------------------------------------------------------------------------------- /src/assets/graphics/meta/apple-touch-icon-57x57.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IFRCGo/go-frontend/88eaf132b59b01f56891e4fece048c9809ad2ab5/src/assets/graphics/meta/apple-touch-icon-57x57.png -------------------------------------------------------------------------------- /src/assets/graphics/meta/apple-touch-icon-72x72.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IFRCGo/go-frontend/88eaf132b59b01f56891e4fece048c9809ad2ab5/src/assets/graphics/meta/apple-touch-icon-72x72.png -------------------------------------------------------------------------------- /src/assets/graphics/meta/apple-touch-icon-76x76.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IFRCGo/go-frontend/88eaf132b59b01f56891e4fece048c9809ad2ab5/src/assets/graphics/meta/apple-touch-icon-76x76.png -------------------------------------------------------------------------------- /src/assets/graphics/meta/apple-touch-icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IFRCGo/go-frontend/88eaf132b59b01f56891e4fece048c9809ad2ab5/src/assets/graphics/meta/apple-touch-icon.png -------------------------------------------------------------------------------- /src/assets/graphics/meta/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IFRCGo/go-frontend/88eaf132b59b01f56891e4fece048c9809ad2ab5/src/assets/graphics/meta/favicon.ico -------------------------------------------------------------------------------- /src/assets/icons/collecticons/affected-population.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | -------------------------------------------------------------------------------- /src/assets/icons/collecticons/arrow-right-diagonal.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | -------------------------------------------------------------------------------- /src/assets/icons/collecticons/book.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /src/assets/icons/collecticons/humanitarian-download.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /src/assets/icons/collecticons/humanitarian-other.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /src/assets/icons/collecticons/medium.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/assets/icons/collecticons/triangle-down-grey.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /src/assets/icons/collecticons/youtube.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/assets/icons/icomoon/Read Me.txt: -------------------------------------------------------------------------------- 1 | Open *demo.html* to see a list of all the glyphs in your font along with their codes/ligatures. 2 | 3 | To use the generated font in desktop programs, you can install the TTF font. In order to copy the character associated with each icon, refer to the text box at the bottom right corner of each glyph in demo.html. The character inside this text box may be invisible; but it can still be copied. See this guide for more info: https://icomoon.io/#docs/local-fonts 4 | 5 | You won't need any of the files located under the *demo-files* directory when including the generated font in your own projects. 6 | 7 | You can import *selection.json* back to the IcoMoon app using the *Import Icons* button (or via Main Menu → Manage Projects) to retrieve your icon selection. 8 | -------------------------------------------------------------------------------- /src/assets/icons/icomoon/fonts/icomoon.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IFRCGo/go-frontend/88eaf132b59b01f56891e4fece048c9809ad2ab5/src/assets/icons/icomoon/fonts/icomoon.ttf -------------------------------------------------------------------------------- /src/assets/icons/icomoon/fonts/icomoon.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IFRCGo/go-frontend/88eaf132b59b01f56891e4fece048c9809ad2ab5/src/assets/icons/icomoon/fonts/icomoon.woff -------------------------------------------------------------------------------- /src/index.js: -------------------------------------------------------------------------------- 1 | import './wdyr'; 2 | import React from 'react'; 3 | import ReactDOM from 'react-dom'; 4 | import Root from '#root'; 5 | import 'react-tooltip/dist/react-tooltip.css'; 6 | import '@mapbox/mapbox-gl-draw/dist/mapbox-gl-draw.css'; 7 | import { init } from '@sentry/react'; 8 | 9 | import sentryConfig from './root/sentry'; 10 | import './styles/main.scss'; 11 | 12 | if (sentryConfig) { 13 | init(sentryConfig); 14 | console.info('sentry initialized'); 15 | } 16 | 17 | var isIE = !!document.documentMode; 18 | if (!isIE) { 19 | ReactDOM.render( 20 | , 21 | document.getElementById('app-container') 22 | ); 23 | } 24 | -------------------------------------------------------------------------------- /src/root/Multiplexer/history.ts: -------------------------------------------------------------------------------- 1 | import { createBrowserHistory } from 'history'; 2 | 3 | const browserHistory = createBrowserHistory(); 4 | export default browserHistory; 5 | -------------------------------------------------------------------------------- /src/root/components/AlertContainer/styles.module.scss: -------------------------------------------------------------------------------- 1 | @import '~styles/settings/variables'; 2 | 3 | .alert-container { 4 | position: fixed; 5 | top: 0; 6 | left: 50%; 7 | transform: translateX(-50%); 8 | z-index: 11; 9 | padding: 3em 0; 10 | max-height: calc(100vh - 6em); 11 | overflow: auto; 12 | scrollbar-width: none; 13 | 14 | &::-webkit-scrollbar { 15 | display: none; 16 | } 17 | 18 | .alert { 19 | margin: $spacing*0.5 0; 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /src/root/components/AnonymousRoute.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import { connect } from 'react-redux'; 3 | import { Route, Redirect } from 'react-router-dom'; 4 | 5 | // Route available only if the user is not logged in. 6 | function AnonymousRoute({ 7 | component: Component, 8 | user, 9 | ...otherProps 10 | }) { 11 | const isAuthenticated = user.token; 12 | const render = props => isAuthenticated 13 | ? 14 | : ; 15 | return ; 16 | } 17 | 18 | const mapStateToProps = (state) => ({ 19 | user: state.user.data, 20 | }); 21 | 22 | export default connect(mapStateToProps)(AnonymousRoute); 23 | 24 | -------------------------------------------------------------------------------- /src/root/components/BulletTextArea/styles.module.scss: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IFRCGo/go-frontend/88eaf132b59b01f56891e4fece048c9809ad2ab5/src/root/components/BulletTextArea/styles.module.scss -------------------------------------------------------------------------------- /src/root/components/ButtonLikeLink/index.tsx: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import { Link } from 'react-router-dom'; 3 | 4 | import { 5 | useButtonFeatures, 6 | ButtonFeatureProps 7 | } from '#components/Button'; 8 | 9 | function ButtonLikeLink(props: ButtonFeatureProps & { 10 | to: string; 11 | external?: boolean; 12 | }) { 13 | const { 14 | external, 15 | to, 16 | ...buttonFeatureProps 17 | } = props; 18 | 19 | const linkProps = useButtonFeatures(buttonFeatureProps); 20 | 21 | if (external) { 22 | return ( 23 | 29 | ); 30 | } 31 | 32 | return ( 33 | 37 | ); 38 | } 39 | 40 | export default ButtonLikeLink; 41 | -------------------------------------------------------------------------------- /src/root/components/ButtonLikeLink/styles.module.scss: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IFRCGo/go-frontend/88eaf132b59b01f56891e4fece048c9809ad2ab5/src/root/components/ButtonLikeLink/styles.module.scss -------------------------------------------------------------------------------- /src/root/components/Card/styles.module.scss: -------------------------------------------------------------------------------- 1 | @import '~styles/settings/variables'; 2 | 3 | .card { 4 | background-color: $color-foreground; 5 | border-radius: $base-border-radius; 6 | box-shadow: $base-box-shadow; 7 | padding: $spacing*0.5; 8 | 9 | .title { 10 | padding: $spacing*0.5; 11 | font-weight: $base-font-medium; 12 | text-transform: uppercase; 13 | border-bottom: $base-border-color solid $base-border-width; 14 | } 15 | 16 | .content { 17 | padding: $spacing*0.5; 18 | } 19 | 20 | &.multi-column { 21 | .content { 22 | display: flex; 23 | 24 | >* { 25 | flex-basis: 0; 26 | flex-grow: 1; 27 | } 28 | } 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /src/root/components/Checkbox/styles.module.scss: -------------------------------------------------------------------------------- 1 | @import '~styles/settings/variables'; 2 | 3 | .checkbox { 4 | display: flex; 5 | align-items: flex-start; 6 | cursor: pointer; 7 | gap: $spacing*0.5; 8 | 9 | .checkmark { 10 | display: flex; 11 | flex-shrink: 0; 12 | align-items: center; 13 | font-size: 1.5em; 14 | transition: $duration-transition-medium color ease-in-out; 15 | } 16 | 17 | .input { 18 | display: none; 19 | } 20 | 21 | &.checked { 22 | .checkmark { 23 | color: $primary-color; 24 | } 25 | } 26 | 27 | &:focus, 28 | &:hover { 29 | .checkmark { 30 | color: $primary-color; 31 | } 32 | } 33 | } 34 | 35 | -------------------------------------------------------------------------------- /src/root/components/Checklist/styles.module.scss: -------------------------------------------------------------------------------- 1 | @import '~styles/settings/variables'; 2 | 3 | .checklist { 4 | .checkbox-list-container { 5 | display: flex; 6 | align-items: flex-start; 7 | flex-wrap: wrap; 8 | gap: $spacing; 9 | 10 | >* { 11 | flex-basis: calc(100% / 4 - #{$spacing}); 12 | } 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /src/root/components/Chip/index.tsx: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import { _cs } from '@togglecorp/fujs'; 3 | import { IoClose } from 'react-icons/io5'; 4 | 5 | import Button from '#components/Button'; 6 | 7 | import styles from './styles.module.scss'; 8 | 9 | interface Props { 10 | className?: string; 11 | children?: React.ReactNode; 12 | name: N; 13 | onDismiss: (name: N) => void; 14 | } 15 | 16 | function Chip(props: Props) { 17 | const { 18 | className, 19 | children, 20 | onDismiss, 21 | name, 22 | } = props; 23 | 24 | return ( 25 |
26 | {children} 27 | 34 |
35 | ); 36 | } 37 | 38 | export default Chip; 39 | -------------------------------------------------------------------------------- /src/root/components/Chip/styles.module.scss: -------------------------------------------------------------------------------- 1 | @import '~styles/settings/variables'; 2 | 3 | .chip { 4 | display: flex; 5 | align-items: center; 6 | gap: $spacing*0.75; 7 | border: $base-border-width solid $base-border-color; 8 | padding: $spacing*0.25 $spacing * 0.75; 9 | border-radius: $base-border-radius; 10 | background-color: $grey-mist; 11 | font-size: $font-size-sm; 12 | color: $color-text-light; 13 | } 14 | -------------------------------------------------------------------------------- /src/root/components/ConfirmButton/styles.module.scss: -------------------------------------------------------------------------------- 1 | @import '~styles/settings/_variables.scss'; 2 | 3 | .confirmation-modal { 4 | display: flex; 5 | align-items: center; 6 | justify-content: center; 7 | 8 | .inner-container { 9 | width: 24rem; 10 | min-height: 10rem; 11 | background-color: $white; 12 | border-radius: $base-border-radius; 13 | 14 | .content { 15 | padding: $spacing!important; 16 | } 17 | 18 | .actions { 19 | display: flex; 20 | gap: $spacing; 21 | padding: $spacing; 22 | } 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /src/root/components/DREFFileImport/index.tsx: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | 3 | import GoFileInput, { Props as GoFileInputProps } from '../GoFileInput'; 4 | 5 | type Props = GoFileInputProps & { 6 | } 7 | 8 | function DREFFileImport(props: Props) { 9 | return ( 10 | 18 | ); 19 | } 20 | 21 | export default DREFFileImport; 22 | -------------------------------------------------------------------------------- /src/root/components/DREFFileInput/index.tsx: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | 3 | import GoFileInput, { Props as GoFileInputProps } from '../GoFileInput'; 4 | 5 | type Props = GoFileInputProps & { 6 | } 7 | 8 | function DREFFileInput(props: Props) { 9 | return ( 10 | 14 | ); 15 | } 16 | 17 | export default DREFFileInput; 18 | -------------------------------------------------------------------------------- /src/root/components/DateInput/styles.module.scss: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IFRCGo/go-frontend/88eaf132b59b01f56891e4fece048c9809ad2ab5/src/root/components/DateInput/styles.module.scss -------------------------------------------------------------------------------- /src/root/components/DateOutput/styles.module.scss: -------------------------------------------------------------------------------- 1 | @import '~styles/settings/variables'; 2 | 3 | .date-output { 4 | font-family: $base-font-family; 5 | } 6 | -------------------------------------------------------------------------------- /src/root/components/Description/index.tsx: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import { _cs } from '@togglecorp/fujs'; 3 | 4 | import styles from './styles.module.scss'; 5 | 6 | export interface Props { 7 | className?: string; 8 | children?: React.ReactNode; 9 | } 10 | 11 | function Description(props: Props) { 12 | const { 13 | className, 14 | children, 15 | } = props; 16 | 17 | return ( 18 |
19 | { children } 20 |
21 | ); 22 | } 23 | 24 | export default Description; 25 | -------------------------------------------------------------------------------- /src/root/components/Description/styles.module.scss: -------------------------------------------------------------------------------- 1 | @import '~styles/settings/variables'; 2 | 3 | .description { 4 | color: $color-text-light; 5 | } 6 | -------------------------------------------------------------------------------- /src/root/components/DrefPdfDocument/PageNumberPdf/index.tsx: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import { Image, Text, View } from '@react-pdf/renderer'; 3 | 4 | import pdfStyles from '#utils/pdf/pdfStyles'; 5 | 6 | const logoUrl = '/assets/graphics/layout/go-pdf-footer.png'; 7 | function PageNumberPdf() { 8 | return ( 9 | 13 | ( 16 | `Page ${pageNumber} / ${totalPages}` 17 | )} 18 | /> 19 | 23 | 24 | ); 25 | } 26 | 27 | export default PageNumberPdf; 28 | -------------------------------------------------------------------------------- /src/root/components/DropdownMenuItem/styles.module.scss: -------------------------------------------------------------------------------- 1 | @import '~styles/settings/_variables.scss'; 2 | 3 | .dropdown-menu-item { 4 | display: flex; 5 | width: 100%; 6 | align-items: center; 7 | padding: $spacing*0.5; 8 | 9 | .icon-container { 10 | display: flex; 11 | align-items: center; 12 | font-size: 1.2em; 13 | padding: 0 $spacing*0.5; 14 | } 15 | 16 | .label { 17 | display: flex; 18 | align-items: center; 19 | padding: 0 $spacing*0.5; 20 | font-weight: $base-font-medium; 21 | } 22 | 23 | &:hover { 24 | background-color: lighten($primary-color, 40%); 25 | } 26 | 27 | &.disabled { 28 | pointer-events: none; 29 | opacity: 0.5; 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /src/root/components/ElementFragments/styles.module.scss: -------------------------------------------------------------------------------- 1 | @import '~styles/settings/variables'; 2 | 3 | .icons { 4 | flex-shrink: 0; 5 | display: flex; 6 | align-items: center; 7 | flex-wrap: wrap; 8 | gap: $spacing * 0.5; 9 | } 10 | 11 | .children { 12 | flex-grow: 1; 13 | } 14 | 15 | .actions { 16 | flex-shrink: 0; 17 | display: flex; 18 | align-items: center; 19 | flex-wrap: wrap; 20 | gap: $spacing * 0.5; 21 | } 22 | -------------------------------------------------------------------------------- /src/root/components/EmergencyThreeWForm/SectorInput/ActivityInput/SupplyInput/styles.module.scss: -------------------------------------------------------------------------------- 1 | @import '~styles/settings/variables'; 2 | 3 | .supply-input { 4 | display: flex; 5 | gap: $spacing; 6 | 7 | .item { 8 | width: 20rem; 9 | padding: 0; 10 | } 11 | 12 | .count { 13 | flex-shrink: 0; 14 | width: 10rem; 15 | padding: 0; 16 | } 17 | 18 | .remove-button { 19 | flex-shrink: 0; 20 | margin-top: $spacing*2; 21 | } 22 | 23 | } 24 | -------------------------------------------------------------------------------- /src/root/components/EmergencyThreeWForm/SectorInput/ActivityInput/styles.module.scss: -------------------------------------------------------------------------------- 1 | @import '~styles/settings/variables'; 2 | 3 | .activity { 4 | background-color: $grey-fog; 5 | border-top: 2px solid transparent; 6 | 7 | .input-section { 8 | padding: 0 $spacing!important; 9 | margin: 0!important; 10 | box-shadow: unset; 11 | background-color: $grey-fog; 12 | overflow-y: visible; 13 | } 14 | 15 | .content { 16 | overflow-y: visible; 17 | padding: $spacing; 18 | gap: $spacing*2!important; 19 | } 20 | 21 | .cash-input { 22 | display: flex; 23 | gap: $spacing*2; 24 | } 25 | 26 | .empty-message { 27 | padding: 0 $spacing; 28 | color: $color-text-light; 29 | } 30 | 31 | .point-count-input { 32 | width: 10rem; 33 | } 34 | 35 | &.errored { 36 | border-top-color: $primary-color; 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /src/root/components/EmergencyThreeWForm/SectorInput/CustomActivityInput/CustomSupplyInput/styles.module.scss: -------------------------------------------------------------------------------- 1 | @import '~styles/settings/variables'; 2 | 3 | .custom-supply-input { 4 | display: flex; 5 | gap: $spacing; 6 | 7 | .item { 8 | width: 20rem; 9 | padding: 0; 10 | } 11 | 12 | .count { 13 | flex-shrink: 0; 14 | width: 10rem; 15 | padding: 0; 16 | } 17 | 18 | .remove-button { 19 | flex-shrink: 0; 20 | margin-top: $spacing*2; 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /src/root/components/EmergencyThreeWForm/SectorInput/CustomActivityInput/styles.module.scss: -------------------------------------------------------------------------------- 1 | @import '~styles/settings/variables'; 2 | 3 | .custom-activity { 4 | background-color: $color-background; 5 | border-top: 2px solid transparent; 6 | 7 | .input-section { 8 | background-color: $color-background; 9 | overflow-y: visible; 10 | } 11 | 12 | .content { 13 | overflow-y: visible; 14 | } 15 | 16 | .empty-message { 17 | padding: 0 $spacing; 18 | color: $color-text-light; 19 | } 20 | 21 | .actions { 22 | display: flex; 23 | justify-content: flex-end; 24 | } 25 | 26 | .point-count-input { 27 | width: 10rem; 28 | } 29 | 30 | &.errored { 31 | border-top-color: $primary-color; 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /src/root/components/EmergencyThreeWForm/SectorInput/PointInput/styles.module.scss: -------------------------------------------------------------------------------- 1 | @import '~styles/settings/variables'; 2 | 3 | .point-input { 4 | display: flex; 5 | flex-wrap: wrap; 6 | gap: $spacing; 7 | 8 | .description-input { 9 | width: 20rem; 10 | padding: 0; 11 | } 12 | 13 | .location-input { 14 | width: 7rem; 15 | padding: 0; 16 | } 17 | 18 | .remove-button { 19 | flex-shrink: 0; 20 | margin-top: $spacing; 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /src/root/components/EmergencyThreeWForm/SectorInput/styles.module.scss: -------------------------------------------------------------------------------- 1 | @import '~styles/settings/variables'; 2 | 3 | .sector-input { 4 | background-color: $white; 5 | padding: $spacing; 6 | overflow-x: auto; 7 | 8 | .content { 9 | display: flex; 10 | flex-direction: column; 11 | gap: $spacing; 12 | padding: $spacing!important; 13 | 14 | .actions { 15 | display: flex; 16 | justify-content: flex-end; 17 | } 18 | 19 | .custom-activity-list, 20 | .activity-list { 21 | display: flex; 22 | flex-direction: column; 23 | gap: $spacing*0.5; 24 | } 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /src/root/components/EmptyMessage/index.tsx: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import { _cs } from '@togglecorp/fujs'; 3 | 4 | import Container from '#components/Container'; 5 | import LanguageContext from '#root/languageContext'; 6 | import styles from './styles.module.scss'; 7 | 8 | interface Props { 9 | className?: string; 10 | } 11 | 12 | function EmptyMessage(props: Props) { 13 | const { className } = props; 14 | const { strings } = React.useContext(LanguageContext); 15 | 16 | return ( 17 | 21 |

22 | {strings.emptyMessage} 23 |

24 |

25 | {strings.emptyMessageHelpText} 26 |

27 |
28 | ); 29 | } 30 | 31 | export default EmptyMessage; 32 | -------------------------------------------------------------------------------- /src/root/components/EmptyMessage/styles.module.scss: -------------------------------------------------------------------------------- 1 | @import '~styles/settings/variables'; 2 | 3 | .empty-message { 4 | padding: $spacing*3 $spacing; 5 | 6 | p { 7 | margin: 0; 8 | text-align: center; 9 | color: $color-text-message; 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /src/root/components/EnvironmentBanner/index.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import _cs from 'classnames'; 3 | 4 | import styles from './styles.module.scss'; 5 | 6 | function EnvironmentBanner({ 7 | className, 8 | }) { 9 | //const { NODE_ENV: currentEnv } = process.env; 10 | 11 | if (window.appSettings.showEnvBanner === 'false') { 12 | return null; 13 | } 14 | 15 | const bannerDescription = window.appSettings.environmentDisplayName; 16 | 17 | return ( 18 |
25 | {bannerDescription} 26 |
27 | ); 28 | } 29 | 30 | export default EnvironmentBanner; 31 | -------------------------------------------------------------------------------- /src/root/components/EnvironmentBanner/styles.module.scss: -------------------------------------------------------------------------------- 1 | .environment-banner { 2 | text-transform: uppercase; 3 | } 4 | -------------------------------------------------------------------------------- /src/root/components/ExpandableContainer/styles.module.scss: -------------------------------------------------------------------------------- 1 | .expandable-container { 2 | .header { 3 | cursor: pointer; 4 | } 5 | } 6 | -------------------------------------------------------------------------------- /src/root/components/ExportableView/ExportButton.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | 3 | import exportContext from './exportContext'; 4 | 5 | function ExportButton(p) { 6 | const { startExport } = React.useContext(exportContext); 7 | 8 | const handleExportButtonClick = React.useCallback(() => { 9 | startExport(); 10 | }, [startExport]); 11 | 12 | const { 13 | className, 14 | children = 'Export', 15 | } = p; 16 | 17 | return ( 18 | 24 | ); 25 | } 26 | 27 | export default ExportButton; 28 | -------------------------------------------------------------------------------- /src/root/components/ExportableView/ExportContainer.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import _cs from 'classnames'; 3 | 4 | import exportContext from './exportContext'; 5 | 6 | function ExportContainer(p) { 7 | const { 8 | setContainerRef, 9 | isExporting, 10 | } = React.useContext(exportContext); 11 | const containerRef = React.useRef(); 12 | 13 | React.useEffect(() => { 14 | setContainerRef(containerRef); 15 | }, [setContainerRef, containerRef]); 16 | 17 | const { 18 | className, 19 | exportClassName, 20 | children, 21 | } = p; 22 | 23 | return ( 24 |
31 | { children } 32 |
33 | ); 34 | } 35 | 36 | export default ExportContainer; 37 | -------------------------------------------------------------------------------- /src/root/components/ExportableView/ExportFooter.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import _cs from 'classnames'; 3 | 4 | import Translate from '#components/Translate'; 5 | 6 | import ExportOnlyContent from './ExportOnlyContent'; 7 | import styles from './styles.module.scss'; 8 | 9 | function ExportHeader (p) { 10 | const { 11 | className, 12 | mode, 13 | children, 14 | } = p; 15 | 16 | return ( 17 | 21 | { children ? ( 22 | { children } 23 | ) : ( 24 | 25 | )} 26 | 27 | ); 28 | } 29 | 30 | export default ExportHeader; 31 | -------------------------------------------------------------------------------- /src/root/components/ExportableView/exportContext.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | 3 | const exportContext = React.createContext({ 4 | isPreviewMode: false, 5 | isExporting: false, 6 | }); 7 | 8 | export default exportContext; 9 | -------------------------------------------------------------------------------- /src/root/components/FileInput/styles.module.scss: -------------------------------------------------------------------------------- 1 | @import '~styles/settings/variables'; 2 | 3 | .file-input { 4 | .input { 5 | display: none; 6 | } 7 | 8 | .input-wrapper { 9 | display: flex; 10 | position: relative; 11 | align-items: center; 12 | flex-grow: 1; 13 | } 14 | 15 | .status { 16 | padding: 0 $spacing; 17 | } 18 | 19 | :global { 20 | .go-input-internal-input-section { 21 | border: 0; 22 | } 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /src/root/components/FlashUpdateFileInput/index.tsx: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | 3 | import GoFileInput, { Props as GoFileInputProps } from '../GoFileInput'; 4 | 5 | type Props = GoFileInputProps & { 6 | }; 7 | 8 | function InformalUpdateFileInput(props: Props) { 9 | if (props.multiple) { 10 | return ( 11 | 17 | ); 18 | } 19 | 20 | return ( 21 | 26 | ); 27 | } 28 | 29 | export default InformalUpdateFileInput; 30 | -------------------------------------------------------------------------------- /src/root/components/Footer/styles.module.scss: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IFRCGo/go-frontend/88eaf132b59b01f56891e4fece048c9809ad2ab5/src/root/components/Footer/styles.module.scss -------------------------------------------------------------------------------- /src/root/components/GoMapDisclaimer/styles.module.scss: -------------------------------------------------------------------------------- 1 | @import '~styles/settings/_variables.scss'; 2 | 3 | .go-map-disclaimer { 4 | font-size: $font-size-sm!important; 5 | opacity: 0.5; 6 | } 7 | 8 | .attribution { 9 | display: flex; 10 | gap: $spacing*0.5; 11 | } 12 | -------------------------------------------------------------------------------- /src/root/components/Header/styles.module.scss: -------------------------------------------------------------------------------- 1 | @import '~styles/settings/variables'; 2 | 3 | .header { 4 | color: inherit; 5 | } 6 | -------------------------------------------------------------------------------- /src/root/components/InfoPopup/styles.module.scss: -------------------------------------------------------------------------------- 1 | @import '~styles/settings/variables'; 2 | 3 | .info-popup { 4 | display: flex; 5 | align-items: center; 6 | gap: $spacing*0.5; 7 | 8 | .icon { 9 | display: flex; 10 | font-size: 1.33em; 11 | line-height: 1; 12 | } 13 | } 14 | 15 | .dropdown-container { 16 | padding: $spacing*0.5; 17 | max-width: 24rem; 18 | 19 | .content { 20 | padding: $spacing*0.5 $spacing!important; 21 | font-size: $font-size-sm; 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /src/root/components/InputElementFragments/styles.module.scss: -------------------------------------------------------------------------------- 1 | @import '~styles/settings/variables'; 2 | 3 | .icons { 4 | display: flex; 5 | align-items: center; 6 | flex-shrink: 0; 7 | padding: 0 $spacing * 0.25; 8 | } 9 | 10 | .children { 11 | display: flex; 12 | align-items: center; 13 | flex-grow: 1; 14 | padding: 0 $spacing * 0.25; 15 | } 16 | 17 | .actions { 18 | display: flex; 19 | align-items: center; 20 | flex-shrink: 0; 21 | padding: 0 $spacing * 0.25; 22 | } 23 | -------------------------------------------------------------------------------- /src/root/components/InputError/styles.module.scss: -------------------------------------------------------------------------------- 1 | @import '~styles/settings/variables'; 2 | 3 | .input-error { 4 | position: relative; 5 | margin-top: 6px; 6 | 7 | .tip { 8 | width: 14px; 9 | height: 6px; 10 | top: -6px; 11 | left: 20px; 12 | clip-path: polygon(50% 0%, 0% 100%, 100% 100%); 13 | position: absolute; 14 | background-color: $danger-color; 15 | } 16 | 17 | .content { 18 | border-radius: $base-border-radius; 19 | display: flex; 20 | align-items: center; 21 | background-color: $danger-color; 22 | color: $color-text-on-dark; 23 | font-weight: $base-font-medium; 24 | font-size: $font-size-xs; 25 | padding: $spacing; 26 | 27 | .icon { 28 | margin-right: $spacing; 29 | font-size: $font-size-lg; 30 | flex-shrink: 0; 31 | align-self: flex-start; 32 | } 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /src/root/components/InputLabel/index.tsx: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import { _cs } from '@togglecorp/fujs'; 3 | 4 | import styles from './styles.module.scss'; 5 | 6 | export interface Props { 7 | children?: React.ReactNode; 8 | className?: string; 9 | disabled?: boolean; 10 | } 11 | 12 | function InputLabel(props: Props) { 13 | const { 14 | children, 15 | className, 16 | disabled, 17 | } = props; 18 | 19 | if (!children) { 20 | return null; 21 | } 22 | 23 | return ( 24 |
32 | { children } 33 |
34 | ); 35 | } 36 | 37 | export default InputLabel; 38 | -------------------------------------------------------------------------------- /src/root/components/InputLabel/styles.module.scss: -------------------------------------------------------------------------------- 1 | @import '~styles/settings/variables'; 2 | 3 | .input-label { 4 | color: $color-input-label; 5 | padding: 0 $spacing; 6 | } 7 | -------------------------------------------------------------------------------- /src/root/components/Link/styles.module.scss: -------------------------------------------------------------------------------- 1 | @import '~styles/settings/variables'; 2 | 3 | .link { 4 | text-decoration: underline; 5 | 6 | &.table { 7 | font-weight: $base-font-medium; 8 | } 9 | &:hover { 10 | color: $primary-color; 11 | opacity: 1; 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /src/root/components/ListView/Message/styles.module.scss: -------------------------------------------------------------------------------- 1 | @import '~styles/settings/variables'; 2 | 3 | .message { 4 | color: $primary-color; 5 | } -------------------------------------------------------------------------------- /src/root/components/MapTooltipContent/styles.module.scss: -------------------------------------------------------------------------------- 1 | @import '~styles/settings/variables'; 2 | 3 | .map-tooltip-content { 4 | border: $base-border-width solid $base-border-color; 5 | width: 100%; 6 | height: 100%; 7 | overflow: auto; 8 | display: flex; 9 | flex-direction: column; 10 | 11 | .header { 12 | flex-shrink: 0; 13 | padding: $spacing*0.5 $spacing*3*0.125; 14 | border-bottom: $base-border-width solid $base-border-color; 15 | 16 | .normal-title { 17 | padding: 0 $spacing*0.5; 18 | } 19 | } 20 | 21 | .content { 22 | flex-grow: 1; 23 | padding: $spacing*0.25; 24 | overflow: auto; 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /src/root/components/NewGlobalLoading/styles.module.scss: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IFRCGo/go-frontend/88eaf132b59b01f56891e4fece048c9809ad2ab5/src/root/components/NewGlobalLoading/styles.module.scss -------------------------------------------------------------------------------- /src/root/components/NonFieldError/styles.module.scss: -------------------------------------------------------------------------------- 1 | @import '~styles/settings/variables'; 2 | 3 | .non-field-error { 4 | color: $danger-color; 5 | font-weight: $base-font-bold; 6 | padding: $spacing*0.5; 7 | 8 | animation: flash $duration-animation-fast 5 ease-in-out; 9 | animation-delay: $duration-animation-medium; 10 | } 11 | 12 | @keyframes flash { 13 | 0% { 14 | opacity: 1; 15 | } 16 | 50% { 17 | opacity: 0.7; 18 | } 19 | 100% { 20 | opacity: 1; 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /src/root/components/NumberInput/styles.module.scss: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IFRCGo/go-frontend/88eaf132b59b01f56891e4fece048c9809ad2ab5/src/root/components/NumberInput/styles.module.scss -------------------------------------------------------------------------------- /src/root/components/NumberOutput/styles.module.scss: -------------------------------------------------------------------------------- 1 | @import '~styles/settings/variables'; 2 | 3 | .number-output { 4 | display: flex; 5 | font-family: $base-font-family; 6 | font-size: inherit; 7 | 8 | .prefix, 9 | .sign, 10 | .number, 11 | .normalization-suffix, 12 | .suffix { 13 | white-space: nowrap; 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /src/root/components/Page/styles.module.scss: -------------------------------------------------------------------------------- 1 | @import '~styles/settings/variables'; 2 | 3 | .page { 4 | position: relative; 5 | 6 | .main-section { 7 | padding: $spacing*2 0; 8 | } 9 | 10 | &.with-main-content-background { 11 | .page-header { 12 | background-color: $color-background; 13 | } 14 | 15 | .main-section { 16 | background-color: $color-foreground; 17 | } 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /src/root/components/PageHeader/styles.module.scss: -------------------------------------------------------------------------------- 1 | @import '~styles/settings/variables'; 2 | 3 | .page-header { 4 | display: flex; 5 | flex-direction: column; 6 | gap: $spacing; 7 | padding: $spacing*2 0; 8 | 9 | .container { 10 | --header-padding: 0; 11 | padding-top: 0; 12 | 13 | .main-content { 14 | display: flex; 15 | flex-direction: column; 16 | align-items: center; 17 | gap: $spacing*2; 18 | 19 | padding: $spacing*6 $spacing*2 $spacing*3 $spacing*2; 20 | 21 | .heading { 22 | text-align: center; 23 | } 24 | 25 | .description { 26 | text-align: center; 27 | max-width: 48rem; 28 | } 29 | } 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /src/root/components/Pager/styles.module.scss: -------------------------------------------------------------------------------- 1 | @import '~styles/settings/variables'; 2 | 3 | .pager { 4 | .page-list { 5 | display: flex; 6 | align-items: center; 7 | 8 | .page-button { 9 | display: flex; 10 | align-items: center; 11 | justify-content: center; 12 | width: 2.2em; 13 | height: 2.2em; 14 | 15 | &.active { 16 | background-color: $primary-color; 17 | color: $color-text-on-dark; 18 | border-radius: 50%; 19 | } 20 | 21 | &:disabled { 22 | opacity: $opacity-disabled-element; 23 | } 24 | } 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /src/root/components/PdfTextOutput/pdfStyles.ts: -------------------------------------------------------------------------------- 1 | import { StyleSheet } from "@react-pdf/renderer"; 2 | import * as styles from '#utils/pdf/pdfVariables'; 3 | 4 | const pdfStyles = StyleSheet.create({ 5 | 6 | oneByThree: { 7 | width: '33.33%', 8 | }, 9 | twoByThree: { 10 | width: '66.66%', 11 | }, 12 | threeByThree: { 13 | width: '99.99%', 14 | }, 15 | oneByTwo: { 16 | width: '50%', 17 | }, 18 | textOutput: { 19 | backgroundColor: styles.COLOR_BACKGROUND, 20 | margin: 1, 21 | padding: styles.TABLE_CELL_PADDING, 22 | }, 23 | 24 | textOutputLabel: { 25 | fontFamily: 'OpenSans', 26 | fontWeight: 'medium', 27 | }, 28 | 29 | textOutputValue: { 30 | fontFamily: 'OpenSans', 31 | fontWeight: 'extrabold', 32 | }, 33 | }); 34 | 35 | export default pdfStyles; 36 | -------------------------------------------------------------------------------- /src/root/components/ProgressBar/styles.module.scss: -------------------------------------------------------------------------------- 1 | @import '~styles/settings/variables'; 2 | 3 | .progress { 4 | width: 8rem; 5 | 6 | .progress-label { 7 | display: flex; 8 | justify-content: center; 9 | } 10 | 11 | .progress-bar { 12 | background-color: $grey-titanium; 13 | height: 0.25rem; 14 | 15 | .progress-done { 16 | background: $primary-color; 17 | height: 100%; 18 | opacity: 1; 19 | } 20 | } 21 | } 22 | .progress-label-bar { 23 | width: 10rem; 24 | } 25 | -------------------------------------------------------------------------------- /src/root/components/RadioInput/styles.module.scss: -------------------------------------------------------------------------------- 1 | @import '~styles/settings/variables'; 2 | 3 | .radio-input { 4 | position: relative; 5 | 6 | .radio-list-container { 7 | display: flex; 8 | flex-wrap: wrap; 9 | gap: $spacing; 10 | } 11 | 12 | &.disabled { 13 | opacity: $opacity-disabled-element; 14 | filter: saturate(50%); 15 | } 16 | 17 | .clear-button { 18 | position: absolute; 19 | inset-inline-end: 0; 20 | inset-block-start: 0; 21 | background-color: transparent; 22 | border: 0; 23 | cursor: pointer; 24 | transition: $duration-transition-medium opacity ease-in-out; 25 | opacity: 0; 26 | } 27 | 28 | &:hover { 29 | .clear-button { 30 | z-index: 1; 31 | opacity: 1; 32 | } 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /src/root/components/RawButton/styles.module.scss: -------------------------------------------------------------------------------- 1 | .raw-button { 2 | position: relative; 3 | outline: none; 4 | border: 0; 5 | background-color: transparent; 6 | cursor: pointer; 7 | padding: 0; 8 | color: inherit; 9 | font-family: inherit; 10 | font-size: inherit; 11 | } 12 | -------------------------------------------------------------------------------- /src/root/components/RawInput/styles.module.scss: -------------------------------------------------------------------------------- 1 | @import '~styles/settings/variables'; 2 | 3 | .raw-input { 4 | margin: unset; 5 | outline: unset; 6 | border: unset; 7 | padding: unset; 8 | width: 100%; 9 | color: inherit; 10 | background-color: unset; 11 | font-family: inherit; 12 | font-weight: inherit; 13 | font-size: inherit; 14 | } 15 | -------------------------------------------------------------------------------- /src/root/components/RawTextArea/styles.module.scss: -------------------------------------------------------------------------------- 1 | @import '~styles/settings/variables'; 2 | 3 | .raw-input { 4 | margin: 0; 5 | outline: 0; 6 | border: 0; 7 | background-color: transparent; 8 | padding: 0; 9 | width: 100%; 10 | color: inherit; 11 | font-family: inherit; 12 | font-size: inherit; 13 | } 14 | -------------------------------------------------------------------------------- /src/root/components/ReducedListDisplay/styles.module.scss: -------------------------------------------------------------------------------- 1 | @import '~styles/settings/variables'; 2 | 3 | .reduced-list-label { 4 | text-decoration: underline; 5 | font-weight: $base-font-medium; 6 | color: $secondary-color; 7 | padding: 0; 8 | 9 | &:hover, &:focus { 10 | color: $primary-color; 11 | opacity: 1; 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /src/root/components/RegionOutput/styles.module.scss: -------------------------------------------------------------------------------- 1 | @import '~styles/settings/variables'; 2 | 3 | .region-output { 4 | display: flex; 5 | flex-direction: column; 6 | padding: $spacing; 7 | gap: $spacing; 8 | 9 | .district { 10 | .district-label { 11 | font-weight: $font-weight-medium; 12 | } 13 | 14 | .admin-two-list { 15 | font-size: $font-size-sm; 16 | } 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /src/root/components/RichTextArea/styles.module.scss: -------------------------------------------------------------------------------- 1 | .rich-text-area { 2 | position: relative; 3 | z-index: 0; 4 | 5 | :global { 6 | .tox-tinymce { 7 | border: unset; 8 | 9 | .tox-editor-container { 10 | .tox-editor-header { 11 | .tox-toolbar-overlord { 12 | .tox-toolbar__primary { 13 | background-color: unset; 14 | background: unset; 15 | } 16 | } 17 | } 18 | 19 | .tox-edit-area__iframe { 20 | background-color: unset; 21 | } 22 | } 23 | 24 | .tox-statusbar { 25 | background-color: unset; 26 | } 27 | } 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /src/root/components/RichTextOutput/styles.module.scss: -------------------------------------------------------------------------------- 1 | @import '~styles/settings/variables'; 2 | 3 | .rich-text-output { 4 | p { 5 | margin: $spacing*0.5 0; 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /src/root/components/RiskImminentEventMap/ADAMEventMap/Sidebar/styles.module.scss: -------------------------------------------------------------------------------- 1 | @import '~styles/settings/variables'; 2 | 3 | .sidebar { 4 | .event-list { 5 | margin: $spacing*0.5 0; 6 | display: flex; 7 | flex-direction: column; 8 | gap: $spacing*0.25; 9 | 10 | scrollbar-gutter: stable; 11 | overflow-y: hidden; 12 | display: flex; 13 | flex-direction: column; 14 | 15 | &:hover { 16 | overflow-y: auto; 17 | } 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /src/root/components/RiskImminentEventMap/GDACSEventMap/Sidebar/styles.module.scss: -------------------------------------------------------------------------------- 1 | @import '~styles/settings/variables'; 2 | 3 | .sidebar { 4 | .event-list { 5 | margin: $spacing*0.5 0; 6 | display: flex; 7 | flex-direction: column; 8 | gap: $spacing*0.25; 9 | 10 | scrollbar-gutter: stable; 11 | overflow-y: hidden; 12 | display: flex; 13 | flex-direction: column; 14 | 15 | &:hover { 16 | overflow-y: auto; 17 | } 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /src/root/components/RiskImminentEventMap/MeteoSwissEvent/Sidebar/styles.module.scss: -------------------------------------------------------------------------------- 1 | @import '~styles/settings/variables'; 2 | 3 | .sidebar { 4 | --overflow: auto; 5 | 6 | .event-list { 7 | padding: 0 $spacing*0.5!important; 8 | margin: $spacing*0.5 0; 9 | display: flex; 10 | flex-direction: column; 11 | gap: $spacing*0.25; 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /src/root/components/RiskImminentEventMap/PDCEventMap/Sidebar/styles.module.scss: -------------------------------------------------------------------------------- 1 | @import '~styles/settings/variables'; 2 | 3 | .sidebar { 4 | .event-list { 5 | margin: $spacing*0.5 0; 6 | display: flex; 7 | flex-direction: column; 8 | gap: $spacing*0.25; 9 | 10 | scrollbar-gutter: stable; 11 | overflow-y: hidden; 12 | display: flex; 13 | flex-direction: column; 14 | 15 | &:hover { 16 | overflow-y: auto; 17 | } 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /src/root/components/SegmentInput/styles.module.scss: -------------------------------------------------------------------------------- 1 | @use "sass:math"; 2 | 3 | @import '~styles/settings/_variables.scss'; 4 | 5 | .segment-input { 6 | width: fit-content; 7 | 8 | .list { 9 | gap: 0; 10 | background-color: $color-background; 11 | width: fit-content; 12 | border: $base-border-width solid $base-border-color--light; 13 | border-radius: calc(#{$spacing} + 1em); 14 | padding: 0; 15 | } 16 | 17 | .segment { 18 | border-color: transparent; 19 | padding: math.div($spacing*1, 3) $spacing*2; 20 | 21 | &.active { 22 | background-color: $primary-color; 23 | color: $color-text-on-dark; 24 | } 25 | } 26 | 27 | &.secondary-variant { 28 | .segment { 29 | &.active { 30 | background-color: $secondary-color; 31 | color: $color-text-on-dark; 32 | } 33 | } 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /src/root/components/Svg/styles.module.scss: -------------------------------------------------------------------------------- 1 | @import '~styles/settings/variables'; 2 | 3 | .svg-container { 4 | .svg { 5 | width: 100%; 6 | height: 100%; 7 | color: inherit; 8 | 9 | path { 10 | color: inherit; 11 | } 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /src/root/components/Switch/SwitchIcon/index.tsx: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import { _cs } from '@togglecorp/fujs'; 3 | 4 | import styles from './styles.module.scss'; 5 | 6 | export interface SwitchIconProps { 7 | className?: string; 8 | value?: boolean | null; 9 | } 10 | 11 | function SwitchIcon(props: SwitchIconProps) { 12 | const { 13 | className, 14 | value, 15 | } = props; 16 | 17 | return ( 18 |
25 |
26 |
27 | ); 28 | } 29 | 30 | export default SwitchIcon; 31 | -------------------------------------------------------------------------------- /src/root/components/Switch/index.tsx: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | 3 | import Checkbox, { Props as CheckboxProps } from '../Checkbox'; 4 | import SwitchIcon from './SwitchIcon'; 5 | 6 | export interface SwitchProps extends Omit, 'indeterminate' | 'checkmark'> { 7 | } 8 | 9 | function Switch(props: SwitchProps) { 10 | return ( 11 | 15 | ); 16 | } 17 | 18 | export default Switch; 19 | -------------------------------------------------------------------------------- /src/root/components/Table/Cell/index.tsx: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import { isNotDefined } from '@togglecorp/fujs'; 3 | 4 | import { genericMemo } from '#utils/common'; 5 | 6 | export interface CellProps{ 7 | className?: string; 8 | value: T | null | undefined; 9 | } 10 | 11 | function Cell(props: CellProps) { 12 | const { 13 | className, 14 | value, 15 | } = props; 16 | 17 | if (isNotDefined(value)) { 18 | return null; 19 | } 20 | 21 | return ( 22 |
23 | {value} 24 |
25 | ); 26 | } 27 | 28 | export default genericMemo(Cell); 29 | -------------------------------------------------------------------------------- /src/root/components/Table/TableData/index.tsx: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import { _cs } from '@togglecorp/fujs'; 3 | 4 | import styles from './styles.module.scss'; 5 | 6 | export interface Props extends Omit, 'ref'> { 7 | } 8 | 9 | function TableData(props: Props) { 10 | const { 11 | className, 12 | children, 13 | ...otherProps 14 | } = props; 15 | 16 | return ( 17 | 21 | {children} 22 | 23 | ); 24 | } 25 | 26 | export default TableData; 27 | -------------------------------------------------------------------------------- /src/root/components/Table/TableData/styles.module.scss: -------------------------------------------------------------------------------- 1 | @import '~styles/settings/_variables.scss'; 2 | 3 | .td { 4 | border-top: 0; 5 | border-bottom: $base-border-width solid $base-border-color--light; 6 | background-color: inherit; 7 | // padding: $spacing-half; 8 | overflow: hidden; 9 | text-overflow: ellipsis; 10 | } 11 | 12 | -------------------------------------------------------------------------------- /src/root/components/Table/TableRow/index.tsx: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | 3 | export interface Props extends Omit, 'ref'> { 4 | } 5 | 6 | function TableRow(props: Props) { 7 | const { 8 | className, 9 | children, 10 | ...otherProps 11 | } = props; 12 | 13 | return ( 14 | 18 | {children} 19 | 20 | ); 21 | } 22 | 23 | export default TableRow; 24 | -------------------------------------------------------------------------------- /src/root/components/Table/types.ts: -------------------------------------------------------------------------------- 1 | export enum SortDirection { 2 | 'asc' = 'Ascending', 3 | 'dsc' = 'Descending', 4 | } 5 | export enum FilterType { 6 | 'string' = 'string', 7 | 'number' = 'number', 8 | } 9 | 10 | export interface BaseHeader { 11 | className?: string; 12 | titleClassName?: string; 13 | titleContainerClassName?: string; 14 | name: string; 15 | index: number; 16 | 17 | title?: string; 18 | } 19 | 20 | export interface BaseCell { 21 | className?: string; 22 | name: string; 23 | } 24 | -------------------------------------------------------------------------------- /src/root/components/Table/useHiding.ts: -------------------------------------------------------------------------------- 1 | import { createContext } from 'react'; 2 | 3 | interface HideContextInterface { 4 | setHidden: (state: string) => void; 5 | } 6 | const initialValue: HideContextInterface = { 7 | setHidden: (state) => { 8 | console.warn('Trying to set to ', state); 9 | }, 10 | }; 11 | // eslint-disable-next-line import/prefer-default-export 12 | export const HideContext = createContext(initialValue); 13 | -------------------------------------------------------------------------------- /src/root/components/TableActions/styles.module.scss: -------------------------------------------------------------------------------- 1 | @import '~styles/settings/variables'; 2 | 3 | .table-actions { 4 | display: flex; 5 | gap: $spacing * 0.25; 6 | justify-content: flex-end; 7 | flex-wrap: wrap; 8 | } 9 | -------------------------------------------------------------------------------- /src/root/components/TextArea/styles.module.scss: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IFRCGo/go-frontend/88eaf132b59b01f56891e4fece048c9809ad2ab5/src/root/components/TextArea/styles.module.scss -------------------------------------------------------------------------------- /src/root/components/TextInput/styles.module.scss: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IFRCGo/go-frontend/88eaf132b59b01f56891e4fece048c9809ad2ab5/src/root/components/TextInput/styles.module.scss -------------------------------------------------------------------------------- /src/root/components/TextOutput/styles.module.scss: -------------------------------------------------------------------------------- 1 | @import '~styles/settings/_variables.scss'; 2 | 3 | .text-output { 4 | &.inline-type { 5 | display: flex; 6 | align-items: center; 7 | } 8 | 9 | &.table-type { 10 | display: table-row; 11 | 12 | >.description, 13 | >.value, 14 | >.label { 15 | display: table-cell; 16 | } 17 | } 18 | 19 | >.label { 20 | padding: $spacing*0.25; 21 | color: $color-text-light; 22 | font-weight: $base-font-medium; 23 | } 24 | 25 | >.value { 26 | padding: $spacing*0.25; 27 | } 28 | 29 | >.description { 30 | padding: $spacing*0.25; 31 | } 32 | 33 | &.with-label-colon { 34 | >.label { 35 | &:after { 36 | content: ':'; 37 | } 38 | } 39 | } 40 | 41 | &.strong-value { 42 | >.value { 43 | font-weight: $base-font-bold; 44 | } 45 | } 46 | } 47 | 48 | -------------------------------------------------------------------------------- /src/root/components/ThreeWForm/AnnualSplitInput/styles.module.scss: -------------------------------------------------------------------------------- 1 | @import '~styles/settings/_variables.scss'; 2 | 3 | .annual-split-input { 4 | display: flex; 5 | gap: $spacing*0.5; 6 | flex-wrap: wrap; 7 | align-items: flex-end; 8 | padding-bottom: $spacing; 9 | 10 | >* { 11 | flex-basis: calc(100% / 4 - #{$spacing*0.5}); 12 | } 13 | 14 | .remove-button { 15 | flex-basis: unset; 16 | flex-grow: initial; 17 | min-width: unset; 18 | border: none; 19 | margin-left: 2*$spacing; 20 | margin-bottom: 0.6*$spacing; 21 | } 22 | 23 | .bold { 24 | font-weight: 500; 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /src/root/components/ThreeWForm/RegionSelectionInput/styles.module.scss: -------------------------------------------------------------------------------- 1 | @import '~styles/settings/variables'; 2 | 3 | .empty-message { 4 | position: absolute; 5 | display: flex; 6 | align-items: center; 7 | justify-content: center; 8 | top: 0; 9 | left: 0; 10 | width: 100%; 11 | height: 100%; 12 | background-color: #f4f4f4bb; 13 | 14 | .text { 15 | background-color: $white; 16 | padding: $spacing*2; 17 | box-shadow: $base-box-shadow; 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /src/root/components/ThreeWForm/styles.module.scss: -------------------------------------------------------------------------------- 1 | @import '~styles/settings/variables'; 2 | 3 | .three-w-form { 4 | .language-mismatch { 5 | text-align: center; 6 | } 7 | 8 | .form-actions { 9 | display: flex; 10 | flex-direction: column; 11 | align-items: center; 12 | justify-content: center; 13 | padding: $spacing*5; 14 | 15 | .fake-submit-button { 16 | display: none; 17 | } 18 | } 19 | 20 | .select-all-districts-button { 21 | display: flex; 22 | align-items: center; 23 | } 24 | 25 | .non-field-error { 26 | margin-bottom: $spacing*2; 27 | } 28 | 29 | .disable { 30 | color: $light-base-color; 31 | } 32 | 33 | .region-selection-input { 34 | flex-grow: initial; 35 | flex-shrink: 0; 36 | flex-basis: unset!important; 37 | align-self: flex-start; 38 | margin-top: 1.5rem; 39 | } 40 | } 41 | -------------------------------------------------------------------------------- /src/root/components/ThreeWList/styles.module.scss: -------------------------------------------------------------------------------- 1 | @import '~styles/settings/variables'; 2 | 3 | .three-w-list { 4 | min-height: 50vh; 5 | 6 | .main-content { 7 | display: flex; 8 | flex-direction: column; 9 | gap: $spacing*4; 10 | 11 | .project-table, 12 | .activity-table { 13 | width: 100%; 14 | } 15 | 16 | .action-column { 17 | width: 3rem; 18 | } 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /src/root/components/ThreeWSankey/styles.module.scss: -------------------------------------------------------------------------------- 1 | @import '~styles/settings/_variables.scss'; 2 | 3 | .globalThreeWSankey { 4 | padding: $spacing; 5 | } 6 | 7 | .sankeyLink { 8 | fill: $secondary-color; 9 | fill-opacity: 0.1; 10 | 11 | &.sankeyLinkLeft { 12 | fill: $primary-color; 13 | } 14 | 15 | &:hover { 16 | fill-opacity: 0.4; 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /src/root/components/Translate/styles.module.scss: -------------------------------------------------------------------------------- 1 | .translate { 2 | } 3 | -------------------------------------------------------------------------------- /src/root/components/TranslationWarningBanner/styles.module.scss: -------------------------------------------------------------------------------- 1 | @import '~styles/settings/variables'; 2 | 3 | .translation-warning-banner { 4 | padding: $spacing; 5 | text-align: center; 6 | background-color: $warning-color; 7 | color: $color-text-on-dark; 8 | font-weight: $base-font-medium; 9 | } 10 | -------------------------------------------------------------------------------- /src/root/components/UserSearchSelectInput/styles.module.scss: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IFRCGo/go-frontend/88eaf132b59b01f56891e4fece048c9809ad2ab5/src/root/components/UserSearchSelectInput/styles.module.scss -------------------------------------------------------------------------------- /src/root/components/WikiLink/index.tsx: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | 3 | import useReduxState from '#hooks/useReduxState'; 4 | 5 | export interface Props { 6 | className?: string; 7 | pathName?: string; 8 | } 9 | 10 | function WikiLink(props: Props) { 11 | const { 12 | className, 13 | pathName, 14 | } = props; 15 | 16 | const lang = useReduxState('lang'); 17 | const href = `https://go-wiki.ifrc.org/${lang.current}/${pathName}`; 18 | 19 | return ( 20 |
26 | IFRC GO Wiki 30 | 31 | ); 32 | } 33 | 34 | export default WikiLink; 35 | -------------------------------------------------------------------------------- /src/root/components/WikiLink/styles.module.scss: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IFRCGo/go-frontend/88eaf132b59b01f56891e4fece048c9809ad2ab5/src/root/components/WikiLink/styles.module.scss -------------------------------------------------------------------------------- /src/root/components/backdrop.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import Portal from './portal'; 3 | import _cs from 'classnames'; 4 | 5 | function Backdrop (p) { 6 | React.useEffect(() => { 7 | const html = document.getElementsByTagName('html')[0]; 8 | const prevValue = html.style.overflow; 9 | html.style.overflow = 'hidden'; 10 | 11 | return () => { 12 | html.style.overflow = prevValue; 13 | }; 14 | }, []); 15 | 16 | return ( 17 | 18 |
19 | { p.children } 20 |
21 |
22 | ); 23 | } 24 | 25 | export default Backdrop; 26 | -------------------------------------------------------------------------------- /src/root/components/block-loading.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import _cs from 'classnames'; 3 | 4 | import Spinner from '#components/spinner'; 5 | 6 | function BlockLoading(p) { 7 | const { className } = p; 8 | 9 | return ( 10 |
11 | 12 |
13 | ); 14 | } 15 | 16 | export default BlockLoading; 17 | -------------------------------------------------------------------------------- /src/root/components/common/fullscreen-header.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import { PropTypes as T } from 'prop-types'; 3 | import { environment } from '#config'; 4 | 5 | const FullScreenHeader = ({ title }) => ( 6 |
7 |
8 | IFRC GO logo 13 |
14 |

15 | {title} 16 |

17 |
18 | ); 19 | 20 | export default FullScreenHeader; 21 | 22 | if (environment !== 'production') { 23 | FullScreenHeader.propTypes = { 24 | title: T.string 25 | }; 26 | } 27 | -------------------------------------------------------------------------------- /src/root/components/connected/styles.module.scss: -------------------------------------------------------------------------------- 1 | .fold-header { 2 | :global { 3 | .fold__header__block { 4 | display: flex; 5 | flex-grow: 1; 6 | 7 | h2 { 8 | flex-grow: 1; 9 | } 10 | } 11 | 12 | } 13 | 14 | .export-button { 15 | flex-shrink: 0; 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /src/root/components/error-panel.js: -------------------------------------------------------------------------------- 1 | 2 | import React from 'react'; 3 | import { PropTypes as T } from 'prop-types'; 4 | import { environment } from '#config'; 5 | 6 | import Fold from './fold'; 7 | 8 | const ErrorPanel = props => { 9 | return ( 10 | 11 | {props.errorMessage} 12 | 13 | ); 14 | }; 15 | 16 | if (environment !== 'production') { 17 | ErrorPanel.propTypes = { 18 | title: T.string, 19 | errorMessage: T.string 20 | }; 21 | } 22 | 23 | export default ErrorPanel; 24 | -------------------------------------------------------------------------------- /src/root/components/form-elements/checkbox.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | 3 | import FormCheckable from './checkable'; 4 | 5 | export default function FormCheckbox (props) { 6 | return ; 7 | } 8 | -------------------------------------------------------------------------------- /src/root/components/form-elements/date-input.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import { FaramInputElement } from '@togglecorp/faram'; 3 | 4 | import RawInput from './raw-input'; 5 | 6 | class DateInput extends React.PureComponent { 7 | render () { 8 | return ( 9 | 13 | ); 14 | } 15 | } 16 | 17 | export default FaramInputElement(DateInput); 18 | -------------------------------------------------------------------------------- /src/root/components/form-elements/index.js: -------------------------------------------------------------------------------- 1 | 2 | import FormInput from './input'; 3 | import FormInputSelect from './input-select'; 4 | import FormTextarea from './textarea'; 5 | import FormRadio from './radio'; 6 | import FormRadioGroup from './radio-group'; 7 | import FormCheckboxGroup from './checkbox-group'; 8 | import FormCheckbox from './checkbox'; 9 | import FormSelect from './select'; 10 | import FormError from './error'; 11 | 12 | export { 13 | FormInput, 14 | FormInputSelect, 15 | FormTextarea, 16 | FormRadio, 17 | FormRadioGroup, 18 | FormCheckboxGroup, 19 | FormSelect, 20 | FormCheckbox, 21 | FormError 22 | }; 23 | -------------------------------------------------------------------------------- /src/root/components/form-elements/misc.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import { PropTypes as T } from 'prop-types'; 3 | 4 | export function FormDescription ({value}) { 5 | let description = null; 6 | if (React.isValidElement(value)) { 7 | description = value; 8 | } else if (value) { 9 | description =

; 10 | } 11 | 12 | return description; 13 | } 14 | 15 | if (process.env.NODE_ENV !== 'production') { 16 | FormDescription.propTypes = { 17 | value: T.oneOfType([ 18 | T.node, 19 | T.object 20 | ]) 21 | }; 22 | } 23 | -------------------------------------------------------------------------------- /src/root/components/form-elements/number-input.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import { FaramInputElement } from '@togglecorp/faram'; 3 | 4 | import RawInput from './raw-input'; 5 | 6 | class TextInput extends React.PureComponent { 7 | render () { 8 | return ( 9 | 14 | ); 15 | } 16 | } 17 | 18 | export default FaramInputElement(TextInput); 19 | -------------------------------------------------------------------------------- /src/root/components/form-elements/radio.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | 3 | import FormCheckable from './checkable'; 4 | 5 | export default function FormRadio (props) { 6 | return ; 7 | } 8 | 9 | FormRadio.defaultProps = { 10 | inline: true 11 | }; 12 | -------------------------------------------------------------------------------- /src/root/components/form-elements/text-input.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import { FaramInputElement } from '@togglecorp/faram'; 3 | 4 | import RawInput from './raw-input'; 5 | 6 | class TextInput extends React.PureComponent { 7 | render () { 8 | return ( 9 | 13 | ); 14 | } 15 | } 16 | 17 | export default FaramInputElement(TextInput); 18 | -------------------------------------------------------------------------------- /src/root/components/formatted-date.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import _cs from 'classnames'; 3 | 4 | import { padStart as p } from '@togglecorp/fujs'; 5 | 6 | const FormattedDate = ({ 7 | value, 8 | className, 9 | }) => { 10 | let dateString = '-'; 11 | 12 | if (value) { 13 | const date = new Date(value); 14 | 15 | if (date && !(isNaN(date.getTime()))) { 16 | const mm = p(date.getMonth() + 1, 2); 17 | const dd = p(date.getDate(), 2); 18 | const yyyy = date.getFullYear(); 19 | dateString = `${yyyy}-${mm}-${dd}`; 20 | } 21 | } 22 | 23 | return ( 24 |
25 | { dateString } 26 |
27 | ); 28 | }; 29 | 30 | export default FormattedDate; 31 | -------------------------------------------------------------------------------- /src/root/components/map/common/map-footer.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import Translate from '#components/Translate'; 3 | 4 | const MapFooter = () => ( 5 | 23 | ); 24 | 25 | export default MapFooter; 26 | -------------------------------------------------------------------------------- /src/root/components/map/common/map-header.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import { formatDate } from '#utils/format'; 3 | 4 | const MapHeader = (props) => ( 5 |
6 | {props.downloadedHeaderTitle} 7 | ({formatDate(new Date())}) 8 |
9 | IFRC GO logo 10 |
11 |
12 | ); 13 | 14 | export default MapHeader; 15 | -------------------------------------------------------------------------------- /src/root/components/map/home-map/filtering/comparator/appeal-type-comparator.js: -------------------------------------------------------------------------------- 1 | 2 | export const AppealTypeComparator = (atype) => { 3 | return atype.target.value !== 'all' 4 | ? emergency => emergency.atype.toString() === atype.target.value.toString() 5 | : () => true; 6 | }; 7 | -------------------------------------------------------------------------------- /src/root/components/map/home-map/filtering/comparator/date-comparator.js: -------------------------------------------------------------------------------- 1 | /** 2 | * The date comparator for emergencies looks at a window of emergency start dates. 3 | * Emergency end dates do exist but are assigned to arbitrary dates in the future so 4 | * they are rarely useful to users seraching for emergencies by date. 5 | * @param {object} dates Contains a start_date and end_date specified by the user 6 | */ 7 | export const DateComparator = (dates) => { 8 | return dates.startDate && dates.endDate 9 | ? emergency => emergency.start_date >= dates.startDate && emergency.start_date <= dates.endDate : () => true; 10 | }; 11 | -------------------------------------------------------------------------------- /src/root/components/map/home-map/filtering/comparator/emergency-type-comparator.js: -------------------------------------------------------------------------------- 1 | 2 | export const EmergencyTypeComparator = (emergencyTypeId) => { 3 | return emergencyTypeId > 0 4 | ? emergency => emergency.dtype.toString() === emergencyTypeId.toString() 5 | : () => true; 6 | }; 7 | -------------------------------------------------------------------------------- /src/root/components/map/home-map/filtering/filtering-processor.js: -------------------------------------------------------------------------------- 1 | 2 | import { aggregateAppealStats } from '#utils/utils'; 3 | 4 | export function filtering (geoJSON, comparator) { 5 | const features = geoJSON.features.map(d => { 6 | const appeals = d.properties.appeals.filter(comparator); 7 | const properties = Object.assign(aggregateAppealStats(appeals), { 8 | atype: d.properties.atype, 9 | id: d.properties.id, 10 | name: d.properties.name, 11 | iso: d.properties.iso, 12 | appeals: appeals 13 | }); 14 | return { 15 | geometry: d.geometry, 16 | properties 17 | }; 18 | }).filter(feature => feature.properties.appeals.length > 0); 19 | return { type: 'FeatureCollection', features }; 20 | } 21 | -------------------------------------------------------------------------------- /src/root/components/per-forms/factory/request-factory.js: -------------------------------------------------------------------------------- 1 | export default class RequestFactory { 2 | // TODO: remove this after it's not used anywhere 3 | numAnswerToString (answer) { 4 | if (answer === 0) { 5 | return 'no'; 6 | } else if (answer === 1) { 7 | return 'yes'; 8 | } else if (answer === 2) { 9 | return 'Not Reviewed'; 10 | } else if (answer === 3) { 11 | return 'Does not exist'; 12 | } else if (answer === 4) { 13 | return 'Partially exists'; 14 | } else if (answer === 5) { 15 | return 'Need improvements'; 16 | } else if (answer === 6) { 17 | return 'Exist, could be strengthened'; 18 | } else if (answer === 7) { 19 | return 'High performance'; 20 | } 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /src/root/components/pills.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import { PropTypes as T } from 'prop-types'; 3 | import { environment } from '#config'; 4 | 5 | class Pills extends React.Component { 6 | render () { 7 | return ( 8 |
9 | { 10 | this.props.links.map(link => { 11 | return ( 12 | 17 | ); 18 | }) 19 | } 20 |
21 | ); 22 | } 23 | } 24 | 25 | if (environment !== 'production') { 26 | Pills.propTypes = { 27 | links: T.array 28 | }; 29 | } 30 | 31 | export default Pills; 32 | -------------------------------------------------------------------------------- /src/root/components/portal.js: -------------------------------------------------------------------------------- 1 | import ReactDOM from 'react-dom'; 2 | 3 | function Portal (props) { 4 | const { children } = props; 5 | return ( 6 | ReactDOM.createPortal( 7 | children, 8 | document.body, 9 | ) 10 | ); 11 | } 12 | 13 | export default Portal; 14 | -------------------------------------------------------------------------------- /src/root/components/preparedness/contact-per.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import Translate from '#components/Translate'; 3 | 4 | export default class ContactPer extends React.Component { 5 | render () { 6 | return ( 7 |
8 | 9 | 10 | 11 | {/*
12 |

13 | 14 |

15 |
*/} 16 |
17 | ); 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /src/root/components/progress-labeled.js: -------------------------------------------------------------------------------- 1 | 2 | import React from 'react'; 3 | import { PropTypes as T } from 'prop-types'; 4 | import { environment } from '#config'; 5 | import { round } from '#utils/format'; 6 | 7 | const Progress = ({max, value}) => { 8 | value = round(value, 2); 9 | return ( 10 |
11 |
12 |
max ? max : value) + '%'}}>
13 |
14 |
15 | ); 16 | }; 17 | 18 | if (environment !== 'production') { 19 | Progress.propTypes = { 20 | max: T.number, 21 | value: T.number, 22 | children: T.object 23 | }; 24 | } 25 | 26 | export default Progress; 27 | -------------------------------------------------------------------------------- /src/root/components/progress.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import { PropTypes as T } from 'prop-types'; 3 | import { environment } from '#config'; 4 | 5 | const Progress = ({max, value, children, start}) => { 6 | start = start || 0; 7 | return ( 8 |
9 |
{children}
10 |
11 | ); 12 | }; 13 | if (environment !== 'production') { 14 | Progress.propTypes = { 15 | max: T.number, 16 | value: T.number, 17 | children: T.object 18 | }; 19 | } 20 | 21 | export default Progress; 22 | -------------------------------------------------------------------------------- /src/root/components/spinner.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import { _cs } from '@togglecorp/fujs'; 3 | 4 | function Spinner (props) { 5 | return ( 6 |
7 |
8 |
9 |
10 |
11 | ); 12 | } 13 | 14 | export default Spinner; 15 | -------------------------------------------------------------------------------- /src/root/declarations/docx4js.d.ts: -------------------------------------------------------------------------------- 1 | declare module 'docx4js' { 2 | export interface Node { 3 | name: string; 4 | prev: Node | null; 5 | next: Node | null; 6 | children: Node[] | null; 7 | attribs?: Record; 8 | data?: string; 9 | } 10 | 11 | export const docx: { 12 | load: (file: File) => ({ 13 | officeDocument: { 14 | content: { 15 | _root: Node | undefined; 16 | } | undefined; 17 | } | undefined; 18 | }) | undefined; 19 | }; 20 | } 21 | -------------------------------------------------------------------------------- /src/root/declarations/png.d.ts: -------------------------------------------------------------------------------- 1 | declare module '*.png' { 2 | const value: string; 3 | export default value; 4 | } 5 | -------------------------------------------------------------------------------- /src/root/declarations/react-through.d.ts: -------------------------------------------------------------------------------- 1 | declare module 'react-through' { 2 | export const ThroughProvider: Context.Provider; 3 | } 4 | -------------------------------------------------------------------------------- /src/root/declarations/scss.d.ts: -------------------------------------------------------------------------------- 1 | declare module '*.scss' { 2 | const content: {[className: string]: string}; 3 | export default content; 4 | } 5 | -------------------------------------------------------------------------------- /src/root/declarations/svg.d.ts: -------------------------------------------------------------------------------- 1 | declare module '*.svg' { 2 | const value: string; 3 | export default value; 4 | } 5 | -------------------------------------------------------------------------------- /src/root/declarations/ttf.d.ts: -------------------------------------------------------------------------------- 1 | declare module '*.ttf' { 2 | const value: string; 3 | export default value; 4 | } 5 | -------------------------------------------------------------------------------- /src/root/hooks/useBasicLayout/styles.module.scss: -------------------------------------------------------------------------------- 1 | @import '~styles/settings/_variables.scss'; 2 | 3 | .layout-container { 4 | display: flex; 5 | align-items: center; 6 | gap: $spacing; 7 | 8 | .icons-container { 9 | display: flex; 10 | flex-shrink: 0; 11 | gap: $spacing*0.5; 12 | } 13 | 14 | .children-container { 15 | flex-grow: 1; 16 | } 17 | 18 | .actions-container { 19 | display: flex; 20 | align-items: center; 21 | flex-shrink: 0; 22 | gap: $spacing*0.5; 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /src/root/hooks/useBooleanState.ts: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | 3 | type SetTrueFn = () => void; 4 | type SetFalseFn = () => void; 5 | type ToggleFn = () => void; 6 | type SetValueFn = React.Dispatch>; 7 | 8 | export default function useBooleanState(initialValue: boolean): [ 9 | boolean, 10 | SetTrueFn, 11 | SetFalseFn, 12 | SetValueFn, 13 | ToggleFn, 14 | ] { 15 | const [value, setValue] = React.useState(initialValue); 16 | 17 | const setTrue = React.useCallback(() => { 18 | setValue(true); 19 | }, [setValue]); 20 | 21 | const setFalse = React.useCallback(() => { 22 | setValue(false); 23 | }, [setValue]); 24 | 25 | const toggleFn = React.useCallback(() => { 26 | setValue((oldValue) => !oldValue); 27 | }, [setValue]); 28 | 29 | return [value, setTrue, setFalse, setValue, toggleFn]; 30 | } 31 | -------------------------------------------------------------------------------- /src/root/hooks/useConfirmation/styles.module.scss: -------------------------------------------------------------------------------- 1 | @import '~styles/settings/_variables.scss'; 2 | 3 | .confirmation-modal { 4 | display: flex; 5 | align-items: center; 6 | justify-content: center; 7 | 8 | .inner-container { 9 | width: 24rem; 10 | min-height: 10rem; 11 | background-color: $white; 12 | border-radius: $base-border-radius; 13 | 14 | .content { 15 | padding: $spacing!important; 16 | } 17 | 18 | .actions { 19 | display: flex; 20 | gap: $spacing; 21 | padding: $spacing; 22 | } 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /src/root/hooks/useDidUpdateEffect.ts: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | 3 | function useDidUpdateEffect(fn: React.EffectCallback, inputs: React.DependencyList) { 4 | const didMountRef = React.useRef(false); 5 | 6 | React.useEffect( 7 | () => { 8 | if (didMountRef.current) { 9 | return fn(); 10 | } 11 | didMountRef.current = true; 12 | return undefined; 13 | }, 14 | // eslint-disable-next-line react-hooks/exhaustive-deps 15 | inputs, 16 | ); 17 | } 18 | 19 | export default useDidUpdateEffect; 20 | -------------------------------------------------------------------------------- /src/root/languageContext.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import hoistNonReactStatic from 'hoist-non-react-statics'; 3 | import lang from '#lang'; 4 | 5 | 6 | const languageContext = React.createContext({ 7 | strings: lang, 8 | setStrings: () => {}, 9 | }); 10 | 11 | export default languageContext; 12 | 13 | export function withLanguage(Component) { 14 | class EnhancedComponent extends React.Component { 15 | render() { 16 | const { strings } = this.context; 17 | return ( 18 | 22 | ); 23 | } 24 | } 25 | 26 | EnhancedComponent.contextType = languageContext; 27 | hoistNonReactStatic(EnhancedComponent, Component); 28 | 29 | return EnhancedComponent; 30 | } 31 | -------------------------------------------------------------------------------- /src/root/reducers/actions.js: -------------------------------------------------------------------------------- 1 | import { stateInflight, stateError, stateSuccess } from '#utils/reducer-utils'; 2 | const initialState = { 3 | fetching: false, 4 | fetched: false, 5 | receivedAt: null, 6 | data: {} 7 | }; 8 | export default function actions (state = initialState, action) { 9 | switch (action.type) { 10 | case 'GET_ACTIONS_INFLIGHT': 11 | state = stateInflight(state, action); 12 | break; 13 | case 'GET_ACTIONS_FAILED': 14 | state = stateError(state, action); 15 | break; 16 | case 'GET_ACTIONS_SUCCESS': 17 | state = stateSuccess(state, action); 18 | break; 19 | } 20 | return state; 21 | } 22 | -------------------------------------------------------------------------------- /src/root/reducers/appeals.js: -------------------------------------------------------------------------------- 1 | import { stateInflight, stateError, stateSuccess } from '#utils/reducer-utils'; 2 | 3 | const initialState = { 4 | fetching: false, 5 | fetched: false, 6 | receivedAt: null, 7 | data: {} 8 | }; 9 | 10 | export default function appeals (state = initialState, action) { 11 | switch (action.type) { 12 | case 'GET_APPEALS_INFLIGHT': 13 | state = stateInflight(state, action); 14 | break; 15 | case 'GET_APPEALS_FAILED': 16 | state = stateError(state, action); 17 | break; 18 | case 'GET_APPEALS_SUCCESS': 19 | state = stateSuccess(state, action); 20 | break; 21 | } 22 | return state; 23 | } 24 | -------------------------------------------------------------------------------- /src/root/reducers/countries.js: -------------------------------------------------------------------------------- 1 | import { stateInflight, stateError, stateSuccess } from '#utils/reducer-utils'; 2 | const initialState = { 3 | fetching: false, 4 | fetched: false, 5 | receivedAt: null, 6 | data: {} 7 | }; 8 | export default function countries (state = initialState, action) { 9 | switch (action.type) { 10 | case 'GET_COUNTRIES_INFLIGHT': 11 | state = stateInflight(state, action); 12 | break; 13 | case 'GET_COUNTRIES_FAILED': 14 | state = stateError(state, action); 15 | break; 16 | case 'GET_COUNTRIES_SUCCESS': 17 | state = stateSuccess(state, action); 18 | break; 19 | } 20 | return state; 21 | } 22 | -------------------------------------------------------------------------------- /src/root/reducers/country-overview.js: -------------------------------------------------------------------------------- 1 | import { stateInflight, stateError, stateSuccess } from '#utils/reducer-utils'; 2 | 3 | const initialState = { 4 | fetching: false, 5 | fetched: false, 6 | receivedAt: null, 7 | data: {} 8 | }; 9 | 10 | export default function countries (state = initialState, action) { 11 | switch (action.type) { 12 | case 'GET_COUNTRY_OVERVIEW_INFLIGHT': 13 | state = stateInflight(state, action); 14 | break; 15 | case 'GET_COUNTRY_OVERVIEW_FAILED': 16 | state = stateError(state, action); 17 | break; 18 | case 'GET_COUNTRY_OVERVIEW_SUCCESS': 19 | state = stateSuccess(state, action); 20 | break; 21 | } 22 | 23 | return state; 24 | } 25 | -------------------------------------------------------------------------------- /src/root/reducers/disaster-types.js: -------------------------------------------------------------------------------- 1 | import { stateInflight, stateError, stateSuccess } from '#utils/reducer-utils'; 2 | 3 | const initialState = { 4 | fetching: false, 5 | fetched: false, 6 | receivedAt: null, 7 | data: {} 8 | }; 9 | 10 | export default function disasterTypes (state = initialState, action) { 11 | switch (action.type) { 12 | case 'GET_DISASTER_TYPES_INFLIGHT': 13 | state = stateInflight(state, action); 14 | break; 15 | case 'GET_DISASTER_TYPES_FAILED': 16 | state = stateError(state, action); 17 | break; 18 | case 'GET_DISASTER_TYPES_SUCCESS': 19 | state = stateSuccess(state, action); 20 | break; 21 | } 22 | return state; 23 | } 24 | -------------------------------------------------------------------------------- /src/root/reducers/domain-whitelist.js: -------------------------------------------------------------------------------- 1 | import { stateInflight, stateError, stateSuccess } from '#utils/reducer-utils'; 2 | 3 | const initialState = { 4 | fetching: false, 5 | fetched: false, 6 | receivedAt: null, 7 | data: {} 8 | }; 9 | 10 | function domainWhitelist (state = initialState, action) { 11 | switch (action.type) { 12 | case 'GET_DOMAIN_WHITELIST_INFLIGHT': 13 | state = stateInflight(state, action); 14 | break; 15 | case 'GET_DOMAIN_WHITELIST_FAILED': 16 | state = stateError(state, action); 17 | break; 18 | case 'GET_DOMAIN_WHITELIST_SUCCESS': 19 | state = stateSuccess(state, action); 20 | break; 21 | } 22 | return state; 23 | } 24 | 25 | export default domainWhitelist; 26 | -------------------------------------------------------------------------------- /src/root/reducers/email.js: -------------------------------------------------------------------------------- 1 | 2 | import { stateInflight, stateError } from '#utils/reducer-utils'; 3 | 4 | const initialState = { 5 | fetching: false, 6 | fetched: false, 7 | receivedAt: null, 8 | error: null 9 | }; 10 | 11 | function email (state = initialState, action) { 12 | switch (action.type) { 13 | case 'SHOW_USERNAME_INFLIGHT': 14 | state = stateInflight(state, action); 15 | break; 16 | case 'SHOW_USERNAME_FAILED': 17 | state = stateError(state, action); 18 | break; 19 | case 'SHOW_USERNAME_SUCCESS': 20 | state = { 21 | fetching: false, 22 | fetched: true, 23 | receivedAt: action.receivedAt, 24 | error: null 25 | }; 26 | break; 27 | } 28 | return state; 29 | } 30 | 31 | export default email; 32 | -------------------------------------------------------------------------------- /src/root/reducers/external_partners.js: -------------------------------------------------------------------------------- 1 | import { stateInflight, stateError, stateSuccess } from '#utils/reducer-utils'; 2 | import { GET_EXTERNAL_PARTNERS } from '#actions'; 3 | 4 | const initialState = { 5 | fetching: false, 6 | fetched: false, 7 | receivedAt: null, 8 | data: {} 9 | }; 10 | export default function externalPartners (state = initialState, action) { 11 | switch (action.type) { 12 | case `${GET_EXTERNAL_PARTNERS}_INFLIGHT`: 13 | state = stateInflight(state, action); 14 | break; 15 | case `${GET_EXTERNAL_PARTNERS}_FAILED`: 16 | state = stateError(state, action); 17 | break; 18 | case `${GET_EXTERNAL_PARTNERS}_SUCCESS`: 19 | state = stateSuccess(state, action); 20 | break; 21 | } 22 | return state; 23 | } 24 | -------------------------------------------------------------------------------- /src/root/reducers/field-reports.js: -------------------------------------------------------------------------------- 1 | import { stateInflight, stateError, stateSuccess } from '#utils/reducer-utils'; 2 | 3 | const initialState = { 4 | fetching: false, 5 | fetched: false, 6 | receivedAt: null, 7 | data: {} 8 | }; 9 | 10 | function fieldReports (state = initialState, action) { 11 | switch (action.type) { 12 | case 'GET_FIELD_REPORTS_LIST_INFLIGHT': 13 | state = stateInflight(state, action); 14 | break; 15 | case 'GET_FIELD_REPORTS_LIST_FAILED': 16 | state = stateError(state, action); 17 | break; 18 | case 'GET_FIELD_REPORTS_LIST_SUCCESS': 19 | state = stateSuccess(state, action); 20 | break; 21 | } 22 | return state; 23 | } 24 | 25 | export default fieldReports; 26 | -------------------------------------------------------------------------------- /src/root/reducers/main_contacts.js: -------------------------------------------------------------------------------- 1 | import { stateInflight, stateError, stateSuccess } from '#utils/reducer-utils'; 2 | import { GET_MAIN_CONTACTS } from '#actions'; 3 | 4 | const initialState = { 5 | fetching: false, 6 | fetched: false, 7 | receivedAt: null, 8 | data: {} 9 | }; 10 | export default function mainContacts (state = initialState, action) { 11 | switch (action.type) { 12 | case `${GET_MAIN_CONTACTS}_INFLIGHT`: 13 | state = stateInflight(state, action); 14 | break; 15 | case `${GET_MAIN_CONTACTS}_FAILED`: 16 | state = stateError(state, action); 17 | break; 18 | case `${GET_MAIN_CONTACTS}_SUCCESS`: 19 | state = stateSuccess(state, action); 20 | break; 21 | } 22 | return state; 23 | } 24 | -------------------------------------------------------------------------------- /src/root/reducers/ns-rapid-response.js: -------------------------------------------------------------------------------- 1 | import { 2 | stateInflight, 3 | stateError, 4 | stateSuccess, 5 | } from '#utils/reducer-utils'; 6 | 7 | const initialState = {}; 8 | 9 | export default function reducer (state = initialState, action) { 10 | let newState = { ...state }; 11 | switch (action.type) { 12 | case 'GET_NS_RAPID_RESPONSE_INFLIGHT': 13 | newState = stateInflight(state, action); 14 | break; 15 | case 'GET_NS_RAPID_RESPONSE_FAILED': 16 | newState = stateError(state, action); 17 | break; 18 | case 'GET_NS_RAPID_RESPONSE_SUCCESS': 19 | newState = stateSuccess(state, action); 20 | break; 21 | } 22 | 23 | return newState; 24 | } 25 | -------------------------------------------------------------------------------- /src/root/reducers/per-areas.js: -------------------------------------------------------------------------------- 1 | import { stateInflight, stateError, stateSuccess } from '#utils/reducer-utils'; 2 | 3 | const initialState = { 4 | fetching: false, 5 | fetched: false, 6 | receivedAt: null, 7 | data: {} 8 | }; 9 | 10 | export default function perAreas (state = initialState, action) { 11 | switch (action.type) { 12 | case 'GET_PER_AREAS_INFLIGHT': 13 | state = stateInflight(state, action); 14 | break; 15 | case 'GET_PER_AREAS_FAILED': 16 | state = stateError(state, action); 17 | break; 18 | case 'GET_PER_AREAS_SUCCESS': 19 | state = stateSuccess(state, action); 20 | break; 21 | } 22 | return state; 23 | } 24 | -------------------------------------------------------------------------------- /src/root/reducers/per-components.js: -------------------------------------------------------------------------------- 1 | import { stateInflight, stateError, stateSuccess } from '#utils/reducer-utils'; 2 | 3 | const initialState = { 4 | fetching: false, 5 | fetched: false, 6 | receivedAt: null, 7 | data: {} 8 | }; 9 | 10 | export default function perComponents (state = initialState, action) { 11 | switch (action.type) { 12 | case 'GET_PER_COMPONENTS_INFLIGHT': 13 | state = stateInflight(state, action); 14 | break; 15 | case 'GET_PER_COMPONENTS_FAILED': 16 | state = stateError(state, action); 17 | break; 18 | case 'GET_PER_COMPONENTS_SUCCESS': 19 | state = stateSuccess(state, action); 20 | break; 21 | } 22 | return state; 23 | } 24 | -------------------------------------------------------------------------------- /src/root/reducers/per-latest-overview.js: -------------------------------------------------------------------------------- 1 | import { stateInflight, stateError, stateSuccess } from '#utils/reducer-utils'; 2 | import { GET_LATEST_COUNTRY_OVERVIEW } from '#actions'; 3 | 4 | const initialState = { 5 | fetching: false, 6 | fetched: false, 7 | receivedAt: null, 8 | data: {} 9 | }; 10 | 11 | export default function perLatestOverview (state = initialState, action) { 12 | switch (action.type) { 13 | case `${GET_LATEST_COUNTRY_OVERVIEW}_INFLIGHT`: 14 | state = stateInflight(state, action); 15 | break; 16 | case `${GET_LATEST_COUNTRY_OVERVIEW}_FAILED`: 17 | state = stateError(state, action); 18 | break; 19 | case `${GET_LATEST_COUNTRY_OVERVIEW}_SUCCESS`: 20 | state = stateSuccess(state, action); 21 | break; 22 | } 23 | return state; 24 | } 25 | -------------------------------------------------------------------------------- /src/root/reducers/per-questions.js: -------------------------------------------------------------------------------- 1 | import { stateInflight, stateError, stateSuccess } from '#utils/reducer-utils'; 2 | 3 | const initialState = { 4 | fetching: false, 5 | fetched: false, 6 | receivedAt: null, 7 | data: {} 8 | }; 9 | 10 | export default function perQuestions (state = initialState, action) { 11 | switch (action.type) { 12 | case 'GET_PER_QUESTIONS_INFLIGHT': 13 | state = stateInflight(state, action); 14 | break; 15 | case 'GET_PER_QUESTIONS_FAILED': 16 | state = stateError(state, action); 17 | break; 18 | case 'GET_PER_QUESTIONS_SUCCESS': 19 | state = stateSuccess(state, action); 20 | break; 21 | } 22 | return state; 23 | } 24 | -------------------------------------------------------------------------------- /src/root/reducers/personnel-by-event.js: -------------------------------------------------------------------------------- 1 | import { stateInflight, stateError, stateSuccess } from '#utils/reducer-utils'; 2 | 3 | const initialState = { 4 | fetching: false, 5 | fetched: false, 6 | receivedAt: null, 7 | data: {} 8 | }; 9 | 10 | export default function personnelByEvent (state = initialState, action) { 11 | switch (action.type) { 12 | case 'GET_PERSONNEL_BY_EVENT_INFLIGHT': 13 | state = stateInflight(state, action); 14 | break; 15 | case 'GET_PERSONNEL_BY_EVENT_FAILED': 16 | state = stateError(state, action); 17 | break; 18 | case 'GET_PERSONNEL_BY_EVENT_SUCCESS': 19 | state = stateSuccess(state, action); 20 | break; 21 | } 22 | return state; 23 | } 24 | -------------------------------------------------------------------------------- /src/root/reducers/projects.js: -------------------------------------------------------------------------------- 1 | import { 2 | stateInflight, 3 | stateError, 4 | stateSuccess, 5 | } from '#utils/reducer-utils'; 6 | 7 | const initialState = {}; 8 | 9 | export default function reducer (state = initialState, action) { 10 | let newState = { ...state }; 11 | switch (action.type) { 12 | case 'GET_PROJECTS_INFLIGHT': 13 | newState[action.countryId] = stateInflight(state, action); 14 | break; 15 | case 'GET_PROJECTS_FAILED': 16 | newState[action.countryId] = stateError(state, action); 17 | break; 18 | case 'GET_PROJECTS_SUCCESS': 19 | newState[action.countryId] = stateSuccess(state, action); 20 | break; 21 | } 22 | 23 | return newState; 24 | } 25 | -------------------------------------------------------------------------------- /src/root/reducers/regions.js: -------------------------------------------------------------------------------- 1 | import { stateInflight, stateError, stateSuccess } from '#utils/reducer-utils'; 2 | const initialState = { 3 | fetching: false, 4 | fetched: false, 5 | receivedAt: null, 6 | data: {} 7 | }; 8 | 9 | export default function regions (state = initialState, action) { 10 | switch (action.type) { 11 | case 'GET_REGIONS_INFLIGHT': 12 | state = stateInflight(state, action); 13 | break; 14 | case 'GET_REGIONS_FAILED': 15 | state = stateError(state, action); 16 | break; 17 | case 'GET_REGIONS_SUCCESS': 18 | state = stateSuccess(state, action); 19 | break; 20 | } 21 | return state; 22 | } -------------------------------------------------------------------------------- /src/root/reducers/registration.js: -------------------------------------------------------------------------------- 1 | import { stateInflight, stateError, stateSuccess } from '#utils/reducer-utils'; 2 | 3 | const initialState = { 4 | fetching: false, 5 | fetched: false, 6 | receivedAt: null, 7 | data: {} 8 | }; 9 | 10 | function registration (state = initialState, action) { 11 | switch (action.type) { 12 | case 'REGISTER_USER_INFLIGHT': 13 | state = stateInflight(state, action); 14 | break; 15 | case 'REGISTER_USER_FAILED': 16 | state = stateError(state, action); 17 | break; 18 | case 'REGISTER_USER_SUCCESS': 19 | state = stateSuccess(state, action); 20 | break; 21 | } 22 | return state; 23 | } 24 | 25 | export default registration; 26 | -------------------------------------------------------------------------------- /src/root/reducers/resend-validation.js: -------------------------------------------------------------------------------- 1 | import { stateInflight, stateError, stateSuccess } from '#utils/reducer-utils'; 2 | 3 | const initialState = { 4 | fetching: false, 5 | fetched: false, 6 | receivedAt: null, 7 | data: {} 8 | }; 9 | 10 | function resendValidation (state = initialState, action) { 11 | switch (action.type) { 12 | case 'RESEND_VALIDATION_INFLIGHT': 13 | state = stateInflight(state, action); 14 | break; 15 | case 'RESEND_VALIDATION_FAILED': 16 | state = stateError(state, action); 17 | break; 18 | case 'RESEND_VALIDATION_SUCCESS': 19 | state = stateSuccess(state, action); 20 | break; 21 | } 22 | return state; 23 | } 24 | 25 | export default resendValidation; -------------------------------------------------------------------------------- /src/root/reducers/supported_activities.js: -------------------------------------------------------------------------------- 1 | import { stateInflight, stateError, stateSuccess } from '#utils/reducer-utils'; 2 | import { GET_SUPPORTED_ACTIVITIES } from '#actions'; 3 | 4 | const initialState = { 5 | fetching: false, 6 | fetched: false, 7 | receivedAt: null, 8 | data: {} 9 | }; 10 | export default function supportedActivities (state = initialState, action) { 11 | switch (action.type) { 12 | case `${GET_SUPPORTED_ACTIVITIES}_INFLIGHT`: 13 | state = stateInflight(state, action); 14 | break; 15 | case `${GET_SUPPORTED_ACTIVITIES}_FAILED`: 16 | state = stateError(state, action); 17 | break; 18 | case `${GET_SUPPORTED_ACTIVITIES}_SUCCESS`: 19 | state = stateSuccess(state, action); 20 | break; 21 | } 22 | return state; 23 | } 24 | -------------------------------------------------------------------------------- /src/root/resources/montserrat.bold.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IFRCGo/go-frontend/88eaf132b59b01f56891e4fece048c9809ad2ab5/src/root/resources/montserrat.bold.ttf -------------------------------------------------------------------------------- /src/root/resources/open-sans.bold.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IFRCGo/go-frontend/88eaf132b59b01f56891e4fece048c9809ad2ab5/src/root/resources/open-sans.bold.ttf -------------------------------------------------------------------------------- /src/root/resources/open-sans.italic.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IFRCGo/go-frontend/88eaf132b59b01f56891e4fece048c9809ad2ab5/src/root/resources/open-sans.italic.ttf -------------------------------------------------------------------------------- /src/root/resources/open-sans.regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IFRCGo/go-frontend/88eaf132b59b01f56891e4fece048c9809ad2ab5/src/root/resources/open-sans.regular.ttf -------------------------------------------------------------------------------- /src/root/schemas/new-password.js: -------------------------------------------------------------------------------- 1 | 2 | export default { 3 | properties: { 4 | oldPassword: { 5 | type: 'string' 6 | }, 7 | password: { 8 | type: 'string', 9 | minlength: 8 10 | }, 11 | passwordConfirm: { 12 | type: 'string', 13 | minlength: 8 14 | } 15 | }, 16 | required: ['password', 'passwordConfirm'] 17 | }; 18 | -------------------------------------------------------------------------------- /src/root/schemas/per-overview.js: -------------------------------------------------------------------------------- 1 | export default { 2 | properties: { 3 | country_id: { }, 4 | date_of_assessment: { 5 | type: 'string', 6 | format: 'date', 7 | formatMinimum: '1980-01-01', 8 | formatExclusiveMaximum: true 9 | }, 10 | type_of_assessment: { } 11 | }, 12 | required: [ 13 | 'country_id', 14 | 'date_of_assessment', 15 | 'type_of_assessment' 16 | ] 17 | }; 18 | -------------------------------------------------------------------------------- /src/root/types/common.ts: -------------------------------------------------------------------------------- 1 | export interface LabelValue { 2 | value: number; 3 | label: string; 4 | } 5 | 6 | export interface NumericKeyValuePair { 7 | key: number; 8 | value: string; 9 | } 10 | 11 | export interface StringKeyValuePair { 12 | key: string; 13 | value: string; 14 | } 15 | 16 | export interface NumericValueOption { 17 | value: number; 18 | label: string; 19 | description?: string; 20 | } 21 | 22 | export interface BooleanValueOption { 23 | value: boolean; 24 | label: string; 25 | description?: string; 26 | } 27 | 28 | export interface StringValueOption { 29 | value: string; 30 | label: string; 31 | description?: string; 32 | } 33 | 34 | export type SetValueArg = T | ((value: T) => T); 35 | -------------------------------------------------------------------------------- /src/root/types/eru.ts: -------------------------------------------------------------------------------- 1 | import { CountryMini } from './country'; 2 | 3 | export interface ERU { 4 | available: boolean; 5 | deployed_to: CountryMini; 6 | equipment_units: number; 7 | eru_owner: { 8 | id: number; 9 | created_at: string; 10 | updated_at: string; 11 | eru_set: { 12 | available: boolean; 13 | deployed_to: CountryMini; 14 | equipment_units: number; 15 | eru: number; 16 | event: number | null; 17 | id: number; 18 | type: number; 19 | type_display: string; 20 | units: number 21 | }[]; 22 | national_society_country: CountryMini; 23 | } 24 | event: number | null; 25 | id: number; 26 | type: number; 27 | type_display: string; 28 | units: number; 29 | } 30 | -------------------------------------------------------------------------------- /src/root/types/event.ts: -------------------------------------------------------------------------------- 1 | import { CountryMini } from './country'; 2 | 3 | export interface Event { 4 | // TODO 5 | appeals: number[] 6 | contacts: number[] 7 | 8 | countries: CountryMini[]; 9 | auto_generated: boolean; 10 | created_at: string; 11 | disaster_start_date: string; 12 | 13 | emergency_response_contact_email: string | null; 14 | 15 | // TODO: Complete this 16 | } 17 | -------------------------------------------------------------------------------- /src/root/types/index.ts: -------------------------------------------------------------------------------- 1 | import lang from '#root/lang'; 2 | 3 | export * from './common'; 4 | export * from './user'; 5 | export * from './country'; 6 | export * from './project'; 7 | export * from './risk'; 8 | export * from './eru'; 9 | export * from './event'; 10 | export * from './dref'; 11 | 12 | export type Strings = typeof lang; 13 | -------------------------------------------------------------------------------- /src/root/utils/appeal-type-constants.js: -------------------------------------------------------------------------------- 1 | export const appealTypes = { 2 | 0: 'DREF', 3 | 1: 'Appeal', 4 | 2: 'Movement', 5 | 3: 'EAP Activation' 6 | }; 7 | 8 | export const appealTypeOptions = [ 9 | { value: 'all', label: 'All Appeal Types' }, 10 | { value: '0', label: 'DREF' }, 11 | { value: '1', label: 'Emergency Appeals' }, 12 | { value: '2', label: 'Movement' }, 13 | { value: '3', label: 'Early Action Protocol (EAP) Activation'} 14 | ]; 15 | -------------------------------------------------------------------------------- /src/root/utils/country-labels.js: -------------------------------------------------------------------------------- 1 | export const countryLabels = { 2 | 'id': 'countryLabels', 3 | 'source': 'countryCentroids', 4 | 'type': 'symbol', 5 | layout: { 6 | 'text-field': ['get', 'name'], 7 | 'text-font': ['Poppins Regular', 'Arial Unicode MS Regular'], 8 | 'text-letter-spacing': 0.15, 9 | 'text-line-height': 1.2, 10 | 'text-max-width': 8, 11 | 'text-justify': 'center', 12 | 'text-anchor': 'top', 13 | 'text-padding': 2, 14 | 'text-size': [ 15 | 'interpolate', ['linear', 1], ['zoom'], 16 | 0, 6, 17 | 6, 16 18 | ] 19 | }, 20 | paint: { 21 | 'text-color': '#000000', 22 | 'text-halo-color': '#000000', 23 | 'text-halo-width': 0.2 24 | } 25 | }; -------------------------------------------------------------------------------- /src/root/utils/eru-types.js: -------------------------------------------------------------------------------- 1 | const eruTypes = { 2 | '0': 'Basecamp', 3 | '1': 'IT & Telecom', 4 | '2': 'Logistics', 5 | '3': 'RCRC Emergency Hospital', 6 | '4': 'RCRC Emergency Clinic', 7 | '5': 'Relief', 8 | '6': 'WASH M15', 9 | '7': 'WASH MSM20', 10 | '8': 'WASH M40', 11 | '9': 'Water Supply and rehabilitation', 12 | '10': 'Household Water Treatment and safe storage', 13 | '11': 'Cholera Case management at Community level', 14 | '12': 'Safe and Dignified Burials', 15 | '13': 'Community Based Surveillance', 16 | '14': 'Base Camp – S', 17 | '15': 'Base Camp – M', 18 | '16': 'Base Camp – L' 19 | }; 20 | 21 | export default eruTypes; 22 | 23 | export function getEruType (id) { 24 | return eruTypes[id.toString()]; 25 | } 26 | -------------------------------------------------------------------------------- /src/root/utils/exception/FormatDateException.js: -------------------------------------------------------------------------------- 1 | 2 | export class FormatDateException extends Error { } 3 | -------------------------------------------------------------------------------- /src/root/utils/export-map.js: -------------------------------------------------------------------------------- 1 | export default function exportMap (mapInstance) { 2 | if (mapInstance) { 3 | const uri = mapInstance.getCanvas().toDataURL(); 4 | var link = document.createElement('a'); 5 | link.download = 'map.png'; 6 | link.href = uri; 7 | document.body.appendChild(link); 8 | link.click(); 9 | document.body.removeChild(link); 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /src/root/utils/get-country-meta.js: -------------------------------------------------------------------------------- 1 | export function getCountryMeta (countryId, countries) { 2 | countryId = typeof(countryId) === "string" ? Number(countryId) : countryId; 3 | const result = countries.find(d => d.value === countryId); 4 | return result || null; 5 | } 6 | -------------------------------------------------------------------------------- /src/root/utils/get-per-process-type.js: -------------------------------------------------------------------------------- 1 | // FIXME: remove these too if done 2 | export const processType = { 3 | 0: 'Self-assessment', 4 | 1: 'Simulation', 5 | 2: 'Operational', 6 | 3: 'Post Operational' 7 | }; 8 | 9 | export function getPerProcessType (id) { 10 | return processType[id]; 11 | } 12 | -------------------------------------------------------------------------------- /src/root/utils/ie.js: -------------------------------------------------------------------------------- 1 | 2 | export function detectIE () { 3 | const ua = window.navigator.userAgent; 4 | const msie = ua.indexOf('MSIE '); 5 | if (msie > 0) { 6 | // IE 10 or older => return version number 7 | return parseInt(ua.substring(msie + 5, ua.indexOf('.', msie)), 10); 8 | } 9 | 10 | const trident = ua.indexOf('Trident/'); 11 | if (trident > 0) { 12 | // IE 11 => return version number 13 | const rv = ua.indexOf('rv:'); 14 | return parseInt(ua.substring(rv + 3, ua.indexOf('.', rv)), 10); 15 | } 16 | 17 | const edge = ua.indexOf('Edge/'); 18 | if (edge > 0) { 19 | // Edge (IE 12+) => return version number 20 | return parseInt(ua.substring(edge + 5, ua.indexOf('.', edge)), 10); 21 | } 22 | 23 | // other browser 24 | return false; 25 | } 26 | -------------------------------------------------------------------------------- /src/root/utils/request.js: -------------------------------------------------------------------------------- 1 | const emptyObject = {}; 2 | const emptyList = []; 3 | 4 | export const getDataFromResponse = (response = emptyObject, defaultValue = emptyObject) => { 5 | if (!response) { 6 | return defaultValue; 7 | } 8 | 9 | 10 | if (!response.cached && (response.fetching || !response.fetched)) { 11 | return defaultValue; 12 | } 13 | 14 | return response.data; 15 | }; 16 | 17 | export const getResultsFromResponse = (response, defaultValue = emptyList) => { 18 | const data = getDataFromResponse(response); 19 | const { results = defaultValue } = data || emptyObject; 20 | 21 | return results; 22 | }; 23 | -------------------------------------------------------------------------------- /src/root/utils/resolveUrl.ts: -------------------------------------------------------------------------------- 1 | export function resolveUrl(from: string, to: string) { 2 | const resolvedUrl = new URL(to, new URL(from, 'resolve://')); 3 | if (resolvedUrl.protocol === 'resolve:') { 4 | const { pathname, search, hash } = resolvedUrl; 5 | return pathname + search + hash; 6 | } 7 | return resolvedUrl.toString(); 8 | } -------------------------------------------------------------------------------- /src/root/utils/risk-icons/cyclone.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IFRCGo/go-frontend/88eaf132b59b01f56891e4fece048c9809ad2ab5/src/root/utils/risk-icons/cyclone.png -------------------------------------------------------------------------------- /src/root/utils/risk-icons/drought.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IFRCGo/go-frontend/88eaf132b59b01f56891e4fece048c9809ad2ab5/src/root/utils/risk-icons/drought.png -------------------------------------------------------------------------------- /src/root/utils/risk-icons/earthquake.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IFRCGo/go-frontend/88eaf132b59b01f56891e4fece048c9809ad2ab5/src/root/utils/risk-icons/earthquake.png -------------------------------------------------------------------------------- /src/root/utils/risk-icons/flood.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IFRCGo/go-frontend/88eaf132b59b01f56891e4fece048c9809ad2ab5/src/root/utils/risk-icons/flood.png -------------------------------------------------------------------------------- /src/root/utils/risk-icons/storm-surge.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IFRCGo/go-frontend/88eaf132b59b01f56891e4fece048c9809ad2ab5/src/root/utils/risk-icons/storm-surge.png -------------------------------------------------------------------------------- /src/root/utils/risk-icons/wildfire.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IFRCGo/go-frontend/88eaf132b59b01f56891e4fece048c9809ad2ab5/src/root/utils/risk-icons/wildfire.png -------------------------------------------------------------------------------- /src/root/utils/scrollToTop.ts: -------------------------------------------------------------------------------- 1 | const scrollToTop = () => { 2 | window.setTimeout(() => { 3 | window.scrollTo({ 4 | top: Math.min(140, window.scrollY), 5 | left: 0, 6 | behavior: 'smooth', 7 | }); 8 | }, 0); 9 | }; 10 | 11 | export default scrollToTop; 12 | -------------------------------------------------------------------------------- /src/root/utils/special-map-labels.js: -------------------------------------------------------------------------------- 1 | // This util exports places for labeling several special entities. 2 | 3 | export function palestineLabel (lang) { 4 | const name = { 5 | 'en': 'State of Palestine', 6 | 'fr': 'État de Palestine', 7 | 'es': 'Estado de Palestina', 8 | 'ar': 'دولة فلسطين' 9 | }; 10 | 11 | return name[lang]; 12 | } 13 | 14 | -------------------------------------------------------------------------------- /src/root/views/AllEmergencyThreeW/styles.module.scss: -------------------------------------------------------------------------------- 1 | @import '~styles/settings/variables'; 2 | 3 | .all-emergency-three-w { 4 | .main-content { 5 | padding: $spacing*4 0; 6 | margin: 0 -$spacing; 7 | 8 | .projects-table { 9 | width: 100%; 10 | 11 | .action-column { 12 | width: 3rem; 13 | } 14 | } 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /src/root/views/AllFlashUpdates/styles.module.scss: -------------------------------------------------------------------------------- 1 | @import '~styles/settings/variables'; 2 | 3 | .all-flash-updates { 4 | :global { 5 | background-color: $white; 6 | } 7 | .main-content { 8 | padding: $spacing*4 0; 9 | margin: 0 -$spacing; 10 | width: calc(100% + #{$spacing}); 11 | } 12 | 13 | .footer { 14 | display: flex; 15 | justify-content: flex-end; 16 | padding: $spacing*3 $spacing; 17 | } 18 | 19 | .projects-table { 20 | width: 100%; 21 | background-color: inherit; 22 | } 23 | :global { 24 | .styles_table__18cyw { 25 | table-layout: inherit; 26 | } 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /src/root/views/AllThreeW/styles.module.scss: -------------------------------------------------------------------------------- 1 | @import '~styles/settings/variables'; 2 | 3 | .all-three-w { 4 | .main-content { 5 | padding: $spacing*4 0; 6 | margin: 0 -$spacing; 7 | width: calc(100% + #{$spacing}); 8 | } 9 | 10 | .footer { 11 | display: flex; 12 | justify-content: flex-end; 13 | padding: $spacing*3 $spacing; 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /src/root/views/ClearInitCache/index.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import * as localStorage from 'local-storage'; 3 | import { Link } from 'react-router-dom'; 4 | 5 | import styles from './styles.module.scss'; 6 | 7 | import { 8 | ALL_COUNTRIES_STORAGE_KEY, 9 | ALL_REGIONS_STORAGE_KEY, 10 | } from '#utils/store'; 11 | 12 | function ClearInitCache() { 13 | React.useEffect(() => { 14 | localStorage.remove(ALL_COUNTRIES_STORAGE_KEY); 15 | localStorage.remove(ALL_REGIONS_STORAGE_KEY); 16 | }, []); 17 | 18 | return ( 19 |
20 | All cache cleared, goto Home 21 |
22 | ); 23 | } 24 | 25 | export default ClearInitCache; 26 | -------------------------------------------------------------------------------- /src/root/views/ClearInitCache/styles.module.scss: -------------------------------------------------------------------------------- 1 | .clear-init-cache { 2 | padding: 2em; 3 | } 4 | -------------------------------------------------------------------------------- /src/root/views/Country/CountryPlan/StrategicPrioritiesTable/styles.module.scss: -------------------------------------------------------------------------------- 1 | @import '~styles/settings/variables'; 2 | 3 | .strategic-priorities-table { 4 | .content { 5 | padding: 0!important; 6 | 7 | table { 8 | width: 100%; 9 | 10 | th { 11 | text-align: left; 12 | padding: $spacing; 13 | border-bottom: $base-border-width solid $base-border-color; 14 | background-color: $color-background; 15 | } 16 | 17 | td { 18 | padding: $spacing; 19 | border-bottom: $base-border-width solid $base-border-color; 20 | } 21 | } 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /src/root/views/Country/RiskWatch/ImminentEvents/ImminentEventsADAM/styles.module.scss: -------------------------------------------------------------------------------- 1 | @import '~styles/settings/variables'; 2 | 3 | .loading { 4 | z-index: 1; 5 | position: absolute; 6 | left: 0; 7 | top: 0; 8 | width: 100%; 9 | height: 100%; 10 | margin: 0; 11 | background-color: rgba(255, 255, 255, 0.8); 12 | } 13 | 14 | .empty-message { 15 | position: absolute; 16 | display: flex; 17 | align-items: center; 18 | justify-content: center; 19 | top: 0; 20 | left: 0; 21 | width: 100%; 22 | height: 100%; 23 | background-color: rgba(255, 255, 255, 0.8); 24 | 25 | .text { 26 | background-color: $white; 27 | padding: $spacing*2; 28 | box-shadow: $base-box-shadow; 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /src/root/views/Country/RiskWatch/ImminentEvents/ImminentEventsMeteoSwiss/styles.module.scss: -------------------------------------------------------------------------------- 1 | @import '~styles/settings/variables'; 2 | 3 | .empty { 4 | display: flex; 5 | align-items: center; 6 | justify-content: center; 7 | color: $color-text-disabled; 8 | padding: $spacing; 9 | height: 16rem; 10 | font-size: $font-size-lg; 11 | font-weight: $base-font-medium; 12 | } 13 | -------------------------------------------------------------------------------- /src/root/views/Country/RiskWatch/ImminentEvents/ImminentEventsPDC/styles.module.scss: -------------------------------------------------------------------------------- 1 | @import '~styles/settings/variables'; 2 | 3 | .empty-message { 4 | position: absolute; 5 | display: flex; 6 | align-items: center; 7 | justify-content: center; 8 | top: 0; 9 | left: 0; 10 | width: 100%; 11 | height: 100%; 12 | background-color: rgba(255, 255, 255, 0.8); 13 | 14 | .text { 15 | background-color: $white; 16 | padding: $spacing*2; 17 | box-shadow: $base-box-shadow; 18 | } 19 | } 20 | 21 | .loading { 22 | z-index: 1; 23 | position: absolute; 24 | left: 0; 25 | top: 0; 26 | width: 100%; 27 | height: 100%; 28 | margin: 0; 29 | background-color: rgba(255, 255, 255, 0.8); 30 | } 31 | -------------------------------------------------------------------------------- /src/root/views/Country/RiskWatch/ImminentEvents/styles.module.scss: -------------------------------------------------------------------------------- 1 | @import '~styles/settings/variables'; 2 | 3 | .imminent-events { 4 | margin: $spacing*2 0; 5 | 6 | .map-description { 7 | display: flex; 8 | flex-direction: column; 9 | gap: $spacing; 10 | padding: $spacing 0; 11 | } 12 | 13 | .main-content { 14 | position: relative; 15 | min-height: 16rem; 16 | 17 | .map { 18 | z-index: 0; 19 | flex-grow: 1; 20 | height: 50rem; 21 | } 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /src/root/views/Country/RiskWatch/ImminentEventsGDACS/styles.module.scss: -------------------------------------------------------------------------------- 1 | @import '~styles/settings/variables'; 2 | 3 | .loading { 4 | z-index: 1; 5 | position: absolute; 6 | left: 0; 7 | top: 0; 8 | width: 100%; 9 | height: 100%; 10 | margin: 0; 11 | background-color: rgba(255, 255, 255, 0.8); 12 | } 13 | 14 | .empty-message { 15 | position: absolute; 16 | display: flex; 17 | align-items: center; 18 | justify-content: center; 19 | top: 0; 20 | left: 0; 21 | width: 100%; 22 | height: 100%; 23 | background-color: rgba(255, 255, 255, 0.8); 24 | 25 | .text { 26 | background-color: $white; 27 | padding: $spacing*2; 28 | box-shadow: $base-box-shadow; 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /src/root/views/Country/RiskWatch/SeasonalRisk/ReturnPeriodTable/styles.module.scss: -------------------------------------------------------------------------------- 1 | @import '~styles/settings/variables'; 2 | 3 | .return-period-table-container { 4 | .return-period-table { 5 | width: 100%; 6 | } 7 | 8 | .column-heading { 9 | display: flex; 10 | } 11 | } 12 | 13 | .container-description { 14 | display: flex; 15 | align-items: center; 16 | justify-content: space-between; 17 | padding: $spacing*0.5 0; 18 | } 19 | 20 | .filter-input { 21 | width: 14rem; 22 | } 23 | 24 | .link { 25 | color: $primary-color; 26 | } 27 | -------------------------------------------------------------------------------- /src/root/views/Country/RiskWatch/SeasonalRisk/RiskTable/styles.module.scss: -------------------------------------------------------------------------------- 1 | @import '~styles/settings/variables'; 2 | 3 | .risk-table { 4 | width: 100%; 5 | margin: $spacing*2 0; 6 | 7 | .column-heading { 8 | display: flex; 9 | } 10 | } 11 | 12 | .return-period-table-container { 13 | margin: $spacing*2 0; 14 | 15 | .return-period-table { 16 | width: 100%; 17 | } 18 | } 19 | 20 | .container-description { 21 | display: flex; 22 | align-items: center; 23 | justify-content: space-between; 24 | } 25 | 26 | .filter-input { 27 | width: 14rem; 28 | } 29 | 30 | .link { 31 | color: $primary-color; 32 | } 33 | -------------------------------------------------------------------------------- /src/root/views/Country/RiskWatch/index.tsx: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import { _cs } from '@togglecorp/fujs'; 3 | 4 | import Container from '#components/Container'; 5 | 6 | import ImminentEvents from './ImminentEvents'; 7 | import SeasonalRisk from './SeasonalRisk'; 8 | 9 | import styles from './styles.module.scss'; 10 | 11 | interface Props { 12 | countryId: number; 13 | className?: string; 14 | } 15 | 16 | function RiskWatch(props: Props) { 17 | const { 18 | className, 19 | countryId, 20 | } = props; 21 | 22 | return ( 23 | 27 | 30 | 33 | 34 | ); 35 | } 36 | 37 | export default RiskWatch; 38 | -------------------------------------------------------------------------------- /src/root/views/Country/RiskWatch/styles.module.scss: -------------------------------------------------------------------------------- 1 | @import '~styles/settings/variables'; 2 | 3 | .risk-watch { 4 | .content { 5 | display: flex; 6 | flex-direction: column; 7 | gap: $spacing*2; 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /src/root/views/Country/ThreeW/InCountryProjects/Filters/styles.module.scss: -------------------------------------------------------------------------------- 1 | @import '~styles/settings/variables'; 2 | 3 | .filters { 4 | display: flex; 5 | flex-wrap: wrap; 6 | padding: $spacing $spacing*0.5; 7 | 8 | >* { 9 | flex-grow: 1; 10 | flex-basis: 0; 11 | padding: 0 $spacing*0.5; 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /src/root/views/Country/ThreeW/InCountryProjects/SankeyFilters/styles.module.scss: -------------------------------------------------------------------------------- 1 | @import '~styles/settings/variables'; 2 | 3 | .filters { 4 | display: flex; 5 | flex-wrap: wrap; 6 | padding: $spacing $spacing*0.5; 7 | 8 | >* { 9 | flex-grow: 1; 10 | flex-basis: 0; 11 | padding: 0 $spacing*0.5; 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /src/root/views/Country/ThreeW/NSProjects/Filters/styles.module.scss: -------------------------------------------------------------------------------- 1 | @import '~styles/settings/variables'; 2 | 3 | .filters { 4 | display: flex; 5 | flex-wrap: wrap; 6 | padding: $spacing $spacing*0.5; 7 | 8 | >* { 9 | flex-grow: 1; 10 | flex-basis: 0; 11 | padding: 0 $spacing*0.5; 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /src/root/views/Country/ThreeW/NSProjects/Map/arrow.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IFRCGo/go-frontend/88eaf132b59b01f56891e4fece048c9809ad2ab5/src/root/views/Country/ThreeW/NSProjects/Map/arrow.png -------------------------------------------------------------------------------- /src/root/views/Country/ThreeW/NSProjects/SankeyFilters/styles.module.scss: -------------------------------------------------------------------------------- 1 | @import '~styles/settings/variables'; 2 | 3 | .filters { 4 | display: flex; 5 | flex-wrap: wrap; 6 | padding: $spacing $spacing*0.5; 7 | 8 | >* { 9 | flex-grow: 1; 10 | flex-basis: 0; 11 | padding: 0 $spacing*0.5; 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /src/root/views/Country/ThreeW/ProjectDetailModal/styles.module.scss: -------------------------------------------------------------------------------- 1 | @import '~styles/settings/variables'; 2 | 3 | .project-detail { 4 | padding: $spacing*2; 5 | } 6 | -------------------------------------------------------------------------------- /src/root/views/Country/ThreeW/ProjectFlowSankey/styles.module.scss: -------------------------------------------------------------------------------- 1 | @import '~styles/settings/variables'; 2 | 3 | .project-flow-sankey { 4 | height: 60vh!important; 5 | 6 | .sankey-link { 7 | fill-opacity: 0.1; 8 | fill: $secondary-color; 9 | 10 | &.left { 11 | fill: $primary-color; 12 | } 13 | 14 | &:hover { 15 | fill-opacity: 0.4; 16 | } 17 | } 18 | 19 | .node-block { 20 | fill: $secondary-color-light; 21 | fill-opacity: 1; 22 | } 23 | 24 | .label { 25 | fill: $color-text; 26 | stroke-width: 0; 27 | pointer-events: none; 28 | font-size: $font-size-sm; 29 | } 30 | } 31 | 32 | .empty-sankey { 33 | display: flex; 34 | align-items: center; 35 | justify-content: center; 36 | font-size: $font-size-lg; 37 | color: rgba(0, 0, 0, .5); 38 | height: 30vh; 39 | } 40 | -------------------------------------------------------------------------------- /src/root/views/Country/ThreeW/ProjectFormModal/styles.module.scss: -------------------------------------------------------------------------------- 1 | @import '~styles/settings/variables'; 2 | 3 | .project-form-modal { 4 | :global { 5 | .go-input-section { 6 | border-bottom: $base-border-width solid $base-border-color; 7 | } 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /src/root/views/Country/ThreeW/ProjectStatPieChart/styles.module.scss: -------------------------------------------------------------------------------- 1 | @import '~styles/settings/variables'; 2 | 3 | .project-stat-pie-chart { 4 | flex-shrink: 0; 5 | overflow: hidden; 6 | 7 | .title { 8 | font-size: $font-size-sm; 9 | text-align: center; 10 | color: $color-text-light; 11 | font-weight: $base-font-medium; 12 | } 13 | 14 | .responsive-container { 15 | width: 100%; 16 | min-width: 10rem; 17 | height: 108px!important; 18 | } 19 | 20 | :global { 21 | .recharts-legend-item-text { 22 | color: $color-text!important; 23 | } 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /src/root/views/Country/ThreeW/ProjectTableActions/styles.module.scss: -------------------------------------------------------------------------------- 1 | @import '~styles/settings/variables'; 2 | 3 | .project-detail-modal, 4 | .project-form-modal { 5 | width: 100%; 6 | height: 100%; 7 | } 8 | 9 | .overflow-icon { 10 | font-size: 1.4em; 11 | } 12 | 13 | .options-separator { 14 | margin: $spacing*0.5 0; 15 | } 16 | 17 | .delete-option { 18 | color: $danger-color; 19 | } 20 | 21 | -------------------------------------------------------------------------------- /src/root/views/Country/ThreeW/styles.module.scss: -------------------------------------------------------------------------------- 1 | @import '~styles/settings/variables'; 2 | 3 | .three-w { 4 | $page-spacing-v: $spacing*2; 5 | padding: $page-spacing-v 0; 6 | display: flex; 7 | flex-direction: column; 8 | 9 | .header-actions { 10 | display: flex; 11 | justify-content: flex-end; 12 | padding: 0 $spacing*0.5; 13 | } 14 | 15 | .tab-list { 16 | margin: $page-spacing-v 0; 17 | align-self: center; 18 | } 19 | 20 | .wiki-link { 21 | display: flex; 22 | justify-content: flex-end; 23 | padding-bottom: $spacing; 24 | } 25 | } 26 | 27 | -------------------------------------------------------------------------------- /src/root/views/CountryProfile/IndicatorOutput.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import _cs from 'classnames'; 3 | 4 | import FormattedNumber from '#components/formatted-number'; 5 | import styles from './styles.module.scss'; 6 | 7 | const IndicatorOutput = ({ 8 | className, 9 | label, 10 | value, 11 | addSeparatorToValue, 12 | normalizeValue, 13 | fixedTo, 14 | }) => ( 15 |
16 |
17 | {label} 18 |
19 |
20 | 26 |
27 |
28 | ); 29 | 30 | export default IndicatorOutput; 31 | -------------------------------------------------------------------------------- /src/root/views/CountryProfile/common.js: -------------------------------------------------------------------------------- 1 | export const monthList = [ 2 | 'Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec', 3 | ]; 4 | -------------------------------------------------------------------------------- /src/root/views/DrefApplicationForm/ActionsFields/NSActionInput/styles.module.scss: -------------------------------------------------------------------------------- 1 | @import '~styles/settings/variables'; 2 | 3 | .content { 4 | display: flex; 5 | align-items: flex-end; 6 | 7 | >* { 8 | flex-basis: 0; 9 | flex-grow: 1; 10 | } 11 | 12 | .remove-button { 13 | flex-basis: unset; 14 | flex-grow: unset; 15 | flex-shrink: 0; 16 | margin-bottom: 0.5em; 17 | padding: $spacing*0.5 $spacing; 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /src/root/views/DrefApplicationForm/ActionsFields/NeedInput/styles.module.scss: -------------------------------------------------------------------------------- 1 | @import '~styles/settings/variables'; 2 | 3 | .content { 4 | display: flex; 5 | align-items: flex-end; 6 | 7 | >* { 8 | flex-basis: 0; 9 | flex-grow: 1; 10 | } 11 | 12 | .remove-button { 13 | flex-basis: unset; 14 | flex-grow: unset; 15 | flex-shrink: 0; 16 | margin-bottom: 0.5em; 17 | padding: $spacing*0.5 $spacing; 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /src/root/views/DrefApplicationForm/ActionsFields/styles.module.scss: -------------------------------------------------------------------------------- 1 | @import '~styles/settings/_variables.scss'; 2 | 3 | .national-society-actions, 4 | .needs-identified { 5 | .actions { 6 | display: flex; 7 | align-items: flex-end; 8 | padding: $spacing*0.5; 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /src/root/views/DrefApplicationForm/CaptionInput/styles.module.scss: -------------------------------------------------------------------------------- 1 | @import '~styles/settings/_variables.scss'; 2 | 3 | .image-input { 4 | display: flex; 5 | flex-direction: column; 6 | 7 | .caption-input { 8 | width: 100%; 9 | max-width: 12rem; 10 | padding: 0; 11 | } 12 | } -------------------------------------------------------------------------------- /src/root/views/DrefApplicationForm/DrefOverview/CopyFieldReportSection/styles.module.scss: -------------------------------------------------------------------------------- 1 | @import '~styles/settings/_variables.scss'; 2 | 3 | .actions { 4 | flex-grow: unset; 5 | padding: $spacing; 6 | } 7 | -------------------------------------------------------------------------------- /src/root/views/DrefApplicationForm/DrefOverview/CountryDistrictInput/styles.module.scss: -------------------------------------------------------------------------------- 1 | @import '~styles/settings/variables'; 2 | 3 | .country-district-input { 4 | display: flex; 5 | align-items: flex-end; 6 | gap: $spacing; 7 | 8 | >* { 9 | flex-basis: 0; 10 | flex-grow: 1; 11 | } 12 | } -------------------------------------------------------------------------------- /src/root/views/DrefApplicationForm/DrefOverview/ImageWithCaptionInput/styles.module.scss: -------------------------------------------------------------------------------- 1 | @import '~styles/settings/_variables.scss'; 2 | 3 | .image-input { 4 | display: flex; 5 | flex-direction: column; 6 | justify-content: center; 7 | gap: $spacing; 8 | 9 | .caption-input { 10 | width: 100%; 11 | max-width: 12rem; 12 | padding: 0; 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /src/root/views/DrefApplicationForm/EventDetails/styles.module.scss: -------------------------------------------------------------------------------- 1 | @import '~styles/settings/_variables.scss'; 2 | 3 | .map-input-content, 4 | .image-input-content { 5 | display: flex; 6 | flex-direction: column; 7 | 8 | .preview-list { 9 | display: flex; 10 | flex-wrap: wrap; 11 | gap: $spacing; 12 | } 13 | } -------------------------------------------------------------------------------- /src/root/views/DrefApplicationForm/ObsoletePayloadResolutionModal/styles.module.scss: -------------------------------------------------------------------------------- 1 | .obsolete-payload-resolution-modal { 2 | max-width: 30rem; 3 | width: 100%; 4 | } 5 | -------------------------------------------------------------------------------- /src/root/views/DrefApplicationForm/Response/IndicatorInput/styles.module.scss: -------------------------------------------------------------------------------- 1 | @import '~styles/settings/_variables.scss'; 2 | 3 | .indicator { 4 | display: flex; 5 | gap: $spacing ; 6 | align-items: center; 7 | 8 | .inputs { 9 | display: flex; 10 | gap: $spacing ; 11 | } 12 | } -------------------------------------------------------------------------------- /src/root/views/DrefApplicationForm/Response/InterventionInput/styles.module.scss: -------------------------------------------------------------------------------- 1 | @import '~styles/settings/variables'; 2 | 3 | .intervention-input { 4 | display: flex; 5 | background-color: $white; 6 | 7 | .input-section { 8 | display: flex; 9 | flex-grow: 1; 10 | } 11 | 12 | .remove-button { 13 | align-self: flex-start; 14 | flex-shrink: 0; 15 | margin-right: $spacing*2; 16 | margin-top: $spacing*2; 17 | padding: $spacing*0.25; 18 | } 19 | 20 | .male-female { 21 | display: flex; 22 | gap: $spacing; 23 | } 24 | 25 | .addIndicatorContainer { 26 | display: flex; 27 | flex-direction: column; 28 | gap: $spacing*2; 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /src/root/views/DrefApplicationForm/Response/RiskSecurityInput/styles.module.scss: -------------------------------------------------------------------------------- 1 | @import '~styles/settings/variables'; 2 | 3 | .risk-security-input { 4 | display: flex; 5 | align-items: flex-end; 6 | gap: $spacing; 7 | 8 | >* { 9 | flex-basis: 0; 10 | flex-grow: 1; 11 | } 12 | 13 | .remove-button { 14 | flex-grow: 0; 15 | flex-shrink: 0; 16 | flex-basis: unset; 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /src/root/views/DrefApplicationForm/Submission/styles.module.scss: -------------------------------------------------------------------------------- 1 | @import '~styles/settings/_variables.scss'; 2 | 3 | .submission { 4 | :global { 5 | .go-input-section { 6 | margin: $spacing 0; 7 | box-shadow: $box-shadow-component; 8 | } 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /src/root/views/DrefApplicationForm/styles.module.scss: -------------------------------------------------------------------------------- 1 | @import '~styles/settings/_variables.scss'; 2 | 3 | .new-field-report-form { 4 | padding: 0; 5 | 6 | .tab-list { 7 | justify-content: center; 8 | margin: $spacing*2 4vw; 9 | } 10 | } 11 | 12 | .actions { 13 | padding: $spacing*3 $spacing; 14 | display: flex; 15 | align-items: center; 16 | justify-content: center; 17 | 18 | >* { 19 | margin: 0 $spacing*0.5; 20 | } 21 | } 22 | 23 | .error-message { 24 | display: flex; 25 | flex-direction: column; 26 | align-items: center; 27 | text-align: center; 28 | padding: $spacing*4 $spacing*2 !important; 29 | opacity: 0.8; 30 | 31 | h3 { 32 | color: $danger-color; 33 | } 34 | 35 | p { 36 | margin: 0; 37 | } 38 | } 39 | 40 | .language-mismatch { 41 | text-align: center; 42 | } 43 | -------------------------------------------------------------------------------- /src/root/views/DrefOpPdfPreview/styles.module.scss: -------------------------------------------------------------------------------- 1 | .pdf-preview { 2 | width: 100%; 3 | height: 100vh; 4 | } 5 | -------------------------------------------------------------------------------- /src/root/views/DrefOperationalUpdateForm/EventDetails/styles.module.scss: -------------------------------------------------------------------------------- 1 | @import '~styles/settings/_variables.scss'; 2 | 3 | .map-input-content, 4 | .image-input-content { 5 | display: flex; 6 | flex-direction: column; 7 | 8 | .preview-list { 9 | display: flex; 10 | flex-wrap: wrap; 11 | gap: $spacing; 12 | } 13 | } -------------------------------------------------------------------------------- /src/root/views/DrefOperationalUpdateForm/Needs/styles.module.scss: -------------------------------------------------------------------------------- 1 | @import '~styles/settings/_variables.scss'; 2 | 3 | .national-society-actions, 4 | .needs-identified { 5 | .actions { 6 | display: flex; 7 | align-items: flex-end; 8 | padding: $spacing*0.5; 9 | } 10 | } 11 | 12 | .map-input-content, 13 | .image-input-content { 14 | display: flex; 15 | flex-direction: column; 16 | 17 | .preview-list { 18 | display: flex; 19 | flex-wrap: wrap; 20 | gap: $spacing; 21 | } 22 | } -------------------------------------------------------------------------------- /src/root/views/DrefOperationalUpdateForm/ObsoletePayloadResolutionModal/styles.module.scss: -------------------------------------------------------------------------------- 1 | .obsolete-payload-resolution-modal { 2 | max-width: 30rem; 3 | width: 100%; 4 | } 5 | -------------------------------------------------------------------------------- /src/root/views/DrefOperationalUpdateForm/Overview/styles.module.scss: -------------------------------------------------------------------------------- 1 | .generate-title-button { 2 | flex-grow: unset!important; 3 | flex-basis: initial!important; 4 | flex-shrink: 0!important; 5 | } 6 | -------------------------------------------------------------------------------- /src/root/views/DrefOperationalUpdateForm/Submission/styles.module.scss: -------------------------------------------------------------------------------- 1 | @import '~styles/settings/_variables.scss'; 2 | 3 | .submission { 4 | :global { 5 | .go-input-section { 6 | margin: $spacing 0; 7 | box-shadow: $box-shadow-component; 8 | } 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /src/root/views/DrefOperationalUpdateForm/styles.module.scss: -------------------------------------------------------------------------------- 1 | @import '~styles/settings/_variables.scss'; 2 | 3 | .actions { 4 | padding: $spacing*3 $spacing; 5 | display: flex; 6 | align-items: center; 7 | justify-content: center; 8 | 9 | >* { 10 | margin: 0 $spacing*0.5; 11 | } 12 | } 13 | 14 | .warning { 15 | color: $warning-color; 16 | font-weight: $base-font-medium; 17 | padding: $spacing*0.5; 18 | } 19 | 20 | .language-mismatch { 21 | text-align: center; 22 | } 23 | -------------------------------------------------------------------------------- /src/root/views/DrefPdfPreview/styles.module.scss: -------------------------------------------------------------------------------- 1 | .pdf-preview { 2 | width: 100%; 3 | height: 100vh; 4 | } 5 | -------------------------------------------------------------------------------- /src/root/views/Emergency/Activities/Filters/styles.module.scss: -------------------------------------------------------------------------------- 1 | @import '~styles/settings/variables'; 2 | 3 | .filters { 4 | display: flex; 5 | gap: $spacing; 6 | 7 | .filter { 8 | flex-basis: 16rem; 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /src/root/views/Emergency/Activities/StatsPie/styles.module.scss: -------------------------------------------------------------------------------- 1 | .project-stat-pie-chart { 2 | :global { 3 | .recharts-legend-item-text { 4 | color: rgba(0, 0, 0, .7)!important; 5 | } 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /src/root/views/EmergencyThreeW/styles.module.scss: -------------------------------------------------------------------------------- 1 | @import '~styles/settings/variables'; 2 | 3 | .three-w-details { 4 | .content { 5 | padding: 0; 6 | } 7 | 8 | .last-modified { 9 | display: flex; 10 | justify-content: center; 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /src/root/views/EmergencyThreeWEdit/styles.module.scss: -------------------------------------------------------------------------------- 1 | @import '~styles/settings/variables'; 2 | 3 | .emergency-three-w-edit { 4 | } 5 | -------------------------------------------------------------------------------- /src/root/views/FieldReportForm/ActionsFields/styles.module.scss: -------------------------------------------------------------------------------- 1 | @import '~styles/settings/_variables.scss'; 2 | 3 | .category { 4 | padding: $spacing; 5 | font-weight: $base-font-bold; 6 | } 7 | 8 | .action-taken { 9 | margin: $spacing 0; 10 | } 11 | 12 | .actions-fields { 13 | .numeric-section { 14 | display: flex; 15 | flex-wrap: wrap; 16 | background-color: $color-foreground; 17 | box-shadow: $box-shadow-component; 18 | margin: $spacing 0; 19 | 20 | >* { 21 | flex-basis: 50%; 22 | 23 | >:first-child { 24 | flex-basis: 50%; 25 | } 26 | } 27 | } 28 | 29 | .other-section { 30 | :global { 31 | .go-input-section { 32 | margin: $spacing 0; 33 | box-shadow: $box-shadow-component; 34 | } 35 | } 36 | } 37 | } 38 | -------------------------------------------------------------------------------- /src/root/views/FieldReportForm/ContextFields/styles.module.scss: -------------------------------------------------------------------------------- 1 | @import '~styles/settings/_variables.scss'; 2 | 3 | .context-fields { 4 | :global { 5 | .go-input-section { 6 | margin: $spacing 0; 7 | box-shadow: $box-shadow-component; 8 | } 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /src/root/views/FieldReportForm/EarlyActionsFields/styles.module.scss: -------------------------------------------------------------------------------- 1 | @import '~styles/settings/_variables.scss'; 2 | 3 | .early-action-fields { 4 | .numeric-section { 5 | display: flex; 6 | flex-wrap: wrap; 7 | background-color: $color-foreground; 8 | box-shadow: $box-shadow-component; 9 | margin: $spacing 0; 10 | 11 | >* { 12 | flex-basis: 50%; 13 | 14 | >:first-child { 15 | flex-basis: 50%; 16 | } 17 | } 18 | } 19 | 20 | .other-section { 21 | :global { 22 | .go-input-section { 23 | margin: $spacing 0; 24 | box-shadow: $box-shadow-component; 25 | } 26 | } 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /src/root/views/FieldReportForm/ResponseFields/styles.module.scss: -------------------------------------------------------------------------------- 1 | @import '~styles/settings/_variables.scss'; 2 | 3 | .contacts-section { 4 | :global { 5 | .go-input-section { 6 | margin: $spacing 0; 7 | box-shadow: $box-shadow-component; 8 | } 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /src/root/views/FieldReportForm/RiskAnalysisFields/styles.module.scss: -------------------------------------------------------------------------------- 1 | @import '~styles/settings/_variables.scss'; 2 | 3 | .risk-analysis-fields { 4 | .source-radio-list-container { 5 | flex-direction: column; 6 | } 7 | 8 | :global { 9 | .go-input-section { 10 | margin: $spacing 0; 11 | box-shadow: $box-shadow-component; 12 | } 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /src/root/views/FieldReportForm/SituationFields/styles.module.scss: -------------------------------------------------------------------------------- 1 | @import '~styles/settings/_variables.scss'; 2 | 3 | .situation-fields { 4 | .source-radio-list-container { 5 | flex-direction: column; 6 | } 7 | 8 | :global { 9 | .go-input-section { 10 | margin: $spacing 0; 11 | box-shadow: $box-shadow-component; 12 | } 13 | } 14 | } 15 | 16 | .covid-situation-fields { 17 | .input-section-group { 18 | background-color: $color-foreground; 19 | margin: $spacing 0; 20 | box-shadow: $box-shadow-component; 21 | } 22 | 23 | .non-grouped-inputs-section { 24 | :global { 25 | .go-input-section { 26 | margin: $spacing 0; 27 | box-shadow: $box-shadow-component; 28 | } 29 | } 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /src/root/views/FieldReportForm/styles.module.scss: -------------------------------------------------------------------------------- 1 | @import '~styles/settings/_variables.scss'; 2 | 3 | .new-field-report-form { 4 | padding: 0; 5 | 6 | .tab-list { 7 | justify-content: center; 8 | margin: $spacing*2 4vw; 9 | } 10 | 11 | .actions { 12 | padding: $spacing*3 $spacing; 13 | display: flex; 14 | align-items: center; 15 | justify-content: center; 16 | 17 | >* { 18 | margin: 0 $spacing*0.5; 19 | } 20 | } 21 | 22 | .language-mismatch { 23 | text-align: center; 24 | } 25 | 26 | .tab-content { 27 | display: flex; 28 | flex-direction: column; 29 | gap: $spacing*4; 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /src/root/views/FinalReportForm/EventDetails/styles.module.scss: -------------------------------------------------------------------------------- 1 | @import '~styles/settings/_variables.scss'; 2 | 3 | .image-input-content { 4 | display: flex; 5 | flex-direction: column; 6 | 7 | .preview-list { 8 | display: flex; 9 | flex-wrap: wrap; 10 | gap: $spacing; 11 | } 12 | } -------------------------------------------------------------------------------- /src/root/views/FinalReportForm/Needs/styles.module.scss: -------------------------------------------------------------------------------- 1 | @import '~styles/settings/_variables.scss'; 2 | 3 | .national-society-actions, 4 | .needs-identified { 5 | .actions { 6 | display: flex; 7 | align-items: flex-end; 8 | padding: $spacing*0.5; 9 | } 10 | } 11 | 12 | .map-input-content, 13 | .image-input-content { 14 | display: flex; 15 | flex-direction: column; 16 | 17 | .preview-list { 18 | display: flex; 19 | flex-wrap: wrap; 20 | gap: $spacing; 21 | } 22 | } -------------------------------------------------------------------------------- /src/root/views/FinalReportForm/ObsoletePayloadResolutionModal/styles.module.scss: -------------------------------------------------------------------------------- 1 | .obsolete-payload-resolution-modal { 2 | max-width: 30rem; 3 | width: 100%; 4 | } 5 | -------------------------------------------------------------------------------- /src/root/views/FinalReportForm/Operation/IndicatorInput/styles.module.scss: -------------------------------------------------------------------------------- 1 | @import '~styles/settings/_variables.scss'; 2 | 3 | .indicator { 4 | display: flex; 5 | gap: $spacing ; 6 | align-items: center; 7 | 8 | .inputs { 9 | display: flex; 10 | gap: $spacing; 11 | } 12 | } -------------------------------------------------------------------------------- /src/root/views/FinalReportForm/Overview/styles.module.scss: -------------------------------------------------------------------------------- 1 | @import '~styles/settings/_variables.scss'; 2 | 3 | .disaster-category-help-link { 4 | display: flex; 5 | align-items: center; 6 | margin-inline-start: $spacing; 7 | font-size: 1rem; 8 | } 9 | 10 | .people-targeted-help-link { 11 | margin-inline-start: $spacing; 12 | font-size: 1rem; 13 | } -------------------------------------------------------------------------------- /src/root/views/FinalReportForm/Submission/styles.module.scss: -------------------------------------------------------------------------------- 1 | @import '~styles/settings/_variables.scss'; 2 | 3 | .submission { 4 | :global { 5 | .go-input-section { 6 | margin: $spacing 0; 7 | box-shadow: $box-shadow-component; 8 | } 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /src/root/views/FinalReportForm/styles.module.scss: -------------------------------------------------------------------------------- 1 | @import '~styles/settings/_variables.scss'; 2 | 3 | .actions { 4 | padding: $spacing*3 $spacing; 5 | display: flex; 6 | align-items: center; 7 | justify-content: center; 8 | 9 | >* { 10 | margin: 0 $spacing*0.5; 11 | } 12 | } 13 | 14 | .language-mismatch { 15 | text-align: center; 16 | } 17 | -------------------------------------------------------------------------------- /src/root/views/FinalReportPdfPreview/styles.module.scss: -------------------------------------------------------------------------------- 1 | .pdf-preview { 2 | width: 100%; 3 | height: 100vh; 4 | } 5 | -------------------------------------------------------------------------------- /src/root/views/FlashUpdateApplicationForm/ActionsInput/ActionInput/styles.module.scss: -------------------------------------------------------------------------------- 1 | @import '~styles/settings/_variables.scss'; 2 | 3 | .action-input { 4 | display: flex; 5 | flex-direction: column; 6 | gap: $spacing*2; 7 | } 8 | -------------------------------------------------------------------------------- /src/root/views/FlashUpdateApplicationForm/Context/CountryProvinceInput/styles.module.scss: -------------------------------------------------------------------------------- 1 | @import '~styles/settings/variables'; 2 | 3 | .country-district-input { 4 | display: flex; 5 | align-items: flex-start; 6 | gap: $spacing; 7 | 8 | >* { 9 | flex-basis: 0; 10 | flex-grow: 1; 11 | } 12 | 13 | .remove-button { 14 | flex-basis: unset; 15 | flex-grow: unset; 16 | flex-shrink: 0; 17 | margin-top: 2rem; 18 | padding: $spacing*0.5 $spacing; 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /src/root/views/FlashUpdateApplicationForm/Context/GraphicInput/styles.module.scss: -------------------------------------------------------------------------------- 1 | .graphic-input { 2 | display: flex; 3 | flex-direction: column; 4 | align-items: center; 5 | 6 | .caption-input { 7 | max-width: 12rem; 8 | padding: 0; 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /src/root/views/FlashUpdateApplicationForm/Context/MapInput/styles.module.scss: -------------------------------------------------------------------------------- 1 | .map-input { 2 | display: flex; 3 | flex-direction: column; 4 | align-items: center; 5 | 6 | .caption-input { 7 | max-width: 12rem; 8 | padding: 0; 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /src/root/views/FlashUpdateApplicationForm/Context/ReferenceInput/styles.module.scss: -------------------------------------------------------------------------------- 1 | @import '~styles/settings/_variables.scss'; 2 | 3 | .reference { 4 | display: flex; 5 | flex-wrap: wrap; 6 | 7 | .first-column { 8 | flex-grow: 1; 9 | } 10 | 11 | .second-column { 12 | flex-basis: 16rem; 13 | flex-shrink: 0; 14 | } 15 | 16 | .actions { 17 | flex-shrink: 0; 18 | padding: $spacing; 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /src/root/views/FlashUpdateApplicationForm/Context/styles.module.scss: -------------------------------------------------------------------------------- 1 | @import '~styles/settings/_variables.scss'; 2 | 3 | .context { 4 | .actions { 5 | justify-content: flex-end; 6 | flex-basis: unset; 7 | flex-grow: unset; 8 | padding: 0 $spacing; 9 | } 10 | 11 | .map-input-content, 12 | .graphics-input-content { 13 | display: flex; 14 | flex-direction: column; 15 | 16 | .preview-list { 17 | display: flex; 18 | flex-wrap: wrap; 19 | gap: $spacing; 20 | } 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /src/root/views/FlashUpdateApplicationForm/styles.module.scss: -------------------------------------------------------------------------------- 1 | @import '~styles/settings/_variables.scss'; 2 | 3 | .actions { 4 | padding: $spacing*3 $spacing; 5 | display: flex; 6 | align-items: center; 7 | justify-content: center; 8 | 9 | >* { 10 | margin: 0 $spacing*0.5; 11 | } 12 | } 13 | 14 | .error-message { 15 | padding: $spacing*4 $spacing*2 !important; 16 | opacity: 0.7; 17 | 18 | h3 { 19 | color: $danger-color; 20 | } 21 | 22 | p { 23 | margin: 0; 24 | } 25 | } 26 | 27 | .language-mismatch { 28 | text-align: center; 29 | } 30 | -------------------------------------------------------------------------------- /src/root/views/FlashUpdateReport/ExportButton/styles.module.scss: -------------------------------------------------------------------------------- 1 | @keyframes spin { 2 | from { 3 | transform: rotate(0deg); 4 | } 5 | 6 | to { 7 | transform: rotate(360deg); 8 | } 9 | } 10 | 11 | .export-button { 12 | .spinner { 13 | animation: spin 1s linear infinite; 14 | } 15 | } 16 | 17 | -------------------------------------------------------------------------------- /src/root/views/FlashUpdateReport/ShareButton/styles.module.scss: -------------------------------------------------------------------------------- 1 | @import '~styles/settings/variables'; 2 | 3 | .backdrop { 4 | display: flex; 5 | align-items: center; 6 | justify-content: center; 7 | z-index: 11; 8 | 9 | .share-modal { 10 | width: 30rem; 11 | height: 30rem; 12 | max-width: 100vw; 13 | max-height: 96vh; 14 | background-color: #fff; 15 | padding: $spacing; 16 | border-radius: .3rem; 17 | 18 | .body { 19 | position: relative; 20 | padding: $spacing*2 0; 21 | display: flex; 22 | flex-direction: column; 23 | gap: $spacing; 24 | 25 | .loading { 26 | position: absolute; 27 | left: 0; 28 | top: 0; 29 | width: 100%; 30 | height: 100%; 31 | margin: 0; 32 | border: none; 33 | z-index: 1; 34 | } 35 | } 36 | } 37 | } 38 | -------------------------------------------------------------------------------- /src/root/views/GlobalRiskWatch/ImminentEvents/ImminentEventsADAM/styles.module.scss: -------------------------------------------------------------------------------- 1 | @import '~styles/settings/variables'; 2 | 3 | .imminent-events { 4 | margin: $spacing*2 0; 5 | 6 | .map-description { 7 | padding: $spacing; 8 | } 9 | 10 | .main-content { 11 | position: relative; 12 | min-height: 20rem; 13 | 14 | .map { 15 | z-index: 0; 16 | flex-grow: 1; 17 | height: 50rem; 18 | } 19 | } 20 | } 21 | .empty-message { 22 | position: absolute; 23 | display: flex; 24 | align-items: center; 25 | justify-content: center; 26 | top: 0; 27 | left: 0; 28 | width: 100%; 29 | height: 100%; 30 | background-color: rgba(255, 255, 255, 0.8); 31 | 32 | .text { 33 | background-color: $white; 34 | padding: $spacing*2; 35 | box-shadow: $base-box-shadow; 36 | } 37 | } 38 | -------------------------------------------------------------------------------- /src/root/views/GlobalRiskWatch/ImminentEvents/ImminentEventsPDC/styles.module.scss: -------------------------------------------------------------------------------- 1 | @import '~styles/settings/variables'; 2 | 3 | .empty-message { 4 | position: absolute; 5 | display: flex; 6 | align-items: center; 7 | justify-content: center; 8 | top: 0; 9 | left: 0; 10 | width: 100%; 11 | height: 100%; 12 | background-color: rgba(255, 255, 255, 0.8); 13 | 14 | .text { 15 | background-color: $white; 16 | padding: $spacing*2; 17 | box-shadow: $base-box-shadow; 18 | } 19 | } 20 | 21 | .pdc-link { 22 | text-decoration: underline; 23 | } 24 | -------------------------------------------------------------------------------- /src/root/views/GlobalRiskWatch/SeasonalRisk/Filters/FilterOutput/styles.module.scss: -------------------------------------------------------------------------------- 1 | @import '~styles/settings/variables'; 2 | 3 | .filter-output { 4 | display: flex; 5 | align-items: baseline; 6 | gap: $spacing; 7 | 8 | .label { 9 | color: $light-base-color; 10 | font-size: $font-size-sm; 11 | font-weight: $base-font-light; 12 | } 13 | 14 | .selected-values { 15 | display: flex; 16 | flex-wrap: wrap; 17 | gap: $spacing*0.5; 18 | 19 | .chip { 20 | border: none; 21 | background-color: $color-filter-tag; 22 | color: $color-filter-tag-text; 23 | } 24 | } 25 | 26 | .reduced-list-details { 27 | display: flex; 28 | gap: $spacing; 29 | align-items: center; 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /src/root/views/GlobalRiskWatch/SeasonalRisk/Filters/styles.module.scss: -------------------------------------------------------------------------------- 1 | @import '~styles/settings/variables'; 2 | 3 | .filters { 4 | display: flex; 5 | flex-direction: column; 6 | justify-content: center; 7 | gap: $spacing * 2; 8 | 9 | .inputs { 10 | display: flex; 11 | align-items: center; 12 | gap: $spacing; 13 | flex-wrap: wrap; 14 | 15 | .filter-input { 16 | width: 11.25rem; 17 | } 18 | } 19 | 20 | .outputs { 21 | display: flex; 22 | align-items: center; 23 | flex-wrap: wrap; 24 | gap: $spacing*1.5; 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /src/root/views/GlobalRiskWatch/SeasonalRisk/Map/styles.module.scss: -------------------------------------------------------------------------------- 1 | @import "~styles/settings/variables"; 2 | 3 | .map { 4 | position: relative; 5 | 6 | .map-container { 7 | height: 40rem; 8 | } 9 | 10 | .map-disclaimer { 11 | position: absolute; 12 | left: $mapbox-icon-width + $spacing*0.5; 13 | bottom: $spacing*0.25; 14 | } 15 | 16 | :global { 17 | 18 | .mapboxgl-popup-close-button { 19 | position: absolute; 20 | right: $spacing !important; 21 | top: $spacing !important; 22 | font-size: $font-size-heading-widget !important; 23 | font-weight: $base-font-light !important; 24 | opacity: 0.6 !important; 25 | } 26 | } 27 | } 28 | 29 | -------------------------------------------------------------------------------- /src/root/views/GlobalRiskWatch/styles.module.scss: -------------------------------------------------------------------------------- 1 | @import '~styles/settings/variables'; 2 | 3 | .regional-risk-watch { 4 | .content { 5 | display: flex; 6 | flex-direction: column; 7 | padding: $spacing*2 0; 8 | gap: $spacing*2; 9 | 10 | .tab-list { 11 | align-self: center; 12 | } 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /src/root/views/GlobalThreeW/Filters/styles.module.scss: -------------------------------------------------------------------------------- 1 | @import '~styles/settings/variables'; 2 | 3 | .filters { 4 | display: flex; 5 | flex-wrap: wrap; 6 | gap: $spacing; 7 | 8 | >* { 9 | flex-grow: 1; 10 | flex-basis: 0; 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /src/root/views/GlobalThreeW/common.ts: -------------------------------------------------------------------------------- 1 | export interface NSOngoingProjectStat { 2 | id: number; 3 | iso3: string; 4 | ongoing_projects: number; 5 | target_total: number; 6 | society_name: string; 7 | name: string; 8 | operation_types: number[]; 9 | operation_types_display: string[]; 10 | budget_amount_total: number; 11 | projects_per_sector: { 12 | primary_sector: number; 13 | primary_sector_display: string; 14 | count: number; 15 | }[]; 16 | } 17 | 18 | -------------------------------------------------------------------------------- /src/root/views/NewThreeW/styles.module.scss: -------------------------------------------------------------------------------- 1 | @import '~styles/settings/variables'; 2 | 3 | .new-three-w { 4 | .main-content { 5 | display: flex; 6 | flex-direction: column; 7 | gap: $spacing; 8 | } 9 | 10 | .three-w-program { 11 | display: flex; 12 | flex-direction: column; 13 | gap: $spacing; 14 | 15 | :global { 16 | .go-input-section { 17 | box-shadow: $box-shadow-component; 18 | } 19 | } 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /src/root/views/RegionalRiskWatch/ImminentEvents/ImminentEventsADAM/styles.module.scss: -------------------------------------------------------------------------------- 1 | @import '~styles/settings/variables'; 2 | 3 | .imminent-events { 4 | margin: $spacing*2 0; 5 | 6 | .map-description { 7 | padding: $spacing; 8 | } 9 | 10 | .main-content { 11 | position: relative; 12 | min-height: 20rem; 13 | 14 | .map { 15 | z-index: 0; 16 | flex-grow: 1; 17 | height: 50rem; 18 | } 19 | } 20 | } 21 | .empty-message { 22 | position: absolute; 23 | display: flex; 24 | align-items: center; 25 | justify-content: center; 26 | top: 0; 27 | left: 0; 28 | width: 100%; 29 | height: 100%; 30 | background-color: rgba(255, 255, 255, 0.8); 31 | 32 | .text { 33 | background-color: $white; 34 | padding: $spacing*2; 35 | box-shadow: $base-box-shadow; 36 | } 37 | } 38 | -------------------------------------------------------------------------------- /src/root/views/RegionalRiskWatch/ImminentEvents/ImminentEventsGDACS/styles.module.scss: -------------------------------------------------------------------------------- 1 | @import '~styles/settings/variables'; 2 | 3 | .empty-message { 4 | position: absolute; 5 | display: flex; 6 | align-items: center; 7 | justify-content: center; 8 | top: 0; 9 | left: 0; 10 | width: 100%; 11 | height: 100%; 12 | background-color: rgba(255, 255, 255, 0.8); 13 | 14 | .text { 15 | background-color: $white; 16 | padding: $spacing*2; 17 | box-shadow: $base-box-shadow; 18 | } 19 | } 20 | 21 | .pdc-link { 22 | text-decoration: underline; 23 | } -------------------------------------------------------------------------------- /src/root/views/RegionalRiskWatch/ImminentEvents/ImminentEventsMeteoSwiss/styles.module.scss: -------------------------------------------------------------------------------- 1 | @import '~styles/settings/variables'; 2 | 3 | .imminent-events { 4 | margin: $spacing*2 0; 5 | 6 | .map-description { 7 | padding: $spacing; 8 | } 9 | 10 | .main-content { 11 | position: relative; 12 | min-height: 20rem; 13 | 14 | .map { 15 | z-index: 0; 16 | flex-grow: 1; 17 | height: 50rem; 18 | } 19 | } 20 | } 21 | .empty-message { 22 | position: absolute; 23 | display: flex; 24 | align-items: center; 25 | justify-content: center; 26 | top: 0; 27 | left: 0; 28 | width: 100%; 29 | height: 100%; 30 | background-color: rgba(255, 255, 255, 0.8); 31 | 32 | .text { 33 | background-color: $white; 34 | padding: $spacing*2; 35 | box-shadow: $base-box-shadow; 36 | } 37 | } 38 | -------------------------------------------------------------------------------- /src/root/views/RegionalRiskWatch/ImminentEvents/ImminentEventsPDC/styles.module.scss: -------------------------------------------------------------------------------- 1 | @import '~styles/settings/variables'; 2 | 3 | .empty-message { 4 | position: absolute; 5 | display: flex; 6 | align-items: center; 7 | justify-content: center; 8 | top: 0; 9 | left: 0; 10 | width: 100%; 11 | height: 100%; 12 | background-color: rgba(255, 255, 255, 0.8); 13 | 14 | .text { 15 | background-color: $white; 16 | padding: $spacing*2; 17 | box-shadow: $base-box-shadow; 18 | } 19 | } 20 | 21 | .pdc-link { 22 | text-decoration: underline; 23 | } 24 | -------------------------------------------------------------------------------- /src/root/views/RegionalRiskWatch/SeasonalRisk/Filters/FilterOutput/styles.module.scss: -------------------------------------------------------------------------------- 1 | @import '~styles/settings/variables'; 2 | 3 | .filter-output { 4 | display: flex; 5 | align-items: baseline; 6 | gap: $spacing; 7 | 8 | .label { 9 | color: $light-base-color; 10 | font-size: $font-size-sm; 11 | font-weight: $base-font-light; 12 | } 13 | 14 | .selected-values { 15 | display: flex; 16 | flex-wrap: wrap; 17 | gap: $spacing*0.5; 18 | 19 | .chip { 20 | border: none; 21 | background-color: $color-filter-tag; 22 | color: $color-filter-tag-text; 23 | } 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /src/root/views/RegionalRiskWatch/SeasonalRisk/Filters/styles.module.scss: -------------------------------------------------------------------------------- 1 | @import '~styles/settings/variables'; 2 | 3 | .filters { 4 | display: flex; 5 | flex-direction: column; 6 | justify-content: center; 7 | gap: $spacing * 2; 8 | 9 | .inputs { 10 | display: flex; 11 | align-items: center; 12 | gap: $spacing; 13 | flex-wrap: wrap; 14 | 15 | .filter-input { 16 | width: 11.25rem; 17 | } 18 | } 19 | 20 | .outputs { 21 | display: flex; 22 | align-items: center; 23 | flex-wrap: wrap; 24 | gap: $spacing*1.5; 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /src/root/views/RegionalRiskWatch/SeasonalRisk/Map/LegendItem/index.tsx: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | 3 | import styles from './styles.module.scss'; 4 | 5 | interface Props { 6 | color: string; 7 | label: string; 8 | } 9 | 10 | function LegendItem(props: Props) { 11 | const { 12 | color, 13 | label, 14 | } = props; 15 | 16 | return ( 17 |
18 |
22 |
23 | { label } 24 |
25 |
26 | ); 27 | } 28 | 29 | export default LegendItem; 30 | -------------------------------------------------------------------------------- /src/root/views/RegionalRiskWatch/SeasonalRisk/Map/LegendItem/styles.module.scss: -------------------------------------------------------------------------------- 1 | @import "~styles/settings/variables"; 2 | 3 | .legend-item { 4 | display: flex; 5 | gap: $spacing; 6 | 7 | .symbol { 8 | width: 1rem; 9 | height: 1rem; 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /src/root/views/RegionalRiskWatch/SeasonalRisk/Map/MapLegend/styles.module.scss: -------------------------------------------------------------------------------- 1 | @import "~styles/settings/variables"; 2 | 3 | .map-legend { 4 | background-color: $color-foreground; 5 | padding: $spacing; 6 | } 7 | -------------------------------------------------------------------------------- /src/root/views/RegionalRiskWatch/SeasonalRisk/Map/styles.module.scss: -------------------------------------------------------------------------------- 1 | @import "~styles/settings/variables"; 2 | 3 | .map { 4 | position: relative; 5 | 6 | .map-container { 7 | height: 40rem; 8 | } 9 | 10 | .map-disclaimer { 11 | position: absolute; 12 | left: $mapbox-icon-width + $spacing*0.5; 13 | bottom: $spacing*0.25; 14 | } 15 | 16 | :global { 17 | 18 | .mapboxgl-popup-close-button { 19 | position: absolute; 20 | right: $spacing !important; 21 | top: $spacing !important; 22 | font-size: $font-size-heading-widget !important; 23 | font-weight: $base-font-light !important; 24 | opacity: 0.6 !important; 25 | } 26 | } 27 | } 28 | 29 | -------------------------------------------------------------------------------- /src/root/views/RegionalRiskWatch/styles.module.scss: -------------------------------------------------------------------------------- 1 | @import '~styles/settings/variables'; 2 | 3 | .regional-risk-watch { 4 | .content { 5 | display: flex; 6 | flex-direction: column; 7 | padding: $spacing*2 0; 8 | gap: $spacing*2; 9 | 10 | .tab-list { 11 | align-self: center; 12 | } 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /src/root/views/Search/CountryList/styles.module.scss: -------------------------------------------------------------------------------- 1 | @import '~styles/settings/variables'; 2 | 3 | .country-list { 4 | display: flex; 5 | flex-direction: column; 6 | gap: $spacing; 7 | padding: $spacing !important; 8 | 9 | .search-title { 10 | font-size: $font-size-sm; 11 | color: $title-color; 12 | font-weight: $base-font-regular; 13 | } 14 | 15 | .country-name { 16 | display: flex; 17 | color: $primary-color; 18 | text-decoration: none; 19 | font-weight: $base-font-medium; 20 | align-items: center; 21 | gap: $global-spacing*0.5; 22 | line-height: 1.3rem; 23 | font-size: $base-font-size; 24 | padding: $spacing 0; 25 | border-bottom: $base-border-width solid $base-border-color; 26 | 27 | &:hover { 28 | text-decoration: underline; 29 | } 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /src/root/views/Search/EmergencyPlanningTable/styles.module.scss: -------------------------------------------------------------------------------- 1 | @import '~styles/settings/variables'; 2 | 3 | .emergency-planning-table { 4 | .content { 5 | table { 6 | width: 100%; 7 | 8 | th { 9 | padding: 0; 10 | text-align: left; 11 | border-bottom: $base-border-width solid $base-border-color; 12 | background-color: $color-background; 13 | } 14 | 15 | td { 16 | padding: $spacing; 17 | border-bottom: $base-border-width solid $base-border-color; 18 | 19 | >* { 20 | padding: 0!important; 21 | } 22 | } 23 | } 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /src/root/views/Search/FieldReportTable/styles.module.scss: -------------------------------------------------------------------------------- 1 | @import '~styles/settings/variables'; 2 | 3 | .field-report-table { 4 | .content { 5 | table { 6 | width: 100%; 7 | 8 | th { 9 | text-align: left; 10 | padding: 0; 11 | border-bottom: $base-border-width solid $base-border-color; 12 | background-color: $color-background; 13 | } 14 | 15 | td { 16 | padding: $spacing; 17 | border-bottom: $base-border-width solid $base-border-color; 18 | 19 | >* { 20 | padding: 0!important; 21 | } 22 | } 23 | } 24 | } 25 | } -------------------------------------------------------------------------------- /src/root/views/Search/ProjectTable/styles.module.scss: -------------------------------------------------------------------------------- 1 | @import '~styles/settings/variables'; 2 | 3 | .project-table { 4 | .content { 5 | table { 6 | width: 100%; 7 | 8 | th { 9 | text-align: left; 10 | padding: 0; 11 | border-bottom: $base-border-width solid $base-border-color; 12 | background-color: $color-background; 13 | } 14 | 15 | td { 16 | padding: $spacing; 17 | border-bottom: $base-border-width solid $base-border-color; 18 | 19 | >* { 20 | padding: 0!important; 21 | } 22 | } 23 | } 24 | } 25 | } 26 | 27 | .project-date { 28 | display: flex; 29 | gap: $spacing*0.25; 30 | flex-wrap: wrap; 31 | } 32 | -------------------------------------------------------------------------------- /src/root/views/Search/RapidDeploymentTable/styles.module.scss: -------------------------------------------------------------------------------- 1 | @import '~styles/settings/variables'; 2 | 3 | .rapid-response-table { 4 | .content { 5 | table { 6 | width: 100%; 7 | th { 8 | padding: 0; 9 | text-align: left; 10 | border-bottom: $base-border-width solid $base-border-color; 11 | background-color: $color-background; 12 | } 13 | 14 | td { 15 | padding: $spacing; 16 | border-bottom: $base-border-width solid $base-border-color; 17 | width: $global-spacing-table; 18 | >* { 19 | padding: 0!important; 20 | } 21 | } 22 | } 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /src/root/views/Search/RegionList/styles.module.scss: -------------------------------------------------------------------------------- 1 | @import '~styles/settings/variables'; 2 | 3 | .region-list { 4 | display: flex; 5 | flex-direction: column; 6 | gap: $spacing; 7 | padding: $spacing !important; 8 | 9 | .search-title { 10 | font-size: $font-size-sm; 11 | color: $title-color; 12 | font-weight: $base-font-regular; 13 | } 14 | 15 | .region-name { 16 | display: flex; 17 | color: $primary-color; 18 | text-decoration: none; 19 | font-weight: $base-font-medium; 20 | align-items: center; 21 | gap: $global-spacing*0.5; 22 | line-height: 1.3rem; 23 | font-size: $base-font-size; 24 | padding: $spacing 0; 25 | border-bottom: $base-border-width solid $base-border-color; 26 | 27 | &:hover { 28 | text-decoration: underline; 29 | } 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /src/root/views/Search/SurgeAlertTable/styles.module.scss: -------------------------------------------------------------------------------- 1 | @import '~styles/settings/variables'; 2 | 3 | .surge-alerts-table { 4 | .content { 5 | table { 6 | width: 100%; 7 | th { 8 | padding: 0; 9 | text-align: left; 10 | border-bottom: $base-border-width solid $base-border-color; 11 | background-color: $color-background; 12 | } 13 | 14 | td { 15 | padding: $spacing; 16 | border-bottom: $base-border-width solid $base-border-color; 17 | width: $global-spacing-table; 18 | >* { 19 | padding: 0!important; 20 | } 21 | } 22 | } 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /src/root/views/Search/SurgeDeploymentTable/styles.module.scss: -------------------------------------------------------------------------------- 1 | @import '~styles/settings/variables'; 2 | 3 | .surge-deployement-table { 4 | .content { 5 | table { 6 | width: 100%; 7 | 8 | th { 9 | padding: 0; 10 | text-align: left; 11 | border-bottom: $base-border-width solid $base-border-color; 12 | background-color: $color-background; 13 | } 14 | 15 | td { 16 | padding: $spacing; 17 | border-bottom: $base-border-width solid $base-border-color; 18 | 19 | >* { 20 | padding: 0!important; 21 | } 22 | } 23 | } 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /src/root/views/ThreeW/styles.module.scss: -------------------------------------------------------------------------------- 1 | @import '~styles/settings/variables'; 2 | 3 | .three-w-details { 4 | .content { 5 | padding: 0; 6 | } 7 | 8 | .last-modified { 9 | display: flex; 10 | justify-content: center; 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /src/root/views/ThreeWEdit/styles.module.scss: -------------------------------------------------------------------------------- 1 | @import '~styles/settings/variables'; 2 | 3 | .three-w-details { 4 | :global { 5 | .go-input-section { 6 | margin: $spacing 0; 7 | box-shadow: $box-shadow-component; 8 | } 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /src/root/views/emergencyWrapper.js: -------------------------------------------------------------------------------- 1 | import React, { lazy } from 'react'; 2 | import { withRouter } from 'react-router-dom'; 3 | import { withLanguage } from '#root/languageContext'; 4 | import { useRequest } from '#utils/restRequest'; 5 | import Translate from '#components/Translate'; 6 | 7 | const Emergency = lazy(() => import('../views/Emergency')); 8 | 9 | function EmergencyWrapper(props) { 10 | const { pending, response } = useRequest({url: 'api/v2/event/' + props.match.params.slug}); 11 | if (!pending && response) { 12 | props.match.params.id = response.id; 13 | } 14 | return !pending && response ? 15 | : 16 |

17 |
; 18 | // instead of uhohPageDescription ^ FIXME 19 | } 20 | 21 | export default withLanguage(withRouter(EmergencyWrapper)); 22 | -------------------------------------------------------------------------------- /src/styles/components/_backdrop.scss: -------------------------------------------------------------------------------- 1 | .tc-backdrop { 2 | position: fixed; 3 | left: 0; 4 | top: 0; 5 | width: 100vw; 6 | height: 100vh; 7 | overflow: auto; 8 | background-color: rgba(0, 0, 0, .45); 9 | } 10 | -------------------------------------------------------------------------------- /src/styles/components/_dropdown-menu.scss: -------------------------------------------------------------------------------- 1 | .tc-dropdown-menu { 2 | display: flex; 3 | align-items: center; 4 | box-sizing: border-box; 5 | padding: 3px 6px; 6 | cursor: pointer; 7 | border: 0; 8 | background-color: transparent; 9 | font-family: inherit; 10 | color: inherit; 11 | font-size: inherit; 12 | 13 | &:focus { 14 | outline: none; 15 | } 16 | } 17 | 18 | .tc-dropdown-container { 19 | padding: $spacing*0.5 0; 20 | z-index: 10; 21 | box-sizing: border-box; 22 | position: fixed; 23 | top: 50%; 24 | left: 50%; 25 | //padding: 10px; 26 | max-width: 50vw; 27 | max-height: 50vh; 28 | overflow: auto; 29 | @extend %drop-skin; 30 | } 31 | -------------------------------------------------------------------------------- /src/styles/components/_formatted-date.scss: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IFRCGo/go-frontend/88eaf132b59b01f56891e4fece048c9809ad2ab5/src/styles/components/_formatted-date.scss -------------------------------------------------------------------------------- /src/styles/components/_formatted-number.scss: -------------------------------------------------------------------------------- 1 | .tc-formatted-number { 2 | display: flex; 3 | 4 | .tc-number-suffix { 5 | padding-inline-start: 3px; 6 | } 7 | } 8 | 9 | .tc-formatted-date { 10 | white-space: nowrap; 11 | } 12 | -------------------------------------------------------------------------------- /src/styles/components/_select.scss: -------------------------------------------------------------------------------- 1 | .tc-select { 2 | display: flex; 3 | align-items: baseline; 4 | //padding: 0 4px; 5 | @include col-sm; 6 | 7 | .tc-select-label { 8 | padding: 6px; 9 | 10 | &:after { 11 | content: ':'; 12 | } 13 | } 14 | 15 | .tc-select-input { 16 | //padding: 6px; 17 | min-width: 120px; 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /src/styles/core/_animation.scss: -------------------------------------------------------------------------------- 1 | /* ========================================================================== 2 | Animation 3 | ========================================================================== */ 4 | 5 | 6 | /* Spin clockwise 7 | ========================================================================== */ 8 | 9 | @keyframes spin-cw { 10 | from { 11 | transform: rotate(0deg); 12 | } 13 | to { transform: rotate(360deg); 14 | } 15 | } 16 | 17 | 18 | /* Fade-in 19 | ========================================================================== */ 20 | 21 | @keyframes fade-in { 22 | 0% { 23 | opacity: 0; 24 | } 25 | 26 | 100% { 27 | opacity: 1; 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /src/styles/core/_box-heading-content.scss: -------------------------------------------------------------------------------- 1 | /* ========================================================================== 2 | Box: With heading box and content box below 3 | ========================================================================== */ 4 | 5 | @mixin box__global { 6 | background-color: #fff; 7 | border-radius: $base-border-radius; 8 | box-shadow: 0 0 10px 0 rgba(0, 0, 0, 0.1); 9 | } 10 | 11 | .box__global { 12 | @include box__global; 13 | } 14 | 15 | .box__global__heading { 16 | padding: ($global-spacing * 1.5) ($global-spacing * 1.2); 17 | border-bottom: 1px solid $grey-pearl; 18 | } 19 | 20 | .box__global__content { 21 | padding: ($global-spacing * 1.5) ($global-spacing * 1.2); 22 | } 23 | 24 | .box__content { 25 | background-color: #fff; 26 | } -------------------------------------------------------------------------------- /src/styles/core/_media.scss: -------------------------------------------------------------------------------- 1 | /* ========================================================================== 2 | Media 3 | ========================================================================== */ 4 | 5 | figure, 6 | .figure { 7 | padding: 0; 8 | margin: 0; 9 | } 10 | 11 | img { 12 | vertical-align: middle; 13 | } 14 | 15 | .img--fluid { 16 | max-width: 100%; 17 | height: auto; 18 | } 19 | 20 | .img--full-width { 21 | width: 100%; 22 | height: auto; 23 | } 24 | 25 | /* Prose specific */ 26 | 27 | .prose { 28 | img { 29 | max-width: 100%; 30 | height: auto; 31 | } 32 | 33 | > figure figcaption { 34 | color: rgba($base-font-color, 0.64); 35 | font-size: 0.875rem; 36 | line-height: 1.25rem; 37 | padding-top: 1rem; 38 | font-weight: $base-font-regular; 39 | text-align: center; 40 | } 41 | } 42 | -------------------------------------------------------------------------------- /src/styles/field-report/_global.scss: -------------------------------------------------------------------------------- 1 | /* ========================================================================== 2 | Field Report global 3 | ========================================================================== */ 4 | 5 | .page--frep-form { 6 | .inpage__body { 7 | margin-top: 0; 8 | } 9 | 10 | .fold { 11 | padding-top: 0; 12 | } 13 | } -------------------------------------------------------------------------------- /src/styles/global/_alerts.scss: -------------------------------------------------------------------------------- 1 | .alert-container { 2 | & > * { 3 | pointer-events: auto; 4 | margin: $spacing*0.5 0; 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /src/styles/global/_box-heading-content.scss: -------------------------------------------------------------------------------- 1 | /* ========================================================================== 2 | Box: With heading box and content box below 3 | ========================================================================== */ 4 | 5 | @mixin box__global { 6 | background-color: #fff; 7 | border-radius: $base-border-radius; 8 | box-shadow: 0 0 10px 0 rgba(0, 0, 0, 0.1); 9 | } 10 | 11 | .box__global { 12 | @include box__global; 13 | } 14 | 15 | .box__global__heading { 16 | padding: ($global-spacing * 1.5) ($global-spacing * 1.2); 17 | border-bottom: 1px solid $grey-pearl; 18 | } 19 | 20 | .box__global__content { 21 | padding: ($global-spacing * 1.5) ($global-spacing * 1.2); 22 | } 23 | 24 | .box__content { 25 | background-color: #fff; 26 | } -------------------------------------------------------------------------------- /src/styles/global/_breadcrumbs.scss: -------------------------------------------------------------------------------- 1 | .breadcrumb__block { 2 | 3 | margin-top: $spacing-half; 4 | 5 | span span:first-of-type .breadcrumb { 6 | padding-inline-start: 0; 7 | } 8 | 9 | } 10 | 11 | .breadcrumb { 12 | color: $base-color--light; 13 | font-size: $font-size-sm; 14 | padding: $spacing-half; 15 | display: inline-block; 16 | } 17 | 18 | b.breadcrumb { 19 | font-weight: $base-font-semi-bold; 20 | } 21 | 22 | .breadcrumb__next { 23 | vertical-align: middle; 24 | font-size: 12px; 25 | } 26 | 27 | -------------------------------------------------------------------------------- /src/styles/global/_global-banner.scss: -------------------------------------------------------------------------------- 1 | /* ========================================================================== 2 | Global: Banners 3 | ========================================================================== */ 4 | 5 | @use "sass:math"; 6 | 7 | .global__banner { 8 | color: #fff; 9 | font-size: $font-size-sm; 10 | font-weight: $base-font-medium; 11 | padding: math.div($global-spacing, 1.5); 12 | 13 | a { 14 | color: currentColor; 15 | border-bottom: 1px solid #fff; 16 | } 17 | } 18 | 19 | .global__banner--danger { 20 | background-color: $primary-color; 21 | } -------------------------------------------------------------------------------- /src/styles/global/_icon-styles.scss: -------------------------------------------------------------------------------- 1 | /* ========================================================================== 2 | Icons: Styles 3 | ========================================================================== */ 4 | 5 | 6 | .icon__circle { 7 | color: #fff; 8 | background-color: $primary-color; 9 | border-radius: 50%; 10 | font-size: $font-size-xxs; 11 | font-weight: $base-font-semi-bold; 12 | display: flex; 13 | align-items: center; 14 | justify-content: center; 15 | width: 24px; 16 | height: 24px; 17 | } -------------------------------------------------------------------------------- /src/styles/global/_iframe-embeds.scss: -------------------------------------------------------------------------------- 1 | /* ========================================================================== 2 | Buttons 3 | ========================================================================== */ 4 | 5 | .iframe__embed { 6 | position: relative; 7 | height: 0; 8 | overflow: hidden; 9 | max-width: 100%; 10 | padding-bottom: 56.25%; 11 | } 12 | 13 | .iframe__embed__video { 14 | position: absolute; 15 | top: 0; 16 | left: 0; 17 | width: 100%; 18 | height: 100%; 19 | } -------------------------------------------------------------------------------- /src/styles/global/_login.scss: -------------------------------------------------------------------------------- 1 | .page--login, .page--register { 2 | .inpage__body { 3 | margin-bottom: $global-spacing * 2; 4 | .form__group { 5 | margin-bottom: $global-spacing * 2; 6 | } 7 | .form__hascol { 8 | margin-bottom: 0; 9 | } 10 | } 11 | .form__footer { 12 | button { 13 | margin-bottom: $global-spacing; 14 | } 15 | p { 16 | font-size: 0.875rem; 17 | } 18 | } 19 | .form__note { 20 | background: rgba($secondary-color, 0.2); 21 | color: $secondary-color; 22 | margin-bottom: $global-spacing * 2; 23 | } 24 | } -------------------------------------------------------------------------------- /src/styles/global/_pills.scss: -------------------------------------------------------------------------------- 1 | /* ========================================================================== 2 | Pills 3 | ========================================================================== */ 4 | 5 | .pills__brand__col { 6 | padding: 0 $global-spacing*0.5; 7 | } 8 | 9 | .pill__brand { 10 | border: 1px solid $base-border-color; 11 | border-radius: $full-border-radius; 12 | font-weight: $base-font-semi-bold; 13 | padding: $global-spacing*0.5 $global-spacing; 14 | display: inline-block; 15 | vertical-align: baseline; 16 | margin: 0 0 $global-spacing 0; 17 | } -------------------------------------------------------------------------------- /src/styles/global/_scrollbar-custom.scss: -------------------------------------------------------------------------------- 1 | .scrollbar__custom::-webkit-scrollbar { 2 | width: 8px; 3 | height: 8px; 4 | } 5 | 6 | .scrollbar__custom::-webkit-scrollbar-track { 7 | border-radius: $full-border-radius; 8 | background: #fff; 9 | } 10 | 11 | .scrollbar__custom::-webkit-scrollbar-thumb { 12 | background: $grey-cloud; 13 | } 14 | 15 | .scrollbar__custom::-webkit-scrollbar-thumb { 16 | border-radius: 10px; 17 | } -------------------------------------------------------------------------------- /src/styles/global/_states.scss: -------------------------------------------------------------------------------- 1 | .state-block { 2 | display: flex; 3 | align-items: baseline; 4 | } 5 | 6 | .state-name { 7 | text-transform: uppercase; 8 | font-weight: $base-font-semi-bold; 9 | } 10 | 11 | .state { 12 | width: 12px; 13 | height: 12px; 14 | border-radius: 50%; 15 | } 16 | 17 | .state--severity-low { 18 | background-color: $yellow-dot-color; 19 | } 20 | 21 | .state--severity-mid { 22 | background-color: $orange-dot-color; 23 | } 24 | 25 | .state--severity-high { 26 | background-color: $red-dot-color; 27 | } -------------------------------------------------------------------------------- /src/styles/global/_text-output.scss: -------------------------------------------------------------------------------- 1 | .tc-text-output { 2 | display: flex; 3 | 4 | .tc-label { 5 | padding: 3px 6px; 6 | 7 | &:after { 8 | content: ':'; 9 | } 10 | } 11 | 12 | .tc-value { 13 | padding: 3px $spacing-half 3px 3px; 14 | font-weight: $base-font-medium; 15 | } 16 | 17 | &.tc-text-output-reversed { 18 | .tc-label { 19 | order: 2; 20 | 21 | &:after { 22 | content: unset; 23 | } 24 | } 25 | 26 | .tc-value { 27 | order: 1; 28 | } 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /src/styles/global/faram-inputs/_faram-checkbox.scss: -------------------------------------------------------------------------------- 1 | .tc-faram-checkbox { 2 | display: flex; 3 | align-items: center; 4 | 5 | .tc-faram-checkbox-input { 6 | display: block; 7 | margin-inline-end: 8px; 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /src/styles/global/faram-inputs/_raw-input.scss: -------------------------------------------------------------------------------- 1 | .tc-raw-input { 2 | display: flex; 3 | flex-direction: column; 4 | justify-content: center; 5 | padding: 10px; 6 | 7 | .tc-raw-input-label { 8 | font-size: 12px; 9 | 10 | &:after { 11 | content: ':' 12 | } 13 | } 14 | 15 | input { 16 | width: 100%; 17 | border: 1px solid #ccc; 18 | border-radius: 2px; 19 | padding: 6px 10px; 20 | } 21 | 22 | .tc-raw-input-error { 23 | color: #d32f2f; 24 | font-size: 11px; 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /src/styles/global/faram-inputs/_select-input.scss: -------------------------------------------------------------------------------- 1 | .tc-select { 2 | .tc-select-input-error { 3 | color: #d32f2f; 4 | font-size: 11px; 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /src/styles/global/faram-inputs/_text-input.scss: -------------------------------------------------------------------------------- 1 | .tc-text-input { 2 | padding: 10px; 3 | 4 | input { 5 | width: 100%; 6 | border: 1px solid #ccc; 7 | border-radius: 2px; 8 | padding: 6px 10px; 9 | } 10 | 11 | } 12 | -------------------------------------------------------------------------------- /src/styles/header/navbar.scss: -------------------------------------------------------------------------------- 1 | .navbar-highlighted span { 2 | border-bottom: 1px solid $primary-color; 3 | } -------------------------------------------------------------------------------- /src/styles/home/_homemap.scss: -------------------------------------------------------------------------------- 1 | .map-container-fullwidth { 2 | width: 100% !important; 3 | position: relative; 4 | } 5 | -------------------------------------------------------------------------------- /src/styles/settings/_functions.scss: -------------------------------------------------------------------------------- 1 | /* ========================================================================== 2 | Functions 3 | ========================================================================== */ 4 | 5 | /* Range function 6 | ========================================================================== */ 7 | 8 | /** 9 | * Define ranges for various things, like media queries. 10 | */ 11 | 12 | @function lower-bound($range){ 13 | @if length($range) <= 0 { 14 | @return 0; 15 | } 16 | @return nth($range,1); 17 | } 18 | 19 | @function upper-bound($range) { 20 | @if length($range) < 2 { 21 | @return 999999999999; 22 | } 23 | @return nth($range, 2); 24 | } -------------------------------------------------------------------------------- /src/styles/vendor/_react-select.scss: -------------------------------------------------------------------------------- 1 | .Select--multi .Select-value { 2 | border: none; 3 | background: tint($secondary-color, 80%); 4 | border-radius: $full-border-radius; 5 | padding: 0 0.25rem; 6 | 7 | .Select-value-icon, .Select-value-label { 8 | border: none; 9 | color: $secondary-color; 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /src/wdyr.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | 3 | if (process.env.NODE_ENV === 'development' && false) { 4 | const whyDidYouRender = require('@welldone-software/why-did-you-render'); 5 | whyDidYouRender(React, { 6 | trackAllPureComponents: true, 7 | logOwnerReasons: true 8 | }); 9 | } --------------------------------------------------------------------------------