@unbxd-ui/unbxd-react-components 0.2.105 → 0.2.107-beta.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.babelrc +4 -0
- package/.eslintrc.js +38 -0
- package/CONTRIBUTE.md +105 -0
- package/components/Accordian/Accordian.js +45 -13
- package/components/Accordian/Accordian.stories.js +25 -6
- package/components/Accordian/index.js +3 -0
- package/components/Button/Button.js +26 -9
- package/components/Button/Button.stories.js +14 -1
- package/components/Button/DropdownButton.js +31 -9
- package/components/Button/DropdownButton.stories.js +23 -6
- package/components/Button/index.js +8 -1
- package/components/DataLoader/DataLoader.js +40 -10
- package/components/DataLoader/DataLoader.stories.js +30 -5
- package/components/DataLoader/index.js +3 -0
- package/components/Form/Checkbox.js +42 -14
- package/components/Form/DragDropFileUploader.js +42 -12
- package/components/Form/Dropdown.js +181 -104
- package/components/Form/FileUploader.js +32 -10
- package/components/Form/Form.js +45 -15
- package/components/Form/FormElementWrapper.js +7 -2
- package/components/Form/Input.js +72 -27
- package/components/Form/RadioList.js +48 -17
- package/components/Form/RangeSlider.js +73 -37
- package/components/Form/ServerPaginatedDDList.js +130 -86
- package/components/Form/Textarea.js +43 -18
- package/components/Form/Toggle.js +48 -16
- package/components/Form/index.js +30 -18
- package/components/Form/stories/Checkbox.stories.js +12 -1
- package/components/Form/stories/DragDropFileUploader.stories.js +8 -0
- package/components/Form/stories/Dropdown.stories.js +24 -6
- package/components/Form/stories/FileUploader.stories.js +8 -0
- package/components/Form/stories/FormDefault.stories.js +21 -1
- package/components/Form/stories/RadioList.stories.js +12 -1
- package/components/Form/stories/RangeSlider.stories.js +15 -1
- package/components/Form/stories/TextInput.stories.js +19 -3
- package/components/Form/stories/Textarea.stories.js +12 -1
- package/components/Form/stories/Toggle.stories.js +7 -0
- package/components/Form/stories/form.stories.js +40 -3
- package/components/InlineModal/InlineModal.js +51 -14
- package/components/InlineModal/InlineModal.stories.js +14 -2
- package/components/InlineModal/index.js +6 -1
- package/components/List/List.js +24 -9
- package/components/List/index.js +3 -0
- package/components/List/list.stories.js +10 -0
- package/components/Modal/Modal.js +49 -17
- package/components/Modal/Modal.stories.js +15 -1
- package/components/Modal/index.js +3 -0
- package/components/NotificationComponent/NotificationComponent.js +34 -11
- package/components/NotificationComponent/NotificationComponent.stories.js +6 -0
- package/components/NotificationComponent/index.js +3 -0
- package/components/ProgressBar/ProgressBar.js +11 -2
- package/components/ProgressBar/ProgressBar.stories.js +6 -0
- package/components/ProgressBar/index.js +3 -0
- package/components/Table/BaseTable.js +134 -69
- package/components/Table/PaginationComponent.js +23 -11
- package/components/Table/Table.js +149 -68
- package/components/Table/Table.stories.js +67 -22
- package/components/Table/index.js +4 -0
- package/components/TabsComponent/TabsComponent.js +57 -20
- package/components/TabsComponent/TabsComponent.stories.js +16 -0
- package/components/TabsComponent/index.js +3 -0
- package/components/Tooltip/Tooltip.js +47 -25
- package/components/Tooltip/Tooltip.stories.js +6 -0
- package/components/Tooltip/index.js +3 -0
- package/components/core.css +1 -3
- package/components/index.js +17 -1
- package/components/theme.css +0 -2
- package/lib/Readme.md +82 -0
- package/lib/components/Accordian/Accordian.js +117 -0
- package/lib/components/Accordian/Accordian.stories.js +137 -0
- package/lib/components/Accordian/index.js +10 -0
- package/lib/components/Button/Button.js +84 -0
- package/lib/components/Button/Button.stories.js +89 -0
- package/lib/components/Button/DropdownButton.js +77 -0
- package/lib/components/Button/DropdownButton.stories.js +51 -0
- package/lib/components/Button/index.js +32 -0
- package/lib/components/DataLoader/DataLoader.js +88 -0
- package/lib/components/DataLoader/DataLoader.stories.js +77 -0
- package/lib/components/DataLoader/index.js +10 -0
- package/lib/components/Form/Checkbox.js +93 -0
- package/lib/components/Form/DragDropFileUploader.js +85 -0
- package/lib/components/Form/Dropdown.js +478 -0
- package/lib/components/Form/FileUploader.js +81 -0
- package/lib/components/Form/Form.js +106 -0
- package/lib/components/Form/FormElementWrapper.js +27 -0
- package/lib/components/Form/Input.js +140 -0
- package/lib/components/Form/RadioList.js +111 -0
- package/lib/components/Form/RangeSlider.js +142 -0
- package/lib/components/Form/ServerPaginatedDDList.js +267 -0
- package/lib/components/Form/Textarea.js +95 -0
- package/lib/components/Form/Toggle.js +117 -0
- package/lib/components/Form/index.js +73 -0
- package/lib/components/Form/stories/Checkbox.stories.js +54 -0
- package/lib/components/Form/stories/DragDropFileUploader.stories.js +27 -0
- package/lib/components/Form/stories/Dropdown.stories.js +114 -0
- package/lib/components/Form/stories/FileUploader.stories.js +31 -0
- package/lib/components/Form/stories/FormDefault.stories.js +117 -0
- package/lib/components/Form/stories/RadioList.stories.js +55 -0
- package/lib/components/Form/stories/RangeSlider.stories.js +82 -0
- package/lib/components/Form/stories/TextInput.stories.js +79 -0
- package/lib/components/Form/stories/Textarea.stories.js +48 -0
- package/lib/components/Form/stories/Toggle.stories.js +25 -0
- package/lib/components/Form/stories/form.stories.js +240 -0
- package/lib/components/InlineModal/InlineModal.js +146 -0
- package/lib/components/InlineModal/InlineModal.stories.js +61 -0
- package/lib/components/InlineModal/index.js +24 -0
- package/lib/components/List/List.js +76 -0
- package/lib/components/List/index.js +10 -0
- package/lib/components/List/list.stories.js +38 -0
- package/lib/components/Modal/Modal.js +117 -0
- package/lib/components/Modal/Modal.stories.js +55 -0
- package/lib/components/Modal/index.js +10 -0
- package/lib/components/NotificationComponent/NotificationComponent.js +76 -0
- package/lib/components/NotificationComponent/NotificationComponent.stories.js +29 -0
- package/lib/components/NotificationComponent/index.js +10 -0
- package/lib/components/ProgressBar/ProgressBar.js +49 -0
- package/lib/components/ProgressBar/ProgressBar.stories.js +21 -0
- package/lib/components/ProgressBar/index.js +10 -0
- package/lib/components/Table/BaseTable.js +352 -0
- package/lib/components/Table/PaginationComponent.js +87 -0
- package/lib/components/Table/Table.js +333 -0
- package/lib/components/Table/Table.stories.js +204 -0
- package/lib/components/Table/index.js +17 -0
- package/lib/components/TabsComponent/TabsComponent.js +134 -0
- package/lib/components/TabsComponent/TabsComponent.stories.js +65 -0
- package/lib/components/TabsComponent/index.js +10 -0
- package/lib/components/Tooltip/Tooltip.js +102 -0
- package/lib/components/Tooltip/Tooltip.stories.js +25 -0
- package/lib/components/Tooltip/index.js +10 -0
- package/lib/components/core.css +3 -0
- package/lib/components/core.scss +29 -0
- package/lib/components/index.js +159 -0
- package/lib/components/theme.css +3 -0
- package/lib/components/theme.scss +11 -0
- package/lib/package-lock.json +20607 -0
- package/lib/package.json +94 -0
- package/package.json +1 -1
- package/src/Intro.stories.mdx +119 -0
- package/src/components/Accordian/Accordian.js +89 -0
- package/src/components/Accordian/Accordian.stories.js +92 -0
- package/src/components/Accordian/accordianCore.css +1 -0
- package/src/components/Accordian/accordianCore.scss +8 -0
- package/src/components/Accordian/accordianTheme.css +1 -0
- package/src/components/Accordian/accordianTheme.scss +6 -0
- package/src/components/Accordian/index.js +3 -0
- package/src/components/Button/Button.js +67 -0
- package/src/components/Button/Button.stories.js +103 -0
- package/src/components/Button/DropdownButton.js +60 -0
- package/src/components/Button/DropdownButton.stories.js +38 -0
- package/src/components/Button/button.css +1 -0
- package/src/components/Button/buttonTheme.css +1 -0
- package/src/components/Button/buttonTheme.scss +45 -0
- package/src/components/Button/index.js +5 -0
- package/src/components/DataLoader/DataLoader.js +86 -0
- package/src/components/DataLoader/DataLoader.stories.js +72 -0
- package/src/components/DataLoader/index.js +3 -0
- package/src/components/Form/Checkbox.js +73 -0
- package/src/components/Form/DragDropFileUploader.js +67 -0
- package/src/components/Form/Dropdown.js +430 -0
- package/src/components/Form/FileUploader.js +64 -0
- package/src/components/Form/Form.js +83 -0
- package/src/components/Form/FormElementWrapper.js +22 -0
- package/src/components/Form/Input.js +121 -0
- package/src/components/Form/RadioList.js +86 -0
- package/src/components/Form/RangeSlider.js +100 -0
- package/src/components/Form/ServerPaginatedDDList.js +231 -0
- package/src/components/Form/Textarea.js +76 -0
- package/src/components/Form/Toggle.js +96 -0
- package/src/components/Form/form.css +1 -0
- package/src/components/Form/formCore.css +1 -0
- package/src/components/Form/formCore.scss +142 -0
- package/src/components/Form/formTheme.css +1 -0
- package/src/components/Form/formTheme.scss +27 -0
- package/src/components/Form/index.js +13 -0
- package/src/components/Form/stories/Checkbox.stories.js +41 -0
- package/src/components/Form/stories/DragDropFileUploader.stories.js +21 -0
- package/src/components/Form/stories/Dropdown.stories.js +124 -0
- package/src/components/Form/stories/FileUploader.stories.js +21 -0
- package/src/components/Form/stories/FormDefault.stories.js +87 -0
- package/src/components/Form/stories/RadioList.stories.js +48 -0
- package/src/components/Form/stories/RangeSlider.stories.js +84 -0
- package/src/components/Form/stories/TextInput.stories.js +77 -0
- package/src/components/Form/stories/Textarea.stories.js +43 -0
- package/src/components/Form/stories/Toggle.stories.js +14 -0
- package/src/components/Form/stories/form.stories.js +216 -0
- package/src/components/InlineModal/InlineModal.js +135 -0
- package/src/components/InlineModal/InlineModal.stories.js +54 -0
- package/src/components/InlineModal/index.js +4 -0
- package/src/components/InlineModal/inlineModal.css +1 -0
- package/src/components/InlineModal/inlineModalCore.css +1 -0
- package/src/components/InlineModal/inlineModalCore.scss +31 -0
- package/src/components/InlineModal/inlineModalTheme.css +1 -0
- package/src/components/InlineModal/inlineModalTheme.scss +16 -0
- package/src/components/List/List.js +72 -0
- package/src/components/List/index.js +3 -0
- package/src/components/List/list.css +1 -0
- package/src/components/List/list.stories.js +28 -0
- package/src/components/List/listCore.css +1 -0
- package/src/components/List/listCore.scss +6 -0
- package/src/components/List/listTheme.css +0 -0
- package/src/components/List/listTheme.scss +0 -0
- package/src/components/Modal/Modal.js +99 -0
- package/src/components/Modal/Modal.stories.js +54 -0
- package/src/components/Modal/index.js +3 -0
- package/src/components/Modal/modal.css +1 -0
- package/src/components/Modal/modalCore.css +1 -0
- package/src/components/Modal/modalCore.scss +34 -0
- package/src/components/Modal/modalTheme.css +0 -0
- package/src/components/Modal/modalTheme.scss +0 -0
- package/src/components/NotificationComponent/NotificationComponent.js +58 -0
- package/src/components/NotificationComponent/NotificationComponent.stories.js +28 -0
- package/src/components/NotificationComponent/index.js +3 -0
- package/src/components/NotificationComponent/notificationComponent.css +1 -0
- package/src/components/NotificationComponent/notificationTheme.css +1 -0
- package/src/components/NotificationComponent/notificationTheme.scss +30 -0
- package/src/components/ProgressBar/ProgressBar.js +45 -0
- package/src/components/ProgressBar/ProgressBar.stories.js +14 -0
- package/src/components/ProgressBar/index.js +3 -0
- package/src/components/ProgressBar/progressBar.css +1 -0
- package/src/components/ProgressBar/progressBarCore.css +1 -0
- package/src/components/ProgressBar/progressBarCore.scss +14 -0
- package/src/components/ProgressBar/progressBarTheme.css +0 -0
- package/src/components/ProgressBar/progressBarTheme.scss +0 -0
- package/src/components/Table/BaseTable.js +306 -0
- package/src/components/Table/PaginationComponent.js +73 -0
- package/src/components/Table/Table.js +295 -0
- package/src/components/Table/Table.stories.js +198 -0
- package/src/components/Table/index.js +8 -0
- package/src/components/Table/table.css +1 -0
- package/src/components/Table/tableCore.css +1 -0
- package/src/components/Table/tableCore.scss +94 -0
- package/src/components/Table/tableTheme.css +1 -0
- package/src/components/Table/tableTheme.scss +34 -0
- package/src/components/TabsComponent/TabsComponent.js +99 -0
- package/src/components/TabsComponent/TabsComponent.stories.js +69 -0
- package/src/components/TabsComponent/index.js +3 -0
- package/src/components/TabsComponent/tabs.css +1 -0
- package/src/components/TabsComponent/tabsCore.css +1 -0
- package/src/components/TabsComponent/tabsCore.scss +59 -0
- package/src/components/TabsComponent/tabsTheme.css +0 -0
- package/src/components/TabsComponent/tabsTheme.scss +0 -0
- package/src/components/Tooltip/Tooltip.js +87 -0
- package/src/components/Tooltip/Tooltip.stories.js +16 -0
- package/src/components/Tooltip/index.js +3 -0
- package/src/components/Tooltip/tooltipCore.css +1 -0
- package/src/components/Tooltip/tooltipCore.scss +22 -0
- package/src/components/Tooltip/tooltipTheme.css +1 -0
- package/src/components/Tooltip/tooltipTheme.scss +21 -0
- package/src/components/core.css +1 -0
- package/src/components/core.scss +29 -0
- package/src/components/index.js +38 -0
- package/src/components/theme.css +1 -0
- package/src/components/theme.scss +11 -0
- package/src/core/Validators.js +34 -0
- package/src/core/customHooks.js +20 -0
- package/src/core/dataLoader.js +143 -0
- package/src/core/dataLoader.stories.js +123 -0
- package/src/core/index.js +3 -0
- package/src/core/utils.js +95 -0
- package/src/index.js +68 -0
- package/vscode-templates/NewStoryTemplate.stories.js +8 -0
- /package/{Readme.md → README.md} +0 -0
- /package/{components → lib/components}/Accordian/accordianCore.css +0 -0
- /package/{components → lib/components}/Accordian/accordianTheme.css +0 -0
- /package/{components → lib/components}/Button/buttonTheme.css +0 -0
- /package/{components → lib/components}/Form/formCore.css +0 -0
- /package/{components → lib/components}/Form/formTheme.css +0 -0
- /package/{components → lib/components}/InlineModal/inlineModalCore.css +0 -0
- /package/{components → lib/components}/InlineModal/inlineModalTheme.css +0 -0
- /package/{components → lib/components}/List/listCore.css +0 -0
- /package/{components → lib/components}/List/listTheme.css +0 -0
- /package/{components → lib/components}/Modal/modalCore.css +0 -0
- /package/{components → lib/components}/Modal/modalTheme.css +0 -0
- /package/{components → lib/components}/NotificationComponent/notificationTheme.css +0 -0
- /package/{components → lib/components}/ProgressBar/progressBarCore.css +0 -0
- /package/{components → lib/components}/ProgressBar/progressBarTheme.css +0 -0
- /package/{components → lib/components}/Table/tableCore.css +0 -0
- /package/{components → lib/components}/Table/tableTheme.css +0 -0
- /package/{components → lib/components}/TabsComponent/tabsCore.css +0 -0
- /package/{components → lib/components}/TabsComponent/tabsTheme.css +0 -0
- /package/{components → lib/components}/Tooltip/tooltipCore.css +0 -0
- /package/{components → lib/components}/Tooltip/tooltipTheme.css +0 -0
- /package/{core → lib/core}/Validators.js +0 -0
- /package/{core → lib/core}/customHooks.js +0 -0
- /package/{core → lib/core}/dataLoader.js +0 -0
- /package/{core → lib/core}/dataLoader.stories.js +0 -0
- /package/{core → lib/core}/index.js +0 -0
- /package/{core → lib/core}/utils.js +0 -0
- /package/{index.js → lib/index.js} +0 -0
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
import PropTypes from "prop-types";
|
|
3
|
+
|
|
4
|
+
const ListItem = (props) => {
|
|
5
|
+
let { itemData = {} } = props;
|
|
6
|
+
let { name } = itemData;
|
|
7
|
+
|
|
8
|
+
return (<li className="RCB-list-item">{name}</li>);
|
|
9
|
+
};
|
|
10
|
+
|
|
11
|
+
ListItem.propTypes = {
|
|
12
|
+
itemData: PropTypes.shape({
|
|
13
|
+
id: PropTypes.string.isRequired,
|
|
14
|
+
name: PropTypes.string.isRequired
|
|
15
|
+
}).isRequired
|
|
16
|
+
};
|
|
17
|
+
|
|
18
|
+
const List = (props) => {
|
|
19
|
+
const {
|
|
20
|
+
className = "",
|
|
21
|
+
items,
|
|
22
|
+
idAttribute,
|
|
23
|
+
ListItem,
|
|
24
|
+
showNoDataMsg,
|
|
25
|
+
noDataComponent,
|
|
26
|
+
...restProps
|
|
27
|
+
} = props;
|
|
28
|
+
|
|
29
|
+
if (!items.length && showNoDataMsg) {
|
|
30
|
+
return noDataComponent;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
return (<ul className={`RCB-list ${className}`}>
|
|
34
|
+
{items.map((itemData, index) => {
|
|
35
|
+
return (
|
|
36
|
+
<ListItem itemData={itemData} index={index} key={itemData[idAttribute]} idAttribute={idAttribute} {...restProps} />
|
|
37
|
+
)
|
|
38
|
+
})}
|
|
39
|
+
</ul>);
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
const DefaultNoDataComponent = () => {
|
|
43
|
+
return (
|
|
44
|
+
<div className="RCB-no-data">No data found</div>
|
|
45
|
+
)
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
List.propTypes = {
|
|
49
|
+
/** Pass any additional classNames to List component */
|
|
50
|
+
className: PropTypes.string,
|
|
51
|
+
items: PropTypes.arrayOf(PropTypes.shape({
|
|
52
|
+
id: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),
|
|
53
|
+
name: PropTypes.any
|
|
54
|
+
})).isRequired,
|
|
55
|
+
idAttribute: PropTypes.string,
|
|
56
|
+
/** Pass a custom ListItem component */
|
|
57
|
+
ListItem: PropTypes.oneOfType([
|
|
58
|
+
PropTypes.instanceOf(Element),
|
|
59
|
+
PropTypes.func
|
|
60
|
+
]),
|
|
61
|
+
noDataComponent: PropTypes.any
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
List.defaultProps = {
|
|
65
|
+
className: "",
|
|
66
|
+
items: [],
|
|
67
|
+
idAttribute: "id",
|
|
68
|
+
ListItem,
|
|
69
|
+
noDataComponent: <DefaultNoDataComponent />
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
export default List;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
.RCB-list{margin:0;padding:0}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
|
|
3
|
+
import { FRUITS_LIST } from "../../../public/Constants";
|
|
4
|
+
import List from "./List";
|
|
5
|
+
|
|
6
|
+
export default {
|
|
7
|
+
title: "List",
|
|
8
|
+
};
|
|
9
|
+
|
|
10
|
+
export const SimpleUsage = () => {
|
|
11
|
+
return <List items={FRUITS_LIST} />;
|
|
12
|
+
};
|
|
13
|
+
|
|
14
|
+
export const CustomListItem = () => {
|
|
15
|
+
/* eslint-disable react/prop-types */
|
|
16
|
+
const ListItem = ({ itemData }) => {
|
|
17
|
+
let { name } = itemData;
|
|
18
|
+
|
|
19
|
+
return <li>{`Custom ListItem ---> ${name}`}</li>;
|
|
20
|
+
};
|
|
21
|
+
/* eslint-enable react/prop-types */
|
|
22
|
+
|
|
23
|
+
return <List items={FRUITS_LIST} ListItem={ListItem} />;
|
|
24
|
+
};
|
|
25
|
+
|
|
26
|
+
CustomListItem.story = {
|
|
27
|
+
name: "Custom ListItem",
|
|
28
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
.RCB-list{margin:0;padding:0}
|
|
File without changes
|
|
File without changes
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
import React, { forwardRef, useState, useImperativeHandle, useEffect } from "react";
|
|
2
|
+
import ReactDOM from "react-dom";
|
|
3
|
+
import PropTypes from "prop-types";
|
|
4
|
+
|
|
5
|
+
const ModalContent = (props) => {
|
|
6
|
+
const {
|
|
7
|
+
className,
|
|
8
|
+
children,
|
|
9
|
+
title,
|
|
10
|
+
titleComponent,
|
|
11
|
+
showClose,
|
|
12
|
+
showHeader,
|
|
13
|
+
hideModal
|
|
14
|
+
} = props;
|
|
15
|
+
|
|
16
|
+
return (<div className={`RCB-modal ${className}`}>
|
|
17
|
+
<div className="RCB-modal-body">
|
|
18
|
+
{showHeader && <div className="RCB-modal-header">
|
|
19
|
+
<span className="RCB-modal-title">{titleComponent ? titleComponent : title}</span>
|
|
20
|
+
{showClose && <span className="RCB-modal-close" onClick={hideModal}></span>}
|
|
21
|
+
</div>}
|
|
22
|
+
<div className="RCB-modal-content">{children}</div>
|
|
23
|
+
</div>
|
|
24
|
+
</div>);
|
|
25
|
+
};
|
|
26
|
+
|
|
27
|
+
ModalContent.propTypes = {
|
|
28
|
+
/** Pass any additional classNames to Modal component */
|
|
29
|
+
className: PropTypes.string,
|
|
30
|
+
title: PropTypes.string,
|
|
31
|
+
titleComponent: PropTypes.element,
|
|
32
|
+
showClose: PropTypes.bool,
|
|
33
|
+
showHeader: PropTypes.bool,
|
|
34
|
+
hideModal: PropTypes.func
|
|
35
|
+
};
|
|
36
|
+
|
|
37
|
+
/** Displays a full screen modal */
|
|
38
|
+
let Modal = (props, ref) => {
|
|
39
|
+
const { isOpen, onClose, ...restProps } = props;
|
|
40
|
+
const [ isModalOpen, setIsModalOpen ] = useState(isOpen);
|
|
41
|
+
const bodyElement = document.getElementsByTagName("body")[0];
|
|
42
|
+
|
|
43
|
+
const showModal = () => {
|
|
44
|
+
setIsModalOpen(true);
|
|
45
|
+
};
|
|
46
|
+
|
|
47
|
+
const hideModal = () => {
|
|
48
|
+
setIsModalOpen(false);
|
|
49
|
+
if (typeof(onClose) === "function") {
|
|
50
|
+
onClose();
|
|
51
|
+
}
|
|
52
|
+
};
|
|
53
|
+
|
|
54
|
+
useEffect(() => {
|
|
55
|
+
setIsModalOpen(isOpen);
|
|
56
|
+
}, [isOpen]);
|
|
57
|
+
|
|
58
|
+
/* add methods that can be accessed via this component's ref */
|
|
59
|
+
useImperativeHandle(ref, () => ({
|
|
60
|
+
showModal: showModal,
|
|
61
|
+
hideModal: hideModal
|
|
62
|
+
}));
|
|
63
|
+
|
|
64
|
+
return isModalOpen ? ReactDOM.createPortal(
|
|
65
|
+
<ModalContent {...restProps} hideModal={hideModal} />,
|
|
66
|
+
bodyElement
|
|
67
|
+
) : null;
|
|
68
|
+
};
|
|
69
|
+
|
|
70
|
+
Modal = forwardRef(Modal);
|
|
71
|
+
|
|
72
|
+
Modal.propTypes = {
|
|
73
|
+
/** Pass any additional classNames to Modal component */
|
|
74
|
+
className: PropTypes.string,
|
|
75
|
+
/** Header or title for the modal */
|
|
76
|
+
title: PropTypes.string,
|
|
77
|
+
/** Component to render as modal title. This will be given preference over "title" prop */
|
|
78
|
+
titleComponent: PropTypes.element,
|
|
79
|
+
/** indicates if the modal should be opened by default */
|
|
80
|
+
isOpen: PropTypes.bool,
|
|
81
|
+
/** indicates whether to show or hide the close button */
|
|
82
|
+
showClose: PropTypes.bool,
|
|
83
|
+
/** indicates whether to show or hide the modal header */
|
|
84
|
+
showHeader: PropTypes.bool,
|
|
85
|
+
/** callback function that gets called when the modal closes */
|
|
86
|
+
onClose: PropTypes.func
|
|
87
|
+
};
|
|
88
|
+
|
|
89
|
+
Modal.defaultProps = {
|
|
90
|
+
className: "",
|
|
91
|
+
title: "",
|
|
92
|
+
isOpen: false,
|
|
93
|
+
showClose: true,
|
|
94
|
+
showHeader: true
|
|
95
|
+
};
|
|
96
|
+
|
|
97
|
+
Modal.displayName = "Modal";
|
|
98
|
+
|
|
99
|
+
export default Modal;
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import React, { useRef } from "react";
|
|
2
|
+
import Modal from "./Modal";
|
|
3
|
+
|
|
4
|
+
const ModalExample = () => {
|
|
5
|
+
return (
|
|
6
|
+
<Modal isOpen={true} title="This is the header">
|
|
7
|
+
<div>From inside a modal</div>
|
|
8
|
+
</Modal>
|
|
9
|
+
);
|
|
10
|
+
};
|
|
11
|
+
|
|
12
|
+
const ModalClickExample = () => {
|
|
13
|
+
const modalRef = useRef();
|
|
14
|
+
const showModal = () => {
|
|
15
|
+
modalRef.current.showModal();
|
|
16
|
+
};
|
|
17
|
+
|
|
18
|
+
return (
|
|
19
|
+
<div>
|
|
20
|
+
<a href="javascript:void(0)" onClick={showModal}>
|
|
21
|
+
Show Modal
|
|
22
|
+
</a>
|
|
23
|
+
<Modal title="This is the header" ref={modalRef}>
|
|
24
|
+
<div>From inside a modal</div>
|
|
25
|
+
</Modal>
|
|
26
|
+
</div>
|
|
27
|
+
);
|
|
28
|
+
};
|
|
29
|
+
|
|
30
|
+
export const ActivateOnClick = () => {
|
|
31
|
+
return <ModalClickExample />;
|
|
32
|
+
};
|
|
33
|
+
|
|
34
|
+
ActivateOnClick.story = {
|
|
35
|
+
name: "Activate on click",
|
|
36
|
+
};
|
|
37
|
+
|
|
38
|
+
export const OpenByDefault = () => {
|
|
39
|
+
return <ModalExample />;
|
|
40
|
+
};
|
|
41
|
+
|
|
42
|
+
OpenByDefault.story = {
|
|
43
|
+
name: "Open by default",
|
|
44
|
+
};
|
|
45
|
+
|
|
46
|
+
export default {
|
|
47
|
+
title: "Modals|Page modal",
|
|
48
|
+
parameters: {
|
|
49
|
+
info: {
|
|
50
|
+
propTables: [Modal],
|
|
51
|
+
propTablesExclude: [ModalExample, ModalClickExample],
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
.RCB-modal{position:absolute;top:0;width:100%;height:100%;background:rgba(0,0,0,0.8);display:flex;justify-content:center;align-items:center}.RCB-modal-body{background:#FFF;padding:20px}.RCB-modal-header{display:flex;margin-bottom:10px}.RCB-modal-title{flex:1}.RCB-modal-close{cursor:pointer}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
.RCB-modal{position:fixed;top:0;width:100%;height:100%;background:rgba(0,0,0,0.8);display:flex;justify-content:center;align-items:center;z-index:2}.RCB-modal-body{background:#FFF;padding:20px}.RCB-modal-header{display:flex;margin-bottom:10px}.RCB-modal-title{flex:1}.RCB-modal-close{cursor:pointer}.RCB-modal-close:before{content:"X"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
.RCB {
|
|
2
|
+
&-modal {
|
|
3
|
+
position: fixed;
|
|
4
|
+
top: 0;
|
|
5
|
+
width: 100%;
|
|
6
|
+
height: 100%;
|
|
7
|
+
background: rgba(0, 0, 0, 0.8);
|
|
8
|
+
display: flex;
|
|
9
|
+
justify-content: center;
|
|
10
|
+
align-items: center;
|
|
11
|
+
z-index: 2;
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
&-modal-body {
|
|
15
|
+
background: #FFF;
|
|
16
|
+
padding: 20px;
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
&-modal-header {
|
|
20
|
+
display: flex;
|
|
21
|
+
margin-bottom: 10px;
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
&-modal-title {
|
|
25
|
+
flex: 1;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
&-modal-close {
|
|
29
|
+
cursor: pointer;
|
|
30
|
+
&:before {
|
|
31
|
+
content: "X";
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
}
|
|
File without changes
|
|
File without changes
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import React, { useState, useEffect } from "react";
|
|
2
|
+
import PropTypes from "prop-types";
|
|
3
|
+
|
|
4
|
+
const NotificationComponent = (props) => {
|
|
5
|
+
const [ hideMessage, setHideMessage ] = useState(false);
|
|
6
|
+
const { appearance, children, messageId, fadeOut, fadeOutTime, className } = props;
|
|
7
|
+
let fadeOutMessage = typeof(fadeOut) !== "undefined" ? fadeOut : appearance === "success";
|
|
8
|
+
let timerID;
|
|
9
|
+
|
|
10
|
+
const clearMessage = () => {
|
|
11
|
+
setHideMessage(true);
|
|
12
|
+
};
|
|
13
|
+
|
|
14
|
+
const setClearMessageTimeout = () => {
|
|
15
|
+
if (fadeOutMessage) {
|
|
16
|
+
timerID && clearTimeout(timerID);
|
|
17
|
+
timerID = setTimeout(clearMessage, fadeOutTime);
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
useEffect(() => {
|
|
22
|
+
/* RUN ONCE */
|
|
23
|
+
setClearMessageTimeout();
|
|
24
|
+
}, []);
|
|
25
|
+
|
|
26
|
+
useEffect(() => {
|
|
27
|
+
/* RUN when message ID changes */
|
|
28
|
+
setHideMessage(false);
|
|
29
|
+
setClearMessageTimeout();
|
|
30
|
+
}, [messageId]);
|
|
31
|
+
|
|
32
|
+
if (hideMessage) {
|
|
33
|
+
return null;
|
|
34
|
+
} else {
|
|
35
|
+
return (<div className={`RCB-notif RCB-notif-${appearance} ${className}`}>{children}</div>);
|
|
36
|
+
}
|
|
37
|
+
};
|
|
38
|
+
|
|
39
|
+
NotificationComponent.propTypes = {
|
|
40
|
+
/** Pass any additional classNames to Notification component */
|
|
41
|
+
className: PropTypes.string,
|
|
42
|
+
/* Unique ID to represent this particular message */
|
|
43
|
+
messageId: PropTypes.number,
|
|
44
|
+
/* Appearance of the notification message */
|
|
45
|
+
appearance: PropTypes.oneOf(["error", "warning", "success", "info"]),
|
|
46
|
+
/* Should the message fadeout after (fadeOutTime)ms or not. Default true for success messages only. */
|
|
47
|
+
fadeOut: PropTypes.bool,
|
|
48
|
+
/* fadeout timer, in milliseconds */
|
|
49
|
+
fadeOutTime: PropTypes.number
|
|
50
|
+
};
|
|
51
|
+
|
|
52
|
+
NotificationComponent.defaultProps = {
|
|
53
|
+
className: "",
|
|
54
|
+
appearance: "success",
|
|
55
|
+
fadeOutTime: 3000
|
|
56
|
+
};
|
|
57
|
+
|
|
58
|
+
export default NotificationComponent;
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
import NotificationComponent from "./NotificationComponent";
|
|
3
|
+
|
|
4
|
+
export default {
|
|
5
|
+
title: "NotificationComponent",
|
|
6
|
+
};
|
|
7
|
+
|
|
8
|
+
export const SimpleUsage = () => {
|
|
9
|
+
return (
|
|
10
|
+
<div>
|
|
11
|
+
<NotificationComponent appearance="success" messageId={1}>
|
|
12
|
+
Data loaded successfully
|
|
13
|
+
</NotificationComponent>
|
|
14
|
+
<br />
|
|
15
|
+
<NotificationComponent appearance="error" messageId={2}>
|
|
16
|
+
Some error occured
|
|
17
|
+
</NotificationComponent>
|
|
18
|
+
<br />
|
|
19
|
+
<NotificationComponent appearance="warning" messageId={3}>
|
|
20
|
+
Doing this operation will erase all your data
|
|
21
|
+
</NotificationComponent>
|
|
22
|
+
<br />
|
|
23
|
+
<NotificationComponent appearance="info" messageId={4}>
|
|
24
|
+
The job is scheduled. You will get a notification once it is completed.
|
|
25
|
+
</NotificationComponent>
|
|
26
|
+
</div>
|
|
27
|
+
);
|
|
28
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
.RCB-notif{padding:10px}.RCB-notif-success{color:#129274;border:1px solid #2cb292;background-color:#b7d2cb}.RCB-notif-error{color:#d25b5b;border:solid 1px #e75190;background-color:#fff9fc}.RCB-notif-warning{color:#445870;border:solid 1px #f09c0a;background-color:#fffaf2}.RCB-notif-info{color:#509DB9;border:solid 1px #509DB9;background-color:#DFF6FF}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
.RCB-notif{padding:10px;border-radius:3px}.RCB-notif-success{color:#129274;border:solid 1px #2cb191;background-color:#edfffb}.RCB-notif-error{color:#d25b5b;border:solid 1px #e75178;background-color:#fff3f6}.RCB-notif-warning{color:#445870;border:solid 1px #efbf6a;background-color:#fffaf2}.RCB-notif-info{color:#509DB9;border:solid 1px #45b5c1;background-color:#f4fcff}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
.RCB {
|
|
2
|
+
&-notif {
|
|
3
|
+
padding: 10px;
|
|
4
|
+
border-radius: 3px;
|
|
5
|
+
|
|
6
|
+
&-success {
|
|
7
|
+
color: #129274;
|
|
8
|
+
border: solid 1px #2cb191;
|
|
9
|
+
background-color: #edfffb;
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
&-error {
|
|
13
|
+
color: #d25b5b;
|
|
14
|
+
border: solid 1px #e75178;
|
|
15
|
+
background-color: #fff3f6;
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
&-warning {
|
|
19
|
+
color: #445870;
|
|
20
|
+
border: solid 1px #efbf6a;
|
|
21
|
+
background-color: #fffaf2;
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
&-info {
|
|
25
|
+
color: #509DB9;
|
|
26
|
+
border: solid 1px #45b5c1;
|
|
27
|
+
background-color: #f4fcff;
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
import PropTypes from "prop-types";
|
|
3
|
+
|
|
4
|
+
const ProgressBar = (props) => {
|
|
5
|
+
const { progress, height, className } = props;
|
|
6
|
+
|
|
7
|
+
return (<div className={`RCB-progress-bar ${className}`} style={{height: height}}>
|
|
8
|
+
<div className="RCB-progress-value" style={{width: `${progress}%`}}></div>
|
|
9
|
+
</div>);
|
|
10
|
+
};
|
|
11
|
+
|
|
12
|
+
ProgressBar.propTypes = {
|
|
13
|
+
/** Pass any additional classNames to ProgressBar component */
|
|
14
|
+
className: PropTypes.string,
|
|
15
|
+
/** Progress value, must be a value between 1 to 100 */
|
|
16
|
+
progress: function(props, propName, componentName) {
|
|
17
|
+
if (typeof(props[propName]) === "undefined") {
|
|
18
|
+
return new Error(
|
|
19
|
+
"Prop `" + propName + "` is required"
|
|
20
|
+
);
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
if (typeof(props[propName]) !== "number") {
|
|
24
|
+
return new Error(
|
|
25
|
+
"Prop `" + propName + "` must be a number"
|
|
26
|
+
);
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
if (props[propName] < 0 || props[propName] > 100) {
|
|
30
|
+
return new Error(
|
|
31
|
+
"Invalid prop `" + propName + "` supplied to" +
|
|
32
|
+
" `" + componentName + "`. Value must be between 0 to 100."
|
|
33
|
+
);
|
|
34
|
+
}
|
|
35
|
+
},
|
|
36
|
+
/** Height of the progress bar. Values must be valid CSS height values like 40px or 20% etc. */
|
|
37
|
+
height: PropTypes.string
|
|
38
|
+
};
|
|
39
|
+
|
|
40
|
+
ProgressBar.defaultProps = {
|
|
41
|
+
className: "",
|
|
42
|
+
height: "40px"
|
|
43
|
+
};
|
|
44
|
+
|
|
45
|
+
export default ProgressBar;
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
import ProgressBar from "./ProgressBar";
|
|
3
|
+
|
|
4
|
+
export default {
|
|
5
|
+
title: "ProgressBar",
|
|
6
|
+
};
|
|
7
|
+
|
|
8
|
+
export const SimpleUsage = () => {
|
|
9
|
+
return (
|
|
10
|
+
<div className="progress-container">
|
|
11
|
+
<ProgressBar progress={40} />
|
|
12
|
+
</div>
|
|
13
|
+
);
|
|
14
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
.RCB-progress-bar{width:100%;position:relative;background:#ccc}.RCB-progress-value{height:100%;position:absolute;top:0;background:#3d9565}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
.RCB-progress-bar{width:100%;position:relative;background:#ccc}.RCB-progress-value{height:100%;position:absolute;top:0;background:#3d9565}
|
|
File without changes
|
|
File without changes
|