dash_creator 0.1.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (96) hide show
  1. checksums.yaml +7 -0
  2. data/MIT-LICENSE +20 -0
  3. data/README.md +170 -0
  4. data/Rakefile +36 -0
  5. data/app/assets/config/dash_creator_manifest.js +2 -0
  6. data/app/assets/javascripts/dash_creator/application.js +24 -0
  7. data/app/assets/javascripts/dash_creator/chart.js +2 -0
  8. data/app/assets/javascripts/dash_creator/dashboard.js +2 -0
  9. data/app/assets/javascripts/dash_creator/dashboard_object.js +2 -0
  10. data/app/assets/javascripts/dash_creator/filter.js +2 -0
  11. data/app/assets/javascripts/dash_creator/libs/Chart.js +12269 -0
  12. data/app/assets/javascripts/dash_creator/libs/bootstrap.js +3535 -0
  13. data/app/assets/javascripts/dash_creator/libs/chartCreator.js +1582 -0
  14. data/app/assets/javascripts/dash_creator/libs/dashboardCreator.js +531 -0
  15. data/app/assets/javascripts/dash_creator/libs/daterangepicker.js +1626 -0
  16. data/app/assets/javascripts/dash_creator/libs/filterCreator.js +733 -0
  17. data/app/assets/javascripts/dash_creator/libs/jquery-ui.js +18706 -0
  18. data/app/assets/javascripts/dash_creator/libs/jquery.minicolors.js +1108 -0
  19. data/app/assets/javascripts/dash_creator/libs/moment.js +4301 -0
  20. data/app/assets/javascripts/dash_creator/libs/tether.js +1811 -0
  21. data/app/assets/javascripts/dash_creator/user.js +2 -0
  22. data/app/assets/stylesheets/dash_creator/application.css +16 -0
  23. data/app/assets/stylesheets/dash_creator/chart.css +4 -0
  24. data/app/assets/stylesheets/dash_creator/dashboard.css +4 -0
  25. data/app/assets/stylesheets/dash_creator/dashboard_object.css +4 -0
  26. data/app/assets/stylesheets/dash_creator/filter.css +4 -0
  27. data/app/assets/stylesheets/dash_creator/fonts/FontAwesome.otf +0 -0
  28. data/app/assets/stylesheets/dash_creator/fonts/fontawesome-webfont.eot +0 -0
  29. data/app/assets/stylesheets/dash_creator/fonts/fontawesome-webfont.svg +2671 -0
  30. data/app/assets/stylesheets/dash_creator/fonts/fontawesome-webfont.ttf +0 -0
  31. data/app/assets/stylesheets/dash_creator/fonts/fontawesome-webfont.woff +0 -0
  32. data/app/assets/stylesheets/dash_creator/fonts/fontawesome-webfont.woff2 +0 -0
  33. data/app/assets/stylesheets/dash_creator/libs/font-awesome.css +2199 -0
  34. data/app/assets/stylesheets/dash_creator/libs/jquery.minicolors.css +319 -0
  35. data/app/assets/stylesheets/dash_creator/libs/jquery.minicolors.png +0 -0
  36. data/app/assets/stylesheets/dash_creator/libs/style.css +13714 -0
  37. data/app/assets/stylesheets/dash_creator/user.css +4 -0
  38. data/app/controllers/dash_creator/application_controller.rb +3 -0
  39. data/app/controllers/dash_creator/chart_controller.rb +81 -0
  40. data/app/controllers/dash_creator/dashboard_controller.rb +37 -0
  41. data/app/controllers/dash_creator/dashboard_object_controller.rb +34 -0
  42. data/app/controllers/dash_creator/filter_controller.rb +60 -0
  43. data/app/controllers/dash_creator/user_controller.rb +82 -0
  44. data/app/helpers/dash_creator/application_helper.rb +4 -0
  45. data/app/helpers/dash_creator/chart_helper.rb +829 -0
  46. data/app/helpers/dash_creator/dashboard_helper.rb +4 -0
  47. data/app/helpers/dash_creator/dashboard_object_helper.rb +4 -0
  48. data/app/helpers/dash_creator/filter_helper.rb +237 -0
  49. data/app/helpers/dash_creator/user_helper.rb +4 -0
  50. data/app/jobs/dash_creator/application_job.rb +4 -0
  51. data/app/mailers/dash_creator/application_mailer.rb +6 -0
  52. data/app/models/dash_creator/application_record.rb +5 -0
  53. data/app/models/dash_creator/chart.rb +21 -0
  54. data/app/models/dash_creator/dashboard.rb +13 -0
  55. data/app/models/dash_creator/dashboard_object.rb +7 -0
  56. data/app/models/dash_creator/filter.rb +22 -0
  57. data/app/views/dash_creator/chart/_chart_creator.html.erb +230 -0
  58. data/app/views/dash_creator/chart/_modals.html.erb +74 -0
  59. data/app/views/dash_creator/chart/_plot_chart.html.erb +45 -0
  60. data/app/views/dash_creator/chart/create_chart.js.erb +53 -0
  61. data/app/views/dash_creator/dashboard/_dashboard_creator.html.erb +182 -0
  62. data/app/views/dash_creator/dashboard/_modals.html.erb +74 -0
  63. data/app/views/dash_creator/dashboard_object/_chart.html.erb +9 -0
  64. data/app/views/dash_creator/dashboard_object/_stat.html.erb +24 -0
  65. data/app/views/dash_creator/dashboard_object/_table.html.erb +16 -0
  66. data/app/views/dash_creator/filter/_filtering_card.html.erb +132 -0
  67. data/app/views/dash_creator/filter/_modals.html.erb +51 -0
  68. data/app/views/dash_creator/filter/_result_tables.html.erb +55 -0
  69. data/app/views/dash_creator/filter/apply_filtering.js.erb +46 -0
  70. data/app/views/dash_creator/filter/create_stat.js.erb +20 -0
  71. data/app/views/dash_creator/layouts/application.html.erb +64 -0
  72. data/app/views/dash_creator/layouts/menu/_left_menu.html.erb +12 -0
  73. data/app/views/dash_creator/user/_section_card.html.erb +17 -0
  74. data/app/views/dash_creator/user/creator.html.erb +11 -0
  75. data/app/views/dash_creator/user/dashboard.html.erb +10 -0
  76. data/config/initializers/dash_creator.rb +0 -0
  77. data/config/routes.rb +30 -0
  78. data/lib/dash_creator.rb +87 -0
  79. data/lib/dash_creator/acts_as_dash_creator.rb +16 -0
  80. data/lib/dash_creator/acts_as_dashboard_object.rb +19 -0
  81. data/lib/dash_creator/engine.rb +11 -0
  82. data/lib/dash_creator/version.rb +3 -0
  83. data/lib/generators/dash_creator/install/install_generator.rb +70 -0
  84. data/lib/generators/dash_creator/install/templates/_chart.html.erb +9 -0
  85. data/lib/generators/dash_creator/install/templates/_section_card.html.erb +17 -0
  86. data/lib/generators/dash_creator/install/templates/_stat.html.erb +24 -0
  87. data/lib/generators/dash_creator/install/templates/_table.html.erb +16 -0
  88. data/lib/generators/dash_creator/install/templates/add_indexes_to_dash_creator_tables.rb +15 -0
  89. data/lib/generators/dash_creator/install/templates/create_dash_creator_charts.rb +25 -0
  90. data/lib/generators/dash_creator/install/templates/create_dash_creator_dashboard_objects.rb +36 -0
  91. data/lib/generators/dash_creator/install/templates/create_dash_creator_dashboards.rb +28 -0
  92. data/lib/generators/dash_creator/install/templates/create_dash_creator_filters.rb +22 -0
  93. data/lib/generators/dash_creator/install/templates/dashboard.html.erb +10 -0
  94. data/lib/generators/dash_creator/install/templates/initializer.rb +48 -0
  95. data/lib/tasks/dash_creator_tasks.rake +4 -0
  96. metadata +196 -0
@@ -0,0 +1,16 @@
1
+ <% filter = DashCreator::Filter.find(table['id']) %>
2
+
3
+ <div class="col-md-<%= table['size'] %> offset-md-<%= table['offset'] %>" style="margin-bottom: 50px;">
4
+ <div class="table-wrapper" data-id="<%= table['id'] %>" style="padding: 20px;">
5
+
6
+ <h3><%= filter.name + ' - Table' %></h3><br>
7
+
8
+ <script>
9
+ var params = {
10
+ filters: <%= raw filter.options.to_json %>,
11
+ id: '<%= table['id'] %>'
12
+ };
13
+ $.post('<%= filtering_result_path %>', params);
14
+ </script>
15
+ </div>
16
+ </div>
@@ -0,0 +1,132 @@
1
+ <div class="row">
2
+ <div class="col-md-12">
3
+ <div class="card">
4
+ <div class="card-header">
5
+ Filters
6
+ </div>
7
+ <div class="card-block" id="filter-creator">
8
+ </div>
9
+ <div class="card-footer">
10
+ <button type="submit" class="pull-left btn btn-success" id="apply-btn">Apply filtering</button>
11
+ <a href="#" data-toggle="modal" data-target="#delete_filters_modal" class="pull-right btn btn-sm btn-danger" id="unsave-btn"><%=t :delete_filters%></a>
12
+ <a href="#" data-toggle="modal" data-target="#save_filter_modal" class="pull-right btn btn-sm btn-success"><%=t :save_filter%></a>
13
+ <select name="filter-select" class="form-control pull-right" style="width: 20%; margin-right: 10%;">
14
+ <option value="">Choose a filter</option>
15
+ </select>
16
+ </div>
17
+ </div>
18
+ <!--/.card-->
19
+ </div>
20
+ </div>
21
+
22
+ <div class="container" id="result-container">
23
+ </div>
24
+
25
+ <script>
26
+ var filters = <%= raw @filters %>;
27
+
28
+ var models_data = <%= raw @models_data.to_json %>;
29
+
30
+ $('#filter-creator').filterCreator({
31
+ models_data: models_data,
32
+ attributes_aliases: <%= raw DashCreator.attributes_aliases.to_json %>,
33
+ displayed_model_names: <%= raw DashCreator.displayed_model_names.to_json %>,
34
+ displayed_attribute_names: <%= raw DashCreator.displayed_attribute_names.to_json %>
35
+ });
36
+ var filter_creator = $('#filter-creator').data('filterCreator');
37
+
38
+
39
+ // --------------- Send data ---------------
40
+ $('#apply-btn').click(sendFilterData);
41
+ function sendFilterData() {
42
+ var params = {
43
+ filters: filter_creator.getFiltersData(),
44
+ id: 0
45
+ };
46
+
47
+ // Post filters
48
+ $.post("<%= filtering_result_path %>", params);
49
+ }
50
+
51
+
52
+ // --------------- Save & delete saved filters ---------------
53
+ // Save a filter config
54
+ $(document).on('click', '#save-filter-btn', function() {
55
+ var params = {filters: filter_creator.getFiltersData()};
56
+
57
+ // Get the filter name
58
+ params['filter_name'] = $('.modal').find('[name="filter-name"]').val();
59
+
60
+ $.post("<%= save_filter_path %>", params, function(data) {
61
+ // Add to filters list
62
+ filters.push([params['filter_name'], data['filter_id']]);
63
+ });
64
+ });
65
+
66
+ // Prepare list of filters for delete filters modal
67
+ $('#unsave-btn').click(function() {
68
+ var filters_checkbox_list = $('#filters-checkbox-list');
69
+ // First empty the checkbox list
70
+ filters_checkbox_list.children().remove();
71
+
72
+ // Append filters list to div in modal
73
+ var checkbox_string_start = '<div class="col-sm-12"><div class="form-group">'
74
+ + '<input type="checkbox" class="form-control" name="filter" value="';
75
+ for (var i = 0; i < filters.length; i++) {
76
+ var filter_name = filters[i][0], filter_id = filters[i][1];
77
+ var filter_string = checkbox_string_start + filter_id + '"><label>' + filter_name + '</label><br>';
78
+ $(filter_string).appendTo(filters_checkbox_list);
79
+ }
80
+ $('</div></div>').appendTo(filters_checkbox_list);
81
+ });
82
+
83
+ // Delete filters configs
84
+ $(document).on('click', '#delete-filters-btn', function() {
85
+ // Get the filters ids
86
+ var filters_ids = [];
87
+ $(this).closest('.modal').find('[type="checkbox"]:checked').each(function() {
88
+ filters_ids.push($(this).attr("value"));
89
+ });
90
+
91
+ var params = {filters_ids: filters_ids};
92
+
93
+ $.post("<%= delete_filters_path %>", params, function() {
94
+ // Remove from filters list
95
+ for (var i = 0; i < filters.length; i++) {
96
+ var filter_id = filters[i][1];
97
+ if ($.inArray(filter_id, filters_ids) !== -1) {
98
+ filters.splice(i, 1);
99
+ i--;
100
+ }
101
+ }
102
+ });
103
+ });
104
+
105
+
106
+ // --------------- Display save filter ---------------
107
+ $('[name="filter-select"]')
108
+ .focusin(displaySavedFilters)
109
+ .change(displayFilter);
110
+
111
+ // Display saved configs
112
+ function displaySavedFilters() {
113
+ $(this).children().not('[value=""]').remove();
114
+ for (var i = 0; i < filters.length; i++) {
115
+ var filter_name = filters[i][0], filter_id = filters[i][1];
116
+ $('<option value="' + filter_id + '">' + filter_name + '</option>').appendTo($('[name="filter-select"]'));
117
+ }
118
+ }
119
+
120
+ // Display chosen config (rebuild)
121
+ function displayFilter() {
122
+ var filter_id = $(this).val();
123
+ if (filter_id === '')
124
+ return false;
125
+
126
+ var params = {filter_id: filter_id};
127
+
128
+ $.post("<%= get_filter_path %>", params, function(data) {
129
+ filter_creator.buildFilters(data);
130
+ });
131
+ }
132
+ </script>
@@ -0,0 +1,51 @@
1
+ <div class="modal fade" id="save_filter_modal" tabindex="-1" role="dialog" aria-labelledby="Save Filter Modal" aria-hidden="true">
2
+ <div class="modal-dialog" role="document">
3
+ <div class="modal-content">
4
+ <div class="modal-header">
5
+ <h4 class="modal-title"><%=t :save_filter%></h4>
6
+ <button type="button" class="close" data-dismiss="modal" aria-label="Close">
7
+ <span aria-hidden="true">×</span>
8
+ </button>
9
+ </div>
10
+ <div class="modal-body">
11
+ <div class="row">
12
+ <div class="col-sm-12">
13
+ <div class="form-group">
14
+ <label><%=t :name%></label>
15
+ <input type="text" name="filter-name" class="form-control">
16
+ </div>
17
+ </div>
18
+ </div>
19
+ </div>
20
+ <div class="modal-footer">
21
+ <button type="submit" class="pull-right btn btn-success" id="save-filter-btn" data-dismiss="modal">Submit</button>
22
+ </div>
23
+ </div>
24
+ <!-- /.modal-content -->
25
+ </div>
26
+ <!-- /.modal-dialog -->
27
+ </div>
28
+ <!-- /.modal -->
29
+
30
+ <div class="modal fade" id="delete_filters_modal" tabindex="-1" role="dialog" aria-labelledby="Delete Filters Modal" aria-hidden="true">
31
+ <div class="modal-dialog" role="document">
32
+ <div class="modal-content">
33
+ <div class="modal-header">
34
+ <h4 class="modal-title"><%=t :delete_filters%></h4>
35
+ <button type="button" class="close" data-dismiss="modal" aria-label="Close">
36
+ <span aria-hidden="true">×</span>
37
+ </button>
38
+ </div>
39
+ <div class="modal-body">
40
+ <div class="row" id="filters-checkbox-list">
41
+ </div>
42
+ </div>
43
+ <div class="modal-footer">
44
+ <button type="submit" class="pull-right btn btn-success" id="delete-filters-btn" data-dismiss="modal">Submit</button>
45
+ </div>
46
+ </div>
47
+ <!-- /.modal-content -->
48
+ </div>
49
+ <!-- /.modal-dialog -->
50
+ </div>
51
+ <!-- /.modal -->
@@ -0,0 +1,55 @@
1
+ <% unless mods.nil? %>
2
+ <% mods.each do |model, objects| %>
3
+ <% next if objects.nil? || objects.empty? %>
4
+
5
+ <% model_attributes = objects.first.class.columns_hash %>
6
+
7
+ <div class="row">
8
+ <div class="col-md-12">
9
+ <h3 class="text-center"><%= model %></h3><br>
10
+
11
+ <div>
12
+ <a href="" target="_blank" class="btn btn-primary csv-download" data-model="<%= model %>" data-turbolinks="false">Download CSV</a>
13
+ </div>
14
+
15
+ </div>
16
+ <div class="col-md-2">
17
+ <% model_attributes.each do |attribute, value| %>
18
+ <% if @starting_types.include?(value.type.to_s) %>
19
+ <input type="checkbox" name="<%= model %>" value="<%= attribute %>" checked="checked">
20
+
21
+ <% else %>
22
+ <input type="checkbox" name="<%= model %>" value="<%= attribute %>">
23
+
24
+ <% end %>
25
+
26
+ <label><%= attribute.humanize %></label><br>
27
+ <% end %>
28
+ </div>
29
+ <div class="offset-md-2 col-md-8">
30
+ <table class="table table-hover table-outline mb-0 hidden-sm-down" name="<%= model %>">
31
+ <thead class="thead-default">
32
+ <tr>
33
+ <% model_attributes.each do |attribute, value| %>
34
+ <th class="text-center" value="<%= attribute %>"><%= attribute.humanize %></th>
35
+ <% end %>
36
+ </tr>
37
+ </thead>
38
+
39
+ <tbody>
40
+ <% objects.each do |object| %>
41
+ <tr>
42
+ <% object.attributes.each do |key, value| %>
43
+ <td value="<%= key %>"><%= value %></td>
44
+ <% end %>
45
+ </tr>
46
+ <% end %>
47
+ </tbody>
48
+ </table>
49
+ </div>
50
+ </div>
51
+ <% if mods.length > 1 %>
52
+ <hr><br>
53
+ <% end %>
54
+ <% end %>
55
+ <% end %>
@@ -0,0 +1,46 @@
1
+ var in_creator = <%= id == 0 %>;
2
+
3
+ <% mods = filter_data(data) %>
4
+
5
+ var result_container = in_creator ? $('#result-container') : $('.table-wrapper[data-id="<%= id %>"]');
6
+
7
+ var results_string = '<%= raw "#{render 'result_tables', {mods: mods}}".gsub("\n", '') %>';
8
+ result_container.children().remove();
9
+ $(results_string).appendTo(result_container);
10
+
11
+ result_container.find('[type="checkbox"]').each(updateTableColumns);
12
+
13
+ function updateTableColumns() {
14
+ var name = $(this).attr("name"), value = $(this).attr("value");
15
+ var change_column = result_container.find('table[name="' + name + '"]').find('[value="' + value + '"]');
16
+ this.checked ? change_column.show() : change_column.hide();
17
+ }
18
+
19
+ function downloadCSV() {
20
+ <% mods.each do |model, objects| %>
21
+
22
+ var columns = [];
23
+ result_container.find('[name="<%= model %>"]:checked').each(function() {
24
+ columns.push($(this).val());
25
+ });
26
+
27
+ var ids = <%= raw objects.map{ |o| o.id } %>;
28
+
29
+ var params = {
30
+ model: "<%= model %>",
31
+ columns: columns,
32
+ ids: ids
33
+ };
34
+ var url_params = $.param(params);
35
+
36
+ var link = '<%= download_csv_path %>?' + url_params;
37
+ var download_csv_link = result_container.find('[data-model="<%= model %>"]');
38
+ download_csv_link.attr("href", link);
39
+
40
+ <% end %>
41
+ }
42
+
43
+ result_container
44
+ .off("click")
45
+ .on("click", '[type="checkbox"]', updateTableColumns)
46
+ .on("click", '.csv-download', downloadCSV);
@@ -0,0 +1,20 @@
1
+ var stat_wrapper = $('.stat-wrapper[data-id="<%= id %>"]');
2
+
3
+ <% data = filter_data_count_from_redis(filters_data.deep_stringify_keys) %>
4
+ <% last_updated = data.delete('last_updated') %>
5
+
6
+ stat_wrapper.find('#last-updated').text('<%= last_updated %>');
7
+
8
+ <% data.keys.each do |k| %>
9
+ stat_wrapper.find('.filter-count[data-key="<%= k %>"]').text('<%= data[k] %>');
10
+ <% end %>
11
+
12
+ stat_wrapper.off("click").on("click", "#stat-refresh-btn", function() {
13
+ var params = {
14
+ filter_id: '<%= id %>',
15
+ refresh: true
16
+ };
17
+ $.post("<%= create_stat_path %>", params);
18
+ });
19
+
20
+ <% # DashCreator.redis_store_variable.keys.each {|k| $redis.del(k)} # To delete what is stored in redis %>
@@ -0,0 +1,64 @@
1
+ <!DOCTYPE html>
2
+ <html>
3
+ <head>
4
+ <meta charset="utf-8">
5
+ <meta http-equiv="X-UA-Compatible" content="IE=edge">
6
+ <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
7
+ <meta name="description" content="DashCreator">
8
+ <meta name="author" content="Elie Oriol">
9
+ <meta name="keyword" content="DashCreator">
10
+
11
+
12
+ <title>DashCreator</title>
13
+ <%= csrf_meta_tags %>
14
+ <%= stylesheet_link_tag 'dash_creator/application', media: 'all', 'data-turbolinks-track': 'reload' %>
15
+ <%= javascript_include_tag 'dash_creator/application', 'data-turbolinks-track': 'reload' %>
16
+ </head>
17
+
18
+ <body class="app header-fixed">
19
+ <header class="app-header navbar">
20
+ <ul class="nav navbar-nav ml-auto">
21
+ <li class="nav-item">
22
+ <%= link_to 'Creator', creator_path, class: 'nav-link' %>
23
+ </li>
24
+ <li style='width:20px;'></li>
25
+ <li class="nav-item">
26
+ <%= link_to (t :app_home), main_app.root_path, class: 'nav-link' %>
27
+ </li>
28
+ <li style='width:50px;'></li>
29
+ </ul>
30
+ </header>
31
+
32
+ <div class="app-body">
33
+ <%= render 'dash_creator/layouts/menu/left_menu' %>
34
+ <!-- Main content -->
35
+ <main class="main">
36
+ <div class="container-fluid">
37
+ <% flash.each do |name, msg| %>
38
+ <div class="row justify-content-center">
39
+ <div class="col-md-8">
40
+ <div class="card card-inverse card-<%= name %> text-center">
41
+ <div class="card-block">
42
+ <blockquote class="card-blockquote">
43
+ <p><%= msg %></p>
44
+ </blockquote>
45
+ </div>
46
+ </div>
47
+ </div>
48
+ </div>
49
+ <% end %>
50
+ <%= yield %>
51
+ </div>
52
+ </main>
53
+
54
+ </div>
55
+ </div>
56
+ <footer class="app-footer">
57
+ <span class="float-right">
58
+ DashCreator
59
+ </span>
60
+ </footer>
61
+
62
+
63
+ </body>
64
+ </html>
@@ -0,0 +1,12 @@
1
+ <div class="sidebar">
2
+ <nav class="sidebar-nav">
3
+ <ul class="nav">
4
+ <li class="nav-title">Dashboards</li>
5
+ <% @dashboards.each do |d| %>
6
+ <li class="nav-item">
7
+ <%= link_to d[0], dashboard_path(d[1]), class: 'nav-link' %>
8
+ </li>
9
+ <% end %>
10
+ </ul>
11
+ </nav>
12
+ </div>
@@ -0,0 +1,17 @@
1
+ <div class="col-md-<%= section['size'] %> offset-md-<%= section['offset'] %>">
2
+ <div class="card">
3
+ <div class="card-header">
4
+ <%= section['name'] %>
5
+ </div>
6
+ <div class="card-block">
7
+ <div class="row">
8
+ <% unless section['objects'].nil? %>
9
+ <% section['objects'].each do |index, object| %>
10
+ <%= render 'dash_creator/dashboard_object/' + object['type'], {"#{object['type']}": object} %>
11
+ <% end %>
12
+ <% end %>
13
+ </div>
14
+ </div>
15
+ </div>
16
+ <!--/.card-->
17
+ </div>
@@ -0,0 +1,11 @@
1
+ <div class="animated fadeIn" style="margin: 50px 30px 0px 30px;">
2
+ <h1 class="text-center">Dash Creator</h1>
3
+
4
+ <%= render 'dash_creator/filter/filtering_card' %>
5
+ <%= render 'dash_creator/chart/chart_creator' %>
6
+ <%= render 'dash_creator/dashboard/dashboard_creator' %>
7
+ </div>
8
+
9
+ <%= render 'dash_creator/filter/modals' %>
10
+ <%= render 'dash_creator/chart/modals' %>
11
+ <%= render 'dash_creator/dashboard/modals' %>
@@ -0,0 +1,10 @@
1
+ <div class="animated fadeIn" style="margin: 50px 20px 0px 20px;">
2
+ <h1 class="text-center"><%= @dashboard.name %></h1>
3
+ <div class="row" style="margin-top: 20px;">
4
+ <% unless @dashboard.options.blank? %>
5
+ <% @dashboard.options.each do |index, section| %>
6
+ <%= render 'section_card', {section: section} %>
7
+ <% end %>
8
+ <% end %>
9
+ </div>
10
+ </div>