@stackend/api
Version:
JS bindings to api.stackend.com
279 lines • 9.62 kB
JavaScript
;
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