From 47323ffbf1e71f9edc593ad3b7baa5f9a8d161c3 Mon Sep 17 00:00:00 2001 From: gregoirenovel Date: Thu, 26 Apr 2018 14:40:03 +0200 Subject: [PATCH] [#1872] Managers can enable feature flags from UI --- .../manager/administrateurs_controller.rb | 14 +++++++++++ .../fields/features_field/_show.html.haml | 23 +++++++++++++++++-- config/routes.rb | 1 + 3 files changed, 36 insertions(+), 2 deletions(-) diff --git a/app/controllers/manager/administrateurs_controller.rb b/app/controllers/manager/administrateurs_controller.rb index fccc55c5e..0b5cb39b3 100644 --- a/app/controllers/manager/administrateurs_controller.rb +++ b/app/controllers/manager/administrateurs_controller.rb @@ -19,6 +19,20 @@ module Manager redirect_to manager_administrateur_path(params[:id]) end + def enable_feature + administrateur = Administrateur.find(params[:id]) + + params[:features].each do |key, enable| + if enable + administrateur.enable_feature(key.to_sym) + else + administrateur.disable_feature(key.to_sym) + end + end + + head :ok + end + private def create_administrateur_params diff --git a/app/views/fields/features_field/_show.html.haml b/app/views/fields/features_field/_show.html.haml index d096740be..a9ce32535 100644 --- a/app/views/fields/features_field/_show.html.haml +++ b/app/views/fields/features_field/_show.html.haml @@ -1,7 +1,26 @@ -%table +%table#features - Flipflop.feature_set.features.each do |feature| - if !feature.group || feature.group.key != :production %tr %td= feature.title %td - = check_box_tag "Enabled", "enabled", field.data[feature.name], disabled: true + = check_box_tag "enable-feature", "enable", field.data[feature.name], data: { url: enable_feature_manager_administrateur_path(field.resource.id), key: feature.key } + +:javascript + window.onload = function() { + $('#features input[type=checkbox]').on('change', function(evt) { + let url = $(evt.target).data('url'); + let key = $(evt.target).data('key'); + let features = {}; + features[key] = $(evt.target).prop('checked'); + $.ajax(url, { + method: 'put', + contentType: 'application/json', + dataType: 'json', + data: JSON.stringify({ + features: features + }) + }); + }); + }; + diff --git a/config/routes.rb b/config/routes.rb index 7876ffc0b..6835cc98d 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -8,6 +8,7 @@ Rails.application.routes.draw do resources :administrateurs, only: [:index, :show, :new, :create] do post 'reinvite', on: :member + put 'enable_feature', on: :member end resources :demandes, only: [:index]