import axios from 'axios';
+import PropTypes from 'prop-types';
import React, { useEffect, useState } from 'react';
import { Helmet } from 'react-helmet';
import { withTranslation } from 'react-i18next';
import { useParams } from 'react-router-dom';
+import CanonicalLinks from '../common/CanonicalLinks';
import ErrorBoundary from '../common/ErrorBoundary';
import ErrorMessage from '../common/ErrorMessage';
import Loading from '../common/Loading';
import NotFound from '../pages/NotFound';
import Detail from '../techniques/Detail';
-import { getLanguages, getTranslation } from '../../helpers/Technique';
+import { getLanguages, getMatchedLocale, getTranslation } from '../../helpers/Technique';
import i18n from '../../i18n';
-const Technique = () => {
+const Technique = ({ type }) => {
const params = useParams();
const { name } = params;
const ctrl = new AbortController();
setLoading(true);
axios
- .get(`/api/tech/${name}`, { signal: ctrl.signal })
+ .get(`/api/pages/${type}/${name}`, { signal: ctrl.signal })
.then(response => {
setError(null);
setLoading(false);
return () => {
ctrl.abort();
};
- }, [name]);
+ }, [name, type]);
if (loading) {
return <Loading />;
<Helmet>
<title>{getTranslation(technique, 'title', i18n.language)}</title>
<meta name="description" content={getTranslation(technique, 'short', i18n.language)} />
- <link
- href={`https://alttp.localhorst.tv/tech/${technique.name}`}
- hrefLang="x-default"
- rel="alternate"
- />
- {getLanguages(technique).map(l =>
- <link
- key={l}
- href={`https://alttp.localhorst.tv/tech/${technique.name}?lng=${l}`}
- hrefLang={l}
- rel="alternate"
- />
- )}
</Helmet>
+ <CanonicalLinks
+ base={`/tech/${technique.name}`}
+ lang={getMatchedLocale(technique, i18n.language)}
+ langs={getLanguages(technique)}
+ />
<Detail technique={technique} />
</ErrorBoundary>;
};
+Technique.propTypes = {
+ type: PropTypes.string,
+};
+
export default withTranslation()(Technique);