From e47c5dfb3541b76c0acd1046deac878dc406c45d Mon Sep 17 00:00:00 2001 From: Alejandro Nanez Date: Sat, 15 Jul 2017 11:36:17 -0500 Subject: [PATCH 1/7] wip --- src/api/index.js | 16 ++++++++++++ src/repository/repository.action.js | 28 ++++++++++++++++++++- src/repository/repository.reducer.js | 21 +++++++++++++++- src/repository/repository.type.js | 1 + src/repository/screens/repository.screen.js | 4 +-- 5 files changed, 66 insertions(+), 4 deletions(-) diff --git a/src/api/index.js b/src/api/index.js index 16499fdcd..127f15590 100644 --- a/src/api/index.js +++ b/src/api/index.js @@ -258,6 +258,22 @@ export const fetchForkRepo = ( ); }; +export const watchRepo = ( + isSubscribed, + owner, + repo, + accessToken +) => { + const ENDPOINT = `https://api.github.com/repos/${owner}/${repo}/subscription`; + + return fetch( + ENDPOINT, + accessTokenParametersPUT(accessToken, { + subscribed: !isSubscribed + }) + ) +}; + export const fetchChangeFollowStatus = (user, isFollowing, accessToken) => { const ENDPOINT = `https://api.github.com/user/following/${user}`; diff --git a/src/repository/repository.action.js b/src/repository/repository.action.js index e3e8dcf27..b1675c7f2 100644 --- a/src/repository/repository.action.js +++ b/src/repository/repository.action.js @@ -12,7 +12,8 @@ import { SEARCH_OPEN_ISSUES, SEARCH_CLOSED_ISSUES, SEARCH_OPEN_PULLS, - SEARCH_CLOSED_PULLS + SEARCH_CLOSED_PULLS, + SUBSCRIBED_REPO_STATUS } from "./repository.type"; import { @@ -202,6 +203,31 @@ export const changeStarStatusRepo = (owner, repo, starred) => { }; }; +export const watchRepo = (owner, repo) => (dispatch, getState) => { + const accessToken = getState().auth.accessToken; + const isSubscribed = getState().auth.repository.subscribed; + // get current subscribed status from store and then "flip it" + // https://developer.github.com/v3/activity/watching/#set-a-repository-subscription + // we should pass true for sub and false for unsub + + dispatch({ + type: SUBSCRIBED_REPO_STATUS.PENDING + }); + + return watchRepo(isSubscribed, owner, repo, accessToken) + .then(data => data.json()) + .then(() => { + dispatch({ + type: SUBSCRIBED_REPO_STATUS.SUCCESS + }); + }) + .catch(() => { + dispatch({ + type: SUBSCRIBED_REPO_STATUS.ERROR + }); + }) +} + export const forkRepo = (owner, repo) => { return (dispatch, getState) => { const accessToken = getState().auth.accessToken; diff --git a/src/repository/repository.reducer.js b/src/repository/repository.reducer.js index cb45e2524..627ccab9c 100644 --- a/src/repository/repository.reducer.js +++ b/src/repository/repository.reducer.js @@ -12,7 +12,8 @@ import { SEARCH_OPEN_ISSUES, SEARCH_CLOSED_ISSUES, SEARCH_OPEN_PULLS, - SEARCH_CLOSED_PULLS + SEARCH_CLOSED_PULLS, + SUBSCRIBED_REPO_STATUS } from "./repository.type"; const initialState = { @@ -45,6 +46,7 @@ const initialState = { isPendingSearchOpenPulls: false, isPendingSearchClosedPulls: false, isPendingFork: false, + isPendingSubscribe: false, error: "" }; @@ -171,6 +173,23 @@ export const repositoryReducer = (state = initialState, action = {}) => { ...state, isPendingFork: false }; + case SUBSCRIBED_REPO_STATUS.PENDING: + return { + ...state, + isPendingSubscribe: true + } + case SUBSCRIBED_REPO_STATUS.SUCCESS: + return { + ...state, + subscribed: true, + isPendingSubscribe: false + } + case SUBSCRIBED_REPO_STATUS.ERROR: + return { + ...state, + isPendingCheckSubscribed: false, + isPendingSubscribe: false + } case CHANGE_STAR_STATUS.PENDING: return { ...state, diff --git a/src/repository/repository.type.js b/src/repository/repository.type.js index 570516e42..c58c376a6 100644 --- a/src/repository/repository.type.js +++ b/src/repository/repository.type.js @@ -20,3 +20,4 @@ export const SEARCH_OPEN_ISSUES = createActionSet("SEARCH_OPEN_ISSUES"); export const SEARCH_CLOSED_ISSUES = createActionSet("SEARCH_CLOSED_ISSUES"); export const SEARCH_OPEN_PULLS = createActionSet("SEARCH_OPEN_PULLS"); export const SEARCH_CLOSED_PULLS = createActionSet("SEARCH_CLOSED_PULLS"); +export const SUBSCRIBED_REPO_STATUS = createActionSet("SUBSCRIBED_REPO_STATUS"); diff --git a/src/repository/screens/repository.screen.js b/src/repository/screens/repository.screen.js index 10428208c..691afe730 100644 --- a/src/repository/screens/repository.screen.js +++ b/src/repository/screens/repository.screen.js @@ -34,6 +34,7 @@ const mapStateToProps = state => ({ issues: state.repository.issues, starred: state.repository.starred, forked: state.repository.forked, + subscribed: state.repository.subscribed, isPendingRepository: state.repository.isPendingRepository, isPendingContributors: state.repository.isPendingContributors, isPendingIssues: state.repository.isPendingIssues, @@ -45,8 +46,7 @@ const mapDispatchToProps = dispatch => ({ getRepositoryInfo: url => dispatch(getRepositoryInfo(url)), getContributors: url => dispatch(getContributors(url)), getIssues: url => dispatch(getIssues(url)), - changeStarStatusRepo: (owner, repo, starred) => - dispatch(changeStarStatusRepo(owner, repo, starred)), + changeStarStatusRepo: (owner, repo, starred) => dispatch(changeStarStatusRepo(owner, repo, starred)), forkRepo: (owner, repo) => dispatch(forkRepo(owner, repo)) }); From 3967dd348e4c719de9d82fdce2057b9fc00c2657 Mon Sep 17 00:00:00 2001 From: Alejandro Nanez Date: Sat, 15 Jul 2017 11:57:16 -0500 Subject: [PATCH 2/7] update deps --- yarn.lock | 146 ++++++++++++++++++++++-------------------------------- 1 file changed, 60 insertions(+), 86 deletions(-) diff --git a/yarn.lock b/yarn.lock index d8e64547b..c3fdbafcb 100644 --- a/yarn.lock +++ b/yarn.lock @@ -63,6 +63,13 @@ ajv@^4.7.0: co "^4.6.0" json-stable-stringify "^1.0.1" +ajv@^4.9.1: + version "4.11.8" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-4.11.8.tgz#82ffb02b29e662ae53bdc20af15947706739c536" + dependencies: + co "^4.6.0" + json-stable-stringify "^1.0.1" + align-text@^0.1.1, align-text@^0.1.3: version "0.1.4" resolved "https://registry.yarnpkg.com/align-text/-/align-text-0.1.4.tgz#0cd90a561093f35d0a99256c22b7069433fad117" @@ -318,30 +325,6 @@ babel-core@^6.0.0, babel-core@^6.24.1, babel-core@^6.7.2: slash "^1.0.0" source-map "^0.5.0" -babel-core@^6.24.1: - version "6.25.0" - resolved "https://registry.yarnpkg.com/babel-core/-/babel-core-6.25.0.tgz#7dd42b0463c742e9d5296deb3ec67a9322dad729" - dependencies: - babel-code-frame "^6.22.0" - babel-generator "^6.25.0" - babel-helpers "^6.24.1" - babel-messages "^6.23.0" - babel-register "^6.24.1" - babel-runtime "^6.22.0" - babel-template "^6.25.0" - babel-traverse "^6.25.0" - babel-types "^6.25.0" - babylon "^6.17.2" - convert-source-map "^1.1.0" - debug "^2.1.1" - json5 "^0.5.0" - lodash "^4.2.0" - minimatch "^3.0.2" - path-is-absolute "^1.0.0" - private "^0.1.6" - slash "^1.0.0" - source-map "^0.5.0" - babel-eslint@7.1.1, babel-eslint@^7.1.1: version "7.1.1" resolved "https://registry.yarnpkg.com/babel-eslint/-/babel-eslint-7.1.1.tgz#8a6a884f085aa7060af69cfc77341c2f99370fb2" @@ -365,19 +348,6 @@ babel-generator@^6.18.0, babel-generator@^6.24.1, babel-generator@^6.25.0: source-map "^0.5.0" trim-right "^1.0.1" -babel-generator@^6.25.0: - version "6.25.0" - resolved "https://registry.yarnpkg.com/babel-generator/-/babel-generator-6.25.0.tgz#33a1af70d5f2890aeb465a4a7793c1df6a9ea9fc" - dependencies: - babel-messages "^6.23.0" - babel-runtime "^6.22.0" - babel-types "^6.25.0" - detect-indent "^4.0.0" - jsesc "^1.3.0" - lodash "^4.2.0" - source-map "^0.5.0" - trim-right "^1.0.1" - babel-helper-builder-react-jsx@^6.22.0: version "6.22.0" resolved "https://registry.yarnpkg.com/babel-helper-builder-react-jsx/-/babel-helper-builder-react-jsx-6.22.0.tgz#aafb31913e47761fd4d0b6987756a144a65fca0d" @@ -541,13 +511,6 @@ babel-helper-replace-supers@^6.24.1: babel-traverse "^6.24.1" babel-types "^6.24.1" -babel-helpers@^6.22.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-helpers/-/babel-helpers-6.22.0.tgz#d275f55f2252b8101bff07bc0c556deda657392c" - dependencies: - babel-runtime "^6.22.0" - babel-template "^6.24.1" - babel-helpers@^6.24.1: version "6.24.1" resolved "https://registry.yarnpkg.com/babel-helpers/-/babel-helpers-6.24.1.tgz#3471de9caec388e5c850e597e58a26ddf37602b2" @@ -569,12 +532,6 @@ babel-messages@^6.22.0, babel-messages@^6.23.0: dependencies: babel-runtime "^6.22.0" -babel-messages@^6.23.0: - version "6.23.0" - resolved "https://registry.yarnpkg.com/babel-messages/-/babel-messages-6.23.0.tgz#f3cdf4703858035b2a2951c6ec5edf6c62f2630e" - dependencies: - babel-runtime "^6.22.0" - babel-plugin-check-es2015-constants@^6.22.0, babel-plugin-check-es2015-constants@^6.5.0, babel-plugin-check-es2015-constants@^6.7.2, babel-plugin-check-es2015-constants@^6.8.0: version "6.22.0" resolved "https://registry.yarnpkg.com/babel-plugin-check-es2015-constants/-/babel-plugin-check-es2015-constants-6.22.0.tgz#35157b101426fd2ffd3da3f75c7d1e91835bbf8a" @@ -1196,20 +1153,9 @@ babel-preset-react-native@1.9.1: babel-plugin-transform-regenerator "^6.5.0" react-transform-hmr "^1.0.4" -babel-preset-react@^6.24.1: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-preset-react/-/babel-preset-react-6.24.1.tgz#ba69dfaea45fc3ec639b6a4ecea6e17702c91380" - dependencies: - babel-plugin-syntax-jsx "^6.3.13" - babel-plugin-transform-react-display-name "^6.23.0" - babel-plugin-transform-react-jsx "^6.24.1" - babel-plugin-transform-react-jsx-self "^6.22.0" - babel-plugin-transform-react-jsx-source "^6.22.0" - babel-preset-flow "^6.23.0" - -babel-register@^6.18.0, babel-register@^6.22.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-register/-/babel-register-6.22.0.tgz#a61dd83975f9ca4a9e7d6eff3059494cd5ea4c63" +babel-preset-react-native@^1.9.1, babel-preset-react-native@^1.9.2: + version "1.9.2" + resolved "https://registry.yarnpkg.com/babel-preset-react-native/-/babel-preset-react-native-1.9.2.tgz#b22addd2e355ff3b39671b79be807e52dfa145f2" dependencies: babel-plugin-check-es2015-constants "^6.5.0" babel-plugin-react-transform "2.0.2" @@ -1241,17 +1187,16 @@ babel-register@^6.18.0, babel-register@^6.22.0: babel-plugin-transform-regenerator "^6.5.0" react-transform-hmr "^1.0.4" -babel-register@^6.24.1: +babel-preset-react@^6.24.1: version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-register/-/babel-register-6.24.1.tgz#7e10e13a2f71065bdfad5a1787ba45bca6ded75f" + resolved "https://registry.yarnpkg.com/babel-preset-react/-/babel-preset-react-6.24.1.tgz#ba69dfaea45fc3ec639b6a4ecea6e17702c91380" dependencies: - babel-core "^6.24.1" - babel-runtime "^6.22.0" - core-js "^2.4.0" - home-or-tmp "^2.0.0" - lodash "^4.2.0" - mkdirp "^0.5.1" - source-map-support "^0.4.2" + babel-plugin-syntax-jsx "^6.3.13" + babel-plugin-transform-react-display-name "^6.23.0" + babel-plugin-transform-react-jsx "^6.24.1" + babel-plugin-transform-react-jsx-self "^6.22.0" + babel-plugin-transform-react-jsx-source "^6.22.0" + babel-preset-flow "^6.23.0" babel-register@^6.24.1: version "6.24.1" @@ -1265,7 +1210,7 @@ babel-register@^6.24.1: mkdirp "^0.5.1" source-map-support "^0.4.2" -babel-runtime@^6.0.0, babel-runtime@^6.18.0, babel-runtime@^6.20.0, babel-runtime@^6.22.0: +babel-runtime@^6.0.0, babel-runtime@^6.18.0, babel-runtime@^6.22.0: version "6.22.0" resolved "https://registry.yarnpkg.com/babel-runtime/-/babel-runtime-6.22.0.tgz#1cf8b4ac67c77a4ddb0db2ae1f74de52ac4ca611" dependencies: @@ -1284,9 +1229,9 @@ babel-template@^6.16.0, babel-template@^6.22.0: resolved "https://registry.yarnpkg.com/babel-template/-/babel-template-6.22.0.tgz#403d110905a4626b317a2a1fcb8f3b73204b2edb" dependencies: babel-runtime "^6.22.0" - babel-traverse "^6.25.0" - babel-types "^6.25.0" - babylon "^6.17.2" + babel-traverse "^6.22.0" + babel-types "^6.22.0" + babylon "^6.11.0" lodash "^4.2.0" babel-template@^6.24.1, babel-template@^6.25.0: @@ -1299,15 +1244,15 @@ babel-template@^6.24.1, babel-template@^6.25.0: babylon "^6.17.2" lodash "^4.2.0" -babel-traverse@^6.15.0, babel-traverse@^6.18.0, babel-traverse@^6.21.0, babel-traverse@^6.22.0, babel-traverse@^6.22.1: +babel-traverse@^6.15.0, babel-traverse@^6.18.0, babel-traverse@^6.22.0: version "6.22.1" resolved "https://registry.yarnpkg.com/babel-traverse/-/babel-traverse-6.22.1.tgz#3b95cd6b7427d6f1f757704908f2fc9748a5f59f" dependencies: babel-code-frame "^6.22.0" - babel-messages "^6.23.0" + babel-messages "^6.22.0" babel-runtime "^6.22.0" - babel-types "^6.25.0" - babylon "^6.17.2" + babel-types "^6.22.0" + babylon "^6.15.0" debug "^2.2.0" globals "^9.0.0" invariant "^2.2.0" @@ -1327,7 +1272,7 @@ babel-traverse@^6.24.1, babel-traverse@^6.25.0: invariant "^2.2.0" lodash "^4.2.0" -babel-types@^6.15.0, babel-types@^6.18.0, babel-types@^6.19.0, babel-types@^6.21.0, babel-types@^6.22.0: +babel-types@^6.15.0, babel-types@^6.18.0, babel-types@^6.19.0, babel-types@^6.22.0: version "6.22.0" resolved "https://registry.yarnpkg.com/babel-types/-/babel-types-6.22.0.tgz#2a447e8d0ea25d2512409e4175479fd78cc8b1db" dependencies: @@ -1345,11 +1290,11 @@ babel-types@^6.24.1, babel-types@^6.25.0: lodash "^4.2.0" to-fast-properties "^1.0.1" -babylon@^6.11.0, babylon@^6.13.0, babylon@^6.15.0, babylon@^6.16.1: +babylon@^6.13.0: version "6.17.2" resolved "https://registry.yarnpkg.com/babylon/-/babylon-6.17.2.tgz#201d25ef5f892c41bae49488b08db0dd476e9f5c" -babylon@^6.17.2: +babylon@^6.17.0, babylon@^6.17.2: version "6.17.4" resolved "https://registry.yarnpkg.com/babylon/-/babylon-6.17.4.tgz#3e8b7402b88d22c3423e137a1577883b15ff869a" @@ -1535,6 +1480,10 @@ caseless@~0.11.0: version "0.11.0" resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.11.0.tgz#715b96ea9841593cc33067923f5ec60ebda4f7d7" +caseless@~0.12.0: + version "0.12.0" + resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" + center-align@^0.1.1: version "0.1.3" resolved "https://registry.yarnpkg.com/center-align/-/center-align-0.1.3.tgz#aa0d32629b6ee972200411cbd4461c907bc2b7ad" @@ -2772,6 +2721,10 @@ handlebars@^4.0.3: optionalDependencies: uglify-js "^2.6" +har-schema@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-1.0.5.tgz#d263135f43307c02c602afc8fe95970c0151369e" + har-validator@~2.0.6: version "2.0.6" resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-2.0.6.tgz#cdcbc08188265ad119b6a5a7c8ab70eecfb5d27d" @@ -2781,6 +2734,13 @@ har-validator@~2.0.6: is-my-json-valid "^2.12.4" pinkie-promise "^2.0.0" +har-validator@~4.2.1: + version "4.2.1" + resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-4.2.1.tgz#33481d0f1bbff600dd203d75812a6a5fba002e2a" + dependencies: + ajv "^4.9.1" + har-schema "^1.0.5" + has-ansi@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/has-ansi/-/has-ansi-2.0.0.tgz#34f5049ce1ecdf2b0649af3ef24e45ed35416d91" @@ -3738,7 +3698,7 @@ loose-envify@^1.0.0, loose-envify@^1.1.0, loose-envify@^1.3.1: dependencies: js-tokens "^3.0.0" -lowlight@^1.5.0, lowlight@^1.9.0: +lowlight@^1.5.0: version "1.9.0" resolved "https://registry.yarnpkg.com/lowlight/-/lowlight-1.9.0.tgz#6eccfb20f9125a56a82032083967998b5ba19905" dependencies: @@ -4262,6 +4222,10 @@ pegjs@^0.10.0: version "0.10.0" resolved "https://registry.yarnpkg.com/pegjs/-/pegjs-0.10.0.tgz#cf8bafae6eddff4b5a7efb185269eaaf4610ddbd" +performance-now@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-0.2.0.tgz#33ef30c5c77d4ea21c5a53869d91b56d8f2555e5" + pify@^2.0.0, pify@^2.3.0: version "2.3.0" resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" @@ -4376,6 +4340,10 @@ qs@~6.3.0: version "6.3.0" resolved "https://registry.yarnpkg.com/qs/-/qs-6.3.0.tgz#f403b264f23bc01228c74131b407f18d5ea5d442" +qs@~6.4.0: + version "6.4.0" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.4.0.tgz#13e26d28ad6b0ffaa91312cd3bf708ed351e7233" + query-string@^4.3.1: version "4.3.2" resolved "https://registry.yarnpkg.com/query-string/-/query-string-4.3.2.tgz#ec0fd765f58a50031a3968c2431386f8947a5cdd" @@ -4857,7 +4825,7 @@ replace-ext@0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/replace-ext/-/replace-ext-0.0.1.tgz#29bbd92078a739f0bcce2b4ee41e837953522924" -request@^2.55.0, request@^2.72.0, request@^2.79.0: +request@^2.55.0, request@^2.79.0: version "2.79.0" resolved "https://registry.yarnpkg.com/request/-/request-2.79.0.tgz#4dfe5bf6be8b8cdc37fcf93e04b65577722710de" dependencies: @@ -5443,6 +5411,12 @@ tsscmp@1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/tsscmp/-/tsscmp-1.0.5.tgz#7dc4a33af71581ab4337da91d85ca5427ebd9a97" +tunnel-agent@^0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd" + dependencies: + safe-buffer "^5.0.1" + tunnel-agent@~0.4.1: version "0.4.3" resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.4.3.tgz#6373db76909fe570e08d73583365ed828a74eeeb" From 78b54b49d8f0fb238b7d02cf94f1fe02abe86292 Mon Sep 17 00:00:00 2001 From: Alejandro Nanez Date: Sat, 15 Jul 2017 13:35:22 -0500 Subject: [PATCH 3/7] more wip --- src/repository/repository.action.js | 1 + 1 file changed, 1 insertion(+) diff --git a/src/repository/repository.action.js b/src/repository/repository.action.js index b1675c7f2..2aefc0be9 100644 --- a/src/repository/repository.action.js +++ b/src/repository/repository.action.js @@ -56,6 +56,7 @@ export const getRepository = url => { return fetchUrl(url, accessToken) .then(data => { + console.log(data); dispatch({ type: GET_REPOSITORY.SUCCESS, payload: data From 300075d9e0c88b018c4d141964fb56479c38dde8 Mon Sep 17 00:00:00 2001 From: Alejandro Nanez Date: Tue, 25 Jul 2017 20:12:18 -0500 Subject: [PATCH 4/7] Update lockfile --- yarn.lock | 86 +++++++++++++++++++++++++++++++++---------------------- 1 file changed, 52 insertions(+), 34 deletions(-) diff --git a/yarn.lock b/yarn.lock index 1553c0746..f656ec852 100644 --- a/yarn.lock +++ b/yarn.lock @@ -128,10 +128,10 @@ ansi-styles@^2.2.1: resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe" ansi-styles@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.1.0.tgz#09c202d5c917ec23188caa5c9cb9179cd9547750" + version "3.2.0" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.0.tgz#c159b8d5be0f9e5a6f346dab94f16ce022161b88" dependencies: - color-convert "^1.0.0" + color-convert "^1.9.0" ansi@^0.3.0, ansi@~0.3.1: version "0.3.1" @@ -1122,8 +1122,8 @@ big-integer@^1.6.7: resolved "https://registry.yarnpkg.com/big-integer/-/big-integer-1.6.23.tgz#e85d508220c74e3f43a4ce72eed51f3da4db94d1" binary-extensions@^1.0.0: - version "1.8.0" - resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-1.8.0.tgz#48ec8d16df4377eae5fa5884682480af4d95c774" + version "1.9.0" + resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-1.9.0.tgz#66506c16ce6f4d6928a5b3cd6a33ca41e941e37b" block-stream@*: version "0.0.9" @@ -1321,8 +1321,8 @@ ci-info@^1.0.0: resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-1.0.0.tgz#dc5285f2b4e251821683681c381c3388f46ec534" circular-json@^0.3.1: - version "0.3.1" - resolved "https://registry.yarnpkg.com/circular-json/-/circular-json-0.3.1.tgz#be8b36aefccde8b3ca7aa2d6afc07a37242c0d2d" + version "0.3.3" + resolved "https://registry.yarnpkg.com/circular-json/-/circular-json-0.3.3.tgz#815c99ea84f6809529d2f45791bdf82711352d66" clamp@^1.0.1: version "1.0.1" @@ -1411,7 +1411,7 @@ code-push@1.11.2-beta: superagent-proxy "^1.0.0" yazl "^2.4.1" -color-convert@^1.0.0: +color-convert@^1.9.0: version "1.9.0" resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.0.tgz#1accf97dd739b983bf994d56fec8f95853641b7a" dependencies: @@ -1690,7 +1690,7 @@ dateformat@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/dateformat/-/dateformat-2.0.0.tgz#2743e3abb5c3fc2462e527dca445e04e9f4dee17" -debug@2, debug@2.6.8, debug@^2.6.3, debug@^2.6.8: +debug@2, debug@2.6.8, debug@^2.1.1, debug@^2.2.0, debug@^2.6.3, debug@^2.6.8: version "2.6.8" resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.8.tgz#e731531ca2ede27d188222427da17821d68ff4fc" dependencies: @@ -1995,15 +1995,21 @@ escope@^3.6.0: esrecurse "^4.1.0" estraverse "^4.1.1" -eslint-config-airbnb-base@^11.2.0, eslint-config-airbnb-base@~11.2.0: +eslint-config-airbnb-base@^11.3.0: + version "11.3.1" + resolved "https://registry.yarnpkg.com/eslint-config-airbnb-base/-/eslint-config-airbnb-base-11.3.1.tgz#c0ab108c9beed503cb999e4c60f4ef98eda0ed30" + dependencies: + eslint-restricted-globals "^0.1.1" + +eslint-config-airbnb-base@~11.2.0: version "11.2.0" resolved "https://registry.yarnpkg.com/eslint-config-airbnb-base/-/eslint-config-airbnb-base-11.2.0.tgz#19a9dc4481a26f70904545ec040116876018f853" eslint-config-airbnb@^15.0.2: - version "15.0.2" - resolved "https://registry.yarnpkg.com/eslint-config-airbnb/-/eslint-config-airbnb-15.0.2.tgz#7b99fa421d0c15aee3310d647644315b02ea24da" + version "15.1.0" + resolved "https://registry.yarnpkg.com/eslint-config-airbnb/-/eslint-config-airbnb-15.1.0.tgz#fd432965a906e30139001ba830f58f73aeddae8e" dependencies: - eslint-config-airbnb-base "^11.2.0" + eslint-config-airbnb-base "^11.3.0" eslint-import-resolver-babel-module@^3.0.0: version "3.0.0" @@ -2071,6 +2077,10 @@ eslint-plugin-react@^7.1.0: has "^1.0.1" jsx-ast-utils "^1.4.1" +eslint-restricted-globals@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/eslint-restricted-globals/-/eslint-restricted-globals-0.1.1.tgz#35f0d5cbc64c2e3ed62e93b4b1a7af05ba7ed4d7" + eslint@^3.19.0: version "3.19.0" resolved "https://registry.yarnpkg.com/eslint/-/eslint-3.19.0.tgz#c8fc6201c7f40dd08941b87c085767386a679acc" @@ -2296,7 +2306,7 @@ fbjs-scripts@^0.7.0: semver "^5.1.0" through2 "^2.0.0" -fbjs@0.8.12, fbjs@^0.8.9: +fbjs@0.8.12: version "0.8.12" resolved "https://registry.yarnpkg.com/fbjs/-/fbjs-0.8.12.tgz#10b5d92f76d45575fd63a217d4ea02bea2f8ed04" dependencies: @@ -2308,6 +2318,18 @@ fbjs@0.8.12, fbjs@^0.8.9: setimmediate "^1.0.5" ua-parser-js "^0.7.9" +fbjs@^0.8.9: + version "0.8.13" + resolved "https://registry.yarnpkg.com/fbjs/-/fbjs-0.8.13.tgz#9fb9819077d40d88c989def88ad6f05fb0e91f57" + dependencies: + core-js "^1.0.0" + isomorphic-fetch "^2.1.1" + loose-envify "^1.0.0" + object-assign "^4.1.0" + promise "^7.1.1" + setimmediate "^1.0.5" + ua-parser-js "^0.7.9" + figures@^1.3.5, figures@^1.7.0: version "1.7.0" resolved "https://registry.yarnpkg.com/figures/-/figures-1.7.0.tgz#cbe1e3affcf1cd44b80cadfed28dc793a9701d2e" @@ -2740,8 +2762,8 @@ hoist-non-react-statics@^1.0.3: resolved "https://registry.yarnpkg.com/hoist-non-react-statics/-/hoist-non-react-statics-1.2.0.tgz#aa448cf0986d55cc40773b17174b7dd066cb7cfb" hoist-non-react-statics@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/hoist-non-react-statics/-/hoist-non-react-statics-2.2.0.tgz#b099ca82f3640b1244309c8a526a2bd60ad9d7d9" + version "2.2.1" + resolved "https://registry.yarnpkg.com/hoist-non-react-statics/-/hoist-non-react-statics-2.2.1.tgz#a7e41c760121d0abfc7a2339b331d29a26389e52" home-or-tmp@^2.0.0: version "2.0.0" @@ -2842,8 +2864,8 @@ indent-string@^2.1.0: repeating "^2.0.0" indent-string@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-3.1.0.tgz#08ff4334603388399b329e6b9538dc7a3cf5de7d" + version "3.2.0" + resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-3.2.0.tgz#4a5fd6d27cc332f37e5419a504dbb837105c9289" inflight@^1.0.4: version "1.0.6" @@ -2898,8 +2920,8 @@ inquirer@^0.12.0: through "^2.3.6" inquirer@^3.0.1, inquirer@^3.0.6: - version "3.2.0" - resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-3.2.0.tgz#45b44c2160c729d7578c54060b3eed94487bb42b" + version "3.2.1" + resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-3.2.1.tgz#06ceb0f540f45ca548c17d6840959878265fa175" dependencies: ansi-escapes "^2.0.0" chalk "^2.0.0" @@ -3924,7 +3946,7 @@ micromatch@^2.1.5, micromatch@^2.3.11: parse-glob "^3.0.4" regex-cache "^0.4.2" -"mime-db@>= 1.27.0 < 2": +"mime-db@>= 1.27.0 < 2", mime-db@~1.29.0: version "1.29.0" resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.29.0.tgz#48d26d235589651704ac5916ca06001914266878" @@ -3932,10 +3954,6 @@ mime-db@~1.23.0: version "1.23.0" resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.23.0.tgz#a31b4070adaea27d732ea333740a64d0ec9a6659" -mime-db@~1.27.0: - version "1.27.0" - resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.27.0.tgz#820f572296bbd20ec25ed55e5b5de869e5436eb1" - mime-types@2.1.11: version "2.1.11" resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.11.tgz#c259c471bda808a85d6cd193b430a5fae4473b3c" @@ -3943,10 +3961,10 @@ mime-types@2.1.11: mime-db "~1.23.0" mime-types@^2.1.12, mime-types@^2.1.3, mime-types@~2.1.11, mime-types@~2.1.15, mime-types@~2.1.6, mime-types@~2.1.7, mime-types@~2.1.9: - version "2.1.15" - resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.15.tgz#a4ebf5064094569237b8cf70046776d09fc92aed" + version "2.1.16" + resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.16.tgz#2b858a52e5ecd516db897ac2be87487830698e23" dependencies: - mime-db "~1.27.0" + mime-db "~1.29.0" mime@1.3.4: version "1.3.4" @@ -4062,8 +4080,8 @@ netmask@^1.0.6: resolved "https://registry.yarnpkg.com/netmask/-/netmask-1.0.6.tgz#20297e89d86f6f6400f250d9f4f6b4c1945fcd35" node-emoji@^1.4.1, node-emoji@^1.7.0: - version "1.8.0" - resolved "https://registry.yarnpkg.com/node-emoji/-/node-emoji-1.8.0.tgz#7add104f22e84dd8cf3b244107cacd7ef101ee79" + version "1.8.1" + resolved "https://registry.yarnpkg.com/node-emoji/-/node-emoji-1.8.1.tgz#6eec6bfb07421e2148c75c6bba72421f8530a826" dependencies: lodash.toarray "^4.4.0" @@ -5284,8 +5302,8 @@ sax@~1.1.1: resolved "https://registry.yarnpkg.com/sax/-/sax-1.1.6.tgz#5d616be8a5e607d54e114afae55b7eaf2fcc3240" "semver@2 || 3 || 4 || 5", semver@5.x, semver@^5.0.3, semver@^5.1.0, semver@^5.3.0: - version "5.3.0" - resolved "https://registry.yarnpkg.com/semver/-/semver-5.3.0.tgz#9b2ce5d3de02d17c6012ad326aa6b4d0cf54f94f" + version "5.4.1" + resolved "https://registry.yarnpkg.com/semver/-/semver-5.4.1.tgz#e059c09d8571f0540823733433505d3a2f00b18e" semver@~5.0.1: version "5.0.3" @@ -5654,8 +5672,8 @@ supports-color@^3.1.2, supports-color@^3.2.3: has-flag "^1.0.0" supports-color@^4.0.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-4.2.0.tgz#ad986dc7eb2315d009b4d77c8169c2231a684037" + version "4.2.1" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-4.2.1.tgz#65a4bb2631e90e02420dba5554c375a4754bb836" dependencies: has-flag "^2.0.0" From 81574062e67a9d18dea73d925744abc9eaeb1795 Mon Sep 17 00:00:00 2001 From: Alejandro Nanez Date: Sat, 29 Jul 2017 14:25:18 -0500 Subject: [PATCH 5/7] wip --- src/repository/repository.action.js | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/src/repository/repository.action.js b/src/repository/repository.action.js index 1c8a8df5b..478c1a39e 100644 --- a/src/repository/repository.action.js +++ b/src/repository/repository.action.js @@ -159,6 +159,15 @@ export const checkRepoStarred = url => { }; }; +// Check repo subscribed status +// export const checkRepoSubscribed = url => { +// return (dispatch, getState) => { +// const accessToken = getState().auth.accessToken; + +// dispatch({ type: GET}) +// } +// } + export const getRepositoryInfo = url => { return (dispatch, getState) => { return dispatch(getRepository(url)).then(() => { From 8a60b926252ea6b976796dafe865dadbe547f0f1 Mon Sep 17 00:00:00 2001 From: Alejandro Nanez Date: Sat, 29 Jul 2017 15:03:11 -0500 Subject: [PATCH 6/7] Checking if user is subscribed to a repo --- src/repository/repository.action.js | 31 +++++++++++++-------- src/repository/repository.reducer.js | 8 +++--- src/repository/repository.type.js | 4 ++- src/repository/screens/repository.screen.js | 5 ++++ 4 files changed, 32 insertions(+), 16 deletions(-) diff --git a/src/repository/repository.action.js b/src/repository/repository.action.js index 478c1a39e..531d293fa 100644 --- a/src/repository/repository.action.js +++ b/src/repository/repository.action.js @@ -23,7 +23,7 @@ import { SEARCH_CLOSED_ISSUES, SEARCH_OPEN_PULLS, SEARCH_CLOSED_PULLS, - SUBSCRIBED_REPO_STATUS, + GET_REPOSITORY_SUBSCRIBED_STATUS, } from './repository.type'; export const getRepository = url => { @@ -159,14 +159,17 @@ export const checkRepoStarred = url => { }; }; -// Check repo subscribed status -// export const checkRepoSubscribed = url => { -// return (dispatch, getState) => { -// const accessToken = getState().auth.accessToken; +export const checkRepoSubscribed = url => { + return (dispatch, getState) => { + const accessToken = getState().auth.accessToken; -// dispatch({ type: GET}) -// } -// } + dispatch({ type: GET_REPOSITORY_SUBSCRIBED_STATUS.PENDING }); + + fetchUrlNormal(url, accessToken) + .then(() => dispatch({ type: GET_REPOSITORY_SUBSCRIBED_STATUS.SUCCESS })) + .catch(() => dispatch({ type: GET_REPOSITORY_SUBSCRIBED_STATUS.ERROR })); + }; +}; export const getRepositoryInfo = url => { return (dispatch, getState) => { @@ -185,6 +188,12 @@ export const getRepositoryInfo = url => { `https://api.github.com/user/starred/${repo.owner.login}/${repo.name}` ) ); + dispatch( + checkRepoSubscribed( + `https://api.github.com/repos/${repo.owner + .login}/${repo.name}/subscription` + ) + ); }); }; }; @@ -219,19 +228,19 @@ export const watchRepo = (owner, repo) => (dispatch, getState) => { // we should pass true for sub and false for unsub dispatch({ - type: SUBSCRIBED_REPO_STATUS.PENDING, + type: GET_REPOSITORY_SUBSCRIBED_STATUS.PENDING, }); return watchRepo(isSubscribed, owner, repo, accessToken) .then(data => data.json()) .then(() => { dispatch({ - type: SUBSCRIBED_REPO_STATUS.SUCCESS, + type: GET_REPOSITORY_SUBSCRIBED_STATUS.SUCCESS, }); }) .catch(() => { dispatch({ - type: SUBSCRIBED_REPO_STATUS.ERROR, + type: GET_REPOSITORY_SUBSCRIBED_STATUS.ERROR, }); }); }; diff --git a/src/repository/repository.reducer.js b/src/repository/repository.reducer.js index bd4f6f4eb..20f45eee2 100644 --- a/src/repository/repository.reducer.js +++ b/src/repository/repository.reducer.js @@ -13,7 +13,7 @@ import { SEARCH_CLOSED_ISSUES, SEARCH_OPEN_PULLS, SEARCH_CLOSED_PULLS, - SUBSCRIBED_REPO_STATUS, + GET_REPOSITORY_SUBSCRIBED_STATUS, } from './repository.type'; const initialState = { @@ -174,18 +174,18 @@ export const repositoryReducer = (state = initialState, action = {}) => { ...state, isPendingFork: false, }; - case SUBSCRIBED_REPO_STATUS.PENDING: + case GET_REPOSITORY_SUBSCRIBED_STATUS.PENDING: return { ...state, isPendingSubscribe: true, }; - case SUBSCRIBED_REPO_STATUS.SUCCESS: + case GET_REPOSITORY_SUBSCRIBED_STATUS.SUCCESS: return { ...state, subscribed: true, isPendingSubscribe: false, }; - case SUBSCRIBED_REPO_STATUS.ERROR: + case GET_REPOSITORY_SUBSCRIBED_STATUS.ERROR: return { ...state, isPendingCheckSubscribed: false, diff --git a/src/repository/repository.type.js b/src/repository/repository.type.js index e0104c943..f7cb6e85a 100644 --- a/src/repository/repository.type.js +++ b/src/repository/repository.type.js @@ -20,4 +20,6 @@ export const SEARCH_OPEN_ISSUES = createActionSet('SEARCH_OPEN_ISSUES'); export const SEARCH_CLOSED_ISSUES = createActionSet('SEARCH_CLOSED_ISSUES'); export const SEARCH_OPEN_PULLS = createActionSet('SEARCH_OPEN_PULLS'); export const SEARCH_CLOSED_PULLS = createActionSet('SEARCH_CLOSED_PULLS'); -export const SUBSCRIBED_REPO_STATUS = createActionSet('SUBSCRIBED_REPO_STATUS'); +export const GET_REPOSITORY_SUBSCRIBED_STATUS = createActionSet( + 'GET_REPOSITORY_SUBSCRIBED_STATUS' +); diff --git a/src/repository/screens/repository.screen.js b/src/repository/screens/repository.screen.js index 44869b4b8..6c8ce887d 100644 --- a/src/repository/screens/repository.screen.js +++ b/src/repository/screens/repository.screen.js @@ -79,6 +79,8 @@ class Repository extends Component { // isPendingCheckForked: boolean, navigation: Object, username: string, + // is subscribed? + subscribed: boolean, }; componentDidMount() { @@ -148,7 +150,9 @@ class Repository extends Component { isPendingFork, navigation, username, + subscribed, } = this.props; + const initalRepository = navigation.state.params.repository; const pulls = issues.filter(issue => issue.hasOwnProperty('pull_request')); // eslint-disable-line no-prototype-builtins const pureIssues = issues.filter(issue => { @@ -165,6 +169,7 @@ class Repository extends Component { const showFork = repository && repository.owner && repository.owner.login !== username; const repositoryActions = [ + subscribed ? 'Unwatch' : 'Watch', starred ? 'Unstar' : 'Star', showFork && 'Fork', 'Share', From a8c88dae615ac2def20a73e6fda49320dc52d2fc Mon Sep 17 00:00:00 2001 From: Alejandro Nanez Date: Sat, 29 Jul 2017 16:14:34 -0500 Subject: [PATCH 7/7] Watch/Unwatch --- src/api/index.js | 11 ++++- src/repository/repository.action.js | 50 +++++++++++++++++---- src/repository/repository.reducer.js | 4 +- src/repository/screens/repository.screen.js | 19 +++++++- 4 files changed, 70 insertions(+), 14 deletions(-) diff --git a/src/api/index.js b/src/api/index.js index c25ba56e7..ee8e11095 100644 --- a/src/api/index.js +++ b/src/api/index.js @@ -280,11 +280,17 @@ export const watchRepo = (isSubscribed, owner, repo, accessToken) => { return fetch( ENDPOINT, accessTokenParametersPUT(accessToken, { - subscribed: !isSubscribed, + subscribed: isSubscribed, }) ); }; +export const unWatchRepo = (owner, repo, accessToken) => { + const ENDPOINT = `https://api.github.com/repos/${owner}/${repo}/subscription`; + + return fetch(ENDPOINT, accessTokenParametersDELETE(accessToken)); +}; + export const fetchChangeFollowStatus = (user, isFollowing, accessToken) => { const ENDPOINT = `https://api.github.com/user/following/${user}`; @@ -342,5 +348,6 @@ export const fetchSubmitNewIssue = ( accessTokenParametersPOST(accessToken, { title: issueTitle, body: issueComment, - })).then(response => response.json()); + }) + ).then(response => response.json()); }; diff --git a/src/repository/repository.action.js b/src/repository/repository.action.js index 531d293fa..a5decd235 100644 --- a/src/repository/repository.action.js +++ b/src/repository/repository.action.js @@ -7,6 +7,8 @@ import { fetchSearch, fetchChangeStarStatusRepo, fetchForkRepo, + watchRepo, + unWatchRepo, } from 'api'; import { GET_REPOSITORY, @@ -166,11 +168,43 @@ export const checkRepoSubscribed = url => { dispatch({ type: GET_REPOSITORY_SUBSCRIBED_STATUS.PENDING }); fetchUrlNormal(url, accessToken) - .then(() => dispatch({ type: GET_REPOSITORY_SUBSCRIBED_STATUS.SUCCESS })) - .catch(() => dispatch({ type: GET_REPOSITORY_SUBSCRIBED_STATUS.ERROR })); + .then(data => + dispatch({ + type: GET_REPOSITORY_SUBSCRIBED_STATUS.SUCCESS, + payload: !(data.status === 404), + }) + ) + .catch(error => + dispatch({ + type: GET_REPOSITORY_SUBSCRIBED_STATUS.ERROR, + error, + }) + ); }; }; +export const unSubscribeToRepo = (owner, repo) => (dispatch, getState) => { + const accessToken = getState().auth.accessToken; + + dispatch({ + type: GET_REPOSITORY_SUBSCRIBED_STATUS.PENDING, + }); + + return unWatchRepo(owner, repo, accessToken) + .then(data => data.json()) + .then(() => { + dispatch({ + type: GET_REPOSITORY_SUBSCRIBED_STATUS.SUCCESS, + payload: false, + }); + }) + .catch(() => { + dispatch({ + type: GET_REPOSITORY_SUBSCRIBED_STATUS.ERROR, + }); + }); +}; + export const getRepositoryInfo = url => { return (dispatch, getState) => { return dispatch(getRepository(url)).then(() => { @@ -220,22 +254,20 @@ export const changeStarStatusRepo = (owner, repo, starred) => { }; }; -export const watchRepo = (owner, repo) => (dispatch, getState) => { +export const subscribeToRepo = (owner, repo) => (dispatch, getState) => { const accessToken = getState().auth.accessToken; - const isSubscribed = getState().auth.repository.subscribed; - // get current subscribed status from store and then 'flip it' - // https://developer.github.com/v3/activity/watching/#set-a-repository-subscription - // we should pass true for sub and false for unsub + const isSubscribed = getState().repository.subscribed; dispatch({ type: GET_REPOSITORY_SUBSCRIBED_STATUS.PENDING, }); - return watchRepo(isSubscribed, owner, repo, accessToken) + return watchRepo(!isSubscribed, owner, repo, accessToken) .then(data => data.json()) - .then(() => { + .then(result => { dispatch({ type: GET_REPOSITORY_SUBSCRIBED_STATUS.SUCCESS, + payload: result.subscribed, }); }) .catch(() => { diff --git a/src/repository/repository.reducer.js b/src/repository/repository.reducer.js index 20f45eee2..7567aeb93 100644 --- a/src/repository/repository.reducer.js +++ b/src/repository/repository.reducer.js @@ -177,17 +177,19 @@ export const repositoryReducer = (state = initialState, action = {}) => { case GET_REPOSITORY_SUBSCRIBED_STATUS.PENDING: return { ...state, + subscribed: false, isPendingSubscribe: true, }; case GET_REPOSITORY_SUBSCRIBED_STATUS.SUCCESS: return { ...state, - subscribed: true, + subscribed: action.payload, isPendingSubscribe: false, }; case GET_REPOSITORY_SUBSCRIBED_STATUS.ERROR: return { ...state, + subscribed: action.payload, isPendingCheckSubscribed: false, isPendingSubscribe: false, }; diff --git a/src/repository/screens/repository.screen.js b/src/repository/screens/repository.screen.js index 6c8ce887d..6f9fe9be8 100644 --- a/src/repository/screens/repository.screen.js +++ b/src/repository/screens/repository.screen.js @@ -25,6 +25,8 @@ import { getIssues, changeStarStatusRepo, forkRepo, + subscribeToRepo, + unSubscribeToRepo, } from '../repository.action'; const mapStateToProps = state => ({ @@ -49,6 +51,8 @@ const mapDispatchToProps = dispatch => ({ changeStarStatusRepoByDispatch: (owner, repo, starred) => dispatch(changeStarStatusRepo(owner, repo, starred)), forkRepoByDispatch: (owner, repo) => dispatch(forkRepo(owner, repo)), + subscribeToRepo: (owner, repo) => dispatch(subscribeToRepo(owner, repo)), + unSubscribeToRepo: (owner, repo) => dispatch(unSubscribeToRepo(owner, repo)), }); const styles = StyleSheet.create({ @@ -79,8 +83,10 @@ class Repository extends Component { // isPendingCheckForked: boolean, navigation: Object, username: string, - // is subscribed? + // is subscribed subscribed: boolean, + subscribeToRepo: Function, + unSubscribeToRepo: Function, }; componentDidMount() { @@ -98,12 +104,14 @@ class Repository extends Component { handlePress = index => { const { starred, + subscribed, repository, changeStarStatusRepoByDispatch, forkRepoByDispatch, navigation, username, } = this.props; + const showFork = repository.owner.login !== username; if (index === 0) { @@ -118,6 +126,12 @@ class Repository extends Component { }); } else if (index === 2 || (index === 1 && !showFork)) { this.shareRepository(repository); + } else if (index === 3) { + const subscribeMethod = !subscribed + ? this.props.subscribeToRepo + : this.props.unSubscribeToRepo; + + subscribeMethod(repository.owner.login, repository.name); } }; @@ -168,11 +182,12 @@ class Repository extends Component { const showFork = repository && repository.owner && repository.owner.login !== username; + const repositoryActions = [ - subscribed ? 'Unwatch' : 'Watch', starred ? 'Unstar' : 'Star', showFork && 'Fork', 'Share', + subscribed ? 'Unwatch' : 'Watch', ]; const loader = isPendingFork ? : null;