{
  "version": 3,
  "sources": ["ssg:https://asset.29cm.co.kr/contents/framer/components/systems/curations/DownloadableCoupon/DownloadableCoupon.js", "ssg:https://asset.29cm.co.kr/contents/framer/hooks/fetchers/useFetchCouponCollectionProducts.js"],
  "sourcesContent": ["import { jsx, jsxs } from \"react/jsx-runtime\";\nimport { forwardRef } from \"react\";\nimport { Coupon } from \"../../../@shared/Coupon/index.js\";\nimport { Countdown } from \"../../Countdown/Countdown.js\";\nimport { useDownloadCoupons } from \"../../../../hooks/useDownloadCoupons.js\";\nimport \"framer\";\nimport { typography } from \"../../../../styles/typography.js\";\nimport { CouponType, AvailableDayType } from \"../../../../types/models/coupon.js\";\nimport { createKRTimeZoneDate } from \"../../../../utils/createUTCDate.js\";\nimport \"../IntersectionProvider/IntersectionProvider.js\";\nimport { useIntersectionContext } from \"../IntersectionProvider/IntersectionProvider.hooks.js\";\nimport \"../../../../node_modules/@firebase/analytics/dist/esm/index.esm2017.js\";\nimport \"../../../../node_modules/firebase/app/dist/esm/index.esm.js\";\nimport { useCurrentUser } from \"../../../../hooks/useCurrentUser.js\";\nimport { isCanvas } from \"../../../../utils/framer/isCanvas.js\";\nimport \"../../../../node_modules/@29cm/snowplow/dist/esm/core/snowplow.js\";\nimport \"../../../../node_modules/swr/core/dist/index.js\";\nimport \"../../../../config/index.js\";\nimport \"../../../../node_modules/vite-plugin-node-polyfills/shims/buffer/dist/index.js\";\nimport \"../../../../node_modules/js-cookie/dist/js.cookie.js\";\nimport \"../../../../node_modules/swr/mutation/dist/index.js\";\nimport \"../../../../hooks/stores/content/content.store.js\";\nimport \"../../../../hooks/stores/dialog/dialog.store.js\";\nimport \"../../../../hooks/stores/global-layout/global-layout.store.js\";\nimport \"../../../../hooks/stores/toast/toast.store.js\";\nimport { useTheme } from \"../../../../hooks/useTheme.js\";\nimport \"../../../@shared/providers/BreakpointProvider/BreakpointProvider.js\";\nimport \"../../../../hooks/stores/bottom-sheet/bottom-sheet.store.js\";\nimport \"react-dom\";\nimport \"../../Dialog/Dialog.module.css.js\";\nimport \"framer-motion\";\nimport \"../../../../containers/DialogContainer/DialogContainer.emitter.js\";\nimport \"../../../../utils/redirectLogin.js\";\nimport \"../../../../utils/event-properties/source.js\";\nimport { useComponentId } from \"../EventTrackingProvider/EventTrackingProvider.hooks.js\";\nimport \"../EventTrackingProvider/EventTrackingProvider.js\";\nimport { useTrackSnowplowEvent } from \"../../../../hooks/snowplow/useTrackSnowplowEvent.js\";\nimport { EventTrigger } from \"../../../@shared/EventTrigger/index.js\";\nimport { useFetchCouponsDownloadStatus } from \"../../../../hooks/fetchers/useFetchCouponsDownloadStatus.js\";\nimport { isBefore } from \"../../../../node_modules/date-fns/isBefore.js\";\nimport { isAfter } from \"../../../../node_modules/date-fns/isAfter.js\";\nimport { formatDate as format } from \"../../../../node_modules/date-fns/format.js\";\nimport { ko } from \"../../../../node_modules/date-fns/locale/ko.js\";\nconst DownloadableCoupon = forwardRef(({\n  backgroundColor,\n  coupon\n}) => {\n  const theme = useTheme();\n  const componentId = useComponentId();\n  const trackSnowplowEvent = useTrackSnowplowEvent();\n  const {\n    logged,\n    userNo\n  } = useCurrentUser();\n  const {\n    isInView\n  } = useIntersectionContext();\n  const {\n    statuses,\n    isLoading,\n    mutate\n  } = useFetchCouponsDownloadStatus((coupon == null ? void 0 : coupon.id) ? [coupon.id] : [], userNo, isInView);\n  const handleCouponDownloadSuccess = () => {\n    if (!coupon) {\n      return;\n    }\n    trackSnowplowEvent(\"click_button\", {\n      section_name: componentId || \"unknown_section\",\n      section_title: componentId || \"unknown_section\",\n      position: -1,\n      button_id: `coupondown_${coupon.id}`,\n      button_name: coupon.couponName,\n      layout_position: -1\n    });\n  };\n  const {\n    validate,\n    download\n  } = useDownloadCoupons(CouponType.NORMAL, coupon == null ? void 0 : coupon.discountType, handleCouponDownloadSuccess);\n  const hasCoupon = coupon !== void 0;\n  const shouldRender = hasCoupon && (!isLoading || !logged);\n  if (!shouldRender) {\n    return /* @__PURE__ */ jsx(Coupon.Root, { loading: true, theme });\n  }\n  const {\n    id,\n    couponName,\n    personMaxIssueCount = 0\n  } = coupon;\n  const downloadCoupon = async () => {\n    await download([id], personMaxIssueCount, true);\n    return markAsDownloaded(statuses, id);\n  };\n  const status = getCouponStatus(coupon, logged, statuses);\n  const description = getDescriptionByStatus(coupon)[status];\n  const handleClick = () => {\n    if (status === \"upcoming\") {\n      return;\n    }\n    if (!validate()) {\n      return;\n    }\n    mutate(downloadCoupon(), {\n      optimisticData: markAsDownloaded(statuses, id),\n      rollbackOnError: true,\n      populateCache: true,\n      revalidate: true\n    });\n  };\n  return /* @__PURE__ */ jsxs(Coupon.Root, { theme, backgroundColor, status, children: [\n    /* @__PURE__ */ jsxs(Coupon.Summary, { children: [\n      /* @__PURE__ */ jsxs(Coupon.Title, { children: [\n        couponName,\n        personMaxIssueCount > 1 ? ` ${personMaxIssueCount}\uC7A5` : \"\"\n      ] }),\n      /* @__PURE__ */ jsx(Coupon.Description, { children: description })\n    ] }),\n    /* @__PURE__ */ jsx(Coupon.Divider, {}),\n    /* @__PURE__ */ jsx(EventTrigger.Target, { style: {\n      aspectRatio: \"1 / 1\"\n    }, onClick: handleClick, children: /* @__PURE__ */ jsx(Coupon.Button, {}) })\n  ] });\n});\nconst markAsDownloaded = (statuses, couponId) => {\n  return statuses.map((status) => ({\n    ...status,\n    couponDownloadStatus: status.couponId === couponId && status.couponDownloadStatus === \"DOWNLOADABLE\" ? \"DOWNLOADED\" : status.couponDownloadStatus\n  }));\n};\nconst getCouponUseEndAt = (coupon) => {\n  if (coupon.useAvailableDayType === AvailableDayType.RANGE) {\n    return createKRTimeZoneDate(coupon.couponUseEndAt);\n  }\n  return;\n};\nconst getCouponStatus = (coupon, logged, statuses) => {\n  var _a;\n  if (!coupon) {\n    return \"downloadable\";\n  }\n  if (isCanvas()) {\n    return \"downloadable\";\n  }\n  const now = createKRTimeZoneDate();\n  const issueStartAt = createKRTimeZoneDate(coupon.couponIssueStartAt);\n  const issueEndAt = createKRTimeZoneDate(coupon.couponIssueEndAt);\n  const useEndAt = getCouponUseEndAt(coupon);\n  const isUpcoming = isBefore(now, issueStartAt);\n  const isEnd = isAfter(now, issueEndAt);\n  const isExpired = useEndAt !== void 0 && isAfter(now, useEndAt);\n  if (isUpcoming) {\n    return \"upcoming\";\n  }\n  if (isExpired || isEnd) {\n    return \"expired\";\n  }\n  if (!logged) {\n    return \"downloadable\";\n  }\n  const status = (_a = statuses.find((_status) => _status.couponId === coupon.id)) == null ? void 0 : _a.couponDownloadStatus;\n  switch (status) {\n    case \"NOT_ISSUED\":\n      return \"upcoming\";\n    case \"DOWNLOADABLE\":\n      return \"downloadable\";\n    case \"ISSUANCE_LIMIT_REACHED\":\n      return \"issuanceLimitedReached\";\n    case \"EXPIRED\":\n      return \"expired\";\n    case \"DOWNLOADED\":\n      return \"downloaded\";\n    case \"DISABLED\":\n      return \"disabled\";\n    default:\n      return \"disabled\";\n  }\n};\nconst getDescriptionByStatus = (coupon) => {\n  const issueStartAt = createKRTimeZoneDate(coupon.couponIssueStartAt);\n  const issueEndAt = createKRTimeZoneDate(coupon.couponIssueEndAt);\n  const useEndAt = getCouponUseEndAt(coupon);\n  return {\n    upcoming: format(issueStartAt, \"M\uC6D4 d\uC77C(EEE) a h\uC2DC \uBC1C\uD589 \uC608\uC815\", {\n      locale: ko\n    }),\n    downloadable: /* @__PURE__ */ jsxs(\"div\", { style: descriptionStyle, children: [\n      /* @__PURE__ */ jsx(Countdown, { targetDateString: format(issueEndAt, \"yyyy-MM-dd\"), targetTimeString: format(issueEndAt, \"HH:mm:ss\"), dateDisplayFormat: \"D\uC77C\", timeDisplayFormat: \"H\uC2DC\uAC04 m\uBD84 s\uCD08\", fontSize: 12, color: \"inherit\", style: typography(12, 400) }),\n      \"\uB0A8\uC74C\"\n    ] }),\n    downloaded: useEndAt ? /* @__PURE__ */ jsxs(\"div\", { style: descriptionStyle, children: [\n      /* @__PURE__ */ jsx(Countdown, { targetDateString: format(useEndAt, \"yyyy-MM-dd\"), targetTimeString: format(useEndAt, \"HH:mm:ss\"), dateDisplayFormat: \"D\uC77C\", timeDisplayFormat: \"H\uC2DC\uAC04 m\uBD84 s\uCD08\", fontSize: 12, color: \"inherit\", style: typography(12, 400) }),\n      \"\uB0A8\uC74C\"\n    ] }) : null,\n    expired: \"\uCFE0\uD3F0 \uC0AC\uC6A9 \uAE30\uAC04\uC774 \uC885\uB8CC\uB418\uC5C8\uC5B4\uC694\",\n    disabled: \"\uC0AC\uC6A9\uD560 \uC218 \uC5C6\uB294 \uCFE0\uD3F0\uC785\uB2C8\uB2E4\",\n    issuanceLimitedReached: \"\uCFE0\uD3F0\uC774 \uBAA8\uB450 \uC18C\uC9C4\uB418\uC5C8\uC5B4\uC694\"\n  };\n};\nconst descriptionStyle = {\n  display: \"flex\",\n  alignItems: \"center\",\n  gap: 3,\n  color: \"inherit\"\n};\nexport {\n  DownloadableCoupon\n};\n", "import useSWRInfinite from \"../../node_modules/swr/infinite/dist/index.js\";\nimport { brandSaleApi } from \"../../apis/brand-sale/BrandSaleApiService.js\";\nconst DEFAULT_SIZE = 20;\nconst DEFAULT_SORT = \"BEST\";\nconst getKey = (couponCollectionId, enabled, sort) => (pageIndex, previousPageData) => {\n  if (!enabled) {\n    return null;\n  }\n  if (previousPageData && previousPageData.hasNext === false) {\n    return null;\n  }\n  return {\n    couponCollectionId,\n    query: {\n      page: pageIndex,\n      size: DEFAULT_SIZE,\n      sort\n    }\n  };\n};\nconst useFetchCouponCollectionProducts = (couponCollectionId, enabled, sort) => {\n  const {\n    data,\n    isLoading,\n    error,\n    size,\n    isValidating,\n    setSize\n  } = useSWRInfinite(getKey(couponCollectionId, enabled, sort ?? DEFAULT_SORT), (key) => {\n    return brandSaleApi.getCouponCollectionProducts(couponCollectionId, key.query);\n  }, {\n    keepPreviousData: true,\n    revalidateFirstPage: false\n  });\n  const hasError = error !== void 0;\n  const isPending = isLoading || hasError || !enabled || isValidating;\n  const products = (data == null ? void 0 : data.flatMap(({\n    resultList\n  }) => resultList)) ?? [];\n  const hasNext = (data == null ? void 0 : data[data.length - 1].hasNext) && products.length < 100;\n  return {\n    products: products.slice(0, 100),\n    isPending,\n    hasError,\n    size,\n    hasNext,\n    setSize\n  };\n};\nexport {\n  useFetchCouponCollectionProducts\n};\n"],
  "mappings": "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",
  "names": ["DownloadableCoupon", "Y", "backgroundColor", "coupon", "theme", "useTheme", "componentId", "useComponentId", "trackSnowplowEvent", "useTrackSnowplowEvent", "logged", "userNo", "useCurrentUser", "isInView", "useIntersectionContext", "statuses", "isLoading", "mutate", "useFetchCouponsDownloadStatus", "handleCouponDownloadSuccess", "validate", "download", "useDownloadCoupons", "CouponType", "p", "Coupon", "id", "couponName", "personMaxIssueCount", "downloadCoupon", "markAsDownloaded", "status", "getCouponStatus", "description", "getDescriptionByStatus", "handleClick", "u", "EventTrigger", "couponId", "getCouponUseEndAt", "AvailableDayType", "createKRTimeZoneDate", "_a", "isCanvas", "now", "issueStartAt", "issueEndAt", "useEndAt", "isUpcoming", "isBefore", "isEnd", "isAfter", "isExpired", "_status", "format", "ko", "descriptionStyle", "Countdown", "typography", "DEFAULT_SIZE", "DEFAULT_SORT", "getKey", "couponCollectionId", "enabled", "sort", "pageIndex", "previousPageData", "useFetchCouponCollectionProducts", "data", "isLoading", "error", "size", "isValidating", "setSize", "useSWRInfinite", "key", "brandSaleApi", "hasError", "isPending", "products", "resultList", "hasNext"]
}
