Add posting restricted to mods (#642)

* Adding only mods can post. Fixes #641

* Fixing canPost check
This commit is contained in:
Dessalines 2022-05-23 15:22:15 -04:00 committed by GitHub
parent d4ca2085ad
commit 2d0da58793
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
6 changed files with 49 additions and 17 deletions

View file

@ -74,7 +74,7 @@
"eslint-plugin-prettier": "^4.0.0", "eslint-plugin-prettier": "^4.0.0",
"husky": "^7.0.4", "husky": "^7.0.4",
"import-sort-style-module": "^6.0.0", "import-sort-style-module": "^6.0.0",
"lemmy-js-client": "0.17.0-rc.5", "lemmy-js-client": "0.16.4-rc.2",
"lint-staged": "^12.4.1", "lint-staged": "^12.4.1",
"mini-css-extract-plugin": "^2.6.0", "mini-css-extract-plugin": "^2.6.0",
"node-fetch": "^2.6.1", "node-fetch": "^2.6.1",

View file

@ -14,7 +14,6 @@ import {
authField, authField,
capitalizeFirstLetter, capitalizeFirstLetter,
randomStr, randomStr,
toast,
wsClient, wsClient,
wsJsonToRes, wsJsonToRes,
wsSubscribe, wsSubscribe,
@ -51,6 +50,7 @@ export class CommunityForm extends Component<
nsfw: false, nsfw: false,
icon: null, icon: null,
banner: null, banner: null,
posting_restricted_to_mods: false,
auth: authField(false), auth: authField(false),
}, },
loading: false, loading: false,
@ -79,6 +79,7 @@ export class CommunityForm extends Component<
nsfw: cv.community.nsfw, nsfw: cv.community.nsfw,
icon: cv.community.icon, icon: cv.community.icon,
banner: cv.community.banner, banner: cv.community.banner,
posting_restricted_to_mods: cv.community.posting_restricted_to_mods,
auth: authField(), auth: authField(),
}; };
} }
@ -227,6 +228,25 @@ export class CommunityForm extends Component<
</div> </div>
</div> </div>
)} )}
<div class="form-group row">
<legend class="col-form-label col-6 pt-0">
{i18n.t("only_mods_can_post_in_community")}
</legend>
<div class="col-6">
<div class="form-check">
<input
class="form-check-input position-static"
id="community-only-mods-can-post"
type="checkbox"
checked={this.state.communityForm.posting_restricted_to_mods}
onChange={linkEvent(
this,
this.handleCommunityPostingRestrictedToMods
)}
/>
</div>
</div>
</div>
<div class="form-group row"> <div class="form-group row">
<div class="col-12"> <div class="col-12">
<button <button
@ -295,6 +315,11 @@ export class CommunityForm extends Component<
i.setState(i.state); i.setState(i.state);
} }
handleCommunityPostingRestrictedToMods(i: CommunityForm, event: any) {
i.state.communityForm.posting_restricted_to_mods = event.target.checked;
i.setState(i.state);
}
handleCancel(i: CommunityForm) { handleCancel(i: CommunityForm) {
i.props.onCancel(); i.props.onCancel();
} }
@ -323,7 +348,8 @@ export class CommunityForm extends Component<
let op = wsUserOp(msg); let op = wsUserOp(msg);
console.log(msg); console.log(msg);
if (msg.error) { if (msg.error) {
toast(i18n.t(msg.error), "danger"); // Errors handled by top level pages
// toast(i18n.t(msg.error), "danger");
this.state.loading = false; this.state.loading = false;
this.setState(this.state); this.setState(this.state);
return; return;

View file

@ -76,8 +76,7 @@ export class CreateCommunity extends Component<any, CreateCommunityState> {
parseMessage(msg: any) { parseMessage(msg: any) {
if (msg.error) { if (msg.error) {
// Toast errors are already handled by community-form toast(i18n.t(msg.error), "danger");
return;
} }
} }
} }

View file

@ -82,7 +82,7 @@ export class Sidebar extends Component<SidebarProps, SidebarState> {
{this.communityTitle()} {this.communityTitle()}
{this.adminButtons()} {this.adminButtons()}
{this.subscribe()} {this.subscribe()}
{this.createPost()} {this.canPost && this.createPost()}
</div> </div>
</div> </div>
<div class="card border-secondary mb-3"> <div class="card border-secondary mb-3">
@ -250,16 +250,14 @@ export class Sidebar extends Component<SidebarProps, SidebarState> {
} }
createPost() { createPost() {
let community_view = this.props.community_view; let cv = this.props.community_view;
return ( return (
community_view.subscribed && ( cv.subscribed && (
<Link <Link
className={`btn btn-secondary btn-block mb-2 ${ className={`btn btn-secondary btn-block mb-2 ${
community_view.community.deleted || community_view.community.removed cv.community.deleted || cv.community.removed ? "no-click" : ""
? "no-click"
: ""
}`} }`}
to={`/create_post?community_id=${community_view.community.id}`} to={`/create_post?community_id=${cv.community.id}`}
> >
{i18n.t("create_a_post")} {i18n.t("create_a_post")}
</Link> </Link>
@ -536,6 +534,14 @@ export class Sidebar extends Component<SidebarProps, SidebarState> {
); );
} }
get canPost(): boolean {
return (
!this.props.community_view.community.posting_restricted_to_mods ||
this.canMod ||
this.canAdmin
);
}
handleModRemoveShow(i: Sidebar) { handleModRemoveShow(i: Sidebar) {
i.state.showRemoveDialog = true; i.state.showRemoveDialog = true;
i.setState(i.state); i.setState(i.state);

View file

@ -636,7 +636,8 @@ export class PostForm extends Component<PostFormProps, PostFormState> {
let op = wsUserOp(msg); let op = wsUserOp(msg);
console.log(msg); console.log(msg);
if (msg.error) { if (msg.error) {
toast(i18n.t(msg.error), "danger"); // Errors handled by top level pages
// toast(i18n.t(msg.error), "danger");
this.state.loading = false; this.state.loading = false;
this.setState(this.state); this.setState(this.state);
return; return;

View file

@ -4813,10 +4813,10 @@ lcid@^1.0.0:
dependencies: dependencies:
invert-kv "^1.0.0" invert-kv "^1.0.0"
lemmy-js-client@0.17.0-rc.5: lemmy-js-client@0.16.4-rc.2:
version "0.17.0-rc.5" version "0.16.4-rc.2"
resolved "https://registry.yarnpkg.com/lemmy-js-client/-/lemmy-js-client-0.17.0-rc.5.tgz#8065ddca68acfbccc7a693ae0f31d6ab66dce972" resolved "https://registry.yarnpkg.com/lemmy-js-client/-/lemmy-js-client-0.16.4-rc.2.tgz#849b054ff37668c242db0202070bdb35f357f069"
integrity sha512-IuSYaK4//KVFg+s4Av/PaxMM2tQpP3sL6G3zXfzbrZfCEtBp9ZlOEMFAu/neRgNumVh+R/koIwf8iLh4UdYCdg== integrity sha512-7ftHxpecqhHddfTJJC02eMB6N0jrtUBZVjt6CGC74J06kplBrsBQVETBqm33G1h1/SPHRHU1mqQ+f03PwsL+Ng==
levn@^0.4.1: levn@^0.4.1:
version "0.4.1" version "0.4.1"