Added post parser util

This commit is contained in:
Mustafa Buyukcelebi 2019-10-17 12:10:10 +03:00
parent 5c5c7dcf8a
commit c9edaa01e3
2 changed files with 108 additions and 32 deletions

View File

@ -8,10 +8,11 @@ import { search } from '../../../providers/esteem/esteem';
import { lookupAccounts, getTrendingTags } from '../../../providers/steem/dsteem'; import { lookupAccounts, getTrendingTags } from '../../../providers/steem/dsteem';
// Constants // Constants
import { default as ROUTES } from '../../../constants/routeNames'; import ROUTES from '../../../constants/routeNames';
// Utilities // Utilities
import { getResizedAvatar } from '../../../utils/image'; import { getResizedAvatar } from '../../../utils/image';
import postUrlParser from '../../../utils/postUrlParser';
// Component // Component
import SearchModalView from '../view/searchModalView'; import SearchModalView from '../view/searchModalView';
@ -40,46 +41,61 @@ class SearchModalContainer extends PureComponent {
}; };
_handleOnChangeSearchInput = text => { _handleOnChangeSearchInput = text => {
const { isConnected } = this.props; const { isConnected, navigation, handleOnClose } = this.props;
if (text && text.length < 2) return; if (text && text.length < 2) return;
if (this.timer) { if (this.timer) {
clearTimeout(this.timer); clearTimeout(this.timer);
} }
if (!isConnected) return; if (!isConnected) return;
this.timer = setTimeout(() => { if (text && text !== '@' && text !== '#') {
if (text && text !== '@' && text !== '#') { if (text[0] === '@') {
if (text[0] === '@') { lookupAccounts(text.substr(1)).then(res => {
lookupAccounts(text.substr(1)).then(res => { const users = res.map(item => ({
const users = res.map(item => ({ image: getResizedAvatar(item),
image: getResizedAvatar(item), text: item,
text: item, ...item,
...item, }));
})); this.setState({ searchResults: { type: 'user', data: users } });
this.setState({ searchResults: { type: 'user', data: users } }); });
}); } else if (text[0] === '#') {
} else if (text[0] === '#') { getTrendingTags(text.substr(1)).then(res => {
getTrendingTags(text.substr(1)).then(res => { const tags = res.map(item => ({
const tags = res.map(item => ({ text: `#${get(item, 'name', '')}`,
text: `#${get(item, 'name', '')}`, ...item,
...item, }));
}));
this.setState({ searchResults: { type: 'tag', data: tags } }); this.setState({ searchResults: { type: 'tag', data: tags } });
}); });
} else { } else if (text.includes('https')) {
search({ q: text }).then(res => { console.log('test :');
res.results = res.results console.log('postUrlParser(text) :', postUrlParser(text));
.filter(item => item.title !== '') const { author, permlink } = postUrlParser(text);
.map(item => ({ console.log('author, permlink :', author, permlink);
image: item.img_url || getResizedAvatar(get(item, 'author')), if (author && permlink) {
text: item.title, handleOnClose();
...item, navigation.navigate({
})); routeName: ROUTES.SCREENS.POST,
this.setState({ searchResults: { type: 'content', data: get(res, 'results', []) } }); params: {
author,
permlink,
},
key: permlink,
}); });
} }
} else {
search({ q: text }).then(res => {
res.results = res.results
.filter(item => item.title !== '')
.map(item => ({
image: item.img_url || getResizedAvatar(get(item, 'author')),
text: item.title,
...item,
}));
this.setState({ searchResults: { type: 'content', data: get(res, 'results', []) } });
});
} }
}, 500); }
}; };
_handleOnPressListItem = (type, item) => { _handleOnPressListItem = (type, item) => {

View File

@ -0,0 +1,60 @@
export default url => {
const parseCatAuthorPermlink = u => {
const r = /^https?:\/\/(.*)\/(.*)\/(@[\w.\d-]+)\/(.*)/i;
const match = u.match(r);
if (match && match.length === 5) {
return {
author: match[3].replace('@', ''),
permlink: match[4],
};
}
return null;
};
const parseAuthorPermlink = u => {
const r = /^https?:\/\/(.*)\/(@[\w.\d-]+)\/(.*)/i;
const match = u.match(r);
if (match && match.length === 4) {
return {
author: match[2].replace('@', ''),
permlink: match[3],
};
}
return null;
};
if (
['https://esteem.app', 'https://steemit.com', 'https://steempeak.com'].some(x =>
url.startsWith(x),
)
) {
return parseCatAuthorPermlink(url);
}
if (['https://busy.org', 'https://steemhunt.com'].some(x => url.startsWith(x))) {
return parseAuthorPermlink(url);
}
// For non urls like @good-karma/esteem-london-presentation-e3105ba6637ed
let match = url.match(/^[/]?(@[\w.\d-]+)\/(.*)/);
if (match && match.length === 3) {
return {
author: match[1].replace('@', ''),
permlink: match[2],
};
}
// For non urls with category like esteem/@good-karma/esteem-london-presentation-e3105ba6637ed
match = url.match(/^[/]?([\w.\d-]+)\/(@[\w.\d-]+)\/(.*)/);
if (match && match.length === 4) {
return {
category: match[1],
author: match[2].replace('@', ''),
permlink: match[3],
};
}
return null;
};