diff --git a/help/invite-new-users.md b/help/invite-new-users.md index f72455d9fc..f29ac25dab 100644 --- a/help/invite-new-users.md +++ b/help/invite-new-users.md @@ -94,17 +94,38 @@ Organization owners can revoke or resend any invitation or reusable invitation link. Organization administrators can do the same except for invitations for the organization owners role. +### Revoke an invitation + {start_tabs} {settings_tab|invitations} 1. Select the **Invitations** tab. -1. From there, you can view pending invitations, **Revoke** email - invitations and invitation links, or **Resend** email invitations. +2. Find the invitation you want to revoke. + +3. Click the **Revoke** () icon next to the invitation. {end_tabs} +### Resend an invitation + +{start_tabs} + +{settings_tab|invitations} + +1. Select the **Invitations** tab. + +2. Find the invitation you want to resend. + +3. Click the **Resend** () icon next to the invitation. + +{end_tabs} + +!!! warn "" + **Note:** You can **revoke** both email invitations and invitation links, + but you can **resend** only email invitations. + ## Related articles * [Restrict account creation](/help/restrict-account-creation) diff --git a/web/src/settings_invites.ts b/web/src/settings_invites.ts index 74f7116b64..824a7e57f5 100644 --- a/web/src/settings_invites.ts +++ b/web/src/settings_invites.ts @@ -196,6 +196,7 @@ function do_revoke_invite({ function do_resend_invite({$row, invite_id}: {$row: JQuery; invite_id: string}): void { const modal_invite_id = $(".dialog_submit_button").attr("data-invite-id"); const $resend_button = $row.find("button.resend"); + const $check_button = $row.find("button.check"); if (modal_invite_id !== invite_id) { blueslip.error("Invite resending canceled due to non-matching fields."); @@ -224,9 +225,15 @@ function do_resend_invite({$row, invite_id}: {$row: JQuery; invite_id: string}): success() { dialog_widget.hide_dialog_spinner(); dialog_widget.close(); - $resend_button.prop("disabled", true); - $resend_button.text($t({defaultMessage: "Sent!"})); - $resend_button.removeClass("resend button-warning").addClass("sea-green"); + + $resend_button.hide(); + $check_button.removeClass("hide"); + + // Showing a success checkmark for a short time (3 seconds). + setTimeout(() => { + $resend_button.show(); + $check_button.addClass("hide"); + }, 3000); }, }); } @@ -266,8 +273,8 @@ export function on_load_success( const $row = $(this).closest(".invite_row"); const email = $row.find(".email").text(); const referred_by = $row.find(".referred_by").text(); - const invite_id = $(this).attr("data-invite-id")!; - const is_multiuse = $(this).attr("data-is-multiuse")!; + const invite_id = $(this).closest("tr").attr("data-invite-id")!; + const is_multiuse = $(this).closest("tr").attr("data-is-multiuse")!; const ctx = { is_multiuse: is_multiuse === "true", email, @@ -300,7 +307,7 @@ export function on_load_success( const $row = $(this).closest(".invite_row"); const email = $row.find(".email").text(); - const invite_id = $(this).attr("data-invite-id")!; + const invite_id = $(this).closest("tr").attr("data-invite-id")!; const html_body = render_settings_resend_invite_modal({email}); confirm_dialog.launch({ diff --git a/web/styles/settings.css b/web/styles/settings.css index 7be95ac1b5..9c22f0eff5 100644 --- a/web/styles/settings.css +++ b/web/styles/settings.css @@ -1319,26 +1319,6 @@ label.preferences-radio-choice-label { align-items: center; } -.invite-user-link { - display: grid; - grid-template-columns: auto 1fr; - width: fit-content; - align-items: center; - text-decoration: none; - - &:hover { - text-decoration: none; - } - - .zulip-icon-user-plus { - margin-right: 5px; - } - - &:hover .user-settings-invite-user-label { - text-decoration: underline; - } -} - /* -- new settings overlay -- */ #settings_page { height: 95vh; @@ -2273,6 +2253,22 @@ label.preferences-radio-choice-label { width: 110px; } +#admin-user-list .tab-switcher { + margin-left: 0; +} + #data-exports .tab-switcher .ind-tab { width: 160px; } + +#admin_invites_table { + .check:disabled { + opacity: 1; + } + + .check { + &.hide { + display: none; + } + } +} diff --git a/web/templates/settings/admin_invites_list.hbs b/web/templates/settings/admin_invites_list.hbs index aaaa22a800..f67cf70ec1 100644 --- a/web/templates/settings/admin_invites_list.hbs +++ b/web/templates/settings/admin_invites_list.hbs @@ -1,5 +1,5 @@ {{#with invite}} - + {{#if is_multiuse}} @@ -32,14 +32,28 @@ {{invited_as_text}} + {{> ../components/icon_button + icon="trash" + intent="danger" + custom_classes="revoke tippy-zulip-delayed-tooltip" + data-tippy-content=(t "Revoke") + disabled=disable_buttons + }} {{#unless is_multiuse}} - + {{> ../components/icon_button + icon="check" + intent="success" + custom_classes="check hide" + disabled=true + }} + {{> ../components/icon_button + icon="send-dm" + intent="neutral" + custom_classes="resend tippy-zulip-delayed-tooltip" + data-tippy-content=(t "Resend") + disabled=disable_buttons + }} {{/unless}} - {{/with}} diff --git a/web/templates/settings/invites_list_admin.hbs b/web/templates/settings/invites_list_admin.hbs index ef2e9f7bd6..ae0dfd18d4 100644 --- a/web/templates/settings/invites_list_admin.hbs +++ b/web/templates/settings/invites_list_admin.hbs @@ -3,11 +3,12 @@ {{#unless is_admin }}
{{t "You can only view or manage invitations that you sent." }}
{{/unless}} - - - - - + {{> ../components/action_button + label=(t 'Invite users to organization') + attention="quiet" + intent="brand" + custom_classes="user-settings-invite-user-label invite-user-link" + }}

{{t "Invitations "}}