diff --git a/Images/APIAccess.png b/Images/APIAccess.png
index 36c3215d..603f0144 100644
Binary files a/Images/APIAccess.png and b/Images/APIAccess.png differ
diff --git a/Images/AddTab_ChampionAdd.png b/Images/AddTab_ChampionAdd.png
index e8815df6..df60e856 100644
Binary files a/Images/AddTab_ChampionAdd.png and b/Images/AddTab_ChampionAdd.png differ
diff --git a/Images/AddTab_Teams.png b/Images/AddTab_Teams.png
index 03c54acb..8378695b 100644
Binary files a/Images/AddTab_Teams.png and b/Images/AddTab_Teams.png differ
diff --git a/Images/AppLoading.png b/Images/AppLoading.png
new file mode 100644
index 00000000..cee0eea0
Binary files /dev/null and b/Images/AppLoading.png differ
diff --git a/Images/AppRefresh.png b/Images/AppRefresh.png
new file mode 100644
index 00000000..ede0856e
Binary files /dev/null and b/Images/AppRefresh.png differ
diff --git a/Images/ManageAppLogo.png b/Images/ManageAppLogo.png
new file mode 100644
index 00000000..b065862a
Binary files /dev/null and b/Images/ManageAppLogo.png differ
diff --git a/Images/ManageTournament.png b/Images/ManageTournament.png
index 6c954af4..f5541bf2 100644
Binary files a/Images/ManageTournament.png and b/Images/ManageTournament.png differ
diff --git a/Images/MultipleBadges.png b/Images/MultipleBadges.png
index 9c2aefcf..220d3a28 100644
Binary files a/Images/MultipleBadges.png and b/Images/MultipleBadges.png differ
diff --git a/Images/MyDashboard.png b/Images/MyDashboard.png
index 87a8155b..2fe389eb 100644
Binary files a/Images/MyDashboard.png and b/Images/MyDashboard.png differ
diff --git a/Images/SuccessMessage.png b/Images/SuccessMessage.png
new file mode 100644
index 00000000..78f6d8a1
Binary files /dev/null and b/Images/SuccessMessage.png differ
diff --git a/Images/SyncToTeams.png b/Images/SyncToTeams.png
index 0b51d488..32740488 100644
Binary files a/Images/SyncToTeams.png and b/Images/SyncToTeams.png differ
diff --git a/Images/TOTHome.png b/Images/TOTHome.png
index a2dc1f34..8ebd3408 100644
Binary files a/Images/TOTHome.png and b/Images/TOTHome.png differ
diff --git a/Images/TOTLeaderBoard.png b/Images/TOTLeaderBoard.png
index 9302d0b7..f7f919eb 100644
Binary files a/Images/TOTLeaderBoard.png and b/Images/TOTLeaderBoard.png differ
diff --git a/Images/Upgrade-1.png b/Images/Upgrade-1.png
new file mode 100644
index 00000000..42bfbc21
Binary files /dev/null and b/Images/Upgrade-1.png differ
diff --git a/Images/Upgrade-2.png b/Images/Upgrade-2.png
new file mode 100644
index 00000000..6e15a1d7
Binary files /dev/null and b/Images/Upgrade-2.png differ
diff --git a/Images/Upgrade-3.png b/Images/Upgrade-3.png
new file mode 100644
index 00000000..ca8cacaa
Binary files /dev/null and b/Images/Upgrade-3.png differ
diff --git a/Images/Upgrade-4.png b/Images/Upgrade-4.png
new file mode 100644
index 00000000..eeff86f1
Binary files /dev/null and b/Images/Upgrade-4.png differ
diff --git a/Images/Upgrade2.0-1.png b/Images/Upgrade2.0-1.png
deleted file mode 100644
index 015f64dc..00000000
Binary files a/Images/Upgrade2.0-1.png and /dev/null differ
diff --git a/Images/Upgrade2.0-2.png b/Images/Upgrade2.0-2.png
deleted file mode 100644
index cf276e06..00000000
Binary files a/Images/Upgrade2.0-2.png and /dev/null differ
diff --git a/Images/Upgrade2.0-4.png b/Images/Upgrade2.0-4.png
deleted file mode 100644
index 90b08d1c..00000000
Binary files a/Images/Upgrade2.0-4.png and /dev/null differ
diff --git a/Wiki/Deployment-Guide.md b/Wiki/Deployment-Guide.md
index dd559953..cb3579c3 100644
--- a/Wiki/Deployment-Guide.md
+++ b/Wiki/Deployment-Guide.md
@@ -69,6 +69,8 @@ Continuing below steps you can take the cmp.sppkg file from the ***cmp.sppkg***
### Deploy your Package to SharePoint
+IMPORTANT NOTE: If you have just created a new tenant please wait for around 15 minutes before starting with the below steps.
+
1. Open SharePoint and sign in using the administrator account. Click on the "dots" icon in the top left corner of the banner.
@@ -119,7 +121,7 @@ Continuing below steps you can take the cmp.sppkg file from the ***cmp.sppkg***
10. A confirmation dialog is displayed. Ensure the checkbox for "Make this solution available to all sites in the organization" is chosen and click ***Deploy***.
-![Quick Start Guide](../Images/Upgrade2.0-2.png)
+![Quick Start Guide](../Images/Upgrade-2.png)
11. Return to the ***SharePoint admin center***. Under expand the ***Advanced*** menu in the left navigation and select ***API access***. Select and approve all pending requests associated with ***championmanagement***
@@ -128,11 +130,14 @@ Continuing below steps you can take the cmp.sppkg file from the ***cmp.sppkg***
12. Return to app list in the App Catalog and select the ***championmanagement*** app. Select the Files tab in the ribbon and click the ***Sync to Teams*** button.
+
![Quick Start Guide](../Images/SyncToTeams.png)
-### First Run Experience:Add ***Champion Management Platform*** Tab in Teams
+### First Run Experience:Add ***Champion Management Platform*** Tab in Teamst
+
+IMPORTANT NOTE: Please wait for around 20 minutes for API access approvals done in the previous section to take effect before proceeding with the below steps.
1. Navigate to Microsoft teams, select the Team and channel where you want to install Champion Management Platform. Click ***Add a tab***, choose ***Champion Management Platform*** from the app list, and Save. (Search for Champion)
@@ -146,11 +151,21 @@ This first run experience needs to be completed by the person who will be an adm
![Quick Start Guide](../Images/AddTab_ChampionAdd.png)
2. Click 'Add' to create the ***'Champion Management Platform'*** tab to your Teams (Alternately you can also just load the app as a personal app in the left rail here too).
-3. The landing page for an Admin will have access to the *Champion Leaderboard, Digital Badge, Enable Tournament of Teams* and the SharePoint lists (*Champions, Events,Event track Details, Digital Badges*), as well as Manage Approvals.
+3. After clicking on 'Add', the app set up will start and you will see a spinner as shown below. The set up may take around 1-2 minutes.
+![App Set Up](../Images/AppLoading.png)
+4. After the set up is complete a success message is shown as below. The below snapshot is from Teams in browser. The same message would look different in Teams client.
+
+![App Set Up](../Images/SuccessMessage.png)
+5. On clicking 'OK' the landing page is displayed.
+![App Set Up](../Images/AddTab_Teams.png)
+6. If you still see the spinner message and do not see the success message even after 2 minutes or if you see any error alerts, try clicking on refresh icon on top right. If you see the landing page with all the icons shown in the above picture the app set up is complete.
+![App Set Up](../Images/Apprefresh.png)
+If you still do not see the landing page after refresh please create an issue in the Github.
+7. The landing page for an Admin will have access to the *Champion Leaderboard, Digital Badge, Enable Tournament of Teams* and the SharePoint lists (*Champions, Events,Event track Details, Digital Badges*), as well as Manage Approvals.
![Quick Start Guide](../Images/AddTab_Teams.png)
-4. Grant Permissions to users:
+8. Grant Permissions to users:
· Navigate to the URL for the Champion Management Platform site as the administrator.
diff --git a/Wiki/Release-Notes.md b/Wiki/Release-Notes.md
index d2c3aff5..5be6dae9 100644
--- a/Wiki/Release-Notes.md
+++ b/Wiki/Release-Notes.md
@@ -3,6 +3,7 @@ This page contains the different release details for Champion Management Platfor
## Version history
| Version | Release Date |
|----|----|
+| 2.1 | Apr 4, 2022 |
| 2.0 | Dec 9, 2021 |
| 1.3 | Sep 03, 2021 |
| 1.2 | Jul 22, 2021 |
@@ -10,6 +11,18 @@ This page contains the different release details for Champion Management Platfor
## Release notes
+### 2.1 (Apr 4, 2022)
+
+Below improvements released,
+
+- Bug Fix: Addressed an issue with tournament ranks/points not getting updated correctly for some customers within the Tournament of Teams leaderboard.
+- New Feature: Multi-Tournament support within the Tournament of Teams module. Organizations can now have multiple tournaments occurring at one time
+- New Feature: Introduced image preview feature for the Digital Badge module. Users can now preview their profile pictures with different badges available to them before applying it.
+- New Feature: Implemented the Digital Badge feature native to Tournament of Teams. Users can now use the Digital Badge feature without being added as a member of the Champion Management Platform.
+- New Feature: Implemented an ability that allows admins to update the logo of the Champion Management Platform that sits in the top application bar. Admins will now see a new icon "Manage App Logo" under the "Admin" section in the home page of the App. Upon replacing the image in the SharePoint library, the new app logo will be shown.
+- New Feature: Implemented multilingual support for the application. English support at the moment
+- Other Changes: Minor UI fixes.
+
### 2.0 (Dec 9, 2021)
Below improvements released,
diff --git a/Wiki/Solution-Overview.md b/Wiki/Solution-Overview.md
index 8bc8353f..d07c1c9f 100644
--- a/Wiki/Solution-Overview.md
+++ b/Wiki/Solution-Overview.md
@@ -57,13 +57,21 @@ Admin and current Champions of the program can nominate(***Add Members***) peers
The Admin can approve/Reject the champion nominations using Manage Approvals screen.
+### Manage App Logo
+![ManageAppLogo](../Images/ManageAppLogo.png)
+"Manage App Logo" option can be found under "Admin Tools" section on home page. Clicking on this icon opens the "CMP Logo" SharePoint library. New image can be uploaded to the library to replace the App logo. The new image needs to have below specifications:
+
+Name: AppLogo.jpg
+Type: JPG
+Dimensions: 32 X 32
+
### Digital Badge ![Champion logo](../Images/Champion_small.png)
Digital Badge is intended to allow Microsoft 365 Champions to apply a ‘Champion’ badge on their profile image. It provides an easy and seamless process to share the recognition as a champion with the team.
![Quick Start Guide](../Images/Digitalbadge.png)
-CMP administrators can upload multiple badges in the “Digital Badge Assets” library in the share point site. Champions can select from multiple badges and apply on their profile picture.
+CMP administrators can upload multiple badges in the “Digital Badge Assets” library in the share point site. Champions can select from multiple badges, preview the profile picture and apply on their profile picture.
![Quick Start Guide](../Images/MultipleBadges.png)
diff --git a/Wiki/Tournament-of-Teams.md b/Wiki/Tournament-of-Teams.md
index c63c88cd..eac9563c 100644
--- a/Wiki/Tournament-of-Teams.md
+++ b/Wiki/Tournament-of-Teams.md
@@ -6,7 +6,13 @@ Tournament of Teams is not enabled by default. CMP admin needs to enable it from
On enabling “Tournament of Teams”:
-1. The lists are provisioned in the CMP share point site
+1. Below lists are provisioned in the CMP share point site:
+
+> * Actions List
+> * ToT Admins
+> * Tournament Actions
+> * Tournaments
+> * User Actions
2. “Tournament of Teams” link is visible under “Quick Start Guide” section of CMP home page. This link navigates the users to “Tournament of Teams” landing page.
@@ -35,19 +41,24 @@ Below are the master lists in Share Point that need to be managed by the TOT Adm
![Quick Start Guide](../Images/CreateTournament.png)
-### Start/End Tournament
+### Manage Tournaments
+
+ - A tournament can be started or ended by an admin using “Manage Tournaments” screen.
- - A tournament can be started or ended by an admin using “Start/End Tournament” screen.
+ - Multiple tournaments can be can be active at a time.
- - Only one tournament can be active at a time. To start a new tournament the active tournament must be ended.
![Quick Start Guide](../Images/ManageTournament.png)
### My Dashboard
-- Champions can start participating in the active tournament using “My Dashboard”.
+- Champions can start participating in any of the active tournaments using “My Dashboard”.
+
+- Champions can select the tournament from either "My Tournaments" or "Active Tournaments" dropdown list. If a user has participated in any of the active tournaments already they will be listed under "My Tournaments" list. All the other active tournaments will be listed under "Active Tournaments" list.
-- “My Dashboard” shows the Teams Actions available in the current active tournament. The champions can select the completed actions and save to earn points and a rank in that tournament which is displayed on the left side section of the page.
+- “My Dashboard” will show the Teams Actions available in the selected tournament. The champions can select the completed actions and save to earn points and a rank in that tournament which is displayed on the left side section of the page.
+
+- By default, the first tournament in the "My Tournaments" will be selected. If the user has not participated in any of the tournaments yet, first tournament in the "Active Tournaments" will be selected.
- The users must complete at least one action to be considered as a participant in that tournament. The ranks are calculated only among the participants.
@@ -55,6 +66,8 @@ Below are the master lists in Share Point that need to be managed by the TOT Adm
### Leaderboard
-Leader board is available to everyone. It shows the list of all participants in the current active tournament along with their points and ranks.
+- Leader board is available to everyone. It shows the list of all participants in the selected active tournament along with their points and ranks.
+- By default, the first tournament in the "My Tournaments" will be selected. If the user has not participated in any of the tournaments yet, first tournament in the "Active Tournaments" will be selected.
+
![Quick Start Guide](../Images/TOTLeaderBoard.png)
\ No newline at end of file
diff --git a/Wiki/Upgrade.md b/Wiki/Upgrade.md
index bded7c18..3a515dc7 100644
--- a/Wiki/Upgrade.md
+++ b/Wiki/Upgrade.md
@@ -1,33 +1,37 @@
-### Upgrade to version 2.0 from 1.3 and 1.2
+### Upgrade to version 2.1 from 2.0, 1.3 and 1.2
-If you are already having version 1.3 or 1.2 installed on your tenant follow the below steps to upgrade to version 2.0:
+If you are already having version 2.0, 1.3 or 1.2 installed on your tenant follow the below steps to upgrade to version 2.1 with an admin account:
-1. Navigate to App Catalog with a tenant Admin account. Do not delete the existing 1.3 or 1.2 package. Upload the new package that is downloaded from "sharepoint/solution" folder which will replace the existing package.
+1. Navigate to App Catalog with a tenant Admin account. Do not delete the existing package. Upload the new package that is downloaded from "sharepoint/solution" folder which will replace the existing package.
-![Upgrade 1.3](../Images/Upgrade2.0-1.png)
+![Upgrade 1.3](../Images/Upgrade-1.png)
2. Click on "Deploy".
-![Upgrade 1.3](../Images/Upgrade2.0-2.png)
+![Upgrade 1.3](../Images/Upgrade-2.png)
3. "Check In" the package.
![Upgrade 1.3](../Images/Upgrade2.0-3.png)
-4. Select the package and click "Sync to Teams" from the ribbon and wait for the "Successfully synced to teams solution" message to appear
+4. Select the package and click "Sync to Teams" from the ribbon and wait for the "Successfully synced to teams solution" message to appear.
-![Upgrade 1.3](../Images/SyncToTeams.png)
+![SyncToTeams](../Images/SyncToTeams.png)
-5. Navigate to SharePoint admin center. Under Advanced menu in the left navigation select API access. Select and approve the additional pending request associated with championmanagement as shown below.
-After approving the permission, it would take some time for it to take effect.
+5. The Champion Management Platform will be updated to the latest version and you will see changes reflected in Teams. Please note that if you do not see changes reflected in Teams after 30 minutes you can log out and back in and clear the Teams cache to see changes immediately.
-![Upgrade 1.3](../Images/Upgrade2.0-4.png)
+6. If you already had "Tournament of Teams" enabled before the upgrade, click on "Enable Tournament of Teams" under "Admin Tools" section again. This is to upgrade the Tournament of Teams module which includes the bug fix for inaccurate tournament rankings and points. "Tournament of Teams" icon will not be visible in the "Get Started" section without this step.
+NOTE: If there is any active tournament before the upgrade the leader board will show emails instead of User Display Names after the upgrade. This will not happen for new users or new tournaments.
-6. The Champion Management Platform will be updated to the latest version and you will see changes reflected in Teams. Please note that if you do not see changes reflected in Teams after 30 minutes you can log out and back in and clear the Teams cache to see changes immediately.
+![Upgrade-3](../Images/Upgrade-3.png)
-### Upgrade to version 2.0 from 1.1
+7. The below graph permission can be removed from "API Permissions" in sharePoint admin portal only if this permission is not used in any other apps in your tenant. The upgraded package for CMP is not using this API anymore.
-If you are already having 1.1 installed on your tenant and want to upgrade to 2.0 the existing app and SharePoint site 'ChampionManagementSite' have to be deleted.
+![Upgrade-4](../Images/Upgrade-4.png)
+
+### Upgrade to version 2.1 from 1.1
+
+If you are already having 1.1 installed on your tenant and want to upgrade to 2.1 the existing app and SharePoint site 'ChampionManagementSite' have to be deleted.
If you have current members and events you will want to export those list items and import re-import them into the respective list areas. We have expanded our lists to have some additional data as well so you may need to populate additional fields.
diff --git a/config/package-solution.json b/config/package-solution.json
index dd3cf1a5..2bc97b57 100644
--- a/config/package-solution.json
+++ b/config/package-solution.json
@@ -3,7 +3,7 @@
"solution": {
"name": "championmanagement",
"id": "5099a3ef-113f-4baf-bb6a-a73b1dd286f8",
- "version": "2.0.0.0",
+ "version": "2.1.0.0",
"includeClientSideAssets": true,
"skipFeatureDeployment": true,
"isDomainIsolated": false,"developer": {
@@ -25,12 +25,7 @@
{
"resource": "Microsoft Graph",
"scope": "Sites.Manage.All"
- },
- {
- "resource": "Microsoft Graph",
- "scope": "User.ReadBasic.All"
- }
-
+ }
]
},
diff --git a/gulpfile.js b/gulpfile.js
index 8b326472..2c065bb9 100644
--- a/gulpfile.js
+++ b/gulpfile.js
@@ -18,7 +18,14 @@ build.configureWebpack.mergeConfig({
}
});
+var getTasks = build.rig.getTasks;
+build.rig.getTasks = function () {
+ var result = getTasks.call(build.rig);
+ result.set('serve', result.get('serve-deprecated'));
+
+ return result;
+};
build.initialize(gulp);
build.configureWebpack.mergeConfig({
diff --git a/package.json b/package.json
index f22987c5..1de645d2 100644
--- a/package.json
+++ b/package.json
@@ -41,6 +41,7 @@
"bootstrap": "^4.6.0",
"classnames": "^2.3.1",
"ejs": "^3.1.6",
+ "follow-redirects": "^1.14.7",
"gulp-update": "0.0.2",
"immer": "^9.0.6",
"jquery": "^3.6.0",
@@ -48,8 +49,11 @@
"lodash": "^4.17.20",
"lodash.template": "^4.5.0",
"merge": "^2.1.1",
+ "minimist": "^1.2.6",
"moment": "^2.29.1",
"msteams-ui-components-react": "^0.5.0",
+ "node-fetch": "^2.6.7",
+ "node-forge": "^1.3.0",
"nodemon": "1.12.1",
"office-ui-fabric-react": "6.189.2",
"popper.js": "^1.16.1",
@@ -69,6 +73,7 @@
"rxjs": "^6.6.7",
"typescript": "^4.4.4",
"typestyle": "1.5.1",
+ "url-parse": "^1.5.6",
"webpack": "^1.15.0"
},
"resolutions": {
@@ -84,9 +89,11 @@
"ansi-html": "https://registry.yarnpkg.com/ansi-html-community/-/ansi-html-community-0.0.8.tgz#69fbc4d6ccbe383f9736934ae34c3f8290f1bf41",
"browserslist": "4.16.5",
"css-what": "5.0.1",
- "minimist": "0.2.1",
+ "minimist": "1.2.6",
"ansi-regex": "^5.0.1",
- "json-schema": "^0.4.0"
+ "json-schema": "^0.4.0",
+ "node-fetch": "2.6.7",
+ "node-forge": "^1.3.0"
},
"devDependencies": {
"@microsoft/rush-stack-compiler-2.9": "0.7.16",
diff --git a/sharepoint/solution/cmp.sppkg b/sharepoint/solution/cmp.sppkg
index 89fb3825..11fd6ef6 100644
Binary files a/sharepoint/solution/cmp.sppkg and b/sharepoint/solution/cmp.sppkg differ
diff --git a/src/webparts/clbHome/Common/CommonServices.ts b/src/webparts/clbHome/Common/CommonServices.ts
index 83b8abff..11c053e9 100644
--- a/src/webparts/clbHome/Common/CommonServices.ts
+++ b/src/webparts/clbHome/Common/CommonServices.ts
@@ -44,6 +44,12 @@ export default class CommonServices {
return items;
}
+ //Get list items based on a filter and with specific columns
+ public async getFilteredListItemsWithSpecificColumns(listname: string, columns: string, filter: string): Promise {
+ var items: any[] = [];
+ items = await sp.web.lists.getByTitle(listname).items.select(columns).filter(filter).getAll();
+ return items;
+ }
//Create list item
public async createListItem(listname: string, data: any): Promise {
return sp.web.lists.getByTitle(listname).items.add(data);
@@ -69,17 +75,17 @@ export default class CommonServices {
//execute the batch and add field to default view
batch.execute().then(async () => {
- let addingStatus=[];
+ let addingStatus = [];
for (let i = 0; i < fieldsToCreate.length; i++) {
const parser = new DOMParser();
const xml = parser.parseFromString(fieldsToCreate[i], 'text/xml');
let fieldDisplayName = xml.querySelector('Field').getAttribute('DisplayName');
- let listView= await listContext.views.getByTitle("All Items").fields.add(fieldDisplayName);
+ let listView = await listContext.defaultView.fields.add(fieldDisplayName);
addingStatus.push(listView);
}
- Promise.all(addingStatus).then(() => {
- resolve("Success");
- });
+ Promise.all(addingStatus).then(() => {
+ resolve("Success");
+ });
});
} catch (error) {
console.error("CommonServices_createListFields_FailedToCreatedField \n", error);
@@ -96,7 +102,6 @@ export default class CommonServices {
}
-
//Filter and get all badge imagesfrom 'Digital Badges' library for the current user
public async getAllBadgeImages(listName: string, userEmail: string): Promise {
var badgeImagesArray: any[] = [];
@@ -120,15 +125,22 @@ export default class CommonServices {
//if TOT is enabled get all the badges and filter for completed tournaments
else {
badgeImagesArray = await sp.web.lists.getByTitle(stringsConstants.DigitalBadgeLibrary).items.select("Title", "Tournament/Title", "File/Name").expand("Tournament", "File").get();
+ //Checking if the user is in member list
+ let filterQuery = "Title eq '" + userEmail.toLowerCase() + "'" + " and Status eq 'Approved'";
+ let isApprovedChampion = await this.getItemsWithOnlyFilter(stringsConstants.MemberList, filterQuery);
+
//Loop through badges and filter based on user's tournaments completion status
for (let i = 0; i < badgeImagesArray.length; i++) {
//For global badges do not check for Tournaments completion status
if (badgeImagesArray[i].Tournament == undefined) {
- finalImagesArray.push({
- title: badgeImagesArray[i].Title,
- url: rootSiteURL + "/" + listName + "/" + badgeImagesArray[i].File.Name
- });
+ // Show the global badges only for champion
+ if (isApprovedChampion.length > 0) {
+ finalImagesArray.push({
+ title: badgeImagesArray[i].Title,
+ url: rootSiteURL + "/" + listName + "/" + badgeImagesArray[i].File.Name
+ });
+ }
}
else {
var tournamentCompleted = await this.getTournamentCompletedFlag(badgeImagesArray[i].Tournament.Title, userEmail);
@@ -147,8 +159,8 @@ export default class CommonServices {
//Check if the user has completed the tournament
public async getTournamentCompletedFlag(tournamentName: string, currentUserEmail: string): Promise {
let tournamentCompletedFlag: boolean = false;
-
- tournamentName = tournamentName.replace(/'/g,"''") ;
+
+ tournamentName = tournamentName.replace(/'/g, "''");
//Get total number of actions for the tournament
let filterTournamentActions: string = "Title eq '" + tournamentName + "'";
var tournamentActionsCount: number = 0;
@@ -164,82 +176,83 @@ export default class CommonServices {
return tournamentCompletedFlag;
}
- //get all user action for active tournament and bind to table
- public async getUserActions(activeTournamentName,allUsersDetails): Promise {
+ //get all user action for active tournament and bind to table
+ public async getUserActions(activeTournamentName): Promise {
return new Promise(async (resolve, reject) => {
- try {
+ try {
let userActionsWithDisplayName: any = [];
let userRanks: any = [];
- let getAllUserActions: any = [];
-
- //get active tournament's participants
- let filterQuery = "Tournament_x0020_Name eq '" + activeTournamentName.replace(/'/g,"''") + "'";
- //get first batch of items
- let getUserActions = await sp.web.lists.getByTitle(stringsConstants.UserActionsList).items.
- filter(filterQuery).select("Title", "Points").top(5000).getPaged();
- if (getUserActions.results.length > 0)
- {
+ let getAllUserActions: any = [];
+
+ //get active tournament's participants
+ let filterQuery = "Tournament_x0020_Name eq '" + activeTournamentName.replace(/'/g, "''") + "'";
+ //get first batch of items
+ let getUserActions = await sp.web.lists.getByTitle(stringsConstants.UserActionsList).items.
+ filter(filterQuery).select("Title", "Points", "UserName").top(5000).getPaged();
+ if (getUserActions.results.length > 0) {
+ getAllUserActions.push(...getUserActions.results);
+ //get next batch, if more items found
+ while (getUserActions.hasNext) {
+ getUserActions = await getUserActions.getNext();
getAllUserActions.push(...getUserActions.results);
- //get next batch, if more items found
- while (getUserActions.hasNext) {
- getUserActions = await getUserActions.getNext();
- getAllUserActions.push(...getUserActions.results);
+ }
+ //groupby user and sum the points
+ var groupOfUniqueUsers = [];
+ getAllUserActions.reduce((res, value) => {
+ if (!res[value.Title]) {
+ res[value.Title] = { Title: value.Title, Points: 0 };
+ groupOfUniqueUsers.push(res[value.Title]);
}
- //groupby user and sum the points
- var groupOfUniqueUsers = [];
- getAllUserActions.reduce((res, value) => {
- if (!res[value.Title]) {
- res[value.Title] = { Title: value.Title, Points: 0 };
- groupOfUniqueUsers.push(res[value.Title]);
+ res[value.Title].Points += value.Points;
+ res[value.Title].UserName = value.UserName;
+ return res;
+ }, {});
+ //sorting by points and then by display name
+ groupOfUniqueUsers.sort((a, b) => {
+ if (a.Points < b.Points) return 1;
+ if (a.Points > b.Points) return -1;
+ if (a.Title > b.Title) return 1;
+ if (a.Title < b.Title) return -1;
+ });
+ // get user Display Name for users
+ if (groupOfUniqueUsers.length > 0) {
+ for (let i = 0; i < groupOfUniqueUsers.length; i++) {
+ let itemEmail: string = groupOfUniqueUsers[i].Title.toLowerCase();
+ let userDisplayName = itemEmail;
+ if (groupOfUniqueUsers[i].UserName != null)
+ userDisplayName = groupOfUniqueUsers[i].UserName;
+
+ if (userDisplayName.length > 0) {
+ userActionsWithDisplayName.push(
+ {
+ User: userDisplayName.replace(',', ''),
+ Points: groupOfUniqueUsers[i].Points,
+ Email: itemEmail
+ });
}
- res[value.Title].Points += value.Points;
- return res;
- }, {});
- //sorting by points and then by display name
- groupOfUniqueUsers.sort((a, b) => {
- if (a.Points < b.Points) return 1;
- if (a.Points > b.Points) return -1;
- if (a.Title > b.Title) return 1;
- if (a.Title < b.Title) return -1;
- });
- // get user Display Name for users
- if (groupOfUniqueUsers.length > 0) {
- for (let i = 0; i < groupOfUniqueUsers.length; i++) {
- let itemEmail: string = groupOfUniqueUsers[i].Title.toLowerCase();
- let userDisplayName = allUsersDetails.filter(
- (user) => user.email === itemEmail
- );
- if (userDisplayName.length > 0) {
- userActionsWithDisplayName.push(
- {
- User: userDisplayName[0].displayName.replace(',',''),
- Points: groupOfUniqueUsers[i].Points,
- Email:itemEmail
- });
- }
- }//for loop of getting user display name ends here
- }
- //associate rank on the sorted array of users
- for (let j = 0; j < userActionsWithDisplayName.length; j++) {
- userRanks.push(
- {
- Rank: j + 1,
- User: userActionsWithDisplayName[j].User,
- Points: userActionsWithDisplayName[j].Points,
- Email:userActionsWithDisplayName[j].Email
- });
- }
- resolve(userRanks);
+ }//for loop of getting user display name ends here
}
- else{
- resolve(userRanks);
+ //associate rank on the sorted array of users
+ for (let j = 0; j < userActionsWithDisplayName.length; j++) {
+ userRanks.push(
+ {
+ Rank: j + 1,
+ User: userActionsWithDisplayName[j].User,
+ Points: userActionsWithDisplayName[j].Points,
+ Email: userActionsWithDisplayName[j].Email
+ });
}
-
+ resolve(userRanks);
+ }
+ else {
+ resolve(userRanks);
+ }
+
}
catch (error) {
console.error("CommonServices_getUserActions \n", error);
reject("Failed");
- }
+ }
});
}
}
diff --git a/src/webparts/clbHome/assets/CMPImages/MSLogo.jpg b/src/webparts/clbHome/assets/CMPImages/MSLogo.jpg
new file mode 100644
index 00000000..e41f0633
Binary files /dev/null and b/src/webparts/clbHome/assets/CMPImages/MSLogo.jpg differ
diff --git a/src/webparts/clbHome/assets/CMPImages/ManageAppLogo.svg b/src/webparts/clbHome/assets/CMPImages/ManageAppLogo.svg
new file mode 100644
index 00000000..35566d4a
--- /dev/null
+++ b/src/webparts/clbHome/assets/CMPImages/ManageAppLogo.svg
@@ -0,0 +1,32 @@
+
diff --git a/src/webparts/clbHome/assets/stylesheets/components/_DigitalBadge.scss b/src/webparts/clbHome/assets/stylesheets/DigitalBadgeProfile.scss
similarity index 94%
rename from src/webparts/clbHome/assets/stylesheets/components/_DigitalBadge.scss
rename to src/webparts/clbHome/assets/stylesheets/DigitalBadgeProfile.scss
index 1987484d..77ccc207 100644
--- a/src/webparts/clbHome/assets/stylesheets/components/_DigitalBadge.scss
+++ b/src/webparts/clbHome/assets/stylesheets/DigitalBadgeProfile.scss
@@ -1,4 +1,4 @@
-@import "../../../../../../node_modules/office-ui-fabric-react/dist/sass/_References.scss";
+@import "../../../../../node_modules/office-ui-fabric-react/dist/sass/_References.scss";
.DigitalBadge {
.container {
diff --git a/src/webparts/clbHome/assets/stylesheets/components/_all.scss b/src/webparts/clbHome/assets/stylesheets/components/_all.scss
deleted file mode 100644
index 2dd96b86..00000000
--- a/src/webparts/clbHome/assets/stylesheets/components/_all.scss
+++ /dev/null
@@ -1 +0,0 @@
-@import 'DigitalBadge';
\ No newline at end of file
diff --git a/src/webparts/clbHome/assets/stylesheets/main.scss b/src/webparts/clbHome/assets/stylesheets/main.scss
deleted file mode 100644
index 2f615405..00000000
--- a/src/webparts/clbHome/assets/stylesheets/main.scss
+++ /dev/null
@@ -1 +0,0 @@
-@import 'components/all';
\ No newline at end of file
diff --git a/src/webparts/clbHome/components/ApproveChampion.tsx b/src/webparts/clbHome/components/ApproveChampion.tsx
index 8a7b46dd..37044e5a 100644
--- a/src/webparts/clbHome/components/ApproveChampion.tsx
+++ b/src/webparts/clbHome/components/ApproveChampion.tsx
@@ -7,6 +7,7 @@ import { sp } from "@pnp/sp";
import * as React from "react";
import siteconfig from "../config/siteconfig.json";
import styles from "../scss/CMPApproveChampion.module.scss";
+import * as LocaleStrings from 'ClbHomeWebPartStrings';
@@ -143,12 +144,12 @@ class ApproveChampion extends React.Component {
} else {
if (status === 'Approved') {
this.setState({
- approveMessage: `Your response has been ${status}.`
+ approveMessage: LocaleStrings.ChampionApprovedMessage
});
}
if (status === 'Rejected') {
this.setState({
- rejectMessage: `Your response has been ${status}.`
+ rejectMessage: LocaleStrings.ChampionRejectedMessage
});
}
this._getListData();
@@ -166,12 +167,12 @@ class ApproveChampion extends React.Component {
{ this.props.onClickAddmember(); }}
- title="Back"
+ title={LocaleStrings.CMPBreadcrumbLabel}
>
- Back
+ {LocaleStrings.CMPBreadcrumbLabel}
- Manage Approval
+ {LocaleStrings.ManageApprovalsPageTitle}
{this.state.approveMessage &&
}
-
@@ -954,7 +995,7 @@ export default class DigitalBadge extends TeamsBaseComponent<
private _onDownloadImage() {
this.setState({
imageDownloaded: true,
- downloadText: strings.DownloadingButtonText,
+ downloadText: LocaleStrings.DownloadingButtonText,
});
let canvasDownload: any = document.getElementById("profileCanvasDownload");
let link: HTMLAnchorElement = document.createElement("a");
@@ -962,7 +1003,7 @@ export default class DigitalBadge extends TeamsBaseComponent<
if (canvasDownload.msToBlob) {
// for IE
let blob = canvasDownload.msToBlob();
- this.setState({ downloadText: strings.DownloadedButtonText });
+ this.setState({ downloadText: LocaleStrings.DownloadedButtonText });
} else {
// other browsers
canvasDownload.toBlob((blob: any) => {
@@ -973,7 +1014,7 @@ export default class DigitalBadge extends TeamsBaseComponent<
document.body.appendChild(link);
link.click();
document.body.removeChild(link);
- this.setState({ downloadText: strings.DownloadedButtonText });
+ this.setState({ downloadText: LocaleStrings.DownloadedButtonText });
});
}
}
diff --git a/src/webparts/clbHome/components/EmployeeView.tsx b/src/webparts/clbHome/components/EmployeeView.tsx
index 415376c1..8a64e0b5 100644
--- a/src/webparts/clbHome/components/EmployeeView.tsx
+++ b/src/webparts/clbHome/components/EmployeeView.tsx
@@ -7,6 +7,7 @@ import { SPHttpClient, SPHttpClientResponse } from "@microsoft/sp-http";
import * as microsoftTeams from "@microsoft/teams-js";
import Champions from "./Champions";
import siteconfig from "../config/siteconfig.json";
+import * as LocaleStrings from 'ClbHomeWebPartStrings';
interface EmployeeViewState {
siteUrl: string;
users: any;
@@ -104,7 +105,7 @@ export default class EmployeeView extends Component<
{this.state.isLoaded && (
diff --git a/src/webparts/clbHome/components/Header.tsx b/src/webparts/clbHome/components/Header.tsx
index aae11c3c..a9e780d8 100644
--- a/src/webparts/clbHome/components/Header.tsx
+++ b/src/webparts/clbHome/components/Header.tsx
@@ -8,6 +8,7 @@ import { mergeStyleSets } from '@fluentui/react/lib/Styling';
import { TooltipHost, ITooltipHostStyles } from '@fluentui/react/lib/Tooltip';
import { Callout, Link, Text, FontWeights } from 'office-ui-fabric-react';
import * as Strings from '../constants/strings';
+import * as LocaleStrings from 'ClbHomeWebPartStrings';
// Import package version
const packageSolution: any = require("../../../../config/package-solution.json");
@@ -60,6 +61,7 @@ const style = mergeStyleSets({
interface IHeaderProps {
showSearch: boolean;
clickcallback: () => void; //will redirects to home
+ logoImageURL: string;
}
interface HeaderState {
isCalloutVisible: boolean;
@@ -87,18 +89,18 @@ export default class Header extends Component {
- Champion Management Platform
+ {LocaleStrings.AppHeaderTitleLabel}
{
directionalHint={3}
>
- About the Champion Management Platform (CMP):
+ {LocaleStrings.AboutHeaderLabel}
- Our Champion Management Platform was created with organizational Champions / Adoption Specialists in mind. Hearing from the Microsoft 365 Champion Community this app was developed to deliver a platform to help create and sustain your own communities. Starting with inspiration through execution in helping you achieve more within your own communities!
+ {LocaleStrings.AboutContentLabel}
- Additional Resources:
+ {LocaleStrings.AdditionalResourcesHeaderLabel}
- The Microsoft Teams Customer Advocacy Group is focused on delivering solutions like these to inspire and help you achieve your goals. Follow and join in through these other resources to learn more from us and the community:
+ {LocaleStrings.AdditionalResourcesContentLabel}
- Microsoft 365 Champion Community
+ {LocaleStrings.M365ChampionCommunityLinkLabel}
- Driving Adoption on the Microsoft Technical Community
+ {LocaleStrings.DrivingAdoptionLinkLabel}
----
- Current Version: {packageSolution.solution.version}
+ {LocaleStrings.CurrentVersionLabel} {packageSolution.solution.version}
- Latest Version: CMP GitHub
+ {LocaleStrings.LatestVersionLabel} {LocaleStrings.CMPGitHubLinkLabel}
----
- Visit the Champion Management Platform pages to learn more:
+ {LocaleStrings.VisitLabel}
- Overview & Information on our Microsoft Adoption Hub
+ {LocaleStrings.OverviewLabel} {LocaleStrings.MSAdoptionHubLinkLabel}
- Solution technical documentation and architectural overview on GitHub
+ {LocaleStrings.DocumentationLabel} {LocaleStrings.CMPGitHubLinkLabel}
)}
@@ -164,7 +166,7 @@ export default class Header extends Component {
- Tournament Rank
+ {LocaleStrings.TournamentRankLabel} {this.state.userRank}
- of {this.state.totalParticipants} Participants
+ of {this.state.totalParticipants} {LocaleStrings.ParticipantsLabel}
diff --git a/src/webparts/clbHome/config/siteconfig.json b/src/webparts/clbHome/config/siteconfig.json
index d093918b..ce61c8d6 100644
--- a/src/webparts/clbHome/config/siteconfig.json
+++ b/src/webparts/clbHome/config/siteconfig.json
@@ -331,7 +331,7 @@
""
],
"masterData": [{
- "Title": "Communication in Teams", //title is tournament name
+ "Title": "Communication in Teams",
"Category": "Chat",
"Action": "Send 1:1",
"Description": "Send a 1:1 chat to someone else in the organization",
@@ -339,7 +339,7 @@
"HelpURL": "https://support.microsoft.com/en-us/office/start-a-chat-in-teams-0c71b32b-c050-4930-a887-5afbe742b3d8"
},
{
- "Title": "Communication in Teams", //title is tournament name
+ "Title": "Communication in Teams",
"Category": "Chat",
"Action": "Send GIF",
"Description": "Send a GIF to someone else in org",
@@ -347,7 +347,7 @@
"HelpURL": "https://support.microsoft.com/en-us/office/send-an-emoji-gif-or-sticker-in-teams-174248c9-e64d-4de1-9f41-3199cc0751ad"
},
{
- "Title": "Communication in Teams", //title is tournament name
+ "Title": "Communication in Teams",
"Category": "Channel",
"Action": "Attach a file",
"Description": "Attach a file to a conversation in a channel post",
@@ -355,7 +355,7 @@
"HelpURL": "https://support.microsoft.com/en-us/office/send-a-file-picture-or-link-in-teams-0e930dcd-46fd-42c3-8d7d-15af4f9bcfca"
},
{
- "Title": "Communication in Teams", //title is tournament name
+ "Title": "Communication in Teams",
"Category": "Chat",
"Action": "Mark message as urgent",
"Description": "Mark message as urgent for place importance",
@@ -363,7 +363,7 @@
"HelpURL": "https://support.microsoft.com/en-us/office/mark-a-message-as-important-or-urgent-in-teams-ea99d5b6-1317-4550-8d75-86ff14cd4462#:~:text=To%20do%20that%2C%20tap%20More%20options%20%3E%20Message,just%20retrace%20your%20steps%20and%20tap%20it%20again."
},
{
- "Title": "Communication in Teams", //title is tournament name
+ "Title": "Communication in Teams",
"Category": "Chat",
"Action": "Pin conversation",
"Description": "Pin (Save the message) chat on your message thread for visibility",
@@ -371,7 +371,7 @@
"HelpURL": "https://support.microsoft.com/en-us/office/hide-unhide-mute-or-pin-a-chat-in-teams-9aee02ef-713d-495b-8a73-9762d8e4b066"
},
{
- "Title": "Communication in Teams", //title is tournament name
+ "Title": "Communication in Teams",
"Category": "Calendar",
"Action": "Schedule a meeting",
"Description": "Schedule a meeting with someone",
@@ -379,7 +379,7 @@
"HelpURL": "https://docs.microsoft.com/en-us/microsoftteams/teams-add-in-for-outlook"
},
{
- "Title": "Communication in Teams", //title is tournament name
+ "Title": "Communication in Teams",
"Category": "Calling",
"Action": "Create a recording",
"Description": "Record call to share with members",
@@ -387,7 +387,7 @@
"HelpURL": "https://support.microsoft.com/en-us/office/record-a-meeting-in-teams-34dfbe7f-b07d-4a27-b4c6-de62f1348c24"
},
{
- "Title": "Communication in Teams", //title is tournament name
+ "Title": "Communication in Teams",
"Category": "Calling",
"Action": "Invite someone to an existing call",
"Description": "Add another person to a call invitation",
@@ -395,7 +395,7 @@
"HelpURL": "https://docs.microsoft.com/en-us/microsoftteams/teams-add-in-for-outlook"
},
{
- "Title": "Collaboration in Teams", //title is tournament name
+ "Title": "Collaboration in Teams",
"Category": "Calling",
"Action": "Place a phone call",
"Description": "Place a phone call to another teams users",
@@ -403,7 +403,7 @@
"HelpURL": "https://support.microsoft.com/en-us/office/first-things-to-know-about-calls-in-microsoft-teams-2b883a81-dd15-41bd-a6ba-39deef141027"
},
{
- "Title": "Collaboration in Teams", //title is tournament name
+ "Title": "Collaboration in Teams",
"Category": "Calling",
"Action": "Listen to voicemail",
"Description": "Listen to a voicemail from someone",
@@ -411,7 +411,7 @@
"HelpURL": "https://support.microsoft.com/en-us/office/check-your-voicemail-in-teams-f8d568ce-7329-4fe2-a6a2-325ec2e2b419#:~:text=Check%20your%20voicemail%20in%20Teams%20To%20check%20your,someone%20back%2C%20select%20More%20options%20%3E%20Call%20back."
},
{
- "Title": "Collaboration in Teams", //title is tournament name
+ "Title": "Collaboration in Teams",
"Category": "Channel",
"Action": "Create a channel ",
"Description": "Create a channel for your team",
@@ -419,7 +419,7 @@
"HelpURL": "https://support.microsoft.com/en-us/office/create-a-channel-in-teams-fda0b75e-5b90-4fb8-8857-7e102b014525"
},
{
- "Title": "Collaboration in Teams", //title is tournament name
+ "Title": "Collaboration in Teams",
"Category": "Channel",
"Action": "Add members to channel",
"Description": "Add the people in your team to channel",
@@ -427,7 +427,7 @@
"HelpURL": "https://support.microsoft.com/en-us/office/create-a-channel-in-teams-fda0b75e-5b90-4fb8-8857-7e102b014525"
},
{
- "Title": "Collaboration in Teams", //title is tournament name
+ "Title": "Collaboration in Teams",
"Category": "Channel",
"Action": "Create a folder for files",
"Description": "Create a folder to store your files",
@@ -435,7 +435,7 @@
"HelpURL": "https://support.microsoft.com/en-us/topic/collaborate-on-files-in-microsoft-teams-9b200289-dbac-4823-85bd-628a5c7bb0ae"
},
{
- "Title": "Collaboration in Teams", //title is tournament name
+ "Title": "Collaboration in Teams",
"Category": "Channel",
"Action": "Mention someone with @",
"Description": "Use @ mention to get the attention of someone",
@@ -443,7 +443,7 @@
"HelpURL": "https://support.microsoft.com/en-us/office/get-attention-with-mentions-b2ffb135-7069-4880-84ee-5b27f402418b#:~:text=%20Get%20an%20entire%20team%20or%20channel%27s%20attention,Finish%20your%20message%20and%20select%20Send.%20More%20"
},
{
- "Title": "Collaboration in Teams", //title is tournament name
+ "Title": "Collaboration in Teams",
"Category": "Channel",
"Action": "Create a private channel",
"Description": "Create a private channel to enhance security ",
@@ -451,7 +451,7 @@
"HelpURL": "https://docs.microsoft.com/en-us/MicrosoftTeams/private-channels#:~:text=Private%20channel%20owner%20and%20member%20actions%20%20,%20%20No%20%204%20more%20rows%20"
},
{
- "Title": "Apps in Teams", //title is tournament name
+ "Title": "Apps in Teams",
"Category": "Apps",
"Action": "Add app to channel",
"Description": "Include app in your Team channel to enhance productivity",
@@ -459,7 +459,7 @@
"HelpURL": "https://support.microsoft.com/en-us/office/add-an-app-to-microsoft-teams-b2217706-f7ed-4e64-8e96-c413afd02f77"
},
{
- "Title": "Apps in Teams", //title is tournament name
+ "Title": "Apps in Teams",
"Category": "Apps",
"Action": "Add app to chat",
"Description": "Include app in your chat to enhance collaboration",
@@ -467,7 +467,7 @@
"HelpURL": "https://support.microsoft.com/en-us/office/add-an-app-to-microsoft-teams-b2217706-f7ed-4e64-8e96-c413afd02f77"
},
{
- "Title": "Apps in Teams", //title is tournament name
+ "Title": "Apps in Teams",
"Category": "Apps",
"Action": "Include app in meeting invite",
"Description": "Include app in your invite to prepare for collaboration",
@@ -475,7 +475,7 @@
"HelpURL": "https://support.microsoft.com/en-us/office/use-apps-in-teams-meetings-62bca572-ba7e-4e21-9190-a47c61319739"
},
{
- "Title": "Apps in Teams", //title is tournament name
+ "Title": "Apps in Teams",
"Category": "Apps",
"Action": "Pin and unpin apps",
"Description": "Easily access apps by pinning them on your top bar",
@@ -483,7 +483,7 @@
"HelpURL": "https://support.microsoft.com/en-us/office/pin-an-app-for-easy-access-3045fd44-6604-4ba7-8ecc-1c0d525e89ec"
},
{
- "Title": "Apps in Teams", //title is tournament name
+ "Title": "Apps in Teams",
"Category": "Apps",
"Action": "Configure app notifications",
"Description": "Control your notification",
@@ -491,7 +491,7 @@
"HelpURL": "https://support.microsoft.com/en-us/office/add-an-app-to-microsoft-teams-b2217706-f7ed-4e64-8e96-c413afd02f77"
},
{
- "Title": "Apps in Teams", //title is tournament name
+ "Title": "Apps in Teams",
"Category": "Apps",
"Action": "Send app content in messages",
"Description": "Send informative messages or highlight individuals with Praise badge",
@@ -507,7 +507,8 @@
"",
"",
"",
- ""
+ "",
+ ""
]
}
diff --git a/src/webparts/clbHome/constants/strings.ts b/src/webparts/clbHome/constants/strings.ts
index 0b47ab24..25c172d2 100644
--- a/src/webparts/clbHome/constants/strings.ts
+++ b/src/webparts/clbHome/constants/strings.ts
@@ -1,3 +1,5 @@
+export const ToTLabel = "Tournament of Teams";
+export const CMPLabel = "Champion Management Platform";
export const PropertyPaneDescription = "Description";
export const BasicGroupName = "Group Name";
export const DescriptionFieldLabel = "Description Field";
@@ -77,6 +79,9 @@ export const UserActionsList = "User Actions";
export const NoActiveTournamentMessage = "There is no active tournament at the moment. Please check back later.";
export const formSavingMessage = "Saving your details....";
export const DigitalBadgeLibrary = "Digital Badge Assets";
+export const CMPLogoLibrary = "CMP Logo";
+export const MSLogo ="MSLogo.jpg";
+export const MemberList = "Member List";
export const NoActiveParticipantsMessage = "There are no active participants at the moment. Be the first to participate and log an activity from My Dashboard!";
@@ -91,6 +96,7 @@ export const FeedbackUrl = "https://aka.ms/adoptionfeedback";
export const M365CMP = "https://aka.ms/m365cmp";
export const M365CmpApp = "https://aka.ms/m365cmpapp";
+
//ManageTournaments
-export const ManageTotLabel1 = "One tournament can be enabled at a time. See below for the current active tournament, ability to end the tournament, as well as the ability to start a new tournament.";
-export const ManageTotLabel2 = "Once a tournament has been started and completed it will not be available to start again; however, you can create a new tournament using the same actions if you would like to complete a similar tournament!";
\ No newline at end of file
+export const StartTournamentAction = "Start";
+export const EndTournamentAction = "End";
\ No newline at end of file
diff --git a/src/webparts/clbHome/events/EventData.ts b/src/webparts/clbHome/events/EventData.ts
new file mode 100644
index 00000000..a797530a
--- /dev/null
+++ b/src/webparts/clbHome/events/EventData.ts
@@ -0,0 +1,3 @@
+export class EventData {
+ public tournamentName: string;
+ }
\ No newline at end of file
diff --git a/src/webparts/clbHome/loc/en-us.js b/src/webparts/clbHome/loc/en-us.js
index 89f98bc1..837cb943 100644
--- a/src/webparts/clbHome/loc/en-us.js
+++ b/src/webparts/clbHome/loc/en-us.js
@@ -1,7 +1,245 @@
-define([], function() {
+define([], function () {
return {
+
"PropertyPaneDescription": "Description",
"BasicGroupName": "Group Name",
- "DescriptionFieldLabel": "Description Field"
+ "DescriptionFieldLabel": "Description Field",
+
+ //-------------------------------------CMP----------------------------------------------
+
+ //Common
+ "CMPBreadcrumbLabel": "Champion Management Platform",
+ "SaveButton": "Save",
+ "BackButton": "Back",
+
+ //CMP Home
+ "GetStartedLabel": "Get Started",
+ "AdminToolsLabel": "Admin Tools",
+ "ChampionLeaderBoardLabel": "Champion LeaderBoard",
+ "AddMemberLabel": "Add Member",
+ "NominateMemberLabel": "Nominate Member",
+ "DigitalBadgeLabel": "Digital Badge",
+ "TOTLabel": "Tournament of Teams",
+ "ChampionListLabel": "Champions List",
+ "EventsListLabel": "Events List",
+ "EventsTrackListLabel": "Events Track List",
+ "ManageApprovalsLabel": "Manage Approvals",
+ "ManageDigitalBadgesLabel": "Manage Digital Badges",
+ "EnableTOTLabel": "Enable Tournament of Teams",
+ "AddMembersToolTip": "Adding Members Start adding the people you will collaborate with in your...",
+ "DigitalMembersToolTip": "Digital Badge, Get your Champion Badge",
+ "ChampionsListToolTip": "Accessing Champions List",
+ "EventsListToolTip": "Accessing Events List",
+ "EventTrackListToolTip": "Accessing Event Track List",
+ "ManageApprovalToolTip": "Approve Champion",
+ "EnableTOTToolTip": "Enable Tournament of Teams",
+ "ManageDigitalBadgesToolTip": "Manage Digital Badges",
+ "WelcomeLabel": "Welcome",
+ "ManageAppLogoLabel": "Manage App Logo",
+ "ManageAppLogoToolTip": "Manage App Logo",
+
+ //Header
+ "AppHeaderTitleLabel": "Champion Management Platform",
+ "AppLogoToolTip": "Home",
+ "MoreInfoToolTip": "More Info",
+ "SupportToolTip": "Support",
+ "FeedbackToolTip": "Feedback",
+
+ //More Info Icon Content
+ "AboutHeaderLabel": "About the Champion Management Platform (CMP):",
+ "AboutContentLabel": "Our Champion Management Platform was created with organizational Champions / Adoption Specialists in mind. Hearing from the Microsoft 365 Champion Community this app was developed to deliver a platform to help create and sustain your own communities. Starting with inspiration through execution in helping you achieve more within your own communities!",
+ "AdditionalResourcesHeaderLabel": "Additional Resources:",
+ "AdditionalResourcesContentLabel": "The Microsoft Teams Customer Advocacy Group is focused on delivering solutions like these to inspire and help you achieve your goals. Follow and join in through these other resources to learn more from us and the community:",
+ "M365ChampionCommunityLinkLabel": "Microsoft 365 Champion Community",
+ "DrivingAdoptionLinkLabel": "Driving Adoption on the Microsoft Technical Community",
+ "CurrentVersionLabel": "Current Version:",
+ "LatestVersionLabel": "Latest Version:",
+ "CMPGitHubLinkLabel": "GitHub",
+ "VisitLabel": "Visit the Champion Management Platform pages to learn more:",
+ "OverviewLabel": "Overview & Information on our",
+ "MSAdoptionHubLinkLabel": "Microsoft Adoption Hub",
+ "DocumentationLabel": "Solution technical documentation and architectural overview on",
+
+ //Add Member
+ "AddMemberPageTitle": "Add Member",
+ "NominateMemberPageTitle": "Nominate Member",
+ "PeoplePickerPlaceholder": "For Adding a member please type member name",
+ "RegionPlaceholder": "Select Region",
+ "CountryPlaceholder": "Select Country",
+ "GroupPlaceholder": "Select Group",
+ "FocusAreaPlaceholder": "Select Focus Area",
+ "UserExistingMessage": "User Already a Champion!",
+
+ //CLBChampionsList and ManageApprovals
+ "ChampionsListPageTitle": "Champions List",
+ "UserNominatedMessage": "User Nominated Successfully!",
+ "UserAddedMessage": "User Added Successfully!",
+ "PeopleNameGridHeader":"Member Name",
+ "RegionGridHeader":"Region",
+ "CountryGridHeader": "Country",
+ "GroupGridHeader":"Group",
+ "FocusAreaGridHeader":"Focus Area",
+ "StatusGridHeader": "Status",
+ "ManageApprovalsPageTitle": "Manage Approvals",
+ "ActionGridHeader": "Action",
+ "ApproveButton": "Approve",
+ "RejectButton": "Reject",
+ "NoChampionsMessage": "NO CHAMPION REQUESTS AVAILABLE",
+ "ChampionApprovedMessage": "Champion Request Approved!",
+ "ChampionRejectedMessage": "Champion Request Rejected!",
+
+ //Digital Badge"
+ "DigitalBadgePageTitle":"Digital Badge",
+ "LoadingSpinnerLabel": "Loading...",
+ "DigitalBadgeAppBannerAltText":"Microsoft team members engaging in a discussion",
+ "PreAcceptPageTitle":"Claim your digital badge!",
+ "PreAcceptDisclaimer": "Welcome to the digital badge utility
As part of your membership to the Champions Program, you have earned a digital badge! This utility will enable you to 'claim' your digital badge by overlaying it on top of your existing profile picture.
Please note that this will update your profile picture across all of Microsoft 365 (Exchange, Teams, SharePoint, etc).",
+ "PreAcceptDisclaimer2":"If desired, you will have an opportunity to 'save' a copy of your existing profile picture without the digital badge overlay in the succeeding steps. Please click ‘Accept’ to continue (you might see a pop-up open and prompt for sign-in).",
+ "NotQualifiedPreAcceptDisclaimer":"Welcome to the digital badge utility. As part of your membership of the Champions Program, you can earn a digital badge! This utility will enable you to 'claim' your digital badge by overlaying it on top of your existing profile picture. Please note that this will update your profile picture across all of Microsoft 365 (Exchange, Teams, SharePoint, etc.)",
+ "HowtoGetDigitalBadgeText":"How to get Champion Badge",
+ "MultipleBadgeMessage":"Select a badge from the below list. Selected badge will be applied on your profile picture.",
+ "NoBadgeMessage":"No badges found for you to select. Please check with your App Administrator.",
+ "DigitalBadgeSubPageTitle":"Here's how your digital badge will look!",
+ "ProfileImageAlt":"My profile image used across O365, Teams, etc",
+ "BadgeImageAlt":"Medal-shaped award with the letter C in the middle signifying I am a part of the Champions Program",
+ "NoProfileImageAlt":"Silhouette of a person, signifying no profile image is currently applied to your account",
+ "ApplyButtonText": "Apply image",
+ "ApplyButtonAriaDescription": "By clicking this button you're giving the Champions Program web part permission to update your profile picture on your behalf.",
+ "ApplyButton": "Apply",
+ "DownloadButtonText":"Download",
+ "DownloadButtonAriaDescription":"Click to download your current profile image",
+ "DownloadingButtonText":"Downloading...",
+ "DownloadedButtonText": "Downloaded",
+ "DownloadedButtonSecondaryText": "Your downloaded profile image can be found in your device's Downloads folder.",
+ "DownloadButtonSecondaryText": "Download your current profile image",
+ "PreApplyDisclaimer":"This is a preview of your new profile picture including the digital badge. If you wish to download your existing profile picture prior to applying the digital badge, click on the 'Download your current profile image' link. ",
+ "PreApplyDisclaimer1":" Clicking 'Apply Image' will update your Microsoft 365 profile picture with this new image. Please note this will update your profile picture across all of Microsoft 365 and cannot be reverted through this page.