+import {
+ fetchThemeList,
+ myAuthRequired,
+ setIsoData,
+ showLocal,
+} from "@utils/app";
+import { capitalizeFirstLetter } from "@utils/helpers";
+import { RouteDataResponse } from "@utils/types";
import classNames from "classnames";
import { Component, linkEvent } from "inferno";
import {
GetSiteResponse,
PersonView,
} from "lemmy-js-client";
-import { i18n } from "../../i18next";
import { InitialFetchRequest } from "../../interfaces";
-import { FirstLoadService } from "../../services/FirstLoadService";
+import { removeFromEmojiDataModel, updateEmojiDataModel } from "../../markdown";
+import { FirstLoadService, I18NextService } from "../../services";
import { HttpService, RequestState } from "../../services/HttpService";
-import {
- RouteDataResponse,
- capitalizeFirstLetter,
- fetchThemeList,
- myAuthRequired,
- removeFromEmojiDataModel,
- setIsoData,
- showLocal,
- toast,
- updateEmojiDataModel,
-} from "../../utils";
+import { toast } from "../../toast";
import { HtmlTags } from "../common/html-tags";
import { Spinner } from "../common/icon";
import Tabs from "../common/tabs";
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,
}
get documentTitle(): string {
- return `${i18n.t("admin_settings")} - ${
+ return `${I18NextService.i18n.t("admin_settings")} - ${
this.state.siteRes.site_view.site.name
}`;
}
tabs={[
{
key: "site",
- label: i18n.t("site"),
+ label: I18NextService.i18n.t("site"),
getNode: isSelected => (
<div
className={classNames("tab-pane show", {
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
</div>
<div className="col-12 col-md-6">
{this.admins()}
+ <hr />
{this.bannedUsers()}
</div>
</div>
},
{
key: "taglines",
- label: i18n.t("taglines"),
+ label: I18NextService.i18n.t("taglines"),
getNode: isSelected => (
<div
className={classNames("tab-pane", {
},
{
key: "emojis",
- label: i18n.t("emojis"),
+ label: I18NextService.i18n.t("emojis"),
getNode: isSelected => (
<div
className={classNames("tab-pane", {
onCreate={this.handleCreateEmoji}
onDelete={this.handleDeleteEmoji}
onEdit={this.handleEditEmoji}
- loading={this.state.emojiLoading}
/>
</div>
</div>
admins() {
return (
<>
- <h5>{capitalizeFirstLetter(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">
{this.state.leaveAdminTeamRes.state == "loading" ? (
<Spinner />
) : (
- i18n.t("leave_admin_team")
+ I18NextService.i18n.t("leave_admin_team")
)}
</button>
);
const bans = this.state.bannedRes.data.banned;
return (
<>
- <h5>{i18n.t("banned_users")}</h5>
+ <h2 className="h5">{I18NextService.i18n.t("banned_users")}</h2>
<ul className="list-unstyled">
{bans.map(banned => (
<li key={banned.person.id} className="list-inline-item">
s.siteRes.taglines = editRes.data.taglines;
return s;
});
- toast(i18n.t("site_saved"));
+ toast(I18NextService.i18n.t("site_saved"));
}
this.setState({ loading: false });
});
if (this.state.leaveAdminTeamRes.state === "success") {
- toast(i18n.t("left_admin_team"));
+ toast(I18NextService.i18n.t("left_admin_team"));
this.context.router.history.replace("/");
}
}
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 });
}
}