diff --git a/.github/workflows/flarum-tags-frontend.yml b/.github/workflows/flarum-tags-frontend.yml index 302f9f8d0..44831c030 100755 --- a/.github/workflows/flarum-tags-frontend.yml +++ b/.github/workflows/flarum-tags-frontend.yml @@ -7,7 +7,7 @@ jobs: uses: ./.github/workflows/REUSABLE_frontend.yml with: enable_bundlewatch: false - enable_prettier: false + enable_prettier: true enable_typescript: true frontend_directory: ./extensions/tags/js diff --git a/extensions/tags/js/package.json b/extensions/tags/js/package.json index 7ecdab55f..279449754 100644 --- a/extensions/tags/js/package.json +++ b/extensions/tags/js/package.json @@ -2,6 +2,7 @@ "private": true, "name": "@flarum/tags", "version": "0.0.0", + "prettier": "@flarum/prettier-config", "dependencies": { "sortablejs": "^1.14.0" }, @@ -13,14 +14,17 @@ "build-typings": "yarn run clean-typings && ([ -e src/@types ] && cp -r src/@types dist-typings/@types || true) && tsc && yarn run post-build-typings", "post-build-typings": "find dist-typings -type f -name '*.d.ts' -print0 | xargs -0 sed -i 's,../src/@types,@types,g'", "check-typings": "tsc --noEmit --emitDeclarationOnly false", - "check-typings-coverage": "typescript-coverage-report" + "check-typings-coverage": "typescript-coverage-report", + "format": "prettier --write src", + "format-check": "prettier --check src" }, "devDependencies": { - "flarum-webpack-config": "^2.0.0", - "webpack": "^5.65.0", - "webpack-cli": "^4.9.1", "flarum-tsconfig": "^1.0.2", + "flarum-webpack-config": "^2.0.0", + "prettier": "^2.7.1", "typescript": "^4.5.4", - "typescript-coverage-report": "^0.6.1" + "typescript-coverage-report": "^0.6.1", + "webpack": "^5.65.0", + "webpack-cli": "^4.9.1" } } diff --git a/extensions/tags/js/src/@types/shims.d.ts b/extensions/tags/js/src/@types/shims.d.ts index 6c784bb31..d6d711e8f 100644 --- a/extensions/tags/js/src/@types/shims.d.ts +++ b/extensions/tags/js/src/@types/shims.d.ts @@ -1,5 +1,5 @@ -import type Tag from "../common/models/Tag"; -import type TagListState from "../forum/states/TagListState"; +import type Tag from '../common/models/Tag'; +import type TagListState from '../forum/states/TagListState'; declare module 'flarum/forum/routes' { export interface ForumRoutes { diff --git a/extensions/tags/js/src/admin/addTagChangePermission.js b/extensions/tags/js/src/admin/addTagChangePermission.js index 4939f2e6b..a90599983 100644 --- a/extensions/tags/js/src/admin/addTagChangePermission.js +++ b/extensions/tags/js/src/admin/addTagChangePermission.js @@ -2,26 +2,30 @@ import { extend } from 'flarum/common/extend'; import PermissionGrid from 'flarum/admin/components/PermissionGrid'; import SettingDropdown from 'flarum/admin/components/SettingDropdown'; -export default function() { - extend(PermissionGrid.prototype, 'startItems', items => { - items.add('allowTagChange', { - icon: 'fas fa-tag', - label: app.translator.trans('flarum-tags.admin.permissions.allow_edit_tags_label'), - setting: () => { - const minutes = parseInt(app.data.settings.allow_tag_change, 10); +export default function () { + extend(PermissionGrid.prototype, 'startItems', (items) => { + items.add( + 'allowTagChange', + { + icon: 'fas fa-tag', + label: app.translator.trans('flarum-tags.admin.permissions.allow_edit_tags_label'), + setting: () => { + const minutes = parseInt(app.data.settings.allow_tag_change, 10); - return SettingDropdown.component({ - defaultLabel: minutes - ? app.translator.trans('core.admin.permissions_controls.allow_some_minutes_button', {count: minutes}) - : app.translator.trans('core.admin.permissions_controls.allow_indefinitely_button'), - key: 'allow_tag_change', - options: [ - {value: '-1', label: app.translator.trans('core.admin.permissions_controls.allow_indefinitely_button')}, - {value: '10', label: app.translator.trans('core.admin.permissions_controls.allow_ten_minutes_button')}, - {value: 'reply', label: app.translator.trans('core.admin.permissions_controls.allow_until_reply_button')} - ] - }); - } - }, 90); + return SettingDropdown.component({ + defaultLabel: minutes + ? app.translator.trans('core.admin.permissions_controls.allow_some_minutes_button', { count: minutes }) + : app.translator.trans('core.admin.permissions_controls.allow_indefinitely_button'), + key: 'allow_tag_change', + options: [ + { value: '-1', label: app.translator.trans('core.admin.permissions_controls.allow_indefinitely_button') }, + { value: '10', label: app.translator.trans('core.admin.permissions_controls.allow_ten_minutes_button') }, + { value: 'reply', label: app.translator.trans('core.admin.permissions_controls.allow_until_reply_button') }, + ], + }); + }, + }, + 90 + ); }); } diff --git a/extensions/tags/js/src/admin/addTagPermission.js b/extensions/tags/js/src/admin/addTagPermission.js index 340df1d76..cbae6d216 100644 --- a/extensions/tags/js/src/admin/addTagPermission.js +++ b/extensions/tags/js/src/admin/addTagPermission.js @@ -1,14 +1,22 @@ export default function () { app.extensionData .for('flarum-tags') - .registerPermission({ - icon: 'fas fa-tag', - label: app.translator.trans('flarum-tags.admin.permissions.tag_discussions_label'), - permission: 'discussion.tag', - }, 'moderate', 95) - .registerPermission({ - icon: 'fas fa-tags', - label: app.translator.trans('flarum-tags.admin.permissions.bypass_tag_counts_label'), - permission: 'bypassTagCounts', - }, 'start', 89); + .registerPermission( + { + icon: 'fas fa-tag', + label: app.translator.trans('flarum-tags.admin.permissions.tag_discussions_label'), + permission: 'discussion.tag', + }, + 'moderate', + 95 + ) + .registerPermission( + { + icon: 'fas fa-tags', + label: app.translator.trans('flarum-tags.admin.permissions.bypass_tag_counts_label'), + permission: 'bypassTagCounts', + }, + 'start', + 89 + ); } diff --git a/extensions/tags/js/src/admin/addTagsHomePageOption.js b/extensions/tags/js/src/admin/addTagsHomePageOption.js index 550ad12d0..2b9319a2e 100644 --- a/extensions/tags/js/src/admin/addTagsHomePageOption.js +++ b/extensions/tags/js/src/admin/addTagsHomePageOption.js @@ -1,11 +1,11 @@ import { extend } from 'flarum/common/extend'; import BasicsPage from 'flarum/admin/components/BasicsPage'; -export default function() { - extend(BasicsPage.prototype, 'homePageItems', items => { +export default function () { + extend(BasicsPage.prototype, 'homePageItems', (items) => { items.add('tags', { path: '/tags', - label: app.translator.trans('flarum-tags.admin.basics.tags_label') + label: app.translator.trans('flarum-tags.admin.basics.tags_label'), }); }); } diff --git a/extensions/tags/js/src/admin/addTagsPermissionScope.tsx b/extensions/tags/js/src/admin/addTagsPermissionScope.tsx index e9596a834..49040c823 100644 --- a/extensions/tags/js/src/admin/addTagsPermissionScope.tsx +++ b/extensions/tags/js/src/admin/addTagsPermissionScope.tsx @@ -11,10 +11,10 @@ import tagIcon from '../common/helpers/tagIcon'; import sortTags from '../common/utils/sortTags'; import Tag from '../common/models/Tag'; -export default function() { +export default function () { extend(PermissionGrid.prototype, 'oninit', function () { this.loading = true; - }) + }); extend(PermissionGrid.prototype, 'oncreate', function () { app.store.find('tags', {}).then(() => { @@ -30,7 +30,7 @@ export default function() { } return original(vnode); - }) + }); override(app, 'getRequiredPermissions', (original, permission) => { const tagPrefix = permission.match(/^tag\d+\./); @@ -40,45 +40,60 @@ export default function() { const required = original(globalPermission); - return required.map(required => tagPrefix[0] + required); + return required.map((required) => tagPrefix[0] + required); } return original(permission); }); - extend(PermissionGrid.prototype, 'scopeItems', items => { + extend(PermissionGrid.prototype, 'scopeItems', (items) => { sortTags(app.store.all('tags')) - .filter(tag => tag.isRestricted()) - .forEach(tag => items.add('tag' + tag.id(), { - label: tagLabel(tag), - onremove: () => tag.save({isRestricted: false}), - render: item => { - if ('setting' in item) return ''; + .filter((tag) => tag.isRestricted()) + .forEach((tag) => + items.add('tag' + tag.id(), { + label: tagLabel(tag), + onremove: () => tag.save({ isRestricted: false }), + render: (item) => { + if ('setting' in item) return ''; - if (item.permission === 'viewForum' - || item.permission === 'startDiscussion' - || (item.permission && item.permission.indexOf('discussion.') === 0 && item.tagScoped !== false) - || item.tagScoped) { - return PermissionDropdown.component({ - permission: 'tag' + tag.id() + '.' + item.permission, - allowGuest: item.allowGuest - }); - } + if ( + item.permission === 'viewForum' || + item.permission === 'startDiscussion' || + (item.permission && item.permission.indexOf('discussion.') === 0 && item.tagScoped !== false) || + item.tagScoped + ) { + return PermissionDropdown.component({ + permission: 'tag' + tag.id() + '.' + item.permission, + allowGuest: item.allowGuest, + }); + } - return ''; - } - })); + return ''; + }, + }) + ); }); - extend(PermissionGrid.prototype, 'scopeControlItems', items => { - const tags = sortTags(app.store.all('tags').filter(tag => !tag.isRestricted())); + extend(PermissionGrid.prototype, 'scopeControlItems', (items) => { + const tags = sortTags(app.store.all('tags').filter((tag) => !tag.isRestricted())); if (tags.length) { - items.add('tag', - {tags.map(tag => )} - ); + items.add( + 'tag', + + {tags.map((tag) => ( + + ))} + + ); } }); } diff --git a/extensions/tags/js/src/admin/components/EditTagModal.tsx b/extensions/tags/js/src/admin/components/EditTagModal.tsx index f33025ed7..e12f399cb 100644 --- a/extensions/tags/js/src/admin/components/EditTagModal.tsx +++ b/extensions/tags/js/src/admin/components/EditTagModal.tsx @@ -59,9 +59,7 @@ export default class EditTagModal extends Modal { content() { return (
-
- {this.fields().toArray()} -
+
{this.fields().toArray()}
); } @@ -69,59 +67,97 @@ export default class EditTagModal extends Modal { fields() { const items = new ItemList(); - items.add('name',
- - { - const target = e.target as HTMLInputElement; - this.name(target.value); - this.slug(slug(target.value)); - }} /> -
, 50); + items.add( + 'name', +
+ + { + const target = e.target as HTMLInputElement; + this.name(target.value); + this.slug(slug(target.value)); + }} + /> +
, + 50 + ); - items.add('slug',
- - -
, 40); + items.add( + 'slug', +
+ + +
, + 40 + ); - items.add('description',
- -