diff --git a/__tests__/discord-groups/discord-group.test.js b/__tests__/groups/group.test.js
similarity index 85%
rename from __tests__/discord-groups/discord-group.test.js
rename to __tests__/groups/group.test.js
index 41a00de6..146542cc 100644
--- a/__tests__/discord-groups/discord-group.test.js
+++ b/__tests__/groups/group.test.js
@@ -1,7 +1,7 @@
const puppeteer = require('puppeteer');
const { allUsersData } = require('../../mock-data/users');
const { API_BASE_URL } = require('../../constants');
-const { discordGroups } = require('../../mock-data/discord-groups');
+const { discordGroups } = require('../../mock-data/groups');
const BASE_URL = 'https://api.realdevsquad.com';
@@ -99,7 +99,7 @@ describe('Discord Groups Page', () => {
interceptedRequest.continue();
}
});
- await page.goto('http://localhost:8000/discord-groups');
+ await page.goto('http://localhost:8000/groups');
await page.waitForNetworkIdle();
});
@@ -133,7 +133,7 @@ describe('Discord Groups Page', () => {
'.group-role',
(list) => list.length,
);
- expect(groupListLength).toBe(1);
+ expect(groupListLength).toBe(3);
});
test('Should not display an error message if the role name contains "group"', async () => {
@@ -165,4 +165,28 @@ describe('Discord Groups Page', () => {
await createGroupBtn.click();
await expect(alertMessage).toContain("Roles cannot contain 'group'.");
});
+
+ test('Filter groups based on search input', async () => {
+ const searchInput = await page.$('#search-groups');
+ await searchInput.type('DSA');
+
+ const filteredGroupNames = await page.$$eval('.group-role', (elements) => {
+ return elements
+ .map((element) => element.querySelector('.group-name').textContent)
+ .filter((name) => name.includes('DSA'));
+ });
+
+ expect(filteredGroupNames).toEqual(
+ expect.arrayContaining(['group-DSA', 'group-DSA-Coding-Group']),
+ );
+ });
+
+ test('should update the URL when a group role is clicked', async () => {
+ await page.$$eval('.group-role', (elements) => {
+ elements[1].click();
+ });
+ const url = await page.url();
+ const searchParams = decodeURIComponent(url.split('?')[1]);
+ expect(searchParams).toMatch('group-DSA');
+ });
});
diff --git a/__tests__/standup/standup.test.js b/__tests__/standup/standup.test.js
new file mode 100644
index 00000000..02736c4d
--- /dev/null
+++ b/__tests__/standup/standup.test.js
@@ -0,0 +1,118 @@
+const puppeteer = require('puppeteer');
+const API_BASE_URL = 'https://staging-api.realdevsquad.com';
+const { user } = require('../../mock-data/users');
+const { standup } = require('../../mock-data/standup');
+
+describe('Standup Page', () => {
+ let browser;
+ let page;
+ jest.setTimeout(60000);
+
+ beforeAll(async () => {
+ browser = await puppeteer.launch({
+ headless: true,
+ ignoreHTTPSErrors: true,
+ args: ['--incognito', '--disable-web-security'],
+ devtools: false,
+ });
+ page = await browser.newPage();
+
+ await page.setRequestInterception(true);
+
+ page.on('request', (interceptedRequest) => {
+ const url = interceptedRequest.url();
+
+ if (url === `${API_BASE_URL}/users/sunny`) {
+ interceptedRequest.respond({
+ status: 200,
+ contentType: 'application/json',
+ headers: {
+ 'Access-Control-Allow-Origin': '*',
+ 'Access-Control-Allow-Methods': 'GET, POST, PUT, DELETE, OPTIONS',
+ 'Access-Control-Allow-Headers': 'Content-Type, Authorization',
+ },
+ body: JSON.stringify(user),
+ });
+ } else if (
+ url === `${API_BASE_URL}/progresses?userId=YleviOe1SsOML8eitV9W`
+ ) {
+ interceptedRequest.respond({
+ status: 200,
+ contentType: 'application/json',
+ headers: {
+ 'Access-Control-Allow-Origin': '*',
+ 'Access-Control-Allow-Methods': 'GET, POST, PUT, DELETE, OPTIONS',
+ 'Access-Control-Allow-Headers': 'Content-Type, Authorization',
+ },
+ body: JSON.stringify(standup),
+ });
+ } else {
+ interceptedRequest.continue();
+ }
+ });
+ await page.goto('http://localhost:8000/standup');
+ await page.waitForNetworkIdle();
+ });
+
+ afterAll(async () => {
+ await browser.close();
+ });
+
+ it('should display the table when the search button is clicked', async () => {
+ const userInput = await page.$('#user-search-input');
+ const searchButton = await page.$('#search-button');
+
+ await userInput.type('sunny');
+ await searchButton.click();
+ await page.waitForSelector('#table-container');
+ const table = await page.$('.user-standup-table');
+ expect(table).toBeTruthy();
+ });
+
+ it('should display the loader when the search button is clicked', async () => {
+ const userInput = await page.$('#user-search-input');
+ const searchButton = await page.$('#search-button');
+
+ await userInput.type('sunny');
+ await searchButton.click();
+ await page.waitForSelector('#table-container');
+ const loader = await page.$('.loader');
+ expect(loader).toBeTruthy();
+ });
+
+ it('should update the URL with the query parameter when the user writes a name', async () => {
+ const userInput = await page.$('#user-search-input');
+ const searchButton = await page.$('#search-button');
+ await userInput.click({ clickCount: 3 });
+ await userInput.press('Backspace');
+ await userInput.type('sunny');
+ await searchButton.click();
+ await page.waitForTimeout(1000);
+ const updatedUrl = page.url();
+ expect(updatedUrl).toContain('q=user:sunny');
+ });
+
+ it('should update the URL with the query parameter when the user writes multiple names', async () => {
+ const userInput = await page.$('#user-search-input');
+ const searchButton = await page.$('#search-button');
+ await userInput.click({ clickCount: 3 });
+ await userInput.press('Backspace');
+ await userInput.type('sunny,pratiyush');
+ await searchButton.click();
+ await page.waitForTimeout(1000);
+ const updatedUrl = page.url();
+ expect(updatedUrl).toContain('q=user:sunny+user:pratiyush');
+ });
+
+ it('should update the URL with the query parameter when the user writes duplicate names', async () => {
+ const userInput = await page.$('#user-search-input');
+ const searchButton = await page.$('#search-button');
+ await userInput.click({ clickCount: 3 });
+ await userInput.press('Backspace');
+ await userInput.type('sunny,sunny,pratiyush');
+ await searchButton.click();
+ await page.waitForTimeout(1000);
+ const updatedUrl = page.url();
+ expect(updatedUrl).toContain('q=user:sunny+user:pratiyush');
+ });
+});
diff --git a/discord-groups/constants.js b/groups/constants.js
similarity index 100%
rename from discord-groups/constants.js
rename to groups/constants.js
diff --git a/discord-groups/index.html b/groups/index.html
similarity index 83%
rename from discord-groups/index.html
rename to groups/index.html
index 9ee857ab..c5e25462 100644
--- a/discord-groups/index.html
+++ b/groups/index.html
@@ -7,9 +7,9 @@
Discord Groups | Real Dev Squad
-
+
-
+
@@ -23,6 +23,14 @@
diff --git a/discord-groups/script.js b/groups/script.js
similarity index 78%
rename from discord-groups/script.js
rename to groups/script.js
index 3f9f8ee6..e66be4ac 100644
--- a/discord-groups/script.js
+++ b/groups/script.js
@@ -58,6 +58,9 @@ groupsData?.forEach((item) => {
group.appendChild(createdBy);
group.setAttribute('id', item.roleid);
group.classList.add('group-role');
+ if (window.location.search.slice(1) === item.rolename) {
+ group.classList.add('active-group');
+ }
groupRoles.appendChild(group);
});
@@ -87,13 +90,19 @@ groupTabs.addEventListener('click', (e) => {
/**
* FOR SELECTING A GROUP
*/
+const pathname = window.location.pathname;
const groupRolesList = document.querySelectorAll('.group-role');
groupRoles?.addEventListener('click', function (event) {
groupRolesList.forEach((groupItem) => {
+ window.history.pushState({}, '', pathname);
groupItem.classList?.remove('active-group');
});
const groupListItem = event.target?.closest('li');
if (groupListItem) {
+ const newURL = `${window.location.pathname}?${
+ groupListItem.querySelector('p').textContent
+ }`;
+ window.history.pushState({}, '', newURL);
groupListItem.classList.add('active-group');
memberAddRoleBody.roleid = groupListItem.id;
if (IsUserVerified) {
@@ -102,6 +111,35 @@ groupRoles?.addEventListener('click', function (event) {
}
});
+// const paragraphElement = null, paragraphContent = '';
+const searchInput = document.getElementById('search-groups');
+
+function debounce(func, delay) {
+ let timeoutId;
+ return function (...args) {
+ timeoutId = setTimeout(() => {
+ clearTimeout(timeoutId);
+ func.apply(this, args);
+ }, delay);
+ };
+}
+
+searchInput.addEventListener('keyup', () => {
+ loader.classList.remove('hidden');
+ debounce(() => {
+ const searchValue = searchInput.value.toUpperCase();
+ const groupRoles = document.querySelectorAll('.group-role');
+ groupRoles.forEach((groupRole) => {
+ const paragraphElement = groupRole.getElementsByTagName('p')[0];
+ const paragraphContent = paragraphElement.textContent;
+ const displayValue =
+ paragraphContent.toUpperCase().indexOf(searchValue) > -1 ? '' : 'none';
+ groupRole.style.display = displayValue;
+ loader.classList.add('hidden');
+ });
+ }, 1000)();
+});
+
/**
* TO ASSIGN YOURSELF A ROLE
*/
diff --git a/discord-groups/style.css b/groups/style.css
similarity index 69%
rename from discord-groups/style.css
rename to groups/style.css
index c7be08c2..45b27f08 100644
--- a/discord-groups/style.css
+++ b/groups/style.css
@@ -3,12 +3,15 @@
padding: 0;
}
:root {
- --color-groups-tab-background: #1d1283;
- --color-active-tabs-color: #87d870;
- --color-active-groups-background: #337ad7b0;
- --color-buttons-background: #041187;
- --color-loader-border: #f3f3f3;
- --color-loader-border-top: #3498db;
+ --color-groups-tab-background: rgb(29, 18, 131);
+ --color-active-tabs-color: rgb(135, 216, 112);
+ --color-active-groups-background: rgba(51, 122, 215, 0.69);
+ --color-buttons-background: rgb(4, 17, 135);
+ --color-loader-border: rgb(243, 243, 243);
+ --color-loader-border-top: rgb(52, 152, 219);
+ --color-list-border: rgba(0, 0, 0, 0.2);
+ --color-white: rgb(255, 255, 255);
+ --color-not-verified: rgb(255, 0, 0);
}
.container {
font-family: 'Roboto', sans-serif;
@@ -34,7 +37,7 @@
.tab {
font-size: larger;
font-weight: bolder;
- color: #fff;
+ color: var(--color-white);
cursor: pointer;
margin: 1.6rem;
padding-bottom: 0.4rem;
@@ -63,27 +66,48 @@
display: flex;
align-items: center;
justify-content: center;
+ flex-direction: column;
+ gap: 10px;
}
.groups {
- overflow: scroll;
+ display: flex;
+ flex-direction: column;
+ align-items: center;
}
-.groups::-webkit-scrollbar {
- width: 6px;
- height: 6px;
+.groups-search {
+ margin: 10px;
+ height: 4rem;
+ width: 100%;
+ position: sticky;
+ top: 0;
+ background: var(--color-white);
+ display: flex;
+ align-items: center;
+ justify-content: center;
}
-.groups::-webkit-scrollbar-thumb {
- background: var(--color-buttons-background);
- border-radius: 1.2rem;
+.groups-search-input {
+ height: 2rem;
+ width: 90%;
+ padding-left: 2px;
}
.groups-list {
padding: 0.8rem;
list-style: none;
- height: 80vh;
+ height: 66vh;
+ overflow-y: scroll;
+}
+.groups-list::-webkit-scrollbar {
+ width: 6px;
+ height: 6px;
+}
+.groups-list::-webkit-scrollbar-thumb {
+ background: var(--color-buttons-background);
+ border-radius: 1.2rem;
}
.groups-list li {
padding: 0.8rem;
- border: 1px solid rgba(0, 0, 0, 0.2);
+ border: 1px solid var(--color-list-border);
margin-bottom: 0.6rem;
border-radius: 0.6rem;
}
@@ -130,7 +154,7 @@
.btn-add-role:not([disabled]),
.btn-create-group {
background: var(--color-buttons-background);
- color: #fff;
+ color: var(--color-white);
border: none;
}
@@ -169,7 +193,7 @@ NOT VERIFIED TEXT ABOVE
*/
.not-verified-tag {
- color: red;
+ color: var(--color-not-verified);
text-align: center;
}
@@ -177,10 +201,9 @@ NOT VERIFIED TEXT ABOVE
.manage-groups {
flex-direction: column-reverse;
padding: 1.2rem;
- gap: 1.2rem;
}
.groups-list {
- height: 60vh;
+ height: 54vh;
}
.group-name {
font-size: large;
diff --git a/discord-groups/utils.js b/groups/utils.js
similarity index 100%
rename from discord-groups/utils.js
rename to groups/utils.js
diff --git a/index.html b/index.html
index c8d8e524..c5d836fb 100644
--- a/index.html
+++ b/index.html
@@ -45,9 +45,7 @@
Online Members
-
- Discord Groups
-
+ Discord Groups
Standup Updates
diff --git a/jest-puppeteer.config.js b/jest-puppeteer.config.js
index 2e254f1c..2c0b3c6e 100644
--- a/jest-puppeteer.config.js
+++ b/jest-puppeteer.config.js
@@ -3,6 +3,7 @@ const baseOptions = {
server: {
command: 'npm start',
port: 8000,
+ launchTimeout: 30000,
},
};
const ciPipelineOptions = {
diff --git a/mock-data/discord-groups/index.js b/mock-data/discord-groups/index.js
deleted file mode 100644
index 0e8fdcc8..00000000
--- a/mock-data/discord-groups/index.js
+++ /dev/null
@@ -1,17 +0,0 @@
-const discordGroups = {
- message: 'Roles fetched successfully!',
- groups: [
- {
- id: 'CqnEhbwtCqdcZdlrixLn',
- date: {
- _seconds: 1683238758,
- _nanoseconds: 183000000,
- },
- createdBy: 'V4rqL1aDecNGoa1IxiCu',
- rolename: 'group-first-daaa',
- roleid: '1103808103641780225',
- },
- ],
-};
-
-module.exports = { discordGroups };
diff --git a/mock-data/groups/index.js b/mock-data/groups/index.js
new file mode 100644
index 00000000..caae9c57
--- /dev/null
+++ b/mock-data/groups/index.js
@@ -0,0 +1,37 @@
+const discordGroups = {
+ message: 'Roles fetched successfully!',
+ groups: [
+ {
+ id: 'CqnEhbwtCqdcZdlrixLn',
+ date: {
+ _seconds: 1683238758,
+ _nanoseconds: 183000000,
+ },
+ createdBy: 'V4rqL1aDecNGoa1IxiCu',
+ rolename: 'group-first-daaa',
+ roleid: '1103808103641780225',
+ },
+ {
+ id: 'Mky71E6f6QWCY5MOBJFy',
+ date: {
+ _seconds: 1687619454,
+ _nanoseconds: 560000000,
+ },
+ createdBy: 'jbGcfZLGYjHwxQ1Zh8ZJ',
+ rolename: 'group-DSA',
+ roleid: '1122182070509244416',
+ },
+ {
+ id: '"mvWVuAxtSuhQtunjcywv"',
+ date: {
+ _seconds: 1684078062,
+ _nanoseconds: 434000000,
+ },
+ createdBy: 'k15z2SLFe1U2J3gshXUG',
+ rolename: 'group-DSA-Coding-Group',
+ roleid: '1107328395722899496',
+ },
+ ],
+};
+
+module.exports = { discordGroups };
diff --git a/mock-data/standup/index.js b/mock-data/standup/index.js
new file mode 100644
index 00000000..5af3e49f
--- /dev/null
+++ b/mock-data/standup/index.js
@@ -0,0 +1,98 @@
+const standupOne = {
+ message: 'Progress document retrieved successfully.',
+ count: 9,
+ data: [
+ {
+ id: '8hhlqHacZ9iWo3rbWHku',
+ date: 1685145600000,
+ createdAt: 1685163538297,
+ blockers: 'Implement error handling for API endpoints',
+ completed: 'Implement error handling for API endpoints',
+ planned: 'Implement error handling for API endpoints',
+ type: 'user',
+ userId: 'YleviOe1SsOML8eitV9W',
+ },
+ {
+ id: 'ANaIkUInoUeAagwMsxHI',
+ date: 1685836800000,
+ createdAt: 1685892283432,
+ blockers: 'Working on a backend Go project',
+ completed: 'Working on a backend Go project',
+ planned: 'Working on a backend Go project',
+ type: 'user',
+ userId: 'YleviOe1SsOML8eitV9W',
+ },
+ {
+ id: 'KYvOM36StltlBNxtW9Mm',
+ date: 1685577600000,
+ createdAt: 1685616571070,
+ blockers: 'Working on a backend Go project',
+ completed: 'Working on a backend Go project',
+ planned: 'Working on a backend Go project',
+ type: 'user',
+ userId: 'YleviOe1SsOML8eitV9W',
+ },
+ {
+ id: 'T8GZ191H8lVTnGBB3tAQ',
+ date: 1685318400000,
+ createdAt: 1685374251104,
+ blockers: 'Implement error handling for API endpoints',
+ completed: 'Implement error handling for API endpoints',
+ planned: 'Implement error handling for API endpoints',
+ type: 'user',
+ userId: 'YleviOe1SsOML8eitV9W',
+ },
+ {
+ id: 'h3eK4lVB5PlOZXX9RFFP',
+ date: 1685750400000,
+ createdAt: 1685783692663,
+ blockers: 'Working on a backend Go project',
+ completed: 'Working on a backend Go project',
+ planned: 'Working on a backend Go project',
+ type: 'user',
+ userId: 'YleviOe1SsOML8eitV9W',
+ },
+ {
+ id: 'jng8Zlsjr90EuGbBQisG',
+ date: 1685059200000,
+ createdAt: 1685115243500,
+ blockers: 'Working on a backend Go project',
+ completed: 'Working on a backend Go project',
+ planned: 'Working on a backend Go project',
+ type: 'user',
+ userId: 'YleviOe1SsOML8eitV9W',
+ },
+ {
+ id: 'nFTXyHfbufj7XY2mguVX',
+ date: 1685491200000,
+ createdAt: 1685506497607,
+ blockers: 'Implement error handling for API endpoints',
+ completed: 'Implement error handling for API endpoints',
+ planned: 'Implement error handling for API endpoints',
+ type: 'user',
+ userId: 'YleviOe1SsOML8eitV9W',
+ },
+ {
+ id: 'sG4sUGTILmxaby9xmU3I',
+ date: 1685404800000,
+ createdAt: 1685453697666,
+ blockers: 'Working on a backend Go project',
+ completed: 'Working on a backend Go project',
+ planned: 'Working on a backend Go project',
+ type: 'user',
+ userId: 'YleviOe1SsOML8eitV9W',
+ },
+ {
+ id: 'xxvvSUglhJQNnHWVyEZ9',
+ date: 1685232000000,
+ createdAt: 1685257952297,
+ blockers: 'Waiting for database access credentials',
+ completed: 'Waiting for database access credentials',
+ planned: 'Waiting for database access credentials',
+ type: 'user',
+ userId: 'YleviOe1SsOML8eitV9W',
+ },
+ ],
+};
+
+module.exports = { standupOne };
diff --git a/mock-data/users/index.js b/mock-data/users/index.js
index e0751d11..0ad10923 100644
--- a/mock-data/users/index.js
+++ b/mock-data/users/index.js
@@ -134,4 +134,16 @@ const filteredUsersData = {
],
};
-module.exports = { allUsersData, filteredUsersData };
+const user = {
+ id: 'iODXB6gfsjaZB9p0XlBw',
+ incompleteUserDetails: false,
+ github_display_name: 'Sunny Sahsi',
+ last_name: 'Sahsi',
+ github_id: 'sahsisunny',
+ first_name: 'Sunny',
+ username: 'sunny',
+ roles: {
+ archived: false,
+ },
+};
+module.exports = { allUsersData, filteredUsersData, user };
diff --git a/standup/script.js b/standup/script.js
index 5ab99dfd..2bd262d9 100644
--- a/standup/script.js
+++ b/standup/script.js
@@ -140,15 +140,15 @@ function createTableRowElement({ userName, imageUrl, userStandupData }) {
});
const completedTextElement = createElement({
type: 'p',
- classList: ['today-standup'],
+ classList: ['today-standup', 'tooltip-text'],
});
const yesterdayStandupElement = createElement({
type: 'p',
- classList: ['yesterday-standup'],
+ classList: ['yesterday-standup', 'tooltip-text'],
});
const blockersElement = createElement({
type: 'p',
- classList: ['blockers'],
+ classList: ['blockers', 'tooltip-text'],
});
const noStandupTextElement = createElement({
type: 'p',
@@ -164,8 +164,8 @@ function createTableRowElement({ userName, imageUrl, userStandupData }) {
);
if (standupStatus[i] === '✅') {
- completedTextElement.textContent += `Today's: ${completedTextData[i]}`;
- yesterdayStandupElement.textContent += `Yesterday's: ${plannedText[i]}`;
+ completedTextElement.textContent += `Yesterday's: ${completedTextData[i]}`;
+ yesterdayStandupElement.textContent += `Today's: ${plannedText[i]}`;
blockersElement.textContent += `Blockers: ${blockersText[i]}`;
tooltipElement.appendChild(completedTextElement);
@@ -219,10 +219,18 @@ async function searchButtonHandler() {
const usernames = searchInput.value
.split(',')
.map((username) => username.trim());
- const filteredUsernames = [...new Set(usernames)];
+ const uniqueUsernames = [...new Set(usernames)];
+ const formattedUsernames = uniqueUsernames.map(
+ (username) => `user:${username}`,
+ );
+ const queryString = formattedUsernames.join('+');
+
+ const newUrl = `${window.location.origin}${window.location.pathname}?q=${queryString}`;
+ window.history.pushState({ path: newUrl }, '', newUrl);
+
tableBodyElement.innerHTML = '';
- for (const username of filteredUsernames) {
+ for (const username of uniqueUsernames) {
tableContainerElement.appendChild(loaderElement);
const userData = await fetchUserData(username);
if (userData) {
@@ -240,13 +248,28 @@ async function searchButtonHandler() {
tableContainerElement.removeChild(loaderElement);
}
+function getUsernames() {
+ const queryData = new URL(
+ decodeURIComponent(window.location.href),
+ ).searchParams.get('q');
+ const initialUsernames = queryData
+ ?.split(' ')
+ .map((username) => username.split(':')[1]);
+ return initialUsernames || [];
+}
+
+function setUsernames(usernames) {
+ searchInput.value = [...new Set(usernames)].join(', ');
+}
+
function handleEnterKeyPress(event) {
if (event.key === 'Enter') {
searchButtonHandler();
}
}
-
+setUsernames(getUsernames());
setupTable();
+
searchButtonElement.addEventListener('click', searchButtonHandler);
searchInput.addEventListener('keyup', handleEnterKeyPress);
@@ -258,3 +281,7 @@ document.addEventListener('click', (event) => {
document.body.style.marginRight = '0%';
}
});
+
+if (getUsernames().length > 0) {
+ searchButtonHandler();
+}
diff --git a/standup/style.css b/standup/style.css
index 90801cbb..1f2998de 100644
--- a/standup/style.css
+++ b/standup/style.css
@@ -179,13 +179,13 @@ tr:hover {
visibility: hidden;
text-align: center;
border-radius: 0.5rem;
- padding: 0.5rem;
+ padding: 1rem;
position: absolute;
z-index: 100;
font-size: 0.7rem;
- width: 15rem;
- right: -125%;
- bottom: 61%;
+ width: 30ch;
+ right: -106%;
+ bottom: 60%;
display: flex;
flex-direction: column;
justify-content: center;
@@ -202,6 +202,12 @@ tr:hover {
border-color: var(--blue-color) transparent transparent transparent;
}
+.tooltip-text {
+ overflow: hidden;
+ text-overflow: ellipsis;
+ white-space: nowrap;
+ width: 100%;
+}
::-webkit-scrollbar {
width: 0.5rem;
height: 0.5rem;
@@ -296,8 +302,7 @@ tr:hover {
right: 0;
color: var(--white-color);
overflow-x: hidden;
- padding-left: 1rem;
- padding-top: 6rem;
+ padding: 1rem;
border-radius: 1rem 0 0 1rem;
background: var(--light-blur-color);
box-shadow: 0 0 0.8rem var(--blue-color);
diff --git a/users/script.js b/users/script.js
index b769f3d3..eccc1c48 100644
--- a/users/script.js
+++ b/users/script.js
@@ -396,6 +396,7 @@ function populateAvailability() {
{ name: 'Active', id: 'ACTIVE' },
{ name: 'Ooo (Out of Office)', id: 'OOO' },
{ name: 'Idle', id: 'IDLE' },
+ { name: 'Onboarding', id: 'ONBOARDING' },
];
for (let i = 0; i < availabilityArr.length; i++) {
const { name, id } = availabilityArr[i];