Skip to content

Commit 68a751c

Browse files
authored
Merge pull request #58 from microsoftgraph/teams
Implemented Teams snippets
2 parents f000670 + 1a94f8a commit 68a751c

14 files changed

+917
-0
lines changed

SnippetsApp/Controllers/TeamsController.cs

Lines changed: 514 additions & 0 deletions
Large diffs are not rendered by default.
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
// Copyright (c) Microsoft Corporation. All rights reserved.
2+
// Licensed under the MIT license.
3+
4+
using Microsoft.Graph;
5+
using System.Collections.Generic;
6+
7+
namespace SnippetsApp.Models
8+
{
9+
// The view model for the team display page
10+
public class TeamDisplayModel
11+
{
12+
// The team
13+
public Team Team { get; set; }
14+
15+
// List of channels
16+
public IList<Channel> Channels { get; set; }
17+
18+
// List of installed apps
19+
public IList<TeamsAppInstallation> InstalledApps { get; set; }
20+
}
21+
}
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
// Copyright (c) Microsoft Corporation. All rights reserved.
2+
// Licensed under the MIT license.
3+
4+
namespace SnippetsApp.Models
5+
{
6+
// The view model for post a message to channel page
7+
public class TeamMessageDisplayModel
8+
{
9+
// The channel ID for this message
10+
public string ChannelId { get; set; }
11+
12+
// The team ID for this message
13+
public string TeamId { get; set; }
14+
15+
// The message content
16+
public string Message { get; set; }
17+
}
18+
}
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
// Copyright (c) Microsoft Corporation. All rights reserved.
2+
// Licensed under the MIT license.
3+
4+
using Microsoft.Graph;
5+
using System.Collections.Generic;
6+
7+
namespace SnippetsApp.Models
8+
{
9+
// The view model for the teams list pages
10+
public class TeamsListDisplayModel
11+
{
12+
// List of all teams
13+
public IList<Group> AllTeams { get; set; }
14+
15+
// List of all groups that do not have teams
16+
public IList<Group> AllNonTeamGroups { get; set; }
17+
18+
// List of teams user is a member of
19+
public IList<Team> JoinedTeams { get; set; }
20+
21+
public TeamsListDisplayModel()
22+
{
23+
AllTeams = new List<Group>();
24+
AllNonTeamGroups = new List<Group>();
25+
}
26+
}
27+
}

SnippetsApp/Views/Shared/_Layout.cshtml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,9 @@
4646
<li class="@(controller == "Groups" ? "nav-item active" : "nav-item")">
4747
<a class="nav-link" asp-controller="Groups" asp-action="List">Groups</a>
4848
</li>
49+
<li class="@(controller == "Teams" ? "nav-item active" : "nav-item")">
50+
<a class="nav-link" asp-controller="Teams" asp-action="Index">Teams</a>
51+
</li>
4952
}
5053
<li class="@(controller == "Mail" ? "nav-item active" : "nav-item")">
5154
<a class="nav-link" asp-controller="Mail" asp-action="Index">Mail</a>

SnippetsApp/Views/Teams/Create.cshtml

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
<!-- Copyright (c) Microsoft Corporation. All rights reserved.
2+
Licensed under the MIT License. -->
3+
4+
@{
5+
ViewData["Title"] = "Create new group and team";
6+
}
7+
8+
<h1>Create new group and team</h1>
9+
<form asp-action="Create">
10+
<div class="form-group">
11+
<label for="teamName">Team name</label>
12+
<input type="text" class="form-control" name="teamName" id="teamName" required>
13+
</div>
14+
<div class="form-group">
15+
<label for="teamDescription">Description</label>
16+
<input type="text" class="form-control" name="teamDescription" id="teamDescription">
17+
</div>
18+
<div class="form-group">
19+
<label for="teamMailNickname">Mail nickname</label>
20+
<input type="text" class="form-control" name="teamMailNickname" id="teamMailNickname" required>
21+
</div>
22+
<input type="submit" class="btn btn-primary" value="Create">
23+
<a asp-action="List" class="btn btn-secondary">Cancel</a>
24+
</form>
Lines changed: 150 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,150 @@
1+
<!-- Copyright (c) Microsoft Corporation. All rights reserved.
2+
Licensed under the MIT License. -->
3+
4+
@model TeamDisplayModel
5+
6+
@using Microsoft.Graph
7+
8+
@{
9+
ViewData["Title"] = Model.Team.AdditionalData["displayName"];
10+
ViewData["teamId"] = Model.Team.Id;
11+
ViewData["teamArchived"] = Model.Team.IsArchived.Value;
12+
var archiveButtonLabel = Model.Team.IsArchived.Value ? "Unarchive" : "Archive";
13+
}
14+
15+
<div class="card mb-4" id="team-card">
16+
<div class="card-body">
17+
<h1 class="card-title">@Model.Team.AdditionalData["displayName"]</h1>
18+
<form asp-action="ArchiveTeam" class="mb-3" onsubmit="return confirm('Are you sure you want @archiveButtonLabel.ToLower() this team?');">
19+
<input type="hidden" name="teamId" value="@Model.Team.Id">
20+
<input type="hidden" name="archiveAction" value="@archiveButtonLabel">
21+
<input type="submit" class="btn btn-primary" value="@archiveButtonLabel">
22+
</form>
23+
<ul class="nav nav-tabs mb-2" id="team-tab" role="tablist">
24+
<li class="nav-item" role="presentation">
25+
<a class="nav-link active" id="channel-list" data-toggle="tab" href="#channels" role="tab">Channels</a>
26+
</li>
27+
<li class="nav-item" role="presentation">
28+
<a class="nav-link" id="team-settings" data-toggle="tab" href="#settings" role="tab">Settings</a>
29+
</li>
30+
<li class="nav-item" role="presentation">
31+
<a class="nav-link" id="installed-apps" data-toggle="tab" href="#apps" role="tab">Apps</a>
32+
</li>
33+
</ul>
34+
<div class="tab-content" id="team-tab-content">
35+
<div class="tab-pane fade show active" id="channels" role="tabpanel">
36+
<form class="form-inline mt-3 mb-3" asp-action="CreateChannel">
37+
<input type="hidden" name="teamId" value="@Model.Team.Id">
38+
<label class="sr-only" for="channelName">New channel name</label>
39+
<input type="text" class="form-control mb-2 mr-2" name="channelName" id="channelName" placeholder="New channel name" required>
40+
<label class="sr-only" for="channelDescription">New channel description</label>
41+
<input type="text" class="form-control mb-2 mr-2" name="channelDescription" id="channelDescription" placeholder="New channel description">
42+
<input type="submit" class="btn btn-sm btn-primary mb-2" value="Create new channel" disabled="@Model.Team.IsArchived.Value">
43+
</form>
44+
<partial name="_ChannelListPartial" for="Channels" view-data="ViewData">
45+
</div>
46+
<div class="tab-pane fade" id="settings" role="tabpanel">
47+
<div class="card">
48+
<div class="card-body">
49+
<form asp-action="UpdateSettings">
50+
<input type="hidden" name="Id" value="@Model.Team.Id">
51+
<h5 class="mb-3">Messaging settings</h5>
52+
<div class="form-check">
53+
<input class="form-check-input" type="checkbox" name="MessagingSettings.AllowChannelMentions" checked="@Model.Team.MessagingSettings.AllowChannelMentions.Value" value="true">
54+
<label class="form-check-label">Allow channel mentions</label>
55+
<input type="hidden" name="MessagingSettings.AllowChannelMentions" value="false">
56+
</div>
57+
<div class="form-check">
58+
<input class="form-check-input" type="checkbox" name="MessagingSettings.AllowTeamMentions" checked="@Model.Team.MessagingSettings.AllowTeamMentions.Value" value="true">
59+
<label class="form-check-label">Allow team mentions</label>
60+
<input type="hidden" name="MessagingSettings.AllowTeamMentions" value="false">
61+
</div>
62+
<div class="form-check">
63+
<input class="form-check-input" type="checkbox" name="MessagingSettings.AllowOwnerDeleteMessages" checked="@Model.Team.MessagingSettings.AllowOwnerDeleteMessages.Value" value="true">
64+
<label class="form-check-label">Allow owner to delete messages</label>
65+
<input type="hidden" name="MessagingSettings.AllowOwnerDeleteMessages" value="false">
66+
</div>
67+
<div class="form-check">
68+
<input class="form-check-input" type="checkbox" name="MessagingSettings.AllowUserDeleteMessages" checked="@Model.Team.MessagingSettings.AllowUserDeleteMessages.Value" value="true">
69+
<label class="form-check-label">Allow users to delete messages</label>
70+
<input type="hidden" name="MessagingSettings.AllowUserDeleteMessages" value="false">
71+
</div>
72+
<div class="form-check">
73+
<input class="form-check-input" type="checkbox" name="MessagingSettings.AllowUserEditMessages" checked="@Model.Team.MessagingSettings.AllowUserEditMessages.Value" value="true">
74+
<label class="form-check-label">Allow users to edit</label>
75+
<input type="hidden" name="MessagingSettings.AllowUserEditMessages" value="false">
76+
</div>
77+
<hr/>
78+
<h5 class="mb-3">Member settings</h5>
79+
<div class="form-check">
80+
<input class="form-check-input" type="checkbox" name="MemberSettings.AllowCreateUpdateChannels" checked="@Model.Team.MemberSettings.AllowCreateUpdateChannels.Value" value="true">
81+
<label class="form-check-label">Allow members to create and update channels</label>
82+
<input type="hidden" name="MemberSettings.AllowCreateUpdateChannels" value="false">
83+
</div>
84+
<div class="form-check">
85+
<input class="form-check-input" type="checkbox" name="MemberSettings.AllowDeleteChannels" checked="@Model.Team.MemberSettings.AllowDeleteChannels.Value" value="true">
86+
<label class="form-check-label">Allow members to delete channels</label>
87+
<input type="hidden" name="MemberSettings.AllowDeleteChannels" value="false">
88+
</div>
89+
<div class="form-check">
90+
<input class="form-check-input" type="checkbox" name="MemberSettings.AllowCreateUpdateRemoveTabs" checked="@Model.Team.MemberSettings.AllowCreateUpdateRemoveTabs.Value" value="true">
91+
<label class="form-check-label">Allow members to create, udpate, and remove tabs</label>
92+
<input type="hidden" name="MemberSettings.AllowCreateUpdateRemoveTabs" value="false">
93+
</div>
94+
<div class="form-check">
95+
<input class="form-check-input" type="checkbox" name="MemberSettings.AllowAddRemoveApps" checked="@Model.Team.MemberSettings.AllowAddRemoveApps.Value" value="true">
96+
<label class="form-check-label">Allow members to add and remove apps</label>
97+
<input type="hidden" name="MemberSettings.AllowAddRemoveApps" value="false">
98+
</div>
99+
<div class="form-check">
100+
<input class="form-check-input" type="checkbox" name="MemberSettings.AllowCreateUpdateRemoveConnectors" checked="@Model.Team.MemberSettings.AllowCreateUpdateRemoveConnectors.Value" value="true">
101+
<label class="form-check-label">Allow members to create, update, and remove connectors</label>
102+
<input type="hidden" name="MemberSettings.AllowCreateUpdateRemoveConnectors" value="false">
103+
</div>
104+
<hr/>
105+
<h5 class="mb-3">Guest settings</h5>
106+
<div class="form-check">
107+
<input class="form-check-input" type="checkbox" name="GuestSettings.AllowCreateUpdateChannels" checked="@Model.Team.GuestSettings.AllowCreateUpdateChannels.Value" value="true">
108+
<label class="form-check-label">Allow guests to create and update channels</label>
109+
<input type="hidden" name="GuestSettings.AllowCreateUpdateChannels" value="false">
110+
</div>
111+
<div class="form-check">
112+
<input class="form-check-input" type="checkbox" name="GuestSettings.AllowDeleteChannels" checked="@Model.Team.GuestSettings.AllowDeleteChannels.Value" value="true">
113+
<label class="form-check-label">Allow guests to delete channels</label>
114+
<input type="hidden" name="GuestSettings.AllowDeleteChannels" value="false">
115+
</div>
116+
<hr/>
117+
<h5 class="mb-3">Fun settings</h5>
118+
<div class="form-check">
119+
<input class="form-check-input" type="checkbox" name="FunSettings.AllowGiphy" checked="@Model.Team.FunSettings.AllowGiphy.Value" value="true">
120+
<label class="form-check-label">Allow Giphy</label>
121+
<input type="hidden" name="FunSettings.AllowGiphy" value="false">
122+
</div>
123+
<div class="form-group">
124+
<label>Giphy content rating</label>
125+
<select name="FunSettings.GiphyContentRating" class="form-control">
126+
<option value="strict" selected="@Model.Team.FunSettings.GiphyContentRating.Value.Equals(GiphyRatingType.Strict)">Strict</option>
127+
<option value="moderate" selected="@Model.Team.FunSettings.GiphyContentRating.Value.Equals(GiphyRatingType.Moderate)">Moderate</option>
128+
</select>
129+
</div>
130+
<div class="form-check">
131+
<input class="form-check-input" type="checkbox" name="FunSettings.AllowStickersAndMemes" checked="@Model.Team.FunSettings.AllowStickersAndMemes.Value" value="true">
132+
<label class="form-check-label">Allow stickers and memes</label>
133+
<input type="hidden" name="FunSettings.AllowStickersAndMemes" value="false">
134+
</div>
135+
<div class="form-check">
136+
<input class="form-check-input" type="checkbox" name="FunSettings.AllowCustomMemes" checked="@Model.Team.FunSettings.AllowCustomMemes.Value" value="true">
137+
<label class="form-check-label">Allow custom memes</label>
138+
<input type="hidden" name="FunSettings.AllowCustomMemes" value="false">
139+
</div>
140+
<input type="submit" class="btn btn-primary mt-3" value="Update" disabled="@Model.Team.IsArchived.Value">
141+
</form>
142+
</div>
143+
</div>
144+
</div>
145+
<div class="tab-pane fade" id="apps" role="tabpanel">
146+
<partial name="_AppListPartial" for="InstalledApps" view-data="ViewData">
147+
</div>
148+
</div>
149+
</div>
150+
</div>

SnippetsApp/Views/Teams/List.cshtml

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
<!-- Copyright (c) Microsoft Corporation. All rights reserved.
2+
Licensed under the MIT License. -->
3+
4+
@model TeamsListDisplayModel
5+
6+
@{
7+
ViewData["Title"] = "List teams";
8+
}
9+
10+
<div class="row">
11+
<div class="col-auto mr-auto">
12+
<ul class="nav nav-tabs mb-2" id="teams-tab" role="tablist">
13+
<li class="nav-item" role="presentation">
14+
<a class="nav-link active" id="all-teams" data-toggle="tab" href="#allteams" role="tab">All teams</a>
15+
</li>
16+
<li class="nav-item" role="presentation">
17+
<a class="nav-link" id="all-groups" data-toggle="tab" href="#allgroups" role="tab">Groups without teams</a>
18+
</li>
19+
<li class="nav-item" role="presentation">
20+
<a class="nav-link" id="joined-teams" data-toggle="tab" href="#joinedteams" role="tab">My joined teams</a>
21+
</li>
22+
</ul>
23+
</div>
24+
<div class="col-auto">
25+
<a class="btn btn-light mb-2 float-right" asp-action="Create">Create new group and team</a>
26+
</div>
27+
</div>
28+
29+
<div class="tab-content" id="teams-tab-content">
30+
<div class="tab-pane fade show active" id="allteams" role="tabpanel">
31+
<partial name="_TeamGroupListPartial" for="AllTeams">
32+
</div>
33+
<div class="tab-pane fade" id="allgroups" role="tabpanel">
34+
<partial name="_NonTeamGroupListPartial" for="AllNonTeamGroups">
35+
</div>
36+
<div class="tab-pane fade" id="joinedteams" role="tabpanel">
37+
<partial name="_TeamListPartial" for="JoinedTeams">
38+
</div>
39+
</div>
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
<!-- Copyright (c) Microsoft Corporation. All rights reserved.
2+
Licensed under the MIT License. -->
3+
4+
@model TeamMessageDisplayModel
5+
6+
@{
7+
ViewData["Title"] = "New message";
8+
}
9+
10+
<h1>Post message to channel</h1>
11+
<form asp-action="PostMessageToChannel">
12+
<input type="hidden" name="channelId" value="@Model.ChannelId">
13+
<input type="hidden" name="teamId" value="@Model.TeamId">
14+
<textarea class="form-control mb-3" name="Message" rows=4></textarea>
15+
<input type="submit" class="btn btn-primary" value="Post message">
16+
<a asp-action="Display" asp-route-teamId="@Model.TeamId" class="btn btn-secondary">Cancel</a>
17+
</form>
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
<!-- Copyright (c) Microsoft Corporation. All rights reserved.
2+
Licensed under the MIT License. -->
3+
4+
@model IEnumerable<TeamsAppInstallation>
5+
6+
@using Microsoft.Graph
7+
8+
<div class="list-group">
9+
@foreach (var app in Model)
10+
{
11+
<div class="list-group-item">
12+
<div class="d-flex">
13+
<div class="flex-grow-1">
14+
<span class="align-middle">@app.TeamsAppDefinition.DisplayName</span>
15+
<span class="align-middle">@app.TeamsAppDefinition.Version</span>
16+
</div>
17+
<form asp-action="DeleteApp">
18+
<input type="hidden" name="teamId" value="@ViewData["teamId"]">
19+
<input type="hidden" name="appId" value="@app.Id">
20+
<input type="submit" class="btn btn-sm btn-primary" value="Uninstall">
21+
</form>
22+
</div>
23+
</div>
24+
}
25+
</div>
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
<!-- Copyright (c) Microsoft Corporation. All rights reserved.
2+
Licensed under the MIT License. -->
3+
4+
@model IEnumerable<Channel>
5+
6+
@using Microsoft.Graph
7+
8+
@{
9+
var teamArchived = ViewData["teamArchived"] as bool?;
10+
}
11+
12+
<div class="list-group">
13+
@foreach (var channel in Model)
14+
{
15+
<div class="list-group-item">
16+
<div class="d-flex">
17+
<div class="flex-grow-1">
18+
<span class="align-middle">@channel.DisplayName</span>
19+
</div>
20+
@if (!teamArchived.Value)
21+
{
22+
<a class="btn btn-sm btn-primary"
23+
asp-action="PostMessageToChannel"
24+
asp-route-channelId="@channel.Id"
25+
asp-route-teamId="@ViewData["teamId"]">Post message</a>
26+
}
27+
</div>
28+
</div>
29+
}
30+
</div>
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
<!-- Copyright (c) Microsoft Corporation. All rights reserved.
2+
Licensed under the MIT License. -->
3+
4+
@using Microsoft.Graph
5+
6+
@model IEnumerable<Group>
7+
8+
<div class="list-group">
9+
@foreach (var group in Model)
10+
{
11+
<div class="list-group-item">
12+
<div class="d-flex">
13+
<div class="flex-grow-1">
14+
<span class="align-middle">@group.DisplayName</span>
15+
</div>
16+
<form asp-action="AddTeamToGroup" onsubmit="return confirm('Are you sure you want to add a Team to @group.DisplayName?');">
17+
<input type="hidden" name="groupId" value="@group.Id">
18+
<input type="submit" value="Add Team" class="btn btn-secondary btn-sm">
19+
</form>
20+
</div>
21+
</div>
22+
}
23+
</div>

0 commit comments

Comments
 (0)