From c1f9b20358da2e9d17659b1bcfbfa6ebb20c75e6 Mon Sep 17 00:00:00 2001 From: a-limyr Date: Thu, 25 Jun 2026 09:03:51 +0200 Subject: [PATCH] react-intl removed the injectIntl HOC (gone by v9). Add a local shim built on the supported useIntl hook and repoint all 52 imports to it, so legacy class components keep working without conversion. --- src/components/CustomLoadingAnimation.js | 2 +- .../Dialogs/AddAdjacentStopsDialog.js | 2 +- src/components/Dialogs/AddMemberToGroup.js | 2 +- .../Dialogs/AddStopPlaceSuggestionListItem.js | 2 +- .../Dialogs/AddStopPlaceToParent.js | 2 +- src/components/Dialogs/FavoriteNameDialog.js | 2 +- src/components/Dialogs/GroupErrorDialog.js | 2 +- src/components/Dialogs/SaveGroupDialog.js | 2 +- .../Dialogs/SessionExpiredDialog.tsx | 3 +- .../AdjacentStopConnection.js | 2 +- .../EditParentStopPage/AdjacentStopList.js | 2 +- .../EditParentStopPage/EditParentGeneral.js | 2 +- .../EditParentStopPage/ParentStopDetails.js | 2 +- .../EditParentStopPage/StopPlaceList.js | 2 +- .../StopPlaceListItemDetails.js | 2 +- .../StopPlaceListItemQuayItem.js | 2 +- src/components/EditStopPage/AcceptChanges.js | 2 +- .../EditStopPage/AddTagAutoComplete.js | 2 +- .../EditStopPage/BoardingPositionItem.tsx | 2 +- .../EditStopPage/CreateKeyValuePair.js | 2 +- .../EditStopPage/EditKeyValuePair.js | 2 +- .../EditStopPage/EditQuayAdditional.js | 2 +- .../EditStopPage/EditStopAdditional.js | 2 +- .../EditStopPage/EditStopGeneral.js | 2 +- src/components/EditStopPage/Item.js | 2 +- .../EditStopPage/ModalitiesMenuItems.js | 2 +- src/components/EditStopPage/NewElementsBox.js | 2 +- .../EditStopPage/NewStopPlaceInfo.js | 2 +- src/components/EditStopPage/ParkingItem.js | 2 +- .../ParkingItemPayAndRideExpandedFields.js | 2 +- src/components/EditStopPage/QuayDetails.js | 2 +- src/components/EditStopPage/QuayItem.js | 2 +- .../RechargingAvailablePopover.js | 2 +- .../EditStopPage/VersionsPopover.js | 2 +- .../EditStopPage/WeightingPopover.js | 2 +- .../EditGroupOfStopPlaces.js | 2 +- .../GroupOfStopPlacesList.js | 2 +- src/components/Header/Header.js | 2 +- src/components/MainPage/HasExpiredInfo.js | 2 +- src/components/MainPage/SearchBox.js | 2 +- src/components/MainPage/Tag.js | 2 +- src/components/Map/CoordinateMarker.js | 2 +- src/components/Map/EditStopMap.js | 2 +- src/components/Map/MarkerList.js | 2 +- src/components/Map/PathLink.js | 2 +- src/components/Map/StopPlacesMap.js | 2 +- src/components/ReportPage/ReportQuayRows.js | 2 +- .../ReportPage/TagSuggestionPopover.js | 2 +- src/components/ReportPageV2/StopTypeFilter.js | 2 +- src/components/Shared/CopyIdButton.js | 2 +- src/components/SnackbarWrapper.js | 2 +- src/containers/ReportPage.js | 2 +- src/utils/injectIntl.tsx | 33 +++++++++++++++++++ 53 files changed, 86 insertions(+), 52 deletions(-) create mode 100644 src/utils/injectIntl.tsx diff --git a/src/components/CustomLoadingAnimation.js b/src/components/CustomLoadingAnimation.js index 45af3053b..914bb4108 100644 --- a/src/components/CustomLoadingAnimation.js +++ b/src/components/CustomLoadingAnimation.js @@ -1,5 +1,5 @@ import { Box, Typography } from "@mui/material"; -import { injectIntl } from "react-intl"; +import { injectIntl } from "../utils/injectIntl"; const CustomLoadingAnimation = ({ intl }) => { const { formatMessage } = intl; diff --git a/src/components/Dialogs/AddAdjacentStopsDialog.js b/src/components/Dialogs/AddAdjacentStopsDialog.js index 7305e40d2..7c8be0b1c 100644 --- a/src/components/Dialogs/AddAdjacentStopsDialog.js +++ b/src/components/Dialogs/AddAdjacentStopsDialog.js @@ -22,8 +22,8 @@ import { } from "@mui/material"; import PropTypes from "prop-types"; import React from "react"; -import { injectIntl } from "react-intl"; import { connect } from "react-redux"; +import { injectIntl } from "../../utils/injectIntl"; import AddStopPlaceSuggestionListItem from "./AddStopPlaceSuggestionListItem"; class AddAdjacentStopDialog extends React.Component { diff --git a/src/components/Dialogs/AddMemberToGroup.js b/src/components/Dialogs/AddMemberToGroup.js index 178ff4f51..6153153ae 100644 --- a/src/components/Dialogs/AddMemberToGroup.js +++ b/src/components/Dialogs/AddMemberToGroup.js @@ -24,9 +24,9 @@ import { } from "@mui/material"; import PropTypes from "prop-types"; import { Component } from "react"; -import { injectIntl } from "react-intl"; import { connect } from "react-redux"; import { getGroupMemberSuggestions } from "../../modelUtils/leafletUtils"; +import { injectIntl } from "../../utils/injectIntl"; import AddStopPlaceSuggestionList from "./AddStopPlaceSuggestionList"; class AddMemberToGroup extends Component { diff --git a/src/components/Dialogs/AddStopPlaceSuggestionListItem.js b/src/components/Dialogs/AddStopPlaceSuggestionListItem.js index 6a22a5d8b..8e40bf341 100644 --- a/src/components/Dialogs/AddStopPlaceSuggestionListItem.js +++ b/src/components/Dialogs/AddStopPlaceSuggestionListItem.js @@ -16,7 +16,7 @@ import { FormControlLabel } from "@mui/material"; import Checkbox from "@mui/material/Checkbox"; import PropTypes from "prop-types"; import { Component } from "react"; -import { injectIntl } from "react-intl"; +import { injectIntl } from "../../utils/injectIntl"; import HasExpiredInfo from "../MainPage/HasExpiredInfo"; import ModalityIconImg from "../MainPage/ModalityIconImg"; diff --git a/src/components/Dialogs/AddStopPlaceToParent.js b/src/components/Dialogs/AddStopPlaceToParent.js index 712eb6ce5..b08dded1e 100644 --- a/src/components/Dialogs/AddStopPlaceToParent.js +++ b/src/components/Dialogs/AddStopPlaceToParent.js @@ -23,9 +23,9 @@ import { } from "@mui/material"; import PropTypes from "prop-types"; import { Component } from "react"; -import { injectIntl } from "react-intl"; import { connect } from "react-redux"; import { getChildStopPlaceSuggestions } from "../../modelUtils/leafletUtils"; +import { injectIntl } from "../../utils/injectIntl"; import AddStopPlaceSuggestionList from "./AddStopPlaceSuggestionList"; class AddStopPlaceToParent extends Component { diff --git a/src/components/Dialogs/FavoriteNameDialog.js b/src/components/Dialogs/FavoriteNameDialog.js index 4cd9777bd..818f599db 100644 --- a/src/components/Dialogs/FavoriteNameDialog.js +++ b/src/components/Dialogs/FavoriteNameDialog.js @@ -21,9 +21,9 @@ import { TextField, } from "@mui/material"; import React from "react"; -import { injectIntl } from "react-intl"; import { connect } from "react-redux"; import { UserActions } from "../../actions/"; +import { injectIntl } from "../../utils/injectIntl"; class FavoriteNameDialog extends React.Component { constructor(props) { diff --git a/src/components/Dialogs/GroupErrorDialog.js b/src/components/Dialogs/GroupErrorDialog.js index 563f52211..2a5cd6bbc 100644 --- a/src/components/Dialogs/GroupErrorDialog.js +++ b/src/components/Dialogs/GroupErrorDialog.js @@ -20,7 +20,7 @@ import { DialogTitle, } from "@mui/material"; import { Component } from "react"; -import { injectIntl } from "react-intl"; +import { injectIntl } from "../../utils/injectIntl"; class GroupErrorDialog extends Component { getErrorText(type, formatMessage) { diff --git a/src/components/Dialogs/SaveGroupDialog.js b/src/components/Dialogs/SaveGroupDialog.js index 58e71d16b..3a937d829 100644 --- a/src/components/Dialogs/SaveGroupDialog.js +++ b/src/components/Dialogs/SaveGroupDialog.js @@ -20,7 +20,7 @@ import { DialogTitle, } from "@mui/material"; import { Component } from "react"; -import { injectIntl } from "react-intl"; +import { injectIntl } from "../../utils/injectIntl"; class SaveGroupDialog extends Component { render() { diff --git a/src/components/Dialogs/SessionExpiredDialog.tsx b/src/components/Dialogs/SessionExpiredDialog.tsx index ee97a39f5..fe11cf257 100644 --- a/src/components/Dialogs/SessionExpiredDialog.tsx +++ b/src/components/Dialogs/SessionExpiredDialog.tsx @@ -5,8 +5,9 @@ import DialogActions from "@mui/material/DialogActions"; import DialogContent from "@mui/material/DialogContent"; import DialogTitle from "@mui/material/DialogTitle"; import { useEffect, useState } from "react"; -import { injectIntl, IntlShape } from "react-intl"; +import { IntlShape } from "react-intl"; import { useAuth } from "../../auth/auth"; +import { injectIntl } from "../../utils/injectIntl"; interface SessionExpiredDialogProps { intl: IntlShape; diff --git a/src/components/EditParentStopPage/AdjacentStopConnection.js b/src/components/EditParentStopPage/AdjacentStopConnection.js index 522f257eb..97225c4fe 100644 --- a/src/components/EditParentStopPage/AdjacentStopConnection.js +++ b/src/components/EditParentStopPage/AdjacentStopConnection.js @@ -17,7 +17,7 @@ import EditorInsertLink from "@mui/icons-material/InsertLink"; import IconButton from "@mui/material/IconButton"; import PropTypes from "prop-types"; import { Component } from "react"; -import { injectIntl } from "react-intl"; +import { injectIntl } from "../../utils/injectIntl"; class AdjacentStopConnection extends Component { handleRemoveAdjacentConnection = () => { diff --git a/src/components/EditParentStopPage/AdjacentStopList.js b/src/components/EditParentStopPage/AdjacentStopList.js index 199bf7fcd..f1f35277b 100644 --- a/src/components/EditParentStopPage/AdjacentStopList.js +++ b/src/components/EditParentStopPage/AdjacentStopList.js @@ -14,7 +14,7 @@ limitations under the Licence. */ import PropTypes from "prop-types"; import { Component } from "react"; -import { injectIntl } from "react-intl"; +import { injectIntl } from "../../utils/injectIntl"; import AdjacentStopConnection from "./AdjacentStopConnection"; class AdjacentStopList extends Component { diff --git a/src/components/EditParentStopPage/EditParentGeneral.js b/src/components/EditParentStopPage/EditParentGeneral.js index 1f27f429d..573acce6c 100644 --- a/src/components/EditParentStopPage/EditParentGeneral.js +++ b/src/components/EditParentStopPage/EditParentGeneral.js @@ -17,7 +17,6 @@ import MdSave from "@mui/icons-material/Save"; import MdUndo from "@mui/icons-material/Undo"; import FlatButton from "@mui/material/Button"; import React from "react"; -import { injectIntl } from "react-intl"; import { connect } from "react-redux"; import { StopPlaceActions, UserActions } from "../../actions/"; import { @@ -36,6 +35,7 @@ import mapToMutationVariables from "../../modelUtils/mapToQueryVariables"; import Routes from "../../routes"; import SettingsManager from "../../singletons/SettingsManager"; import { getIsCurrentVersionMax } from "../../utils/"; +import { injectIntl } from "../../utils/injectIntl"; import { getStopPermissions } from "../../utils/permissionsUtils"; import AddAdjacentStopsDialog from "../Dialogs/AddAdjacentStopsDialog"; import ConfirmDialog from "../Dialogs/ConfirmDialog"; diff --git a/src/components/EditParentStopPage/ParentStopDetails.js b/src/components/EditParentStopPage/ParentStopDetails.js index 9ec6628fe..fe467dcce 100644 --- a/src/components/EditParentStopPage/ParentStopDetails.js +++ b/src/components/EditParentStopPage/ParentStopDetails.js @@ -19,7 +19,6 @@ import Divider from "@mui/material/Divider"; import IconButton from "@mui/material/IconButton"; import TextField from "@mui/material/TextField"; import { Component } from "react"; -import { injectIntl } from "react-intl"; import { connect } from "react-redux"; import { StopPlaceActions } from "../../actions/"; import { @@ -33,6 +32,7 @@ import { import UserActions from "../../actions/UserActions"; import { ConfigContext } from "../../config/ConfigContext"; import { getPrimaryDarkerColor } from "../../config/themeConfig"; +import { injectIntl } from "../../utils/injectIntl"; import AddStopPlaceToParent from "../Dialogs/AddStopPlaceToParent"; import AltNamesDialog from "../Dialogs/AltNamesDialog"; import CoordinatesDialog from "../Dialogs/CoordinatesDialog"; diff --git a/src/components/EditParentStopPage/StopPlaceList.js b/src/components/EditParentStopPage/StopPlaceList.js index 4ef8bd0dc..f34befc29 100644 --- a/src/components/EditParentStopPage/StopPlaceList.js +++ b/src/components/EditParentStopPage/StopPlaceList.js @@ -16,10 +16,10 @@ import ContentAdd from "@mui/icons-material/Add"; import Fab from "@mui/material/Fab"; import PropTypes from "prop-types"; import { Component } from "react"; -import { injectIntl } from "react-intl"; import { connect } from "react-redux"; import { StopPlaceActions, UserActions } from "../../actions/"; import { getPrimaryColor } from "../../config/themeConfig"; +import { injectIntl } from "../../utils/injectIntl"; import Loader from "../Dialogs/Loader"; import StopPlaceListItem from "./StopPlaceListItem"; diff --git a/src/components/EditParentStopPage/StopPlaceListItemDetails.js b/src/components/EditParentStopPage/StopPlaceListItemDetails.js index 3d15b0836..74e0ed682 100644 --- a/src/components/EditParentStopPage/StopPlaceListItemDetails.js +++ b/src/components/EditParentStopPage/StopPlaceListItemDetails.js @@ -17,7 +17,7 @@ import MdWarning from "@mui/icons-material/Warning"; import IconButton from "@mui/material/IconButton"; import PropTypes from "prop-types"; import { Component } from "react"; -import { injectIntl } from "react-intl"; +import { injectIntl } from "../../utils/injectIntl"; import AdjacentStopList from "./AdjacentStopList"; import StopPlaceChildrenItems from "./StopPlaceChildrenItems"; import StopPlaceListItemQuays from "./StopPlaceListItemQuays"; diff --git a/src/components/EditParentStopPage/StopPlaceListItemQuayItem.js b/src/components/EditParentStopPage/StopPlaceListItemQuayItem.js index 02dbe5c7f..61dc408e7 100644 --- a/src/components/EditParentStopPage/StopPlaceListItemQuayItem.js +++ b/src/components/EditParentStopPage/StopPlaceListItemQuayItem.js @@ -15,7 +15,7 @@ limitations under the Licence. */ import Divider from "@mui/material/Divider"; import PropTypes from "prop-types"; import { Component } from "react"; -import { injectIntl } from "react-intl"; +import { injectIntl } from "../../utils/injectIntl"; import Code from "../EditStopPage/Code"; import CopyIdButton from "../Shared/CopyIdButton"; diff --git a/src/components/EditStopPage/AcceptChanges.js b/src/components/EditStopPage/AcceptChanges.js index ff8e048f6..b5a4d81a1 100644 --- a/src/components/EditStopPage/AcceptChanges.js +++ b/src/components/EditStopPage/AcceptChanges.js @@ -2,8 +2,8 @@ import WarningIcon from "@mui/icons-material/Warning"; import Checkbox from "@mui/material/Checkbox"; import FormControlLabel from "@mui/material/FormControlLabel"; import React from "react"; -import { injectIntl } from "react-intl"; import { getPrimaryColor } from "../../config/themeConfig"; +import { injectIntl } from "../../utils/injectIntl"; class AcceptChanges extends React.Component { render() { diff --git a/src/components/EditStopPage/AddTagAutoComplete.js b/src/components/EditStopPage/AddTagAutoComplete.js index ba78d777e..a7e116932 100644 --- a/src/components/EditStopPage/AddTagAutoComplete.js +++ b/src/components/EditStopPage/AddTagAutoComplete.js @@ -16,8 +16,8 @@ import AutoComplete from "@mui/material/Autocomplete"; import TextField from "@mui/material/TextField"; import debounce from "lodash.debounce"; import { Component } from "react"; -import { injectIntl } from "react-intl"; import { toCamelCase } from "../../utils/"; +import { injectIntl } from "../../utils/injectIntl"; class AddTagAutoComplete extends Component { constructor(props) { diff --git a/src/components/EditStopPage/BoardingPositionItem.tsx b/src/components/EditStopPage/BoardingPositionItem.tsx index 5e89bf0ea..ced3372cf 100644 --- a/src/components/EditStopPage/BoardingPositionItem.tsx +++ b/src/components/EditStopPage/BoardingPositionItem.tsx @@ -1,7 +1,7 @@ import MdDelete from "@mui/icons-material/DeleteForever"; import { IconButton } from "@mui/material"; import TextField from "@mui/material/TextField"; -import { injectIntl } from "react-intl"; +import { injectIntl } from "../../utils/injectIntl"; import CopyIdButton from "../Shared/CopyIdButton"; import { BoardingPosition } from "./BoardingPositionsTab"; import Code from "./Code"; diff --git a/src/components/EditStopPage/CreateKeyValuePair.js b/src/components/EditStopPage/CreateKeyValuePair.js index 91d2ac227..1994163f4 100644 --- a/src/components/EditStopPage/CreateKeyValuePair.js +++ b/src/components/EditStopPage/CreateKeyValuePair.js @@ -15,7 +15,7 @@ limitations under the Licence. */ import FlatButton from "@mui/material/Button"; import TextField from "@mui/material/TextField"; import React from "react"; -import { injectIntl } from "react-intl"; +import { injectIntl } from "../../utils/injectIntl"; class CreateKeyValuePair extends React.Component { constructor(props) { diff --git a/src/components/EditStopPage/EditKeyValuePair.js b/src/components/EditStopPage/EditKeyValuePair.js index 6b8c1921d..4efc4d9e5 100644 --- a/src/components/EditStopPage/EditKeyValuePair.js +++ b/src/components/EditStopPage/EditKeyValuePair.js @@ -1,7 +1,7 @@ import FlatButton from "@mui/material/Button"; import TextField from "@mui/material/TextField"; import React from "react"; -import { injectIntl } from "react-intl"; +import { injectIntl } from "../../utils/injectIntl"; class EditKeyValuePair extends React.Component { constructor(props) { diff --git a/src/components/EditStopPage/EditQuayAdditional.js b/src/components/EditStopPage/EditQuayAdditional.js index 7a7767d59..af600caa0 100644 --- a/src/components/EditStopPage/EditQuayAdditional.js +++ b/src/components/EditStopPage/EditQuayAdditional.js @@ -15,8 +15,8 @@ limitations under the Licence. */ import Tab from "@mui/material/Tab"; import Tabs from "@mui/material/Tabs"; import React from "react"; -import { injectIntl } from "react-intl"; import { connect } from "react-redux"; +import { injectIntl } from "../../utils/injectIntl"; import AccessibilityQuayTab from "./AccessibilityAssessment/AccessibilityQuayTab"; import BoardingPositionsTab from "./BoardingPositionsTab"; import FacilitiesQuayTab from "./Facility/FacilitiesQuayTab"; diff --git a/src/components/EditStopPage/EditStopAdditional.js b/src/components/EditStopPage/EditStopAdditional.js index bcfb90568..5e52cac17 100644 --- a/src/components/EditStopPage/EditStopAdditional.js +++ b/src/components/EditStopPage/EditStopAdditional.js @@ -15,7 +15,7 @@ limitations under the Licence. */ import Tab from "@mui/material/Tab"; import Tabs from "@mui/material/Tabs"; import React from "react"; -import { injectIntl } from "react-intl"; +import { injectIntl } from "../../utils/injectIntl"; import AccessibilityStopTab from "./AccessibilityAssessment/AccessibilityStopTab"; import AssistanceStopTab from "./Assistance/AssistanceStopTab"; import FacilitiesStopTab from "./Facility/FacilitiesStopTab"; diff --git a/src/components/EditStopPage/EditStopGeneral.js b/src/components/EditStopPage/EditStopGeneral.js index 947dd4eda..2ad368583 100644 --- a/src/components/EditStopPage/EditStopGeneral.js +++ b/src/components/EditStopPage/EditStopGeneral.js @@ -14,9 +14,9 @@ limitations under the Licence. */ // React and Redux import React from "react"; -import { injectIntl } from "react-intl"; import { connect } from "react-redux"; import { replace } from "redux-first-history"; +import { injectIntl } from "../../utils/injectIntl"; // Material UI Icons import MdBack from "@mui/icons-material/ArrowBack"; diff --git a/src/components/EditStopPage/Item.js b/src/components/EditStopPage/Item.js index 855e27c6e..a8378a338 100644 --- a/src/components/EditStopPage/Item.js +++ b/src/components/EditStopPage/Item.js @@ -1,6 +1,6 @@ import Divider from "@mui/material/Divider"; import React from "react"; -import { injectIntl } from "react-intl"; +import { injectIntl } from "../../utils/injectIntl"; import CoordinatesDialog from "../Dialogs/CoordinatesDialog"; class Item extends React.Component { diff --git a/src/components/EditStopPage/ModalitiesMenuItems.js b/src/components/EditStopPage/ModalitiesMenuItems.js index 5bc68c8cd..cad3fefca 100644 --- a/src/components/EditStopPage/ModalitiesMenuItems.js +++ b/src/components/EditStopPage/ModalitiesMenuItems.js @@ -14,12 +14,12 @@ limitations under the Licence. */ import MenuItem from "@mui/material/MenuItem"; import React from "react"; -import { injectIntl } from "react-intl"; import { ConfigContext } from "../../config/ConfigContext"; import { getInverseSubmodesWhitelist, getStopTypesForSubmodes, } from "../../modelUtils/modeUtils"; +import { injectIntl } from "../../utils/injectIntl"; import ModalityIconSvg from "../MainPage/ModalityIconSvg"; import MoreMenuItem from "../MainPage/MoreMenuItem"; diff --git a/src/components/EditStopPage/NewElementsBox.js b/src/components/EditStopPage/NewElementsBox.js index 0b4ef5c69..c659cbdd4 100644 --- a/src/components/EditStopPage/NewElementsBox.js +++ b/src/components/EditStopPage/NewElementsBox.js @@ -13,10 +13,10 @@ See the Licence for the specific language governing permissions and limitations under the Licence. */ import React from "react"; -import { injectIntl } from "react-intl"; import { connect } from "react-redux"; import { StopPlaceActions } from "../../actions"; import { setDecimalPrecision } from "../../utils"; +import { injectIntl } from "../../utils/injectIntl"; import ConfirmDialog from "../Dialogs/ConfirmDialog"; import newStopIcon from "../../static/icons/new-stop-icon-2x.png"; diff --git a/src/components/EditStopPage/NewStopPlaceInfo.js b/src/components/EditStopPage/NewStopPlaceInfo.js index 18e5d1fd6..241ddfe82 100644 --- a/src/components/EditStopPage/NewStopPlaceInfo.js +++ b/src/components/EditStopPage/NewStopPlaceInfo.js @@ -15,11 +15,11 @@ limitations under the Licence. */ import InformationIcon from "@mui/icons-material/Info"; import FlatButton from "@mui/material/Button"; import React from "react"; -import { injectIntl } from "react-intl"; import { connect } from "react-redux"; import { UserActions } from "../../actions/"; import { getPrimaryDarkerColor } from "../../config/themeConfig"; import { createStopPlaceHref } from "../../utils/"; +import { injectIntl } from "../../utils/injectIntl"; class NewStopPlaceInfo extends React.Component { handleClose() { diff --git a/src/components/EditStopPage/ParkingItem.js b/src/components/EditStopPage/ParkingItem.js index 2d53be278..87c66fcfd 100644 --- a/src/components/EditStopPage/ParkingItem.js +++ b/src/components/EditStopPage/ParkingItem.js @@ -18,7 +18,6 @@ import FlatButton from "@mui/material/Button"; import TextField from "@mui/material/TextField"; import PropTypes from "prop-types"; import React from "react"; -import { injectIntl } from "react-intl"; import { connect } from "react-redux"; import { StopPlaceActions, UserActions } from "../../actions/"; import { deleteParking } from "../../actions/TiamatActions"; @@ -29,6 +28,7 @@ import { } from "../../models/AccessibilityLimitation"; import PARKING_TYPE from "../../models/parkingType"; import { getIn } from "../../utils"; +import { injectIntl } from "../../utils/injectIntl"; import ConfirmDialog from "../Dialogs/ConfirmDialog"; import CopyIdButton from "../Shared/CopyIdButton"; import { accessibilityLimitationsKeys } from "./AccessibilityAssessment/types"; diff --git a/src/components/EditStopPage/ParkingItemPayAndRideExpandedFields.js b/src/components/EditStopPage/ParkingItemPayAndRideExpandedFields.js index a98088edd..4f2d07254 100644 --- a/src/components/EditStopPage/ParkingItemPayAndRideExpandedFields.js +++ b/src/components/EditStopPage/ParkingItemPayAndRideExpandedFields.js @@ -24,11 +24,11 @@ import ListItemText from "@mui/material/ListItemText"; import MenuItem from "@mui/material/MenuItem"; import Select from "@mui/material/Select"; import { styled } from "@mui/material/styles"; -import { injectIntl } from "react-intl"; import { AccessibilityLimitation as AccessibilityLimitationEnum } from "../../models/AccessibilityLimitation"; import { parkingLayouts } from "../../models/parkingLayout"; import { parkingPaymentProcesses } from "../../models/parkingPaymentProcess"; import StairsIcon from "../../static/icons/accessibility/Stairs"; +import { injectIntl } from "../../utils/injectIntl"; import AccessibilityLimitationPopover from "./AccessibilityAssessment/AccessibilityLimitationPopover"; import PlaceFeatures from "./PlaceFeatures/PlaceFeatures"; import RechargingAvailablePopover from "./RechargingAvailablePopover"; diff --git a/src/components/EditStopPage/QuayDetails.js b/src/components/EditStopPage/QuayDetails.js index fccfe8224..6c458f9b6 100644 --- a/src/components/EditStopPage/QuayDetails.js +++ b/src/components/EditStopPage/QuayDetails.js @@ -13,7 +13,7 @@ See the Licence for the specific language governing permissions and limitations under the Licence. */ import React from "react"; -import { injectIntl } from "react-intl"; +import { injectIntl } from "../../utils/injectIntl"; import Code from "./Code"; import CompassBearingInfo from "./CompassBearingInfo"; diff --git a/src/components/EditStopPage/QuayItem.js b/src/components/EditStopPage/QuayItem.js index 26dd8f85e..d5ca196b0 100644 --- a/src/components/EditStopPage/QuayItem.js +++ b/src/components/EditStopPage/QuayItem.js @@ -29,12 +29,12 @@ import ContentCopy from "@mui/icons-material/ContentCopy"; import MdLess from "@mui/icons-material/ExpandLess"; import FlatButton from "@mui/material/Button"; import Tooltip from "@mui/material/Tooltip"; -import { injectIntl } from "react-intl"; import equipmentHelpers from "../../modelUtils/equipmentHelpers"; import BusShelter from "../../static/icons/facilities/BusShelter"; import { TicketMachine } from "../../static/icons/facilities/TicketMachine"; import Sign512 from "../../static/icons/TransportSign"; import { getIn } from "../../utils/"; +import { injectIntl } from "../../utils/injectIntl"; import EditQuayAdditional from "./EditQuayAdditional"; import ImportedId from "./ImportedId"; diff --git a/src/components/EditStopPage/RechargingAvailablePopover.js b/src/components/EditStopPage/RechargingAvailablePopover.js index d1ccf9eb8..5ad8d8712 100644 --- a/src/components/EditStopPage/RechargingAvailablePopover.js +++ b/src/components/EditStopPage/RechargingAvailablePopover.js @@ -5,8 +5,8 @@ import ListItemIcon from "@mui/material/ListItemIcon"; import ListItemText from "@mui/material/ListItemText"; import MenuItem from "@mui/material/MenuItem"; import React from "react"; -import { injectIntl } from "react-intl"; import { colors as rechargingAvailableColors } from "../../models/rechargingAvailable"; +import { injectIntl } from "../../utils/injectIntl"; class RechargingAvailablePopover extends React.Component { constructor(props) { diff --git a/src/components/EditStopPage/VersionsPopover.js b/src/components/EditStopPage/VersionsPopover.js index 6ac9ee3df..cc42b7936 100644 --- a/src/components/EditStopPage/VersionsPopover.js +++ b/src/components/EditStopPage/VersionsPopover.js @@ -16,8 +16,8 @@ import Menu from "@mui/material/Menu"; import MenuItem from "@mui/material/MenuItem"; import PropTypes from "prop-types"; import { Component } from "react"; -import { injectIntl } from "react-intl"; import { sortVersions } from "../../utils"; +import { injectIntl } from "../../utils/injectIntl"; class VersionsPopover extends Component { constructor(props) { diff --git a/src/components/EditStopPage/WeightingPopover.js b/src/components/EditStopPage/WeightingPopover.js index 622a1c492..effce2149 100644 --- a/src/components/EditStopPage/WeightingPopover.js +++ b/src/components/EditStopPage/WeightingPopover.js @@ -18,8 +18,8 @@ import ListItemText from "@mui/material/ListItemText"; import Menu from "@mui/material/Menu"; import MenuItem from "@mui/material/MenuItem"; import React from "react"; -import { injectIntl } from "react-intl"; import weightTypes, { weightColors } from "../../models/weightTypes"; +import { injectIntl } from "../../utils/injectIntl"; class WeightingPopover extends React.Component { render() { diff --git a/src/components/GroupOfStopPlaces/EditGroupOfStopPlaces.js b/src/components/GroupOfStopPlaces/EditGroupOfStopPlaces.js index f5fe44e56..b455b6403 100644 --- a/src/components/GroupOfStopPlaces/EditGroupOfStopPlaces.js +++ b/src/components/GroupOfStopPlaces/EditGroupOfStopPlaces.js @@ -17,7 +17,6 @@ import MdSave from "@mui/icons-material/Save"; import MdUndo from "@mui/icons-material/Undo"; import FlatButton from "@mui/material/Button"; import { Component } from "react"; -import { injectIntl } from "react-intl"; import { connect } from "react-redux"; import { StopPlacesGroupActions, UserActions } from "../../actions/"; import { @@ -27,6 +26,7 @@ import { import * as types from "../../actions/Types"; import mapHelper from "../../modelUtils/mapToQueryVariables"; import Routes from "../../routes/"; +import { injectIntl } from "../../utils/injectIntl"; import ConfirmDialog from "../Dialogs/ConfirmDialog"; import SaveGroupDialog from "../Dialogs/SaveGroupDialog"; import CopyIdButton from "../Shared/CopyIdButton"; diff --git a/src/components/GroupOfStopPlaces/GroupOfStopPlacesList.js b/src/components/GroupOfStopPlaces/GroupOfStopPlacesList.js index bce0d8fd2..f628925b3 100644 --- a/src/components/GroupOfStopPlaces/GroupOfStopPlacesList.js +++ b/src/components/GroupOfStopPlaces/GroupOfStopPlacesList.js @@ -15,10 +15,10 @@ import ContentAdd from "@mui/icons-material/Add"; import Fab from "@mui/material/Fab"; import { Component } from "react"; -import { injectIntl } from "react-intl"; import { connect } from "react-redux"; import StopPlacesGroupActions from "../../actions/StopPlacesGroupActions"; import { getPrimaryColor } from "../../config/themeConfig"; +import { injectIntl } from "../../utils/injectIntl"; import AddMemberToGroup from "../Dialogs/AddMemberToGroup"; import StopPlaceListItem from "../EditParentStopPage/StopPlaceListItem"; diff --git a/src/components/Header/Header.js b/src/components/Header/Header.js index c6e8fa500..c204b3250 100644 --- a/src/components/Header/Header.js +++ b/src/components/Header/Header.js @@ -28,7 +28,6 @@ import Toolbar from "@mui/material/Toolbar"; import Typography from "@mui/material/Typography"; import React from "react"; import { Helmet } from "react-helmet"; -import { injectIntl } from "react-intl"; import { connect } from "react-redux"; import { UserActions } from "../../actions/"; import { getEnvColor, getLogo, getTiamatEnv } from "../../config/themeConfig"; @@ -36,6 +35,7 @@ import { toggleShowFareZonesInMap, toggleShowTariffZonesInMap, } from "../../reducers/zonesSlice"; +import { injectIntl } from "../../utils/injectIntl"; import ConfirmDialog from "./../Dialogs/ConfirmDialog"; import MoreMenuItem from "./../MainPage/MoreMenuItem"; import { LanguageMenu } from "./LanguageMenu"; diff --git a/src/components/MainPage/HasExpiredInfo.js b/src/components/MainPage/HasExpiredInfo.js index 56fdcb192..c35254d4a 100644 --- a/src/components/MainPage/HasExpiredInfo.js +++ b/src/components/MainPage/HasExpiredInfo.js @@ -15,7 +15,7 @@ limitations under the Licence. */ import Warning from "@mui/icons-material/Warning"; import Tooltip from "@mui/material/Tooltip"; import { Component } from "react"; -import { injectIntl } from "react-intl"; +import { injectIntl } from "../../utils/injectIntl"; class HasExpiredInfo extends Component { render() { diff --git a/src/components/MainPage/SearchBox.js b/src/components/MainPage/SearchBox.js index 277ae2da7..d072ce6b4 100644 --- a/src/components/MainPage/SearchBox.js +++ b/src/components/MainPage/SearchBox.js @@ -29,7 +29,6 @@ import TextField from "@mui/material/TextField"; import debounce from "lodash.debounce"; import React from "react"; import ReactDOM from "react-dom"; -import { injectIntl } from "react-intl"; import { connect } from "react-redux"; import { StopPlaceActions, UserActions } from "../../actions/"; import { @@ -44,6 +43,7 @@ import formatHelpers from "../../modelUtils/mapToClient"; import Routes from "../../routes/"; import FavoriteManager from "../../singletons/FavoriteManager"; import MdSpinner from "../../static/icons/spinner"; +import { injectIntl } from "../../utils/injectIntl"; import { getStopPermissions } from "../../utils/permissionsUtils"; import CoordinatesDialog from "../Dialogs/CoordinatesDialog"; import FavoriteNameDialog from "../Dialogs/FavoriteNameDialog"; diff --git a/src/components/MainPage/Tag.js b/src/components/MainPage/Tag.js index 09a54d687..1529e3e76 100644 --- a/src/components/MainPage/Tag.js +++ b/src/components/MainPage/Tag.js @@ -14,7 +14,7 @@ limitations under the Licence. */ import PropTypes from "prop-types"; import { Component } from "react"; -import { injectIntl } from "react-intl"; +import { injectIntl } from "../../utils/injectIntl"; import ToolTippable from "../EditStopPage/ToolTippable"; class Tag extends Component { diff --git a/src/components/Map/CoordinateMarker.js b/src/components/Map/CoordinateMarker.js index a187ef29a..8cda719c2 100644 --- a/src/components/Map/CoordinateMarker.js +++ b/src/components/Map/CoordinateMarker.js @@ -14,13 +14,13 @@ limitations under the Licence. */ import L from "leaflet"; import React from "react"; -import { injectIntl } from "react-intl"; import { Marker, Popup } from "react-leaflet"; import { connect } from "react-redux"; import { UserActions } from "../../actions/"; import coordinatesIcon from "../../static/icons/coordinates-marker.png"; import mapCenterIcon from "../../static/icons/map-center.png"; import mapZoomIn from "../../static/icons/map-zoom-in.png"; +import { injectIntl } from "../../utils/injectIntl"; class CoordinateMarker extends React.Component { handleDragEnd(e) { diff --git a/src/components/Map/EditStopMap.js b/src/components/Map/EditStopMap.js index 4e92bdcab..403850a5e 100644 --- a/src/components/Map/EditStopMap.js +++ b/src/components/Map/EditStopMap.js @@ -14,12 +14,12 @@ limitations under the Licence. */ import debounce from "lodash.debounce"; import React from "react"; -import { injectIntl } from "react-intl"; import { connect } from "react-redux"; import { StopPlaceActions, UserActions } from "../../actions/"; import { getNeighbourStops } from "../../actions/TiamatActions"; import Settings from "../../singletons/SettingsManager"; import { setDecimalPrecision } from "../../utils"; +import { injectIntl } from "../../utils/injectIntl"; import CompassBearingDialog from "../Dialogs/CompassBearingDialog"; import CoordinatesDialog from "../Dialogs/CoordinatesDialog"; import LeafletMap from "./LeafletMap"; diff --git a/src/components/Map/MarkerList.js b/src/components/Map/MarkerList.js index a8a28766e..bf318c933 100644 --- a/src/components/Map/MarkerList.js +++ b/src/components/Map/MarkerList.js @@ -14,7 +14,6 @@ limitations under the Licence. */ import PropTypes from "prop-types"; import React from "react"; -import { injectIntl } from "react-intl"; import { connect } from "react-redux"; import { StopPlaceActions, @@ -25,6 +24,7 @@ import { getNeighbourStopPlaceQuays } from "../../actions/TiamatActions"; import { Entities } from "../../models/Entities"; import Routes from "../../routes/"; import { getIn, setDecimalPrecision } from "../../utils"; +import { injectIntl } from "../../utils/injectIntl"; import { getStopPermissions } from "../../utils/permissionsUtils"; import BoardingPositionMarker from "./BoardingPositionMarker"; import CoordinateMarker from "./CoordinateMarker"; diff --git a/src/components/Map/PathLink.js b/src/components/Map/PathLink.js index 04dca0d91..9fd53652a 100644 --- a/src/components/Map/PathLink.js +++ b/src/components/Map/PathLink.js @@ -13,12 +13,12 @@ See the Licence for the specific language governing permissions and limitations under the Licence. */ import React from "react"; -import { injectIntl } from "react-intl"; import { FeatureGroup, Polyline, Popup } from "react-leaflet"; import { connect } from "react-redux"; import { UserActions } from "../../actions"; import GenerateColor from "../../models/Colors"; import { getIn } from "../../utils"; +import { injectIntl } from "../../utils/injectIntl"; import WalkingDistanceDialog from "../Dialogs/WalkingDistanceDialog"; class PathLink extends React.Component { diff --git a/src/components/Map/StopPlacesMap.js b/src/components/Map/StopPlacesMap.js index 60c401244..5ffc80d8f 100644 --- a/src/components/Map/StopPlacesMap.js +++ b/src/components/Map/StopPlacesMap.js @@ -14,13 +14,13 @@ limitations under the Licence. */ import debounce from "lodash.debounce"; import React from "react"; -import { injectIntl } from "react-intl"; import { connect } from "react-redux"; import { StopPlaceActions, UserActions } from "../../actions/"; import { getNeighbourStops } from "../../actions/TiamatActions"; import { getMarkersForMap } from "../../selectors/StopPlaceMap"; import Settings from "../../singletons/SettingsManager"; import { getIn } from "../../utils/"; +import { injectIntl } from "../../utils/injectIntl"; import LeafletMap from "./LeafletMap"; class StopPlacesMap extends React.Component { diff --git a/src/components/ReportPage/ReportQuayRows.js b/src/components/ReportPage/ReportQuayRows.js index b705be3d8..a814428bd 100644 --- a/src/components/ReportPage/ReportQuayRows.js +++ b/src/components/ReportPage/ReportQuayRows.js @@ -13,8 +13,8 @@ See the Licence for the specific language governing permissions and limitations under the Licence. */ import React from "react"; -import { injectIntl } from "react-intl"; import { ColumnTransformerQuaysJsx } from "../../models/columnTransformers"; +import { injectIntl } from "../../utils/injectIntl"; class ReportQuayRows extends React.Component { render() { diff --git a/src/components/ReportPage/TagSuggestionPopover.js b/src/components/ReportPage/TagSuggestionPopover.js index 2641fb679..715ccc7a1 100644 --- a/src/components/ReportPage/TagSuggestionPopover.js +++ b/src/components/ReportPage/TagSuggestionPopover.js @@ -21,9 +21,9 @@ import MenuItem from "@mui/material/MenuItem"; import TextField from "@mui/material/TextField"; import Typography from "@mui/material/Typography"; import { Component } from "react"; -import { injectIntl } from "react-intl"; import { connect } from "react-redux"; import { getTagsByName } from "../../actions/TiamatActions"; +import { injectIntl } from "../../utils/injectIntl"; import ShowMoreMenuFooter from "./ShowMoreMenuFooter"; class TagSuggestionPopover extends Component { diff --git a/src/components/ReportPageV2/StopTypeFilter.js b/src/components/ReportPageV2/StopTypeFilter.js index e0ab4a1a1..48d78db1b 100644 --- a/src/components/ReportPageV2/StopTypeFilter.js +++ b/src/components/ReportPageV2/StopTypeFilter.js @@ -6,7 +6,7 @@ import ListItemText from "@mui/material/ListItemText"; import MenuItem from "@mui/material/MenuItem"; import Select from "@mui/material/Select"; import { styled } from "@mui/material/styles"; -import { injectIntl } from "react-intl"; +import { injectIntl } from "../../utils/injectIntl"; import stopTypes from "../../models/stopTypes"; import ModalityIconSvg from "../MainPage/ModalityIconSvg"; diff --git a/src/components/Shared/CopyIdButton.js b/src/components/Shared/CopyIdButton.js index bb2709981..efa8937bd 100644 --- a/src/components/Shared/CopyIdButton.js +++ b/src/components/Shared/CopyIdButton.js @@ -2,7 +2,7 @@ import ContentCopy from "@mui/icons-material/ContentCopy"; import { IconButton, Tooltip } from "@mui/material"; import PropTypes from "prop-types"; import { useState } from "react"; -import { injectIntl } from "react-intl"; +import { injectIntl } from "../../utils/injectIntl"; /** * A reusable button that copies a given text string to the clipboard. diff --git a/src/components/SnackbarWrapper.js b/src/components/SnackbarWrapper.js index fa15698eb..23d5664cd 100644 --- a/src/components/SnackbarWrapper.js +++ b/src/components/SnackbarWrapper.js @@ -18,10 +18,10 @@ import MdInfo from "@mui/icons-material/InfoOutlined"; import Button from "@mui/material/Button"; import Snackbar from "@mui/material/Snackbar"; import { Component } from "react"; -import { injectIntl } from "react-intl"; import { connect } from "react-redux"; import { UserActions } from "../actions/"; import * as types from "../actions/Types"; +import { injectIntl } from "../utils/injectIntl"; class SnackbarWrapper extends Component { constructor(props) { diff --git a/src/containers/ReportPage.js b/src/containers/ReportPage.js index d04dbd2b0..9ee21caa7 100644 --- a/src/containers/ReportPage.js +++ b/src/containers/ReportPage.js @@ -18,7 +18,6 @@ import Button from "@mui/material/Button"; import MenuItem from "@mui/material/MenuItem"; import TextField from "@mui/material/TextField"; import React from "react"; -import { injectIntl } from "react-intl"; import { connect } from "react-redux"; import { findStopForReport, @@ -40,6 +39,7 @@ import { columnOptionsStopPlace, } from "../config/columnOptions"; import MdSpinner from "../static/icons/spinner"; +import { injectIntl } from "../utils/injectIntl"; import { buildReportSearchQuery, extractQueryParamsFromUrl, diff --git a/src/utils/injectIntl.tsx b/src/utils/injectIntl.tsx new file mode 100644 index 000000000..20a192851 --- /dev/null +++ b/src/utils/injectIntl.tsx @@ -0,0 +1,33 @@ +import { ComponentType } from "react"; +import { IntlShape, useIntl } from "react-intl"; + +/** + * Props injected by {@link injectIntl}. + */ +export interface WrappedComponentProps { + intl: IntlShape; +} + +/** + * Drop-in replacement for react-intl's `injectIntl` HOC, which was removed in + * react-intl v9. It wraps a component and supplies the `intl` object as a prop + * by reading it from the (supported) `useIntl` hook. + * + * This keeps existing class components working without converting each of them + * to function components/hooks. New code should prefer the `useIntl` hook + * directly. + */ +export const injectIntl =

( + WrappedComponent: ComponentType

, +) => { + const WithIntl = (props: Omit) => { + const intl = useIntl(); + return ; + }; + + WithIntl.displayName = `injectIntl(${ + WrappedComponent.displayName || WrappedComponent.name || "Component" + })`; + + return WithIntl; +};