From 9641e6fd02ba4d2706b7ffdee700c65df073c54e Mon Sep 17 00:00:00 2001 From: Antoine BOISADAM Date: Sat, 5 Aug 2017 22:25:49 -0300 Subject: [PATCH 01/12] feat: Show commit * 2 new routes and screens => CommitList and Commit (WIP) * PushEvent are clickable in the EventScreen --- routes.js | 14 + src/auth/screens/events.screen.js | 19 +- src/components/commit-list-item.component.js | 63 +++++ src/components/index.js | 1 + src/locale/languages/en.js | 4 + src/repository/repository.action.js | 23 ++ src/repository/repository.reducer.js | 20 ++ src/repository/repository.type.js | 1 + src/repository/screens/commit-list.screen.js | 55 ++++ src/repository/screens/commit.screen.js | 261 +++++++++++++++++++ src/repository/screens/index.js | 2 + 11 files changed, 462 insertions(+), 1 deletion(-) create mode 100644 src/components/commit-list-item.component.js create mode 100644 src/repository/screens/commit-list.screen.js create mode 100644 src/repository/screens/commit.screen.js diff --git a/routes.js b/routes.js index 278033977..a2b2afeb6 100644 --- a/routes.js +++ b/routes.js @@ -47,6 +47,8 @@ import { IssueListScreen, PullListScreen, PullDiffScreen, + CommitScreen, + CommitListScreen, ReadMeScreen, } from 'repository'; @@ -158,6 +160,18 @@ const sharedRoutes = { title: navigation.state.params.title, }), }, + CommitList: { + screen: CommitListScreen, + navigationOptions: ({ navigation }) => ({ + title: navigation.state.params.title, + }), + }, + Commit: { + screen: CommitScreen, + navigationOptions: ({ navigation }) => ({ + title: navigation.state.params.title, + }), + }, PullDiff: { screen: PullDiffScreen, navigationOptions: ({ navigation }) => ({ diff --git a/src/auth/screens/events.screen.js b/src/auth/screens/events.screen.js index a08ffc231..4bfcff42b 100644 --- a/src/auth/screens/events.screen.js +++ b/src/auth/screens/events.screen.js @@ -282,7 +282,10 @@ class Events extends Component { ); case 'PushEvent': return ( - + this.navigateToCommitList(userEvent)} + > {userEvent.payload.ref.replace('refs/heads/', '')} ); @@ -459,6 +462,20 @@ class Events extends Component { }); }; + navigateToCommitList = userEvent => { + if (userEvent.payload.commits > 2) { + this.props.navigation.navigate('CommitList', { + commits: userEvent.payload.commits, + title: translate('repository.commitList.title', this.props.language), + }); + } else { + this.props.navigation.navigate('Commit', { + commit: userEvent.payload.commits[0], + title: userEvent.payload.commits[0].sha.substring(0, 7), + }); + } + }; + navigateToIssue = userEvent => { this.props.navigation.navigate('Issue', { issue: diff --git a/src/components/commit-list-item.component.js b/src/components/commit-list-item.component.js new file mode 100644 index 000000000..1b2b49688 --- /dev/null +++ b/src/components/commit-list-item.component.js @@ -0,0 +1,63 @@ +import React from 'react'; +import { StyleSheet, TouchableHighlight, View } from 'react-native'; +import { ListItem } from 'react-native-elements'; +import { colors, fonts } from 'config'; + +type Props = { + commit: Object, + navigation: Object, +}; + +const styles = StyleSheet.create({ + container: { + flexDirection: 'row', + alignItems: 'center', + justifyContent: 'center', + paddingRight: 10, + paddingVertical: 5, + borderBottomWidth: 1, + borderBottomColor: colors.greyLight, + }, + closedIssue: { + backgroundColor: colors.greyVeryLight, + opacity: 0.6, + }, + listItemContainer: { + flex: 1, + borderBottomWidth: 0, + }, + title: { + color: colors.primaryDark, + ...fonts.fontPrimary, + }, + badge: { + alignItems: 'flex-end', + justifyContent: 'center', + }, +}); + +export const CommitListItem = ({ commit, navigation }: Props) => + + navigation.navigate('Commit', { + commit, + })} + underlayColor={colors.greyLight} + > + + + + ; diff --git a/src/components/index.js b/src/components/index.js index a6b217650..b83b27a08 100644 --- a/src/components/index.js +++ b/src/components/index.js @@ -3,6 +3,7 @@ export * from './loading-indicators'; export * from './code-line.component'; export * from './comment-input.component'; export * from './comment-list-item.component'; +export * from './commit-list-item.component'; export * from './diff-blocks.component'; export * from './entity-info.component'; export * from './issue-description.component'; diff --git a/src/locale/languages/en.js b/src/locale/languages/en.js index c9fd21805..f73b608f6 100644 --- a/src/locale/languages/en.js +++ b/src/locale/languages/en.js @@ -200,6 +200,10 @@ export const en = { codeList: { title: 'Code', }, + commitList: { + title: 'Commits', + noCommit: 'No commit found!', + }, issueList: { title: 'Issues', openButton: 'Open', diff --git a/src/repository/repository.action.js b/src/repository/repository.action.js index 22ead1d70..bee192f6e 100644 --- a/src/repository/repository.action.js +++ b/src/repository/repository.action.js @@ -20,6 +20,7 @@ import { GET_REPOSITORY_ISSUES, GET_REPO_README_STATUS, GET_REPO_STARRED_STATUS, + GET_COMMIT, FORK_REPO_STATUS, CHANGE_STAR_STATUS, GET_REPOSITORY_README, @@ -164,6 +165,28 @@ export const checkReadMe = url => { }; }; +export const getCommitFromUrl = url => { + return (dispatch, getState) => { + const accessToken = getState().auth.accessToken; + + dispatch({ type: GET_COMMIT.PENDING }); + + fetchUrl(url, accessToken) + .then(data => { + dispatch({ + type: GET_COMMIT.SUCCESS, + payload: data, + }); + }) + .catch(error => { + dispatch({ + type: GET_COMMIT.ERROR, + payload: error, + }); + }); + }; +}; + export const checkRepoStarred = url => { return (dispatch, getState) => { const accessToken = getState().auth.accessToken; diff --git a/src/repository/repository.reducer.js b/src/repository/repository.reducer.js index 4a4478b4d..99e4f8fff 100644 --- a/src/repository/repository.reducer.js +++ b/src/repository/repository.reducer.js @@ -10,6 +10,7 @@ import { CHANGE_STAR_STATUS, GET_REPOSITORY_README, GET_REPOSITORY_LABELS, + GET_COMMIT, SEARCH_OPEN_ISSUES, SEARCH_CLOSED_ISSUES, SEARCH_OPEN_PULLS, @@ -24,6 +25,7 @@ const initialState = { contents: {}, fileContent: '', issues: [], + commit: {}, readMe: '', hasReadMe: false, starred: false, @@ -36,6 +38,7 @@ const initialState = { isPendingRepository: false, isPendingContributors: false, isPendingContents: false, + isPendingCommit: false, isPendingFile: false, isPendingIssues: false, isPendingCheckReadMe: false, @@ -343,6 +346,23 @@ export const repositoryReducer = (state = initialState, action = {}) => { error: action.payload, isPendingSearchClosedPulls: false, }; + case GET_COMMIT.PENDING: + return { + ...state, + isPendingCommit: true, + }; + case GET_COMMIT.SUCCESS: + return { + ...state, + commit: action.payload, + isPendingCommit: false, + }; + case GET_COMMIT.ERROR: + return { + ...state, + error: action.payload, + isPendingCommit: false, + }; default: return state; } diff --git a/src/repository/repository.type.js b/src/repository/repository.type.js index 2f6823a7e..694875b65 100644 --- a/src/repository/repository.type.js +++ b/src/repository/repository.type.js @@ -7,6 +7,7 @@ export const GET_REPOSITORY_CONTRIBUTORS = createActionSet( export const GET_REPOSITORY_CONTENTS = createActionSet( 'GET_REPOSITORY_CONTENTS' ); +export const GET_COMMIT = createActionSet('GET_COMMIT'); export const GET_REPOSITORY_FILE = createActionSet('GET_REPOSITORY_FILE'); export const GET_REPOSITORY_ISSUES = createActionSet('GET_REPOSITORY_ISSUES'); export const GET_REPO_README_STATUS = createActionSet( diff --git a/src/repository/screens/commit-list.screen.js b/src/repository/screens/commit-list.screen.js new file mode 100644 index 000000000..e503ffc5b --- /dev/null +++ b/src/repository/screens/commit-list.screen.js @@ -0,0 +1,55 @@ +import React, { Component } from 'react'; +import { FlatList, View, StyleSheet, Text } from 'react-native'; +import { ViewContainer, CommitListItem } from 'components'; +import { translate } from 'utils'; +import { normalize } from 'config'; + +const styles = StyleSheet.create({ + marginSpacing: { + marginTop: 40, + }, + noCommit: { + fontSize: normalize(18), + textAlign: 'center', + }, +}); + +class CommitList extends Component { + props: { + language: string, + navigation: Object, + }; + + keyExtractor = item => { + return item.id; + }; + + renderItem = ({ item }) => + ; + + render() { + const { language, navigation } = this.props; + const commits = navigation.state.params.commits; + + return ( + + {commits.length > 0 && + } + + {commits.length === 0 && + + + {translate('repository.commitList.noCommit', language)} + + } + + ); + } +} + +export const CommitListScreen = CommitList; diff --git a/src/repository/screens/commit.screen.js b/src/repository/screens/commit.screen.js new file mode 100644 index 000000000..76fbdccfe --- /dev/null +++ b/src/repository/screens/commit.screen.js @@ -0,0 +1,261 @@ +/* eslint-disable react/no-array-index-key */ +import React, { Component } from 'react'; +import { connect } from 'react-redux'; +import { View, ScrollView, Text, FlatList, StyleSheet } from 'react-native'; +import { Card } from 'react-native-elements'; +import Parse from 'parse-diff'; +import { ViewContainer, DiffBlocks, CodeLine } from 'components'; +import { translate } from 'utils'; +import { colors, fonts, normalize } from 'config'; +import { getCommitFromUrl } from '../repository.action'; + +const mapStateToProps = state => ({ + language: state.auth.language, + commit: state.repository.commit, + isPendingCommit: state.repository.isPendingCommit, +}); + +const mapDispatchToProps = dispatch => ({ + getCommitFromUrlByDispatch: url => dispatch(getCommitFromUrl(url)), +}); + +const styles = StyleSheet.create({ + fileChangeContainer: { + padding: 0, + marginTop: 12, + marginBottom: 12, + }, + fileTitleContainer: { + flexDirection: 'row', + paddingVertical: 15, + backgroundColor: colors.greyVeryLight, + }, + linesChanged: { + flex: 0.3, + paddingLeft: 10, + flexDirection: 'row', + alignItems: 'center', + }, + lineNumbersChanged: { + ...fonts.fontCode, + marginRight: 5, + }, + fileTitle: { + flex: 1, + marginLeft: 10, + }, + codeStyle: { + ...fonts.fontCode, + fontSize: normalize(10), + }, + dividerStyle: { + marginBottom: 0, + }, + noChangesMessage: { + ...fonts.fontPrimarySemiBold, + paddingVertical: 5, + paddingLeft: 10, + }, + newIndicator: { + ...fonts.fontPrimarySemiBold, + color: colors.green, + }, + deletedIndicator: { + ...fonts.fontPrimarySemiBold, + color: colors.red, + }, + header: { + paddingTop: 25, + paddingHorizontal: 25, + flexDirection: 'row', + alignItems: 'center', + justifyContent: 'space-between', + }, + headerItem: { + flex: 1, + }, + headerText: { + ...fonts.fontPrimarySemiBold, + fontSize: normalize(14), + }, +}); + +class Commit extends Component { + props: { + navigation: Object, + commit: Object, + isPendingCommit: boolean, + getCommitFromUrlByDispatch: Function, + }; + + componentDidMount() { + this.getCommit(); + } + + getCommit = () => { + const { navigation, getCommitFromUrlByDispatch } = this.props; + + const commitUrl = navigation.state.params.commit.url; + + getCommitFromUrlByDispatch(commitUrl); + }; + + keyExtractor = (item, index) => { + return index; + }; + + renderHeader = () => { + const { navigation, commit, isPendingCommit } = this.props; + const { language, diff } = navigation.state.params; + + const filesChanged = Parse(diff); + + let lineAdditions = 0; + let lineDeletions = 0; + + filesChanged.forEach(file => { + lineAdditions += file.additions; + lineDeletions += file.deletions; + }); + + return ( + + {!isPendingCommit && + + + {commit.commit.message} + + } + + + {translate('repository.pullDiff.numFilesChanged', language, { + numFilesChanged: filesChanged.length, + })} + + + + + + ); + }; + + renderItem = ({ item }) => { + const { navigation } = this.props; + const { language } = navigation.state.params; + const filename = item.deleted ? item.from : item.to; + const chunks = item.chunks.map((chunk, index) => { + return ( + + + + + {chunk.changes.map((change, changesIndex) => + + )} + + + ); + }); + + return ( + + + + + {item.additions + item.deletions} + + + + + {item.new && + + + {translate('repository.pullDiff.new', language)} + {'\n'} + + + {item.to} + + } + + {item.deleted && + + + {translate('repository.pullDiff.deleted', language)} + {'\n'} + + + {item.from} + + } + + {!item.new && + !item.deleted && + + {item.from === item.to ? item.to : `${item.from} \n → ${item.to}`} + } + + + {item.chunks.length > 0 && chunks} + + {item.chunks.length === 0 && + !item.new && + !item.deleted && + item.from !== item.to && + + {translate('repository.pullDiff.fileRenamed', language)} + } + + ); + }; + + render() { + const { navigation } = this.props; + const filesChanged = navigation.state.params + ? Parse(navigation.state.params.diff) + : []; + + return ( + + + + ); + } +} + +export const CommitScreen = connect(mapStateToProps, mapDispatchToProps)( + Commit +); diff --git a/src/repository/screens/index.js b/src/repository/screens/index.js index 3f2da0103..55dd2c931 100644 --- a/src/repository/screens/index.js +++ b/src/repository/screens/index.js @@ -1,3 +1,5 @@ +export * from './commit.screen'; +export * from './commit-list.screen'; export * from './issue-list.screen'; export * from './pull-diff.screen'; export * from './pull-list.screen'; From a5daf024ad6d5f3d66d988c8861fdfbe8d045fcf Mon Sep 17 00:00:00 2001 From: Antoine BOISADAM Date: Sun, 6 Aug 2017 14:34:32 -0300 Subject: [PATCH 02/12] feat: Show commit * Commit Screen * Commit diff is now retrieved`and displayed --- src/locale/languages/en.js | 7 ++ src/repository/repository.action.js | 39 +++++++++ src/repository/repository.reducer.js | 20 +++++ src/repository/repository.type.js | 1 + src/repository/screens/commit.screen.js | 112 +++++++++++++----------- 5 files changed, 128 insertions(+), 51 deletions(-) diff --git a/src/locale/languages/en.js b/src/locale/languages/en.js index f73b608f6..fce121564 100644 --- a/src/locale/languages/en.js +++ b/src/locale/languages/en.js @@ -204,6 +204,13 @@ export const en = { title: 'Commits', noCommit: 'No commit found!', }, + commit: { + numFilesChanged: '{{numFilesChanged}} files', + new: 'NEW', + deleted: 'DELETED', + fileRenamed: 'File renamed without any changes', + byConnector: 'By {{contributor}}', + }, issueList: { title: 'Issues', openButton: 'Open', diff --git a/src/repository/repository.action.js b/src/repository/repository.action.js index bee192f6e..20c664a89 100644 --- a/src/repository/repository.action.js +++ b/src/repository/repository.action.js @@ -4,6 +4,7 @@ import { fetchUrlNormal, fetchUrlHead, fetchUrlFile, + fetchDiff, fetchCommentHTML, fetchReadMe, fetchSearch, @@ -21,6 +22,7 @@ import { GET_REPO_README_STATUS, GET_REPO_STARRED_STATUS, GET_COMMIT, + GET_COMMIT_DIFF, FORK_REPO_STATUS, CHANGE_STAR_STATUS, GET_REPOSITORY_README, @@ -187,6 +189,43 @@ export const getCommitFromUrl = url => { }; }; +export const getCommitDiffFromUrl = url => { + return (dispatch, getState) => { + const accessToken = getState().auth.accessToken; + + dispatch({ type: GET_COMMIT_DIFF.PENDING }); + + fetchDiff(url, accessToken) + .then(data => { + dispatch({ + type: GET_COMMIT_DIFF.SUCCESS, + payload: data, + }); + }) + .catch(error => { + dispatch({ + type: GET_COMMIT_DIFF.ERROR, + payload: error, + }); + }); + }; +}; + +export const getCommitDetails = commit => { + // eslint-disable-next-line no-unused-vars + return (dispatch, getState) => { + dispatch(getCommitFromUrl(commit.url)); + dispatch( + getCommitDiffFromUrl( + commit.url + .replace('https://api.github.com/repos/', 'https://github.com/') + .replace('/commits/', '/commit/') + .concat('.diff') + ) + ); + }; +}; + export const checkRepoStarred = url => { return (dispatch, getState) => { const accessToken = getState().auth.accessToken; diff --git a/src/repository/repository.reducer.js b/src/repository/repository.reducer.js index 99e4f8fff..7754817bc 100644 --- a/src/repository/repository.reducer.js +++ b/src/repository/repository.reducer.js @@ -11,6 +11,7 @@ import { GET_REPOSITORY_README, GET_REPOSITORY_LABELS, GET_COMMIT, + GET_COMMIT_DIFF, SEARCH_OPEN_ISSUES, SEARCH_CLOSED_ISSUES, SEARCH_OPEN_PULLS, @@ -26,6 +27,7 @@ const initialState = { fileContent: '', issues: [], commit: {}, + diff: {}, readMe: '', hasReadMe: false, starred: false, @@ -39,6 +41,7 @@ const initialState = { isPendingContributors: false, isPendingContents: false, isPendingCommit: false, + isPendingCommitDiff: false, isPendingFile: false, isPendingIssues: false, isPendingCheckReadMe: false, @@ -363,6 +366,23 @@ export const repositoryReducer = (state = initialState, action = {}) => { error: action.payload, isPendingCommit: false, }; + case GET_COMMIT_DIFF.PENDING: + return { + ...state, + isPendingCommitDiff: true, + }; + case GET_COMMIT_DIFF.SUCCESS: + return { + ...state, + diff: action.payload, + isPendingCommitDiff: false, + }; + case GET_COMMIT_DIFF.ERROR: + return { + ...state, + error: action.payload, + isPendingCommitDiff: false, + }; default: return state; } diff --git a/src/repository/repository.type.js b/src/repository/repository.type.js index 694875b65..88421a315 100644 --- a/src/repository/repository.type.js +++ b/src/repository/repository.type.js @@ -8,6 +8,7 @@ export const GET_REPOSITORY_CONTENTS = createActionSet( 'GET_REPOSITORY_CONTENTS' ); export const GET_COMMIT = createActionSet('GET_COMMIT'); +export const GET_COMMIT_DIFF = createActionSet('GET_COMMIT_DIFF'); export const GET_REPOSITORY_FILE = createActionSet('GET_REPOSITORY_FILE'); export const GET_REPOSITORY_ISSUES = createActionSet('GET_REPOSITORY_ISSUES'); export const GET_REPO_README_STATUS = createActionSet( diff --git a/src/repository/screens/commit.screen.js b/src/repository/screens/commit.screen.js index 76fbdccfe..dddd69eed 100644 --- a/src/repository/screens/commit.screen.js +++ b/src/repository/screens/commit.screen.js @@ -3,20 +3,27 @@ import React, { Component } from 'react'; import { connect } from 'react-redux'; import { View, ScrollView, Text, FlatList, StyleSheet } from 'react-native'; import { Card } from 'react-native-elements'; +import { + ViewContainer, + DiffBlocks, + CodeLine, + LoadingContainer, +} from 'components'; import Parse from 'parse-diff'; -import { ViewContainer, DiffBlocks, CodeLine } from 'components'; import { translate } from 'utils'; import { colors, fonts, normalize } from 'config'; -import { getCommitFromUrl } from '../repository.action'; +import { getCommitDetails } from '../repository.action'; const mapStateToProps = state => ({ language: state.auth.language, commit: state.repository.commit, + diff: state.repository.diff, isPendingCommit: state.repository.isPendingCommit, + isPendingDiff: state.repository.isPendingDiff, }); const mapDispatchToProps = dispatch => ({ - getCommitFromUrlByDispatch: url => dispatch(getCommitFromUrl(url)), + getCommitDetailsByDispatch: url => dispatch(getCommitDetails(url)), }); const styles = StyleSheet.create({ @@ -64,9 +71,13 @@ const styles = StyleSheet.create({ ...fonts.fontPrimarySemiBold, color: colors.red, }, - header: { - paddingTop: 25, + headerContainer: { + paddingTop: 15, paddingHorizontal: 25, + }, + header: { + flex: 1, + paddingTop: 10, flexDirection: 'row', alignItems: 'center', justifyContent: 'space-between', @@ -84,8 +95,11 @@ class Commit extends Component { props: { navigation: Object, commit: Object, + diff: string, isPendingCommit: boolean, - getCommitFromUrlByDispatch: Function, + isPendingDiff: boolean, + getCommitDetailsByDispatch: Function, + language: string, }; componentDidMount() { @@ -93,11 +107,10 @@ class Commit extends Component { } getCommit = () => { - const { navigation, getCommitFromUrlByDispatch } = this.props; - - const commitUrl = navigation.state.params.commit.url; + const { navigation, getCommitDetailsByDispatch } = this.props; + const commit = navigation.state.params.commit; - getCommitFromUrlByDispatch(commitUrl); + getCommitDetailsByDispatch(commit); }; keyExtractor = (item, index) => { @@ -105,38 +118,33 @@ class Commit extends Component { }; renderHeader = () => { - const { navigation, commit, isPendingCommit } = this.props; - const { language, diff } = navigation.state.params; - - const filesChanged = Parse(diff); - - let lineAdditions = 0; - let lineDeletions = 0; - - filesChanged.forEach(file => { - lineAdditions += file.additions; - lineDeletions += file.deletions; - }); + const { commit, language } = this.props; return ( - - {!isPendingCommit && - - - {commit.commit.message} - - } - + + + + {commit.commit.message} + + + + + {translate('repository.commit.byConnector', language, { + contributor: commit.committer.login, + })} + + + - {translate('repository.pullDiff.numFilesChanged', language, { - numFilesChanged: filesChanged.length, + {translate('repository.commit.numFilesChanged', language, { + numFilesChanged: commit.files.length, })} @@ -145,8 +153,7 @@ class Commit extends Component { }; renderItem = ({ item }) => { - const { navigation } = this.props; - const { language } = navigation.state.params; + const { language } = this.props; const filename = item.deleted ? item.from : item.to; const chunks = item.chunks.map((chunk, index) => { return ( @@ -196,7 +203,7 @@ class Commit extends Component { {item.new && - {translate('repository.pullDiff.new', language)} + {translate('repository.commit.new', language)} {'\n'} @@ -207,7 +214,7 @@ class Commit extends Component { {item.deleted && - {translate('repository.pullDiff.deleted', language)} + {translate('repository.commit.deleted', language)} {'\n'} @@ -229,28 +236,31 @@ class Commit extends Component { !item.deleted && item.from !== item.to && - {translate('repository.pullDiff.fileRenamed', language)} + {translate('repository.commit.fileRenamed', language)} } ); }; render() { - const { navigation } = this.props; - const filesChanged = navigation.state.params - ? Parse(navigation.state.params.diff) - : []; + const { diff, isPendingCommit, isPendingDiff } = this.props; + const filesChanged = isPendingDiff ? [] : Parse(diff); return ( - + {(isPendingCommit || isPendingDiff) && + } + + {!isPendingCommit && + !isPendingDiff && + } ); } From d726352a27a913fc34b6e71fc8cd68440e59a2a6 Mon Sep 17 00:00:00 2001 From: Antoine BOISADAM Date: Wed, 16 Aug 2017 16:23:37 +0200 Subject: [PATCH 03/12] feat(commit): show commits in repository screen --- src/components/commit-list-item.component.js | 14 ++----- src/locale/languages/en.js | 1 + src/repository/repository.action.js | 28 +++++++++++++ src/repository/repository.reducer.js | 20 +++++++++ src/repository/repository.type.js | 1 + src/repository/screens/repository.screen.js | 43 ++++++++++++++++++++ 6 files changed, 97 insertions(+), 10 deletions(-) diff --git a/src/components/commit-list-item.component.js b/src/components/commit-list-item.component.js index 1b2b49688..545e53597 100644 --- a/src/components/commit-list-item.component.js +++ b/src/components/commit-list-item.component.js @@ -18,10 +18,6 @@ const styles = StyleSheet.create({ borderBottomWidth: 1, borderBottomColor: colors.greyLight, }, - closedIssue: { - backgroundColor: colors.greyVeryLight, - opacity: 0.6, - }, listItemContainer: { flex: 1, borderBottomWidth: 0, @@ -30,10 +26,6 @@ const styles = StyleSheet.create({ color: colors.primaryDark, ...fonts.fontPrimary, }, - badge: { - alignItems: 'flex-end', - justifyContent: 'center', - }, }); export const CommitListItem = ({ commit, navigation }: Props) => @@ -47,9 +39,11 @@ export const CommitListItem = ({ commit, navigation }: Props) => { }; }; +export const getCommits = url => { + return (dispatch, getState) => { + const accessToken = getState().auth.accessToken; + + dispatch({ type: GET_REPOSITORY_COMMITS.PENDING }); + + fetchUrl(url, accessToken) + .then(data => { + dispatch({ + type: GET_REPOSITORY_COMMITS.SUCCESS, + payload: data, + }); + }) + .catch(error => { + dispatch({ + type: GET_REPOSITORY_COMMITS.ERROR, + payload: error, + }); + }); + }; +}; + export const getCommitFromUrl = url => { return (dispatch, getState) => { const accessToken = getState().auth.accessToken; @@ -301,9 +324,14 @@ export const getRepositoryInfo = url => { '{/number}', '?state=all&per_page=100' ); + const commitsUrl = getState().repository.repository.commits_url.replace( + '{/sha}', + '?state=all&per_page=100' + ); dispatch(getContributors(contributorsUrl)); dispatch(getIssues(issuesUrl)); + dispatch(getCommits(commitsUrl)); dispatch( checkReadMe( `${apiRoot}/repos/${repo.owner.login}/${repo.name}/readme?ref=master` diff --git a/src/repository/repository.reducer.js b/src/repository/repository.reducer.js index 7754817bc..0b288e58d 100644 --- a/src/repository/repository.reducer.js +++ b/src/repository/repository.reducer.js @@ -5,6 +5,7 @@ import { GET_REPOSITORY_FILE, GET_REPOSITORY_ISSUES, GET_REPO_README_STATUS, + GET_REPOSITORY_COMMITS, GET_REPO_STARRED_STATUS, FORK_REPO_STATUS, CHANGE_STAR_STATUS, @@ -26,6 +27,7 @@ const initialState = { contents: {}, fileContent: '', issues: [], + commits: [], commit: {}, diff: {}, readMe: '', @@ -40,6 +42,7 @@ const initialState = { isPendingRepository: false, isPendingContributors: false, isPendingContents: false, + isPendingCommits: false, isPendingCommit: false, isPendingCommitDiff: false, isPendingFile: false, @@ -168,6 +171,23 @@ export const repositoryReducer = (state = initialState, action = {}) => { error: action.payload, isPendingCheckReadMe: false, }; + case GET_REPOSITORY_COMMITS.PENDING: + return { + ...state, + isPendingCommits: true, + }; + case GET_REPOSITORY_COMMITS.SUCCESS: + return { + ...state, + commits: action.payload, + isPendingCommits: false, + }; + case GET_REPOSITORY_COMMITS.ERROR: + return { + ...state, + error: action.payload, + isPendingCommits: false, + }; case GET_REPO_STARRED_STATUS.PENDING: return { ...state, diff --git a/src/repository/repository.type.js b/src/repository/repository.type.js index 88421a315..6f3c13b5d 100644 --- a/src/repository/repository.type.js +++ b/src/repository/repository.type.js @@ -14,6 +14,7 @@ export const GET_REPOSITORY_ISSUES = createActionSet('GET_REPOSITORY_ISSUES'); export const GET_REPO_README_STATUS = createActionSet( 'GET_REPO_README_STATUS' ); +export const GET_REPOSITORY_COMMITS = createActionSet('GET_REPOSITORY_COMMITS'); export const GET_REPO_STARRED_STATUS = createActionSet( 'GET_REPO_STARRED_STATUS' ); diff --git a/src/repository/screens/repository.screen.js b/src/repository/screens/repository.screen.js index e5dfffeed..075fbd57f 100644 --- a/src/repository/screens/repository.screen.js +++ b/src/repository/screens/repository.screen.js @@ -21,6 +21,12 @@ import { translate } from 'utils'; import { colors, fonts } from 'config'; import { getRepositoryInfo, +<<<<<<< HEAD +======= + getContributors, + getIssues, + getCommits, +>>>>>>> feat(commit): show commits in repository screen changeStarStatusRepo, forkRepo, subscribeToRepo, @@ -33,6 +39,7 @@ const mapStateToProps = state => ({ repository: state.repository.repository, contributors: state.repository.contributors, issues: state.repository.issues, + commits: state.repository.commits, starred: state.repository.starred, forked: state.repository.forked, subscribed: state.repository.subscribed, @@ -48,6 +55,12 @@ const mapStateToProps = state => ({ const mapDispatchToProps = dispatch => ({ getRepositoryInfoByDispatch: url => dispatch(getRepositoryInfo(url)), +<<<<<<< HEAD +======= + getContributorsByDispatch: url => dispatch(getContributors(url)), + getIssuesByDispatch: url => dispatch(getIssues(url)), + getCommitsByDispatch: url => dispatch(getCommits(url)), +>>>>>>> feat(commit): show commits in repository screen changeStarStatusRepoByDispatch: (owner, repo, starred) => dispatch(changeStarStatusRepo(owner, repo, starred)), forkRepoByDispatch: (owner, repo) => dispatch(forkRepo(owner, repo)), @@ -65,6 +78,11 @@ const styles = StyleSheet.create({ class Repository extends Component { props: { getRepositoryInfoByDispatch: Function, +<<<<<<< HEAD +======= + // getIssuesByDispatch: Function, + // getCommitsByDispatch: Function, +>>>>>>> feat(commit): show commits in repository screen changeStarStatusRepoByDispatch: Function, forkRepoByDispatch: Function, // repositoryName: string, @@ -72,6 +90,7 @@ class Repository extends Component { contributors: Array, hasReadMe: boolean, issues: Array, + commits: Array, starred: boolean, // forked: boolean, isPendingRepository: boolean, @@ -190,6 +209,7 @@ class Repository extends Component { contributors, hasReadMe, issues, + commits, starred, language, isPendingRepository, @@ -342,7 +362,30 @@ class Repository extends Component { repository, })} underlayColor={colors.greyLight} +<<<<<<< HEAD />} +======= + /> + {commits.length > 0 && + + this.props.navigation.navigate('CommitList', { + commits, + title: translate( + 'repository.commitList.title', + this.props.language + ), + })} + underlayColor={colors.greyLight} + />} +>>>>>>> feat(commit): show commits in repository screen Date: Wed, 16 Aug 2017 17:08:34 +0200 Subject: [PATCH 04/12] fix(commit): variables name --- src/repository/repository.action.js | 6 ++++-- src/repository/repository.reducer.js | 10 +++++----- src/repository/screens/commit.screen.js | 8 ++------ 3 files changed, 11 insertions(+), 13 deletions(-) diff --git a/src/repository/repository.action.js b/src/repository/repository.action.js index 494c5e239..12b627db4 100644 --- a/src/repository/repository.action.js +++ b/src/repository/repository.action.js @@ -237,10 +237,12 @@ export const getCommitDiffFromUrl = url => { export const getCommitDetails = commit => { // eslint-disable-next-line no-unused-vars return (dispatch, getState) => { - dispatch(getCommitFromUrl(commit.url)); + const url = commit.url || commit.commit.url; + + dispatch(getCommitFromUrl(url)); dispatch( getCommitDiffFromUrl( - commit.url + url .replace('https://api.github.com/repos/', 'https://github.com/') .replace('/commits/', '/commit/') .concat('.diff') diff --git a/src/repository/repository.reducer.js b/src/repository/repository.reducer.js index 0b288e58d..4e30b8923 100644 --- a/src/repository/repository.reducer.js +++ b/src/repository/repository.reducer.js @@ -29,7 +29,7 @@ const initialState = { issues: [], commits: [], commit: {}, - diff: {}, + diff: '', readMe: '', hasReadMe: false, starred: false, @@ -44,7 +44,7 @@ const initialState = { isPendingContents: false, isPendingCommits: false, isPendingCommit: false, - isPendingCommitDiff: false, + isPendingDiff: false, isPendingFile: false, isPendingIssues: false, isPendingCheckReadMe: false, @@ -389,19 +389,19 @@ export const repositoryReducer = (state = initialState, action = {}) => { case GET_COMMIT_DIFF.PENDING: return { ...state, - isPendingCommitDiff: true, + isPendingDiff: true, }; case GET_COMMIT_DIFF.SUCCESS: return { ...state, diff: action.payload, - isPendingCommitDiff: false, + isPendingDiff: false, }; case GET_COMMIT_DIFF.ERROR: return { ...state, error: action.payload, - isPendingCommitDiff: false, + isPendingDiff: false, }; default: return state; diff --git a/src/repository/screens/commit.screen.js b/src/repository/screens/commit.screen.js index dddd69eed..5c6dfd51c 100644 --- a/src/repository/screens/commit.screen.js +++ b/src/repository/screens/commit.screen.js @@ -23,7 +23,7 @@ const mapStateToProps = state => ({ }); const mapDispatchToProps = dispatch => ({ - getCommitDetailsByDispatch: url => dispatch(getCommitDetails(url)), + getCommitDetailsByDispatch: commit => dispatch(getCommitDetails(commit)), }); const styles = StyleSheet.create({ @@ -103,15 +103,11 @@ class Commit extends Component { }; componentDidMount() { - this.getCommit(); - } - - getCommit = () => { const { navigation, getCommitDetailsByDispatch } = this.props; const commit = navigation.state.params.commit; getCommitDetailsByDispatch(commit); - }; + } keyExtractor = (item, index) => { return index; From 867e45a5decd0f7bd38c99b6ce51fef9c06fcf0f Mon Sep 17 00:00:00 2001 From: Antoine BOISADAM Date: Wed, 23 Aug 2017 15:19:06 +0200 Subject: [PATCH 05/12] fix(commit): no more error when open a commit (ugly) --- src/repository/screens/commit.screen.js | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/src/repository/screens/commit.screen.js b/src/repository/screens/commit.screen.js index 5c6dfd51c..385cc0b2b 100644 --- a/src/repository/screens/commit.screen.js +++ b/src/repository/screens/commit.screen.js @@ -115,18 +115,20 @@ class Commit extends Component { renderHeader = () => { const { commit, language } = this.props; + const message = commit.commit ? commit.commit.message : 'Loading...'; + const committer = commit.author ? commit.author.login : ''; return ( - {commit.commit.message} + {message} {translate('repository.commit.byConnector', language, { - contributor: commit.committer.login, + contributor: committer, })} @@ -240,7 +242,7 @@ class Commit extends Component { render() { const { diff, isPendingCommit, isPendingDiff } = this.props; - const filesChanged = isPendingDiff ? [] : Parse(diff); + const filesChanged = isPendingDiff || diff === {} ? [] : Parse(diff); return ( From 3c48cad624cff6572e05f044c0d3993ccfabebe0 Mon Sep 17 00:00:00 2001 From: Antoine BOISADAM Date: Wed, 20 Sep 2017 09:58:12 +0200 Subject: [PATCH 06/12] fix(commit): remove unused params No more // eslint-disable-next-line no-unused-vars --- src/repository/repository.action.js | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/repository/repository.action.js b/src/repository/repository.action.js index 12b627db4..5c0497c55 100644 --- a/src/repository/repository.action.js +++ b/src/repository/repository.action.js @@ -235,8 +235,7 @@ export const getCommitDiffFromUrl = url => { }; export const getCommitDetails = commit => { - // eslint-disable-next-line no-unused-vars - return (dispatch, getState) => { + return dispatch => { const url = commit.url || commit.commit.url; dispatch(getCommitFromUrl(url)); From 7173eb6616917e6fc034223afff3cb48a5ddc8dc Mon Sep 17 00:00:00 2001 From: Antoine Boisadam Date: Sat, 23 Sep 2017 18:03:24 +0200 Subject: [PATCH 07/12] fix(commit): missed <<< HEAD during the last rebase --- src/repository/screens/repository.screen.js | 111 ++++++++------------ yarn.lock | 4 + 2 files changed, 49 insertions(+), 66 deletions(-) diff --git a/src/repository/screens/repository.screen.js b/src/repository/screens/repository.screen.js index 075fbd57f..ce4c1669f 100644 --- a/src/repository/screens/repository.screen.js +++ b/src/repository/screens/repository.screen.js @@ -21,12 +21,9 @@ import { translate } from 'utils'; import { colors, fonts } from 'config'; import { getRepositoryInfo, -<<<<<<< HEAD -======= getContributors, getIssues, getCommits, ->>>>>>> feat(commit): show commits in repository screen changeStarStatusRepo, forkRepo, subscribeToRepo, @@ -55,12 +52,9 @@ const mapStateToProps = state => ({ const mapDispatchToProps = dispatch => ({ getRepositoryInfoByDispatch: url => dispatch(getRepositoryInfo(url)), -<<<<<<< HEAD -======= getContributorsByDispatch: url => dispatch(getContributors(url)), getIssuesByDispatch: url => dispatch(getIssues(url)), getCommitsByDispatch: url => dispatch(getCommits(url)), ->>>>>>> feat(commit): show commits in repository screen changeStarStatusRepoByDispatch: (owner, repo, starred) => dispatch(changeStarStatusRepo(owner, repo, starred)), forkRepoByDispatch: (owner, repo) => dispatch(forkRepo(owner, repo)), @@ -78,11 +72,8 @@ const styles = StyleSheet.create({ class Repository extends Component { props: { getRepositoryInfoByDispatch: Function, -<<<<<<< HEAD -======= // getIssuesByDispatch: Function, // getCommitsByDispatch: Function, ->>>>>>> feat(commit): show commits in repository screen changeStarStatusRepoByDispatch: Function, forkRepoByDispatch: Function, // repositoryName: string, @@ -297,27 +288,25 @@ class Repository extends Component { navigateBack > {initalRepository && - !initalRepository.owner && - isPendingRepository && ( + !initalRepository.owner && + isPendingRepository && - - )} + } {!(initalRepository && initalRepository.owner) && - (repository && repository.owner) && - !isPendingRepository && ( + (repository && repository.owner) && + !isPendingRepository && - - )} + } {initalRepository && - initalRepository.owner && ( + initalRepository.owner && @@ -325,16 +314,14 @@ class Repository extends Component { user={initalRepository.owner} navigation={navigation} /> - - )} + } - {(isPendingRepository || isPendingContributors) && ( + {(isPendingRepository || isPendingContributors) && - )} + />} - {!isPendingContributors && ( + {!isPendingContributors && - )} + />} - {showReadMe && - navigation.navigate('ReadMe', { - repository, - })} - underlayColor={colors.greyLight} -<<<<<<< HEAD - />} -======= - /> + {showReadMe && + + navigation.navigate('ReadMe', { + repository, + })} + underlayColor={colors.greyLight} + />} {commits.length > 0 && } ->>>>>>> feat(commit): show commits in repository screen {!repository.fork && - repository.has_issues && ( + repository.has_issues && 0 ? ( - translate('repository.main.viewAllButton', language) - ) : ( - translate('repository.main.newIssueButton', language) - ) + pureIssues.length > 0 + ? translate('repository.main.viewAllButton', language) + : translate('repository.main.newIssueButton', language) } buttonAction={() => { if (pureIssues.length > 0) { @@ -440,7 +419,7 @@ class Repository extends Component { > {openIssues .slice(0, 3) - .map(item => ( + .map(item => - ))} - - )} + )} + } 0} buttonTitle={translate('repository.main.viewAllButton', language)} @@ -474,7 +453,7 @@ class Repository extends Component { > {openPulls .slice(0, 3) - .map(item => ( + .map(item => - ))} + )} diff --git a/yarn.lock b/yarn.lock index 19c46e2c5..ada6be27e 100644 --- a/yarn.lock +++ b/yarn.lock @@ -5241,6 +5241,10 @@ react-native-tab-view@^0.0.67: dependencies: prop-types "^15.5.8" +react-native-table-component@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/react-native-table-component/-/react-native-table-component-1.0.5.tgz#84e91f50e92f3cf35eb224749d28444244aced80" + react-native-vector-icons@^4.0.0, react-native-vector-icons@^4.2.0: version "4.3.0" resolved "https://registry.yarnpkg.com/react-native-vector-icons/-/react-native-vector-icons-4.3.0.tgz#49eab845fbcde6354cb3dbcb62c1abd1f6abc866" From 9c3e9c72ddd869eac69fb368664459e3ac71b196 Mon Sep 17 00:00:00 2001 From: Antoine Boisadam Date: Sat, 23 Sep 2017 19:52:38 +0200 Subject: [PATCH 08/12] fix(commit): detailed commit error --- src/repository/repository.reducer.js | 2 ++ src/repository/screens/commit.screen.js | 21 ++++++++++++++++----- 2 files changed, 18 insertions(+), 5 deletions(-) diff --git a/src/repository/repository.reducer.js b/src/repository/repository.reducer.js index 4e30b8923..94c53ebf5 100644 --- a/src/repository/repository.reducer.js +++ b/src/repository/repository.reducer.js @@ -174,6 +174,7 @@ export const repositoryReducer = (state = initialState, action = {}) => { case GET_REPOSITORY_COMMITS.PENDING: return { ...state, + commits: [], isPendingCommits: true, }; case GET_REPOSITORY_COMMITS.SUCCESS: @@ -372,6 +373,7 @@ export const repositoryReducer = (state = initialState, action = {}) => { case GET_COMMIT.PENDING: return { ...state, + commit: {}, isPendingCommit: true, }; case GET_COMMIT.SUCCESS: diff --git a/src/repository/screens/commit.screen.js b/src/repository/screens/commit.screen.js index 385cc0b2b..d5121beab 100644 --- a/src/repository/screens/commit.screen.js +++ b/src/repository/screens/commit.screen.js @@ -114,10 +114,18 @@ class Commit extends Component { }; renderHeader = () => { - const { commit, language } = this.props; + const { commit, language, isPendingCommit } = this.props; const message = commit.commit ? commit.commit.message : 'Loading...'; const committer = commit.author ? commit.author.login : ''; + if (isPendingCommit || !commit.files) { + return ( + + {message} + + ); + } + return ( @@ -135,14 +143,14 @@ class Commit extends Component { {translate('repository.commit.numFilesChanged', language, { - numFilesChanged: commit.files.length, + numFilesChanged: isPendingCommit ? 0 : commit.files.length, })} @@ -247,7 +255,10 @@ class Commit extends Component { return ( {(isPendingCommit || isPendingDiff) && - } + } {!isPendingCommit && !isPendingDiff && From e8e079be3b2193d72b2d80d91930ec5f4471441a Mon Sep 17 00:00:00 2001 From: Antoine Boisadam Date: Tue, 26 Sep 2017 14:06:02 +0200 Subject: [PATCH 09/12] feat(commit): number of commits when viewing a PR is clickable --- src/auth/screens/events.screen.js | 2 +- src/components/issue-description.component.js | 44 +++++++++++++++++-- src/issue/issue.action.js | 24 ++++++++++ src/issue/issue.reducer.js | 21 +++++++++ src/issue/issue.type.js | 1 + src/issue/screens/issue.screen.js | 17 +++++++ yarn.lock | 8 +++- 7 files changed, 112 insertions(+), 5 deletions(-) diff --git a/src/auth/screens/events.screen.js b/src/auth/screens/events.screen.js index 1aadd3aca..72c280e43 100644 --- a/src/auth/screens/events.screen.js +++ b/src/auth/screens/events.screen.js @@ -468,7 +468,7 @@ class Events extends Component { }; navigateToCommitList = userEvent => { - if (userEvent.payload.commits > 2) { + if (userEvent.payload.commits > 1) { this.props.navigation.navigate('CommitList', { commits: userEvent.payload.commits, title: translate('repository.commitList.title', this.props.language), diff --git a/src/components/issue-description.component.js b/src/components/issue-description.component.js index a151bf060..bd595c1c9 100644 --- a/src/components/issue-description.component.js +++ b/src/components/issue-description.component.js @@ -1,5 +1,11 @@ import React, { Component } from 'react'; -import { StyleSheet, View, ActivityIndicator } from 'react-native'; +import { + Text, + StyleSheet, + View, + ActivityIndicator, + TouchableHighlight, +} from 'react-native'; import { ListItem, Button } from 'react-native-elements'; import Parse from 'parse-diff'; import moment from 'moment/min/moment-with-locales.min'; @@ -35,9 +41,10 @@ const styles = StyleSheet.create({ }, diffBlocksContainer: { flexDirection: 'row', - alignItems: 'center', - justifyContent: 'flex-end', + alignItems: 'stretch', + justifyContent: 'space-between', paddingRight: 10, + paddingLeft: 10, paddingBottom: 10, }, badge: { @@ -67,8 +74,10 @@ export class IssueDescription extends Component { props: { issue: Object, diff: string, + commits: Array, isMerged: boolean, isPendingDiff: boolean, + isPendingCommit: boolean, isPendingCheckMerge: boolean, onRepositoryPress: Function, userHasPushPermission: boolean, @@ -76,6 +85,22 @@ export class IssueDescription extends Component { navigation: Object, }; + navigateToCommitList = () => { + const { commits } = this.props; + + if (commits.length > 1) { + this.props.navigation.navigate('CommitList', { + title: translate('repository.commitList.title', this.props.language), + commits, + }); + } else { + this.props.navigation.navigate('Commit', { + commit: commits[0], + title: commits[0].sha.substring(0, 7), + }); + } + }; + renderLabelButtons = labels => { return labels .slice(0, 3) @@ -86,8 +111,10 @@ export class IssueDescription extends Component { const { diff, issue, + commits, isMerged, isPendingDiff, + isPendingCommit, isPendingCheckMerge, onRepositoryPress, userHasPushPermission, @@ -149,9 +176,20 @@ export class IssueDescription extends Component { {issue.pull_request && + {isPendingCommit && + } + {isPendingDiff && } + {!isPendingCommit && + this.navigateToCommitList()} + underlayColor={colors.greyLight} + > + {`${commits.length} commits`} + } + {!isPendingDiff && (lineAdditions !== 0 || lineDeletions !== 0) && { }; }; +export const getCommits = url => { + return (dispatch, getState) => { + const accessToken = getState().auth.accessToken; + + dispatch({ type: GET_ISSUE_COMMITS.PENDING }); + + fetchUrl(url, accessToken) + .then(data => { + dispatch({ + type: GET_ISSUE_COMMITS.SUCCESS, + payload: data, + }); + }) + .catch(error => { + dispatch({ + type: GET_ISSUE_COMMITS.ERROR, + payload: error, + }); + }); + }; +}; + export const postIssueComment = (body, owner, repoName, issueNum) => { return (dispatch, getState) => { const accessToken = getState().auth.accessToken; diff --git a/src/issue/issue.reducer.js b/src/issue/issue.reducer.js index 1e5fb03ab..6e4d6309a 100644 --- a/src/issue/issue.reducer.js +++ b/src/issue/issue.reducer.js @@ -4,6 +4,7 @@ import { EDIT_ISSUE, CHANGE_LOCK_STATUS, GET_ISSUE_DIFF, + GET_ISSUE_COMMITS, GET_ISSUE_MERGE_STATUS, MERGE_PULL_REQUEST, GET_ISSUE_FROM_URL, @@ -14,12 +15,14 @@ const initialState = { issue: {}, comments: [], diff: '', + commits: [], isMerged: false, isPendingComments: false, isPostingComment: false, isEditingIssue: false, isChangingLockStatus: false, isPendingDiff: false, + isPendingCommits: false, isPendingCheckMerge: false, isPendingMerging: false, isPendingIssue: false, @@ -116,6 +119,24 @@ export const issueReducer = (state = initialState, action = {}) => { error: action.payload, isPendingDiff: false, }; + case GET_ISSUE_COMMITS.PENDING: + return { + ...state, + commits: [], + isPendingCommits: true, + }; + case GET_ISSUE_COMMITS.SUCCESS: + return { + ...state, + commits: action.payload, + isPendingCommits: false, + }; + case GET_ISSUE_COMMITS.ERROR: + return { + ...state, + error: action.payload, + isPendingCommits: false, + }; case GET_ISSUE_MERGE_STATUS.PENDING: return { ...state, diff --git a/src/issue/issue.type.js b/src/issue/issue.type.js index 25b2e3c28..5526b5c81 100644 --- a/src/issue/issue.type.js +++ b/src/issue/issue.type.js @@ -5,6 +5,7 @@ export const POST_ISSUE_COMMENT = createActionSet('POST_ISSUE_COMMENT'); export const EDIT_ISSUE = createActionSet('EDIT_ISSUE'); export const CHANGE_LOCK_STATUS = createActionSet('CHANGE_LOCK_STATUS'); export const GET_ISSUE_DIFF = createActionSet('GET_ISSUE_DIFF'); +export const GET_ISSUE_COMMITS = createActionSet('GET_ISSUE_COMMITS'); export const GET_ISSUE_MERGE_STATUS = createActionSet('GET_ISSUE_MERGE_STATUS'); export const MERGE_PULL_REQUEST = createActionSet('MERGE_PULL_REQUEST'); export const GET_ISSUE_FROM_URL = createActionSet('GET_ISSUE_FROM_URL'); diff --git a/src/issue/screens/issue.screen.js b/src/issue/screens/issue.screen.js index b739fee0a..233a9df51 100644 --- a/src/issue/screens/issue.screen.js +++ b/src/issue/screens/issue.screen.js @@ -26,6 +26,7 @@ import { getIssueComments, postIssueComment, getIssueFromUrl, + getCommits, } from '../issue.action'; const mapStateToProps = state => ({ @@ -35,9 +36,11 @@ const mapStateToProps = state => ({ contributors: state.repository.contributors, issue: state.issue.issue, diff: state.issue.diff, + commits: state.issue.commits, isMerged: state.issue.isMerged, comments: state.issue.comments, isPendingDiff: state.issue.isPendingDiff, + isPendingCommits: state.issue.isPendingCommits, isPendingCheckMerge: state.issue.isPendingCheckMerge, isPendingComments: state.issue.isPendingComments, isPostingComment: state.issue.isPostingComment, @@ -52,6 +55,7 @@ const mapDispatchToProps = dispatch => getContributors, postIssueComment, getIssueFromUrl, + getCommits, }, dispatch ); @@ -88,7 +92,9 @@ class Issue extends Component { getContributors: Function, postIssueComment: Function, getIssueFromUrl: Function, + getCommits: Function, diff: string, + commits: Array, issue: Object, isMerged: boolean, authUser: Object, @@ -97,6 +103,7 @@ class Issue extends Component { comments: Array, isPendingIssue: boolean, isPendingDiff: boolean, + isPendingCommits: boolean, isPendingCheckMerge: boolean, isPendingComments: boolean, isPendingContributors: boolean, @@ -163,17 +170,23 @@ class Issue extends Component { getRepository, getContributors, getIssueFromUrl, + getCommits, } = this.props; const issueParam = navigation.state.params.issue; const issueURLParam = navigation.state.params.issueURL; const issueCommentsURL = `${navigation.state.params.issueURL}/comments`; + const pullRequestCommitsURL = `${(issueURLParam || issueParam.url) + .replace('issues', 'pulls')}/commits`; Promise.all([ getIssueFromUrl(issueURLParam || issueParam.url), getIssueComments( issueURLParam ? issueCommentsURL : issueParam.comments_url ), + issue.pull_request + ? getCommits(pullRequestCommitsURL) + : Promise.resolve(), ]).then(() => { if ( issueParam && @@ -224,8 +237,10 @@ class Issue extends Component { const { issue, diff, + commits, isMerged, isPendingDiff, + isPendingCommits, isPendingCheckMerge, language, navigation, @@ -235,8 +250,10 @@ class Issue extends Component { this.onRepositoryPress(url)} onLinkPress={node => this.onLinkPress(node)} diff --git a/yarn.lock b/yarn.lock index 537c1e708..3f5867d2e 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3223,7 +3223,7 @@ interpret@^1.0.0: version "1.0.3" resolved "https://registry.yarnpkg.com/interpret/-/interpret-1.0.3.tgz#cbc35c62eeee73f19ab7b10a801511401afc0f90" -invariant@^2.0.0, invariant@^2.2.0, invariant@^2.2.1: +invariant@^2.0.0, invariant@^2.1.0, invariant@^2.2.0, invariant@^2.2.1: version "2.2.2" resolved "https://registry.yarnpkg.com/invariant/-/invariant-2.2.2.tgz#9e1f56ac0acdb6bf303306f338be3b204ae60360" dependencies: @@ -5153,6 +5153,12 @@ react-native-config@^0.6.0: version "0.6.0" resolved "https://registry.yarnpkg.com/react-native-config/-/react-native-config-0.6.0.tgz#0f71631ab5ac4b568637dcb8e9f6ab85ffb380ed" +react-native-cookies@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/react-native-cookies/-/react-native-cookies-3.2.0.tgz#1079d4d368bb287d1c8a93f3b9b60a4bde659966" + dependencies: + invariant "^2.1.0" + react-native-device-info@^0.11.0: version "0.11.0" resolved "https://registry.yarnpkg.com/react-native-device-info/-/react-native-device-info-0.11.0.tgz#e96dd0e3f8a7d7e3022c1f441f51fa912fdc7444" From 1f2fb2cec388ef7648434fe26c3e18cc65d3b90b Mon Sep 17 00:00:00 2001 From: Antoine Boisadam Date: Thu, 5 Oct 2017 19:53:05 +0200 Subject: [PATCH 10/12] fix(commits): fix bugs introduced in last merges --- src/components/issue-description.component.js | 2 +- src/issue/issue.action.js | 4 +- src/issue/screens/issue.screen.js | 3 +- src/repository/repository.action.js | 6 +- yarn.lock | 231 +++++++++++++++++- 5 files changed, 238 insertions(+), 8 deletions(-) diff --git a/src/components/issue-description.component.js b/src/components/issue-description.component.js index 1648cb1b8..681020e2a 100644 --- a/src/components/issue-description.component.js +++ b/src/components/issue-description.component.js @@ -6,7 +6,7 @@ import { ActivityIndicator, TouchableHighlight, } from 'react-native'; -import { ListItem, Button } from 'react-native-elements'; +import { ListItem } from 'react-native-elements'; import Parse from 'parse-diff'; import moment from 'moment/min/moment-with-locales.min'; diff --git a/src/issue/issue.action.js b/src/issue/issue.action.js index 6308d3bcb..445c7c6b0 100644 --- a/src/issue/issue.action.js +++ b/src/issue/issue.action.js @@ -1,5 +1,4 @@ import { - fetchUrl, fetchMergeStatus, fetchPostIssueComment, fetchEditIssue, @@ -108,7 +107,8 @@ export const getCommits = url => { dispatch({ type: GET_ISSUE_COMMITS.PENDING }); - fetchUrl(url, accessToken) + return v3 + .getJson(url, accessToken) .then(data => { dispatch({ type: GET_ISSUE_COMMITS.SUCCESS, diff --git a/src/issue/screens/issue.screen.js b/src/issue/screens/issue.screen.js index d78ccc01a..08fa9cb18 100644 --- a/src/issue/screens/issue.screen.js +++ b/src/issue/screens/issue.screen.js @@ -164,6 +164,7 @@ class Issue extends Component { getContributors, getIssueFromUrl, getCommits, + issue, } = this.props; const issueParam = navigation.state.params.issue; @@ -177,7 +178,7 @@ class Issue extends Component { getIssueComments( issueURLParam ? issueCommentsURL : issueParam.comments_url ), - issue.pull_request + (issue || issueParam).pull_request ? getCommits(pullRequestCommitsURL) : Promise.resolve(), ]).then(() => { diff --git a/src/repository/repository.action.js b/src/repository/repository.action.js index b474707e9..bc0ff53f1 100644 --- a/src/repository/repository.action.js +++ b/src/repository/repository.action.js @@ -176,7 +176,8 @@ export const getCommits = url => { dispatch({ type: GET_REPOSITORY_COMMITS.PENDING }); - fetchUrl(url, accessToken) + v3 + .getJson(url, accessToken) .then(data => { dispatch({ type: GET_REPOSITORY_COMMITS.SUCCESS, @@ -198,7 +199,8 @@ export const getCommitFromUrl = url => { dispatch({ type: GET_COMMIT.PENDING }); - fetchUrl(url, accessToken) + v3 + .getJson(url, accessToken) .then(data => { dispatch({ type: GET_COMMIT.SUCCESS, diff --git a/yarn.lock b/yarn.lock index 98f0f1a76..c5c06c471 100644 --- a/yarn.lock +++ b/yarn.lock @@ -141,6 +141,12 @@ amdefine@>=0.0.4: version "1.0.1" resolved "https://registry.yarnpkg.com/amdefine/-/amdefine-1.0.1.tgz#4a5282ac164729e93619bcfd3ad151f817ce91f5" +anchor-markdown-header@^0.5.5: + version "0.5.7" + resolved "https://registry.yarnpkg.com/anchor-markdown-header/-/anchor-markdown-header-0.5.7.tgz#045063d76e6a1f9cd327a57a0126aa0fdec371a7" + dependencies: + emoji-regex "~6.1.0" + ansi-escapes@^1.0.0, ansi-escapes@^1.1.0, ansi-escapes@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-1.4.0.tgz#d3a8a83b319aa67793662b13e761c7911422306e" @@ -1149,6 +1155,10 @@ backo2@1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/backo2/-/backo2-1.0.2.tgz#31ab1ac8b129363463e35b3ebb69f4dfcfba7947" +bail@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/bail/-/bail-1.0.2.tgz#f7d6c1731630a9f9f0d4d35ed1f962e2074a1764" + balanced-match@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" @@ -1232,6 +1242,10 @@ boom@2.x.x: dependencies: hoek "2.x.x" +boundary@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/boundary/-/boundary-1.0.1.tgz#4d67dc2602c0cc16dd9bce7ebf87e948290f5812" + bplist-creator@0.0.4: version "0.0.4" resolved "https://registry.yarnpkg.com/bplist-creator/-/bplist-creator-0.0.4.tgz#4ac0496782e127a85c1d2026a4f5eb22a7aff991" @@ -1347,6 +1361,10 @@ caseless@~0.12.0: version "0.12.0" resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" +ccount@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/ccount/-/ccount-1.0.2.tgz#53b6a2f815bb77b9c2871f7b9a72c3a25f1d8e89" + center-align@^0.1.1: version "0.1.3" resolved "https://registry.yarnpkg.com/center-align/-/center-align-0.1.3.tgz#aa0d32629b6ee972200411cbd4461c907bc2b7ad" @@ -1382,6 +1400,22 @@ chalk@^2.0.0, chalk@^2.0.1: escape-string-regexp "^1.0.5" supports-color "^4.0.0" +character-entities-html4@^1.0.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/character-entities-html4/-/character-entities-html4-1.1.1.tgz#359a2a4a0f7e29d3dc2ac99bdbe21ee39438ea50" + +character-entities-legacy@^1.0.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/character-entities-legacy/-/character-entities-legacy-1.1.1.tgz#f40779df1a101872bb510a3d295e1fccf147202f" + +character-entities@^1.0.0: + version "1.2.1" + resolved "https://registry.yarnpkg.com/character-entities/-/character-entities-1.2.1.tgz#f76871be5ef66ddb7f8f8e3478ecc374c27d6dca" + +character-reference-invalid@^1.0.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/character-reference-invalid/-/character-reference-invalid-1.1.1.tgz#942835f750e4ec61a308e60c2ef8cc1011202efc" + charenc@~0.0.1: version "0.0.2" resolved "https://registry.yarnpkg.com/charenc/-/charenc-0.0.2.tgz#c0a1d2f3a7092e03774bfa83f14c0fc5790a8667" @@ -1496,6 +1530,10 @@ code-push@1.11.2-beta: superagent-proxy "^1.0.0" yazl "^2.4.1" +collapse-white-space@^1.0.0: + version "1.0.3" + resolved "https://registry.yarnpkg.com/collapse-white-space/-/collapse-white-space-1.0.3.tgz#4b906f670e5a963a87b76b0e1689643341b6023c" + color-convert@^1.9.0: version "1.9.0" resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.0.tgz#1accf97dd739b983bf994d56fec8f95853641b7a" @@ -1868,6 +1906,12 @@ debug@2.3.3: dependencies: ms "0.7.2" +debug@^2.1.3: + version "2.6.9" + resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" + dependencies: + ms "2.0.0" + decamelize@^1.0.0, decamelize@^1.1.1, decamelize@^1.1.2: version "1.2.0" resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" @@ -1955,6 +1999,17 @@ diff@^3.0.0: version "3.3.0" resolved "https://registry.yarnpkg.com/diff/-/diff-3.3.0.tgz#056695150d7aa93237ca7e378ac3b1682b7963b9" +doctoc@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/doctoc/-/doctoc-1.3.0.tgz#7f0839851dd58c808a2cae55d9504e012d08ee30" + dependencies: + anchor-markdown-header "^0.5.5" + htmlparser2 "~3.9.2" + markdown-to-ast "~3.4.0" + minimist "~1.2.0" + underscore "~1.8.3" + update-section "^0.3.0" + doctrine@1.5.0: version "1.5.0" resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-1.5.0.tgz#379dce730f6166f76cefa4e6707a159b02c5a6fa" @@ -2031,6 +2086,10 @@ emoji-regex@^6.1.0: version "6.5.1" resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-6.5.1.tgz#9baea929b155565c11ea41c6626eaa65cef992c2" +emoji-regex@~6.1.0: + version "6.1.3" + resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-6.1.3.tgz#ec79a3969b02d2ecf2b72254279bf99bc7a83932" + encoding@^0.1.11: version "0.1.12" resolved "https://registry.yarnpkg.com/encoding/-/encoding-0.1.12.tgz#538b66f3ee62cd1ab51ec323829d1f9480c74beb" @@ -3044,6 +3103,17 @@ htmlparser2-without-node-native@^3.9.0: inherits "^2.0.1" readable-stream "^2.0.2" +htmlparser2@~3.9.2: + version "3.9.2" + resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-3.9.2.tgz#1bdf87acca0f3f9e53fa4fcceb0f4b4cbb00b338" + dependencies: + domelementtype "^1.3.0" + domhandler "^2.3.0" + domutils "^1.5.1" + entities "^1.1.1" + inherits "^2.0.1" + readable-stream "^2.0.2" + http-errors@1.6.1: version "1.6.1" resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.6.1.tgz#5f8b8ed98aca545656bf572997387f904a722257" @@ -3237,6 +3307,17 @@ ip@^1.1.4, ip@^1.1.5: version "1.1.5" resolved "https://registry.yarnpkg.com/ip/-/ip-1.1.5.tgz#bdded70114290828c0a039e72ef25f5aaec4354a" +is-alphabetical@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-alphabetical/-/is-alphabetical-1.0.1.tgz#c77079cc91d4efac775be1034bf2d243f95e6f08" + +is-alphanumerical@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-alphanumerical/-/is-alphanumerical-1.0.1.tgz#dfb4aa4d1085e33bdb61c2dee9c80e9c6c19f53b" + dependencies: + is-alphabetical "^1.0.0" + is-decimal "^1.0.0" + is-arrayish@^0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" @@ -3271,6 +3352,10 @@ is-date-object@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.1.tgz#9aa20eb6aeebbff77fbd33e74ca01b33581d3a16" +is-decimal@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-decimal/-/is-decimal-1.0.1.tgz#f5fb6a94996ad9e8e3761fbfbd091f1fca8c4e82" + is-dotfile@^1.0.0: version "1.0.3" resolved "https://registry.yarnpkg.com/is-dotfile/-/is-dotfile-1.0.3.tgz#a6a2f32ffd2dfb04f5ca25ecd0f6b83cf798a1e1" @@ -3311,6 +3396,10 @@ is-glob@^2.0.0, is-glob@^2.0.1: dependencies: is-extglob "^1.0.0" +is-hexadecimal@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-hexadecimal/-/is-hexadecimal-1.0.1.tgz#6e084bbc92061fbb0971ec58b6ce6d404e24da69" + is-my-json-valid@^2.10.0: version "2.16.0" resolved "https://registry.yarnpkg.com/is-my-json-valid/-/is-my-json-valid-2.16.0.tgz#f079dd9bfdae65ee2038aae8acbc86ab109e3693" @@ -4152,6 +4241,10 @@ log-update@^1.0.2: ansi-escapes "^1.0.0" cli-cursor "^1.0.2" +longest-streak@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/longest-streak/-/longest-streak-1.0.0.tgz#d06597c4d4c31b52ccb1f5d8f8fe7148eafd6965" + longest@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/longest/-/longest-1.0.1.tgz#30a0b2da38f73770e8294a0d22e6625ed77d0097" @@ -4200,6 +4293,19 @@ map-obj@^1.0.0, map-obj@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/map-obj/-/map-obj-1.0.1.tgz#d933ceb9205d82bdcf4886f6742bdc2b4dea146d" +markdown-table@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/markdown-table/-/markdown-table-0.4.0.tgz#890c2c1b3bfe83fb00e4129b8e4cfe645270f9d1" + +markdown-to-ast@~3.4.0: + version "3.4.0" + resolved "https://registry.yarnpkg.com/markdown-to-ast/-/markdown-to-ast-3.4.0.tgz#0e2cba81390b0549a9153ec3b0d915b61c164be7" + dependencies: + debug "^2.1.3" + remark "^5.0.1" + structured-source "^3.0.2" + traverse "^0.6.6" + marked-terminal@^1.6.2: version "1.7.0" resolved "https://registry.yarnpkg.com/marked-terminal/-/marked-terminal-1.7.0.tgz#c8c460881c772c7604b64367007ee5f77f125904" @@ -4376,7 +4482,7 @@ minimist@0.0.8, minimist@~0.0.1: version "0.0.8" resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d" -minimist@^1.1.0, minimist@^1.1.1, minimist@^1.1.3, minimist@^1.2.0: +minimist@^1.1.0, minimist@^1.1.1, minimist@^1.1.3, minimist@^1.2.0, minimist@~1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284" @@ -4780,6 +4886,17 @@ parse-diff@^0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/parse-diff/-/parse-diff-0.4.0.tgz#9ce35bcce8fc0b7c58f46d71113394fc0b4982dd" +parse-entities@^1.0.2: + version "1.1.1" + resolved "https://registry.yarnpkg.com/parse-entities/-/parse-entities-1.1.1.tgz#8112d88471319f27abae4d64964b122fe4e1b890" + dependencies: + character-entities "^1.0.0" + character-entities-legacy "^1.0.0" + character-reference-invalid "^1.0.0" + is-alphanumerical "^1.0.0" + is-decimal "^1.0.0" + is-hexadecimal "^1.0.0" + parse-glob@^3.0.4: version "3.0.4" resolved "https://registry.yarnpkg.com/parse-glob/-/parse-glob-3.0.4.tgz#b2c376cfb11f35513badd173ef0bb6e3a388391c" @@ -5655,6 +5772,41 @@ regjsparser@^0.1.4: dependencies: jsesc "~0.5.0" +remark-parse@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/remark-parse/-/remark-parse-1.1.0.tgz#c3ca10f9a8da04615c28f09aa4e304510526ec21" + dependencies: + collapse-white-space "^1.0.0" + extend "^3.0.0" + parse-entities "^1.0.2" + repeat-string "^1.5.4" + trim "0.0.1" + trim-trailing-lines "^1.0.0" + unherit "^1.0.4" + unist-util-remove-position "^1.0.0" + vfile-location "^2.0.0" + +remark-stringify@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/remark-stringify/-/remark-stringify-1.1.0.tgz#a7105e25b9ee2bf9a49b75d2c423f11b06ae2092" + dependencies: + ccount "^1.0.0" + extend "^3.0.0" + longest-streak "^1.0.0" + markdown-table "^0.4.0" + parse-entities "^1.0.2" + repeat-string "^1.5.4" + stringify-entities "^1.0.1" + unherit "^1.0.4" + +remark@^5.0.1: + version "5.1.0" + resolved "https://registry.yarnpkg.com/remark/-/remark-5.1.0.tgz#cb463bd3dbcb4b99794935eee1cf71d7a8e3068c" + dependencies: + remark-parse "^1.1.0" + remark-stringify "^1.1.0" + unified "^4.1.1" + remove-trailing-separator@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/remove-trailing-separator/-/remove-trailing-separator-1.0.2.tgz#69b062d978727ad14dc6b56ba4ab772fd8d70511" @@ -5663,7 +5815,7 @@ repeat-element@^1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/repeat-element/-/repeat-element-1.1.2.tgz#ef089a178d1483baae4d93eb98b4f9e4e11d990a" -repeat-string@^1.5.2: +repeat-string@^1.5.2, repeat-string@^1.5.4: version "1.6.1" resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637" @@ -6199,6 +6351,15 @@ string_decoder@~1.0.3: dependencies: safe-buffer "~5.1.0" +stringify-entities@^1.0.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/stringify-entities/-/stringify-entities-1.3.1.tgz#b150ec2d72ac4c1b5f324b51fb6b28c9cdff058c" + dependencies: + character-entities-html4 "^1.0.0" + character-entities-legacy "^1.0.0" + is-alphanumerical "^1.0.0" + is-hexadecimal "^1.0.0" + stringstream@~0.0.4: version "0.0.5" resolved "https://registry.yarnpkg.com/stringstream/-/stringstream-0.0.5.tgz#4e484cd4de5a0bbbee18e46307710a8a81621878" @@ -6249,6 +6410,12 @@ strip-json-comments@~2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" +structured-source@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/structured-source/-/structured-source-3.0.2.tgz#dd802425e0f53dc4a6e7aca3752901a1ccda7af5" + dependencies: + boundary "^1.0.1" + superagent-proxy@^1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/superagent-proxy/-/superagent-proxy-1.0.2.tgz#92d3660578f618ed43a82cf8cac799fe2938ba2d" @@ -6430,6 +6597,10 @@ tr46@~0.0.3: version "0.0.3" resolved "https://registry.yarnpkg.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a" +traverse@^0.6.6: + version "0.6.6" + resolved "https://registry.yarnpkg.com/traverse/-/traverse-0.6.6.tgz#cbdf560fd7b9af632502fed40f918c157ea97137" + tree-kill@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/tree-kill/-/tree-kill-1.1.0.tgz#c963dcf03722892ec59cba569e940b71954d1729" @@ -6452,6 +6623,18 @@ trim-right@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/trim-right/-/trim-right-1.0.1.tgz#cb2e1203067e0c8de1f614094b9fe45704ea6003" +trim-trailing-lines@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/trim-trailing-lines/-/trim-trailing-lines-1.1.0.tgz#7aefbb7808df9d669f6da2e438cac8c46ada7684" + +trim@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/trim/-/trim-0.0.1.tgz#5858547f6b290757ee95cccc666fb50084c460dd" + +trough@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/trough/-/trough-1.0.1.tgz#a9fd8b0394b0ae8fff82e0633a0a36ccad5b5f86" + tryit@^1.0.1: version "1.0.3" resolved "https://registry.yarnpkg.com/tryit/-/tryit-1.0.3.tgz#393be730a9446fd1ead6da59a014308f36c289cb" @@ -6528,10 +6711,46 @@ ultron@~1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/ultron/-/ultron-1.1.0.tgz#b07a2e6a541a815fc6a34ccd4533baec307ca864" +underscore@~1.8.3: + version "1.8.3" + resolved "https://registry.yarnpkg.com/underscore/-/underscore-1.8.3.tgz#4f3fb53b106e6097fcf9cb4109f2a5e9bdfa5022" + +unherit@^1.0.4: + version "1.1.0" + resolved "https://registry.yarnpkg.com/unherit/-/unherit-1.1.0.tgz#6b9aaedfbf73df1756ad9e316dd981885840cd7d" + dependencies: + inherits "^2.0.1" + xtend "^4.0.1" + +unified@^4.1.1: + version "4.2.1" + resolved "https://registry.yarnpkg.com/unified/-/unified-4.2.1.tgz#76ff43aa8da430f6e7e4a55c84ebac2ad2cfcd2e" + dependencies: + bail "^1.0.0" + extend "^3.0.0" + has "^1.0.1" + once "^1.3.3" + trough "^1.0.0" + vfile "^1.0.0" + +unist-util-remove-position@^1.0.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/unist-util-remove-position/-/unist-util-remove-position-1.1.1.tgz#5a85c1555fc1ba0c101b86707d15e50fa4c871bb" + dependencies: + unist-util-visit "^1.1.0" + +unist-util-visit@^1.1.0: + version "1.1.3" + resolved "https://registry.yarnpkg.com/unist-util-visit/-/unist-util-visit-1.1.3.tgz#ec268e731b9d277a79a5b5aa0643990e405d600b" + unpipe@1.0.0, unpipe@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" +update-section@^0.3.0: + version "0.3.3" + resolved "https://registry.yarnpkg.com/update-section/-/update-section-0.3.3.tgz#458f17820d37820dc60e20b86d94391b00123158" + user-home@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/user-home/-/user-home-1.1.1.tgz#2b5be23a32b63a7c9deb8d0f28d485724a3df190" @@ -6594,6 +6813,14 @@ verror@1.10.0: core-util-is "1.0.2" extsprintf "^1.2.0" +vfile-location@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/vfile-location/-/vfile-location-2.0.2.tgz#d3675c59c877498e492b4756ff65e4af1a752255" + +vfile@^1.0.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/vfile/-/vfile-1.4.0.tgz#c0fd6fa484f8debdb771f68c31ed75d88da97fe7" + vhost@~3.0.1: version "3.0.2" resolved "https://registry.yarnpkg.com/vhost/-/vhost-3.0.2.tgz#2fb1decd4c466aa88b0f9341af33dc1aff2478d5" From 7ae9e8576d050b281e4e95c0e8e0d65e99ededa7 Mon Sep 17 00:00:00 2001 From: Antoine Boisadam Date: Tue, 16 Jan 2018 16:56:59 +0100 Subject: [PATCH 11/12] fix(test): Fix broken TravisCI tests --- src/components/issue-description.component.js | 126 ++++++++------- src/repository/screens/repository.screen.js | 148 +++++++++--------- 2 files changed, 144 insertions(+), 130 deletions(-) diff --git a/src/components/issue-description.component.js b/src/components/issue-description.component.js index 7d2d0c581..57fbd27a3 100644 --- a/src/components/issue-description.component.js +++ b/src/components/issue-description.component.js @@ -94,11 +94,11 @@ export class IssueDescription extends Component { }; navigateToCommitList = () => { - const { commits } = this.props; + const { commits, locale } = this.props; if (commits.length > 1) { this.props.navigation.navigate('CommitList', { - title: translate('repository.commitList.title', this.props.language), + title: translate('repository.commitList.title', locale), commits, }); } else { @@ -143,7 +143,7 @@ export class IssueDescription extends Component { return ( - {issue.repository_url && + {issue.repository_url && ( onRepositoryPress(issue.repository_url)} hideChevron - />} + /> + )} )} + !isPendingCheckMerge && ( + + ))} - {issue.pull_request && + {issue.pull_request && ( - {isPendingCommit && - } + {isPendingCommit && ( + + )} - {isPendingDiff && - } + {isPendingDiff && ( + + )} - {!isPendingCommit && + {!isPendingCommit && ( this.navigateToCommitList()} underlayColor={colors.greyLight} > {`${commits.length} commits`} - } + + )} {!isPendingDiff && - (lineAdditions !== 0 || lineDeletions !== 0) && - - navigation.navigate('PullDiff', { - title: translate('repository.pullDiff.title', locale), - locale, - diff, - })} - />} - } + (lineAdditions !== 0 || lineDeletions !== 0) && ( + + navigation.navigate('PullDiff', { + title: translate('repository.pullDiff.title', locale), + locale, + diff, + })} + /> + )} + + )} {issue.labels && - issue.labels.length > 0 && - - {this.renderLabelButtons(issue.labels)} - } + issue.labels.length > 0 && ( + + {this.renderLabelButtons(issue.labels)} + + )} {issue.assignees && - issue.assignees.length > 0 && - - - } + issue.assignees.length > 0 && ( + + + + )} {issue.pull_request && !isMerged && issue.state === 'open' && - userHasPushPermission && - -