diff --git a/src/_nav.jsx b/src/_nav.jsx index 26f7e0764890..da05474f3a34 100644 --- a/src/_nav.jsx +++ b/src/_nav.jsx @@ -162,6 +162,11 @@ const _nav = [ name: 'Tenant Offboarding', to: '/tenant/administration/tenant-offboarding-wizard', }, + { + component: CNavItem, + name: 'Partner Relationships', + to: '/tenant/administration/partner-relationships', + }, ], }, { diff --git a/src/components/tables/CippTable.jsx b/src/components/tables/CippTable.jsx index 1651911c7be5..3ba432f63677 100644 --- a/src/components/tables/CippTable.jsx +++ b/src/components/tables/CippTable.jsx @@ -16,6 +16,7 @@ import { CAccordionHeader, CAccordionBody, CAccordionItem, + CTooltip, } from '@coreui/react' import DataTable, { createTheme } from 'react-data-table-component' import PropTypes from 'prop-types' @@ -31,13 +32,12 @@ import { faSync, } from '@fortawesome/free-solid-svg-icons' import { cellGenericFormatter } from './CellGenericFormat' -import { ModalService } from '../utilities' +import { CippCodeOffCanvas, ModalService } from '../utilities' import { useLazyGenericGetRequestQuery, useLazyGenericPostRequestQuery } from 'src/store/api/app' import { debounce } from 'lodash-es' import { useSearchParams } from 'react-router-dom' import CopyToClipboard from 'react-copy-to-clipboard' import { setDefaultColumns } from 'src/store/features/app' -import M365Licenses from 'src/data/M365Licenses' const FilterComponent = ({ filterText, onFilter, onClear, filterlist, onFilterPreset }) => ( <> @@ -155,6 +155,7 @@ export default function CippTable({ const [filterviaURL, setFilterviaURL] = React.useState(false) const [originalColumns, setOrginalColumns] = React.useState(columns) const [updatedColumns, setUpdatedColumns] = React.useState(columns) + const [codeOffcanvasVisible, setCodeOffcanvasVisible] = useState(false) if (defaultColumns && defaultColumnsSet === false && endpointName) { const defaultColumnsArray = defaultColumns.split(',').filter((item) => item) @@ -604,16 +605,18 @@ export default function CippTable({ } if (refreshFunction) { defaultActions.push([ - { - refreshFunction((Math.random() + 1).toString(36).substring(7)) - }} - className="m-1" - size="sm" - > - - , + + { + refreshFunction((Math.random() + 1).toString(36).substring(7)) + }} + className="m-1" + size="sm" + > + + + , ]) } @@ -814,6 +817,20 @@ export default function CippTable({ , ]) } + defaultActions.push([ + + { + setCodeOffcanvasVisible(true) + }} + className="m-1" + size="sm" + > + + + , + ]) return ( <>
@@ -981,6 +998,13 @@ export default function CippTable({ {...rest} /> {selectedRows.length >= 1 && Selected {selectedRows.length} items} + setCodeOffcanvasVisible(false)} + title="API Response" + /> )}
diff --git a/src/importsMap.jsx b/src/importsMap.jsx index 0121566555bd..1ce828c16643 100644 --- a/src/importsMap.jsx +++ b/src/importsMap.jsx @@ -33,6 +33,7 @@ import React from 'react' "/identity/reports/azure-ad-connect-report": React.lazy(() => import('./views/identity/reports/AzureADConnectReport')), "/tenant/administration/tenants": React.lazy(() => import('./views/tenant/administration/Tenants')), "/tenant/administration/tenants/edit": React.lazy(() => import('./views/tenant/administration/EditTenant')), + "/tenant/administration/partner-relationships": React.lazy(() => import('./views/tenant/administration/PartnerRelationships')), "/tenant/administration/domains": React.lazy(() => import('./views/tenant/administration/Domains')), "/tenant/administration/alertswizard": React.lazy(() => import('./views/tenant/administration/AlertWizard')), "/tenant/administration/alertrules": React.lazy(() => import('./views/tenant/administration/AlertRules')), diff --git a/src/routes.json b/src/routes.json index 3d8eb476d3fb..7355cb3b9905 100644 --- a/src/routes.json +++ b/src/routes.json @@ -222,6 +222,12 @@ "component": "views/tenant/administration/EditTenant", "allowedRoles": ["admin", "editor", "readonly"] }, + { + "path": "/tenant/administration/partner-relationships", + "name": "Partner Relationships", + "component": "views/tenant/administration/PartnerRelationships", + "allowedRoles": ["admin", "editor", "readonly"] + }, { "path": "/tenant/administration/domains", "name": "Domains", diff --git a/src/views/tenant/administration/GraphExplorer.jsx b/src/views/tenant/administration/GraphExplorer.jsx index 42cfc7f0e2da..bad378c27d3a 100644 --- a/src/views/tenant/administration/GraphExplorer.jsx +++ b/src/views/tenant/administration/GraphExplorer.jsx @@ -500,6 +500,11 @@ const GraphExplorer = () => { placeholder="Select the number of rows to return" /> + + { placeholder="Enter OData search query" /> + + diff --git a/src/views/tenant/administration/PartnerRelationships.jsx b/src/views/tenant/administration/PartnerRelationships.jsx new file mode 100644 index 000000000000..ea05fcb9e02b --- /dev/null +++ b/src/views/tenant/administration/PartnerRelationships.jsx @@ -0,0 +1,78 @@ +import React, { useEffect } from 'react' +import { useSelector } from 'react-redux' +import { CippPageList } from 'src/components/layout' +import { cellGenericFormatter } from 'src/components/tables/CellGenericFormat' + +const PartnerRelationships = () => { + const tenant = useSelector((state) => state.app.currentTenant) + const [tenantColumnSet, setTenantColumn] = React.useState(false) + useEffect(() => { + if (tenant.defaultDomainName === 'AllTenants') { + setTenantColumn(false) + } + if (tenant.defaultDomainName !== 'AllTenants') { + setTenantColumn(true) + } + }, [tenant.defaultDomainName, tenantColumnSet]) + + const columns = [ + { + name: 'Tenant', + selector: (row) => row.Tenant, + sortable: true, + exportSelector: 'Tenant', + omit: tenantColumnSet, + cell: cellGenericFormatter(), + }, + { + name: 'Partner', + selector: (row) => row.TenantInfo?.displayName, + sortable: true, + exportSelector: 'TenantInfo/displayName', + cell: cellGenericFormatter(), + }, + { + name: 'Service Provider', + selector: (row) => row['isServiceProvider'], + sortable: true, + exportSelector: 'isServiceProvider', + cell: cellGenericFormatter(), + }, + { + name: 'Multi Tenant', + selector: (row) => row['isInMultiTenantOrganization'], + sortable: true, + exportSelector: 'isInMultiTenantOrganization', + cell: cellGenericFormatter(), + }, + { + name: 'Partner Info', + selector: (row) => row['TenantInfo'], + sortable: true, + exportSelector: 'TenantInfo', + cell: cellGenericFormatter(), + }, + ] + return ( +
+ +
+ ) +} + +export default PartnerRelationships