Use null handling instead
This commit is contained in:
parent
e815f433f6
commit
ff2ca4d038
2 changed files with 34 additions and 42 deletions
|
@ -114,7 +114,7 @@ interface HomeState {
|
||||||
}
|
}
|
||||||
|
|
||||||
interface HomeProps {
|
interface HomeProps {
|
||||||
listingType: ListingType;
|
listingType?: ListingType;
|
||||||
dataType: DataType;
|
dataType: DataType;
|
||||||
sort: SortType;
|
sort: SortType;
|
||||||
page: number;
|
page: number;
|
||||||
|
@ -126,8 +126,8 @@ type HomeData = RouteDataResponse<{
|
||||||
trendingCommunitiesRes: ListCommunitiesResponse;
|
trendingCommunitiesRes: ListCommunitiesResponse;
|
||||||
}>;
|
}>;
|
||||||
|
|
||||||
function getRss(listingType: ListingType, site: GetSiteResponse) {
|
function getRss(listingType: ListingType) {
|
||||||
const { sort } = getHomeQueryParams(site);
|
const { sort } = getHomeQueryParams();
|
||||||
const auth = myAuth();
|
const auth = myAuth();
|
||||||
|
|
||||||
let rss: string | undefined = undefined;
|
let rss: string | undefined = undefined;
|
||||||
|
@ -163,19 +163,12 @@ function getDataTypeFromQuery(type?: string): DataType {
|
||||||
return type ? DataType[type] : DataType.Post;
|
return type ? DataType[type] : DataType.Post;
|
||||||
}
|
}
|
||||||
|
|
||||||
function getListingTypeFromQuery(
|
function getListingTypeFromQuery(type?: string): ListingType | undefined {
|
||||||
type?: string,
|
|
||||||
site?: GetSiteResponse
|
|
||||||
): ListingType {
|
|
||||||
const myListingType =
|
const myListingType =
|
||||||
UserService.Instance.myUserInfo?.local_user_view?.local_user
|
UserService.Instance.myUserInfo?.local_user_view?.local_user
|
||||||
?.default_listing_type;
|
?.default_listing_type;
|
||||||
|
|
||||||
return (
|
return type ? (type as ListingType) : myListingType;
|
||||||
(type ? (type as ListingType) : myListingType) ??
|
|
||||||
site?.site_view.local_site.default_post_listing_type ??
|
|
||||||
"Local"
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function getSortTypeFromQuery(type?: string): SortType {
|
function getSortTypeFromQuery(type?: string): SortType {
|
||||||
|
@ -186,16 +179,13 @@ function getSortTypeFromQuery(type?: string): SortType {
|
||||||
return (type ? (type as SortType) : mySortType) ?? "Active";
|
return (type ? (type as SortType) : mySortType) ?? "Active";
|
||||||
}
|
}
|
||||||
|
|
||||||
const getHomeQueryParams = (site: GetSiteResponse) =>
|
const getHomeQueryParams = () =>
|
||||||
getQueryParams<HomeProps>(
|
getQueryParams<HomeProps>({
|
||||||
{
|
sort: getSortTypeFromQuery,
|
||||||
sort: getSortTypeFromQuery,
|
listingType: getListingTypeFromQuery,
|
||||||
listingType: getListingTypeFromQuery,
|
page: getPageFromString,
|
||||||
page: getPageFromString,
|
dataType: getDataTypeFromQuery,
|
||||||
dataType: getDataTypeFromQuery,
|
});
|
||||||
},
|
|
||||||
site
|
|
||||||
);
|
|
||||||
|
|
||||||
const MobileButton = ({
|
const MobileButton = ({
|
||||||
textKey,
|
textKey,
|
||||||
|
@ -324,7 +314,9 @@ export class Home extends Component<any, HomeState> {
|
||||||
site,
|
site,
|
||||||
}: InitialFetchRequest<QueryParams<HomeProps>>): Promise<HomeData> {
|
}: InitialFetchRequest<QueryParams<HomeProps>>): Promise<HomeData> {
|
||||||
const dataType = getDataTypeFromQuery(urlDataType);
|
const dataType = getDataTypeFromQuery(urlDataType);
|
||||||
const type_ = getListingTypeFromQuery(listingType, site);
|
const type_ =
|
||||||
|
getListingTypeFromQuery(listingType) ??
|
||||||
|
site.site_view.local_site.default_post_listing_type;
|
||||||
const sort = getSortTypeFromQuery(urlSort);
|
const sort = getSortTypeFromQuery(urlSort);
|
||||||
|
|
||||||
const page = urlPage ? Number(urlPage) : 1;
|
const page = urlPage ? Number(urlPage) : 1;
|
||||||
|
@ -630,7 +622,7 @@ export class Home extends Component<any, HomeState> {
|
||||||
listingType: urlListingType,
|
listingType: urlListingType,
|
||||||
page: urlPage,
|
page: urlPage,
|
||||||
sort: urlSort,
|
sort: urlSort,
|
||||||
} = getHomeQueryParams(this.state.siteRes);
|
} = getHomeQueryParams();
|
||||||
|
|
||||||
const queryParams: QueryParams<HomeProps> = {
|
const queryParams: QueryParams<HomeProps> = {
|
||||||
dataType: getDataTypeString(dataType ?? urlDataType),
|
dataType: getDataTypeString(dataType ?? urlDataType),
|
||||||
|
@ -653,7 +645,7 @@ export class Home extends Component<any, HomeState> {
|
||||||
}
|
}
|
||||||
|
|
||||||
get posts() {
|
get posts() {
|
||||||
const { page } = getHomeQueryParams(this.state.siteRes);
|
const { page } = getHomeQueryParams();
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<div className="main-content-wrapper">
|
<div className="main-content-wrapper">
|
||||||
|
@ -667,7 +659,7 @@ export class Home extends Component<any, HomeState> {
|
||||||
}
|
}
|
||||||
|
|
||||||
get listings() {
|
get listings() {
|
||||||
const { dataType } = getHomeQueryParams(this.state.siteRes);
|
const { dataType } = getHomeQueryParams();
|
||||||
const siteRes = this.state.siteRes;
|
const siteRes = this.state.siteRes;
|
||||||
|
|
||||||
if (dataType === DataType.Post) {
|
if (dataType === DataType.Post) {
|
||||||
|
@ -758,9 +750,7 @@ export class Home extends Component<any, HomeState> {
|
||||||
}
|
}
|
||||||
|
|
||||||
get selects() {
|
get selects() {
|
||||||
const { listingType, dataType, sort } = getHomeQueryParams(
|
const { listingType, dataType, sort } = getHomeQueryParams();
|
||||||
this.state.siteRes
|
|
||||||
);
|
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<div className="row align-items-center mb-3 g-3">
|
<div className="row align-items-center mb-3 g-3">
|
||||||
|
@ -772,7 +762,10 @@ export class Home extends Component<any, HomeState> {
|
||||||
</div>
|
</div>
|
||||||
<div className="col-auto">
|
<div className="col-auto">
|
||||||
<ListingTypeSelect
|
<ListingTypeSelect
|
||||||
type_={listingType}
|
type_={
|
||||||
|
listingType ??
|
||||||
|
this.state.siteRes.site_view.local_site.default_post_listing_type
|
||||||
|
}
|
||||||
showLocal={showLocal(this.isoData)}
|
showLocal={showLocal(this.isoData)}
|
||||||
showSubscribed
|
showSubscribed
|
||||||
onChange={this.handleListingTypeChange}
|
onChange={this.handleListingTypeChange}
|
||||||
|
@ -782,7 +775,10 @@ export class Home extends Component<any, HomeState> {
|
||||||
<SortSelect sort={sort} onChange={this.handleSortChange} />
|
<SortSelect sort={sort} onChange={this.handleSortChange} />
|
||||||
</div>
|
</div>
|
||||||
<div className="col-auto ps-0">
|
<div className="col-auto ps-0">
|
||||||
{getRss(listingType, this.state.siteRes)}
|
{getRss(
|
||||||
|
listingType ??
|
||||||
|
this.state.siteRes.site_view.local_site.default_post_listing_type
|
||||||
|
)}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
);
|
);
|
||||||
|
@ -802,9 +798,7 @@ export class Home extends Component<any, HomeState> {
|
||||||
|
|
||||||
async fetchData() {
|
async fetchData() {
|
||||||
const auth = myAuth();
|
const auth = myAuth();
|
||||||
const { dataType, page, listingType, sort } = getHomeQueryParams(
|
const { dataType, page, listingType, sort } = getHomeQueryParams();
|
||||||
this.state.siteRes
|
|
||||||
);
|
|
||||||
|
|
||||||
if (dataType === DataType.Post) {
|
if (dataType === DataType.Post) {
|
||||||
if (HomeCacheService.active) {
|
if (HomeCacheService.active) {
|
||||||
|
|
|
@ -1,19 +1,17 @@
|
||||||
import { isBrowser } from "@utils/browser";
|
import { isBrowser } from "@utils/browser";
|
||||||
import { GetSiteResponse } from "lemmy-js-client";
|
|
||||||
|
|
||||||
export default function getQueryParams<T extends Record<string, any>>(
|
export default function getQueryParams<
|
||||||
processors: {
|
T extends Record<string, any>
|
||||||
[K in keyof T]: (param: string) => T[K];
|
>(processors: {
|
||||||
},
|
[K in keyof T]: (param: string) => T[K];
|
||||||
site?: GetSiteResponse
|
}): T {
|
||||||
): T {
|
|
||||||
if (isBrowser()) {
|
if (isBrowser()) {
|
||||||
const searchParams = new URLSearchParams(window.location.search);
|
const searchParams = new URLSearchParams(window.location.search);
|
||||||
|
|
||||||
return Array.from(Object.entries(processors)).reduce(
|
return Array.from(Object.entries(processors)).reduce(
|
||||||
(acc, [key, process]) => ({
|
(acc, [key, process]) => ({
|
||||||
...acc,
|
...acc,
|
||||||
[key]: process(searchParams.get(key), site),
|
[key]: process(searchParams.get(key)),
|
||||||
}),
|
}),
|
||||||
{} as T
|
{} as T
|
||||||
);
|
);
|
||||||
|
|
Loading…
Reference in a new issue