UNPKG

gatsby-plugin-intl

Version:

Gatsby plugin to add react-intl onto a site

83 lines (82 loc) 3.04 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); exports.__esModule = true; exports.navigate = exports.default = exports.changeLocale = void 0; var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends")); var _objectWithoutPropertiesLoose2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutPropertiesLoose")); var _react = _interopRequireDefault(require("react")); var _propTypes = _interopRequireDefault(require("prop-types")); var _gatsby = require("gatsby"); var _intlContext = require("./intl-context"); var _excluded = ["to", "language", "children", "onClick"]; var Link = /*#__PURE__*/_react.default.forwardRef(function (_ref, ref) { var to = _ref.to, language = _ref.language, children = _ref.children, onClick = _ref.onClick, rest = (0, _objectWithoutPropertiesLoose2.default)(_ref, _excluded); return /*#__PURE__*/_react.default.createElement(_intlContext.IntlContextConsumer, null, function (intl) { var languageLink = language || intl.language; var link = intl.routed || language ? "/" + languageLink + to : "" + to; var handleClick = function handleClick(e) { if (language) { localStorage.setItem("gatsby-intl-language", language); } if (onClick) { onClick(e); } }; return /*#__PURE__*/_react.default.createElement(_gatsby.Link, (0, _extends2.default)({}, rest, { to: link, onClick: handleClick, ref: ref }), children); }); }); Link.propTypes = { children: _propTypes.default.node.isRequired, to: _propTypes.default.string, language: _propTypes.default.string }; Link.defaultProps = { to: "" }; var _default = Link; exports.default = _default; var navigate = function navigate(to, options) { if (typeof window === "undefined") { return; } var _window$___gatsbyIntl = window.___gatsbyIntl, language = _window$___gatsbyIntl.language, routed = _window$___gatsbyIntl.routed; var link = routed ? "/" + language + to : "" + to; (0, _gatsby.navigate)(link, options); }; exports.navigate = navigate; var changeLocale = function changeLocale(language, to) { if (typeof window === "undefined") { return; } var routed = window.___gatsbyIntl.routed; var removePrefix = function removePrefix(pathname) { var base = typeof __BASE_PATH__ !== "undefined" ? __BASE_PATH__ : __PATH_PREFIX__; if (base && pathname.indexOf(base) === 0) { pathname = pathname.slice(base.length); } return pathname; }; var removeLocalePart = function removeLocalePart(pathname) { if (!routed) { return pathname; } var i = pathname.indexOf("/", 1); return pathname.substring(i); }; var pathname = to || removeLocalePart(removePrefix(window.location.pathname)); // TODO: check slash var link = "/" + language + pathname + window.location.search; localStorage.setItem("gatsby-intl-language", language); (0, _gatsby.navigate)(link); }; exports.changeLocale = changeLocale;