@redneckz/wildless-cms-uni-blocks 0.14.963 → 0.14.965

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.
Files changed (139) hide show
  1. package/bundle/bundle.umd.js +56 -27
  2. package/bundle/bundle.umd.min.js +1 -1
  3. package/bundle/retail/api/getTaskStatus.d.ts +3 -1
  4. package/bundle/retail/model/NameFieldDef.d.ts +1 -1
  5. package/bundle/ui-kit/DatePicker/Calendar.d.ts +1 -0
  6. package/bundle/ui-kit/DatePicker/DatePicker.d.ts +1 -0
  7. package/bundle/ui-kit/DatePicker/DatePickerControl.d.ts +1 -0
  8. package/bundle/ui-kit/DatePicker/renderCalendarCells.d.ts +2 -1
  9. package/dist/components/DebitForm/DebitFormStatusTracker.js +2 -0
  10. package/dist/components/DebitForm/DebitFormStatusTracker.js.map +1 -1
  11. package/dist/retail/api/getTaskStatus.d.ts +3 -1
  12. package/dist/retail/api/getTaskStatus.js +2 -0
  13. package/dist/retail/api/getTaskStatus.js.map +1 -1
  14. package/dist/retail/components/Fields/CardCategoryField.js +13 -4
  15. package/dist/retail/components/Fields/CardCategoryField.js.map +1 -1
  16. package/dist/retail/components/Fields/DeliveryDateFiels.js +11 -1
  17. package/dist/retail/components/Fields/DeliveryDateFiels.js.map +1 -1
  18. package/dist/retail/components/Fields/DeliveryTimeField.js +11 -10
  19. package/dist/retail/components/Fields/DeliveryTimeField.js.map +1 -1
  20. package/dist/retail/components/Fields/RegionRetailField.js +2 -4
  21. package/dist/retail/components/Fields/RegionRetailField.js.map +1 -1
  22. package/dist/retail/model/NameFieldDef.d.ts +1 -1
  23. package/dist/ui-kit/DatePicker/Calendar.d.ts +1 -0
  24. package/dist/ui-kit/DatePicker/Calendar.js +2 -1
  25. package/dist/ui-kit/DatePicker/Calendar.js.map +1 -1
  26. package/dist/ui-kit/DatePicker/DatePicker.d.ts +1 -0
  27. package/dist/ui-kit/DatePicker/DatePicker.js +2 -2
  28. package/dist/ui-kit/DatePicker/DatePicker.js.map +1 -1
  29. package/dist/ui-kit/DatePicker/DatePickerControl.d.ts +1 -0
  30. package/dist/ui-kit/DatePicker/DatePickerControl.js.map +1 -1
  31. package/dist/ui-kit/DatePicker/renderCalendarCells.d.ts +2 -1
  32. package/dist/ui-kit/DatePicker/renderCalendarCells.js +13 -4
  33. package/dist/ui-kit/DatePicker/renderCalendarCells.js.map +1 -1
  34. package/lib/components/DebitForm/DebitFormStatusTracker.js +2 -0
  35. package/lib/components/DebitForm/DebitFormStatusTracker.js.map +1 -1
  36. package/lib/retail/api/getTaskStatus.d.ts +3 -1
  37. package/lib/retail/api/getTaskStatus.js +2 -0
  38. package/lib/retail/api/getTaskStatus.js.map +1 -1
  39. package/lib/retail/components/Fields/CardCategoryField.js +13 -4
  40. package/lib/retail/components/Fields/CardCategoryField.js.map +1 -1
  41. package/lib/retail/components/Fields/DeliveryDateFiels.js +11 -1
  42. package/lib/retail/components/Fields/DeliveryDateFiels.js.map +1 -1
  43. package/lib/retail/components/Fields/DeliveryTimeField.js +11 -10
  44. package/lib/retail/components/Fields/DeliveryTimeField.js.map +1 -1
  45. package/lib/retail/components/Fields/RegionRetailField.js +2 -4
  46. package/lib/retail/components/Fields/RegionRetailField.js.map +1 -1
  47. package/lib/retail/model/NameFieldDef.d.ts +1 -1
  48. package/lib/ui-kit/DatePicker/Calendar.d.ts +1 -0
  49. package/lib/ui-kit/DatePicker/Calendar.js +2 -1
  50. package/lib/ui-kit/DatePicker/Calendar.js.map +1 -1
  51. package/lib/ui-kit/DatePicker/DatePicker.d.ts +1 -0
  52. package/lib/ui-kit/DatePicker/DatePicker.js +2 -2
  53. package/lib/ui-kit/DatePicker/DatePicker.js.map +1 -1
  54. package/lib/ui-kit/DatePicker/DatePickerControl.d.ts +1 -0
  55. package/lib/ui-kit/DatePicker/DatePickerControl.js.map +1 -1
  56. package/lib/ui-kit/DatePicker/renderCalendarCells.d.ts +2 -1
  57. package/lib/ui-kit/DatePicker/renderCalendarCells.js +13 -4
  58. package/lib/ui-kit/DatePicker/renderCalendarCells.js.map +1 -1
  59. package/mobile/bundle/bundle.umd.js +56 -27
  60. package/mobile/bundle/bundle.umd.min.js +1 -1
  61. package/mobile/bundle/retail/api/getTaskStatus.d.ts +3 -1
  62. package/mobile/bundle/retail/model/NameFieldDef.d.ts +1 -1
  63. package/mobile/bundle/ui-kit/DatePicker/Calendar.d.ts +1 -0
  64. package/mobile/bundle/ui-kit/DatePicker/DatePicker.d.ts +1 -0
  65. package/mobile/bundle/ui-kit/DatePicker/DatePickerControl.d.ts +1 -0
  66. package/mobile/bundle/ui-kit/DatePicker/renderCalendarCells.d.ts +2 -1
  67. package/mobile/dist/components/DebitForm/DebitFormStatusTracker.js +2 -0
  68. package/mobile/dist/components/DebitForm/DebitFormStatusTracker.js.map +1 -1
  69. package/mobile/dist/retail/api/getTaskStatus.d.ts +3 -1
  70. package/mobile/dist/retail/api/getTaskStatus.js +2 -0
  71. package/mobile/dist/retail/api/getTaskStatus.js.map +1 -1
  72. package/mobile/dist/retail/components/Fields/CardCategoryField.js +13 -4
  73. package/mobile/dist/retail/components/Fields/CardCategoryField.js.map +1 -1
  74. package/mobile/dist/retail/components/Fields/DeliveryDateFiels.js +11 -1
  75. package/mobile/dist/retail/components/Fields/DeliveryDateFiels.js.map +1 -1
  76. package/mobile/dist/retail/components/Fields/DeliveryTimeField.js +11 -10
  77. package/mobile/dist/retail/components/Fields/DeliveryTimeField.js.map +1 -1
  78. package/mobile/dist/retail/components/Fields/RegionRetailField.js +2 -4
  79. package/mobile/dist/retail/components/Fields/RegionRetailField.js.map +1 -1
  80. package/mobile/dist/retail/model/NameFieldDef.d.ts +1 -1
  81. package/mobile/dist/ui-kit/DatePicker/Calendar.d.ts +1 -0
  82. package/mobile/dist/ui-kit/DatePicker/Calendar.js +2 -1
  83. package/mobile/dist/ui-kit/DatePicker/Calendar.js.map +1 -1
  84. package/mobile/dist/ui-kit/DatePicker/DatePicker.d.ts +1 -0
  85. package/mobile/dist/ui-kit/DatePicker/DatePicker.js +2 -2
  86. package/mobile/dist/ui-kit/DatePicker/DatePicker.js.map +1 -1
  87. package/mobile/dist/ui-kit/DatePicker/DatePickerControl.d.ts +1 -0
  88. package/mobile/dist/ui-kit/DatePicker/DatePickerControl.js.map +1 -1
  89. package/mobile/dist/ui-kit/DatePicker/renderCalendarCells.d.ts +2 -1
  90. package/mobile/dist/ui-kit/DatePicker/renderCalendarCells.js +13 -4
  91. package/mobile/dist/ui-kit/DatePicker/renderCalendarCells.js.map +1 -1
  92. package/mobile/lib/components/DebitForm/DebitFormStatusTracker.js +2 -0
  93. package/mobile/lib/components/DebitForm/DebitFormStatusTracker.js.map +1 -1
  94. package/mobile/lib/retail/api/getTaskStatus.d.ts +3 -1
  95. package/mobile/lib/retail/api/getTaskStatus.js +2 -0
  96. package/mobile/lib/retail/api/getTaskStatus.js.map +1 -1
  97. package/mobile/lib/retail/components/Fields/CardCategoryField.js +13 -4
  98. package/mobile/lib/retail/components/Fields/CardCategoryField.js.map +1 -1
  99. package/mobile/lib/retail/components/Fields/DeliveryDateFiels.js +11 -1
  100. package/mobile/lib/retail/components/Fields/DeliveryDateFiels.js.map +1 -1
  101. package/mobile/lib/retail/components/Fields/DeliveryTimeField.js +11 -10
  102. package/mobile/lib/retail/components/Fields/DeliveryTimeField.js.map +1 -1
  103. package/mobile/lib/retail/components/Fields/RegionRetailField.js +2 -4
  104. package/mobile/lib/retail/components/Fields/RegionRetailField.js.map +1 -1
  105. package/mobile/lib/retail/model/NameFieldDef.d.ts +1 -1
  106. package/mobile/lib/ui-kit/DatePicker/Calendar.d.ts +1 -0
  107. package/mobile/lib/ui-kit/DatePicker/Calendar.js +2 -1
  108. package/mobile/lib/ui-kit/DatePicker/Calendar.js.map +1 -1
  109. package/mobile/lib/ui-kit/DatePicker/DatePicker.d.ts +1 -0
  110. package/mobile/lib/ui-kit/DatePicker/DatePicker.js +2 -2
  111. package/mobile/lib/ui-kit/DatePicker/DatePicker.js.map +1 -1
  112. package/mobile/lib/ui-kit/DatePicker/DatePickerControl.d.ts +1 -0
  113. package/mobile/lib/ui-kit/DatePicker/DatePickerControl.js.map +1 -1
  114. package/mobile/lib/ui-kit/DatePicker/renderCalendarCells.d.ts +2 -1
  115. package/mobile/lib/ui-kit/DatePicker/renderCalendarCells.js +13 -4
  116. package/mobile/lib/ui-kit/DatePicker/renderCalendarCells.js.map +1 -1
  117. package/mobile/src/components/DebitForm/DebitFormStatusTracker.tsx +2 -1
  118. package/mobile/src/retail/api/getTaskStatus.ts +2 -0
  119. package/mobile/src/retail/components/Fields/CardCategoryField.tsx +18 -4
  120. package/mobile/src/retail/components/Fields/DeliveryDateFiels.tsx +18 -1
  121. package/mobile/src/retail/components/Fields/DeliveryTimeField.tsx +11 -14
  122. package/mobile/src/retail/components/Fields/RegionRetailField.tsx +3 -5
  123. package/mobile/src/retail/model/NameFieldDef.ts +1 -1
  124. package/mobile/src/ui-kit/DatePicker/Calendar.tsx +3 -1
  125. package/mobile/src/ui-kit/DatePicker/DatePicker.tsx +13 -1
  126. package/mobile/src/ui-kit/DatePicker/DatePickerControl.tsx +1 -0
  127. package/mobile/src/ui-kit/DatePicker/renderCalendarCells.tsx +18 -5
  128. package/package.json +1 -1
  129. package/src/components/DebitForm/DebitFormStatusTracker.tsx +2 -1
  130. package/src/retail/api/getTaskStatus.ts +2 -0
  131. package/src/retail/components/Fields/CardCategoryField.tsx +18 -4
  132. package/src/retail/components/Fields/DeliveryDateFiels.tsx +18 -1
  133. package/src/retail/components/Fields/DeliveryTimeField.tsx +11 -14
  134. package/src/retail/components/Fields/RegionRetailField.tsx +3 -5
  135. package/src/retail/model/NameFieldDef.ts +1 -1
  136. package/src/ui-kit/DatePicker/Calendar.tsx +3 -1
  137. package/src/ui-kit/DatePicker/DatePicker.tsx +13 -1
  138. package/src/ui-kit/DatePicker/DatePickerControl.tsx +1 -0
  139. package/src/ui-kit/DatePicker/renderCalendarCells.tsx +18 -5
@@ -26,7 +26,6 @@ export const DebitFormStatusTracker = JSX(() => {
26
26
  signalType: 'SET_PERSON_SIGNAL',
27
27
  taskId,
28
28
  });
29
-
30
29
  setStatus(statusCd || STATUS_TYPE.notFound);
31
30
  })();
32
31
  }, [taskId]);
@@ -39,6 +38,8 @@ const renderStatus = (status: STATUS_TYPE, isOffice: boolean, isSalaryCard: bool
39
38
  IN_PROCESS: <PendingStatusContent />,
40
39
  NOT_FOUND: <FailedStatusContent />,
41
40
  CLIENT_NOT_OK: <FailedStatusContent />,
41
+ NEW_CLIENT: <SuccessStatusContent isOffice={isOffice} />,
42
+ CLIENT_FOUND: <SuccessStatusContent isOffice={isOffice} />,
42
43
  DBO_CLIENT: isSalaryCard ? <SalaryDboClientStatusContent /> : <DboClientStatusContent />,
43
44
  PRE_DECISION: <SuccessStatusContent isOffice={isOffice} />, //
44
45
  };
@@ -13,6 +13,8 @@ export enum STATUS_TYPE {
13
13
  dboClient = 'DBO_CLIENT',
14
14
  clientNotOk = 'CLIENT_NOT_OK',
15
15
  notFound = 'NOT_FOUND',
16
+ clientFound = 'CLIENT_FOUND',
17
+ newClient = 'NEW_CLIENT',
16
18
  }
17
19
 
18
20
  export interface GetTaskStatusResponse {
@@ -5,11 +5,16 @@ import { type CustomFieldProps } from '../../../ui-kit/FormField/CustomFieldProp
5
5
  import { InfoCard } from '../../../ui-kit/InfoCard/InfoCard';
6
6
  import { type Option } from '../../../ui-kit/Select/Option';
7
7
  import { getCardTypes, type CardTypeData } from '../../api/getCardTypes';
8
+ import { useRetailFormStore } from '../../hooks/useRetailFormStore';
8
9
  import { SelectField } from './SelectField';
9
10
 
10
11
  export const CardCategoryField = JSX<CustomFieldProps>(({ field, input }) => {
11
12
  const [cardTypes, setCardTypes] = useState<CardTypeData[]>([]);
12
13
  const [programId] = useLocalStorage<string>('programId');
14
+ const { productType } = useRetailFormStore();
15
+ const isSalaryCard = programId === '38';
16
+ const isDebit = productType === 'debitCard';
17
+ const isEsiaAuth = Boolean(field('esiaAccountTypeCd')?.value?.key);
13
18
  const { value: selectedCardCategory, onChange: cardCategoryChange } = field('cardCategory');
14
19
  const selectedPaymentSystem = field('paymentSystem')?.value?.key;
15
20
  const handleChangeIsMomentDebitCard = field('isMomentDebitCard')?.onChange;
@@ -27,17 +32,21 @@ export const CardCategoryField = JSX<CustomFieldProps>(({ field, input }) => {
27
32
 
28
33
  const onChange = useCallback((value: Option) => {
29
34
  cardCategoryChange?.(value);
30
- handleChangeIsMomentDebitCard?.(value?.text?.toLowerCase()?.includes('момент'));
35
+ handleChangeIsMomentDebitCard?.(value?.text?.toLowerCase()?.includes('неимен'));
31
36
  }, []);
32
37
 
33
38
  useEffect(() => {
34
39
  if (selectedPaymentSystem && programId) {
35
40
  (async () => {
36
41
  const fetchedCardTypes = await getCardTypes(selectedPaymentSystem as string, programId);
37
- setCardTypes(fetchedCardTypes);
42
+ const actualCardTypes =
43
+ isDebit && !isEsiaAuth && !isSalaryCard
44
+ ? excludeSomeСategoriesCards(fetchedCardTypes)
45
+ : fetchedCardTypes;
46
+ setCardTypes(actualCardTypes);
38
47
 
39
- if (!isValidCardCategory(fetchedCardTypes, selectedCardCategory as Option)) {
40
- cardCategoryChange?.(getCardCategoryValue(fetchedCardTypes));
48
+ if (!isValidCardCategory(actualCardTypes, selectedCardCategory as Option)) {
49
+ cardCategoryChange?.(getCardCategoryValue(actualCardTypes));
41
50
  }
42
51
  })();
43
52
  }
@@ -65,3 +74,8 @@ export const CardCategoryField = JSX<CustomFieldProps>(({ field, input }) => {
65
74
 
66
75
  const isValidCardCategory = (cardTypes: CardTypeData[], selectedCardCategory: Option | null) =>
67
76
  cardTypes.some((cardType) => cardType.key === selectedCardCategory?.key);
77
+
78
+ const excludeSomeСategoriesCards = (cardTypes: CardTypeData[]) =>
79
+ cardTypes.filter(
80
+ (cardType) => cardType.value && cardType.value.toLowerCase().includes(' именная'),
81
+ );
@@ -1,6 +1,8 @@
1
1
  import { JSX } from '@redneckz/uni-jsx';
2
+ import { useMemo } from '@redneckz/uni-jsx/lib/hooks';
2
3
  import { DatePickerControl } from '../../../ui-kit/DatePicker/DatePickerControl';
3
4
  import { type CustomFieldProps } from '../../../ui-kit/FormField/CustomFieldProps';
5
+ import { useLeadFormData } from '../../hooks/useLeadFormData';
4
6
  import { useRetailFormStore } from '../../hooks/useRetailFormStore';
5
7
 
6
8
  const MIN_DATE = new Date(Date.now() + 1 * 24 * 60 * 60 * 1000);
@@ -9,8 +11,23 @@ export const DeliveryDateFiels = JSX<CustomFieldProps>(({ field, input }) => {
9
11
  const { productType } = useRetailFormStore();
10
12
  const isDebit = productType === 'debitCard';
11
13
  const minDate = isDebit ? MIN_DATE : new Date();
14
+ const { data } = useLeadFormData('DAYS_DELIVERY_SETTINGS');
15
+
16
+ const weekends: number[] = useMemo(() => {
17
+ const weekendItem = data?.find((item) => item.key === 'WEEKEND');
18
+ if (weekendItem && weekendItem.value) {
19
+ return weekendItem.value.split(',').map(Number);
20
+ }
21
+
22
+ return [];
23
+ }, [data]);
12
24
 
13
25
  return (
14
- <DatePickerControl label="Дата доставки" {...field(input?.name ?? '')} minDate={minDate} />
26
+ <DatePickerControl
27
+ label="Дата доставки"
28
+ {...field(input?.name ?? '')}
29
+ minDate={minDate}
30
+ weekends={isDebit ? weekends : []}
31
+ />
15
32
  );
16
33
  });
@@ -10,22 +10,19 @@ export const DeliveryTimeField = JSX<CustomFieldProps>(({ field, input }) => {
10
10
  const { productType } = useRetailFormStore();
11
11
  const isDebit = productType === 'debitCard';
12
12
  const { data } = useLeadFormData('COURIER_DELIVERY_TIME');
13
+ const creditDeliveryTime = ['TIME_1', 'TIME_2', 'TIME_3'];
14
+ const debitDeliveryTime = ['TIME_4', 'TIME_5'];
13
15
 
14
- const deliveryTimeDebit = [
15
- { id: 'TIME_1', text: '10:00-14:00' },
16
- { id: 'TIME_2', text: '14:00-18:00' },
17
- ];
16
+ const deliveryTime: RadioButtonItem[] = useMemo(() => {
17
+ const allowedTimes = isDebit ? debitDeliveryTime : creditDeliveryTime;
18
18
 
19
- const deliveryTime: RadioButtonItem[] = useMemo(
20
- () =>
21
- isDebit
22
- ? deliveryTimeDebit
23
- : data?.map((_) => ({
24
- id: _.key as string,
25
- text: _.value,
26
- })) ?? [],
27
- [data],
28
- );
19
+ return (data || [])
20
+ .filter((item) => item.key && allowedTimes.includes(item.key))
21
+ .map((item) => ({
22
+ id: item.key as string,
23
+ text: item.value,
24
+ }));
25
+ }, [data, isDebit]);
29
26
 
30
27
  return (
31
28
  <RadioButtonGroupControl
@@ -10,13 +10,11 @@ import { useLeadFormData } from '../../hooks/useLeadFormData';
10
10
  import { useRetailFormStore } from '../../hooks/useRetailFormStore';
11
11
 
12
12
  export const RegionRetailField = JSX<CustomFieldProps>(({ field, input }) => {
13
- const { programId, productType } = useRetailFormStore();
13
+ const { productType } = useRetailFormStore();
14
14
  const { data: regions } = useLeadFormData('REGION_RF');
15
15
  const { data: regionsDelivery } = useAsyncData('regionsDelivery', getRegionsCardDelivery);
16
16
  const { data: productSettings } = useLeadFormData(getCurrentProductSettings(productType));
17
17
  const isEsiaAuth = field('esiaAccountTypeCd')?.value?.key;
18
-
19
- const isSalaryCard = programId === '38';
20
18
  const formatRegions = regions?.map(({ key, value }) => ({ key, text: value }));
21
19
  const isDeliveryActive =
22
20
  productSettings?.find((_) => _?.key === 'DELIVERY_ACTIVE')?.value === 'true';
@@ -29,13 +27,13 @@ export const RegionRetailField = JSX<CustomFieldProps>(({ field, input }) => {
29
27
  const regionHasDelivery =
30
28
  isDeliveryActive &&
31
29
  regionsDelivery?.find((_) => _.regionCode === value.key)?.deliveryFlg &&
32
- !isSalaryCard &&
33
30
  Boolean(isEsiaAuth);
31
+
34
32
  handleChangeRegionHasDelivery?.(regionHasDelivery);
35
33
  handleChangeMethodObtain?.(regionHasDelivery ? 'courier' : 'office');
36
34
  handleChangeRegion?.(value);
37
35
  },
38
- [regionsDelivery, isDeliveryActive],
36
+ [regionsDelivery, isDeliveryActive, isEsiaAuth],
39
37
  );
40
38
 
41
39
  return (
@@ -27,8 +27,8 @@ type NameFieldCreditCardDef =
27
27
  | 'methodObtain'
28
28
  | 'deliveryDate'
29
29
  | 'regionHasDelivery'
30
- | 'isMomentDebitCard'
31
30
  | 'latinName'
31
+ | 'isMomentDebitCard'
32
32
  | 'latinSurname';
33
33
 
34
34
  type NameFieldRetailDef =
@@ -11,11 +11,12 @@ interface CalendarProps {
11
11
  currentYear: number;
12
12
  min?: Date;
13
13
  max?: Date;
14
+ weekends?: number[];
14
15
  onDateSelect?: (date: Date) => void;
15
16
  }
16
17
 
17
18
  export const Calendar = JSX<CalendarProps>(
18
- ({ today, currentMonth, currentYear, min, max, onDateSelect = noop }) => {
19
+ ({ today, currentMonth, currentYear, min, max, weekends, onDateSelect = noop }) => {
19
20
  const { firstDayOfWeek, totalDays } = useMemo(
20
21
  () => ({
21
22
  firstDayOfWeek: new Date(currentYear, currentMonth, 1).getDay() - 1,
@@ -44,6 +45,7 @@ export const Calendar = JSX<CalendarProps>(
44
45
  currentMonth,
45
46
  min,
46
47
  max,
48
+ weekends,
47
49
  onDateClick: onDateSelect,
48
50
  })}
49
51
  </tbody>
@@ -34,11 +34,22 @@ interface DatePickerProps extends ControlProps<Date>, ComponentType, LabelProps,
34
34
  minDate?: Date;
35
35
  maxDate?: Date;
36
36
  valid?: boolean;
37
+ weekends?: number[];
37
38
  }
38
39
 
39
40
  export const DatePicker = JSX<DatePickerProps>(
40
41
  // eslint-disable-next-line max-lines-per-function
41
- ({ className = '', label = '', value, valid = true, minDate, maxDate, disabled, onChange }) => {
42
+ ({
43
+ className = '',
44
+ label = '',
45
+ value,
46
+ valid = true,
47
+ minDate,
48
+ maxDate,
49
+ disabled,
50
+ weekends,
51
+ onChange,
52
+ }) => {
42
53
  const [isCalendarVisible, { setValue, setFalse: hideCalendar }] = useBool(false);
43
54
  const [selectedMonth, setSelectedMonth] = useState(value?.getMonth() || new Date().getMonth());
44
55
  const [selectedYear, setSelectedYear] = useState(
@@ -120,6 +131,7 @@ export const DatePicker = JSX<DatePickerProps>(
120
131
  currentYear={selectedYear}
121
132
  min={minDate}
122
133
  max={maxDate}
134
+ weekends={weekends}
123
135
  onDateSelect={handleDateSelect}
124
136
  />
125
137
  </div>
@@ -9,6 +9,7 @@ import { DatePicker } from './DatePicker';
9
9
  export interface DatePickerControlProps extends DefaultControlType, ControlProps<Date> {
10
10
  minDate?: Date;
11
11
  maxDate?: Date;
12
+ weekends?: number[];
12
13
  }
13
14
 
14
15
  export const DatePickerControl = JSX<DatePickerControlProps>(
@@ -12,6 +12,7 @@ interface RenderCalendarCellsParams {
12
12
  currentMonth: number;
13
13
  min?: Date;
14
14
  max?: Date;
15
+ weekends?: number[];
15
16
  onDateClick: (date: Date) => void;
16
17
  }
17
18
 
@@ -23,11 +24,11 @@ export const renderCalendarCells = ({
23
24
  currentYear,
24
25
  min,
25
26
  max,
27
+ weekends,
26
28
  onDateClick,
27
29
  }: RenderCalendarCellsParams) => {
28
30
  const calendarCells: VNode = [];
29
31
  let dayCounter = 1;
30
-
31
32
  for (let i = 0; i < DAY_COUNT; i++) {
32
33
  const rowCells: VNode = [];
33
34
 
@@ -40,12 +41,15 @@ export const renderCalendarCells = ({
40
41
  const currentDate = new Date(currentYear, currentMonth, dayCounter);
41
42
  const isToday = checkIsToday(currentDate, today);
42
43
  const isDisabled = checkIsDisabled(currentDate, min, max);
44
+ const isWeekend = checkIsWeekend(currentDate, weekends);
45
+
46
+ const isBlocked = isDisabled || isWeekend;
43
47
 
44
48
  rowCells.push(
45
49
  <td key={`day-${dayCounter}`}>
46
50
  <div
47
- className={getDayStyles(isToday, isDisabled)}
48
- onClick={() => !isDisabled && onDateClick(currentDate)}
51
+ className={getDayStyles(isToday, isBlocked)}
52
+ onClick={() => !isBlocked && onDateClick(currentDate)}
49
53
  >
50
54
  {dayCounter}
51
55
  </div>
@@ -68,11 +72,20 @@ const checkIsToday = (currentDate: Date, today: Date | undefined) =>
68
72
  const checkIsDisabled = (currentDate: Date, min: Date | undefined, max: Date | undefined) =>
69
73
  (min && currentDate.getTime() < min.getTime()) || (max && currentDate.getTime() > max.getTime());
70
74
 
71
- const getDayStyles = (isToday = false, isDisabled = false) =>
75
+ const checkIsWeekend = (currentDate: Date, weekends?: number[]) => {
76
+ if (!weekends || weekends.length === 0) {
77
+ return false;
78
+ }
79
+ const dayOfWeek = currentDate.getDay() === 0 ? 7 : currentDate.getDay();
80
+
81
+ return weekends.includes(dayOfWeek);
82
+ };
83
+
84
+ const getDayStyles = (isToday = false, isBlocked = false) =>
72
85
  style(
73
86
  'p-s text-center rounded-md border',
74
87
  {
75
88
  'border-transparent hover:bg-gray': !isToday,
76
89
  },
77
- isDisabled ? 'text-gray hover:bg-transparent' : 'cursor-pointer',
90
+ isBlocked ? 'text-gray hover:bg-transparent' : 'cursor-pointer',
78
91
  );