@pega/dx-component-builder-sdk
Version:
Utility for building custom UI components
411 lines (380 loc) • 15.7 kB
text/typescript
// const FeedApi = pConnect => {
// const { invokeRestApi, getCancelTokenSource, isRequestCanceled } = PCore.getRestClient();
// const appName = PCore.getEnvironmentInfo().getApplicationName();
// let mentionsTagsCancelTokenSource: any = [];
// const getPulseContext = pulseContext => {
// if (pulseContext && pulseContext.indexOf('DATA-PORTAL') !== -1) {
// pulseContext = `DATA-PORTAL $${appName}`;
// }
// return pulseContext;
// };
// const fetchMessages = (pulseContext, feedID, feedClass, feedFilters, fetchMessagesCancelTokenSource) => {
// pulseContext = getPulseContext(pulseContext);
// let filterBy = '';
// if (feedFilters) {
// feedFilters.forEach(feedFilter => {
// if (feedFilter.on) filterBy = `${filterBy}${feedFilter.id},`;
// });
// if (filterBy === '') filterBy = 'ClearFilters';
// }
// const queryPayload = {
// filterForContext: pulseContext,
// feedID,
// feedClass,
// filterBy
// };
// for (let i = 0; i < fetchMessagesCancelTokenSource.length; i += 1) {
// fetchMessagesCancelTokenSource[i].cancel();
// }
// const newCancelTokenSource = getCancelTokenSource();
// fetchMessagesCancelTokenSource.push(newCancelTokenSource);
// return invokeRestApi(
// 'getFeedMessages',
// // @ts-ignore - PCore.getRestClient().invokeRestApi(): 2nd parameter missing the following properties from type 'RestApiOptionsObject': body, headers
// {
// queryPayload,
// cancelTokenSource: newCancelTokenSource
// },
// pConnect.getContextName()
// )
// .then(response => {
// if (response.status === 200 && response.data) {
// fetchMessagesCancelTokenSource.pop();
// const respMessageIDs: string[] = [];
// const respMessages = {};
// const feedViewResponse = response.data;
// if (response.data) {
// if (response.data.data.FeedList) {
// const feedItemList = response.data.data.FeedList.pxResults;
// if (Array.isArray(feedItemList)) {
// feedItemList.forEach(message => {
// message.ID = message.pzInsKey;
// respMessageIDs.push(message.ID);
// respMessages[message.ID] = message;
// });
// }
// }
// if (!feedFilters) {
// feedFilters = [{ id: 'All', label: 'All', on: 'true', disabled: false }];
// if (response.data.data.FeedFilters) {
// const feedFiltersList = response.data.data.FeedFilters.pxResults;
// let allFilter: any = 'true';
// if (Array.isArray(feedFiltersList)) {
// feedFiltersList.forEach(feedFilter => {
// const feedFilterItem = {
// id: feedFilter.pyFeedSourceReference,
// label: feedFilter.pyLabel,
// disabled: false,
// on: feedFilter.pySelected
// };
// if (!feedFilterItem.on) allFilter = false;
// feedFilters.push(feedFilterItem);
// });
// feedFilters.find(feedItem => feedItem.id === 'All').on = allFilter;
// }
// }
// }
// }
// // if filters appllied, need to reset store
// if (filterBy !== '' || !pConnect.getValue(`pulse.messageIDs`))
// pConnect.updateState({
// pulse: {
// messages: respMessages,
// messageIDs: respMessageIDs,
// feedViewResponse
// }
// });
// else
// pConnect.updateState({
// pulse: {
// messages: {
// ...pConnect.getValue(`pulse.messages`),
// ...respMessages
// },
// messageIDs: [...pConnect.getValue(`pulse.messageIDs`), ...respMessageIDs],
// feedViewResponse
// }
// });
// return feedFilters;
// }
// pConnect.reportError(`fetchMessages call failed ${response.status}`, response.data);
// return '';
// })
// .catch(error => {
// if (!isRequestCanceled(error)) {
// pConnect.reportError(': Error ocurred during ajax call at fetchMessages API : ', error.response);
// }
// });
// };
// const postMessage = (pulseContext, message, attachmentIDs, isReply = false) => {
// pulseContext = getPulseContext(pulseContext);
// const reqBody = JSON.stringify({
// context: pulseContext,
// message,
// attachments: attachmentIDs
// });
// // @ts-ignore - Type 'string' is not assignable to type 'object': The expected type comes from property 'body' which is declared here on type 'RestApiOptionsObject'
// invokeRestApi('postFeedMessages', { body: reqBody }, pConnect.getContextName())
// .then(response => {
// if (response.status === 201 && response.data) {
// const messageData = response.data;
// const messageObject = {
// ID: messageData.ID,
// pzInsKey: messageData.ID,
// pyFeed: {
// pyPostedOn: messageData.postedTime,
// pyFeedTitle: messageData.postedByUser.name,
// pyCommentContext: 'pzInsKey',
// pyIconType: 'user',
// pyIconReference: 'pi pi-case'
// },
// postedByUser: messageData.postedByUser,
// pyMessage: messageData.message,
// mentions: messageData.mentions || [],
// pyMessageViewReference: 'pzPostDetails',
// pxIcon: 'globe',
// pxResults: [],
// tags: messageData.tags || []
// };
// if (isReply) {
// let pxResults = pConnect.getValue('.pxResults');
// if (!pxResults) pxResults = [];
// pConnect.setValue('.pxResults', [...pxResults, messageObject]);
// } else {
// messageObject.pxResults = [];
// if (pConnect.getValue(`pulse.messageIDs`)) {
// const messageIDs = pConnect.getValue(`pulse.messageIDs`);
// const messages = pConnect.getValue(`pulse.messages`);
// pConnect.updateState({
// pulse: {
// messages: { ...messages, [messageObject.ID]: messageObject },
// messageIDs: [messageObject.ID, ...messageIDs]
// }
// });
// } else {
// pConnect.updateState({
// pulse: {
// messages: { [messageObject.ID]: messageObject },
// messageIDs: [messageObject.ID]
// }
// });
// }
// }
// } else {
// pConnect.reportError(`postMessage call failed with status ${response.status}`, response);
// }
// })
// .catch(error => {
// pConnect.reportError(': Error ocurred during ajax call at postMessage API : ', error.response);
// });
// };
// const likeMessage = ({ pulseContext, likedBy: unLiked, messageID, isReply }) => {
// pulseContext = getPulseContext(pulseContext);
// const routeKey = unLiked ? 'unlikeFeedMessages' : 'likeFeedMessages';
// const body = JSON.stringify({
// ContextClass: pulseContext
// });
// const queryPayload = {
// pulseContext
// };
// // @ts-ignore - Type 'string' is not assignable to type 'object': The expected type comes from property 'body' which is declared here on type 'RestApiOptionsObject'
// invokeRestApi(routeKey, { body, queryPayload }, pConnect.getContextName())
// .then(response => {
// if (response.status === 200) {
// if (isReply) {
// const msg = pConnect.getValue(`pulse.messages.${messageID}`);
// const pxResults = msg.pxResults.map(reply => {
// reply = { ...reply };
// if (reply.pzInsKey === pulseContext) {
// let updatedLikeCount = 0;
// let updatedLikedFlag = false;
// const likeCount = reply.pyLikes ? reply.pyLikes.pxLikeCount : 0;
// if (unLiked) {
// updatedLikeCount = likeCount - 1;
// updatedLikedFlag = false;
// } else {
// updatedLikeCount = likeCount + 1;
// updatedLikedFlag = true;
// }
// reply.pyLikes = {
// pxLikeCount: updatedLikeCount,
// pxIsLiked: updatedLikedFlag
// };
// }
// return reply;
// });
// pConnect.updateState({
// pulse: {
// messages: {
// [messageID]: {
// pxResults
// }
// }
// }
// });
// } else {
// const msg = { ...pConnect.getValue(`pulse.messages.${messageID}`) };
// const likeCount = msg.pyLikes ? msg.pyLikes.pxLikeCount : 0;
// let updatedLikeCount = 0;
// let updatedLikedFlag = false;
// if (unLiked) {
// updatedLikeCount = likeCount - 1;
// updatedLikedFlag = false;
// } else {
// updatedLikeCount = likeCount + 1;
// updatedLikedFlag = true;
// }
// msg.pyLikes = {
// pxLikeCount: updatedLikeCount,
// pxIsLiked: updatedLikedFlag
// };
// pConnect.updateState({
// pulse: {
// messages: {
// [pulseContext]: msg
// }
// }
// });
// }
// } else {
// pConnect.reportError(`likeMessage call failed with status ${response.status}`, response);
// }
// })
// .catch(error => {
// pConnect.reportError(': Error ocurred during ajax call at likeMessage API : ', error.response.data);
// });
// };
// const deleteMessage = (messageID, isReply, replyID) => {
// let messageKey = messageID;
// if (isReply) {
// messageKey = replyID;
// }
// const queryPayload = {
// messageID: messageKey
// };
// // @ts-ignore - PCore.getRestClient().invokeRestApi(): 2nd parameter missing the following properties from type 'RestApiOptionsObject': body, headers, cancelTokenSource
// invokeRestApi('deleteFeedMessage', { queryPayload }, pConnect.getContextName())
// .then(response => {
// if (response.status === 200) {
// if (isReply) {
// const msg = pConnect.getValue(`pulse.messages.${messageID}`);
// const pxResults = msg.pxResults.filter(reply => reply.pzInsKey !== replyID);
// pConnect.updateState({
// pulse: {
// messages: {
// [messageID]: {
// pxResults
// }
// }
// }
// });
// } else {
// const msgIDs = pConnect.getValue(`pulse.messageIDs`);
// const newMsgIDs = msgIDs.filter(msgID => msgID !== messageID);
// const msgs = { ...pConnect.getValue(`pulse.messages`) };
// delete msgs[messageID];
// pConnect.updateState({
// pulse: {
// messageIDs: newMsgIDs,
// messages: msgs
// }
// });
// }
// } else {
// pConnect.reportError(`deleteMessage call failed with status ${response.status}`, response);
// }
// })
// .catch(error => {
// pConnect.reportError(': Error ocurred during ajax call at deleteMessage API : ', error.response);
// });
// };
// const getMentionSuggestions = mentionProps => {
// const { searchFor, mentionsType = 'Users', listSize = 5 } = mentionProps;
// const pulseContext = getPulseContext(mentionProps.pulseContext);
// const queryPayload = {
// pulseContext,
// searchFor,
// mentionsType,
// listSize
// };
// for (let i = 0; i < mentionsTagsCancelTokenSource.length; i += 1) {
// mentionsTagsCancelTokenSource[i].cancel();
// }
// const newCancelTokenSource = getCancelTokenSource();
// mentionsTagsCancelTokenSource.push(newCancelTokenSource);
// return invokeRestApi(
// 'getMentionSuggestions',
// // @ts-ignore - PCore.getRestClient().invokeRestApi(): 2nd parameter missing the following properties from type 'RestApiOptionsObject': body, headers
// {
// queryPayload,
// cancelTokenSource: newCancelTokenSource
// },
// pConnect.getContextName()
// )
// .then(response => {
// mentionsTagsCancelTokenSource = [];
// let mentionSuggestions = [];
// if (response.status === 200 && response.data) {
// mentionSuggestions = response.data.map(mentionSuggestion => {
// return {
// fullname: mentionSuggestion.caption,
// id: mentionSuggestion.mentionsID
// };
// });
// } else {
// pConnect.reportError(`Get mention suggestions call failed ${response.status}`, response.data);
// }
// return mentionSuggestions;
// })
// .catch(err => {
// if (!isRequestCanceled(err)) {
// pConnect.reportError(': Error ocurred during ajax call at getMentionSuggestions API : ', err.response.data);
// }
// });
// };
// const getTagSuggestions = mentionProps => {
// const { searchFor, listSize = 5 } = mentionProps;
// const queryPayload = {
// searchFor,
// listSize
// };
// for (let i = 0; i < mentionsTagsCancelTokenSource.length; i += 1) {
// mentionsTagsCancelTokenSource[i].cancel();
// }
// const newCancelTokenSource = getCancelTokenSource();
// mentionsTagsCancelTokenSource.push(newCancelTokenSource);
// return invokeRestApi(
// 'getTagSuggestions',
// // @ts-ignore - PCore.getRestClient().invokeRestApi(): 2nd parameter missing the following properties from type 'RestApiOptionsObject': body, headers
// {
// queryPayload,
// cancelTokenSource: newCancelTokenSource
// },
// pConnect.getContextName()
// )
// .then(response => {
// mentionsTagsCancelTokenSource = [];
// let tagSuggestions = [];
// if (response.status === 200 && response.data) {
// tagSuggestions = response.data.tags.map(tag => `#${tag}`);
// } else {
// pConnect.reportError(`Get tag suggestions call failed ${response.status}`, response.data);
// }
// return tagSuggestions;
// })
// .catch(err => {
// if (!isRequestCanceled(err)) {
// pConnect.reportError(': Error ocurred during ajax call at getTagSuggestions API : ', err.response.data);
// }
// });
// };
// return {
// // fetchMessages,
// postMessage,
// // likeMessage,
// deleteMessage,
// getMentionSuggestions,
// getTagSuggestions
// };
// };
// export default FeedApi;