diff --git a/src/registrar/assets/js/get-gov.js b/src/registrar/assets/js/get-gov.js index 7d1b52399..f3457649c 100644 --- a/src/registrar/assets/js/get-gov.js +++ b/src/registrar/assets/js/get-gov.js @@ -1873,6 +1873,41 @@ class MembersTable extends LoadTableBase { constructor() { super('.members__table', '.members__table-wrapper', '#members__search-field', '#members__search-field-submit', '.members__reset-search', '.members__reset-filters', '.members__no-data', '.members__no-search-results'); } + + initShowMoreButtons() { + function toggleShowMoreButton(toggleButton, contentDiv, buttonParentRow) { + const spanElement = toggleButton.querySelector('span'); + const useElement = toggleButton.querySelector('use'); + if (contentDiv.classList.contains('display-none')) { + showElement(contentDiv); + spanElement.textContent = 'Close'; + useElement.setAttribute('xlink:href', '/public/img/sprite.svg#expand_less'); + buttonParentRow.classList.add('hide-td-borders'); + } else { + hideElement(contentDiv); + spanElement.textContent = 'Expand'; + useElement.setAttribute('xlink:href', '/public/img/sprite.svg#expand_more'); + buttonParentRow.classList.remove('hide-td-borders'); + } + } + + let toggleButtons = document.querySelectorAll('.usa-button--show-more-button'); + toggleButtons.forEach((toggleButton) => { + + let dataFor = toggleButton.dataset.for; + let contentDiv = document.getElementById(dataFor); + let buttonParentRow = toggleButton.parentElement.parentElement; + if (contentDiv && contentDiv.tagName.toLowerCase() === 'tr' && contentDiv.classList.contains('show-more-content') && buttonParentRow && buttonParentRow.tagName.toLowerCase() === 'tr') { + toggleButton.addEventListener('click', function() { + toggleShowMoreButton(toggleButton, contentDiv, buttonParentRow); + }); + } else { + console.warn('Found a toggle button with no associated toggleable content or parent row'); + } + + }); + } + /** * Loads rows in the members list, as well as updates pagination around the members list * based on the supplied attributes. @@ -1930,6 +1965,7 @@ class MembersTable extends LoadTableBase { const invited = 'Invited'; data.members.forEach(member => { + const member_id = member.source + member.id; const member_name = member.name; const member_display = member.member_display; const member_permissions = member.permissions; @@ -1979,9 +2015,10 @@ class MembersTable extends LoadTableBase { let domainsHTML = ''; if (num_domains > 0) { - domainsHTML += "
This member is assigned to " + num_domains + " domains:"; - domainsHTML += "
This member is assigned to " + num_domains + " domains:"; + domainsHTML += "
Domains: Can view all organization domains. Can manage domains they are assigned to and edit information about the domain (including DNS settings).
"; - } else if (member_permissions.includes(UserPortfolioPermissionChoices.VIEW_MANAGED_DOMAINS)) { - permissionsHTML += "Domains: Can manage domains they are assigned to and edit information about the domain (including DNS settings).
"; - } + if (member_permissions.includes(UserPortfolioPermissionChoices.VIEW_ALL_DOMAINS)) { + permissionsHTML += "Domains: Can view all organization domains. Can manage domains they are assigned to and edit information about the domain (including DNS settings).
"; + } else if (member_permissions.includes(UserPortfolioPermissionChoices.VIEW_MANAGED_DOMAINS)) { + permissionsHTML += "Domains: Can manage domains they are assigned to and edit information about the domain (including DNS settings).
"; } if (member_permissions.includes(UserPortfolioPermissionChoices.EDIT_REQUESTS)) { - permissionsHTML += "Domain requests: Can view all organization domain requests. Can create domain requests and modify their own requests.
"; + permissionsHTML += "Domain requests: Can view all organization domain requests. Can create domain requests and modify their own requests.
"; } else if (member_permissions.includes(UserPortfolioPermissionChoices.VIEW_ALL_REQUESTS)) { - permissionsHTML += "Domain requests (view-only): Can view all organization domain requests. Can't create or modify any domain requests.
"; + permissionsHTML += "Domain requests (view-only): Can view all organization domain requests. Can't create or modify any domain requests.
"; } if (member_permissions.includes(UserPortfolioPermissionChoices.EDIT_MEMBERS)) { - permissionsHTML += "Members: Can manage members including inviting new members, removing current members, and assigning domains to members."; + permissionsHTML += "
Members: Can manage members including inviting new members, removing current members, and assigning domains to members."; } else if (member_permissions.includes(UserPortfolioPermissionChoices.VIEW_MEMBERS)) { - permissionsHTML += "
Members (view-only): Can view all organizational members. Can't manage any members."; + permissionsHTML += "
class='margin-top-1 p--blockquote'>Members (view-only): Can view all organizational members. Can't manage any members."; } // if there are no additional permissions, display a no additional permissions message if (!permissionsHTML) { permissionsHTML += "
No additional permissions: There are no additional permissions for this member.
"; } // add permissions header in all cases - permissionsHTML = "Member | -Last Active | +Member | +Last Active | Action | diff --git a/src/registrar/views/portfolio_members_json.py b/src/registrar/views/portfolio_members_json.py index 683044bca..b76d185f5 100644 --- a/src/registrar/views/portfolio_members_json.py +++ b/src/registrar/views/portfolio_members_json.py @@ -175,6 +175,7 @@ def serialize_members(request, portfolio, item, user): # Serialize member data member_json = { "id": item.get("id", ""), + "source": item.get("source", ""), "name": " ".join(filter(None, [item.get("first_name", ""), item.get("last_name", "")])), "email": item.get("email_display", ""), "member_display": item.get("member_display", ""),
---|