mirror of
https://github.com/LemmyNet/lemmy-ui.git
synced 2024-12-22 19:01:26 +00:00
Upgrading deps, running prettier. (#1987)
This commit is contained in:
parent
dd42bc2a3d
commit
9f2289d466
108 changed files with 891 additions and 854 deletions
41
package.json
41
package.json
|
@ -35,16 +35,16 @@
|
|||
},
|
||||
"dependencies": {
|
||||
"@babel/plugin-proposal-decorators": "^7.21.0",
|
||||
"@babel/plugin-transform-runtime": "^7.21.4",
|
||||
"@babel/plugin-transform-typescript": "^7.21.3",
|
||||
"@babel/preset-env": "7.21.5",
|
||||
"@babel/plugin-transform-runtime": "^7.22.9",
|
||||
"@babel/plugin-transform-typescript": "^7.22.9",
|
||||
"@babel/preset-env": "7.22.9",
|
||||
"@babel/preset-typescript": "^7.21.5",
|
||||
"@babel/runtime": "^7.21.5",
|
||||
"@emoji-mart/data": "^1.1.0",
|
||||
"autosize": "^6.0.1",
|
||||
"babel-loader": "^9.1.2",
|
||||
"babel-plugin-inferno": "^6.6.0",
|
||||
"bootstrap": "^5.2.3",
|
||||
"bootstrap": "^5.3.1",
|
||||
"check-password-strength": "^2.0.7",
|
||||
"classnames": "^2.3.1",
|
||||
"clean-webpack-plugin": "^4.0.0",
|
||||
|
@ -58,7 +58,7 @@
|
|||
"express": "~4.18.2",
|
||||
"history": "^5.3.0",
|
||||
"html-to-text": "^9.0.5",
|
||||
"i18next": "^23.2.8",
|
||||
"i18next": "^23.3.0",
|
||||
"inferno": "^8.2.2",
|
||||
"inferno-create-element": "^8.2.2",
|
||||
"inferno-helmet": "^5.2.1",
|
||||
|
@ -81,20 +81,21 @@
|
|||
"register-service-worker": "^1.7.2",
|
||||
"run-node-webpack-plugin": "^1.3.0",
|
||||
"sanitize-html": "^2.11.0",
|
||||
"sass": "^1.63.6",
|
||||
"sass": "^1.64.1",
|
||||
"sass-loader": "^13.3.2",
|
||||
"serialize-javascript": "^6.0.1",
|
||||
"service-worker-webpack": "^1.0.0",
|
||||
"sharp": "^0.32.1",
|
||||
"sharp": "^0.32.4",
|
||||
"tippy.js": "^6.3.7",
|
||||
"toastify-js": "^1.12.0",
|
||||
"tributejs": "^5.1.3",
|
||||
"webpack": "5.88.1",
|
||||
"webpack": "5.88.2",
|
||||
"webpack-cli": "^5.1.4",
|
||||
"webpack-node-externals": "^3.0.0"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@babel/core": "^7.21.8",
|
||||
"@babel/core": "^7.22.9",
|
||||
"@babel/plugin-proposal-class-properties": "^7.18.6",
|
||||
"@types/autosize": "^4.0.0",
|
||||
"@types/bootstrap": "^5.2.6",
|
||||
"@types/cookie": "^0.5.1",
|
||||
|
@ -102,29 +103,29 @@
|
|||
"@types/html-to-text": "^9.0.0",
|
||||
"@types/lodash.isequal": "^4.5.6",
|
||||
"@types/markdown-it": "^12.2.3",
|
||||
"@types/markdown-it-container": "^2.0.5",
|
||||
"@types/node": "^20.4.0",
|
||||
"@types/markdown-it-container": "^2.0.6",
|
||||
"@types/node": "^20.4.5",
|
||||
"@types/path-browserify": "^1.0.0",
|
||||
"@types/sanitize-html": "^2.9.0",
|
||||
"@types/serialize-javascript": "^5.0.1",
|
||||
"@types/toastify-js": "^1.11.1",
|
||||
"@typescript-eslint/eslint-plugin": "^5.61.0",
|
||||
"@typescript-eslint/parser": "^5.61.0",
|
||||
"eslint": "^8.44.0",
|
||||
"@types/toastify-js": "^1.12.0",
|
||||
"@typescript-eslint/eslint-plugin": "^6.2.0",
|
||||
"@typescript-eslint/parser": "^6.2.0",
|
||||
"eslint": "^8.45.0",
|
||||
"eslint-plugin-inferno": "^7.32.2",
|
||||
"eslint-plugin-jsx-a11y": "^6.7.1",
|
||||
"eslint-plugin-prettier": "^4.2.1",
|
||||
"eslint-plugin-prettier": "^5.0.0",
|
||||
"husky": "^8.0.3",
|
||||
"import-sort-style-module": "^6.0.0",
|
||||
"lint-staged": "^13.2.3",
|
||||
"prettier": "^2.8.8",
|
||||
"prettier": "^3.0.0",
|
||||
"prettier-plugin-import-sort": "^0.0.7",
|
||||
"prettier-plugin-organize-imports": "^3.2.2",
|
||||
"prettier-plugin-packagejson": "^2.4.4",
|
||||
"prettier-plugin-organize-imports": "^3.2.3",
|
||||
"prettier-plugin-packagejson": "^2.4.5",
|
||||
"rimraf": "^5.0.0",
|
||||
"sortpack": "^2.3.4",
|
||||
"style-loader": "^3.3.2",
|
||||
"terser": "^5.18.2",
|
||||
"terser": "^5.19.2",
|
||||
"typescript": "^5.1.6",
|
||||
"typescript-language-server": "^3.3.2",
|
||||
"webpack-bundle-analyzer": "^4.9.0",
|
||||
|
|
|
@ -30,9 +30,18 @@ $mark-bg: $gray-900;
|
|||
$text-muted: $gray-600;
|
||||
$yiq-contrasted-threshold: 175;
|
||||
|
||||
$font-family-sans-serif: "Lato", -apple-system, BlinkMacSystemFont, "Segoe UI",
|
||||
Roboto, "Helvetica Neue", Arial, sans-serif, "Apple Color Emoji",
|
||||
"Segoe UI Emoji", "Segoe UI Symbol";
|
||||
$font-family-sans-serif:
|
||||
"Lato",
|
||||
-apple-system,
|
||||
BlinkMacSystemFont,
|
||||
"Segoe UI",
|
||||
Roboto,
|
||||
"Helvetica Neue",
|
||||
Arial,
|
||||
sans-serif,
|
||||
"Apple Color Emoji",
|
||||
"Segoe UI Emoji",
|
||||
"Segoe UI Symbol";
|
||||
$font-size-base: 0.9375rem;
|
||||
$h1-font-size: 3rem;
|
||||
$h2-font-size: 2.5rem;
|
||||
|
|
|
@ -29,9 +29,18 @@ $mark-bg: #333;
|
|||
$text-muted: $gray-600;
|
||||
$yiq-contrasted-threshold: 175;
|
||||
|
||||
$font-family-sans-serif: "Lato", -apple-system, BlinkMacSystemFont, "Segoe UI",
|
||||
Roboto, "Helvetica Neue", Arial, sans-serif, "Apple Color Emoji",
|
||||
"Segoe UI Emoji", "Segoe UI Symbol";
|
||||
$font-family-sans-serif:
|
||||
"Lato",
|
||||
-apple-system,
|
||||
BlinkMacSystemFont,
|
||||
"Segoe UI",
|
||||
Roboto,
|
||||
"Helvetica Neue",
|
||||
Arial,
|
||||
sans-serif,
|
||||
"Apple Color Emoji",
|
||||
"Segoe UI Emoji",
|
||||
"Segoe UI Symbol";
|
||||
$h1-font-size: 3rem;
|
||||
$h2-font-size: 2.5rem;
|
||||
$h3-font-size: 2rem;
|
||||
|
|
|
@ -23,8 +23,11 @@ option:disabled {
|
|||
}
|
||||
|
||||
.form-control::placeholder {
|
||||
text-shadow: 0.5px 0.5px 0 $secondary, 0.5px -0.5px 0 $secondary,
|
||||
-0.5px 0.5px 0 $secondary, -0.5px -0.5px 0 $secondary;
|
||||
text-shadow:
|
||||
0.5px 0.5px 0 $secondary,
|
||||
0.5px -0.5px 0 $secondary,
|
||||
-0.5px 0.5px 0 $secondary,
|
||||
-0.5px -0.5px 0 $secondary;
|
||||
}
|
||||
|
||||
.input-group-text {
|
||||
|
|
|
@ -35,7 +35,7 @@ export default async (req: Request, res: Response) => {
|
|||
const headers = setForwardedHeaders(req.headers);
|
||||
|
||||
const client = wrapClient(
|
||||
new LemmyHttp(getHttpBaseInternal(), { fetchFunction: fetch, headers })
|
||||
new LemmyHttp(getHttpBaseInternal(), { fetchFunction: fetch, headers }),
|
||||
);
|
||||
|
||||
const { path, url, query } = req;
|
||||
|
@ -50,7 +50,7 @@ export default async (req: Request, res: Response) => {
|
|||
|
||||
if (try_site.state === "failed" && try_site.msg === "not_logged_in") {
|
||||
console.error(
|
||||
"Incorrect JWT token, skipping auth so frontend can remove jwt cookie"
|
||||
"Incorrect JWT token, skipping auth so frontend can remove jwt cookie",
|
||||
);
|
||||
getSiteForm.auth = undefined;
|
||||
auth = undefined;
|
||||
|
@ -90,7 +90,7 @@ export default async (req: Request, res: Response) => {
|
|||
}
|
||||
|
||||
const error = Object.values(routeData).find(
|
||||
res => res.state === "failed" && res.msg !== "couldnt_find_object" // TODO: find a better way of handling errors
|
||||
res => res.state === "failed" && res.msg !== "couldnt_find_object", // TODO: find a better way of handling errors
|
||||
) as FailedRequestState | undefined;
|
||||
|
||||
// Redirect to the 404 if there's an API error
|
||||
|
@ -127,7 +127,7 @@ export default async (req: Request, res: Response) => {
|
|||
res.statusCode = 500;
|
||||
|
||||
return res.send(
|
||||
process.env.NODE_ENV === "development" ? err.message : "Server error"
|
||||
process.env.NODE_ENV === "development" ? err.message : "Server error",
|
||||
);
|
||||
}
|
||||
};
|
||||
|
|
|
@ -13,7 +13,7 @@ export default async (req: Request, res: Response) => {
|
|||
if (!manifest || manifest.start_url !== getHttpBaseExternal()) {
|
||||
const headers = setForwardedHeaders(req.headers);
|
||||
const client = wrapClient(
|
||||
new LemmyHttp(getHttpBaseInternal(), { fetchFunction: fetch, headers })
|
||||
new LemmyHttp(getHttpBaseInternal(), { fetchFunction: fetch, headers }),
|
||||
);
|
||||
const site = await client.getSite({});
|
||||
|
||||
|
|
|
@ -12,6 +12,6 @@ export default async ({ res }: { res: Response }) => {
|
|||
process.env.LEMMY_UI_LEMMY_EXTERNAL_HOST +
|
||||
`
|
||||
Expires: 2024-01-01T04:59:00.000Z
|
||||
`
|
||||
`,
|
||||
);
|
||||
};
|
||||
|
|
|
@ -8,7 +8,7 @@ export default async ({ res }: { res: Response }) => {
|
|||
path.resolve(
|
||||
`./dist/service-worker${
|
||||
process.env.NODE_ENV === "development" ? "-development" : ""
|
||||
}.js`
|
||||
)
|
||||
}.js`,
|
||||
),
|
||||
);
|
||||
};
|
||||
|
|
|
@ -25,7 +25,7 @@ server.use(
|
|||
express.static(path.resolve("./dist"), {
|
||||
maxAge: 24 * 60 * 60 * 1000, // 1 day
|
||||
immutable: true,
|
||||
})
|
||||
}),
|
||||
);
|
||||
server.use(setCacheControl);
|
||||
|
||||
|
|
|
@ -22,7 +22,7 @@ export function setDefaultCsp({
|
|||
form-action 'self';
|
||||
base-uri 'self';
|
||||
frame-src *;
|
||||
media-src * data:`.replace(/\s+/g, " ")
|
||||
media-src * data:`.replace(/\s+/g, " "),
|
||||
);
|
||||
|
||||
next();
|
||||
|
@ -37,7 +37,7 @@ export function setDefaultCsp({
|
|||
export function setCacheControl(
|
||||
req: Request,
|
||||
res: Response,
|
||||
next: NextFunction
|
||||
next: NextFunction,
|
||||
) {
|
||||
if (process.env.NODE_ENV !== "production") {
|
||||
return next();
|
||||
|
|
|
@ -15,7 +15,7 @@ let appleTouchIcon: string | undefined = undefined;
|
|||
export async function createSsrHtml(
|
||||
root: string,
|
||||
isoData: IsoDataOptionalSite,
|
||||
cspNonce: string
|
||||
cspNonce: string,
|
||||
) {
|
||||
const site = isoData.site_res;
|
||||
|
||||
|
@ -26,13 +26,13 @@ export async function createSsrHtml(
|
|||
const customHtmlHeaderScriptTag = new RegExp("<script", "g");
|
||||
const customHtmlHeaderWithNonce = customHtmlHeader.replace(
|
||||
customHtmlHeaderScriptTag,
|
||||
`<script nonce="${cspNonce}"`
|
||||
`<script nonce="${cspNonce}"`,
|
||||
);
|
||||
|
||||
if (!appleTouchIcon) {
|
||||
appleTouchIcon = site?.site_view.site.icon
|
||||
? `data:image/png;base64,${await sharp(
|
||||
await fetchIconPng(site.site_view.site.icon)
|
||||
await fetchIconPng(site.site_view.site.icon),
|
||||
)
|
||||
.resize(180, 180)
|
||||
.extend({
|
||||
|
@ -57,7 +57,7 @@ export async function createSsrHtml(
|
|||
src="//cdn.jsdelivr.net/npm/eruda"
|
||||
></script>
|
||||
<script nonce={cspNonce}>eruda.init();</script>
|
||||
</>
|
||||
</>,
|
||||
)
|
||||
: "";
|
||||
|
||||
|
|
|
@ -10,7 +10,7 @@ const defaultLogoPathDirectory = path.join(
|
|||
process.cwd(),
|
||||
"dist",
|
||||
"assets",
|
||||
"icons"
|
||||
"icons",
|
||||
);
|
||||
|
||||
export default async function ({
|
||||
|
@ -34,7 +34,7 @@ export default async function ({
|
|||
icons: await Promise.all(
|
||||
iconSizes.map(async size => {
|
||||
let src = await readFile(
|
||||
path.join(defaultLogoPathDirectory, `icon-${size}x${size}.png`)
|
||||
path.join(defaultLogoPathDirectory, `icon-${size}x${size}.png`),
|
||||
).then(buf => buf.toString("base64"));
|
||||
|
||||
if (icon) {
|
||||
|
@ -51,7 +51,7 @@ export default async function ({
|
|||
src: `data:image/png;base64,${src}`,
|
||||
purpose: "any maskable",
|
||||
};
|
||||
})
|
||||
}),
|
||||
),
|
||||
shortcuts: [
|
||||
{
|
||||
|
@ -82,7 +82,7 @@ export default async function ({
|
|||
description: "Create a community",
|
||||
},
|
||||
]
|
||||
: []
|
||||
: [],
|
||||
),
|
||||
related_applications: [
|
||||
{
|
||||
|
|
|
@ -86,7 +86,7 @@ export class App extends Component<AppProps, any> {
|
|||
);
|
||||
}}
|
||||
/>
|
||||
)
|
||||
),
|
||||
)}
|
||||
<Route component={ErrorPage} />
|
||||
</Switch>
|
||||
|
|
|
@ -146,7 +146,7 @@ export class Navbar extends Component<NavbarProps, NavbarState> {
|
|||
{
|
||||
count: Number(this.unreadApplicationCount),
|
||||
formattedCount: numToSI(this.unreadApplicationCount),
|
||||
}
|
||||
},
|
||||
)}
|
||||
onMouseUp={linkEvent(this, handleCollapseClick)}
|
||||
>
|
||||
|
@ -323,9 +323,9 @@ export class Navbar extends Component<NavbarProps, NavbarState> {
|
|||
{
|
||||
count: Number(this.unreadApplicationCount),
|
||||
formattedCount: numToSI(
|
||||
this.unreadApplicationCount
|
||||
this.unreadApplicationCount,
|
||||
),
|
||||
}
|
||||
},
|
||||
)}
|
||||
onMouseUp={linkEvent(this, handleCollapseClick)}
|
||||
>
|
||||
|
@ -336,9 +336,9 @@ export class Navbar extends Component<NavbarProps, NavbarState> {
|
|||
{
|
||||
count: Number(this.unreadApplicationCount),
|
||||
formattedCount: numToSI(
|
||||
this.unreadApplicationCount
|
||||
this.unreadApplicationCount,
|
||||
),
|
||||
}
|
||||
},
|
||||
)}
|
||||
</span>
|
||||
{this.unreadApplicationCount > 0 && (
|
||||
|
|
|
@ -43,7 +43,7 @@ export class CommentForm extends Component<CommentFormProps, any> {
|
|||
return (
|
||||
<div
|
||||
className={["comment-form", "mb-3", this.props.containerClass].join(
|
||||
" "
|
||||
" ",
|
||||
)}
|
||||
>
|
||||
{UserService.Instance.myUserInfo ? (
|
||||
|
|
|
@ -198,7 +198,7 @@ export class CommentNode extends Component<CommentNodeProps, CommentNodeState> {
|
|||
}
|
||||
|
||||
componentWillReceiveProps(
|
||||
nextProps: Readonly<{ children?: InfernoNode } & CommentNodeProps>
|
||||
nextProps: Readonly<{ children?: InfernoNode } & CommentNodeProps>,
|
||||
): void {
|
||||
if (!deepEqual(this.props, nextProps)) {
|
||||
this.setState({
|
||||
|
@ -250,27 +250,27 @@ export class CommentNode extends Component<CommentNodeProps, CommentNodeState> {
|
|||
const canMod_ = canMod(
|
||||
cv.creator.id,
|
||||
this.props.moderators,
|
||||
this.props.admins
|
||||
this.props.admins,
|
||||
);
|
||||
const canModOnSelf = canMod(
|
||||
cv.creator.id,
|
||||
this.props.moderators,
|
||||
this.props.admins,
|
||||
UserService.Instance.myUserInfo,
|
||||
true
|
||||
true,
|
||||
);
|
||||
const canAdmin_ = canAdmin(cv.creator.id, this.props.admins);
|
||||
const canAdminOnSelf = canAdmin(
|
||||
cv.creator.id,
|
||||
this.props.admins,
|
||||
UserService.Instance.myUserInfo,
|
||||
true
|
||||
true,
|
||||
);
|
||||
const isMod_ = isMod(cv.creator.id, this.props.moderators);
|
||||
const isAdmin_ = isAdmin(cv.creator.id, this.props.admins);
|
||||
const amCommunityCreator_ = amCommunityCreator(
|
||||
cv.creator.id,
|
||||
this.props.moderators
|
||||
this.props.moderators,
|
||||
);
|
||||
|
||||
const moreRepliesBorderColor = this.props.node.depth
|
||||
|
@ -337,7 +337,7 @@ export class CommentNode extends Component<CommentNodeProps, CommentNodeState> {
|
|||
<span className="badge text-bg-light d-none d-sm-inline me-2">
|
||||
{
|
||||
this.props.allLanguages.find(
|
||||
lang => lang.id === cv.comment.language_id
|
||||
lang => lang.id === cv.comment.language_id,
|
||||
)?.name
|
||||
}
|
||||
</span>
|
||||
|
@ -374,7 +374,7 @@ export class CommentNode extends Component<CommentNodeProps, CommentNodeState> {
|
|||
onReplyCancel={this.handleReplyCancel}
|
||||
disabled={this.props.locked}
|
||||
finished={this.props.finished.get(
|
||||
this.props.node.comment_view.comment.id
|
||||
this.props.node.comment_view.comment.id,
|
||||
)}
|
||||
focus
|
||||
allLanguages={this.props.allLanguages}
|
||||
|
@ -472,13 +472,13 @@ export class CommentNode extends Component<CommentNodeProps, CommentNodeState> {
|
|||
className="btn btn-link btn-animate text-muted"
|
||||
onClick={linkEvent(
|
||||
this,
|
||||
this.handleShowReportDialog
|
||||
this.handleShowReportDialog,
|
||||
)}
|
||||
data-tippy-content={I18NextService.i18n.t(
|
||||
"show_report_dialog"
|
||||
"show_report_dialog",
|
||||
)}
|
||||
aria-label={I18NextService.i18n.t(
|
||||
"show_report_dialog"
|
||||
"show_report_dialog",
|
||||
)}
|
||||
>
|
||||
<Icon icon="flag" />
|
||||
|
@ -487,10 +487,10 @@ export class CommentNode extends Component<CommentNodeProps, CommentNodeState> {
|
|||
className="btn btn-link btn-animate text-muted"
|
||||
onClick={linkEvent(
|
||||
this,
|
||||
this.handleBlockPerson
|
||||
this.handleBlockPerson,
|
||||
)}
|
||||
data-tippy-content={I18NextService.i18n.t(
|
||||
"block_user"
|
||||
"block_user",
|
||||
)}
|
||||
aria-label={I18NextService.i18n.t("block_user")}
|
||||
>
|
||||
|
@ -531,7 +531,7 @@ export class CommentNode extends Component<CommentNodeProps, CommentNodeState> {
|
|||
className="btn btn-link btn-animate text-muted"
|
||||
onClick={linkEvent(this, this.handleViewSource)}
|
||||
data-tippy-content={I18NextService.i18n.t(
|
||||
"view_source"
|
||||
"view_source",
|
||||
)}
|
||||
aria-label={I18NextService.i18n.t("view_source")}
|
||||
>
|
||||
|
@ -548,7 +548,7 @@ export class CommentNode extends Component<CommentNodeProps, CommentNodeState> {
|
|||
className="btn btn-link btn-animate text-muted"
|
||||
onClick={linkEvent(this, this.handleEditClick)}
|
||||
data-tippy-content={I18NextService.i18n.t(
|
||||
"edit"
|
||||
"edit",
|
||||
)}
|
||||
aria-label={I18NextService.i18n.t("edit")}
|
||||
>
|
||||
|
@ -558,7 +558,7 @@ export class CommentNode extends Component<CommentNodeProps, CommentNodeState> {
|
|||
className="btn btn-link btn-animate text-muted"
|
||||
onClick={linkEvent(
|
||||
this,
|
||||
this.handleDeleteComment
|
||||
this.handleDeleteComment,
|
||||
)}
|
||||
data-tippy-content={
|
||||
!cv.comment.deleted
|
||||
|
@ -588,7 +588,7 @@ export class CommentNode extends Component<CommentNodeProps, CommentNodeState> {
|
|||
className="btn btn-link btn-animate text-muted"
|
||||
onClick={linkEvent(
|
||||
this,
|
||||
this.handleDistinguishComment
|
||||
this.handleDistinguishComment,
|
||||
)}
|
||||
data-tippy-content={
|
||||
!cv.comment.distinguished
|
||||
|
@ -619,7 +619,7 @@ export class CommentNode extends Component<CommentNodeProps, CommentNodeState> {
|
|||
className="btn btn-link btn-animate text-muted"
|
||||
onClick={linkEvent(
|
||||
this,
|
||||
this.handleModRemoveShow
|
||||
this.handleModRemoveShow,
|
||||
)}
|
||||
aria-label={I18NextService.i18n.t("remove")}
|
||||
>
|
||||
|
@ -630,7 +630,7 @@ export class CommentNode extends Component<CommentNodeProps, CommentNodeState> {
|
|||
className="btn btn-link btn-animate text-muted"
|
||||
onClick={linkEvent(
|
||||
this,
|
||||
this.handleRemoveComment
|
||||
this.handleRemoveComment,
|
||||
)}
|
||||
aria-label={I18NextService.i18n.t("restore")}
|
||||
>
|
||||
|
@ -652,14 +652,14 @@ export class CommentNode extends Component<CommentNodeProps, CommentNodeState> {
|
|||
className="btn btn-link btn-animate text-muted"
|
||||
onClick={linkEvent(
|
||||
this,
|
||||
this.handleModBanFromCommunityShow
|
||||
this.handleModBanFromCommunityShow,
|
||||
)}
|
||||
aria-label={I18NextService.i18n.t(
|
||||
"ban_from_community"
|
||||
"ban_from_community",
|
||||
)}
|
||||
>
|
||||
{I18NextService.i18n.t(
|
||||
"ban_from_community"
|
||||
"ban_from_community",
|
||||
)}
|
||||
</button>
|
||||
) : (
|
||||
|
@ -667,7 +667,7 @@ export class CommentNode extends Component<CommentNodeProps, CommentNodeState> {
|
|||
className="btn btn-link btn-animate text-muted"
|
||||
onClick={linkEvent(
|
||||
this,
|
||||
this.handleBanPersonFromCommunity
|
||||
this.handleBanPersonFromCommunity,
|
||||
)}
|
||||
aria-label={I18NextService.i18n.t("unban")}
|
||||
>
|
||||
|
@ -684,13 +684,13 @@ export class CommentNode extends Component<CommentNodeProps, CommentNodeState> {
|
|||
className="btn btn-link btn-animate text-muted"
|
||||
onClick={linkEvent(
|
||||
this,
|
||||
this.handleShowConfirmAppointAsMod
|
||||
this.handleShowConfirmAppointAsMod,
|
||||
)}
|
||||
aria-label={
|
||||
isMod_
|
||||
? I18NextService.i18n.t("remove_as_mod")
|
||||
: I18NextService.i18n.t(
|
||||
"appoint_as_mod"
|
||||
"appoint_as_mod",
|
||||
)
|
||||
}
|
||||
>
|
||||
|
@ -703,7 +703,7 @@ export class CommentNode extends Component<CommentNodeProps, CommentNodeState> {
|
|||
<button
|
||||
className="btn btn-link btn-animate text-muted"
|
||||
aria-label={I18NextService.i18n.t(
|
||||
"are_you_sure"
|
||||
"are_you_sure",
|
||||
)}
|
||||
>
|
||||
{I18NextService.i18n.t("are_you_sure")}
|
||||
|
@ -712,7 +712,7 @@ export class CommentNode extends Component<CommentNodeProps, CommentNodeState> {
|
|||
className="btn btn-link btn-animate text-muted"
|
||||
onClick={linkEvent(
|
||||
this,
|
||||
this.handleAddModToCommunity
|
||||
this.handleAddModToCommunity,
|
||||
)}
|
||||
aria-label={I18NextService.i18n.t("yes")}
|
||||
>
|
||||
|
@ -726,7 +726,7 @@ export class CommentNode extends Component<CommentNodeProps, CommentNodeState> {
|
|||
className="btn btn-link btn-animate text-muted"
|
||||
onClick={linkEvent(
|
||||
this,
|
||||
this.handleCancelConfirmAppointAsMod
|
||||
this.handleCancelConfirmAppointAsMod,
|
||||
)}
|
||||
aria-label={I18NextService.i18n.t("no")}
|
||||
>
|
||||
|
@ -745,10 +745,10 @@ export class CommentNode extends Component<CommentNodeProps, CommentNodeState> {
|
|||
className="btn btn-link btn-animate text-muted"
|
||||
onClick={linkEvent(
|
||||
this,
|
||||
this.handleShowConfirmTransferCommunity
|
||||
this.handleShowConfirmTransferCommunity,
|
||||
)}
|
||||
aria-label={I18NextService.i18n.t(
|
||||
"transfer_community"
|
||||
"transfer_community",
|
||||
)}
|
||||
>
|
||||
{I18NextService.i18n.t("transfer_community")}
|
||||
|
@ -758,7 +758,7 @@ export class CommentNode extends Component<CommentNodeProps, CommentNodeState> {
|
|||
<button
|
||||
className="btn btn-link btn-animate text-muted"
|
||||
aria-label={I18NextService.i18n.t(
|
||||
"are_you_sure"
|
||||
"are_you_sure",
|
||||
)}
|
||||
>
|
||||
{I18NextService.i18n.t("are_you_sure")}
|
||||
|
@ -767,7 +767,7 @@ export class CommentNode extends Component<CommentNodeProps, CommentNodeState> {
|
|||
className="btn btn-link btn-animate text-muted"
|
||||
onClick={linkEvent(
|
||||
this,
|
||||
this.handleTransferCommunity
|
||||
this.handleTransferCommunity,
|
||||
)}
|
||||
aria-label={I18NextService.i18n.t("yes")}
|
||||
>
|
||||
|
@ -782,7 +782,7 @@ export class CommentNode extends Component<CommentNodeProps, CommentNodeState> {
|
|||
onClick={linkEvent(
|
||||
this,
|
||||
this
|
||||
.handleCancelShowConfirmTransferCommunity
|
||||
.handleCancelShowConfirmTransferCommunity,
|
||||
)}
|
||||
aria-label={I18NextService.i18n.t("no")}
|
||||
>
|
||||
|
@ -799,10 +799,10 @@ export class CommentNode extends Component<CommentNodeProps, CommentNodeState> {
|
|||
className="btn btn-link btn-animate text-muted"
|
||||
onClick={linkEvent(
|
||||
this,
|
||||
this.handlePurgePersonShow
|
||||
this.handlePurgePersonShow,
|
||||
)}
|
||||
aria-label={I18NextService.i18n.t(
|
||||
"purge_user"
|
||||
"purge_user",
|
||||
)}
|
||||
>
|
||||
{I18NextService.i18n.t("purge_user")}
|
||||
|
@ -811,10 +811,10 @@ export class CommentNode extends Component<CommentNodeProps, CommentNodeState> {
|
|||
className="btn btn-link btn-animate text-muted"
|
||||
onClick={linkEvent(
|
||||
this,
|
||||
this.handlePurgeCommentShow
|
||||
this.handlePurgeCommentShow,
|
||||
)}
|
||||
aria-label={I18NextService.i18n.t(
|
||||
"purge_comment"
|
||||
"purge_comment",
|
||||
)}
|
||||
>
|
||||
{I18NextService.i18n.t("purge_comment")}
|
||||
|
@ -825,10 +825,10 @@ export class CommentNode extends Component<CommentNodeProps, CommentNodeState> {
|
|||
className="btn btn-link btn-animate text-muted"
|
||||
onClick={linkEvent(
|
||||
this,
|
||||
this.handleModBanShow
|
||||
this.handleModBanShow,
|
||||
)}
|
||||
aria-label={I18NextService.i18n.t(
|
||||
"ban_from_site"
|
||||
"ban_from_site",
|
||||
)}
|
||||
>
|
||||
{I18NextService.i18n.t("ban_from_site")}
|
||||
|
@ -838,10 +838,10 @@ export class CommentNode extends Component<CommentNodeProps, CommentNodeState> {
|
|||
className="btn btn-link btn-animate text-muted"
|
||||
onClick={linkEvent(
|
||||
this,
|
||||
this.handleBanPerson
|
||||
this.handleBanPerson,
|
||||
)}
|
||||
aria-label={I18NextService.i18n.t(
|
||||
"unban_from_site"
|
||||
"unban_from_site",
|
||||
)}
|
||||
>
|
||||
{this.state.banLoading ? (
|
||||
|
@ -860,22 +860,22 @@ export class CommentNode extends Component<CommentNodeProps, CommentNodeState> {
|
|||
className="btn btn-link btn-animate text-muted"
|
||||
onClick={linkEvent(
|
||||
this,
|
||||
this.handleShowConfirmAppointAsAdmin
|
||||
this.handleShowConfirmAppointAsAdmin,
|
||||
)}
|
||||
aria-label={
|
||||
isAdmin_
|
||||
? I18NextService.i18n.t(
|
||||
"remove_as_admin"
|
||||
"remove_as_admin",
|
||||
)
|
||||
: I18NextService.i18n.t(
|
||||
"appoint_as_admin"
|
||||
"appoint_as_admin",
|
||||
)
|
||||
}
|
||||
>
|
||||
{isAdmin_
|
||||
? I18NextService.i18n.t("remove_as_admin")
|
||||
: I18NextService.i18n.t(
|
||||
"appoint_as_admin"
|
||||
"appoint_as_admin",
|
||||
)}
|
||||
</button>
|
||||
) : (
|
||||
|
@ -887,7 +887,7 @@ export class CommentNode extends Component<CommentNodeProps, CommentNodeState> {
|
|||
className="btn btn-link btn-animate text-muted"
|
||||
onClick={linkEvent(
|
||||
this,
|
||||
this.handleAddAdmin
|
||||
this.handleAddAdmin,
|
||||
)}
|
||||
aria-label={I18NextService.i18n.t("yes")}
|
||||
>
|
||||
|
@ -901,7 +901,7 @@ export class CommentNode extends Component<CommentNodeProps, CommentNodeState> {
|
|||
className="btn btn-link btn-animate text-muted"
|
||||
onClick={linkEvent(
|
||||
this,
|
||||
this.handleCancelConfirmAppointAsAdmin
|
||||
this.handleCancelConfirmAppointAsAdmin,
|
||||
)}
|
||||
aria-label={I18NextService.i18n.t("no")}
|
||||
>
|
||||
|
@ -939,7 +939,7 @@ export class CommentNode extends Component<CommentNodeProps, CommentNodeState> {
|
|||
{I18NextService.i18n.t("x_more_replies", {
|
||||
count: node.comment_view.counts.child_count,
|
||||
formattedCount: numToSI(
|
||||
node.comment_view.counts.child_count
|
||||
node.comment_view.counts.child_count,
|
||||
),
|
||||
})}{" "}
|
||||
➔
|
||||
|
@ -1114,7 +1114,7 @@ export class CommentNode extends Component<CommentNodeProps, CommentNodeState> {
|
|||
onReplyCancel={this.handleReplyCancel}
|
||||
disabled={this.props.locked}
|
||||
finished={this.props.finished.get(
|
||||
this.props.node.comment_view.comment.id
|
||||
this.props.node.comment_view.comment.id,
|
||||
)}
|
||||
focus
|
||||
allLanguages={this.props.allLanguages}
|
||||
|
@ -1299,13 +1299,13 @@ export class CommentNode extends Component<CommentNodeProps, CommentNodeState> {
|
|||
}
|
||||
|
||||
isPersonMentionType(
|
||||
item: CommentView | PersonMentionView | CommentReplyView
|
||||
item: CommentView | PersonMentionView | CommentReplyView,
|
||||
): item is PersonMentionView {
|
||||
return (item as PersonMentionView).person_mention?.id !== undefined;
|
||||
}
|
||||
|
||||
isCommentReplyType(
|
||||
item: CommentView | PersonMentionView | CommentReplyView
|
||||
item: CommentView | PersonMentionView | CommentReplyView,
|
||||
): item is CommentReplyView {
|
||||
return (item as CommentReplyView).comment_reply?.id !== undefined;
|
||||
}
|
||||
|
|
|
@ -33,7 +33,7 @@ export class CommentReport extends Component<
|
|||
}
|
||||
|
||||
componentWillReceiveProps(
|
||||
nextProps: Readonly<{ children?: InfernoNode } & CommentReportProps>
|
||||
nextProps: Readonly<{ children?: InfernoNode } & CommentReportProps>,
|
||||
): void {
|
||||
if (this.props !== nextProps) {
|
||||
this.setState({ loading: false });
|
||||
|
@ -44,7 +44,7 @@ export class CommentReport extends Component<
|
|||
const r = this.props.report;
|
||||
const comment = r.comment;
|
||||
const tippyContent = I18NextService.i18n.t(
|
||||
r.comment_report.resolved ? "unresolve_report" : "resolve_report"
|
||||
r.comment_report.resolved ? "unresolve_report" : "resolve_report",
|
||||
);
|
||||
|
||||
// Set the original post data ( a troll could change it )
|
||||
|
|
|
@ -13,13 +13,13 @@ interface BadgesProps {
|
|||
}
|
||||
|
||||
const isCommunityAggregates = (
|
||||
counts: CommunityAggregates | SiteAggregates
|
||||
counts: CommunityAggregates | SiteAggregates,
|
||||
): counts is CommunityAggregates => {
|
||||
return "subscribers" in counts;
|
||||
};
|
||||
|
||||
const isSiteAggregates = (
|
||||
counts: CommunityAggregates | SiteAggregates
|
||||
counts: CommunityAggregates | SiteAggregates,
|
||||
): counts is SiteAggregates => {
|
||||
return "communities" in counts;
|
||||
};
|
||||
|
@ -34,7 +34,7 @@ export const Badges = ({ counts, communityId }: BadgesProps) => {
|
|||
{
|
||||
count: Number(counts.users_active_day),
|
||||
formattedCount: numToSI(counts.users_active_day),
|
||||
}
|
||||
},
|
||||
)}
|
||||
>
|
||||
{I18NextService.i18n.t("number_of_users", {
|
||||
|
@ -50,7 +50,7 @@ export const Badges = ({ counts, communityId }: BadgesProps) => {
|
|||
{
|
||||
count: Number(counts.users_active_week),
|
||||
formattedCount: numToSI(counts.users_active_week),
|
||||
}
|
||||
},
|
||||
)}
|
||||
>
|
||||
{I18NextService.i18n.t("number_of_users", {
|
||||
|
@ -66,7 +66,7 @@ export const Badges = ({ counts, communityId }: BadgesProps) => {
|
|||
{
|
||||
count: Number(counts.users_active_month),
|
||||
formattedCount: numToSI(counts.users_active_month),
|
||||
}
|
||||
},
|
||||
)}
|
||||
>
|
||||
{I18NextService.i18n.t("number_of_users", {
|
||||
|
@ -82,7 +82,7 @@ export const Badges = ({ counts, communityId }: BadgesProps) => {
|
|||
{
|
||||
count: Number(counts.users_active_half_year),
|
||||
formattedCount: numToSI(counts.users_active_half_year),
|
||||
}
|
||||
},
|
||||
)}
|
||||
>
|
||||
{I18NextService.i18n.t("number_of_users", {
|
||||
|
|
|
@ -15,7 +15,7 @@ export class EmojiMart extends Component<EmojiMartProps> {
|
|||
const div: any = document.getElementById("emoji-picker");
|
||||
if (div) {
|
||||
div.appendChild(
|
||||
getEmojiMart(this.handleEmojiClick, this.props.pickerOptions)
|
||||
getEmojiMart(this.handleEmojiClick, this.props.pickerOptions),
|
||||
);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -50,10 +50,10 @@ export class HtmlTags extends Component<HtmlTagsProps, any> {
|
|||
name={n}
|
||||
content={htmlToText(md.renderInline(desc))}
|
||||
/>
|
||||
)
|
||||
),
|
||||
)}
|
||||
{["og:image", "twitter:image"].map(
|
||||
p => image && <meta key={p} property={p} content={image} />
|
||||
p => image && <meta key={p} property={p} content={image} />,
|
||||
)}
|
||||
</Helmet>
|
||||
);
|
||||
|
|
|
@ -53,12 +53,12 @@ export class LanguageSelect extends Component<LanguageSelectProps, any> {
|
|||
<label
|
||||
className={classNames(
|
||||
"col-form-label",
|
||||
`col-sm-${this.props.multiple ? 3 : 2}`
|
||||
`col-sm-${this.props.multiple ? 3 : 2}`,
|
||||
)}
|
||||
htmlFor={this.id}
|
||||
>
|
||||
{I18NextService.i18n.t(
|
||||
this.props.multiple ? "language_plural" : "language"
|
||||
this.props.multiple ? "language_plural" : "language",
|
||||
)}
|
||||
</label>
|
||||
{this.props.multiple && this.props.showLanguageWarning && (
|
||||
|
@ -97,7 +97,7 @@ export class LanguageSelect extends Component<LanguageSelectProps, any> {
|
|||
this.props.siteLanguages,
|
||||
this.props.showAll,
|
||||
this.props.showSite,
|
||||
UserService.Instance.myUserInfo
|
||||
UserService.Instance.myUserInfo,
|
||||
);
|
||||
|
||||
return (
|
||||
|
|
|
@ -30,7 +30,7 @@ export class ListingTypeSelect extends Component<
|
|||
}
|
||||
|
||||
static getDerivedStateFromProps(
|
||||
props: ListingTypeSelectProps
|
||||
props: ListingTypeSelectProps,
|
||||
): ListingTypeSelectState {
|
||||
return {
|
||||
type_: props.type_,
|
||||
|
|
|
@ -201,7 +201,7 @@ export class MarkdownTextArea extends Component<
|
|||
{this.getFormatButton("header", this.handleInsertHeader)}
|
||||
{this.getFormatButton(
|
||||
"strikethrough",
|
||||
this.handleInsertStrikethrough
|
||||
this.handleInsertStrikethrough,
|
||||
)}
|
||||
{this.getFormatButton("quote", this.handleInsertQuote)}
|
||||
{this.getFormatButton("list", this.handleInsertList)}
|
||||
|
@ -209,7 +209,7 @@ export class MarkdownTextArea extends Component<
|
|||
{this.getFormatButton("subscript", this.handleInsertSubscript)}
|
||||
{this.getFormatButton(
|
||||
"superscript",
|
||||
this.handleInsertSuperscript
|
||||
this.handleInsertSuperscript,
|
||||
)}
|
||||
{this.getFormatButton("spoiler", this.handleInsertSpoiler)}
|
||||
<a
|
||||
|
@ -229,7 +229,7 @@ export class MarkdownTextArea extends Component<
|
|||
"form-control border-0 rounded-top-0 rounded-bottom",
|
||||
{
|
||||
"d-none": this.state.previewMode,
|
||||
}
|
||||
},
|
||||
)}
|
||||
value={this.state.content}
|
||||
onInput={linkEvent(this, this.handleContentChange)}
|
||||
|
@ -328,7 +328,7 @@ export class MarkdownTextArea extends Component<
|
|||
|
||||
getFormatButton(
|
||||
type: NoOptionI18nKeys,
|
||||
handleClick: (i: MarkdownTextArea, event: any) => void
|
||||
handleClick: (i: MarkdownTextArea, event: any) => void,
|
||||
) {
|
||||
let iconType: string;
|
||||
|
||||
|
@ -396,7 +396,7 @@ export class MarkdownTextArea extends Component<
|
|||
count: Number(maxUploadImages),
|
||||
formattedCount: numToSI(maxUploadImages),
|
||||
}),
|
||||
"danger"
|
||||
"danger",
|
||||
);
|
||||
} else {
|
||||
i.setState({
|
||||
|
@ -424,7 +424,7 @@ export class MarkdownTextArea extends Component<
|
|||
uploaded: (imageUploadStatus?.uploaded ?? 0) + 1,
|
||||
},
|
||||
}));
|
||||
})
|
||||
}),
|
||||
);
|
||||
} catch (e) {
|
||||
errorOccurred = true;
|
||||
|
@ -560,7 +560,7 @@ export class MarkdownTextArea extends Component<
|
|||
i.setState({
|
||||
content: `${content?.substring(
|
||||
0,
|
||||
start
|
||||
start,
|
||||
)}[${selectedText}]()${content?.substring(end)}`,
|
||||
});
|
||||
textarea.focus();
|
||||
|
@ -584,7 +584,7 @@ export class MarkdownTextArea extends Component<
|
|||
simpleSurroundBeforeAfter(
|
||||
beforeChars: string,
|
||||
afterChars: string,
|
||||
emptyChars = "___"
|
||||
emptyChars = "___",
|
||||
) {
|
||||
const content = this.state.content ?? "";
|
||||
if (!this.state.content) {
|
||||
|
@ -599,7 +599,7 @@ export class MarkdownTextArea extends Component<
|
|||
this.setState({
|
||||
content: `${content?.substring(
|
||||
0,
|
||||
start
|
||||
start,
|
||||
)}${beforeChars}${selectedText}${afterChars}${content?.substring(end)}`,
|
||||
});
|
||||
} else {
|
||||
|
@ -614,12 +614,12 @@ export class MarkdownTextArea extends Component<
|
|||
if (start !== end) {
|
||||
textarea.setSelectionRange(
|
||||
start + beforeChars.length,
|
||||
end + afterChars.length
|
||||
end + afterChars.length,
|
||||
);
|
||||
} else {
|
||||
textarea.setSelectionRange(
|
||||
start + beforeChars.length,
|
||||
end + emptyChars.length + afterChars.length
|
||||
end + emptyChars.length + afterChars.length,
|
||||
);
|
||||
}
|
||||
|
||||
|
|
|
@ -25,11 +25,11 @@ export class MomentTime extends Component<MomentTimeProps, any> {
|
|||
createdAndModifiedTimes() {
|
||||
const updated = this.props.updated;
|
||||
let line = `${capitalizeFirstLetter(
|
||||
I18NextService.i18n.t("created")
|
||||
I18NextService.i18n.t("created"),
|
||||
)}: ${formatDate(this.props.published)}`;
|
||||
if (updated) {
|
||||
line += `\n\n\n${capitalizeFirstLetter(
|
||||
I18NextService.i18n.t("modified")
|
||||
I18NextService.i18n.t("modified"),
|
||||
)} ${formatDate(updated)}`;
|
||||
}
|
||||
return line;
|
||||
|
|
|
@ -104,10 +104,10 @@ class PasswordInput extends Component<PasswordInputProps, PasswordInputState> {
|
|||
id={id}
|
||||
onClick={linkEvent(this, handleToggleShow)}
|
||||
aria-label={I18NextService.i18n.t(
|
||||
`${show ? "show" : "hide"}_password`
|
||||
`${show ? "show" : "hide"}_password`,
|
||||
)}
|
||||
data-tippy-content={I18NextService.i18n.t(
|
||||
`${show ? "show" : "hide"}_password`
|
||||
`${show ? "show" : "hide"}_password`,
|
||||
)}
|
||||
>
|
||||
<Icon icon={`eye${show ? "-slash" : ""}`} inline />
|
||||
|
@ -116,7 +116,7 @@ class PasswordInput extends Component<PasswordInputProps, PasswordInputState> {
|
|||
{showStrength && value && (
|
||||
<div className={this.passwordColorClass}>
|
||||
{I18NextService.i18n.t(
|
||||
this.passwordStrength as NoOptionI18nKeys
|
||||
this.passwordStrength as NoOptionI18nKeys,
|
||||
)}
|
||||
</div>
|
||||
)}
|
||||
|
|
|
@ -42,7 +42,7 @@ export class RegistrationApplication extends Component<
|
|||
componentWillReceiveProps(
|
||||
nextProps: Readonly<
|
||||
{ children?: InfernoNode } & RegistrationApplicationProps
|
||||
>
|
||||
>,
|
||||
): void {
|
||||
if (this.props !== nextProps) {
|
||||
this.setState({
|
||||
|
|
|
@ -83,7 +83,7 @@ export class SearchableSelect extends Component<
|
|||
|
||||
if (props.value) {
|
||||
let selectedIndex = props.options.findIndex(
|
||||
({ value }) => value === props.value?.toString()
|
||||
({ value }) => value === props.value?.toString(),
|
||||
);
|
||||
|
||||
if (selectedIndex < 0) {
|
||||
|
@ -140,7 +140,7 @@ export class SearchableSelect extends Component<
|
|||
(onSearch || searchText.length === 0
|
||||
? options
|
||||
: options.filter(({ label }) =>
|
||||
label.toLowerCase().includes(searchText.toLowerCase())
|
||||
label.toLowerCase().includes(searchText.toLowerCase()),
|
||||
)
|
||||
).map((option, index) => (
|
||||
<button
|
||||
|
|
|
@ -45,7 +45,7 @@ export class UserBadges extends Component<UserBadgesProps> {
|
|||
<span
|
||||
className={classNames(
|
||||
"row d-inline-flex gx-1",
|
||||
this.props.classNames
|
||||
this.props.classNames,
|
||||
)}
|
||||
>
|
||||
{this.props.isBanned && (
|
||||
|
|
|
@ -181,7 +181,7 @@ export class Communities extends Component<any, CommunitiesState> {
|
|||
communityId: cv.community.id,
|
||||
follow: false,
|
||||
},
|
||||
this.handleFollow
|
||||
this.handleFollow,
|
||||
)}
|
||||
>
|
||||
{I18NextService.i18n.t("unsubscribe")}
|
||||
|
@ -196,7 +196,7 @@ export class Communities extends Component<any, CommunitiesState> {
|
|||
communityId: cv.community.id,
|
||||
follow: true,
|
||||
},
|
||||
this.handleFollow
|
||||
this.handleFollow,
|
||||
)}
|
||||
>
|
||||
{I18NextService.i18n.t("subscribe")}
|
||||
|
@ -209,7 +209,7 @@ export class Communities extends Component<any, CommunitiesState> {
|
|||
)}
|
||||
</td>
|
||||
</tr>
|
||||
)
|
||||
),
|
||||
)}
|
||||
</tbody>
|
||||
</table>
|
||||
|
@ -301,7 +301,7 @@ export class Communities extends Component<any, CommunitiesState> {
|
|||
event.preventDefault();
|
||||
const searchParamEncoded = encodeURIComponent(i.state.searchText);
|
||||
i.context.router.history.push(
|
||||
`/search?q=${searchParamEncoded}&type=Communities`
|
||||
`/search?q=${searchParamEncoded}&type=Communities`,
|
||||
);
|
||||
}
|
||||
|
||||
|
@ -322,7 +322,7 @@ export class Communities extends Component<any, CommunitiesState> {
|
|||
|
||||
return {
|
||||
listCommunitiesResponse: await client.listCommunities(
|
||||
listCommunitiesForm
|
||||
listCommunitiesForm,
|
||||
),
|
||||
};
|
||||
}
|
||||
|
@ -374,7 +374,7 @@ export class Communities extends Component<any, CommunitiesState> {
|
|||
) {
|
||||
s.listCommunitiesResponse.data.communities = editCommunity(
|
||||
res.data.community_view,
|
||||
s.listCommunitiesResponse.data.communities
|
||||
s.listCommunitiesResponse.data.communities,
|
||||
);
|
||||
}
|
||||
return s;
|
||||
|
|
|
@ -231,7 +231,7 @@ export class CommunityForm extends Component<
|
|||
checked={this.state.form.posting_restricted_to_mods}
|
||||
onChange={linkEvent(
|
||||
this,
|
||||
this.handleCommunityPostingRestrictedToMods
|
||||
this.handleCommunityPostingRestrictedToMods,
|
||||
)}
|
||||
/>
|
||||
</div>
|
||||
|
@ -330,7 +330,7 @@ export class CommunityForm extends Component<
|
|||
|
||||
handleCommunityPostingRestrictedToMods(i: CommunityForm, event: any) {
|
||||
i.setState(
|
||||
s => ((s.form.posting_restricted_to_mods = event.target.checked), s)
|
||||
s => ((s.form.posting_restricted_to_mods = event.target.checked), s),
|
||||
);
|
||||
}
|
||||
|
||||
|
|
|
@ -570,7 +570,7 @@ export class Community extends Component<
|
|||
};
|
||||
|
||||
this.props.history.push(
|
||||
`/c/${this.props.match.params.name}${getQueryString(queryParams)}`
|
||||
`/c/${this.props.match.params.name}${getQueryString(queryParams)}`,
|
||||
);
|
||||
|
||||
await this.fetchData();
|
||||
|
@ -785,7 +785,7 @@ export class Community extends Component<
|
|||
|
||||
async handleTransferCommunity(form: TransferCommunity) {
|
||||
const transferCommunityRes = await HttpService.client.transferCommunity(
|
||||
form
|
||||
form,
|
||||
);
|
||||
toast(I18NextService.i18n.t("transfer_community"));
|
||||
this.updateCommunityFull(transferCommunityRes);
|
||||
|
@ -819,14 +819,14 @@ export class Community extends Component<
|
|||
s.postsRes.data.posts
|
||||
.filter(c => c.creator.id === banRes.data.person_view.person.id)
|
||||
.forEach(
|
||||
c => (c.creator_banned_from_community = banRes.data.banned)
|
||||
c => (c.creator_banned_from_community = banRes.data.banned),
|
||||
);
|
||||
}
|
||||
if (s.commentsRes.state === "success") {
|
||||
s.commentsRes.data.comments
|
||||
.filter(c => c.creator.id === banRes.data.person_view.person.id)
|
||||
.forEach(
|
||||
c => (c.creator_banned_from_community = banRes.data.banned)
|
||||
c => (c.creator_banned_from_community = banRes.data.banned),
|
||||
);
|
||||
}
|
||||
return s;
|
||||
|
@ -886,7 +886,7 @@ export class Community extends Component<
|
|||
if (s.commentsRes.state === "success" && res.state === "success") {
|
||||
s.commentsRes.data.comments = editComment(
|
||||
res.data.comment_view,
|
||||
s.commentsRes.data.comments
|
||||
s.commentsRes.data.comments,
|
||||
);
|
||||
s.finished.set(res.data.comment_view.comment.id, true);
|
||||
}
|
||||
|
@ -902,7 +902,7 @@ export class Community extends Component<
|
|||
// Set finished for the parent
|
||||
s.finished.set(
|
||||
getCommentParentId(res.data.comment_view.comment) ?? 0,
|
||||
true
|
||||
true,
|
||||
);
|
||||
}
|
||||
return s;
|
||||
|
@ -914,7 +914,7 @@ export class Community extends Component<
|
|||
if (s.commentsRes.state === "success" && res.state === "success") {
|
||||
s.commentsRes.data.comments = editWith(
|
||||
res.data.comment_reply_view,
|
||||
s.commentsRes.data.comments
|
||||
s.commentsRes.data.comments,
|
||||
);
|
||||
}
|
||||
return s;
|
||||
|
@ -926,7 +926,7 @@ export class Community extends Component<
|
|||
if (s.postsRes.state === "success" && res.state === "success") {
|
||||
s.postsRes.data.posts = editPost(
|
||||
res.data.post_view,
|
||||
s.postsRes.data.posts
|
||||
s.postsRes.data.posts,
|
||||
);
|
||||
}
|
||||
return s;
|
||||
|
|
|
@ -79,7 +79,7 @@ export class Sidebar extends Component<SidebarProps, SidebarState> {
|
|||
}
|
||||
|
||||
componentWillReceiveProps(
|
||||
nextProps: Readonly<{ children?: InfernoNode } & SidebarProps>
|
||||
nextProps: Readonly<{ children?: InfernoNode } & SidebarProps>,
|
||||
): void {
|
||||
if (this.props.moderators !== nextProps.moderators) {
|
||||
this.setState({
|
||||
|
@ -292,7 +292,7 @@ export class Sidebar extends Component<SidebarProps, SidebarState> {
|
|||
onClick={linkEvent(this, this.handleBlockCommunity)}
|
||||
>
|
||||
{I18NextService.i18n.t(
|
||||
blocked ? "unblock_community" : "block_community"
|
||||
blocked ? "unblock_community" : "block_community",
|
||||
)}
|
||||
</button>
|
||||
)
|
||||
|
@ -332,7 +332,7 @@ export class Sidebar extends Component<SidebarProps, SidebarState> {
|
|||
className="btn btn-link text-muted d-inline-block"
|
||||
onClick={linkEvent(
|
||||
this,
|
||||
this.handleShowConfirmLeaveModTeamClick
|
||||
this.handleShowConfirmLeaveModTeamClick,
|
||||
)}
|
||||
>
|
||||
{I18NextService.i18n.t("leave_mod_team")}
|
||||
|
@ -356,7 +356,7 @@ export class Sidebar extends Component<SidebarProps, SidebarState> {
|
|||
className="btn btn-link text-muted d-inline-block"
|
||||
onClick={linkEvent(
|
||||
this,
|
||||
this.handleCancelLeaveModTeamClick
|
||||
this.handleCancelLeaveModTeamClick,
|
||||
)}
|
||||
>
|
||||
{I18NextService.i18n.t("no")}
|
||||
|
|
|
@ -118,8 +118,8 @@ export class EmojiForm extends Component<EmojiFormProps, EmojiFormState> {
|
|||
Number((this.state.page - 1) * this.itemsPerPage),
|
||||
Number(
|
||||
(this.state.page - 1) * this.itemsPerPage +
|
||||
this.itemsPerPage
|
||||
)
|
||||
this.itemsPerPage,
|
||||
),
|
||||
)
|
||||
.map((cv, index) => (
|
||||
<tr key={index} ref={e => (this.scrollRef[cv.shortcode] = e)}>
|
||||
|
@ -139,11 +139,11 @@ export class EmojiForm extends Component<EmojiFormProps, EmojiFormState> {
|
|||
className="btn btn-sm btn-secondary pointer"
|
||||
htmlFor={`file-uploader-${index}`}
|
||||
data-tippy-content={I18NextService.i18n.t(
|
||||
"upload_image"
|
||||
"upload_image",
|
||||
)}
|
||||
>
|
||||
{capitalizeFirstLetter(
|
||||
I18NextService.i18n.t("upload")
|
||||
I18NextService.i18n.t("upload"),
|
||||
)}
|
||||
<input
|
||||
name={`file-uploader-${index}`}
|
||||
|
@ -153,7 +153,7 @@ export class EmojiForm extends Component<EmojiFormProps, EmojiFormState> {
|
|||
className="d-none"
|
||||
onChange={linkEvent(
|
||||
{ form: this, index: index },
|
||||
this.handleImageUpload
|
||||
this.handleImageUpload,
|
||||
)}
|
||||
/>
|
||||
</label>
|
||||
|
@ -168,7 +168,7 @@ export class EmojiForm extends Component<EmojiFormProps, EmojiFormState> {
|
|||
value={cv.shortcode}
|
||||
onInput={linkEvent(
|
||||
{ form: this, index: index },
|
||||
this.handleEmojiShortCodeChange
|
||||
this.handleEmojiShortCodeChange,
|
||||
)}
|
||||
/>
|
||||
</td>
|
||||
|
@ -180,7 +180,7 @@ export class EmojiForm extends Component<EmojiFormProps, EmojiFormState> {
|
|||
value={cv.category}
|
||||
onInput={linkEvent(
|
||||
{ form: this, index: index },
|
||||
this.handleEmojiCategoryChange
|
||||
this.handleEmojiCategoryChange,
|
||||
)}
|
||||
/>
|
||||
</td>
|
||||
|
@ -192,7 +192,7 @@ export class EmojiForm extends Component<EmojiFormProps, EmojiFormState> {
|
|||
value={cv.image_url}
|
||||
onInput={linkEvent(
|
||||
{ form: this, index: index, overrideValue: null },
|
||||
this.handleEmojiImageUrlChange
|
||||
this.handleEmojiImageUrlChange,
|
||||
)}
|
||||
/>
|
||||
</td>
|
||||
|
@ -204,7 +204,7 @@ export class EmojiForm extends Component<EmojiFormProps, EmojiFormState> {
|
|||
value={cv.alt_text}
|
||||
onInput={linkEvent(
|
||||
{ form: this, index: index },
|
||||
this.handleEmojiAltTextChange
|
||||
this.handleEmojiAltTextChange,
|
||||
)}
|
||||
/>
|
||||
</td>
|
||||
|
@ -216,7 +216,7 @@ export class EmojiForm extends Component<EmojiFormProps, EmojiFormState> {
|
|||
value={cv.keywords}
|
||||
onInput={linkEvent(
|
||||
{ form: this, index: index },
|
||||
this.handleEmojiKeywordChange
|
||||
this.handleEmojiKeywordChange,
|
||||
)}
|
||||
/>
|
||||
</td>
|
||||
|
@ -231,7 +231,7 @@ export class EmojiForm extends Component<EmojiFormProps, EmojiFormState> {
|
|||
}
|
||||
onClick={linkEvent(
|
||||
{ i: this, cv: cv },
|
||||
this.handleEditEmojiClick
|
||||
this.handleEditEmojiClick,
|
||||
)}
|
||||
data-tippy-content={I18NextService.i18n.t("save")}
|
||||
aria-label={I18NextService.i18n.t("save")}
|
||||
|
@ -241,7 +241,7 @@ export class EmojiForm extends Component<EmojiFormProps, EmojiFormState> {
|
|||
<Spinner />
|
||||
) : (
|
||||
capitalizeFirstLetter(
|
||||
I18NextService.i18n.t("save")
|
||||
I18NextService.i18n.t("save"),
|
||||
)
|
||||
)}
|
||||
</button>
|
||||
|
@ -250,7 +250,7 @@ export class EmojiForm extends Component<EmojiFormProps, EmojiFormState> {
|
|||
className="btn btn-link btn-animate text-muted"
|
||||
onClick={linkEvent(
|
||||
{ i: this, index: index, cv: cv },
|
||||
this.handleDeleteEmojiClick
|
||||
this.handleDeleteEmojiClick,
|
||||
)}
|
||||
data-tippy-content={I18NextService.i18n.t("delete")}
|
||||
aria-label={I18NextService.i18n.t("delete")}
|
||||
|
@ -290,7 +290,7 @@ export class EmojiForm extends Component<EmojiFormProps, EmojiFormState> {
|
|||
cv.shortcode.length > 0;
|
||||
const noDuplicateShortCodes =
|
||||
this.state.customEmojis.filter(
|
||||
x => x.shortcode === cv.shortcode && x.id !== cv.id
|
||||
x => x.shortcode === cv.shortcode && x.id !== cv.id,
|
||||
).length === 0;
|
||||
return noEmptyFields && noDuplicateShortCodes && !cv.loading && cv.changed;
|
||||
}
|
||||
|
@ -308,7 +308,7 @@ export class EmojiForm extends Component<EmojiFormProps, EmojiFormState> {
|
|||
const view = customEmojisLookup.get(e.id);
|
||||
if (view) {
|
||||
const page = this.state.customEmojis.find(
|
||||
x => x.id === view.custom_emoji.id
|
||||
x => x.id === view.custom_emoji.id,
|
||||
)?.page;
|
||||
if (page) {
|
||||
this.setState({ page: page });
|
||||
|
@ -319,7 +319,7 @@ export class EmojiForm extends Component<EmojiFormProps, EmojiFormState> {
|
|||
|
||||
handleEmojiCategoryChange(
|
||||
props: { form: EmojiForm; index: number },
|
||||
event: any
|
||||
event: any,
|
||||
) {
|
||||
const custom_emojis = [...props.form.state.customEmojis];
|
||||
const pagedIndex =
|
||||
|
@ -335,7 +335,7 @@ export class EmojiForm extends Component<EmojiFormProps, EmojiFormState> {
|
|||
|
||||
handleEmojiShortCodeChange(
|
||||
props: { form: EmojiForm; index: number },
|
||||
event: any
|
||||
event: any,
|
||||
) {
|
||||
const custom_emojis = [...props.form.state.customEmojis];
|
||||
const pagedIndex =
|
||||
|
@ -355,7 +355,7 @@ export class EmojiForm extends Component<EmojiFormProps, EmojiFormState> {
|
|||
index,
|
||||
overrideValue,
|
||||
}: { form: EmojiForm; index: number; overrideValue: string | null },
|
||||
event: any
|
||||
event: any,
|
||||
) {
|
||||
form.setState(prevState => {
|
||||
const custom_emojis = [...form.state.customEmojis];
|
||||
|
@ -376,7 +376,7 @@ export class EmojiForm extends Component<EmojiFormProps, EmojiFormState> {
|
|||
changed: true,
|
||||
loading: false,
|
||||
}
|
||||
: ce
|
||||
: ce,
|
||||
),
|
||||
};
|
||||
});
|
||||
|
@ -384,7 +384,7 @@ export class EmojiForm extends Component<EmojiFormProps, EmojiFormState> {
|
|||
|
||||
handleEmojiAltTextChange(
|
||||
props: { form: EmojiForm; index: number },
|
||||
event: any
|
||||
event: any,
|
||||
) {
|
||||
const custom_emojis = [...props.form.state.customEmojis];
|
||||
const pagedIndex =
|
||||
|
@ -400,7 +400,7 @@ export class EmojiForm extends Component<EmojiFormProps, EmojiFormState> {
|
|||
|
||||
handleEmojiKeywordChange(
|
||||
props: { form: EmojiForm; index: number },
|
||||
event: any
|
||||
event: any,
|
||||
) {
|
||||
const custom_emojis = [...props.form.state.customEmojis];
|
||||
const pagedIndex =
|
||||
|
@ -485,7 +485,7 @@ export class EmojiForm extends Component<EmojiFormProps, EmojiFormState> {
|
|||
|
||||
handleImageUpload(
|
||||
{ form, index }: { form: EmojiForm; index: number },
|
||||
event: any
|
||||
event: any,
|
||||
) {
|
||||
let file: any;
|
||||
if (event.target) {
|
||||
|
@ -498,7 +498,7 @@ export class EmojiForm extends Component<EmojiFormProps, EmojiFormState> {
|
|||
form.setState(prevState => ({
|
||||
...prevState,
|
||||
customEmojis: prevState.customEmojis.map((cv, i) =>
|
||||
i === index ? { ...cv, loading: true } : cv
|
||||
i === index ? { ...cv, loading: true } : cv,
|
||||
),
|
||||
}));
|
||||
|
||||
|
@ -510,7 +510,7 @@ export class EmojiForm extends Component<EmojiFormProps, EmojiFormState> {
|
|||
pictrsDeleteToast(file.name, res.data.delete_url as string);
|
||||
form.handleEmojiImageUrlChange(
|
||||
{ form: form, index: index, overrideValue: res.data.url as string },
|
||||
event
|
||||
event,
|
||||
);
|
||||
} else if (res.data.msg === "too_large") {
|
||||
toast(I18NextService.i18n.t("upload_too_large"), "danger");
|
||||
|
|
|
@ -285,9 +285,8 @@ export class Home extends Component<any, HomeState> {
|
|||
HomeCacheService.postsRes = postsRes;
|
||||
}
|
||||
|
||||
this.state.tagline = getRandomFromList(
|
||||
this.state?.siteRes?.taglines ?? []
|
||||
)?.content;
|
||||
this.state.tagline = getRandomFromList(this.state?.siteRes?.taglines ?? [])
|
||||
?.content;
|
||||
}
|
||||
|
||||
componentWillUnmount() {
|
||||
|
@ -298,7 +297,7 @@ export class Home extends Component<any, HomeState> {
|
|||
if (
|
||||
!this.state.isIsomorphic ||
|
||||
!Object.values(this.isoData.routeData).some(
|
||||
res => res.state === "success" || res.state === "failed"
|
||||
res => res.state === "success" || res.state === "failed",
|
||||
)
|
||||
) {
|
||||
await Promise.all([this.fetchTrendingCommunities(), this.fetchData()]);
|
||||
|
@ -359,7 +358,7 @@ export class Home extends Component<any, HomeState> {
|
|||
|
||||
return {
|
||||
trendingCommunitiesRes: await client.listCommunities(
|
||||
trendingCommunitiesForm
|
||||
trendingCommunitiesForm,
|
||||
),
|
||||
commentsRes,
|
||||
postsRes,
|
||||
|
@ -777,7 +776,7 @@ export class Home extends Component<any, HomeState> {
|
|||
<div className="col-auto ps-0">
|
||||
{getRss(
|
||||
listingType ??
|
||||
this.state.siteRes.site_view.local_site.default_post_listing_type
|
||||
this.state.siteRes.site_view.local_site.default_post_listing_type,
|
||||
)}
|
||||
</div>
|
||||
</div>
|
||||
|
@ -1034,14 +1033,14 @@ export class Home extends Component<any, HomeState> {
|
|||
s.postsRes.data.posts
|
||||
.filter(c => c.creator.id === banRes.data.person_view.person.id)
|
||||
.forEach(
|
||||
c => (c.creator_banned_from_community = banRes.data.banned)
|
||||
c => (c.creator_banned_from_community = banRes.data.banned),
|
||||
);
|
||||
}
|
||||
if (s.commentsRes.state === "success") {
|
||||
s.commentsRes.data.comments
|
||||
.filter(c => c.creator.id === banRes.data.person_view.person.id)
|
||||
.forEach(
|
||||
c => (c.creator_banned_from_community = banRes.data.banned)
|
||||
c => (c.creator_banned_from_community = banRes.data.banned),
|
||||
);
|
||||
}
|
||||
return s;
|
||||
|
@ -1080,7 +1079,7 @@ export class Home extends Component<any, HomeState> {
|
|||
if (s.commentsRes.state === "success" && res.state === "success") {
|
||||
s.commentsRes.data.comments = editComment(
|
||||
res.data.comment_view,
|
||||
s.commentsRes.data.comments
|
||||
s.commentsRes.data.comments,
|
||||
);
|
||||
s.finished.set(res.data.comment_view.comment.id, true);
|
||||
}
|
||||
|
@ -1096,7 +1095,7 @@ export class Home extends Component<any, HomeState> {
|
|||
// Set finished for the parent
|
||||
s.finished.set(
|
||||
getCommentParentId(res.data.comment_view.comment) ?? 0,
|
||||
true
|
||||
true,
|
||||
);
|
||||
}
|
||||
return s;
|
||||
|
@ -1108,7 +1107,7 @@ export class Home extends Component<any, HomeState> {
|
|||
if (s.commentsRes.state === "success" && res.state === "success") {
|
||||
s.commentsRes.data.comments = editWith(
|
||||
res.data.comment_reply_view,
|
||||
s.commentsRes.data.comments
|
||||
s.commentsRes.data.comments,
|
||||
);
|
||||
}
|
||||
return s;
|
||||
|
@ -1120,7 +1119,7 @@ export class Home extends Component<any, HomeState> {
|
|||
if (s.postsRes.state === "success" && res.state === "success") {
|
||||
s.postsRes.data.posts = editPost(
|
||||
res.data.post_view,
|
||||
s.postsRes.data.posts
|
||||
s.postsRes.data.posts,
|
||||
);
|
||||
}
|
||||
return s;
|
||||
|
|
|
@ -38,7 +38,7 @@ export class LoginReset extends Component<any, State> {
|
|||
|
||||
get documentTitle(): string {
|
||||
return `${capitalizeFirstLetter(
|
||||
I18NextService.i18n.t("forgot_password")
|
||||
I18NextService.i18n.t("forgot_password"),
|
||||
)} - ${this.state.siteRes.site_view.site.name}`;
|
||||
}
|
||||
|
||||
|
|
|
@ -88,7 +88,7 @@ function RateLimits({
|
|||
|
||||
function handleRateLimitChange(
|
||||
{ rateLimitType, ctx }: { rateLimitType: string; ctx: RateLimitsForm },
|
||||
event: any
|
||||
event: any,
|
||||
) {
|
||||
ctx.setState(prev => ({
|
||||
...prev,
|
||||
|
@ -101,7 +101,7 @@ function handleRateLimitChange(
|
|||
|
||||
function handlePerSecondChange(
|
||||
{ rateLimitType, ctx }: { rateLimitType: string; ctx: RateLimitsForm },
|
||||
event: any
|
||||
event: any,
|
||||
) {
|
||||
ctx.setState(prev => ({
|
||||
...prev,
|
||||
|
@ -122,7 +122,7 @@ function submitRateLimitForm(i: RateLimitsForm, event: any) {
|
|||
},
|
||||
{
|
||||
auth,
|
||||
}
|
||||
},
|
||||
);
|
||||
|
||||
i.props.onSaveSite(form);
|
||||
|
@ -159,11 +159,11 @@ export default class RateLimitsForm extends Component<
|
|||
})}
|
||||
handleRateLimit={linkEvent(
|
||||
{ rateLimitType, ctx: this },
|
||||
handleRateLimitChange
|
||||
handleRateLimitChange,
|
||||
)}
|
||||
handleRateLimitPerSecond={linkEvent(
|
||||
{ rateLimitType, ctx: this },
|
||||
handlePerSecondChange
|
||||
handlePerSecondChange,
|
||||
)}
|
||||
rateLimitValue={this.state.form[rateLimitType]}
|
||||
rateLimitPerSecondValue={
|
||||
|
|
|
@ -85,7 +85,7 @@ export class Signup extends Component<any, State> {
|
|||
|
||||
titleName(siteView: SiteView): string {
|
||||
return I18NextService.i18n.t(
|
||||
siteView.local_site.private_instance ? "apply_to_join" : "sign_up"
|
||||
siteView.local_site.private_instance ? "apply_to_join" : "sign_up",
|
||||
);
|
||||
}
|
||||
|
||||
|
@ -213,7 +213,7 @@ export class Signup extends Component<any, State> {
|
|||
<div
|
||||
className="md-div"
|
||||
dangerouslySetInnerHTML={mdToHtml(
|
||||
siteView.local_site.application_question
|
||||
siteView.local_site.application_question,
|
||||
)}
|
||||
/>
|
||||
)}
|
||||
|
@ -311,7 +311,7 @@ export class Signup extends Component<any, State> {
|
|||
value={this.state.form.captcha_answer}
|
||||
onInput={linkEvent(
|
||||
this,
|
||||
this.handleRegisterCaptchaAnswerChange
|
||||
this.handleRegisterCaptchaAnswerChange,
|
||||
)}
|
||||
required
|
||||
/>
|
||||
|
|
|
@ -319,7 +319,7 @@ export class SiteForm extends Component<SiteFormProps, SiteFormState> {
|
|||
checked={this.state.siteForm.community_creation_admin_only}
|
||||
onChange={linkEvent(
|
||||
this,
|
||||
this.handleSiteCommunityCreationAdminOnly
|
||||
this.handleSiteCommunityCreationAdminOnly,
|
||||
)}
|
||||
/>
|
||||
<label
|
||||
|
@ -341,7 +341,7 @@ export class SiteForm extends Component<SiteFormProps, SiteFormState> {
|
|||
checked={this.state.siteForm.require_email_verification}
|
||||
onChange={linkEvent(
|
||||
this,
|
||||
this.handleSiteRequireEmailVerification
|
||||
this.handleSiteRequireEmailVerification,
|
||||
)}
|
||||
/>
|
||||
<label
|
||||
|
@ -363,7 +363,7 @@ export class SiteForm extends Component<SiteFormProps, SiteFormState> {
|
|||
checked={this.state.siteForm.application_email_admins}
|
||||
onChange={linkEvent(
|
||||
this,
|
||||
this.handleSiteApplicationEmailAdmins
|
||||
this.handleSiteApplicationEmailAdmins,
|
||||
)}
|
||||
/>
|
||||
<label
|
||||
|
@ -631,7 +631,7 @@ export class SiteForm extends Component<SiteFormProps, SiteFormState> {
|
|||
}
|
||||
|
||||
componentDidUpdate(
|
||||
prevProps: Readonly<{ children?: InfernoNode } & SiteFormProps>
|
||||
prevProps: Readonly<{ children?: InfernoNode } & SiteFormProps>,
|
||||
) {
|
||||
if (
|
||||
!(
|
||||
|
@ -694,7 +694,7 @@ export class SiteForm extends Component<SiteFormProps, SiteFormState> {
|
|||
className="btn btn-sm bg-danger"
|
||||
onClick={linkEvent(
|
||||
{ key, instance },
|
||||
this.handleRemoveInstance
|
||||
this.handleRemoveInstance,
|
||||
)}
|
||||
>
|
||||
<Icon
|
||||
|
@ -722,7 +722,7 @@ export class SiteForm extends Component<SiteFormProps, SiteFormState> {
|
|||
|
||||
handleInstanceEnterPress(
|
||||
key: InstanceKey,
|
||||
event: InfernoKeyboardEvent<HTMLInputElement>
|
||||
event: InfernoKeyboardEvent<HTMLInputElement>,
|
||||
) {
|
||||
if (event.code.toLowerCase() === "enter") {
|
||||
event.preventDefault();
|
||||
|
@ -863,7 +863,7 @@ export class SiteForm extends Component<SiteFormProps, SiteFormState> {
|
|||
handleDeleteTaglineClick(
|
||||
i: SiteForm,
|
||||
index: number,
|
||||
event: InfernoMouseEvent<HTMLButtonElement>
|
||||
event: InfernoMouseEvent<HTMLButtonElement>,
|
||||
) {
|
||||
event.preventDefault();
|
||||
const taglines = i.state.siteForm.taglines;
|
||||
|
@ -878,7 +878,7 @@ export class SiteForm extends Component<SiteFormProps, SiteFormState> {
|
|||
|
||||
handleAddTaglineClick(
|
||||
i: SiteForm,
|
||||
event: InfernoMouseEvent<HTMLButtonElement>
|
||||
event: InfernoMouseEvent<HTMLButtonElement>,
|
||||
) {
|
||||
event.preventDefault();
|
||||
if (!i.state.siteForm.taglines) {
|
||||
|
@ -969,7 +969,7 @@ export class SiteForm extends Component<SiteFormProps, SiteFormState> {
|
|||
|
||||
handleSiteActorNameMaxLength(i: SiteForm, event: any) {
|
||||
i.setState(
|
||||
s => ((s.siteForm.actor_name_max_length = Number(event.target.value)), s)
|
||||
s => ((s.siteForm.actor_name_max_length = Number(event.target.value)), s),
|
||||
);
|
||||
}
|
||||
|
||||
|
|
|
@ -66,7 +66,7 @@ export class TaglineForm extends Component<TaglineFormProps, TaglineFormState> {
|
|||
className="btn btn-link btn-animate text-muted"
|
||||
onClick={linkEvent(
|
||||
{ i: this, index: index },
|
||||
this.handleEditTaglineClick
|
||||
this.handleEditTaglineClick,
|
||||
)}
|
||||
data-tippy-content={I18NextService.i18n.t("edit")}
|
||||
aria-label={I18NextService.i18n.t("edit")}
|
||||
|
@ -78,7 +78,7 @@ export class TaglineForm extends Component<TaglineFormProps, TaglineFormState> {
|
|||
className="btn btn-link btn-animate text-muted"
|
||||
onClick={linkEvent(
|
||||
{ i: this, index: index },
|
||||
this.handleDeleteTaglineClick
|
||||
this.handleDeleteTaglineClick,
|
||||
)}
|
||||
data-tippy-content={I18NextService.i18n.t("delete")}
|
||||
aria-label={I18NextService.i18n.t("delete")}
|
||||
|
@ -157,7 +157,7 @@ export class TaglineForm extends Component<TaglineFormProps, TaglineFormState> {
|
|||
|
||||
handleAddTaglineClick(
|
||||
i: TaglineForm,
|
||||
event: InfernoMouseEvent<HTMLButtonElement>
|
||||
event: InfernoMouseEvent<HTMLButtonElement>,
|
||||
) {
|
||||
event.preventDefault();
|
||||
const newTaglines = [...i.state.taglines];
|
||||
|
|
|
@ -121,7 +121,7 @@ function getActionFromString(action?: string): ModlogActionType {
|
|||
const getModlogActionMapper =
|
||||
(
|
||||
actionType: ModlogActionType,
|
||||
getAction: (view: View) => { id: number; when_: string }
|
||||
getAction: (view: View) => { id: number; when_: string },
|
||||
) =>
|
||||
(view: View & { moderator?: Person; admin?: Person }): ModlogType => {
|
||||
const { id, when_ } = getAction(view);
|
||||
|
@ -155,111 +155,111 @@ function buildCombined({
|
|||
.map(
|
||||
getModlogActionMapper(
|
||||
"ModRemovePost",
|
||||
({ mod_remove_post }: ModRemovePostView) => mod_remove_post
|
||||
)
|
||||
({ mod_remove_post }: ModRemovePostView) => mod_remove_post,
|
||||
),
|
||||
)
|
||||
.concat(
|
||||
locked_posts.map(
|
||||
getModlogActionMapper(
|
||||
"ModLockPost",
|
||||
({ mod_lock_post }: ModLockPostView) => mod_lock_post
|
||||
)
|
||||
)
|
||||
({ mod_lock_post }: ModLockPostView) => mod_lock_post,
|
||||
),
|
||||
),
|
||||
)
|
||||
.concat(
|
||||
featured_posts.map(
|
||||
getModlogActionMapper(
|
||||
"ModFeaturePost",
|
||||
({ mod_feature_post }: ModFeaturePostView) => mod_feature_post
|
||||
)
|
||||
)
|
||||
({ mod_feature_post }: ModFeaturePostView) => mod_feature_post,
|
||||
),
|
||||
),
|
||||
)
|
||||
.concat(
|
||||
removed_comments.map(
|
||||
getModlogActionMapper(
|
||||
"ModRemoveComment",
|
||||
({ mod_remove_comment }: ModRemoveCommentView) => mod_remove_comment
|
||||
)
|
||||
)
|
||||
({ mod_remove_comment }: ModRemoveCommentView) => mod_remove_comment,
|
||||
),
|
||||
),
|
||||
)
|
||||
.concat(
|
||||
removed_communities.map(
|
||||
getModlogActionMapper(
|
||||
"ModRemoveCommunity",
|
||||
({ mod_remove_community }: ModRemoveCommunityView) =>
|
||||
mod_remove_community
|
||||
)
|
||||
)
|
||||
mod_remove_community,
|
||||
),
|
||||
),
|
||||
)
|
||||
.concat(
|
||||
banned_from_community.map(
|
||||
getModlogActionMapper(
|
||||
"ModBanFromCommunity",
|
||||
({ mod_ban_from_community }: ModBanFromCommunityView) =>
|
||||
mod_ban_from_community
|
||||
)
|
||||
)
|
||||
mod_ban_from_community,
|
||||
),
|
||||
),
|
||||
)
|
||||
.concat(
|
||||
added_to_community.map(
|
||||
getModlogActionMapper(
|
||||
"ModAddCommunity",
|
||||
({ mod_add_community }: ModAddCommunityView) => mod_add_community
|
||||
)
|
||||
)
|
||||
({ mod_add_community }: ModAddCommunityView) => mod_add_community,
|
||||
),
|
||||
),
|
||||
)
|
||||
.concat(
|
||||
transferred_to_community.map(
|
||||
getModlogActionMapper(
|
||||
"ModTransferCommunity",
|
||||
({ mod_transfer_community }: ModTransferCommunityView) =>
|
||||
mod_transfer_community
|
||||
)
|
||||
)
|
||||
mod_transfer_community,
|
||||
),
|
||||
),
|
||||
)
|
||||
.concat(
|
||||
added.map(
|
||||
getModlogActionMapper("ModAdd", ({ mod_add }: ModAddView) => mod_add)
|
||||
)
|
||||
getModlogActionMapper("ModAdd", ({ mod_add }: ModAddView) => mod_add),
|
||||
),
|
||||
)
|
||||
.concat(
|
||||
banned.map(
|
||||
getModlogActionMapper("ModBan", ({ mod_ban }: ModBanView) => mod_ban)
|
||||
)
|
||||
getModlogActionMapper("ModBan", ({ mod_ban }: ModBanView) => mod_ban),
|
||||
),
|
||||
)
|
||||
.concat(
|
||||
admin_purged_persons.map(
|
||||
getModlogActionMapper(
|
||||
"AdminPurgePerson",
|
||||
({ admin_purge_person }: AdminPurgePersonView) => admin_purge_person
|
||||
)
|
||||
)
|
||||
({ admin_purge_person }: AdminPurgePersonView) => admin_purge_person,
|
||||
),
|
||||
),
|
||||
)
|
||||
.concat(
|
||||
admin_purged_communities.map(
|
||||
getModlogActionMapper(
|
||||
"AdminPurgeCommunity",
|
||||
({ admin_purge_community }: AdminPurgeCommunityView) =>
|
||||
admin_purge_community
|
||||
)
|
||||
)
|
||||
admin_purge_community,
|
||||
),
|
||||
),
|
||||
)
|
||||
.concat(
|
||||
admin_purged_posts.map(
|
||||
getModlogActionMapper(
|
||||
"AdminPurgePost",
|
||||
({ admin_purge_post }: AdminPurgePostView) => admin_purge_post
|
||||
)
|
||||
)
|
||||
({ admin_purge_post }: AdminPurgePostView) => admin_purge_post,
|
||||
),
|
||||
),
|
||||
)
|
||||
.concat(
|
||||
admin_purged_comments.map(
|
||||
getModlogActionMapper(
|
||||
"AdminPurgeComment",
|
||||
({ admin_purge_comment }: AdminPurgeCommentView) =>
|
||||
admin_purge_comment
|
||||
)
|
||||
)
|
||||
admin_purge_comment,
|
||||
),
|
||||
),
|
||||
);
|
||||
|
||||
// Sort them by time
|
||||
|
@ -622,7 +622,7 @@ async function createNewOptions({
|
|||
|
||||
if (id) {
|
||||
const selectedUser = oldOptions.find(
|
||||
({ value }) => value === id.toString()
|
||||
({ value }) => value === id.toString(),
|
||||
);
|
||||
|
||||
if (selectedUser) {
|
||||
|
@ -634,7 +634,7 @@ async function createNewOptions({
|
|||
newOptions.push(
|
||||
...(await fetchUsers(text))
|
||||
.slice(0, Number(fetchLimit))
|
||||
.map<Choice>(personToChoice)
|
||||
.map<Choice>(personToChoice),
|
||||
);
|
||||
}
|
||||
|
||||
|
@ -658,7 +658,7 @@ export class Modlog extends Component<
|
|||
|
||||
constructor(
|
||||
props: RouteComponentProps<{ communityId?: string }>,
|
||||
context: any
|
||||
context: any,
|
||||
) {
|
||||
super(props, context);
|
||||
this.handlePageChange = this.handlePageChange.bind(this);
|
||||
|
@ -731,7 +731,7 @@ export class Modlog extends Component<
|
|||
modOrAdminText(person?: Person): string {
|
||||
return person &&
|
||||
this.isoData.site_res.admins.some(
|
||||
({ person: { id } }) => id === person.id
|
||||
({ person: { id } }) => id === person.id,
|
||||
)
|
||||
? I18NextService.i18n.t("admin")
|
||||
: I18NextService.i18n.t("mod");
|
||||
|
@ -939,8 +939,8 @@ export class Modlog extends Component<
|
|||
|
||||
this.props.history.push(
|
||||
`/modlog${communityId ? `/${communityId}` : ""}${getQueryString(
|
||||
queryParams
|
||||
)}`
|
||||
queryParams,
|
||||
)}`,
|
||||
);
|
||||
|
||||
await this.refetch();
|
||||
|
|
|
@ -188,7 +188,7 @@ export class Inbox extends Component<any, InboxState> {
|
|||
const mui = UserService.Instance.myUserInfo;
|
||||
return mui
|
||||
? `@${mui.local_user_view.person.name} ${I18NextService.i18n.t(
|
||||
"inbox"
|
||||
"inbox",
|
||||
)} - ${this.state.siteRes.site_view.site.name}`
|
||||
: "";
|
||||
}
|
||||
|
@ -246,7 +246,7 @@ export class Inbox extends Component<any, InboxState> {
|
|||
<Spinner />
|
||||
) : (
|
||||
capitalizeFirstLetter(
|
||||
I18NextService.i18n.t("mark_all_as_read")
|
||||
I18NextService.i18n.t("mark_all_as_read"),
|
||||
)
|
||||
)}
|
||||
</button>
|
||||
|
@ -455,12 +455,12 @@ export class Inbox extends Component<any, InboxState> {
|
|||
const messages: ReplyType[] =
|
||||
this.state.messagesRes.state === "success"
|
||||
? this.state.messagesRes.data.private_messages.map(
|
||||
this.messageToReplyType
|
||||
this.messageToReplyType,
|
||||
)
|
||||
: [];
|
||||
|
||||
return [...replies, ...mentions, ...messages].sort((a, b) =>
|
||||
b.published.localeCompare(a.published)
|
||||
b.published.localeCompare(a.published),
|
||||
);
|
||||
}
|
||||
|
||||
|
@ -960,7 +960,7 @@ export class Inbox extends Component<any, InboxState> {
|
|||
this.setState(s => {
|
||||
if (s.messagesRes.state === "success" && res.state === "success") {
|
||||
s.messagesRes.data.private_messages.unshift(
|
||||
res.data.private_message_view
|
||||
res.data.private_message_view,
|
||||
);
|
||||
}
|
||||
|
||||
|
@ -973,7 +973,7 @@ export class Inbox extends Component<any, InboxState> {
|
|||
if (s.messagesRes.state === "success" && res.state === "success") {
|
||||
s.messagesRes.data.private_messages = editPrivateMessage(
|
||||
res.data.private_message_view,
|
||||
s.messagesRes.data.private_messages
|
||||
s.messagesRes.data.private_messages,
|
||||
);
|
||||
}
|
||||
return s;
|
||||
|
@ -988,14 +988,14 @@ export class Inbox extends Component<any, InboxState> {
|
|||
s.repliesRes.data.replies
|
||||
.filter(c => c.creator.id === banRes.data.person_view.person.id)
|
||||
.forEach(
|
||||
c => (c.creator_banned_from_community = banRes.data.banned)
|
||||
c => (c.creator_banned_from_community = banRes.data.banned),
|
||||
);
|
||||
}
|
||||
if (s.mentionsRes.state === "success") {
|
||||
s.mentionsRes.data.mentions
|
||||
.filter(c => c.creator.id === banRes.data.person_view.person.id)
|
||||
.forEach(
|
||||
c => (c.creator_banned_from_community = banRes.data.banned)
|
||||
c => (c.creator_banned_from_community = banRes.data.banned),
|
||||
);
|
||||
}
|
||||
return s;
|
||||
|
@ -1030,7 +1030,7 @@ export class Inbox extends Component<any, InboxState> {
|
|||
}
|
||||
|
||||
reportToast(
|
||||
res: RequestState<PrivateMessageReportResponse | CommentReportResponse>
|
||||
res: RequestState<PrivateMessageReportResponse | CommentReportResponse>,
|
||||
) {
|
||||
if (res.state === "success") {
|
||||
toast(I18NextService.i18n.t("report_created"));
|
||||
|
@ -1044,19 +1044,19 @@ export class Inbox extends Component<any, InboxState> {
|
|||
if (s.repliesRes.state === "success") {
|
||||
s.repliesRes.data.replies = editWith(
|
||||
res.data.comment_view,
|
||||
s.repliesRes.data.replies
|
||||
s.repliesRes.data.replies,
|
||||
);
|
||||
}
|
||||
if (s.mentionsRes.state === "success") {
|
||||
s.mentionsRes.data.mentions = editWith(
|
||||
res.data.comment_view,
|
||||
s.mentionsRes.data.mentions
|
||||
s.mentionsRes.data.mentions,
|
||||
);
|
||||
}
|
||||
// Set finished for the parent
|
||||
s.finished.set(
|
||||
getCommentParentId(res.data.comment_view.comment) ?? 0,
|
||||
true
|
||||
true,
|
||||
);
|
||||
return s;
|
||||
});
|
||||
|
@ -1068,7 +1068,7 @@ export class Inbox extends Component<any, InboxState> {
|
|||
if (s.repliesRes.state === "success" && res.state === "success") {
|
||||
s.repliesRes.data.replies = editCommentReply(
|
||||
res.data.comment_reply_view,
|
||||
s.repliesRes.data.replies
|
||||
s.repliesRes.data.replies,
|
||||
);
|
||||
}
|
||||
return s;
|
||||
|
@ -1080,7 +1080,7 @@ export class Inbox extends Component<any, InboxState> {
|
|||
if (s.mentionsRes.state === "success" && res.state === "success") {
|
||||
s.mentionsRes.data.mentions = editMention(
|
||||
res.data.person_mention_view,
|
||||
s.mentionsRes.data.mentions
|
||||
s.mentionsRes.data.mentions,
|
||||
);
|
||||
}
|
||||
return s;
|
||||
|
|
|
@ -57,7 +57,7 @@ export class PersonListing extends Component<PersonListingProps, any> {
|
|||
{
|
||||
"text-muted": this.props.muted,
|
||||
"text-info": !this.props.muted,
|
||||
}
|
||||
},
|
||||
)}
|
||||
to={link}
|
||||
>
|
||||
|
|
|
@ -132,7 +132,7 @@ function getViewFromProps(view?: string): PersonDetailsView {
|
|||
|
||||
const getCommunitiesListing = (
|
||||
translationKey: NoOptionI18nKeys,
|
||||
communityViews?: { community: Community }[]
|
||||
communityViews?: { community: Community }[],
|
||||
) =>
|
||||
communityViews &&
|
||||
communityViews.length > 0 && (
|
||||
|
@ -266,7 +266,7 @@ export class Profile extends Component<
|
|||
if (mui && res.state === "success") {
|
||||
this.setState({
|
||||
personBlocked: mui.person_blocks.some(
|
||||
({ target: { id } }) => id === res.data.person_view.person.id
|
||||
({ target: { id } }) => id === res.data.person_view.person.id,
|
||||
),
|
||||
});
|
||||
}
|
||||
|
@ -530,7 +530,7 @@ export class Profile extends Component<
|
|||
}
|
||||
onClick={linkEvent(
|
||||
pv.person.id,
|
||||
this.handleUnblockPerson
|
||||
this.handleUnblockPerson,
|
||||
)}
|
||||
>
|
||||
{I18NextService.i18n.t("unblock_user")}
|
||||
|
@ -542,7 +542,7 @@ export class Profile extends Component<
|
|||
}
|
||||
onClick={linkEvent(
|
||||
pv.person.id,
|
||||
this.handleBlockPerson
|
||||
this.handleBlockPerson,
|
||||
)}
|
||||
>
|
||||
{I18NextService.i18n.t("block_user")}
|
||||
|
@ -962,13 +962,13 @@ export class Profile extends Component<
|
|||
s.personRes.data.posts
|
||||
.filter(c => c.creator.id === banRes.data.person_view.person.id)
|
||||
.forEach(
|
||||
c => (c.creator_banned_from_community = banRes.data.banned)
|
||||
c => (c.creator_banned_from_community = banRes.data.banned),
|
||||
);
|
||||
|
||||
s.personRes.data.comments
|
||||
.filter(c => c.creator.id === banRes.data.person_view.person.id)
|
||||
.forEach(
|
||||
c => (c.creator_banned_from_community = banRes.data.banned)
|
||||
c => (c.creator_banned_from_community = banRes.data.banned),
|
||||
);
|
||||
}
|
||||
return s;
|
||||
|
@ -1006,7 +1006,7 @@ export class Profile extends Component<
|
|||
if (s.personRes.state === "success" && res.state === "success") {
|
||||
s.personRes.data.comments = editComment(
|
||||
res.data.comment_view,
|
||||
s.personRes.data.comments
|
||||
s.personRes.data.comments,
|
||||
);
|
||||
s.finished.set(res.data.comment_view.comment.id, true);
|
||||
}
|
||||
|
@ -1021,7 +1021,7 @@ export class Profile extends Component<
|
|||
// Set finished for the parent
|
||||
s.finished.set(
|
||||
getCommentParentId(res.data.comment_view.comment) ?? 0,
|
||||
true
|
||||
true,
|
||||
);
|
||||
}
|
||||
return s;
|
||||
|
@ -1033,7 +1033,7 @@ export class Profile extends Component<
|
|||
if (s.personRes.state === "success" && res.state === "success") {
|
||||
s.personRes.data.comments = editWith(
|
||||
res.data.comment_reply_view,
|
||||
s.personRes.data.comments
|
||||
s.personRes.data.comments,
|
||||
);
|
||||
}
|
||||
return s;
|
||||
|
@ -1045,7 +1045,7 @@ export class Profile extends Component<
|
|||
if (s.personRes.state === "success" && res.state === "success") {
|
||||
s.personRes.data.posts = editPost(
|
||||
res.data.post_view,
|
||||
s.personRes.data.posts
|
||||
s.personRes.data.posts,
|
||||
);
|
||||
}
|
||||
return s;
|
||||
|
|
|
@ -80,7 +80,7 @@ export class RegistrationApplications extends Component<
|
|||
const mui = UserService.Instance.myUserInfo;
|
||||
return mui
|
||||
? `@${mui.local_user_view.person.name} ${I18NextService.i18n.t(
|
||||
"registration_applications"
|
||||
"registration_applications",
|
||||
)} - ${this.state.siteRes.site_view.site.name}`
|
||||
: "";
|
||||
}
|
||||
|
@ -236,13 +236,13 @@ export class RegistrationApplications extends Component<
|
|||
|
||||
async handleApproveApplication(form: ApproveRegistrationApplication) {
|
||||
const approveRes = await HttpService.client.approveRegistrationApplication(
|
||||
form
|
||||
form,
|
||||
);
|
||||
this.setState(s => {
|
||||
if (s.appsRes.state === "success" && approveRes.state === "success") {
|
||||
s.appsRes.data.registration_applications = editRegistrationApplication(
|
||||
approveRes.data.registration_application,
|
||||
s.appsRes.data.registration_applications
|
||||
s.appsRes.data.registration_applications,
|
||||
);
|
||||
}
|
||||
return s;
|
||||
|
|
|
@ -140,7 +140,7 @@ export class Reports extends Component<any, ReportsState> {
|
|||
const mui = UserService.Instance.myUserInfo;
|
||||
return mui
|
||||
? `@${mui.local_user_view.person.name} ${I18NextService.i18n.t(
|
||||
"reports"
|
||||
"reports",
|
||||
)} - ${this.state.siteRes.site_view.site.name}`
|
||||
: "";
|
||||
}
|
||||
|
@ -365,12 +365,12 @@ export class Reports extends Component<any, ReportsState> {
|
|||
const privateMessages =
|
||||
pmRes.state === "success"
|
||||
? pmRes.data.private_message_reports.map(
|
||||
this.privateMessageReportToItemType
|
||||
this.privateMessageReportToItemType,
|
||||
)
|
||||
: [];
|
||||
|
||||
return [...comments, ...posts, ...privateMessages].sort((a, b) =>
|
||||
b.published.localeCompare(a.published)
|
||||
b.published.localeCompare(a.published),
|
||||
);
|
||||
}
|
||||
|
||||
|
@ -557,7 +557,7 @@ export class Reports extends Component<any, ReportsState> {
|
|||
};
|
||||
|
||||
data.messageReportsRes = await client.listPrivateMessageReports(
|
||||
privateMessageReportsForm
|
||||
privateMessageReportsForm,
|
||||
);
|
||||
}
|
||||
|
||||
|
@ -594,7 +594,7 @@ export class Reports extends Component<any, ReportsState> {
|
|||
if (amAdmin()) {
|
||||
this.setState({
|
||||
messageReportsRes: await HttpService.client.listPrivateMessageReports(
|
||||
form
|
||||
form,
|
||||
),
|
||||
});
|
||||
}
|
||||
|
@ -620,7 +620,7 @@ export class Reports extends Component<any, ReportsState> {
|
|||
if (s.commentReportsRes.state === "success" && res.state === "success") {
|
||||
s.commentReportsRes.data.comment_reports = editCommentReport(
|
||||
res.data.comment_report_view,
|
||||
s.commentReportsRes.data.comment_reports
|
||||
s.commentReportsRes.data.comment_reports,
|
||||
);
|
||||
}
|
||||
return s;
|
||||
|
@ -632,7 +632,7 @@ export class Reports extends Component<any, ReportsState> {
|
|||
if (s.postReportsRes.state === "success" && res.state === "success") {
|
||||
s.postReportsRes.data.post_reports = editPostReport(
|
||||
res.data.post_report_view,
|
||||
s.postReportsRes.data.post_reports
|
||||
s.postReportsRes.data.post_reports,
|
||||
);
|
||||
}
|
||||
return s;
|
||||
|
@ -640,14 +640,14 @@ export class Reports extends Component<any, ReportsState> {
|
|||
}
|
||||
|
||||
findAndUpdatePrivateMessageReport(
|
||||
res: RequestState<PrivateMessageReportResponse>
|
||||
res: RequestState<PrivateMessageReportResponse>,
|
||||
) {
|
||||
this.setState(s => {
|
||||
if (s.messageReportsRes.state === "success" && res.state === "success") {
|
||||
s.messageReportsRes.data.private_message_reports =
|
||||
editPrivateMessageReport(
|
||||
res.data.private_message_report_view,
|
||||
s.messageReportsRes.data.private_message_reports
|
||||
s.messageReportsRes.data.private_message_reports,
|
||||
);
|
||||
}
|
||||
return s;
|
||||
|
|
|
@ -391,7 +391,7 @@ export class Settings extends Component<any, SettingsState> {
|
|||
className="btn btn-sm"
|
||||
onClick={linkEvent(
|
||||
{ ctx: this, recipientId: pb.target.id },
|
||||
this.handleUnblockPerson
|
||||
this.handleUnblockPerson,
|
||||
)}
|
||||
data-tippy-content={I18NextService.i18n.t("unblock_user")}
|
||||
>
|
||||
|
@ -435,10 +435,10 @@ export class Settings extends Component<any, SettingsState> {
|
|||
className="btn btn-sm"
|
||||
onClick={linkEvent(
|
||||
{ ctx: this, communityId: cb.community.id },
|
||||
this.handleUnblockCommunity
|
||||
this.handleUnblockCommunity,
|
||||
)}
|
||||
data-tippy-content={I18NextService.i18n.t(
|
||||
"unblock_community"
|
||||
"unblock_community",
|
||||
)}
|
||||
>
|
||||
<Icon icon="x" classes="icon-inline" />
|
||||
|
@ -767,7 +767,7 @@ export class Settings extends Component<any, SettingsState> {
|
|||
}
|
||||
onChange={linkEvent(
|
||||
this,
|
||||
this.handleSendNotificationsToEmailChange
|
||||
this.handleSendNotificationsToEmailChange,
|
||||
)}
|
||||
/>
|
||||
<label
|
||||
|
@ -798,7 +798,7 @@ export class Settings extends Component<any, SettingsState> {
|
|||
className="btn d-block btn-danger"
|
||||
onClick={linkEvent(
|
||||
this,
|
||||
this.handleDeleteAccountShowConfirmToggle
|
||||
this.handleDeleteAccountShowConfirmToggle,
|
||||
)}
|
||||
>
|
||||
{I18NextService.i18n.t("delete_account")}
|
||||
|
@ -817,7 +817,7 @@ export class Settings extends Component<any, SettingsState> {
|
|||
value={this.state.deleteAccountForm.password}
|
||||
onInput={linkEvent(
|
||||
this,
|
||||
this.handleDeleteAccountPasswordChange
|
||||
this.handleDeleteAccountPasswordChange,
|
||||
)}
|
||||
className="my-2"
|
||||
/>
|
||||
|
@ -837,7 +837,7 @@ export class Settings extends Component<any, SettingsState> {
|
|||
type="button"
|
||||
onClick={linkEvent(
|
||||
this,
|
||||
this.handleDeleteAccountShowConfirmToggle
|
||||
this.handleDeleteAccountShowConfirmToggle,
|
||||
)}
|
||||
>
|
||||
{I18NextService.i18n.t("cancel")}
|
||||
|
@ -924,7 +924,7 @@ export class Settings extends Component<any, SettingsState> {
|
|||
|
||||
if (text.length > 0) {
|
||||
searchCommunityOptions.push(
|
||||
...(await fetchCommunities(text)).map(communityToChoice)
|
||||
...(await fetchCommunities(text)).map(communityToChoice),
|
||||
);
|
||||
}
|
||||
|
||||
|
@ -985,7 +985,7 @@ export class Settings extends Component<any, SettingsState> {
|
|||
|
||||
handleShowNsfwChange(i: Settings, event: any) {
|
||||
i.setState(
|
||||
s => ((s.saveUserSettingsForm.show_nsfw = event.target.checked), s)
|
||||
s => ((s.saveUserSettingsForm.show_nsfw = event.target.checked), s),
|
||||
);
|
||||
}
|
||||
|
||||
|
@ -995,13 +995,13 @@ export class Settings extends Component<any, SettingsState> {
|
|||
mui.local_user_view.local_user.show_avatars = event.target.checked;
|
||||
}
|
||||
i.setState(
|
||||
s => ((s.saveUserSettingsForm.show_avatars = event.target.checked), s)
|
||||
s => ((s.saveUserSettingsForm.show_avatars = event.target.checked), s),
|
||||
);
|
||||
}
|
||||
|
||||
handleBotAccount(i: Settings, event: any) {
|
||||
i.setState(
|
||||
s => ((s.saveUserSettingsForm.bot_account = event.target.checked), s)
|
||||
s => ((s.saveUserSettingsForm.bot_account = event.target.checked), s),
|
||||
);
|
||||
}
|
||||
|
||||
|
@ -1009,13 +1009,13 @@ export class Settings extends Component<any, SettingsState> {
|
|||
i.setState(
|
||||
s => (
|
||||
(s.saveUserSettingsForm.show_bot_accounts = event.target.checked), s
|
||||
)
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
handleReadPosts(i: Settings, event: any) {
|
||||
i.setState(
|
||||
s => ((s.saveUserSettingsForm.show_read_posts = event.target.checked), s)
|
||||
s => ((s.saveUserSettingsForm.show_read_posts = event.target.checked), s),
|
||||
);
|
||||
}
|
||||
|
||||
|
@ -1023,7 +1023,7 @@ export class Settings extends Component<any, SettingsState> {
|
|||
i.setState(
|
||||
s => (
|
||||
(s.saveUserSettingsForm.show_new_post_notifs = event.target.checked), s
|
||||
)
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
|
@ -1033,7 +1033,7 @@ export class Settings extends Component<any, SettingsState> {
|
|||
mui.local_user_view.local_user.show_scores = event.target.checked;
|
||||
}
|
||||
i.setState(
|
||||
s => ((s.saveUserSettingsForm.show_scores = event.target.checked), s)
|
||||
s => ((s.saveUserSettingsForm.show_scores = event.target.checked), s),
|
||||
);
|
||||
}
|
||||
|
||||
|
@ -1058,7 +1058,7 @@ export class Settings extends Component<any, SettingsState> {
|
|||
(s.saveUserSettingsForm.send_notifications_to_email =
|
||||
event.target.checked),
|
||||
s
|
||||
)
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
|
@ -1070,17 +1070,19 @@ export class Settings extends Component<any, SettingsState> {
|
|||
handleInterfaceLangChange(i: Settings, event: any) {
|
||||
const newLang = event.target.value ?? "browser";
|
||||
I18NextService.i18n.changeLanguage(
|
||||
newLang === "browser" ? navigator.languages : newLang
|
||||
newLang === "browser" ? navigator.languages : newLang,
|
||||
);
|
||||
|
||||
i.setState(
|
||||
s => ((s.saveUserSettingsForm.interface_language = event.target.value), s)
|
||||
s => (
|
||||
(s.saveUserSettingsForm.interface_language = event.target.value), s
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
handleDiscussionLanguageChange(val: number[]) {
|
||||
this.setState(
|
||||
s => ((s.saveUserSettingsForm.discussion_languages = val), s)
|
||||
s => ((s.saveUserSettingsForm.discussion_languages = val), s),
|
||||
);
|
||||
}
|
||||
|
||||
|
@ -1090,7 +1092,7 @@ export class Settings extends Component<any, SettingsState> {
|
|||
|
||||
handleListingTypeChange(val: ListingType) {
|
||||
this.setState(
|
||||
s => ((s.saveUserSettingsForm.default_listing_type = val), s)
|
||||
s => ((s.saveUserSettingsForm.default_listing_type = val), s),
|
||||
);
|
||||
}
|
||||
|
||||
|
@ -1120,13 +1122,13 @@ export class Settings extends Component<any, SettingsState> {
|
|||
|
||||
handleDisplayNameChange(i: Settings, event: any) {
|
||||
i.setState(
|
||||
s => ((s.saveUserSettingsForm.display_name = event.target.value), s)
|
||||
s => ((s.saveUserSettingsForm.display_name = event.target.value), s),
|
||||
);
|
||||
}
|
||||
|
||||
handleMatrixUserIdChange(i: Settings, event: any) {
|
||||
i.setState(
|
||||
s => ((s.saveUserSettingsForm.matrix_user_id = event.target.value), s)
|
||||
s => ((s.saveUserSettingsForm.matrix_user_id = event.target.value), s),
|
||||
);
|
||||
}
|
||||
|
||||
|
@ -1140,7 +1142,7 @@ export class Settings extends Component<any, SettingsState> {
|
|||
const newPassVerify: string | undefined =
|
||||
event.target.value === "" ? undefined : event.target.value;
|
||||
i.setState(
|
||||
s => ((s.changePasswordForm.new_password_verify = newPassVerify), s)
|
||||
s => ((s.changePasswordForm.new_password_verify = newPassVerify), s),
|
||||
);
|
||||
}
|
||||
|
||||
|
|
|
@ -121,7 +121,7 @@ export class CreatePost extends Component<
|
|||
const { communityId } = getCreatePostQueryParams();
|
||||
|
||||
const initialCommunitiesRes = await fetchCommunitiesForOptions(
|
||||
HttpService.client
|
||||
HttpService.client,
|
||||
);
|
||||
|
||||
this.setState({
|
||||
|
|
|
@ -122,7 +122,7 @@ function copySuggestedTitle(d: { i: PostForm; suggestedTitle?: string }) {
|
|||
const sTitle = d.suggestedTitle;
|
||||
if (sTitle) {
|
||||
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" } });
|
||||
setTimeout(() => {
|
||||
|
@ -271,9 +271,9 @@ export class PostForm extends Component<PostFormProps, PostFormState> {
|
|||
({ community: { id, title } }) => ({
|
||||
label: title,
|
||||
value: id.toString(),
|
||||
})
|
||||
}),
|
||||
) ?? []
|
||||
).filter(option => option.value !== selectedCommunityChoice.value)
|
||||
).filter(option => option.value !== selectedCommunityChoice.value),
|
||||
),
|
||||
};
|
||||
} else {
|
||||
|
@ -284,7 +284,7 @@ export class PostForm extends Component<PostFormProps, PostFormState> {
|
|||
({ community: { id, title } }) => ({
|
||||
label: title,
|
||||
value: id.toString(),
|
||||
})
|
||||
}),
|
||||
) ?? [],
|
||||
};
|
||||
}
|
||||
|
@ -310,16 +310,16 @@ export class PostForm extends Component<PostFormProps, PostFormState> {
|
|||
}
|
||||
|
||||
componentWillReceiveProps(
|
||||
nextProps: Readonly<{ children?: InfernoNode } & PostFormProps>
|
||||
nextProps: Readonly<{ children?: InfernoNode } & PostFormProps>,
|
||||
): void {
|
||||
if (this.props !== nextProps) {
|
||||
this.setState(
|
||||
s => (
|
||||
(s.form.community_id = getIdFromString(
|
||||
nextProps.selectedCommunityChoice?.value
|
||||
nextProps.selectedCommunityChoice?.value,
|
||||
)),
|
||||
s
|
||||
)
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
|
@ -367,7 +367,7 @@ export class PostForm extends Component<PostFormProps, PostFormState> {
|
|||
</a>
|
||||
<a
|
||||
href={`${ghostArchiveUrl}/search?term=${encodeURIComponent(
|
||||
url
|
||||
url,
|
||||
)}`}
|
||||
className="me-2 d-inline-block float-right text-muted small fw-bold"
|
||||
rel={relTags}
|
||||
|
@ -376,7 +376,7 @@ export class PostForm extends Component<PostFormProps, PostFormState> {
|
|||
</a>
|
||||
<a
|
||||
href={`${archiveTodayUrl}/?run=1&url=${encodeURIComponent(
|
||||
url
|
||||
url,
|
||||
)}`}
|
||||
className="me-2 d-inline-block float-right text-muted small fw-bold"
|
||||
rel={relTags}
|
||||
|
@ -590,7 +590,7 @@ export class PostForm extends Component<PostFormProps, PostFormState> {
|
|||
className="mt-1 small border-0 bg-transparent p-0 d-block text-muted fw-bold pointer"
|
||||
onClick={linkEvent(
|
||||
{ i: this, suggestedTitle },
|
||||
copySuggestedTitle
|
||||
copySuggestedTitle,
|
||||
)}
|
||||
>
|
||||
{I18NextService.i18n.t("copy_suggested_title", { title: "" })}{" "}
|
||||
|
|
|
@ -419,7 +419,7 @@ export class PostListing extends Component<PostListingProps, PostListingState> {
|
|||
<span className="mx-1 badge text-bg-light">
|
||||
{
|
||||
this.props.allLanguages.find(
|
||||
lang => lang.id === post_view.post.language_id
|
||||
lang => lang.id === post_view.post.language_id,
|
||||
)?.name
|
||||
}
|
||||
</span>
|
||||
|
@ -515,7 +515,7 @@ export class PostListing extends Component<PostListingProps, PostListingState> {
|
|||
<small
|
||||
className="unselectable pointer ms-2 text-muted fst-italic"
|
||||
data-tippy-content={I18NextService.i18n.t(
|
||||
"featured_in_community"
|
||||
"featured_in_community",
|
||||
)}
|
||||
aria-label={I18NextService.i18n.t("featured_in_community")}
|
||||
>
|
||||
|
@ -1115,7 +1115,7 @@ export class PostListing extends Component<PostListingProps, PostListingState> {
|
|||
className="btn btn-link btn-sm d-flex align-items-center rounded-0 dropdown-item"
|
||||
onClick={linkEvent(
|
||||
this,
|
||||
!removed ? this.handleModRemoveShow : this.handleModRemoveSubmit
|
||||
!removed ? this.handleModRemoveShow : this.handleModRemoveSubmit,
|
||||
)}
|
||||
>
|
||||
{/* TODO: Find an icon for this. */}
|
||||
|
@ -1188,7 +1188,7 @@ export class PostListing extends Component<PostListingProps, PostListingState> {
|
|||
className="btn btn-link btn-animate text-muted py-0 d-inline-block"
|
||||
onClick={linkEvent(
|
||||
this,
|
||||
this.handleCancelShowConfirmTransferCommunity
|
||||
this.handleCancelShowConfirmTransferCommunity,
|
||||
)}
|
||||
aria-label={I18NextService.i18n.t("no")}
|
||||
>
|
||||
|
@ -1772,7 +1772,7 @@ export class PostListing extends Component<PostListingProps, PostListingState> {
|
|||
this.props.moderators,
|
||||
this.props.admins,
|
||||
undefined,
|
||||
true
|
||||
true,
|
||||
);
|
||||
}
|
||||
|
||||
|
@ -1780,7 +1780,7 @@ export class PostListing extends Component<PostListingProps, PostListingState> {
|
|||
return canMod(
|
||||
this.postView.creator.id,
|
||||
this.props.moderators,
|
||||
this.props.admins
|
||||
this.props.admins,
|
||||
);
|
||||
}
|
||||
|
||||
|
|
|
@ -26,7 +26,7 @@ export class PostReport extends Component<PostReportProps, PostReportState> {
|
|||
}
|
||||
|
||||
componentWillReceiveProps(
|
||||
nextProps: Readonly<{ children?: InfernoNode } & PostReportProps>
|
||||
nextProps: Readonly<{ children?: InfernoNode } & PostReportProps>,
|
||||
): void {
|
||||
if (this.props !== nextProps) {
|
||||
this.setState({ loading: false });
|
||||
|
@ -38,7 +38,7 @@ export class PostReport extends Component<PostReportProps, PostReportState> {
|
|||
const resolver = r.resolver;
|
||||
const post = r.post;
|
||||
const tippyContent = I18NextService.i18n.t(
|
||||
r.post_report.resolved ? "unresolve_report" : "resolve_report"
|
||||
r.post_report.resolved ? "unresolve_report" : "resolve_report",
|
||||
);
|
||||
|
||||
// Set the original post data ( a troll could change it )
|
||||
|
|
|
@ -290,7 +290,7 @@ export class Post extends Component<any, PostState> {
|
|||
|
||||
get checkScrollIntoCommentsParam() {
|
||||
return Boolean(
|
||||
new URLSearchParams(this.props.location.search).get("scrollToComments")
|
||||
new URLSearchParams(this.props.location.search).get("scrollToComments"),
|
||||
);
|
||||
}
|
||||
|
||||
|
@ -667,7 +667,7 @@ export class Post extends Component<any, PostState> {
|
|||
if (this.state.commentsRes.state === "success") {
|
||||
return buildCommentsTree(
|
||||
this.state.commentsRes.data.comments,
|
||||
!!this.state.commentId
|
||||
!!this.state.commentId,
|
||||
);
|
||||
} else {
|
||||
return [];
|
||||
|
@ -705,7 +705,7 @@ export class Post extends Component<any, PostState> {
|
|||
handleViewContext(i: Post) {
|
||||
if (i.state.commentsRes.state === "success") {
|
||||
const parentId = getCommentParentId(
|
||||
i.state.commentsRes.data.comments.at(0)?.comment
|
||||
i.state.commentsRes.data.comments.at(0)?.comment,
|
||||
);
|
||||
if (parentId) {
|
||||
i.context.router.history.push(`/comment/${parentId}`);
|
||||
|
@ -887,7 +887,7 @@ export class Post extends Component<any, PostState> {
|
|||
|
||||
async handleTransferCommunity(form: TransferCommunity) {
|
||||
const transferCommunityRes = await HttpService.client.transferCommunity(
|
||||
form
|
||||
form,
|
||||
);
|
||||
this.updateCommunityFull(transferCommunityRes);
|
||||
}
|
||||
|
@ -943,7 +943,7 @@ export class Post extends Component<any, PostState> {
|
|||
s.commentsRes.data.comments
|
||||
.filter(c => c.creator.id === banRes.data.person_view.person.id)
|
||||
.forEach(
|
||||
c => (c.creator_banned_from_community = banRes.data.banned)
|
||||
c => (c.creator_banned_from_community = banRes.data.banned),
|
||||
);
|
||||
}
|
||||
return s;
|
||||
|
@ -1015,7 +1015,7 @@ export class Post extends Component<any, PostState> {
|
|||
// Set finished for the parent
|
||||
s.finished.set(
|
||||
getCommentParentId(res.data.comment_view.comment) ?? 0,
|
||||
true
|
||||
true,
|
||||
);
|
||||
}
|
||||
return s;
|
||||
|
@ -1027,7 +1027,7 @@ export class Post extends Component<any, PostState> {
|
|||
if (s.commentsRes.state === "success" && res.state === "success") {
|
||||
s.commentsRes.data.comments = editComment(
|
||||
res.data.comment_view,
|
||||
s.commentsRes.data.comments
|
||||
s.commentsRes.data.comments,
|
||||
);
|
||||
s.finished.set(res.data.comment_view.comment.id, true);
|
||||
}
|
||||
|
@ -1040,7 +1040,7 @@ export class Post extends Component<any, PostState> {
|
|||
if (s.commentsRes.state === "success" && res.state === "success") {
|
||||
s.commentsRes.data.comments = editWith(
|
||||
res.data.comment_reply_view,
|
||||
s.commentsRes.data.comments
|
||||
s.commentsRes.data.comments,
|
||||
);
|
||||
}
|
||||
return s;
|
||||
|
|
|
@ -56,7 +56,7 @@ export class PrivateMessageForm extends Component<
|
|||
}
|
||||
|
||||
componentWillReceiveProps(
|
||||
nextProps: Readonly<{ children?: InfernoNode } & PrivateMessageFormProps>
|
||||
nextProps: Readonly<{ children?: InfernoNode } & PrivateMessageFormProps>,
|
||||
): void {
|
||||
if (this.props !== nextProps) {
|
||||
this.setState({ loading: false, content: undefined, previewMode: false });
|
||||
|
|
|
@ -29,7 +29,7 @@ export class PrivateMessageReport extends Component<Props, State> {
|
|||
}
|
||||
|
||||
componentWillReceiveProps(
|
||||
nextProps: Readonly<{ children?: InfernoNode } & Props>
|
||||
nextProps: Readonly<{ children?: InfernoNode } & Props>,
|
||||
): void {
|
||||
if (this.props !== nextProps) {
|
||||
this.setState({ loading: false });
|
||||
|
@ -40,7 +40,7 @@ export class PrivateMessageReport extends Component<Props, State> {
|
|||
const r = this.props.report;
|
||||
const pmr = r.private_message_report;
|
||||
const tippyContent = I18NextService.i18n.t(
|
||||
r.private_message_report.resolved ? "unresolve_report" : "resolve_report"
|
||||
r.private_message_report.resolved ? "unresolve_report" : "resolve_report",
|
||||
);
|
||||
|
||||
return (
|
||||
|
|
|
@ -65,7 +65,7 @@ export class PrivateMessage extends Component<
|
|||
}
|
||||
|
||||
componentWillReceiveProps(
|
||||
nextProps: Readonly<{ children?: InfernoNode } & PrivateMessageProps>
|
||||
nextProps: Readonly<{ children?: InfernoNode } & PrivateMessageProps>,
|
||||
): void {
|
||||
if (this.props !== nextProps) {
|
||||
this.setState({
|
||||
|
|
|
@ -209,20 +209,20 @@ const communityListing = ({
|
|||
getListing(
|
||||
<CommunityLink community={community} />,
|
||||
subscribers,
|
||||
"number_of_subscribers"
|
||||
"number_of_subscribers",
|
||||
);
|
||||
|
||||
const personListing = ({ person, counts: { comment_count } }: PersonView) =>
|
||||
getListing(
|
||||
<PersonListing person={person} showApubName />,
|
||||
comment_count,
|
||||
"number_of_comments"
|
||||
"number_of_comments",
|
||||
);
|
||||
|
||||
function getListing(
|
||||
listing: JSX.ElementClass,
|
||||
count: number,
|
||||
translationKey: "number_of_comments" | "number_of_subscribers"
|
||||
translationKey: "number_of_comments" | "number_of_subscribers",
|
||||
) {
|
||||
return (
|
||||
<>
|
||||
|
@ -386,7 +386,7 @@ export class Search extends Component<any, SearchState> {
|
|||
};
|
||||
|
||||
listCommunitiesResponse = await client.listCommunities(
|
||||
listCommunitiesForm
|
||||
listCommunitiesForm,
|
||||
);
|
||||
}
|
||||
|
||||
|
@ -431,7 +431,7 @@ export class Search extends Component<any, SearchState> {
|
|||
auth,
|
||||
};
|
||||
resolveObjectResponse = await HttpService.silent_client.resolveObject(
|
||||
resolveObjectForm
|
||||
resolveObjectForm,
|
||||
);
|
||||
|
||||
// If we return this object with a state of failed, the catch-all-handler will redirect
|
||||
|
@ -564,7 +564,7 @@ export class Search extends Component<any, SearchState> {
|
|||
{searchTypes.map(option => (
|
||||
<option value={option} key={option}>
|
||||
{I18NextService.i18n.t(
|
||||
option.toString().toLowerCase() as NoOptionI18nKeys
|
||||
option.toString().toLowerCase() as NoOptionI18nKeys,
|
||||
)}
|
||||
</option>
|
||||
))}
|
||||
|
@ -646,7 +646,7 @@ export class Search extends Component<any, SearchState> {
|
|||
...(posts?.map(postViewToCombined) ?? []),
|
||||
...(communities?.map(communityViewToCombined) ?? []),
|
||||
...(users?.map(personViewSafeToCombined) ?? []),
|
||||
]
|
||||
],
|
||||
);
|
||||
}
|
||||
|
||||
|
@ -663,8 +663,8 @@ export class Search extends Component<any, SearchState> {
|
|||
(b.data as PersonView).counts.comment_score) -
|
||||
((a.data as CommentView | PostView).counts.score |
|
||||
(a.data as CommunityView).counts.subscribers |
|
||||
(a.data as PersonView).counts.comment_score)
|
||||
)
|
||||
(a.data as PersonView).counts.comment_score),
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
|
@ -984,7 +984,7 @@ export class Search extends Component<any, SearchState> {
|
|||
this.setState({ searchCreatorLoading: true });
|
||||
|
||||
const selectedChoice = creatorSearchOptions.find(
|
||||
choice => getIdFromString(choice.value) === creatorId
|
||||
choice => getIdFromString(choice.value) === creatorId,
|
||||
);
|
||||
|
||||
if (selectedChoice) {
|
||||
|
@ -1011,7 +1011,7 @@ export class Search extends Component<any, SearchState> {
|
|||
const newOptions: Choice[] = [];
|
||||
|
||||
const selectedChoice = communitySearchOptions.find(
|
||||
choice => getIdFromString(choice.value) === communityId
|
||||
choice => getIdFromString(choice.value) === communityId,
|
||||
);
|
||||
|
||||
if (selectedChoice) {
|
||||
|
|
|
@ -191,7 +191,7 @@ export function setupMarkdown() {
|
|||
idx: number,
|
||||
options: MarkdownIt.Options,
|
||||
env: any,
|
||||
self: Renderer
|
||||
self: Renderer,
|
||||
) {
|
||||
//Provide custom renderer for our emojis to allow us to add a css class and force size dimensions on them.
|
||||
const item = tokens[idx] as any;
|
||||
|
@ -215,7 +215,7 @@ export function setupMarkdown() {
|
|||
export function setupEmojiDataModel(custom_emoji_views: CustomEmojiView[]) {
|
||||
const groupedEmojis = groupBy(
|
||||
custom_emoji_views,
|
||||
x => x.custom_emoji.category
|
||||
x => x.custom_emoji.category,
|
||||
);
|
||||
for (const [category, emojis] of Object.entries(groupedEmojis)) {
|
||||
customEmojis.push({
|
||||
|
@ -230,7 +230,7 @@ export function setupEmojiDataModel(custom_emoji_views: CustomEmojiView[]) {
|
|||
});
|
||||
}
|
||||
customEmojisLookup = new Map(
|
||||
custom_emoji_views.map(view => [view.custom_emoji.shortcode, view])
|
||||
custom_emoji_views.map(view => [view.custom_emoji.shortcode, view]),
|
||||
);
|
||||
}
|
||||
|
||||
|
@ -242,7 +242,7 @@ export function updateEmojiDataModel(custom_emoji_view: CustomEmojiView) {
|
|||
skins: [{ src: custom_emoji_view.custom_emoji.image_url }],
|
||||
};
|
||||
const categoryIndex = customEmojis.findIndex(
|
||||
x => x.id === custom_emoji_view.custom_emoji.category
|
||||
x => x.id === custom_emoji_view.custom_emoji.category,
|
||||
);
|
||||
if (categoryIndex === -1) {
|
||||
customEmojis.push({
|
||||
|
@ -252,7 +252,7 @@ export function updateEmojiDataModel(custom_emoji_view: CustomEmojiView) {
|
|||
});
|
||||
} else {
|
||||
const emojiIndex = customEmojis[categoryIndex].emojis.findIndex(
|
||||
x => x.id === custom_emoji_view.custom_emoji.shortcode
|
||||
x => x.id === custom_emoji_view.custom_emoji.shortcode,
|
||||
);
|
||||
if (emojiIndex === -1) {
|
||||
customEmojis[categoryIndex].emojis.push(emoji);
|
||||
|
@ -262,7 +262,7 @@ export function updateEmojiDataModel(custom_emoji_view: CustomEmojiView) {
|
|||
}
|
||||
customEmojisLookup.set(
|
||||
custom_emoji_view.custom_emoji.shortcode,
|
||||
custom_emoji_view
|
||||
custom_emoji_view,
|
||||
);
|
||||
}
|
||||
|
||||
|
@ -276,10 +276,10 @@ export function removeFromEmojiDataModel(id: number) {
|
|||
}
|
||||
if (!view) return;
|
||||
const categoryIndex = customEmojis.findIndex(
|
||||
x => x.id === view?.custom_emoji.category
|
||||
x => x.id === view?.custom_emoji.category,
|
||||
);
|
||||
const emojiIndex = customEmojis[categoryIndex].emojis.findIndex(
|
||||
x => x.id === view?.custom_emoji.shortcode
|
||||
x => x.id === view?.custom_emoji.shortcode,
|
||||
);
|
||||
customEmojis[categoryIndex].emojis = customEmojis[
|
||||
categoryIndex
|
||||
|
@ -290,7 +290,7 @@ export function removeFromEmojiDataModel(id: number) {
|
|||
|
||||
export function getEmojiMart(
|
||||
onEmojiSelect: (e: any) => void,
|
||||
customPickerOptions: any = {}
|
||||
customPickerOptions: any = {},
|
||||
) {
|
||||
const pickerOptions = {
|
||||
...customPickerOptions,
|
||||
|
@ -314,9 +314,8 @@ export function setupTribute() {
|
|||
return `${item.original.val} ${shortName}`;
|
||||
},
|
||||
selectTemplate: (item: any) => {
|
||||
const customEmoji = customEmojisLookup.get(
|
||||
item.original.key
|
||||
)?.custom_emoji;
|
||||
const customEmoji = customEmojisLookup.get(item.original.key)
|
||||
?.custom_emoji;
|
||||
if (customEmoji === undefined) return `${item.original.val}`;
|
||||
else
|
||||
return `![${customEmoji.alt_text}](${customEmoji.image_url} "${customEmoji.shortcode}")`;
|
||||
|
@ -329,7 +328,7 @@ export function setupTribute() {
|
|||
Array.from(customEmojisLookup.entries()).map(k => ({
|
||||
key: k[0],
|
||||
val: `<img class="icon icon-emoji" src="${k[1].custom_emoji.image_url}" title="${k[1].custom_emoji.shortcode}" alt="${k[1].custom_emoji.alt_text}" />`,
|
||||
}))
|
||||
})),
|
||||
),
|
||||
allowSpaces: false,
|
||||
autocompleteMode: true,
|
||||
|
|
|
@ -49,7 +49,7 @@ class WrappedLemmyHttpClient {
|
|||
this.#client = client;
|
||||
|
||||
for (const key of Object.getOwnPropertyNames(
|
||||
Object.getPrototypeOf(this.#client)
|
||||
Object.getPrototypeOf(this.#client),
|
||||
)) {
|
||||
if (key !== "constructor") {
|
||||
WrappedLemmyHttpClient.prototype[key] = async (...args) => {
|
||||
|
@ -80,7 +80,7 @@ export function wrapClient(client: LemmyHttp, silent = false) {
|
|||
// unfortunately, this verbose cast is necessary
|
||||
return new WrappedLemmyHttpClient(
|
||||
client,
|
||||
silent
|
||||
silent,
|
||||
) as unknown as WrappedLemmyHttp;
|
||||
}
|
||||
|
||||
|
|
|
@ -28,7 +28,7 @@ export function pictrsDeleteToast(filename: string, deleteUrl: string) {
|
|||
"failed_to_delete_picture",
|
||||
{
|
||||
filename,
|
||||
}
|
||||
},
|
||||
);
|
||||
|
||||
const backgroundColor = `var(--bs-light)`;
|
||||
|
|
|
@ -4,7 +4,7 @@ import { CommentNodeI } from "../../interfaces";
|
|||
|
||||
export default function buildCommentsTree(
|
||||
comments: CommentView[],
|
||||
parentComment: boolean
|
||||
parentComment: boolean,
|
||||
): CommentNodeI[] {
|
||||
const map = new Map<number, CommentNodeI>();
|
||||
const depthOffset = !parentComment
|
||||
|
|
|
@ -2,7 +2,7 @@ import { CommentView } from "lemmy-js-client";
|
|||
import { CommentNodeI } from "../../interfaces";
|
||||
|
||||
export default function commentsToFlatNodes(
|
||||
comments: CommentView[]
|
||||
comments: CommentView[],
|
||||
): CommentNodeI[] {
|
||||
const nodes: CommentNodeI[] = [];
|
||||
for (const comment of comments) {
|
||||
|
|
|
@ -3,7 +3,7 @@ import { hostname } from "@utils/helpers";
|
|||
import { CommunityTribute } from "@utils/types";
|
||||
|
||||
export default async function communitySearch(
|
||||
text: string
|
||||
text: string,
|
||||
): Promise<CommunityTribute[]> {
|
||||
const communitiesResponse = await fetchCommunities(text);
|
||||
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
import { CommentSortType, SortType } from "lemmy-js-client";
|
||||
|
||||
export default function convertCommentSortType(
|
||||
sort: SortType
|
||||
sort: SortType,
|
||||
): CommentSortType {
|
||||
switch (sort) {
|
||||
case "TopAll":
|
||||
|
|
|
@ -3,7 +3,7 @@ import { CommentReplyView } from "lemmy-js-client";
|
|||
|
||||
export default function editCommentReply(
|
||||
data: CommentReplyView,
|
||||
replies: CommentReplyView[]
|
||||
replies: CommentReplyView[],
|
||||
): CommentReplyView[] {
|
||||
return editListImmutable("comment_reply", data, replies);
|
||||
}
|
||||
|
|
|
@ -3,7 +3,7 @@ import { CommentReportView } from "lemmy-js-client";
|
|||
|
||||
export default function editCommentReport(
|
||||
data: CommentReportView,
|
||||
reports: CommentReportView[]
|
||||
reports: CommentReportView[],
|
||||
): CommentReportView[] {
|
||||
return editListImmutable("comment_report", data, reports);
|
||||
}
|
||||
|
|
|
@ -3,7 +3,7 @@ import { CommentView } from "lemmy-js-client";
|
|||
|
||||
export default function editComment(
|
||||
data: CommentView,
|
||||
comments: CommentView[]
|
||||
comments: CommentView[],
|
||||
): CommentView[] {
|
||||
return editListImmutable("comment", data, comments);
|
||||
}
|
||||
|
|
|
@ -3,7 +3,7 @@ import { CommunityView } from "lemmy-js-client";
|
|||
|
||||
export default function editCommunity(
|
||||
data: CommunityView,
|
||||
communities: CommunityView[]
|
||||
communities: CommunityView[],
|
||||
): CommunityView[] {
|
||||
return editListImmutable("community", data, communities);
|
||||
}
|
||||
|
|
|
@ -3,7 +3,7 @@ import { PersonMentionView } from "lemmy-js-client";
|
|||
|
||||
export default function editMention(
|
||||
data: PersonMentionView,
|
||||
comments: PersonMentionView[]
|
||||
comments: PersonMentionView[],
|
||||
): PersonMentionView[] {
|
||||
return editListImmutable("person_mention", data, comments);
|
||||
}
|
||||
|
|
|
@ -3,7 +3,7 @@ import { PostReportView } from "lemmy-js-client";
|
|||
|
||||
export default function editPostReport(
|
||||
data: PostReportView,
|
||||
reports: PostReportView[]
|
||||
reports: PostReportView[],
|
||||
) {
|
||||
return editListImmutable("post_report", data, reports);
|
||||
}
|
||||
|
|
|
@ -3,7 +3,7 @@ import { PostView } from "lemmy-js-client";
|
|||
|
||||
export default function editPost(
|
||||
data: PostView,
|
||||
posts: PostView[]
|
||||
posts: PostView[],
|
||||
): PostView[] {
|
||||
return editListImmutable("post", data, posts);
|
||||
}
|
||||
|
|
|
@ -3,7 +3,7 @@ import { PrivateMessageReportView } from "lemmy-js-client";
|
|||
|
||||
export default function editPrivateMessageReport(
|
||||
data: PrivateMessageReportView,
|
||||
reports: PrivateMessageReportView[]
|
||||
reports: PrivateMessageReportView[],
|
||||
): PrivateMessageReportView[] {
|
||||
return editListImmutable("private_message_report", data, reports);
|
||||
}
|
||||
|
|
|
@ -3,7 +3,7 @@ import { PrivateMessageView } from "lemmy-js-client";
|
|||
|
||||
export default function editPrivateMessage(
|
||||
data: PrivateMessageView,
|
||||
messages: PrivateMessageView[]
|
||||
messages: PrivateMessageView[],
|
||||
): PrivateMessageView[] {
|
||||
return editListImmutable("private_message", data, messages);
|
||||
}
|
||||
|
|
|
@ -3,7 +3,7 @@ import { RegistrationApplicationView } from "lemmy-js-client";
|
|||
|
||||
export default function editRegistrationApplication(
|
||||
data: RegistrationApplicationView,
|
||||
apps: RegistrationApplicationView[]
|
||||
apps: RegistrationApplicationView[],
|
||||
): RegistrationApplicationView[] {
|
||||
return editListImmutable("registration_application", data, apps);
|
||||
}
|
||||
|
|
|
@ -2,13 +2,13 @@ import { WithComment } from "@utils/types";
|
|||
|
||||
export default function editWith<D extends WithComment, L extends WithComment>(
|
||||
{ comment, counts, saved, my_vote }: D,
|
||||
list: L[]
|
||||
list: L[],
|
||||
) {
|
||||
return [
|
||||
...list.map(c =>
|
||||
c.comment.id === comment.id
|
||||
? { ...c, comment, counts, saved, my_vote }
|
||||
: c
|
||||
: c,
|
||||
),
|
||||
];
|
||||
}
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
import { Comment } from "lemmy-js-client";
|
||||
|
||||
export default function getCommentParentId(
|
||||
comment?: Comment
|
||||
comment?: Comment,
|
||||
): number | undefined {
|
||||
const split = comment?.path.split(".");
|
||||
// remove the 0
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
import { Comment } from "lemmy-js-client";
|
||||
|
||||
export default function getDepthFromComment(
|
||||
comment?: Comment
|
||||
comment?: Comment,
|
||||
): number | undefined {
|
||||
const len = comment?.path.split(".").length;
|
||||
return len ? len - 2 : undefined;
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
export default function getUpdatedSearchId(
|
||||
id?: number | null,
|
||||
urlId?: number | null
|
||||
urlId?: number | null,
|
||||
) {
|
||||
return id === null
|
||||
? undefined
|
||||
|
|
|
@ -5,7 +5,7 @@ import { CommentNodeI } from "../../interfaces";
|
|||
export default function insertCommentIntoTree(
|
||||
tree: CommentNodeI[],
|
||||
cv: CommentView,
|
||||
parentComment: boolean
|
||||
parentComment: boolean,
|
||||
) {
|
||||
// Building a fake node to be used for later
|
||||
const node: CommentNodeI = {
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
export default function isAuthPath(pathname: string) {
|
||||
return /^\/(create_.*?|inbox|settings|admin|reports|registration_applications)\b/g.test(
|
||||
pathname
|
||||
pathname,
|
||||
);
|
||||
}
|
||||
|
|
|
@ -3,7 +3,7 @@ import { UserService } from "../../services";
|
|||
|
||||
export default function isPostBlocked(
|
||||
pv: PostView,
|
||||
myUserInfo: MyUserInfo | undefined = UserService.Instance.myUserInfo
|
||||
myUserInfo: MyUserInfo | undefined = UserService.Instance.myUserInfo,
|
||||
): boolean {
|
||||
return (
|
||||
(myUserInfo?.community_blocks
|
||||
|
|
|
@ -3,7 +3,7 @@ import { UserService } from "../../services";
|
|||
|
||||
export default function nsfwCheck(
|
||||
pv: PostView,
|
||||
myUserInfo = UserService.Instance.myUserInfo
|
||||
myUserInfo = UserService.Instance.myUserInfo,
|
||||
): boolean {
|
||||
const nsfw = pv.post.nsfw || pv.community.nsfw;
|
||||
const myShowNsfw = myUserInfo?.local_user_view.local_user.show_nsfw ?? false;
|
||||
|
|
|
@ -3,7 +3,7 @@ import { hostname } from "@utils/helpers";
|
|||
import { PersonTribute } from "@utils/types";
|
||||
|
||||
export default async function personSearch(
|
||||
text: string
|
||||
text: string,
|
||||
): Promise<PersonTribute[]> {
|
||||
const usersResponse = await fetchUsers(text);
|
||||
|
||||
|
|
|
@ -2,7 +2,7 @@ import { CommentNodeI } from "../../interfaces";
|
|||
|
||||
export default function searchCommentTree(
|
||||
tree: CommentNodeI[],
|
||||
id: number
|
||||
id: number,
|
||||
): CommentNodeI | undefined {
|
||||
for (const node of tree) {
|
||||
if (node.comment_view.comment.id === id) {
|
||||
|
|
|
@ -13,7 +13,7 @@ export default function selectableLanguages(
|
|||
siteLanguages: number[],
|
||||
showAll?: boolean,
|
||||
showSite?: boolean,
|
||||
myUserInfo = UserService.Instance.myUserInfo
|
||||
myUserInfo = UserService.Instance.myUserInfo,
|
||||
): Language[] {
|
||||
const allLangIds = allLanguages.map(l => l.id);
|
||||
let myLangs = myUserInfo?.discussion_languages ?? allLangIds;
|
||||
|
|
|
@ -2,7 +2,7 @@ import { isBrowser } from "@utils/browser";
|
|||
import { IsoData, RouteData } from "../../interfaces";
|
||||
|
||||
export default function setIsoData<T extends RouteData>(
|
||||
context: any
|
||||
context: any,
|
||||
): IsoData<T> {
|
||||
// If its the browser, you need to deserialize the data from the window
|
||||
if (isBrowser()) {
|
||||
|
|
|
@ -30,7 +30,7 @@ export default async function () {
|
|||
).default;
|
||||
} catch (e) {
|
||||
console.log(
|
||||
`Could not load locale ${lang} from date-fns, falling back to ${EN_US}`
|
||||
`Could not load locale ${lang} from date-fns, falling back to ${EN_US}`,
|
||||
);
|
||||
locale = (
|
||||
await import(
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
import { UserService } from "../../services";
|
||||
|
||||
export default function showAvatars(
|
||||
myUserInfo = UserService.Instance.myUserInfo
|
||||
myUserInfo = UserService.Instance.myUserInfo,
|
||||
): boolean {
|
||||
return myUserInfo?.local_user_view.local_user.show_avatars ?? true;
|
||||
}
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
import { UserService } from "../../services";
|
||||
|
||||
export default function showScores(
|
||||
myUserInfo = UserService.Instance.myUserInfo
|
||||
myUserInfo = UserService.Instance.myUserInfo,
|
||||
): boolean {
|
||||
return myUserInfo?.local_user_view.local_user.show_scores ?? true;
|
||||
}
|
||||
|
|
|
@ -4,7 +4,7 @@ import { toast } from "../../toast";
|
|||
|
||||
export default function updateCommunityBlock(
|
||||
data: BlockCommunityResponse,
|
||||
myUserInfo: MyUserInfo | undefined = UserService.Instance.myUserInfo
|
||||
myUserInfo: MyUserInfo | undefined = UserService.Instance.myUserInfo,
|
||||
) {
|
||||
if (myUserInfo) {
|
||||
if (data.blocked) {
|
||||
|
@ -15,16 +15,16 @@ export default function updateCommunityBlock(
|
|||
toast(
|
||||
`${I18NextService.i18n.t("blocked")} ${
|
||||
data.community_view.community.name
|
||||
}`
|
||||
}`,
|
||||
);
|
||||
} else {
|
||||
myUserInfo.community_blocks = myUserInfo.community_blocks.filter(
|
||||
i => i.community.id !== data.community_view.community.id
|
||||
i => i.community.id !== data.community_view.community.id,
|
||||
);
|
||||
toast(
|
||||
`${I18NextService.i18n.t("unblocked")} ${
|
||||
data.community_view.community.name
|
||||
}`
|
||||
}`,
|
||||
);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -4,7 +4,7 @@ import { toast } from "../../toast";
|
|||
|
||||
export default function updatePersonBlock(
|
||||
data: BlockPersonResponse,
|
||||
myUserInfo: MyUserInfo | undefined = UserService.Instance.myUserInfo
|
||||
myUserInfo: MyUserInfo | undefined = UserService.Instance.myUserInfo,
|
||||
) {
|
||||
if (myUserInfo) {
|
||||
if (data.blocked) {
|
||||
|
@ -13,14 +13,14 @@ export default function updatePersonBlock(
|
|||
target: data.person_view.person,
|
||||
});
|
||||
toast(
|
||||
`${I18NextService.i18n.t("blocked")} ${data.person_view.person.name}`
|
||||
`${I18NextService.i18n.t("blocked")} ${data.person_view.person.name}`,
|
||||
);
|
||||
} else {
|
||||
myUserInfo.person_blocks = myUserInfo.person_blocks.filter(
|
||||
i => i.target.id !== data.person_view.person.id
|
||||
i => i.target.id !== data.person_view.person.id,
|
||||
);
|
||||
toast(
|
||||
`${I18NextService.i18n.t("unblocked")} ${data.person_view.person.name}`
|
||||
`${I18NextService.i18n.t("unblocked")} ${data.person_view.person.name}`,
|
||||
);
|
||||
}
|
||||
}
|
||||
|
|
2
src/shared/utils/env/http-external-path.ts
vendored
2
src/shared/utils/env/http-external-path.ts
vendored
|
@ -4,6 +4,6 @@ import { getExternalHost, getSecure } from "@utils/env";
|
|||
export default function httpExternalPath(path: string) {
|
||||
return `http${getSecure()}://${getExternalHost().replace(
|
||||
/:\d+/g,
|
||||
""
|
||||
"",
|
||||
)}${path}`;
|
||||
}
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
export default function debounce<T extends any[], R>(
|
||||
func: (...e: T) => R,
|
||||
wait = 1000,
|
||||
immediate = false
|
||||
immediate = false,
|
||||
) {
|
||||
let timeout: NodeJS.Timeout | null;
|
||||
|
||||
|
|
|
@ -12,7 +12,7 @@ type ImmutableListKey =
|
|||
|
||||
export default function editListImmutable<
|
||||
T extends { [key in F]: { id: number } },
|
||||
F extends ImmutableListKey
|
||||
F extends ImmutableListKey,
|
||||
>(fieldName: F, data: T, list: T[]): T[] {
|
||||
return [
|
||||
...list.map(c => (c[fieldName].id === data[fieldName].id ? data : c)),
|
||||
|
|
|
@ -1,9 +1,9 @@
|
|||
export default function futureDaysToUnixTime(
|
||||
days?: number
|
||||
days?: number,
|
||||
): number | undefined {
|
||||
return days
|
||||
? Math.trunc(
|
||||
new Date(Date.now() + 1000 * 60 * 60 * 24 * days).getTime() / 1000
|
||||
new Date(Date.now() + 1000 * 60 * 60 * 24 * days).getTime() / 1000,
|
||||
)
|
||||
: undefined;
|
||||
}
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
import { isBrowser } from "@utils/browser";
|
||||
|
||||
export default function getQueryParams<
|
||||
T extends Record<string, any>
|
||||
T extends Record<string, any>,
|
||||
>(processors: {
|
||||
[K in keyof T]: (param: string) => T[K];
|
||||
}): T {
|
||||
|
@ -13,7 +13,7 @@ export default function getQueryParams<
|
|||
...acc,
|
||||
[key]: process(searchParams.get(key)),
|
||||
}),
|
||||
{} as T
|
||||
{} as T,
|
||||
);
|
||||
}
|
||||
|
||||
|
|
|
@ -1,10 +1,10 @@
|
|||
export default function getQueryString<
|
||||
T extends Record<string, string | undefined>
|
||||
T extends Record<string, string | undefined>,
|
||||
>(obj: T) {
|
||||
return Object.entries(obj)
|
||||
.filter(([, val]) => val !== undefined && val !== null)
|
||||
.reduce(
|
||||
(acc, [key, val], index) => `${acc}${index > 0 ? "&" : ""}${key}=${val}`,
|
||||
"?"
|
||||
"?",
|
||||
);
|
||||
}
|
||||
|
|
|
@ -1,8 +1,11 @@
|
|||
export const groupBy = <T>(
|
||||
array: T[],
|
||||
predicate: (value: T, index: number, array: T[]) => string
|
||||
predicate: (value: T, index: number, array: T[]) => string,
|
||||
) =>
|
||||
array.reduce((acc, value, index, array) => {
|
||||
(acc[predicate(value, index, array)] ||= []).push(value);
|
||||
return acc;
|
||||
}, {} as { [key: string]: T[] });
|
||||
array.reduce(
|
||||
(acc, value, index, array) => {
|
||||
(acc[predicate(value, index, array)] ||= []).push(value);
|
||||
return acc;
|
||||
},
|
||||
{} as { [key: string]: T[] },
|
||||
);
|
||||
|
|
|
@ -5,7 +5,7 @@ const DEFAULT_ALPHABET =
|
|||
|
||||
export default function randomStr(
|
||||
idDesiredLength = 20,
|
||||
alphabet = DEFAULT_ALPHABET
|
||||
alphabet = DEFAULT_ALPHABET,
|
||||
): string {
|
||||
/**
|
||||
* Create n-long array and map it to random chars from given alphabet.
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
import { UserService } from "../../services";
|
||||
|
||||
export default function amAdmin(
|
||||
myUserInfo = UserService.Instance.myUserInfo
|
||||
myUserInfo = UserService.Instance.myUserInfo,
|
||||
): boolean {
|
||||
return myUserInfo?.local_user_view.person.admin ?? false;
|
||||
}
|
||||
|
|
|
@ -4,7 +4,7 @@ import { UserService } from "../../services";
|
|||
export default function amCommunityCreator(
|
||||
creator_id: number,
|
||||
mods?: CommunityModeratorView[],
|
||||
myUserInfo = UserService.Instance.myUserInfo
|
||||
myUserInfo = UserService.Instance.myUserInfo,
|
||||
): boolean {
|
||||
const myId = myUserInfo?.local_user_view.person.id;
|
||||
// Don't allow mod actions on yourself
|
||||
|
|
|
@ -4,7 +4,7 @@ import { UserService } from "../../services";
|
|||
|
||||
export default function amMod(
|
||||
mods?: CommunityModeratorView[],
|
||||
myUserInfo = UserService.Instance.myUserInfo
|
||||
myUserInfo = UserService.Instance.myUserInfo,
|
||||
): boolean {
|
||||
return myUserInfo ? isMod(myUserInfo.local_user_view.person.id, mods) : false;
|
||||
}
|
||||
|
|
Some files were not shown because too many files have changed in this diff Show more
Loading…
Reference in a new issue