Merge pull request #113 from Matheusdoe-dev/dev
feat: Seo improvement
This commit was merged in pull request #113.
This commit is contained in:
@@ -31,6 +31,7 @@
|
||||
"react": "^16.13.1",
|
||||
"react-dom": "^16.13.1",
|
||||
"react-dropzone": "^11.2.1",
|
||||
"react-helmet": "^6.1.0",
|
||||
"react-image-crop": "^8.6.6",
|
||||
"rich-markdown-editor": "^11.0.2",
|
||||
"styled-components": "^5.2.0",
|
||||
|
||||
23
web/src/components/Seo/Seo.js
Normal file
23
web/src/components/Seo/Seo.js
Normal file
@@ -0,0 +1,23 @@
|
||||
import { Helmet } from 'react-helmet'
|
||||
|
||||
const Seo = ({ title, description, lang }) => {
|
||||
return (
|
||||
<>
|
||||
<Helmet
|
||||
htmlAttributes={{
|
||||
lang,
|
||||
}}
|
||||
title={title}
|
||||
titleTemplate={`Cadhub - ${title}`}
|
||||
>
|
||||
<meta property="og:locale" content={lang} />
|
||||
<meta property="og:title" content={title} />
|
||||
<meta property="og:description" content={description} />
|
||||
<meta name="description" content={description} />
|
||||
<title>Cadhub - {title}</title>
|
||||
</Helmet>
|
||||
</>
|
||||
)
|
||||
}
|
||||
|
||||
export default Seo
|
||||
@@ -3,8 +3,10 @@
|
||||
<head>
|
||||
<meta charset="UTF-8" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||
|
||||
<title>CadHub</title> <!-- to be replaced by react helmet -->
|
||||
<meta name="keywords" content="cadhub, app, application, web application, cad, code, code-cad, cad-modeling, community, website, cascade studio, openscad" />
|
||||
<meta property="og:type" content="website" />
|
||||
<meta name="robots" content="index, follow" />
|
||||
<title><%= htmlWebpackPlugin.options.title %></title>
|
||||
<script>
|
||||
// Install Cascade Studio as a Progressive Web App for Offline Access
|
||||
// This needs to be put before ANY HTTP Requests are made, so it can cache them.
|
||||
|
||||
@@ -1,9 +1,12 @@
|
||||
import MainLayout from 'src/layouts/MainLayout'
|
||||
import CommentCell from 'src/components/CommentCell'
|
||||
import Seo from 'src/components/Seo/Seo'
|
||||
|
||||
const CommentPage = ({ id }) => {
|
||||
return (
|
||||
<MainLayout>
|
||||
<Seo title="Comment" description="Comment page" lang="en-US" />
|
||||
|
||||
<CommentCell id={id} />
|
||||
</MainLayout>
|
||||
)
|
||||
|
||||
@@ -1,9 +1,12 @@
|
||||
import MainLayout from 'src/layouts/MainLayout'
|
||||
import CommentsCell from 'src/components/CommentsCell'
|
||||
import Seo from 'src/components/Seo/Seo'
|
||||
|
||||
const CommentsPage = () => {
|
||||
return (
|
||||
<MainLayout>
|
||||
<Seo title="Comments" description="Comments page" lang="en-US" />
|
||||
|
||||
<CommentsCell />
|
||||
</MainLayout>
|
||||
)
|
||||
|
||||
@@ -1,9 +1,12 @@
|
||||
import MainLayout from 'src/layouts/MainLayout'
|
||||
import EditCommentCell from 'src/components/EditCommentCell'
|
||||
import Seo from 'src/components/Seo/Seo'
|
||||
|
||||
const EditCommentPage = ({ id }) => {
|
||||
return (
|
||||
<MainLayout>
|
||||
<Seo title="Edit comment" description="Edit comment page" lang="en-US" />
|
||||
|
||||
<EditCommentCell id={id} />
|
||||
</MainLayout>
|
||||
)
|
||||
|
||||
@@ -2,11 +2,14 @@ import { useAuth } from '@redwoodjs/auth'
|
||||
|
||||
import MainLayout from 'src/layouts/MainLayout'
|
||||
import Part2Cell from 'src/components/Part2Cell'
|
||||
import Seo from 'src/components/Seo/Seo'
|
||||
|
||||
const EditPart2Page = ({ userName, partTitle }) => {
|
||||
const { currentUser } = useAuth()
|
||||
return (
|
||||
<MainLayout>
|
||||
<Seo title={partTitle} description="Edit part page" lang="en-US" />
|
||||
|
||||
<Part2Cell
|
||||
userName={userName}
|
||||
partTitle={partTitle}
|
||||
|
||||
@@ -1,9 +1,12 @@
|
||||
import MainLayout from 'src/layouts/MainLayout'
|
||||
import EditPartCell from 'src/components/EditPartCell'
|
||||
import Seo from 'src/components/Seo/Seo'
|
||||
|
||||
const EditPartPage = ({ id }) => {
|
||||
return (
|
||||
<MainLayout>
|
||||
<Seo title="Edit part" description="Edit part page" lang="en-US" />
|
||||
|
||||
<EditPartCell id={id} />
|
||||
</MainLayout>
|
||||
)
|
||||
|
||||
@@ -1,9 +1,16 @@
|
||||
import MainLayout from 'src/layouts/MainLayout'
|
||||
import EditPartReactionCell from 'src/components/EditPartReactionCell'
|
||||
import Seo from 'src/components/Seo/Seo'
|
||||
|
||||
const EditPartReactionPage = ({ id }) => {
|
||||
return (
|
||||
<MainLayout>
|
||||
<Seo
|
||||
title="Edit part reaction"
|
||||
description="Edit part reaction page"
|
||||
lang="en-US"
|
||||
/>
|
||||
|
||||
<EditPartReactionCell id={id} />
|
||||
</MainLayout>
|
||||
)
|
||||
|
||||
@@ -1,9 +1,12 @@
|
||||
import MainLayout from 'src/layouts/MainLayout'
|
||||
import EditUser2Cell from 'src/components/EditUser2Cell'
|
||||
import Seo from 'src/components/Seo/Seo'
|
||||
|
||||
const UserPage = ({ userName }) => {
|
||||
return (
|
||||
<MainLayout>
|
||||
<Seo title={userName} description="Add new part page" lang="en-US" />
|
||||
|
||||
<EditUser2Cell userName={userName} />
|
||||
</MainLayout>
|
||||
)
|
||||
|
||||
@@ -1,9 +1,12 @@
|
||||
import MainLayout from 'src/layouts/MainLayout'
|
||||
import EditUserCell from 'src/components/EditUserCell'
|
||||
import Seo from 'src/components/Seo/Seo'
|
||||
|
||||
const EditUserPage = ({ id }) => {
|
||||
return (
|
||||
<MainLayout>
|
||||
<Seo title="Edit user" description="Edit user page" lang="en-US" />
|
||||
|
||||
<EditUserCell id={id} />
|
||||
</MainLayout>
|
||||
)
|
||||
|
||||
@@ -6,9 +6,12 @@
|
||||
// avoid the possibility that it will cause its own error. If it does, Redwood will
|
||||
// still render a generic error page, but your users will prefer something a bit more
|
||||
// thoughtful. =)
|
||||
import Seo from 'src/components/Seo/Seo'
|
||||
|
||||
export default () => (
|
||||
<main>
|
||||
<Seo title="Fatal error" description="Fatal error" lang="en-US" />
|
||||
|
||||
<style
|
||||
dangerouslySetInnerHTML={{
|
||||
__html: `
|
||||
|
||||
@@ -1,9 +1,12 @@
|
||||
import MainLayout from 'src/layouts/MainLayout'
|
||||
import IdePartCell from 'src/components/IdePartCell'
|
||||
import Seo from 'src/components/Seo/Seo'
|
||||
|
||||
const IdePartPage = ({ userName, partTitle }) => {
|
||||
return (
|
||||
<MainLayout>
|
||||
<Seo title={partTitle} description={partTitle} lang="en-US" />
|
||||
|
||||
<IdePartCell userName={userName} partTitle={partTitle} />
|
||||
</MainLayout>
|
||||
)
|
||||
|
||||
@@ -1,9 +1,16 @@
|
||||
import MainLayout from 'src/layouts/MainLayout'
|
||||
import NewComment from 'src/components/NewComment'
|
||||
import Seo from 'src/components/Seo/Seo'
|
||||
|
||||
const NewCommentPage = () => {
|
||||
return (
|
||||
<MainLayout>
|
||||
<Seo
|
||||
title="New comment page"
|
||||
description="New comment page"
|
||||
lang="en-US"
|
||||
/>
|
||||
|
||||
<NewComment />
|
||||
</MainLayout>
|
||||
)
|
||||
|
||||
@@ -4,6 +4,7 @@ import { navigate, routes } from '@redwoodjs/router'
|
||||
|
||||
import MainLayout from 'src/layouts/MainLayout'
|
||||
import Part2Cell from 'src/components/Part2Cell'
|
||||
import Seo from 'src/components/Seo/Seo'
|
||||
|
||||
const NewPart2Page = ({ userName }) => {
|
||||
const { isAuthenticated, currentUser } = useAuth()
|
||||
@@ -12,6 +13,8 @@ const NewPart2Page = ({ userName }) => {
|
||||
}, [currentUser])
|
||||
return (
|
||||
<MainLayout>
|
||||
<Seo title="New part" description="Add new part page" lang="en-US" />
|
||||
|
||||
<Part2Cell
|
||||
userName={userName}
|
||||
currentUserId={currentUser?.sub}
|
||||
|
||||
@@ -1,9 +1,12 @@
|
||||
import MainLayout from 'src/layouts/MainLayout'
|
||||
import NewPart from 'src/components/NewPart'
|
||||
import Seo from 'src/components/Seo/Seo'
|
||||
|
||||
const NewPartPage = () => {
|
||||
return (
|
||||
<MainLayout>
|
||||
<Seo title="New Part" description="New part page" lang="en-US" />
|
||||
|
||||
<NewPart />
|
||||
</MainLayout>
|
||||
)
|
||||
|
||||
@@ -1,9 +1,16 @@
|
||||
import MainLayout from 'src/layouts/MainLayout'
|
||||
import NewPartReaction from 'src/components/NewPartReaction'
|
||||
import Seo from 'src/components/Seo/Seo'
|
||||
|
||||
const NewPartReactionPage = () => {
|
||||
return (
|
||||
<MainLayout>
|
||||
<Seo
|
||||
title="New part reaction"
|
||||
description="New part reaction page"
|
||||
lang="en-US"
|
||||
/>
|
||||
|
||||
<NewPartReaction />
|
||||
</MainLayout>
|
||||
)
|
||||
|
||||
@@ -1,9 +1,12 @@
|
||||
import MainLayout from 'src/layouts/MainLayout'
|
||||
import NewUser from 'src/components/NewUser'
|
||||
import Seo from 'src/components/Seo/Seo'
|
||||
|
||||
const NewUserPage = () => {
|
||||
return (
|
||||
<MainLayout>
|
||||
<Seo title="New user" description="New user page" lang="en-US" />
|
||||
|
||||
<NewUser />
|
||||
</MainLayout>
|
||||
)
|
||||
|
||||
@@ -1,7 +1,10 @@
|
||||
import MainLayout from 'src/layouts/MainLayout'
|
||||
import Seo from 'src/components/Seo/Seo'
|
||||
|
||||
export default () => (
|
||||
<MainLayout>
|
||||
<Seo title="Page not found" description="404 page not found" lang="en-US" />
|
||||
|
||||
<style
|
||||
dangerouslySetInnerHTML={{
|
||||
__html: `
|
||||
|
||||
@@ -2,11 +2,14 @@ import { useAuth } from '@redwoodjs/auth'
|
||||
|
||||
import MainLayout from 'src/layouts/MainLayout'
|
||||
import Part2Cell from 'src/components/Part2Cell'
|
||||
import Seo from 'src/components/Seo/Seo'
|
||||
|
||||
const Part2Page = ({ userName, partTitle }) => {
|
||||
const { currentUser } = useAuth()
|
||||
return (
|
||||
<MainLayout>
|
||||
<Seo title={partTitle} description={partTitle} lang="en-US" />
|
||||
|
||||
<Part2Cell
|
||||
userName={userName}
|
||||
partTitle={partTitle}
|
||||
|
||||
@@ -1,9 +1,12 @@
|
||||
import MainLayout from 'src/layouts/MainLayout'
|
||||
import PartCell from 'src/components/PartCell'
|
||||
import Seo from 'src/components/Seo/Seo'
|
||||
|
||||
const PartPage = ({ id }) => {
|
||||
return (
|
||||
<MainLayout>
|
||||
<Seo title="Part" description="Part page" lang="en-US" />
|
||||
|
||||
<PartCell id={id} />
|
||||
</MainLayout>
|
||||
)
|
||||
|
||||
@@ -1,9 +1,16 @@
|
||||
import MainLayout from 'src/layouts/MainLayout'
|
||||
import PartReactionCell from 'src/components/PartReactionCell'
|
||||
import Seo from 'src/components/Seo/Seo'
|
||||
|
||||
const PartReactionPage = ({ id }) => {
|
||||
return (
|
||||
<MainLayout>
|
||||
<Seo
|
||||
title="Part reaction"
|
||||
description="Part reaction page"
|
||||
lang="en-US"
|
||||
/>
|
||||
|
||||
<PartReactionCell id={id} />
|
||||
</MainLayout>
|
||||
)
|
||||
|
||||
@@ -1,9 +1,16 @@
|
||||
import MainLayout from 'src/layouts/MainLayout'
|
||||
import PartReactionsCell from 'src/components/PartReactionsCell'
|
||||
import Seo from 'src/components/Seo/Seo'
|
||||
|
||||
const PartReactionsPage = () => {
|
||||
return (
|
||||
<MainLayout>
|
||||
<Seo
|
||||
title="Part reactions"
|
||||
description="Part reactions page"
|
||||
lang="en-US"
|
||||
/>
|
||||
|
||||
<PartReactionsCell />
|
||||
</MainLayout>
|
||||
)
|
||||
|
||||
@@ -1,9 +1,12 @@
|
||||
import MainLayout from 'src/layouts/MainLayout'
|
||||
import PartsCell from 'src/components/PartsCell'
|
||||
import Seo from 'src/components/Seo/Seo'
|
||||
|
||||
const PartsPage = () => {
|
||||
return (
|
||||
<MainLayout>
|
||||
<Seo title="Parts page" description="Cadhub parts page" lang="en-US" />
|
||||
|
||||
<PartsCell />
|
||||
</MainLayout>
|
||||
)
|
||||
|
||||
@@ -1,9 +1,12 @@
|
||||
import MainLayout from 'src/layouts/MainLayout'
|
||||
import User2Cell from 'src/components/User2Cell'
|
||||
import Seo from 'src/components/Seo/Seo'
|
||||
|
||||
const UserPage = ({ userName }) => {
|
||||
return (
|
||||
<MainLayout>
|
||||
<Seo title={userName} description="User page" lang="en-US" />
|
||||
|
||||
<User2Cell userName={userName} />
|
||||
</MainLayout>
|
||||
)
|
||||
|
||||
@@ -1,9 +1,12 @@
|
||||
import MainLayout from 'src/layouts/MainLayout'
|
||||
import UserCell from 'src/components/UserCell'
|
||||
import Seo from 'src/components/Seo/Seo'
|
||||
|
||||
const UserPage = ({ id }) => {
|
||||
return (
|
||||
<MainLayout>
|
||||
<Seo title="User" description="User page" lang="en-US" />
|
||||
|
||||
<UserCell id={id} />
|
||||
</MainLayout>
|
||||
)
|
||||
|
||||
@@ -1,9 +1,12 @@
|
||||
import MainLayout from 'src/layouts/MainLayout'
|
||||
import UsersCell from 'src/components/UsersCell'
|
||||
import Seo from 'src/components/Seo/Seo'
|
||||
|
||||
const UsersPage = () => {
|
||||
return (
|
||||
<MainLayout>
|
||||
<Seo title="Users" description="Users page" lang="en-US" />
|
||||
|
||||
<UsersCell />
|
||||
</MainLayout>
|
||||
)
|
||||
|
||||
17
yarn.lock
17
yarn.lock
@@ -13155,7 +13155,7 @@ react-error-overlay@^6.0.1, react-error-overlay@^6.0.3:
|
||||
resolved "https://registry.yarnpkg.com/react-error-overlay/-/react-error-overlay-6.0.7.tgz#1dcfb459ab671d53f660a991513cb2f0a0553108"
|
||||
integrity sha512-TAv1KJFh3RhqxNvhzxj6LeT5NWklP6rDr2a0jaTfsZ5wSZWHOGeqQyejUp3xxLfPt2UpyJEcVQB/zyPcmonNFA==
|
||||
|
||||
react-fast-compare@^3.0.1:
|
||||
react-fast-compare@^3.0.1, react-fast-compare@^3.1.1:
|
||||
version "3.2.0"
|
||||
resolved "https://registry.yarnpkg.com/react-fast-compare/-/react-fast-compare-3.2.0.tgz#641a9da81b6a6320f270e89724fb45a0b39e43bb"
|
||||
integrity sha512-rtGImPZ0YyLrscKI9xTpV8psd6I8VAtjKCzQDlzyDvqJA8XOW78TXYQwNRNd8g8JZnDu8q9Fu/1v4HPAVwVdHA==
|
||||
@@ -13183,6 +13183,16 @@ react-helmet-async@^1.0.2:
|
||||
react-fast-compare "^3.0.1"
|
||||
shallowequal "^1.1.0"
|
||||
|
||||
react-helmet@^6.1.0:
|
||||
version "6.1.0"
|
||||
resolved "https://registry.yarnpkg.com/react-helmet/-/react-helmet-6.1.0.tgz#a750d5165cb13cf213e44747502652e794468726"
|
||||
integrity sha512-4uMzEY9nlDlgxr61NL3XbKRy1hEkXmKNXhjbAIOVw5vcFrsdYbH2FEwcNyWvWinl103nXgzYNlns9ca+8kFiWw==
|
||||
dependencies:
|
||||
object-assign "^4.1.1"
|
||||
prop-types "^15.7.2"
|
||||
react-fast-compare "^3.1.1"
|
||||
react-side-effect "^2.1.0"
|
||||
|
||||
react-hook-form@^6.5.3:
|
||||
version "6.7.1"
|
||||
resolved "https://registry.yarnpkg.com/react-hook-form/-/react-hook-form-6.7.1.tgz#58f1ce3ba6b0f3cb05b665a4cc268d0623ea9e1a"
|
||||
@@ -13247,6 +13257,11 @@ react-portal@^4.2.1:
|
||||
dependencies:
|
||||
prop-types "^15.5.8"
|
||||
|
||||
react-side-effect@^2.1.0:
|
||||
version "2.1.1"
|
||||
resolved "https://registry.yarnpkg.com/react-side-effect/-/react-side-effect-2.1.1.tgz#66c5701c3e7560ab4822a4ee2742dee215d72eb3"
|
||||
integrity sha512-2FoTQzRNTncBVtnzxFOk2mCpcfxQpenBMbk5kSVBg5UcPqV9fRbgY2zhb7GTWWOlpFmAxhClBDlIq8Rsubz1yQ==
|
||||
|
||||
react-sizeme@^2.6.7:
|
||||
version "2.6.12"
|
||||
resolved "https://registry.yarnpkg.com/react-sizeme/-/react-sizeme-2.6.12.tgz#ed207be5476f4a85bf364e92042520499455453e"
|
||||
|
||||
Reference in New Issue
Block a user