Skip to content

feat(teams): in-app Teams page#2561

Merged
marcoambrosini merged 10 commits into
masterfrom
feat/teams-spa
Jul 14, 2026
Merged

feat(teams): in-app Teams page#2561
marcoambrosini merged 10 commits into
masterfrom
feat/teams-spa

Conversation

@marcoambrosini

@marcoambrosini marcoambrosini commented Jun 26, 2026

Copy link
Copy Markdown
Member

Teams app front-end first step: mostly moved the functionality from contacts and added an overview page.
Screenshot 2026-06-26 at 20 08 13
Screenshot 2026-06-26 at 20 08 19

@marcoambrosini
marcoambrosini requested a review from susnux June 26, 2026 11:25
@marcoambrosini
marcoambrosini marked this pull request as draft June 26, 2026 11:30
@susnux

susnux commented Jun 26, 2026

Copy link
Copy Markdown
Contributor

So no longer part of contacts app? Will simplify things :)

@jancborchardt jancborchardt left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Really really nice! :) Great first step in the right direction, and keeping it simple & contained by just porting over what we have.

@jancborchardt

jancborchardt commented Jun 27, 2026

Copy link
Copy Markdown
Member

Small details but no blocker @marcoambrosini :

  • Search input should probably go even above "Add", so that we have a common position at least in height for the in-app search functions.
  • The "Overview" icon in the nav should be filled when active?
  • The avatars of the teams in the nav seem a bit too large, there is no space towards the text

@marcoambrosini

Copy link
Copy Markdown
Member Author

@susnux could you have a look at the front-end tooling and wiring and tell me if it's sane?

@marcoambrosini

Copy link
Copy Markdown
Member Author

Search input should probably go even above "Add", so that we have a common position at least in height for the in-app search functions.

@jancborchardt then I would do it same as talk here, with the new button inline

Comment thread lib/Controller/PageController.php
Comment thread src/teams/components/TeamCard.vue Outdated
Comment thread src/teams/team-page/components/CircleDetails/CirclePasswordSettings.vue Outdated
Comment thread src/teams/team-page/components/CircleDetails/CirclePasswordSettings.vue Outdated
Comment thread src/teams/team-page/components/CircleDetails/CirclePasswordSettings.vue Outdated
Comment thread src/teams/team-page/components/CircleDetails/CircleSettings.vue Outdated
Comment thread src/teams/team-page/components/CircleDetails/CircleSettings.vue Outdated
Marco Ambrosini added 4 commits July 3, 2026 14:44
Add a PageController that renders the SPA shell, a /teams route plus a
catch-all so HTML5-history deep links survive a reload, and a Teams
entry in the app navigation.

Signed-off-by: Marco Ambrosini <marco.ambrosini@nextcloud.com>
Register src/main.ts as the 'main' Vite entry and pull in the runtime
deps the ported team-page code needs (vue-router, pinia, vuex, cdav,
virtua, cropper, MDI). Allow JS in tsconfig and skip linting the
ported src/teams/team-page sources until they are modernized.

Signed-off-by: Marco Ambrosini <marco.ambrosini@nextcloud.com>
The app shell (App, router, Pinia store) drives a home view listing
teams and a per-team page. The team page and its member/entity-picker
components, services and models are ported from the Contacts app and
kept under team-page/ (Vuex + Options API) while they are migrated.

Signed-off-by: Marco Ambrosini <marco.ambrosini@nextcloud.com>
Generate circle/team links and the dashboard widget's targets against
the new circles.Page.index route instead of the Contacts app, and drop
the now-unused route_to_circle config and IAppManager 'contacts'
checks. The widget no longer requires Contacts to be installed.

Signed-off-by: Marco Ambrosini <marco.ambrosini@nextcloud.com>
Marco Ambrosini added 2 commits July 3, 2026 14:44
Raise the max-version to 35.

Signed-off-by: Marco Ambrosini <marco.ambrosini@nextcloud.com>
Signed-off-by: Marco Ambrosini <marco.ambrosini@nextcloud.com>
@marcoambrosini
marcoambrosini requested a review from susnux July 3, 2026 05:47
@jancborchardt jancborchardt linked an issue Jul 8, 2026 that may be closed by this pull request
@Koc

Koc commented Jul 8, 2026

Copy link
Copy Markdown
Contributor

hey-hey!

Looks really promising. @marcoambrosini Will it work fine with large circles (1000+ members)? See my other PRs related to that nextcloud/collectives#2518, nextcloud/contacts#5330, so maybe you can backport some stuff from them

@marcoambrosini
marcoambrosini marked this pull request as ready for review July 8, 2026 09:45
@jancborchardt jancborchardt moved this from 📐 At design to 🏗️ At engineering in 🖍 Design team Jul 8, 2026

@pringelmann pringelmann left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Looks great!

If you rebase on master you'll find new testing configs for FE unit and E2E tests. If possible could you please add a few critical/happy path tests?

EDIT: tests will calcify the code too much this early in the process. Let's defer

Comment thread src/teams/components/CreateTeamDialog.vue Outdated
Comment thread lib/Controller/PageController.php Outdated
Comment thread src/teams/components/TeamCard.vue Outdated
Comment thread src/teams/api.ts

@stediefan stediefan left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Looks great! I already built some UI stuff ontop - can't wait to publish after this gets merged. One further task would be to remove the corresponding code from contacts - right?

@marcoambrosini

Copy link
Copy Markdown
Member Author

Hi @Koc, yes we'll have to handle those too thanks for sharing!

Marco Ambrosini added 2 commits July 10, 2026 13:12
- reopen the create-team dialog after cancel/create by emitting close
- gate the Teams page and nav entry on frontend_enabled
- pluralize the resource count with n()
- keep the team list when the dashboard preview call fails

Assisted-by: ClaudeCode:claude-fable-5
Signed-off-by: Marco Ambrosini <marco.ambrosini@nextcloud.com>
Resolve conflicts from the upstream repo-wide refactor (constructor
property promotion, first-class callable syntax) and the Nextcloud 35
version bump. Drop the contacts-app dependency from the Teams dashboard
widget and ModelManager, adapt the Teams SPA to master's updated lint
and TypeScript rules, and recompile assets.

Assisted-by: ClaudeCode:claude-fable-5
Signed-off-by: Marco Ambrosini <marco.ambrosini@nextcloud.com>
@codecov

codecov Bot commented Jul 10, 2026

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.

📢 Thoughts on this report? Let us know!

Marco Ambrosini added 2 commits July 10, 2026 13:42
The Teams SPA bundle pulls in BSD-3-Clause code (cropperjs), but master
removed LICENSES/BSD-3-Clause.txt; restore it so REUSE passes. Drop the
now-unused DeprecatedMethod baseline entry for ModelManager, whose
isInstalled() call went away when generateLinkToCircle() switched to the
in-app route.

Assisted-by: ClaudeCode:claude-fable-5
Signed-off-by: Marco Ambrosini <marco.ambrosini@nextcloud.com>
Assisted-by: ClaudeCode:claude-fable-5
Signed-off-by: Marco Ambrosini <marco.ambrosini@nextcloud.com>
@marcoambrosini
marcoambrosini merged commit a6c1779 into master Jul 14, 2026
47 of 49 checks passed
@marcoambrosini
marcoambrosini deleted the feat/teams-spa branch July 14, 2026 03:35
@github-project-automation github-project-automation Bot moved this from 🏗️ At engineering to 🎉 Done in 🖍 Design team Jul 14, 2026
@jancborchardt jancborchardt moved this to Done in 👥 Teams Jul 15, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

Status: Done
Status: 🎉 Done

Development

Successfully merging this pull request may close these issues.

Own frontend and app icon for TeamPage

6 participants