UNPKG

@stackend/api

Version:

JS bindings to api.stackend.com

279 lines 9.62 kB
"use strict"; var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { if (k2 === undefined) k2 = k; var desc = Object.getOwnPropertyDescriptor(m, k); if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { desc = { enumerable: true, get: function() { return m[k]; } }; } Object.defineProperty(o, k2, desc); }) : (function(o, m, k, k2) { if (k2 === undefined) k2 = k; o[k2] = m[k]; })); var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { Object.defineProperty(o, "default", { enumerable: true, value: v }); }) : function(o, v) { o["default"] = v; }); var __importStar = (this && this.__importStar) || function (mod) { if (mod && mod.__esModule) return mod; var result = {}; if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); __setModuleDefault(result, mod); return result; }; var __rest = (this && this.__rest) || function (s, e) { var t = {}; for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) t[p] = s[p]; if (s != null && typeof Object.getOwnPropertySymbols === "function") for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) { if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) t[p[i]] = s[p[i]]; } return t; }; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.populateSearchIndex = exports.SEARCH_INDEX_POPULATORS = exports.getStatistics = exports.getSearchApiUrl = exports.search = exports.getSearchUrl = exports.getSearchBaseUrl = exports.searchType = exports.searchableTypeNameConverter = exports.getActiveSearchTypes = exports.SearchAbleType = exports.Order = exports.OrderBy = void 0; // @flow var api_1 = require("../api"); var qnaApi = __importStar(require("../qna")); var get_1 = __importDefault(require("lodash/get")); /** * Search functionality * * @since 13 mar 2017 */ //order search by the following parameter var OrderBy; (function (OrderBy) { OrderBy["SCORE"] = "SCORE"; OrderBy["CREATED_DATE"] = "CREATED_DATE"; OrderBy["VOTE_AVERAGE"] = "VOTE_AVERAGE"; OrderBy["VIEWS"] = "VIEWS"; OrderBy["SOLVED_DATE"] = "SOLVED_DATE"; OrderBy["ANSWERS"] = "ANSWERS"; OrderBy["DUPLICATES"] = "DUPLICATES"; OrderBy["HAVE_QUESTION_TOO"] = "HAVE_QUESTION_TOO"; //Have this question too })(OrderBy = exports.OrderBy || (exports.OrderBy = {})); var Order; (function (Order) { Order["UNORDERED"] = "UNORDERED"; Order["ASCENDING"] = "ASCENDING"; Order["DESCENDING"] = "DESCENDING"; //Descending: highest first })(Order = exports.Order || (exports.Order = {})); /** * Searchable types */ var SearchAbleType; (function (SearchAbleType) { SearchAbleType["ALL"] = "all"; SearchAbleType["USER"] = "user"; SearchAbleType["ARTICLE"] = "article"; SearchAbleType["GROUP"] = "group"; SearchAbleType["COMMENT"] = "comment"; SearchAbleType["ABUSE"] = "abuse"; SearchAbleType["QUESTION"] = "question"; SearchAbleType["ANSWER"] = "answer"; SearchAbleType["CMS"] = "cms"; SearchAbleType["BLOG_GROUP"] = "blog-group"; SearchAbleType["BLOG_ARTICLE"] = "blog-article"; SearchAbleType["FORUM_THREADS"] = "forumthreads"; })(SearchAbleType = exports.SearchAbleType || (exports.SearchAbleType = {})); /** * Search context-type * @type {string} */ var CONTEXT = 'search'; /** * Search Component name * @type {string} */ var COMPONENT_NAME = 'search'; function getActiveSearchTypes(_a) { var qna = _a.qna, blog = _a.blog, group = _a.group, forum = _a.forum; var arr = [SearchAbleType.USER, SearchAbleType.ARTICLE]; if (qna) { arr.push(SearchAbleType.QUESTION); } if (blog) { arr.push(SearchAbleType.BLOG_ARTICLE); } if (group) { arr.push(SearchAbleType.GROUP); } if (forum) { arr.push(SearchAbleType.FORUM_THREADS); } return arr; } exports.getActiveSearchTypes = getActiveSearchTypes; exports.searchableTypeNameConverter = { all: 'All', group: 'Groups', user: 'Users', article: 'Posts', faq: 'FAQ', question: 'Questions', 'blog-article': 'Blog', forumthreads: 'Forum' /*{key:'discussion', text:'Discussions'}*/ }; exports.searchType = '/search/search'; function getSearchBaseUrl(_a) { var request = _a.request; return (0, api_1.createCommunityUrl)({ request: request, path: '/search' }); } exports.getSearchBaseUrl = getSearchBaseUrl; function getSearchUrl(_a) { var request = _a.request, type = _a.type, searchType = _a.searchType, filter = _a.filter, urlArguments = _a.urlArguments; var searchUrl = '/search'; if (type) { searchUrl += '/' + type; } if (type === 'question') { if (searchType) { searchUrl += '/' + searchType; } else { searchUrl += '/all'; } } if (filter) { searchUrl += '/' + filter; } if (urlArguments) { searchUrl += urlArguments; } return (0, api_1.createCommunityUrl)({ request: request, path: searchUrl }); } exports.getSearchUrl = getSearchUrl; /** * Search * @param community * @param urlArguments * @returns {Thunk.<*>} */ function search(_a) { var community = _a.community, urlArguments = __rest(_a, ["community"]); return (0, api_1.getJson)({ url: exports.searchType, parameters: urlArguments, community: community, context: CONTEXT, componentName: COMPONENT_NAME }); } exports.search = search; /** * Get the url to the search api * @param xcap * @param type * @param urlArguments * @returns {string} */ function getSearchApiUrl(_a) { var config = _a.config, community = _a.community, type = _a.type, urlArguments = _a.urlArguments; var communityPermalink = (0, get_1.default)(community, 'permalink', null); var url = "/search".concat(type ? "/".concat(type) : ''); var componentName, context; if (urlArguments.type === 'answer' || urlArguments.type === 'question') { componentName = COMPONENT_NAME; context = qnaApi.CONTEXT; url = '/question/search'; /* 19 feb 2018: Backend support in place //FIXME: Need to add backend-support for type=answer on care backend if(urlArguments.type === 'answer'){ urlArguments.type='net.josh.community.forum.ForumThreadEntry' } */ } return (0, api_1._getApiUrl)({ state: { communities: { community: community }, config: config }, url: url, parameters: urlArguments, community: communityPermalink, componentName: componentName, context: context }); } exports.getSearchApiUrl = getSearchApiUrl; /** * Get statistics. * * @param types {String} Comma separated string of xcap object class names. * @param facetCount {String} * @param createdStartDate {Date} Iso date format (yyyy-MM-dd) * @param createdEndDate {Date} Iso date format (yyyy-MM-dd) * @param aggregateToDays {boolean} * @param moderationVisibility {boolean} * @param pageSize {Number} * @param page {Number} * @return {Promise} */ function getStatistics(_a) { var facetCount = _a.facetCount, createdStartDate = _a.createdStartDate, createdEndDate = _a.createdEndDate, aggregateToDays = _a.aggregateToDays, moderationVisibility = _a.moderationVisibility, pageSize = _a.pageSize, _b = _a.page, page = _b === void 0 ? 1 : _b; return (0, api_1.getJson)({ url: '/search/statistics', parameters: arguments }); } exports.getStatistics = getStatistics; /** * The available search index populators * {@see populateSearchIndex} */ exports.SEARCH_INDEX_POPULATORS = [ { name: 'Blogs and blog entries', className: 'se.josh.xcap.search.populate.BlogEntrySearchIndexPopulator' }, { name: 'Comments', className: 'se.josh.xcap.search.populate.CommentSearchIndexPopulator' }, { name: 'Events (ignores the date setting)', className: 'se.josh.xcap.search.populate.EventSearchIndexPopulator' }, { name: 'Forum', className: 'se.josh.xcap.search.populate.ForumThreadEntrySearchIndexPopulator' }, { name: 'Users', className: 'se.josh.xcap.search.populate.UserSearchIndexPopulator' }, { name: 'Media', className: 'se.josh.xcap.search.populate.MediaSearchIndexPopulator' }, { name: 'Group', className: 'se.josh.xcap.search.populate.GroupSearchIndexPopulator' }, { name: 'Abuse reports', className: 'se.josh.xcap.search.populate.ReferencedAbuseSearchIndexPopulator' } ]; /** * Populate the search index * * Requires admin privs. * * @param modifiedSince Update only objects modified since this date. Otherwise all. ISO Date format (2006-04-07) * @param populator String array of populator class names to run. {@see SEARCH_INDEX_POPULATORS}. */ function populateSearchIndex(_a) { var modifiedSince = _a.modifiedSince, populator = _a.populator; return (0, api_1.post)({ url: '/search/admin/populate-index', parameters: arguments }); } exports.populateSearchIndex = populateSearchIndex; //# sourceMappingURL=index.js.map