@unbxd-ui/unbxd-react-components 0.2.104 → 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 -87
- 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,38 @@
|
|
|
1
|
+
import React, { useState } from "react";
|
|
2
|
+
import { Fragment } from "react";
|
|
3
|
+
import DropdownButton from "./DropdownButton";
|
|
4
|
+
|
|
5
|
+
const DROPDOWN_OPTIONS = [{
|
|
6
|
+
id: "PrintApple",
|
|
7
|
+
name: "Print Apple",
|
|
8
|
+
message: "Apple"
|
|
9
|
+
}, {
|
|
10
|
+
id: "PrintMango",
|
|
11
|
+
name: "Print Mango",
|
|
12
|
+
message: "Mango"
|
|
13
|
+
}, {
|
|
14
|
+
id: "PrintGrapes",
|
|
15
|
+
name: "Print Grapes",
|
|
16
|
+
message: "Grapes"
|
|
17
|
+
}];
|
|
18
|
+
|
|
19
|
+
export const DefaultDropdownButton = () => {
|
|
20
|
+
const [ message, setMessage ] = useState();
|
|
21
|
+
|
|
22
|
+
const printMessage = (data) => {
|
|
23
|
+
const { message } = data;
|
|
24
|
+
setMessage(message);
|
|
25
|
+
};
|
|
26
|
+
|
|
27
|
+
return (<Fragment>
|
|
28
|
+
<DropdownButton
|
|
29
|
+
label="Actions"
|
|
30
|
+
options={DROPDOWN_OPTIONS}
|
|
31
|
+
onClick={printMessage} />
|
|
32
|
+
<div>{`Message is ${message}`}</div>
|
|
33
|
+
</Fragment>);
|
|
34
|
+
};
|
|
35
|
+
|
|
36
|
+
export default {
|
|
37
|
+
title: "Dropdown Button"
|
|
38
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
.RCB-btn{border-radius:3px;cursor:pointer}.RCB-btn-default:hover{background:#f3f3f3}.RCB-btn-primary{background:#1fa7fd;color:#FFF;border:0}.RCB-btn-primary:hover{background:#208dd2}.RCB-btn-secondary{background:#FFF;border:1px solid #95c7e7}.RCB-btn-secondary:hover{background:#eef8ff}.RCB-btn-small{padding:6px 8px}.RCB-btn-medium{padding:10px 15px}.RCB-btn-large{padding:15px 22px}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
.RCB-btn{border-radius:3px;cursor:pointer}.RCB-btn-default:hover{background:#f3f3f3}.RCB-btn-primary{background:#1fa7fd;color:#FFF;border:0}.RCB-btn-primary:hover{background:#208dd2}.RCB-btn-secondary{background:#FFF;border:1px solid #95c7e7}.RCB-btn-secondary:hover{background:#eef8ff}.RCB-btn-small{padding:6px 8px}.RCB-btn-medium{padding:10px 15px}.RCB-btn-large{padding:15px 22px}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
.RCB {
|
|
2
|
+
&-btn {
|
|
3
|
+
border-radius: 3px;
|
|
4
|
+
cursor: pointer;
|
|
5
|
+
}
|
|
6
|
+
|
|
7
|
+
&-btn {
|
|
8
|
+
&-default {
|
|
9
|
+
&:hover {
|
|
10
|
+
background: #f3f3f3;
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
&-primary {
|
|
15
|
+
background: #1fa7fd;
|
|
16
|
+
color: #FFF;
|
|
17
|
+
border: 0;
|
|
18
|
+
|
|
19
|
+
&:hover {
|
|
20
|
+
background: #208dd2;
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
&-secondary {
|
|
25
|
+
background: #FFF;
|
|
26
|
+
border: 1px solid #95c7e7;
|
|
27
|
+
|
|
28
|
+
&:hover {
|
|
29
|
+
background: #eef8ff;
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
&-small {
|
|
34
|
+
padding: 6px 8px;
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
&-medium {
|
|
38
|
+
padding: 10px 15px;
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
&-large {
|
|
42
|
+
padding: 15px 22px;
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
}
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
import React, { useState, useEffect, Fragment } from "react";
|
|
2
|
+
import PropTypes from "prop-types";
|
|
3
|
+
import Promise from "bluebird";
|
|
4
|
+
import dequal from "dequal";
|
|
5
|
+
import dataLoader from "../../core/dataLoader";
|
|
6
|
+
import cloneDeep from "lodash.clonedeep";
|
|
7
|
+
import utils from "../../core/utils";
|
|
8
|
+
|
|
9
|
+
const DefaultLoader = () => {
|
|
10
|
+
return (<div>Loading...</div>);
|
|
11
|
+
};
|
|
12
|
+
|
|
13
|
+
const loadData = (requests) => {
|
|
14
|
+
let promisesArray = requests.map(reqObj => {
|
|
15
|
+
return dataLoader.getRequestDef(reqObj);
|
|
16
|
+
});
|
|
17
|
+
|
|
18
|
+
return Promise.all(promisesArray);
|
|
19
|
+
};
|
|
20
|
+
|
|
21
|
+
const DataLoader = (props) => {
|
|
22
|
+
const [ isLoading, setIsLoading ] = useState(true);
|
|
23
|
+
const dataRef = React.useRef();
|
|
24
|
+
const { children, Loader, requests, onDataLoaded, onDataFailed } = props;
|
|
25
|
+
|
|
26
|
+
const renderLoader = () => {
|
|
27
|
+
const LoaderComponent = Loader || utils.getDefaultConfig("DefaultLoader") || DefaultLoader;
|
|
28
|
+
return <LoaderComponent />;
|
|
29
|
+
};
|
|
30
|
+
|
|
31
|
+
const renderChildren = () => {
|
|
32
|
+
return children;
|
|
33
|
+
};
|
|
34
|
+
|
|
35
|
+
const fetchData = () => {
|
|
36
|
+
setIsLoading(true);
|
|
37
|
+
loadData(requests)
|
|
38
|
+
.then(resultsArray => {
|
|
39
|
+
onDataLoaded(resultsArray);
|
|
40
|
+
})
|
|
41
|
+
.catch(exception => {
|
|
42
|
+
onDataFailed(exception);
|
|
43
|
+
})
|
|
44
|
+
.finally(() => {
|
|
45
|
+
setIsLoading(false);
|
|
46
|
+
});
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
useEffect(() => {
|
|
50
|
+
/*
|
|
51
|
+
As useEffect does not do a deep comparision on dependent props,
|
|
52
|
+
do a manual deep comparision to decide whether to load data
|
|
53
|
+
*/
|
|
54
|
+
if (!dequal(requests, dataRef.current)) {
|
|
55
|
+
dataRef.current = cloneDeep(requests);
|
|
56
|
+
fetchData();
|
|
57
|
+
}
|
|
58
|
+
});
|
|
59
|
+
|
|
60
|
+
return (<Fragment>
|
|
61
|
+
{isLoading ?
|
|
62
|
+
renderLoader()
|
|
63
|
+
: renderChildren()}
|
|
64
|
+
</Fragment>);
|
|
65
|
+
};
|
|
66
|
+
|
|
67
|
+
DataLoader.propTypes = {
|
|
68
|
+
/** Requests array */
|
|
69
|
+
requests: PropTypes.array.isRequired,
|
|
70
|
+
/** Callback function which is called when data is loaded */
|
|
71
|
+
onDataLoaded: PropTypes.func,
|
|
72
|
+
/** Callback function which is called when data fetching fails */
|
|
73
|
+
onDataFailed: PropTypes.func,
|
|
74
|
+
/** Custom loader component */
|
|
75
|
+
Loader: PropTypes.oneOfType([
|
|
76
|
+
PropTypes.instanceOf(Element),
|
|
77
|
+
PropTypes.func
|
|
78
|
+
])
|
|
79
|
+
};
|
|
80
|
+
|
|
81
|
+
DataLoader.defaultProps = {
|
|
82
|
+
onDataLoaded: () => {},
|
|
83
|
+
onDataFailed: () => {}
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
export default DataLoader;
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
import React, { Fragment } from "react";
|
|
2
|
+
import DataLoader from "./DataLoader";
|
|
3
|
+
import dataLoader from "../../core/dataLoader";
|
|
4
|
+
|
|
5
|
+
export const SimpleUsage = () => {
|
|
6
|
+
dataLoader.addRequestConfig("getTodos", {
|
|
7
|
+
method: "GET",
|
|
8
|
+
url: "https://jsonplaceholder.typicode.com/todos",
|
|
9
|
+
});
|
|
10
|
+
|
|
11
|
+
const onDataLoaded = ([todos]) => {
|
|
12
|
+
console.log(todos);
|
|
13
|
+
};
|
|
14
|
+
|
|
15
|
+
const onDataFailed = e => {
|
|
16
|
+
console.log("Error ", e);
|
|
17
|
+
};
|
|
18
|
+
|
|
19
|
+
const requests = [
|
|
20
|
+
{
|
|
21
|
+
requestId: "getTodos",
|
|
22
|
+
},
|
|
23
|
+
];
|
|
24
|
+
|
|
25
|
+
return (<Fragment>
|
|
26
|
+
<p>Use the <code>DataLoader</code> component to make implicit API calls by wrapping the JSX content where you want the API data with this component.
|
|
27
|
+
This would mostly be used for GET calls.</p>
|
|
28
|
+
<DataLoader requests={requests} onDataLoaded={onDataLoaded} onDataFailed={onDataFailed}>
|
|
29
|
+
<div>Received the data</div>
|
|
30
|
+
</DataLoader>
|
|
31
|
+
</Fragment>);
|
|
32
|
+
};
|
|
33
|
+
|
|
34
|
+
export const FunctionUrl = () => {
|
|
35
|
+
dataLoader.addRequestConfig("getTodoById", {
|
|
36
|
+
method: "GET",
|
|
37
|
+
url: function(params) {
|
|
38
|
+
return `https://jsonplaceholder.typicode.com/todos/${params.id}`;
|
|
39
|
+
},
|
|
40
|
+
});
|
|
41
|
+
|
|
42
|
+
const onDataLoaded = ([todo]) => {
|
|
43
|
+
console.log(todo);
|
|
44
|
+
};
|
|
45
|
+
|
|
46
|
+
const onDataFailed = e => {
|
|
47
|
+
console.log("Error ", e);
|
|
48
|
+
};
|
|
49
|
+
|
|
50
|
+
const requests = [
|
|
51
|
+
{
|
|
52
|
+
requestId: "getTodoById",
|
|
53
|
+
urlParams: {
|
|
54
|
+
id: 1,
|
|
55
|
+
},
|
|
56
|
+
},
|
|
57
|
+
];
|
|
58
|
+
|
|
59
|
+
return (
|
|
60
|
+
<DataLoader requests={requests} onDataLoaded={onDataLoaded} onDataFailed={onDataFailed}>
|
|
61
|
+
<div>Recieved todo data</div>
|
|
62
|
+
</DataLoader>
|
|
63
|
+
);
|
|
64
|
+
};
|
|
65
|
+
|
|
66
|
+
FunctionUrl.story = {
|
|
67
|
+
name: "Function URL",
|
|
68
|
+
};
|
|
69
|
+
|
|
70
|
+
export default {
|
|
71
|
+
title: "Data fetching|DataLoader (Component)"
|
|
72
|
+
};
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
import React, { useContext, useEffect } from "react";
|
|
2
|
+
import PropTypes from "prop-types";
|
|
3
|
+
import { FormContext } from "./Form";
|
|
4
|
+
import FormElementWrapper from "./FormElementWrapper";
|
|
5
|
+
|
|
6
|
+
const Checkbox = (props) => {
|
|
7
|
+
const { label, name, className, value, defaultValue, appearance, onChange, ...restProps } = props;
|
|
8
|
+
const { onValueChange } = useContext(FormContext);
|
|
9
|
+
|
|
10
|
+
const postFormValueChange = (value) => {
|
|
11
|
+
typeof(onValueChange) === "function" && onValueChange(name, value);
|
|
12
|
+
};
|
|
13
|
+
|
|
14
|
+
const onInputChange = (event) => {
|
|
15
|
+
const value = event.target.checked;
|
|
16
|
+
|
|
17
|
+
if (typeof(onChange) === "function") {
|
|
18
|
+
onChange(value);
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
postFormValueChange(value);
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
useEffect(() => {
|
|
25
|
+
/* set the initial form element value in the form context */
|
|
26
|
+
const postValue = typeof(onChange) === "function" ? value : defaultValue;
|
|
27
|
+
postFormValueChange(postValue);
|
|
28
|
+
}, [value, defaultValue]);
|
|
29
|
+
|
|
30
|
+
let inputProps = {
|
|
31
|
+
type: "checkbox",
|
|
32
|
+
label,
|
|
33
|
+
name,
|
|
34
|
+
id: name,
|
|
35
|
+
defaultChecked: defaultValue,
|
|
36
|
+
className: "RCB-form-el",
|
|
37
|
+
onChange: onInputChange,
|
|
38
|
+
...restProps
|
|
39
|
+
};
|
|
40
|
+
|
|
41
|
+
if (typeof(onChange) === "function") {
|
|
42
|
+
/* make it a controlled component if onChange function is given */
|
|
43
|
+
inputProps.checked = value;
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
return (<FormElementWrapper className={className} appearance={appearance}>
|
|
47
|
+
<input {...inputProps} data-hj-allow />
|
|
48
|
+
<label className="RCB-form-el-label" htmlFor={name}>{label}</label>
|
|
49
|
+
</FormElementWrapper>);
|
|
50
|
+
};
|
|
51
|
+
|
|
52
|
+
Checkbox.propTypes = {
|
|
53
|
+
/** Pass any additional classNames to Input component */
|
|
54
|
+
className: PropTypes.string,
|
|
55
|
+
/** Label for the input element */
|
|
56
|
+
label: PropTypes.any,
|
|
57
|
+
/** Unique ID for the input element */
|
|
58
|
+
name: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),
|
|
59
|
+
/** Will be used only with onChange function, or else ignored */
|
|
60
|
+
value: PropTypes.bool,
|
|
61
|
+
defaultValue: PropTypes.bool,
|
|
62
|
+
/** Define the appearance of the form element. Accepted values are either "inline" or "block" */
|
|
63
|
+
appearance: PropTypes.oneOf(["inline", "block"]),
|
|
64
|
+
/** Becomes a controlled component if onChange function is given */
|
|
65
|
+
onChange: PropTypes.func
|
|
66
|
+
};
|
|
67
|
+
|
|
68
|
+
Checkbox.defaultProps = {
|
|
69
|
+
className: "",
|
|
70
|
+
appearance: "inline"
|
|
71
|
+
};
|
|
72
|
+
|
|
73
|
+
export default Checkbox;
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
import React, { useState, useContext } from "react";
|
|
2
|
+
import PropTypes from "prop-types";
|
|
3
|
+
import { FormContext } from "./Form";
|
|
4
|
+
import FormElementWrapper from "./FormElementWrapper";
|
|
5
|
+
|
|
6
|
+
const DragDropFileUploader = (props) => {
|
|
7
|
+
const { name, label, children, onChange, className, appearance } = props;
|
|
8
|
+
const [ isDragOver, setIsDragOver ] = useState(false);
|
|
9
|
+
const { onValueChange } = useContext(FormContext);
|
|
10
|
+
|
|
11
|
+
const onDragEnter = () => {
|
|
12
|
+
setIsDragOver(true);
|
|
13
|
+
};
|
|
14
|
+
|
|
15
|
+
const onDragLeave = () => {
|
|
16
|
+
setIsDragOver(false);
|
|
17
|
+
};
|
|
18
|
+
|
|
19
|
+
const onDragOver = (event) => {
|
|
20
|
+
event.preventDefault();
|
|
21
|
+
};
|
|
22
|
+
|
|
23
|
+
const onDrop = (event) => {
|
|
24
|
+
event.preventDefault();
|
|
25
|
+
let value = event.dataTransfer.files;
|
|
26
|
+
|
|
27
|
+
if (typeof(onChange) === "function") {
|
|
28
|
+
onChange(value);
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
typeof(onValueChange) === "function" && onValueChange(name, value);
|
|
32
|
+
|
|
33
|
+
setIsDragOver(false);
|
|
34
|
+
};
|
|
35
|
+
|
|
36
|
+
return (<FormElementWrapper className={className} appearance={appearance}>
|
|
37
|
+
<label className="RCB-form-el-label">{label}</label>
|
|
38
|
+
<div onDragEnter={onDragEnter} onDragLeave={onDragLeave}
|
|
39
|
+
onDragOver={onDragOver} onDrop={onDrop}
|
|
40
|
+
className={`RCB-drag-drop-uploader ${isDragOver ? "RCB-drag-over" : ""}`}>
|
|
41
|
+
{children}
|
|
42
|
+
</div>
|
|
43
|
+
</FormElementWrapper>);
|
|
44
|
+
};
|
|
45
|
+
|
|
46
|
+
DragDropFileUploader.propTypes = {
|
|
47
|
+
/** Pass any additional classNames to Input component */
|
|
48
|
+
className: PropTypes.string,
|
|
49
|
+
/** Label for the input element */
|
|
50
|
+
label: PropTypes.string,
|
|
51
|
+
/** Unique ID for the input element */
|
|
52
|
+
name: PropTypes.string.isRequired,
|
|
53
|
+
/** mime type of the acceptable files */
|
|
54
|
+
accept: PropTypes.string,
|
|
55
|
+
/** Define the appearance of the form element. Accepted values are either "inline" or "block" */
|
|
56
|
+
appearance: PropTypes.oneOf(["inline", "block"]),
|
|
57
|
+
/** Becomes a controlled component if onChange function is given */
|
|
58
|
+
onChange: PropTypes.func
|
|
59
|
+
};
|
|
60
|
+
|
|
61
|
+
DragDropFileUploader.defaultProps = {
|
|
62
|
+
className: "",
|
|
63
|
+
appearance: "inline",
|
|
64
|
+
accept: "image/*"
|
|
65
|
+
};
|
|
66
|
+
|
|
67
|
+
export default DragDropFileUploader;
|