mirror of
https://github.com/HabitRPG/habitica.git
synced 2025-12-18 15:17:25 +01:00
commit16d8b87e90Merge:07387faf486bea232d47Author: negue <eugen.bolz@gmail.com> Date: Thu Sep 14 22:30:00 2023 +0200 Merge remote-tracking branch 'origin/develop' into negue/ui/setting commit07387faf48Author: negue <eugen.bolz@gmail.com> Date: Wed Sep 13 23:38:37 2023 +0200 remove generate promoCode from ui commit6bea232d47Author: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon Sep 11 12:55:31 2023 -0400 build(deps): bump core-js from 3.32.1 to 3.32.2 in /website/client (#14867) Bumps [core-js](https://github.com/zloirock/core-js/tree/HEAD/packages/core-js) from 3.32.1 to 3.32.2. - [Release notes](https://github.com/zloirock/core-js/releases) - [Changelog](https://github.com/zloirock/core-js/blob/master/CHANGELOG.md) - [Commits](https://github.com/zloirock/core-js/commits/v3.32.2/packages/core-js) --- updated-dependencies: - dependency-name: core-js dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> commitcebb3f0f25Author: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon Sep 11 12:43:49 2023 -0400 build(deps): bump webpack from 4.46.0 to 4.47.0 in /website/client (#14868) Bumps [webpack](https://github.com/webpack/webpack) from 4.46.0 to 4.47.0. - [Release notes](https://github.com/webpack/webpack/releases) - [Commits](https://github.com/webpack/webpack/compare/v4.46.0...v4.47.0) --- updated-dependencies: - dependency-name: webpack dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> commitea8563cd17Merge:3e16584dcf6259955891Author: negue <eugen.bolz@gmail.com> Date: Tue Aug 29 21:23:02 2023 +0200 Merge remote-tracking branch 'origin/negue/ui/setting' into negue/ui/setting commit3e16584dcfAuthor: negue <eugen.bolz@gmail.com> Date: Tue Aug 29 21:22:06 2023 +0200 fix PR comments commit84ba44fb19Author: negue <eugen.bolz@gmail.com> Date: Tue Aug 29 20:38:54 2023 +0200 fix PR comments commit6259955891Author: CuriousMagpie <eilatan@gmail.com> Date: Fri Aug 25 11:20:26 2023 -0400 update form.scss commitda82bd8e68Author: negue <eugen.bolz@gmail.com> Date: Thu Aug 24 21:40:02 2023 +0200 remove ending commit82e5fd2a83Author: negue <eugen.bolz@gmail.com> Date: Mon Aug 21 22:25:41 2023 +0200 fix spacing commit9ad06ea88bAuthor: negue <eugen.bolz@gmail.com> Date: Mon Aug 21 22:09:22 2023 +0200 clean up debug row for login methods commit41cde37675Merge:8c568060f982ebe71eb4Author: negue <eugen.bolz@gmail.com> Date: Mon Aug 21 21:51:22 2023 +0200 Merge remote-tracking branch 'origin/develop' into negue/ui/setting commit8c568060f9Author: negue <eugen.bolz@gmail.com> Date: Mon Aug 21 21:49:31 2023 +0200 fix PR comments commit36f7a4711dMerge:d279af7897647b27c55fAuthor: negue <eugen.bolz@gmail.com> Date: Fri Aug 11 20:04:15 2023 +0200 Merge remote-tracking branch 'origin/develop' into negue/ui/setting commitd279af7897Merge:ffbed3e044b20ea44d49Author: negue <eugen.bolz@gmail.com> Date: Wed Aug 9 21:13:37 2023 +0200 Merge branch 'negue/refactor/routes' into negue/ui/setting commitb20ea44d49Author: negue <eugen.bolz@gmail.com> Date: Wed Aug 9 21:04:12 2023 +0200 Split Vue.Router routes commitffbed3e044Author: negue <eugen.bolz@gmail.com> Date: Sun Jul 23 00:00:24 2023 +0200 remove console commit4c350b0180Author: negue <eugen.bolz@gmail.com> Date: Sat Jul 22 23:34:20 2023 +0200 update Bailey Notification Text + fix popover commitc105b9ecf9Author: negue <eugen.bolz@gmail.com> Date: Sat Jul 22 23:21:53 2023 +0200 fix change password setting commit06410b4807Author: negue <eugen.bolz@gmail.com> Date: Sat Jul 22 22:50:00 2023 +0200 fix reset account texts commitccfdd9bb9cMerge:35c75304f18558dcc3a8Author: negue <eugen.bolz@gmail.com> Date: Sat Jul 22 22:48:13 2023 +0200 Merge remote-tracking branch 'origin/develop' into negue/ui/setting commit35c75304f1Author: negue <eugen.bolz@gmail.com> Date: Sun Jul 2 20:16:06 2023 +0200 more fixes commit203e961464Author: negue <eugen.bolz@gmail.com> Date: Sun Jul 2 19:45:17 2023 +0200 fix notification settings commitec94604791Author: negue <eugen.bolz@gmail.com> Date: Sun Jun 25 22:00:45 2023 +0200 applied same styling to promoCode.vue commit0177b3a76bAuthor: negue <eugen.bolz@gmail.com> Date: Sun Jun 25 21:41:05 2023 +0200 move promoCode.vue to pages/settings commit8fbb600273Author: negue <eugen.bolz@gmail.com> Date: Sun Jun 25 21:40:35 2023 +0200 saveCancelButtons.vue allow to hide the cancel part commit4915f2a3fbAuthor: negue <eugen.bolz@gmail.com> Date: Sun Jun 25 21:09:07 2023 +0200 Hide Transactions Page again commit8b5ae17f02Author: negue <eugen.bolz@gmail.com> Date: Sun Jun 25 20:52:03 2023 +0200 also check for invalid arguments in the password settings commitaa97ed5299Author: negue <eugen.bolz@gmail.com> Date: Sun Jun 25 20:25:53 2023 +0200 fix localhost externalLinks check commit87a4e4931bAuthor: negue <eugen.bolz@gmail.com> Date: Sun Jun 25 20:01:31 2023 +0200 show notification on username change + fix userEmail checks commit6a6f55f6fcMerge:f9ff5e5c55e49d26eacdAuthor: negue <eugen.bolz@gmail.com> Date: Sat Jun 24 22:54:00 2023 +0200 Merge remote-tracking branch 'origin/develop' into negue/ui/setting commitf9ff5e5c55Author: negue <eugen.bolz@gmail.com> Date: Tue May 30 22:41:42 2023 +0200 check password inputs and mark invalid for "password change" setting commit4497514eebAuthor: negue <eugen.bolz@gmail.com> Date: Tue May 30 21:59:21 2023 +0200 show notification when chaning display name commit3232f12f0dAuthor: negue <eugen.bolz@gmail.com> Date: Tue May 30 21:55:25 2023 +0200 check current password valid style in "delete account" and "reset account" commit582a2f1304Author: negue <eugen.bolz@gmail.com> Date: Tue May 30 21:27:20 2023 +0200 mark password field of email setting as invalid on wrong password commit8e3b8a962aAuthor: negue <eugen.bolz@gmail.com> Date: Tue May 30 21:24:46 2023 +0200 refactor currentPasswordInput.vue to use validatedTextInput.vue commit61521507a4Author: negue <eugen.bolz@gmail.com> Date: Tue May 30 20:20:56 2023 +0200 fix username setting: - unsaved values check - @ char must be first in input, otherwise not remove it for checks commitf74c29a065Merge:c4b6f0c39cd4a5823916Author: negue <eugen.bolz@gmail.com> Date: Tue May 30 19:54:06 2023 +0200 Merge remote-tracking branch 'origin/develop' into negue/ui/setting commitc4b6f0c39cMerge:37eee140ad6e3a367832Author: negue <eugen.bolz@gmail.com> Date: Fri May 12 22:08:08 2023 +0200 Merge remote-tracking branch 'origin/develop' into negue/ui/setting commit37eee140adAuthor: negue <eugen.bolz@gmail.com> Date: Fri May 12 21:57:27 2023 +0200 delete account without password commit48a6801f4eAuthor: negue <eugen.bolz@gmail.com> Date: Mon May 8 22:06:29 2023 +0200 fix duplicate json entry commit47a2189f49Merge:a56b4a445749f45d27e3Author: negue <eugen.bolz@gmail.com> Date: Mon May 8 21:48:21 2023 +0200 Merge remote-tracking branch 'origin/release' into negue/ui/setting commita56b4a4457Author: negue <eugen.bolz@gmail.com> Date: Mon May 8 21:37:31 2023 +0200 show current class on setting panel commit9c973cca2aAuthor: negue <eugen.bolz@gmail.com> Date: Mon May 8 21:15:46 2023 +0200 fix selectDifficulty.vue - refactor selectList.vue commit95b37b3ba3Author: negue <eugen.bolz@gmail.com> Date: Mon May 8 20:45:09 2023 +0200 migrate restoreValues fix to new setting component commit7947b1c67dMerge:ad3e4d604a71e165433aAuthor: negue <eugen.bolz@gmail.com> Date: Mon May 8 20:41:31 2023 +0200 Merge remote-tracking branch 'origin/develop' into negue/ui/setting commitad3e4d604aAuthor: negue <eugen.bolz@gmail.com> Date: Sat Apr 29 01:18:25 2023 +0200 style fixes commitcea13d5bc3Merge:73a5e5fcabb159182188Author: negue <eugen.bolz@gmail.com> Date: Fri Apr 28 23:58:09 2023 +0200 Merge remote-tracking branch 'origin/develop' into negue/ui/setting commit73a5e5fcabAuthor: negue <eugen.bolz@gmail.com> Date: Tue Apr 25 20:51:14 2023 +0200 style / padding issues commit0a10eb32ccAuthor: negue <eugen.bolz@gmail.com> Date: Sat Apr 15 20:54:08 2023 +0200 fix "setting new password" invalid check commita79bec3fa5Author: negue <eugen.bolz@gmail.com> Date: Tue Apr 11 23:15:15 2023 +0200 add password for other logins commit9ff17fd6ddAuthor: negue <eugen.bolz@gmail.com> Date: Tue Apr 11 23:05:19 2023 +0200 "fix values" use keydown event to mark as change commit1f470942a9Author: negue <eugen.bolz@gmail.com> Date: Thu Apr 6 00:19:18 2023 +0200 delete old api.vue commitb4904a8b84Merge:b5da7ccc70c8b98678d0Author: negue <eugen.bolz@gmail.com> Date: Thu Apr 6 00:18:07 2023 +0200 Merge remote-tracking branch 'origin/develop' into negue/ui/setting commitb5da7ccc70Author: negue <eugen.bolz@gmail.com> Date: Thu Apr 6 00:11:36 2023 +0200 refactor webhook ui to use save/cancel buttons commitf49f67ff5cAuthor: negue <eugen.bolz@gmail.com> Date: Wed Apr 5 22:56:37 2023 +0200 remove unused settings commitcc73b44b25Author: negue <eugen.bolz@gmail.com> Date: Wed Mar 29 23:40:30 2023 +0200 remove advancedCollapsed settings to start it opened commite0300e8710Author: negue <eugen.bolz@gmail.com> Date: Wed Mar 29 22:58:09 2023 +0200 remove displayInviteToPartyWhenPartyIs1 setting commit1741ddfc64Author: negue <eugen.bolz@gmail.com> Date: Mon Mar 20 23:00:17 2023 +0100 webhook margins commit24a43d027cAuthor: negue <eugen.bolz@gmail.com> Date: Mon Mar 20 22:40:19 2023 +0100 userid tooltip commit42fcb20bc4Author: negue <eugen.bolz@gmail.com> Date: Thu Mar 16 00:51:10 2023 +0100 remove balance for choosing class commit160848473dAuthor: negue <eugen.bolz@gmail.com> Date: Thu Mar 16 00:20:56 2023 +0100 show real class setting modal if enough gems available commitf74ba9738dAuthor: negue <eugen.bolz@gmail.com> Date: Thu Mar 16 00:10:53 2023 +0100 update apple icon and size commitbf961bc728Author: negue <eugen.bolz@gmail.com> Date: Wed Mar 15 23:59:42 2023 +0100 Copied API Token Notification commit28f0220b4eAuthor: negue <eugen.bolz@gmail.com> Date: Wed Mar 15 23:53:33 2023 +0100 remove blue color of setting links commitb53ccace95Author: negue <eugen.bolz@gmail.com> Date: Wed Mar 15 23:43:06 2023 +0100 fix username/email setting input width commit1dfa5b275dAuthor: negue <eugen.bolz@gmail.com> Date: Wed Mar 15 23:11:32 2023 +0100 developer mode commit776618d2dbAuthor: negue <eugen.bolz@gmail.com> Date: Tue Mar 14 21:11:52 2023 +0100 Add new Pause Dailies Setting commit576c80af7eMerge:dec1a1159d377b152ffdAuthor: negue <eugen.bolz@gmail.com> Date: Tue Mar 14 21:04:05 2023 +0100 Merge remote-tracking branch 'origin/develop' into negue/ui/setting commitdec1a1159dAuthor: negue <eugen.bolz@gmail.com> Date: Tue Mar 14 21:00:52 2023 +0100 developer mode dummy row commit1e80a7d145Author: negue <eugen.bolz@gmail.com> Date: Sat Mar 11 00:03:33 2023 +0100 WIP webhook row commitcc4bedbe2dAuthor: negue <eugen.bolz@gmail.com> Date: Fri Mar 10 20:28:57 2023 +0100 add spritely login creds message to the new api-row / redirect old url to the new one commitf9833aa78aAuthor: negue <eugen.bolz@gmail.com> Date: Thu Mar 9 02:23:39 2023 +0100 API Token Row commit123c9b9bb1Author: negue <eugen.bolz@gmail.com> Date: Mon Mar 6 22:46:50 2023 +0100 "Your User Data" Row instead of Page commit0ade5663aeAuthor: negue <eugen.bolz@gmail.com> Date: Fri Mar 3 22:43:03 2023 +0100 userid row commitb4f2236ab8Author: negue <eugen.bolz@gmail.com> Date: Fri Mar 3 22:22:32 2023 +0100 rename folder of setting rows commit3b050861c4Author: negue <eugen.bolz@gmail.com> Date: Tue Feb 21 21:11:48 2023 +0100 move remaining setting to generalSettings.vue - delete site.vue - start with siteData.vue commitb09298fb01Author: negue <eugen.bolz@gmail.com> Date: Tue Feb 21 20:56:03 2023 +0100 move taskSettings.vue and add it to the settings list commit5ed25066ecAuthor: negue <eugen.bolz@gmail.com> Date: Tue Feb 21 20:06:13 2023 +0100 size/margin for transactions commit25e77cbd95Author: negue <eugen.bolz@gmail.com> Date: Tue Feb 21 19:52:12 2023 +0100 move purchaseHistory.vue commit8e4e1bcb0fMerge:bb14d09aa485c50d50e9Author: negue <eugen.bolz@gmail.com> Date: Tue Feb 21 19:04:31 2023 +0100 Merge remote-tracking branch 'origin/negue/ui/setting' into negue/ui/setting commit85c50d50e9Author: SabreCat <sabe@habitica.com> Date: Thu Feb 16 14:23:27 2023 -0600 fix(css): remove redundant formatting for a elements commitbb14d09aa4Author: negue <eugen.bolz@gmail.com> Date: Thu Feb 16 01:34:09 2023 +0100 remove console commit8c5e722c72Author: negue <eugen.bolz@gmail.com> Date: Thu Feb 16 01:26:43 2023 +0100 first try with the refactored UI of Login Methods commit9c8770051dAuthor: negue <eugen.bolz@gmail.com> Date: Sat Feb 11 19:13:16 2023 +0100 fix dayStartAdjustmentSetting.vue for 0 value commitee2ff3881bAuthor: negue <eugen.bolz@gmail.com> Date: Sat Feb 11 18:37:46 2023 +0100 fix color after refactor commit121e7485caAuthor: negue <eugen.bolz@gmail.com> Date: Sat Feb 11 18:29:00 2023 +0100 mark audioThemeSetting as changed commit98c6570003Author: negue <eugen.bolz@gmail.com> Date: Sat Feb 11 18:05:55 2023 +0100 fix ul/li style in resetAccount.vue commitfed824f705Author: negue <eugen.bolz@gmail.com> Date: Sat Feb 11 17:49:36 2023 +0100 fix color of gem price commit80365e537dAuthor: negue <eugen.bolz@gmail.com> Date: Sat Feb 11 17:44:55 2023 +0100 fix "fixValuesSetting.vue" commitd3e15c5413Author: negue <eugen.bolz@gmail.com> Date: Wed Feb 8 01:06:27 2023 +0100 open forgot password in new tab commit31edec9ec5Author: negue <eugen.bolz@gmail.com> Date: Wed Feb 8 01:03:19 2023 +0100 move validatedTextInput.vue to shared components + fix check pos/size + input-error cleanup commit2adfd8c259Author: negue <eugen.bolz@gmail.com> Date: Sun Feb 5 20:19:30 2023 +0100 hide class setting until level 10 commit64fb4c0cf9Author: negue <eugen.bolz@gmail.com> Date: Sun Feb 5 19:32:40 2023 +0100 delete old modals (refactored into new settings ui) commitb5be137a8dAuthor: negue <eugen.bolz@gmail.com> Date: Sun Feb 5 19:27:26 2023 +0100 enable forgot password link in settings commitbec75c6e12Author: negue <eugen.bolz@gmail.com> Date: Sun Feb 5 18:52:54 2023 +0100 reset account + password required in api commit64f7e7a1d9Author: negue <eugen.bolz@gmail.com> Date: Mon Jan 30 23:22:55 2023 +0100 fix compile commit7ffb5101beMerge:2bfb130b929f64633a57Author: negue <eugen.bolz@gmail.com> Date: Mon Jan 30 22:47:05 2023 +0100 Merge remote-tracking branch 'origin/develop' into negue/ui/setting commit2bfb130b92Author: negue <eugen.bolz@gmail.com> Date: Mon Jan 30 22:44:23 2023 +0100 remove restore-modal and replace it with the finished fix values setting commit89530a133cAuthor: negue <eugen.bolz@gmail.com> Date: Wed Jan 18 19:22:36 2023 +0100 wip fix values commit428647fc71Author: negue <eugen.bolz@gmail.com> Date: Sat Jan 14 21:50:22 2023 +0100 refactor change class to design update + clean up old site.vue settings commit1f16819bc1Author: negue <eugen.bolz@gmail.com> Date: Wed Jan 11 22:41:05 2023 +0100 WIP fix values commit6fef3d0579Author: negue <eugen.bolz@gmail.com> Date: Sat Jan 7 22:51:30 2023 +0100 check for unsaved changes when pressing cancel commitbef8a4cdfcMerge:494f32c3e3c7aadede4dAuthor: negue <eugen.bolz@gmail.com> Date: Sat Jan 7 22:10:53 2023 +0100 Merge remote-tracking branch 'origin/develop' into negue/ui/setting commit494f32c3e3Author: negue <eugen.bolz@gmail.com> Date: Wed Dec 21 00:55:31 2022 +0100 Class Setting commitbda210cfbbAuthor: negue <eugen.bolz@gmail.com> Date: Tue Dec 20 23:01:41 2022 +0100 removes username, email and display name from site.vue commit38198d7df6Author: negue <eugen.bolz@gmail.com> Date: Tue Dec 20 22:36:27 2022 +0100 WIP class setting commitdddcfa637fAuthor: negue <eugen.bolz@gmail.com> Date: Tue Dec 20 22:31:36 2022 +0100 fix styles commitce0a5cf974Author: negue <eugen.bolz@gmail.com> Date: Sun Dec 11 23:57:07 2022 +0100 Scroll into opened Setting commit7e0a95ddffAuthor: negue <eugen.bolz@gmail.com> Date: Sun Dec 11 23:43:44 2022 +0100 Audio Theme Setting commit9c556662feAuthor: negue <eugen.bolz@gmail.com> Date: Sun Dec 11 00:25:30 2022 +0100 prepare header settings but still hidden commit30d8b27534Merge:a1d1a788b2580139ff69Author: negue <eugen.bolz@gmail.com> Date: Sat Dec 10 23:36:36 2022 +0100 Merge remote-tracking branch 'origin/develop' into negue/ui/setting commita1d1a788b2Author: negue <eugen.bolz@gmail.com> Date: Sat Dec 10 23:34:33 2022 +0100 DayStartAdjustmentSetting commitddee94a393Author: negue <eugen.bolz@gmail.com> Date: Sat Dec 10 20:00:12 2022 +0100 disable reset account button when password empty commit30a6db4c2dAuthor: negue <eugen.bolz@gmail.com> Date: Sat Dec 10 19:54:21 2022 +0100 hide & reset previous setting when switching to a different one commit78093848d7Author: negue <eugen.bolz@gmail.com> Date: Wed Dec 7 22:19:15 2022 +0100 validated text input (in/valid border color + icon) commite1b444ea63Author: negue <eugen.bolz@gmail.com> Date: Tue Dec 6 22:09:54 2022 +0100 re-enable box-shadow on hover commit96dc4e47aeAuthor: negue <negue@users.noreply.github.com> Date: Mon Nov 28 01:13:47 2022 +0100 remove console log commit69ad07daadAuthor: negue <negue@users.noreply.github.com> Date: Mon Nov 28 01:01:17 2022 +0100 dateFormatSetting commitbc11c0cf75Author: negue <negue@users.noreply.github.com> Date: Mon Nov 28 00:49:24 2022 +0100 move shared components / mixins commit0d1a189c64Author: negue <negue@users.noreply.github.com> Date: Mon Nov 28 00:44:21 2022 +0100 language Setting + imports cleanup commit29ebd89030Author: negue <negue@users.noreply.github.com> Date: Sun Nov 27 23:23:02 2022 +0100 fix icon size + fix display name valid checks commit5c7747517bMerge:fd5cbc302690b34c4dacAuthor: negue <negue@users.noreply.github.com> Date: Sun Nov 27 23:08:35 2022 +0100 Merge remote-tracking branch 'origin/release' into negue/ui/setting commitfd5cbc3026Author: negue <negue@users.noreply.github.com> Date: Wed Nov 23 00:14:21 2022 +0100 fix conflicts commit49361217b0Merge:edb427158f04e2a39a9fAuthor: negue <negue@users.noreply.github.com> Date: Wed Nov 23 00:12:38 2022 +0100 Merge remote-tracking branch 'origin/develop' into negue/ui/setting commitedb427158fAuthor: negue <negue@users.noreply.github.com> Date: Wed Nov 23 00:03:19 2022 +0100 disable save button if nothing was changed commitc7e40e9446Author: negue <negue@users.noreply.github.com> Date: Tue Nov 22 23:36:37 2022 +0100 delete account row commit4bf740c531Author: negue <negue@users.noreply.github.com> Date: Tue Nov 22 23:14:24 2022 +0100 Shared Modal Visible State commitd718153717Author: negue <negue@users.noreply.github.com> Date: Sun Nov 20 18:06:20 2022 +0100 resetAccount commite25922f8b3Author: negue <negue@users.noreply.github.com> Date: Wed Nov 16 23:39:26 2022 +0100 rename functional components for compiler commitfdbc2c0eeeAuthor: negue <negue@users.noreply.github.com> Date: Wed Nov 16 01:44:50 2022 +0100 password setting row commit5fd5e6275aAuthor: negue <negue@users.noreply.github.com> Date: Tue Nov 15 17:35:44 2022 +0100 update package-lock.json again commit9d742fd9a1Author: negue <negue@users.noreply.github.com> Date: Tue Nov 15 17:24:15 2022 +0100 update package-lock.json commitcd588e74d5Author: negue <negue@users.noreply.github.com> Date: Mon Nov 14 02:12:39 2022 +0100 displayNameSetting.vue commit265970c5efAuthor: negue <negue@users.noreply.github.com> Date: Mon Nov 14 02:09:47 2022 +0100 fix lint commita2b510cacaMerge:0bae5fbe024dca69f14bAuthor: negue <negue@users.noreply.github.com> Date: Mon Nov 14 01:15:02 2022 +0100 Merge remote-tracking branch 'origin/develop' into negue/ui/setting commit0bae5fbe02Author: negue <negue@users.noreply.github.com> Date: Sun Nov 13 22:00:34 2022 +0100 userEmailSetting commit23da70fa2eAuthor: negue <negue@users.noreply.github.com> Date: Sun Nov 13 20:38:14 2022 +0100 extract save / cancel buttons and the shared inlineSetting "logic" commit82047380f3Author: negue <negue@users.noreply.github.com> Date: Sun Nov 13 20:18:21 2022 +0100 first setting (username) in the new layout commit39150349c7Author: negue <negue@users.noreply.github.com> Date: Wed Nov 2 21:42:12 2022 +0100 Working on M1 - will be reverted on full merge commitf7787b318cMerge:4c0ecc993853fb28cc48Author: negue <negue@users.noreply.github.com> Date: Tue Nov 1 14:20:24 2022 +0100 Merge remote-tracking branch 'origin/develop' into negue/ui/setting commit4c0ecc9938Merge:2f53613a4562b4315b3dAuthor: negue <negue@users.noreply.github.com> Date: Sun Oct 30 12:49:34 2022 +0100 Merge remote-tracking branch 'origin/develop' into negue/ui/setting commit2f53613a45Author: negue <eugen.bolz@gmail.com> Date: Mon Oct 10 22:54:41 2022 +0200 split routes for ease of dev commit390f0fc69dMerge:cf222ee63a137f7d53dcAuthor: negue <eugen.bolz@gmail.com> Date: Mon Oct 10 22:50:43 2022 +0200 Merge remote-tracking branch 'origin/develop' into negue/ui/setting commitcf222ee63aAuthor: negue <eugen.bolz@gmail.com> Date: Sun Oct 2 23:15:35 2022 +0200 Update remaining Notification labels commitf837cce125Author: negue <eugen.bolz@gmail.com> Date: Sun Oct 2 22:45:12 2022 +0200 move site popup settings to notifications commitfc5181c3a7Author: negue <eugen.bolz@gmail.com> Date: Sun Oct 2 21:12:24 2022 +0200 fix styling in notification settings commit7b5568ed23Author: negue <eugen.bolz@gmail.com> Date: Sat Sep 10 16:00:56 2022 +0200 wip notification settings
819 lines
22 KiB
Vue
819 lines
22 KiB
Vue
<template>
|
|
<div
|
|
class="tasks-column"
|
|
:class="type"
|
|
>
|
|
<b-modal ref="editTaskModal" />
|
|
<buy-quest-modal
|
|
v-if="type === 'reward'"
|
|
:item="selectedItemToBuy || {}"
|
|
:price-type="selectedItemToBuy ? selectedItemToBuy.currency : ''"
|
|
:with-pin="true"
|
|
@change="resetItemToBuy($event)"
|
|
/>
|
|
<div class="d-flex align-items-center">
|
|
<h2 class="column-title">
|
|
{{ $t(typeLabel) }}
|
|
</h2>
|
|
<div
|
|
v-if="badgeCount > 0"
|
|
class="badge badge-pill badge-purple column-badge mx-1"
|
|
>
|
|
{{ badgeCount }}
|
|
</div>
|
|
<div
|
|
v-if="typeFilters.length > 1"
|
|
class="filters d-flex justify-content-end"
|
|
>
|
|
<div
|
|
v-for="filter in typeFilters"
|
|
:key="filter"
|
|
class="filter small-text"
|
|
:class="{active: activeFilter.label === filter}"
|
|
tabindex="0"
|
|
@click="activateFilter(type, filter)"
|
|
@keypress.enter="activateFilter(type, filter)"
|
|
>
|
|
{{ $t(filter) }}
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div
|
|
ref="tasksWrapper"
|
|
class="tasks-list"
|
|
>
|
|
<textarea
|
|
v-if="isUser || canCreateTasks()"
|
|
ref="quickAdd"
|
|
v-model="quickAddText"
|
|
class="quick-add"
|
|
:rows="quickAddRows"
|
|
:placeholder="quickAddPlaceholder"
|
|
@keypress.enter="quickAdd"
|
|
@focus="quickAddFocused = true"
|
|
@blur="quickAddFocused = false"
|
|
></textarea>
|
|
<transition name="quick-add-tip-slide">
|
|
<div
|
|
v-show="quickAddFocused"
|
|
class="quick-add-tip small-text"
|
|
v-html="$t('addMultipleTip', {taskType: $t(typeLabel)})"
|
|
></div>
|
|
</transition>
|
|
<clear-completed-todos
|
|
v-if="activeFilter.label === 'complete2' && isUser === true && taskList.length > 0"
|
|
/>
|
|
<div
|
|
v-if="isUser === true"
|
|
ref="columnBackground"
|
|
class="column-background"
|
|
:class="{'initial-description': initialColumnDescription}"
|
|
>
|
|
<div
|
|
v-once
|
|
class="svg-icon"
|
|
:class="`icon-${type}`"
|
|
v-html="icons[type]"
|
|
></div>
|
|
<h3 v-once>
|
|
{{ $t('theseAreYourTasks', {taskType: $t(typeLabel)}) }}
|
|
</h3>
|
|
<div class="small-text">
|
|
{{ $t(`${type}sDesc`) }}
|
|
</div>
|
|
</div>
|
|
<draggable
|
|
v-if="taskList.length > 0"
|
|
ref="tasksList"
|
|
class="sortable-tasks"
|
|
:options="{disabled: activeFilter.label === 'scheduled' || !canBeDragged(),
|
|
scrollSensitivity: 64}"
|
|
:delay-on-touch-only="true"
|
|
:delay="100"
|
|
@update="taskSorted"
|
|
@start="isDragging(true)"
|
|
@end="isDragging(false)"
|
|
>
|
|
<task
|
|
v-for="task in taskList"
|
|
:key="task.id"
|
|
:task="task"
|
|
:is-user="isUser"
|
|
:group="group"
|
|
:challenge="challenge"
|
|
@editTask="editTask"
|
|
@taskSummary="taskSummary"
|
|
@moveTo="moveTo"
|
|
@taskDestroyed="taskDestroyed"
|
|
/>
|
|
</draggable>
|
|
<template v-if="hasRewardsList">
|
|
<draggable
|
|
ref="rewardsList"
|
|
class="reward-items"
|
|
:delay-on-touch-only="true"
|
|
:delay="100"
|
|
@update="rewardSorted"
|
|
@start="rewardDragStart"
|
|
@end="rewardDragEnd"
|
|
>
|
|
<shopItem
|
|
v-for="reward in inAppRewards"
|
|
:key="reward.key"
|
|
:item="reward"
|
|
:show-popover="showPopovers"
|
|
:popover-position="'left'"
|
|
@click="openBuyDialog(reward)"
|
|
>
|
|
<template
|
|
slot="itemBadge"
|
|
slot-scope="ctx"
|
|
>
|
|
<span
|
|
class="badge-top"
|
|
@click.prevent.stop="togglePinned(ctx.item)"
|
|
@keypress.enter.prevent.stop="togglePinned(ctx.item)"
|
|
>
|
|
<pin-badge
|
|
:pinned="ctx.item.pinned"
|
|
/>
|
|
</span>
|
|
</template>
|
|
</shopItem>
|
|
</draggable>
|
|
</template>
|
|
</div>
|
|
</div>
|
|
</template>
|
|
|
|
<style lang="scss" scoped>
|
|
@import '~@/assets/scss/colors.scss';
|
|
|
|
::v-deep .draggable-cursor {
|
|
cursor: grabbing;
|
|
}
|
|
|
|
.badge-pin {
|
|
display: none;
|
|
}
|
|
|
|
.item:hover .badge-pin {
|
|
display: block;
|
|
}
|
|
|
|
.item:focus-within .badge-pin {
|
|
display: block;
|
|
}
|
|
|
|
.tasks-column {
|
|
min-height: 556px;
|
|
}
|
|
|
|
.sortable-tasks {
|
|
word-break: break-word;
|
|
}
|
|
|
|
.sortable-tasks + .reward-items {
|
|
margin-top: 16px;
|
|
}
|
|
|
|
.reward-items {
|
|
@supports (display: grid) {
|
|
display: grid;
|
|
justify-content: center;
|
|
grid-column-gap: 10px;
|
|
grid-row-gap: 4px;
|
|
grid-template-columns: repeat(auto-fill, 94px);
|
|
}
|
|
|
|
@supports not (display: grid) {
|
|
display: flex;
|
|
flex-wrap: wrap;
|
|
& > div {
|
|
margin: 0 10px 4px 0;
|
|
}
|
|
}
|
|
}
|
|
|
|
.tasks-list {
|
|
border-radius: 4px;
|
|
background: $gray-600;
|
|
padding: 8px;
|
|
position: relative; // needed for the .bottom-gradient to be position: absolute
|
|
height: calc(100% - 56px);
|
|
padding-bottom: 30px;
|
|
}
|
|
|
|
.quick-add {
|
|
border-radius: 2px;
|
|
background-color: rgba($black, 0.06);
|
|
width: 100%;
|
|
margin-bottom: 3px;
|
|
padding: 12px 16px;
|
|
border-color: transparent;
|
|
transition: background 0.15s ease-in;
|
|
resize: none;
|
|
overflow: hidden;
|
|
|
|
&:hover {
|
|
background-color: rgba($black, 0.1);
|
|
border-color: transparent;
|
|
}
|
|
|
|
&:active, &:focus {
|
|
background: $white;
|
|
border-color: $purple-500;
|
|
color: $gray-50;
|
|
margin-bottom: 0px;
|
|
}
|
|
|
|
&::placeholder {
|
|
font-weight: bold;
|
|
}
|
|
}
|
|
|
|
.quick-add-tip {
|
|
font-style: normal;
|
|
padding: 16px;
|
|
text-align: center;
|
|
|
|
overflow-y: hidden;
|
|
}
|
|
|
|
.quick-add-tip-slide-enter-active {
|
|
transition: all 0.5s cubic-bezier(0, 1, 0.5, 1);
|
|
}
|
|
|
|
.quick-add-tip-slide-leave-active {
|
|
transition: all 0.5s cubic-bezier(0, 1, 0.5, 1);
|
|
}
|
|
|
|
.quick-add-tip-slide-enter, .quick-add-tip-slide-leave-to {
|
|
max-height: 0;
|
|
padding: 0 16px;
|
|
}
|
|
|
|
.column-title {
|
|
margin-bottom: 0;
|
|
overflow: hidden;
|
|
text-overflow: ellipsis;
|
|
white-space: nowrap;
|
|
}
|
|
|
|
.column-badge {
|
|
position: static;
|
|
}
|
|
|
|
.filters {
|
|
margin-left: auto;
|
|
}
|
|
|
|
.filter {
|
|
font-weight: bold;
|
|
color: $gray-100;
|
|
font-style: normal;
|
|
padding: 8px;
|
|
cursor: pointer;
|
|
white-space: nowrap;
|
|
|
|
&:hover {
|
|
color: $purple-200;
|
|
}
|
|
|
|
&.active {
|
|
color: $purple-200;
|
|
border-bottom: 2px solid $purple-200;
|
|
padding-bottom: 6px;
|
|
}
|
|
}
|
|
|
|
.column-background {
|
|
position: absolute;
|
|
width: 100%;
|
|
bottom: 32px;
|
|
margin-left: -8px;
|
|
|
|
&.initial-description {
|
|
top: 30%;
|
|
}
|
|
|
|
.svg-icon {
|
|
margin: 0 auto;
|
|
margin-bottom: 12px;
|
|
}
|
|
|
|
h3, .small-text {
|
|
color: $gray-300;
|
|
text-align: center;
|
|
}
|
|
|
|
h3 {
|
|
font-weight: normal;
|
|
margin-bottom: 4px;
|
|
}
|
|
|
|
.small-text {
|
|
font-style: normal;
|
|
padding-left: 24px;
|
|
padding-right: 24px;
|
|
}
|
|
}
|
|
|
|
.icon-habit {
|
|
width: 30px;
|
|
height: 20px;
|
|
color: $gray-300;
|
|
}
|
|
|
|
.icon-daily {
|
|
width: 30px;
|
|
height: 20px;
|
|
color: $gray-300;
|
|
}
|
|
|
|
.icon-todo {
|
|
width: 20px;
|
|
height: 20px;
|
|
color: $gray-300;
|
|
}
|
|
|
|
.icon-reward {
|
|
width: 26px;
|
|
height: 20px;
|
|
color: $gray-300;
|
|
}
|
|
</style>
|
|
|
|
<script>
|
|
import throttle from 'lodash/throttle';
|
|
import isEmpty from 'lodash/isEmpty';
|
|
import draggable from 'vuedraggable';
|
|
import { shouldDo } from '@/../../common/script/cron';
|
|
import inAppRewards from '@/../../common/script/libs/inAppRewards';
|
|
import taskDefaults from '@/../../common/script/libs/taskDefaults';
|
|
import Task from './task';
|
|
import ClearCompletedTodos from './clearCompletedTodos';
|
|
import buyMixin from '@/mixins/buy';
|
|
import sync from '@/mixins/sync';
|
|
import externalLinks from '@/mixins/externalLinks';
|
|
import { mapState, mapActions, mapGetters } from '@/libs/store';
|
|
import shopItem from '../shops/shopItem';
|
|
import BuyQuestModal from '@/components/shops/quests/buyQuestModal.vue';
|
|
import PinBadge from '@/components/ui/pinBadge';
|
|
|
|
import notifications from '@/mixins/notifications';
|
|
|
|
import {
|
|
getTypeLabel,
|
|
getFilterLabels,
|
|
getActiveFilter,
|
|
sortAndFilterTasks,
|
|
} from '@/libs/store/helpers/filterTasks';
|
|
|
|
import habitIcon from '@/assets/svg/habit.svg';
|
|
import dailyIcon from '@/assets/svg/daily.svg';
|
|
import todoIcon from '@/assets/svg/todo.svg';
|
|
import rewardIcon from '@/assets/svg/reward.svg';
|
|
import { EVENTS } from '@/libs/events';
|
|
|
|
export default {
|
|
components: {
|
|
Task,
|
|
ClearCompletedTodos,
|
|
BuyQuestModal,
|
|
PinBadge,
|
|
shopItem,
|
|
draggable,
|
|
},
|
|
mixins: [buyMixin, notifications, sync, externalLinks],
|
|
// @TODO Set default values for props
|
|
// allows for better control of props values
|
|
// allows for better control of where this component is called
|
|
props: {
|
|
type: {},
|
|
isUser: {
|
|
type: Boolean,
|
|
default: false,
|
|
},
|
|
draggableOverride: {
|
|
type: Boolean,
|
|
default: false,
|
|
},
|
|
searchText: {},
|
|
selectedTags: {},
|
|
taskListOverride: {},
|
|
group: {},
|
|
challenge: {},
|
|
}, // @TODO: maybe we should store the group on state?
|
|
data () {
|
|
const icons = Object.freeze({
|
|
habit: habitIcon,
|
|
daily: dailyIcon,
|
|
todo: todoIcon,
|
|
reward: rewardIcon,
|
|
});
|
|
|
|
const typeLabel = '';
|
|
const typeFilters = [];
|
|
const activeFilter = {};
|
|
|
|
return {
|
|
typeLabel,
|
|
typeFilters,
|
|
activeFilter,
|
|
|
|
icons,
|
|
openedCompletedTodos: false,
|
|
|
|
forceRefresh: new Date(),
|
|
quickAddText: '',
|
|
quickAddFocused: false,
|
|
quickAddRows: 1,
|
|
showPopovers: true,
|
|
|
|
selectedItemToBuy: {},
|
|
dragging: false,
|
|
};
|
|
},
|
|
computed: {
|
|
...mapState({
|
|
user: 'user.data',
|
|
}),
|
|
...mapGetters({
|
|
getFilteredTaskList: 'tasks:getFilteredTaskList',
|
|
getUnfilteredTaskList: 'tasks:getUnfilteredTaskList',
|
|
getUserPreferences: 'user:preferences',
|
|
getUserBuffs: 'user:buffs',
|
|
}),
|
|
taskList () {
|
|
// @TODO: This should not default to user's tasks. It should require that you pass options in
|
|
const filteredTaskList = this.isUser
|
|
? this.getFilteredTaskList({
|
|
type: this.type,
|
|
filterType: this.activeFilter.label,
|
|
})
|
|
: this.filterByLabel(this.taskListOverride, this.type, this.activeFilter.label);
|
|
|
|
const taggedList = this.filterByTagList(filteredTaskList, this.selectedTags);
|
|
const searchedList = this.filterBySearchText(taggedList, this.searchText);
|
|
|
|
return searchedList;
|
|
},
|
|
inAppRewards () {
|
|
let watchRefresh = this.forceRefresh; // eslint-disable-line
|
|
const rewards = inAppRewards(this.user);
|
|
|
|
return rewards;
|
|
},
|
|
hasRewardsList () {
|
|
return this.isUser === true && this.type === 'reward' && this.activeFilter.label !== 'custom';
|
|
},
|
|
initialColumnDescription () {
|
|
// Show the column description in the middle only
|
|
// if there are no elements (tasks or in app items)
|
|
if (this.hasRewardsList) {
|
|
if (this.inAppRewards && this.inAppRewards.length >= 0) return false;
|
|
}
|
|
|
|
return this.taskList.length === 0;
|
|
},
|
|
quickAddPlaceholder () {
|
|
const type = this.$t(this.type);
|
|
return this.$t('addATask', { type });
|
|
},
|
|
badgeCount () {
|
|
// 0 means the badge will not be shown
|
|
// It is shown for the all and due views of dailies
|
|
// and for the active and scheduled views of todos.
|
|
if (this.type === 'todo' && this.activeFilter.label !== 'complete2') {
|
|
return this.taskList.length;
|
|
} if (this.type === 'daily') {
|
|
if (this.activeFilter.label === 'due') {
|
|
return this.taskList.length;
|
|
} if (this.activeFilter.label === 'all') {
|
|
return this.taskList
|
|
.reduce(
|
|
(count, t) => (!t.completed
|
|
&& shouldDo(new Date(), t, this.getUserPreferences) ? count + 1 : count),
|
|
0,
|
|
);
|
|
}
|
|
}
|
|
|
|
return 0;
|
|
},
|
|
},
|
|
watch: {
|
|
taskList: {
|
|
handler: throttle(function setColumnBackgroundVisibility () {
|
|
this.setColumnBackgroundVisibility();
|
|
}, 250),
|
|
deep: true,
|
|
},
|
|
quickAddFocused (newValue) {
|
|
if (newValue) this.quickAddRows = this.quickAddText.split('\n').length;
|
|
if (!newValue) this.quickAddRows = 1;
|
|
},
|
|
},
|
|
created () {
|
|
// Set Task Column Label
|
|
this.typeLabel = getTypeLabel(this.type);
|
|
// Get Category Filter Labels
|
|
this.typeFilters = getFilterLabels(this.type, this.challenge);
|
|
// Set default filter for task column
|
|
|
|
if (this.challenge) {
|
|
this.activateFilter(this.type);
|
|
} else {
|
|
this.activateFilter(this.type, this.user.preferences.tasks.activeFilter[this.type], true);
|
|
}
|
|
},
|
|
mounted () {
|
|
this.setColumnBackgroundVisibility();
|
|
|
|
this.$root.$on('buyModal::boughtItem', () => {
|
|
this.forceRefresh = new Date();
|
|
});
|
|
|
|
if (this.type !== 'todo') return;
|
|
this.$root.$on(EVENTS.RESYNC_COMPLETED, () => {
|
|
if (this.activeFilter.label !== 'complete2') return;
|
|
this.loadCompletedTodos();
|
|
});
|
|
this.handleExternalLinks();
|
|
},
|
|
updated () {
|
|
this.handleExternalLinks();
|
|
},
|
|
beforeDestroy () {
|
|
this.$root.$off('buyModal::boughtItem');
|
|
if (this.type !== 'todo') return;
|
|
this.$root.$off(EVENTS.RESYNC_COMPLETED);
|
|
},
|
|
methods: {
|
|
...mapActions({
|
|
loadCompletedTodos: 'tasks:fetchCompletedTodos',
|
|
createTask: 'tasks:create',
|
|
createGroupTasks: 'tasks:createGroupTasks',
|
|
}),
|
|
async taskSorted (data) {
|
|
const filteredList = this.taskList;
|
|
const taskToMove = filteredList[data.oldIndex];
|
|
const taskIdToMove = taskToMove._id;
|
|
let originTasks = this.getUnfilteredTaskList(this.type);
|
|
if (this.taskListOverride) originTasks = this.taskListOverride;
|
|
|
|
// Server
|
|
const taskIdToReplace = filteredList[data.newIndex];
|
|
const newIndexOnServer = originTasks.findIndex(taskId => taskId === taskIdToReplace);
|
|
|
|
let newOrder;
|
|
if (taskToMove.group.id && !this.isUser) {
|
|
newOrder = await this.$store.dispatch('tasks:moveGroupTask', {
|
|
taskId: taskIdToMove,
|
|
position: newIndexOnServer,
|
|
});
|
|
} else {
|
|
newOrder = await this.$store.dispatch('tasks:move', {
|
|
taskId: taskIdToMove,
|
|
position: newIndexOnServer,
|
|
});
|
|
}
|
|
if (!this.taskListOverride) this.user.tasksOrder[`${this.type}s`] = newOrder;
|
|
|
|
// Client
|
|
const deleted = originTasks.splice(data.oldIndex, 1);
|
|
originTasks.splice(data.newIndex, 0, deleted[0]);
|
|
},
|
|
async moveTo (task, where) { // where is 'top' or 'bottom'
|
|
const taskIdToMove = task._id;
|
|
const list = this.taskListOverride || this.getUnfilteredTaskList(this.type);
|
|
|
|
const oldPosition = list.findIndex(t => t._id === taskIdToMove);
|
|
const moved = list.splice(oldPosition, 1);
|
|
const newPosition = where === 'top' ? 0 : list.length;
|
|
list.splice(newPosition, 0, moved[0]);
|
|
|
|
if (!this.isUser) {
|
|
await this.$store.dispatch('tasks:moveGroupTask', {
|
|
taskId: taskIdToMove,
|
|
position: newPosition,
|
|
});
|
|
} else {
|
|
const newOrder = await this.$store.dispatch('tasks:move', {
|
|
taskId: taskIdToMove,
|
|
position: newPosition,
|
|
});
|
|
this.user.tasksOrder[`${this.type}s`] = newOrder;
|
|
}
|
|
},
|
|
async rewardSorted (data) {
|
|
const rewardsList = this.inAppRewards;
|
|
const rewardToMove = rewardsList[data.oldIndex];
|
|
|
|
const newOrder = await this.$store.dispatch('user:movePinnedItem', {
|
|
path: rewardToMove.path,
|
|
position: data.newIndex,
|
|
});
|
|
this.user.pinnedItemsOrder = newOrder;
|
|
},
|
|
rewardDragStart () {
|
|
// We need to stop popovers from interfering with our dragging
|
|
this.showPopovers = false;
|
|
this.isDragging(true);
|
|
},
|
|
rewardDragEnd () {
|
|
this.showPopovers = true;
|
|
this.isDragging(false);
|
|
},
|
|
canCreateTasks () {
|
|
if (!this.group) return false;
|
|
return (this.group.leader && this.group.leader._id === this.user._id)
|
|
|| (this.group.managers && Boolean(this.group.managers[this.user._id]));
|
|
},
|
|
async quickAdd (ev) {
|
|
// Add a new line if Shift+Enter Pressed
|
|
if (ev.shiftKey) {
|
|
this.quickAddRows += 1;
|
|
return true;
|
|
}
|
|
|
|
// Do not add new line is added if only Enter is pressed
|
|
ev.preventDefault();
|
|
const text = this.quickAddText;
|
|
if (!text) return false;
|
|
|
|
const tasks = text.split('\n').reverse().filter(taskText => (!!taskText)).map(taskText => {
|
|
const task = taskDefaults({ type: this.type, text: taskText }, this.user);
|
|
if (this.isUser) task.tags = this.selectedTags.slice();
|
|
return task;
|
|
});
|
|
|
|
this.quickAddText = '';
|
|
this.quickAddRows = 1;
|
|
if (this.group) {
|
|
await this.createGroupTasks({ groupId: this.group.id, tasks });
|
|
this.sync();
|
|
} else {
|
|
this.createTask(tasks);
|
|
}
|
|
this.$refs.quickAdd.blur();
|
|
return true;
|
|
},
|
|
editTask (task) {
|
|
this.$emit('editTask', task);
|
|
},
|
|
taskSummary (task) {
|
|
this.$emit('taskSummary', task);
|
|
},
|
|
activateFilter (type, filter = '', skipSave = false) {
|
|
// Needs a separate API call as this data may not reside in store
|
|
if (type === 'todo' && filter === 'complete2') {
|
|
if (this.group && this.group._id) {
|
|
this.$emit('loadGroupCompletedTodos');
|
|
} else {
|
|
this.loadCompletedTodos();
|
|
}
|
|
}
|
|
|
|
// the only time activateFilter is called with filter===''
|
|
// is when the component is first created
|
|
// this can be used to check If the user has set 'due'
|
|
// as default filter for daily
|
|
// and set the filter as 'due' only when the component first
|
|
// loads and not on subsequent reloads.
|
|
if (
|
|
type === 'daily' && filter === '' && !this.challenge
|
|
) {
|
|
filter = 'due'; // eslint-disable-line no-param-reassign
|
|
}
|
|
|
|
this.activeFilter = getActiveFilter(type, filter, this.challenge);
|
|
|
|
if (!skipSave && !this.challenge) {
|
|
const propertyToUpdate = `preferences.tasks.activeFilter.${type}`;
|
|
this.$store.dispatch('user:set', { [propertyToUpdate]: filter });
|
|
}
|
|
},
|
|
setColumnBackgroundVisibility () {
|
|
this.$nextTick(() => {
|
|
if (!this.$refs.columnBackground || !this.$refs.tasksList) return;
|
|
|
|
const tasksWrapperEl = this.$refs.tasksWrapper;
|
|
|
|
const tasksWrapperHeight = tasksWrapperEl.offsetHeight;
|
|
const quickAddHeight = this.$refs.quickAdd ? this.$refs.quickAdd.offsetHeight : 0;
|
|
const tasksListHeight = this.$refs.tasksList.$el.offsetHeight;
|
|
|
|
let combinedTasksHeights = tasksListHeight + quickAddHeight;
|
|
|
|
const rewardsList = tasksWrapperEl.getElementsByClassName('reward-items')[0];
|
|
if (rewardsList) {
|
|
combinedTasksHeights += rewardsList.offsetHeight;
|
|
}
|
|
|
|
const columnBackgroundStyle = this.$refs.columnBackground.style;
|
|
|
|
if (tasksWrapperHeight - combinedTasksHeights < 150) {
|
|
columnBackgroundStyle.display = 'none';
|
|
} else {
|
|
columnBackgroundStyle.display = 'block';
|
|
}
|
|
});
|
|
},
|
|
filterByLabel (taskList, type, filter) {
|
|
if (!taskList) return [];
|
|
const selectedFilter = getActiveFilter(type, filter, this.challenge);
|
|
return sortAndFilterTasks(taskList, selectedFilter, Boolean(this.group));
|
|
},
|
|
filterByTagList (taskList, tagList = []) {
|
|
let filteredTaskList = taskList;
|
|
// filter requested tasks by tags
|
|
if (!isEmpty(tagList)) {
|
|
filteredTaskList = taskList.filter(
|
|
task => tagList.every(tag => task.tags.indexOf(tag) !== -1),
|
|
);
|
|
}
|
|
return filteredTaskList;
|
|
},
|
|
filterBySearchText (taskList, searchText = '') {
|
|
let filteredTaskList = taskList;
|
|
// filter requested tasks by search text
|
|
if (searchText) {
|
|
// to ensure broadest case insensitive search matching
|
|
const searchTextLowerCase = searchText.toLowerCase();
|
|
filteredTaskList = taskList.filter(
|
|
task =>
|
|
// eslint rule disabled for block to allow nested binary expression
|
|
/* eslint-disable no-extra-parens, implicit-arrow-linebreak, max-len */
|
|
(
|
|
task.text.toLowerCase().indexOf(searchTextLowerCase) > -1
|
|
|| (task.notes && task.notes.toLowerCase().indexOf(searchTextLowerCase) > -1)
|
|
|| (task.checklist && task.checklist.length > 0
|
|
&& task.checklist
|
|
.some(checkItem => checkItem.text.toLowerCase().indexOf(searchTextLowerCase) > -1))
|
|
),
|
|
/* eslint-enable no-extra-parens, implicit-arrow-linebreak, max-len */
|
|
);
|
|
}
|
|
return filteredTaskList;
|
|
},
|
|
openBuyDialog (rewardItem) {
|
|
if (rewardItem.locked) return;
|
|
|
|
// Buy armoire and health potions immediately
|
|
const itemsToPurchaseImmediately = ['potion', 'armoire'];
|
|
if (itemsToPurchaseImmediately.indexOf(rewardItem.key) !== -1) {
|
|
this.makeGenericPurchase(rewardItem);
|
|
this.$emit('buyPressed', rewardItem);
|
|
return;
|
|
}
|
|
|
|
if (rewardItem.purchaseType === 'quests') {
|
|
this.selectedItemToBuy = rewardItem;
|
|
this.$root.$emit('bv::show::modal', 'buy-quest-modal');
|
|
return;
|
|
}
|
|
|
|
if (rewardItem.purchaseType !== 'gear' || !rewardItem.locked) {
|
|
this.$emit('openBuyDialog', rewardItem);
|
|
}
|
|
},
|
|
resetItemToBuy ($event) {
|
|
if (!$event) {
|
|
this.selectedItemToBuy = null;
|
|
}
|
|
},
|
|
togglePinned (item) {
|
|
if (!item.pinType) {
|
|
this.error(this.$t('errorTemporaryItem'));
|
|
return;
|
|
}
|
|
|
|
try {
|
|
if (!this.$store.dispatch('user:togglePinnedItem', { type: item.pinType, path: item.path })) {
|
|
this.text(this.$t('unpinnedItem', { item: item.text }));
|
|
}
|
|
} catch (e) {
|
|
this.error(e.message);
|
|
}
|
|
},
|
|
isDragging (dragging) {
|
|
this.dragging = dragging;
|
|
if (dragging) {
|
|
document.documentElement.classList.add('draggable-cursor');
|
|
} else {
|
|
document.documentElement.classList.remove('draggable-cursor');
|
|
}
|
|
},
|
|
taskDestroyed (task) {
|
|
this.$emit('taskDestroyed', task);
|
|
},
|
|
canBeDragged () {
|
|
return this.isUser
|
|
|| this.draggableOverride;
|
|
},
|
|
},
|
|
};
|
|
</script>
|