@antscorp/antsomi-ui 1.3.3-beta.75 → 1.3.3-beta.76

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.
@@ -13,6 +13,7 @@ import { EventIcon } from '../../../../icons';
13
13
  import { Input, InputNumber, Divider, Space, Button, Typography, } from '@antscorp/antsomi-ui/es/components/atoms';
14
14
  import { Select, Dropdown } from '@antscorp/antsomi-ui/es/components';
15
15
  import { ErrorMessage } from '../ErrorMessage/ErrorMessage';
16
+ import { DropdownLabel } from '../DropdownLabel/DropdownLabel';
16
17
  // Utils
17
18
  import { handleError, reorder } from '@antscorp/antsomi-ui/es/utils';
18
19
  import { calculationDateAdvanced, getCellRender, getFormatDisplay, getPickerRender, getTimePickerRender, } from './utils';
@@ -21,9 +22,6 @@ import { DatePickerCustomInput, DatePickerHeader, DropdownContent, DropdownHeade
21
22
  // Constants
22
23
  import { CALCULATION_DATES, CALCULATION_TYPES, DATE_TYPES, DEFAULT_DATE_FORMAT, VALUE_TYPES, ADVANCED_PICKER_TYPE, WEEK_ARR, QUARTER_PLACEHOLDER, WEEK_PLACEHOLDER, DAY_LABEL_SHORT, MONTH_LABEL_FULL, DAY_OF_MONTH, ANCHOR_LEAP_YEAR, GRANULARITY_MAPPING, } from './constants';
23
24
  import { THEME } from '@antscorp/antsomi-ui/es/constants';
24
- // Instance
25
- import i18nInstance from '@antscorp/antsomi-ui/es/locales/i18n';
26
- import { DropdownLabel } from '../DropdownLabel/DropdownLabel';
27
25
  const PATH = '@antscorp/antsomi-ui/es/components/molecules/DatePicker/components/Advanced/DatePickerAdvanced.tsx';
28
26
  const { useToken } = theme;
29
27
  const { Text } = Typography;
@@ -45,10 +43,7 @@ export const AdvancedPicker = props => {
45
43
  }
46
44
  return DATE_TYPES;
47
45
  }, [dateTypeKeysShow, defaultDateTypeKey]);
48
- const newCalculationDates = useMemo(() => {
49
- const granularityKey = GRANULARITY_MAPPING[valueType || 'YEAR_MONTH_DAY'].reverse();
50
- return CALCULATION_DATES.filter(calculationDate => granularityKey.includes(calculationDate.value));
51
- }, [valueType]);
46
+ const newCalculationDates = useMemo(() => CALCULATION_DATES.filter(calculationDate => GRANULARITY_MAPPING[valueType].includes(calculationDate.value)), [valueType]);
52
47
  const { formatDisplay } = getFormatDisplay(operatorKey, type, valueType, formatInputDisplay);
53
48
  // State
54
49
  const [state, setState] = useState({
@@ -69,7 +64,12 @@ export const AdvancedPicker = props => {
69
64
  dateDisplay: dayjs().format(DEFAULT_DATE_FORMAT),
70
65
  });
71
66
  const { isOpen, option, date, dateDisplay } = state;
72
- const [currMonthSelected, setCurrMonthSelected] = useState(dayjs(date, format).month());
67
+ const currDate = dayjs(date, format);
68
+ const currWeek = currDate.isoWeek();
69
+ const currDay = currDate.day();
70
+ const currDayOfMonth = currDate.date();
71
+ const currMonth = currDate.month();
72
+ const [currMonthSelected, setCurrMonthSelected] = useState(currMonth);
73
73
  const newCalculationTypes = useMemo(() => {
74
74
  var _a;
75
75
  if (calculationTypeKeysShow && calculationTypeKeysShow.length) {
@@ -90,17 +90,28 @@ export const AdvancedPicker = props => {
90
90
  }, [calculationTypeKeysShow, showCalculationTypeCondition, option.dateType]);
91
91
  // Hooks
92
92
  const { token } = useToken();
93
- const { t } = i18nInstance;
94
93
  // Variables
95
94
  const contentStyle = {
96
95
  backgroundColor: token.colorBgElevated,
97
96
  borderRadius: token.borderRadius,
98
97
  boxShadow: token.boxShadowSecondary,
99
98
  };
100
- const selectedDateTitle = dayjs(dateDisplay, format)
99
+ const selectedDateTitle = useMemo(() => dayjs(dateDisplay, format)
101
100
  .format(formatDisplay)
102
101
  .replace(QUARTER_PLACEHOLDER, 'Quarter ')
103
- .replace(WEEK_PLACEHOLDER, 'Week ');
102
+ .replace(WEEK_PLACEHOLDER, 'Week '), [dateDisplay, format, formatDisplay]);
103
+ const onChangeOption = (params) => {
104
+ try {
105
+ setState(state => (Object.assign(Object.assign({}, state), { option: Object.assign(Object.assign({}, state.option), params) })));
106
+ }
107
+ catch (error) {
108
+ handleError(error, {
109
+ path: PATH,
110
+ name: 'onChangeOption',
111
+ args: {},
112
+ });
113
+ }
114
+ };
104
115
  // Effects
105
116
  useEffect(() => {
106
117
  try {
@@ -138,7 +149,8 @@ export const AdvancedPicker = props => {
138
149
  const newDateTypes = DATE_TYPES;
139
150
  const newDateType = newDateTypes.find(dType => dType.value === dateType);
140
151
  const newCalculationType = CALCULATION_TYPES.find(calType => calType.value === calculationType);
141
- const newCalculationDate = newCalculationDates.find(calDate => calDate.value === calculationDate);
152
+ const newCalculationDate = newCalculationDates.find(calDate => calDate.value === calculationDate) ||
153
+ newCalculationDates[0];
142
154
  let newDate = '';
143
155
  if (newDateType) {
144
156
  if (newDateType.value === 'fixed') {
@@ -173,12 +185,12 @@ export const AdvancedPicker = props => {
173
185
  });
174
186
  }
175
187
  // eslint-disable-next-line react-hooks/exhaustive-deps
176
- }, [propsOption, propsDate, format]);
188
+ }, [propsOption, newCalculationDates, propsDate, format]);
177
189
  // Handlers
178
190
  const disableDate = current => current > dayjs(disableAfterDate, format) || current < dayjs(disableBeforeDate, format);
179
- const toggleOpenDropdown = (isOpen) => {
191
+ const toggleOpenDropdown = () => {
180
192
  try {
181
- setState(() => (Object.assign(Object.assign({}, state), { isOpen: isOpen != null ? isOpen : !state.isOpen })));
193
+ setState(() => (Object.assign(Object.assign({}, state), { isOpen: !state.isOpen })));
182
194
  }
183
195
  catch (error) {
184
196
  handleError(error, {
@@ -188,18 +200,6 @@ export const AdvancedPicker = props => {
188
200
  });
189
201
  }
190
202
  };
191
- const onChangeOption = (params) => {
192
- try {
193
- setState(state => (Object.assign(Object.assign({}, state), { option: Object.assign(Object.assign({}, state.option), params) })));
194
- }
195
- catch (error) {
196
- handleError(error, {
197
- path: PATH,
198
- name: 'onChangeOption',
199
- args: {},
200
- });
201
- }
202
- };
203
203
  const onClickApply = () => {
204
204
  try {
205
205
  const draftOption = {
@@ -245,14 +245,15 @@ export const AdvancedPicker = props => {
245
245
  React.createElement(DropdownFooter, null,
246
246
  React.createElement(Space, null,
247
247
  React.createElement(Button, { type: "primary", onClick: () => onClickApply() }, "Apply"),
248
- React.createElement(Button, { type: "default", onClick: () => toggleOpenDropdown(false) }, "Cancel")),
248
+ React.createElement(Button, { type: "default", onClick: () => toggleOpenDropdown() }, "Cancel")),
249
249
  option.dateType.value === 'fixed' && React.createElement(Button, { onClick: () => onClickNow() }, "Now"))));
250
- const renderDateTypeOptions = () => (React.createElement(Select, { getPopupContainer: triggerNode => triggerNode.parentElement, options: newDateTypes.map(dateType => (Object.assign(Object.assign({}, dateType), { label: t(dateType.label) }))), value: option.dateType.value, onChange: value => {
250
+ const renderDateTypeOptions = () => (React.createElement(Select, { options: newDateTypes, value: option.dateType.value, onChange: value => {
251
251
  const dateType = newDateTypes.find(dateType => dateType.value === value);
252
- toggleOpenDropdown(true);
253
- setTimeout(() => {
254
- onChangeOption({ dateType });
255
- }, 100);
252
+ onChangeOption({ dateType });
253
+ // toggleOpenDropdown(true);
254
+ // setTimeout(() => {
255
+ // onChangeOption({ dateType });
256
+ // }, 100);
256
257
  } }));
257
258
  // NOTE: valueType: 'WEEK'; 'DAY_OF_WEEK'; 'MONTH_DAY'; 'DAY'
258
259
  const customPickerArr = {
@@ -262,11 +263,6 @@ export const AdvancedPicker = props => {
262
263
  DAY: DAY_OF_MONTH[0],
263
264
  };
264
265
  const dropdownRender = () => {
265
- // const customPickerArr = valueType === 'WEEK' ? WEEK_ARR : DAY_LABEL_SHORT;
266
- const currWeek = dayjs(date, format).isoWeek();
267
- const currDay = dayjs(date, format).day();
268
- const currDayOfMonth = dayjs(date, format).date();
269
- const currMonth = dayjs(date, format).month();
270
266
  const getCellSelected = (item, index) => {
271
267
  switch (valueType) {
272
268
  case 'WEEK':
@@ -305,21 +301,18 @@ export const AdvancedPicker = props => {
305
301
  React.createElement(Icon, { type: "icon-ants-angle-left", style: { fontSize: '14px', color: '#D2D2D2' }, onClick: () => setCurrMonthSelected(prev => (prev === 0 ? 11 : prev - 1)) }),
306
302
  MONTH_LABEL_FULL[currMonthSelected],
307
303
  React.createElement(Icon, { type: "icon-ants-angle-right", style: { fontSize: '14px', color: '#D2D2D2' }, onClick: () => setCurrMonthSelected(prev => (prev === 11 ? 0 : prev + 1)) }))) : null,
308
- React.createElement("div", { className: `custom-picker-content${['MONTH_DAY', 'DAY'].includes(valueType || '') ? ' day-of-month-container' : ''}` }, customPickerArr[valueType || ''].map((item, index) => (React.createElement("div", { key: `day_${item}`, className: clsx('custom-picker-item', {
304
+ React.createElement("div", { className: `custom-picker-content${['MONTH_DAY', 'DAY'].includes(valueType) ? ' day-of-month-container' : ''}` }, customPickerArr[valueType].map((item, index) => (React.createElement("div", { key: `day_${item}`, className: clsx('custom-picker-item', {
309
305
  'custom-picker-item-selected': getCellSelected(item, index),
310
306
  }), onClick: () => {
311
307
  const newDate = getNewDate(item, index);
312
308
  setState(state => (Object.assign(Object.assign({}, state), { date: dayjs(newDate).format(format) })));
313
309
  } }, item)))))) : (React.createElement(React.Fragment, null,
314
- React.createElement(Select, { getPopupContainer: triggerNode => triggerNode.parentNode, options: newCalculationTypes.map(({ label, value }) => ({
315
- value,
316
- label: t(label),
317
- })), value: option.calculationType.value, onChange: value => {
310
+ React.createElement(Select, { getPopupContainer: triggerNode => triggerNode.parentNode, options: newCalculationTypes, value: option.calculationType.value, onChange: value => {
318
311
  const calculationType = CALCULATION_TYPES.find(calculationType => calculationType.value === value);
319
312
  onChangeOption({ calculationType });
320
313
  } }),
321
314
  React.createElement(InputNumber, { value: option.value, style: { width: '100%' }, min: 0, showHandler: false, onChange: value => onChangeOption({ value: Math.floor(value) }) }),
322
- React.createElement(Select, { getPopupContainer: triggerNode => triggerNode.parentNode, options: newCalculationDates.map(calculationDate => (Object.assign(Object.assign({}, calculationDate), { label: t(calculationDate.label) }))), value: option.calculationDate.value, onChange: value => {
315
+ React.createElement(Select, { getPopupContainer: triggerNode => triggerNode.parentNode, options: newCalculationDates, value: option.calculationDate.value, onChange: value => {
323
316
  const calculationDate = newCalculationDates.find(calculationDate => calculationDate.value === value);
324
317
  onChangeOption({ calculationDate });
325
318
  } }))),
@@ -363,24 +356,23 @@ export const AdvancedPicker = props => {
363
356
  }
364
357
  if (info.type === 'decade' ||
365
358
  (info.type === 'year' && valueType !== 'YEAR') ||
366
- (info.type === 'month' &&
367
- !['MONTH', 'YEAR_MONTH'].includes(valueType || 'YEAR_MONTH_DAY')))
359
+ (info.type === 'month' && !['MONTH', 'YEAR_MONTH'].includes(valueType)))
368
360
  return;
369
361
  e.preventDefault();
370
362
  e.stopPropagation();
371
363
  onChangeDatePicker(current);
372
- } }, getCellRender(current, valueType || 'YEAR_MONTH_DAY', info)));
364
+ } }, getCellRender(current, valueType, info)));
373
365
  }, [valueType, format, date]);
374
366
  return (React.createElement(Space, { direction: "vertical", size: 5, className: "antsomi-advanced-picker-container" },
375
367
  !!label && typeof label === 'string' ? (React.createElement(Text, { style: { color: '#666666' } }, label)) : (label),
376
368
  option.dateType.value === 'fixed' &&
377
- !['WEEK', 'DAY_OF_WEEK', 'MONTH_DAY', 'DAY'].includes(valueType || 'YEAR_MONTH_DAY') ? (React.createElement(Tooltip, { title: selectedDateTitle },
378
- React.createElement(DatePicker, { disabled: disabled, open: !disabled && isOpen, allowClear: false, inputReadOnly: true, status: errorMessage ? 'error' : '', inputRender: () => (React.createElement(DatePickerCustomInput, { readOnly: true, placeholder: "Select Date", value: selectedDateTitle, onClick: () => toggleOpenDropdown() })), value: dayjs(date, format), style: {
369
+ !['WEEK', 'DAY_OF_WEEK', 'MONTH_DAY', 'DAY'].includes(valueType) ? (React.createElement(Tooltip, { title: selectedDateTitle },
370
+ React.createElement(DatePicker, { disabled: disabled, open: !disabled && isOpen, allowClear: false, inputReadOnly: true, status: errorMessage ? 'error' : '', inputRender: () => (React.createElement(DatePickerCustomInput, { readOnly: true, placeholder: "Select Date", value: selectedDateTitle, onClick: () => toggleOpenDropdown() })), value: currDate, style: {
379
371
  width: 120,
380
372
  }, disabledDate: disableDate, format: formatDisplay, showToday: false, popupClassName: clsx('antsomi-picker-dropdown__advanced', {
381
373
  '--error': errorMessage,
382
- 'hide-picker-header': ['QUARTER', 'MONTH'].includes(valueType || 'YEAR_MONTH_DAY'),
383
- 'only-show-time-picker': ['HOUR', 'MINUTE'].includes(valueType || 'YEAR_MONTH_DAY'),
374
+ 'hide-picker-header': ['QUARTER', 'MONTH'].includes(valueType),
375
+ 'only-show-time-picker': ['HOUR', 'MINUTE'].includes(valueType),
384
376
  'is-minutes-picker': valueType === 'MINUTE',
385
377
  'is-hours-picker': valueType === 'HOUR',
386
378
  }), renderExtraFooter: () => (React.createElement(React.Fragment, null,
@@ -391,9 +383,9 @@ export const AdvancedPicker = props => {
391
383
  React.createElement("div", { style: { padding: '0 10px' } },
392
384
  React.createElement(ErrorMessage, { errorMessage: errorMessage })),
393
385
  renderDropdownFooter()),
394
- React.createElement(Divider, null))), picker: getPickerRender(valueType || 'YEAR_MONTH_DAY'), showTime: getTimePickerRender(valueType || 'YEAR_MONTH_DAY')
386
+ React.createElement(Divider, null))), picker: getPickerRender(valueType), showTime: getTimePickerRender(valueType)
395
387
  ? {
396
- format: getTimePickerRender(valueType || 'YEAR_MONTH_DAY'),
388
+ format: getTimePickerRender(valueType),
397
389
  }
398
390
  : undefined, suffixIcon: React.createElement(CalendarIconWrapper, { style: {
399
391
  pointerEvents: disabled ? 'none' : 'all',
@@ -21,28 +21,28 @@ export declare const CALCULATION_TYPES: {
21
21
  }[];
22
22
  export declare const CALCULATION_DATES: readonly [{
23
23
  readonly value: "seconds";
24
- readonly label: "datePicker.seconds";
24
+ readonly label: string;
25
25
  }, {
26
26
  readonly value: "minutes";
27
- readonly label: "datePicker.minutes";
27
+ readonly label: string;
28
28
  }, {
29
29
  readonly value: "hours";
30
- readonly label: "datePicker.hours";
30
+ readonly label: string;
31
31
  }, {
32
32
  readonly value: "days";
33
- readonly label: "datePicker.days";
33
+ readonly label: string;
34
34
  }, {
35
35
  readonly value: "weeks";
36
- readonly label: "datePicker.weeks";
36
+ readonly label: string;
37
37
  }, {
38
38
  readonly value: "months";
39
- readonly label: "datePicker.months";
39
+ readonly label: string;
40
40
  }, {
41
41
  readonly value: "quarters";
42
- readonly label: "datePicker.quarters";
42
+ readonly label: string;
43
43
  }, {
44
44
  readonly value: "years";
45
- readonly label: "datePicker.years";
45
+ readonly label: string;
46
46
  }];
47
47
  type CalculationDateValues = (typeof CALCULATION_DATES)[number]['value'];
48
48
  export declare const VALUE_TYPES: {
@@ -1,16 +1,18 @@
1
+ import i18nInstance from '@antscorp/antsomi-ui/es/locales/i18n';
2
+ const { t } = i18nInstance;
1
3
  export const DATE_TYPES = [
2
- { value: 'today', label: 'datePicker.dateTypes.today' },
3
- { value: 'first_day_of_week_mon_sun', label: 'datePicker.dateTypes.firstDayOfWeekMonSun' },
4
- { value: 'first_day_of_week_sun_sat', label: 'datePicker.dateTypes.firstDayOfWeekSunSat' },
5
- { value: 'first_day_of_month', label: 'datePicker.dateTypes.firstDayOfMonth' },
6
- { value: 'first_day_of_quarter', label: 'datePicker.dateTypes.firstDayOfQuarter' },
7
- { value: 'first_day_of_year', label: 'datePicker.dateTypes.firstDayOfYear' },
8
- { value: 'last_day_of_week_mon_sun', label: 'datePicker.dateTypes.lastDayOfWeekMonSun' },
9
- { value: 'last_day_of_week_sun_sat', label: 'datePicker.dateTypes.lastDayOfWeekSunSat' },
10
- { value: 'last_day_of_month', label: 'datePicker.dateTypes.lastDayOfMonth' },
11
- { value: 'last_day_of_quarter', label: 'datePicker.dateTypes.lastDayOfQuarter' },
12
- { value: 'last_day_of_year', label: 'datePicker.dateTypes.lastDayOfYear' },
13
- { value: 'fixed', label: 'datePicker.dateTypes.fixed' },
4
+ { value: 'today', label: t('datePicker.dateTypes.today') },
5
+ { value: 'first_day_of_week_mon_sun', label: t('datePicker.dateTypes.firstDayOfWeekMonSun') },
6
+ { value: 'first_day_of_week_sun_sat', label: t('datePicker.dateTypes.firstDayOfWeekSunSat') },
7
+ { value: 'first_day_of_month', label: t('datePicker.dateTypes.firstDayOfMonth') },
8
+ { value: 'first_day_of_quarter', label: t('datePicker.dateTypes.firstDayOfQuarter') },
9
+ { value: 'first_day_of_year', label: t('datePicker.dateTypes.firstDayOfYear') },
10
+ { value: 'last_day_of_week_mon_sun', label: t('datePicker.dateTypes.lastDayOfWeekMonSun') },
11
+ { value: 'last_day_of_week_sun_sat', label: t('datePicker.dateTypes.lastDayOfWeekSunSat') },
12
+ { value: 'last_day_of_month', label: t('datePicker.dateTypes.lastDayOfMonth') },
13
+ { value: 'last_day_of_quarter', label: t('datePicker.dateTypes.lastDayOfQuarter') },
14
+ { value: 'last_day_of_year', label: t('datePicker.dateTypes.lastDayOfYear') },
15
+ { value: 'fixed', label: t('datePicker.dateTypes.fixed') },
14
16
  ];
15
17
  export const DATE_TYPE_MAPPING = {
16
18
  first_day_of_week_mon_sun: 'isoWeek',
@@ -25,18 +27,18 @@ export const DATE_TYPE_MAPPING = {
25
27
  last_day_of_year: 'year',
26
28
  };
27
29
  export const CALCULATION_TYPES = [
28
- { value: 'minus', label: 'global.minus' },
29
- { value: 'plus', label: 'global.plus' },
30
+ { value: 'minus', label: t('global.minus') },
31
+ { value: 'plus', label: t('global.plus') },
30
32
  ];
31
33
  export const CALCULATION_DATES = [
32
- { value: 'seconds', label: 'datePicker.seconds' },
33
- { value: 'minutes', label: 'datePicker.minutes' },
34
- { value: 'hours', label: 'datePicker.hours' },
35
- { value: 'days', label: 'datePicker.days' },
36
- { value: 'weeks', label: 'datePicker.weeks' },
37
- { value: 'months', label: 'datePicker.months' },
38
- { value: 'quarters', label: 'datePicker.quarters' },
39
- { value: 'years', label: 'datePicker.years' },
34
+ { value: 'seconds', label: t('datePicker.seconds') },
35
+ { value: 'minutes', label: t('datePicker.minutes') },
36
+ { value: 'hours', label: t('datePicker.hours') },
37
+ { value: 'days', label: t('datePicker.days') },
38
+ { value: 'weeks', label: t('datePicker.weeks') },
39
+ { value: 'months', label: t('datePicker.months') },
40
+ { value: 'quarters', label: t('datePicker.quarters') },
41
+ { value: 'years', label: t('datePicker.years') },
40
42
  ];
41
43
  export const VALUE_TYPES = {
42
44
  INPUT_TEXT: 'INPUT_TEXT',
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@antscorp/antsomi-ui",
3
- "version": "1.3.3-beta.75",
3
+ "version": "1.3.3-beta.76",
4
4
  "description": "An enterprise-class UI design language and React UI library.",
5
5
  "sideEffects": [
6
6
  "dist/*",