instancesRes: RequestState<GetFederatedInstancesResponse>;
bannedRes: RequestState<BannedPersonsResponse>;
leaveAdminTeamRes: RequestState<GetSiteResponse>;
- emojiLoading: boolean;
loading: boolean;
themeList: string[];
isIsomorphic: boolean;
bannedRes: { state: "empty" },
instancesRes: { state: "empty" },
leaveAdminTeamRes: { state: "empty" },
- emojiLoading: false,
loading: false,
themeList: [],
isIsomorphic: false,
role="tabpanel"
id="site-tab-pane"
>
+ <h1 className="h4 mb-4">
+ {I18NextService.i18n.t("site_config")}
+ </h1>
<div className="row">
<div className="col-12 col-md-6">
<SiteForm
loading={this.state.loading}
/>
</div>
- <div className="col-12 col-md-6">
- {this.admins()}
- {this.bannedUsers()}
- </div>
+ <div className="col-12 col-md-6">{this.admins()}</div>
</div>
</div>
),
},
+ {
+ key: "banned_users",
+ label: I18NextService.i18n.t("banned_users"),
+ getNode: isSelected => (
+ <div
+ className={classNames("tab-pane", {
+ active: isSelected,
+ })}
+ role="tabpanel"
+ id="banned_users-tab-pane"
+ >
+ {this.bannedUsers()}
+ </div>
+ ),
+ },
{
key: "rate_limiting",
label: "Rate Limiting",
onCreate={this.handleCreateEmoji}
onDelete={this.handleDeleteEmoji}
onEdit={this.handleEditEmoji}
- loading={this.state.emojiLoading}
/>
</div>
</div>
admins() {
return (
<>
- <h5>{capitalizeFirstLetter(I18NextService.i18n.t("admins"))}</h5>
+ <h2 className="h5">
+ {capitalizeFirstLetter(I18NextService.i18n.t("admins"))}
+ </h2>
<ul className="list-unstyled">
{this.state.siteRes.admins.map(admin => (
<li key={admin.person.id} className="list-inline-item">
onClick={linkEvent(this, this.handleLeaveAdminTeam)}
className="btn btn-danger mb-2"
>
- {this.state.leaveAdminTeamRes.state == "loading" ? (
+ {this.state.leaveAdminTeamRes.state === "loading" ? (
<Spinner />
) : (
I18NextService.i18n.t("leave_admin_team")
const bans = this.state.bannedRes.data.banned;
return (
<>
- <h5>{I18NextService.i18n.t("banned_users")}</h5>
+ <h1 className="h4 mb-4">{I18NextService.i18n.t("banned_users")}</h1>
<ul className="list-unstyled">
{bans.map(banned => (
<li key={banned.person.id} className="list-inline-item">
}
async handleEditEmoji(form: EditCustomEmoji) {
- this.setState({ emojiLoading: true });
-
const res = await HttpService.client.editCustomEmoji(form);
if (res.state === "success") {
updateEmojiDataModel(res.data.custom_emoji);
}
-
- this.setState({ emojiLoading: false });
}
async handleDeleteEmoji(form: DeleteCustomEmoji) {
- this.setState({ emojiLoading: true });
-
const res = await HttpService.client.deleteCustomEmoji(form);
if (res.state === "success") {
removeFromEmojiDataModel(res.data.id);
}
-
- this.setState({ emojiLoading: false });
}
async handleCreateEmoji(form: CreateCustomEmoji) {
- this.setState({ emojiLoading: true });
-
const res = await HttpService.client.createCustomEmoji(form);
if (res.state === "success") {
updateEmojiDataModel(res.data.custom_emoji);
}
-
- this.setState({ emojiLoading: false });
}
}