UNPKG

@goteborgco/open-api-js-client

Version:

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

189 lines (188 loc) 4.78 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.Events = 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"); /** * Events API for accessing event content * * This class provides type-safe methods for querying and retrieving event content * from the GraphQL API. */ class Events { constructor(client) { this.client = client; this.defaultEventFields = ` areas categories category_heading classification contact { email facebook instagram phone website } currentInTime { months weekdays } date dates { end start } excerpt featuredmedia { alt_text caption credit id media_type mime_type sizes { full { height source_url width } } } free id invisible_tags lang link place_id tags title link translations { en sv } type `; this.defaultMarkersFields = ` features { type geometry { type coordinates } properties { id name icon type slug } } type `; } /** * List events with optional filtering and sorting * * @param filter Optional filtering options * @param sortBy Optional sorting options * @param fields Optional GraphQL fields to return * @returns Array of event entities and markers */ async list(filter, sortBy, fields) { const defaultFields = ` events { ${this.defaultEventFields} } 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(', '); // Convert sortBy object to GraphQL arguments format if provided const sortArgs = sortBy ? Object.entries(sortBy) .map(([key, value]) => { if (key === 'orders') { // Handle orders as enum values if (Array.isArray(value)) { return `${key}: [${value.join(', ')}]`; } return `${key}: ${value}`; } if (Array.isArray(value)) { return `${key}: [${value.map(v => `"${v}"`).join(', ')}]`; } return `${key}: "${value}"`; }) .join(', ') : ''; const query = (0, gql_1.gql) ` query ListEvents { events(${filterArgs ? `filter: { ${filterArgs} }` : ''}${sortArgs ? `, sortBy: { ${sortArgs} }` : ''}) { ${fields || defaultFields} } } `; const response = await this.client.execute(query); return { events: response.events.events.map(event => new WpEntity_1.WpEntity(event)), markers: response.events.markers ? new Markers_1.Markers(response.events.markers) : undefined }; } /** * Get a specific event by ID * * @param id The event ID * @param lang Language code ('en' or 'sv') * @param fields Optional GraphQL fields to return * @returns Event entity with related content and markers */ async getById(id, lang, fields) { const defaultFields = ` event { ${this.defaultEventFields} } related { events { ${this.defaultEventFields} } guides { ${this.defaultEventFields} } places { ${this.defaultEventFields} } } markers { ${this.defaultMarkersFields} } `; const query = (0, gql_1.gql) ` query GetEventById { eventById(filter: { id: ${id}, lang: ${lang} }) { ${fields || defaultFields} } } `; const response = await this.client.execute(query); return { event: new WpEntity_1.WpEntity(response.eventById.event), related: response.eventById.related ? new Related_1.Related(response.eventById.related) : undefined, markers: response.eventById.markers ? new Markers_1.Markers(response.eventById.markers) : undefined }; } } exports.Events = Events;