Files
koodiklinikka.fi/components/feed-transformers.ts
Olavi Haapala f4474523ad Chore/convert to typescript (#60)
* Convert to using TypeScript

Next.js v.9 allows converting an existing project to TS by simply renaming the files as TS files

* Fix type errors: Type 'string' is not assignable to type 'number'.

* Add mention about missing typings for javascript-time-ago

* Add GA_INITIALIZED to window

* Fix type error in feed transformers

* Model MembershipInfoForm state and props with TS

* Silence the typescript warning in MembershipInfoForm

* Add threshold to Fader props

* Fix Warning: Each child in a list should have a unique "key" prop.

Sponsors don't have ids – name is probably unique and can be used as a key

* Allow key as prop for SponsorLink

* Add type of the props for SponsorLink
2019-11-07 07:28:02 +02:00

71 lines
1.8 KiB
TypeScript

import lodashTemplate from "lodash/template";
import defaultTemplateSettings from "lodash/templateSettings";
import githubEvent from "parse-github-event";
import twitterText from "twitter-text";
const isVisibleGithubEvent = ({ type }) =>
type !== "PushEvent" && type !== "DeleteEvent";
const templateSettings = {
...defaultTemplateSettings,
interpolate: /{{([\s\S]+?)}}/g,
};
export default {
github(items) {
return items.filter(isVisibleGithubEvent).map(item => {
const template = lodashTemplate(
githubEvent.parse(item).text,
templateSettings,
false
);
const repository = `https://github.com/${item.repo.name}`;
let branch;
if (item.payload.ref) {
branch = item.payload.ref.replace("refs/heads/", "");
}
const message = template({
repository: `<a target="_blank" href="${repository}">${item.repo.name}</a>`,
branch: branch,
number: item.payload.number,
ref_type: item.payload.ref_type,
ref: item.payload.ref,
});
const url = `https://github.com/${item.actor.login}`;
return {
user: item.actor.login,
userLink: url,
image: item.actor.avatar_url,
imageLink: url,
body: message,
timestamp: new Date(item.created_at),
url: message.url,
type: "github",
};
});
},
twitter(items) {
return items.map(item => {
if (item.retweeted) {
item = item.retweeted_status;
}
const url = `https://twitter.com/${item.user.screen_name}`;
return {
user: `@${item.user.screen_name}`,
userLink: url,
image: item.user.profile_image_url_https,
imageLink: url,
body: twitterText.autoLink(item.text),
timestamp: new Date(item.created_at),
type: "twitter",
};
});
},
};