@luscii-healthtech/web-ui 0.9.3 → 0.10.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.
@@ -1,5 +1,5 @@
1
1
  /// <reference types="react" />
2
2
  import { ListProps, ListItemProps, OnAssetLoadErrorPayload } from "./List.types";
3
3
  export { ListProps, ListItemProps, OnAssetLoadErrorPayload };
4
- export declare const List: ({ title, headerButton, headerTransparent, items, onAssetLoadError, }: ListProps) => JSX.Element;
4
+ export declare const List: ({ title, headerButton, headerTransparent, items, onAssetLoadError, onDragEnd, }: ListProps) => JSX.Element;
5
5
  export default List;
@@ -19,6 +19,7 @@ export interface ListItemProps {
19
19
  * The header is an optional <li> on top that contains the title and accessories (buttons)
20
20
  */
21
21
  roundTop?: boolean;
22
+ isDraggable?: boolean;
22
23
  }
23
24
  export declare type OnAssetLoadErrorPayload = Pick<ListItemProps, "itemId" | "subtitle" | "title" | "icon">;
24
25
  export declare type ListProps = {
@@ -27,4 +28,8 @@ export declare type ListProps = {
27
28
  headerTransparent?: boolean;
28
29
  items: ListItemProps[];
29
30
  onAssetLoadError?: (payload: OnAssetLoadErrorPayload) => void;
31
+ onDragEnd?: (itemId: string | number, newIndex: number) => void;
30
32
  };
33
+ export interface Dragula {
34
+ destroy?: () => void;
35
+ }
@@ -23,7 +23,7 @@ export interface PaginationMenuLargeProps {
23
23
  resultCount?: number;
24
24
  }
25
25
  export declare type OnPaginationChange = (pageNumber: number, pageSize?: PageSize) => void;
26
- export declare type PageSize = 50 | 100 | 150 | 200;
26
+ export declare type PageSize = 25 | 50 | 75 | 100;
27
27
  export interface Localization {
28
28
  display: string;
29
29
  page: string;
@@ -1,10 +1,14 @@
1
1
  /// <reference types="react" />
2
2
  import { TabItemDetails } from "./TabbarItem";
3
- interface TabbarProps {
3
+ export interface TabbarProps {
4
4
  tabs?: TabItemDetails[];
5
5
  selectedIndex?: number;
6
- onSelect?: (index: number) => void;
6
+ onSelect?: (params: {
7
+ index: number;
8
+ selectedTab: TabItemDetails;
9
+ }) => void;
7
10
  className?: string;
8
11
  }
12
+ export { TabItemDetails };
9
13
  export declare const Tabbar: ({ tabs, selectedIndex, onSelect, className, }: TabbarProps) => JSX.Element;
10
14
  export default Tabbar;
package/dist/index.d.ts CHANGED
@@ -1,7 +1,7 @@
1
1
  export { default as Acknowledgement, ACKNOWLEDGEMENT_TYPE_OPTIONS, } from "./components/Acknowledgement/Acknowledgement";
2
2
  export { default as Avatar } from "./components/Avatar/Avatar";
3
3
  export { default as Badge } from "./components/Badge/Badge";
4
- export { BaseButtonProps as NonPrimaryButtonProps, ButtonWithPendingStateProps as PrimaryButtonProps, ButtonDefinition } from "./components/ButtonV2/ButtonProps.type";
4
+ export { BaseButtonProps as NonPrimaryButtonProps, ButtonWithPendingStateProps as PrimaryButtonProps, ButtonDefinition, } from "./components/ButtonV2/ButtonProps.type";
5
5
  export { PrimaryButton } from "./components/ButtonV2/PrimaryButton";
6
6
  export { SecondaryButton } from "./components/ButtonV2/SecondaryButton";
7
7
  export { TertiaryButton } from "./components/ButtonV2/TertiaryButton";
@@ -40,7 +40,7 @@ export { SettingsMenuButton, SettingsMenuButtonProps, } from "./components/Setti
40
40
  export { Spinner } from "./components/Spinner/Spinner";
41
41
  export { Steps } from "./components/Steps/Steps";
42
42
  export { default as Switcher } from "./components/Switcher/Switcher";
43
- export { default as Tabbar } from "./components/Tabbar/Tabbar";
43
+ export { default as Tabbar, TabbarProps, TabItemDetails, } from "./components/Tabbar/Tabbar";
44
44
  export { default as TabLinks } from "./components/TabLinks/TabLinks";
45
45
  export { default as Tag } from "./components/Tag/Tag";
46
46
  export { default as TagGroup } from "./components/Tag/TagGroup";
@@ -17,6 +17,7 @@ require('react-datepicker/dist/react-datepicker.css');
17
17
  var ClipboardJS = _interopDefault(require('clipboard'));
18
18
  var ReactSelect = require('react-select');
19
19
  var ReactSelect__default = _interopDefault(ReactSelect);
20
+ var dragula = _interopDefault(require('react-dragula'));
20
21
  var debounce = _interopDefault(require('lodash.debounce'));
21
22
  var ReactQuill = _interopDefault(require('react-quill'));
22
23
  require('react-quill/dist/quill.snow.css');
@@ -2312,7 +2313,7 @@ var CustomSelect = /*#__PURE__*/React__default.forwardRef(function (props, _ref)
2312
2313
  }));
2313
2314
  });
2314
2315
 
2315
- var PAGE_SIZES = [50, 100, 150, 200];
2316
+ var PAGE_SIZES = [25, 50, 75, 100];
2316
2317
  var PAGE_SIZE_OPTIONS = /*#__PURE__*/PAGE_SIZES.map(function (pageSize) {
2317
2318
  return {
2318
2319
  label: pageSize.toString(),
@@ -2599,6 +2600,24 @@ var EmptyIcon = function EmptyIcon(props) {
2599
2600
  }));
2600
2601
  };
2601
2602
 
2603
+ var DragIcon = function DragIcon(props) {
2604
+ return /*#__PURE__*/React__default.createElement("svg", {
2605
+ className: props.className,
2606
+ onClick: props.onClick,
2607
+ role: props.onClick ? "button" : undefined,
2608
+ width: "24",
2609
+ height: "24",
2610
+ viewBox: "0 0 24 24",
2611
+ fill: "none",
2612
+ xmlns: "http://www.w3.org/2000/svg"
2613
+ }, /*#__PURE__*/React__default.createElement("path", {
2614
+ fillRule: "evenodd",
2615
+ clipRule: "evenodd",
2616
+ d: "M8 4C7.44772 4 7 4.44772 7 5V7C7 7.55228 7.44772 8 8 8H10C10.5523 8 11 7.55228 11 7V5C11 4.44772 10.5523 4 10 4H8ZM14 4C13.4477 4 13 4.44772 13 5V7C13 7.55228 13.4477 8 14 8H16C16.5523 8 17 7.55228 17 7V5C17 4.44772 16.5523 4 16 4H14ZM7 11C7 10.4477 7.44772 10 8 10H10C10.5523 10 11 10.4477 11 11V13C11 13.5523 10.5523 14 10 14H8C7.44772 14 7 13.5523 7 13V11ZM14 10C13.4477 10 13 10.4477 13 11V13C13 13.5523 13.4477 14 14 14H16C16.5523 14 17 13.5523 17 13V11C17 10.4477 16.5523 10 16 10H14ZM7 17C7 16.4477 7.44772 16 8 16H10C10.5523 16 11 16.4477 11 17V19C11 19.5523 10.5523 20 10 20H8C7.44772 20 7 19.5523 7 19V17ZM14 16C13.4477 16 13 16.4477 13 17V19C13 19.5523 13.4477 20 14 20H16C16.5523 20 17 19.5523 17 19V17C17 16.4477 16.5523 16 16 16H14Z",
2617
+ fill: "currentColor"
2618
+ }));
2619
+ };
2620
+
2602
2621
  var _excluded$9 = ["icon", "subtitle", "title", "accessories", "tooltipId", "onAssetLoadError", "roundTop"];
2603
2622
  var ListItem = function ListItem(_ref) {
2604
2623
  var icon = _ref.icon,
@@ -2641,9 +2660,12 @@ var ListItem = function ListItem(_ref) {
2641
2660
  "hover:bg-blue-50 transition-colors ease-in-out duration-300": restProps.handleItemClick
2642
2661
  }),
2643
2662
  onClick: restProps.handleItemClick,
2663
+ "data-id": restProps.itemId,
2644
2664
  "data-tip": restProps.itemId,
2645
2665
  "data-for": tooltipId
2646
- }, icon && typeof icon === "function" && /*#__PURE__*/React__default.createElement(icon, {
2666
+ }, restProps.isDraggable && /*#__PURE__*/React__default.createElement(DragIcon, {
2667
+ className: "text-slate-300"
2668
+ }), icon && typeof icon === "function" && /*#__PURE__*/React__default.createElement(icon, {
2647
2669
  className: "w-6 h-6"
2648
2670
  }), !loadIconError && icon && typeof icon === "string" && /*#__PURE__*/React__default.createElement("img", {
2649
2671
  src: icon,
@@ -2668,8 +2690,60 @@ var List = function List(_ref) {
2668
2690
  headerButton = _ref.headerButton,
2669
2691
  headerTransparent = _ref.headerTransparent,
2670
2692
  items = _ref.items,
2671
- onAssetLoadError = _ref.onAssetLoadError;
2693
+ onAssetLoadError = _ref.onAssetLoadError,
2694
+ onDragEnd = _ref.onDragEnd;
2695
+ var listRef = React.useRef(null);
2696
+ var dragulaRef = React.useRef(null);
2672
2697
  var hasHeader = !!(title || headerButton);
2698
+ React.useEffect(function () {
2699
+ var _dragulaRef$current;
2700
+
2701
+ (_dragulaRef$current = dragulaRef.current) == null ? void 0 : _dragulaRef$current.destroy == null ? void 0 : _dragulaRef$current.destroy();
2702
+
2703
+ if (onDragEnd && items.length) {
2704
+ dragulaRef.current = setupDragging();
2705
+ }
2706
+
2707
+ return function () {
2708
+ var _dragulaRef$current2;
2709
+
2710
+ (_dragulaRef$current2 = dragulaRef.current) == null ? void 0 : _dragulaRef$current2.destroy == null ? void 0 : _dragulaRef$current2.destroy();
2711
+ };
2712
+ }, [items]);
2713
+
2714
+ var handleDragEnd = function handleDragEnd(element) {
2715
+ var draggedItemId = element.dataset["id"];
2716
+
2717
+ if (listRef.current && draggedItemId) {
2718
+ var itemIdsWithOldOrder = items.map(function (item) {
2719
+ return item.itemId.toString();
2720
+ });
2721
+ var itemIdsWithNewOrder = Array.from(listRef.current.children).map(function (child) {
2722
+ return child.dataset["id"];
2723
+ }).filter(function (itemId) {
2724
+ return !!itemId;
2725
+ });
2726
+ var oldIndexOfDraggedItemId = itemIdsWithOldOrder.indexOf(draggedItemId);
2727
+ var newIndexOfDraggedItemId = itemIdsWithNewOrder.indexOf(draggedItemId);
2728
+
2729
+ if (oldIndexOfDraggedItemId !== newIndexOfDraggedItemId) {
2730
+ onDragEnd == null ? void 0 : onDragEnd(draggedItemId, newIndexOfDraggedItemId);
2731
+ }
2732
+ }
2733
+ };
2734
+
2735
+ var setupDragging = function setupDragging() {
2736
+ if (onDragEnd) {
2737
+ var dragulaInstance = dragula([listRef.current], {
2738
+ revertOnSpill: true
2739
+ });
2740
+ dragulaInstance.on("dragend", handleDragEnd);
2741
+ return dragulaInstance;
2742
+ }
2743
+
2744
+ return null;
2745
+ };
2746
+
2673
2747
  return /*#__PURE__*/React__default.createElement("div", {
2674
2748
  "data-test-id": "list-component"
2675
2749
  }, (title || headerButton) && /*#__PURE__*/React__default.createElement("div", {
@@ -2687,12 +2761,14 @@ var List = function List(_ref) {
2687
2761
  }), !!headerButton && /*#__PURE__*/React__default.createElement("div", {
2688
2762
  className: "space-x-3"
2689
2763
  }, /*#__PURE__*/React__default.createElement(headerButton.buttonType, headerButton.buttonProps))), /*#__PURE__*/React__default.createElement("ul", {
2690
- className: classNames("list-none")
2764
+ className: classNames("list-none"),
2765
+ ref: listRef
2691
2766
  }, items.map(function (item) {
2692
2767
  return /*#__PURE__*/React__default.createElement(ListItem, Object.assign({}, item, {
2693
2768
  roundTop: !hasHeader || hasHeader && headerTransparent,
2694
2769
  key: item.itemId,
2695
- onAssetLoadError: onAssetLoadError
2770
+ onAssetLoadError: onAssetLoadError,
2771
+ isDraggable: !!onDragEnd
2696
2772
  }));
2697
2773
  })));
2698
2774
  };
@@ -3944,35 +4020,32 @@ var TabbarItem = function TabbarItem(_ref) {
3944
4020
  };
3945
4021
 
3946
4022
  var Tabbar = function Tabbar(_ref) {
3947
- var tabs = _ref.tabs,
4023
+ var _ref$tabs = _ref.tabs,
4024
+ tabs = _ref$tabs === void 0 ? [] : _ref$tabs,
3948
4025
  selectedIndex = _ref.selectedIndex,
3949
4026
  onSelect = _ref.onSelect,
3950
4027
  _ref$className = _ref.className,
3951
4028
  className = _ref$className === void 0 ? "" : _ref$className;
3952
4029
 
3953
- var _useState = React.useState(tabs),
3954
- innerTabs = _useState[0],
3955
- setInnerTabs = _useState[1];
3956
-
3957
- var _useState2 = React.useState(selectedIndex),
3958
- innerSelectedIndex = _useState2[0],
3959
- setInnerSelectedIndex = _useState2[1];
4030
+ var _useState = React.useState(selectedIndex),
4031
+ innerSelectedIndex = _useState[0],
4032
+ setInnerSelectedIndex = _useState[1];
3960
4033
 
3961
4034
  React.useEffect(function () {
3962
- setInnerTabs(tabs);
3963
- }, [tabs]);
3964
- React.useEffect(function () {
3965
- setInnerSelectedIndex(innerSelectedIndex);
3966
- }, [innerSelectedIndex]);
4035
+ setInnerSelectedIndex(selectedIndex);
4036
+ }, [selectedIndex]);
3967
4037
 
3968
4038
  function handleOnTabSelect(index) {
3969
4039
  setInnerSelectedIndex(index);
3970
- onSelect == null ? void 0 : onSelect(index);
4040
+ onSelect == null ? void 0 : onSelect({
4041
+ index: index,
4042
+ selectedTab: tabs[index]
4043
+ });
3971
4044
  }
3972
4045
 
3973
4046
  return /*#__PURE__*/React__default.createElement("div", {
3974
- className: "flex flex-row w-full bg-white rounded-xl " + className
3975
- }, innerTabs == null ? void 0 : innerTabs.map(function (tabItemProps, index) {
4047
+ className: "flex flex-row w-full bg-white rounded-xl p-2 " + className
4048
+ }, tabs == null ? void 0 : tabs.map(function (tabItemProps, index) {
3976
4049
  var _tabItemProps$dataTes;
3977
4050
 
3978
4051
  var itemProps = _extends({
@@ -4478,24 +4551,6 @@ var DownArrowIcon = function DownArrowIcon(props) {
4478
4551
  }));
4479
4552
  };
4480
4553
 
4481
- var DragIcon = function DragIcon(props) {
4482
- return /*#__PURE__*/React__default.createElement("svg", {
4483
- className: props.className,
4484
- onClick: props.onClick,
4485
- role: props.onClick ? "button" : undefined,
4486
- width: "24",
4487
- height: "24",
4488
- viewBox: "0 0 24 24",
4489
- fill: "none",
4490
- xmlns: "http://www.w3.org/2000/svg"
4491
- }, /*#__PURE__*/React__default.createElement("path", {
4492
- fillRule: "evenodd",
4493
- clipRule: "evenodd",
4494
- d: "M8 4C7.44772 4 7 4.44772 7 5V7C7 7.55228 7.44772 8 8 8H10C10.5523 8 11 7.55228 11 7V5C11 4.44772 10.5523 4 10 4H8ZM14 4C13.4477 4 13 4.44772 13 5V7C13 7.55228 13.4477 8 14 8H16C16.5523 8 17 7.55228 17 7V5C17 4.44772 16.5523 4 16 4H14ZM7 11C7 10.4477 7.44772 10 8 10H10C10.5523 10 11 10.4477 11 11V13C11 13.5523 10.5523 14 10 14H8C7.44772 14 7 13.5523 7 13V11ZM14 10C13.4477 10 13 10.4477 13 11V13C13 13.5523 13.4477 14 14 14H16C16.5523 14 17 13.5523 17 13V11C17 10.4477 16.5523 10 16 10H14ZM7 17C7 16.4477 7.44772 16 8 16H10C10.5523 16 11 16.4477 11 17V19C11 19.5523 10.5523 20 10 20H8C7.44772 20 7 19.5523 7 19V17ZM14 16C13.4477 16 13 16.4477 13 17V19C13 19.5523 13.4477 20 14 20H16C16.5523 20 17 19.5523 17 19V17C17 16.4477 16.5523 16 16 16H14Z",
4495
- fill: "currentColor"
4496
- }));
4497
- };
4498
-
4499
4554
  var EmptyStateDashboardIcon = function EmptyStateDashboardIcon() {
4500
4555
  return /*#__PURE__*/React__default.createElement("svg", {
4501
4556
  width: "450",