@snapdragonsnursery/react-components 1.19.4 → 1.19.6

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@snapdragonsnursery/react-components",
3
- "version": "1.19.4",
3
+ "version": "1.19.6",
4
4
  "description": "",
5
5
  "main": "src/index.js",
6
6
  "scripts": {
@@ -1,4 +1,10 @@
1
- import React, { useState, useEffect, useRef, useCallback } from "react";
1
+ import React, {
2
+ useState,
3
+ useEffect,
4
+ useRef,
5
+ useCallback,
6
+ useMemo,
7
+ } from "react";
2
8
  import { useMsal } from "@azure/msal-react";
3
9
  import { trackEvent } from "./telemetry";
4
10
 
@@ -25,7 +31,7 @@ const ChildSearchModal = ({
25
31
  showSiteFilter = true, // Whether to show site filter dropdown
26
32
  multiSelect = false, // Enable multiple child selection
27
33
  maxSelections = null, // Maximum number of children that can be selected (null = unlimited)
28
- selectedChildren = [], // Array of already selected children (for multi-select mode)
34
+ selectedChildren, // Array of already selected children (for multi-select mode)
29
35
  // Auth options: provide token directly or a function to fetch it
30
36
  authToken = null,
31
37
  getAccessToken = null,
@@ -60,8 +66,12 @@ const ChildSearchModal = ({
60
66
  });
61
67
 
62
68
  // State for multi-select mode
69
+ const initialSelectedChildren = useMemo(
70
+ () => selectedChildren ?? [],
71
+ [selectedChildren]
72
+ );
63
73
  const [selectedChildrenState, setSelectedChildrenState] = useState(
64
- selectedChildren || []
74
+ initialSelectedChildren
65
75
  );
66
76
 
67
77
  const { instance, accounts } = useMsal();
@@ -281,9 +291,9 @@ const ChildSearchModal = ({
281
291
  // Reset selection when modal opens (for multi-select mode)
282
292
  useEffect(() => {
283
293
  if (isOpen && multiSelect) {
284
- setSelectedChildrenState(selectedChildren || []);
294
+ setSelectedChildrenState(initialSelectedChildren);
285
295
  }
286
- }, [isOpen, multiSelect, selectedChildren]);
296
+ }, [isOpen, multiSelect, initialSelectedChildren]);
287
297
 
288
298
  const handleChildSelect = (child) => {
289
299
  if (multiSelect) {
@@ -92,48 +92,47 @@ export function DateRangePicker({
92
92
  const hasCompleteCurrentRange = Boolean(
93
93
  internalRange?.from && internalRange?.to
94
94
  );
95
+ const isInProgressRange = Boolean(
96
+ internalRange?.from && !internalRange?.to
97
+ );
95
98
 
96
- let newRange = normalizedRange;
97
-
98
- if (normalizedRange.from && normalizedRange.to) {
99
- if (hasCompleteCurrentRange && !isSelectingRange.current) {
100
- const sameStart = datesEqual(normalizedRange.from, internalRange.from);
99
+ let newRange;
101
100
 
102
- if (sameStart) {
103
- // Adjusting end date on an existing range
104
- newRange = {
105
- from: internalRange.from,
106
- to: normalizedRange.to,
107
- };
108
- } else {
109
- // Starting a new range selection cycle
110
- newRange = {
111
- from: normalizedSelectedDay ?? normalizedRange.from,
112
- to: null,
113
- };
114
- }
115
- } else if (internalRange?.from && !internalRange?.to) {
116
- // Completing an in-progress range
101
+ // If we're in the middle of selecting a range (start date set, end date not set)
102
+ if (isInProgressRange) {
103
+ // Completing an in-progress range - set the clicked date as the end date
104
+ if (normalizedRange.to) {
117
105
  newRange = {
118
106
  from: internalRange.from,
119
107
  to: normalizedRange.to,
120
108
  };
121
- }
122
- } else if (normalizedRange.from && !normalizedRange.to) {
123
- if (hasCompleteCurrentRange && !isSelectingRange.current) {
124
- // New cycle starting from the selected day
109
+ } else if (normalizedRange.from) {
110
+ // Use the clicked date as end date
125
111
  newRange = {
126
- from: normalizedSelectedDay ?? normalizedRange.from,
127
- to: null,
112
+ from: internalRange.from,
113
+ to: normalizedSelectedDay ?? normalizedRange.from,
128
114
  };
129
115
  } else {
116
+ newRange = internalRange; // Keep current state
117
+ }
118
+ } else if (hasCompleteCurrentRange) {
119
+ // We have a complete range - clicking ANY date should start a new range
120
+ // Use the clicked date as the new start date
121
+ newRange = {
122
+ from:
123
+ normalizedSelectedDay ?? normalizedRange.from ?? normalizedRange.to,
124
+ to: null,
125
+ };
126
+ } else {
127
+ // No range selected or only partial - start a new range
128
+ if (normalizedRange.from) {
130
129
  newRange = {
131
130
  from: normalizedRange.from,
132
- to: null,
131
+ to: normalizedRange.to || null,
133
132
  };
133
+ } else {
134
+ newRange = null;
134
135
  }
135
- } else {
136
- newRange = null;
137
136
  }
138
137
 
139
138
  setInternalRange(newRange);