chore: Use constant objects where appropriate

This commit is contained in:
SleeplessOne1917 2023-10-04 18:46:50 -04:00
parent 1a2205c867
commit 61df23955c
24 changed files with 236 additions and 155 deletions

View file

@ -10,6 +10,7 @@ import { I18NextService } from "../../services";
import { Icon, Spinner } from "../common/icon"; import { Icon, Spinner } from "../common/icon";
import { PersonListing } from "../person/person-listing"; import { PersonListing } from "../person/person-listing";
import { CommentNode } from "./comment-node"; import { CommentNode } from "./comment-node";
import { EMPTY_REQUEST } from "shared/services/HttpService";
interface CommentReportProps { interface CommentReportProps {
report: CommentReportView; report: CommentReportView;
@ -97,8 +98,8 @@ export class CommentReport extends Component<
onPersonMentionRead={() => {}} onPersonMentionRead={() => {}}
onBanPersonFromCommunity={() => {}} onBanPersonFromCommunity={() => {}}
onBanPerson={() => {}} onBanPerson={() => {}}
onCreateComment={() => Promise.resolve({ state: "empty" })} onCreateComment={() => Promise.resolve(EMPTY_REQUEST)}
onEditComment={() => Promise.resolve({ state: "empty" })} onEditComment={() => Promise.resolve(EMPTY_REQUEST)}
/> />
<div> <div>
{I18NextService.i18n.t("reporter")}:{" "} {I18NextService.i18n.t("reporter")}:{" "}

View file

@ -18,7 +18,12 @@ import {
} from "lemmy-js-client"; } from "lemmy-js-client";
import { InitialFetchRequest } from "../../interfaces"; import { InitialFetchRequest } from "../../interfaces";
import { FirstLoadService, I18NextService } from "../../services"; import { FirstLoadService, I18NextService } from "../../services";
import { HttpService, RequestState } from "../../services/HttpService"; import {
EMPTY_REQUEST,
HttpService,
LOADING_REQUEST,
RequestState,
} from "../../services/HttpService";
import { HtmlTags } from "../common/html-tags"; import { HtmlTags } from "../common/html-tags";
import { Spinner } from "../common/icon"; import { Spinner } from "../common/icon";
import { ListingTypeSelect } from "../common/listing-type-select"; import { ListingTypeSelect } from "../common/listing-type-select";
@ -64,7 +69,7 @@ function getCommunitiesQueryParams() {
export class Communities extends Component<any, CommunitiesState> { export class Communities extends Component<any, CommunitiesState> {
private isoData = setIsoData<CommunitiesData>(this.context); private isoData = setIsoData<CommunitiesData>(this.context);
state: CommunitiesState = { state: CommunitiesState = {
listCommunitiesResponse: { state: "empty" }, listCommunitiesResponse: EMPTY_REQUEST,
siteRes: this.isoData.site_res, siteRes: this.isoData.site_res,
searchText: "", searchText: "",
isIsomorphic: false, isIsomorphic: false,
@ -333,7 +338,7 @@ export class Communities extends Component<any, CommunitiesState> {
} }
async refetch() { async refetch() {
this.setState({ listCommunitiesResponse: { state: "loading" } }); this.setState({ listCommunitiesResponse: LOADING_REQUEST });
const { listingType, sort, page } = getCommunitiesQueryParams(); const { listingType, sort, page } = getCommunitiesQueryParams();

View file

@ -83,7 +83,12 @@ import {
InitialFetchRequest, InitialFetchRequest,
} from "../../interfaces"; } from "../../interfaces";
import { FirstLoadService, I18NextService, UserService } from "../../services"; import { FirstLoadService, I18NextService, UserService } from "../../services";
import { HttpService, RequestState } from "../../services/HttpService"; import {
EMPTY_REQUEST,
HttpService,
LOADING_REQUEST,
RequestState,
} from "../../services/HttpService";
import { setupTippy } from "../../tippy"; import { setupTippy } from "../../tippy";
import { toast } from "../../toast"; import { toast } from "../../toast";
import { CommentNodes } from "../comment/comment-nodes"; import { CommentNodes } from "../comment/comment-nodes";
@ -146,9 +151,9 @@ export class Community extends Component<
> { > {
private isoData = setIsoData<CommunityData>(this.context); private isoData = setIsoData<CommunityData>(this.context);
state: State = { state: State = {
communityRes: { state: "empty" }, communityRes: EMPTY_REQUEST,
postsRes: { state: "empty" }, postsRes: EMPTY_REQUEST,
commentsRes: { state: "empty" }, commentsRes: EMPTY_REQUEST,
siteRes: this.isoData.site_res, siteRes: this.isoData.site_res,
showSidebarMobile: false, showSidebarMobile: false,
finished: new Map(), finished: new Map(),
@ -212,7 +217,7 @@ export class Community extends Component<
} }
async fetchCommunity() { async fetchCommunity() {
this.setState({ communityRes: { state: "loading" } }); this.setState({ communityRes: LOADING_REQUEST });
this.setState({ this.setState({
communityRes: await HttpService.client.getCommunity({ communityRes: await HttpService.client.getCommunity({
name: this.props.match.params.name, name: this.props.match.params.name,
@ -248,10 +253,8 @@ export class Community extends Component<
const page = getPageFromString(urlPage); const page = getPageFromString(urlPage);
let postsResponse: RequestState<GetPostsResponse> = { state: "empty" }; let postsResponse: RequestState<GetPostsResponse> = EMPTY_REQUEST;
let commentsResponse: RequestState<GetCommentsResponse> = { let commentsResponse: RequestState<GetCommentsResponse> = EMPTY_REQUEST;
state: "empty",
};
if (dataType === DataType.Post) { if (dataType === DataType.Post) {
const getPostsForm: GetPosts = { const getPostsForm: GetPosts = {
@ -585,7 +588,7 @@ export class Community extends Component<
const { name } = this.props.match.params; const { name } = this.props.match.params;
if (dataType === DataType.Post) { if (dataType === DataType.Post) {
this.setState({ postsRes: { state: "loading" } }); this.setState({ postsRes: LOADING_REQUEST });
this.setState({ this.setState({
postsRes: await HttpService.client.getPosts({ postsRes: await HttpService.client.getPosts({
page, page,
@ -597,7 +600,7 @@ export class Community extends Component<
}), }),
}); });
} else { } else {
this.setState({ commentsRes: { state: "loading" } }); this.setState({ commentsRes: LOADING_REQUEST });
this.setState({ this.setState({
commentsRes: await HttpService.client.getComments({ commentsRes: await HttpService.client.getComments({
page, page,

View file

@ -16,7 +16,12 @@ import {
import { InitialFetchRequest } from "../../interfaces"; import { InitialFetchRequest } from "../../interfaces";
import { removeFromEmojiDataModel, updateEmojiDataModel } from "../../markdown"; import { removeFromEmojiDataModel, updateEmojiDataModel } from "../../markdown";
import { FirstLoadService, I18NextService } from "../../services"; import { FirstLoadService, I18NextService } from "../../services";
import { HttpService, RequestState } from "../../services/HttpService"; import {
EMPTY_REQUEST,
HttpService,
LOADING_REQUEST,
RequestState,
} from "../../services/HttpService";
import { toast } from "../../toast"; import { toast } from "../../toast";
import { HtmlTags } from "../common/html-tags"; import { HtmlTags } from "../common/html-tags";
import { Spinner } from "../common/icon"; import { Spinner } from "../common/icon";
@ -50,9 +55,9 @@ export class AdminSettings extends Component<any, AdminSettingsState> {
siteRes: this.isoData.site_res, siteRes: this.isoData.site_res,
banned: [], banned: [],
currentTab: "site", currentTab: "site",
bannedRes: { state: "empty" }, bannedRes: EMPTY_REQUEST,
instancesRes: { state: "empty" }, instancesRes: EMPTY_REQUEST,
leaveAdminTeamRes: { state: "empty" }, leaveAdminTeamRes: EMPTY_REQUEST,
loading: false, loading: false,
themeList: [], themeList: [],
isIsomorphic: false, isIsomorphic: false,
@ -231,8 +236,8 @@ export class AdminSettings extends Component<any, AdminSettingsState> {
async fetchData() { async fetchData() {
this.setState({ this.setState({
bannedRes: { state: "loading" }, bannedRes: LOADING_REQUEST,
instancesRes: { state: "loading" }, instancesRes: LOADING_REQUEST,
themeList: [], themeList: [],
}); });
@ -333,7 +338,7 @@ export class AdminSettings extends Component<any, AdminSettingsState> {
} }
async handleLeaveAdminTeam(i: AdminSettings) { async handleLeaveAdminTeam(i: AdminSettings) {
i.setState({ leaveAdminTeamRes: { state: "loading" } }); i.setState({ leaveAdminTeamRes: LOADING_REQUEST });
this.setState({ this.setState({
leaveAdminTeamRes: await HttpService.client.leaveAdmin(), leaveAdminTeamRes: await HttpService.client.leaveAdmin(),
}); });

View file

@ -85,7 +85,12 @@ import {
I18NextService, I18NextService,
UserService, UserService,
} from "../../services"; } from "../../services";
import { HttpService, RequestState } from "../../services/HttpService"; import {
EMPTY_REQUEST,
HttpService,
LOADING_REQUEST,
RequestState,
} from "../../services/HttpService";
import { setupTippy } from "../../tippy"; import { setupTippy } from "../../tippy";
import { toast } from "../../toast"; import { toast } from "../../toast";
import { CommentNodes } from "../comment/comment-nodes"; import { CommentNodes } from "../comment/comment-nodes";
@ -221,9 +226,9 @@ const LinkButton = ({
export class Home extends Component<any, HomeState> { export class Home extends Component<any, HomeState> {
private isoData = setIsoData<HomeData>(this.context); private isoData = setIsoData<HomeData>(this.context);
state: HomeState = { state: HomeState = {
postsRes: { state: "empty" }, postsRes: EMPTY_REQUEST,
commentsRes: { state: "empty" }, commentsRes: EMPTY_REQUEST,
trendingCommunitiesRes: { state: "empty" }, trendingCommunitiesRes: EMPTY_REQUEST,
scrolled: true, scrolled: true,
siteRes: this.isoData.site_res, siteRes: this.isoData.site_res,
showSubscribedMobile: false, showSubscribedMobile: false,
@ -321,10 +326,8 @@ export class Home extends Component<any, HomeState> {
const page = urlPage ? Number(urlPage) : 1; const page = urlPage ? Number(urlPage) : 1;
let postsRes: RequestState<GetPostsResponse> = { state: "empty" }; let postsRes: RequestState<GetPostsResponse> = EMPTY_REQUEST;
let commentsRes: RequestState<GetCommentsResponse> = { let commentsRes: RequestState<GetCommentsResponse> = EMPTY_REQUEST;
state: "empty",
};
if (dataType === DataType.Post) { if (dataType === DataType.Post) {
const getPostsForm: GetPosts = { const getPostsForm: GetPosts = {
@ -790,7 +793,7 @@ export class Home extends Component<any, HomeState> {
} }
async fetchTrendingCommunities() { async fetchTrendingCommunities() {
this.setState({ trendingCommunitiesRes: { state: "loading" } }); this.setState({ trendingCommunitiesRes: LOADING_REQUEST });
this.setState({ this.setState({
trendingCommunitiesRes: await HttpService.client.listCommunities({ trendingCommunitiesRes: await HttpService.client.listCommunities({
type_: "Local", type_: "Local",
@ -814,7 +817,7 @@ export class Home extends Component<any, HomeState> {
behavior: "instant", behavior: "instant",
}); });
} else { } else {
this.setState({ postsRes: { state: "loading" } }); this.setState({ postsRes: LOADING_REQUEST });
this.setState({ this.setState({
postsRes: await HttpService.client.getPosts({ postsRes: await HttpService.client.getPosts({
page, page,
@ -828,7 +831,7 @@ export class Home extends Component<any, HomeState> {
HomeCacheService.postsRes = this.state.postsRes; HomeCacheService.postsRes = this.state.postsRes;
} }
} else { } else {
this.setState({ commentsRes: { state: "loading" } }); this.setState({ commentsRes: LOADING_REQUEST });
this.setState({ this.setState({
commentsRes: await HttpService.client.getComments({ commentsRes: await HttpService.client.getComments({
page, page,

View file

@ -10,7 +10,12 @@ import classNames from "classnames";
import { relTags } from "../../config"; import { relTags } from "../../config";
import { InitialFetchRequest } from "../../interfaces"; import { InitialFetchRequest } from "../../interfaces";
import { FirstLoadService, I18NextService } from "../../services"; import { FirstLoadService, I18NextService } from "../../services";
import { HttpService, RequestState } from "../../services/HttpService"; import {
EMPTY_REQUEST,
HttpService,
LOADING_REQUEST,
RequestState,
} from "../../services/HttpService";
import { HtmlTags } from "../common/html-tags"; import { HtmlTags } from "../common/html-tags";
import { Spinner } from "../common/icon"; import { Spinner } from "../common/icon";
import Tabs from "../common/tabs"; import Tabs from "../common/tabs";
@ -28,7 +33,7 @@ interface InstancesState {
export class Instances extends Component<any, InstancesState> { export class Instances extends Component<any, InstancesState> {
private isoData = setIsoData<InstancesData>(this.context); private isoData = setIsoData<InstancesData>(this.context);
state: InstancesState = { state: InstancesState = {
instancesRes: { state: "empty" }, instancesRes: EMPTY_REQUEST,
siteRes: this.isoData.site_res, siteRes: this.isoData.site_res,
isIsomorphic: false, isIsomorphic: false,
}; };
@ -54,7 +59,7 @@ export class Instances extends Component<any, InstancesState> {
async fetchInstances() { async fetchInstances() {
this.setState({ this.setState({
instancesRes: { state: "loading" }, instancesRes: LOADING_REQUEST,
}); });
this.setState({ this.setState({

View file

@ -5,7 +5,12 @@ import { Component, linkEvent } from "inferno";
import { RouteComponentProps } from "inferno-router/dist/Route"; import { RouteComponentProps } from "inferno-router/dist/Route";
import { GetSiteResponse, LoginResponse } from "lemmy-js-client"; import { GetSiteResponse, LoginResponse } from "lemmy-js-client";
import { I18NextService, UserService } from "../../services"; import { I18NextService, UserService } from "../../services";
import { HttpService, RequestState } from "../../services/HttpService"; import {
EMPTY_REQUEST,
HttpService,
LOADING_REQUEST,
RequestState,
} from "../../services/HttpService";
import { toast } from "../../toast"; import { toast } from "../../toast";
import { HtmlTags } from "../common/html-tags"; import { HtmlTags } from "../common/html-tags";
import { Spinner } from "../common/icon"; import { Spinner } from "../common/icon";
@ -57,7 +62,7 @@ async function handleLoginSubmit(i: Login, event: any) {
const { password, username_or_email } = i.state.form; const { password, username_or_email } = i.state.form;
if (username_or_email && password) { if (username_or_email && password) {
i.setState({ loginRes: { state: "loading" } }); i.setState({ loginRes: LOADING_REQUEST });
const loginRes = await HttpService.client.login({ const loginRes = await HttpService.client.login({
username_or_email, username_or_email,
@ -104,7 +109,7 @@ export class Login extends Component<
private isoData = setIsoData(this.context); private isoData = setIsoData(this.context);
state: State = { state: State = {
loginRes: { state: "empty" }, loginRes: EMPTY_REQUEST,
form: { form: {
username_or_email: "", username_or_email: "",
password: "", password: "",

View file

@ -8,7 +8,12 @@ import {
Register, Register,
} from "lemmy-js-client"; } from "lemmy-js-client";
import { I18NextService, UserService } from "../../services"; import { I18NextService, UserService } from "../../services";
import { HttpService, RequestState } from "../../services/HttpService"; import {
EMPTY_REQUEST,
HttpService,
LOADING_REQUEST,
RequestState,
} from "../../services/HttpService";
import { Spinner } from "../common/icon"; import { Spinner } from "../common/icon";
import PasswordInput from "../common/password-input"; import PasswordInput from "../common/password-input";
import { SiteForm } from "./site-form"; import { SiteForm } from "./site-form";
@ -35,7 +40,7 @@ export class Setup extends Component<any, State> {
private isoData = setIsoData(this.context); private isoData = setIsoData(this.context);
state: State = { state: State = {
registerRes: { state: "empty" }, registerRes: EMPTY_REQUEST,
themeList: [], themeList: [],
form: { form: {
show_nsfw: true, show_nsfw: true,
@ -157,7 +162,7 @@ export class Setup extends Component<any, State> {
async handleRegisterSubmit(i: Setup, event: any) { async handleRegisterSubmit(i: Setup, event: any) {
event.preventDefault(); event.preventDefault();
i.setState({ registerRes: { state: "loading" } }); i.setState({ registerRes: LOADING_REQUEST });
const { const {
username, username,
password_verify, password_verify,

View file

@ -13,7 +13,12 @@ import {
import { joinLemmyUrl } from "../../config"; import { joinLemmyUrl } from "../../config";
import { mdToHtml } from "../../markdown"; import { mdToHtml } from "../../markdown";
import { I18NextService, UserService } from "../../services"; import { I18NextService, UserService } from "../../services";
import { HttpService, RequestState } from "../../services/HttpService"; import {
EMPTY_REQUEST,
HttpService,
LOADING_REQUEST,
RequestState,
} from "../../services/HttpService";
import { toast } from "../../toast"; import { toast } from "../../toast";
import { HtmlTags } from "../common/html-tags"; import { HtmlTags } from "../common/html-tags";
import { Icon, Spinner } from "../common/icon"; import { Icon, Spinner } from "../common/icon";
@ -43,8 +48,8 @@ export class Signup extends Component<any, State> {
private audio?: HTMLAudioElement; private audio?: HTMLAudioElement;
state: State = { state: State = {
registerRes: { state: "empty" }, registerRes: EMPTY_REQUEST,
captchaRes: { state: "empty" }, captchaRes: EMPTY_REQUEST,
form: { form: {
show_nsfw: false, show_nsfw: false,
}, },
@ -65,7 +70,7 @@ export class Signup extends Component<any, State> {
} }
async fetchCaptcha() { async fetchCaptcha() {
this.setState({ captchaRes: { state: "loading" } }); this.setState({ captchaRes: LOADING_REQUEST });
this.setState({ this.setState({
captchaRes: await HttpService.client.getCaptcha(), captchaRes: await HttpService.client.getCaptcha(),
}); });
@ -368,7 +373,7 @@ export class Signup extends Component<any, State> {
username, username,
} = i.state.form; } = i.state.form;
if (username && password && password_verify) { if (username && password && password_verify) {
i.setState({ registerRes: { state: "loading" } }); i.setState({ registerRes: LOADING_REQUEST });
const registerRes = await HttpService.client.register({ const registerRes = await HttpService.client.register({
username, username,
@ -384,7 +389,7 @@ export class Signup extends Component<any, State> {
switch (registerRes.state) { switch (registerRes.state) {
case "failed": { case "failed": {
toast(registerRes.msg, "danger"); toast(registerRes.msg, "danger");
i.setState({ registerRes: { state: "empty" } }); i.setState({ registerRes: EMPTY_REQUEST });
break; break;
} }

View file

@ -47,7 +47,12 @@ import {
import { fetchLimit } from "../config"; import { fetchLimit } from "../config";
import { InitialFetchRequest } from "../interfaces"; import { InitialFetchRequest } from "../interfaces";
import { FirstLoadService, I18NextService } from "../services"; import { FirstLoadService, I18NextService } from "../services";
import { HttpService, RequestState } from "../services/HttpService"; import {
EMPTY_REQUEST,
HttpService,
LOADING_REQUEST,
RequestState,
} from "../services/HttpService";
import { HtmlTags } from "./common/html-tags"; import { HtmlTags } from "./common/html-tags";
import { Icon, Spinner } from "./common/icon"; import { Icon, Spinner } from "./common/icon";
import { MomentTime } from "./common/moment-time"; import { MomentTime } from "./common/moment-time";
@ -647,8 +652,8 @@ export class Modlog extends Component<
private isoData = setIsoData<ModlogData>(this.context); private isoData = setIsoData<ModlogData>(this.context);
state: ModlogState = { state: ModlogState = {
res: { state: "empty" }, res: EMPTY_REQUEST,
communityRes: { state: "empty" }, communityRes: EMPTY_REQUEST,
loadingModSearch: false, loadingModSearch: false,
loadingUserSearch: false, loadingUserSearch: false,
userSearchOptions: [], userSearchOptions: [],
@ -954,7 +959,7 @@ export class Modlog extends Component<
const { communityId: urlCommunityId } = this.props.match.params; const { communityId: urlCommunityId } = this.props.match.params;
const communityId = getIdFromString(urlCommunityId); const communityId = getIdFromString(urlCommunityId);
this.setState({ res: { state: "loading" } }); this.setState({ res: LOADING_REQUEST });
this.setState({ this.setState({
res: await HttpService.client.getModlog({ res: await HttpService.client.getModlog({
community_id: communityId, community_id: communityId,
@ -970,7 +975,7 @@ export class Modlog extends Component<
}); });
if (communityId) { if (communityId) {
this.setState({ communityRes: { state: "loading" } }); this.setState({ communityRes: LOADING_REQUEST });
this.setState({ this.setState({
communityRes: await HttpService.client.getCommunity({ communityRes: await HttpService.client.getCommunity({
id: communityId, id: communityId,
@ -1001,9 +1006,7 @@ export class Modlog extends Component<
other_person_id: userId, other_person_id: userId,
}; };
let communityResponse: RequestState<GetCommunityResponse> = { let communityResponse: RequestState<GetCommunityResponse> = EMPTY_REQUEST;
state: "empty",
};
if (communityId) { if (communityId) {
const communityForm: GetCommunity = { const communityForm: GetCommunity = {
@ -1013,9 +1016,7 @@ export class Modlog extends Component<
communityResponse = await client.getCommunity(communityForm); communityResponse = await client.getCommunity(communityForm);
} }
let modUserResponse: RequestState<GetPersonDetailsResponse> = { let modUserResponse: RequestState<GetPersonDetailsResponse> = EMPTY_REQUEST;
state: "empty",
};
if (modId) { if (modId) {
const getPersonForm: GetPersonDetails = { const getPersonForm: GetPersonDetails = {
@ -1025,9 +1026,7 @@ export class Modlog extends Component<
modUserResponse = await client.getPersonDetails(getPersonForm); modUserResponse = await client.getPersonDetails(getPersonForm);
} }
let userResponse: RequestState<GetPersonDetailsResponse> = { let userResponse: RequestState<GetPersonDetailsResponse> = EMPTY_REQUEST;
state: "empty",
};
if (userId) { if (userId) {
const getPersonForm: GetPersonDetails = { const getPersonForm: GetPersonDetails = {

View file

@ -64,8 +64,10 @@ import { CommentViewType, InitialFetchRequest } from "../../interfaces";
import { FirstLoadService, I18NextService, UserService } from "../../services"; import { FirstLoadService, I18NextService, UserService } from "../../services";
import { UnreadCounterService } from "../../services"; import { UnreadCounterService } from "../../services";
import { import {
EMPTY_REQUEST,
EmptyRequestState, EmptyRequestState,
HttpService, HttpService,
LOADING_REQUEST,
RequestState, RequestState,
} from "../../services/HttpService"; } from "../../services/HttpService";
import { toast } from "../../toast"; import { toast } from "../../toast";
@ -129,10 +131,10 @@ export class Inbox extends Component<any, InboxState> {
sort: "New", sort: "New",
page: 1, page: 1,
siteRes: this.isoData.site_res, siteRes: this.isoData.site_res,
repliesRes: { state: "empty" }, repliesRes: EMPTY_REQUEST,
mentionsRes: { state: "empty" }, mentionsRes: EMPTY_REQUEST,
messagesRes: { state: "empty" }, messagesRes: EMPTY_REQUEST,
markAllAsReadRes: { state: "empty" }, markAllAsReadRes: EMPTY_REQUEST,
finished: new Map(), finished: new Map(),
isIsomorphic: false, isIsomorphic: false,
}; };
@ -725,7 +727,7 @@ export class Inbox extends Component<any, InboxState> {
client, client,
}: InitialFetchRequest): Promise<InboxData> { }: InitialFetchRequest): Promise<InboxData> {
const sort: CommentSortType = "New"; const sort: CommentSortType = "New";
const empty: EmptyRequestState = { state: "empty" }; const empty: EmptyRequestState = EMPTY_REQUEST;
let inboxData: InboxData = { let inboxData: InboxData = {
mentionsRes: empty, mentionsRes: empty,
messagesRes: empty, messagesRes: empty,
@ -765,7 +767,7 @@ export class Inbox extends Component<any, InboxState> {
const page = this.state.page; const page = this.state.page;
const limit = fetchLimit; const limit = fetchLimit;
this.setState({ repliesRes: { state: "loading" } }); this.setState({ repliesRes: LOADING_REQUEST });
this.setState({ this.setState({
repliesRes: await HttpService.client.getReplies({ repliesRes: await HttpService.client.getReplies({
sort, sort,
@ -775,7 +777,7 @@ export class Inbox extends Component<any, InboxState> {
}), }),
}); });
this.setState({ mentionsRes: { state: "loading" } }); this.setState({ mentionsRes: LOADING_REQUEST });
this.setState({ this.setState({
mentionsRes: await HttpService.client.getPersonMentions({ mentionsRes: await HttpService.client.getPersonMentions({
sort, sort,
@ -785,7 +787,7 @@ export class Inbox extends Component<any, InboxState> {
}), }),
}); });
this.setState({ messagesRes: { state: "loading" } }); this.setState({ messagesRes: LOADING_REQUEST });
this.setState({ this.setState({
messagesRes: await HttpService.client.getPrivateMessages({ messagesRes: await HttpService.client.getPrivateMessages({
unread_only, unread_only,
@ -802,7 +804,7 @@ export class Inbox extends Component<any, InboxState> {
} }
async handleMarkAllAsRead(i: Inbox) { async handleMarkAllAsRead(i: Inbox) {
i.setState({ markAllAsReadRes: { state: "loading" } }); i.setState({ markAllAsReadRes: LOADING_REQUEST });
i.setState({ i.setState({
markAllAsReadRes: await HttpService.client.markAllAsRead(), markAllAsReadRes: await HttpService.client.markAllAsRead(),
@ -810,9 +812,9 @@ export class Inbox extends Component<any, InboxState> {
if (i.state.markAllAsReadRes.state === "success") { if (i.state.markAllAsReadRes.state === "success") {
i.setState({ i.setState({
repliesRes: { state: "empty" }, repliesRes: EMPTY_REQUEST,
mentionsRes: { state: "empty" }, mentionsRes: EMPTY_REQUEST,
messagesRes: { state: "empty" }, messagesRes: EMPTY_REQUEST,
}); });
} }
} }

View file

@ -3,7 +3,11 @@ import { capitalizeFirstLetter } from "@utils/helpers";
import { Component, linkEvent } from "inferno"; import { Component, linkEvent } from "inferno";
import { GetSiteResponse, LoginResponse } from "lemmy-js-client"; import { GetSiteResponse, LoginResponse } from "lemmy-js-client";
import { HttpService, I18NextService, UserService } from "../../services"; import { HttpService, I18NextService, UserService } from "../../services";
import { RequestState } from "../../services/HttpService"; import {
EMPTY_REQUEST,
LOADING_REQUEST,
RequestState,
} from "../../services/HttpService";
import { HtmlTags } from "../common/html-tags"; import { HtmlTags } from "../common/html-tags";
import { Spinner } from "../common/icon"; import { Spinner } from "../common/icon";
import PasswordInput from "../common/password-input"; import PasswordInput from "../common/password-input";
@ -22,7 +26,7 @@ export class PasswordChange extends Component<any, State> {
private isoData = setIsoData(this.context); private isoData = setIsoData(this.context);
state: State = { state: State = {
passwordChangeRes: { state: "empty" }, passwordChangeRes: EMPTY_REQUEST,
siteRes: this.isoData.site_res, siteRes: this.isoData.site_res,
form: { form: {
token: this.props.match.params.token, token: this.props.match.params.token,
@ -106,7 +110,7 @@ export class PasswordChange extends Component<any, State> {
async handlePasswordChangeSubmit(i: PasswordChange, event: any) { async handlePasswordChangeSubmit(i: PasswordChange, event: any) {
event.preventDefault(); event.preventDefault();
i.setState({ passwordChangeRes: { state: "loading" } }); i.setState({ passwordChangeRes: LOADING_REQUEST });
const password = i.state.form.password; const password = i.state.form.password;
const password_verify = i.state.form.password_verify; const password_verify = i.state.form.password_verify;

View file

@ -76,7 +76,12 @@ import { fetchLimit, relTags } from "../../config";
import { InitialFetchRequest, PersonDetailsView } from "../../interfaces"; import { InitialFetchRequest, PersonDetailsView } from "../../interfaces";
import { mdToHtml } from "../../markdown"; import { mdToHtml } from "../../markdown";
import { FirstLoadService, I18NextService, UserService } from "../../services"; import { FirstLoadService, I18NextService, UserService } from "../../services";
import { HttpService, RequestState } from "../../services/HttpService"; import {
EMPTY_REQUEST,
HttpService,
LOADING_REQUEST,
RequestState,
} from "../../services/HttpService";
import { setupTippy } from "../../tippy"; import { setupTippy } from "../../tippy";
import { toast } from "../../toast"; import { toast } from "../../toast";
import { BannerIconHeader } from "../common/banner-icon-header"; import { BannerIconHeader } from "../common/banner-icon-header";
@ -171,7 +176,7 @@ export class Profile extends Component<
> { > {
private isoData = setIsoData<ProfileData>(this.context); private isoData = setIsoData<ProfileData>(this.context);
state: ProfileState = { state: ProfileState = {
personRes: { state: "empty" }, personRes: EMPTY_REQUEST,
personBlocked: false, personBlocked: false,
siteRes: this.isoData.site_res, siteRes: this.isoData.site_res,
showBanDialog: false, showBanDialog: false,
@ -245,7 +250,7 @@ export class Profile extends Component<
async fetchUserData() { async fetchUserData() {
const { page, sort, view } = getProfileQueryParams(); const { page, sort, view } = getProfileQueryParams();
this.setState({ personRes: { state: "loading" } }); this.setState({ personRes: LOADING_REQUEST });
const personRes = await HttpService.client.getPersonDetails({ const personRes = await HttpService.client.getPersonDetails({
username: this.props.match.params.username, username: this.props.match.params.username,
sort, sort,

View file

@ -12,7 +12,12 @@ import {
import { fetchLimit } from "../../config"; import { fetchLimit } from "../../config";
import { InitialFetchRequest } from "../../interfaces"; import { InitialFetchRequest } from "../../interfaces";
import { FirstLoadService, I18NextService, UserService } from "../../services"; import { FirstLoadService, I18NextService, UserService } from "../../services";
import { HttpService, RequestState } from "../../services/HttpService"; import {
EMPTY_REQUEST,
HttpService,
LOADING_REQUEST,
RequestState,
} from "../../services/HttpService";
import { setupTippy } from "../../tippy"; import { setupTippy } from "../../tippy";
import { HtmlTags } from "../common/html-tags"; import { HtmlTags } from "../common/html-tags";
import { Spinner } from "../common/icon"; import { Spinner } from "../common/icon";
@ -42,7 +47,7 @@ export class RegistrationApplications extends Component<
> { > {
private isoData = setIsoData<RegistrationApplicationsData>(this.context); private isoData = setIsoData<RegistrationApplicationsData>(this.context);
state: RegistrationApplicationsState = { state: RegistrationApplicationsState = {
appsRes: { state: "empty" }, appsRes: EMPTY_REQUEST,
siteRes: this.isoData.site_res, siteRes: this.isoData.site_res,
unreadOrAll: UnreadOrAll.Unread, unreadOrAll: UnreadOrAll.Unread,
page: 1, page: 1,
@ -210,14 +215,14 @@ export class RegistrationApplications extends Component<
page: 1, page: 1,
limit: fetchLimit, limit: fetchLimit,
}) })
: { state: "empty" }, : EMPTY_REQUEST,
}; };
} }
async refetch() { async refetch() {
const unread_only = this.state.unreadOrAll === UnreadOrAll.Unread; const unread_only = this.state.unreadOrAll === UnreadOrAll.Unread;
this.setState({ this.setState({
appsRes: { state: "loading" }, appsRes: LOADING_REQUEST,
}); });
this.setState({ this.setState({
appsRes: await HttpService.client.listRegistrationApplications({ appsRes: await HttpService.client.listRegistrationApplications({

View file

@ -35,7 +35,11 @@ import {
I18NextService, I18NextService,
UserService, UserService,
} from "../../services"; } from "../../services";
import { RequestState } from "../../services/HttpService"; import {
EMPTY_REQUEST,
LOADING_REQUEST,
RequestState,
} from "../../services/HttpService";
import { CommentReport } from "../comment/comment-report"; import { CommentReport } from "../comment/comment-report";
import { HtmlTags } from "../common/html-tags"; import { HtmlTags } from "../common/html-tags";
import { Spinner } from "../common/icon"; import { Spinner } from "../common/icon";
@ -88,9 +92,9 @@ interface ReportsState {
export class Reports extends Component<any, ReportsState> { export class Reports extends Component<any, ReportsState> {
private isoData = setIsoData<ReportsData>(this.context); private isoData = setIsoData<ReportsData>(this.context);
state: ReportsState = { state: ReportsState = {
commentReportsRes: { state: "empty" }, commentReportsRes: EMPTY_REQUEST,
postReportsRes: { state: "empty" }, postReportsRes: EMPTY_REQUEST,
messageReportsRes: { state: "empty" }, messageReportsRes: EMPTY_REQUEST,
unreadOrAll: UnreadOrAll.Unread, unreadOrAll: UnreadOrAll.Unread,
messageType: MessageType.All, messageType: MessageType.All,
page: 1, page: 1,
@ -551,7 +555,7 @@ export class Reports extends Component<any, ReportsState> {
const data: ReportsData = { const data: ReportsData = {
commentReportsRes: await client.listCommentReports(commentReportsForm), commentReportsRes: await client.listCommentReports(commentReportsForm),
postReportsRes: await client.listPostReports(postReportsForm), postReportsRes: await client.listPostReports(postReportsForm),
messageReportsRes: { state: "empty" }, messageReportsRes: EMPTY_REQUEST,
}; };
if (amAdmin()) { if (amAdmin()) {
@ -575,9 +579,9 @@ export class Reports extends Component<any, ReportsState> {
const limit = fetchLimit; const limit = fetchLimit;
this.setState({ this.setState({
commentReportsRes: { state: "loading" }, commentReportsRes: LOADING_REQUEST,
postReportsRes: { state: "loading" }, postReportsRes: LOADING_REQUEST,
messageReportsRes: { state: "loading" }, messageReportsRes: LOADING_REQUEST,
}); });
const form: const form:

View file

@ -184,10 +184,10 @@ function handleClose2faModal(i: Settings) {
export class Settings extends Component<any, SettingsState> { export class Settings extends Component<any, SettingsState> {
private isoData = setIsoData<SettingsData>(this.context); private isoData = setIsoData<SettingsData>(this.context);
state: SettingsState = { state: SettingsState = {
saveRes: { state: "empty" }, saveRes: EMPTY_REQUEST,
deleteAccountRes: { state: "empty" }, deleteAccountRes: EMPTY_REQUEST,
changePasswordRes: { state: "empty" }, changePasswordRes: EMPTY_REQUEST,
instancesRes: { state: "empty" }, instancesRes: EMPTY_REQUEST,
saveUserSettingsForm: {}, saveUserSettingsForm: {},
changePasswordForm: {}, changePasswordForm: {},
deleteAccountShowConfirm: false, deleteAccountShowConfirm: false,
@ -312,7 +312,7 @@ export class Settings extends Component<any, SettingsState> {
if (!this.state.isIsomorphic) { if (!this.state.isIsomorphic) {
this.setState({ this.setState({
instancesRes: { state: "loading" }, instancesRes: LOADING_REQUEST,
}); });
this.setState({ this.setState({
@ -1432,7 +1432,7 @@ export class Settings extends Component<any, SettingsState> {
async handleSaveSettingsSubmit(i: Settings, event: any) { async handleSaveSettingsSubmit(i: Settings, event: any) {
event.preventDefault(); event.preventDefault();
i.setState({ saveRes: { state: "loading" } }); i.setState({ saveRes: LOADING_REQUEST });
const saveRes = await HttpService.client.saveUserSettings({ const saveRes = await HttpService.client.saveUserSettings({
...i.state.saveUserSettingsForm, ...i.state.saveUserSettingsForm,
@ -1467,7 +1467,7 @@ export class Settings extends Component<any, SettingsState> {
i.state.changePasswordForm; i.state.changePasswordForm;
if (new_password && old_password && new_password_verify) { if (new_password && old_password && new_password_verify) {
i.setState({ changePasswordRes: { state: "loading" } }); i.setState({ changePasswordRes: LOADING_REQUEST });
const changePasswordRes = await HttpService.client.changePassword({ const changePasswordRes = await HttpService.client.changePassword({
new_password, new_password,
new_password_verify, new_password_verify,
@ -1498,7 +1498,7 @@ export class Settings extends Component<any, SettingsState> {
event.preventDefault(); event.preventDefault();
const password = i.state.deleteAccountForm.password; const password = i.state.deleteAccountForm.password;
if (password) { if (password) {
i.setState({ deleteAccountRes: { state: "loading" } }); i.setState({ deleteAccountRes: LOADING_REQUEST });
const deleteAccountRes = await HttpService.client.deleteAccount({ const deleteAccountRes = await HttpService.client.deleteAccount({
password, password,
// TODO: promt user weather he wants the content to be deleted // TODO: promt user weather he wants the content to be deleted

View file

@ -2,7 +2,12 @@ import { setIsoData } from "@utils/app";
import { Component } from "inferno"; import { Component } from "inferno";
import { GetSiteResponse, VerifyEmailResponse } from "lemmy-js-client"; import { GetSiteResponse, VerifyEmailResponse } from "lemmy-js-client";
import { I18NextService } from "../../services"; import { I18NextService } from "../../services";
import { HttpService, RequestState } from "../../services/HttpService"; import {
EMPTY_REQUEST,
HttpService,
LOADING_REQUEST,
RequestState,
} from "../../services/HttpService";
import { toast } from "../../toast"; import { toast } from "../../toast";
import { HtmlTags } from "../common/html-tags"; import { HtmlTags } from "../common/html-tags";
import { Spinner } from "../common/icon"; import { Spinner } from "../common/icon";
@ -16,7 +21,7 @@ export class VerifyEmail extends Component<any, State> {
private isoData = setIsoData(this.context); private isoData = setIsoData(this.context);
state: State = { state: State = {
verifyRes: { state: "empty" }, verifyRes: EMPTY_REQUEST,
siteRes: this.isoData.site_res, siteRes: this.isoData.site_res,
}; };
@ -26,7 +31,7 @@ export class VerifyEmail extends Component<any, State> {
async verify() { async verify() {
this.setState({ this.setState({
verifyRes: { state: "loading" }, verifyRes: LOADING_REQUEST,
}); });
this.setState({ this.setState({

View file

@ -14,6 +14,7 @@ import {
import { InitialFetchRequest, PostFormParams } from "../../interfaces"; import { InitialFetchRequest, PostFormParams } from "../../interfaces";
import { FirstLoadService, I18NextService } from "../../services"; import { FirstLoadService, I18NextService } from "../../services";
import { import {
EMPTY_REQUEST,
HttpService, HttpService,
RequestState, RequestState,
WrappedLemmyHttp, WrappedLemmyHttp,
@ -57,7 +58,7 @@ export class CreatePost extends Component<
state: CreatePostState = { state: CreatePostState = {
siteRes: this.isoData.site_res, siteRes: this.isoData.site_res,
loading: true, loading: true,
initialCommunitiesRes: { state: "empty" }, initialCommunitiesRes: EMPTY_REQUEST,
isIsomorphic: false, isIsomorphic: false,
}; };
@ -242,7 +243,7 @@ export class CreatePost extends Component<
>): Promise<CreatePostData> { >): Promise<CreatePostData> {
const data: CreatePostData = { const data: CreatePostData = {
initialCommunitiesRes: await fetchCommunitiesForOptions(client), initialCommunitiesRes: await fetchCommunitiesForOptions(client),
communityResponse: { state: "empty" }, communityResponse: EMPTY_REQUEST,
}; };
if (communityId) { if (communityId) {

View file

@ -29,7 +29,12 @@ import {
} from "../../config"; } from "../../config";
import { PostFormParams } from "../../interfaces"; import { PostFormParams } from "../../interfaces";
import { I18NextService, UserService } from "../../services"; import { I18NextService, UserService } from "../../services";
import { HttpService, RequestState } from "../../services/HttpService"; import {
EMPTY_REQUEST,
HttpService,
LOADING_REQUEST,
RequestState,
} from "../../services/HttpService";
import { setupTippy } from "../../tippy"; import { setupTippy } from "../../tippy";
import { toast } from "../../toast"; import { toast } from "../../toast";
import { Icon, Spinner } from "../common/icon"; import { Icon, Spinner } from "../common/icon";
@ -116,7 +121,7 @@ function copySuggestedTitle(d: { i: PostForm; suggestedTitle?: string }) {
d.i.setState( d.i.setState(
s => ((s.form.name = sTitle?.substring(0, MAX_POST_TITLE_LENGTH)), s), s => ((s.form.name = sTitle?.substring(0, MAX_POST_TITLE_LENGTH)), s),
); );
d.i.setState({ suggestedPostsRes: { state: "empty" } }); d.i.setState({ suggestedPostsRes: EMPTY_REQUEST });
setTimeout(() => { setTimeout(() => {
const textarea: any = document.getElementById("post-title"); const textarea: any = document.getElementById("post-title");
autosize.update(textarea); autosize.update(textarea);
@ -215,8 +220,8 @@ function handleImageDelete(i: PostForm) {
export class PostForm extends Component<PostFormProps, PostFormState> { export class PostForm extends Component<PostFormProps, PostFormState> {
state: PostFormState = { state: PostFormState = {
suggestedPostsRes: { state: "empty" }, suggestedPostsRes: EMPTY_REQUEST,
metadataRes: { state: "empty" }, metadataRes: EMPTY_REQUEST,
form: {}, form: {},
loading: false, loading: false,
imageLoading: false, imageLoading: false,
@ -648,7 +653,7 @@ export class PostForm extends Component<PostFormProps, PostFormState> {
async fetchPageTitle() { async fetchPageTitle() {
const url = this.state.form.url; const url = this.state.form.url;
if (url && validURL(url)) { if (url && validURL(url)) {
this.setState({ metadataRes: { state: "loading" } }); this.setState({ metadataRes: LOADING_REQUEST });
this.setState({ this.setState({
metadataRes: await HttpService.client.getSiteMetadata({ url }), metadataRes: await HttpService.client.getSiteMetadata({ url }),
}); });
@ -658,7 +663,7 @@ export class PostForm extends Component<PostFormProps, PostFormState> {
async fetchSimilarPosts() { async fetchSimilarPosts() {
const q = this.state.form.name; const q = this.state.form.name;
if (q && q !== "") { if (q && q !== "") {
this.setState({ suggestedPostsRes: { state: "loading" } }); this.setState({ suggestedPostsRes: LOADING_REQUEST });
this.setState({ this.setState({
suggestedPostsRes: await HttpService.client.search({ suggestedPostsRes: await HttpService.client.search({
q, q,

View file

@ -83,7 +83,12 @@ import {
InitialFetchRequest, InitialFetchRequest,
} from "../../interfaces"; } from "../../interfaces";
import { FirstLoadService, I18NextService, UserService } from "../../services"; import { FirstLoadService, I18NextService, UserService } from "../../services";
import { HttpService, RequestState } from "../../services/HttpService"; import {
EMPTY_REQUEST,
HttpService,
LOADING_REQUEST,
RequestState,
} from "../../services/HttpService";
import { setupTippy } from "../../tippy"; import { setupTippy } from "../../tippy";
import { toast } from "../../toast"; import { toast } from "../../toast";
import { CommentForm } from "../comment/comment-form"; import { CommentForm } from "../comment/comment-form";
@ -120,8 +125,8 @@ export class Post extends Component<any, PostState> {
private isoData = setIsoData<PostData>(this.context); private isoData = setIsoData<PostData>(this.context);
private commentScrollDebounced: () => void; private commentScrollDebounced: () => void;
state: PostState = { state: PostState = {
postRes: { state: "empty" }, postRes: EMPTY_REQUEST,
commentsRes: { state: "empty" }, commentsRes: EMPTY_REQUEST,
postId: getIdFromProps(this.props), postId: getIdFromProps(this.props),
commentId: getCommentIdFromProps(this.props), commentId: getCommentIdFromProps(this.props),
commentSort: "Hot", commentSort: "Hot",
@ -196,8 +201,8 @@ export class Post extends Component<any, PostState> {
async fetchPost() { async fetchPost() {
this.setState({ this.setState({
postRes: { state: "loading" }, postRes: LOADING_REQUEST,
commentsRes: { state: "loading" }, commentsRes: LOADING_REQUEST,
}); });
const [postRes, commentsRes] = await Promise.all([ const [postRes, commentsRes] = await Promise.all([
@ -697,8 +702,8 @@ export class Post extends Component<any, PostState> {
i.setState({ i.setState({
commentSort: event.target.value as CommentSortType, commentSort: event.target.value as CommentSortType,
commentViewType: CommentViewType.Tree, commentViewType: CommentViewType.Tree,
commentsRes: { state: "loading" }, commentsRes: LOADING_REQUEST,
postRes: { state: "loading" }, postRes: LOADING_REQUEST,
}); });
await i.fetchPost(); await i.fetchPost();
} }

View file

@ -9,7 +9,12 @@ import {
} from "lemmy-js-client"; } from "lemmy-js-client";
import { InitialFetchRequest } from "../../interfaces"; import { InitialFetchRequest } from "../../interfaces";
import { FirstLoadService, I18NextService } from "../../services"; import { FirstLoadService, I18NextService } from "../../services";
import { HttpService, RequestState } from "../../services/HttpService"; import {
EMPTY_REQUEST,
HttpService,
LOADING_REQUEST,
RequestState,
} from "../../services/HttpService";
import { toast } from "../../toast"; import { toast } from "../../toast";
import { HtmlTags } from "../common/html-tags"; import { HtmlTags } from "../common/html-tags";
import { Spinner } from "../common/icon"; import { Spinner } from "../common/icon";
@ -33,7 +38,7 @@ export class CreatePrivateMessage extends Component<
private isoData = setIsoData<CreatePrivateMessageData>(this.context); private isoData = setIsoData<CreatePrivateMessageData>(this.context);
state: CreatePrivateMessageState = { state: CreatePrivateMessageState = {
siteRes: this.isoData.site_res, siteRes: this.isoData.site_res,
recipientRes: { state: "empty" }, recipientRes: EMPTY_REQUEST,
recipientId: getRecipientIdFromProps(this.props), recipientId: getRecipientIdFromProps(this.props),
isIsomorphic: false, isIsomorphic: false,
}; };
@ -78,7 +83,7 @@ export class CreatePrivateMessage extends Component<
async fetchPersonDetails() { async fetchPersonDetails() {
this.setState({ this.setState({
recipientRes: { state: "loading" }, recipientRes: LOADING_REQUEST,
}); });
this.setState({ this.setState({

View file

@ -5,7 +5,11 @@ import { Component, linkEvent } from "inferno";
import { CommunityView, ResolveObjectResponse } from "lemmy-js-client"; import { CommunityView, ResolveObjectResponse } from "lemmy-js-client";
import { InitialFetchRequest } from "../interfaces"; import { InitialFetchRequest } from "../interfaces";
import { FirstLoadService, HttpService, I18NextService } from "../services"; import { FirstLoadService, HttpService, I18NextService } from "../services";
import { RequestState } from "../services/HttpService"; import {
EMPTY_REQUEST,
LOADING_REQUEST,
RequestState,
} from "../services/HttpService";
import { HtmlTags } from "./common/html-tags"; import { HtmlTags } from "./common/html-tags";
import { Spinner } from "./common/icon"; import { Spinner } from "./common/icon";
import { LoadingEllipses } from "./common/loading-ellipses"; import { LoadingEllipses } from "./common/loading-ellipses";
@ -76,7 +80,7 @@ const handleUnfollow = (i: RemoteFetch) => handleToggleFollow(i, false);
export class RemoteFetch extends Component<any, RemoteFetchState> { export class RemoteFetch extends Component<any, RemoteFetchState> {
private isoData = setIsoData<RemoteFetchData>(this.context); private isoData = setIsoData<RemoteFetchData>(this.context);
state: RemoteFetchState = { state: RemoteFetchState = {
resolveObjectRes: { state: "empty" }, resolveObjectRes: EMPTY_REQUEST,
isIsomorphic: false, isIsomorphic: false,
followCommunityLoading: false, followCommunityLoading: false,
}; };
@ -100,7 +104,7 @@ export class RemoteFetch extends Component<any, RemoteFetchState> {
const { uri } = getRemoteFetchQueryParams(); const { uri } = getRemoteFetchQueryParams();
if (uri) { if (uri) {
this.setState({ resolveObjectRes: { state: "loading" } }); this.setState({ resolveObjectRes: LOADING_REQUEST });
this.setState({ this.setState({
resolveObjectRes: await HttpService.client.resolveObject({ resolveObjectRes: await HttpService.client.resolveObject({
q: uriToQuery(uri), q: uriToQuery(uri),
@ -208,7 +212,7 @@ export class RemoteFetch extends Component<any, RemoteFetchState> {
}: InitialFetchRequest< }: InitialFetchRequest<
QueryParams<RemoteFetchProps> QueryParams<RemoteFetchProps>
>): Promise<RemoteFetchData> { >): Promise<RemoteFetchData> {
const data: RemoteFetchData = { resolveObjectRes: { state: "empty" } }; const data: RemoteFetchData = { resolveObjectRes: EMPTY_REQUEST };
if (uri && auth) { if (uri && auth) {
data.resolveObjectRes = await client.resolveObject({ data.resolveObjectRes = await client.resolveObject({

View file

@ -48,7 +48,12 @@ import {
import { fetchLimit } from "../config"; import { fetchLimit } from "../config";
import { CommentViewType, InitialFetchRequest } from "../interfaces"; import { CommentViewType, InitialFetchRequest } from "../interfaces";
import { FirstLoadService, I18NextService } from "../services"; import { FirstLoadService, I18NextService } from "../services";
import { HttpService, RequestState } from "../services/HttpService"; import {
EMPTY_REQUEST,
HttpService,
LOADING_REQUEST,
RequestState,
} from "../services/HttpService";
import { CommentNodes } from "./comment/comment-nodes"; import { CommentNodes } from "./comment/comment-nodes";
import { HtmlTags } from "./common/html-tags"; import { HtmlTags } from "./common/html-tags";
import { Spinner } from "./common/icon"; import { Spinner } from "./common/icon";
@ -239,14 +244,14 @@ export class Search extends Component<any, SearchState> {
private isoData = setIsoData<SearchData>(this.context); private isoData = setIsoData<SearchData>(this.context);
state: SearchState = { state: SearchState = {
resolveObjectRes: { state: "empty" }, resolveObjectRes: EMPTY_REQUEST,
creatorDetailsRes: { state: "empty" }, creatorDetailsRes: EMPTY_REQUEST,
communitiesRes: { state: "empty" }, communitiesRes: EMPTY_REQUEST,
communityRes: { state: "empty" }, communityRes: EMPTY_REQUEST,
siteRes: this.isoData.site_res, siteRes: this.isoData.site_res,
creatorSearchOptions: [], creatorSearchOptions: [],
communitySearchOptions: [], communitySearchOptions: [],
searchRes: { state: "empty" }, searchRes: EMPTY_REQUEST,
searchCreatorLoading: false, searchCreatorLoading: false,
searchCommunitiesLoading: false, searchCommunitiesLoading: false,
isIsomorphic: false, isIsomorphic: false,
@ -343,7 +348,7 @@ export class Search extends Component<any, SearchState> {
} }
async fetchCommunities() { async fetchCommunities() {
this.setState({ communitiesRes: { state: "loading" } }); this.setState({ communitiesRes: LOADING_REQUEST });
this.setState({ this.setState({
communitiesRes: await HttpService.client.listCommunities({ communitiesRes: await HttpService.client.listCommunities({
type_: defaultListingType, type_: defaultListingType,
@ -362,12 +367,9 @@ export class Search extends Component<any, SearchState> {
query: { communityId, creatorId, q, type, sort, listingType, page }, query: { communityId, creatorId, q, type, sort, listingType, page },
}: InitialFetchRequest<QueryParams<SearchProps>>): Promise<SearchData> { }: InitialFetchRequest<QueryParams<SearchProps>>): Promise<SearchData> {
const community_id = getIdFromString(communityId); const community_id = getIdFromString(communityId);
let communityResponse: RequestState<GetCommunityResponse> = { let communityResponse: RequestState<GetCommunityResponse> = EMPTY_REQUEST;
state: "empty", let listCommunitiesResponse: RequestState<ListCommunitiesResponse> =
}; EMPTY_REQUEST;
let listCommunitiesResponse: RequestState<ListCommunitiesResponse> = {
state: "empty",
};
if (community_id) { if (community_id) {
const getCommunityForm: GetCommunity = { const getCommunityForm: GetCommunity = {
id: community_id, id: community_id,
@ -387,9 +389,8 @@ export class Search extends Component<any, SearchState> {
} }
const creator_id = getIdFromString(creatorId); const creator_id = getIdFromString(creatorId);
let creatorDetailsResponse: RequestState<GetPersonDetailsResponse> = { let creatorDetailsResponse: RequestState<GetPersonDetailsResponse> =
state: "empty", EMPTY_REQUEST;
};
if (creator_id) { if (creator_id) {
const getCreatorForm: GetPersonDetails = { const getCreatorForm: GetPersonDetails = {
person_id: creator_id, person_id: creator_id,
@ -400,10 +401,9 @@ export class Search extends Component<any, SearchState> {
const query = getSearchQueryFromQuery(q); const query = getSearchQueryFromQuery(q);
let searchResponse: RequestState<SearchResponse> = { state: "empty" }; let searchResponse: RequestState<SearchResponse> = EMPTY_REQUEST;
let resolveObjectResponse: RequestState<ResolveObjectResponse> = { let resolveObjectResponse: RequestState<ResolveObjectResponse> =
state: "empty", EMPTY_REQUEST;
};
if (query) { if (query) {
const form: SearchForm = { const form: SearchForm = {
@ -430,7 +430,7 @@ export class Search extends Component<any, SearchState> {
// If we return this object with a state of failed, the catch-all-handler will redirect // If we return this object with a state of failed, the catch-all-handler will redirect
// to an error page, so we ignore it by covering up the error with the empty state. // to an error page, so we ignore it by covering up the error with the empty state.
if (resolveObjectResponse.state === "failed") { if (resolveObjectResponse.state === "failed") {
resolveObjectResponse = { state: "empty" }; resolveObjectResponse = EMPTY_REQUEST;
} }
} }
} }
@ -744,8 +744,8 @@ export class Search extends Component<any, SearchState> {
onPersonMentionRead={() => {}} onPersonMentionRead={() => {}}
onBanPersonFromCommunity={() => {}} onBanPersonFromCommunity={() => {}}
onBanPerson={() => {}} onBanPerson={() => {}}
onCreateComment={() => Promise.resolve({ state: "empty" })} onCreateComment={() => Promise.resolve(EMPTY_REQUEST)}
onEditComment={() => Promise.resolve({ state: "empty" })} onEditComment={() => Promise.resolve(EMPTY_REQUEST)}
/> />
)} )}
{i.type_ === "communities" && ( {i.type_ === "communities" && (
@ -805,8 +805,8 @@ export class Search extends Component<any, SearchState> {
onPersonMentionRead={() => {}} onPersonMentionRead={() => {}}
onBanPersonFromCommunity={() => {}} onBanPersonFromCommunity={() => {}}
onBanPerson={() => {}} onBanPerson={() => {}}
onCreateComment={() => Promise.resolve({ state: "empty" })} onCreateComment={() => Promise.resolve(EMPTY_REQUEST)}
onEditComment={() => Promise.resolve({ state: "empty" })} onEditComment={() => Promise.resolve(EMPTY_REQUEST)}
/> />
); );
} }
@ -948,7 +948,7 @@ export class Search extends Component<any, SearchState> {
getSearchQueryParams(); getSearchQueryParams();
if (q) { if (q) {
this.setState({ searchRes: { state: "loading" } }); this.setState({ searchRes: LOADING_REQUEST });
this.setState({ this.setState({
searchRes: await HttpService.client.search({ searchRes: await HttpService.client.search({
q, q,
@ -965,7 +965,7 @@ export class Search extends Component<any, SearchState> {
restoreScrollPosition(this.context); restoreScrollPosition(this.context);
if (myAuth()) { if (myAuth()) {
this.setState({ resolveObjectRes: { state: "loading" } }); this.setState({ resolveObjectRes: LOADING_REQUEST });
this.setState({ this.setState({
resolveObjectRes: await HttpService.silent_client.resolveObject({ resolveObjectRes: await HttpService.silent_client.resolveObject({
q, q,

View file

@ -1,5 +1,5 @@
import { GetPostsResponse } from "lemmy-js-client"; import { GetPostsResponse } from "lemmy-js-client";
import { RequestState } from "./HttpService.js"; import { EMPTY_REQUEST, RequestState } from "./HttpService.js";
/** /**
* Service to cache home post listings and restore home state when user uses the browser back buttons. * Service to cache home post listings and restore home state when user uses the browser back buttons.
@ -8,7 +8,7 @@ export class HomeCacheService {
static #_instance: HomeCacheService; static #_instance: HomeCacheService;
historyIdx = 0; historyIdx = 0;
scrollY = 0; scrollY = 0;
posts: RequestState<GetPostsResponse> = { state: "empty" }; posts: RequestState<GetPostsResponse> = EMPTY_REQUEST;
get active() { get active() {
return ( return (