Skip to content

chore: migrate to Vue 3 and @nextcloud/vue@v9 - #1136

Open
saw-jan wants to merge 31 commits into
masterfrom
chore/migrate-to-vue3
Open

chore: migrate to Vue 3 and @nextcloud/vue@v9#1136
saw-jan wants to merge 31 commits into
masterfrom
chore/migrate-to-vue3

Conversation

@saw-jan

@saw-jan saw-jan commented Aug 6, 2026

Copy link
Copy Markdown
Collaborator

Description

Migrate to Vue 3 and use @nextcloud/vue@v9

  • continue using webpack
  • drop jest in favor of vitest

Important

For Reviewers, check that:

  • UI elements are OK
  • All features are working

Related Issue or Workpackage

Open Tasks:

Types of changes

  • Bug fix (non-breaking change which fixes an issue)
  • New feature (non-breaking change which adds functionality)
  • Breaking change (fix or feature that would cause existing functionality to change)
  • Tests only (no source changes)

Checklist:

  • Code changes
  • Unit tests added
  • Acceptance tests added
  • Updated CHANGELOG.md file

@saw-jan saw-jan self-assigned this Aug 6, 2026
Comment thread eslint.config.js
Comment on lines +20 to +27
rules: {
'jsdoc/require-jsdoc': 'off',
'jsdoc/tag-lines': 'off',
'vue/first-attribute-linebreak': 'off',
'import/extensions': 'off',
'perfectionist/sort-imports': 'off',
'perfectionist/sort-named-imports': 'off',
'@stylistic/eol-last': 'off',

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

these need to be enabled later on

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

will be done in separate PR: https://community.openproject.org/wp/NEX-440

@saw-jan saw-jan changed the title feat: migrate to Vue 3 and nextcloud/vue9 chore: migrate to Vue 3 and @nextcloud/vue@v9 Aug 6, 2026
saw-jan added 27 commits August 6, 2026 16:39
Signed-off-by: Saw-jan <saw.jan.grg3e@gmail.com>
Signed-off-by: Saw-jan <saw.jan.grg3e@gmail.com>
Signed-off-by: Saw-jan <saw.jan.grg3e@gmail.com>
Signed-off-by: Saw-jan <saw.jan.grg3e@gmail.com>
Signed-off-by: Saw-jan <saw.jan.grg3e@gmail.com>
Signed-off-by: Saw-jan <saw.jan.grg3e@gmail.com>
Signed-off-by: Saw-jan <saw.jan.grg3e@gmail.com>
Signed-off-by: Saw-jan <saw.jan.grg3e@gmail.com>
Signed-off-by: Saw-jan <saw.jan.grg3e@gmail.com>
Signed-off-by: Saw-jan <saw.jan.grg3e@gmail.com>
Signed-off-by: Saw-jan <saw.jan.grg3e@gmail.com>
Signed-off-by: Saw-jan <saw.jan.grg3e@gmail.com>
Signed-off-by: Saw-jan <saw.jan.grg3e@gmail.com>
Signed-off-by: Saw-jan <saw.jan.grg3e@gmail.com>
Signed-off-by: Saw-jan <saw.jan.grg3e@gmail.com>
Signed-off-by: Saw-jan <saw.jan.grg3e@gmail.com>
Signed-off-by: Saw-jan <saw.jan.grg3e@gmail.com>
Signed-off-by: Saw-jan <saw.jan.grg3e@gmail.com>
Signed-off-by: Saw-jan <saw.jan.grg3e@gmail.com>
Signed-off-by: Saw-jan <saw.jan.grg3e@gmail.com>
Signed-off-by: Saw-jan <saw.jan.grg3e@gmail.com>
Signed-off-by: Saw-jan <saw.jan.grg3e@gmail.com>
Signed-off-by: Saw-jan <saw.jan.grg3e@gmail.com>
Signed-off-by: Saw-jan <saw.jan.grg3e@gmail.com>
Signed-off-by: Saw-jan <saw.jan.grg3e@gmail.com>
Signed-off-by: Saw-jan <saw.jan.grg3e@gmail.com>
Signed-off-by: Saw-jan <saw.jan.grg3e@gmail.com>
saw-jan added 4 commits August 6, 2026 17:16
Signed-off-by: Saw-jan <saw.jan.grg3e@gmail.com>
Signed-off-by: Saw-jan <saw.jan.grg3e@gmail.com>
Signed-off-by: Saw-jan <saw.jan.grg3e@gmail.com>
Signed-off-by: Saw-jan <saw.jan.grg3e@gmail.com>
@saw-jan
saw-jan force-pushed the chore/migrate-to-vue3 branch from 511adba to 34530f7 Compare August 6, 2026 12:52
@github-actions

github-actions Bot commented Aug 6, 2026

Copy link
Copy Markdown

JS Code Coverage

Coverage after merging chore/migrate-to-vue3 into master will be
83.32%
Coverage Report
FileStmtsBranchesFuncsLinesUncovered Lines
src
   adminSettings.js0%100%100%0%12–14
   dashboard.js0%100%0%0%10–12, 15–16
   personalSettings.js0%100%100%0%12–14
   projectTab.js0%0%0%0%16–17, 20, 24, 30, 34, 34, 34, 36, 38
   reference.js0%100%0%0%14, 16, 19, 21–22, 24, 29–30, 33–35, 37, 41–42, 44, 46
   setup.js0%100%0%0%10–13, 9
src/components
   AdminSettings.vue87.22%81.58%93.55%87.50%206, 227, 227, 227–228, 24, 247–248, 272–273, 273, 273–274, 276, 78
   ErrorLabel.vue50%100%100%50%6
   OAuthConnectButton.vue80.77%68.75%100%81.48%63–64, 66–67, 69, 72, 72, 72–73, 75
   PersonalSettings.vue79.81%80.43%85%76.32%132–133, 143–145, 145, 145, 145, 145–146, 151–152, 152, 152, 154, 154, 157, 18
src/components/admin
   FieldValue.vue100%100%100%100%
   FormAuthMethod.vue87.97%86.11%87.10%89.39%221, 224, 248, 248, 248–250, 32, 40, 82, 82, 82
   FormHeading.vue75%70%100%100%12, 15, 9
   FormOAuthSettings.vue88.68%91.55%82.22%89.58%101, 137, 218, 249, 379, 379, 379–380, 403, 403, 403–404, 61, 61, 61, 85
   FormOpenProjectHost.vue95.52%90.91%95.45%97.47%156, 159, 53, 53, 53
   FormProjectFolder.vue89.73%87.93%89.83%91.03%100, 100, 100–101, 101, 119, 139, 269, 334, 334–335, 369, 369–370, 382–383, 401, 403, 424–426, 453, 455, 483, 483, 483–484, 69
   FormSSOSettings.vue93.44%94.29%90.48%93.75%123, 139, 139, 139, 232–233, 238, 244, 294, 359–360, 384, 74
   TermsOfServiceUnsigned.vue100%100%100%100%
   TextInput.vue79.49%100%60%75.76%147, 152, 23–27, 47
src/components/icons
   ClippyIcon.vue66.67%100%0%66.67%11
   OpenProjectIcon.vue66.67%100%0%66.67%11
src/components/settings
   CheckBox.vue81.82%100%60%71.43%15–16
   ErrorNote.vue100%100%100%100%
   SettingsTitle.vue91.30%75%100%93.33%48, 51
src/components/tab
   EmptyContent.vue92%88.37%100%96.15%10, 106–107, 12, 12, 16
   SearchInput.vue88.11%85.90%90.63%88.89%17, 171, 178–179, 179, 179–180, 197, 208–209, 209, 209–210, 212, 248, 273, 276, 279, 290–292, 296, 299–300
   WorkPackage.vue84.12%73.58%83.33%89.90%118–120, 151–154, 165–166, 228–229, 233, 233, 233, 233–236, 7, 7, 7, 7, 90–91
src/filesPlugin
   filesPlugin.js0%0%0%0%100, 104–106, 108, 111, 113, 115–117, 119–120, 122, 126–127, 15, 15, 15, 19, 27–29, 32, 34–36, 40, 42, 46, 48, 52, 52, 52, 52, 54, 56, 59–61, 63, 63, 63–65, 68–69, 71–72, 76, 80, 82, 86, 86, 86, 86, 88, 90, 93–95
src/utils
   workpackageHelper.js92.56%94.87%88.89%91.78%102–104, 106, 27, 57, 57–58
src/views
   CreateWorkPackageModal.vue87.10%81.48%86.36%89.83%110, 137, 153, 371–372, 374–375, 379, 395, 512, 512, 512–513, 515, 520–521, 523–524, 53, 530–531, 533–534, 541, 541, 541–542, 544, 547, 557, 588, 597, 604–605, 605, 605–606, 619, 641, 644, 653, 684, 692, 700, 705, 707, 707, 707–708, 719–721, 79, 92, 95
   Dashboard.vue83.59%80.60%80%86.73%118, 118, 118–119, 121, 132, 142, 145, 15, 15, 15, 15, 15, 157, 16, 16, 16, 168, 17, 213–214, 218–220, 228–229
   LinkMultipleFilesModal.vue98.36%97.30%100%98.48%156–157
   ProjectsTab.vue86.11%83.93%83.33%88.30%103–105, 118, 142, 153–154, 189, 189, 189–192, 194, 197, 224, 248–249, 259, 269
   WorkPackagePickerElement.vue0%0%0%0%100–101, 101, 101–104, 107, 110–111, 111, 111, 111, 111, 111–113, 113, 113, 113, 113–114, 116, 14, 14, 14, 17–18, 18, 39, 6, 60, 69, 7, 72, 75, 75, 75, 75, 75–76, 78, 78, 78, 78, 78–79, 81, 85, 89, 92, 92, 92–94, 96–98
   WorkPackageReferenceWidget.vue0%0%0%0%18, 33, 58, 66, 7, 71, 76, 8–9

@github-actions

github-actions Bot commented Aug 6, 2026

Copy link
Copy Markdown

PHP Code Coverage

Coverage after merging chore/migrate-to-vue3 into master will be
69.23%
Coverage Report
FileStmtsBranchesFuncsLinesUncovered Lines
integration_openproject/server/apps/integration_openproject/lib
   Capabilities.php0%100%0%0%24, 31–40
   OIDCClientMapper.php0%100%0%0%29, 40–49, 52
   ServerVersion.php0%100%0%0%17, 27–29, 32, 41–42
   TokenEventFactory.php100%100%100%100%
integration_openproject/server/apps/integration_openproject/lib/AppInfo
   Application.php37.04%100%50%36%116–118, 121–135, 138, 140, 142–143, 146, 151–152, 156–159, 161–172, 174, 177, 181, 185–187, 220
integration_openproject/server/apps/integration_openproject/lib/BackgroundJob
   RemoveExpiredDirectUploadTokens.php0%100%0%0%28, 30–32, 41–42
integration_openproject/server/apps/integration_openproject/lib/Controller
   ConfigController.php79.16%100%70.59%79.51%114, 151–152, 154, 156–158, 160–163, 166–167, 169, 194, 198–200, 442–444, 446–448, 497, 577–581, 592, 606–609, 617, 621–624, 663, 669–684, 725, 728, 731–746, 760–763, 765–769
   DirectDownloadController.php0%100%0%0%33–35, 50–52, 54–61
   DirectUploadController.php71.03%100%100%70.21%117–119, 162–164, 175, 179–182, 184, 194, 201, 217–219, 221–222, 225–230, 233, 235, 245–247, 253–255, 263–265, 280–282, 301, 306, 312
   FilesController.php85.60%100%83.33%85.71%181–182, 244, 253, 270–273, 278–280, 285–287, 299, 301, 304
   OpenProjectAPIController.php81.09%100%82.35%80.98%116, 155, 202–204, 207–214, 216–220, 222, 241, 266, 331, 381, 401, 448, 473–475, 478–482, 484, 66
   OpenProjectController.php96.45%100%80%96.95%241–245
integration_openproject/server/apps/integration_openproject/lib/Dashboard
   OpenProjectWidget.php0%100%0%0%101, 108–109, 111–116, 118–122, 124–126, 129–140, 61–66, 73, 80, 87, 94
integration_openproject/server/apps/integration_openproject/lib/Exception
   OpenprojectAvatarErrorException.php100%100%100%100%
   OpenprojectErrorException.php100%100%100%100%
   OpenprojectFileNotUploadedException.php100%100%100%100%
   OpenprojectGroupfolderSetupConflictException.php100%100%100%100%
   OpenprojectResponseException.php100%100%100%100%
   OpenprojectUnauthorizedUserException.php0%100%0%0%21
integration_openproject/server/apps/integration_openproject/lib/Listener
   BeforeGroupDeletedListener.php100%100%100%100%
   BeforeNodeInsideOpenProjectGroupfilderChangedListener.php0%100%0%0%46–48, 52–55, 57, 59, 62–63, 65, 67–70, 72–75, 77–79
   BeforeUserDeletedListener.php40%100%50%37.50%30, 38, 42–43, 45
   LoadAdditionalScriptsListener.php0%100%0%0%37–38, 46–47, 49, 51–52, 54
   LoadSidebarScript.php65.91%100%100%64.29%105, 77–88, 95, 98
   OpenProjectReferenceListener.php0%100%0%0%45–47, 54–55, 57, 59–60, 62–74
   TermsOfServiceEventListener.php0%100%0%0%41–42, 47–48, 50–51, 53–55, 58–62
   UserChangedListener.php0%100%0%0%34, 41–42, 45–50, 53
   UserLoggedInEventListener.php0%100%0%0%27, 35–36, 39, 42
integration_openproject/server/apps/integration_openproject/lib/Migration
   Version2001Date20221213083550.php0%100%0%0%30, 40–48, 50–58, 60–62, 64
   Version20100Date20250820101358.php0%100%0%0%38, 47–53, 56
   Version2310Date20230116153411.php0%100%0%0%29, 32–35, 37–62, 64–65, 67
   Version2400Date20230504144300.php0%100%0%0%30, 40–43
   Version2640Date20240628114301.php0%100%0%0%35, 47–49, 52–53, 56
   Version2900Date20250718065820.php0%100%0%0%22, 33–36, 38–39, 41–42, 45
integration_openproject/server/apps/integration_openproject/lib/Reference
   WorkPackageReferenceProvider.php51.67%100%25%58.33%100–101, 104, 108, 142, 150–151, 159, 37, 44, 51, 58–60, 87, 93–96, 99
integration_openproject/server/apps/integration_openproject/lib/Search
   OpenProjectSearchProvider.php0%100%0%0%100–102, 104–106, 109–110, 112–113, 116–125, 127–131, 52–55, 62, 69, 77, 79, 82, 89–90, 93–97, 99
   OpenProjectSearchResultEntry.php100%100%100%100%
integration_openproject/server/apps/integration_openproject/lib/Service
   DatabaseService.php42.31%100%60%40.43%108–112, 114, 63–76, 78–85
   DirectDownloadService.php88.46%100%100%87.50%62–63, 65
   DirectUploadService.php42.86%100%66.67%40%101, 62–65, 67–75, 95
   OauthService.php100%100%100%100%
   OpenProjectAPIService.php76.52%100%78.87%76.33%1005–1006, 1008,

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant