From f48a0c1d1ee3bf1e20f8bf4a87513417bdcddd08 Mon Sep 17 00:00:00 2001 From: IanM Date: Fri, 11 Oct 2024 21:29:04 +0100 Subject: [PATCH 1/3] feat: toggle removing best answers from all discussion search --- composer.json | 2 +- extend.php | 1 + js/package.json | 8 +++++++- js/src/@types/shims.d.ts | 6 ++++++ js/src/admin/components/BestAnswerSettingsPage.tsx | 6 ++++++ js/src/forum/components/SelectBestAnswerItem.tsx | 1 - js/src/forum/extend.ts | 4 ++++ js/src/forum/extenders/extendDiscussionSearchSource.tsx | 2 +- js/src/forum/extenders/extendIndexPage.tsx | 2 -- js/tsconfig.json | 6 ++++-- resources/locale/en.yml | 2 ++ src/ForumAttributes.php | 1 + 12 files changed, 33 insertions(+), 8 deletions(-) diff --git a/composer.json b/composer.json index 9165f55..550f552 100644 --- a/composer.json +++ b/composer.json @@ -19,7 +19,7 @@ } ], "require": { - "flarum/core": "^1.8.3", + "flarum/core": "^1.8.7", "flarum/tags": "*" }, "replace": { diff --git a/extend.php b/extend.php index 8ef4a99..4c2b031 100644 --- a/extend.php +++ b/extend.php @@ -90,6 +90,7 @@ ->default('fof-best-answer.store_log_output', false) ->default('fof-best-answer.enabled-tags', '[]') ->default('fof-best-answer.search.solution_search', true) + ->default('fof-best-answer.search.remove_solutions_from_main_search', false) ->default('fof-best-answer.search.display_tags', true) ->default('fof-best-answer.discussion_sidebar_jump_button', false) ->serializeToForum('fof-best-answer.show_max_lines', 'fof-best-answer.show_max_lines', 'intVal'), diff --git a/js/package.json b/js/package.json index c2ea37d..3cbe2d2 100644 --- a/js/package.json +++ b/js/package.json @@ -16,7 +16,13 @@ "scripts": { "dev": "webpack --mode development --watch", "build": "webpack --mode production", + "analyze": "cross-env ANALYZER=true npm run build", "format": "prettier --write src", - "format-check": "prettier --check src" + "format-check": "prettier --check src", + "clean-typings": "npx rimraf dist-typings && mkdir dist-typings", + "build-typings": "npm run clean-typings && ([ -e src/@types ] && cp -r src/@types dist-typings/@types || true) && tsc && npm 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" } } diff --git a/js/src/@types/shims.d.ts b/js/src/@types/shims.d.ts index 2ff6fd8..d90e376 100644 --- a/js/src/@types/shims.d.ts +++ b/js/src/@types/shims.d.ts @@ -10,3 +10,9 @@ declare module 'flarum/common/models/Discussion' { bestAnswerSetAt(): Date; } } + +declare module 'flarum/tags/models/Tag' { + export default interface Tag { + isQnA(): boolean; + } +} diff --git a/js/src/admin/components/BestAnswerSettingsPage.tsx b/js/src/admin/components/BestAnswerSettingsPage.tsx index bab1dc5..123e4eb 100644 --- a/js/src/admin/components/BestAnswerSettingsPage.tsx +++ b/js/src/admin/components/BestAnswerSettingsPage.tsx @@ -84,6 +84,12 @@ export default class BestAnswerSettingsPage extends ExtensionPage { label: app.translator.trans('fof-best-answer.admin.settings.solution_search'), help: app.translator.trans('fof-best-answer.admin.settings.solution_search_help'), })} + {this.buildSettingComponent({ + type: 'boolean', + setting: 'fof-best-answer.search.remove_solutions_from_main_search', + label: app.translator.trans('fof-best-answer.admin.settings.remove_solutions_from_main_search'), + help: app.translator.trans('fof-best-answer.admin.settings.remove_solutions_from_main_search_help'), + })} {this.buildSettingComponent({ type: 'boolean', setting: 'fof-best-answer.search.display_tags', diff --git a/js/src/forum/components/SelectBestAnswerItem.tsx b/js/src/forum/components/SelectBestAnswerItem.tsx index 9586680..11ca49c 100644 --- a/js/src/forum/components/SelectBestAnswerItem.tsx +++ b/js/src/forum/components/SelectBestAnswerItem.tsx @@ -60,7 +60,6 @@ export default class SelectBestAnswerItem extends Component m.route.set(app.route.user(this.discussion.bestAnswerUser?.()))} />, - //a: , })} ); diff --git a/js/src/forum/extend.ts b/js/src/forum/extend.ts index a565217..fe9d7e3 100644 --- a/js/src/forum/extend.ts +++ b/js/src/forum/extend.ts @@ -4,6 +4,7 @@ import Extend from 'flarum/common/extenders'; import Post from 'flarum/common/models/Post'; import User from 'flarum/common/models/User'; import Model from 'flarum/common/Model'; +import Tag from 'flarum/tags/models/Tag'; export default [ ...commonExtend, @@ -17,4 +18,7 @@ export default [ new Extend.Model(User) // .attribute('bestAnswerCount'), + + new Extend.Model(Tag) // + .attribute('isQnA'), ]; diff --git a/js/src/forum/extenders/extendDiscussionSearchSource.tsx b/js/src/forum/extenders/extendDiscussionSearchSource.tsx index ecc49eb..8851682 100644 --- a/js/src/forum/extenders/extendDiscussionSearchSource.tsx +++ b/js/src/forum/extenders/extendDiscussionSearchSource.tsx @@ -5,7 +5,7 @@ import DiscussionsSearchSource from 'flarum/forum/components/DiscussionsSearchSo export default function extendDiscussionsSearchSource() { extend(DiscussionsSearchSource.prototype, 'queryMutators', function (mutators: string[]) { // This will only apply when using flarum/core 1.8.6 or newer - if (app.forum.attribute('solutionSearchEnabled')) { + if (app.forum.attribute('removeSolutionResultsFromMainSearch')) { mutators.push('-is:solved'); } }); diff --git a/js/src/forum/extenders/extendIndexPage.tsx b/js/src/forum/extenders/extendIndexPage.tsx index fa5ee0f..9f64ed3 100644 --- a/js/src/forum/extenders/extendIndexPage.tsx +++ b/js/src/forum/extenders/extendIndexPage.tsx @@ -6,7 +6,6 @@ import Button from 'flarum/common/components/Button'; export default function extendIndexPage() { extend(IndexPage.prototype, 'sidebarItems', function (items) { - /** @ts-ignore */ const tag = this.currentTag(); if (!tag?.isQnA?.()) return; @@ -27,7 +26,6 @@ export default function extendIndexPage() { return; } - /** @ts-ignore */ const tag = this.currentTag(); if (!tag?.isQnA?.()) { diff --git a/js/tsconfig.json b/js/tsconfig.json index 207c5b3..216dc23 100644 --- a/js/tsconfig.json +++ b/js/tsconfig.json @@ -4,13 +4,15 @@ // 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/**/*"], + "include": ["src/**/*", "../vendor/flarum/core/js/dist-typings/@types/**/*", "../vendor/flarum/tags/js/dist-typings/@types/**/*"], "compilerOptions": { // This will output typings to `dist-typings` "declarationDir": "./dist-typings", "baseUrl": ".", "paths": { - "flarum/*": ["../vendor/flarum/core/js/dist-typings/*"] + "flarum/*": ["../vendor/flarum/core/js/dist-typings/*"], + "@flarum/*": ["../vendor/flarum/core/js/dist-typings/*"], + "flarum/tags": ["../vendor/flarum/tags/js/dist-typings/*"] } } } diff --git a/resources/locale/en.yml b/resources/locale/en.yml index e3c3381..b2c5fb3 100644 --- a/resources/locale/en.yml +++ b/resources/locale/en.yml @@ -37,6 +37,8 @@ fof-best-answer: When a tag is Best Answer enabled, assign permissions to each user group that may set answers (own discussion, any discussion). Permissions may be assigned globally (for any Best Answer anabled tag), or on a per tag basis. solution_search: Solution search solution_search_help: Enable the ability to search for discussions with Best Answers + remove_solutions_from_main_search: Remove solutions from main search + remove_solutions_from_main_search_help: Remove discussions with Best Answers from the main 'all discussions' search results display_tags: Display tags in search results display_tags_help: Display the tag(s) in search results for discussions with Best Answers discussion_sidebar_jump_button: Display jump to Best Answer button in discussion sidebar diff --git a/src/ForumAttributes.php b/src/ForumAttributes.php index 810cd18..67cf1a8 100644 --- a/src/ForumAttributes.php +++ b/src/ForumAttributes.php @@ -30,6 +30,7 @@ public function __invoke(ForumSerializer $serializer, $model, array $attributes) { if ($value = $this->getBooleanSetting('fof-best-answer.search.solution_search')) { $attributes['showTagsInSearchResults'] = $this->getBooleanSetting('fof-best-answer.search.display_tags'); + $attributes['removeSolutionResultsFromMainSearch'] = $this->getBooleanSetting('fof-best-answer.search.remove_solutions_from_main_search'); } $attributes['solutionSearchEnabled'] = $value; From 0f79e38d9f0b3e08677b2aff93e28551bc624ff9 Mon Sep 17 00:00:00 2001 From: IanM Date: Fri, 11 Oct 2024 21:30:13 +0100 Subject: [PATCH 2/3] no need to bump core --- composer.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/composer.json b/composer.json index 550f552..9165f55 100644 --- a/composer.json +++ b/composer.json @@ -19,7 +19,7 @@ } ], "require": { - "flarum/core": "^1.8.7", + "flarum/core": "^1.8.3", "flarum/tags": "*" }, "replace": { From 1ff0a43c9005f4ef3932e9292a4b097a1c75b15f Mon Sep 17 00:00:00 2001 From: IanM Date: Fri, 11 Oct 2024 21:35:03 +0100 Subject: [PATCH 3/3] typings --- .github/workflows/frontend.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/frontend.yml b/.github/workflows/frontend.yml index 7882bf1..d1644d9 100644 --- a/.github/workflows/frontend.yml +++ b/.github/workflows/frontend.yml @@ -8,7 +8,7 @@ jobs: with: enable_bundlewatch: false enable_prettier: true - enable_typescript: true + enable_typescript: false frontend_directory: ./js backend_directory: .