{"version":3,"file":"utils.mjs","sources":["../../src/calendar/utils.ts"],"sourcesContent":["import dayjs from 'dayjs';\n\nimport { TdCalendarProps, CalendarCell } from './type';\nimport { CalendarState } from './interface';\n\n// 组件的一些常量\nimport { FIRST_MONTH_OF_YEAR, LAST_MONTH_OF_YEAR, DAY_CN_MAP } from './const';\n\n/**\n * 获取一个日期是周几（1~7）\n */\nexport const getDay = (dt: Date): number => {\n  let day = dayjs(dt).day();\n  if (day === 0) {\n    day = 7;\n  }\n  return day;\n};\n\n/**\n * 获取星期的中文\n * @param num 星期（1~7）\n */\nexport const getDayCn = (num: number): string => {\n  let re = '';\n  const numStr = num.toString();\n  if (numStr in DAY_CN_MAP) {\n    re = DAY_CN_MAP[numStr];\n  }\n  return re;\n};\n\n/**\n * 获取一个日期在日历上的列下标\n * @param firstDayOfWeek 周起始日（1~7）\n * @param dt\n */\nexport const getCellColIndex = (firstDayOfWeek: number, dt: Date): number => {\n  let re = 0;\n  const day = getDay(dt);\n  if (day >= firstDayOfWeek) {\n    re = day - firstDayOfWeek;\n  } else {\n    re = 7 - firstDayOfWeek + day;\n  }\n  return re;\n};\n/**\n * 返回日期+天数（天数可以负数）\n */\nexport const addDate = (dt: Date, days: number) => {\n  const d = new Date(dt);\n  d.setDate(d.getDate() + days);\n  return d;\n};\n\n/**\n * 创建月历单元格数据\n */\nexport const createYearCellsData = (props: TdCalendarProps, state: CalendarState): CalendarCell[] => {\n  const { curSelectedYear: year, curDate, curDateList } = state;\n  const { format, multiple } = props;\n\n  const monthsArr: CalendarCell[] = [];\n  for (let num = FIRST_MONTH_OF_YEAR; num <= LAST_MONTH_OF_YEAR; num++) {\n    const date = new Date(year, num - 1);\n    const isCurrent = multiple\n      ? !!curDateList.find((item) => item.year() === year && parseInt(item.format('M'), 10) === num)\n      : curDate.year() === year && parseInt(curDate.format('M'), 10) === num;\n    monthsArr.push({\n      mode: 'year',\n      isCurrent,\n      date,\n      formattedDate: dayjs(date).format(format),\n      filterDate: null,\n      formattedFilterDate: null,\n      isShowWeekend: true,\n    });\n  }\n\n  return monthsArr;\n};\n\n/**\n * 创建日历单元格数据\n */\nexport const createMonthCellsData = (props: TdCalendarProps, state: CalendarState): CalendarCell[][] => {\n  const {\n    curSelectedYear: year,\n    curSelectedMonth: month,\n    realFirstDayOfWeek: firstDayOfWeek,\n    curDate,\n    curDateList,\n  } = state;\n  const { format, multiple } = props;\n\n  const daysArr: CalendarCell[][] = [];\n  // 当前月份的开始日期\n  const begin: Date = dayjs(`${year}-${month}`).startOf('month').toDate();\n  // 当前月份的结束日期\n  const end: Date = dayjs(dayjs(`${year}-${month}`).endOf('month').format('YYYY-MM-DD')).toDate();\n  const days = end.getDate();\n\n  const beginDateColIndex = getCellColIndex(firstDayOfWeek, begin);\n  let arr = [];\n  let num = 1;\n\n  const createCellData = (belongTo: number, isCurrent: boolean, date: Date, weekOrder: number): CalendarCell => {\n    const day = getDay(date);\n    return {\n      mode: 'month',\n      belongTo,\n      isCurrent,\n      day,\n      weekOrder,\n      date,\n      formattedDate: dayjs(date).format(format),\n      filterDate: null,\n      formattedFilterDate: null,\n      isShowWeekend: true,\n    };\n  };\n\n  const judgeIsCurrent = (date: Date) => {\n    const isCurrent = multiple ? !!curDateList.find((item) => item.isSame(dayjs(date))) : curDate.isSame(dayjs(date));\n    return isCurrent;\n  };\n\n  // 添加上个月中和当前月第一天同一周的日期\n  for (let i = 0; i < beginDateColIndex; i++) {\n    const date = addDate(begin, i - beginDateColIndex);\n    arr.push(createCellData(-1, false, date, num));\n    if (arr.length === 7) {\n      daysArr.push(arr);\n      arr = [];\n      num += 1;\n    }\n  }\n  for (let i = 0; i < days; i++) {\n    const date = addDate(begin, i);\n    const isCurrent = judgeIsCurrent(date);\n    arr.push(createCellData(0, isCurrent, date, num));\n    if (arr.length === 7) {\n      daysArr.push(arr);\n      arr = [];\n      num += 1;\n    }\n  }\n  // 添加下个月中和当前月最后同一周的日期\n  if (arr.length) {\n    const nextMonthCellNum = 7 - arr.length;\n    for (let i = 0; i < nextMonthCellNum; i++) {\n      const date = addDate(end, i + 1);\n      arr.push(createCellData(1, false, date, num));\n    }\n    daysArr.push(arr);\n  }\n\n  return daysArr;\n};\n\n/**\n * 根据当前时间创建一个默认日期\n * @returns 当前日期都dayjs对象\n */\nexport const createDefaultCurDate = (): dayjs.Dayjs => dayjs(dayjs().format('YYYY-MM-DD'));\n"],"names":["day","re","mode","isCurrent","date","filterDate","formattedFilterDate","isShowWeekend","_loop","belongTo","weekOrder","arr","daysArr","num"],"mappings":"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"}