X-Git-Url: http://these/git/?a=blobdiff_plain;f=src%2Fshared%2Fcomponents%2Fperson%2Fprofile.tsx;h=cc334db5ee5449381c02fad9fa08981e879ae754;hb=9869b911cf480ee88c7b1e7d2f689cc2e1c65157;hp=4d9f8f77bf1946ae34f1357c6ece409c2b5846c0;hpb=0854af3794f7fb2b7712c9b30ab1147cc18583a3;p=lemmy-ui.git diff --git a/src/shared/components/person/profile.tsx b/src/shared/components/person/profile.tsx index 4d9f8f7..cc334db 100644 --- a/src/shared/components/person/profile.tsx +++ b/src/shared/components/person/profile.tsx @@ -1,4 +1,30 @@ +import { + editComment, + editPost, + editWith, + enableDownvotes, + enableNsfw, + getCommentParentId, + myAuth, + myAuthRequired, + setIsoData, + updatePersonBlock, +} from "@utils/app"; +import { restoreScrollPosition, saveScrollPosition } from "@utils/browser"; +import { + capitalizeFirstLetter, + futureDaysToUnixTime, + getPageFromString, + getQueryParams, + getQueryString, + numToSI, +} from "@utils/helpers"; +import { canMod, isAdmin, isBanned } from "@utils/roles"; +import type { QueryParams } from "@utils/types"; +import { RouteDataResponse } from "@utils/types"; import classNames from "classnames"; +import format from "date-fns/format"; +import parseISO from "date-fns/parseISO"; import { NoOptionI18nKeys } from "i18next"; import { Component, linkEvent } from "inferno"; import { Link } from "inferno-router"; @@ -46,50 +72,27 @@ import { SortType, TransferCommunity, } from "lemmy-js-client"; -import moment from "moment"; -import { i18n } from "../../i18next"; +import { fetchLimit, relTags } from "../../config"; import { InitialFetchRequest, PersonDetailsView } from "../../interfaces"; -import { UserService } from "../../services"; -import { FirstLoadService } from "../../services/FirstLoadService"; +import { mdToHtml } from "../../markdown"; +import { FirstLoadService, I18NextService, UserService } from "../../services"; import { HttpService, RequestState } from "../../services/HttpService"; -import { - QueryParams, - capitalizeFirstLetter, - editComment, - editPost, - editWith, - enableDownvotes, - enableNsfw, - fetchLimit, - futureDaysToUnixTime, - getCommentParentId, - getPageFromString, - getQueryParams, - getQueryString, - mdToHtml, - myAuth, - myAuthRequired, - numToSI, - relTags, - restoreScrollPosition, - saveScrollPosition, - setIsoData, - setupTippy, - toast, - updatePersonBlock, -} from "../../utils"; -import { canMod } from "../../utils/roles/can-mod"; -import { isAdmin } from "../../utils/roles/is-admin"; -import { isBanned } from "../../utils/roles/is-banned"; +import { setupTippy } from "../../tippy"; +import { toast } from "../../toast"; import { BannerIconHeader } from "../common/banner-icon-header"; import { HtmlTags } from "../common/html-tags"; import { Icon, Spinner } from "../common/icon"; import { MomentTime } from "../common/moment-time"; import { SortSelect } from "../common/sort-select"; +import { UserBadges } from "../common/user-badges"; import { CommunityLink } from "../community/community-link"; import { PersonDetails } from "./person-details"; import { PersonListing } from "./person-listing"; +type ProfileData = RouteDataResponse<{ + personResponse: GetPersonDetailsResponse; +}>; + interface ProfileState { personRes: RequestState; personBlocked: boolean; @@ -134,7 +137,7 @@ const getCommunitiesListing = ( communityViews.length > 0 && (
-
{i18n.t(translationKey)}
+
{I18NextService.i18n.t(translationKey)}
    {communityViews.map(({ community }) => (
  • @@ -156,7 +159,7 @@ export class Profile extends Component< RouteComponentProps<{ username: string }>, ProfileState > { - private isoData = setIsoData(this.context); + private isoData = setIsoData(this.context); state: ProfileState = { personRes: { state: "empty" }, personBlocked: false, @@ -203,12 +206,13 @@ export class Profile extends Component< this.handleSavePost = this.handleSavePost.bind(this); this.handlePurgePost = this.handlePurgePost.bind(this); this.handleFeaturePost = this.handleFeaturePost.bind(this); + this.handleModBanSubmit = this.handleModBanSubmit.bind(this); // Only fetch the data if coming from another route if (FirstLoadService.isFirstLoad) { this.state = { ...this.state, - personRes: this.isoData.routeData[0], + personRes: this.isoData.routeData.personResponse, isIsomorphic: true, }; } @@ -267,14 +271,12 @@ export class Profile extends Component< } } - static fetchInitialData({ + static async fetchInitialData({ client, path, query: { page, sort, view: urlView }, auth, - }: InitialFetchRequest>): Promise< - RequestState - >[] { + }: InitialFetchRequest>): Promise { const pathSplit = path.split("/"); const username = pathSplit[2]; @@ -289,7 +291,9 @@ export class Profile extends Component< auth, }; - return [client.getPersonDetails(form)]; + return { + personResponse: await client.getPersonDetails(form), + }; } get documentTitle(): string { @@ -384,7 +388,11 @@ export class Profile extends Component< } render() { - return
    {this.renderPersonRes()}
    ; + return ( +
    + {this.renderPersonRes()} +
    + ); } get viewRadios() { @@ -410,11 +418,12 @@ export class Profile extends Component< > - {i18n.t(view.toLowerCase() as NoOptionI18nKeys)} + {I18NextService.i18n.t(view.toLowerCase() as NoOptionI18nKeys)} ); } @@ -427,7 +436,7 @@ export class Profile extends Component< return (
    - {this.viewRadios} + {this.viewRadios}
  • - {isBanned(pv.person) && ( -
  • - {i18n.t("banned")} -
  • - )} - {pv.person.deleted && ( -
  • - {i18n.t("deleted")} -
  • - )} - {pv.person.admin && ( -
  • - {i18n.t("admin")} -
  • - )} - {pv.person.bot_account && ( -
  • - {i18n.t("bot_account").toLowerCase()} -
  • - )} +
  • + +
{this.banDialog(pv)} @@ -502,45 +500,45 @@ export class Profile extends Component< {!this.amCurrentUser && UserService.Instance.myUserInfo && ( <> - {i18n.t("send_secure_message")} + {I18NextService.i18n.t("send_secure_message")} - {i18n.t("send_message")} + {I18NextService.i18n.t("send_message")} {personBlocked ? ( ) : ( )} @@ -552,22 +550,22 @@ export class Profile extends Component< (!isBanned(pv.person) ? ( ) : ( ))}
@@ -581,14 +579,14 @@ export class Profile extends Component< )}
- {i18n.t("joined")}{" "} + {I18NextService.i18n.t("joined")}{" "}
- - {i18n.t("cake_day_title")}{" "} - {moment - .utc(pv.person.published) - .local() - .format("MMM DD, YYYY")} + + {I18NextService.i18n.t("cake_day_title")}{" "} + {format(parseISO(pv.person.published), "PPP")}
{!UserService.Instance.myUserInfo && (
- {i18n.t("profile_not_logged_in_alert")} + {I18NextService.i18n.t("profile_not_logged_in_alert")}
)}
@@ -631,30 +626,30 @@ export class Profile extends Component< return ( showBanDialog && (
-
+
-