Prevent change visibility of a repo in the UI when disallowed by billing plan
Fixes #486 - Extracts out the check plan logic and UI from the new repo page into its own directive (repo-count-checker) - Adds the new directive to the repo settings panel - Some additional UI improvements for the repo settings panel
This commit is contained in:
		
							parent
							
								
									fbfe7fdb54
								
							
						
					
					
						commit
						2739cf47ba
					
				
					 8 changed files with 173 additions and 109 deletions
				
			
		|  | @ -22,22 +22,6 @@ | |||
|       'initialize': '' | ||||
|     }; | ||||
| 
 | ||||
|     // Watch the namespace on the repo. If it changes, we update the plan and the public/private
 | ||||
|     // accordingly.
 | ||||
|     $scope.isUserNamespace = true; | ||||
|     $scope.$watch('repo.namespace', function(namespace) { | ||||
|       // Note: Can initially be undefined.
 | ||||
|       if (!namespace) { return; } | ||||
| 
 | ||||
|       var isUserNamespace = (namespace == $scope.user.username); | ||||
| 
 | ||||
|       $scope.planRequired = null; | ||||
|       $scope.isUserNamespace = isUserNamespace; | ||||
| 
 | ||||
|       // Determine whether private repositories are allowed for the namespace.
 | ||||
|       checkPrivateAllowed(); | ||||
|     }); | ||||
| 
 | ||||
|     $scope.changeNamespace = function(namespace) { | ||||
|       $scope.repo.namespace = namespace; | ||||
|     }; | ||||
|  | @ -108,65 +92,5 @@ | |||
|         }); | ||||
|       }); | ||||
|     }; | ||||
| 
 | ||||
|     $scope.upgradePlan = function() { | ||||
|       var callbacks = { | ||||
|         'started': function() { $scope.planChanging = true; }, | ||||
|         'opened': function() { $scope.planChanging = true; }, | ||||
|         'closed': function() { $scope.planChanging = false; }, | ||||
|         'success': subscribedToPlan, | ||||
|         'failure': function(resp) { | ||||
|           $('#couldnotsubscribeModal').modal(); | ||||
|           $scope.planChanging = false; | ||||
|         } | ||||
|       }; | ||||
| 
 | ||||
|       var namespace = $scope.isUserNamespace ? null : $scope.repo.namespace; | ||||
|       PlanService.changePlan($scope, namespace, $scope.planRequired.stripeId, callbacks); | ||||
|     }; | ||||
| 
 | ||||
|     var checkPrivateAllowed = function() { | ||||
|       if (!$scope.repo || !$scope.repo.namespace) { return; } | ||||
| 
 | ||||
|       if (!Features.BILLING) { | ||||
|         $scope.checkingPlan = false; | ||||
|         $scope.planRequired = null; | ||||
|         return; | ||||
|       } | ||||
| 
 | ||||
|       $scope.checkingPlan = true; | ||||
| 
 | ||||
|       var isUserNamespace = $scope.isUserNamespace; | ||||
|       ApiService.getPrivateAllowed(isUserNamespace ? null : $scope.repo.namespace).then(function(resp) { | ||||
|         $scope.checkingPlan = false; | ||||
| 
 | ||||
|         if (resp['privateAllowed']) { | ||||
|           $scope.planRequired = null; | ||||
|           return; | ||||
|         } | ||||
| 
 | ||||
|         if (resp['privateCount'] == null) { | ||||
|           // Organization where we are not the admin.
 | ||||
|           $scope.planRequired = {}; | ||||
|           return; | ||||
|         } | ||||
| 
 | ||||
|         // Otherwise, lookup the matching plan.
 | ||||
|         PlanService.getMinimumPlan(resp['privateCount'] + 1, !isUserNamespace, function(minimum) { | ||||
|           $scope.planRequired = minimum; | ||||
|         }); | ||||
|       }); | ||||
|     }; | ||||
| 
 | ||||
|     var subscribedToPlan = function(sub) { | ||||
|       $scope.planChanging = false; | ||||
|       $scope.subscription = sub; | ||||
| 
 | ||||
|       PlanService.getPlan(sub.plan, function(subscribedPlan) { | ||||
|         $scope.subscribedPlan = subscribedPlan; | ||||
|         $scope.planRequired = null; | ||||
|         checkPrivateAllowed(); | ||||
|       }); | ||||
|     }; | ||||
|   } | ||||
| })(); | ||||
		Reference in a new issue