Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .rc.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
{}
1 change: 1 addition & 0 deletions github/.rc.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
{}
20 changes: 1 addition & 19 deletions github/.rcappsconfig
Original file line number Diff line number Diff line change
@@ -1,19 +1 @@
{
"url": "http://localhost:3000",
"username": "",
"password": "",
"ignoredFiles": [
"**/README.md",
"**/package-lock.json",
"**/package.json",
"**/tslint.json",
"**/tsconfig.json",
"**/*.js",
"**/*.js.map",
"**/*.d.ts",
"**/*.spec.ts",
"**/*.test.ts",
"**/dist/**",
"**/.*"
]
}
{"url":"http://localhost:3000","username":"","password":"","ignoredFiles":["**/README.md","**/package-lock.json","**/package.json","**/tslint.json","**/tsconfig.json","**/*.js","**/*.js.map","**/*.d.ts","**/*.spec.ts","**/*.test.ts","**/dist/**","**/.*","**/app.json"]}
199 changes: 199 additions & 0 deletions github/ContextualBars/UserActivityContextualBar.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,199 @@
import { IHttp, IModify } from "@rocket.chat/apps-engine/definition/accessors";
import {
BlockBuilder,
BlockElementType,
ButtonStyle,
IBlockElement,
TextObjectType,
} from "@rocket.chat/apps-engine/definition/uikit";
import { uiKitModal } from "@rocket.chat/ui-kit";
import { IGithubActivity } from "../definitions/IGithubActivity";
import { ModalsEnum } from "../enum/Modals";
import { OcticonIcons } from "../enum/OcticonIcons";
import { getBasicUserInfo, getUserActivity } from "../helpers/githubSDK";

function extractComment(str: string): string {
const regex = /^(?:>.*\n+)?(.*)/s;
const match = str.match(regex);
return match ? match[1] : "";
}

function LoadUserActivityEntry(
activity: IGithubActivity,
blocks: BlockBuilder
): void {
// Three types of Activities need to be handled

switch (activity.type) {
case "IssuesEvent":
blocks.addContextBlock({
elements: [
blocks.newImageElement({
altText: "Issue Event Image",
imageUrl: OcticonIcons.ISSUE_OPEN,
}),
blocks.newMarkdownTextObject(
activity.payload.issue
? `*${activity.payload.issue.title!}`
: ""
),
],
});
blocks.addActionsBlock({
elements: [
blocks.newButtonElement({
actionId: ModalsEnum.SHOW_ISSUE_VIEW_CONTEXTUAL_BAR,
value: JSON.stringify(activity),
text: blocks.newPlainTextObject("View Issue"),
style: ButtonStyle.PRIMARY
}),
blocks.newButtonElement({
actionId: "anything",
text: blocks.newPlainTextObject("Share Issue"),
style: ButtonStyle.PRIMARY
})
]
})
break;
case "PullRequestEvent":
blocks.addContextBlock({
elements: [
blocks.newImageElement({
altText: "Pull Request Image",
imageUrl: OcticonIcons.PULL_REQUEST,
}),
blocks.newMarkdownTextObject(
activity.payload.pull_request
? `*${activity.payload.pull_request.title!}*`
: ""
),
],
});
blocks.addActionsBlock({
elements: [
blocks.newButtonElement({
actionId: "anything",
text: blocks.newPlainTextObject("View Pull Request"),
style: ButtonStyle.PRIMARY
}),
blocks.newButtonElement({
actionId: "anything",
text: blocks.newPlainTextObject("Share Pull Request"),
style: ButtonStyle.PRIMARY
})
]
})
break;
case "IssueCommentEvent":
console.log(activity.payload.comment?.body);
blocks.addContextBlock({
elements: [
blocks.newImageElement({
altText: "Comment Image",
imageUrl: OcticonIcons.COMMENTS,
}),
blocks.newMarkdownTextObject(
activity.payload.comment
? `*${extractComment(
activity.payload.comment.body
).substring(0, 100)}*`
: ""
),
],
});
blocks.addActionsBlock({
elements: [
blocks.newButtonElement({
actionId: "anything",
text: blocks.newPlainTextObject("View Comment"),
style: ButtonStyle.PRIMARY
}),
blocks.newButtonElement({
actionId: "anything",
text: blocks.newPlainTextObject("Share Comment"),
style: ButtonStyle.PRIMARY
})
]
})
break;
}

blocks.addContextBlock({
elements: [
blocks.newPlainTextObject(
activity.repo ? activity.repo.name : "",
true
),
],
});

blocks.addDividerBlock();
}

export async function UserActivityContextualBar(
accessToken: string,
modify: IModify,
http: IHttp,
pageNumber: number,
) {
const blocks = modify.getCreator().getBlockBuilder();
let No_More_Elements: boolean = false;

const user = await getBasicUserInfo(http, accessToken)

const data = await getUserActivity(
http,
user.username ?? "",
accessToken,
pageNumber,
"MONTH",
10
);

if (data.length === 0){
No_More_Elements = true
}

data.forEach((activity) => {
LoadUserActivityEntry(activity, blocks);
});

let actionsArray: IBlockElement[] = [];

if ( pageNumber != 1 ) {
actionsArray.unshift(
blocks.newButtonElement({
text: {
text: "Prev",
type: TextObjectType.PLAINTEXT,
},
actionId: ModalsEnum.SWITCH_ACTIVITY_PAGE_PREV,
value: `${pageNumber}`,
style: ButtonStyle.PRIMARY,
}),
);
}

if (!No_More_Elements){
actionsArray.push(blocks.newButtonElement({
text: {
text: "Next",
type: TextObjectType.PLAINTEXT,
},
actionId: ModalsEnum.SWITCH_ACTIVITY_PAGE_NEXT,
value: `${pageNumber}`,
style: ButtonStyle.PRIMARY,
}))
}

blocks.addActionsBlock({
elements: actionsArray,
});

return {
// [6]
id: "contextualbarId",
title: blocks.newPlainTextObject("User's Activity"),
blocks: blocks.getBlocks(),
};
}
5 changes: 5 additions & 0 deletions github/ContextualBars/UserCommentView.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
import { IGithubActivity } from "../definitions/IGithubActivity";

async function UserCommentView(activity: IGithubActivity){

}
84 changes: 84 additions & 0 deletions github/ContextualBars/UserIssueView.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,84 @@
import { IModify } from "@rocket.chat/apps-engine/definition/accessors";
import { IUIKitContextualBarViewParam } from "@rocket.chat/apps-engine/definition/uikit/UIKitInteractionResponder";
import { TextObjectType } from "@rocket.chat/ui-kit";
import { IGithubActivity } from "../definitions/IGithubActivity";
import { ModalsEnum } from "../enum/Modals";
import { OcticonIcons } from "../enum/OcticonIcons";
import { CreateIssueStatsBar } from "../lib/CreateIssueStatsBar";
import { CreateReactionsBar } from "../lib/CreateReactionsBar";
import { BodyMarkdownRenderer } from "../processors/bodyMarkdowmRenderer";

export function UserIssueView(modify: IModify,activity: IGithubActivity): IUIKitContextualBarViewParam{

const block = modify.getCreator().getBlockBuilder();

if (activity.type == "IssuesEvent" && activity.payload.issue){
const issueInfo = activity.payload.issue

console.log(issueInfo)

const lastUpdated = new Date(issueInfo.last_updated_at ?? "");

block.addContextBlock({
elements : [
block.newImageElement({
imageUrl: OcticonIcons.PENCIL,
altText: "Last Update At",
}),
block.newPlainTextObject(
`Last Updated at ${ lastUpdated.toISOString() }`
),
]
})

CreateIssueStatsBar(issueInfo, block);

// block.addSectionBlock({
// text : {
// text : `*${issueInfo.title}*` ?? "",
// type: TextObjectType.PLAIN_TEXT
// }
// })

block.addDividerBlock();

// issueInfo.reactions && CreateReactionsBar(issueInfo.reactions, block);

issueInfo.body && BodyMarkdownRenderer({body : issueInfo.body, block : block})

// block.addActionsBlock({
// elements : [
// block.newButtonElement({
// actionId : ModalsEnum.SHARE_ISSUE_ACTION,
// value : `${repoName}, ${issueNumber}`,
// text : {
// text : "Share Issue",
// type : TextObjectType.PLAINTEXT
// },
// }),
// block.newButtonElement({
// actionId : ModalsEnum.ADD_GITHUB_ISSUE_ASSIGNEE,
// value : `${repoName}, ${issueNumber}`,
// text : {
// text : "Assign Issue",
// type : TextObjectType.PLAINTEXT
// },
// })
// ]
// })

return {
// [6]
id: "userIssuesView",
title: block.newPlainTextObject("User Issue View"),
blocks: block.getBlocks(),
};
}

return {
// [6]
id: "error",
title: block.newPlainTextObject("Error View"),
blocks: block.getBlocks(),
};
}
6 changes: 6 additions & 0 deletions github/ContextualBars/UserPullRequestView.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
import { IGithubActivity } from "../definitions/IGithubActivity";

export async function UserPullRequestView(activity: IGithubActivity){


}
23 changes: 23 additions & 0 deletions github/definitions/IGithubActivity.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
import { IGitHubIssue } from "./githubIssue"
import { IGithubComment } from "./IGithubComment";
import { IGitHubPullRequest } from "./IGithubPullRequest";

export interface IGithubActivity {
type: "IssuesEvent" | "PullRequestEvent" | "IssueCommentEvent";
actor: {
display_login: string;
avatar_url: string;
url: string;
};
repo: {
name: string;
url: string;
};
payload: {
action: string;
comment?: IGithubComment
issue?: IGitHubIssue
pull_request?: IGitHubPullRequest
};
created_at: string;
}
5 changes: 5 additions & 0 deletions github/definitions/IGithubComment.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
export interface IGithubComment {
body: string;
url: string;
lastUpdatedAt: string;
}
14 changes: 14 additions & 0 deletions github/definitions/IGithubPullRequest.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
export interface IGitHubPullRequest{
id: string|number,
title?: string,
html_url?: string,
number?: string|number
labels?: Array<string>,
user_login?:string,
user_avatar?:string,
last_updated_at?: string,
comments?:string|number,
state?: string,
assignees?: Array<string>,//user ids seperated by " "
body?: string,
}
5 changes: 5 additions & 0 deletions github/enum/Modals.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,9 @@
export enum ModalsEnum {
SHOW_COMMENT_VIEW_CONTEXTUAL_BAR = 'show-comment-view-contextual-bar',
SHOW_PULLREQUEST_VIEW_CONTEXTUAL_BAR = 'show-pullrequest-view-contextual-bar',
SHOW_ISSUE_VIEW_CONTEXTUAL_BAR = 'show-issue-view-contextual-bar',
SWITCH_ACTIVITY_PAGE_PREV = 'switch-activity-page-prev',
SWITCH_ACTIVITY_PAGE_NEXT = 'switch-activity-page-next',
ADD_GITHUB_ISSUE_ASSIGNEE_PROFILE = 'add-github-issue-assignee-profile',
SHARE_ISSUE_ACTION = 'share-issue-action',
TRIGGER_ISSUE_DISPLAY_MODAL = 'display-issue',
Expand Down
1 change: 1 addition & 0 deletions github/enum/OcticonIcons.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,5 +5,6 @@ export enum OcticonIcons {
COMMIT = "https://raw.githubusercontent.com/primer/octicons/main/icons/commit-24.svg",
PERSON = "https://raw.githubusercontent.com/primer/octicons/main/icons/person-24.svg",
REPOSITORY = "https://raw.githubusercontent.com/primer/octicons/main/icons/repo-24.svg",
PULL_REQUEST = "https://raw.githubusercontent.com/primer/octicons/main/icons/git-pull-request-16.svg",
PENCIL = "https://raw.githubusercontent.com/primer/octicons/main/icons/pencil-24.svg"
}
3 changes: 2 additions & 1 deletion github/enum/Subcommands.ts
Original file line number Diff line number Diff line change
Expand Up @@ -8,5 +8,6 @@ export enum SubcommandEnum {
SEARCH = 'search',
NEW_ISSUE = 'issue',
ISSUES = 'issues',
PROFILE = 'me'
PROFILE = 'me',
ACTIVITY = 'activity',
}
Loading