dce-reactkit 5.0.1 → 5.0.3

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/esm/index.js CHANGED
@@ -1763,11 +1763,11 @@ var View;
1763
1763
  })(View || (View = {}));
1764
1764
  /* ------------- Actions ------------ */
1765
1765
  // Types of actions
1766
- var ActionType$a;
1766
+ var ActionType$b;
1767
1767
  (function (ActionType) {
1768
1768
  // Fix invalid date so it is now in range
1769
1769
  ActionType["FixInvalidDate"] = "FixInvalidDate";
1770
- })(ActionType$a || (ActionType$a = {}));
1770
+ })(ActionType$b || (ActionType$b = {}));
1771
1771
  /**
1772
1772
  * Reducer that executes actions
1773
1773
  * @author Gardenia Liu
@@ -1775,9 +1775,9 @@ var ActionType$a;
1775
1775
  * @param action action to execute
1776
1776
  * @returns updated state
1777
1777
  */
1778
- const reducer$b = (state, action) => {
1778
+ const reducer$c = (state, action) => {
1779
1779
  switch (action.type) {
1780
- case ActionType$a.FixInvalidDate: {
1780
+ case ActionType$b.FixInvalidDate: {
1781
1781
  return Object.assign(Object.assign({}, state), { view: View.DateChooser });
1782
1782
  }
1783
1783
  default: {
@@ -1904,7 +1904,7 @@ const SimpleDateChooser = (props) => {
1904
1904
  /* -------------------------------- Setup ------------------------------- */
1905
1905
  /*------------------------------------------------------------------------*/
1906
1906
  /* -------------- Props ------------- */
1907
- const { ariaLabel, name, dontAllowPast, dontAllowFuture, numMonthsToShow, onChange, month, day, year, isDisabled = false, } = props;
1907
+ const { ariaLabel, name, dontAllowPast, dontAllowFuture, numMonthsToShow, onChange, month, day, year, isDisabled = false, hideDay, } = props;
1908
1908
  // Get choices
1909
1909
  const choices = getChoices({
1910
1910
  numMonthsToShow,
@@ -1926,7 +1926,7 @@ const SimpleDateChooser = (props) => {
1926
1926
  : View.DateChooser),
1927
1927
  };
1928
1928
  // Initialize state
1929
- const [state, dispatch] = useReducer(reducer$b, initialState);
1929
+ const [state, dispatch] = useReducer(reducer$c, initialState);
1930
1930
  // Destructure common state
1931
1931
  const { view, } = state;
1932
1932
  /*------------------------------------------------------------------------*/
@@ -1949,7 +1949,7 @@ const SimpleDateChooser = (props) => {
1949
1949
  onChange(today.month, today.day, today.year);
1950
1950
  // Update state
1951
1951
  dispatch({
1952
- type: ActionType$a.FixInvalidDate,
1952
+ type: ActionType$b.FixInvalidDate,
1953
1953
  });
1954
1954
  }
1955
1955
  });
@@ -1990,20 +1990,21 @@ const SimpleDateChooser = (props) => {
1990
1990
  // Change day, month, and year
1991
1991
  onChange(choice.month, choice.days[0], choice.year);
1992
1992
  }, disabled: isDisabled }, monthOptions),
1993
- React__default.createElement("select", { "aria-label": `day for ${ariaLabel}`, className: "custom-select form-select d-inline-block", style: { width: 'auto' }, id: `SimpleDateChooser-${name}-day`, value: day, onChange: (e) => {
1993
+ !hideDay && (React__default.createElement("select", { "aria-label": `day for ${ariaLabel}`, className: "custom-select form-select d-inline-block", style: { width: 'auto' }, id: `SimpleDateChooser-${name}-day`, value: day, onChange: (e) => {
1994
1994
  // Only change the day
1995
1995
  onChange(month, Number.parseInt(e.target.value, 10), year);
1996
- }, disabled: isDisabled }, dayOptions)));
1996
+ }, disabled: isDisabled }, dayOptions))));
1997
1997
  }
1998
1998
  /* --------- DateOutOfRange --------- */
1999
1999
  if (view === View.InvalidDate) {
2000
2000
  body = (React__default.createElement("div", { className: "SimpleDateChooser-inner-container d-inline-block" },
2001
2001
  React__default.createElement("button", { type: "button", className: "btn btn-light", onClick: askToEditInvalidDate, "aria-label": `edit date for ${ariaLabel}` },
2002
2002
  getMonthName(month).full,
2003
- ' ',
2004
- day,
2005
- getOrdinal(day),
2006
- ",",
2003
+ !hideDay && (React__default.createElement(React__default.Fragment, null,
2004
+ ' ',
2005
+ day,
2006
+ getOrdinal(day),
2007
+ ",")),
2007
2008
  ' ',
2008
2009
  year),
2009
2010
  React__default.createElement("button", { type: "button", className: "btn btn-secondary", onClick: askToEditInvalidDate, "aria-label": `edit date for ${ariaLabel}` }, "Edit")));
@@ -2014,6 +2015,30 @@ const SimpleDateChooser = (props) => {
2014
2015
  return (React__default.createElement("span", { className: "SimpleDateChooser-outer-container" }, body));
2015
2016
  };
2016
2017
 
2018
+ /**
2019
+ * A very simple, lightweight month chooser
2020
+ * @author Gabe Abrams
2021
+ */
2022
+ /*------------------------------------------------------------------------*/
2023
+ /* ------------------------------ Component ----------------------------- */
2024
+ /*------------------------------------------------------------------------*/
2025
+ const SimpleMonthChooser = (props) => {
2026
+ /*------------------------------------------------------------------------*/
2027
+ /* -------------------------------- Setup ------------------------------- */
2028
+ /*------------------------------------------------------------------------*/
2029
+ /* -------------- Props ------------- */
2030
+ const { ariaLabel, name, dontAllowPast, dontAllowFuture, numMonthsToShow, onChange, month, year, isDisabled, } = props;
2031
+ /*------------------------------------------------------------------------*/
2032
+ /* ------------------------------- Render ------------------------------- */
2033
+ /*------------------------------------------------------------------------*/
2034
+ /*----------------------------------------*/
2035
+ /* --------------- Main UI -------------- */
2036
+ /*----------------------------------------*/
2037
+ return (React__default.createElement(SimpleDateChooser, { ariaLabel: ariaLabel, name: name, month: month, day: 1, year: year, numMonthsToShow: numMonthsToShow, dontAllowPast: dontAllowPast, dontAllowFuture: dontAllowFuture, isDisabled: isDisabled, hideDay: true, onChange: (newMonth, newDay, newYear) => {
2038
+ onChange(newMonth, newYear);
2039
+ } }));
2040
+ };
2041
+
2017
2042
  /**
2018
2043
  * A very simple, lightweight time chooser
2019
2044
  * @author Gardenia Liu
@@ -2496,27 +2521,27 @@ const PopPendingMark = (props) => {
2496
2521
  */
2497
2522
  /* ------------- Actions ------------ */
2498
2523
  // Types of actions
2499
- var ActionType$9;
2524
+ var ActionType$a;
2500
2525
  (function (ActionType) {
2501
2526
  // Indicate that the text was recently copied
2502
2527
  ActionType["IndicateRecentlyCopied"] = "indicate-recently-copied";
2503
2528
  // Clear the status
2504
2529
  ActionType["ClearRecentlyCopiedStatus"] = "clear-recently-copied-status";
2505
- })(ActionType$9 || (ActionType$9 = {}));
2530
+ })(ActionType$a || (ActionType$a = {}));
2506
2531
  /**
2507
2532
  * Reducer that executes actions
2508
2533
  * @author Gabe Abrams
2509
2534
  * @param state current state
2510
2535
  * @param action action to execute
2511
2536
  */
2512
- const reducer$a = (state, action) => {
2537
+ const reducer$b = (state, action) => {
2513
2538
  switch (action.type) {
2514
- case ActionType$9.IndicateRecentlyCopied: {
2539
+ case ActionType$a.IndicateRecentlyCopied: {
2515
2540
  return {
2516
2541
  recentlyCopied: true,
2517
2542
  };
2518
2543
  }
2519
- case ActionType$9.ClearRecentlyCopiedStatus: {
2544
+ case ActionType$a.ClearRecentlyCopiedStatus: {
2520
2545
  return {
2521
2546
  recentlyCopied: false,
2522
2547
  };
@@ -2542,7 +2567,7 @@ const CopiableBox = (props) => {
2542
2567
  recentlyCopied: false,
2543
2568
  };
2544
2569
  // Initialize state
2545
- const [state, dispatch] = useReducer(reducer$a, initialState);
2570
+ const [state, dispatch] = useReducer(reducer$b, initialState);
2546
2571
  // Destructure common state
2547
2572
  const { recentlyCopied, } = state;
2548
2573
  /*------------------------------------------------------------------------*/
@@ -2562,13 +2587,13 @@ const CopiableBox = (props) => {
2562
2587
  }
2563
2588
  // Show copied notice
2564
2589
  dispatch({
2565
- type: ActionType$9.IndicateRecentlyCopied,
2590
+ type: ActionType$a.IndicateRecentlyCopied,
2566
2591
  });
2567
2592
  // Wait a moment
2568
2593
  yield waitMs(4000);
2569
2594
  // Hide copied notice
2570
2595
  dispatch({
2571
- type: ActionType$9.ClearRecentlyCopiedStatus,
2596
+ type: ActionType$a.ClearRecentlyCopiedStatus,
2572
2597
  });
2573
2598
  });
2574
2599
  /*------------------------------------------------------------------------*/
@@ -2624,20 +2649,20 @@ const CopiableBox = (props) => {
2624
2649
  */
2625
2650
  /* ------------- Actions ------------ */
2626
2651
  // Types of actions
2627
- var ActionType$8;
2652
+ var ActionType$9;
2628
2653
  (function (ActionType) {
2629
2654
  // Toggle whether a child are being shown
2630
2655
  ActionType["ToggleChild"] = "toggle-child";
2631
- })(ActionType$8 || (ActionType$8 = {}));
2656
+ })(ActionType$9 || (ActionType$9 = {}));
2632
2657
  /**
2633
2658
  * Reducer that executes actions
2634
2659
  * @author Gabe Abrams
2635
2660
  * @param state current state
2636
2661
  * @param action action to execute
2637
2662
  */
2638
- const reducer$9 = (state, action) => {
2663
+ const reducer$a = (state, action) => {
2639
2664
  switch (action.type) {
2640
- case ActionType$8.ToggleChild: {
2665
+ case ActionType$9.ToggleChild: {
2641
2666
  return Object.assign(Object.assign({}, state), { childExpanded: Object.assign(Object.assign({}, state.childExpanded), { [String(action.id)]: !state.childExpanded[String(action.id)] }) });
2642
2667
  }
2643
2668
  default: {
@@ -2666,7 +2691,7 @@ const NestableItemList = (props) => {
2666
2691
  childExpanded: initChildExpanded,
2667
2692
  };
2668
2693
  // Initialize state
2669
- const [state, dispatch] = useReducer(reducer$9, initialState);
2694
+ const [state, dispatch] = useReducer(reducer$a, initialState);
2670
2695
  // Destructure common state
2671
2696
  const { childExpanded, } = state;
2672
2697
  /*------------------------------------------------------------------------*/
@@ -2756,7 +2781,7 @@ const NestableItemList = (props) => {
2756
2781
  backgroundColor: 'transparent',
2757
2782
  }, type: "button", onClick: () => {
2758
2783
  dispatch({
2759
- type: ActionType$8.ToggleChild,
2784
+ type: ActionType$9.ToggleChild,
2760
2785
  id: item.id,
2761
2786
  });
2762
2787
  }, "aria-label": `${childExpanded[item.id] ? 'Hide' : 'Show'} items in ${item.name}` },
@@ -2891,7 +2916,7 @@ var SortType;
2891
2916
  })(SortType || (SortType = {}));
2892
2917
  /* ------------- Actions ------------ */
2893
2918
  // Types of actions
2894
- var ActionType$7;
2919
+ var ActionType$8;
2895
2920
  (function (ActionType) {
2896
2921
  // Toggle sort column param
2897
2922
  ActionType["ToggleSortColumn"] = "toggle-sort-column";
@@ -2903,16 +2928,16 @@ var ActionType$7;
2903
2928
  ActionType["ShowAllColumns"] = "show-all-columns";
2904
2929
  // Hide all columns
2905
2930
  ActionType["HideAllColumns"] = "hide-all-columns";
2906
- })(ActionType$7 || (ActionType$7 = {}));
2931
+ })(ActionType$8 || (ActionType$8 = {}));
2907
2932
  /**
2908
2933
  * Reducer that executes actions
2909
2934
  * @author Gabe Abrams
2910
2935
  * @param state current state
2911
2936
  * @param action action to execute
2912
2937
  */
2913
- const reducer$8 = (state, action) => {
2938
+ const reducer$9 = (state, action) => {
2914
2939
  switch (action.type) {
2915
- case ActionType$7.ToggleSortColumn: {
2940
+ case ActionType$8.ToggleSortColumn: {
2916
2941
  if (action.param !== state.sortColumnParam) {
2917
2942
  // Different column param
2918
2943
  return Object.assign(Object.assign({}, state), { sortColumnParam: action.param, sortType: SortType.Ascending });
@@ -2924,22 +2949,22 @@ const reducer$8 = (state, action) => {
2924
2949
  // Stop sorting by column
2925
2950
  return Object.assign(Object.assign({}, state), { sortColumnParam: undefined, sortType: SortType.Ascending });
2926
2951
  }
2927
- case ActionType$7.UpdateColumnVisibility: {
2952
+ case ActionType$8.UpdateColumnVisibility: {
2928
2953
  const { columnVisibilityMap } = state;
2929
2954
  columnVisibilityMap[action.param] = action.visible;
2930
2955
  return Object.assign(Object.assign({}, state), { columnVisibilityMap });
2931
2956
  }
2932
- case ActionType$7.ToggleColVisCusModalVisibility: {
2957
+ case ActionType$8.ToggleColVisCusModalVisibility: {
2933
2958
  return Object.assign(Object.assign({}, state), { columnVisibilityCustomizationModalVisible: !state.columnVisibilityCustomizationModalVisible });
2934
2959
  }
2935
- case ActionType$7.ShowAllColumns: {
2960
+ case ActionType$8.ShowAllColumns: {
2936
2961
  const { columnVisibilityMap } = state;
2937
2962
  Object.keys(columnVisibilityMap).forEach((param) => {
2938
2963
  columnVisibilityMap[param] = true;
2939
2964
  });
2940
2965
  return Object.assign(Object.assign({}, state), { columnVisibilityMap });
2941
2966
  }
2942
- case ActionType$7.HideAllColumns: {
2967
+ case ActionType$8.HideAllColumns: {
2943
2968
  const { columnVisibilityMap } = state;
2944
2969
  Object.keys(columnVisibilityMap).forEach((param) => {
2945
2970
  columnVisibilityMap[param] = false;
@@ -2986,7 +3011,7 @@ const IntelliTable = (props) => {
2986
3011
  columnVisibilityCustomizationModalVisible: false,
2987
3012
  };
2988
3013
  // Initialize state
2989
- const [state, dispatch] = useReducer(reducer$8, initialState);
3014
+ const [state, dispatch] = useReducer(reducer$9, initialState);
2990
3015
  // Destructure common state
2991
3016
  const { sortColumnParam, sortType, columnVisibilityMap, columnVisibilityCustomizationModalVisible, } = state;
2992
3017
  /*------------------------------------------------------------------------*/
@@ -3009,13 +3034,13 @@ const IntelliTable = (props) => {
3009
3034
  return alert('Choose at least one column', 'To continue, you have to choose at least one column to show');
3010
3035
  }
3011
3036
  dispatch({
3012
- type: ActionType$7.ToggleColVisCusModalVisibility,
3037
+ type: ActionType$8.ToggleColVisCusModalVisibility,
3013
3038
  });
3014
3039
  }, okayVariant: Variant$1.Light },
3015
3040
  columns.map((column) => {
3016
3041
  return (React__default.createElement(CheckboxButton, { key: column.param, id: `IntelliTable-${id}-toggle-visibility-${column.param}`, className: "mb-2", text: column.title, onChanged: (checked) => {
3017
3042
  dispatch({
3018
- type: ActionType$7.UpdateColumnVisibility,
3043
+ type: ActionType$8.UpdateColumnVisibility,
3019
3044
  param: column.param,
3020
3045
  visible: checked,
3021
3046
  });
@@ -3024,12 +3049,12 @@ const IntelliTable = (props) => {
3024
3049
  React__default.createElement("div", { className: "mt-3" }, "Or you can:"),
3025
3050
  React__default.createElement("button", { type: "button", id: `IntelliTable-${id}-select-all-columns`, className: "btn btn-secondary me-2", "aria-label": `show all columns in the ${title} table`, onClick: () => {
3026
3051
  dispatch({
3027
- type: ActionType$7.ShowAllColumns,
3052
+ type: ActionType$8.ShowAllColumns,
3028
3053
  });
3029
3054
  } }, "Select All"),
3030
3055
  React__default.createElement("button", { type: "button", id: `IntelliTable-${id}-select-none-columns`, className: "btn btn-secondary", "aria-label": `hide all columns in the ${title} table`, onClick: () => {
3031
3056
  dispatch({
3032
- type: ActionType$7.HideAllColumns,
3057
+ type: ActionType$8.HideAllColumns,
3033
3058
  });
3034
3059
  } }, "Deselect All")));
3035
3060
  }
@@ -3080,7 +3105,7 @@ const IntelliTable = (props) => {
3080
3105
  React__default.createElement("div", null,
3081
3106
  React__default.createElement("button", { type: "button", id: `IntelliTable-${id}-sort-by-${column.param}-button`, className: `btn btn-${sortingByThisColumn ? 'light' : 'secondary'} btn-sm ms-1 ps-1 pe-1 pt-0 pb-0`, "aria-label": sortButtonAriaLabel, onClick: () => {
3082
3107
  dispatch({
3083
- type: ActionType$7.ToggleSortColumn,
3108
+ type: ActionType$8.ToggleSortColumn,
3084
3109
  param: column.param,
3085
3110
  });
3086
3111
  } },
@@ -3269,7 +3294,7 @@ const IntelliTable = (props) => {
3269
3294
  React__default.createElement(CSVDownloadButton, { "aria-label": `download data as csv for ${title}`, id: `IntelliTable-${id}-download-as-csv`, filename: filename, csv: csv }),
3270
3295
  React__default.createElement("button", { type: "button", className: "btn btn-secondary ms-2", "aria-label": `show panel for customizing which columns show in table ${title}`, id: `IntelliTable-${id}-show-column-customization-modal`, onClick: () => {
3271
3296
  dispatch({
3272
- type: ActionType$7.ToggleColVisCusModalVisibility,
3297
+ type: ActionType$8.ToggleColVisCusModalVisibility,
3273
3298
  });
3274
3299
  } },
3275
3300
  "Show/Hide Cols",
@@ -3692,7 +3717,7 @@ const genHumanReadableName = (machineReadableName) => {
3692
3717
  };
3693
3718
  /* ------------- Actions ------------ */
3694
3719
  // Types of actions
3695
- var ActionType$6;
3720
+ var ActionType$7;
3696
3721
  (function (ActionType) {
3697
3722
  // Show the loading bar
3698
3723
  ActionType["StartLoading"] = "start-loading";
@@ -3722,57 +3747,57 @@ var ActionType$6;
3722
3747
  ActionType["SetPageNumber"] = "set-page-number";
3723
3748
  // Reset user made filter change indicator
3724
3749
  ActionType["ResetUserMadeFilterChange"] = "reset-user-made-filter-change";
3725
- })(ActionType$6 || (ActionType$6 = {}));
3750
+ })(ActionType$7 || (ActionType$7 = {}));
3726
3751
  /**
3727
3752
  * Reducer that executes actions
3728
3753
  * @author Gabe Abrams
3729
3754
  * @param state current state
3730
3755
  * @param action action to execute
3731
3756
  */
3732
- const reducer$7 = (state, action) => {
3757
+ const reducer$8 = (state, action) => {
3733
3758
  switch (action.type) {
3734
- case ActionType$6.StartLoading: {
3759
+ case ActionType$7.StartLoading: {
3735
3760
  return Object.assign(Object.assign({}, state), { loading: true });
3736
3761
  }
3737
- case ActionType$6.FinishLoading: {
3762
+ case ActionType$7.FinishLoading: {
3738
3763
  return Object.assign(Object.assign({}, state), { loading: false, logs: action.logs });
3739
3764
  }
3740
- case ActionType$6.ToggleFilterDrawer: {
3765
+ case ActionType$7.ToggleFilterDrawer: {
3741
3766
  return Object.assign(Object.assign({}, state), { expandedFilterDrawer: (state.expandedFilterDrawer === action.filterDrawer
3742
3767
  ? undefined // hide
3743
3768
  : action.filterDrawer) });
3744
3769
  }
3745
- case ActionType$6.HideFilterDrawer: {
3770
+ case ActionType$7.HideFilterDrawer: {
3746
3771
  return Object.assign(Object.assign({}, state), { expandedFilterDrawer: undefined });
3747
3772
  }
3748
- case ActionType$6.ResetFilters: {
3773
+ case ActionType$7.ResetFilters: {
3749
3774
  return Object.assign(Object.assign({}, state), { pendingDateFilterState: action.initDateFilterState, pendingContextFilterState: action.initContextFilterState, pendingTagFilterState: action.initTagFilterState, pendingActionErrorFilterState: action.initActionErrorFilterState, pendingAdvancedFilterState: action.initAdvancedFilterState, pageNumber: 1 });
3750
3775
  }
3751
- case ActionType$6.UpdateDateFilterState: {
3776
+ case ActionType$7.UpdateDateFilterState: {
3752
3777
  return Object.assign(Object.assign({}, state), { pendingDateFilterState: action.dateFilterState, userMadeFilterChange: true });
3753
3778
  }
3754
- case ActionType$6.UpdateContextFilterState: {
3779
+ case ActionType$7.UpdateContextFilterState: {
3755
3780
  return Object.assign(Object.assign({}, state), { pendingContextFilterState: action.contextFilterState, userMadeFilterChange: true });
3756
3781
  }
3757
- case ActionType$6.UpdateTagFilterState: {
3782
+ case ActionType$7.UpdateTagFilterState: {
3758
3783
  return Object.assign(Object.assign({}, state), { pendingTagFilterState: action.tagFilterState, userMadeFilterChange: true });
3759
3784
  }
3760
- case ActionType$6.UpdateActionErrorFilterState: {
3785
+ case ActionType$7.UpdateActionErrorFilterState: {
3761
3786
  return Object.assign(Object.assign({}, state), { pendingActionErrorFilterState: action.actionErrorFilterState, userMadeFilterChange: true });
3762
3787
  }
3763
- case ActionType$6.UpdateAdvancedFilterState: {
3788
+ case ActionType$7.UpdateAdvancedFilterState: {
3764
3789
  return Object.assign(Object.assign({}, state), { pendingAdvancedFilterState: action.advancedFilterState, userMadeFilterChange: true });
3765
3790
  }
3766
- case ActionType$6.SetHasAnotherPage: {
3791
+ case ActionType$7.SetHasAnotherPage: {
3767
3792
  return Object.assign(Object.assign({}, state), { hasAnotherPage: action.hasAnotherPage });
3768
3793
  }
3769
- case ActionType$6.SetNumPages: {
3794
+ case ActionType$7.SetNumPages: {
3770
3795
  return Object.assign(Object.assign({}, state), { numPages: action.numPages });
3771
3796
  }
3772
- case ActionType$6.SetPageNumber: {
3797
+ case ActionType$7.SetPageNumber: {
3773
3798
  return Object.assign(Object.assign({}, state), { pageNumber: action.pageNumber });
3774
3799
  }
3775
- case ActionType$6.ResetUserMadeFilterChange: {
3800
+ case ActionType$7.ResetUserMadeFilterChange: {
3776
3801
  return Object.assign(Object.assign({}, state), { userMadeFilterChange: false });
3777
3802
  }
3778
3803
  default: {
@@ -3905,7 +3930,7 @@ const LogReviewer = (props) => {
3905
3930
  userMadeFilterChange: false,
3906
3931
  };
3907
3932
  // Initialize state
3908
- const [state, dispatch] = useReducer(reducer$7, initialState);
3933
+ const [state, dispatch] = useReducer(reducer$8, initialState);
3909
3934
  // Destructure common state
3910
3935
  const { loading, logs, expandedFilterDrawer, pendingDateFilterState, pendingContextFilterState, pendingTagFilterState, pendingActionErrorFilterState, pendingAdvancedFilterState, pageNumber, numPages, userMadeFilterChange, } = state;
3911
3936
  /* -------------- Refs -------------- */
@@ -3931,7 +3956,7 @@ const LogReviewer = (props) => {
3931
3956
  const fetchLogs = (opts) => __awaiter(void 0, void 0, void 0, function* () {
3932
3957
  const { filters, pageNum, filtersChanged, } = opts;
3933
3958
  dispatch({
3934
- type: ActionType$6.StartLoading,
3959
+ type: ActionType$7.StartLoading,
3935
3960
  });
3936
3961
  try {
3937
3962
  // Send filters to the server
@@ -3948,23 +3973,23 @@ const LogReviewer = (props) => {
3948
3973
  });
3949
3974
  fetchedLogs = fetchedLogs.concat(response.items);
3950
3975
  dispatch({
3951
- type: ActionType$6.SetHasAnotherPage,
3976
+ type: ActionType$7.SetHasAnotherPage,
3952
3977
  hasAnotherPage: response.hasAnotherPage,
3953
3978
  });
3954
3979
  if (filtersChanged && response.numPages !== undefined) {
3955
3980
  dispatch({
3956
- type: ActionType$6.SetNumPages,
3981
+ type: ActionType$7.SetNumPages,
3957
3982
  numPages: response.numPages,
3958
3983
  });
3959
3984
  }
3960
3985
  // Update logs in state
3961
3986
  dispatch({
3962
- type: ActionType$6.FinishLoading,
3987
+ type: ActionType$7.FinishLoading,
3963
3988
  logs: fetchedLogs,
3964
3989
  });
3965
3990
  // Update page number
3966
3991
  dispatch({
3967
- type: ActionType$6.SetPageNumber,
3992
+ type: ActionType$7.SetPageNumber,
3968
3993
  pageNumber: pageNum,
3969
3994
  });
3970
3995
  }
@@ -4023,7 +4048,7 @@ const LogReviewer = (props) => {
4023
4048
  React__default.createElement("div", { className: "LogReviewer-filter-toggle-buttons alert alert-secondary p-2 m-0" },
4024
4049
  React__default.createElement("button", { type: "button", id: "LogReviewer-toggle-date-filter-drawer", className: `btn btn-${FilterDrawer.Date === expandedFilterDrawer ? 'warning' : 'light'} me-2`, "aria-label": "toggle date filter drawer", onClick: () => {
4025
4050
  dispatch({
4026
- type: ActionType$6.ToggleFilterDrawer,
4051
+ type: ActionType$7.ToggleFilterDrawer,
4027
4052
  filterDrawer: FilterDrawer.Date,
4028
4053
  });
4029
4054
  } },
@@ -4031,7 +4056,7 @@ const LogReviewer = (props) => {
4031
4056
  "Date"),
4032
4057
  React__default.createElement("button", { type: "button", id: "LogReviewer-toggle-context-filter-drawer", className: `btn btn-${FilterDrawer.Context === expandedFilterDrawer ? 'warning' : 'light'} me-2`, "aria-label": "toggle context filter drawer", onClick: () => {
4033
4058
  dispatch({
4034
- type: ActionType$6.ToggleFilterDrawer,
4059
+ type: ActionType$7.ToggleFilterDrawer,
4035
4060
  filterDrawer: FilterDrawer.Context,
4036
4061
  });
4037
4062
  } },
@@ -4039,7 +4064,7 @@ const LogReviewer = (props) => {
4039
4064
  "Context"),
4040
4065
  (LogMetadata.Tag && Object.keys(LogMetadata.Tag).length > 0) && (React__default.createElement("button", { type: "button", id: "LogReviewer-toggle-tag-filter-drawer", className: `btn btn-${FilterDrawer.Tag === expandedFilterDrawer ? 'warning' : 'light'} me-2`, "aria-label": "toggle tag filter drawer", onClick: () => {
4041
4066
  dispatch({
4042
- type: ActionType$6.ToggleFilterDrawer,
4067
+ type: ActionType$7.ToggleFilterDrawer,
4043
4068
  filterDrawer: FilterDrawer.Tag,
4044
4069
  });
4045
4070
  } },
@@ -4047,7 +4072,7 @@ const LogReviewer = (props) => {
4047
4072
  "Tag")),
4048
4073
  React__default.createElement("button", { type: "button", id: "LogReviewer-toggle-action-filter-drawer", className: `btn btn-${FilterDrawer.Action === expandedFilterDrawer ? 'warning' : 'light'} me-2`, "aria-label": "toggle action and error filter drawer", onClick: () => {
4049
4074
  dispatch({
4050
- type: ActionType$6.ToggleFilterDrawer,
4075
+ type: ActionType$7.ToggleFilterDrawer,
4051
4076
  filterDrawer: FilterDrawer.Action,
4052
4077
  });
4053
4078
  } },
@@ -4055,7 +4080,7 @@ const LogReviewer = (props) => {
4055
4080
  "Action"),
4056
4081
  React__default.createElement("button", { type: "button", id: "LogReviewer-toggle-advanced-filter-drawer", className: `btn btn-${FilterDrawer.Advanced === expandedFilterDrawer ? 'warning' : 'light'} me-2`, "aria-label": "toggle advanced filter drawer", onClick: () => {
4057
4082
  dispatch({
4058
- type: ActionType$6.ToggleFilterDrawer,
4083
+ type: ActionType$7.ToggleFilterDrawer,
4059
4084
  filterDrawer: FilterDrawer.Advanced,
4060
4085
  });
4061
4086
  } },
@@ -4084,7 +4109,7 @@ const LogReviewer = (props) => {
4084
4109
  filtersChanged: true,
4085
4110
  });
4086
4111
  dispatch({
4087
- type: ActionType$6.ResetFilters,
4112
+ type: ActionType$7.ResetFilters,
4088
4113
  initActionErrorFilterState,
4089
4114
  initAdvancedFilterState,
4090
4115
  initContextFilterState,
@@ -4092,7 +4117,7 @@ const LogReviewer = (props) => {
4092
4117
  initTagFilterState,
4093
4118
  });
4094
4119
  dispatch({
4095
- type: ActionType$6.HideFilterDrawer,
4120
+ type: ActionType$7.HideFilterDrawer,
4096
4121
  });
4097
4122
  } },
4098
4123
  React__default.createElement(FontAwesomeIcon, { icon: faTimes }),
@@ -4100,11 +4125,11 @@ const LogReviewer = (props) => {
4100
4125
  "Reset"),
4101
4126
  userMadeFilterChange && (React__default.createElement("button", { type: "button", id: "LogReviewer-submit-filters-button", className: "btn btn-primary ms-2", "aria-label": "submit filters", onClick: () => {
4102
4127
  dispatch({
4103
- type: ActionType$6.HideFilterDrawer,
4128
+ type: ActionType$7.HideFilterDrawer,
4104
4129
  });
4105
4130
  // Reset user made filter change indicator
4106
4131
  dispatch({
4107
- type: ActionType$6.ResetUserMadeFilterChange,
4132
+ type: ActionType$7.ResetUserMadeFilterChange,
4108
4133
  });
4109
4134
  // Save active filters
4110
4135
  // Deep clone the pending filter states to avoid any reference issues
@@ -4139,7 +4164,7 @@ const LogReviewer = (props) => {
4139
4164
  React__default.createElement(SimpleDateChooser, { ariaLabel: "filter start date", name: "filter-start-date", year: pendingDateFilterState.startDate.year, month: pendingDateFilterState.startDate.month, day: pendingDateFilterState.startDate.day, dontAllowFuture: true, numMonthsToShow: 36, onChange: (month, day, year) => {
4140
4165
  const newDateFilterState = Object.assign(Object.assign({}, pendingDateFilterState), { startDate: { month, day, year } });
4141
4166
  dispatch({
4142
- type: ActionType$6.UpdateDateFilterState,
4167
+ type: ActionType$7.UpdateDateFilterState,
4143
4168
  dateFilterState: newDateFilterState,
4144
4169
  });
4145
4170
  } }),
@@ -4157,7 +4182,7 @@ const LogReviewer = (props) => {
4157
4182
  }
4158
4183
  const newDateFilterState = Object.assign(Object.assign({}, pendingDateFilterState), { endDate: { month, day, year } });
4159
4184
  dispatch({
4160
- type: ActionType$6.UpdateDateFilterState,
4185
+ type: ActionType$7.UpdateDateFilterState,
4161
4186
  dateFilterState: newDateFilterState,
4162
4187
  });
4163
4188
  } })));
@@ -4250,7 +4275,7 @@ const LogReviewer = (props) => {
4250
4275
  });
4251
4276
  // Update state
4252
4277
  dispatch({
4253
- type: ActionType$6.UpdateContextFilterState,
4278
+ type: ActionType$7.UpdateContextFilterState,
4254
4279
  contextFilterState: newContextFilterState,
4255
4280
  });
4256
4281
  } }));
@@ -4265,7 +4290,7 @@ const LogReviewer = (props) => {
4265
4290
  return (React__default.createElement(CheckboxButton, { key: tag, id: `LogReviewer-tag-${tag}-checkbox`, text: description, ariaLabel: `require that logs be tagged with "${description}" or any other selected tag`, checked: pendingTagFilterState[tag], onChanged: (checked) => {
4266
4291
  const newTagFilterState = Object.assign(Object.assign({}, pendingTagFilterState), { [tag]: checked });
4267
4292
  dispatch({
4268
- type: ActionType$6.UpdateTagFilterState,
4293
+ type: ActionType$7.UpdateTagFilterState,
4269
4294
  tagFilterState: newTagFilterState,
4270
4295
  });
4271
4296
  }, checkedVariant: Variant$1.Light, uncheckedVariant: Variant$1.Light }));
@@ -4278,21 +4303,21 @@ const LogReviewer = (props) => {
4278
4303
  React__default.createElement(RadioButton, { id: "LogReviewer-type-all", text: "All Logs", onSelected: () => {
4279
4304
  const newActionErrorFilterState = Object.assign(Object.assign({}, pendingActionErrorFilterState), { type: undefined });
4280
4305
  dispatch({
4281
- type: ActionType$6.UpdateActionErrorFilterState,
4306
+ type: ActionType$7.UpdateActionErrorFilterState,
4282
4307
  actionErrorFilterState: newActionErrorFilterState,
4283
4308
  });
4284
4309
  }, ariaLabel: "show logs of all types", selected: pendingActionErrorFilterState.type === undefined, unselectedVariant: Variant$1.Light }),
4285
4310
  React__default.createElement(RadioButton, { id: "LogReviewer-type-action-only", text: "Action Logs Only", onSelected: () => {
4286
4311
  const newActionErrorFilterState = Object.assign(Object.assign({}, pendingActionErrorFilterState), { type: LogType.Action });
4287
4312
  dispatch({
4288
- type: ActionType$6.UpdateActionErrorFilterState,
4313
+ type: ActionType$7.UpdateActionErrorFilterState,
4289
4314
  actionErrorFilterState: newActionErrorFilterState,
4290
4315
  });
4291
4316
  }, ariaLabel: "only show action logs", selected: pendingActionErrorFilterState.type === LogType.Action, unselectedVariant: Variant$1.Light }),
4292
4317
  React__default.createElement(RadioButton, { id: "LogReviewer-type-error-only", text: "Action Error Only", onSelected: () => {
4293
4318
  const newActionErrorFilterState = Object.assign(Object.assign({}, pendingActionErrorFilterState), { type: LogType.Error });
4294
4319
  dispatch({
4295
- type: ActionType$6.UpdateActionErrorFilterState,
4320
+ type: ActionType$7.UpdateActionErrorFilterState,
4296
4321
  actionErrorFilterState: newActionErrorFilterState,
4297
4322
  });
4298
4323
  }, ariaLabel: "only show error logs", selected: pendingActionErrorFilterState.type === LogType.Error, noMarginOnRight: true, selectedVariant: Variant$1.Light, unselectedVariant: Variant$1.Light })),
@@ -4304,7 +4329,7 @@ const LogReviewer = (props) => {
4304
4329
  return (React__default.createElement(CheckboxButton, { key: action, id: `LogReviewer-action-${action}-checkbox`, text: description, ariaLabel: `include logs with action type "${description}" in results`, noMarginOnRight: true, checked: pendingActionErrorFilterState.action[action], onChanged: (checked) => {
4305
4330
  const newActionErrorFilterState = Object.assign(Object.assign({}, pendingActionErrorFilterState), { action: Object.assign(Object.assign({}, pendingActionErrorFilterState.action), { [action]: checked }) });
4306
4331
  dispatch({
4307
- type: ActionType$6.UpdateActionErrorFilterState,
4332
+ type: ActionType$7.UpdateActionErrorFilterState,
4308
4333
  actionErrorFilterState: newActionErrorFilterState,
4309
4334
  });
4310
4335
  }, checkedVariant: Variant$1.Light, uncheckedVariant: Variant$1.Light }));
@@ -4315,7 +4340,7 @@ const LogReviewer = (props) => {
4315
4340
  return (React__default.createElement(CheckboxButton, { key: target, id: `LogReviewer-target-${target}-checkbox`, text: description, ariaLabel: `include logs with target "${description}" in results`, checked: pendingActionErrorFilterState.target[target], noMarginOnRight: true, onChanged: (checked) => {
4316
4341
  const newActionErrorFilterState = Object.assign(Object.assign({}, pendingActionErrorFilterState), { target: Object.assign(Object.assign({}, pendingActionErrorFilterState.target), { [target]: checked }) });
4317
4342
  dispatch({
4318
- type: ActionType$6.UpdateActionErrorFilterState,
4343
+ type: ActionType$7.UpdateActionErrorFilterState,
4319
4344
  actionErrorFilterState: newActionErrorFilterState,
4320
4345
  });
4321
4346
  }, checkedVariant: Variant$1.Light, uncheckedVariant: Variant$1.Light }));
@@ -4327,7 +4352,7 @@ const LogReviewer = (props) => {
4327
4352
  React__default.createElement("input", { type: "text", className: "form-control", "aria-label": "query for error message", value: pendingActionErrorFilterState.errorMessage, placeholder: "e.g. undefined is not a function", onChange: (e) => {
4328
4353
  const newActionErrorFilterState = Object.assign(Object.assign({}, pendingActionErrorFilterState), { errorMessage: e.target.value });
4329
4354
  dispatch({
4330
- type: ActionType$6.UpdateActionErrorFilterState,
4355
+ type: ActionType$7.UpdateActionErrorFilterState,
4331
4356
  actionErrorFilterState: newActionErrorFilterState,
4332
4357
  });
4333
4358
  } })),
@@ -4338,7 +4363,7 @@ const LogReviewer = (props) => {
4338
4363
  .trim()
4339
4364
  .toUpperCase()) });
4340
4365
  dispatch({
4341
- type: ActionType$6.UpdateActionErrorFilterState,
4366
+ type: ActionType$7.UpdateActionErrorFilterState,
4342
4367
  actionErrorFilterState: newActionErrorFilterState,
4343
4368
  });
4344
4369
  } }))))));
@@ -4352,7 +4377,7 @@ const LogReviewer = (props) => {
4352
4377
  React__default.createElement("input", { type: "text", className: "form-control", "aria-label": "query for user first name", value: pendingAdvancedFilterState.userFirstName, placeholder: "e.g. Divardo", onChange: (e) => {
4353
4378
  const newAdvancedFilterState = Object.assign(Object.assign({}, pendingAdvancedFilterState), { userFirstName: e.target.value });
4354
4379
  dispatch({
4355
- type: ActionType$6.UpdateAdvancedFilterState,
4380
+ type: ActionType$7.UpdateAdvancedFilterState,
4356
4381
  advancedFilterState: newAdvancedFilterState,
4357
4382
  });
4358
4383
  } })),
@@ -4361,7 +4386,7 @@ const LogReviewer = (props) => {
4361
4386
  React__default.createElement("input", { type: "text", className: "form-control", "aria-label": "query for user last name", value: pendingAdvancedFilterState.userLastName, placeholder: "e.g. Calicci", onChange: (e) => {
4362
4387
  const newAdvancedFilterState = Object.assign(Object.assign({}, pendingAdvancedFilterState), { userLastName: e.target.value });
4363
4388
  dispatch({
4364
- type: ActionType$6.UpdateAdvancedFilterState,
4389
+ type: ActionType$7.UpdateAdvancedFilterState,
4365
4390
  advancedFilterState: newAdvancedFilterState,
4366
4391
  });
4367
4392
  } })),
@@ -4371,7 +4396,7 @@ const LogReviewer = (props) => {
4371
4396
  const newAdvancedFilterState = Object.assign(Object.assign({}, pendingAdvancedFilterState), { userEmail: ((e.target.value)
4372
4397
  .trim()) });
4373
4398
  dispatch({
4374
- type: ActionType$6.UpdateAdvancedFilterState,
4399
+ type: ActionType$7.UpdateAdvancedFilterState,
4375
4400
  advancedFilterState: newAdvancedFilterState,
4376
4401
  });
4377
4402
  } })),
@@ -4384,7 +4409,7 @@ const LogReviewer = (props) => {
4384
4409
  const newAdvancedFilterState = Object.assign(Object.assign({}, pendingAdvancedFilterState), { userId: ((e.target.value)
4385
4410
  .trim()) });
4386
4411
  dispatch({
4387
- type: ActionType$6.UpdateAdvancedFilterState,
4412
+ type: ActionType$7.UpdateAdvancedFilterState,
4388
4413
  advancedFilterState: newAdvancedFilterState,
4389
4414
  });
4390
4415
  }
@@ -4393,21 +4418,21 @@ const LogReviewer = (props) => {
4393
4418
  React__default.createElement(CheckboxButton, { text: "Students", onChanged: (checked) => {
4394
4419
  const newAdvancedFilterState = Object.assign(Object.assign({}, pendingAdvancedFilterState), { includeLearners: checked });
4395
4420
  dispatch({
4396
- type: ActionType$6.UpdateAdvancedFilterState,
4421
+ type: ActionType$7.UpdateAdvancedFilterState,
4397
4422
  advancedFilterState: newAdvancedFilterState,
4398
4423
  });
4399
4424
  }, checked: pendingAdvancedFilterState.includeLearners, ariaLabel: "show logs from students", checkedVariant: Variant$1.Light, uncheckedVariant: Variant$1.Light }),
4400
4425
  React__default.createElement(CheckboxButton, { text: "Teaching Team Members", onChanged: (checked) => {
4401
4426
  const newAdvancedFilterState = Object.assign(Object.assign({}, pendingAdvancedFilterState), { includeTTMs: checked });
4402
4427
  dispatch({
4403
- type: ActionType$6.UpdateAdvancedFilterState,
4428
+ type: ActionType$7.UpdateAdvancedFilterState,
4404
4429
  advancedFilterState: newAdvancedFilterState,
4405
4430
  });
4406
4431
  }, checked: pendingAdvancedFilterState.includeTTMs, ariaLabel: "show logs from teaching team members", checkedVariant: Variant$1.Light, uncheckedVariant: Variant$1.Light }),
4407
4432
  React__default.createElement(CheckboxButton, { text: "Admins", onChanged: (checked) => {
4408
4433
  const newAdvancedFilterState = Object.assign(Object.assign({}, pendingAdvancedFilterState), { includeAdmins: checked });
4409
4434
  dispatch({
4410
- type: ActionType$6.UpdateAdvancedFilterState,
4435
+ type: ActionType$7.UpdateAdvancedFilterState,
4411
4436
  advancedFilterState: newAdvancedFilterState,
4412
4437
  });
4413
4438
  }, checked: pendingAdvancedFilterState.includeAdmins, ariaLabel: "show logs from admins", checkedVariant: Variant$1.Light, uncheckedVariant: Variant$1.Light }))),
@@ -4417,7 +4442,7 @@ const LogReviewer = (props) => {
4417
4442
  React__default.createElement("input", { type: "text", className: "form-control", "aria-label": "query for course name", value: pendingAdvancedFilterState.courseName, placeholder: "e.g. GLC 200", onChange: (e) => {
4418
4443
  const newAdvancedFilterState = Object.assign(Object.assign({}, pendingAdvancedFilterState), { courseName: e.target.value });
4419
4444
  dispatch({
4420
- type: ActionType$6.UpdateAdvancedFilterState,
4445
+ type: ActionType$7.UpdateAdvancedFilterState,
4421
4446
  advancedFilterState: newAdvancedFilterState,
4422
4447
  });
4423
4448
  } })),
@@ -4430,7 +4455,7 @@ const LogReviewer = (props) => {
4430
4455
  const newAdvancedFilterState = Object.assign(Object.assign({}, pendingAdvancedFilterState), { courseId: ((e.target.value)
4431
4456
  .trim()) });
4432
4457
  dispatch({
4433
- type: ActionType$6.UpdateAdvancedFilterState,
4458
+ type: ActionType$7.UpdateAdvancedFilterState,
4434
4459
  advancedFilterState: newAdvancedFilterState,
4435
4460
  });
4436
4461
  }
@@ -4440,21 +4465,21 @@ const LogReviewer = (props) => {
4440
4465
  React__default.createElement(RadioButton, { text: "All Devices", ariaLabel: "show logs from all devices", selected: pendingAdvancedFilterState.isMobile === undefined, onSelected: () => {
4441
4466
  const newAdvancedFilterState = Object.assign(Object.assign({}, pendingAdvancedFilterState), { isMobile: undefined });
4442
4467
  dispatch({
4443
- type: ActionType$6.UpdateAdvancedFilterState,
4468
+ type: ActionType$7.UpdateAdvancedFilterState,
4444
4469
  advancedFilterState: newAdvancedFilterState,
4445
4470
  });
4446
4471
  }, selectedVariant: Variant$1.Light, unselectedVariant: Variant$1.Light }),
4447
4472
  React__default.createElement(RadioButton, { text: "Mobile Only", ariaLabel: "show logs from mobile devices", selected: pendingAdvancedFilterState.isMobile === true, onSelected: () => {
4448
4473
  const newAdvancedFilterState = Object.assign(Object.assign({}, pendingAdvancedFilterState), { isMobile: true });
4449
4474
  dispatch({
4450
- type: ActionType$6.UpdateAdvancedFilterState,
4475
+ type: ActionType$7.UpdateAdvancedFilterState,
4451
4476
  advancedFilterState: newAdvancedFilterState,
4452
4477
  });
4453
4478
  }, selectedVariant: Variant$1.Light, unselectedVariant: Variant$1.Light }),
4454
4479
  React__default.createElement(RadioButton, { text: "Desktop Only", ariaLabel: "show logs from desktop devices", selected: pendingAdvancedFilterState.isMobile === false, onSelected: () => {
4455
4480
  const newAdvancedFilterState = Object.assign(Object.assign({}, pendingAdvancedFilterState), { isMobile: false });
4456
4481
  dispatch({
4457
- type: ActionType$6.UpdateAdvancedFilterState,
4482
+ type: ActionType$7.UpdateAdvancedFilterState,
4458
4483
  advancedFilterState: newAdvancedFilterState,
4459
4484
  });
4460
4485
  }, noMarginOnRight: true, selectedVariant: Variant$1.Light, unselectedVariant: Variant$1.Light }))),
@@ -4463,21 +4488,21 @@ const LogReviewer = (props) => {
4463
4488
  React__default.createElement(RadioButton, { text: "Both", ariaLabel: "show logs from all sources", selected: pendingAdvancedFilterState.source === undefined, onSelected: () => {
4464
4489
  const newAdvancedFilterState = Object.assign(Object.assign({}, pendingAdvancedFilterState), { source: undefined });
4465
4490
  dispatch({
4466
- type: ActionType$6.UpdateAdvancedFilterState,
4491
+ type: ActionType$7.UpdateAdvancedFilterState,
4467
4492
  advancedFilterState: newAdvancedFilterState,
4468
4493
  });
4469
4494
  }, selectedVariant: Variant$1.Light, unselectedVariant: Variant$1.Light }),
4470
4495
  React__default.createElement(RadioButton, { text: "Client Only", ariaLabel: "show logs from client source", selected: pendingAdvancedFilterState.source === LogSource.Client, onSelected: () => {
4471
4496
  const newAdvancedFilterState = Object.assign(Object.assign({}, pendingAdvancedFilterState), { source: LogSource.Client });
4472
4497
  dispatch({
4473
- type: ActionType$6.UpdateAdvancedFilterState,
4498
+ type: ActionType$7.UpdateAdvancedFilterState,
4474
4499
  advancedFilterState: newAdvancedFilterState,
4475
4500
  });
4476
4501
  }, selectedVariant: Variant$1.Light, unselectedVariant: Variant$1.Light }),
4477
4502
  React__default.createElement(RadioButton, { text: "Server Only", ariaLabel: "show logs from server source", selected: pendingAdvancedFilterState.source === LogSource.Server, onSelected: () => {
4478
4503
  const newAdvancedFilterState = Object.assign(Object.assign({}, pendingAdvancedFilterState), { source: LogSource.Server });
4479
4504
  dispatch({
4480
- type: ActionType$6.UpdateAdvancedFilterState,
4505
+ type: ActionType$7.UpdateAdvancedFilterState,
4481
4506
  advancedFilterState: newAdvancedFilterState,
4482
4507
  });
4483
4508
  }, noMarginOnRight: true, selectedVariant: Variant$1.Light, unselectedVariant: Variant$1.Light })),
@@ -4488,7 +4513,7 @@ const LogReviewer = (props) => {
4488
4513
  const newAdvancedFilterState = Object.assign(Object.assign({}, pendingAdvancedFilterState), { routePath: ((e.target.value)
4489
4514
  .trim()) });
4490
4515
  dispatch({
4491
- type: ActionType$6.UpdateAdvancedFilterState,
4516
+ type: ActionType$7.UpdateAdvancedFilterState,
4492
4517
  advancedFilterState: newAdvancedFilterState,
4493
4518
  });
4494
4519
  } })),
@@ -4498,7 +4523,7 @@ const LogReviewer = (props) => {
4498
4523
  const newAdvancedFilterState = Object.assign(Object.assign({}, pendingAdvancedFilterState), { routeTemplate: ((e.target.value)
4499
4524
  .trim()) });
4500
4525
  dispatch({
4501
- type: ActionType$6.UpdateAdvancedFilterState,
4526
+ type: ActionType$7.UpdateAdvancedFilterState,
4502
4527
  advancedFilterState: newAdvancedFilterState,
4503
4528
  });
4504
4529
  } })))))));
@@ -12595,11 +12620,11 @@ var CreatableSelect$1 = CreatableSelect;
12595
12620
  */
12596
12621
  /* ------------- Actions ------------ */
12597
12622
  // Types of actions
12598
- var ActionType$5;
12623
+ var ActionType$6;
12599
12624
  (function (ActionType) {
12600
12625
  // Update the input value
12601
12626
  ActionType["SetInputValue"] = "SetInputValue";
12602
- })(ActionType$5 || (ActionType$5 = {}));
12627
+ })(ActionType$6 || (ActionType$6 = {}));
12603
12628
  /**
12604
12629
  * Reducer that executes actions
12605
12630
  * @author Yuen Ler Chow
@@ -12607,9 +12632,9 @@ var ActionType$5;
12607
12632
  * @param action action to execute
12608
12633
  * @returns updated state
12609
12634
  */
12610
- const reducer$6 = (state, action) => {
12635
+ const reducer$7 = (state, action) => {
12611
12636
  switch (action.type) {
12612
- case ActionType$5.SetInputValue: {
12637
+ case ActionType$6.SetInputValue: {
12613
12638
  return Object.assign(Object.assign({}, state), { inputValue: action.value });
12614
12639
  }
12615
12640
  default: {
@@ -12629,7 +12654,7 @@ const CreatableMultiselect = (props) => {
12629
12654
  inputValue: '',
12630
12655
  };
12631
12656
  // Initialize state
12632
- const [state, dispatch] = useReducer(reducer$6, initialState);
12657
+ const [state, dispatch] = useReducer(reducer$7, initialState);
12633
12658
  // Destructure common state
12634
12659
  const { inputValue } = state;
12635
12660
  /*------------------------------------------------------------------------*/
@@ -12706,7 +12731,7 @@ const CreatableMultiselect = (props) => {
12706
12731
  }
12707
12732
  // Reset text field to empty because the values have been added
12708
12733
  dispatch({
12709
- type: ActionType$5.SetInputValue,
12734
+ type: ActionType$6.SetInputValue,
12710
12735
  value: '',
12711
12736
  });
12712
12737
  };
@@ -12745,7 +12770,7 @@ const CreatableMultiselect = (props) => {
12745
12770
  else {
12746
12771
  // simply update the input value to the new input value
12747
12772
  dispatch({
12748
- type: ActionType$5.SetInputValue,
12773
+ type: ActionType$6.SetInputValue,
12749
12774
  value: newValue,
12750
12775
  });
12751
12776
  }
@@ -12797,13 +12822,13 @@ const style$2 = `
12797
12822
  `;
12798
12823
  /* ------------- Actions ------------ */
12799
12824
  // Types of actions
12800
- var ActionType$4;
12825
+ var ActionType$5;
12801
12826
  (function (ActionType) {
12802
12827
  // Update the DBEntry
12803
12828
  ActionType["UpdateDBEntry"] = "UpdateDBEntry";
12804
12829
  // Start the save spinner
12805
12830
  ActionType["StartSave"] = "StartSave";
12806
- })(ActionType$4 || (ActionType$4 = {}));
12831
+ })(ActionType$5 || (ActionType$5 = {}));
12807
12832
  /**
12808
12833
  * Reducer that executes actions
12809
12834
  * @author Yuen Ler Chow
@@ -12811,12 +12836,12 @@ var ActionType$4;
12811
12836
  * @param action action to execute
12812
12837
  * @returns updated state
12813
12838
  */
12814
- const reducer$5 = (state, action) => {
12839
+ const reducer$6 = (state, action) => {
12815
12840
  switch (action.type) {
12816
- case ActionType$4.UpdateDBEntry: {
12841
+ case ActionType$5.UpdateDBEntry: {
12817
12842
  return Object.assign(Object.assign({}, state), { entry: action.dbEntry });
12818
12843
  }
12819
- case ActionType$4.StartSave: {
12844
+ case ActionType$5.StartSave: {
12820
12845
  return Object.assign(Object.assign({}, state), { saving: true });
12821
12846
  }
12822
12847
  default: {
@@ -12841,7 +12866,7 @@ const AddOrEditDBEntry = (props) => {
12841
12866
  saving: false,
12842
12867
  };
12843
12868
  // Initialize state
12844
- const [state, dispatch] = useReducer(reducer$5, initialState);
12869
+ const [state, dispatch] = useReducer(reducer$6, initialState);
12845
12870
  // Destructure common state
12846
12871
  const { entry, saving, } = state;
12847
12872
  /*------------------------------------------------------------------------*/
@@ -12853,7 +12878,7 @@ const AddOrEditDBEntry = (props) => {
12853
12878
  */
12854
12879
  const save = () => __awaiter(void 0, void 0, void 0, function* () {
12855
12880
  // Start the save loading indicator
12856
- dispatch({ type: ActionType$4.StartSave });
12881
+ dispatch({ type: ActionType$5.StartSave });
12857
12882
  // add all default values to the entry
12858
12883
  entryFields.forEach((field) => {
12859
12884
  if (field.defaultValue && !entry[field.objectKey]) {
@@ -13036,7 +13061,7 @@ const AddOrEditDBEntry = (props) => {
13036
13061
  return (React__default.createElement(RadioButton, { key: choice.value, text: choice.title, selected: entry[field.objectKey] === choice.value, onSelected: () => {
13037
13062
  entry[field.objectKey] = choice.value;
13038
13063
  dispatch({
13039
- type: ActionType$4.UpdateDBEntry,
13064
+ type: ActionType$5.UpdateDBEntry,
13040
13065
  dbEntry: entry,
13041
13066
  });
13042
13067
  }, ariaLabel: choice.title }));
@@ -13048,7 +13073,7 @@ const AddOrEditDBEntry = (props) => {
13048
13073
  React__default.createElement("input", { disabled: disabled, type: "text", className: "form-control", placeholder: field.placeholder, "aria-describedby": "AddOrEditDBEntry-form-name-label", value: entry[field.objectKey] || '', onChange: (e) => {
13049
13074
  entry[field.objectKey] = (e.target.value);
13050
13075
  dispatch({
13051
- type: ActionType$4.UpdateDBEntry,
13076
+ type: ActionType$5.UpdateDBEntry,
13052
13077
  dbEntry: entry,
13053
13078
  });
13054
13079
  } }))));
@@ -13061,7 +13086,7 @@ const AddOrEditDBEntry = (props) => {
13061
13086
  entry[field.objectKey] = (e.target.value
13062
13087
  .replace(/[^0-9]/g, ''));
13063
13088
  dispatch({
13064
- type: ActionType$4.UpdateDBEntry,
13089
+ type: ActionType$5.UpdateDBEntry,
13065
13090
  dbEntry: entry,
13066
13091
  });
13067
13092
  } }))));
@@ -13091,7 +13116,7 @@ const AddOrEditDBEntry = (props) => {
13091
13116
  }
13092
13117
  // Save
13093
13118
  dispatch({
13094
- type: ActionType$4.UpdateDBEntry,
13119
+ type: ActionType$5.UpdateDBEntry,
13095
13120
  dbEntry: entry,
13096
13121
  });
13097
13122
  }, ariaLabel: choice.title }));
@@ -13106,7 +13131,7 @@ const AddOrEditDBEntry = (props) => {
13106
13131
  // Update entry and save
13107
13132
  entry[field.objectKey] = values;
13108
13133
  dispatch({
13109
- type: ActionType$4.UpdateDBEntry,
13134
+ type: ActionType$5.UpdateDBEntry,
13110
13135
  dbEntry: entry,
13111
13136
  });
13112
13137
  } })))));
@@ -13119,7 +13144,7 @@ const AddOrEditDBEntry = (props) => {
13119
13144
  React__default.createElement(CreatableMultiselect, { disabled: disabled, type: DBEntryFieldType$1.NumberArray, values: entry[field.objectKey] || [], onChange: (values) => {
13120
13145
  entry[field.objectKey] = values;
13121
13146
  dispatch({
13122
- type: ActionType$4.UpdateDBEntry,
13147
+ type: ActionType$5.UpdateDBEntry,
13123
13148
  dbEntry: entry,
13124
13149
  });
13125
13150
  } })))));
@@ -13193,7 +13218,7 @@ const generateEndpointPath = (collectionName, adminsOnly = true) => {
13193
13218
  */
13194
13219
  /* ------------- Actions ------------ */
13195
13220
  // Types of actions
13196
- var ActionType$3;
13221
+ var ActionType$4;
13197
13222
  (function (ActionType) {
13198
13223
  // Show adder
13199
13224
  ActionType["ShowAdder"] = "ShowAdder";
@@ -13207,7 +13232,7 @@ var ActionType$3;
13207
13232
  ActionType["StartDelete"] = "StartDelete";
13208
13233
  // Finish deletion process
13209
13234
  ActionType["FinishDelete"] = "FinishDelete";
13210
- })(ActionType$3 || (ActionType$3 = {}));
13235
+ })(ActionType$4 || (ActionType$4 = {}));
13211
13236
  /**
13212
13237
  * Reducer that executes actions
13213
13238
  * @author Yuen Ler Chow
@@ -13215,18 +13240,18 @@ var ActionType$3;
13215
13240
  * @param action action to execute
13216
13241
  * @returns updated state
13217
13242
  */
13218
- const reducer$4 = (state, action) => {
13243
+ const reducer$5 = (state, action) => {
13219
13244
  switch (action.type) {
13220
- case ActionType$3.FinishLoading: {
13245
+ case ActionType$4.FinishLoading: {
13221
13246
  return Object.assign(Object.assign({}, state), { loading: false, dbEntries: action.dbEntries });
13222
13247
  }
13223
- case ActionType$3.ShowAdder: {
13248
+ case ActionType$4.ShowAdder: {
13224
13249
  return Object.assign(Object.assign({}, state), { adding: true, dbEntryToEdit: undefined });
13225
13250
  }
13226
- case ActionType$3.ShowEditor: {
13251
+ case ActionType$4.ShowEditor: {
13227
13252
  return Object.assign(Object.assign({}, state), { adding: false, dbEntryToEdit: action.dbEntry });
13228
13253
  }
13229
- case ActionType$3.FinishAdd: {
13254
+ case ActionType$4.FinishAdd: {
13230
13255
  // Handle cancel
13231
13256
  const finishedEntry = action.dbEntry;
13232
13257
  if (!finishedEntry) {
@@ -13250,10 +13275,10 @@ const reducer$4 = (state, action) => {
13250
13275
  // Update the state
13251
13276
  return Object.assign(Object.assign({}, state), { adding: false, dbEntryToEdit: undefined, dbEntries: updatedDbEntries });
13252
13277
  }
13253
- case ActionType$3.StartDelete: {
13278
+ case ActionType$4.StartDelete: {
13254
13279
  return Object.assign(Object.assign({}, state), { loading: true });
13255
13280
  }
13256
- case ActionType$3.FinishDelete: {
13281
+ case ActionType$4.FinishDelete: {
13257
13282
  return Object.assign(Object.assign({}, state), { loading: false,
13258
13283
  // Remove the deleted entry from the list
13259
13284
  dbEntries: state.dbEntries.filter((entry) => {
@@ -13279,7 +13304,7 @@ const DBEntryManagerPanel = (props) => {
13279
13304
  loading: true,
13280
13305
  };
13281
13306
  // Initialize state
13282
- const [state, dispatch] = useReducer(reducer$4, initialState);
13307
+ const [state, dispatch] = useReducer(reducer$5, initialState);
13283
13308
  // Destructure common state
13284
13309
  const { adding, dbEntryToEdit, dbEntries, loading, } = state;
13285
13310
  /*------------------------------------------------------------------------*/
@@ -13305,7 +13330,7 @@ const DBEntryManagerPanel = (props) => {
13305
13330
  try {
13306
13331
  // Start loader
13307
13332
  dispatch({
13308
- type: ActionType$3.StartDelete,
13333
+ type: ActionType$4.StartDelete,
13309
13334
  });
13310
13335
  // Perform deletion
13311
13336
  yield visitServerEndpoint({
@@ -13314,7 +13339,7 @@ const DBEntryManagerPanel = (props) => {
13314
13339
  });
13315
13340
  // Finish loader
13316
13341
  dispatch({
13317
- type: ActionType$3.FinishDelete,
13342
+ type: ActionType$4.FinishDelete,
13318
13343
  dbEntry: entry,
13319
13344
  idPropName,
13320
13345
  });
@@ -13343,7 +13368,7 @@ const DBEntryManagerPanel = (props) => {
13343
13368
  });
13344
13369
  // Save loaded data
13345
13370
  dispatch({
13346
- type: ActionType$3.FinishLoading,
13371
+ type: ActionType$4.FinishLoading,
13347
13372
  dbEntries: data,
13348
13373
  });
13349
13374
  }
@@ -13386,7 +13411,7 @@ const DBEntryManagerPanel = (props) => {
13386
13411
  React__default.createElement("span", { className: "d-none d-md-inline ms-1" }, "Remove")),
13387
13412
  !disableEdit && (React__default.createElement("button", { type: "button", id: `DBEntryManagerPanel-edit-with-id-${entry[idPropName]}`, className: "btn btn-primary", "aria-label": `edit db entry: ${entry[titlePropName]}`, onClick: () => {
13388
13413
  dispatch({
13389
- type: ActionType$3.ShowEditor,
13414
+ type: ActionType$4.ShowEditor,
13390
13415
  dbEntry: entry,
13391
13416
  });
13392
13417
  } },
@@ -13396,7 +13421,7 @@ const DBEntryManagerPanel = (props) => {
13396
13421
  React__default.createElement("div", { className: "d-grid" },
13397
13422
  React__default.createElement("button", { type: "button", id: "DBEntryManagerPanel-add-entry", className: "btn btn-lg btn-primary", "aria-label": `add a new ${itemName} entry to the list of entries`, onClick: () => {
13398
13423
  dispatch({
13399
- type: ActionType$3.ShowAdder,
13424
+ type: ActionType$4.ShowAdder,
13400
13425
  });
13401
13426
  } },
13402
13427
  React__default.createElement(FontAwesomeIcon, { icon: faPlus, className: "me-2" }),
@@ -13408,7 +13433,7 @@ const DBEntryManagerPanel = (props) => {
13408
13433
  if (!loading && (adding || dbEntryToEdit)) {
13409
13434
  body = (React__default.createElement(AddOrEditDBEntry, { saveEndpointPath: endpoint, validateEntry: validateEntry, modifyEntry: modifyEntry, entryFields: entryFields, dbEntryToEdit: dbEntryToEdit, idPropName: idPropName, entries: dbEntries, itemName: itemName, onFinished: (entry) => {
13410
13435
  dispatch({
13411
- type: ActionType$3.FinishAdd,
13436
+ type: ActionType$4.FinishAdd,
13412
13437
  dbEntry: entry,
13413
13438
  idPropName,
13414
13439
  });
@@ -13584,25 +13609,25 @@ const getItemIds = (items) => {
13584
13609
  };
13585
13610
  /* ------------- Actions ------------ */
13586
13611
  // Types of actions
13587
- var ActionType$2;
13612
+ var ActionType$3;
13588
13613
  (function (ActionType) {
13589
13614
  // Hide the "jump to bottom" button
13590
13615
  ActionType["HideJumpToBottomButton"] = "HideJumpToBottomButton";
13591
13616
  // Show the "jump to bottom" button
13592
13617
  ActionType["ShowJumpToBottomButton"] = "ShowJumpToBottomButton";
13593
- })(ActionType$2 || (ActionType$2 = {}));
13618
+ })(ActionType$3 || (ActionType$3 = {}));
13594
13619
  /**
13595
13620
  * Reducer that executes actions
13596
13621
  * @author Gabe Abrams
13597
13622
  * @param state current state
13598
13623
  * @param action action to execute
13599
13624
  */
13600
- const reducer$3 = (state, action) => {
13625
+ const reducer$4 = (state, action) => {
13601
13626
  switch (action.type) {
13602
- case ActionType$2.HideJumpToBottomButton: {
13627
+ case ActionType$3.HideJumpToBottomButton: {
13603
13628
  return Object.assign(Object.assign({}, state), { jumpToBottomButtonVisible: false });
13604
13629
  }
13605
- case ActionType$2.ShowJumpToBottomButton: {
13630
+ case ActionType$3.ShowJumpToBottomButton: {
13606
13631
  return Object.assign(Object.assign({}, state), { jumpToBottomButtonVisible: true });
13607
13632
  }
13608
13633
  default: {
@@ -13626,7 +13651,7 @@ const AutoscrollToBottomContainer = (props) => {
13626
13651
  jumpToBottomButtonVisible: false,
13627
13652
  };
13628
13653
  // Initialize state
13629
- const [state, dispatch] = useReducer(reducer$3, initialState);
13654
+ const [state, dispatch] = useReducer(reducer$4, initialState);
13630
13655
  // Destructure common state
13631
13656
  const { jumpToBottomButtonVisible, } = state;
13632
13657
  /* -------------- Refs -------------- */
@@ -13672,7 +13697,7 @@ const AutoscrollToBottomContainer = (props) => {
13672
13697
  }
13673
13698
  // Update state
13674
13699
  dispatch({
13675
- type: ActionType$2.HideJumpToBottomButton,
13700
+ type: ActionType$3.HideJumpToBottomButton,
13676
13701
  });
13677
13702
  // Scroll to bottom
13678
13703
  container.current.scrollTop = (container.current.scrollHeight
@@ -13696,7 +13721,7 @@ const AutoscrollToBottomContainer = (props) => {
13696
13721
  if (isScrolledToBottom()) {
13697
13722
  // Hide button
13698
13723
  dispatch({
13699
- type: ActionType$2.HideJumpToBottomButton,
13724
+ type: ActionType$3.HideJumpToBottomButton,
13700
13725
  });
13701
13726
  }
13702
13727
  };
@@ -13738,7 +13763,7 @@ const AutoscrollToBottomContainer = (props) => {
13738
13763
  else {
13739
13764
  // Not scrolled to bottom. Show "jump to bottom" button.
13740
13765
  dispatch({
13741
- type: ActionType$2.ShowJumpToBottomButton,
13766
+ type: ActionType$3.ShowJumpToBottomButton,
13742
13767
  });
13743
13768
  }
13744
13769
  }, [items]);
@@ -13808,25 +13833,25 @@ const combineClassNames = (classNames) => {
13808
13833
  */
13809
13834
  /* ------------- Actions ------------ */
13810
13835
  // Types of actions
13811
- var ActionType$1;
13836
+ var ActionType$2;
13812
13837
  (function (ActionType) {
13813
13838
  // Start hovering on an option
13814
13839
  ActionType["StartHover"] = "StartHover";
13815
13840
  // Stop hovering on an option
13816
13841
  ActionType["StopHover"] = "StopHover";
13817
- })(ActionType$1 || (ActionType$1 = {}));
13842
+ })(ActionType$2 || (ActionType$2 = {}));
13818
13843
  /**
13819
13844
  * Reducer that executes actions
13820
13845
  * @author Gabe Abrams
13821
13846
  * @param state current state
13822
13847
  * @param action action to execute
13823
13848
  */
13824
- const reducer$2 = (state, action) => {
13849
+ const reducer$3 = (state, action) => {
13825
13850
  switch (action.type) {
13826
- case ActionType$1.StartHover: {
13851
+ case ActionType$2.StartHover: {
13827
13852
  return Object.assign(Object.assign({}, state), { hoveredOptionId: action.hoveredOptionId });
13828
13853
  }
13829
- case ActionType$1.StopHover: {
13854
+ case ActionType$2.StopHover: {
13830
13855
  return Object.assign(Object.assign({}, state), { hoveredOptionId: undefined });
13831
13856
  }
13832
13857
  default: {
@@ -13850,7 +13875,7 @@ const MultiSwitch = (props) => {
13850
13875
  hoveredOptionId: undefined,
13851
13876
  };
13852
13877
  // Initialize state
13853
- const [state, dispatch] = useReducer(reducer$2, initialState);
13878
+ const [state, dispatch] = useReducer(reducer$3, initialState);
13854
13879
  // Destructure common state
13855
13880
  const { hoveredOptionId, } = state;
13856
13881
  /*------------------------------------------------------------------------*/
@@ -13982,27 +14007,27 @@ const MultiSwitch = (props) => {
13982
14007
  : `click to select option "${option.label}"`), onClick: () => {
13983
14008
  // Remove hover
13984
14009
  dispatch({
13985
- type: ActionType$1.StopHover,
14010
+ type: ActionType$2.StopHover,
13986
14011
  });
13987
14012
  // Notify parent
13988
14013
  onChange(option.id);
13989
14014
  }, onMouseEnter: () => {
13990
14015
  dispatch({
13991
- type: ActionType$1.StartHover,
14016
+ type: ActionType$2.StartHover,
13992
14017
  hoveredOptionId: option.id,
13993
14018
  });
13994
14019
  }, onMouseLeave: () => {
13995
14020
  dispatch({
13996
- type: ActionType$1.StopHover,
14021
+ type: ActionType$2.StopHover,
13997
14022
  });
13998
14023
  }, onFocus: () => {
13999
14024
  dispatch({
14000
- type: ActionType$1.StartHover,
14025
+ type: ActionType$2.StartHover,
14001
14026
  hoveredOptionId: option.id,
14002
14027
  });
14003
14028
  }, onBlur: () => {
14004
14029
  dispatch({
14005
- type: ActionType$1.StopHover,
14030
+ type: ActionType$2.StopHover,
14006
14031
  });
14007
14032
  }, style: {
14008
14033
  pointerEvents: ((option.id === selectedOptionId)
@@ -14041,13 +14066,13 @@ var DropdownItemType$1 = DropdownItemType;
14041
14066
  */
14042
14067
  /* ------------- Actions ------------ */
14043
14068
  // Types of actions
14044
- var ActionType;
14069
+ var ActionType$1;
14045
14070
  (function (ActionType) {
14046
14071
  // Toggle opening the dropdown menu
14047
14072
  ActionType["ToggleDropdown"] = "ToggleDropdown";
14048
14073
  // Close the dropdown menu
14049
14074
  ActionType["CloseDropdown"] = "CloseDropdown";
14050
- })(ActionType || (ActionType = {}));
14075
+ })(ActionType$1 || (ActionType$1 = {}));
14051
14076
  /**
14052
14077
  * Reducer that executes actions
14053
14078
  * @author Alessandra De Lucas
@@ -14055,12 +14080,12 @@ var ActionType;
14055
14080
  * @param state current state
14056
14081
  * @param action action to execute
14057
14082
  */
14058
- const reducer$1 = (state, action) => {
14083
+ const reducer$2 = (state, action) => {
14059
14084
  switch (action.type) {
14060
- case ActionType.ToggleDropdown: {
14085
+ case ActionType$1.ToggleDropdown: {
14061
14086
  return Object.assign(Object.assign({}, state), { isDropdownOpen: !state.isDropdownOpen });
14062
14087
  }
14063
- case ActionType.CloseDropdown: {
14088
+ case ActionType$1.CloseDropdown: {
14064
14089
  return Object.assign(Object.assign({}, state), { isDropdownOpen: false });
14065
14090
  }
14066
14091
  default: {
@@ -14084,7 +14109,7 @@ const Dropdown = (props) => {
14084
14109
  isDropdownOpen: false,
14085
14110
  };
14086
14111
  // Initialize state
14087
- const [state, dispatch] = useReducer(reducer$1, initialState);
14112
+ const [state, dispatch] = useReducer(reducer$2, initialState);
14088
14113
  // Destructure common state
14089
14114
  const { isDropdownOpen, } = state;
14090
14115
  /* -------------- Refs -------------- */
@@ -14104,7 +14129,7 @@ const Dropdown = (props) => {
14104
14129
  dropdownRef.current
14105
14130
  // Click occurred outside the dropdown
14106
14131
  && !dropdownRef.current.contains(event.target)) {
14107
- dispatch({ type: ActionType.CloseDropdown });
14132
+ dispatch({ type: ActionType$1.CloseDropdown });
14108
14133
  }
14109
14134
  };
14110
14135
  /*------------------------------------------------------------------------*/
@@ -14133,7 +14158,7 @@ const Dropdown = (props) => {
14133
14158
  dropdownButton.variant === Variant$1.Light && 'text-dark',
14134
14159
  ]), type: "button", id: dropdownButton.id, "aria-expanded": isDropdownOpen, "aria-label": dropdownButton.ariaLabel, onClick: () => {
14135
14160
  dispatch({
14136
- type: ActionType.ToggleDropdown,
14161
+ type: ActionType$1.ToggleDropdown,
14137
14162
  });
14138
14163
  } }, dropdownButton.content),
14139
14164
  React__default.createElement("ul", { className: combineClassNames([
@@ -14155,7 +14180,7 @@ const Dropdown = (props) => {
14155
14180
  React__default.createElement("button", { type: "button", "aria-label": item.ariaLabel, className: "dropdown-item", onClick: (e) => {
14156
14181
  e.preventDefault();
14157
14182
  dispatch({
14158
- type: ActionType.CloseDropdown,
14183
+ type: ActionType$1.CloseDropdown,
14159
14184
  });
14160
14185
  item.onClick();
14161
14186
  } }, item.content)));
@@ -14363,6 +14388,150 @@ const ProgressBar = (props) => {
14363
14388
  "\u00A0"))));
14364
14389
  };
14365
14390
 
14391
+ /**
14392
+ * Fake progress bar that approaches completion but never fully finishes.
14393
+ * Built on top of the existing ProgressBar component.
14394
+ *
14395
+ * Two phases:
14396
+ * 1. Fast phase (0–90%): random jumps of 1–5% at randomized intervals,
14397
+ * paced to reach ~90% in roughly estimatedTimeSec seconds.
14398
+ * 2. Slow phase (90–99%): crawls 1% at a time with longer random delays,
14399
+ * never reaching 100% on its own.
14400
+ *
14401
+ * When isFinished becomes true, the bar immediately jumps to 100%.
14402
+ * @author Yuen Ler Chow
14403
+ */
14404
+ /*------------------------------------------------------------------------*/
14405
+ /* ------------------------------ Constants ----------------------------- */
14406
+ /*------------------------------------------------------------------------*/
14407
+ // Percent where the bar switches from fast random jumps to a slow crawl
14408
+ const SLOW_PHASE_START_PERCENT = 90;
14409
+ // Highest percent the bar will reach on its own (before isFinished is true)
14410
+ const MAX_UNFINISHED_PERCENT = 99;
14411
+ // Average step size during the fast phase (uniform random from 1–5)
14412
+ const AVG_FAST_PHASE_STEP = 3;
14413
+ // Minimum delay (ms) between steps during the slow phase
14414
+ const SLOW_PHASE_MIN_DELAY_MS = 2000;
14415
+ // Maximum delay (ms) between steps during the slow phase
14416
+ const SLOW_PHASE_MAX_DELAY_MS = 5000;
14417
+ /* ------------- Actions ------------ */
14418
+ // Types of actions
14419
+ var ActionType;
14420
+ (function (ActionType) {
14421
+ // Advance the progress by a given step
14422
+ ActionType["Advance"] = "Advance";
14423
+ // Set progress to 100% (task complete)
14424
+ ActionType["Complete"] = "Complete";
14425
+ })(ActionType || (ActionType = {}));
14426
+ /**
14427
+ * Reducer that executes actions
14428
+ * @author Yuen Ler Chow
14429
+ * @param state current state
14430
+ * @param action action to execute
14431
+ */
14432
+ const reducer$1 = (state, action) => {
14433
+ switch (action.type) {
14434
+ case ActionType.Advance: {
14435
+ return Object.assign(Object.assign({}, state), { progress: Math.min(100, state.progress + action.step) });
14436
+ }
14437
+ case ActionType.Complete: {
14438
+ return Object.assign(Object.assign({}, state), { progress: 100 });
14439
+ }
14440
+ default: {
14441
+ return state;
14442
+ }
14443
+ }
14444
+ };
14445
+ /*------------------------------------------------------------------------*/
14446
+ /* ------------------------------ Component ----------------------------- */
14447
+ /*------------------------------------------------------------------------*/
14448
+ const FakeProgressBar = (props) => {
14449
+ /*------------------------------------------------------------------------*/
14450
+ /* -------------------------------- Setup ------------------------------- */
14451
+ /*------------------------------------------------------------------------*/
14452
+ /* -------------- Props ------------- */
14453
+ // Destructure props
14454
+ const { isFinished, estimatedTimeSec = 8, striped, variant, bgVariant, showOutline, size, } = props;
14455
+ /* -------------- State ------------- */
14456
+ // Initial state
14457
+ const initialState = {
14458
+ progress: 0,
14459
+ };
14460
+ // Initialize state
14461
+ const [state, dispatch] = useReducer(reducer$1, initialState);
14462
+ // Destructure common state
14463
+ const { progress, } = state;
14464
+ // Convert estimate to milliseconds
14465
+ const estimatedMs = estimatedTimeSec * 1000;
14466
+ // Average interval between updates to reach ~90% in the estimated time
14467
+ const avgIntervalMs = (estimatedMs / SLOW_PHASE_START_PERCENT) * AVG_FAST_PHASE_STEP;
14468
+ /*------------------------------------------------------------------------*/
14469
+ /* ------------------------- Lifecycle Functions ------------------------ */
14470
+ /*------------------------------------------------------------------------*/
14471
+ /**
14472
+ * Animate to 100% when isFinished becomes true
14473
+ * @author Yuen Ler Chow
14474
+ */
14475
+ useEffect(() => {
14476
+ if (isFinished) {
14477
+ dispatch({
14478
+ type: ActionType.Complete,
14479
+ });
14480
+ }
14481
+ }, [isFinished]);
14482
+ /**
14483
+ * Advance the progress in two phases:
14484
+ * 1) Random jumps up to 90%
14485
+ * 2) Slow crawl from 90% to 99%
14486
+ * @author Yuen Ler Chow
14487
+ */
14488
+ useEffect(() => {
14489
+ // Stop if already finished or at max
14490
+ if (isFinished || progress >= MAX_UNFINISHED_PERCENT) {
14491
+ return;
14492
+ }
14493
+ // Determine which phase we are in
14494
+ const inFastPhase = progress < SLOW_PHASE_START_PERCENT;
14495
+ // Default values
14496
+ let delay = avgIntervalMs;
14497
+ let step = 1;
14498
+ if (inFastPhase) {
14499
+ // Randomize delay around the average interval for variability
14500
+ const randomnessMultiplier = 0.5 + (Math.random());
14501
+ delay = avgIntervalMs * randomnessMultiplier;
14502
+ // Randomly move forward by 1-5%, capped at 90%
14503
+ step = Math.min(1 + Math.floor(Math.random() * 5), SLOW_PHASE_START_PERCENT - progress);
14504
+ }
14505
+ else {
14506
+ // Crawl slowly 1% at a time, clamped so we don't exceed 99%
14507
+ delay = SLOW_PHASE_MIN_DELAY_MS + (Math.random() * (SLOW_PHASE_MAX_DELAY_MS - SLOW_PHASE_MIN_DELAY_MS));
14508
+ step = Math.min(1, MAX_UNFINISHED_PERCENT - progress);
14509
+ }
14510
+ // Track whether this effect invocation is still current
14511
+ let cancelled = false;
14512
+ // Wait then dispatch the next progress update
14513
+ (() => __awaiter(void 0, void 0, void 0, function* () {
14514
+ yield waitMs(delay);
14515
+ if (!cancelled) {
14516
+ dispatch({
14517
+ type: ActionType.Advance,
14518
+ step,
14519
+ });
14520
+ }
14521
+ }))();
14522
+ return () => {
14523
+ cancelled = true;
14524
+ };
14525
+ }, [progress, avgIntervalMs, isFinished]);
14526
+ /*------------------------------------------------------------------------*/
14527
+ /* ------------------------------- Render ------------------------------- */
14528
+ /*------------------------------------------------------------------------*/
14529
+ /*----------------------------------------*/
14530
+ /* --------------- Main UI -------------- */
14531
+ /*----------------------------------------*/
14532
+ return (React__default.createElement(ProgressBar, { percentProgress: progress, striped: striped, variant: variant, bgVariant: bgVariant, showOutline: showOutline, size: size }));
14533
+ };
14534
+
14366
14535
  // True if user is on mobile or tablet
14367
14536
  let cachedResult;
14368
14537
  /**
@@ -14590,5 +14759,5 @@ const isSelectAdmin = () => __awaiter(void 0, void 0, void 0, function* () {
14590
14759
  }
14591
14760
  });
14592
14761
 
14593
- export { AppWrapper, AutoscrollToBottomContainer, ButtonInputGroup, CSVDownloadButton, CheckboxButton, CopiableBox, DBEntryFieldType$1 as DBEntryFieldType, DBEntryManagerPanel, Drawer, Dropdown, DropdownItemType$1 as DropdownItemType, DynamicWord, ErrorBox, IntelliTable, ItemPicker, LoadingSpinner, LogReviewer, Modal, ModalButtonType$1 as ModalButtonType, ModalSize$1 as ModalSize, ModalType$1 as ModalType, MultiSwitch, PopFailureMark, PopPendingMark, PopSuccessMark, ProgressBar, ProgressBarSize$1 as ProgressBarSize, RadioButton, SimpleDateChooser, SimpleTimeChooser, TabBox, ToggleSwitch, Tooltip, Variant$1 as Variant, addFatalErrorHandler, alert, canReviewLogs, combineClassNames, confirm, initClient, isMobileOrTablet, isSelectAdmin, leaveToURL, logClientEvent, makeLinksClickable, prompt, setClientEventMetadataPopulator, showFatalError, stubServerEndpoint, useForceRender, visitServerEndpoint };
14762
+ export { AppWrapper, AutoscrollToBottomContainer, ButtonInputGroup, CSVDownloadButton, CheckboxButton, CopiableBox, DBEntryFieldType$1 as DBEntryFieldType, DBEntryManagerPanel, Drawer, Dropdown, DropdownItemType$1 as DropdownItemType, DynamicWord, ErrorBox, FakeProgressBar, IntelliTable, ItemPicker, LoadingSpinner, LogReviewer, Modal, ModalButtonType$1 as ModalButtonType, ModalSize$1 as ModalSize, ModalType$1 as ModalType, MultiSwitch, PopFailureMark, PopPendingMark, PopSuccessMark, ProgressBar, ProgressBarSize$1 as ProgressBarSize, RadioButton, SimpleDateChooser, SimpleMonthChooser, SimpleTimeChooser, TabBox, ToggleSwitch, Tooltip, Variant$1 as Variant, addFatalErrorHandler, alert, canReviewLogs, combineClassNames, confirm, initClient, isMobileOrTablet, isSelectAdmin, leaveToURL, logClientEvent, makeLinksClickable, prompt, setClientEventMetadataPopulator, showFatalError, stubServerEndpoint, useForceRender, visitServerEndpoint };
14594
14763
  //# sourceMappingURL=index.js.map