{"ast":null,"code":"function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport { client, previewClient } from './sanity';\nimport imageUrlBuilder from '@sanity/image-url';\nimport globalData from 'global/globalData'; // - - - - - - - - - - - - - - - - - - - - - helpers\n\nconst excludeDraft = (preview = false) => !preview ? \"&& !(_id in path('drafts.**'))\" : '';\n\nexport const imageBuilder = imageUrlBuilder(client); // - - - - - - - - - - - - - - - - - - - - - locale\n\nconst {\n  languages,\n  defaultLang\n} = globalData; // export async function getLocalisations() {\n// \tconst localisations = await sanity.client.fetch(`*[_id == 'global-localisations']{\n// \t\t'strings': strings[]{\n// \t\t\ttitle, key, ${languages.join(', ')}\n// \t\t}\n// \t}`)\n// \treturn localisations[0].strings\n// }\n// export const getLocalisation = (key, lang) => {\n// \treturn globalData.localisations[key] && globalData.localisations[key][lang]\n// }\n\nexport const localize = (value, lang = currentLang) => {\n  const languages = [lang];\n\n  if (Array.isArray(value)) {\n    return value.map(v => localize(v, languages));\n  } else if (value && typeof value === 'object') {\n    if (value._type != 'localeImageAlt' && value._type != 'localeSlug' && /^locale[A-Z]/.test(value._type)) {\n      const language = languages.find(lang => value[lang]);\n      return value[language] || null;\n    }\n\n    return Object.keys(value).reduce((result, key) => {\n      result[key] = localize(value[key], languages);\n      return result;\n    }, {});\n  }\n\n  return value;\n};\n\nconst enhanceHouses = (value, lang) => {\n  if (Array.isArray(value)) {\n    return value.map(v => enhanceHouses(v, lang));\n  } else {\n    const {\n      services,\n      servicesGlobal\n    } = value,\n          rest = _objectWithoutProperties(value, [\"services\", \"servicesGlobal\"]);\n\n    const accommodations = value.accommodations || [];\n    const accommodationsCount = value.status == 'future-closed' && value.canApplyAccommodations ? parseInt(value.canApplyAccommodations) : accommodations.length;\n    const availableCount = accommodations.reduce((acc, curr) => acc + (curr.available ? 1 : 0), 0);\n    const cheapest = accommodations.reduce((acc, curr) => {\n      if (!curr.available) return acc;\n      const price = parseInt(curr.price.replace('€', '')); //.replace('$', '').replace(' ', ''))\n\n      return price < acc ? price : acc;\n    }, 9999);\n    const open = value.status == 'open';\n    const fullHouse = accommodations.length > 0 && availableCount == 0;\n    const canApply = value.status != 'future-closed' && !fullHouse;\n    const status = value.status == 'future-closed' ? 'future-closed' : value.status + '-' + (fullHouse ? 'full' : 'available');\n    const statusTextKey = status == 'open-available' || status == 'future-open-available' ? 'available' : status == 'open-full' || status == 'future-open-full' ? 'full' : 'unavailable'; //status == 'future-closed' ? 'unavailable' \n\n    const statusColor = statusTextKey == 'available' ? 'green' : statusTextKey == 'full' ? 'blue-grey' : 'black';\n    return _objectSpread(_objectSpread({}, rest), {}, {\n      open,\n      canApply,\n      status,\n      statusTextKey,\n      statusColor,\n      accommodationsCount,\n      availableCount,\n      cheapest,\n      fullHouse,\n      services: services ? services.concat(servicesGlobal) : [],\n      url: value.city ? `/${lang}/${value.city.slug}/${value.slug}` : undefined\n    });\n  }\n};\n\nconst enhanceCities = (value, lang) => {\n  if (Array.isArray(value)) {\n    return value.map(v => enhanceCities(v, lang));\n  } else {\n    const houses = value.houses.map(house => _objectSpread(_objectSpread({}, enhanceHouses(house, lang)), {}, {\n      url: `/${lang}/${value.slug}/${house.slug}`\n    }));\n    const availableCount = houses.reduce((acc, curr) => acc + (curr.availableCount ? 1 : 0), 0);\n    return _objectSpread(_objectSpread({}, value), {}, {\n      url: `/${lang}/${value.slug}`,\n      houses,\n      housesCount: houses.length,\n      availableCount\n    });\n  }\n}; // - - - - - - - - - - - - - - - - - - - - - home page\n\n\nexport async function getDoc(type, id, lang, preview, fields = '') {\n  const results = await getClient(preview).fetch(`*[_type == '${type}' && _id == '${id}' ${excludeDraft(preview)}]${fields}`);\n  return localize(results[0], lang);\n}\nconst homeFields = `{\n\t...,\n\t'videos': videos[].asset->url,\n}`;\nexport async function getHomePage(lang, preview) {\n  return getDoc('home', 'home', lang, preview, homeFields);\n}\nexport async function getCityPage(lang, preview) {\n  return getDoc('cityPage', 'cityPage', lang, preview);\n}\nexport async function getHousePage(lang, preview) {\n  return getDoc('housePage', 'housePage', lang, preview);\n}\nexport async function getNewsPage(lang, preview) {\n  return getDoc('newsPage', 'newsPage', lang, preview);\n} // - - - - - - - - - - - - - - - - - - - - - pages\n\nconst pageFields = (lang = defaultLang) => `\n\t'slug': slug.${lang}.current,\n\t'allSlugs': slug,\n\t'title': title.${lang},\n\thero,\n`;\n\nexport async function getPageById(id, lang, preview) {\n  const results = await getClient(preview).fetch(`*[_id == '${id}' ${excludeDraft(preview)}]` + `{${pageFields(lang)}}`);\n  return results[0];\n}\nexport async function getPageSlugTranslation(slug, fromLang, toLang, preview) {\n  const results = await getClient(preview).fetch(`*[_type == 'page' && slug.${fromLang}.current == '${slug}' ${excludeDraft(preview)}]` + `{'slug': slug.${toLang}.current}`);\n  return results[0];\n}\nexport async function getPageBySlug(slug, lang, preview) {\n  const results = await getClient(preview).fetch(`*[_type == 'page' && slug.${lang}.current == '${slug}' ${excludeDraft(preview)}]` + `{${pageFields(lang)}}`);\n  return results[0];\n}\nexport async function getPages() {\n  const results = await getClient().fetch(`*[_type == 'page' ${excludeDraft()}]` //+ ` | order(date desc, _updatedAt desc)`\n  + `{${languages.map(lang => `'${lang}': slug.${lang}.current`).join(',')}}`);\n  return results.flatMap(result => Object.keys(result).map(key => ({\n    lang: key,\n    slug: result[key]\n  })));\n} // - - - - - - - - - - - - - - - - - - - - - cities\n\nconst cityFields = (lang = defaultLang) => `\n  _id,\n\t'slug': slug.${lang}.current,\n\t'allSlugs': slug,\n\ttitle,\n\tdepartment,\n\tareas,\n\tareasShort,\n\topen,\n\topeningDate,\n\tgeolocation,\n\thero,\n\t'videos': videos[].asset->url,\n  'houses': *[_type == 'house' && references(^._id) ${excludeDraft()}]\n\t{\n\t\ttitle,\n\t  'slug': slug.${lang}.current,\n\t  status,\n\t  openingDate,\n\t  canApplyAccommodations,\n\t  geolocation,\n\t  hero,\n\t  area,\n\t  surface,\n\t  'accommodationsCount': count(*[_type == 'accommodation' && references(^._id) ${excludeDraft()}]),\n\t  'availableCount': count(*[_type == 'accommodation' && references(^._id) ${excludeDraft()}][available]),\n\t  'accommodations': *[_type == 'accommodation' && references(^._id) ${excludeDraft()}]\n\t\t{\n\t\t\t_id,\n\t\t\ttitle,\n\t\t\tavailable,\n\t\t\tsurface,\n\t\t\tprice,\n\t\t\t'key': key.current,\n\t\t},\n\t},\n`;\n\nconst cityFieldsLight = (lang = defaultLang) => `\n\t_id,\n\t'slug': slug.${lang}.current,\n\ttitle,\n\thero,\n\tgeolocation,\n`;\n\nexport async function getCitiesSlugs() {\n  const results = await getClient().fetch(`*[_type == 'city' && open ${excludeDraft()}]` + `{${languages.map(lang => `'${lang}': slug.${lang}.current`).join(',')}}`);\n  return results.flatMap(city => Object.keys(city).map(lang => ({\n    lang,\n    city: city[lang]\n  })));\n}\nexport async function getCities(lang, preview) {\n  const results = await getClient(preview).fetch(`*[_type == 'city' ${excludeDraft(preview)}]` + `{${cityFields(lang)}}` + ` | order(_createdAt asc)`);\n  return enhanceCities(localize(results, lang), lang);\n}\nexport async function getCityBySlug(slug, lang, preview) {\n  const results = await getClient(preview).fetch(`*[_type == 'city' && slug.${lang}.current == '${slug}' ${excludeDraft(preview)}]` + `{${cityFields(lang)}}`);\n  return enhanceCities(localize(results[0], lang), lang);\n} // - - - - - - - - - - - - - - - - - - - - - houses\n\nconst houseFields = (lang = defaultLang) => `\n\t...,\n\t'slug': slug.${lang}.current,\n\t'allSlugs': slug,\n\t'city': {\n\t  'title': city->title,\n\t  'slug': city->slug.${lang}.current,\n\t},\n\t'accommodations': *[_type == 'accommodation' && references(^._id) ${excludeDraft()}]\n\t {\n\t\t_id,\n\t\ttitle,\n\t\tavailable,\n\t\tsurface,\n\t\tprice,\n\t\t'key': key.current,\n\t },\n\t\"services\": services[_type == 'service']{\n\t\t'id': _key,\n\t\ttitle,\n\t\ttype,\n\t\tdescription,\n\t\ticon,\n\t},\n\t\"servicesGlobal\": services[_type == 'reference']->{\n\t\t'id': _id,\n\t\ttitle,\n\t\ttype,\n\t\tdescription,\n\t\ticon,\n\t},\n`;\n/*\n`\nservices[]->{\n\ttitle,\n\ttype,\n\ticon,\n\tdescription,\n},\n`\n*/\n\n\nexport async function getHousesSlugs(lang, withTitles = false) {\n  const housesSlugFields = l => `'${l}': slug.${l}.current` + `,'city': city->slug.${l}.current`;\n\n  const results = await getClient().fetch(`*[_type == 'house' ${excludeDraft()}]` + `{\n\t\t\t\t${lang ? housesSlugFields(lang) : languages.map(housesSlugFields).join(',')},\n\t\t\t}`);\n  return results.flatMap(house => {\n    const {\n      city\n    } = house,\n          rest = _objectWithoutProperties(house, [\"city\"]);\n\n    return Object.keys(rest).map(lang => ({\n      lang,\n      city,\n      house: rest[lang]\n    }));\n  });\n}\nexport async function getHousesMenu(lang) {\n  const results = await getClient().fetch(`*[_type == 'city' ${excludeDraft()}]` + `{\n\t\t\t\t'slug': slug.${lang}.current,\n\t\t\t\ttitle,\n\t\t\t\t'houses': *[_type == 'house' && references(^._id) ${excludeDraft()}]{\n\t\t\t\t\ttitle,\n\t\t\t\t\t'slug': slug.${lang}.current,\n\t\t\t\t},\n\t\t\t}`);\n  return localize(results, lang).map(value => {\n    const houses = value.houses.map(house => _objectSpread(_objectSpread({}, house), {}, {\n      url: `/${lang}/${value.slug}/${house.slug}`\n    }));\n    return _objectSpread(_objectSpread({}, value), {}, {\n      houses\n    });\n  }); //({...house, url: `/${lang}/${house.city.slug}/${house.slug}`}))\n}\nexport async function getHouseBySlug(slug, lang, preview) {\n  const results = await getClient(preview).fetch(`*[_type == 'house' && slug.${lang}.current == '${slug}' ${excludeDraft(preview)}]` + `{${houseFields(lang)}}`);\n  return enhanceHouses(localize(results[0], lang), lang);\n} // - - - - - - - - - - - - - - - - - - - - - document\n\nexport async function getDocumentById(id, preview) {\n  // TODO - localize\n  const results = await getClient(preview).fetch(`*[_id == '${id}' && defined(slug.${defaultLang}) ${excludeDraft(preview)}]{\n\t\t\t_type,\n\t\t\t'slug': coalesce(slug.en.current, slug.${defaultLang}.current)\n\t\t}`);\n  return results[0];\n} // - - - - - - - - - - - - - - - - - - - - - OLD\n\nconst getUniquePosts = posts => {\n  const slugs = new Set();\n  return posts.filter(post => {\n    if (slugs.has(post.slug)) {\n      return false;\n    } else {\n      slugs.add(post.slug);\n      return true;\n    }\n  });\n};\n\nconst postFields = `\n  name,\n  title,\n  date,\n  excerpt,\n  'slug': slug.current,\n  'coverImage': coverImage.asset->url,\n  'author': author->{name, 'picture': picture.asset->url},\n`;\n\nconst getClient = preview => preview ? previewClient : client;\n\nexport async function getPreviewPostBySlug(slug) {\n  const data = await getClient(true).fetch(`*[_type == \"post\" && slug.current == $slug] | order(date desc){\n\t  ${postFields}\n\t  content\n\t}`, {\n    slug\n  });\n  return data[0];\n}\nexport async function getAllPostsWithSlug() {\n  const data = await client.fetch(`*[_type == \"post\"]{ 'slug': slug.current }`);\n  return data;\n}\nexport async function getAllPostsForHome(preview) {\n  const results = await getClient(preview).fetch(`*[_type == \"post\"] | order(date desc, _updatedAt desc){\n\t  ${postFields}\n\t}`);\n  return getUniquePosts(results);\n}\nexport async function getPostAndMorePosts(slug, preview) {\n  const curClient = getClient(preview);\n  const [post, morePosts] = await Promise.all([curClient.fetch(`*[_type == \"post\" && slug.current == $slug] | order(_updatedAt desc) {\n\t\t${postFields}\n\t\tcontent,\n\t  }`, {\n    slug\n  }).then(res => res === null || res === void 0 ? void 0 : res[0]), curClient.fetch(`*[_type == \"post\" && slug.current != $slug] | order(date desc, _updatedAt desc){\n\t\t${postFields}\n\t\tcontent,\n\t  }[0...2]`, {\n    slug\n  })]);\n  return {\n    post,\n    morePosts: getUniquePosts(morePosts)\n  };\n} // TEMP\n// export async function getAll() {\n// \tconst all = await getClient().fetch(`*[]`)\n// \tconsole.log('api.js::291 all', all)\n// \treturn all\n// }","map":{"version":3,"sources":["/home/gkkdzdg/www/src/lib/api.js"],"names":["client","previewClient","imageUrlBuilder","globalData","excludeDraft","preview","imageBuilder","languages","defaultLang","localize","value","lang","currentLang","Array","isArray","map","v","_type","test","language","find","Object","keys","reduce","result","key","enhanceHouses","services","servicesGlobal","rest","accommodations","accommodationsCount","status","canApplyAccommodations","parseInt","length","availableCount","acc","curr","available","cheapest","price","replace","open","fullHouse","canApply","statusTextKey","statusColor","concat","url","city","slug","undefined","enhanceCities","houses","house","housesCount","getDoc","type","id","fields","results","getClient","fetch","homeFields","getHomePage","getCityPage","getHousePage","getNewsPage","pageFields","getPageById","getPageSlugTranslation","fromLang","toLang","getPageBySlug","getPages","join","flatMap","cityFields","cityFieldsLight","getCitiesSlugs","getCities","getCityBySlug","houseFields","getHousesSlugs","withTitles","housesSlugFields","l","getHousesMenu","getHouseBySlug","getDocumentById","getUniquePosts","posts","slugs","Set","filter","post","has","add","postFields","getPreviewPostBySlug","data","getAllPostsWithSlug","getAllPostsForHome","getPostAndMorePosts","curClient","morePosts","Promise","all","then","res"],"mappings":"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","sourcesContent":["import { client, previewClient } from './sanity'\nimport imageUrlBuilder from '@sanity/image-url'\nimport globalData from 'global/globalData'\n\n// - - - - - - - - - - - - - - - - - - - - - helpers\n\nconst excludeDraft = (preview = false) => !preview ? \"&& !(_id in path('drafts.**'))\" : ''\nexport const imageBuilder = imageUrlBuilder(client)\n\n// - - - - - - - - - - - - - - - - - - - - - locale\n\nconst { languages, defaultLang, } = globalData\n\n// export async function getLocalisations() {\n// \tconst localisations = await sanity.client.fetch(`*[_id == 'global-localisations']{\n// \t\t'strings': strings[]{\n// \t\t\ttitle, key, ${languages.join(', ')}\n// \t\t}\n// \t}`)\n// \treturn localisations[0].strings\n// }\n// export const getLocalisation = (key, lang) => {\n// \treturn globalData.localisations[key] && globalData.localisations[key][lang]\n// }\n\nexport const localize = (value, lang = currentLang) => {\n\tconst languages = [lang]\n\n\tif (Array.isArray(value)) {\n\t\treturn value.map(v => localize(v, languages))\n\t} else if (value && typeof value === 'object') {\n\t\tif (value._type != 'localeImageAlt' && value._type != 'localeSlug' && /^locale[A-Z]/.test(value._type)) {\n\t\t\tconst language = languages.find(lang => value[lang])\n\t\t\treturn value[language] || null\n\t\t}\n\n\t\treturn Object.keys(value).reduce((result, key) => {\n\t\t\tresult[key] = localize(value[key], languages)\n\t\t\treturn result\n\t\t}, {})\n\t}\n\treturn value\n}\n\nconst enhanceHouses = (value, lang) => {\n\n\tif (Array.isArray(value)) {\n\t\treturn value.map(v => enhanceHouses(v, lang))\n\t} else {\n\t\tconst {\n\t\t\tservices,\n\t\t\tservicesGlobal,\n\t\t\t...rest } = value\n\n\t\tconst accommodations = value.accommodations || []\n\t\tconst accommodationsCount =\n\t\t\tvalue.status == 'future-closed' && value.canApplyAccommodations\n\t\t\t\t? parseInt(value.canApplyAccommodations)\n\t\t\t\t: accommodations.length\n\t\tconst availableCount = accommodations.reduce((acc, curr) => acc + (curr.available ? 1 : 0), 0)\n\t\tconst cheapest = accommodations.reduce((acc, curr) => {\n\t\t\tif (!curr.available) return acc\n\t\t\tconst price = parseInt(curr.price.replace('€', ''))//.replace('$', '').replace(' ', ''))\n\t\t\treturn price < acc ? price : acc\n\t\t}, 9999)\n\n\t\tconst open = value.status == 'open'\n\n\t\tconst fullHouse = accommodations.length > 0 && availableCount == 0\n\n\t\tconst canApply = value.status != 'future-closed' && !fullHouse\n\n\t\tconst status = value.status == 'future-closed'\n\t\t\t? 'future-closed'\n\t\t\t: value.status + '-' + (fullHouse ? 'full' : 'available')\n\n\t\tconst statusTextKey =\n\t\t\tstatus == 'open-available' || status == 'future-open-available' ? 'available'\n\t\t\t\t: status == 'open-full' || status == 'future-open-full' ? 'full'\n\t\t\t\t\t: 'unavailable' //status == 'future-closed' ? 'unavailable' \n\n\t\tconst statusColor =\n\t\t\tstatusTextKey == 'available' ? 'green'\n\t\t\t\t: statusTextKey == 'full' ? 'blue-grey'\n\t\t\t\t\t: 'black'\n\n\t\treturn {\n\t\t\t...rest,\n\t\t\topen,\n\t\t\tcanApply,\n\t\t\tstatus,\n\t\t\tstatusTextKey,\n\t\t\tstatusColor,\n\t\t\taccommodationsCount,\n\t\t\tavailableCount,\n\t\t\tcheapest,\n\t\t\tfullHouse,\n\t\t\tservices: services ? services.concat(servicesGlobal) : [],\n\t\t\turl: value.city ? `/${lang}/${value.city.slug}/${value.slug}` : undefined,\n\t\t}\n\t}\n}\n\nconst enhanceCities = (value, lang) => {\n\n\tif (Array.isArray(value)) {\n\t\treturn value.map(v => enhanceCities(v, lang))\n\t} else {\n\t\tconst houses = value.houses.map(house => ({\n\t\t\t...enhanceHouses(house, lang),\n\t\t\turl: `/${lang}/${value.slug}/${house.slug}`,\n\t\t}))\n\t\tconst availableCount = houses.reduce((acc, curr) => acc + (curr.availableCount ? 1 : 0), 0)\n\t\treturn {\n\t\t\t...value,\n\t\t\turl: `/${lang}/${value.slug}`,\n\t\t\thouses,\n\t\t\thousesCount: houses.length,\n\t\t\tavailableCount,\n\t\t}\n\t}\n}\n\n// - - - - - - - - - - - - - - - - - - - - - home page\n\n\nexport async function getDoc(type, id, lang, preview, fields = '') {\n\tconst results = await getClient(preview)\n\t\t.fetch(`*[_type == '${type}' && _id == '${id}' ${excludeDraft(preview)}]${fields}`)\n\treturn localize(results[0], lang)\n}\n\nconst homeFields = `{\n\t...,\n\t'videos': videos[].asset->url,\n}`\n\nexport async function getHomePage(lang, preview) {\n\treturn getDoc('home', 'home', lang, preview, homeFields)\n}\nexport async function getCityPage(lang, preview) {\n\treturn getDoc('cityPage', 'cityPage', lang, preview)\n}\nexport async function getHousePage(lang, preview) {\n\treturn getDoc('housePage', 'housePage', lang, preview)\n}\nexport async function getNewsPage(lang, preview) {\n\treturn getDoc('newsPage', 'newsPage', lang, preview)\n}\n\n// - - - - - - - - - - - - - - - - - - - - - pages\n\n\nconst pageFields = (lang = defaultLang) => `\n\t'slug': slug.${lang}.current,\n\t'allSlugs': slug,\n\t'title': title.${lang},\n\thero,\n`\n\nexport async function getPageById(id, lang, preview) {\n\tconst results = await getClient(preview)\n\t\t.fetch(`*[_id == '${id}' ${excludeDraft(preview)}]`\n\t\t\t+ `{${pageFields(lang)}}`\n\t\t)\n\treturn results[0]\n}\n\nexport async function getPageSlugTranslation(slug, fromLang, toLang, preview) {\n\tconst results = await getClient(preview)\n\t\t.fetch(`*[_type == 'page' && slug.${fromLang}.current == '${slug}' ${excludeDraft(preview)}]`\n\t\t\t+ `{'slug': slug.${toLang}.current}`\n\t\t)\n\treturn results[0]\n}\n\nexport async function getPageBySlug(slug, lang, preview) {\n\tconst results = await getClient(preview)\n\t\t.fetch(`*[_type == 'page' && slug.${lang}.current == '${slug}' ${excludeDraft(preview)}]`\n\t\t\t+ `{${pageFields(lang)}}`\n\t\t)\n\treturn results[0]\n}\n\nexport async function getPages() {\n\tconst results = await getClient()\n\t\t.fetch(`*[_type == 'page' ${excludeDraft()}]`\n\t\t\t//+ ` | order(date desc, _updatedAt desc)`\n\t\t\t+ `{${languages.map(lang => `'${lang}': slug.${lang}.current`).join(',')}}`\n\t\t)\n\n\treturn results.flatMap(result => Object.keys(result).map(key => ({ lang: key, slug: result[key] })))\n}\n\n// - - - - - - - - - - - - - - - - - - - - - cities\n\nconst cityFields = (lang = defaultLang) => `\n  _id,\n\t'slug': slug.${lang}.current,\n\t'allSlugs': slug,\n\ttitle,\n\tdepartment,\n\tareas,\n\tareasShort,\n\topen,\n\topeningDate,\n\tgeolocation,\n\thero,\n\t'videos': videos[].asset->url,\n  'houses': *[_type == 'house' && references(^._id) ${excludeDraft()}]\n\t{\n\t\ttitle,\n\t  'slug': slug.${lang}.current,\n\t  status,\n\t  openingDate,\n\t  canApplyAccommodations,\n\t  geolocation,\n\t  hero,\n\t  area,\n\t  surface,\n\t  'accommodationsCount': count(*[_type == 'accommodation' && references(^._id) ${excludeDraft()}]),\n\t  'availableCount': count(*[_type == 'accommodation' && references(^._id) ${excludeDraft()}][available]),\n\t  'accommodations': *[_type == 'accommodation' && references(^._id) ${excludeDraft()}]\n\t\t{\n\t\t\t_id,\n\t\t\ttitle,\n\t\t\tavailable,\n\t\t\tsurface,\n\t\t\tprice,\n\t\t\t'key': key.current,\n\t\t},\n\t},\n`\nconst cityFieldsLight = (lang = defaultLang) => `\n\t_id,\n\t'slug': slug.${lang}.current,\n\ttitle,\n\thero,\n\tgeolocation,\n`\n\nexport async function getCitiesSlugs() {\n\tconst results = await getClient()\n\t\t.fetch(`*[_type == 'city' && open ${excludeDraft()}]`\n\t\t\t+ `{${languages.map(lang => `'${lang}': slug.${lang}.current`).join(',')}}`\n\t\t)\n\treturn results.flatMap(city => Object.keys(city).map(lang => ({ lang, city: city[lang] })))\n}\n\n\nexport async function getCities(lang, preview) {\n\tconst results = await getClient(preview)\n\t\t.fetch(`*[_type == 'city' ${excludeDraft(preview)}]`\n\t\t\t+ `{${cityFields(lang)}}`\n\t\t\t+ ` | order(_createdAt asc)`\n\t\t)\n\n\treturn enhanceCities(localize(results, lang), lang)\n}\n\n\nexport async function getCityBySlug(slug, lang, preview) {\n\tconst results = await getClient(preview)\n\t\t.fetch(`*[_type == 'city' && slug.${lang}.current == '${slug}' ${excludeDraft(preview)}]`\n\t\t\t+ `{${cityFields(lang)}}`\n\t\t)\n\treturn enhanceCities(localize(results[0], lang), lang)\n}\n\n// - - - - - - - - - - - - - - - - - - - - - houses\n\nconst houseFields = (lang = defaultLang) => `\n\t...,\n\t'slug': slug.${lang}.current,\n\t'allSlugs': slug,\n\t'city': {\n\t  'title': city->title,\n\t  'slug': city->slug.${lang}.current,\n\t},\n\t'accommodations': *[_type == 'accommodation' && references(^._id) ${excludeDraft()}]\n\t {\n\t\t_id,\n\t\ttitle,\n\t\tavailable,\n\t\tsurface,\n\t\tprice,\n\t\t'key': key.current,\n\t },\n\t\"services\": services[_type == 'service']{\n\t\t'id': _key,\n\t\ttitle,\n\t\ttype,\n\t\tdescription,\n\t\ticon,\n\t},\n\t\"servicesGlobal\": services[_type == 'reference']->{\n\t\t'id': _id,\n\t\ttitle,\n\t\ttype,\n\t\tdescription,\n\t\ticon,\n\t},\n`\n/*\n`\nservices[]->{\n\ttitle,\n\ttype,\n\ticon,\n\tdescription,\n},\n`\n*/\n\nexport async function getHousesSlugs(lang, withTitles = false) {\n\tconst housesSlugFields = l => `'${l}': slug.${l}.current`\n\t\t+ `,'city': city->slug.${l}.current`\n\tconst results = await getClient()\n\t\t.fetch(`*[_type == 'house' ${excludeDraft()}]`\n\t\t\t+ `{\n\t\t\t\t${lang\n\t\t\t\t? housesSlugFields(lang)\n\t\t\t\t: languages.map(housesSlugFields).join(',')},\n\t\t\t}`\n\t\t)\n\treturn results.flatMap(house => {\n\t\tconst { city, ...rest } = house\n\t\treturn Object.keys(rest).map(lang => ({ lang, city, house: rest[lang] }))\n\t})\n}\n\nexport async function getHousesMenu(lang) {\n\tconst results = await getClient()\n\t\t.fetch(`*[_type == 'city' ${excludeDraft()}]`\n\t\t\t+ `{\n\t\t\t\t'slug': slug.${lang}.current,\n\t\t\t\ttitle,\n\t\t\t\t'houses': *[_type == 'house' && references(^._id) ${excludeDraft()}]{\n\t\t\t\t\ttitle,\n\t\t\t\t\t'slug': slug.${lang}.current,\n\t\t\t\t},\n\t\t\t}`\n\t\t)\n\treturn localize(results, lang).map(value => {\n\t\tconst houses = value.houses.map(house => ({\n\t\t\t...house,\n\t\t\turl: `/${lang}/${value.slug}/${house.slug}`,\n\t\t}))\n\t\treturn {\n\t\t\t...value,\n\t\t\thouses,\n\t\t}\n\t})//({...house, url: `/${lang}/${house.city.slug}/${house.slug}`}))\n}\n\nexport async function getHouseBySlug(slug, lang, preview) {\n\tconst results = await getClient(preview)\n\t\t.fetch(`*[_type == 'house' && slug.${lang}.current == '${slug}' ${excludeDraft(preview)}]`\n\t\t\t+ `{${houseFields(lang)}}`\n\t\t)\n\treturn enhanceHouses(localize(results[0], lang), lang)\n}\n\n\n\n// - - - - - - - - - - - - - - - - - - - - - document\n\nexport async function getDocumentById(id, preview) {\n\t// TODO - localize\n\tconst results = await getClient(preview)\n\t\t.fetch(`*[_id == '${id}' && defined(slug.${defaultLang}) ${excludeDraft(preview)}]{\n\t\t\t_type,\n\t\t\t'slug': coalesce(slug.en.current, slug.${defaultLang}.current)\n\t\t}`)\n\treturn results[0]\n}\n\n\n// - - - - - - - - - - - - - - - - - - - - - OLD\n\nconst getUniquePosts = (posts) => {\n\tconst slugs = new Set()\n\treturn posts.filter((post) => {\n\t\tif (slugs.has(post.slug)) {\n\t\t\treturn false\n\t\t} else {\n\t\t\tslugs.add(post.slug)\n\t\t\treturn true\n\t\t}\n\t})\n}\n\nconst postFields = `\n  name,\n  title,\n  date,\n  excerpt,\n  'slug': slug.current,\n  'coverImage': coverImage.asset->url,\n  'author': author->{name, 'picture': picture.asset->url},\n`\n\nconst getClient = (preview) => (preview ? previewClient : client)\n\nexport async function getPreviewPostBySlug(slug) {\n\tconst data = await getClient(true).fetch(\n\t\t`*[_type == \"post\" && slug.current == $slug] | order(date desc){\n\t  ${postFields}\n\t  content\n\t}`,\n\t\t{ slug }\n\t)\n\treturn data[0]\n}\n\nexport async function getAllPostsWithSlug() {\n\tconst data = await client.fetch(`*[_type == \"post\"]{ 'slug': slug.current }`)\n\treturn data\n}\n\nexport async function getAllPostsForHome(preview) {\n\tconst results = await getClient(preview)\n\t\t.fetch(`*[_type == \"post\"] | order(date desc, _updatedAt desc){\n\t  ${postFields}\n\t}`)\n\treturn getUniquePosts(results)\n}\n\nexport async function getPostAndMorePosts(slug, preview) {\n\tconst curClient = getClient(preview)\n\tconst [post, morePosts] = await Promise.all([\n\t\tcurClient\n\t\t\t.fetch(\n\t\t\t\t`*[_type == \"post\" && slug.current == $slug] | order(_updatedAt desc) {\n\t\t${postFields}\n\t\tcontent,\n\t  }`,\n\t\t\t\t{ slug }\n\t\t\t)\n\t\t\t.then((res) => res?.[0]),\n\t\tcurClient.fetch(\n\t\t\t`*[_type == \"post\" && slug.current != $slug] | order(date desc, _updatedAt desc){\n\t\t${postFields}\n\t\tcontent,\n\t  }[0...2]`,\n\t\t\t{ slug }\n\t\t),\n\t])\n\treturn { post, morePosts: getUniquePosts(morePosts) }\n}\n\n\n\n\n\n// TEMP\n\n// export async function getAll() {\n// \tconst all = await getClient().fetch(`*[]`)\n// \tconsole.log('api.js::291 all', all)\n// \treturn all\n// }"]},"metadata":{},"sourceType":"module"}