From 05d4c921a8bc4ae47a47aaf5a4b3476e76b3f137 Mon Sep 17 00:00:00 2001 From: mgabdev <> Date: Tue, 21 Jan 2020 16:07:58 -0500 Subject: [PATCH] Added expenses to sidebar in app --- .../settings/expenses_controller.rb | 11 +++ .../gabsocial/components/sidebar_menu.js | 22 +++--- .../features/ui/components/progress_panel.js | 28 ++++++++ .../features/ui/components/promo_panel.js | 7 ++ app/javascript/gabsocial/initial_state.js | 1 + app/javascript/gabsocial/pages/home_page.js | 2 + .../styles/gabsocial/components.scss | 72 +++++++++++++++++++ app/serializers/initial_state_serializer.rb | 1 + app/views/settings/expenses/index.html.haml | 6 ++ config/locales/en.yml | 2 + config/navigation.rb | 1 + config/routes.rb | 1 + 12 files changed, 146 insertions(+), 8 deletions(-) create mode 100644 app/controllers/settings/expenses_controller.rb create mode 100644 app/javascript/gabsocial/features/ui/components/progress_panel.js create mode 100644 app/views/settings/expenses/index.html.haml diff --git a/app/controllers/settings/expenses_controller.rb b/app/controllers/settings/expenses_controller.rb new file mode 100644 index 00000000..0322194b --- /dev/null +++ b/app/controllers/settings/expenses_controller.rb @@ -0,0 +1,11 @@ +class Settings::ExpensesController < Admin::BaseController + def index + @ammount = Redis.current.get("monthly_funding_ammount") || 0 + end + + def create + Redis.current.set("monthly_funding_ammount", params[:ammount]) + redirect_to settings_expenses_path + end + +end diff --git a/app/javascript/gabsocial/components/sidebar_menu.js b/app/javascript/gabsocial/components/sidebar_menu.js index 0ade1df0..6421d37d 100644 --- a/app/javascript/gabsocial/components/sidebar_menu.js +++ b/app/javascript/gabsocial/components/sidebar_menu.js @@ -14,6 +14,7 @@ import { closeSidebar } from '../actions/sidebar'; import { shortNumberFormat } from '../utils/numbers'; import { me } from '../initial_state'; import { makeGetAccount } from '../selectors'; +import ProgressPanel from '../features/ui/components/progress_panel'; const messages = defineMessages({ followers: { id: 'account.followers', defaultMessage: 'Followers' }, @@ -33,6 +34,7 @@ const messages = defineMessages({ trends: { id: 'promo.trends', defaultMessage: 'Trends' }, search: { id: 'tabs_bar.search', defaultMessage: 'Search' }, shop: { id: 'tabs_bar.shop', defaultMessage: 'Store - Buy Merch' }, + donate: { id: 'tabs_bar.donate', defaultMessage: 'Make a Donation' }, }) const mapStateToProps = state => { @@ -139,6 +141,10 @@ class SidebarMenu extends ImmutablePureComponent { +
+ +
+
@@ -151,10 +157,14 @@ class SidebarMenu extends ImmutablePureComponent { {intl.formatMessage(messages.pro)} } - - - {intl.formatMessage(messages.shop)} - + + + {intl.formatMessage(messages.donate)} + + + + {intl.formatMessage(messages.shop)} + {intl.formatMessage(messages.trends)} @@ -163,10 +173,6 @@ class SidebarMenu extends ImmutablePureComponent { {intl.formatMessage(messages.search)} - - - {intl.formatMessage(messages.apps)} - {intl.formatMessage(messages.preferences)} diff --git a/app/javascript/gabsocial/features/ui/components/progress_panel.js b/app/javascript/gabsocial/features/ui/components/progress_panel.js new file mode 100644 index 00000000..7947a18e --- /dev/null +++ b/app/javascript/gabsocial/features/ui/components/progress_panel.js @@ -0,0 +1,28 @@ +import React from 'react'; +import { monthlyExpensesComplete } from '../../../initial_state'; + +export default class ProgressPanel extends React.PureComponent { + render() { + if (!monthlyExpensesComplete) return null; + + const style = { + width: `${monthlyExpensesComplete}%`, + }; + + return ( +
+
+
Gab's Operational Expenses
+
+
+ We are 100% funded by you. +
+ + {monthlyExpensesComplete}% covered this month + +
+
+
+ ) + } +} \ No newline at end of file diff --git a/app/javascript/gabsocial/features/ui/components/promo_panel.js b/app/javascript/gabsocial/features/ui/components/promo_panel.js index 3bd6fc28..e12f8bee 100644 --- a/app/javascript/gabsocial/features/ui/components/promo_panel.js +++ b/app/javascript/gabsocial/features/ui/components/promo_panel.js @@ -35,6 +35,13 @@ class PromoPanel extends React.PureComponent { }
+ + + + +
+ +
diff --git a/app/javascript/gabsocial/initial_state.js b/app/javascript/gabsocial/initial_state.js index 375bf9dd..9d15fa03 100644 --- a/app/javascript/gabsocial/initial_state.js +++ b/app/javascript/gabsocial/initial_state.js @@ -25,5 +25,6 @@ export const isStaff = getMeta('is_staff'); export const forceSingleColumn = !getMeta('advanced_layout'); export const promotions = initialState && initialState.promotions; export const unreadCount = getMeta('unread_count'); +export const monthlyExpensesComplete = getMeta('monthly_expenses_complete'); export default initialState; diff --git a/app/javascript/gabsocial/pages/home_page.js b/app/javascript/gabsocial/pages/home_page.js index 43f034c8..7ee5b063 100644 --- a/app/javascript/gabsocial/pages/home_page.js +++ b/app/javascript/gabsocial/pages/home_page.js @@ -10,6 +10,7 @@ import UserPanel from '../features/ui/components/user_panel'; import ComposeFormContainer from '../features/compose/containers/compose_form_container'; import Avatar from '../components/avatar'; import GroupSidebarPanel from '../features/groups/sidebar_panel'; +import ProgressPanel from '../features/ui/components/progress_panel'; const mapStateToProps = state => ({ account: state.getIn(['accounts', me]), @@ -28,6 +29,7 @@ class HomePage extends ImmutablePureComponent {
+
diff --git a/app/javascript/styles/gabsocial/components.scss b/app/javascript/styles/gabsocial/components.scss index 0194a4b4..36ead41d 100644 --- a/app/javascript/styles/gabsocial/components.scss +++ b/app/javascript/styles/gabsocial/components.scss @@ -1702,6 +1702,12 @@ a.account__display-name { font-size: 15px; padding: 0 20px; + &--special { + i { + color: #30CE7D; + } + } + &:hover { color: darken($primary-text-color, 14%); @@ -5356,3 +5362,69 @@ noscript { margin-left: 2px; } } + +.sidebar-menu .progress-panel { + padding-left: 12px; + padding-right: 12px; +} + +.progress-panel { + background: none !important; + background-color: transparent !important; + box-shadow: none !important; + margin-top: 15px; + + .progress-panel-header { + padding: 5px; + margin-bottom: 0; + } + + &__content { + display: block; + padding: 0 5px; + box-sizing: border-box; + } + + &__text { + display: block; + margin-bottom: 5px; + font-size: 14px; + color: $darker-text-color; + } + + &__bar-container { + display: block; + width: 100%; + box-sizing: border-box; + border-radius: 12px; + height: 22px; + overflow: hidden; + position: relative; + background-color: #555; + margin-top: 15px; + margin-bottom: 15px; + } + + &__bar { + display: block; + width: 100%; + background-color: #32a269; + box-sizing: border-box; + border-radius: 10px; + height: 22px; + margin: -1px; + + &__text { + display: block; + position: absolute; + top: 0; + left: 0; + right: 0; + text-align: center; + font-size: 14px; + line-height: 22px; + font-weight: 600; + color: #fff; + } + } +} \ No newline at end of file diff --git a/app/serializers/initial_state_serializer.rb b/app/serializers/initial_state_serializer.rb index 841ff926..b9c09c08 100644 --- a/app/serializers/initial_state_serializer.rb +++ b/app/serializers/initial_state_serializer.rb @@ -37,6 +37,7 @@ class InitialStateSerializer < ActiveModel::Serializer store[:group_in_home_feed] = object.current_account.user.setting_group_in_home_feed store[:is_staff] = object.current_account.user.staff? store[:unread_count] = unread_count object.current_account + store[:monthly_expenses_complete] = Redis.current.get("monthly_funding_ammount") || 0 end store diff --git a/app/views/settings/expenses/index.html.haml b/app/views/settings/expenses/index.html.haml new file mode 100644 index 00000000..cfa518f5 --- /dev/null +++ b/app/views/settings/expenses/index.html.haml @@ -0,0 +1,6 @@ +- content_for :page_title do + = t('monthly_funding.title') + += form_tag settings_expenses_url, :method => :post do + = text_field_tag "ammount", "", placeholder: "0-100", :value => @ammount + = submit_tag "Submit" diff --git a/config/locales/en.yml b/config/locales/en.yml index 5d3ca787..63b95274 100644 --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -72,6 +72,8 @@ en: unfollow: Unfollow promotions: title: Promotions + monthly_funding: + title: Monthly Funding admin: account_actions: action: Perform action diff --git a/config/navigation.rb b/config/navigation.rb index f42e3782..e11e0a02 100644 --- a/config/navigation.rb +++ b/config/navigation.rb @@ -60,6 +60,7 @@ SimpleNavigation::Configuration.run do |navigation| s.item :pghero, safe_join([fa_icon('database fw'), 'PgHero']), pghero_url, link_html: { target: 'pghero' }, if: -> { current_user.admin? } s.item :moderation, safe_join([fa_icon('id-card-o fw'), t('verifications.moderation.title')]), settings_verifications_moderation_url, if: -> { current_user.admin? } s.item :promotions, safe_join([fa_icon('star fw'), t('promotions.title')]), settings_promotions_url, if: -> { current_user.admin? } + s.item :monthly_funding, safe_join([fa_icon('money fw'), t('monthly_funding.title')]), settings_expenses_url, if: -> { current_user.admin? } end n.item :logout, safe_join([fa_icon('sign-out fw'), t('auth.logout')]), destroy_user_session_url, link_html: { 'data-method' => 'delete' } diff --git a/config/routes.rb b/config/routes.rb index 772ccdfa..74b1b2cd 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -90,6 +90,7 @@ Rails.application.routes.draw do end resources :promotions, only: [:index, :new, :create, :edit, :update, :destroy] + resources :expenses, only: [:index, :new, :create, :edit, :update, :destroy] namespace :verifications do get :moderation, to: 'moderation#index', as: :moderation