+
+
+ {tripadvisorRating ? (
+
+
+
+ {tripadvisorRating}
+
+
+ ) : null}
+
+
+
+
+
+ {hotel.name}
+
+
+
+
{address}
+
+
+
+
+ {intl.formatMessage(
+ {
+ defaultMessage: "{number} km to city center",
+ },
+ {
+ number: getSingleDecimal(
+ hotel.location.distanceToCentre / 1000
+ ),
+ }
+ )}
+
+
+
+
+ {hotelDescription ? (
+
+ {hotelDescription}
+
+ ) : null}
+
+
+ {amenities.map((amenity) => {
+ return (
+ -
+
+ {amenity.name}
+
+ )
+ })}
+
+
+
+
+
+ {intl.formatMessage({
+ defaultMessage: "See hotel details",
+ })}
+
+
+
+ )
+}
diff --git a/apps/scandic-web/components/Blocks/CampaignHotelListing/campaignHotelListing.module.css b/apps/scandic-web/components/Blocks/CampaignHotelListing/campaignHotelListing.module.css
new file mode 100644
index 000000000..75cd06075
--- /dev/null
+++ b/apps/scandic-web/components/Blocks/CampaignHotelListing/campaignHotelListing.module.css
@@ -0,0 +1,56 @@
+.hotelListingSection {
+ --scroll-margin-top: calc(
+ var(--booking-widget-mobile-height) + var(--Spacing-x2)
+ );
+
+ display: grid;
+ gap: var(--Space-x3);
+ scroll-margin-top: var(--scroll-margin-top);
+}
+
+.heading {
+ color: var(--Text-Heading);
+}
+
+.list {
+ list-style: none;
+ display: grid;
+ gap: var(--Space-x4);
+}
+
+.listItem.hidden {
+ display: none;
+}
+
+@media screen and (min-width: 768px) {
+ .hotelListingSection {
+ --scroll-margin-top: calc(
+ var(--booking-widget-tablet-height) + var(--Spacing-x2)
+ );
+ gap: var(--Space-x5);
+ }
+ .list {
+ row-gap: var(--Space-x5);
+ column-gap: var(--Space-x2);
+ }
+}
+
+@media screen and (min-width: 768px) and (max-width: 949px) {
+ .list {
+ grid-template-columns: repeat(2, 1fr);
+ }
+}
+
+@media screen and (min-width: 950px) {
+ .list {
+ grid-template-columns: repeat(3, 1fr);
+ }
+}
+
+@media screen and (min-width: 1367px) {
+ .hotelListingSection {
+ --scroll-margin-top: calc(
+ var(--booking-widget-desktop-height) + var(--Spacing-x2)
+ );
+ }
+}
diff --git a/apps/scandic-web/components/Blocks/CampaignHotelListing/index.tsx b/apps/scandic-web/components/Blocks/CampaignHotelListing/index.tsx
new file mode 100644
index 000000000..fc6cc1be2
--- /dev/null
+++ b/apps/scandic-web/components/Blocks/CampaignHotelListing/index.tsx
@@ -0,0 +1,21 @@
+import { getHotelsByCSFilter } from "@/lib/trpc/memoizedRequests"
+
+import CampaignHotelListingClient from "./Client"
+
+interface CampaignHotelListingProps {
+ heading: string
+ hotelIds: string[]
+}
+
+export default async function CampaignHotelListing({
+ heading,
+ hotelIds,
+}: CampaignHotelListingProps) {
+ const hotels = await getHotelsByCSFilter({ hotelsToInclude: hotelIds })
+
+ if (!hotels.length) {
+ return null
+ }
+
+ return