Skip to content

Commit

Permalink
Merge pull request KelvinTegelaar#2608 from BNWEIN/dev
Browse files Browse the repository at this point in the history
Update Users.jsx
  • Loading branch information
KelvinTegelaar committed Jun 28, 2024
2 parents 8d67e97 + ef0dfb7 commit e4b79a7
Show file tree
Hide file tree
Showing 5 changed files with 180 additions and 5 deletions.
5 changes: 5 additions & 0 deletions src/_nav.jsx
Original file line number Diff line number Diff line change
Expand Up @@ -608,6 +608,11 @@ const _nav = [
name: 'Mailboxes',
to: '/email/administration/mailboxes',
},
{
component: CNavItem,
name: 'Deleted Mailboxes',
to: '/email/administration/deleted-mailboxes',
},
{
component: CNavItem,
name: 'Mailbox Rules',
Expand Down
3 changes: 2 additions & 1 deletion src/importsMap.jsx
Original file line number Diff line number Diff line change
Expand Up @@ -116,7 +116,8 @@ import React from 'react'
"/email/administration/edit-calendar-permissions": React.lazy(() => import('./views/email-exchange/administration/EditCalendarPermissions')),
"/email/administration/view-mobile-devices": React.lazy(() => import('./views/email-exchange/administration/ViewMobileDevices')),
"/email/administration/edit-contact": React.lazy(() => import('./views/email-exchange/administration/EditContact')),
"/email/administration/mailboxes": React.lazy(() => import('./views/email-exchange/administration/MailboxesList')),
"/email/administration/mailboxes": React.lazy(() => import('./views/email-exchange/administration/MailboxesList')),
"/email/administration/deleted-mailboxes": React.lazy(() => import('./views/email-exchange/administration/DeletedMailboxes')),
"/email/administration/mailbox-rules": React.lazy(() => import('./views/email-exchange/administration/MailboxRuleList')),
"/email/administration/Quarantine": React.lazy(() => import('./views/email-exchange/administration/QuarantineList')),
"/email/administration/tenant-allow-block-lists": React.lazy(() => import('./views/email-exchange/administration/ListTenantAllowBlockList')),
Expand Down
6 changes: 6 additions & 0 deletions src/routes.json
Original file line number Diff line number Diff line change
Expand Up @@ -786,6 +786,12 @@
"component": "views/email-exchange/administration/MailboxesList",
"allowedRoles": ["admin", "editor", "readonly"]
},
{
"name": "Deleted Mailboxes",
"path": "/email/administration/deleted-mailboxes",
"component": "views/email-exchange/administration/DeletedMailboxes",
"allowedRoles": ["admin", "editor", "readonly"]
},
{
"name": "List Mailbox Rules",
"path": "/email/administration/mailbox-rules",
Expand Down
159 changes: 159 additions & 0 deletions src/views/email-exchange/administration/DeletedMailboxes.jsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,159 @@
import React, { useState } from 'react'
import { CButton } from '@coreui/react'
import { useSelector } from 'react-redux'
import { faEllipsisV } from '@fortawesome/free-solid-svg-icons'
import { FontAwesomeIcon } from '@fortawesome/react-fontawesome'
import { cellBooleanFormatter } from 'src/components/tables'
import { CippPageList } from 'src/components/layout'
import { TitleButton } from 'src/components/buttons'
import { CippActionsOffcanvas } from 'src/components/utilities'

const Offcanvas = (row, rowIndex, formatExtraData) => {
const tenant = useSelector((state) => state.app.currentTenant)
const [ocVisible, setOCVisible] = useState(false)

const now = new Date() // Get the current date and time
const requestName = `${row.UPN}-${String(now.getDate()).padStart(2, '0')}-${String(
now.getMonth() + 1,
).padStart(2, '0')}-${now.getFullYear()}-${String(now.getHours()).padStart(2, '0')}${String(
now.getMinutes(),
).padStart(2, '0')}`

return (
<>
<CButton size="sm" color="link" onClick={() => setOCVisible(true)}>
<FontAwesomeIcon icon={faEllipsisV} />
</CButton>
<CippActionsOffcanvas
title="Extended Information"
extendedInfo={[
{ label: 'Display Name', value: `${row.displayName}` },
{ label: 'UPN', value: `${row.UPN}` },
{ label: 'Primary SMTP Address', value: `${row.primarySmtpAddress}` },
{ label: 'Recipient Type', value: `${row.recipientType}` },
{ label: 'Recipient Type Details', value: `${row.recipientTypeDetails}` },
{ label: 'Additional Email Addresses', value: `${row.AdditionalEmailAddresses}` },
{ label: 'Exchange Guid', value: `${row.ExchangeGuid}` },
{ label: 'Archive Guid', value: `${row.ArchiveGuid}` },
{ label: 'Id', value: `${row.Id}` },
{ label: 'Date Deleted', value: `${row.WhenSoftDeleted}` },
]}
actions={[
{
label: 'Restore Mailbox',
color: 'info',
modal: true,
modalType: 'POST',
modalBody: {
SourceMailbox: row.UPN,
TenantFilter: tenant.defaultDomainName,
RequestName: requestName,
},
modalUrl: `/api/ExecMailboxRestore`,
modalMessage: 'Select the mailbox to restore to',
modalDropdown: {
url: `/api/ListMailboxes?TenantFilter=${tenant.defaultDomainName}`,
labelField: 'UPN',
valueField: 'UPN',
},
},
]}
placement="end"
visible={ocVisible}
id={row.id}
hideFunction={() => setOCVisible(false)}
/>
</>
)
}

const columns = [
{
name: 'Display Name',
selector: (row) => row['displayName'],
sortable: true,
exportSelector: 'displayName',
},
{
name: 'User Principal Name',
selector: (row) => row['UPN'],
sortable: true,
exportSelector: 'UPN',
minWidth: '350px',
},
{
name: 'Primary SMTP Address',
selector: (row) => row['primarySmtpAddress'],
sortable: true,
exportSelector: 'primarySmtpAddress',
minWidth: '350px',
},
{
name: 'Date Deleted',
selector: (row) => row['WhenSoftDeleted'],
sortable: true,
exportSelector: 'WhenSoftDeleted',
},
{
name: 'Recipient Type',
selector: (row) => row['recipientType'],
omit: true,
exportSelector: 'recipientType',
},
{
name: 'Recipient Type Details',
selector: (row) => row['recipientTypeDetails'],
omit: true,
exportSelector: 'recipientTypeDetails',
},
{
name: 'Additional Email Addresses',
selector: (row) => row['AdditionalEmailAddresses'],
omit: true,
exportSelector: 'AdditionalEmailAddresses',
},
{
name: 'Exchange Guid',
selector: (row) => row['ExchangeGuid'],
sortable: true,
exportSelector: 'ExchangeGuid',
minWidth: '350px',
},
{
name: 'Archive Guid',
selector: (row) => row['ArchiveGuid'],
sortable: true,
exportSelector: 'ArchiveGuid',
},
{
name: 'id',
selector: (row) => row['Id'],
omit: true,
exportSelector: 'Id',
},
{
name: 'Actions',
cell: Offcanvas,
},
]

const DeletedMailboxes = () => {
const tenant = useSelector((state) => state.app.currentTenant)
const titleButton = (
<TitleButton href="/email/tools/mailbox-restore-wizard" title="Restore Mailbox" />
)
return (
<CippPageList
title="Soft Deleted Mailboxes"
titleButton={titleButton}
datatable={{
columns,
path: '/api/ListMailboxes',
reportName: `${tenant?.defaultDomainName}-Deleted-Mailboxes`,
params: { TenantFilter: tenant?.defaultDomainName, SoftDeletedMailbox: true },
}}
/>
)
}

export default DeletedMailboxes
12 changes: 8 additions & 4 deletions src/views/identity/administration/Users.jsx
Original file line number Diff line number Diff line change
Expand Up @@ -247,11 +247,13 @@ const Offcanvas = (row, rowIndex, formatExtraData) => {
modal: true,
modalType: 'POST',
modalBody: {
user: row.userPrincipalName,
username: row.userPrincipalName,
userid: row.userPrincipalName,
TenantFilter: tenant.defaultDomainName,
DisableForwarding: true,
message: row.message,
},
modalUrl: `/api/ExecDisableEmailForward`,
modalUrl: `/api/ExecEmailForward`,
modalMessage: 'Are you sure you want to disable forwarding of this users emails?',
},
{
Expand Down Expand Up @@ -688,10 +690,12 @@ const Users = (row) => {
modal: true,
modalType: 'POST',
modalBody: {
user: '!userPrincipalName',
username: '!userPrincipalName',
userid: '!userPrincipalName',
TenantFilter: tenant.defaultDomainName,
DisableForwarding: true,
},
modalUrl: `/api/ExecDisableEmailForward`,
modalUrl: `/api/ExecEmailForward`,
modalMessage: 'Are you sure you want to disable forwarding of these users emails?',
},
{
Expand Down

0 comments on commit e4b79a7

Please sign in to comment.