dce-reactkit 3.11.4 → 3.12.0

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/dist/cjs/index.js CHANGED
@@ -1627,7 +1627,9 @@ const style$7 = `
1627
1627
 
1628
1628
  /* Container for Title */
1629
1629
  .TabBox-title-container {
1630
- /* Place on Left */
1630
+ display: flex;
1631
+ justify-content: space-between;
1632
+ align-items: center;
1631
1633
  position: relative;
1632
1634
  left: 0;
1633
1635
  text-align: left;
@@ -1660,6 +1662,19 @@ const style$7 = `
1660
1662
  background: #fdfdfd;
1661
1663
  }
1662
1664
 
1665
+ .TabBox-title-right-container {
1666
+ display: flex;
1667
+ flex-direction: row;
1668
+ align-items: bottom;
1669
+ height: 2.4rem;
1670
+ overflow: visible;
1671
+ }
1672
+
1673
+ .TabBox-title-right-contents {
1674
+ margin-right: 0.5rem;
1675
+ margin-bottom: 0.2rem;
1676
+ }
1677
+
1663
1678
  /* Make the TabBox's Children Appear Above Title if Overlap Occurs */
1664
1679
  .TabBox-children {
1665
1680
  position: relative;
@@ -1673,19 +1688,16 @@ const TabBox = (props) => {
1673
1688
  /*------------------------------------------------------------------------*/
1674
1689
  /* -------------------------------- Setup ------------------------------- */
1675
1690
  /*------------------------------------------------------------------------*/
1676
- /* -------------- Props ------------- */
1677
- const { title, children, noBottomPadding, noBottomMargin, } = props;
1691
+ const { title, children, topRightChildren, noBottomPadding, noBottomMargin, } = props;
1678
1692
  /*------------------------------------------------------------------------*/
1679
1693
  /* ------------------------------- Render ------------------------------- */
1680
1694
  /*------------------------------------------------------------------------*/
1681
- /*----------------------------------------*/
1682
- /* --------------- Main UI -------------- */
1683
- /*----------------------------------------*/
1684
- // Full UI
1685
1695
  return (React__default["default"].createElement("div", { className: `TabBox-container ${noBottomMargin ? '' : 'mb-2'}` },
1686
1696
  React__default["default"].createElement("style", null, style$7),
1687
1697
  React__default["default"].createElement("div", { className: "TabBox-title-container" },
1688
- React__default["default"].createElement("div", { className: "TabBox-title" }, title)),
1698
+ React__default["default"].createElement("div", { className: "TabBox-title" }, title),
1699
+ topRightChildren && (React__default["default"].createElement("div", { className: "TabBox-title-right-container" },
1700
+ React__default["default"].createElement("div", { className: "TabBox-title-right-contents" }, topRightChildren)))),
1689
1701
  React__default["default"].createElement("div", { className: `TabBox-box ps-2 pt-2 pe-2 ${noBottomPadding ? '' : 'pb-2'}` },
1690
1702
  React__default["default"].createElement("div", { className: "TabBox-children" }, children))));
1691
1703
  };
@@ -2695,17 +2707,62 @@ const ItemPicker = (props) => {
2695
2707
  /*------------------------------------------------------------------------*/
2696
2708
  /* -------------- Props ------------- */
2697
2709
  // Destructure all props
2698
- const { title, items, onChanged, noBottomMargin, } = props;
2710
+ const { title, items, onChanged, noBottomMargin, hideSelectAllOrNoneButtons, } = props;
2699
2711
  /*------------------------------------------------------------------------*/
2700
2712
  /* ------------------------- Component Functions ------------------------ */
2701
2713
  /*------------------------------------------------------------------------*/
2714
+ /**
2715
+ * Updates the checked state of an item (including all children)
2716
+ * @author Yuen Ler Chow
2717
+ * @param item the item to update
2718
+ * @param checked the new checked state
2719
+ * @returns the updated item
2720
+ */
2721
+ const updateItemChecked = (item, checked) => {
2722
+ if (item.isGroup) {
2723
+ return Object.assign(Object.assign({}, item), { children: item.children.map((child) => {
2724
+ return updateItemChecked(child, checked);
2725
+ }) });
2726
+ }
2727
+ return Object.assign(Object.assign({}, item), { checked });
2728
+ };
2729
+ /**
2730
+ * Selects all items in the list
2731
+ * @author Yuen Ler Chow
2732
+ */
2733
+ const handleSelectAll = () => {
2734
+ const updatedItems = items.map((item) => {
2735
+ return updateItemChecked(item, true);
2736
+ });
2737
+ onChanged(updatedItems);
2738
+ };
2739
+ /**
2740
+ * Deselects all items in the list
2741
+ * @author Yuen Ler Chow
2742
+ */
2743
+ const handleDeselectAll = () => {
2744
+ const updatedItems = items.map((item) => {
2745
+ return updateItemChecked(item, false);
2746
+ });
2747
+ onChanged(updatedItems);
2748
+ };
2702
2749
  /*------------------------------------------------------------------------*/
2703
2750
  /* ------------------------------- Render ------------------------------- */
2704
2751
  /*------------------------------------------------------------------------*/
2705
2752
  /*----------------------------------------*/
2706
2753
  /* --------------- Main UI -------------- */
2707
2754
  /*----------------------------------------*/
2708
- return (React__default["default"].createElement(TabBox, { title: title, noBottomMargin: noBottomMargin },
2755
+ // Select all/none
2756
+ const selectAllOrNone = (!hideSelectAllOrNoneButtons
2757
+ ? (React__default["default"].createElement("div", { className: "d-flex h-100 align-items-end flex-row" },
2758
+ React__default["default"].createElement("div", { className: "d-flex justify-content-end" },
2759
+ React__default["default"].createElement("div", { className: "me-2", style: { fontSize: '1.2rem' } }, "Select"),
2760
+ React__default["default"].createElement("div", { className: "btn-group", role: "group" },
2761
+ React__default["default"].createElement("button", { type: "button", style: { borderRight: '0.1rem solid white' }, "aria-label": "Select all contexts", className: "btn btn-secondary py-0", onClick: handleSelectAll }, "All"),
2762
+ React__default["default"].createElement("button", { type: "button", "aria-label": "Deselect all contexts", className: "btn btn-secondary py-0", onClick: handleDeselectAll }, "None")))))
2763
+ : undefined);
2764
+ // Main UI
2765
+ return (React__default["default"].createElement(TabBox, { title: title, noBottomMargin: noBottomMargin, topRightChildren: selectAllOrNone },
2709
2766
  React__default["default"].createElement("div", { style: { overflowX: 'auto' } },
2710
2767
  React__default["default"].createElement(NestableItemList, { items: items, onChanged: onChanged }))));
2711
2768
  };