@goteborgco/open-api-js-client
Version:
Official JavaScript client for the Göteborg & Co GraphQL API
121 lines (120 loc) • 3.14 kB
JavaScript
;
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' or 'de')
* @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;