From 1bd32bb4e09041d38fcb3533087a0a367937570d Mon Sep 17 00:00:00 2001 From: Ian Morland <16573496+imorland@users.noreply.github.com> Date: Fri, 7 Jan 2022 14:05:40 +0000 Subject: [PATCH] chore: convert flag items to ItemList (#39) * Convert to ItemList, update import namespaces * Bump deps, add prettier * Format js --- extensions/flags/js/package-lock.json | 137 ++++++++++++-- extensions/flags/js/package.json | 12 +- extensions/flags/js/src/admin/index.js | 38 ++-- .../flags/js/src/forum/addFlagControl.js | 11 +- .../flags/js/src/forum/addFlagsDropdown.js | 4 +- .../flags/js/src/forum/addFlagsToPosts.js | 50 +++--- .../flags/js/src/forum/components/FlagList.js | 36 ++-- .../js/src/forum/components/FlagPostModal.js | 169 ++++++++++++------ .../js/src/forum/components/FlagsPage.js | 6 +- extensions/flags/js/src/forum/models/Flag.js | 2 +- .../js/src/forum/states/FlagListState.js | 7 +- extensions/flags/js/tsconfig.json | 16 ++ 12 files changed, 345 insertions(+), 143 deletions(-) create mode 100644 extensions/flags/js/tsconfig.json diff --git a/extensions/flags/js/package-lock.json b/extensions/flags/js/package-lock.json index 6e5db3916..84f96c4b0 100644 --- a/extensions/flags/js/package-lock.json +++ b/extensions/flags/js/package-lock.json @@ -6,9 +6,14 @@ "": { "name": "@flarum/flags", "dependencies": { + "@flarum/prettier-config": "^1.0.0", + "flarum-tsconfig": "^1.0.2", "flarum-webpack-config": "^1.0.0", "webpack": "^4.46.0", - "webpack-cli": "^4.9.0" + "webpack-cli": "^4.9.1" + }, + "devDependencies": { + "prettier": "^2.5.1" } }, "node_modules/@babel/code-frame": { @@ -1617,16 +1622,44 @@ "node": ">=10.0.0" } }, + "node_modules/@flarum/prettier-config": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@flarum/prettier-config/-/prettier-config-1.0.0.tgz", + "integrity": "sha512-3/AcliIi5jPt4i7COb5hsLv6hm4EeXT9yI9I2EuEvhPi2QR+O9Y/8wrqRuO5mDkRzCIhUY+mjIL/f9770Zwfqg==" + }, "node_modules/@polka/url": { "version": "1.0.0-next.21", "resolved": "https://registry.npmjs.org/@polka/url/-/url-1.0.0-next.21.tgz", "integrity": "sha512-a5Sab1C4/icpTZVzZc5Ghpz88yQtGOyNqYXcZgOssB2uuAr+wF/MvN6bgtW32q7HHrvBki+BsZ0OuNv6EV3K9g==" }, + "node_modules/@types/jquery": { + "version": "3.5.11", + "resolved": "https://registry.npmjs.org/@types/jquery/-/jquery-3.5.11.tgz", + "integrity": "sha512-lYZGdfOtUa0XFjIATQgiogqeTY5PNNMOmp3Jq48ghmJALL8t/IqABRqlEwdHfuUdA8iIE1uGD1HoI4a7Tiy6OA==", + "dependencies": { + "@types/sizzle": "*" + } + }, "node_modules/@types/json-schema": { "version": "7.0.9", "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.9.tgz", "integrity": "sha512-qcUXuemtEu+E5wZSJHNxUXeCZhAfXKQ41D+duX+VYPde7xyEVZci+/oXKJL13tnRs9lR2pr4fod59GT6/X1/yQ==" }, + "node_modules/@types/mithril": { + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/@types/mithril/-/mithril-2.0.8.tgz", + "integrity": "sha512-QzVV70DqUhWfLFpMFDBI9rRxtzeUUpbhiFDpUJYSV92AePgl+Qfficgv2MOb1Ceb+lBOQU8+L+Hjf2UielQjEw==" + }, + "node_modules/@types/sizzle": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/@types/sizzle/-/sizzle-2.3.3.tgz", + "integrity": "sha512-JYM8x9EGF163bEyhdJBpR2QX1R5naCJHC8ucJylJ3w9/CVBaskdQ8WqBf8MmQrd1kRvp/a4TS8HJ+bxzR7ZJYQ==" + }, + "node_modules/@types/throttle-debounce": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@types/throttle-debounce/-/throttle-debounce-2.1.0.tgz", + "integrity": "sha512-5eQEtSCoESnh2FsiLTxE121IiE60hnMqcb435fShf4bpLRjEu1Eoekht23y6zXS9Ts3l+Szu3TARnTsA0GkOkQ==" + }, "node_modules/@webassemblyjs/ast": { "version": "1.9.0", "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.9.0.tgz", @@ -2821,6 +2854,11 @@ "resolved": "https://registry.npmjs.org/cyclist/-/cyclist-1.0.1.tgz", "integrity": "sha1-WW6WmP0MgOEgOMK4LW6xs1tiJNk=" }, + "node_modules/dayjs": { + "version": "1.10.7", + "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.10.7.tgz", + "integrity": "sha512-P6twpd70BcPK34K26uJ1KT3wlhpuOAPoMwJzpsIWUxHZ7wpmbdZL/hQqBDfz7hGurYSa5PhzdhDHtt319hL3ig==" + }, "node_modules/debug": { "version": "4.3.2", "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", @@ -3378,6 +3416,17 @@ "node": ">=8" } }, + "node_modules/flarum-tsconfig": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/flarum-tsconfig/-/flarum-tsconfig-1.0.2.tgz", + "integrity": "sha512-RUaN7D6noLK9vY1F86NIc+IlIP1YAA3bJ4jGR5pIm8UxvLBLW8qrAHzIosuQJgvnge7VgTA5c2LoNefUK/9EiQ==", + "dependencies": { + "@types/jquery": "^3.5.5", + "@types/mithril": "^2.0.7", + "@types/throttle-debounce": "^2.1.0", + "dayjs": "^1.10.4" + } + }, "node_modules/flarum-webpack-config": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/flarum-webpack-config/-/flarum-webpack-config-1.0.0.tgz", @@ -4699,6 +4748,18 @@ "node": ">=0.10.0" } }, + "node_modules/prettier": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.5.1.tgz", + "integrity": "sha512-vBZcPRUR5MZJwoyi3ZoyQlc1rXeEck8KgeC9AwwOn+exuxLxq5toTRDTSaVrXHxelDMHy9zlicw8u66yxoSUFg==", + "dev": true, + "bin": { + "prettier": "bin-prettier.js" + }, + "engines": { + "node": ">=10.13.0" + } + }, "node_modules/process": { "version": "0.11.10", "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", @@ -6046,11 +6107,6 @@ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" }, - "node_modules/v8-compile-cache": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz", - "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==" - }, "node_modules/vm-browserify": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-1.1.2.tgz", @@ -6352,9 +6408,9 @@ } }, "node_modules/webpack-cli": { - "version": "4.9.0", - "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-4.9.0.tgz", - "integrity": "sha512-n/jZZBMzVEl4PYIBs+auy2WI0WTQ74EnJDiyD98O2JZY6IVIHJNitkYp/uTXOviIOMfgzrNvC9foKv/8o8KSZw==", + "version": "4.9.1", + "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-4.9.1.tgz", + "integrity": "sha512-JYRFVuyFpzDxMDB+v/nanUdQYcZtqFPGzmlW4s+UkPMFhSpfRNmf1z4AwYcHJVdvEFAM7FFCQdNTpsBYhDLusQ==", "dependencies": { "@discoveryjs/json-ext": "^0.5.0", "@webpack-cli/configtest": "^1.1.0", @@ -6367,7 +6423,6 @@ "import-local": "^3.0.2", "interpret": "^2.2.0", "rechoir": "^0.7.0", - "v8-compile-cache": "^2.2.0", "webpack-merge": "^5.7.3" }, "bin": { @@ -7592,16 +7647,44 @@ "resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.5.5.tgz", "integrity": "sha512-6nFkfkmSeV/rqSaS4oWHgmpnYw194f6hmWF5is6b0J1naJZoiD0NTc9AiUwPHvWsowkjuHErCZT1wa0jg+BLIA==" }, + "@flarum/prettier-config": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@flarum/prettier-config/-/prettier-config-1.0.0.tgz", + "integrity": "sha512-3/AcliIi5jPt4i7COb5hsLv6hm4EeXT9yI9I2EuEvhPi2QR+O9Y/8wrqRuO5mDkRzCIhUY+mjIL/f9770Zwfqg==" + }, "@polka/url": { "version": "1.0.0-next.21", "resolved": "https://registry.npmjs.org/@polka/url/-/url-1.0.0-next.21.tgz", "integrity": "sha512-a5Sab1C4/icpTZVzZc5Ghpz88yQtGOyNqYXcZgOssB2uuAr+wF/MvN6bgtW32q7HHrvBki+BsZ0OuNv6EV3K9g==" }, + "@types/jquery": { + "version": "3.5.11", + "resolved": "https://registry.npmjs.org/@types/jquery/-/jquery-3.5.11.tgz", + "integrity": "sha512-lYZGdfOtUa0XFjIATQgiogqeTY5PNNMOmp3Jq48ghmJALL8t/IqABRqlEwdHfuUdA8iIE1uGD1HoI4a7Tiy6OA==", + "requires": { + "@types/sizzle": "*" + } + }, "@types/json-schema": { "version": "7.0.9", "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.9.tgz", "integrity": "sha512-qcUXuemtEu+E5wZSJHNxUXeCZhAfXKQ41D+duX+VYPde7xyEVZci+/oXKJL13tnRs9lR2pr4fod59GT6/X1/yQ==" }, + "@types/mithril": { + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/@types/mithril/-/mithril-2.0.8.tgz", + "integrity": "sha512-QzVV70DqUhWfLFpMFDBI9rRxtzeUUpbhiFDpUJYSV92AePgl+Qfficgv2MOb1Ceb+lBOQU8+L+Hjf2UielQjEw==" + }, + "@types/sizzle": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/@types/sizzle/-/sizzle-2.3.3.tgz", + "integrity": "sha512-JYM8x9EGF163bEyhdJBpR2QX1R5naCJHC8ucJylJ3w9/CVBaskdQ8WqBf8MmQrd1kRvp/a4TS8HJ+bxzR7ZJYQ==" + }, + "@types/throttle-debounce": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@types/throttle-debounce/-/throttle-debounce-2.1.0.tgz", + "integrity": "sha512-5eQEtSCoESnh2FsiLTxE121IiE60hnMqcb435fShf4bpLRjEu1Eoekht23y6zXS9Ts3l+Szu3TARnTsA0GkOkQ==" + }, "@webassemblyjs/ast": { "version": "1.9.0", "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.9.0.tgz", @@ -8601,6 +8684,11 @@ "resolved": "https://registry.npmjs.org/cyclist/-/cyclist-1.0.1.tgz", "integrity": "sha1-WW6WmP0MgOEgOMK4LW6xs1tiJNk=" }, + "dayjs": { + "version": "1.10.7", + "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.10.7.tgz", + "integrity": "sha512-P6twpd70BcPK34K26uJ1KT3wlhpuOAPoMwJzpsIWUxHZ7wpmbdZL/hQqBDfz7hGurYSa5PhzdhDHtt319hL3ig==" + }, "debug": { "version": "4.3.2", "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", @@ -9044,6 +9132,17 @@ "path-exists": "^4.0.0" } }, + "flarum-tsconfig": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/flarum-tsconfig/-/flarum-tsconfig-1.0.2.tgz", + "integrity": "sha512-RUaN7D6noLK9vY1F86NIc+IlIP1YAA3bJ4jGR5pIm8UxvLBLW8qrAHzIosuQJgvnge7VgTA5c2LoNefUK/9EiQ==", + "requires": { + "@types/jquery": "^3.5.5", + "@types/mithril": "^2.0.7", + "@types/throttle-debounce": "^2.1.0", + "dayjs": "^1.10.4" + } + }, "flarum-webpack-config": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/flarum-webpack-config/-/flarum-webpack-config-1.0.0.tgz", @@ -10049,6 +10148,12 @@ "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=" }, + "prettier": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.5.1.tgz", + "integrity": "sha512-vBZcPRUR5MZJwoyi3ZoyQlc1rXeEck8KgeC9AwwOn+exuxLxq5toTRDTSaVrXHxelDMHy9zlicw8u66yxoSUFg==", + "dev": true + }, "process": { "version": "0.11.10", "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", @@ -11143,11 +11248,6 @@ "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" }, - "v8-compile-cache": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz", - "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==" - }, "vm-browserify": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-1.1.2.tgz", @@ -11387,9 +11487,9 @@ } }, "webpack-cli": { - "version": "4.9.0", - "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-4.9.0.tgz", - "integrity": "sha512-n/jZZBMzVEl4PYIBs+auy2WI0WTQ74EnJDiyD98O2JZY6IVIHJNitkYp/uTXOviIOMfgzrNvC9foKv/8o8KSZw==", + "version": "4.9.1", + "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-4.9.1.tgz", + "integrity": "sha512-JYRFVuyFpzDxMDB+v/nanUdQYcZtqFPGzmlW4s+UkPMFhSpfRNmf1z4AwYcHJVdvEFAM7FFCQdNTpsBYhDLusQ==", "requires": { "@discoveryjs/json-ext": "^0.5.0", "@webpack-cli/configtest": "^1.1.0", @@ -11402,7 +11502,6 @@ "import-local": "^3.0.2", "interpret": "^2.2.0", "rechoir": "^0.7.0", - "v8-compile-cache": "^2.2.0", "webpack-merge": "^5.7.3" }, "dependencies": { diff --git a/extensions/flags/js/package.json b/extensions/flags/js/package.json index 931e47e19..f6f992656 100644 --- a/extensions/flags/js/package.json +++ b/extensions/flags/js/package.json @@ -1,13 +1,21 @@ { "private": true, "name": "@flarum/flags", + "prettier": "@flarum/prettier-config", "dependencies": { + "@flarum/prettier-config": "^1.0.0", "flarum-webpack-config": "^1.0.0", + "flarum-tsconfig": "^1.0.2", "webpack": "^4.46.0", - "webpack-cli": "^4.9.0" + "webpack-cli": "^4.9.1" + }, + "devDependencies": { + "prettier": "^2.5.1" }, "scripts": { "dev": "webpack --mode development --watch", - "build": "webpack --mode production" + "build": "webpack --mode production", + "format": "prettier --write src", + "format-check": "prettier --check src" } } diff --git a/extensions/flags/js/src/admin/index.js b/extensions/flags/js/src/admin/index.js index cc481813e..7159f6d71 100644 --- a/extensions/flags/js/src/admin/index.js +++ b/extensions/flags/js/src/admin/index.js @@ -1,26 +1,38 @@ import app from 'flarum/app'; app.initializers.add('flarum-flags', () => { - app.extensionData.for('flarum-flags') - .registerSetting({ - setting: 'flarum-flags.guidelines_url', - type: 'text', - label: app.translator.trans('flarum-flags.admin.settings.guidelines_url_label') - }, 15) + app.extensionData + .for('flarum-flags') + .registerSetting( + { + setting: 'flarum-flags.guidelines_url', + type: 'text', + label: app.translator.trans('flarum-flags.admin.settings.guidelines_url_label'), + }, + 15 + ) .registerSetting({ setting: 'flarum-flags.can_flag_own', type: 'boolean', - label: app.translator.trans('flarum-flags.admin.settings.flag_own_posts_label') + label: app.translator.trans('flarum-flags.admin.settings.flag_own_posts_label'), }) - .registerPermission({ + .registerPermission( + { icon: 'fas fa-flag', label: app.translator.trans('flarum-flags.admin.permissions.view_flags_label'), - permission: 'discussion.viewFlags' - }, 'moderate', 65) + permission: 'discussion.viewFlags', + }, + 'moderate', + 65 + ) - .registerPermission({ + .registerPermission( + { icon: 'fas fa-flag', label: app.translator.trans('flarum-flags.admin.permissions.flag_posts_label'), - permission: 'discussion.flagPosts' - }, 'reply', 65); + permission: 'discussion.flagPosts', + }, + 'reply', + 65 + ); }); diff --git a/extensions/flags/js/src/forum/addFlagControl.js b/extensions/flags/js/src/forum/addFlagControl.js index c908ec294..88faefe2a 100644 --- a/extensions/flags/js/src/forum/addFlagControl.js +++ b/extensions/flags/js/src/forum/addFlagControl.js @@ -5,12 +5,15 @@ import Button from 'flarum/components/Button'; import FlagPostModal from './components/FlagPostModal'; -export default function() { - extend(PostControls, 'userControls', function(items, post) { +export default function () { + extend(PostControls, 'userControls', function (items, post) { if (post.isHidden() || post.contentType() !== 'comment' || !post.canFlag()) return; - items.add('flag', - + items.add( + 'flag', + ); }); } diff --git a/extensions/flags/js/src/forum/addFlagsDropdown.js b/extensions/flags/js/src/forum/addFlagsDropdown.js index 0975046bf..07e929e90 100644 --- a/extensions/flags/js/src/forum/addFlagsDropdown.js +++ b/extensions/flags/js/src/forum/addFlagsDropdown.js @@ -3,8 +3,8 @@ import app from 'flarum/app'; import HeaderSecondary from 'flarum/components/HeaderSecondary'; import FlagsDropdown from './components/FlagsDropdown'; -export default function() { - extend(HeaderSecondary.prototype, 'items', function(items) { +export default function () { + extend(HeaderSecondary.prototype, 'items', function (items) { if (app.forum.attribute('canViewFlags')) { items.add('flags', , 15); } diff --git a/extensions/flags/js/src/forum/addFlagsToPosts.js b/extensions/flags/js/src/forum/addFlagsToPosts.js index 77eeff9dc..95b0f68d4 100644 --- a/extensions/flags/js/src/forum/addFlagsToPosts.js +++ b/extensions/flags/js/src/forum/addFlagsToPosts.js @@ -6,14 +6,14 @@ import ItemList from 'flarum/utils/ItemList'; import PostControls from 'flarum/utils/PostControls'; import humanTime from 'flarum/utils/humanTime'; -export default function() { - extend(Post.prototype, 'elementAttrs', function(attrs) { +export default function () { + extend(Post.prototype, 'elementAttrs', function (attrs) { if (this.attrs.post.flags().length) { attrs.className += ' Post--flagged'; } }); - Post.prototype.dismissFlag = function(body) { + Post.prototype.dismissFlag = function (body) { const post = this.attrs.post; delete post.data.relationships.flags; @@ -45,16 +45,16 @@ export default function() { return app.request({ url: app.forum.attribute('apiUrl') + post.apiEndpoint() + '/flags', method: 'DELETE', - body + body, }); }; - Post.prototype.flagActionItems = function() { + Post.prototype.flagActionItems = function () { const items = new ItemList(); const controls = PostControls.destructiveControls(this.attrs.post); - Object.keys(controls.items).forEach(k => { + Object.keys(controls.items).forEach((k) => { const attrs = controls.get(k).attrs; attrs.className = 'Button'; @@ -62,22 +62,20 @@ export default function() { extend(attrs, 'onclick', () => this.dismissFlag()); }); - items.add('controls', ( -
- {controls.toArray()} -
- )); + items.add('controls',
{controls.toArray()}
); - items.add('dismiss', ( + items.add( + 'dismiss', - ), -100); + , + -100 + ); return items; }; - extend(Post.prototype, 'content', function(vdom) { + extend(Post.prototype, 'content', function (vdom) { const post = this.attrs.post; const flags = post.flags(); @@ -88,20 +86,16 @@ export default function() { vdom.unshift(
- {flags.map(flag => -
- {this.flagReason(flag)} -
- )} -
-
- {this.flagActionItems().toArray()} + {flags.map((flag) => ( +
{this.flagReason(flag)}
+ ))}
+
{this.flagActionItems().toArray()}
); }); - Post.prototype.flagReason = function(flag) { + Post.prototype.flagReason = function (flag) { if (flag.type() === 'user') { const user = flag.user(); const reason = flag.reason() ? app.translator.trans(`flarum-flags.forum.flag_post.reason_${flag.reason()}_label`) : null; @@ -109,8 +103,12 @@ export default function() { const time = humanTime(flag.createdAt()); return [ - app.translator.trans(reason ? 'flarum-flags.forum.post.flagged_by_with_reason_text' : 'flarum-flags.forum.post.flagged_by_text', {time, user, reason}), - detail ? {detail} : '' + app.translator.trans(reason ? 'flarum-flags.forum.post.flagged_by_with_reason_text' : 'flarum-flags.forum.post.flagged_by_text', { + time, + user, + reason, + }), + detail ? {detail} : '', ]; } }; diff --git a/extensions/flags/js/src/forum/components/FlagList.js b/extensions/flags/js/src/forum/components/FlagList.js index 821d41525..8632f8781 100644 --- a/extensions/flags/js/src/forum/components/FlagList.js +++ b/extensions/flags/js/src/forum/components/FlagList.js @@ -22,32 +22,40 @@ export default class FlagList extends Component {
diff --git a/extensions/flags/js/src/forum/components/FlagPostModal.js b/extensions/flags/js/src/forum/components/FlagPostModal.js index ac5165070..49e438cd1 100644 --- a/extensions/flags/js/src/forum/components/FlagPostModal.js +++ b/extensions/flags/js/src/forum/components/FlagPostModal.js @@ -1,8 +1,10 @@ -import Modal from 'flarum/components/Modal'; -import Button from 'flarum/components/Button'; +import app from 'flarum/forum/app'; +import Modal from 'flarum/common/components/Modal'; +import Button from 'flarum/common/components/Button'; -import Stream from 'flarum/utils/Stream'; -import withAttr from 'flarum/utils/withAttr'; +import Stream from 'flarum/common/utils/Stream'; +import withAttr from 'flarum/common/utils/withAttr'; +import ItemList from 'flarum/common/utils/ItemList'; export default class FlagPostModal extends Modal { oninit(vnode) { @@ -38,58 +40,15 @@ export default class FlagPostModal extends Modal { ); } - const guidelinesUrl = app.forum.attribute('guidelinesUrl'); - return (
-
- - - - - - - -
+
{this.flagReasons().toArray()}
-
@@ -98,20 +57,114 @@ export default class FlagPostModal extends Modal { ); } + flagReasons() { + const items = new ItemList(); + const guidelinesUrl = app.forum.attribute('guidelinesUrl'); + + items.add( + 'off-topic', + , + 70 + ); + + items.add( + 'inappropriate', +
: undefined, + })} + {this.reason() === 'inappropriate' ? ( + + ) : ( + '' + )} + , + 60 + ); + + items.add( + 'spam', + , + 50 + ); + + items.add( + 'other', + , + 10 + ); + + return items; + } + onsubmit(e) { e.preventDefault(); this.loading = true; - app.store.createRecord('flags').save({ - reason: this.reason() === 'other' ? null : this.reason(), - reasonDetail: this.reasonDetail(), - relationships: { - user: app.session.user, - post: this.attrs.post - } - }, {errorHandler: this.onerror.bind(this)}) - .then(() => this.success = true) + app.store + .createRecord('flags') + .save( + { + reason: this.reason() === 'other' ? null : this.reason(), + reasonDetail: this.reasonDetail(), + relationships: { + user: app.session.user, + post: this.attrs.post, + }, + }, + { errorHandler: this.onerror.bind(this) } + ) + .then(() => (this.success = true)) .catch(() => {}) .then(this.loaded.bind(this)); } diff --git a/extensions/flags/js/src/forum/components/FlagsPage.js b/extensions/flags/js/src/forum/components/FlagsPage.js index 8ad044f39..e597b2860 100644 --- a/extensions/flags/js/src/forum/components/FlagsPage.js +++ b/extensions/flags/js/src/forum/components/FlagsPage.js @@ -18,6 +18,10 @@ export default class FlagsPage extends Page { } view() { - return
; + return ( +
+ +
+ ); } } diff --git a/extensions/flags/js/src/forum/models/Flag.js b/extensions/flags/js/src/forum/models/Flag.js index e89cac078..25b7af008 100644 --- a/extensions/flags/js/src/forum/models/Flag.js +++ b/extensions/flags/js/src/forum/models/Flag.js @@ -9,7 +9,7 @@ Object.assign(Flag.prototype, { createdAt: Model.attribute('createdAt', Model.transformDate), post: Model.hasOne('post'), - user: Model.hasOne('user') + user: Model.hasOne('user'), }); export default Flag; diff --git a/extensions/flags/js/src/forum/states/FlagListState.js b/extensions/flags/js/src/forum/states/FlagListState.js index 04e0d48e3..94c011b4e 100644 --- a/extensions/flags/js/src/forum/states/FlagListState.js +++ b/extensions/flags/js/src/forum/states/FlagListState.js @@ -22,12 +22,13 @@ export default class FlagListState { this.loading = true; m.redraw(); - this.app.store.find('flags') - .then(flags => { + this.app.store + .find('flags') + .then((flags) => { this.app.session.user.pushAttributes({ newFlagCount: 0 }); this.cache = flags.sort((a, b) => b.createdAt() - a.createdAt()); }) - .catch(() => { }) + .catch(() => {}) .then(() => { this.loading = false; m.redraw(); diff --git a/extensions/flags/js/tsconfig.json b/extensions/flags/js/tsconfig.json new file mode 100644 index 000000000..207c5b382 --- /dev/null +++ b/extensions/flags/js/tsconfig.json @@ -0,0 +1,16 @@ +{ + // Use Flarum's tsconfig as a starting point + "extends": "flarum-tsconfig", + // This will match all .ts, .tsx, .d.ts, .js, .jsx files in your `src` folder + // and also tells your Typescript server to read core's global typings for + // access to `dayjs` and `$` in the global namespace. + "include": ["src/**/*", "../vendor/flarum/core/js/dist-typings/@types/**/*"], + "compilerOptions": { + // This will output typings to `dist-typings` + "declarationDir": "./dist-typings", + "baseUrl": ".", + "paths": { + "flarum/*": ["../vendor/flarum/core/js/dist-typings/*"] + } + } +}