Skip to content

Commit cec8c9b

Browse files
AlexTugarevselfcontained
authored andcommitted
[Orgs] Make slug changeable on Settings page
1 parent 7be2b9f commit cec8c9b

File tree

1 file changed

+32
-3
lines changed

1 file changed

+32
-3
lines changed

components/dashboard/src/teams/TeamSettings.tsx

Lines changed: 32 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,7 @@ export default function TeamSettings() {
5858
const [modal, setModal] = useState(false);
5959
const [teamNameToDelete, setTeamNameToDelete] = useState("");
6060
const [teamName, setTeamName] = useState(org?.name || "");
61+
const [slug, setSlug] = useState(org?.slug || "");
6162
const [errorMessage, setErrorMessage] = useState<string | undefined>(undefined);
6263
const [updated, setUpdated] = useState(false);
6364

@@ -68,14 +69,14 @@ export default function TeamSettings() {
6869
return;
6970
}
7071
try {
71-
await getGitpodService().server.updateTeam(org.id, { name: teamName });
72+
await getGitpodService().server.updateTeam(org.id, { name: teamName, slug });
7273
invalidateOrgs();
7374
setUpdated(true);
7475
setTimeout(() => setUpdated(false), 3000);
7576
} catch (error) {
7677
setErrorMessage(`Failed to update organization information: ${error.message}`);
7778
}
78-
}, [org, errorMessage, teamName, invalidateOrgs]);
79+
}, [org, errorMessage, slug, teamName, invalidateOrgs]);
7980

8081
const onNameChange = useCallback(
8182
async (event: React.ChangeEvent<HTMLInputElement>) => {
@@ -97,6 +98,26 @@ export default function TeamSettings() {
9798
[org],
9899
);
99100

101+
const onSlugChange = useCallback(
102+
async (event: React.ChangeEvent<HTMLInputElement>) => {
103+
if (!org) {
104+
return;
105+
}
106+
const newSlug = event.target.value || "";
107+
setSlug(newSlug);
108+
if (newSlug.trim().length === 0) {
109+
setErrorMessage("Organization slug can not be blank.");
110+
return;
111+
} else if (newSlug.trim().length > 100) {
112+
setErrorMessage("Organization slug must not be longer than 100 characters.");
113+
return;
114+
} else {
115+
setErrorMessage(undefined);
116+
}
117+
},
118+
[org],
119+
);
120+
100121
const deleteTeam = useCallback(async () => {
101122
if (!org || !user) {
102123
return;
@@ -132,10 +153,18 @@ export default function TeamSettings() {
132153
</div>
133154
</div>
134155
</div>
156+
<div className="flex flex-col lg:flex-row">
157+
<div>
158+
<div className="mt-4 mb-3">
159+
<h4>Slug</h4>
160+
<input type="text" value={slug} onChange={onSlugChange} />
161+
</div>
162+
</div>
163+
</div>
135164
<div className="flex flex-row">
136165
<button
137166
className="primary"
138-
disabled={org?.name === teamName || !!errorMessage}
167+
disabled={(org?.name === teamName && org?.slug === slug) || !!errorMessage}
139168
onClick={updateTeamInformation}
140169
>
141170
Update Organization Name

0 commit comments

Comments
 (0)