mirror of
https://github.com/LemmyNet/lemmy-ui.git
synced 2024-11-29 08:47:19 +00:00
parent
c3ab9e74f8
commit
b45c24537d
|
@ -1,3 +1,5 @@
|
||||||
|
import { randomStr } from "@utils/helpers";
|
||||||
|
import classNames from "classnames";
|
||||||
import { Component, linkEvent } from "inferno";
|
import { Component, linkEvent } from "inferno";
|
||||||
import { DataType } from "../../interfaces";
|
import { DataType } from "../../interfaces";
|
||||||
import { I18NextService } from "../../services";
|
import { I18NextService } from "../../services";
|
||||||
|
@ -15,6 +17,8 @@ export class DataTypeSelect extends Component<
|
||||||
DataTypeSelectProps,
|
DataTypeSelectProps,
|
||||||
DataTypeSelectState
|
DataTypeSelectState
|
||||||
> {
|
> {
|
||||||
|
private id = `listing-type-input-${randomStr()}`;
|
||||||
|
|
||||||
state: DataTypeSelectState = {
|
state: DataTypeSelectState = {
|
||||||
type_: this.props.type_,
|
type_: this.props.type_,
|
||||||
};
|
};
|
||||||
|
@ -31,33 +35,41 @@ export class DataTypeSelect extends Component<
|
||||||
|
|
||||||
render() {
|
render() {
|
||||||
return (
|
return (
|
||||||
<div className="data-type-select btn-group btn-group-toggle flex-wrap">
|
<div
|
||||||
|
className="data-type-select btn-group btn-group-toggle flex-wrap"
|
||||||
|
role="group"
|
||||||
|
>
|
||||||
|
<input
|
||||||
|
id={`${this.id}-posts`}
|
||||||
|
type="radio"
|
||||||
|
className="btn-check"
|
||||||
|
value={DataType.Post}
|
||||||
|
checked={this.state.type_ === DataType.Post}
|
||||||
|
onChange={linkEvent(this, this.handleTypeChange)}
|
||||||
|
/>
|
||||||
<label
|
<label
|
||||||
className={`pointer btn btn-outline-secondary
|
htmlFor={`${this.id}-posts`}
|
||||||
${this.state.type_ == DataType.Post && "active"}
|
className={classNames("pointer btn btn-outline-secondary", {
|
||||||
`}
|
active: this.state.type_ === DataType.Post,
|
||||||
|
})}
|
||||||
>
|
>
|
||||||
<input
|
|
||||||
type="radio"
|
|
||||||
className="btn-check"
|
|
||||||
value={DataType.Post}
|
|
||||||
checked={this.state.type_ == DataType.Post}
|
|
||||||
onChange={linkEvent(this, this.handleTypeChange)}
|
|
||||||
/>
|
|
||||||
{I18NextService.i18n.t("posts")}
|
{I18NextService.i18n.t("posts")}
|
||||||
</label>
|
</label>
|
||||||
|
|
||||||
|
<input
|
||||||
|
id={`${this.id}-comments`}
|
||||||
|
type="radio"
|
||||||
|
className="btn-check"
|
||||||
|
value={DataType.Comment}
|
||||||
|
checked={this.state.type_ === DataType.Comment}
|
||||||
|
onChange={linkEvent(this, this.handleTypeChange)}
|
||||||
|
/>
|
||||||
<label
|
<label
|
||||||
className={`pointer btn btn-outline-secondary ${
|
htmlFor={`${this.id}-comments`}
|
||||||
this.state.type_ == DataType.Comment && "active"
|
className={classNames("pointer btn btn-outline-secondary", {
|
||||||
}`}
|
active: this.state.type_ === DataType.Comment,
|
||||||
|
})}
|
||||||
>
|
>
|
||||||
<input
|
|
||||||
type="radio"
|
|
||||||
className="btn-check"
|
|
||||||
value={DataType.Comment}
|
|
||||||
checked={this.state.type_ == DataType.Comment}
|
|
||||||
onChange={linkEvent(this, this.handleTypeChange)}
|
|
||||||
/>
|
|
||||||
{I18NextService.i18n.t("comments")}
|
{I18NextService.i18n.t("comments")}
|
||||||
</label>
|
</label>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
@ -1,4 +1,5 @@
|
||||||
import { randomStr } from "@utils/helpers";
|
import { randomStr } from "@utils/helpers";
|
||||||
|
import classNames from "classnames";
|
||||||
import { Component, linkEvent } from "inferno";
|
import { Component, linkEvent } from "inferno";
|
||||||
import { ListingType } from "lemmy-js-client";
|
import { ListingType } from "lemmy-js-client";
|
||||||
import { I18NextService, UserService } from "../../services";
|
import { I18NextService, UserService } from "../../services";
|
||||||
|
@ -38,60 +39,72 @@ export class ListingTypeSelect extends Component<
|
||||||
|
|
||||||
render() {
|
render() {
|
||||||
return (
|
return (
|
||||||
<div className="listing-type-select btn-group btn-group-toggle flex-wrap">
|
<div
|
||||||
|
className="listing-type-select btn-group btn-group-toggle flex-wrap"
|
||||||
|
role="group"
|
||||||
|
>
|
||||||
{this.props.showSubscribed && (
|
{this.props.showSubscribed && (
|
||||||
<label
|
<>
|
||||||
title={I18NextService.i18n.t("subscribed_description")}
|
|
||||||
className={`btn btn-outline-secondary
|
|
||||||
${this.state.type_ == "Subscribed" && "active"}
|
|
||||||
${!UserService.Instance.myUserInfo ? "disabled" : "pointer"}
|
|
||||||
`}
|
|
||||||
>
|
|
||||||
<input
|
<input
|
||||||
id={`${this.id}-subscribed`}
|
id={`${this.id}-subscribed`}
|
||||||
type="radio"
|
type="radio"
|
||||||
className="btn-check"
|
className="btn-check"
|
||||||
value={"Subscribed"}
|
value={"Subscribed"}
|
||||||
checked={this.state.type_ == "Subscribed"}
|
checked={this.state.type_ === "Subscribed"}
|
||||||
onChange={linkEvent(this, this.handleTypeChange)}
|
onChange={linkEvent(this, this.handleTypeChange)}
|
||||||
disabled={!UserService.Instance.myUserInfo}
|
disabled={!UserService.Instance.myUserInfo}
|
||||||
/>
|
/>
|
||||||
{I18NextService.i18n.t("subscribed")}
|
<label
|
||||||
</label>
|
htmlFor={`${this.id}-subscribed`}
|
||||||
|
title={I18NextService.i18n.t("subscribed_description")}
|
||||||
|
className={classNames("btn btn-outline-secondary", {
|
||||||
|
active: this.state.type_ === "Subscribed",
|
||||||
|
disabled: !UserService.Instance.myUserInfo,
|
||||||
|
pointer: UserService.Instance.myUserInfo,
|
||||||
|
})}
|
||||||
|
>
|
||||||
|
{I18NextService.i18n.t("subscribed")}
|
||||||
|
</label>
|
||||||
|
</>
|
||||||
)}
|
)}
|
||||||
{this.props.showLocal && (
|
{this.props.showLocal && (
|
||||||
<label
|
<>
|
||||||
title={I18NextService.i18n.t("local_description")}
|
|
||||||
className={`pointer btn btn-outline-secondary ${
|
|
||||||
this.state.type_ == "Local" && "active"
|
|
||||||
}`}
|
|
||||||
>
|
|
||||||
<input
|
<input
|
||||||
id={`${this.id}-local`}
|
id={`${this.id}-local`}
|
||||||
type="radio"
|
type="radio"
|
||||||
className="btn-check"
|
className="btn-check"
|
||||||
value={"Local"}
|
value={"Local"}
|
||||||
checked={this.state.type_ == "Local"}
|
checked={this.state.type_ === "Local"}
|
||||||
onChange={linkEvent(this, this.handleTypeChange)}
|
onChange={linkEvent(this, this.handleTypeChange)}
|
||||||
/>
|
/>
|
||||||
{I18NextService.i18n.t("local")}
|
<label
|
||||||
</label>
|
htmlFor={`${this.id}-local`}
|
||||||
|
title={I18NextService.i18n.t("local_description")}
|
||||||
|
className={classNames("pointer btn btn-outline-secondary", {
|
||||||
|
active: this.state.type_ === "Local",
|
||||||
|
})}
|
||||||
|
>
|
||||||
|
{I18NextService.i18n.t("local")}
|
||||||
|
</label>
|
||||||
|
</>
|
||||||
)}
|
)}
|
||||||
|
<input
|
||||||
|
id={`${this.id}-all`}
|
||||||
|
type="radio"
|
||||||
|
className="btn-check"
|
||||||
|
value={"All"}
|
||||||
|
checked={this.state.type_ === "All"}
|
||||||
|
onChange={linkEvent(this, this.handleTypeChange)}
|
||||||
|
/>
|
||||||
<label
|
<label
|
||||||
title={I18NextService.i18n.t("all_description")}
|
title={I18NextService.i18n.t("all_description")}
|
||||||
className={`pointer btn btn-outline-secondary ${
|
htmlFor={`${this.id}-all`}
|
||||||
(this.state.type_ == "All" && "active") ||
|
className={classNames("pointer btn btn-outline-secondary", {
|
||||||
(!this.props.showLocal && this.state.type_ == "Local" && "active")
|
active:
|
||||||
}`}
|
this.state.type_ === "All" ||
|
||||||
|
(!this.props.showLocal && this.state.type_) === "Local",
|
||||||
|
})}
|
||||||
>
|
>
|
||||||
<input
|
|
||||||
id={`${this.id}-all`}
|
|
||||||
type="radio"
|
|
||||||
className="btn-check"
|
|
||||||
value={"All"}
|
|
||||||
checked={this.state.type_ == "All"}
|
|
||||||
onChange={linkEvent(this, this.handleTypeChange)}
|
|
||||||
/>
|
|
||||||
{I18NextService.i18n.t("all")}
|
{I18NextService.i18n.t("all")}
|
||||||
</label>
|
</label>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
@ -11,8 +11,9 @@ import {
|
||||||
setIsoData,
|
setIsoData,
|
||||||
updatePersonBlock,
|
updatePersonBlock,
|
||||||
} from "@utils/app";
|
} from "@utils/app";
|
||||||
import { capitalizeFirstLetter } from "@utils/helpers";
|
import { capitalizeFirstLetter, randomStr } from "@utils/helpers";
|
||||||
import { RouteDataResponse } from "@utils/types";
|
import { RouteDataResponse } from "@utils/types";
|
||||||
|
import classNames from "classnames";
|
||||||
import { Component, linkEvent } from "inferno";
|
import { Component, linkEvent } from "inferno";
|
||||||
import {
|
import {
|
||||||
AddAdmin,
|
AddAdmin,
|
||||||
|
@ -283,34 +284,41 @@ export class Inbox extends Component<any, InboxState> {
|
||||||
}
|
}
|
||||||
|
|
||||||
unreadOrAllRadios() {
|
unreadOrAllRadios() {
|
||||||
|
const radioId = randomStr();
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<div className="btn-group btn-group-toggle flex-wrap">
|
<div className="btn-group btn-group-toggle flex-wrap" role="group">
|
||||||
|
<input
|
||||||
|
id={`${radioId}-unread`}
|
||||||
|
type="radio"
|
||||||
|
className="btn-check"
|
||||||
|
value={UnreadOrAll.Unread}
|
||||||
|
checked={this.state.unreadOrAll === UnreadOrAll.Unread}
|
||||||
|
onChange={linkEvent(this, this.handleUnreadOrAllChange)}
|
||||||
|
/>
|
||||||
<label
|
<label
|
||||||
className={`btn btn-outline-secondary pointer
|
htmlFor={`${radioId}-unread`}
|
||||||
${this.state.unreadOrAll == UnreadOrAll.Unread && "active"}
|
className={classNames("btn btn-outline-secondary pointer", {
|
||||||
`}
|
active: this.state.unreadOrAll === UnreadOrAll.Unread,
|
||||||
|
})}
|
||||||
>
|
>
|
||||||
<input
|
|
||||||
type="radio"
|
|
||||||
className="btn-check"
|
|
||||||
value={UnreadOrAll.Unread}
|
|
||||||
checked={this.state.unreadOrAll == UnreadOrAll.Unread}
|
|
||||||
onChange={linkEvent(this, this.handleUnreadOrAllChange)}
|
|
||||||
/>
|
|
||||||
{I18NextService.i18n.t("unread")}
|
{I18NextService.i18n.t("unread")}
|
||||||
</label>
|
</label>
|
||||||
|
|
||||||
|
<input
|
||||||
|
id={`${radioId}-all`}
|
||||||
|
type="radio"
|
||||||
|
className="btn-check"
|
||||||
|
value={UnreadOrAll.All}
|
||||||
|
checked={this.state.unreadOrAll === UnreadOrAll.All}
|
||||||
|
onChange={linkEvent(this, this.handleUnreadOrAllChange)}
|
||||||
|
/>
|
||||||
<label
|
<label
|
||||||
className={`btn btn-outline-secondary pointer
|
htmlFor={`${radioId}-all`}
|
||||||
${this.state.unreadOrAll == UnreadOrAll.All && "active"}
|
className={classNames("btn btn-outline-secondary pointer", {
|
||||||
`}
|
active: this.state.unreadOrAll === UnreadOrAll.All,
|
||||||
|
})}
|
||||||
>
|
>
|
||||||
<input
|
|
||||||
type="radio"
|
|
||||||
className="btn-check"
|
|
||||||
value={UnreadOrAll.All}
|
|
||||||
checked={this.state.unreadOrAll == UnreadOrAll.All}
|
|
||||||
onChange={linkEvent(this, this.handleUnreadOrAllChange)}
|
|
||||||
/>
|
|
||||||
{I18NextService.i18n.t("all")}
|
{I18NextService.i18n.t("all")}
|
||||||
</label>
|
</label>
|
||||||
</div>
|
</div>
|
||||||
|
@ -318,62 +326,75 @@ export class Inbox extends Component<any, InboxState> {
|
||||||
}
|
}
|
||||||
|
|
||||||
messageTypeRadios() {
|
messageTypeRadios() {
|
||||||
|
const radioId = randomStr();
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<div className="btn-group btn-group-toggle flex-wrap">
|
<div className="btn-group btn-group-toggle flex-wrap" role="group">
|
||||||
|
<input
|
||||||
|
id={`${radioId}-all`}
|
||||||
|
type="radio"
|
||||||
|
className="btn-check"
|
||||||
|
value={MessageType.All}
|
||||||
|
checked={this.state.messageType === MessageType.All}
|
||||||
|
onChange={linkEvent(this, this.handleMessageTypeChange)}
|
||||||
|
/>
|
||||||
<label
|
<label
|
||||||
className={`btn btn-outline-secondary pointer
|
htmlFor={`${radioId}-all`}
|
||||||
${this.state.messageType == MessageType.All && "active"}
|
className={classNames("btn btn-outline-secondary pointer", {
|
||||||
`}
|
active: this.state.messageType === MessageType.All,
|
||||||
|
})}
|
||||||
>
|
>
|
||||||
<input
|
|
||||||
type="radio"
|
|
||||||
className="btn-check"
|
|
||||||
value={MessageType.All}
|
|
||||||
checked={this.state.messageType == MessageType.All}
|
|
||||||
onChange={linkEvent(this, this.handleMessageTypeChange)}
|
|
||||||
/>
|
|
||||||
{I18NextService.i18n.t("all")}
|
{I18NextService.i18n.t("all")}
|
||||||
</label>
|
</label>
|
||||||
|
|
||||||
|
<input
|
||||||
|
id={`${radioId}-replies`}
|
||||||
|
type="radio"
|
||||||
|
className="btn-check"
|
||||||
|
value={MessageType.Replies}
|
||||||
|
checked={this.state.messageType === MessageType.Replies}
|
||||||
|
onChange={linkEvent(this, this.handleMessageTypeChange)}
|
||||||
|
/>
|
||||||
<label
|
<label
|
||||||
className={`btn btn-outline-secondary pointer
|
htmlFor={`${radioId}-replies`}
|
||||||
${this.state.messageType == MessageType.Replies && "active"}
|
className={classNames("btn btn-outline-secondary pointer", {
|
||||||
`}
|
active: this.state.messageType === MessageType.Replies,
|
||||||
|
})}
|
||||||
>
|
>
|
||||||
<input
|
|
||||||
type="radio"
|
|
||||||
className="btn-check"
|
|
||||||
value={MessageType.Replies}
|
|
||||||
checked={this.state.messageType == MessageType.Replies}
|
|
||||||
onChange={linkEvent(this, this.handleMessageTypeChange)}
|
|
||||||
/>
|
|
||||||
{I18NextService.i18n.t("replies")}
|
{I18NextService.i18n.t("replies")}
|
||||||
</label>
|
</label>
|
||||||
|
|
||||||
|
<input
|
||||||
|
id={`${radioId}-mentions`}
|
||||||
|
type="radio"
|
||||||
|
className="btn-check"
|
||||||
|
value={MessageType.Mentions}
|
||||||
|
checked={this.state.messageType === MessageType.Mentions}
|
||||||
|
onChange={linkEvent(this, this.handleMessageTypeChange)}
|
||||||
|
/>
|
||||||
<label
|
<label
|
||||||
className={`btn btn-outline-secondary pointer
|
htmlFor={`${radioId}-mentions`}
|
||||||
${this.state.messageType == MessageType.Mentions && "active"}
|
className={classNames("btn btn-outline-secondary pointer", {
|
||||||
`}
|
active: this.state.messageType === MessageType.Mentions,
|
||||||
|
})}
|
||||||
>
|
>
|
||||||
<input
|
|
||||||
type="radio"
|
|
||||||
className="btn-check"
|
|
||||||
value={MessageType.Mentions}
|
|
||||||
checked={this.state.messageType == MessageType.Mentions}
|
|
||||||
onChange={linkEvent(this, this.handleMessageTypeChange)}
|
|
||||||
/>
|
|
||||||
{I18NextService.i18n.t("mentions")}
|
{I18NextService.i18n.t("mentions")}
|
||||||
</label>
|
</label>
|
||||||
|
|
||||||
|
<input
|
||||||
|
id={`${radioId}-messages`}
|
||||||
|
type="radio"
|
||||||
|
className="btn-check"
|
||||||
|
value={MessageType.Messages}
|
||||||
|
checked={this.state.messageType === MessageType.Messages}
|
||||||
|
onChange={linkEvent(this, this.handleMessageTypeChange)}
|
||||||
|
/>
|
||||||
<label
|
<label
|
||||||
className={`btn btn-outline-secondary pointer
|
htmlFor={`${radioId}-messages`}
|
||||||
${this.state.messageType == MessageType.Messages && "active"}
|
className={classNames("btn btn-outline-secondary pointer", {
|
||||||
`}
|
active: this.state.messageType === MessageType.Messages,
|
||||||
|
})}
|
||||||
>
|
>
|
||||||
<input
|
|
||||||
type="radio"
|
|
||||||
className="btn-check"
|
|
||||||
value={MessageType.Messages}
|
|
||||||
checked={this.state.messageType == MessageType.Messages}
|
|
||||||
onChange={linkEvent(this, this.handleMessageTypeChange)}
|
|
||||||
/>
|
|
||||||
{I18NextService.i18n.t("messages")}
|
{I18NextService.i18n.t("messages")}
|
||||||
</label>
|
</label>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
@ -18,6 +18,7 @@ import {
|
||||||
getQueryParams,
|
getQueryParams,
|
||||||
getQueryString,
|
getQueryString,
|
||||||
numToSI,
|
numToSI,
|
||||||
|
randomStr,
|
||||||
} from "@utils/helpers";
|
} from "@utils/helpers";
|
||||||
import { canMod, isAdmin, isBanned } from "@utils/roles";
|
import { canMod, isAdmin, isBanned } from "@utils/roles";
|
||||||
import type { QueryParams } from "@utils/types";
|
import type { QueryParams } from "@utils/types";
|
||||||
|
@ -397,7 +398,7 @@ export class Profile extends Component<
|
||||||
|
|
||||||
get viewRadios() {
|
get viewRadios() {
|
||||||
return (
|
return (
|
||||||
<div className="btn-group btn-group-toggle flex-wrap mb-2">
|
<div className="btn-group btn-group-toggle flex-wrap mb-2" role="group">
|
||||||
{this.getRadio(PersonDetailsView.Overview)}
|
{this.getRadio(PersonDetailsView.Overview)}
|
||||||
{this.getRadio(PersonDetailsView.Comments)}
|
{this.getRadio(PersonDetailsView.Comments)}
|
||||||
{this.getRadio(PersonDetailsView.Posts)}
|
{this.getRadio(PersonDetailsView.Posts)}
|
||||||
|
@ -409,22 +410,27 @@ export class Profile extends Component<
|
||||||
getRadio(view: PersonDetailsView) {
|
getRadio(view: PersonDetailsView) {
|
||||||
const { view: urlView } = getProfileQueryParams();
|
const { view: urlView } = getProfileQueryParams();
|
||||||
const active = view === urlView;
|
const active = view === urlView;
|
||||||
|
const radioId = randomStr();
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<label
|
<>
|
||||||
className={classNames("btn btn-outline-secondary pointer", {
|
|
||||||
active,
|
|
||||||
})}
|
|
||||||
>
|
|
||||||
<input
|
<input
|
||||||
|
id={radioId}
|
||||||
type="radio"
|
type="radio"
|
||||||
className="btn-check"
|
className="btn-check"
|
||||||
value={view}
|
value={view}
|
||||||
checked={active}
|
checked={active}
|
||||||
onChange={linkEvent(this, this.handleViewChange)}
|
onChange={linkEvent(this, this.handleViewChange)}
|
||||||
/>
|
/>
|
||||||
{I18NextService.i18n.t(view.toLowerCase() as NoOptionI18nKeys)}
|
<label
|
||||||
</label>
|
htmlFor={radioId}
|
||||||
|
className={classNames("btn btn-outline-secondary pointer", {
|
||||||
|
active,
|
||||||
|
})}
|
||||||
|
>
|
||||||
|
{I18NextService.i18n.t(view.toLowerCase() as NoOptionI18nKeys)}
|
||||||
|
</label>
|
||||||
|
</>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -3,7 +3,9 @@ import {
|
||||||
myAuthRequired,
|
myAuthRequired,
|
||||||
setIsoData,
|
setIsoData,
|
||||||
} from "@utils/app";
|
} from "@utils/app";
|
||||||
|
import { randomStr } from "@utils/helpers";
|
||||||
import { RouteDataResponse } from "@utils/types";
|
import { RouteDataResponse } from "@utils/types";
|
||||||
|
import classNames from "classnames";
|
||||||
import { Component, linkEvent } from "inferno";
|
import { Component, linkEvent } from "inferno";
|
||||||
import {
|
import {
|
||||||
ApproveRegistrationApplication,
|
ApproveRegistrationApplication,
|
||||||
|
@ -125,34 +127,41 @@ export class RegistrationApplications extends Component<
|
||||||
}
|
}
|
||||||
|
|
||||||
unreadOrAllRadios() {
|
unreadOrAllRadios() {
|
||||||
|
const radioId = randomStr();
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<div className="btn-group btn-group-toggle flex-wrap mb-2">
|
<div className="btn-group btn-group-toggle flex-wrap mb-2" role="group">
|
||||||
|
<input
|
||||||
|
id={`${radioId}-unread`}
|
||||||
|
type="radio"
|
||||||
|
className="btn-check"
|
||||||
|
value={UnreadOrAll.Unread}
|
||||||
|
checked={this.state.unreadOrAll === UnreadOrAll.Unread}
|
||||||
|
onChange={linkEvent(this, this.handleUnreadOrAllChange)}
|
||||||
|
/>
|
||||||
<label
|
<label
|
||||||
className={`btn btn-outline-secondary pointer
|
htmlFor={`${radioId}-unread`}
|
||||||
${this.state.unreadOrAll == UnreadOrAll.Unread && "active"}
|
className={classNames("btn btn-outline-secondary pointer", {
|
||||||
`}
|
active: this.state.unreadOrAll === UnreadOrAll.Unread,
|
||||||
|
})}
|
||||||
>
|
>
|
||||||
<input
|
|
||||||
type="radio"
|
|
||||||
className="btn-check"
|
|
||||||
value={UnreadOrAll.Unread}
|
|
||||||
checked={this.state.unreadOrAll == UnreadOrAll.Unread}
|
|
||||||
onChange={linkEvent(this, this.handleUnreadOrAllChange)}
|
|
||||||
/>
|
|
||||||
{I18NextService.i18n.t("unread")}
|
{I18NextService.i18n.t("unread")}
|
||||||
</label>
|
</label>
|
||||||
|
|
||||||
|
<input
|
||||||
|
id={`${radioId}-all`}
|
||||||
|
type="radio"
|
||||||
|
className="btn-check"
|
||||||
|
value={UnreadOrAll.All}
|
||||||
|
checked={this.state.unreadOrAll === UnreadOrAll.All}
|
||||||
|
onChange={linkEvent(this, this.handleUnreadOrAllChange)}
|
||||||
|
/>
|
||||||
<label
|
<label
|
||||||
className={`btn btn-outline-secondary pointer
|
htmlFor={`${radioId}-all`}
|
||||||
${this.state.unreadOrAll == UnreadOrAll.All && "active"}
|
className={classNames("btn btn-outline-secondary pointer", {
|
||||||
`}
|
active: this.state.unreadOrAll === UnreadOrAll.All,
|
||||||
|
})}
|
||||||
>
|
>
|
||||||
<input
|
|
||||||
type="radio"
|
|
||||||
className="btn-check"
|
|
||||||
value={UnreadOrAll.All}
|
|
||||||
checked={this.state.unreadOrAll == UnreadOrAll.All}
|
|
||||||
onChange={linkEvent(this, this.handleUnreadOrAllChange)}
|
|
||||||
/>
|
|
||||||
{I18NextService.i18n.t("all")}
|
{I18NextService.i18n.t("all")}
|
||||||
</label>
|
</label>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
@ -5,8 +5,10 @@ import {
|
||||||
myAuthRequired,
|
myAuthRequired,
|
||||||
setIsoData,
|
setIsoData,
|
||||||
} from "@utils/app";
|
} from "@utils/app";
|
||||||
|
import { randomStr } from "@utils/helpers";
|
||||||
import { amAdmin } from "@utils/roles";
|
import { amAdmin } from "@utils/roles";
|
||||||
import { RouteDataResponse } from "@utils/types";
|
import { RouteDataResponse } from "@utils/types";
|
||||||
|
import classNames from "classnames";
|
||||||
import { Component, linkEvent } from "inferno";
|
import { Component, linkEvent } from "inferno";
|
||||||
import {
|
import {
|
||||||
CommentReportResponse,
|
CommentReportResponse,
|
||||||
|
@ -187,34 +189,41 @@ export class Reports extends Component<any, ReportsState> {
|
||||||
}
|
}
|
||||||
|
|
||||||
unreadOrAllRadios() {
|
unreadOrAllRadios() {
|
||||||
|
const radioId = randomStr();
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<div className="btn-group btn-group-toggle flex-wrap mb-2">
|
<div className="btn-group btn-group-toggle flex-wrap mb-2" role="group">
|
||||||
|
<input
|
||||||
|
id={`${radioId}-unread`}
|
||||||
|
type="radio"
|
||||||
|
className="btn-check"
|
||||||
|
value={UnreadOrAll.Unread}
|
||||||
|
checked={this.state.unreadOrAll === UnreadOrAll.Unread}
|
||||||
|
onChange={linkEvent(this, this.handleUnreadOrAllChange)}
|
||||||
|
/>
|
||||||
<label
|
<label
|
||||||
className={`btn btn-outline-secondary pointer
|
htmlFor={`${radioId}-unread`}
|
||||||
${this.state.unreadOrAll == UnreadOrAll.Unread && "active"}
|
className={classNames("btn btn-outline-secondary pointer", {
|
||||||
`}
|
active: this.state.unreadOrAll === UnreadOrAll.Unread,
|
||||||
|
})}
|
||||||
>
|
>
|
||||||
<input
|
|
||||||
type="radio"
|
|
||||||
className="btn-check"
|
|
||||||
value={UnreadOrAll.Unread}
|
|
||||||
checked={this.state.unreadOrAll == UnreadOrAll.Unread}
|
|
||||||
onChange={linkEvent(this, this.handleUnreadOrAllChange)}
|
|
||||||
/>
|
|
||||||
{I18NextService.i18n.t("unread")}
|
{I18NextService.i18n.t("unread")}
|
||||||
</label>
|
</label>
|
||||||
|
|
||||||
|
<input
|
||||||
|
id={`${radioId}-all`}
|
||||||
|
type="radio"
|
||||||
|
className="btn-check"
|
||||||
|
value={UnreadOrAll.All}
|
||||||
|
checked={this.state.unreadOrAll === UnreadOrAll.All}
|
||||||
|
onChange={linkEvent(this, this.handleUnreadOrAllChange)}
|
||||||
|
/>
|
||||||
<label
|
<label
|
||||||
className={`btn btn-outline-secondary pointer
|
htmlFor={`${radioId}-all`}
|
||||||
${this.state.unreadOrAll == UnreadOrAll.All && "active"}
|
className={classNames("btn btn-outline-secondary pointer", {
|
||||||
`}
|
active: this.state.unreadOrAll === UnreadOrAll.All,
|
||||||
|
})}
|
||||||
>
|
>
|
||||||
<input
|
|
||||||
type="radio"
|
|
||||||
className="btn-check"
|
|
||||||
value={UnreadOrAll.All}
|
|
||||||
checked={this.state.unreadOrAll == UnreadOrAll.All}
|
|
||||||
onChange={linkEvent(this, this.handleUnreadOrAllChange)}
|
|
||||||
/>
|
|
||||||
{I18NextService.i18n.t("all")}
|
{I18NextService.i18n.t("all")}
|
||||||
</label>
|
</label>
|
||||||
</div>
|
</div>
|
||||||
|
@ -222,70 +231,83 @@ export class Reports extends Component<any, ReportsState> {
|
||||||
}
|
}
|
||||||
|
|
||||||
messageTypeRadios() {
|
messageTypeRadios() {
|
||||||
|
const radioId = randomStr();
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<div className="btn-group btn-group-toggle flex-wrap mb-2">
|
<div className="btn-group btn-group-toggle flex-wrap mb-2" role="group">
|
||||||
|
<input
|
||||||
|
id={`${radioId}-all`}
|
||||||
|
type="radio"
|
||||||
|
className="btn-check"
|
||||||
|
value={MessageType.All}
|
||||||
|
checked={this.state.messageType === MessageType.All}
|
||||||
|
onChange={linkEvent(this, this.handleMessageTypeChange)}
|
||||||
|
/>
|
||||||
<label
|
<label
|
||||||
className={`btn btn-outline-secondary pointer
|
htmlFor={`${radioId}-all`}
|
||||||
${this.state.messageType == MessageType.All && "active"}
|
className={classNames("btn btn-outline-secondary pointer", {
|
||||||
`}
|
active: this.state.messageType === MessageType.All,
|
||||||
|
})}
|
||||||
>
|
>
|
||||||
<input
|
|
||||||
type="radio"
|
|
||||||
className="btn-check"
|
|
||||||
value={MessageType.All}
|
|
||||||
checked={this.state.messageType == MessageType.All}
|
|
||||||
onChange={linkEvent(this, this.handleMessageTypeChange)}
|
|
||||||
/>
|
|
||||||
{I18NextService.i18n.t("all")}
|
{I18NextService.i18n.t("all")}
|
||||||
</label>
|
</label>
|
||||||
|
|
||||||
|
<input
|
||||||
|
id={`${radioId}-comments`}
|
||||||
|
type="radio"
|
||||||
|
className="btn-check"
|
||||||
|
value={MessageType.CommentReport}
|
||||||
|
checked={this.state.messageType === MessageType.CommentReport}
|
||||||
|
onChange={linkEvent(this, this.handleMessageTypeChange)}
|
||||||
|
/>
|
||||||
<label
|
<label
|
||||||
className={`btn btn-outline-secondary pointer
|
htmlFor={`${radioId}-comments`}
|
||||||
${this.state.messageType == MessageType.CommentReport && "active"}
|
className={classNames("btn btn-outline-secondary pointer", {
|
||||||
`}
|
active: this.state.messageType === MessageType.CommentReport,
|
||||||
|
})}
|
||||||
>
|
>
|
||||||
<input
|
|
||||||
type="radio"
|
|
||||||
className="btn-check"
|
|
||||||
value={MessageType.CommentReport}
|
|
||||||
checked={this.state.messageType == MessageType.CommentReport}
|
|
||||||
onChange={linkEvent(this, this.handleMessageTypeChange)}
|
|
||||||
/>
|
|
||||||
{I18NextService.i18n.t("comments")}
|
{I18NextService.i18n.t("comments")}
|
||||||
</label>
|
</label>
|
||||||
|
|
||||||
|
<input
|
||||||
|
id={`${radioId}-posts`}
|
||||||
|
type="radio"
|
||||||
|
className="btn-check"
|
||||||
|
value={MessageType.PostReport}
|
||||||
|
checked={this.state.messageType === MessageType.PostReport}
|
||||||
|
onChange={linkEvent(this, this.handleMessageTypeChange)}
|
||||||
|
/>
|
||||||
<label
|
<label
|
||||||
className={`btn btn-outline-secondary pointer
|
htmlFor={`${radioId}-posts`}
|
||||||
${this.state.messageType == MessageType.PostReport && "active"}
|
className={classNames("btn btn-outline-secondary pointer", {
|
||||||
`}
|
active: this.state.messageType === MessageType.PostReport,
|
||||||
|
})}
|
||||||
>
|
>
|
||||||
<input
|
|
||||||
type="radio"
|
|
||||||
className="btn-check"
|
|
||||||
value={MessageType.PostReport}
|
|
||||||
checked={this.state.messageType == MessageType.PostReport}
|
|
||||||
onChange={linkEvent(this, this.handleMessageTypeChange)}
|
|
||||||
/>
|
|
||||||
{I18NextService.i18n.t("posts")}
|
{I18NextService.i18n.t("posts")}
|
||||||
</label>
|
</label>
|
||||||
|
|
||||||
{amAdmin() && (
|
{amAdmin() && (
|
||||||
<label
|
<>
|
||||||
className={`btn btn-outline-secondary pointer
|
|
||||||
${
|
|
||||||
this.state.messageType == MessageType.PrivateMessageReport &&
|
|
||||||
"active"
|
|
||||||
}
|
|
||||||
`}
|
|
||||||
>
|
|
||||||
<input
|
<input
|
||||||
|
id={`${radioId}-messages`}
|
||||||
type="radio"
|
type="radio"
|
||||||
className="btn-check"
|
className="btn-check"
|
||||||
value={MessageType.PrivateMessageReport}
|
value={MessageType.PrivateMessageReport}
|
||||||
checked={
|
checked={
|
||||||
this.state.messageType == MessageType.PrivateMessageReport
|
this.state.messageType === MessageType.PrivateMessageReport
|
||||||
}
|
}
|
||||||
onChange={linkEvent(this, this.handleMessageTypeChange)}
|
onChange={linkEvent(this, this.handleMessageTypeChange)}
|
||||||
/>
|
/>
|
||||||
{I18NextService.i18n.t("messages")}
|
<label
|
||||||
</label>
|
htmlFor={`${radioId}-messages`}
|
||||||
|
className={classNames("btn btn-outline-secondary pointer", {
|
||||||
|
active:
|
||||||
|
this.state.messageType === MessageType.PrivateMessageReport,
|
||||||
|
})}
|
||||||
|
>
|
||||||
|
{I18NextService.i18n.t("messages")}
|
||||||
|
</label>
|
||||||
|
</>
|
||||||
)}
|
)}
|
||||||
</div>
|
</div>
|
||||||
);
|
);
|
||||||
|
|
|
@ -19,10 +19,11 @@ import {
|
||||||
restoreScrollPosition,
|
restoreScrollPosition,
|
||||||
saveScrollPosition,
|
saveScrollPosition,
|
||||||
} from "@utils/browser";
|
} from "@utils/browser";
|
||||||
import { debounce } from "@utils/helpers";
|
import { debounce, randomStr } from "@utils/helpers";
|
||||||
import { isImage } from "@utils/media";
|
import { isImage } from "@utils/media";
|
||||||
import { RouteDataResponse } from "@utils/types";
|
import { RouteDataResponse } from "@utils/types";
|
||||||
import autosize from "autosize";
|
import autosize from "autosize";
|
||||||
|
import classNames from "classnames";
|
||||||
import { Component, RefObject, createRef, linkEvent } from "inferno";
|
import { Component, RefObject, createRef, linkEvent } from "inferno";
|
||||||
import {
|
import {
|
||||||
AddAdmin,
|
AddAdmin,
|
||||||
|
@ -430,80 +431,98 @@ export class Post extends Component<any, PostState> {
|
||||||
}
|
}
|
||||||
|
|
||||||
sortRadios() {
|
sortRadios() {
|
||||||
|
const radioId =
|
||||||
|
this.state.postRes.state === "success"
|
||||||
|
? this.state.postRes.data.post_view.post.id
|
||||||
|
: randomStr();
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<>
|
<>
|
||||||
<div className="btn-group btn-group-toggle flex-wrap me-3 mb-2">
|
<div
|
||||||
|
className="btn-group btn-group-toggle flex-wrap me-3 mb-2"
|
||||||
|
role="group"
|
||||||
|
>
|
||||||
|
<input
|
||||||
|
id={`${radioId}-hot`}
|
||||||
|
type="radio"
|
||||||
|
className="btn-check"
|
||||||
|
value={"Hot"}
|
||||||
|
checked={this.state.commentSort === "Hot"}
|
||||||
|
onChange={linkEvent(this, this.handleCommentSortChange)}
|
||||||
|
/>
|
||||||
<label
|
<label
|
||||||
className={`btn btn-outline-secondary pointer ${
|
htmlFor={`${radioId}-hot`}
|
||||||
this.state.commentSort === "Hot" && "active"
|
className={classNames("btn btn-outline-secondary pointer", {
|
||||||
}`}
|
active: this.state.commentSort === "Hot",
|
||||||
|
})}
|
||||||
>
|
>
|
||||||
{I18NextService.i18n.t("hot")}
|
{I18NextService.i18n.t("hot")}
|
||||||
<input
|
|
||||||
type="radio"
|
|
||||||
className="btn-check"
|
|
||||||
value={"Hot"}
|
|
||||||
checked={this.state.commentSort === "Hot"}
|
|
||||||
onChange={linkEvent(this, this.handleCommentSortChange)}
|
|
||||||
/>
|
|
||||||
</label>
|
</label>
|
||||||
|
<input
|
||||||
|
id={`${radioId}-top`}
|
||||||
|
type="radio"
|
||||||
|
className="btn-check"
|
||||||
|
value={"Top"}
|
||||||
|
checked={this.state.commentSort === "Top"}
|
||||||
|
onChange={linkEvent(this, this.handleCommentSortChange)}
|
||||||
|
/>
|
||||||
<label
|
<label
|
||||||
className={`btn btn-outline-secondary pointer ${
|
htmlFor={`${radioId}-top`}
|
||||||
this.state.commentSort === "Top" && "active"
|
className={classNames("btn btn-outline-secondary pointer", {
|
||||||
}`}
|
active: this.state.commentSort === "Top",
|
||||||
|
})}
|
||||||
>
|
>
|
||||||
{I18NextService.i18n.t("top")}
|
{I18NextService.i18n.t("top")}
|
||||||
<input
|
|
||||||
type="radio"
|
|
||||||
className="btn-check"
|
|
||||||
value={"Top"}
|
|
||||||
checked={this.state.commentSort === "Top"}
|
|
||||||
onChange={linkEvent(this, this.handleCommentSortChange)}
|
|
||||||
/>
|
|
||||||
</label>
|
</label>
|
||||||
|
<input
|
||||||
|
id={`${radioId}-new`}
|
||||||
|
type="radio"
|
||||||
|
className="btn-check"
|
||||||
|
value={"New"}
|
||||||
|
checked={this.state.commentSort === "New"}
|
||||||
|
onChange={linkEvent(this, this.handleCommentSortChange)}
|
||||||
|
/>
|
||||||
<label
|
<label
|
||||||
className={`btn btn-outline-secondary pointer ${
|
htmlFor={`${radioId}-new`}
|
||||||
this.state.commentSort === "New" && "active"
|
className={classNames("btn btn-outline-secondary pointer", {
|
||||||
}`}
|
active: this.state.commentSort === "New",
|
||||||
|
})}
|
||||||
>
|
>
|
||||||
{I18NextService.i18n.t("new")}
|
{I18NextService.i18n.t("new")}
|
||||||
<input
|
|
||||||
type="radio"
|
|
||||||
className="btn-check"
|
|
||||||
value={"New"}
|
|
||||||
checked={this.state.commentSort === "New"}
|
|
||||||
onChange={linkEvent(this, this.handleCommentSortChange)}
|
|
||||||
/>
|
|
||||||
</label>
|
</label>
|
||||||
|
<input
|
||||||
|
id={`${radioId}-old`}
|
||||||
|
type="radio"
|
||||||
|
className="btn-check"
|
||||||
|
value={"Old"}
|
||||||
|
checked={this.state.commentSort === "Old"}
|
||||||
|
onChange={linkEvent(this, this.handleCommentSortChange)}
|
||||||
|
/>
|
||||||
<label
|
<label
|
||||||
className={`btn btn-outline-secondary pointer ${
|
htmlFor={`${radioId}-old`}
|
||||||
this.state.commentSort === "Old" && "active"
|
className={classNames("btn btn-outline-secondary pointer", {
|
||||||
}`}
|
active: this.state.commentSort === "Old",
|
||||||
|
})}
|
||||||
>
|
>
|
||||||
{I18NextService.i18n.t("old")}
|
{I18NextService.i18n.t("old")}
|
||||||
<input
|
|
||||||
type="radio"
|
|
||||||
className="btn-check"
|
|
||||||
value={"Old"}
|
|
||||||
checked={this.state.commentSort === "Old"}
|
|
||||||
onChange={linkEvent(this, this.handleCommentSortChange)}
|
|
||||||
/>
|
|
||||||
</label>
|
</label>
|
||||||
</div>
|
</div>
|
||||||
<div className="btn-group btn-group-toggle flex-wrap mb-2">
|
<div className="btn-group btn-group-toggle flex-wrap mb-2" role="group">
|
||||||
|
<input
|
||||||
|
id={`${radioId}-chat`}
|
||||||
|
type="radio"
|
||||||
|
className="btn-check"
|
||||||
|
value={CommentViewType.Flat}
|
||||||
|
checked={this.state.commentViewType === CommentViewType.Flat}
|
||||||
|
onChange={linkEvent(this, this.handleCommentViewTypeChange)}
|
||||||
|
/>
|
||||||
<label
|
<label
|
||||||
className={`btn btn-outline-secondary pointer ${
|
htmlFor={`${radioId}-chat`}
|
||||||
this.state.commentViewType === CommentViewType.Flat && "active"
|
className={classNames("btn btn-outline-secondary pointer", {
|
||||||
}`}
|
active: this.state.commentViewType === CommentViewType.Flat,
|
||||||
|
})}
|
||||||
>
|
>
|
||||||
{I18NextService.i18n.t("chat")}
|
{I18NextService.i18n.t("chat")}
|
||||||
<input
|
|
||||||
type="radio"
|
|
||||||
className="btn-check"
|
|
||||||
value={CommentViewType.Flat}
|
|
||||||
checked={this.state.commentViewType === CommentViewType.Flat}
|
|
||||||
onChange={linkEvent(this, this.handleCommentViewTypeChange)}
|
|
||||||
/>
|
|
||||||
</label>
|
</label>
|
||||||
</div>
|
</div>
|
||||||
</>
|
</>
|
||||||
|
|
Loading…
Reference in a new issue