diff --git a/src/components/Empty/Empty.stories.tsx b/src/components/Empty/Empty.stories.tsx
index 2873a4301..58f3e6706 100644
--- a/src/components/Empty/Empty.stories.tsx
+++ b/src/components/Empty/Empty.stories.tsx
@@ -44,6 +44,8 @@ export const Error_State = Empty_Story.bind({});
export const Empty_Messages = Empty_Story.bind({});
export const No_Search_Results = Empty_Story.bind({});
export const Tasks_Complete = Empty_Story.bind({});
+export const Empty_Plan = Empty_Story.bind({});
+export const Empty_Profile = Empty_Story.bind({});
export const Custom_Image = Empty_Story.bind({});
const emptyArgs: Object = {
@@ -78,9 +80,25 @@ Tasks_Complete.args = {
mode: EmptyMode.tasks,
};
+Empty_Plan.args = {
+ ...emptyArgs,
+ mode: EmptyMode.plan,
+};
+
+Empty_Profile.args = {
+ ...emptyArgs,
+ mode: EmptyMode.profile,
+};
+
Custom_Image.args = {
...emptyArgs,
- image: ,
+ image: (
+
+ ),
imageStyle: {},
mode: '',
};
diff --git a/src/components/Empty/Empty.test.tsx b/src/components/Empty/Empty.test.tsx
index 1c58f0cc1..e46aa7ddf 100644
--- a/src/components/Empty/Empty.test.tsx
+++ b/src/components/Empty/Empty.test.tsx
@@ -1,7 +1,11 @@
+import '@testing-library/jest-dom/extend-expect';
+
import React from 'react';
import Enzyme, { mount } from 'enzyme';
import Adapter from '@wojtekmaj/enzyme-adapter-react-17';
-import { Empty } from './';
+import { Empty, EmptyMode } from './';
+import { ConfigProvider } from '../ConfigProvider';
+import { render, waitFor } from '@testing-library/react';
Enzyme.configure({ adapter: new Adapter() });
@@ -15,11 +19,30 @@ describe('Empty', () => {
});
test('empty includes the description class name', () => {
- const wrapper = mount(
+ const { container } = render(
);
- expect(
- wrapper.getDOMNode().querySelector('.description-class')
- ).toBeTruthy();
+ expect(container.querySelector('.description-class')).toBeTruthy();
+ });
+
+ test('empty gets theme from config provider', () => {
+ const { container } = render(
+
+
+
+ );
+ const svgElement = container.querySelector('svg');
+ const pathElement = svgElement.querySelectorAll('path')[0];
+ expect(pathElement).toBeInTheDocument();
+ const fillValue = pathElement.getAttribute('fill');
+ expect(fillValue).toBe('currentColor');
});
});
diff --git a/src/components/Empty/Empty.tsx b/src/components/Empty/Empty.tsx
index 9eec0b299..f8c34524f 100644
--- a/src/components/Empty/Empty.tsx
+++ b/src/components/Empty/Empty.tsx
@@ -3,6 +3,8 @@ import { mergeClasses } from '../../shared/utilities';
import { EmptyMode, EmptyProps } from './Empty.types';
import { DefaultEmptyDataImg } from './SVG/DefaultEmptyDataImg';
import { DefaultEmptyMessagesImg } from './SVG/DefaultEmptyMessagesImg';
+import { DefaultEmptyPlanImg } from './SVG/DefaultEmptyPlanImg';
+import { DefaultEmptyProfileImg } from './SVG/DefaultEmptyProfileImg';
import { DefaultEmptySearchImg } from './SVG/DefaultEmptySearchImg';
import { DefaultServerErrorImg } from './SVG/DefaultServerErrorImg';
import { DefaultTasksCompleteImg } from './SVG/DefaultTasksCompleteImg';
@@ -12,6 +14,8 @@ import styles from './empty.module.scss';
const defaultEmptyDataImg = ;
const defaultEmptyMessagesImg = ;
+const defaultEmptyPlanImg = ;
+const defaultEmptyProfileImg = ;
const defaultEmptySearchImg = ;
const defaultServerErrorImg = ;
const defaultTasksCompleteImg = ;
@@ -41,6 +45,10 @@ export const Empty: FC = React.forwardRef(
return defaultServerErrorImg;
case EmptyMode.messages:
return defaultEmptyMessagesImg;
+ case EmptyMode.plan:
+ return defaultEmptyPlanImg;
+ case EmptyMode.profile:
+ return defaultEmptyProfileImg;
case EmptyMode.search:
return defaultEmptySearchImg;
case EmptyMode.tasks:
diff --git a/src/components/Empty/Empty.types.ts b/src/components/Empty/Empty.types.ts
index ca0ac06d2..6efa57d12 100644
--- a/src/components/Empty/Empty.types.ts
+++ b/src/components/Empty/Empty.types.ts
@@ -2,10 +2,12 @@ import { OcBaseProps } from '../OcBase';
export enum EmptyMode {
data = 'data',
+ error = 'error',
messages = 'messages',
- tasks = 'tasks',
+ plan = 'plan',
+ profile = 'profile',
search = 'search',
- error = 'error',
+ tasks = 'tasks',
}
export interface EmptyProps extends OcBaseProps {
diff --git a/src/components/Empty/SVG/DefaultEmptyDataImg.tsx b/src/components/Empty/SVG/DefaultEmptyDataImg.tsx
index 0e43302ce..bf6008917 100644
--- a/src/components/Empty/SVG/DefaultEmptyDataImg.tsx
+++ b/src/components/Empty/SVG/DefaultEmptyDataImg.tsx
@@ -1,55 +1,66 @@
import React from 'react';
+import styles from '../empty.module.scss';
export const DefaultEmptyDataImg = (): JSX.Element => {
return (
);
diff --git a/src/components/Empty/SVG/DefaultEmptyMessagesImg.tsx b/src/components/Empty/SVG/DefaultEmptyMessagesImg.tsx
index dae228058..ef1762ad9 100644
--- a/src/components/Empty/SVG/DefaultEmptyMessagesImg.tsx
+++ b/src/components/Empty/SVG/DefaultEmptyMessagesImg.tsx
@@ -1,41 +1,45 @@
import React from 'react';
+import styles from '../empty.module.scss';
export const DefaultEmptyMessagesImg = (): JSX.Element => {
return (
diff --git a/src/components/Empty/SVG/DefaultEmptyPlanImg.tsx b/src/components/Empty/SVG/DefaultEmptyPlanImg.tsx
new file mode 100644
index 000000000..e2644fb97
--- /dev/null
+++ b/src/components/Empty/SVG/DefaultEmptyPlanImg.tsx
@@ -0,0 +1,42 @@
+import React from 'react';
+import styles from '../empty.module.scss';
+
+export const DefaultEmptyPlanImg = (): JSX.Element => {
+ return (
+
+ );
+};
diff --git a/src/components/Empty/SVG/DefaultEmptyProfileImg.tsx b/src/components/Empty/SVG/DefaultEmptyProfileImg.tsx
new file mode 100644
index 000000000..b554913bf
--- /dev/null
+++ b/src/components/Empty/SVG/DefaultEmptyProfileImg.tsx
@@ -0,0 +1,45 @@
+import React from 'react';
+import styles from '../empty.module.scss';
+
+export const DefaultEmptyProfileImg = (): JSX.Element => {
+ return (
+
+ );
+};
diff --git a/src/components/Empty/SVG/DefaultEmptySearchImg.tsx b/src/components/Empty/SVG/DefaultEmptySearchImg.tsx
index 3861a172b..6d16f0b0f 100644
--- a/src/components/Empty/SVG/DefaultEmptySearchImg.tsx
+++ b/src/components/Empty/SVG/DefaultEmptySearchImg.tsx
@@ -1,45 +1,74 @@
import React from 'react';
+import styles from '../empty.module.scss';
export const DefaultEmptySearchImg = (): JSX.Element => {
return (
diff --git a/src/components/Empty/SVG/DefaultServerErrorImg.tsx b/src/components/Empty/SVG/DefaultServerErrorImg.tsx
index 1482f5e08..ffc3e69b2 100644
--- a/src/components/Empty/SVG/DefaultServerErrorImg.tsx
+++ b/src/components/Empty/SVG/DefaultServerErrorImg.tsx
@@ -1,86 +1,110 @@
import React from 'react';
+import styles from '../empty.module.scss';
export const DefaultServerErrorImg = (): JSX.Element => {
return (
);
diff --git a/src/components/Empty/SVG/DefaultTasksCompleteImg.tsx b/src/components/Empty/SVG/DefaultTasksCompleteImg.tsx
index a35fc6e85..26afc22b2 100644
--- a/src/components/Empty/SVG/DefaultTasksCompleteImg.tsx
+++ b/src/components/Empty/SVG/DefaultTasksCompleteImg.tsx
@@ -1,86 +1,115 @@
import React from 'react';
+import styles from '../empty.module.scss';
export const DefaultTasksCompleteImg = (): JSX.Element => {
return (
);
diff --git a/src/components/Empty/empty.module.scss b/src/components/Empty/empty.module.scss
index c21062860..e9a98a4e4 100644
--- a/src/components/Empty/empty.module.scss
+++ b/src/components/Empty/empty.module.scss
@@ -1,13 +1,13 @@
.empty {
- margin: 0 8px;
- font-family: $octuple-font-family;
+ margin: 0 $space-xs;
+ font-family: var(--font-stack-full);
font-size: $text-font-size-2;
line-height: $text-line-height-3;
text-align: center;
.empty-image {
height: 120px;
- margin-bottom: 24px;
+ margin-bottom: $space-l;
img {
border-style: none;
@@ -17,6 +17,23 @@
svg {
height: 100%;
margin: auto;
+
+ .accent-color-20 {
+ color: var(--empty-svg-accent-20-color);
+ }
+ .primary-color-10 {
+ color: var(--empty-svg-primary-10-color);
+ }
+ .primary-color-30 {
+ color: var(--empty-svg-primary-30-color);
+ }
+ .white-color {
+ color: var(--empty-svg-white-color);
+ }
+ .white-color-fill-primary-color-30-stroke {
+ fill: var(--empty-svg-white-color);
+ stroke: var(--empty-svg-primary-30-color);
+ }
}
}
@@ -26,7 +43,7 @@
font-weight: $text-font-weight-semibold;
line-height: $text-line-height-5;
text-align: center;
- margin-bottom: 8px;
+ margin-bottom: $space-xs;
}
.empty-description {
@@ -39,11 +56,11 @@
}
.empty-footer {
- margin-top: 16px;
+ margin-top: $space-m;
}
&-default {
- margin: 32px 0;
+ margin: $space-xl 0;
.empty-image {
height: 200px;
diff --git a/src/components/Empty/svg/DefaultEmptyImg.tsx b/src/components/Empty/svg/DefaultEmptyImg.tsx
index 72df33f2d..6ef1262f9 100644
--- a/src/components/Empty/svg/DefaultEmptyImg.tsx
+++ b/src/components/Empty/svg/DefaultEmptyImg.tsx
@@ -1,55 +1,66 @@
import React from 'react';
+import styles from '../empty.module.scss';
export const DefaultEmptyImg = (): JSX.Element => {
return (
);
diff --git a/src/styles/themes/_default-theme.scss b/src/styles/themes/_default-theme.scss
index a7957d605..50a6e5325 100644
--- a/src/styles/themes/_default-theme.scss
+++ b/src/styles/themes/_default-theme.scss
@@ -830,4 +830,10 @@
--accordion-summary-text-color: var(--text-primary-color);
--accordion-summary-text-hover-color: var(--text-primary-color);
--accordion-pill-shape-border-radius: var(--border-radius-xl);
+
+ // ------ Empty theme ------
+ --empty-svg-accent-20-color: var(--accent-color-20);
+ --empty-svg-primary-10-color: var(--primary-color-10);
+ --empty-svg-primary-30-color: var(--primary-color-30);
+ --empty-svg-white-color: var(--white-color);
}