X-Git-Url: http://these/git/?a=blobdiff_plain;f=src%2Fshared%2Fcomponents%2Fhome%2Fadmin-settings.tsx;h=4924508fbe9f23105bd18894da539700d5fd308b;hb=da4fd7e39e288dd9885466452498a0366aec5b9d;hp=302e96bdf85e4a3798ee9af1e5c28e8c2305450d;hpb=65079cf61eea6ba4d94a465fdf280f83b0f4766e;p=lemmy-ui.git diff --git a/src/shared/components/home/admin-settings.tsx b/src/shared/components/home/admin-settings.tsx index 302e96b..4924508 100644 --- a/src/shared/components/home/admin-settings.tsx +++ b/src/shared/components/home/admin-settings.tsx @@ -1,3 +1,12 @@ +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 { BannedPersonsResponse, @@ -9,20 +18,11 @@ 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 { - 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"; @@ -32,6 +32,11 @@ import RateLimitForm from "./rate-limit-form"; import { SiteForm } from "./site-form"; import { TaglineForm } from "./tagline-form"; +type AdminSettingsData = RouteDataResponse<{ + bannedRes: BannedPersonsResponse; + instancesRes: GetFederatedInstancesResponse; +}>; + interface AdminSettingsState { siteRes: GetSiteResponse; banned: PersonView[]; @@ -39,14 +44,13 @@ interface AdminSettingsState { instancesRes: RequestState; bannedRes: RequestState; leaveAdminTeamRes: RequestState; - emojiLoading: boolean; loading: boolean; themeList: string[]; isIsomorphic: boolean; } export class AdminSettings extends Component { - private isoData = setIsoData(this.context); + private isoData = setIsoData(this.context); state: AdminSettingsState = { siteRes: this.isoData.site_res, banned: [], @@ -54,7 +58,6 @@ export class AdminSettings extends Component { bannedRes: { state: "empty" }, instancesRes: { state: "empty" }, leaveAdminTeamRes: { state: "empty" }, - emojiLoading: false, loading: false, themeList: [], isIsomorphic: false, @@ -70,7 +73,8 @@ export class AdminSettings extends Component { // Only fetch the data if coming from another route if (FirstLoadService.isFirstLoad) { - const [bannedRes, instancesRes] = this.isoData.routeData; + const { bannedRes, instancesRes } = this.isoData.routeData; + this.state = { ...this.state, bannedRes, @@ -80,47 +84,18 @@ export class AdminSettings extends Component { } } - async fetchData() { - this.setState({ - bannedRes: { state: "loading" }, - instancesRes: { state: "loading" }, - themeList: [], - loading: true, - }); - - const auth = myAuthRequired(); - - const [bannedRes, instancesRes, themeList] = await Promise.all([ - HttpService.client.getBannedPersons({ auth }), - HttpService.client.getFederatedInstances({ auth }), - fetchThemeList(), - ]); - - this.setState({ - bannedRes, - instancesRes, - themeList, - loading: false, - }); - } - - static fetchInitialData({ + static async fetchInitialData({ auth, client, - }: InitialFetchRequest): Promise[] { - const promises: Promise>[] = []; - - if (auth) { - promises.push(client.getBannedPersons({ auth })); - promises.push(client.getFederatedInstances({ auth })); - } else { - promises.push( - Promise.resolve({ state: "empty" }), - Promise.resolve({ state: "empty" }) - ); - } - - return promises; + }: InitialFetchRequest): Promise { + return { + bannedRes: await client.getBannedPersons({ + auth: auth as string, + }), + instancesRes: await client.getFederatedInstances({ + auth: auth as string, + }), + }; } async componentDidMount() { @@ -130,7 +105,7 @@ export class AdminSettings extends Component { } get documentTitle(): string { - return `${i18n.t("admin_settings")} - ${ + return `${I18NextService.i18n.t("admin_settings")} - ${ this.state.siteRes.site_view.site.name }`; } @@ -142,7 +117,7 @@ export class AdminSettings extends Component { : undefined; return ( -
+
{ tabs={[ { key: "site", - label: i18n.t("site"), - getNode: () => ( -
-
- -
-
- {this.admins()} - {this.bannedUsers()} + label: I18NextService.i18n.t("site"), + getNode: isSelected => ( +
+

+ {I18NextService.i18n.t("site_config")} +

+
+
+ +
+
{this.admins()}
), }, { - key: "rate_limiting", - label: "Rate Limiting", - getNode: () => ( - + key: "banned_users", + label: I18NextService.i18n.t("banned_users"), + getNode: isSelected => ( +
+ {this.bannedUsers()} +
), }, { - key: "taglines", - label: i18n.t("taglines"), - getNode: () => ( -
- ( +
+
), }, + { + key: "taglines", + label: I18NextService.i18n.t("taglines"), + getNode: isSelected => ( +
+
+ +
+
+ ), + }, { key: "emojis", - label: i18n.t("emojis"), - getNode: () => ( -
- + label: I18NextService.i18n.t("emojis"), + getNode: isSelected => ( +
+
+ +
), }, @@ -218,10 +239,34 @@ export class AdminSettings extends Component { ); } + async fetchData() { + this.setState({ + bannedRes: { state: "loading" }, + instancesRes: { state: "loading" }, + themeList: [], + }); + + const auth = myAuthRequired(); + + const [bannedRes, instancesRes, themeList] = await Promise.all([ + HttpService.client.getBannedPersons({ auth }), + HttpService.client.getFederatedInstances({ auth }), + fetchThemeList(), + ]); + + this.setState({ + bannedRes, + instancesRes, + themeList, + }); + } + admins() { return ( <> -
{capitalizeFirstLetter(i18n.t("admins"))}
+

+ {capitalizeFirstLetter(I18NextService.i18n.t("admins"))} +

    {this.state.siteRes.admins.map(admin => (
  • @@ -240,10 +285,10 @@ export class AdminSettings extends Component { onClick={linkEvent(this, this.handleLeaveAdminTeam)} className="btn btn-danger mb-2" > - {this.state.leaveAdminTeamRes.state == "loading" ? ( + {this.state.leaveAdminTeamRes.state === "loading" ? ( ) : ( - i18n.t("leave_admin_team") + I18NextService.i18n.t("leave_admin_team") )} ); @@ -261,7 +306,7 @@ export class AdminSettings extends Component { const bans = this.state.bannedRes.data.banned; return ( <> -
    {i18n.t("banned_users")}
    +

    {I18NextService.i18n.t("banned_users")}

      {bans.map(banned => (
    • @@ -287,7 +332,7 @@ export class AdminSettings extends Component { s.siteRes.taglines = editRes.data.taglines; return s; }); - toast(i18n.t("site_saved")); + toast(I18NextService.i18n.t("site_saved")); } this.setState({ loading: false }); @@ -308,41 +353,29 @@ export class AdminSettings extends Component { }); 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 }); } }