Skip to content
This repository has been archived by the owner on Mar 13, 2024. It is now read-only.

Commit

Permalink
[MM-28217] Front-end for displaying company info (#6580)
Browse files Browse the repository at this point in the history
* [MM-28217] Front-end for displaying company info

* Translations

* [MM-28217] Front-end to display company information

* Redux update

* PR feedback

Co-authored-by: Mattermod <[email protected]>
  • Loading branch information
devinbinnie and mattermod authored Oct 7, 2020
1 parent 5d7cb86 commit 6bcee0e
Show file tree
Hide file tree
Showing 5 changed files with 372 additions and 14 deletions.
28 changes: 14 additions & 14 deletions components/admin_console/billing/company_info.tsx
Original file line number Diff line number Diff line change
@@ -1,17 +1,27 @@
// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.
// See LICENSE.txt for license information.

import React from 'react';
import {FormattedMessage} from 'react-intl';
import React, {useEffect} from 'react';
import {useDispatch} from 'react-redux';

import {DispatchFunc} from 'mattermost-redux/types/actions';
import {getCloudCustomer} from 'mattermost-redux/actions/cloud';

import FormattedAdminHeader from 'components/widgets/admin_console/formatted_admin_header';
import BlockableLink from 'components/admin_console/blockable_link';

import CompanyInfoDisplay from './company_info_display';

type Props = {

};

const CompanyInfo: React.FC<Props> = () => {
const dispatch = useDispatch<DispatchFunc>();

useEffect(() => {
dispatch(getCloudCustomer());
}, []);

return (
<div className='wrapper--fixed CompanyInfo'>
<FormattedAdminHeader
Expand All @@ -20,17 +30,7 @@ const CompanyInfo: React.FC<Props> = () => {
/>
<div className='admin-console__wrapper'>
<div className='admin-console__content'>
<div style={{border: '1px solid #000', width: '100%', height: '432px'}}>
{'Company Details Card'}
<BlockableLink
to='/admin_console/billing/company_info_edit'
>
<FormattedMessage
id='admin.billing.company_info.add'
defaultMessage='Add Company Information'
/>
</BlockableLink>
</div>
<CompanyInfoDisplay/>
<div style={{border: '1px solid #000', width: '100%', height: '194px', marginTop: '20px'}}>
{'Billing Admins Card'}
</div>
Expand Down
135 changes: 135 additions & 0 deletions components/admin_console/billing/company_info_display.scss
Original file line number Diff line number Diff line change
@@ -0,0 +1,135 @@
.CompanyInfoDisplay {
background-color: var(--sys-center-channel-bg);
border: 1px solid rgba(var(--sys-center-channel-color-rgb), 0.08);
box-shadow: 0px 2px 3px rgba(0, 0, 0, 0.08);
border-radius: 4px;
color: var(--sys-center-channel-color);
}

.CompanyInfoDisplay__header {
padding: 28px 32px 24px 32px;
border-bottom: 1px solid rgba(var(--sys-center-channel-color-rgb), 0.08);
display: flex;
align-items: center;
}

.CompanyInfoDisplay__headerText-top {
font-weight: 600;
font-size: 16px;
line-height: 24px;
}

.CompanyInfoDisplay__headerText-bottom {
font-size: 14px;
line-height: 20px;
}

.CompanyInfoDisplay__addInfo {
margin-left: auto;
}

.CompanyInfoDisplay__addInfoButton {
background: var(--sys-button-bg);
padding: 8px 16px;
border-radius: 4px;
display: flex;
color: var(--sys-button-color);
align-items: center;

&:hover:not(.disabled) {
background: linear-gradient(0deg, rgba(var(--sys-center-channel-color-rgb), 0.16), rgba(var(--sys-center-channel-color-rgb), 0.16)), var(--sys-button-bg);
text-decoration: none;
color: var(--sys-button-color);
}

&:active {
background: linear-gradient(0deg, rgba(var(--sys-center-channel-color-rgb), 0.32), rgba(var(--sys-center-channel-color-rgb), 0.32)), var(--sys-button-bg);
text-decoration: none;
color: var(--sys-button-color);
}

&:focus {
box-shadow: inset 0 0 0 2px var(--sys-sidebar-text-active-border);
text-decoration: none;
color: var(--sys-button-color);
}

&.disabled {
color: rgba(var(--sys-center-channel-color-rgb), 0.32);
background: rgba(var(--sys-center-channel-color-rgb), 0.08);
}

> i {
font-size: 14.4px;
line-height: 17px;

&::before {
margin: 0;
}
}

> span {
font-weight: 600;
font-size: 12px;
line-height: 9px;
margin-left: 4px;
}
}

.CompanyInfoDisplay__noCompanyInfo {
display: flex;
flex-direction: column;
align-items: center;
padding: 48px;
}

.CompanyInfoDisplay__noCompanyInfo-message {
margin-top: 24px;
font-size: 14px;
line-height: 20px;
color: var(--sys-center-channel-color);
}

.CompanyInfoDisplay__noCompanyInfo-link {
font-weight: 600;
font-size: 14px;
line-height: 14px;
color: var(--sys-button-bg);
margin-top: 20px;
margin-bottom: 12px;
}

.CompanyInfoDisplay__companyInfo {
padding: 28px 45px 30px 32px;
color: var(--sys-center-channel-color);
font-size: 14px;
line-height: 20px;
display: flex;
}

.CompanyInfoDisplay__companyInfo-name {
font-weight: 600;
}

.CompanyInfoDisplay__companyInfo-addressTitle {
font-weight: 600;
margin-top: 16px;
}

.CompanyInfoDisplay__companyInfo-address > div {
margin-top: 4px;
}

.CompanyInfoDisplay__companyInfo-edit {
margin-left: auto;
}

.CompanyInfoDisplay__companyInfo-editButton {
color: rgba(var(--sys-center-channel-color-rgb), 0.56);
font-size: 18px;

&:hover, &:focus {
text-decoration: none;
color: var(--sys-center-channel-color);
}
}
125 changes: 125 additions & 0 deletions components/admin_console/billing/company_info_display.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,125 @@
// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.
// See LICENSE.txt for license information.

import React from 'react';
import {FormattedMessage} from 'react-intl';
import {useSelector} from 'react-redux';

import BlockableLink from 'components/admin_console/blockable_link';
import FormattedMarkdownMessage from 'components/formatted_markdown_message';
import noCompanyInfoGraphic from 'images/no_company_info_graphic.svg';
import {GlobalState} from 'types/store';

import './company_info_display.scss';

const addInfoButton = (
<div className='CompanyInfoDisplay__addInfo'>
<BlockableLink
to='/admin_console/billing/company_info_edit'
className='CompanyInfoDisplay__addInfoButton'
>
<i className='icon icon-plus'/>
<FormattedMessage
id='admin.billing.company_info.add'
defaultMessage='Add Company Information'
/>
</BlockableLink>
</div>
);

const noCompanyInfoSection = (
<div className='CompanyInfoDisplay__noCompanyInfo'>
<img
className='ComapnyInfoDisplay__noCompanyInfo-graphic'
src={noCompanyInfoGraphic}
/>
<div className='CompanyInfoDisplay__noCompanyInfo-message'>
<FormattedMessage
id='admin.billing.company_info_display.noCompanyInfo'
defaultMessage='There is currently no company information on file.'
/>
</div>
<BlockableLink
to='/admin_console/billing/company_info_edit'
className='CompanyInfoDisplay__noCompanyInfo-link'
>
<FormattedMessage
id='admin.billing.company_info.add'
defaultMessage='Add Company Information'
/>
</BlockableLink>
</div>
);

const CompanyInfoDisplay: React.FC = () => {
const companyInfo = useSelector((state: GlobalState) => state.entities.cloud.customer);

let body = noCompanyInfoSection;

if (companyInfo) {
const address = companyInfo.company_address || companyInfo.billing_address;
body = (
<div className='CompanyInfoDisplay__companyInfo'>
<div className='CompanyInfoDisplay__companyInfo-text'>
<div className='CompanyInfoDisplay__companyInfo-name'>
{companyInfo.name}
</div>
<div className='CompanyInfoDisplay__companyInfo-numEmployees'>
<FormattedMarkdownMessage
id='admin.billing.company_info.employees'
defaultMessage='{employees} employees'
values={{employees: companyInfo.num_employees}}
/>
</div>
<div className='CompanyInfoDisplay__companyInfo-addressTitle'>
<FormattedMessage
id='admin.billing.company_info.companyAddress'
defaultMessage='Company Address'
/>
</div>
<div className='CompanyInfoDisplay__companyInfo-address'>
<div>{address.line1}</div>
{address.line2 && <div>{address.line2}</div>}
<div>{`${address.city}, ${address.state}, ${address.postal_code}`}</div>
<div>{address.country}</div>
</div>
</div>
<div className='CompanyInfoDisplay__companyInfo-edit'>
<BlockableLink
to='/admin_console/billing/company_info_edit'
className='CompanyInfoDisplay__companyInfo-editButton'
>
<i className='icon icon-pencil-outline'/>
</BlockableLink>
</div>
</div>
);
}

return (
<div className='CompanyInfoDisplay'>
<div className='CompanyInfoDisplay__header'>
<div className='CompanyInfoDisplay__headerText'>
<div className='CompanyInfoDisplay__headerText-top'>
<FormattedMessage
id='admin.billing.company_info_display.companyDetails'
defaultMessage='Company Details'
/>
</div>
<div className='CompanyInfoDisplay__headerText-bottom'>
<FormattedMessage
id='admin.billing.company_info_display.provideDetails'
defaultMessage='Provide your company name and address'
/>
</div>
</div>
{!companyInfo && addInfoButton}
</div>
<div className='CompanyInfoDisplay__body'>
{body}
</div>
</div>
);
};

export default CompanyInfoDisplay;
5 changes: 5 additions & 0 deletions i18n/en.json
Original file line number Diff line number Diff line change
Expand Up @@ -201,10 +201,15 @@
"admin.authentication.saml": "SAML 2.0",
"admin.authentication.signup": "Signup",
"admin.banner.heading": "Note:",
"admin.billing.company_info_display.companyDetails": "Company Details",
"admin.billing.company_info_display.noCompanyInfo": "There is currently no company information on file.",
"admin.billing.company_info_display.provideDetails": "Provide your company name and address",
"admin.billing.company_info_edit.cancel": "Cancel",
"admin.billing.company_info_edit.save": "Save info",
"admin.billing.company_info_edit.title": "Edit Company Information",
"admin.billing.company_info.add": "Add Company Information",
"admin.billing.company_info.companyAddress": "Company Address",
"admin.billing.company_info.employees": "{employees} employees",
"admin.billing.company_info.title": "Company Information",
"admin.billing.history.allPaymentsShowHere": "All of your monthly payments will show here",
"admin.billing.history.date": "Date",
Expand Down
Loading

0 comments on commit 6bcee0e

Please sign in to comment.