UNPKG

@goteborgco/open-api-js-client

Version:

Official JavaScript client for the Göteborg & Co GraphQL API

199 lines (198 loc) 4.55 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.Places = void 0; const WpEntity_1 = require("../entities/WpEntity"); const Related_1 = require("../entities/Related"); const Markers_1 = require("../entities/Markers"); const gql_1 = require("../utils/gql"); /** * Places API for accessing place content * * This class provides type-safe methods for querying and retrieving place content * from the GraphQL API. */ class Places { constructor(client) { this.client = client; this.defaultPlaceFields = ` id title excerpt content date modified link categories areas tags link category_heading featuredmedia { id credit caption alt_text media_type mime_type sizes { medium { width height source_url } full { width height source_url } } } gallery { id credit caption sizes { full { width height source_url } } } contact { email phone website facebook instagram } location { address lat lng zoom place_id name street_number street_name state post_code country country_short } currentInTime { months weekdays } translations { en sv } `; this.defaultMarkersFields = ` type features { type geometry { type coordinates } properties { id name icon type slug } } `; } /** * List places with optional filtering * * @param filter Optional filtering options * @param fields Optional GraphQL fields to return * @returns Array of place entities and optional markers */ async list(filter, fields) { const defaultFields = ` places { ${this.defaultPlaceFields} } markers { ${this.defaultMarkersFields} } `; // Convert filter object to GraphQL arguments format const filterArgs = Object.entries(filter) .map(([key, value]) => { if (Array.isArray(value)) { return `${key}: [${value.join(', ')}]`; } if (typeof value === 'string') { return `${key}: "${value}"`; } return `${key}: ${value}`; }) .join(', '); const query = (0, gql_1.gql) ` query ListPlaces { places(${filterArgs ? `filter: { ${filterArgs} }` : ''}) { ${fields || defaultFields} } } `; const response = await this.client.execute(query); return { places: response.places.places.map(place => new WpEntity_1.WpEntity(place)), markers: response.places.markers ? new Markers_1.Markers(response.places.markers) : undefined }; } /** * Get a specific place by ID * * @param id The place ID * @param lang Language code ('en' or 'sv') * @param fields Optional GraphQL fields to return * @returns Place entity with associated events, related content, and markers */ async getById(id, lang, fields) { const defaultFields = ` place { ${this.defaultPlaceFields} } events { ${this.defaultPlaceFields} } related { events { ${this.defaultPlaceFields} } guides { ${this.defaultPlaceFields} } places { ${this.defaultPlaceFields} } } markers { ${this.defaultMarkersFields} } `; const query = (0, gql_1.gql) ` query GetPlaceById { placeById(filter: { id: ${id}, lang: ${lang} }) { ${fields || defaultFields} } } `; const response = await this.client.execute(query); return { place: new WpEntity_1.WpEntity(response.placeById.place), events: response.placeById.events?.map(event => new WpEntity_1.WpEntity(event)) || [], related: response.placeById.related ? new Related_1.Related(response.placeById.related) : undefined, markers: response.placeById.markers ? new Markers_1.Markers(response.placeById.markers) : undefined }; } } exports.Places = Places;