diff --git a/client/src/common/homepageOptions.js b/client/src/common/homepageOptions.js new file mode 100644 index 000000000..8eb280ce9 --- /dev/null +++ b/client/src/common/homepageOptions.js @@ -0,0 +1,56 @@ +export const shortcutBox = [ + { + title: 'Request time Off', + iconColor: '#F3FEFA', + description: + 'Cupidatat nulla minim sit duis duis laboris. Sint exercitation.', + }, + { + title: 'Benefits', + iconColor: '#F5F3FE', + description: + 'Cupidatat nulla minim sit duis duis laboris. Sint exercitation.', + }, + { + title: 'Schedule a one-on-one', + iconColor: '#F2F9FF', + description: + 'Cupidatat nulla minim sit duis duis laboris. Sint exercitation.', + }, + { + title: 'Payroll', + iconColor: '#FFFCED', + description: + 'Cupidatat nulla minim sit duis duis laboris. Sint exercitation.', + }, + { + title: 'Submit an expense', + iconColor: '#FDF1F1', + description: + 'Cupidatat nulla minim sit duis duis laboris. Sint exercitation.', + }, + { + title: 'Training', + iconColor: '#EFF1FE', + description: + 'Cupidatat nulla minim sit duis duis laboris. Sint exercitation.', + }, +]; + +export const announcementLists = [ + { + title: 'Office closed on July 2nd', + description: + 'Incididunt Lorem ad sunt proident nulla exercitation consectetur reprehenderit labore qui.', + }, + { + title: 'New Password policy ', + description: + 'Incididunt Lorem ad sunt proident nulla exercitation consectetur reprehenderit labore qui.', + }, + { + title: 'Office closed on July 2nd', + description: + 'Incididunt Lorem ad sunt proident nulla exercitation consectetur reprehenderit labore qui.', + }, +]; diff --git a/client/src/containers/Homepage/AnnouncementList.js b/client/src/containers/Homepage/AnnouncementList.js new file mode 100644 index 000000000..02ce51a4a --- /dev/null +++ b/client/src/containers/Homepage/AnnouncementList.js @@ -0,0 +1,32 @@ +import React from 'react'; +import { FormattedMessage as T, useIntl } from 'react-intl'; +import classNames from 'classnames'; + +import { announcementLists } from 'common/homepageOptions'; + +function AnnouncementBox({ title, description }) { + return ( +
+
{title}
+
{description}
+
+ ); +} + +function AnnouncementList() { + return ( +
+
Announcement
+ + {announcementLists.map(({ title, description }) => ( + + ))} + + + + +
+ ); +} + +export default AnnouncementList; diff --git a/client/src/containers/Homepage/Homepage.js b/client/src/containers/Homepage/Homepage.js index ce12b2a26..22e5d1990 100644 --- a/client/src/containers/Homepage/Homepage.js +++ b/client/src/containers/Homepage/Homepage.js @@ -1,19 +1,19 @@ import React, { useEffect } from 'react'; import DashboardInsider from 'components/Dashboard/DashboardInsider'; +import HomepageContent from './HomepageContent'; import withDashboardActions from 'containers/Dashboard/withDashboardActions'; import withSettings from 'containers/Settings/withSettings'; import { compose } from 'utils'; function DashboardHomepage({ changePageTitle, name }) { - useEffect(() => { - changePageTitle(name) + changePageTitle(name); }, [name, changePageTitle]); return ( - + ); } @@ -23,4 +23,4 @@ export default compose( withSettings(({ organizationSettings }) => ({ name: organizationSettings.name, })), -)(DashboardHomepage); \ No newline at end of file +)(DashboardHomepage); diff --git a/client/src/containers/Homepage/HomepageContent.js b/client/src/containers/Homepage/HomepageContent.js new file mode 100644 index 000000000..fbdec2520 --- /dev/null +++ b/client/src/containers/Homepage/HomepageContent.js @@ -0,0 +1,16 @@ +import React from 'react'; +import ShortcutBoxes from './ShortcutBoxes'; +import AnnouncementList from './AnnouncementList'; + +import 'style/pages/HomePage/HomePage.scss'; + +function HomepageContent() { + return ( +
+ + +
+ ); +} + +export default HomepageContent; diff --git a/client/src/containers/Homepage/ShortcutBoxes.js b/client/src/containers/Homepage/ShortcutBoxes.js new file mode 100644 index 000000000..fb19d9b16 --- /dev/null +++ b/client/src/containers/Homepage/ShortcutBoxes.js @@ -0,0 +1,45 @@ +import React from 'react'; +import { FormattedMessage as T, useIntl } from 'react-intl'; +import classNames from 'classnames'; +import { shortcutBox } from 'common/homepageOptions'; +import { Icon } from 'components'; + +function ShortcutBox({ title, iconColor, description }) { + return ( +
+
+ + + + + + + + +
+
{title}
+
{description}
+
+ ); +} + +function ShortcutBoxes() { + return ( +
+ {shortcutBox.map(({ title, description, iconColor }) => { + return ( + + ); + })} +
+ ); +} + +export default ShortcutBoxes; diff --git a/client/src/lang/en/index.js b/client/src/lang/en/index.js index fb3a36431..802697a27 100644 --- a/client/src/lang/en/index.js +++ b/client/src/lang/en/index.js @@ -322,7 +322,7 @@ export default { full_name: 'Full Name', the_user_has_been_inactivated_successfully: 'The user has been inactivated successfully.', - the_user_has_been_deleted_successfully: + the_user_has_been_deleted_successfully: 'The user has been deleted successfully.', customize_report: 'Customize Report', print: 'Print', @@ -942,7 +942,7 @@ export default { delete_adjustment: 'Delete Adjustment', the_make_adjustment_has_been_created_successfully: 'The make adjustment has been created successfully.', - the_adjustment_has_been_deleted_successfully: + the_adjustment_has_been_deleted_successfully: 'The adjustment has been deleted successfully.', once_delete_this_inventory_a_adjustment_you_will_able_to_restore_it: `Once you delete this inventory a adjustment, you won\'t be able to restore it later. Are you sure you want to delete this invoice?`, select_adjustment_account: 'Select adjustment account', @@ -964,4 +964,5 @@ export default { selected_customers: '{count} Selected Customers', transaction_number: 'Transaction #', running_balance: 'Running balance', + view_all: 'View all', }; diff --git a/client/src/static/json/icons.js b/client/src/static/json/icons.js index da638ee6b..fb1576991 100644 --- a/client/src/static/json/icons.js +++ b/client/src/static/json/icons.js @@ -354,18 +354,22 @@ export default { path: ['M20 11H7.83l5.59-5.59L12 4l-8 8 8 8 1.41-1.41L7.83 13H20v-2z'], viewBox: '0 0 24 24', }, - 'numbers': { + numbers: { path: [ 'M2.9377,11V5.26q0-.3633.0069-.9238T2.98,3.3a3.6334,3.6334,0,0,1-.35.3785q-.1677.1538-.3642.3076L1.16,4.9105.0535,3.5246,3.19,1.0046H5.08V11Z', 'M7.8655,11V9.5158l2.5058-2.5332q.7559-.77,1.2178-1.295a4.512,4.512,0,0,0,.6719-.9521,2.0537,2.0537,0,0,0,.21-.917,1.0375,1.0375,0,0,0-.3711-.875,1.455,1.455,0,0,0-.917-.2871,2.2924,2.2924,0,0,0-1.0712.2661A6.6756,6.6756,0,0,0,9,3.6789L7.8376,2.2926A10.771,10.771,0,0,1,8.7615,1.6a4.4132,4.4132,0,0,1,1.1264-.5323A4.931,4.931,0,0,1,11.3791.8644a3.9291,3.9291,0,0,1,1.7012.3433,2.6249,2.6249,0,0,1,1.1123.9521,2.5386,2.5386,0,0,1,.3926,1.4068A3.5845,3.5845,0,0,1,14.27,5.0788a5.32,5.32,0,0,1-.9307,1.3579q-.6166.6715-1.4981,1.498L10.595,9.1378v.07h4.27V11Z', - 'M18.91,11.14a7.8841,7.8841,0,0,1-1.582-.14,7.3067,7.3067,0,0,1-1.3155-.4062v-1.82a5.5853,5.5853,0,0,0,1.3438.498,5.9318,5.9318,0,0,0,1.3164.16,2.5022,2.5022,0,0,0,1.5742-.3779,1.2582,1.2582,0,0,0,.4556-1.0216,1.105,1.105,0,0,0-.5459-1.0078,3.7194,3.7194,0,0,0-1.8477-.336h-.7422V5.0368h.7558a3.0031,3.0031,0,0,0,1.708-.378,1.167,1.167,0,0,0,.5322-.9941.93.93,0,0,0-.3779-.8052,1.7126,1.7126,0,0,0-1.0225-.2729,3.1339,3.1339,0,0,0-1.28.2451,6.4963,6.4963,0,0,0-.917.4829l-.9248-1.4277a6.0463,6.0463,0,0,1,1.3867-.7212A5.67,5.67,0,0,1,19.4149.8644a3.838,3.838,0,0,1,2.3945.6514,2.08,2.08,0,0,1,.84,1.729,2.2193,2.2193,0,0,1-.6231,1.6518,3.2277,3.2277,0,0,1-1.5332.84v.042a3.1845,3.1845,0,0,1,1.8272.7422,2.1271,2.1271,0,0,1,.623,1.624,2.8,2.8,0,0,1-.4267,1.5185A2.9013,2.9013,0,0,1,21.2,10.7415,5.6336,5.6336,0,0,1,18.91,11.14Z' + 'M18.91,11.14a7.8841,7.8841,0,0,1-1.582-.14,7.3067,7.3067,0,0,1-1.3155-.4062v-1.82a5.5853,5.5853,0,0,0,1.3438.498,5.9318,5.9318,0,0,0,1.3164.16,2.5022,2.5022,0,0,0,1.5742-.3779,1.2582,1.2582,0,0,0,.4556-1.0216,1.105,1.105,0,0,0-.5459-1.0078,3.7194,3.7194,0,0,0-1.8477-.336h-.7422V5.0368h.7558a3.0031,3.0031,0,0,0,1.708-.378,1.167,1.167,0,0,0,.5322-.9941.93.93,0,0,0-.3779-.8052,1.7126,1.7126,0,0,0-1.0225-.2729,3.1339,3.1339,0,0,0-1.28.2451,6.4963,6.4963,0,0,0-.917.4829l-.9248-1.4277a6.0463,6.0463,0,0,1,1.3867-.7212A5.67,5.67,0,0,1,19.4149.8644a3.838,3.838,0,0,1,2.3945.6514,2.08,2.08,0,0,1,.84,1.729,2.2193,2.2193,0,0,1-.6231,1.6518,3.2277,3.2277,0,0,1-1.5332.84v.042a3.1845,3.1845,0,0,1,1.8272.7422,2.1271,2.1271,0,0,1,.623,1.624,2.8,2.8,0,0,1-.4267,1.5185A2.9013,2.9013,0,0,1,21.2,10.7415,5.6336,5.6336,0,0,1,18.91,11.14Z', ], viewBox: '0 0 23 12', }, - "small-tick": { + 'small-tick': { path: [ - 'M10 20C4.48 20 0 15.52 0 10S4.48 0 10 0s10 4.48 10 10-4.48 10-10 10zm5-14c-.28 0-.53.11-.71.29L8 12.59l-2.29-2.3a1.003 1.003 0 00-1.42 1.42l3 3c.18.18.43.29.71.29.28 0 .53-.11.71-.29l7-7A1.003 1.003 0 0015 6z' + 'M10 20C4.48 20 0 15.52 0 10S4.48 0 10 0s10 4.48 10 10-4.48 10-10 10zm5-14c-.28 0-.53.11-.71.29L8 12.59l-2.29-2.3a1.003 1.003 0 00-1.42 1.42l3 3c.18.18.43.29.71.29.28 0 .53-.11.71-.29l7-7A1.003 1.003 0 0015 6z', ], - viewBox: '0 0 20 20' - } + viewBox: '0 0 20 20', + }, + 'arrow-top-right': { + path: ['M9,5v2h6.59L4,18.59L5.41,20L17,8.41V15h2V5H9'], + viewBox: '0 0 24 24', + }, }; diff --git a/client/src/style/pages/HomePage/HomePage.scss b/client/src/style/pages/HomePage/HomePage.scss new file mode 100644 index 000000000..d675a31fe --- /dev/null +++ b/client/src/style/pages/HomePage/HomePage.scss @@ -0,0 +1,107 @@ +.homepage { + &__container { + display: flex; + height: 100%; + margin: 22px 32px; + background-color: transparent; + + .shortcut-boxes { + flex: 2; + display: flex; + flex-wrap: wrap; + background-color: #fff; + border-bottom: 1px solid #d2dce2; + border-right: 1px solid #d2dce2; + + .shortcut-box { + width: 50%; + // height: 174px; + padding: 16px; + border-left: 1px solid #d2dce2; + border-top: 1px solid #d2dce2; + background-color: transparent; + transition: 0.2s; + + &__header { + display: flex; + align-items: center; + justify-content: space-between; + margin-bottom: 14px; + + span > a { + color: #d6d6e0; + } + .header--icon { + width: 38px; + height: 32px; + // background-color:#F3FEFA; + } + } + + &__title { + font-size: 16px; + color: #48485c; + font-weight: 500; + line-height: 1.6rem; + margin-bottom: 10px; + } + &__description { + font-size: 14px; + font-weight: 400; + margin-bottom: 10px; + } + } + } + + .announcements-list { + flex: 1; + flex-shrink: 0; + background-color: #fff; + border: 1px solid #d2dce2; + margin-left: 24px; + display: flex; + flex-direction: column; + padding-bottom: 32px; + width: 100%; + + &__title { + font-size: 16px; + font-weight: 400; + margin: 16px; + } + + .announcement-box { + padding: 16px; + width: 100%; + // margin-bottom: 20px; + + &__title { + font-size: 14px; + font-weight: 500; + margin-bottom: 10px; + } + &____description { + } + + &.announcement-box:not(:last-child) { + // border-top: 1px solid #d2dce2; + border-bottom: 1px solid #d2dce2; + } + } + .btn-view-all { + display: flex; + border-radius: 12px; + background: transparent; + padding: 5px; + margin: 20px; + vertical-align: middle; + text-align: center; + cursor: pointer; + text-decoration: none; + border: 1px solid; + justify-items: center; + justify-content: center; + } + } + } +}