@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.
Files changed (289) hide show
  1. package/.babelrc +4 -0
  2. package/.eslintrc.js +38 -0
  3. package/CONTRIBUTE.md +105 -0
  4. package/components/Accordian/Accordian.js +45 -13
  5. package/components/Accordian/Accordian.stories.js +25 -6
  6. package/components/Accordian/index.js +3 -0
  7. package/components/Button/Button.js +26 -9
  8. package/components/Button/Button.stories.js +14 -1
  9. package/components/Button/DropdownButton.js +31 -9
  10. package/components/Button/DropdownButton.stories.js +23 -6
  11. package/components/Button/index.js +8 -1
  12. package/components/DataLoader/DataLoader.js +40 -10
  13. package/components/DataLoader/DataLoader.stories.js +30 -5
  14. package/components/DataLoader/index.js +3 -0
  15. package/components/Form/Checkbox.js +42 -14
  16. package/components/Form/DragDropFileUploader.js +42 -12
  17. package/components/Form/Dropdown.js +181 -104
  18. package/components/Form/FileUploader.js +32 -10
  19. package/components/Form/Form.js +45 -15
  20. package/components/Form/FormElementWrapper.js +7 -2
  21. package/components/Form/Input.js +72 -27
  22. package/components/Form/RadioList.js +48 -17
  23. package/components/Form/RangeSlider.js +73 -37
  24. package/components/Form/ServerPaginatedDDList.js +130 -87
  25. package/components/Form/Textarea.js +43 -18
  26. package/components/Form/Toggle.js +48 -16
  27. package/components/Form/index.js +30 -18
  28. package/components/Form/stories/Checkbox.stories.js +12 -1
  29. package/components/Form/stories/DragDropFileUploader.stories.js +8 -0
  30. package/components/Form/stories/Dropdown.stories.js +24 -6
  31. package/components/Form/stories/FileUploader.stories.js +8 -0
  32. package/components/Form/stories/FormDefault.stories.js +21 -1
  33. package/components/Form/stories/RadioList.stories.js +12 -1
  34. package/components/Form/stories/RangeSlider.stories.js +15 -1
  35. package/components/Form/stories/TextInput.stories.js +19 -3
  36. package/components/Form/stories/Textarea.stories.js +12 -1
  37. package/components/Form/stories/Toggle.stories.js +7 -0
  38. package/components/Form/stories/form.stories.js +40 -3
  39. package/components/InlineModal/InlineModal.js +51 -14
  40. package/components/InlineModal/InlineModal.stories.js +14 -2
  41. package/components/InlineModal/index.js +6 -1
  42. package/components/List/List.js +24 -9
  43. package/components/List/index.js +3 -0
  44. package/components/List/list.stories.js +10 -0
  45. package/components/Modal/Modal.js +49 -17
  46. package/components/Modal/Modal.stories.js +15 -1
  47. package/components/Modal/index.js +3 -0
  48. package/components/NotificationComponent/NotificationComponent.js +34 -11
  49. package/components/NotificationComponent/NotificationComponent.stories.js +6 -0
  50. package/components/NotificationComponent/index.js +3 -0
  51. package/components/ProgressBar/ProgressBar.js +11 -2
  52. package/components/ProgressBar/ProgressBar.stories.js +6 -0
  53. package/components/ProgressBar/index.js +3 -0
  54. package/components/Table/BaseTable.js +134 -69
  55. package/components/Table/PaginationComponent.js +23 -11
  56. package/components/Table/Table.js +149 -68
  57. package/components/Table/Table.stories.js +67 -22
  58. package/components/Table/index.js +4 -0
  59. package/components/TabsComponent/TabsComponent.js +57 -20
  60. package/components/TabsComponent/TabsComponent.stories.js +16 -0
  61. package/components/TabsComponent/index.js +3 -0
  62. package/components/Tooltip/Tooltip.js +47 -25
  63. package/components/Tooltip/Tooltip.stories.js +6 -0
  64. package/components/Tooltip/index.js +3 -0
  65. package/components/core.css +1 -3
  66. package/components/index.js +17 -1
  67. package/components/theme.css +0 -2
  68. package/lib/Readme.md +82 -0
  69. package/lib/components/Accordian/Accordian.js +117 -0
  70. package/lib/components/Accordian/Accordian.stories.js +137 -0
  71. package/lib/components/Accordian/index.js +10 -0
  72. package/lib/components/Button/Button.js +84 -0
  73. package/lib/components/Button/Button.stories.js +89 -0
  74. package/lib/components/Button/DropdownButton.js +77 -0
  75. package/lib/components/Button/DropdownButton.stories.js +51 -0
  76. package/lib/components/Button/index.js +32 -0
  77. package/lib/components/DataLoader/DataLoader.js +88 -0
  78. package/lib/components/DataLoader/DataLoader.stories.js +77 -0
  79. package/lib/components/DataLoader/index.js +10 -0
  80. package/lib/components/Form/Checkbox.js +93 -0
  81. package/lib/components/Form/DragDropFileUploader.js +85 -0
  82. package/lib/components/Form/Dropdown.js +478 -0
  83. package/lib/components/Form/FileUploader.js +81 -0
  84. package/lib/components/Form/Form.js +106 -0
  85. package/lib/components/Form/FormElementWrapper.js +27 -0
  86. package/lib/components/Form/Input.js +140 -0
  87. package/lib/components/Form/RadioList.js +111 -0
  88. package/lib/components/Form/RangeSlider.js +142 -0
  89. package/lib/components/Form/ServerPaginatedDDList.js +267 -0
  90. package/lib/components/Form/Textarea.js +95 -0
  91. package/lib/components/Form/Toggle.js +117 -0
  92. package/lib/components/Form/index.js +73 -0
  93. package/lib/components/Form/stories/Checkbox.stories.js +54 -0
  94. package/lib/components/Form/stories/DragDropFileUploader.stories.js +27 -0
  95. package/lib/components/Form/stories/Dropdown.stories.js +114 -0
  96. package/lib/components/Form/stories/FileUploader.stories.js +31 -0
  97. package/lib/components/Form/stories/FormDefault.stories.js +117 -0
  98. package/lib/components/Form/stories/RadioList.stories.js +55 -0
  99. package/lib/components/Form/stories/RangeSlider.stories.js +82 -0
  100. package/lib/components/Form/stories/TextInput.stories.js +79 -0
  101. package/lib/components/Form/stories/Textarea.stories.js +48 -0
  102. package/lib/components/Form/stories/Toggle.stories.js +25 -0
  103. package/lib/components/Form/stories/form.stories.js +240 -0
  104. package/lib/components/InlineModal/InlineModal.js +146 -0
  105. package/lib/components/InlineModal/InlineModal.stories.js +61 -0
  106. package/lib/components/InlineModal/index.js +24 -0
  107. package/lib/components/List/List.js +76 -0
  108. package/lib/components/List/index.js +10 -0
  109. package/lib/components/List/list.stories.js +38 -0
  110. package/lib/components/Modal/Modal.js +117 -0
  111. package/lib/components/Modal/Modal.stories.js +55 -0
  112. package/lib/components/Modal/index.js +10 -0
  113. package/lib/components/NotificationComponent/NotificationComponent.js +76 -0
  114. package/lib/components/NotificationComponent/NotificationComponent.stories.js +29 -0
  115. package/lib/components/NotificationComponent/index.js +10 -0
  116. package/lib/components/ProgressBar/ProgressBar.js +49 -0
  117. package/lib/components/ProgressBar/ProgressBar.stories.js +21 -0
  118. package/lib/components/ProgressBar/index.js +10 -0
  119. package/lib/components/Table/BaseTable.js +352 -0
  120. package/lib/components/Table/PaginationComponent.js +87 -0
  121. package/lib/components/Table/Table.js +333 -0
  122. package/lib/components/Table/Table.stories.js +204 -0
  123. package/lib/components/Table/index.js +17 -0
  124. package/lib/components/TabsComponent/TabsComponent.js +134 -0
  125. package/lib/components/TabsComponent/TabsComponent.stories.js +65 -0
  126. package/lib/components/TabsComponent/index.js +10 -0
  127. package/lib/components/Tooltip/Tooltip.js +102 -0
  128. package/lib/components/Tooltip/Tooltip.stories.js +25 -0
  129. package/lib/components/Tooltip/index.js +10 -0
  130. package/lib/components/core.css +3 -0
  131. package/lib/components/core.scss +29 -0
  132. package/lib/components/index.js +159 -0
  133. package/lib/components/theme.css +3 -0
  134. package/lib/components/theme.scss +11 -0
  135. package/lib/package-lock.json +20607 -0
  136. package/lib/package.json +94 -0
  137. package/package.json +1 -1
  138. package/src/Intro.stories.mdx +119 -0
  139. package/src/components/Accordian/Accordian.js +89 -0
  140. package/src/components/Accordian/Accordian.stories.js +92 -0
  141. package/src/components/Accordian/accordianCore.css +1 -0
  142. package/src/components/Accordian/accordianCore.scss +8 -0
  143. package/src/components/Accordian/accordianTheme.css +1 -0
  144. package/src/components/Accordian/accordianTheme.scss +6 -0
  145. package/src/components/Accordian/index.js +3 -0
  146. package/src/components/Button/Button.js +67 -0
  147. package/src/components/Button/Button.stories.js +103 -0
  148. package/src/components/Button/DropdownButton.js +60 -0
  149. package/src/components/Button/DropdownButton.stories.js +38 -0
  150. package/src/components/Button/button.css +1 -0
  151. package/src/components/Button/buttonTheme.css +1 -0
  152. package/src/components/Button/buttonTheme.scss +45 -0
  153. package/src/components/Button/index.js +5 -0
  154. package/src/components/DataLoader/DataLoader.js +86 -0
  155. package/src/components/DataLoader/DataLoader.stories.js +72 -0
  156. package/src/components/DataLoader/index.js +3 -0
  157. package/src/components/Form/Checkbox.js +73 -0
  158. package/src/components/Form/DragDropFileUploader.js +67 -0
  159. package/src/components/Form/Dropdown.js +430 -0
  160. package/src/components/Form/FileUploader.js +64 -0
  161. package/src/components/Form/Form.js +83 -0
  162. package/src/components/Form/FormElementWrapper.js +22 -0
  163. package/src/components/Form/Input.js +121 -0
  164. package/src/components/Form/RadioList.js +86 -0
  165. package/src/components/Form/RangeSlider.js +100 -0
  166. package/src/components/Form/ServerPaginatedDDList.js +231 -0
  167. package/src/components/Form/Textarea.js +76 -0
  168. package/src/components/Form/Toggle.js +96 -0
  169. package/src/components/Form/form.css +1 -0
  170. package/src/components/Form/formCore.css +1 -0
  171. package/src/components/Form/formCore.scss +142 -0
  172. package/src/components/Form/formTheme.css +1 -0
  173. package/src/components/Form/formTheme.scss +27 -0
  174. package/src/components/Form/index.js +13 -0
  175. package/src/components/Form/stories/Checkbox.stories.js +41 -0
  176. package/src/components/Form/stories/DragDropFileUploader.stories.js +21 -0
  177. package/src/components/Form/stories/Dropdown.stories.js +124 -0
  178. package/src/components/Form/stories/FileUploader.stories.js +21 -0
  179. package/src/components/Form/stories/FormDefault.stories.js +87 -0
  180. package/src/components/Form/stories/RadioList.stories.js +48 -0
  181. package/src/components/Form/stories/RangeSlider.stories.js +84 -0
  182. package/src/components/Form/stories/TextInput.stories.js +77 -0
  183. package/src/components/Form/stories/Textarea.stories.js +43 -0
  184. package/src/components/Form/stories/Toggle.stories.js +14 -0
  185. package/src/components/Form/stories/form.stories.js +216 -0
  186. package/src/components/InlineModal/InlineModal.js +135 -0
  187. package/src/components/InlineModal/InlineModal.stories.js +54 -0
  188. package/src/components/InlineModal/index.js +4 -0
  189. package/src/components/InlineModal/inlineModal.css +1 -0
  190. package/src/components/InlineModal/inlineModalCore.css +1 -0
  191. package/src/components/InlineModal/inlineModalCore.scss +31 -0
  192. package/src/components/InlineModal/inlineModalTheme.css +1 -0
  193. package/src/components/InlineModal/inlineModalTheme.scss +16 -0
  194. package/src/components/List/List.js +72 -0
  195. package/src/components/List/index.js +3 -0
  196. package/src/components/List/list.css +1 -0
  197. package/src/components/List/list.stories.js +28 -0
  198. package/src/components/List/listCore.css +1 -0
  199. package/src/components/List/listCore.scss +6 -0
  200. package/src/components/List/listTheme.css +0 -0
  201. package/src/components/List/listTheme.scss +0 -0
  202. package/src/components/Modal/Modal.js +99 -0
  203. package/src/components/Modal/Modal.stories.js +54 -0
  204. package/src/components/Modal/index.js +3 -0
  205. package/src/components/Modal/modal.css +1 -0
  206. package/src/components/Modal/modalCore.css +1 -0
  207. package/src/components/Modal/modalCore.scss +34 -0
  208. package/src/components/Modal/modalTheme.css +0 -0
  209. package/src/components/Modal/modalTheme.scss +0 -0
  210. package/src/components/NotificationComponent/NotificationComponent.js +58 -0
  211. package/src/components/NotificationComponent/NotificationComponent.stories.js +28 -0
  212. package/src/components/NotificationComponent/index.js +3 -0
  213. package/src/components/NotificationComponent/notificationComponent.css +1 -0
  214. package/src/components/NotificationComponent/notificationTheme.css +1 -0
  215. package/src/components/NotificationComponent/notificationTheme.scss +30 -0
  216. package/src/components/ProgressBar/ProgressBar.js +45 -0
  217. package/src/components/ProgressBar/ProgressBar.stories.js +14 -0
  218. package/src/components/ProgressBar/index.js +3 -0
  219. package/src/components/ProgressBar/progressBar.css +1 -0
  220. package/src/components/ProgressBar/progressBarCore.css +1 -0
  221. package/src/components/ProgressBar/progressBarCore.scss +14 -0
  222. package/src/components/ProgressBar/progressBarTheme.css +0 -0
  223. package/src/components/ProgressBar/progressBarTheme.scss +0 -0
  224. package/src/components/Table/BaseTable.js +306 -0
  225. package/src/components/Table/PaginationComponent.js +73 -0
  226. package/src/components/Table/Table.js +295 -0
  227. package/src/components/Table/Table.stories.js +198 -0
  228. package/src/components/Table/index.js +8 -0
  229. package/src/components/Table/table.css +1 -0
  230. package/src/components/Table/tableCore.css +1 -0
  231. package/src/components/Table/tableCore.scss +94 -0
  232. package/src/components/Table/tableTheme.css +1 -0
  233. package/src/components/Table/tableTheme.scss +34 -0
  234. package/src/components/TabsComponent/TabsComponent.js +99 -0
  235. package/src/components/TabsComponent/TabsComponent.stories.js +69 -0
  236. package/src/components/TabsComponent/index.js +3 -0
  237. package/src/components/TabsComponent/tabs.css +1 -0
  238. package/src/components/TabsComponent/tabsCore.css +1 -0
  239. package/src/components/TabsComponent/tabsCore.scss +59 -0
  240. package/src/components/TabsComponent/tabsTheme.css +0 -0
  241. package/src/components/TabsComponent/tabsTheme.scss +0 -0
  242. package/src/components/Tooltip/Tooltip.js +87 -0
  243. package/src/components/Tooltip/Tooltip.stories.js +16 -0
  244. package/src/components/Tooltip/index.js +3 -0
  245. package/src/components/Tooltip/tooltipCore.css +1 -0
  246. package/src/components/Tooltip/tooltipCore.scss +22 -0
  247. package/src/components/Tooltip/tooltipTheme.css +1 -0
  248. package/src/components/Tooltip/tooltipTheme.scss +21 -0
  249. package/src/components/core.css +1 -0
  250. package/src/components/core.scss +29 -0
  251. package/src/components/index.js +38 -0
  252. package/src/components/theme.css +1 -0
  253. package/src/components/theme.scss +11 -0
  254. package/src/core/Validators.js +34 -0
  255. package/src/core/customHooks.js +20 -0
  256. package/src/core/dataLoader.js +143 -0
  257. package/src/core/dataLoader.stories.js +123 -0
  258. package/src/core/index.js +3 -0
  259. package/src/core/utils.js +95 -0
  260. package/src/index.js +68 -0
  261. package/vscode-templates/NewStoryTemplate.stories.js +8 -0
  262. /package/{Readme.md → README.md} +0 -0
  263. /package/{components → lib/components}/Accordian/accordianCore.css +0 -0
  264. /package/{components → lib/components}/Accordian/accordianTheme.css +0 -0
  265. /package/{components → lib/components}/Button/buttonTheme.css +0 -0
  266. /package/{components → lib/components}/Form/formCore.css +0 -0
  267. /package/{components → lib/components}/Form/formTheme.css +0 -0
  268. /package/{components → lib/components}/InlineModal/inlineModalCore.css +0 -0
  269. /package/{components → lib/components}/InlineModal/inlineModalTheme.css +0 -0
  270. /package/{components → lib/components}/List/listCore.css +0 -0
  271. /package/{components → lib/components}/List/listTheme.css +0 -0
  272. /package/{components → lib/components}/Modal/modalCore.css +0 -0
  273. /package/{components → lib/components}/Modal/modalTheme.css +0 -0
  274. /package/{components → lib/components}/NotificationComponent/notificationTheme.css +0 -0
  275. /package/{components → lib/components}/ProgressBar/progressBarCore.css +0 -0
  276. /package/{components → lib/components}/ProgressBar/progressBarTheme.css +0 -0
  277. /package/{components → lib/components}/Table/tableCore.css +0 -0
  278. /package/{components → lib/components}/Table/tableTheme.css +0 -0
  279. /package/{components → lib/components}/TabsComponent/tabsCore.css +0 -0
  280. /package/{components → lib/components}/TabsComponent/tabsTheme.css +0 -0
  281. /package/{components → lib/components}/Tooltip/tooltipCore.css +0 -0
  282. /package/{components → lib/components}/Tooltip/tooltipTheme.css +0 -0
  283. /package/{core → lib/core}/Validators.js +0 -0
  284. /package/{core → lib/core}/customHooks.js +0 -0
  285. /package/{core → lib/core}/dataLoader.js +0 -0
  286. /package/{core → lib/core}/dataLoader.stories.js +0 -0
  287. /package/{core → lib/core}/index.js +0 -0
  288. /package/{core → lib/core}/utils.js +0 -0
  289. /package/{index.js → lib/index.js} +0 -0
@@ -0,0 +1,198 @@
1
+ import React, { useState, Fragment, useCallback } from "react";
2
+ import Table from "./Table";
3
+ import DataLoader from "../DataLoader";
4
+ import dataLoader from "../../core/dataLoader";
5
+ import { Input } from "../Form";
6
+ import { TODOS, FRUITS_LIST } from "../../../public/Constants";
7
+
8
+ const getFruitsColumnConfigs = () => {
9
+ let columnConfigs = [
10
+ {
11
+ label: "Id",
12
+ key: "id",
13
+ sortable: true
14
+ },
15
+ {
16
+ label: "Task Name",
17
+ key: "name",
18
+ sortable: true
19
+ }
20
+ ];
21
+
22
+ return columnConfigs;
23
+ };
24
+
25
+ const getTodosColumnConfigs = () => {
26
+ let columnConfigs = [
27
+ {
28
+ label: "Id",
29
+ key: "id",
30
+ },
31
+ {
32
+ label: "Task Name",
33
+ key: "title",
34
+ },
35
+ {
36
+ label: "Status",
37
+ key: "completed",
38
+ valueFormatter: function({ value }) {
39
+ return value ? "Completed" : "Not Started";
40
+ },
41
+ },
42
+ ];
43
+
44
+ return columnConfigs;
45
+ };
46
+
47
+ const getUsersColumnConfigs = () => {
48
+ let columnConfigs = [
49
+ {
50
+ label: "Avatar",
51
+ key: "avatar",
52
+ /* eslint-disable react/prop-types */
53
+ valueFormatter: function renderUserImage({ value }) {
54
+ return <img src={value} />;
55
+ },
56
+ /* eslint-enable react/prop-types */
57
+ },
58
+ {
59
+ label: "first_name",
60
+ key: "name",
61
+ sortable: true,
62
+ valueFormatter: function({ record }) {
63
+ const { first_name, last_name } = record;
64
+
65
+ return `${first_name} ${last_name}`;
66
+ },
67
+ },
68
+ ];
69
+
70
+ return columnConfigs;
71
+ };
72
+
73
+ /* eslint-disable react/prop-types */
74
+ const TODODetail = props => {
75
+ const { parentRecord = {} } = props;
76
+ const { id } = parentRecord;
77
+ const [todoData, setTodoData] = useState({});
78
+ const { title, completed } = todoData;
79
+
80
+ dataLoader.addRequestConfig("getTodoById", {
81
+ method: "GET",
82
+ url: function(params) {
83
+ return `https://jsonplaceholder.typicode.com/todos/${params.id}`;
84
+ },
85
+ });
86
+
87
+ const onDataLoaded = ([todoData]) => {
88
+ setTodoData(todoData);
89
+ };
90
+
91
+ const requests = [
92
+ {
93
+ requestId: "getTodoById",
94
+ urlParams: {
95
+ id
96
+ },
97
+ },
98
+ ];
99
+
100
+ return (
101
+ <DataLoader requests={requests} onDataLoaded={onDataLoaded}>
102
+ <div>
103
+ <b>Title:</b> {title}{" "}
104
+ </div>
105
+ <div>
106
+ <b>Status:</b> {completed ? "Completed" : "Not Completed"}{" "}
107
+ </div>
108
+ </DataLoader>
109
+ );
110
+ };
111
+ /* eslint-enable react/prop-types */
112
+
113
+ export const SimpleUsage = () => {
114
+ return <Table records={FRUITS_LIST}
115
+ columnConfigs={getFruitsColumnConfigs()} />;
116
+ };
117
+
118
+ export const ExpandedTable = () => {
119
+ return (
120
+ <Table
121
+ records={TODOS}
122
+ columnConfigs={getTodosColumnConfigs()}
123
+ isExpandableTable={true}
124
+ ExpandedRowComponent={TODODetail}
125
+ />
126
+ );
127
+ };
128
+
129
+ export const TableWithSearch = () => {
130
+ const [ searchBy, setSearchBy ] = useState("");
131
+
132
+ const onSearchChange = (value) => {
133
+ setSearchBy(value);
134
+ };
135
+
136
+ const getRequestKeys = useCallback(() => ({searchBy: "title"}));
137
+
138
+ return (<Fragment>
139
+ <Input name="searchBy" onChange={onSearchChange} />
140
+ <Table
141
+ records={TODOS} searchBy={searchBy} getRequestKeys={getRequestKeys}
142
+ columnConfigs={getTodosColumnConfigs()}
143
+ />
144
+ </Fragment>);
145
+ };
146
+
147
+ export const TableWithoutPaginationBar = () => {
148
+
149
+ return (<Fragment>
150
+ <Table
151
+ records={TODOS}
152
+ showPaginateBar={false}
153
+ columnConfigs={getTodosColumnConfigs()}
154
+ />
155
+ </Fragment>);
156
+ };
157
+
158
+ export const ServerSideTable = () => {
159
+ const [ searchBy, setSearchBy ] = useState("");
160
+
161
+ dataLoader.addRequestConfig("getUsers", {
162
+ method: "GET",
163
+ url: "https://reqres.in/api/users",
164
+ });
165
+
166
+ const onSearchChange = (value) => {
167
+ setSearchBy(value);
168
+ };
169
+
170
+ const responseFormatter = (response) => {
171
+ return {
172
+ ...response,
173
+ entries: response.data
174
+ };
175
+ };
176
+
177
+ return (<Fragment>
178
+ <Input name="searchBy" onChange={onSearchChange} />
179
+ <Table
180
+ searchBy={searchBy}
181
+ paginationType="SERVER"
182
+ requestId="getUsers"
183
+ perPageKey="per_page"
184
+ responseFormatter={responseFormatter}
185
+ columnConfigs={getUsersColumnConfigs()}
186
+ />
187
+ </Fragment>);
188
+ };
189
+
190
+ export default {
191
+ title: "Table",
192
+
193
+ parameters: {
194
+ info: {
195
+ propTablesExclude: [ServerSideTable],
196
+ },
197
+ },
198
+ };
@@ -0,0 +1,8 @@
1
+ import Table from "./Table";
2
+ import PaginationComponent from "./PaginationComponent";
3
+
4
+ export {
5
+ PaginationComponent
6
+ };
7
+
8
+ export default Table;
@@ -0,0 +1 @@
1
+ .RCB-table{border-collapse:collapse;width:100%}.RCB-table td{padding:10px}.RCB-th{background-color:#125c7f;color:#FFF;font-weight:normal}.RCB-th.RCB-expand-column{width:50px}.RCB-tr .expand-open:before{content:"▼"}.RCB-tr .expand-close:before{content:"▶"}.RCB-parent-row{cursor:pointer}.RCB-even-tr{background-color:#82bed9}.RCB-odd-tr{background-color:#dcf1fa}.RCB-expanded-row{background-color:#ecf2f4}.RCB-paginate-wrapper{background-color:rgba(148,170,202,0.14);text-align:right;font-size:14px;padding:5px}.RCB-paginate-wrapper .RCB-per-page-count{display:inline-block}.RCB-paginate-wrapper .RCB-form-el-cont{margin:0}.RCB-paginate-wrapper .RCB-inline-modal-btn{background:transparent;padding:0}.RCB-paginate-nav{display:inline-block;border-radius:12px;border:solid 1px #8399ae;background-color:#f6f7f9;vertical-align:middle;margin-left:15px;overflow:hidden}.RCB-page-nav{padding:0 5px;text-decoration:none;color:inherit}.RCB-page-nav:first-child{border-right:solid 1px #8399ae}.RCB-page-nav.disabled{color:#ccc;pointer-events:none;cursor:not-allowed}.RCB-no-data{text-align:center}
@@ -0,0 +1 @@
1
+ .RCB-table{border-collapse:collapse;width:100%}.RCB-th.RCB-expand-column{width:50px}.RCB-th-sortable{cursor:pointer}.RCB-th-sort:after{content:"\2B0D"}.RCB-th-asc:after{content:"\25B2"}.RCB-th-dsc:after{content:"\25BC"}.RCB-tr .expand-open:before{content:"▼"}.RCB-tr .expand-close:before{content:"▶"}.RCB-paginate-wrapper .RCB-per-page-count{display:inline-block}.RCB-paginate-wrapper .RCB-form-el-cont{margin:0}.RCB-paginate-wrapper .RCB-inline-modal-btn{background:transparent;padding:0}.RCB-paginate-nav{display:inline-block;border-radius:12px;border:solid 1px #8399ae;background-color:#f6f7f9;vertical-align:middle;margin-left:15px;overflow:hidden}.RCB-page-nav{padding:0 5px;text-decoration:none;color:inherit}.RCB-page-nav:first-child{border-right:solid 1px #8399ae}.RCB-page-nav.disabled{color:#ccc;pointer-events:none;cursor:not-allowed}.RCB-no-data{text-align:center}
@@ -0,0 +1,94 @@
1
+ .RCB {
2
+ &-table {
3
+ border-collapse: collapse;
4
+ width: 100%;
5
+ }
6
+
7
+ &-th {
8
+ &.RCB-expand-column {
9
+ width: 50px;
10
+ }
11
+ }
12
+
13
+ &-th-sortable {
14
+ cursor: pointer;
15
+ }
16
+
17
+ &-th-sort {
18
+ &:after {
19
+ content: "\2B0D"
20
+ }
21
+ }
22
+
23
+ &-th-asc {
24
+ &:after {
25
+ content: "\25B2";
26
+ }
27
+ }
28
+
29
+ &-th-dsc {
30
+ &:after {
31
+ content: "\25BC";
32
+ }
33
+ }
34
+
35
+ &-tr {
36
+
37
+ .expand-open {
38
+ &:before {
39
+ content: "▼"
40
+ }
41
+ }
42
+
43
+ .expand-close {
44
+ &:before {
45
+ content: "▶"
46
+ }
47
+ }
48
+ }
49
+
50
+ &-paginate-wrapper {
51
+ .RCB-per-page-count {
52
+ display: inline-block;
53
+ }
54
+
55
+ .RCB-form-el-cont {
56
+ margin: 0;
57
+ }
58
+
59
+ .RCB-inline-modal-btn {
60
+ background: transparent;
61
+ padding: 0;
62
+ }
63
+ }
64
+
65
+ &-paginate-nav {
66
+ display: inline-block;
67
+ border-radius: 12px;
68
+ border: solid 1px #8399ae;
69
+ background-color: #f6f7f9;
70
+ vertical-align: middle;
71
+ margin-left: 15px;
72
+ overflow: hidden;
73
+ }
74
+
75
+ &-page-nav {
76
+ padding: 0 5px;
77
+ text-decoration: none;
78
+ color: inherit;
79
+
80
+ &:first-child {
81
+ border-right: solid 1px #8399ae;
82
+ }
83
+
84
+ &.disabled {
85
+ color: #ccc;
86
+ pointer-events: none;
87
+ cursor: not-allowed;
88
+ }
89
+ }
90
+
91
+ &-no-data {
92
+ text-align: center;
93
+ }
94
+ }
@@ -0,0 +1 @@
1
+ .RCB-table td{padding:10px}.RCB-th{background-color:#2287b4;color:#FFF;font-weight:normal;padding:10px}.RCB-even-tr{background-color:#FFF}.RCB-odd-tr{background-color:#dcf1fa}.RCB-expanded-row{background-color:#ecf2f4}.RCB-paginate-bar{background-color:#a3c9db;text-align:right;font-size:14px;padding:5px;border-radius:5px 5px 0 0}
@@ -0,0 +1,34 @@
1
+ .RCB {
2
+ &-table {
3
+ td {
4
+ padding: 10px;
5
+ }
6
+ }
7
+
8
+ &-th {
9
+ background-color: #2287b4;
10
+ color: #FFF;
11
+ font-weight: normal;
12
+ padding: 10px;
13
+ }
14
+
15
+ &-even-tr {
16
+ background-color: #FFF;
17
+ }
18
+
19
+ &-odd-tr {
20
+ background-color: #dcf1fa;
21
+ }
22
+
23
+ &-expanded-row {
24
+ background-color: #ecf2f4;
25
+ }
26
+
27
+ &-paginate-bar {
28
+ background-color: #a3c9db;
29
+ text-align: right;
30
+ font-size: 14px;
31
+ padding: 5px;
32
+ border-radius: 5px 5px 0 0;
33
+ }
34
+ }
@@ -0,0 +1,99 @@
1
+ import React, { useState, useEffect } from "react";
2
+ import PropTypes from "prop-types";
3
+ import List from "../List";
4
+
5
+ const DefaultTabTitleItem = (props) => {
6
+ const { itemData, selected, changeTab, disabled:allDisabled } = props;
7
+ const { id, label, disabled } = itemData;
8
+ const isSelected = id === selected;
9
+ const className = `RCB-tab-title ${isSelected ? "selected" : ""} ${(allDisabled || disabled) ? "RCB-tab-disabled" : ""}`;
10
+
11
+ const triggerTabChange = () => {
12
+ changeTab(id);
13
+ };
14
+
15
+ return (<li className={className} selected={isSelected} onClick={triggerTabChange}>
16
+ {label}
17
+ </li>);
18
+ };
19
+
20
+ DefaultTabTitleItem.propTypes = {
21
+ itemData: PropTypes.shape({
22
+ id: PropTypes.string.isRequired,
23
+ label: PropTypes.any.isRequired,
24
+ disabled: PropTypes.bool
25
+ }).isRequired,
26
+ selected: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),
27
+ changeTab: PropTypes.func.isRequired,
28
+ disabled: PropTypes.bool
29
+ };
30
+
31
+ const TabsComponent = (props) => {
32
+ const { className, items, selectedTab, onTabChange, onTabChanged, appearance, disabled, staticTabContent, TabTitleItem } = props;
33
+ const getSelected = () => disabled ? "" : defaultSelected;
34
+ const defaultSelected = selectedTab || (items[0] ? items[0].id : "");
35
+ const [ selected, setSelected ] = useState(getSelected());
36
+ const appearanceClassName = `RCB-tabs-${appearance.toLowerCase()}`;
37
+
38
+ useEffect(() => {
39
+ setSelected(getSelected());
40
+ }, [disabled, selectedTab]);
41
+
42
+ const changeTab = (id) => {
43
+ const changeTab = onTabChange(id);
44
+
45
+ if (changeTab) {
46
+ setSelected(id);
47
+ if (typeof(onTabChanged) === "function") {
48
+ onTabChanged(id);
49
+ }
50
+ }
51
+ };
52
+
53
+ const selecetdTabData = items.find(obj => obj.id === selected);
54
+ const { bodyComponent } = selecetdTabData || {};
55
+
56
+ return (<div className={`RCB-tabs-container ${appearanceClassName} ${className}`}>
57
+ <List items={items} ListItem={TabTitleItem} selected={selected} disabled={disabled} changeTab={changeTab} className="RCB-tabs-header" />
58
+ <div className="RCB-tab-content">
59
+ {staticTabContent || bodyComponent}
60
+ </div>
61
+ </div>)
62
+ };
63
+
64
+ TabsComponent.propTypes = {
65
+ /* custom tab title component */
66
+ TabTitleItem: PropTypes.any,
67
+ /** Pass any additional classNames to Tabs component */
68
+ className: PropTypes.string,
69
+ /** Array of tab items. Each object in array should contain {id, label, bodyComponent: <Component />, disabled} */
70
+ items: PropTypes.arrayOf(PropTypes.shape({
71
+ id: PropTypes.string.isRequired,
72
+ label: PropTypes.any.isRequired,
73
+ bodyComponent: PropTypes.instanceOf(Object),
74
+ disabled: PropTypes.bool
75
+ })).isRequired,
76
+ /** ID of the tab item to be selected */
77
+ selectedTab: PropTypes.string,
78
+ /** Horizontal or vertical tabs */
79
+ appearance: PropTypes.oneOf(["HORIZONTAL", "VERTICAL"]),
80
+ /** Function called when a tab change has been triggerd by the user,
81
+ * return false if you want to stop the tab change action */
82
+ onTabChange: PropTypes.func,
83
+ /** Function called when a tab change action has been completed */
84
+ onTabChanged: PropTypes.func,
85
+ /** disable all tabs */
86
+ disabled: PropTypes.bool,
87
+ /** if you want to show a static tab content in disabled state (i.e. "disabled=true"), pass it in this prop */
88
+ staticTabContent: PropTypes.any
89
+ };
90
+
91
+ TabsComponent.defaultProps = {
92
+ TabTitleItem: DefaultTabTitleItem,
93
+ className: "",
94
+ appearance: "HORIZONTAL",
95
+ disabled: false,
96
+ onTabChange: () => true
97
+ };
98
+
99
+ export default TabsComponent;
@@ -0,0 +1,69 @@
1
+ import React from "react";
2
+ import TabsComponent from "./TabsComponent";
3
+
4
+ const SetupTab = () => {
5
+ return <div>This is Setup Tab</div>;
6
+ };
7
+
8
+ const ConfigTab = () => {
9
+ return <div>This is Configuration Tab</div>;
10
+ };
11
+
12
+ const InfoTab = () => {
13
+ return <div>This is Info Tab</div>;
14
+ };
15
+
16
+ let items = [
17
+ {
18
+ id: "SETUP",
19
+ label: "Setup",
20
+ disabled: true,
21
+ bodyComponent: <SetupTab />,
22
+ },
23
+ {
24
+ id: "CONFIG",
25
+ label: "Configuration",
26
+ bodyComponent: <ConfigTab />,
27
+ },
28
+ {
29
+ id: "INFO",
30
+ label: "Info",
31
+ bodyComponent: <InfoTab />,
32
+ },
33
+ ];
34
+
35
+ export default {
36
+ title: "TabsComponent",
37
+ };
38
+
39
+ export const SimpleUsage = () => {
40
+ const onTabChanged = () => {};
41
+
42
+ return <TabsComponent items={items} selectedTab="CONFIG" onTabChanged={onTabChanged} />;
43
+ };
44
+
45
+ export const HorizontalTabs = () => {
46
+ const onTabChanged = () => {};
47
+
48
+ return (
49
+ <TabsComponent
50
+ items={items}
51
+ selectedTab="CONFIG"
52
+ onTabChanged={onTabChanged}
53
+ appearance="HORIZONTAL"
54
+ />
55
+ );
56
+ };
57
+
58
+ export const VerticalTabs = () => {
59
+ const onTabChanged = () => {};
60
+
61
+ return (
62
+ <TabsComponent
63
+ items={items}
64
+ selectedTab="CONFIG"
65
+ onTabChanged={onTabChanged}
66
+ appearance="VERTICAL"
67
+ />
68
+ );
69
+ };
@@ -0,0 +1,3 @@
1
+ import TabsComponent from "./TabsComponent";
2
+
3
+ export default TabsComponent;
@@ -0,0 +1 @@
1
+ .RCB-tab-title{list-style-type:none;display:inline-block;padding:10px;cursor:pointer}.RCB-tab-title.selected{background:#FFF;font-weight:bold;border:1px solid #cacaca;border-bottom:0;position:relative;z-index:1;bottom:-1px}.RCB-tab-content{list-style-type:none;border:1px solid #cacaca;padding:10px}.RCB-tab-content.selected{display:block}
@@ -0,0 +1 @@
1
+ .RCB-tabs-container{display:flex}.RCB-tab-title{list-style-type:none;padding:10px;cursor:pointer}.RCB-tab-title.selected{background:#FFF;font-weight:bold;border:1px solid #cacaca;position:relative;z-index:1}.RCB-tabs-horizontal{flex-direction:column}.RCB-tabs-horizontal .RCB-tab-title{display:inline-block}.RCB-tabs-horizontal .RCB-tab-title.selected{border-bottom:0;bottom:-1px}.RCB-tabs-vertical .RCB-tab-title{display:block}.RCB-tabs-vertical .RCB-tab-title.selected{border-right:0;right:-1px}.RCB-tab-content{list-style-type:none;border:1px solid #cacaca;padding:10px}.RCB-tab-content.selected{display:block}.RCB-tab-disabled{pointer-events:none;cursor:not-allowed;color:#ccc}
@@ -0,0 +1,59 @@
1
+ .RCB {
2
+ &-tabs-container {
3
+ display: flex;
4
+ }
5
+
6
+ &-tab-title {
7
+ list-style-type: none;
8
+ padding: 10px;
9
+ cursor: pointer;
10
+
11
+ &.selected {
12
+ background: #FFF;
13
+ font-weight: bold;
14
+ border: 1px solid #cacaca;
15
+ position: relative;
16
+ z-index: 1;
17
+ }
18
+ }
19
+
20
+ &-tabs-horizontal {
21
+ flex-direction: column;
22
+
23
+ .RCB-tab-title {
24
+ display: inline-block;
25
+
26
+ &.selected {
27
+ border-bottom: 0;
28
+ bottom: -1px;
29
+ }
30
+ }
31
+ }
32
+
33
+ &-tabs-vertical {
34
+ .RCB-tab-title {
35
+ display: block;
36
+
37
+ &.selected {
38
+ border-right: 0;
39
+ right: -1px;
40
+ }
41
+ }
42
+ }
43
+
44
+ &-tab-content {
45
+ list-style-type: none;
46
+ border: 1px solid #cacaca;
47
+ padding: 10px;
48
+
49
+ &.selected {
50
+ display: block;
51
+ }
52
+ }
53
+
54
+ &-tab-disabled {
55
+ pointer-events: none;
56
+ cursor: not-allowed;
57
+ color: #ccc;
58
+ }
59
+ }
File without changes
File without changes
@@ -0,0 +1,87 @@
1
+ import React, { forwardRef,Fragment, useRef, useState,useImperativeHandle,useEffect } from "react";
2
+ import PropTypes from "prop-types";
3
+
4
+ /* eslint-disable react/prop-types */
5
+ const DefaultTooltipActivator = () => {
6
+ return (<Fragment>i</Fragment>);
7
+ };
8
+
9
+ let Tooltip = (props, ref) => {
10
+ const {
11
+ TooltipActivator,
12
+ activatorAction,
13
+ direction,
14
+ children,
15
+ className,
16
+ ...restProps
17
+ } = props;
18
+
19
+ const [actionClassName, setActionClassName] = useState("");
20
+ const [isOpen, setIsOpen] = useState(false);
21
+ let dirClassName = "RCB-tooltip-right";
22
+ switch(direction) {
23
+ case "bottom":
24
+ dirClassName = "RCB-tooltip-bottom";
25
+ break;
26
+
27
+ case "left":
28
+ dirClassName = "RCB-tooltip-left";
29
+ break;
30
+
31
+ case "top":
32
+ dirClassName = "RCB-tooltip-top";
33
+ break;
34
+
35
+ default:
36
+ dirClassName = "RCB-tooltip-right";
37
+ break;
38
+ }
39
+
40
+ useImperativeHandle(ref, () => ({
41
+ hideToolTip: () => {
42
+ setIsOpen(false);
43
+ }
44
+ }));
45
+
46
+ const showToolTipClick = (e) => {
47
+ e.stopPropagation();
48
+ setIsOpen(!isOpen);
49
+ setActionClassName("RCB-tooltip-click");
50
+ }
51
+
52
+ const showToolTipHover = () => {
53
+ setActionClassName("RCB-tooltip-hover");
54
+ setIsOpen(true);
55
+ }
56
+
57
+ const hideToolTip = () => {
58
+ setIsOpen(false);
59
+ }
60
+
61
+ const eventProps = (activatorAction === "click") ? { onClick: showToolTipClick } : { onMouseEnter: showToolTipHover, onMouseLeave: hideToolTip };
62
+
63
+ return (<div className={`RCB-tooltip ${className}`}>
64
+ <div className="RCB-tooltip-btn" {...eventProps}>
65
+ <TooltipActivator {...restProps}></TooltipActivator>
66
+ </div>
67
+ {isOpen && <div className={`RCB-tooltip-body ${dirClassName} ${actionClassName}`} >
68
+ {children}
69
+ </div>}
70
+ </div>);
71
+ };
72
+
73
+ Tooltip = forwardRef(Tooltip);
74
+
75
+ Tooltip.propTypes = {
76
+ TooltipActivator: PropTypes.func,
77
+ activatorAction: PropTypes.oneOf(["click", "hover"]),
78
+ direction: PropTypes.oneOf(["right", "bottom","left","top"])
79
+ };
80
+
81
+ Tooltip.defaultProps = {
82
+ TooltipActivator: DefaultTooltipActivator,
83
+ activatorAction: "hover",
84
+ direction: "right"
85
+ };
86
+
87
+ export default Tooltip;
@@ -0,0 +1,16 @@
1
+ import React from "react";
2
+ import Tooltip from "./Tooltip";
3
+
4
+ const CustomActivator = () => {
5
+ return <span>Hover over me</span>;
6
+ }
7
+
8
+ export const SimpleUsage = () => {
9
+ return (<Tooltip tooltipActivator={<CustomActivator />}>
10
+ <img src="https://cdn1.iconfinder.com/data/icons/hawcons/32/700231-icon-61-warning-512.png" width={20}/>This is a sample tooltip
11
+ </Tooltip>);
12
+ };
13
+
14
+ export default {
15
+ title: "Tooltip",
16
+ };