@chayns-components/date 5.0.0-beta.517 → 5.0.0-beta.519

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.
@@ -18,6 +18,7 @@ const OpeningTimes = _ref => {
18
18
  onTimeRemove
19
19
  } = _ref;
20
20
  const [newOpeningTimes, setNewOpeningTimes] = useState();
21
+ const [invalidOpeningTimes, setInvalidOpeningTimes] = useState([]);
21
22
  const ref = useRef(null);
22
23
  useEffect(() => {
23
24
  setNewOpeningTimes(openingTimes);
@@ -83,6 +84,32 @@ const OpeningTimes = _ref => {
83
84
  });
84
85
  }
85
86
  }, [onTimeAdd]);
87
+ const handleUpdateInvalidIds = useCallback((openingTimeId, invalidTimeIds) => {
88
+ setInvalidOpeningTimes(prevState => {
89
+ let updatedInvalidOpeningTimes = prevState.map(invalidOpeningTime => {
90
+ if (invalidOpeningTime.openingTimeId === openingTimeId) {
91
+ return {
92
+ openingTimeId,
93
+ invalidTimeIds
94
+ };
95
+ }
96
+ return invalidOpeningTime;
97
+ });
98
+ if (!updatedInvalidOpeningTimes.some(_ref2 => {
99
+ let {
100
+ openingTimeId: updatedInvalidOpeningId
101
+ } = _ref2;
102
+ return updatedInvalidOpeningId === openingTimeId;
103
+ }) && invalidTimeIds.length > 0) {
104
+ updatedInvalidOpeningTimes.push({
105
+ openingTimeId,
106
+ invalidTimeIds
107
+ });
108
+ }
109
+ updatedInvalidOpeningTimes = updatedInvalidOpeningTimes.filter(updatedInvalidOpeningTime => updatedInvalidOpeningTime.invalidTimeIds.length !== 0);
110
+ return updatedInvalidOpeningTimes;
111
+ });
112
+ }, []);
86
113
  const handleRemove = useCallback(id => {
87
114
  setNewOpeningTimes(prevOpeningTimes => (prevOpeningTimes ?? []).map(openingTime => {
88
115
  const newTimes = openingTime.times.filter(time => time.id !== id);
@@ -100,13 +127,13 @@ const OpeningTimes = _ref => {
100
127
  if (!newOpeningTimes) {
101
128
  return items;
102
129
  }
103
- newOpeningTimes.forEach(_ref2 => {
130
+ newOpeningTimes.forEach(_ref3 => {
104
131
  let {
105
132
  times,
106
133
  id,
107
134
  weekdayId,
108
135
  isDisabled
109
- } = _ref2;
136
+ } = _ref3;
110
137
  const weekday = weekdays.find(weekDay => weekDay.id === weekdayId)?.name;
111
138
  if (!weekday) {
112
139
  return;
@@ -121,6 +148,7 @@ const OpeningTimes = _ref => {
121
148
  id: id,
122
149
  times: times,
123
150
  isDisabled: isDisabled,
151
+ onInvalid: handleUpdateInvalidIds,
124
152
  onChange: newTime => handleChange(newTime, id),
125
153
  onRemove: handleRemove,
126
154
  onAdd: handleAdd,
@@ -128,16 +156,16 @@ const OpeningTimes = _ref => {
128
156
  })));
129
157
  });
130
158
  return items;
131
- }, [closedText, editMode, handleAdd, handleChange, handleCheckBoxChange, handleRemove, newOpeningTimes, weekdays]);
159
+ }, [closedText, editMode, handleAdd, handleChange, handleCheckBoxChange, handleRemove, handleUpdateInvalidIds, newOpeningTimes, weekdays]);
132
160
  const size = useElementSize(ref);
133
161
  const displayedContent = useMemo(() => {
134
162
  if (!currentDayId || editMode) {
135
163
  return content;
136
164
  }
137
- const singleDay = newOpeningTimes?.find(_ref3 => {
165
+ const singleDay = newOpeningTimes?.find(_ref4 => {
138
166
  let {
139
167
  id
140
- } = _ref3;
168
+ } = _ref4;
141
169
  return id === currentDayId;
142
170
  });
143
171
  if (!singleDay) {
@@ -156,6 +184,7 @@ const OpeningTimes = _ref => {
156
184
  }
157
185
  }, /*#__PURE__*/React.createElement(StyledOpeningTimesWeekDay, null, weekday), /*#__PURE__*/React.createElement(OpeningInputs, {
158
186
  closedText: closedText,
187
+ onInvalid: handleUpdateInvalidIds,
159
188
  id: id,
160
189
  times: times,
161
190
  editMode: editMode
@@ -165,24 +194,8 @@ const OpeningTimes = _ref => {
165
194
  key: "opening-time-tooltip"
166
195
  }, content)
167
196
  }, element);
168
- }, [closedText, content, currentDayId, editMode, newOpeningTimes, weekdays, size]);
169
- const shouldShowHint = useMemo(() => {
170
- let tmp = false;
171
- openingTimes.forEach(_ref4 => {
172
- let {
173
- times
174
- } = _ref4;
175
- if (times.length > 1) {
176
- if (!times[0] || !times[1]) {
177
- return;
178
- }
179
- if (times[0].start >= times[1].end) {
180
- tmp = true;
181
- }
182
- }
183
- });
184
- return tmp;
185
- }, [openingTimes]);
197
+ }, [currentDayId, editMode, newOpeningTimes, weekdays, size, closedText, handleUpdateInvalidIds, content]);
198
+ const shouldShowHint = useMemo(() => invalidOpeningTimes.length > 0, [invalidOpeningTimes.length]);
186
199
  return useMemo(() => /*#__PURE__*/React.createElement(StyledOpeningTimes, {
187
200
  ref: ref
188
201
  }, shouldShowHint && hintText && hintTextPosition === HintTextPosition.Top && /*#__PURE__*/React.createElement(HintText, {
@@ -1 +1 @@
1
- {"version":3,"file":"OpeningTimes.js","names":["Checkbox","Tooltip","useElementSize","React","useCallback","useEffect","useMemo","useRef","useState","HintTextPosition","HintText","OpeningInputs","StyledOpeningTimes","StyledOpeningTimesTooltipContent","StyledOpeningTimesWeekDay","StyledOpeningTimesWrapper","OpeningTimes","_ref","closedText","currentDayId","editMode","hintText","hintTextPosition","Bottom","openingTimes","weekdays","onChange","onTimeAdd","onTimeRemove","newOpeningTimes","setNewOpeningTimes","ref","handleCheckBoxChange","id","prevOpeningTimes","updatedOpeningTimes","map","openingTime","isDisabled","enabledDays","filter","item","handleChange","newTime","newTimes","times","time","handleAdd","dayId","handleRemove","content","items","forEach","_ref2","weekdayId","weekday","find","weekDay","name","push","createElement","key","isChecked","onRemove","onAdd","size","displayedContent","singleDay","_ref3","element","style","width","shouldShowHint","tmp","_ref4","length","start","end","Top","text","displayName"],"sources":["../../../src/components/opening-times/OpeningTimes.tsx"],"sourcesContent":["import { Checkbox, Tooltip, useElementSize } from '@chayns-components/core';\nimport React, {\n FC,\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState,\n type ReactElement,\n} from 'react';\nimport {\n HintTextPosition,\n type OnChange,\n type OnTimeAdd,\n type OpeningTime,\n type Time,\n type Weekday,\n} from '../../types/openingTimes';\nimport HintText from './hint-text/HintText';\nimport OpeningInputs from './opening-inputs/OpeningInputs';\nimport {\n StyledOpeningTimes,\n StyledOpeningTimesTooltipContent,\n StyledOpeningTimesWeekDay,\n StyledOpeningTimesWrapper,\n} from './OpeningTimes.styles';\n\nexport type OpeningTimesProps = {\n /**\n * The text that should be displayed when a day is closed.\n */\n closedText?: string;\n /**\n * If set just the current day is displayed and the whole week in a tooltip.\n */\n currentDayId?: OpeningTime['id'];\n /**\n * Whether the opening times can be edited.\n */\n editMode?: boolean;\n /**\n * The text that should be displayed if times are colliding.\n */\n hintText?: string;\n /**\n * The position of the hint text.\n */\n hintTextPosition?: HintTextPosition;\n /**\n * Function to be executed when a time is changed or a day is enabled/disabled.\n * @param openingTimes\n */\n onChange?: ({ time, enabledDays }: OnChange) => void;\n /**\n * Function to be executed when a time is added.\n */\n onTimeAdd?: ({ time, dayId }: OnTimeAdd) => void;\n /**\n * Function to be executed when a time is removed.\n */\n onTimeRemove?: (id: string) => void;\n /**\n * The opening times corresponding to its weekday.\n */\n openingTimes: OpeningTime[];\n /**\n * The weekdays that should be displayed.\n */\n weekdays: Weekday[];\n};\n\nconst OpeningTimes: FC<OpeningTimesProps> = ({\n closedText = 'closed',\n currentDayId,\n editMode = false,\n hintText,\n hintTextPosition = HintTextPosition.Bottom,\n openingTimes,\n weekdays,\n onChange,\n onTimeAdd,\n onTimeRemove,\n}) => {\n const [newOpeningTimes, setNewOpeningTimes] = useState<OpeningTime[]>();\n\n const ref = useRef<HTMLDivElement>(null);\n\n useEffect(() => {\n setNewOpeningTimes(openingTimes);\n }, [openingTimes]);\n\n const handleCheckBoxChange = useCallback(\n (id: string) => {\n setNewOpeningTimes((prevOpeningTimes) => {\n const updatedOpeningTimes = (prevOpeningTimes ?? []).map((openingTime) => {\n if (openingTime.id === id) {\n return { ...openingTime, isDisabled: !openingTime.isDisabled };\n }\n return openingTime;\n });\n\n if (typeof onChange === 'function') {\n onChange({\n enabledDays: updatedOpeningTimes\n .filter((item) => !item.isDisabled)\n .map((item) => item.id),\n });\n }\n\n return updatedOpeningTimes;\n });\n },\n [onChange],\n );\n\n const handleChange = useCallback(\n (newTime: Time, id: string) => {\n setNewOpeningTimes((prevOpeningTimes) => {\n const updatedOpeningTimes = (prevOpeningTimes ?? []).map((openingTime) => {\n if (openingTime.id === id) {\n const newTimes = openingTime.times.map((time) => {\n if (time.id === newTime.id) {\n return newTime;\n }\n\n return time;\n });\n\n return { ...openingTime, times: newTimes };\n }\n return openingTime;\n });\n\n if (typeof onChange === 'function') {\n onChange({ time: newTime });\n }\n\n return updatedOpeningTimes;\n });\n },\n [onChange],\n );\n\n const handleAdd = useCallback(\n (time: Time, id: string) => {\n setNewOpeningTimes((prevOpeningTimes) =>\n (prevOpeningTimes ?? []).map((openingTime) => {\n if (openingTime.id === id) {\n return { ...openingTime, times: [...openingTime.times, time] };\n }\n return openingTime;\n }),\n );\n\n if (typeof onTimeAdd === 'function') {\n onTimeAdd({ dayId: id, time });\n }\n },\n [onTimeAdd],\n );\n\n const handleRemove = useCallback(\n (id: string) => {\n setNewOpeningTimes((prevOpeningTimes) =>\n (prevOpeningTimes ?? []).map((openingTime) => {\n const newTimes = openingTime.times.filter((time) => time.id !== id);\n\n return { ...openingTime, times: newTimes };\n }),\n );\n\n if (typeof onTimeRemove === 'function') {\n onTimeRemove(id);\n }\n },\n [onTimeRemove],\n );\n\n const content = useMemo(() => {\n const items: ReactElement[] = [];\n\n if (!newOpeningTimes) {\n return items;\n }\n\n newOpeningTimes.forEach(({ times, id, weekdayId, isDisabled }) => {\n const weekday = weekdays.find((weekDay) => weekDay.id === weekdayId)?.name;\n\n if (!weekday) {\n return;\n }\n\n items.push(\n <StyledOpeningTimesWrapper key={`openingTimes__${id}`}>\n {editMode ? (\n <Checkbox isChecked={!isDisabled} onChange={() => handleCheckBoxChange(id)}>\n {weekday}\n </Checkbox>\n ) : (\n <StyledOpeningTimesWeekDay>{weekday}</StyledOpeningTimesWeekDay>\n )}\n <OpeningInputs\n closedText={closedText}\n id={id}\n times={times}\n isDisabled={isDisabled}\n onChange={(newTime) => handleChange(newTime, id)}\n onRemove={handleRemove}\n onAdd={handleAdd}\n editMode={editMode}\n />\n </StyledOpeningTimesWrapper>,\n );\n });\n\n return items;\n }, [\n closedText,\n editMode,\n handleAdd,\n handleChange,\n handleCheckBoxChange,\n handleRemove,\n newOpeningTimes,\n weekdays,\n ]);\n\n const size = useElementSize(ref);\n\n const displayedContent = useMemo(() => {\n if (!currentDayId || editMode) {\n return content;\n }\n\n const singleDay = newOpeningTimes?.find(({ id }) => id === currentDayId);\n\n if (!singleDay) {\n return content;\n }\n\n const { id, times, weekdayId } = singleDay;\n\n const weekday = weekdays.find((weekDay) => weekDay.id === weekdayId)?.name;\n\n const element = (\n <StyledOpeningTimesWrapper\n key={`currentDay__${currentDayId}`}\n style={size && { width: size.width }}\n >\n <StyledOpeningTimesWeekDay>{weekday}</StyledOpeningTimesWeekDay>\n <OpeningInputs closedText={closedText} id={id} times={times} editMode={editMode} />\n </StyledOpeningTimesWrapper>\n );\n\n return (\n <Tooltip\n item={\n <StyledOpeningTimesTooltipContent key=\"opening-time-tooltip\">\n {content}\n </StyledOpeningTimesTooltipContent>\n }\n >\n {element}\n </Tooltip>\n );\n }, [closedText, content, currentDayId, editMode, newOpeningTimes, weekdays, size]);\n\n const shouldShowHint = useMemo(() => {\n let tmp = false;\n\n openingTimes.forEach(({ times }) => {\n if (times.length > 1) {\n if (!times[0] || !times[1]) {\n return;\n }\n\n if (times[0].start >= times[1].end) {\n tmp = true;\n }\n }\n });\n\n return tmp;\n }, [openingTimes]);\n\n return useMemo(\n () => (\n <StyledOpeningTimes ref={ref}>\n {shouldShowHint && hintText && hintTextPosition === HintTextPosition.Top && (\n <HintText text={hintText} />\n )}\n {displayedContent}\n {shouldShowHint && hintText && hintTextPosition === HintTextPosition.Bottom && (\n <HintText text={hintText} />\n )}\n </StyledOpeningTimes>\n ),\n [displayedContent, hintText, hintTextPosition, shouldShowHint],\n );\n};\n\nOpeningTimes.displayName = 'OpeningTimes';\n\nexport default OpeningTimes;\n"],"mappings":"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"}
1
+ {"version":3,"file":"OpeningTimes.js","names":["Checkbox","Tooltip","useElementSize","React","useCallback","useEffect","useMemo","useRef","useState","HintTextPosition","HintText","OpeningInputs","StyledOpeningTimes","StyledOpeningTimesTooltipContent","StyledOpeningTimesWeekDay","StyledOpeningTimesWrapper","OpeningTimes","_ref","closedText","currentDayId","editMode","hintText","hintTextPosition","Bottom","openingTimes","weekdays","onChange","onTimeAdd","onTimeRemove","newOpeningTimes","setNewOpeningTimes","invalidOpeningTimes","setInvalidOpeningTimes","ref","handleCheckBoxChange","id","prevOpeningTimes","updatedOpeningTimes","map","openingTime","isDisabled","enabledDays","filter","item","handleChange","newTime","newTimes","times","time","handleAdd","dayId","handleUpdateInvalidIds","openingTimeId","invalidTimeIds","prevState","updatedInvalidOpeningTimes","invalidOpeningTime","some","_ref2","updatedInvalidOpeningId","length","push","updatedInvalidOpeningTime","handleRemove","content","items","forEach","_ref3","weekdayId","weekday","find","weekDay","name","createElement","key","isChecked","onInvalid","onRemove","onAdd","size","displayedContent","singleDay","_ref4","element","style","width","shouldShowHint","Top","text","displayName"],"sources":["../../../src/components/opening-times/OpeningTimes.tsx"],"sourcesContent":["import { Checkbox, Tooltip, useElementSize } from '@chayns-components/core';\nimport React, {\n FC,\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState,\n type ReactElement,\n} from 'react';\nimport {\n HintTextPosition,\n type OnChange,\n type OnTimeAdd,\n type OpeningTime,\n type Time,\n type Weekday,\n} from '../../types/openingTimes';\nimport HintText from './hint-text/HintText';\nimport OpeningInputs from './opening-inputs/OpeningInputs';\nimport {\n StyledOpeningTimes,\n StyledOpeningTimesTooltipContent,\n StyledOpeningTimesWeekDay,\n StyledOpeningTimesWrapper,\n} from './OpeningTimes.styles';\n\nexport type OpeningTimesProps = {\n /**\n * The text that should be displayed when a day is closed.\n */\n closedText?: string;\n /**\n * If set just the current day is displayed and the whole week in a tooltip.\n */\n currentDayId?: OpeningTime['id'];\n /**\n * Whether the opening times can be edited.\n */\n editMode?: boolean;\n /**\n * The text that should be displayed if times are colliding.\n */\n hintText?: string;\n /**\n * The position of the hint text.\n */\n hintTextPosition?: HintTextPosition;\n /**\n * Function to be executed when a time is changed or a day is enabled/disabled.\n * @param openingTimes\n */\n onChange?: ({ time, enabledDays }: OnChange) => void;\n /**\n * Function to be executed when a time is added.\n */\n onTimeAdd?: ({ time, dayId }: OnTimeAdd) => void;\n /**\n * Function to be executed when a time is removed.\n */\n onTimeRemove?: (id: string) => void;\n /**\n * The opening times corresponding to its weekday.\n */\n openingTimes: OpeningTime[];\n /**\n * The weekdays that should be displayed.\n */\n weekdays: Weekday[];\n};\n\nconst OpeningTimes: FC<OpeningTimesProps> = ({\n closedText = 'closed',\n currentDayId,\n editMode = false,\n hintText,\n hintTextPosition = HintTextPosition.Bottom,\n openingTimes,\n weekdays,\n onChange,\n onTimeAdd,\n onTimeRemove,\n}) => {\n const [newOpeningTimes, setNewOpeningTimes] = useState<OpeningTime[]>();\n const [invalidOpeningTimes, setInvalidOpeningTimes] = useState<\n { openingTimeId: string; invalidTimeIds: string[] }[]\n >([]);\n\n const ref = useRef<HTMLDivElement>(null);\n\n useEffect(() => {\n setNewOpeningTimes(openingTimes);\n }, [openingTimes]);\n\n const handleCheckBoxChange = useCallback(\n (id: string) => {\n setNewOpeningTimes((prevOpeningTimes) => {\n const updatedOpeningTimes = (prevOpeningTimes ?? []).map((openingTime) => {\n if (openingTime.id === id) {\n return { ...openingTime, isDisabled: !openingTime.isDisabled };\n }\n return openingTime;\n });\n\n if (typeof onChange === 'function') {\n onChange({\n enabledDays: updatedOpeningTimes\n .filter((item) => !item.isDisabled)\n .map((item) => item.id),\n });\n }\n\n return updatedOpeningTimes;\n });\n },\n [onChange],\n );\n\n const handleChange = useCallback(\n (newTime: Time, id: string) => {\n setNewOpeningTimes((prevOpeningTimes) => {\n const updatedOpeningTimes = (prevOpeningTimes ?? []).map((openingTime) => {\n if (openingTime.id === id) {\n const newTimes = openingTime.times.map((time) => {\n if (time.id === newTime.id) {\n return newTime;\n }\n\n return time;\n });\n\n return { ...openingTime, times: newTimes };\n }\n return openingTime;\n });\n\n if (typeof onChange === 'function') {\n onChange({ time: newTime });\n }\n\n return updatedOpeningTimes;\n });\n },\n [onChange],\n );\n\n const handleAdd = useCallback(\n (time: Time, id: string) => {\n setNewOpeningTimes((prevOpeningTimes) =>\n (prevOpeningTimes ?? []).map((openingTime) => {\n if (openingTime.id === id) {\n return { ...openingTime, times: [...openingTime.times, time] };\n }\n return openingTime;\n }),\n );\n\n if (typeof onTimeAdd === 'function') {\n onTimeAdd({ dayId: id, time });\n }\n },\n [onTimeAdd],\n );\n\n const handleUpdateInvalidIds = useCallback(\n (openingTimeId: string, invalidTimeIds: string[]) => {\n setInvalidOpeningTimes((prevState) => {\n let updatedInvalidOpeningTimes = prevState.map((invalidOpeningTime) => {\n if (invalidOpeningTime.openingTimeId === openingTimeId) {\n return {\n openingTimeId,\n invalidTimeIds,\n };\n }\n\n return invalidOpeningTime;\n });\n\n if (\n !updatedInvalidOpeningTimes.some(\n ({ openingTimeId: updatedInvalidOpeningId }) =>\n updatedInvalidOpeningId === openingTimeId,\n ) &&\n invalidTimeIds.length > 0\n ) {\n updatedInvalidOpeningTimes.push({ openingTimeId, invalidTimeIds });\n }\n\n updatedInvalidOpeningTimes = updatedInvalidOpeningTimes.filter(\n (updatedInvalidOpeningTime) =>\n updatedInvalidOpeningTime.invalidTimeIds.length !== 0,\n );\n\n return updatedInvalidOpeningTimes;\n });\n },\n [],\n );\n\n const handleRemove = useCallback(\n (id: string) => {\n setNewOpeningTimes((prevOpeningTimes) =>\n (prevOpeningTimes ?? []).map((openingTime) => {\n const newTimes = openingTime.times.filter((time) => time.id !== id);\n\n return { ...openingTime, times: newTimes };\n }),\n );\n\n if (typeof onTimeRemove === 'function') {\n onTimeRemove(id);\n }\n },\n [onTimeRemove],\n );\n\n const content = useMemo(() => {\n const items: ReactElement[] = [];\n\n if (!newOpeningTimes) {\n return items;\n }\n\n newOpeningTimes.forEach(({ times, id, weekdayId, isDisabled }) => {\n const weekday = weekdays.find((weekDay) => weekDay.id === weekdayId)?.name;\n\n if (!weekday) {\n return;\n }\n\n items.push(\n <StyledOpeningTimesWrapper key={`openingTimes__${id}`}>\n {editMode ? (\n <Checkbox isChecked={!isDisabled} onChange={() => handleCheckBoxChange(id)}>\n {weekday}\n </Checkbox>\n ) : (\n <StyledOpeningTimesWeekDay>{weekday}</StyledOpeningTimesWeekDay>\n )}\n <OpeningInputs\n closedText={closedText}\n id={id}\n times={times}\n isDisabled={isDisabled}\n onInvalid={handleUpdateInvalidIds}\n onChange={(newTime) => handleChange(newTime, id)}\n onRemove={handleRemove}\n onAdd={handleAdd}\n editMode={editMode}\n />\n </StyledOpeningTimesWrapper>,\n );\n });\n\n return items;\n }, [\n closedText,\n editMode,\n handleAdd,\n handleChange,\n handleCheckBoxChange,\n handleRemove,\n handleUpdateInvalidIds,\n newOpeningTimes,\n weekdays,\n ]);\n\n const size = useElementSize(ref);\n\n const displayedContent = useMemo(() => {\n if (!currentDayId || editMode) {\n return content;\n }\n\n const singleDay = newOpeningTimes?.find(({ id }) => id === currentDayId);\n\n if (!singleDay) {\n return content;\n }\n\n const { id, times, weekdayId } = singleDay;\n\n const weekday = weekdays.find((weekDay) => weekDay.id === weekdayId)?.name;\n\n const element = (\n <StyledOpeningTimesWrapper\n key={`currentDay__${currentDayId}`}\n style={size && { width: size.width }}\n >\n <StyledOpeningTimesWeekDay>{weekday}</StyledOpeningTimesWeekDay>\n <OpeningInputs\n closedText={closedText}\n onInvalid={handleUpdateInvalidIds}\n id={id}\n times={times}\n editMode={editMode}\n />\n </StyledOpeningTimesWrapper>\n );\n\n return (\n <Tooltip\n item={\n <StyledOpeningTimesTooltipContent key=\"opening-time-tooltip\">\n {content}\n </StyledOpeningTimesTooltipContent>\n }\n >\n {element}\n </Tooltip>\n );\n }, [\n currentDayId,\n editMode,\n newOpeningTimes,\n weekdays,\n size,\n closedText,\n handleUpdateInvalidIds,\n content,\n ]);\n\n const shouldShowHint = useMemo(\n () => invalidOpeningTimes.length > 0,\n [invalidOpeningTimes.length],\n );\n\n return useMemo(\n () => (\n <StyledOpeningTimes ref={ref}>\n {shouldShowHint && hintText && hintTextPosition === HintTextPosition.Top && (\n <HintText text={hintText} />\n )}\n {displayedContent}\n {shouldShowHint && hintText && hintTextPosition === HintTextPosition.Bottom && (\n <HintText text={hintText} />\n )}\n </StyledOpeningTimes>\n ),\n [displayedContent, hintText, hintTextPosition, shouldShowHint],\n );\n};\n\nOpeningTimes.displayName = 'OpeningTimes';\n\nexport default OpeningTimes;\n"],"mappings":"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"}
@@ -6,6 +6,7 @@ export type OpeningInputsProps = {
6
6
  onChange?: (time: Time) => void;
7
7
  onAdd?: (time: Time, id: string) => void;
8
8
  onRemove?: (id: Time['id']) => void;
9
+ onInvalid?: (openingTimeId: string, timeIds: string[]) => void;
9
10
  id: string;
10
11
  editMode: boolean;
11
12
  closedText: string;
@@ -10,12 +10,14 @@ const OpeningInputs = _ref => {
10
10
  isDisabled,
11
11
  onRemove,
12
12
  onAdd,
13
+ onInvalid,
13
14
  id,
14
15
  onChange,
15
16
  editMode,
16
17
  closedText
17
18
  } = _ref;
18
19
  const [newTimes, setNewTimes] = useState();
20
+ const [invalidTimes, setInvalidTimes] = useState([]);
19
21
  useEffect(() => {
20
22
  setNewTimes(times);
21
23
  }, [times]);
@@ -36,6 +38,36 @@ const OpeningInputs = _ref => {
36
38
  onRemove(timeId);
37
39
  }
38
40
  }, [onRemove]);
41
+ useEffect(() => {
42
+ const result = [];
43
+ for (let i = 0; i < times.length; i++) {
44
+ const currentTime = times[i];
45
+ const prevTime = times[i - 1];
46
+ if (currentTime) {
47
+ const currStart = new Date(`2000-01-01T${currentTime.start}`);
48
+ const currEnd = new Date(`2000-01-01T${currentTime.end}`);
49
+ if (currStart >= currEnd) {
50
+ result.push(currentTime);
51
+ }
52
+ if (prevTime) {
53
+ const prevEnd = new Date(`2000-01-01T${prevTime.end}`);
54
+ if (prevEnd > currStart) {
55
+ result.push(prevTime, currentTime);
56
+ }
57
+ }
58
+ }
59
+ }
60
+ const invalidTimeIds = result.map(_ref2 => {
61
+ let {
62
+ id: invalidId
63
+ } = _ref2;
64
+ return invalidId;
65
+ });
66
+ setInvalidTimes(invalidTimeIds);
67
+ if (typeof onInvalid === 'function') {
68
+ onInvalid(id, invalidTimeIds);
69
+ }
70
+ }, [id, onInvalid, times]);
39
71
  const handleChange = useCallback(newTime => {
40
72
  setNewTimes(prevState => {
41
73
  const updatedTimes = (prevState ?? []).map(time => {
@@ -55,12 +87,12 @@ const OpeningInputs = _ref => {
55
87
  if (!newTimes) {
56
88
  return items;
57
89
  }
58
- newTimes.forEach((_ref2, index) => {
90
+ newTimes.forEach((_ref3, index) => {
59
91
  let {
60
92
  end,
61
93
  start,
62
94
  id: timeId
63
- } = _ref2;
95
+ } = _ref3;
64
96
  if (!editMode) {
65
97
  const text = isDisabled ? closedText : `${start} - ${end}`;
66
98
  items.push( /*#__PURE__*/React.createElement(StyledOpeningInputPreview, {
@@ -83,6 +115,7 @@ const OpeningInputs = _ref => {
83
115
  id: timeId,
84
116
  end: end,
85
117
  isDisabled: isDisabled,
118
+ isInvalid: invalidTimes.includes(timeId),
86
119
  buttonType: buttonType,
87
120
  onAdd: handleAdd,
88
121
  onChange: time => handleChange(time),
@@ -90,7 +123,7 @@ const OpeningInputs = _ref => {
90
123
  }));
91
124
  });
92
125
  return items;
93
- }, [closedText, editMode, handleAdd, handleChange, handleRemove, id, isDisabled, newTimes, times.length]);
126
+ }, [closedText, editMode, handleAdd, handleChange, handleRemove, id, invalidTimes, isDisabled, newTimes, times.length]);
94
127
  return useMemo(() => /*#__PURE__*/React.createElement(StyledOpeningInputs, null, /*#__PURE__*/React.createElement(AnimatePresence, {
95
128
  initial: false
96
129
  }, content)), [content]);
@@ -1 +1 @@
1
- {"version":3,"file":"OpeningInputs.js","names":["AnimatePresence","React","useCallback","useEffect","useMemo","useState","v4","uuidV4","OpeningTimesButtonType","OpeningInput","StyledOpeningInputPreview","StyledOpeningInputs","OpeningInputs","_ref","times","isDisabled","onRemove","onAdd","id","onChange","editMode","closedText","newTimes","setNewTimes","handleAdd","defaultTime","start","end","prevState","handleRemove","timeId","filter","time","handleChange","newTime","updatedTimes","map","content","items","forEach","_ref2","index","text","push","createElement","key","buttonType","NONE","length","ADD","REMOVE","initial","displayName"],"sources":["../../../../src/components/opening-times/opening-inputs/OpeningInputs.tsx"],"sourcesContent":["import { AnimatePresence } from 'framer-motion';\nimport React, { FC, useCallback, useEffect, useMemo, useState, type ReactElement } from 'react';\nimport { v4 as uuidV4 } from 'uuid';\nimport { OpeningTimesButtonType, type Time } from '../../../types/openingTimes';\nimport OpeningInput from './opening-input/OpeningInput';\nimport { StyledOpeningInputPreview, StyledOpeningInputs } from './OpeningInputs.styles';\n\nexport type OpeningInputsProps = {\n times: Time[];\n isDisabled?: boolean;\n onChange?: (time: Time) => void;\n onAdd?: (time: Time, id: string) => void;\n onRemove?: (id: Time['id']) => void;\n id: string;\n editMode: boolean;\n closedText: string;\n};\n\nconst OpeningInputs: FC<OpeningInputsProps> = ({\n times,\n isDisabled,\n onRemove,\n onAdd,\n id,\n onChange,\n editMode,\n closedText,\n}) => {\n const [newTimes, setNewTimes] = useState<Time[]>();\n\n useEffect(() => {\n setNewTimes(times);\n }, [times]);\n\n const handleAdd = useCallback(() => {\n const defaultTime: Time = { start: '08:00', end: '18:00', id: uuidV4() };\n\n setNewTimes((prevState) => (prevState ? [...prevState, defaultTime] : [defaultTime]));\n\n if (typeof onAdd === 'function') {\n onAdd(defaultTime, id);\n }\n }, [id, onAdd]);\n\n const handleRemove = useCallback(\n (timeId: string) => {\n setNewTimes((prevState) => (prevState ?? []).filter((time) => time.id !== timeId));\n\n if (typeof onRemove === 'function') {\n onRemove(timeId);\n }\n },\n [onRemove],\n );\n\n const handleChange = useCallback(\n (newTime: Time) => {\n setNewTimes((prevState) => {\n const updatedTimes = (prevState ?? []).map((time) => {\n if (time.id === newTime.id) {\n return newTime;\n }\n return time;\n });\n\n if (typeof onChange === 'function') {\n onChange(newTime);\n }\n\n return updatedTimes;\n });\n },\n [onChange],\n );\n\n const content = useMemo(() => {\n const items: ReactElement[] = [];\n\n if (!newTimes) {\n return items;\n }\n\n newTimes.forEach(({ end, start, id: timeId }, index) => {\n if (!editMode) {\n const text = isDisabled ? closedText : `${start} - ${end}`;\n\n items.push(\n <StyledOpeningInputPreview key={`opening-times-preview__${id}.${timeId}`}>\n {text}\n </StyledOpeningInputPreview>,\n );\n\n return;\n }\n\n if (index > 1) {\n return;\n }\n\n let buttonType = OpeningTimesButtonType.NONE;\n\n if (index === 0 && times.length === 1 && !isDisabled) {\n buttonType = OpeningTimesButtonType.ADD;\n } else if (index === 1 && !isDisabled) {\n buttonType = OpeningTimesButtonType.REMOVE;\n }\n\n items.push(\n <OpeningInput\n key={`opening-times-input__${id}.${timeId}`}\n start={start}\n id={timeId}\n end={end}\n isDisabled={isDisabled}\n buttonType={buttonType}\n onAdd={handleAdd}\n onChange={(time) => handleChange(time)}\n onRemove={() => handleRemove(timeId)}\n />,\n );\n });\n\n return items;\n }, [\n closedText,\n editMode,\n handleAdd,\n handleChange,\n handleRemove,\n id,\n isDisabled,\n newTimes,\n times.length,\n ]);\n\n return useMemo(\n () => (\n <StyledOpeningInputs>\n <AnimatePresence initial={false}>{content}</AnimatePresence>\n </StyledOpeningInputs>\n ),\n [content],\n );\n};\n\nOpeningInputs.displayName = 'OpeningInputs';\n\nexport default OpeningInputs;\n"],"mappings":"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"}
1
+ {"version":3,"file":"OpeningInputs.js","names":["AnimatePresence","React","useCallback","useEffect","useMemo","useState","v4","uuidV4","OpeningTimesButtonType","OpeningInput","StyledOpeningInputPreview","StyledOpeningInputs","OpeningInputs","_ref","times","isDisabled","onRemove","onAdd","onInvalid","id","onChange","editMode","closedText","newTimes","setNewTimes","invalidTimes","setInvalidTimes","handleAdd","defaultTime","start","end","prevState","handleRemove","timeId","filter","time","result","i","length","currentTime","prevTime","currStart","Date","currEnd","push","prevEnd","invalidTimeIds","map","_ref2","invalidId","handleChange","newTime","updatedTimes","content","items","forEach","_ref3","index","text","createElement","key","buttonType","NONE","ADD","REMOVE","isInvalid","includes","initial","displayName"],"sources":["../../../../src/components/opening-times/opening-inputs/OpeningInputs.tsx"],"sourcesContent":["import { AnimatePresence } from 'framer-motion';\nimport React, { FC, useCallback, useEffect, useMemo, useState, type ReactElement } from 'react';\nimport { v4 as uuidV4 } from 'uuid';\nimport { OpeningTimesButtonType, type Time } from '../../../types/openingTimes';\nimport OpeningInput from './opening-input/OpeningInput';\nimport { StyledOpeningInputPreview, StyledOpeningInputs } from './OpeningInputs.styles';\n\nexport type OpeningInputsProps = {\n times: Time[];\n isDisabled?: boolean;\n onChange?: (time: Time) => void;\n onAdd?: (time: Time, id: string) => void;\n onRemove?: (id: Time['id']) => void;\n onInvalid?: (openingTimeId: string, timeIds: string[]) => void;\n id: string;\n editMode: boolean;\n closedText: string;\n};\n\nconst OpeningInputs: FC<OpeningInputsProps> = ({\n times,\n isDisabled,\n onRemove,\n onAdd,\n onInvalid,\n id,\n onChange,\n editMode,\n closedText,\n}) => {\n const [newTimes, setNewTimes] = useState<Time[]>();\n const [invalidTimes, setInvalidTimes] = useState<string[]>([]);\n\n useEffect(() => {\n setNewTimes(times);\n }, [times]);\n\n const handleAdd = useCallback(() => {\n const defaultTime: Time = { start: '08:00', end: '18:00', id: uuidV4() };\n\n setNewTimes((prevState) => (prevState ? [...prevState, defaultTime] : [defaultTime]));\n\n if (typeof onAdd === 'function') {\n onAdd(defaultTime, id);\n }\n }, [id, onAdd]);\n\n const handleRemove = useCallback(\n (timeId: string) => {\n setNewTimes((prevState) => (prevState ?? []).filter((time) => time.id !== timeId));\n\n if (typeof onRemove === 'function') {\n onRemove(timeId);\n }\n },\n [onRemove],\n );\n\n useEffect(() => {\n const result: Time[] = [];\n\n for (let i = 0; i < times.length; i++) {\n const currentTime = times[i];\n const prevTime = times[i - 1];\n\n if (currentTime) {\n const currStart = new Date(`2000-01-01T${currentTime.start}`);\n const currEnd = new Date(`2000-01-01T${currentTime.end}`);\n\n if (currStart >= currEnd) {\n result.push(currentTime);\n }\n\n if (prevTime) {\n const prevEnd = new Date(`2000-01-01T${prevTime.end}`);\n\n if (prevEnd > currStart) {\n result.push(prevTime, currentTime);\n }\n }\n }\n }\n\n const invalidTimeIds = result.map(({ id: invalidId }) => invalidId);\n\n setInvalidTimes(invalidTimeIds);\n\n if (typeof onInvalid === 'function') {\n onInvalid(id, invalidTimeIds);\n }\n }, [id, onInvalid, times]);\n\n const handleChange = useCallback(\n (newTime: Time) => {\n setNewTimes((prevState) => {\n const updatedTimes = (prevState ?? []).map((time) => {\n if (time.id === newTime.id) {\n return newTime;\n }\n return time;\n });\n\n if (typeof onChange === 'function') {\n onChange(newTime);\n }\n\n return updatedTimes;\n });\n },\n [onChange],\n );\n\n const content = useMemo(() => {\n const items: ReactElement[] = [];\n\n if (!newTimes) {\n return items;\n }\n\n newTimes.forEach(({ end, start, id: timeId }, index) => {\n if (!editMode) {\n const text = isDisabled ? closedText : `${start} - ${end}`;\n\n items.push(\n <StyledOpeningInputPreview key={`opening-times-preview__${id}.${timeId}`}>\n {text}\n </StyledOpeningInputPreview>,\n );\n\n return;\n }\n\n if (index > 1) {\n return;\n }\n\n let buttonType = OpeningTimesButtonType.NONE;\n\n if (index === 0 && times.length === 1 && !isDisabled) {\n buttonType = OpeningTimesButtonType.ADD;\n } else if (index === 1 && !isDisabled) {\n buttonType = OpeningTimesButtonType.REMOVE;\n }\n\n items.push(\n <OpeningInput\n key={`opening-times-input__${id}.${timeId}`}\n start={start}\n id={timeId}\n end={end}\n isDisabled={isDisabled}\n isInvalid={invalidTimes.includes(timeId)}\n buttonType={buttonType}\n onAdd={handleAdd}\n onChange={(time) => handleChange(time)}\n onRemove={() => handleRemove(timeId)}\n />,\n );\n });\n\n return items;\n }, [\n closedText,\n editMode,\n handleAdd,\n handleChange,\n handleRemove,\n id,\n invalidTimes,\n isDisabled,\n newTimes,\n times.length,\n ]);\n\n return useMemo(\n () => (\n <StyledOpeningInputs>\n <AnimatePresence initial={false}>{content}</AnimatePresence>\n </StyledOpeningInputs>\n ),\n [content],\n );\n};\n\nOpeningInputs.displayName = 'OpeningInputs';\n\nexport default OpeningInputs;\n"],"mappings":"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"}
@@ -4,6 +4,7 @@ export type OpeningInputProps = {
4
4
  start: Time['start'];
5
5
  end: Time['end'];
6
6
  isDisabled?: boolean;
7
+ isInvalid?: boolean;
7
8
  id: string;
8
9
  buttonType: OpeningTimesButtonType;
9
10
  onAdd: () => void;
@@ -7,6 +7,7 @@ const OpeningInput = _ref => {
7
7
  end,
8
8
  start,
9
9
  isDisabled,
10
+ isInvalid,
10
11
  buttonType,
11
12
  onRemove,
12
13
  onAdd,
@@ -35,8 +36,8 @@ const OpeningInput = _ref => {
35
36
  return /*#__PURE__*/React.createElement(StyledOpeningInputPseudoButton, null);
36
37
  }
37
38
  }, [buttonType, onAdd, onRemove]);
38
- const handleStartTimeBlur = useCallback((value, isInvalid) => {
39
- if (isInvalid || typeof value === 'number' || !value) {
39
+ const handleStartTimeBlur = useCallback((value, isTimeInvalid) => {
40
+ if (isTimeInvalid || typeof value === 'number' || !value) {
40
41
  return;
41
42
  }
42
43
  setStartTime(value);
@@ -46,8 +47,8 @@ const OpeningInput = _ref => {
46
47
  id
47
48
  });
48
49
  }, [endTime, id, onChange]);
49
- const handleEndTimeBlur = useCallback((value, isInvalid) => {
50
- if (isInvalid || typeof value === 'number' || !value) {
50
+ const handleEndTimeBlur = useCallback((value, isTimeInvalid) => {
51
+ if (isTimeInvalid || typeof value === 'number' || !value) {
51
52
  return;
52
53
  }
53
54
  setEndTime(value);
@@ -74,6 +75,7 @@ const OpeningInput = _ref => {
74
75
  }, /*#__PURE__*/React.createElement(StyledOpeningInputWrapper, null, /*#__PURE__*/React.createElement(NumberInput, {
75
76
  shouldShowOnlyBottomBorder: true,
76
77
  isTimeInput: true,
78
+ isInvalid: isInvalid,
77
79
  value: startTime,
78
80
  onBlur: handleStartTimeBlur,
79
81
  isDisabled: isDisabled
@@ -82,10 +84,11 @@ const OpeningInput = _ref => {
82
84
  }, "-"), /*#__PURE__*/React.createElement(StyledOpeningInputWrapper, null, /*#__PURE__*/React.createElement(NumberInput, {
83
85
  shouldShowOnlyBottomBorder: true,
84
86
  isTimeInput: true,
87
+ isInvalid: isInvalid,
85
88
  value: endTime,
86
89
  onBlur: handleEndTimeBlur,
87
90
  isDisabled: isDisabled
88
- })), button), [button, endTime, handleEndTimeBlur, handleStartTimeBlur, id, isDisabled, startTime]);
91
+ })), button), [button, endTime, handleEndTimeBlur, handleStartTimeBlur, id, isDisabled, isInvalid, startTime]);
89
92
  };
90
93
  OpeningInput.displayName = 'OpeningInput';
91
94
  export default OpeningInput;
@@ -1 +1 @@
1
- {"version":3,"file":"OpeningInput.js","names":["Icon","NumberInput","React","useCallback","useMemo","useState","OpeningTimesButtonType","StyledOpeningInput","StyledOpeningInputButtonWrapper","StyledOpeningInputPseudoButton","StyledOpeningInputText","StyledOpeningInputWrapper","OpeningInput","_ref","end","start","isDisabled","buttonType","onRemove","onAdd","onChange","id","startTime","setStartTime","endTime","setEndTime","button","ADD","createElement","onClick","icons","size","REMOVE","handleStartTimeBlur","value","isInvalid","handleEndTimeBlur","key","animate","opacity","height","initial","exit","shouldShowOnlyBottomBorder","isTimeInput","onBlur","$isDisabled","displayName"],"sources":["../../../../../src/components/opening-times/opening-inputs/opening-input/OpeningInput.tsx"],"sourcesContent":["import { Icon, NumberInput } from '@chayns-components/core';\nimport React, { FC, useCallback, useMemo, useState } from 'react';\nimport { OpeningTimesButtonType, type Time } from '../../../../types/openingTimes';\nimport {\n StyledOpeningInput,\n StyledOpeningInputButtonWrapper,\n StyledOpeningInputPseudoButton,\n StyledOpeningInputText,\n StyledOpeningInputWrapper,\n} from './OpeningInput.styles';\n\nexport type OpeningInputProps = {\n start: Time['start'];\n end: Time['end'];\n isDisabled?: boolean;\n id: string;\n buttonType: OpeningTimesButtonType;\n onAdd: () => void;\n onRemove: () => void;\n onChange: (time: Time) => void;\n};\n\nconst OpeningInput: FC<OpeningInputProps> = ({\n end,\n start,\n isDisabled,\n buttonType,\n onRemove,\n onAdd,\n onChange,\n id,\n}) => {\n const [startTime, setStartTime] = useState(start);\n const [endTime, setEndTime] = useState(end);\n\n const button = useMemo(() => {\n switch (buttonType) {\n case OpeningTimesButtonType.ADD:\n return (\n <StyledOpeningInputButtonWrapper onClick={onAdd}>\n <Icon icons={['ts-plus']} size={15} />\n </StyledOpeningInputButtonWrapper>\n );\n case OpeningTimesButtonType.REMOVE:\n return (\n <StyledOpeningInputButtonWrapper onClick={onRemove}>\n <Icon icons={['ts-wrong']} size={15} />\n </StyledOpeningInputButtonWrapper>\n );\n default:\n return <StyledOpeningInputPseudoButton />;\n }\n }, [buttonType, onAdd, onRemove]);\n\n const handleStartTimeBlur = useCallback(\n (value: string | number | null, isInvalid: boolean) => {\n if (isInvalid || typeof value === 'number' || !value) {\n return;\n }\n\n setStartTime(value);\n\n onChange({ end: endTime, start: value, id });\n },\n [endTime, id, onChange],\n );\n\n const handleEndTimeBlur = useCallback(\n (value: string | number | null, isInvalid: boolean) => {\n if (isInvalid || typeof value === 'number' || !value) {\n return;\n }\n\n setEndTime(value);\n\n onChange({ end: value, start: startTime, id });\n },\n [id, onChange, startTime],\n );\n\n return useMemo(\n () => (\n <StyledOpeningInput\n key={id}\n animate={{ opacity: 1, height: 'auto' }}\n initial={{ opacity: 0, height: 0 }}\n exit={{ opacity: 0, height: 0 }}\n >\n <StyledOpeningInputWrapper>\n <NumberInput\n shouldShowOnlyBottomBorder\n isTimeInput\n value={startTime}\n onBlur={handleStartTimeBlur}\n isDisabled={isDisabled}\n />\n </StyledOpeningInputWrapper>\n <StyledOpeningInputText $isDisabled={isDisabled}>-</StyledOpeningInputText>\n <StyledOpeningInputWrapper>\n <NumberInput\n shouldShowOnlyBottomBorder\n isTimeInput\n value={endTime}\n onBlur={handleEndTimeBlur}\n isDisabled={isDisabled}\n />\n </StyledOpeningInputWrapper>\n {button}\n </StyledOpeningInput>\n ),\n [button, endTime, handleEndTimeBlur, handleStartTimeBlur, id, isDisabled, startTime],\n );\n};\n\nOpeningInput.displayName = 'OpeningInput';\n\nexport default OpeningInput;\n"],"mappings":"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"}
1
+ {"version":3,"file":"OpeningInput.js","names":["Icon","NumberInput","React","useCallback","useMemo","useState","OpeningTimesButtonType","StyledOpeningInput","StyledOpeningInputButtonWrapper","StyledOpeningInputPseudoButton","StyledOpeningInputText","StyledOpeningInputWrapper","OpeningInput","_ref","end","start","isDisabled","isInvalid","buttonType","onRemove","onAdd","onChange","id","startTime","setStartTime","endTime","setEndTime","button","ADD","createElement","onClick","icons","size","REMOVE","handleStartTimeBlur","value","isTimeInvalid","handleEndTimeBlur","key","animate","opacity","height","initial","exit","shouldShowOnlyBottomBorder","isTimeInput","onBlur","$isDisabled","displayName"],"sources":["../../../../../src/components/opening-times/opening-inputs/opening-input/OpeningInput.tsx"],"sourcesContent":["import { Icon, NumberInput } from '@chayns-components/core';\nimport React, { FC, useCallback, useMemo, useState } from 'react';\nimport { OpeningTimesButtonType, type Time } from '../../../../types/openingTimes';\nimport {\n StyledOpeningInput,\n StyledOpeningInputButtonWrapper,\n StyledOpeningInputPseudoButton,\n StyledOpeningInputText,\n StyledOpeningInputWrapper,\n} from './OpeningInput.styles';\n\nexport type OpeningInputProps = {\n start: Time['start'];\n end: Time['end'];\n isDisabled?: boolean;\n isInvalid?: boolean;\n id: string;\n buttonType: OpeningTimesButtonType;\n onAdd: () => void;\n onRemove: () => void;\n onChange: (time: Time) => void;\n};\n\nconst OpeningInput: FC<OpeningInputProps> = ({\n end,\n start,\n isDisabled,\n isInvalid,\n buttonType,\n onRemove,\n onAdd,\n onChange,\n id,\n}) => {\n const [startTime, setStartTime] = useState(start);\n const [endTime, setEndTime] = useState(end);\n\n const button = useMemo(() => {\n switch (buttonType) {\n case OpeningTimesButtonType.ADD:\n return (\n <StyledOpeningInputButtonWrapper onClick={onAdd}>\n <Icon icons={['ts-plus']} size={15} />\n </StyledOpeningInputButtonWrapper>\n );\n case OpeningTimesButtonType.REMOVE:\n return (\n <StyledOpeningInputButtonWrapper onClick={onRemove}>\n <Icon icons={['ts-wrong']} size={15} />\n </StyledOpeningInputButtonWrapper>\n );\n default:\n return <StyledOpeningInputPseudoButton />;\n }\n }, [buttonType, onAdd, onRemove]);\n\n const handleStartTimeBlur = useCallback(\n (value: string | number | null, isTimeInvalid: boolean) => {\n if (isTimeInvalid || typeof value === 'number' || !value) {\n return;\n }\n\n setStartTime(value);\n\n onChange({ end: endTime, start: value, id });\n },\n [endTime, id, onChange],\n );\n\n const handleEndTimeBlur = useCallback(\n (value: string | number | null, isTimeInvalid: boolean) => {\n if (isTimeInvalid || typeof value === 'number' || !value) {\n return;\n }\n\n setEndTime(value);\n\n onChange({ end: value, start: startTime, id });\n },\n [id, onChange, startTime],\n );\n\n return useMemo(\n () => (\n <StyledOpeningInput\n key={id}\n animate={{ opacity: 1, height: 'auto' }}\n initial={{ opacity: 0, height: 0 }}\n exit={{ opacity: 0, height: 0 }}\n >\n <StyledOpeningInputWrapper>\n <NumberInput\n shouldShowOnlyBottomBorder\n isTimeInput\n isInvalid={isInvalid}\n value={startTime}\n onBlur={handleStartTimeBlur}\n isDisabled={isDisabled}\n />\n </StyledOpeningInputWrapper>\n <StyledOpeningInputText $isDisabled={isDisabled}>-</StyledOpeningInputText>\n <StyledOpeningInputWrapper>\n <NumberInput\n shouldShowOnlyBottomBorder\n isTimeInput\n isInvalid={isInvalid}\n value={endTime}\n onBlur={handleEndTimeBlur}\n isDisabled={isDisabled}\n />\n </StyledOpeningInputWrapper>\n {button}\n </StyledOpeningInput>\n ),\n [\n button,\n endTime,\n handleEndTimeBlur,\n handleStartTimeBlur,\n id,\n isDisabled,\n isInvalid,\n startTime,\n ],\n );\n};\n\nOpeningInput.displayName = 'OpeningInput';\n\nexport default OpeningInput;\n"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@chayns-components/date",
3
- "version": "5.0.0-beta.517",
3
+ "version": "5.0.0-beta.519",
4
4
  "description": "A set of beautiful React components for developing your own applications with chayns.",
5
5
  "sideEffects": false,
6
6
  "browserslist": [
@@ -57,7 +57,7 @@
57
57
  "typescript": "^5.3.3"
58
58
  },
59
59
  "dependencies": {
60
- "@chayns-components/core": "^5.0.0-beta.517",
60
+ "@chayns-components/core": "^5.0.0-beta.519",
61
61
  "date-fns": "^2.30.0",
62
62
  "uuid": "^9.0.1"
63
63
  },
@@ -71,5 +71,5 @@
71
71
  "publishConfig": {
72
72
  "access": "public"
73
73
  },
74
- "gitHead": "b8887d00e14734836f17010b55867d0bd3d47a01"
74
+ "gitHead": "bac868dc6109d2afe6951c66dbc1a33457de959d"
75
75
  }