From b24b3b74d49bdc19e45f21a4e3e4b56b4180feab Mon Sep 17 00:00:00 2001
From: Immanuel Onyeka <immanuel@onyeka.ca>
Date: Wed, 26 May 2021 19:04:02 -0400
Subject: [PATCH] Render services in their components

---
 app/Http/Controllers/ServiceController.php | 14 ++++++++
 app/Http/Controllers/Transaction.php       | 10 ++++++
 resources/js/panel/panel.vue               | 29 +++++++++++++++--
 resources/js/panel/service-pane.vue        | 27 ++++++++++++++++
 resources/js/panel/services.vue            | 37 +++++++++++-----------
 resources/scss/main.scss                   |  3 +-
 routes/web.php                             |  4 +++
 7 files changed, 103 insertions(+), 21 deletions(-)
 create mode 100644 app/Http/Controllers/ServiceController.php
 create mode 100644 app/Http/Controllers/Transaction.php
 create mode 100644 resources/js/panel/service-pane.vue

diff --git a/app/Http/Controllers/ServiceController.php b/app/Http/Controllers/ServiceController.php
new file mode 100644
index 0000000..d1ee7b2
--- /dev/null
+++ b/app/Http/Controllers/ServiceController.php
@@ -0,0 +1,14 @@
+<?php
+
+namespace App\Http\Controllers;
+
+use Illuminate\Http\Request;
+use Illuminate\Support\Facades\Log;
+use App\Models\Service;
+
+class ServiceController extends Controller
+{
+	public function getServices(Request $request) {
+		return Service::all();
+	}
+}
diff --git a/app/Http/Controllers/Transaction.php b/app/Http/Controllers/Transaction.php
new file mode 100644
index 0000000..a408a23
--- /dev/null
+++ b/app/Http/Controllers/Transaction.php
@@ -0,0 +1,10 @@
+<?php
+
+namespace App\Http\Controllers;
+
+use Illuminate\Http\Request;
+
+class Transaction extends Controller
+{
+    //
+}
diff --git a/resources/js/panel/panel.vue b/resources/js/panel/panel.vue
index bda3e2b..828c034 100644
--- a/resources/js/panel/panel.vue
+++ b/resources/js/panel/panel.vue
@@ -1,4 +1,5 @@
 <template>
+<template v-if="!loading">
 <sidebar :active="active"></sidebar>
 <transition name="fade" mode="out-in">
 <div v-if="active === ''" id="main">
@@ -27,7 +28,7 @@
 </div>
 <PastOrders :orders="orders" v-else-if="active === '#orders'" id="main">
 </PastOrders>
-<NewOrder :orders="orders" v-else-if="active === '#new-order'" id="main">
+<NewOrder :token="token" v-else-if="active === '#new-order'" id="main">
 </NewOrder>
 <div id="main" v-else-if="active === '#exit'">
 	<section class="logout-pane">
@@ -38,6 +39,7 @@
 <settings :token="token" :user="user" class="settings-page" id="main" v-else-if="active === '#settings'"></settings>
 </transition>
 </template>
+</template>
 
 <script>
 import Sidebar from './sidebar.vue'
@@ -45,6 +47,19 @@ import Settings from './settings.vue'
 import PastOrders from './orders.vue'
 import NewOrder from './services.vue'
 
+/* function getServices() { */
+	
+/* } */
+/* function getServices() { */
+/* 	fetch("/panel/services", { */
+/* 		method: 'GET', */
+/* 		headers: {'Content-Type': 'application/json', */
+/* 			'Accept': 'application/json', */
+/* 			'X-XSRF-TOKEN': this.token} */
+/* 	}).then(response => { */
+/* 		response.json().then(data => {this.services = data}) */
+/* 	}) */
+/* } */
 
 export default {
 	components: {
@@ -52,8 +67,18 @@ export default {
 	},
 	data() {
 	return {active: window.location.hash, user: '',
-	token: '', orders: '',}
+	token: '', orders: '', loading: true}
 	},
 	methods: {},
+	beforeCreate() {
+		fetch("/panel/services", {
+			method: 'GET',
+			headers: {'Content-Type': 'application/json',
+				'Accept': 'application/json',
+				'X-XSRF-TOKEN': this.token}
+		}).then(response => {
+			response.json().then(data => {this.services = data; this.loading = false})
+		})
+	}
 }
 </script>
diff --git a/resources/js/panel/service-pane.vue b/resources/js/panel/service-pane.vue
new file mode 100644
index 0000000..784306a
--- /dev/null
+++ b/resources/js/panel/service-pane.vue
@@ -0,0 +1,27 @@
+<template>
+<section class="services-pane youtube" >
+	<h4>{{site.charAt(0).toUpperCase() + site.slice(1)}}</h4>
+	<ul :key="service.id" v-for="service in filter(site)">
+		<li><span>{{service.name}}</span><span>{{service.price}}</span><span>{{service.minimum}}</span><span>{{service.maximum}}</span>
+<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-plus-square-fill" viewBox="0 0 16 16">
+  <path d="M2 0a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V2a2 2 0 0 0-2-2H2zm6.5 4.5v3h3a.5.5 0 0 1 0 1h-3v3a.5.5 0 0 1-1 0v-3h-3a.5.5 0 0 1 0-1h3v-3a.5.5 0 0 1 1 0z"/>
+</svg>
+		</li>
+	</ul>
+	</section>
+</template>
+
+<script>
+function filter(site) {
+	if (!this.services) {return}
+
+	return this.services.filter(function(s) {
+		return s.site == site
+	})
+}
+
+export default {
+	props: ['services', 'site'],
+	methods: {filter}
+}
+</script>
diff --git a/resources/js/panel/services.vue b/resources/js/panel/services.vue
index b5a9a72..49ce360 100644
--- a/resources/js/panel/services.vue
+++ b/resources/js/panel/services.vue
@@ -8,31 +8,32 @@
 	</div>
 	<div class="services-legend"><h5>Name</h5>
 <h5>Credits per 1000</h5><h5>Min Qt.</h5><h5>Max Qt.</h5></div>
-	<section class="services-pane youtube">
-	<h4>Youtube</h4>
-	<ul>
-		<li><span>Unique Views and Engagements</span><span>11</span><span>1000</span><span>500,000</span>
-<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-plus-square-fill" viewBox="0 0 16 16">
-  <path d="M2 0a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V2a2 2 0 0 0-2-2H2zm6.5 4.5v3h3a.5.5 0 0 1 0 1h-3v3a.5.5 0 0 1-1 0v-3h-3a.5.5 0 0 1 0-1h3v-3a.5.5 0 0 1 1 0z"/>
-</svg>
-		</li>
-	</ul>
-	</section>
-	<section class="services-pane instagram">
-	<h4>Instagram</h4>
-	</section>
-	<section class="services-pane twitter">
-	<h4>Twitter</h4>
-	</section>
+<ServicePane :site="'youtube'" :services="services"></ServicePane>
+<ServicePane :site="'instagram'" :services="services"></ServicePane>
+<ServicePane :site="'twitter'" :services="services"></ServicePane>
+<ServicePane :site="'tiktok'" :services="services"></ServicePane>
 </div>
 </template>
 
 <script>
+import ServicePane from './service-pane.vue'
+
 
 export default {
 	data() {
-		return {servicePane: true}
+		return {servicePane: true, services: ''}
+	},
+	components: {ServicePane},
+	props: ['token'],
+	created() {
+		fetch("/panel/services", {
+			method: 'GET',
+			headers: {'Content-Type': 'application/json',
+				'Accept': 'application/json',
+				'X-XSRF-TOKEN': this.token}
+		}).then(response => {
+			response.json().then(data => {this.services = data})
+		})
 	},
-	props: ['orders']
 }
 </script>
diff --git a/resources/scss/main.scss b/resources/scss/main.scss
index 189ea08..1e9b1a8 100644
--- a/resources/scss/main.scss
+++ b/resources/scss/main.scss
@@ -1031,7 +1031,7 @@ main.panel {
 		justify-content: space-between;
 		align-items: center;
 		border-top: 1px solid grey;
-		border-bottom: 1px solid grey;
+		// border-bottom: 1px solid grey;
 		padding: 6px 0;
 	}
 
@@ -1053,6 +1053,7 @@ main.panel {
 		width: 25px;
 		height: 25px;
 		color: vars.getColor('brand-orange');
+		right: 10px;
 	}
 
 	svg:hover {
diff --git a/routes/web.php b/routes/web.php
index ac1c6f1..b3495f9 100644
--- a/routes/web.php
+++ b/routes/web.php
@@ -2,6 +2,7 @@
 
 use Illuminate\Support\Facades\Route;
 use App\Http\Controllers\UserController;
+use App\Http\Controllers\ServiceController;
 use Illuminate\Foundation\Auth\EmailVerificationRequest;
 use Illuminate\Http\Request;
 use Illuminate\Support\Facades\Auth;
@@ -63,6 +64,9 @@ Route::get('/panel/user', function (Request $request) {
 Route::get('/panel/orders', [UserController::class,
 	'getOrders'])->middleware([ 'auth', 'verified' ]);
 
+Route::get('/panel/services', [ServiceController::class,
+	'getServices'])->middleware([ 'auth', 'verified' ]);
+
 Route::get('/logout', [UserController::class,
 	'logout'])->middleware('auth');