{"file":"useDateFilter-Bjjs9boy.js","mappings":"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","names":["_unref","_ssrRenderClass","_push","_parent","_","_scopeId","_ssrRenderAttr","_openBlock","_createBlock","_Fragment","_renderList","_toDisplayString","_createVNode","_Transition","VDatePicker"],"sources":["../../../../components/Select.vue","../../../../composables/useDateFilter.js"],"sourcesContent":["<script setup>\nimport { motion } from \"motion-v\";\nimport { AnimatePresence } from \"motion-v\";\nimport { DatePicker as VDatePicker } from \"v-calendar\";\nimport \"v-calendar/style.css\";\n\nconst props = defineProps({\n  placeholder: {\n    type: String,\n    required: false,\n    default: \"선택하세요\",\n  },\n  options: {\n    type: Array,\n    required: true,\n    default: () => [],\n  },\n  modelValue: {\n    type: [String, Number],\n    required: false,\n    default: null,\n  },\n  type: {\n    type: String,\n    required: false,\n    default: \"drop\",\n  },\n  valueKey: {\n    type: String,\n    required: false,\n    default: \"value\",\n  },\n  textKey: {\n    type: String,\n    required: false,\n    default: \"text\",\n  },\n  size: {\n    type: String,\n    required: false,\n    default: null,\n    validator: (value) => !value || [\"lg\", \"md\", \"sm\"].includes(value),\n  },\n  iconClass: {\n    type: String,\n    required: false,\n    default: \"ico-chevron-down\",\n  },\n  link: {\n    type: Boolean,\n    required: false,\n    default: false,\n  },\n  hrefKey: {\n    type: String,\n    required: false,\n    default: \"href\",\n  },\n  targetKey: {\n    type: String,\n    required: false,\n    default: \"target\",\n  },\n});\n\nconst emits = defineEmits([\"update:modelValue\", \"change\"]);\n\nconst isActive = ref(false);\nconst selectedValue = ref(props.modelValue);\nconst selectboxRef = ref(null);\nconst isDateOpen = ref(false);\nconst dateRange = ref({\n  start: null,\n  end: null,\n});\n\n// VCalendar masks 설정\nconst calendarMasks = {\n  title: \"YYYY년 M월\",\n  weekdays: \"WW\", // Mo, Tu, We 형식 (2글자)\n};\n\n// 외부 클릭 시 닫기\nconst handleClickOutside = (event) => {\n  if (selectboxRef.value && !selectboxRef.value.contains(event.target)) {\n    isActive.value = false;\n    isDateOpen.value = false;\n  }\n};\n\n// 버튼 클릭 시 토글\nconst toggleSelect = () => {\n  isActive.value = !isActive.value;\n  if (isActive.value) {\n    nextTick(() => {\n      document.addEventListener(\"click\", handleClickOutside);\n    });\n  } else {\n    // 셀렉트가 닫힐 때 date도 닫기\n    isDateOpen.value = false;\n    document.removeEventListener(\"click\", handleClickOutside);\n  }\n};\n\n// 옵션 선택\nconst selectOption = (option, index) => {\n  // date 옵션인 경우 일반 선택 로직을 건너뛰고 date div를 표시 (셀렉트는 열어둠)\n  if (option.date) {\n    // date picker를 열 때만 dateRange 초기화 (이미 선택된 날짜가 없을 때만)\n    if (!isDateOpen.value && (!dateRange.value || !dateRange.value.start || !dateRange.value.end)) {\n      dateRange.value = {\n        start: null,\n        end: null,\n      };\n    }\n    isDateOpen.value = !isDateOpen.value;\n    return;\n  }\n\n  selectedValue.value = option[props.valueKey];\n  emits(\"update:modelValue\", option[props.valueKey]);\n  emits(\"change\", option[props.valueKey], index);\n  isActive.value = false;\n  isDateOpen.value = false;\n  document.removeEventListener(\"click\", handleClickOutside);\n};\n\n// form 타입에서 옵션 변경 처리\nconst handleFormChange = (event) => {\n  const value = event.target.value;\n  selectedValue.value = value;\n  emits(\"update:modelValue\", value);\n};\n\n// 날짜 포맷팅 함수\nconst formatDate = (date) => {\n  if (!date) return \"\";\n  const d = new Date(date);\n  const year = d.getFullYear();\n  const month = String(d.getMonth() + 1).padStart(2, \"0\");\n  const day = String(d.getDate()).padStart(2, \"0\");\n  return `${year}.${month}.${day}`;\n};\n\n// 현재 표시할 텍스트\nconst displayText = computed(() => {\n  // dateRange가 선택된 경우 날짜 범위 표시\n  if (dateRange.value && dateRange.value.start && dateRange.value.end) {\n    const startDate = formatDate(dateRange.value.start);\n    const endDate = formatDate(dateRange.value.end);\n    return `${startDate} ~ ${endDate}`;\n  }\n\n  if (selectedValue.value) {\n    let find = props.options.find(\n      (option) => option[props.valueKey] === selectedValue.value\n    );\n    if (find) return find[props.textKey];\n  }\n  return props.placeholder;\n});\n\n// 컴포넌트 언마운트 시 이벤트 리스너 제거\nonBeforeUnmount(() => {\n  document.removeEventListener(\"click\", handleClickOutside);\n});\n\n// modelValue 변경 감지\nwatch(\n  () => props.modelValue,\n  (newValue) => {\n    selectedValue.value = newValue;\n  }\n);\n\n// dateRange 변경 감지 - start와 end가 모두 선택되면 처리\nwatch(\n  () => dateRange.value,\n  async (newRange) => {\n    // newRange가 null이거나 객체가 아니면 무시\n    if (!newRange || typeof newRange !== \"object\") {\n      return;\n    }\n\n    // start와 end가 모두 있는 경우에만 처리\n    if (newRange.start && newRange.end) {\n      // date 옵션의 value로 설정\n      const dateOption = props.options.find((option) => option.date);\n      if (dateOption) {\n        selectedValue.value = dateOption[props.valueKey];\n        emits(\"update:modelValue\", dateOption[props.valueKey]);\n        emits(\n          \"change\",\n          dateOption[props.valueKey],\n          props.options.indexOf(dateOption),\n          {\n            dateRange: {\n              start: newRange.start,\n              end: newRange.end,\n            },\n          }\n        );\n      }\n\n      // 즉시 닫지 않고 한 프레임 대기 후 닫기\n      await nextTick();\n      isDateOpen.value = false;\n      isActive.value = false;\n      document.removeEventListener(\"click\", handleClickOutside);\n    }\n  },\n  { deep: true }\n);\n\ndefineExpose({\n  dateRange,\n});\n</script>\n\n<template>\n  <div class=\"select\" ref=\"selectboxRef\">\n    <!-- drop 타입: 커스텀 드롭다운 -->\n    <div v-if=\"props.type === 'drop'\" class=\"selectbox selectbox--drop\" :class=\"{\n      active: isActive,\n      [`selectbox--${props.size}`]: props.size,\n    }\">\n      <button type=\"button\" :class=\"['selectbox__btn', 'ico-after', props.iconClass]\" @click=\"toggleSelect\">\n        {{ displayText }}\n      </button>\n      <AnimatePresence>\n        <motion.ul v-if=\"isActive\" key=\"select-list\" class=\"selectbox__list\" :initial=\"{\n          opacity: 0,\n          y: -10,\n        }\" :animate=\"{\n            opacity: 1,\n            y: 0,\n            transition: {\n              type: 'spring',\n              stiffness: 300,\n              damping: 20,\n              mass: 0.5,\n            },\n          }\" :exit=\"{\n            opacity: 0,\n            y: -10,\n            transition: {\n              duration: 0.15,\n              ease: [0.4, 0, 0.2, 1],\n            },\n          }\">\n          <li v-for=\"(option, index) in options\" :key=\"index\" class=\"selectbox__item ico-after\" :class=\"{\n            active: selectedValue === option[props.valueKey],\n            'ico-check': selectedValue === option[props.valueKey],\n          }\" role=\"option\" @click=\"selectOption(option, index)\">\n            <a v-if=\"props.link && option[props.hrefKey]\" :href=\"option[props.hrefKey]\"\n              :target=\"option[props.targetKey] || '_self'\" class=\"selectbox__link\" @click.stop>\n              {{ option[props.textKey] }}\n            </a>\n            <span v-else>\n              <i v-if=\"option.date\" class=\"ico-date\"></i>\n              <template v-if=\"\n                option.date && dateRange && dateRange.start && dateRange.end\n              \">\n                {{ formatDate(dateRange.start) }} ~\n                {{ formatDate(dateRange.end) }}\n              </template>\n              <template v-else-if=\"option.date && (!dateRange || !dateRange.start || !dateRange.end)\">\n                날짜 선택\n              </template>\n              <template v-else-if=\"!option.date\">{{\n                option[props.textKey]\n              }}</template>\n            </span>\n          </li>\n        </motion.ul>\n\n        <Transition name=\"select-date\" enter-active-class=\"select-date-enter-active\"\n          leave-active-class=\"select-date-leave-active\" enter-from-class=\"select-date-enter-from\"\n          leave-to-class=\"select-date-leave-to\">\n          <div v-show=\"isDateOpen\" key=\"select-date\" class=\"selectbox__date\">\n            <ClientOnly>\n              <VDatePicker v-model.range=\"dateRange\" mode=\"date\" :is-required=\"false\" locale=\"en\"\n                :masks=\"calendarMasks\" />\n            </ClientOnly>\n          </div>\n        </Transition>\n      </AnimatePresence>\n    </div>\n\n    <!-- form 타입: 일반 select 태그 -->\n    <div v-else-if=\"props.type === 'form'\" class=\"selectbox selectbox--form\" :class=\"{\n      [`selectbox--${props.size}`]: props.size,\n    }\">\n      <select class=\"selectbox__select\" :value=\"selectedValue\" @input=\"handleFormChange\">\n        <option hidden :selected=\"!selectedValue\" :value=\"null\">\n          {{ placeholder }}\n        </option>\n        <option v-for=\"(option, index) in options\" :key=\"index\" :value=\"option[props.valueKey]\">\n          {{ option[props.textKey] }}\n        </option>\n      </select>\n    </div>\n  </div>\n</template>\n\n<style scoped>\n/* 날짜 선택기 트랜지션 */\n.select-date-enter-active,\n.select-date-leave-active {\n  transition: opacity 0.15s ease, transform 0.15s ease;\n}\n\n.select-date-enter-from {\n  opacity: 0;\n  transform: translateY(-10px);\n}\n\n.select-date-leave-to {\n  opacity: 0;\n  transform: translateY(-10px);\n}\n</style>\n","import { ref, watch } from \"vue\";\n\nexport const useDateFilter = () => {\n  // 날짜 선택 옵션\n  const dateOptions = ref([\n    {\n      value: \"90\",\n      text: \"지난 90일\",\n    },\n    {\n      value: \"60\",\n      text: \"지난 60일\",\n    },\n    {\n      value: \"30\",\n      text: \"지난 30일\",\n    },\n    {\n      value: \"7\",\n      text: \"지난 7일\",\n    },\n    {\n      value: \"24\",\n      text: \"지난 24시간\",\n    },\n    {\n      value: \"date\",\n      text: \"\",\n      date: true,\n    },\n  ]);\n\n  const selectedType = ref(null);\n  const selectRef = ref(null);\n  const dateRange = ref({\n    start: null,\n    end: null,\n  });\n\n  // 날짜 필터링 함수\n  const isDateInRange = (transactionDateStr, startDate, endDate) => {\n    if (!startDate || !endDate) return true;\n\n    // 날짜 문자열을 Date 객체로 변환 (형식: \"2025-12-11 18:32\")\n    const [datePart] = transactionDateStr.split(\" \");\n    const [year, month, day] = datePart.split(\"-\").map(Number);\n    const transDate = new Date(year, month - 1, day);\n\n    const start = new Date(startDate);\n    const end = new Date(endDate);\n\n    // 시간 부분 제거하고 날짜만 비교\n    start.setHours(0, 0, 0, 0);\n    end.setHours(23, 59, 59, 999);\n    transDate.setHours(0, 0, 0, 0);\n\n    return transDate >= start && transDate <= end;\n  };\n\n  // 날짜 범위 계산 함수 (지난 N일)\n  const getDateRangeFromDays = (days) => {\n    const endDate = new Date();\n    const startDate = new Date();\n    startDate.setDate(startDate.getDate() - days);\n    return {\n      start: startDate,\n      end: endDate,\n    };\n  };\n\n  // Select change 핸들러\n  const handleSelectChange = (value, index, extra) => {\n    selectedType.value = value;\n    // 날짜 범위가 있으면 업데이트\n    if (extra && extra.dateRange) {\n      dateRange.value = extra.dateRange;\n    } else {\n      // 날짜 옵션이 아닌 경우 날짜 범위 초기화\n      const selectedOption = dateOptions.value.find((opt) => opt.value === value);\n      if (!selectedOption || !selectedOption.date) {\n        dateRange.value = { start: null, end: null };\n      }\n    }\n  };\n\n  // Select 컴포넌트의 dateRange 감시\n  watch(\n    () => selectRef.value?.dateRange,\n    (newRange) => {\n      if (newRange && newRange.start && newRange.end) {\n        dateRange.value = {\n          start: newRange.start,\n          end: newRange.end,\n        };\n      }\n    },\n    { deep: true, immediate: true }\n  );\n\n  // 날짜 필터링 적용 함수\n  const applyDateFilter = (transactions) => {\n    if (!selectedType.value) return transactions;\n\n    const selectedOption = dateOptions.value.find(\n      (opt) => opt.value === selectedType.value\n    );\n\n    if (!selectedOption) return transactions;\n\n    if (selectedOption.date) {\n      // 날짜 범위 선택\n      if (dateRange.value.start && dateRange.value.end) {\n        return transactions.filter((transaction) =>\n          isDateInRange(\n            transaction.date,\n            dateRange.value.start,\n            dateRange.value.end\n          )\n        );\n      }\n    } else {\n      // 지난 N일\n      const days = parseInt(selectedOption.value);\n      if (!isNaN(days)) {\n        const range = getDateRangeFromDays(days);\n        return transactions.filter((transaction) =>\n          isDateInRange(transaction.date, range.start, range.end)\n        );\n      }\n    }\n\n    return transactions;\n  };\n\n  return {\n    dateOptions,\n    selectedType,\n    selectRef,\n    dateRange,\n    isDateInRange,\n    getDateRangeFromDays,\n    handleSelectChange,\n    applyDateFilter,\n  };\n};\n"],"version":3}