UNPKG

@goteborgco/open-api-js-client

Version:

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

121 lines (120 loc) 3.13 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.Guides = void 0; const WpEntity_1 = require("../entities/WpEntity"); const Related_1 = require("../entities/Related"); const gql_1 = require("../utils/gql"); /** * Guides API for accessing guide content * * This class provides type-safe methods for querying and retrieving guide content * from the GraphQL API. */ class Guides { constructor(client) { this.client = client; this.defaultGuideFields = ` id title excerpt date categories areas tags category_heading link dates { end start } featuredmedia { sizes { large { height source_url width } } } translations { en sv } `; } /** * List guides with optional filtering * * @param filter Optional filtering options * @param matchDate Optional matchDate * @param fields Optional GraphQL fields to return * @returns Array of guide entities */ async list(filter, matchDate, fields) { const defaultFields = ` guides { ${this.defaultGuideFields} } `; // 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 ListGuides { guides(${filterArgs ? `filter: { ${filterArgs} }` : ''}${matchDate ? `, matchDate: "${matchDate}"` : ''}) { ${fields || defaultFields} } } `; const response = await this.client.execute(query); return response.guides.guides.map(guide => new WpEntity_1.WpEntity(guide)); } /** * Get a specific guide by ID * * @param id The guide ID * @param lang Language code ('en' or 'sv') * @param fields Optional GraphQL fields to return * @returns Guide entity with related content */ async getById(id, lang, fields) { const defaultFields = ` guide { ${this.defaultGuideFields} } related { events { ${this.defaultGuideFields} } guides { ${this.defaultGuideFields} } places { ${this.defaultGuideFields} } } `; const query = (0, gql_1.gql) ` query GetGuideById { guideById(filter: { id: ${id}, lang: ${lang} }) { ${fields || defaultFields} } } `; const response = await this.client.execute(query); return { guide: new WpEntity_1.WpEntity(response.guideById.guide), related: response.guideById.related ? new Related_1.Related(response.guideById.related) : undefined }; } } exports.Guides = Guides;