import React from 'react'; import PropTypes from 'prop-types'; import yubikiri from 'yubikiri'; import {nullCommit} from '../models/commit'; import {nullBranch} from '../models/branch'; import ObserveModel from '../views/observe-model'; import GitTabController from '../controllers/git-tab-controller'; const DEFAULT_REPO_DATA = { repository: null, username: '', email: '', lastCommit: nullCommit, recentCommits: [], isMerging: false, isRebasing: false, hasUndoHistory: false, currentBranch: nullBranch, unstagedChanges: [], stagedChanges: [], mergeConflicts: [], workingDirectoryPath: null, mergeMessage: null, fetchInProgress: true, }; export default class GitTabContainer extends React.Component { static propTypes = { repository: PropTypes.object.isRequired, } fetchData = repository => { return yubikiri({ repository, username: repository.getConfig('user.name').then(n => n || ''), email: repository.getConfig('user.email').then(n => n || ''), lastCommit: repository.getLastCommit(), recentCommits: repository.getRecentCommits({max: 10}), isMerging: repository.isMerging(), isRebasing: repository.isRebasing(), hasUndoHistory: repository.hasDiscardHistory(), currentBranch: repository.getCurrentBranch(), unstagedChanges: repository.getUnstagedChanges(), stagedChanges: repository.getStagedChanges(), mergeConflicts: repository.getMergeConflicts(), workingDirectoryPath: repository.getWorkingDirectoryPath(), mergeMessage: async query => { const isMerging = await query.isMerging; return isMerging ? repository.getMergeMessage() : null; }, fetchInProgress: false, }); } render() { return ( <ObserveModel model={this.props.repository} fetchData={this.fetchData}> {data => { const dataProps = data || DEFAULT_REPO_DATA; return ( <GitTabController {...dataProps} {...this.props} repositoryDrift={this.props.repository !== dataProps.repository} /> ); }} </ObserveModel> ); } }