{"version":3,"file":"index.mjs","sources":[""],"sourcesContent":["import { isValidDate, getPureDate } from \"@web3r/flowerkit/date\";\r\nimport { eachYearOfInterval, format, parse } from \"date-fns\";\r\nimport { IMask } from \"react-imask\";\r\nimport type { TMaskOptions } from \"../../maskedInput\";\r\nimport type {\r\n  TUserUnionValues, IDatePicker, TCustomMaskArg, TValidDateSingleStamp,\r\n} from \"../config/types\";\r\n\r\n/**\r\n * Получает экземпляр Date из значения\r\n * @returns {TValidDateSingleStamp}\r\n */\r\nconst getDateInstance = (userValue?: TUserUnionValues, isNormalize: boolean = true): TValidDateSingleStamp => {\r\n  const getDate = (val: number | string | Date) => {\r\n    const stamp = new Date(val);\r\n    if (isNormalize && isValidDate(stamp)) {\r\n      stamp.setSeconds(0);\r\n      stamp.setMilliseconds(0);\r\n    }\r\n    return stamp;\r\n  };\r\n  switch (true) {\r\n    // дата уже валидна\r\n    case isValidDate(userValue): {\r\n      return isNormalize ? getDate(userValue as Date) : userValue as Date;\r\n    }\r\n    // передано число\r\n    case typeof userValue === \"number\": {\r\n      const dateFromNumber = getDate(userValue as number);\r\n      return isValidDate(dateFromNumber) ? dateFromNumber : null;\r\n    }\r\n    // передана строка\r\n    case typeof userValue === \"string\" && !!userValue.length: {\r\n      if (userValue === \"today\") {\r\n        return getDate(new Date());\r\n      } else {\r\n        const dateFromStr = getDate(userValue);\r\n        return isValidDate(dateFromStr) ? dateFromStr : null;\r\n      }\r\n    }\r\n    // передан массив\r\n    case getIsValidRange(userValue): {\r\n      const [ startDate ] = userValue as unknown as Date[];\r\n      return getDateInstance(startDate);\r\n    }\r\n    // что-то не так\r\n    default: {\r\n      return null;\r\n    }\r\n  }\r\n};\r\n\r\n/**\r\n * Проверяет валидность переданного промежутка дат\r\n * @returns {boolean}\r\n */\r\nconst getIsValidRange = (value?: TUserUnionValues): boolean => {\r\n  return Array.isArray(value) && value.length === 2 && value.every((val) => isValidDate(getDateInstance(val)));\r\n};\r\n\r\n/**\r\n * Получает дату с актуальным временем пользователя\r\n * @param date{TValidDateSingleStamp}\r\n * @returns {TValidDateSingleStamp}\r\n */\r\nconst getDateWithLocalTime = (date: TValidDateSingleStamp): TValidDateSingleStamp => {\r\n  if (isValidDate(date)) {\r\n    const now = new Date();\r\n    const hh = now.getHours();\r\n    const mm = now.getMinutes();\r\n    const ss = now.getSeconds();\r\n    const ms = now.getMilliseconds();\r\n    (date as Date).setHours(hh);\r\n    (date as Date).setMinutes(mm);\r\n    (date as Date).setSeconds(ss);\r\n    (date as Date).setMilliseconds(ms);\r\n  }\r\n  return date;\r\n};\r\n\r\n/**\r\n * Получает ISO-штамп из значения\r\n * @param value{*}\r\n * @param isSetUserLocalTime{Boolean=}\r\n * @returns {string}\r\n */\r\nconst getStrFromDate = (value: unknown, isSetUserLocalTime: boolean = false): string => {\r\n  if (isValidDate(value)) {\r\n    if (isSetUserLocalTime) {\r\n      value = getDateWithLocalTime(value as Date);\r\n    }\r\n    return (value as Date).toString();\r\n  } else {\r\n    return \"\";\r\n  }\r\n};\r\n\r\n/**\r\n * Возвращает формат даты - со временем или без него\r\n * @returns {string}\r\n */\r\nconst getDateFormat = (isTimeSelect: IDatePicker[\"isTime\"], dateFormat: Required<IDatePicker[\"dateFormat\"]>, timeFormat: IDatePicker[\"timeFormat\"]): string => {\r\n  return isTimeSelect ? `${dateFormat} ${timeFormat}` : dateFormat!;\r\n};\r\n\r\n/**\r\n * Возвращает результат выполнения функции как Promise\r\n * @param fn{Function}\r\n * @returns {Promise<unknown>}\r\n */\r\nconst getAsyncFn = async (fn: Function): Promise<unknown> => {\r\n  try {\r\n    return await fn();\r\n  } catch {\r\n    return Promise.resolve(fn());\r\n  }\r\n};\r\n\r\n/**\r\n * Получает массив годов\r\n * @returns {Date[]}\r\n */\r\nconst getYearsRange = (fromDate?: Date, toDate?: Date): Date[] => {\r\n  if (isValidDate(fromDate) && isValidDate(toDate)) {\r\n    return eachYearOfInterval({\r\n      start: fromDate!,\r\n      end: toDate!,\r\n    });\r\n  } else {\r\n    return [];\r\n  }\r\n};\r\n\r\n/**\r\n * Получает дату со сброшенными часами и минутами\r\n * @returns {Date}\r\n */\r\nconst getClearDate = (date: Date | null | undefined = new Date()): Date => {\r\n  const value = isValidDate(date) ? date : new Date();\r\n  return getPureDate(value)!;\r\n};\r\n\r\n/**\r\n * Получает значение поля калердаря\r\n * @returns {string}\r\n */\r\nconst getStrFromStamp = (value: TUserUnionValues, isTime = false): string => {\r\n  switch (true) {\r\n    case Array.isArray(value): {\r\n      const [ start, end ] = value;\r\n      if (start && end) {\r\n        return `${getStrFromDate(start, !isTime)}, ${getStrFromDate(end, !isTime)}`;\r\n      } else {\r\n        return getStrFromDate(start, !isTime);\r\n      }\r\n    }\r\n    case !value: {\r\n      return \"\";\r\n    }\r\n    default: {\r\n      return getStrFromDate(value, !isTime);\r\n    }\r\n  }\r\n};\r\n\r\n/**\r\n * Получает стандартную маску для поля календаря\r\n * @returns {TMaskOptions}\r\n */\r\nconst getDefaultMask = ({\r\n  maxDate, minDate, format: maskFormat, isTime, isRange, isAutoFix, today,\r\n}: TCustomMaskArg): TMaskOptions => {\r\n  return {\r\n    mask: Date,\r\n    lazy: true,\r\n    pattern: isTime ? \"d`.m`.Y `HH:`MM\" : \"d`.m`.Y\",\r\n    blocks: {\r\n      d: {\r\n        mask: IMask.MaskedRange,\r\n        from: 1,\r\n        to: 31,\r\n        maxLength: 2,\r\n        autofix: \"pad\",\r\n      },\r\n      m: {\r\n        mask: IMask.MaskedRange,\r\n        from: 1,\r\n        to: 12,\r\n        maxLength: 2,\r\n        autofix: \"pad\",\r\n      },\r\n      Y: {\r\n        mask: IMask.MaskedRange,\r\n        from: minDate?.getFullYear(),\r\n        to: maxDate?.getFullYear(),\r\n        maxLength: 4,\r\n        autofix: minDate?.getFullYear() !== maxDate?.getFullYear(),\r\n      },\r\n      HH: {\r\n        mask: IMask.MaskedRange,\r\n        from: 0,\r\n        to: 23,\r\n        maxLength: 2,\r\n        autofix: \"pad\",\r\n      },\r\n      MM: {\r\n        mask: IMask.MaskedRange,\r\n        from: 0,\r\n        to: 59,\r\n        maxLength: 2,\r\n      },\r\n    },\r\n    format: (date: Date) => isValidDate(date) ? format(date, maskFormat) : \"\",\r\n    parse: (value: string) => parse(value, maskFormat, today),\r\n  };\r\n};\r\n\r\nexport {\r\n  getAsyncFn,\r\n  getClearDate,\r\n  getDateFormat,\r\n  getDateInstance,\r\n  getDateWithLocalTime,\r\n  getDefaultMask,\r\n  getIsValidRange,\r\n  getStrFromDate,\r\n  getStrFromStamp,\r\n  getYearsRange,\r\n};\r\n"],"names":["getDateInstance","userValue","isNormalize","getDate","val","stamp","Date","isValidDate","setSeconds","setMilliseconds","dateFromNumber","length","dateFromStr","getIsValidRange","startDate","value","Array","isArray","every","getDateWithLocalTime","date","now","hh","getHours","mm","getMinutes","ss","getSeconds","ms","getMilliseconds","setHours","setMinutes","getStrFromDate","isSetUserLocalTime","toString","getDateFormat","isTimeSelect","dateFormat","timeFormat","getAsyncFn","async","fn","Promise","resolve","getYearsRange","fromDate","toDate","eachYearOfInterval","start","end","getClearDate","getPureDate","getStrFromStamp","isTime","getDefaultMask","maxDate","minDate","format","maskFormat","isRange","isAutoFix","today","mask","lazy","pattern","blocks","d","IMask","MaskedRange","from","to","maxLength","autofix","m","Y","getFullYear","HH","MM","parse"],"mappings":"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"}