Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit0ac37b1

Browse files
authored
feat: Add page titles (#2070)
1 parent3f3ecbf commit0ac37b1

File tree

17 files changed

+134
-36
lines changed

17 files changed

+134
-36
lines changed

‎site/htmlTemplates/index.html‎

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,6 @@
2121
<linkrel="mask-icon"href="/static/favicon.svg"color="#000000"crossorigin="use-credentials"/>
2222
<linkrel="alternate icon"type="image/png"href="/favicon.png"/>
2323
<linkrel="icon"type="image/svg+xml"href="/favicon.svg"/>
24-
<title>Coder</title>
2524
</head>
2625

2726
<body>

‎site/package.json‎

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,7 @@
4444
"history":"5.3.0",
4545
"react":"17.0.2",
4646
"react-dom":"17.0.2",
47+
"react-helmet":"^6.1.0",
4748
"react-markdown":"8.0.3",
4849
"react-router-dom":"6.3.0",
4950
"sourcemapped-stacktrace":"1.1.11",
@@ -73,6 +74,7 @@
7374
"@types/node":"14.18.16",
7475
"@types/react":"17.0.44",
7576
"@types/react-dom":"17.0.16",
77+
"@types/react-helmet":"^6.1.5",
7678
"@types/superagent":"4.1.15",
7779
"@types/uuid":"8.3.4",
7880
"@typescript-eslint/eslint-plugin":"5.23.0",

‎site/src/components/SettingsLayout/SettingsLayout.tsx‎

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
importBoxfrom"@material-ui/core/Box"
22
import{FC}from"react"
3+
import{Helmet}from"react-helmet"
34
import{Outlet}from"react-router-dom"
5+
import{pageTitle}from"../../util/page"
46
import{AuthAndFrame}from"../AuthAndFrame/AuthAndFrame"
57
import{Margins}from"../Margins/Margins"
68
import{TabPanel}from"../TabPanel/TabPanel"
@@ -22,6 +24,9 @@ export const SettingsLayout: FC = () => {
2224
return(
2325
<AuthAndFrame>
2426
<Boxdisplay="flex"flexDirection="column">
27+
<Helmet>
28+
<title>{pageTitle("Settings")}</title>
29+
</Helmet>
2530
<Margins>
2631
<TabPaneltitle={Language.settingsLabel}menuItems={menuItems}>
2732
<Outlet/>

‎site/src/pages/CliAuthPage/CliAuthPage.tsx‎

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,11 @@
11
import{makeStyles}from"@material-ui/core/styles"
22
import{useActor}from"@xstate/react"
33
importReact,{useContext,useEffect,useState}from"react"
4+
import{Helmet}from"react-helmet"
45
import{getApiKey}from"../../api/api"
56
import{CliAuthToken}from"../../components/CliAuthToken/CliAuthToken"
67
import{FullScreenLoader}from"../../components/Loader/FullScreenLoader"
8+
import{pageTitle}from"../../util/page"
79
import{XServiceContext}from"../../xServices/StateContext"
810

911
exportconstCliAuthenticationPage:React.FC=()=>{
@@ -29,6 +31,9 @@ export const CliAuthenticationPage: React.FC = () => {
2931

3032
return(
3133
<divclassName={styles.root}>
34+
<Helmet>
35+
<title>{pageTitle("CLI Auth")}</title>
36+
</Helmet>
3237
<CliAuthTokensessionToken={apiKey}/>
3338
</div>
3439
)

‎site/src/pages/CreateWorkspacePage/CreateWorkspacePage.tsx‎

Lines changed: 30 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,10 @@
11
import{useMachine}from"@xstate/react"
22
import{FC}from"react"
3+
import{Helmet}from"react-helmet"
34
import{useNavigate,useSearchParams}from"react-router-dom"
45
import{Template}from"../../api/typesGenerated"
56
import{useOrganizationId}from"../../hooks/useOrganizationId"
7+
import{pageTitle}from"../../util/page"
68
import{createWorkspaceMachine}from"../../xServices/createWorkspace/createWorkspaceXService"
79
import{CreateWorkspacePageView}from"./CreateWorkspacePageView"
810

@@ -21,29 +23,34 @@ const CreateWorkspacePage: FC = () => {
2123
})
2224

2325
return(
24-
<CreateWorkspacePageView
25-
loadingTemplates={createWorkspaceState.matches("gettingTemplates")}
26-
loadingTemplateSchema={createWorkspaceState.matches("gettingTemplateSchema")}
27-
creatingWorkspace={createWorkspaceState.matches("creatingWorkspace")}
28-
templates={createWorkspaceState.context.templates}
29-
selectedTemplate={createWorkspaceState.context.selectedTemplate}
30-
templateSchema={createWorkspaceState.context.templateSchema}
31-
onCancel={()=>{
32-
navigate(preSelectedTemplateName ?"/templates" :"/workspaces")
33-
}}
34-
onSubmit={(request)=>{
35-
send({
36-
type:"CREATE_WORKSPACE",
37-
request,
38-
})
39-
}}
40-
onSelectTemplate={(template:Template)=>{
41-
send({
42-
type:"SELECT_TEMPLATE",
43-
template,
44-
})
45-
}}
46-
/>
26+
<>
27+
<Helmet>
28+
<title>{pageTitle("Create Workspace")}</title>
29+
</Helmet>
30+
<CreateWorkspacePageView
31+
loadingTemplates={createWorkspaceState.matches("gettingTemplates")}
32+
loadingTemplateSchema={createWorkspaceState.matches("gettingTemplateSchema")}
33+
creatingWorkspace={createWorkspaceState.matches("creatingWorkspace")}
34+
templates={createWorkspaceState.context.templates}
35+
selectedTemplate={createWorkspaceState.context.selectedTemplate}
36+
templateSchema={createWorkspaceState.context.templateSchema}
37+
onCancel={()=>{
38+
navigate(preSelectedTemplateName ?"/templates" :"/workspaces")
39+
}}
40+
onSubmit={(request)=>{
41+
send({
42+
type:"CREATE_WORKSPACE",
43+
request,
44+
})
45+
}}
46+
onSelectTemplate={(template:Template)=>{
47+
send({
48+
type:"SELECT_TEMPLATE",
49+
template,
50+
})
51+
}}
52+
/>
53+
</>
4754
)
4855
}
4956

‎site/src/pages/LoginPage/LoginPage.tsx‎

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,12 @@
11
import{makeStyles}from"@material-ui/core/styles"
22
import{useActor}from"@xstate/react"
33
importReact,{useContext}from"react"
4+
import{Helmet}from"react-helmet"
45
import{Navigate,useLocation}from"react-router-dom"
56
import{isApiError}from"../../api/errors"
67
import{Footer}from"../../components/Footer/Footer"
78
import{SignInForm}from"../../components/SignInForm/SignInForm"
9+
import{pageTitle}from"../../util/page"
810
import{retrieveRedirect}from"../../util/redirect"
911
import{XServiceContext}from"../../xServices/StateContext"
1012

@@ -50,6 +52,9 @@ export const LoginPage: React.FC = () => {
5052
}else{
5153
return(
5254
<divclassName={styles.root}>
55+
<Helmet>
56+
<title>{pageTitle("Login")}</title>
57+
</Helmet>
5358
<divclassName={styles.layout}>
5459
<divclassName={styles.container}>
5560
<SignInForm

‎site/src/pages/TemplatePage/TemplatePage.tsx‎

Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,10 @@
11
import{useMachine}from"@xstate/react"
22
import{FC}from"react"
3+
import{Helmet}from"react-helmet"
34
import{useParams}from"react-router-dom"
45
import{Loader}from"../../components/Loader/Loader"
56
import{useOrganizationId}from"../../hooks/useOrganizationId"
7+
import{pageTitle}from"../../util/page"
68
import{templateMachine}from"../../xServices/template/templateXService"
79
import{TemplatePageView}from"./TemplatePageView"
810

@@ -33,10 +35,15 @@ export const TemplatePage: FC = () => {
3335
}
3436

3537
return(
36-
<TemplatePageView
37-
template={template}
38-
activeTemplateVersion={activeTemplateVersion}
39-
templateResources={templateResources}
40-
/>
38+
<>
39+
<Helmet>
40+
<title>{pageTitle(`${template.name} · Template`)}</title>
41+
</Helmet>
42+
<TemplatePageView
43+
template={template}
44+
activeTemplateVersion={activeTemplateVersion}
45+
templateResources={templateResources}
46+
/>
47+
</>
4148
)
4249
}

‎site/src/pages/TemplatesPage/TemplatesPage.tsx‎

Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
import{useActor,useMachine}from"@xstate/react"
22
importReact,{useContext}from"react"
3+
import{Helmet}from"react-helmet"
4+
import{pageTitle}from"../../util/page"
35
import{XServiceContext}from"../../xServices/StateContext"
46
import{templatesMachine}from"../../xServices/templates/templatesXService"
57
import{TemplatesPageView}from"./TemplatesPageView"
@@ -10,11 +12,16 @@ const TemplatesPage: React.FC = () => {
1012
const[templatesState]=useMachine(templatesMachine)
1113

1214
return(
13-
<TemplatesPageView
14-
templates={templatesState.context.templates}
15-
canCreateTemplate={authState.context.permissions?.createTemplates}
16-
loading={templatesState.hasTag("loading")}
17-
/>
15+
<>
16+
<Helmet>
17+
<title>{pageTitle("Templates")}</title>
18+
</Helmet>
19+
<TemplatesPageView
20+
templates={templatesState.context.templates}
21+
canCreateTemplate={authState.context.permissions?.createTemplates}
22+
loading={templatesState.hasTag("loading")}
23+
/>
24+
</>
1825
)
1926
}
2027

‎site/src/pages/TerminalPage/TerminalPage.tsx‎

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,15 @@
11
import{makeStyles}from"@material-ui/core/styles"
22
import{useMachine}from"@xstate/react"
33
import{FC,useEffect,useRef,useState}from"react"
4+
import{Helmet}from"react-helmet"
45
import{useLocation,useNavigate,useParams}from"react-router-dom"
56
import{v4asuuidv4}from"uuid"
67
import*asXTermfrom"xterm"
78
import{FitAddon}from"xterm-addon-fit"
89
import{WebLinksAddon}from"xterm-addon-web-links"
910
import"xterm/css/xterm.css"
1011
import{MONOSPACE_FONT_FAMILY}from"../../theme/constants"
12+
import{pageTitle}from"../../util/page"
1113
import{terminalMachine}from"../../xServices/terminal/terminalXService"
1214

1315
exportconstLanguage={
@@ -179,6 +181,15 @@ const TerminalPage: FC<{
179181

180182
return(
181183
<>
184+
<Helmet>
185+
<title>
186+
{terminalState.context.workspace
187+
?pageTitle(
188+
`Terminal ·${terminalState.context.workspace.owner_name}/${terminalState.context.workspace.name}`,
189+
)
190+
:""}
191+
</title>
192+
</Helmet>
182193
{/* This overlay makes it more obvious that the terminal is disconnected. */}
183194
{/* It's nice for situations where Coder restarts, and they are temporarily disconnected. */}
184195
<divclassName={`${styles.overlay}${isDisconnected ?"" :"connected"}`}>

‎site/src/pages/UsersPage/CreateUserPage/CreateUserPage.tsx‎

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,11 @@
11
import{useActor,useSelector}from"@xstate/react"
22
importReact,{useContext}from"react"
3+
import{Helmet}from"react-helmet"
34
import{useNavigate}from"react-router"
45
import*asTypesGenfrom"../../../api/typesGenerated"
56
import{CreateUserForm}from"../../../components/CreateUserForm/CreateUserForm"
67
import{Margins}from"../../../components/Margins/Margins"
8+
import{pageTitle}from"../../../util/page"
79
import{selectOrgId}from"../../../xServices/auth/authSelectors"
810
import{XServiceContext}from"../../../xServices/StateContext"
911

@@ -23,6 +25,9 @@ export const CreateUserPage: React.FC = () => {
2325

2426
return(
2527
<Margins>
28+
<Helmet>
29+
<title>{pageTitle("Create User")}</title>
30+
</Helmet>
2631
<CreateUserForm
2732
formErrors={createUserFormErrors}
2833
onSubmit={(user:TypesGen.CreateUserRequest)=>usersSend({type:"CREATE", user})}

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp