feat(teams): in-app Teams page#2561
Conversation
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>
Raise the max-version to 35. Signed-off-by: Marco Ambrosini <marco.ambrosini@nextcloud.com>
Signed-off-by: Marco Ambrosini <marco.ambrosini@nextcloud.com>
|
So no longer part of contacts app? Will simplify things :) |
jancborchardt
left a comment
There was a problem hiding this comment.
Really really nice! :) Great first step in the right direction, and keeping it simple & contained by just porting over what we have.
|
Small details but no blocker @marcoambrosini :
|
|
@susnux could you have a look at the front-end tooling and wiring and tell me if it's sane? |
@jancborchardt then I would do it same as talk here, with the new button inline |
There was a problem hiding this comment.
This should use Route annotation instead of legacy routes.php - routes.php is only for legacy routes as this is a new file it directly should use the annotations
| </RouterLink> | ||
| </template> | ||
|
|
||
| <style scoped lang="scss"> |
There was a problem hiding this comment.
I would use style module for new files as this is the only option to 2-way scope styles properly and not leak.
| </ul> | ||
| </template> | ||
|
|
||
| <script> |
There was a problem hiding this comment.
This should use script setup lang="ts" as all other new files.
| </template> | ||
|
|
||
| <script> | ||
| // @ts-nocheck |
| import { | ||
| NcCheckboxRadioSwitch as CheckboxRadioSwitch, | ||
| NcButton, | ||
| } from '@nextcloud/vue' |
There was a problem hiding this comment.
You should not import component from main entry point
| import { | |
| NcCheckboxRadioSwitch as CheckboxRadioSwitch, | |
| NcButton, | |
| } from '@nextcloud/vue' | |
| import NcCheckboxRadioSwitch from '@nextcloud/vue/components/NcCheckboxRadioSwitch' | |
| import NcButton from '@nextcloud/vue/components/NcButton' |
| <script lang="ts"> | ||
| // @ts-nocheck |
There was a problem hiding this comment.
Same here new files should directly use script setup lang="ts"
| <template #icon> | ||
| <IconDelete :size="20" /> | ||
| </template> | ||
| {{ t('contacts', 'Delete team') }} |
There was a problem hiding this comment.
wrong app used here and in other places
Teams app front-end first step: mostly moved the functionality from contacts and added an overview page.

