mirror of
https://github.com/VueFileManager/vuefilemanager.git
synced 2026-04-18 00:02:15 +00:00
backend update
This commit is contained in:
@@ -13,6 +13,7 @@ use App\Http\Resources\InvoiceCollection;
|
||||
use App\Http\Resources\UsersCollection;
|
||||
use App\Http\Resources\UserResource;
|
||||
use App\Http\Resources\UserStorageResource;
|
||||
use App\Http\Resources\UserSubscription;
|
||||
use App\Http\Tools\Demo;
|
||||
use App\Share;
|
||||
use App\User;
|
||||
@@ -67,6 +68,19 @@ class UserController extends Controller
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get user subscription details
|
||||
*
|
||||
* @param $id
|
||||
* @return UserSubscription
|
||||
*/
|
||||
public function subscription($id)
|
||||
{
|
||||
return new UserSubscription(
|
||||
User::findOrFail($id)->subscription('main')
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get all users
|
||||
*
|
||||
|
||||
@@ -23,37 +23,9 @@ class AccountController extends Controller
|
||||
/**
|
||||
* Get all user data to frontend
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public function user()
|
||||
{
|
||||
// Get User
|
||||
$user = Auth::user();
|
||||
|
||||
// Get folder tree
|
||||
$tree = FileManagerFolder::with(['folders.shared', 'shared:token,id,item_id,permission,protected'])
|
||||
->where('parent_id', 0)
|
||||
->where('user_id', $user->id)
|
||||
->get();
|
||||
|
||||
return [
|
||||
'user' => $user->only(['name', 'email', 'avatar', 'role']),
|
||||
'favourites' => $user->favourite_folders->makeHidden(['pivot']),
|
||||
'tree' => $tree,
|
||||
'storage' => [
|
||||
'used' => Metric::bytes($user->used_capacity)->format(),
|
||||
'capacity' => format_gigabytes($user->settings->storage_capacity),
|
||||
'percentage' => get_storage_fill_percentage($user->used_capacity, $user->settings->storage_capacity),
|
||||
],
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* Get me
|
||||
*
|
||||
* @return UserResource
|
||||
*/
|
||||
public function me()
|
||||
public function user()
|
||||
{
|
||||
return new UserResource(
|
||||
Auth::user()
|
||||
|
||||
@@ -26,10 +26,22 @@ class SubscriptionController extends Controller
|
||||
$plan = app('rinvex.subscriptions.plan')
|
||||
->find($request->input('plan.data.id'));
|
||||
|
||||
// Create subscription
|
||||
$user->newSubscription('main', $plan);
|
||||
// Check if user have subscription
|
||||
if ($user->activeSubscriptions()->count() !== 0) {
|
||||
|
||||
// Update user storage limig
|
||||
// Get old subscription
|
||||
$subscription = $user->subscription('main');
|
||||
|
||||
// Change subscription plan
|
||||
$subscription->changePlan($plan);
|
||||
|
||||
} else {
|
||||
|
||||
// Create subscription
|
||||
$user->newSubscription('main', $plan);
|
||||
}
|
||||
|
||||
// Update user storage limit
|
||||
$user->settings()->update([
|
||||
'storage_capacity' => $plan->features->first()->value
|
||||
]);
|
||||
@@ -41,4 +53,20 @@ class SubscriptionController extends Controller
|
||||
|
||||
return response('Done!', 204);
|
||||
}
|
||||
|
||||
/**
|
||||
* Cancel Subscription
|
||||
*
|
||||
* @return \Illuminate\Contracts\Routing\ResponseFactory|\Illuminate\Http\Response
|
||||
*/
|
||||
public function cancel() {
|
||||
|
||||
// Get user
|
||||
$user = Auth::user();
|
||||
|
||||
// Cancel subscription
|
||||
$user->subscription('main')->cancel();
|
||||
|
||||
return response('Done!', 204);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -23,7 +23,8 @@ class PricingResource extends JsonResource
|
||||
'description' => $this->description,
|
||||
'price' => $this->price,
|
||||
'capacity_formatted' => format_gigabytes($this->features->first()->value),
|
||||
'capacity' => $this->features->first()->value,
|
||||
'capacity' => (int) $this->features->first()->value,
|
||||
'currency' => 'USD',
|
||||
]
|
||||
]
|
||||
];
|
||||
|
||||
@@ -33,6 +33,9 @@ class UserResource extends JsonResource
|
||||
]
|
||||
],
|
||||
'relationships' => [
|
||||
'subscription' => $this->activeSubscriptions()->count() !== 0
|
||||
? new UserSubscription($this->subscription('main'))
|
||||
: null,
|
||||
'settings' => [
|
||||
'data' => [
|
||||
'id' => (string)$this->settings->id,
|
||||
@@ -55,7 +58,24 @@ class UserResource extends JsonResource
|
||||
'attributes' => $this->storage
|
||||
]
|
||||
],
|
||||
'subscription' => $this->activeSubscriptions()->count() !== 0 ? new UserSubscription($this->subscription('main')) : null,
|
||||
'favourites' => [
|
||||
'data' => [
|
||||
'id' => '1',
|
||||
'type' => 'folders_favourite',
|
||||
'attributes' => [
|
||||
'folders' => $this->favourite_folders->makeHidden(['pivot'])
|
||||
],
|
||||
],
|
||||
],
|
||||
'tree' => [
|
||||
'data' => [
|
||||
'id' => '1',
|
||||
'type' => 'folders_tree',
|
||||
'attributes' => [
|
||||
'folders' => $this->folder_tree
|
||||
],
|
||||
],
|
||||
],
|
||||
]
|
||||
];
|
||||
}
|
||||
|
||||
@@ -19,10 +19,16 @@ class UserSubscription extends JsonResource
|
||||
'id' => $this->id,
|
||||
'type' => 'subscription',
|
||||
'attributes' => [
|
||||
'name' => $this->name,
|
||||
'slug' => $this->slug,
|
||||
'starts_at' => format_date($this->starts_at, '%d. %B. %Y'),
|
||||
'ends_at' => format_date($this->ends_at, '%d. %B. %Y'),
|
||||
'active' => $this->active(),
|
||||
'canceled' => $this->canceled(),
|
||||
'name' => $this->plan->name,
|
||||
'capacity' => (int) $this->plan->features->first()->value,
|
||||
'capacity_formatted' => format_gigabytes($this->plan->features->first()->value),
|
||||
'slug' => $this->slug,
|
||||
'canceled_at' => format_date($this->created_at, '%d. %B. %Y'),
|
||||
'created_at' => format_date($this->created_at, '%d. %B. %Y'),
|
||||
'starts_at' => format_date($this->starts_at, '%d. %B. %Y'),
|
||||
'ends_at' => format_date($this->ends_at, '%d. %B. %Y'),
|
||||
]
|
||||
]
|
||||
];
|
||||
|
||||
@@ -21,7 +21,7 @@ function get_invoice_number()
|
||||
$invoices = \App\Invoice::all();
|
||||
|
||||
if ($invoices->isEmpty()) {
|
||||
return Carbon::now()->year . '00001';
|
||||
return Carbon::now()->year . '001';
|
||||
} else {
|
||||
return (int)$invoices->last()->order + 1;
|
||||
}
|
||||
|
||||
@@ -100,7 +100,7 @@ class User extends Authenticatable
|
||||
return [
|
||||
'used' => (float) get_storage_fill_percentage($this->used_capacity, $this->settings->storage_capacity),
|
||||
'capacity' => $this->settings->storage_capacity,
|
||||
'capacity_formatted' => Metric::gigabytes($this->settings->storage_capacity)->format(),
|
||||
'capacity_formatted' => format_gigabytes($this->settings->storage_capacity),
|
||||
];
|
||||
}
|
||||
|
||||
@@ -118,6 +118,13 @@ class User extends Authenticatable
|
||||
return $user_capacity;
|
||||
}
|
||||
|
||||
public function getFolderTreeAttribute() {
|
||||
return FileManagerFolder::with(['folders.shared', 'shared:token,id,item_id,permission,protected'])
|
||||
->where('parent_id', 0)
|
||||
->where('user_id', $this->id)
|
||||
->get();
|
||||
}
|
||||
|
||||
/**
|
||||
* Format avatar to full url
|
||||
*
|
||||
|
||||
@@ -1,353 +1,253 @@
|
||||
{
|
||||
"/js/main.js": "/js/main.js",
|
||||
"/css/app.css": "/css/app.css",
|
||||
"/js/main.60a83cde6ee2f68824da.hot-update.js": "/js/main.60a83cde6ee2f68824da.hot-update.js",
|
||||
"/js/main.ef619783c500887ceffe.hot-update.js": "/js/main.ef619783c500887ceffe.hot-update.js",
|
||||
"/js/main.c013b62eccdba33a9f76.hot-update.js": "/js/main.c013b62eccdba33a9f76.hot-update.js",
|
||||
"/js/main.b69457f69553fafe8967.hot-update.js": "/js/main.b69457f69553fafe8967.hot-update.js",
|
||||
"/js/main.873e7877b5a7297e1c17.hot-update.js": "/js/main.873e7877b5a7297e1c17.hot-update.js",
|
||||
"/js/main.b9ddf454773dfc9a3cc4.hot-update.js": "/js/main.b9ddf454773dfc9a3cc4.hot-update.js",
|
||||
"/js/main.02f346aa47ed2e2a0485.hot-update.js": "/js/main.02f346aa47ed2e2a0485.hot-update.js",
|
||||
"/js/main.cc4e9ed6c16ce2b1299f.hot-update.js": "/js/main.cc4e9ed6c16ce2b1299f.hot-update.js",
|
||||
"/js/main.7002551648c9c102b6ff.hot-update.js": "/js/main.7002551648c9c102b6ff.hot-update.js",
|
||||
"/js/main.f5f21d04048492dbd747.hot-update.js": "/js/main.f5f21d04048492dbd747.hot-update.js",
|
||||
"/js/main.0dbde133bdee5d63d609.hot-update.js": "/js/main.0dbde133bdee5d63d609.hot-update.js",
|
||||
"/js/main.7261b8501bb32bb006f0.hot-update.js": "/js/main.7261b8501bb32bb006f0.hot-update.js",
|
||||
"/js/main.27a706ad1b73d0697b2c.hot-update.js": "/js/main.27a706ad1b73d0697b2c.hot-update.js",
|
||||
"/js/main.17b995f15aec112c8c5b.hot-update.js": "/js/main.17b995f15aec112c8c5b.hot-update.js",
|
||||
"/js/main.8e55b60094bd1698c507.hot-update.js": "/js/main.8e55b60094bd1698c507.hot-update.js",
|
||||
"/js/main.09e6bb0dc398c2959b26.hot-update.js": "/js/main.09e6bb0dc398c2959b26.hot-update.js",
|
||||
"/js/main.fd71ac7e397883c5ad8b.hot-update.js": "/js/main.fd71ac7e397883c5ad8b.hot-update.js",
|
||||
"/js/main.d370dc07147b907f62df.hot-update.js": "/js/main.d370dc07147b907f62df.hot-update.js",
|
||||
"/js/main.c1b2482085d2dca6e959.hot-update.js": "/js/main.c1b2482085d2dca6e959.hot-update.js",
|
||||
"/js/main.5e3ed25ff048539d7beb.hot-update.js": "/js/main.5e3ed25ff048539d7beb.hot-update.js",
|
||||
"/js/main.a41a30032cd7c44f8961.hot-update.js": "/js/main.a41a30032cd7c44f8961.hot-update.js",
|
||||
"/js/main.a9741a1d40de6f852246.hot-update.js": "/js/main.a9741a1d40de6f852246.hot-update.js",
|
||||
"/js/main.be7b3011e661b4181e7a.hot-update.js": "/js/main.be7b3011e661b4181e7a.hot-update.js",
|
||||
"/js/main.3db920f332bc3991dd5c.hot-update.js": "/js/main.3db920f332bc3991dd5c.hot-update.js",
|
||||
"/js/main.5561ca4061079f16c0be.hot-update.js": "/js/main.5561ca4061079f16c0be.hot-update.js",
|
||||
"/js/main.ffa5150f8c1cd7521dd2.hot-update.js": "/js/main.ffa5150f8c1cd7521dd2.hot-update.js",
|
||||
"/js/main.5f28c31c15df2df73a2b.hot-update.js": "/js/main.5f28c31c15df2df73a2b.hot-update.js",
|
||||
"/js/main.f9f3f6d9e87f5ecd0bb9.hot-update.js": "/js/main.f9f3f6d9e87f5ecd0bb9.hot-update.js",
|
||||
"/js/main.44fecef6499fea67dc72.hot-update.js": "/js/main.44fecef6499fea67dc72.hot-update.js",
|
||||
"/js/main.73c749e66d6c20809368.hot-update.js": "/js/main.73c749e66d6c20809368.hot-update.js",
|
||||
"/js/main.7a6220ca40fd95b13a8b.hot-update.js": "/js/main.7a6220ca40fd95b13a8b.hot-update.js",
|
||||
"/js/main.6be211db0853880da483.hot-update.js": "/js/main.6be211db0853880da483.hot-update.js",
|
||||
"/js/main.ab94ff0b5c48f6a077dc.hot-update.js": "/js/main.ab94ff0b5c48f6a077dc.hot-update.js",
|
||||
"/js/main.9afc512df05cd3a8ac58.hot-update.js": "/js/main.9afc512df05cd3a8ac58.hot-update.js",
|
||||
"/js/main.43538fedff7023915e34.hot-update.js": "/js/main.43538fedff7023915e34.hot-update.js",
|
||||
"/js/main.5f51a0e00cfd46bc8a1d.hot-update.js": "/js/main.5f51a0e00cfd46bc8a1d.hot-update.js",
|
||||
"/js/main.126e706d99f33682b6d0.hot-update.js": "/js/main.126e706d99f33682b6d0.hot-update.js",
|
||||
"/js/main.8daab36d29fdcdd8dc60.hot-update.js": "/js/main.8daab36d29fdcdd8dc60.hot-update.js",
|
||||
"/js/main.7e2ebfecf4df5598079c.hot-update.js": "/js/main.7e2ebfecf4df5598079c.hot-update.js",
|
||||
"/js/main.5ed6d6df0896b972a2f7.hot-update.js": "/js/main.5ed6d6df0896b972a2f7.hot-update.js",
|
||||
"/js/main.2d2a1d857e6b40fba146.hot-update.js": "/js/main.2d2a1d857e6b40fba146.hot-update.js",
|
||||
"/js/main.0ae791146f4cf6ddff27.hot-update.js": "/js/main.0ae791146f4cf6ddff27.hot-update.js",
|
||||
"/js/main.0a07ef52e4609669974b.hot-update.js": "/js/main.0a07ef52e4609669974b.hot-update.js",
|
||||
"/js/main.659024279a212defa9e5.hot-update.js": "/js/main.659024279a212defa9e5.hot-update.js",
|
||||
"/js/main.f3d0eba7638f859fd680.hot-update.js": "/js/main.f3d0eba7638f859fd680.hot-update.js",
|
||||
"/js/main.4d406bf1178f069aed95.hot-update.js": "/js/main.4d406bf1178f069aed95.hot-update.js",
|
||||
"/js/main.8be8ab82ff63a98f578e.hot-update.js": "/js/main.8be8ab82ff63a98f578e.hot-update.js",
|
||||
"/js/main.c0864b90fdd06b278c0a.hot-update.js": "/js/main.c0864b90fdd06b278c0a.hot-update.js",
|
||||
"/js/main.bc7b433506f608a82a6b.hot-update.js": "/js/main.bc7b433506f608a82a6b.hot-update.js",
|
||||
"/js/main.30d3b9977d3dc83ed57e.hot-update.js": "/js/main.30d3b9977d3dc83ed57e.hot-update.js",
|
||||
"/js/main.ebec5f1efc4ff893de63.hot-update.js": "/js/main.ebec5f1efc4ff893de63.hot-update.js",
|
||||
"/js/main.ebc12d34a4fba627c401.hot-update.js": "/js/main.ebc12d34a4fba627c401.hot-update.js",
|
||||
"/js/main.ec5f3d6ea3f03f3bfe5d.hot-update.js": "/js/main.ec5f3d6ea3f03f3bfe5d.hot-update.js",
|
||||
"/js/main.563f066659ae7a313dce.hot-update.js": "/js/main.563f066659ae7a313dce.hot-update.js",
|
||||
"/js/main.2725f37a642b592af8c9.hot-update.js": "/js/main.2725f37a642b592af8c9.hot-update.js",
|
||||
"/js/main.3a41edb1952f97e1cf0c.hot-update.js": "/js/main.3a41edb1952f97e1cf0c.hot-update.js",
|
||||
"/js/main.4257072b4fa820520329.hot-update.js": "/js/main.4257072b4fa820520329.hot-update.js",
|
||||
"/js/main.fd59b0473a4ddd58a231.hot-update.js": "/js/main.fd59b0473a4ddd58a231.hot-update.js",
|
||||
"/js/main.40ce0c4e650274ca2e2e.hot-update.js": "/js/main.40ce0c4e650274ca2e2e.hot-update.js",
|
||||
"/js/main.897246c769e983f3d989.hot-update.js": "/js/main.897246c769e983f3d989.hot-update.js",
|
||||
"/js/main.521f0c97840da3481c94.hot-update.js": "/js/main.521f0c97840da3481c94.hot-update.js",
|
||||
"/js/main.c154b9ae35a1f6a32e82.hot-update.js": "/js/main.c154b9ae35a1f6a32e82.hot-update.js",
|
||||
"/js/main.8cf48f71db246ed8b9af.hot-update.js": "/js/main.8cf48f71db246ed8b9af.hot-update.js",
|
||||
"/js/main.679e8b450323f00f16b1.hot-update.js": "/js/main.679e8b450323f00f16b1.hot-update.js",
|
||||
"/js/main.0c75525a762b37a19ebb.hot-update.js": "/js/main.0c75525a762b37a19ebb.hot-update.js",
|
||||
"/js/main.0a762f4b8d3e4ba3bf50.hot-update.js": "/js/main.0a762f4b8d3e4ba3bf50.hot-update.js",
|
||||
"/js/main.8bb52c015cc5bf103a83.hot-update.js": "/js/main.8bb52c015cc5bf103a83.hot-update.js",
|
||||
"/js/main.051c0994490dbf28d874.hot-update.js": "/js/main.051c0994490dbf28d874.hot-update.js",
|
||||
"/js/main.c4fbb155df77a01cead2.hot-update.js": "/js/main.c4fbb155df77a01cead2.hot-update.js",
|
||||
"/js/main.a89076bd7fc546c5bbba.hot-update.js": "/js/main.a89076bd7fc546c5bbba.hot-update.js",
|
||||
"/js/main.469d258e2e2b007207e1.hot-update.js": "/js/main.469d258e2e2b007207e1.hot-update.js",
|
||||
"/js/main.2fec9cd89f848ea0d839.hot-update.js": "/js/main.2fec9cd89f848ea0d839.hot-update.js",
|
||||
"/js/main.5f0c685a4cd32095c161.hot-update.js": "/js/main.5f0c685a4cd32095c161.hot-update.js",
|
||||
"/js/main.3ed4497a365f6d72dc7f.hot-update.js": "/js/main.3ed4497a365f6d72dc7f.hot-update.js",
|
||||
"/js/main.0d3316553777396d8e49.hot-update.js": "/js/main.0d3316553777396d8e49.hot-update.js",
|
||||
"/js/main.b967e5d0cd196a9cffe5.hot-update.js": "/js/main.b967e5d0cd196a9cffe5.hot-update.js",
|
||||
"/js/main.7cb7cc650992de21a270.hot-update.js": "/js/main.7cb7cc650992de21a270.hot-update.js",
|
||||
"/js/main.cbd0798033c61903982b.hot-update.js": "/js/main.cbd0798033c61903982b.hot-update.js",
|
||||
"/js/main.f3cbf06b4bb700eed2ca.hot-update.js": "/js/main.f3cbf06b4bb700eed2ca.hot-update.js",
|
||||
"/js/main.f23f1b2b13a97c24a12e.hot-update.js": "/js/main.f23f1b2b13a97c24a12e.hot-update.js",
|
||||
"/js/main.260b86bb8c6137305d79.hot-update.js": "/js/main.260b86bb8c6137305d79.hot-update.js",
|
||||
"/js/main.a64e08b37d0287f0fd3c.hot-update.js": "/js/main.a64e08b37d0287f0fd3c.hot-update.js",
|
||||
"/js/main.5271952fd0528f004eb2.hot-update.js": "/js/main.5271952fd0528f004eb2.hot-update.js",
|
||||
"/js/main.6bc1170583bfada6b03f.hot-update.js": "/js/main.6bc1170583bfada6b03f.hot-update.js",
|
||||
"/js/main.97ce3d98957854961afa.hot-update.js": "/js/main.97ce3d98957854961afa.hot-update.js",
|
||||
"/js/main.73536cf388d726112883.hot-update.js": "/js/main.73536cf388d726112883.hot-update.js",
|
||||
"/js/main.443f226a178e6f696918.hot-update.js": "/js/main.443f226a178e6f696918.hot-update.js",
|
||||
"/js/main.943771be6a55402c235f.hot-update.js": "/js/main.943771be6a55402c235f.hot-update.js",
|
||||
"/js/main.38d64e59de4dac8d3a27.hot-update.js": "/js/main.38d64e59de4dac8d3a27.hot-update.js",
|
||||
"/js/main.633ca2766892a4f86c06.hot-update.js": "/js/main.633ca2766892a4f86c06.hot-update.js",
|
||||
"/js/main.7a1f97a5416bd2f7aa1d.hot-update.js": "/js/main.7a1f97a5416bd2f7aa1d.hot-update.js",
|
||||
"/js/main.c94a5b2de6b87a0de111.hot-update.js": "/js/main.c94a5b2de6b87a0de111.hot-update.js",
|
||||
"/js/main.23c164a13b2f0aa50f45.hot-update.js": "/js/main.23c164a13b2f0aa50f45.hot-update.js",
|
||||
"/js/main.7acd02ffbc40e34b76b5.hot-update.js": "/js/main.7acd02ffbc40e34b76b5.hot-update.js",
|
||||
"/js/main.e55585baebfa4ff40b96.hot-update.js": "/js/main.e55585baebfa4ff40b96.hot-update.js",
|
||||
"/js/main.26f5e7e248e7a516fdeb.hot-update.js": "/js/main.26f5e7e248e7a516fdeb.hot-update.js",
|
||||
"/js/main.a4354cf111d2f640de40.hot-update.js": "/js/main.a4354cf111d2f640de40.hot-update.js",
|
||||
"/js/main.b7c598a2039ad757246c.hot-update.js": "/js/main.b7c598a2039ad757246c.hot-update.js",
|
||||
"/js/main.76c1bb584af8d242650d.hot-update.js": "/js/main.76c1bb584af8d242650d.hot-update.js",
|
||||
"/js/main.462992b527732ffaf011.hot-update.js": "/js/main.462992b527732ffaf011.hot-update.js",
|
||||
"/js/main.c7aab6e1f0a415b086a2.hot-update.js": "/js/main.c7aab6e1f0a415b086a2.hot-update.js",
|
||||
"/js/main.4f06914b44e0029a62f4.hot-update.js": "/js/main.4f06914b44e0029a62f4.hot-update.js",
|
||||
"/js/main.1a3f610ba8ec3292f4dc.hot-update.js": "/js/main.1a3f610ba8ec3292f4dc.hot-update.js",
|
||||
"/js/main.06895546a55022d7cc93.hot-update.js": "/js/main.06895546a55022d7cc93.hot-update.js",
|
||||
"/js/main.40b86ee237657438cdaf.hot-update.js": "/js/main.40b86ee237657438cdaf.hot-update.js",
|
||||
"/js/main.32e1f408e9b90f611a86.hot-update.js": "/js/main.32e1f408e9b90f611a86.hot-update.js",
|
||||
"/js/main.67c28937753a28b1a5fe.hot-update.js": "/js/main.67c28937753a28b1a5fe.hot-update.js",
|
||||
"/js/main.c77543d539285c1e543f.hot-update.js": "/js/main.c77543d539285c1e543f.hot-update.js",
|
||||
"/js/main.87a307c96a03990ed2d2.hot-update.js": "/js/main.87a307c96a03990ed2d2.hot-update.js",
|
||||
"/js/main.410431febebc49d899af.hot-update.js": "/js/main.410431febebc49d899af.hot-update.js",
|
||||
"/js/main.bf80b81234310414d660.hot-update.js": "/js/main.bf80b81234310414d660.hot-update.js",
|
||||
"/js/main.feafe99eed468b85dedf.hot-update.js": "/js/main.feafe99eed468b85dedf.hot-update.js",
|
||||
"/js/main.aacf93c99eb8a3568989.hot-update.js": "/js/main.aacf93c99eb8a3568989.hot-update.js",
|
||||
"/js/main.a65b1ed2d462cd1a763f.hot-update.js": "/js/main.a65b1ed2d462cd1a763f.hot-update.js",
|
||||
"/js/main.fe60a69fef9957db3a1d.hot-update.js": "/js/main.fe60a69fef9957db3a1d.hot-update.js",
|
||||
"/js/main.7b1a834a609da6a1b646.hot-update.js": "/js/main.7b1a834a609da6a1b646.hot-update.js",
|
||||
"/js/main.242c7360b2a866a7a82d.hot-update.js": "/js/main.242c7360b2a866a7a82d.hot-update.js",
|
||||
"/js/main.40b74c52c10319637483.hot-update.js": "/js/main.40b74c52c10319637483.hot-update.js",
|
||||
"/js/main.c3b0523da3b9e289bafb.hot-update.js": "/js/main.c3b0523da3b9e289bafb.hot-update.js",
|
||||
"/js/main.08be399733e6a3153176.hot-update.js": "/js/main.08be399733e6a3153176.hot-update.js",
|
||||
"/js/main.0b308de86105413b8662.hot-update.js": "/js/main.0b308de86105413b8662.hot-update.js",
|
||||
"/js/main.981f6f1ae8471e9ed315.hot-update.js": "/js/main.981f6f1ae8471e9ed315.hot-update.js",
|
||||
"/js/main.53459c189d19f054afe7.hot-update.js": "/js/main.53459c189d19f054afe7.hot-update.js",
|
||||
"/js/main.4169b15dfc28accd6d62.hot-update.js": "/js/main.4169b15dfc28accd6d62.hot-update.js",
|
||||
"/js/main.c9200c7c0f92533c5873.hot-update.js": "/js/main.c9200c7c0f92533c5873.hot-update.js",
|
||||
"/js/main.1c9488c999bafc17a89c.hot-update.js": "/js/main.1c9488c999bafc17a89c.hot-update.js",
|
||||
"/js/main.045053c89e70c0acacf8.hot-update.js": "/js/main.045053c89e70c0acacf8.hot-update.js",
|
||||
"/js/main.ba2e5630164a8646afdf.hot-update.js": "/js/main.ba2e5630164a8646afdf.hot-update.js",
|
||||
"/js/main.46b19114682d5b1a735b.hot-update.js": "/js/main.46b19114682d5b1a735b.hot-update.js",
|
||||
"/js/main.ec39e60cb391c413c34b.hot-update.js": "/js/main.ec39e60cb391c413c34b.hot-update.js",
|
||||
"/js/main.da250e00235e15fd6f76.hot-update.js": "/js/main.da250e00235e15fd6f76.hot-update.js",
|
||||
"/js/main.6dacc4854d335e05708d.hot-update.js": "/js/main.6dacc4854d335e05708d.hot-update.js",
|
||||
"/js/main.dc90fa26fa365ecf5b2b.hot-update.js": "/js/main.dc90fa26fa365ecf5b2b.hot-update.js",
|
||||
"/js/main.9502362a8afa7e2f5876.hot-update.js": "/js/main.9502362a8afa7e2f5876.hot-update.js",
|
||||
"/js/main.802de52c0e8646bade98.hot-update.js": "/js/main.802de52c0e8646bade98.hot-update.js",
|
||||
"/js/main.2934bf35e19f55ca56be.hot-update.js": "/js/main.2934bf35e19f55ca56be.hot-update.js",
|
||||
"/js/main.bf13b7f4a625e248d25e.hot-update.js": "/js/main.bf13b7f4a625e248d25e.hot-update.js",
|
||||
"/js/main.3c651f57e3b0e4962aed.hot-update.js": "/js/main.3c651f57e3b0e4962aed.hot-update.js",
|
||||
"/js/main.fc3ac3dc56ed4c2b5a16.hot-update.js": "/js/main.fc3ac3dc56ed4c2b5a16.hot-update.js",
|
||||
"/js/main.0ff8092f8d7ef902bdea.hot-update.js": "/js/main.0ff8092f8d7ef902bdea.hot-update.js",
|
||||
"/js/main.99428fe036b8f1e6ec2a.hot-update.js": "/js/main.99428fe036b8f1e6ec2a.hot-update.js",
|
||||
"/js/main.7af48b09abf42b1527d0.hot-update.js": "/js/main.7af48b09abf42b1527d0.hot-update.js",
|
||||
"/js/main.7c2ec74ea1f2d2a64082.hot-update.js": "/js/main.7c2ec74ea1f2d2a64082.hot-update.js",
|
||||
"/js/main.4b1af8e5fbdd42203bbd.hot-update.js": "/js/main.4b1af8e5fbdd42203bbd.hot-update.js",
|
||||
"/js/main.6dfdd92d74d0221cb4cd.hot-update.js": "/js/main.6dfdd92d74d0221cb4cd.hot-update.js",
|
||||
"/js/main.93c765fa5b5967778dbb.hot-update.js": "/js/main.93c765fa5b5967778dbb.hot-update.js",
|
||||
"/js/main.145d13c9c0c8a48c8e21.hot-update.js": "/js/main.145d13c9c0c8a48c8e21.hot-update.js",
|
||||
"/js/main.1ac11f50fac4ad096666.hot-update.js": "/js/main.1ac11f50fac4ad096666.hot-update.js",
|
||||
"/js/main.cf5ad55fa219f6c47f6b.hot-update.js": "/js/main.cf5ad55fa219f6c47f6b.hot-update.js",
|
||||
"/js/main.ddad7197a46610777620.hot-update.js": "/js/main.ddad7197a46610777620.hot-update.js",
|
||||
"/js/main.e5b4b5c52b1117e66b89.hot-update.js": "/js/main.e5b4b5c52b1117e66b89.hot-update.js",
|
||||
"/js/main.214828387e374ce49d4a.hot-update.js": "/js/main.214828387e374ce49d4a.hot-update.js",
|
||||
"/js/main.be1180181c2d52cabd7a.hot-update.js": "/js/main.be1180181c2d52cabd7a.hot-update.js",
|
||||
"/js/main.0ba2839f023a6d5c2d74.hot-update.js": "/js/main.0ba2839f023a6d5c2d74.hot-update.js",
|
||||
"/js/main.d12911154ed30be00c3c.hot-update.js": "/js/main.d12911154ed30be00c3c.hot-update.js",
|
||||
"/js/main.573ef61235e9257d0090.hot-update.js": "/js/main.573ef61235e9257d0090.hot-update.js",
|
||||
"/js/main.45fec0e5951a53dbffac.hot-update.js": "/js/main.45fec0e5951a53dbffac.hot-update.js",
|
||||
"/js/main.55f54baec0450f8de63b.hot-update.js": "/js/main.55f54baec0450f8de63b.hot-update.js",
|
||||
"/js/main.6a353752cfa45cbaf1dd.hot-update.js": "/js/main.6a353752cfa45cbaf1dd.hot-update.js",
|
||||
"/js/main.7b9038028478c4f76ffe.hot-update.js": "/js/main.7b9038028478c4f76ffe.hot-update.js",
|
||||
"/js/main.23bd83f443e3593ecc35.hot-update.js": "/js/main.23bd83f443e3593ecc35.hot-update.js",
|
||||
"/js/main.392dd076165cae4a780d.hot-update.js": "/js/main.392dd076165cae4a780d.hot-update.js",
|
||||
"/js/main.49753cee6c18ab061e21.hot-update.js": "/js/main.49753cee6c18ab061e21.hot-update.js",
|
||||
"/js/main.a73a514eb28a645adfea.hot-update.js": "/js/main.a73a514eb28a645adfea.hot-update.js",
|
||||
"/js/main.6d18ebb5943b27562ba9.hot-update.js": "/js/main.6d18ebb5943b27562ba9.hot-update.js",
|
||||
"/js/main.9d0d01b4e3c3fb47d4d5.hot-update.js": "/js/main.9d0d01b4e3c3fb47d4d5.hot-update.js",
|
||||
"/js/main.7728e0d0bdca2c20f459.hot-update.js": "/js/main.7728e0d0bdca2c20f459.hot-update.js",
|
||||
"/js/main.81d0db7b2f00813f74c7.hot-update.js": "/js/main.81d0db7b2f00813f74c7.hot-update.js",
|
||||
"/js/main.a28cd765165d48725eca.hot-update.js": "/js/main.a28cd765165d48725eca.hot-update.js",
|
||||
"/js/main.8de8c3e7c3b977cc6035.hot-update.js": "/js/main.8de8c3e7c3b977cc6035.hot-update.js",
|
||||
"/js/main.782da6a66568bcd59743.hot-update.js": "/js/main.782da6a66568bcd59743.hot-update.js",
|
||||
"/js/main.60b493308d7357839512.hot-update.js": "/js/main.60b493308d7357839512.hot-update.js",
|
||||
"/js/main.33902c08d1e9836b964e.hot-update.js": "/js/main.33902c08d1e9836b964e.hot-update.js",
|
||||
"/js/main.fe1d2a997ea2be557d9f.hot-update.js": "/js/main.fe1d2a997ea2be557d9f.hot-update.js",
|
||||
"/js/main.766abe0541c6121e1924.hot-update.js": "/js/main.766abe0541c6121e1924.hot-update.js",
|
||||
"/js/main.1bd0994d893a03186dfc.hot-update.js": "/js/main.1bd0994d893a03186dfc.hot-update.js",
|
||||
"/js/main.b977ced9ab4081433316.hot-update.js": "/js/main.b977ced9ab4081433316.hot-update.js",
|
||||
"/js/main.f80f8d4812f554d678ad.hot-update.js": "/js/main.f80f8d4812f554d678ad.hot-update.js",
|
||||
"/js/main.113837549e4562048c31.hot-update.js": "/js/main.113837549e4562048c31.hot-update.js",
|
||||
"/js/main.8efa86ec49d1abb3b1f9.hot-update.js": "/js/main.8efa86ec49d1abb3b1f9.hot-update.js",
|
||||
"/js/main.4dc98433f633871bcc37.hot-update.js": "/js/main.4dc98433f633871bcc37.hot-update.js",
|
||||
"/js/main.c1bdb95bec9f98ca3621.hot-update.js": "/js/main.c1bdb95bec9f98ca3621.hot-update.js",
|
||||
"/js/main.4b537e8e13000cbe58a6.hot-update.js": "/js/main.4b537e8e13000cbe58a6.hot-update.js",
|
||||
"/js/main.45c7868f8c1bcbd2447a.hot-update.js": "/js/main.45c7868f8c1bcbd2447a.hot-update.js",
|
||||
"/js/main.71db541c42b4649a344d.hot-update.js": "/js/main.71db541c42b4649a344d.hot-update.js",
|
||||
"/js/main.68624de1ade8d60b9e00.hot-update.js": "/js/main.68624de1ade8d60b9e00.hot-update.js",
|
||||
"/js/main.aadae39c079f9b7a1ee6.hot-update.js": "/js/main.aadae39c079f9b7a1ee6.hot-update.js",
|
||||
"/js/main.680573b5ab7f89edc08d.hot-update.js": "/js/main.680573b5ab7f89edc08d.hot-update.js",
|
||||
"/js/main.43c573f053170ed1c62a.hot-update.js": "/js/main.43c573f053170ed1c62a.hot-update.js",
|
||||
"/js/main.3953b45d826e1a49afcf.hot-update.js": "/js/main.3953b45d826e1a49afcf.hot-update.js",
|
||||
"/js/main.5badeee6f9276e7b7c06.hot-update.js": "/js/main.5badeee6f9276e7b7c06.hot-update.js",
|
||||
"/js/main.ddb99e8b37bc0e95411c.hot-update.js": "/js/main.ddb99e8b37bc0e95411c.hot-update.js",
|
||||
"/js/main.f05d5a46f5caf1f2995d.hot-update.js": "/js/main.f05d5a46f5caf1f2995d.hot-update.js",
|
||||
"/js/main.e32aaf5fb351a8406d51.hot-update.js": "/js/main.e32aaf5fb351a8406d51.hot-update.js",
|
||||
"/js/main.f7a0069dfb0c28663a62.hot-update.js": "/js/main.f7a0069dfb0c28663a62.hot-update.js",
|
||||
"/js/main.6d39e5cc8cb2e945d6b3.hot-update.js": "/js/main.6d39e5cc8cb2e945d6b3.hot-update.js",
|
||||
"/js/main.24cc22fcf93008baf29d.hot-update.js": "/js/main.24cc22fcf93008baf29d.hot-update.js",
|
||||
"/js/main.3516ce8b8eb43faf298c.hot-update.js": "/js/main.3516ce8b8eb43faf298c.hot-update.js",
|
||||
"/js/main.b5292435a660203bf811.hot-update.js": "/js/main.b5292435a660203bf811.hot-update.js",
|
||||
"/js/main.13989f10bc3239c4c41f.hot-update.js": "/js/main.13989f10bc3239c4c41f.hot-update.js",
|
||||
"/js/main.8c3cab25947747b4b0b3.hot-update.js": "/js/main.8c3cab25947747b4b0b3.hot-update.js",
|
||||
"/js/main.5c20da0efc58cc7ba8b3.hot-update.js": "/js/main.5c20da0efc58cc7ba8b3.hot-update.js",
|
||||
"/js/main.66e5ed2e6cc14a0d36ae.hot-update.js": "/js/main.66e5ed2e6cc14a0d36ae.hot-update.js",
|
||||
"/js/main.0c09a0e989bcc9758370.hot-update.js": "/js/main.0c09a0e989bcc9758370.hot-update.js",
|
||||
"/js/main.ab58ad6e06d96cf8fa73.hot-update.js": "/js/main.ab58ad6e06d96cf8fa73.hot-update.js",
|
||||
"/js/main.014ff3765c75eb61f1d4.hot-update.js": "/js/main.014ff3765c75eb61f1d4.hot-update.js",
|
||||
"/js/main.bdeb8ceaa88f727f8fb6.hot-update.js": "/js/main.bdeb8ceaa88f727f8fb6.hot-update.js",
|
||||
"/js/main.9973034b32ebdc63eb82.hot-update.js": "/js/main.9973034b32ebdc63eb82.hot-update.js",
|
||||
"/js/main.9992685a6ae68c33b6c5.hot-update.js": "/js/main.9992685a6ae68c33b6c5.hot-update.js",
|
||||
"/js/main.b760fcd3b586a00f06be.hot-update.js": "/js/main.b760fcd3b586a00f06be.hot-update.js",
|
||||
"/js/main.9dc70b69960cc8fc63be.hot-update.js": "/js/main.9dc70b69960cc8fc63be.hot-update.js",
|
||||
"/js/main.e54f1b41b0056df66ebe.hot-update.js": "/js/main.e54f1b41b0056df66ebe.hot-update.js",
|
||||
"/js/main.b3d9c72543f1cc629eca.hot-update.js": "/js/main.b3d9c72543f1cc629eca.hot-update.js",
|
||||
"/js/main.a6b5bc01c37b0b8c505a.hot-update.js": "/js/main.a6b5bc01c37b0b8c505a.hot-update.js",
|
||||
"/js/main.37820b9541b87f46b5ab.hot-update.js": "/js/main.37820b9541b87f46b5ab.hot-update.js",
|
||||
"/js/main.657bfe90614336953776.hot-update.js": "/js/main.657bfe90614336953776.hot-update.js",
|
||||
"/js/main.c32cd8f6b2b69da9f69b.hot-update.js": "/js/main.c32cd8f6b2b69da9f69b.hot-update.js",
|
||||
"/js/main.0f7a1e4328a6c4020b06.hot-update.js": "/js/main.0f7a1e4328a6c4020b06.hot-update.js",
|
||||
"/js/main.6f7d46764921c16af0c3.hot-update.js": "/js/main.6f7d46764921c16af0c3.hot-update.js",
|
||||
"/js/main.a640dda4a79379ab0d71.hot-update.js": "/js/main.a640dda4a79379ab0d71.hot-update.js",
|
||||
"/js/main.9d51e284c5c6da62c608.hot-update.js": "/js/main.9d51e284c5c6da62c608.hot-update.js",
|
||||
"/js/main.2175685495a1e1f69c7b.hot-update.js": "/js/main.2175685495a1e1f69c7b.hot-update.js",
|
||||
"/js/main.2150d320284b6237889c.hot-update.js": "/js/main.2150d320284b6237889c.hot-update.js",
|
||||
"/js/main.b8a254bed361a09ff366.hot-update.js": "/js/main.b8a254bed361a09ff366.hot-update.js",
|
||||
"/js/main.0b3526ea8bfd5256691a.hot-update.js": "/js/main.0b3526ea8bfd5256691a.hot-update.js",
|
||||
"/js/main.1cea96ea65fa4202ca3c.hot-update.js": "/js/main.1cea96ea65fa4202ca3c.hot-update.js",
|
||||
"/js/main.8bad8f660e3c6f7bfc0f.hot-update.js": "/js/main.8bad8f660e3c6f7bfc0f.hot-update.js",
|
||||
"/js/main.72b032a1aecb09cfe6a2.hot-update.js": "/js/main.72b032a1aecb09cfe6a2.hot-update.js",
|
||||
"/js/main.02b3767fb3fe1ca0542e.hot-update.js": "/js/main.02b3767fb3fe1ca0542e.hot-update.js",
|
||||
"/js/main.78cfd839671f52b65307.hot-update.js": "/js/main.78cfd839671f52b65307.hot-update.js",
|
||||
"/js/main.d12832c9351968e74050.hot-update.js": "/js/main.d12832c9351968e74050.hot-update.js",
|
||||
"/js/main.6d2c73ad0bf43e6bb5be.hot-update.js": "/js/main.6d2c73ad0bf43e6bb5be.hot-update.js",
|
||||
"/js/main.9ad41591f7f3af3cecfe.hot-update.js": "/js/main.9ad41591f7f3af3cecfe.hot-update.js",
|
||||
"/js/main.2215c5e36d89ce7a343e.hot-update.js": "/js/main.2215c5e36d89ce7a343e.hot-update.js",
|
||||
"/js/main.6ff01a84a6d8c537ae38.hot-update.js": "/js/main.6ff01a84a6d8c537ae38.hot-update.js",
|
||||
"/js/main.23840c43fe4cf577a15d.hot-update.js": "/js/main.23840c43fe4cf577a15d.hot-update.js",
|
||||
"/js/main.5f0e5ecf4e8fe2ec096e.hot-update.js": "/js/main.5f0e5ecf4e8fe2ec096e.hot-update.js",
|
||||
"/js/main.7131a1b0b9c7105ff539.hot-update.js": "/js/main.7131a1b0b9c7105ff539.hot-update.js",
|
||||
"/js/main.d7309f447054aabfa409.hot-update.js": "/js/main.d7309f447054aabfa409.hot-update.js",
|
||||
"/js/main.3ac39eb05bbd34bfac97.hot-update.js": "/js/main.3ac39eb05bbd34bfac97.hot-update.js",
|
||||
"/js/main.b214f9b3b3ecc253ebf1.hot-update.js": "/js/main.b214f9b3b3ecc253ebf1.hot-update.js",
|
||||
"/js/main.71a9533ff4ae330cccf3.hot-update.js": "/js/main.71a9533ff4ae330cccf3.hot-update.js",
|
||||
"/js/main.ba1144e1135a00e461c7.hot-update.js": "/js/main.ba1144e1135a00e461c7.hot-update.js",
|
||||
"/js/main.bf7c574279d8acce16aa.hot-update.js": "/js/main.bf7c574279d8acce16aa.hot-update.js",
|
||||
"/js/main.2d291ea3de6f1da7058b.hot-update.js": "/js/main.2d291ea3de6f1da7058b.hot-update.js",
|
||||
"/js/main.ba6d4d2a8857566c2ec5.hot-update.js": "/js/main.ba6d4d2a8857566c2ec5.hot-update.js",
|
||||
"/js/main.5645b3eeecc1b560614b.hot-update.js": "/js/main.5645b3eeecc1b560614b.hot-update.js",
|
||||
"/js/main.e84e10d63ed04fd272cc.hot-update.js": "/js/main.e84e10d63ed04fd272cc.hot-update.js",
|
||||
"/js/main.f04fc23ca1938e02fecc.hot-update.js": "/js/main.f04fc23ca1938e02fecc.hot-update.js",
|
||||
"/js/main.c8f623bc44d30e89ead8.hot-update.js": "/js/main.c8f623bc44d30e89ead8.hot-update.js",
|
||||
"/js/main.0280d7a9b768ba9a2c93.hot-update.js": "/js/main.0280d7a9b768ba9a2c93.hot-update.js",
|
||||
"/js/main.f8a594d8edfc9b0000f1.hot-update.js": "/js/main.f8a594d8edfc9b0000f1.hot-update.js",
|
||||
"/js/main.ed950c2728a18e80ef97.hot-update.js": "/js/main.ed950c2728a18e80ef97.hot-update.js",
|
||||
"/js/main.e5856a633b84a0158c7d.hot-update.js": "/js/main.e5856a633b84a0158c7d.hot-update.js",
|
||||
"/js/main.0abc8a7cbdcf0be7da0e.hot-update.js": "/js/main.0abc8a7cbdcf0be7da0e.hot-update.js",
|
||||
"/js/main.b2f5c2c22feadd2b4c0c.hot-update.js": "/js/main.b2f5c2c22feadd2b4c0c.hot-update.js",
|
||||
"/js/main.4d8346cf984a588b6f13.hot-update.js": "/js/main.4d8346cf984a588b6f13.hot-update.js",
|
||||
"/js/main.53c5573b85a9e73d1758.hot-update.js": "/js/main.53c5573b85a9e73d1758.hot-update.js",
|
||||
"/js/main.95a3639e43650ef3faa5.hot-update.js": "/js/main.95a3639e43650ef3faa5.hot-update.js",
|
||||
"/js/main.1d8220b4ab8ca4dc8a51.hot-update.js": "/js/main.1d8220b4ab8ca4dc8a51.hot-update.js",
|
||||
"/js/main.7f9b84329de8111fae87.hot-update.js": "/js/main.7f9b84329de8111fae87.hot-update.js",
|
||||
"/js/main.36b87f3da6ef386e6fc5.hot-update.js": "/js/main.36b87f3da6ef386e6fc5.hot-update.js",
|
||||
"/js/main.71e32fb234f1fe2b8010.hot-update.js": "/js/main.71e32fb234f1fe2b8010.hot-update.js",
|
||||
"/js/main.1b05b55650fcf1f390d3.hot-update.js": "/js/main.1b05b55650fcf1f390d3.hot-update.js",
|
||||
"/js/main.fb5179244b436eaa3615.hot-update.js": "/js/main.fb5179244b436eaa3615.hot-update.js",
|
||||
"/js/main.40fd3d4d2879012e29b8.hot-update.js": "/js/main.40fd3d4d2879012e29b8.hot-update.js",
|
||||
"/js/main.4b9478fffdeba2a4b93b.hot-update.js": "/js/main.4b9478fffdeba2a4b93b.hot-update.js",
|
||||
"/js/main.5af5027b0ae287a82f35.hot-update.js": "/js/main.5af5027b0ae287a82f35.hot-update.js",
|
||||
"/js/main.52237080c7c31898ab5a.hot-update.js": "/js/main.52237080c7c31898ab5a.hot-update.js",
|
||||
"/js/main.979c5eedc1444456464e.hot-update.js": "/js/main.979c5eedc1444456464e.hot-update.js",
|
||||
"/js/main.9017fe0f3183ac0f365d.hot-update.js": "/js/main.9017fe0f3183ac0f365d.hot-update.js",
|
||||
"/js/main.dfc8f8e1cd5a747133c9.hot-update.js": "/js/main.dfc8f8e1cd5a747133c9.hot-update.js",
|
||||
"/js/main.054acdb0153a952d0c1b.hot-update.js": "/js/main.054acdb0153a952d0c1b.hot-update.js",
|
||||
"/js/main.1b7b81d03c708864d83f.hot-update.js": "/js/main.1b7b81d03c708864d83f.hot-update.js",
|
||||
"/js/main.0e1d7e4955c92a4a6433.hot-update.js": "/js/main.0e1d7e4955c92a4a6433.hot-update.js",
|
||||
"/js/main.6d20f9f009d9fa3b6c33.hot-update.js": "/js/main.6d20f9f009d9fa3b6c33.hot-update.js",
|
||||
"/js/main.29cb935e6d27bab5cc6f.hot-update.js": "/js/main.29cb935e6d27bab5cc6f.hot-update.js",
|
||||
"/js/main.633978191e0ccd858642.hot-update.js": "/js/main.633978191e0ccd858642.hot-update.js",
|
||||
"/js/main.faf763c5c889e90c24d3.hot-update.js": "/js/main.faf763c5c889e90c24d3.hot-update.js",
|
||||
"/js/main.0ee392e693e07d2adc39.hot-update.js": "/js/main.0ee392e693e07d2adc39.hot-update.js",
|
||||
"/js/main.f04167e5bde2e8ba1328.hot-update.js": "/js/main.f04167e5bde2e8ba1328.hot-update.js",
|
||||
"/js/main.ad5ce2ace93bd4885e2d.hot-update.js": "/js/main.ad5ce2ace93bd4885e2d.hot-update.js",
|
||||
"/js/main.0318bd00035642cab7dc.hot-update.js": "/js/main.0318bd00035642cab7dc.hot-update.js",
|
||||
"/js/main.6f3d3c5df9f7de3bad94.hot-update.js": "/js/main.6f3d3c5df9f7de3bad94.hot-update.js",
|
||||
"/js/main.cd07d28a55c157b257a0.hot-update.js": "/js/main.cd07d28a55c157b257a0.hot-update.js",
|
||||
"/js/main.3ec8510bd27897443ad8.hot-update.js": "/js/main.3ec8510bd27897443ad8.hot-update.js",
|
||||
"/js/main.b06803d15413598cf921.hot-update.js": "/js/main.b06803d15413598cf921.hot-update.js",
|
||||
"/js/main.bb7669043d86cf1071be.hot-update.js": "/js/main.bb7669043d86cf1071be.hot-update.js",
|
||||
"/js/main.7dfd9e155cee0aa2a655.hot-update.js": "/js/main.7dfd9e155cee0aa2a655.hot-update.js",
|
||||
"/js/main.becd5b839417ba9cc61f.hot-update.js": "/js/main.becd5b839417ba9cc61f.hot-update.js",
|
||||
"/js/main.3fa003535cf601923d82.hot-update.js": "/js/main.3fa003535cf601923d82.hot-update.js",
|
||||
"/js/main.4a56e0b1dd3dbcc32341.hot-update.js": "/js/main.4a56e0b1dd3dbcc32341.hot-update.js",
|
||||
"/js/main.0d7a61917a0a8974c35f.hot-update.js": "/js/main.0d7a61917a0a8974c35f.hot-update.js",
|
||||
"/js/main.a091a3a1923781c21dc4.hot-update.js": "/js/main.a091a3a1923781c21dc4.hot-update.js",
|
||||
"/js/main.38c7c1a4b64333d9f5c3.hot-update.js": "/js/main.38c7c1a4b64333d9f5c3.hot-update.js",
|
||||
"/js/main.5aeb23d042dc02182f9d.hot-update.js": "/js/main.5aeb23d042dc02182f9d.hot-update.js",
|
||||
"/js/main.626ffbf9740c4905f231.hot-update.js": "/js/main.626ffbf9740c4905f231.hot-update.js",
|
||||
"/js/main.c7362f11fed7aafdb123.hot-update.js": "/js/main.c7362f11fed7aafdb123.hot-update.js",
|
||||
"/js/main.b04a05c0843829183afe.hot-update.js": "/js/main.b04a05c0843829183afe.hot-update.js",
|
||||
"/js/main.461fa5fdd23afe6d9fe6.hot-update.js": "/js/main.461fa5fdd23afe6d9fe6.hot-update.js",
|
||||
"/js/main.e0a1840ae50bf07401a0.hot-update.js": "/js/main.e0a1840ae50bf07401a0.hot-update.js",
|
||||
"/js/main.8b25371935db26e8c4b4.hot-update.js": "/js/main.8b25371935db26e8c4b4.hot-update.js",
|
||||
"/js/main.b84c56a5501bf599ddef.hot-update.js": "/js/main.b84c56a5501bf599ddef.hot-update.js",
|
||||
"/js/main.0ea41ac8e5a5b827183d.hot-update.js": "/js/main.0ea41ac8e5a5b827183d.hot-update.js",
|
||||
"/js/main.328a6e59c166775f5876.hot-update.js": "/js/main.328a6e59c166775f5876.hot-update.js",
|
||||
"/js/main.595a3d7a93987329ca5b.hot-update.js": "/js/main.595a3d7a93987329ca5b.hot-update.js",
|
||||
"/js/main.ad79a5b7d119ed6c423d.hot-update.js": "/js/main.ad79a5b7d119ed6c423d.hot-update.js",
|
||||
"/js/main.d08edda6d82bd9398e71.hot-update.js": "/js/main.d08edda6d82bd9398e71.hot-update.js",
|
||||
"/js/main.66c83d5d6ff775619e6a.hot-update.js": "/js/main.66c83d5d6ff775619e6a.hot-update.js",
|
||||
"/js/main.acc4d5e33a6f6db74e99.hot-update.js": "/js/main.acc4d5e33a6f6db74e99.hot-update.js",
|
||||
"/js/main.c7608c4460d04dc68a7b.hot-update.js": "/js/main.c7608c4460d04dc68a7b.hot-update.js",
|
||||
"/js/main.9560166479247c1360a4.hot-update.js": "/js/main.9560166479247c1360a4.hot-update.js",
|
||||
"/js/main.2bfbfe88c7cbaa237cdf.hot-update.js": "/js/main.2bfbfe88c7cbaa237cdf.hot-update.js",
|
||||
"/js/main.1727b96758d6ec12ec1a.hot-update.js": "/js/main.1727b96758d6ec12ec1a.hot-update.js",
|
||||
"/js/main.18285ba868e3c2b26cdb.hot-update.js": "/js/main.18285ba868e3c2b26cdb.hot-update.js",
|
||||
"/js/main.fca0118a70bd996c3a3a.hot-update.js": "/js/main.fca0118a70bd996c3a3a.hot-update.js",
|
||||
"/js/main.adabd48fe18c1ed75a9f.hot-update.js": "/js/main.adabd48fe18c1ed75a9f.hot-update.js",
|
||||
"/js/main.a86fbcc56fdd4977f174.hot-update.js": "/js/main.a86fbcc56fdd4977f174.hot-update.js",
|
||||
"/js/main.9cd6b1916fdcf8b0e3e7.hot-update.js": "/js/main.9cd6b1916fdcf8b0e3e7.hot-update.js",
|
||||
"/js/main.72419a76c9b4b47b6963.hot-update.js": "/js/main.72419a76c9b4b47b6963.hot-update.js",
|
||||
"/js/main.4dea1104f50471aa6f64.hot-update.js": "/js/main.4dea1104f50471aa6f64.hot-update.js",
|
||||
"/js/main.26154029797256dee15b.hot-update.js": "/js/main.26154029797256dee15b.hot-update.js",
|
||||
"/js/main.f76525f7fe55e49591da.hot-update.js": "/js/main.f76525f7fe55e49591da.hot-update.js",
|
||||
"/js/main.06e4485426b6a62d5fa2.hot-update.js": "/js/main.06e4485426b6a62d5fa2.hot-update.js",
|
||||
"/js/main.e8d66784dbf3edfacc70.hot-update.js": "/js/main.e8d66784dbf3edfacc70.hot-update.js",
|
||||
"/js/main.3d985e37671fe9bd3e0c.hot-update.js": "/js/main.3d985e37671fe9bd3e0c.hot-update.js",
|
||||
"/js/main.44e26c8753354ab6eacc.hot-update.js": "/js/main.44e26c8753354ab6eacc.hot-update.js",
|
||||
"/js/main.6aa622630357ff6b92bb.hot-update.js": "/js/main.6aa622630357ff6b92bb.hot-update.js",
|
||||
"/js/main.36ee2cbe2e1cdf1d2db2.hot-update.js": "/js/main.36ee2cbe2e1cdf1d2db2.hot-update.js",
|
||||
"/js/main.dff69ffc5c5136e8a59f.hot-update.js": "/js/main.dff69ffc5c5136e8a59f.hot-update.js",
|
||||
"/js/main.74df9c1a881e7060c06a.hot-update.js": "/js/main.74df9c1a881e7060c06a.hot-update.js",
|
||||
"/js/main.c71833bbfefbfa17deb0.hot-update.js": "/js/main.c71833bbfefbfa17deb0.hot-update.js",
|
||||
"/js/main.ea3b3d11f5ba575cc1a9.hot-update.js": "/js/main.ea3b3d11f5ba575cc1a9.hot-update.js",
|
||||
"/js/main.375a09e047f6de44b751.hot-update.js": "/js/main.375a09e047f6de44b751.hot-update.js",
|
||||
"/js/main.b88e01086aff7e390931.hot-update.js": "/js/main.b88e01086aff7e390931.hot-update.js",
|
||||
"/js/main.bdafae541f4950dfb102.hot-update.js": "/js/main.bdafae541f4950dfb102.hot-update.js",
|
||||
"/js/main.2b4522ef2be08f9b6b2a.hot-update.js": "/js/main.2b4522ef2be08f9b6b2a.hot-update.js",
|
||||
"/js/main.1cf0f751d686b23b4d9c.hot-update.js": "/js/main.1cf0f751d686b23b4d9c.hot-update.js",
|
||||
"/js/main.7ad2beff93a3ccd5eecc.hot-update.js": "/js/main.7ad2beff93a3ccd5eecc.hot-update.js",
|
||||
"/js/main.8d29944d11794f6008fc.hot-update.js": "/js/main.8d29944d11794f6008fc.hot-update.js",
|
||||
"/js/main.14ac674beee1c96cc908.hot-update.js": "/js/main.14ac674beee1c96cc908.hot-update.js",
|
||||
"/js/main.4df8db8fbc00f790b35f.hot-update.js": "/js/main.4df8db8fbc00f790b35f.hot-update.js",
|
||||
"/js/main.83bd99ee8fab0305549a.hot-update.js": "/js/main.83bd99ee8fab0305549a.hot-update.js",
|
||||
"/js/main.b98a50855de0e8b3f1d7.hot-update.js": "/js/main.b98a50855de0e8b3f1d7.hot-update.js",
|
||||
"/js/main.f172526d87e5bcf4167f.hot-update.js": "/js/main.f172526d87e5bcf4167f.hot-update.js",
|
||||
"/js/main.39f5347e2c133fadf7d9.hot-update.js": "/js/main.39f5347e2c133fadf7d9.hot-update.js",
|
||||
"/js/main.294c300a035f6d93d7ee.hot-update.js": "/js/main.294c300a035f6d93d7ee.hot-update.js",
|
||||
"/js/main.ebe948263e7b010f01c6.hot-update.js": "/js/main.ebe948263e7b010f01c6.hot-update.js",
|
||||
"/js/main.2e664ac19e1847cd6cd4.hot-update.js": "/js/main.2e664ac19e1847cd6cd4.hot-update.js"
|
||||
"/js/main.db73e300d42a147d92c9.hot-update.js": "/js/main.db73e300d42a147d92c9.hot-update.js",
|
||||
"/js/main.0ea5df0b535e6454abdc.hot-update.js": "/js/main.0ea5df0b535e6454abdc.hot-update.js",
|
||||
"/js/main.2cda68eaebe1626133c7.hot-update.js": "/js/main.2cda68eaebe1626133c7.hot-update.js",
|
||||
"/js/main.88f0e74490296b17f12b.hot-update.js": "/js/main.88f0e74490296b17f12b.hot-update.js",
|
||||
"/js/main.8ba41725bdb9b08ea41b.hot-update.js": "/js/main.8ba41725bdb9b08ea41b.hot-update.js",
|
||||
"/js/main.7b5e66db24a0d8fffc66.hot-update.js": "/js/main.7b5e66db24a0d8fffc66.hot-update.js",
|
||||
"/js/main.e44f7ecf17c7e0268ae4.hot-update.js": "/js/main.e44f7ecf17c7e0268ae4.hot-update.js",
|
||||
"/js/main.6749d2651a3d98182751.hot-update.js": "/js/main.6749d2651a3d98182751.hot-update.js",
|
||||
"/js/main.5c564e162157c5e6fb80.hot-update.js": "/js/main.5c564e162157c5e6fb80.hot-update.js",
|
||||
"/js/main.c6a1574884392a89cbaa.hot-update.js": "/js/main.c6a1574884392a89cbaa.hot-update.js",
|
||||
"/js/main.cdebd19025c701560b92.hot-update.js": "/js/main.cdebd19025c701560b92.hot-update.js",
|
||||
"/js/main.f896b7d13aad9732ad0e.hot-update.js": "/js/main.f896b7d13aad9732ad0e.hot-update.js",
|
||||
"/js/main.14e6ae82553043793d06.hot-update.js": "/js/main.14e6ae82553043793d06.hot-update.js",
|
||||
"/js/main.e1d8968eaca9c7a94e14.hot-update.js": "/js/main.e1d8968eaca9c7a94e14.hot-update.js",
|
||||
"/js/main.ee5e426715877748a226.hot-update.js": "/js/main.ee5e426715877748a226.hot-update.js",
|
||||
"/js/main.54454754153a4b810c68.hot-update.js": "/js/main.54454754153a4b810c68.hot-update.js",
|
||||
"/js/main.73250572619a4dca0d35.hot-update.js": "/js/main.73250572619a4dca0d35.hot-update.js",
|
||||
"/js/main.4dbe97b31e06a3c1bebf.hot-update.js": "/js/main.4dbe97b31e06a3c1bebf.hot-update.js",
|
||||
"/js/main.809268a1e86deba22298.hot-update.js": "/js/main.809268a1e86deba22298.hot-update.js",
|
||||
"/js/main.4490e500053d12748641.hot-update.js": "/js/main.4490e500053d12748641.hot-update.js",
|
||||
"/js/main.3953c82fcb9e8aa236f4.hot-update.js": "/js/main.3953c82fcb9e8aa236f4.hot-update.js",
|
||||
"/js/main.90a12056f475838d806c.hot-update.js": "/js/main.90a12056f475838d806c.hot-update.js",
|
||||
"/js/main.fba13eb0d8bdc2de63f9.hot-update.js": "/js/main.fba13eb0d8bdc2de63f9.hot-update.js",
|
||||
"/js/main.2d77e5427d4b8b55419b.hot-update.js": "/js/main.2d77e5427d4b8b55419b.hot-update.js",
|
||||
"/js/main.966dba3cdb08000411ae.hot-update.js": "/js/main.966dba3cdb08000411ae.hot-update.js",
|
||||
"/js/main.8a320a785898586b8d10.hot-update.js": "/js/main.8a320a785898586b8d10.hot-update.js",
|
||||
"/js/main.28edbc28a0031b3f4913.hot-update.js": "/js/main.28edbc28a0031b3f4913.hot-update.js",
|
||||
"/js/main.79eb3750c72852c42485.hot-update.js": "/js/main.79eb3750c72852c42485.hot-update.js",
|
||||
"/js/main.9703ef1a8f855482838f.hot-update.js": "/js/main.9703ef1a8f855482838f.hot-update.js",
|
||||
"/js/main.1cbfcf8465e5d6aa0096.hot-update.js": "/js/main.1cbfcf8465e5d6aa0096.hot-update.js",
|
||||
"/js/main.f1e7b129d14fc15d72e8.hot-update.js": "/js/main.f1e7b129d14fc15d72e8.hot-update.js",
|
||||
"/js/main.58f0f9d441ec01c7d553.hot-update.js": "/js/main.58f0f9d441ec01c7d553.hot-update.js",
|
||||
"/js/main.45858a0dfab5dd3a911a.hot-update.js": "/js/main.45858a0dfab5dd3a911a.hot-update.js",
|
||||
"/js/main.ade5cf3ef31b2e506425.hot-update.js": "/js/main.ade5cf3ef31b2e506425.hot-update.js",
|
||||
"/js/main.c4304b2de45e8f06f7b5.hot-update.js": "/js/main.c4304b2de45e8f06f7b5.hot-update.js",
|
||||
"/js/main.0961cf18a9605cb65e3f.hot-update.js": "/js/main.0961cf18a9605cb65e3f.hot-update.js",
|
||||
"/js/main.5a371d0e098a933c4640.hot-update.js": "/js/main.5a371d0e098a933c4640.hot-update.js",
|
||||
"/js/main.d3c2f6bd4ce092746115.hot-update.js": "/js/main.d3c2f6bd4ce092746115.hot-update.js",
|
||||
"/js/main.e191340cc52008653ed0.hot-update.js": "/js/main.e191340cc52008653ed0.hot-update.js",
|
||||
"/js/main.3cb43f27a625a07fcc0b.hot-update.js": "/js/main.3cb43f27a625a07fcc0b.hot-update.js",
|
||||
"/js/main.1410e64aed21b84592e7.hot-update.js": "/js/main.1410e64aed21b84592e7.hot-update.js",
|
||||
"/js/main.08a6a51c0acea91879f7.hot-update.js": "/js/main.08a6a51c0acea91879f7.hot-update.js",
|
||||
"/js/main.f3a5ecf31e3df2d23957.hot-update.js": "/js/main.f3a5ecf31e3df2d23957.hot-update.js",
|
||||
"/js/main.7c67297040c94f2a585e.hot-update.js": "/js/main.7c67297040c94f2a585e.hot-update.js",
|
||||
"/js/main.d7c58200175c3d4ab962.hot-update.js": "/js/main.d7c58200175c3d4ab962.hot-update.js",
|
||||
"/js/main.58979cee95bba3ec04c5.hot-update.js": "/js/main.58979cee95bba3ec04c5.hot-update.js",
|
||||
"/js/main.94f329f8b9d0aa2d4182.hot-update.js": "/js/main.94f329f8b9d0aa2d4182.hot-update.js",
|
||||
"/js/main.23a1f3a1d28f2b39e1b7.hot-update.js": "/js/main.23a1f3a1d28f2b39e1b7.hot-update.js",
|
||||
"/js/main.a7df7455225c5d05227f.hot-update.js": "/js/main.a7df7455225c5d05227f.hot-update.js",
|
||||
"/js/main.7b16550bbd8be6cc9b8d.hot-update.js": "/js/main.7b16550bbd8be6cc9b8d.hot-update.js",
|
||||
"/js/main.780968811eb17fef25a7.hot-update.js": "/js/main.780968811eb17fef25a7.hot-update.js",
|
||||
"/js/main.aad31e3890b61350c4fa.hot-update.js": "/js/main.aad31e3890b61350c4fa.hot-update.js",
|
||||
"/js/main.41b4b985c13b8890717d.hot-update.js": "/js/main.41b4b985c13b8890717d.hot-update.js",
|
||||
"/js/main.e025100d60c74d0392d1.hot-update.js": "/js/main.e025100d60c74d0392d1.hot-update.js",
|
||||
"/js/main.67661103ba5d1dd3cac6.hot-update.js": "/js/main.67661103ba5d1dd3cac6.hot-update.js",
|
||||
"/js/main.4859f6f2e961eba13edf.hot-update.js": "/js/main.4859f6f2e961eba13edf.hot-update.js",
|
||||
"/js/main.2412ccd7b9afcb3dd059.hot-update.js": "/js/main.2412ccd7b9afcb3dd059.hot-update.js",
|
||||
"/js/main.0a9300e8875685257a5a.hot-update.js": "/js/main.0a9300e8875685257a5a.hot-update.js",
|
||||
"/js/main.6e32369655d811852893.hot-update.js": "/js/main.6e32369655d811852893.hot-update.js",
|
||||
"/js/main.07e4dcb8b14f80943019.hot-update.js": "/js/main.07e4dcb8b14f80943019.hot-update.js",
|
||||
"/js/main.a970e8749724b2c1488f.hot-update.js": "/js/main.a970e8749724b2c1488f.hot-update.js",
|
||||
"/js/main.26c44e4e22a245d1e8a9.hot-update.js": "/js/main.26c44e4e22a245d1e8a9.hot-update.js",
|
||||
"/js/main.de6ddacb5c245c079fab.hot-update.js": "/js/main.de6ddacb5c245c079fab.hot-update.js",
|
||||
"/js/main.564a42509ff2e25ba549.hot-update.js": "/js/main.564a42509ff2e25ba549.hot-update.js",
|
||||
"/js/main.c63aad49b7cd674b91a7.hot-update.js": "/js/main.c63aad49b7cd674b91a7.hot-update.js",
|
||||
"/js/main.81931bb64710a2f54368.hot-update.js": "/js/main.81931bb64710a2f54368.hot-update.js",
|
||||
"/js/main.34efd0ebe70125b4d9cd.hot-update.js": "/js/main.34efd0ebe70125b4d9cd.hot-update.js",
|
||||
"/js/main.3de56aa8af78d2912a79.hot-update.js": "/js/main.3de56aa8af78d2912a79.hot-update.js",
|
||||
"/js/main.3492d8df8ba23f79e39f.hot-update.js": "/js/main.3492d8df8ba23f79e39f.hot-update.js",
|
||||
"/js/main.1a1f505e34d61bf5c741.hot-update.js": "/js/main.1a1f505e34d61bf5c741.hot-update.js",
|
||||
"/js/main.7d6fa20346e95f934020.hot-update.js": "/js/main.7d6fa20346e95f934020.hot-update.js",
|
||||
"/js/main.e5fa1224b06e6203aaa4.hot-update.js": "/js/main.e5fa1224b06e6203aaa4.hot-update.js",
|
||||
"/js/main.a2e4f55324730e0a1137.hot-update.js": "/js/main.a2e4f55324730e0a1137.hot-update.js",
|
||||
"/js/main.82081e3a97b9075cbf38.hot-update.js": "/js/main.82081e3a97b9075cbf38.hot-update.js",
|
||||
"/js/main.ab06dcdaa2fc897e4576.hot-update.js": "/js/main.ab06dcdaa2fc897e4576.hot-update.js",
|
||||
"/js/main.8aee157f69acbf01d692.hot-update.js": "/js/main.8aee157f69acbf01d692.hot-update.js",
|
||||
"/js/main.82087e18f1767795f3cc.hot-update.js": "/js/main.82087e18f1767795f3cc.hot-update.js",
|
||||
"/js/main.f2c483d7d1261df861b3.hot-update.js": "/js/main.f2c483d7d1261df861b3.hot-update.js",
|
||||
"/js/main.ef75264f1a02af5ca3cd.hot-update.js": "/js/main.ef75264f1a02af5ca3cd.hot-update.js",
|
||||
"/js/main.cd61e67651fe4e61f358.hot-update.js": "/js/main.cd61e67651fe4e61f358.hot-update.js",
|
||||
"/js/main.97ba89c984ffe538a333.hot-update.js": "/js/main.97ba89c984ffe538a333.hot-update.js",
|
||||
"/js/main.a23de6f4cea6b80806b4.hot-update.js": "/js/main.a23de6f4cea6b80806b4.hot-update.js",
|
||||
"/js/main.90440654186ae45a6f63.hot-update.js": "/js/main.90440654186ae45a6f63.hot-update.js",
|
||||
"/js/main.483297e74b80dfdc50c3.hot-update.js": "/js/main.483297e74b80dfdc50c3.hot-update.js",
|
||||
"/js/main.e2831389d5cdf78e4bd3.hot-update.js": "/js/main.e2831389d5cdf78e4bd3.hot-update.js",
|
||||
"/js/main.3af60e2033e8130d75f6.hot-update.js": "/js/main.3af60e2033e8130d75f6.hot-update.js",
|
||||
"/js/main.1b1ac80d4947b920ea2f.hot-update.js": "/js/main.1b1ac80d4947b920ea2f.hot-update.js",
|
||||
"/js/main.8a52e7d2eff934f9de4d.hot-update.js": "/js/main.8a52e7d2eff934f9de4d.hot-update.js",
|
||||
"/js/main.b67e5558feff737183b6.hot-update.js": "/js/main.b67e5558feff737183b6.hot-update.js",
|
||||
"/js/main.2202ff72b0fe9ff3f0c2.hot-update.js": "/js/main.2202ff72b0fe9ff3f0c2.hot-update.js",
|
||||
"/js/main.d9cb8d8e4ca7d410b22f.hot-update.js": "/js/main.d9cb8d8e4ca7d410b22f.hot-update.js",
|
||||
"/js/main.a1d688c433c9fcf14bab.hot-update.js": "/js/main.a1d688c433c9fcf14bab.hot-update.js",
|
||||
"/js/main.b2cf91ae6a0fbc682e64.hot-update.js": "/js/main.b2cf91ae6a0fbc682e64.hot-update.js",
|
||||
"/js/main.63e1d96c978ec4ca4e3a.hot-update.js": "/js/main.63e1d96c978ec4ca4e3a.hot-update.js",
|
||||
"/js/main.6e476cf8eabaf496f17a.hot-update.js": "/js/main.6e476cf8eabaf496f17a.hot-update.js",
|
||||
"/js/main.fa9bfaf5cf5b454739e7.hot-update.js": "/js/main.fa9bfaf5cf5b454739e7.hot-update.js",
|
||||
"/js/main.b246393843e1e04d1472.hot-update.js": "/js/main.b246393843e1e04d1472.hot-update.js",
|
||||
"/js/main.cfeac3c0594ca2e18cbc.hot-update.js": "/js/main.cfeac3c0594ca2e18cbc.hot-update.js",
|
||||
"/js/main.ffaf8712fd1cd702ea8a.hot-update.js": "/js/main.ffaf8712fd1cd702ea8a.hot-update.js",
|
||||
"/js/main.1a9b77d1d99fa0cbe049.hot-update.js": "/js/main.1a9b77d1d99fa0cbe049.hot-update.js",
|
||||
"/js/main.35f70fbeab261f617c64.hot-update.js": "/js/main.35f70fbeab261f617c64.hot-update.js",
|
||||
"/js/main.2adec493e4879764b552.hot-update.js": "/js/main.2adec493e4879764b552.hot-update.js",
|
||||
"/js/main.84e27e090764f99a5f8d.hot-update.js": "/js/main.84e27e090764f99a5f8d.hot-update.js",
|
||||
"/js/main.d5fad1aae15440174c3b.hot-update.js": "/js/main.d5fad1aae15440174c3b.hot-update.js",
|
||||
"/js/main.f082a5aa1a7d811653b0.hot-update.js": "/js/main.f082a5aa1a7d811653b0.hot-update.js",
|
||||
"/js/main.cd15a772e4d701a910b1.hot-update.js": "/js/main.cd15a772e4d701a910b1.hot-update.js",
|
||||
"/js/main.1e62178bd569cacdace7.hot-update.js": "/js/main.1e62178bd569cacdace7.hot-update.js",
|
||||
"/js/main.19bca5f612f96fe6d127.hot-update.js": "/js/main.19bca5f612f96fe6d127.hot-update.js",
|
||||
"/js/main.c775d381b77c164f7fc4.hot-update.js": "/js/main.c775d381b77c164f7fc4.hot-update.js",
|
||||
"/js/main.f8c6cffd1559d9578b83.hot-update.js": "/js/main.f8c6cffd1559d9578b83.hot-update.js",
|
||||
"/js/main.c7ff369b0854108f96c7.hot-update.js": "/js/main.c7ff369b0854108f96c7.hot-update.js",
|
||||
"/js/main.062ff67378e519023a1e.hot-update.js": "/js/main.062ff67378e519023a1e.hot-update.js",
|
||||
"/js/main.6e66fc4d78272a71315e.hot-update.js": "/js/main.6e66fc4d78272a71315e.hot-update.js",
|
||||
"/js/main.a8e90242995935949f17.hot-update.js": "/js/main.a8e90242995935949f17.hot-update.js",
|
||||
"/js/main.4e224f3aad42c7f5ed0b.hot-update.js": "/js/main.4e224f3aad42c7f5ed0b.hot-update.js",
|
||||
"/js/main.385eb38db8eb0702b502.hot-update.js": "/js/main.385eb38db8eb0702b502.hot-update.js",
|
||||
"/js/main.996d84214f93de3c1c0b.hot-update.js": "/js/main.996d84214f93de3c1c0b.hot-update.js",
|
||||
"/js/main.38d70851a7c72784d66d.hot-update.js": "/js/main.38d70851a7c72784d66d.hot-update.js",
|
||||
"/js/main.dbbfab82de065b7b60cd.hot-update.js": "/js/main.dbbfab82de065b7b60cd.hot-update.js",
|
||||
"/js/main.574aea784108ee1eac07.hot-update.js": "/js/main.574aea784108ee1eac07.hot-update.js",
|
||||
"/js/main.9de756c799555e75db7d.hot-update.js": "/js/main.9de756c799555e75db7d.hot-update.js",
|
||||
"/js/main.83ab95777680fb06e0aa.hot-update.js": "/js/main.83ab95777680fb06e0aa.hot-update.js",
|
||||
"/js/main.e666c42f96b6bdb22969.hot-update.js": "/js/main.e666c42f96b6bdb22969.hot-update.js",
|
||||
"/js/main.03428097b17bfe163a16.hot-update.js": "/js/main.03428097b17bfe163a16.hot-update.js",
|
||||
"/js/main.05d6a5f7f8c614a903e8.hot-update.js": "/js/main.05d6a5f7f8c614a903e8.hot-update.js",
|
||||
"/js/main.7d8ff39260c5f281d28f.hot-update.js": "/js/main.7d8ff39260c5f281d28f.hot-update.js",
|
||||
"/js/main.ad2349f007227d33ace3.hot-update.js": "/js/main.ad2349f007227d33ace3.hot-update.js",
|
||||
"/js/main.61787afe25ca75dad5ec.hot-update.js": "/js/main.61787afe25ca75dad5ec.hot-update.js",
|
||||
"/js/main.f130f7974630d2357291.hot-update.js": "/js/main.f130f7974630d2357291.hot-update.js",
|
||||
"/js/main.194f15b84f0ba10c3558.hot-update.js": "/js/main.194f15b84f0ba10c3558.hot-update.js",
|
||||
"/js/main.c9d4446b200a7919a284.hot-update.js": "/js/main.c9d4446b200a7919a284.hot-update.js",
|
||||
"/js/main.a8a11f9957cb0472fcb1.hot-update.js": "/js/main.a8a11f9957cb0472fcb1.hot-update.js",
|
||||
"/js/main.15201b3e0fd22133a26a.hot-update.js": "/js/main.15201b3e0fd22133a26a.hot-update.js",
|
||||
"/js/main.24c3c7e84b88e524c006.hot-update.js": "/js/main.24c3c7e84b88e524c006.hot-update.js",
|
||||
"/js/main.4a9d275860a5b9a8d2d2.hot-update.js": "/js/main.4a9d275860a5b9a8d2d2.hot-update.js",
|
||||
"/js/main.1a78e45577ac640daa18.hot-update.js": "/js/main.1a78e45577ac640daa18.hot-update.js",
|
||||
"/js/main.91f804d23d8cd6a0562e.hot-update.js": "/js/main.91f804d23d8cd6a0562e.hot-update.js",
|
||||
"/js/main.37f4690a9d8970b2a997.hot-update.js": "/js/main.37f4690a9d8970b2a997.hot-update.js",
|
||||
"/js/main.39cc460540d3e54e861d.hot-update.js": "/js/main.39cc460540d3e54e861d.hot-update.js",
|
||||
"/js/main.97e2ae5d288287b185a4.hot-update.js": "/js/main.97e2ae5d288287b185a4.hot-update.js",
|
||||
"/js/main.bcaa46e78128bc1ce527.hot-update.js": "/js/main.bcaa46e78128bc1ce527.hot-update.js",
|
||||
"/js/main.f9b275607e4c5781a474.hot-update.js": "/js/main.f9b275607e4c5781a474.hot-update.js",
|
||||
"/js/main.3625f6f0997dd72db8fb.hot-update.js": "/js/main.3625f6f0997dd72db8fb.hot-update.js",
|
||||
"/js/main.8aac94e8b65eb3822505.hot-update.js": "/js/main.8aac94e8b65eb3822505.hot-update.js",
|
||||
"/js/main.962286776eaf79087cff.hot-update.js": "/js/main.962286776eaf79087cff.hot-update.js",
|
||||
"/js/main.a66ab1c4d2fa23744e67.hot-update.js": "/js/main.a66ab1c4d2fa23744e67.hot-update.js",
|
||||
"/js/main.9a1ab04495b8495aa7a3.hot-update.js": "/js/main.9a1ab04495b8495aa7a3.hot-update.js",
|
||||
"/js/main.394df0e7d4886f791e9a.hot-update.js": "/js/main.394df0e7d4886f791e9a.hot-update.js",
|
||||
"/js/main.bbd2e296d4d14fafbc5c.hot-update.js": "/js/main.bbd2e296d4d14fafbc5c.hot-update.js",
|
||||
"/js/main.c9330023b054be206d4d.hot-update.js": "/js/main.c9330023b054be206d4d.hot-update.js",
|
||||
"/js/main.5d81a2f9c58ce58a43cd.hot-update.js": "/js/main.5d81a2f9c58ce58a43cd.hot-update.js",
|
||||
"/js/main.86fa688fb982fbd12aca.hot-update.js": "/js/main.86fa688fb982fbd12aca.hot-update.js",
|
||||
"/js/main.645f6368417b7c4fd590.hot-update.js": "/js/main.645f6368417b7c4fd590.hot-update.js",
|
||||
"/js/main.6edba403d405425e87cf.hot-update.js": "/js/main.6edba403d405425e87cf.hot-update.js",
|
||||
"/js/main.ca0cd44c7d8d17cc9991.hot-update.js": "/js/main.ca0cd44c7d8d17cc9991.hot-update.js",
|
||||
"/js/main.b831183422933c78119c.hot-update.js": "/js/main.b831183422933c78119c.hot-update.js",
|
||||
"/js/main.80db7eb954bc974b52ec.hot-update.js": "/js/main.80db7eb954bc974b52ec.hot-update.js",
|
||||
"/js/main.8bee745b28ee104901f8.hot-update.js": "/js/main.8bee745b28ee104901f8.hot-update.js",
|
||||
"/js/main.e0e4ec61d482c4f3dbe8.hot-update.js": "/js/main.e0e4ec61d482c4f3dbe8.hot-update.js",
|
||||
"/js/main.bb3ed5bb83568a1abbda.hot-update.js": "/js/main.bb3ed5bb83568a1abbda.hot-update.js",
|
||||
"/js/main.0fca3fcc3088a5f8b7e0.hot-update.js": "/js/main.0fca3fcc3088a5f8b7e0.hot-update.js",
|
||||
"/js/main.fb7b96cb40ab22050c79.hot-update.js": "/js/main.fb7b96cb40ab22050c79.hot-update.js",
|
||||
"/js/main.9348fa55f71efc5060b8.hot-update.js": "/js/main.9348fa55f71efc5060b8.hot-update.js",
|
||||
"/js/main.0122b6629f01a705476d.hot-update.js": "/js/main.0122b6629f01a705476d.hot-update.js",
|
||||
"/js/main.ffc029e04518fabf33cd.hot-update.js": "/js/main.ffc029e04518fabf33cd.hot-update.js",
|
||||
"/js/main.0666ac365d039c279130.hot-update.js": "/js/main.0666ac365d039c279130.hot-update.js",
|
||||
"/js/main.844c2113c0c54845083c.hot-update.js": "/js/main.844c2113c0c54845083c.hot-update.js",
|
||||
"/js/main.04c649da59688caed7f4.hot-update.js": "/js/main.04c649da59688caed7f4.hot-update.js",
|
||||
"/js/main.df8852739b6eb0d8ddd8.hot-update.js": "/js/main.df8852739b6eb0d8ddd8.hot-update.js",
|
||||
"/js/main.2bb035b765159291e6d4.hot-update.js": "/js/main.2bb035b765159291e6d4.hot-update.js",
|
||||
"/js/main.6eb45c6e294e847c45ea.hot-update.js": "/js/main.6eb45c6e294e847c45ea.hot-update.js",
|
||||
"/js/main.c6070c2ada89c43fa419.hot-update.js": "/js/main.c6070c2ada89c43fa419.hot-update.js",
|
||||
"/js/main.f828168b89124130bc68.hot-update.js": "/js/main.f828168b89124130bc68.hot-update.js",
|
||||
"/js/main.e5eb5a13e710543f7bd9.hot-update.js": "/js/main.e5eb5a13e710543f7bd9.hot-update.js",
|
||||
"/js/main.63b69c5bbda8f437d459.hot-update.js": "/js/main.63b69c5bbda8f437d459.hot-update.js",
|
||||
"/js/main.a72c8891596b66b212b6.hot-update.js": "/js/main.a72c8891596b66b212b6.hot-update.js",
|
||||
"/js/main.19e0710bc40f03b262e6.hot-update.js": "/js/main.19e0710bc40f03b262e6.hot-update.js",
|
||||
"/js/main.0134afb94f91a4a36def.hot-update.js": "/js/main.0134afb94f91a4a36def.hot-update.js",
|
||||
"/js/main.9a24933aefa3e49663f7.hot-update.js": "/js/main.9a24933aefa3e49663f7.hot-update.js",
|
||||
"/js/main.cc27c9bc9c27f1b845bb.hot-update.js": "/js/main.cc27c9bc9c27f1b845bb.hot-update.js",
|
||||
"/js/main.b93834f4ca3df91cd540.hot-update.js": "/js/main.b93834f4ca3df91cd540.hot-update.js",
|
||||
"/js/main.5937cb7e39356fd7d4c4.hot-update.js": "/js/main.5937cb7e39356fd7d4c4.hot-update.js",
|
||||
"/js/main.cea013f04296667aee3a.hot-update.js": "/js/main.cea013f04296667aee3a.hot-update.js",
|
||||
"/js/main.bff0613b9adee03ca219.hot-update.js": "/js/main.bff0613b9adee03ca219.hot-update.js",
|
||||
"/js/main.a43ba373208207664417.hot-update.js": "/js/main.a43ba373208207664417.hot-update.js",
|
||||
"/js/main.4ff290116a377da3d41f.hot-update.js": "/js/main.4ff290116a377da3d41f.hot-update.js",
|
||||
"/js/main.96a5134be5a0a98693e4.hot-update.js": "/js/main.96a5134be5a0a98693e4.hot-update.js",
|
||||
"/js/main.e0432d1e9c7975c2ab9d.hot-update.js": "/js/main.e0432d1e9c7975c2ab9d.hot-update.js",
|
||||
"/js/main.d62433ce757652be6f54.hot-update.js": "/js/main.d62433ce757652be6f54.hot-update.js",
|
||||
"/js/main.fa91e0076416ce9b9eac.hot-update.js": "/js/main.fa91e0076416ce9b9eac.hot-update.js",
|
||||
"/js/main.6791a0db3468e2abbb01.hot-update.js": "/js/main.6791a0db3468e2abbb01.hot-update.js",
|
||||
"/js/main.f34c60f7b8d27d185789.hot-update.js": "/js/main.f34c60f7b8d27d185789.hot-update.js",
|
||||
"/js/main.e0ac013a5685366884b0.hot-update.js": "/js/main.e0ac013a5685366884b0.hot-update.js",
|
||||
"/js/main.45f929f9501bca0a3a2b.hot-update.js": "/js/main.45f929f9501bca0a3a2b.hot-update.js",
|
||||
"/js/main.c17c98fa0aac463d62ec.hot-update.js": "/js/main.c17c98fa0aac463d62ec.hot-update.js",
|
||||
"/js/main.0e03c020348420598462.hot-update.js": "/js/main.0e03c020348420598462.hot-update.js",
|
||||
"/js/main.0a76373d676f6bc3f8b7.hot-update.js": "/js/main.0a76373d676f6bc3f8b7.hot-update.js",
|
||||
"/js/main.7d0b5e6140d5a76d8a6e.hot-update.js": "/js/main.7d0b5e6140d5a76d8a6e.hot-update.js",
|
||||
"/js/main.5faa42142a298e5ab92b.hot-update.js": "/js/main.5faa42142a298e5ab92b.hot-update.js",
|
||||
"/js/main.3eaf20665f37c24473fd.hot-update.js": "/js/main.3eaf20665f37c24473fd.hot-update.js",
|
||||
"/js/main.6d0cf380525ddd49bb4b.hot-update.js": "/js/main.6d0cf380525ddd49bb4b.hot-update.js",
|
||||
"/js/main.96ceb1a99c9ccca2fbbe.hot-update.js": "/js/main.96ceb1a99c9ccca2fbbe.hot-update.js",
|
||||
"/js/main.3557a28505eb1edad3c6.hot-update.js": "/js/main.3557a28505eb1edad3c6.hot-update.js",
|
||||
"/js/main.f85533ba77bc9daa2b28.hot-update.js": "/js/main.f85533ba77bc9daa2b28.hot-update.js",
|
||||
"/js/main.844ced51412415958d01.hot-update.js": "/js/main.844ced51412415958d01.hot-update.js",
|
||||
"/js/main.4aef58634b3a86124e7f.hot-update.js": "/js/main.4aef58634b3a86124e7f.hot-update.js",
|
||||
"/js/main.6de5f0faf8a05f2fc5a7.hot-update.js": "/js/main.6de5f0faf8a05f2fc5a7.hot-update.js",
|
||||
"/js/main.c62abbf47cf5f738c9b5.hot-update.js": "/js/main.c62abbf47cf5f738c9b5.hot-update.js",
|
||||
"/js/main.87c321a637ae5ab917ce.hot-update.js": "/js/main.87c321a637ae5ab917ce.hot-update.js",
|
||||
"/js/main.90ad40b9a9f360d249f9.hot-update.js": "/js/main.90ad40b9a9f360d249f9.hot-update.js",
|
||||
"/js/main.91b09e11f41e643af61b.hot-update.js": "/js/main.91b09e11f41e643af61b.hot-update.js",
|
||||
"/js/main.6e993020f81c4506f7f1.hot-update.js": "/js/main.6e993020f81c4506f7f1.hot-update.js",
|
||||
"/js/main.eb69554875d7f6f0af13.hot-update.js": "/js/main.eb69554875d7f6f0af13.hot-update.js",
|
||||
"/js/main.b00263659caf576e365f.hot-update.js": "/js/main.b00263659caf576e365f.hot-update.js",
|
||||
"/js/main.3731a12d7df03dd0b1ac.hot-update.js": "/js/main.3731a12d7df03dd0b1ac.hot-update.js",
|
||||
"/js/main.14283c0c8928f2bac642.hot-update.js": "/js/main.14283c0c8928f2bac642.hot-update.js",
|
||||
"/js/main.5d22154675bb7301f3c3.hot-update.js": "/js/main.5d22154675bb7301f3c3.hot-update.js",
|
||||
"/js/main.68f901614ec25bb9be2e.hot-update.js": "/js/main.68f901614ec25bb9be2e.hot-update.js",
|
||||
"/js/main.94b2828776f652bbecd1.hot-update.js": "/js/main.94b2828776f652bbecd1.hot-update.js",
|
||||
"/js/main.a5193c2c4b1f57e843ac.hot-update.js": "/js/main.a5193c2c4b1f57e843ac.hot-update.js",
|
||||
"/js/main.50b2e366bd6b72990a03.hot-update.js": "/js/main.50b2e366bd6b72990a03.hot-update.js",
|
||||
"/js/main.f7a87e8ee0dc7a8c3d35.hot-update.js": "/js/main.f7a87e8ee0dc7a8c3d35.hot-update.js",
|
||||
"/js/main.460fb4a8eadec50eafc0.hot-update.js": "/js/main.460fb4a8eadec50eafc0.hot-update.js",
|
||||
"/js/main.b56efb8b6dda94e0e837.hot-update.js": "/js/main.b56efb8b6dda94e0e837.hot-update.js",
|
||||
"/js/main.7696e7ea10b668afeccc.hot-update.js": "/js/main.7696e7ea10b668afeccc.hot-update.js",
|
||||
"/js/main.7d32beb20b5719f11726.hot-update.js": "/js/main.7d32beb20b5719f11726.hot-update.js",
|
||||
"/js/main.6325449e7341db20a9ce.hot-update.js": "/js/main.6325449e7341db20a9ce.hot-update.js",
|
||||
"/js/main.2cc0ebd3eba768b8429c.hot-update.js": "/js/main.2cc0ebd3eba768b8429c.hot-update.js",
|
||||
"/js/main.22edc66a07d0d7fc8d83.hot-update.js": "/js/main.22edc66a07d0d7fc8d83.hot-update.js",
|
||||
"/js/main.60bed97815a1ea0a09d6.hot-update.js": "/js/main.60bed97815a1ea0a09d6.hot-update.js",
|
||||
"/js/main.f6a63bab2aa5511566e7.hot-update.js": "/js/main.f6a63bab2aa5511566e7.hot-update.js",
|
||||
"/js/main.121e2dd11bc35045482b.hot-update.js": "/js/main.121e2dd11bc35045482b.hot-update.js",
|
||||
"/js/main.541def265ec163ed2d5f.hot-update.js": "/js/main.541def265ec163ed2d5f.hot-update.js",
|
||||
"/js/main.c9814fe8d127f6265fdf.hot-update.js": "/js/main.c9814fe8d127f6265fdf.hot-update.js",
|
||||
"/js/main.0c31610719dd6fbfd7ab.hot-update.js": "/js/main.0c31610719dd6fbfd7ab.hot-update.js",
|
||||
"/js/main.73d20180f790009a0536.hot-update.js": "/js/main.73d20180f790009a0536.hot-update.js",
|
||||
"/js/main.bd8cd2b0d65c5499a5fa.hot-update.js": "/js/main.bd8cd2b0d65c5499a5fa.hot-update.js",
|
||||
"/js/main.4b941ee3158e8f359e0b.hot-update.js": "/js/main.4b941ee3158e8f359e0b.hot-update.js",
|
||||
"/js/main.4eed502c18c3384e017c.hot-update.js": "/js/main.4eed502c18c3384e017c.hot-update.js",
|
||||
"/js/main.0ff9c65b54e9f2fd3f09.hot-update.js": "/js/main.0ff9c65b54e9f2fd3f09.hot-update.js",
|
||||
"/js/main.0c5bcf3373897713488f.hot-update.js": "/js/main.0c5bcf3373897713488f.hot-update.js",
|
||||
"/js/main.5d00a679a40bb2c37b11.hot-update.js": "/js/main.5d00a679a40bb2c37b11.hot-update.js",
|
||||
"/js/main.2559125fe1eef3ee7dd3.hot-update.js": "/js/main.2559125fe1eef3ee7dd3.hot-update.js",
|
||||
"/js/main.55d5f2f55034cb7a4da6.hot-update.js": "/js/main.55d5f2f55034cb7a4da6.hot-update.js",
|
||||
"/js/main.890897a7ce8479317a97.hot-update.js": "/js/main.890897a7ce8479317a97.hot-update.js",
|
||||
"/js/main.988a45b98fc8b8c5e41c.hot-update.js": "/js/main.988a45b98fc8b8c5e41c.hot-update.js",
|
||||
"/js/main.33577380f3a58be208ee.hot-update.js": "/js/main.33577380f3a58be208ee.hot-update.js",
|
||||
"/js/main.ada254f372b54b162118.hot-update.js": "/js/main.ada254f372b54b162118.hot-update.js",
|
||||
"/js/main.afa97b2d282c673884a9.hot-update.js": "/js/main.afa97b2d282c673884a9.hot-update.js"
|
||||
}
|
||||
|
||||
@@ -61,6 +61,14 @@
|
||||
if (args.emoji) {
|
||||
this.emoji = args.emoji
|
||||
}
|
||||
|
||||
if (args.buttonStyle) {
|
||||
this.buttonStyle = args.buttonStyle
|
||||
}
|
||||
|
||||
if (args.button) {
|
||||
this.button = args.button
|
||||
}
|
||||
})
|
||||
|
||||
// Show alert
|
||||
|
||||
@@ -274,7 +274,10 @@
|
||||
EyeIcon,
|
||||
},
|
||||
computed: {
|
||||
...mapGetters(['app']),
|
||||
...mapGetters(['user']),
|
||||
favourites() {
|
||||
return this.user.relationships.favourites.data.attributes.folders
|
||||
},
|
||||
isFolder() {
|
||||
return this.item && this.item.type === 'folder'
|
||||
},
|
||||
@@ -285,7 +288,7 @@
|
||||
return this.item && this.item.type === 'image'
|
||||
},
|
||||
isInFavourites() {
|
||||
return this.app.favourites.find(el => el.unique_id == this.item.unique_id)
|
||||
return this.favourites.find(el => el.unique_id == this.item.unique_id)
|
||||
},
|
||||
},
|
||||
data() {
|
||||
@@ -312,7 +315,7 @@
|
||||
},
|
||||
addToFavourites() {
|
||||
// Check if folder is in favourites and then add/remove from favourites
|
||||
if (this.app.favourites && !this.app.favourites.find(el => el.unique_id == this.item.unique_id)) {
|
||||
if (this.favourites && !this.favourites.find(el => el.unique_id == this.item.unique_id)) {
|
||||
this.$store.dispatch('addToFavourites', this.item)
|
||||
} else {
|
||||
this.$store.dispatch('removeFromFavourites', this.item)
|
||||
|
||||
@@ -27,7 +27,7 @@
|
||||
<!--Files controlls-->
|
||||
<div class="toolbar-button-wrapper" v-if="$checkPermission(['master', 'editor'])">
|
||||
<ToolbarButtonUpload
|
||||
:class="{'is-inactive': canUploadInView}"
|
||||
:class="{'is-inactive': canUploadInView || ! hasCapacity}"
|
||||
:action="$t('actions.upload')"
|
||||
/>
|
||||
<ToolbarButton
|
||||
@@ -109,6 +109,9 @@
|
||||
'browseHistory',
|
||||
'homeDirectory',
|
||||
]),
|
||||
hasCapacity() {
|
||||
return this.$store.getters.user.relationships.storage.data.attributes.used <= 100
|
||||
},
|
||||
directoryName() {
|
||||
return this.currentFolder ? this.currentFolder.name : this.homeDirectory.name
|
||||
},
|
||||
|
||||
@@ -288,6 +288,7 @@
|
||||
bottom: 0;
|
||||
@include transition;
|
||||
overflow-y: auto;
|
||||
overflow-x: hidden;
|
||||
|
||||
&.is-offset {
|
||||
margin-top: 50px;
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
<template>
|
||||
<div class="file-info-content" v-if="fileInfoDetail">
|
||||
<div class="file-headline" spellcheck="false">
|
||||
<FilePreview />
|
||||
<FilePreview/>
|
||||
|
||||
<!--File info-->
|
||||
<div class="flex">
|
||||
@@ -14,45 +14,38 @@
|
||||
</div>
|
||||
</div>
|
||||
<div class="file-info">
|
||||
<span ref="name" class="name">{{ fileInfoDetail.name }}</span>
|
||||
<span ref="name" class="name">{{ fileInfoDetail.name }}</span>
|
||||
<span class="mimetype" v-if="fileInfoDetail.mimetype">.{{ fileInfoDetail.mimetype }}</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!--Info list-->
|
||||
<ul class="list-info">
|
||||
<ListInfo>
|
||||
<ListInfoItem v-if="fileInfoDetail.filesize"
|
||||
:title="$t('file_detail.size')"
|
||||
:content="fileInfoDetail.filesize">
|
||||
</ListInfoItem>
|
||||
|
||||
<!--Filesize-->
|
||||
<li v-if="fileInfoDetail.filesize" class="list-info-item">
|
||||
<b>{{ $t('file_detail.size') }}</b>
|
||||
<span>{{ fileInfoDetail.filesize }}</span>
|
||||
</li>
|
||||
<ListInfoItem v-if="$checkPermission(['master']) && fileInfoDetail.user_scope !== 'master'"
|
||||
:title="$t('file_detail.author')"
|
||||
:content="$t('file_detail.author_participant')">
|
||||
</ListInfoItem>
|
||||
|
||||
<!--Latest change-->
|
||||
<li v-if="$checkPermission(['master']) && fileInfoDetail.user_scope !== 'master'" class="list-info-item">
|
||||
<b>{{ $t('file_detail.author') }}</b>
|
||||
<span>{{ $t('file_detail.author_participant') }}</span>
|
||||
</li>
|
||||
<ListInfoItem
|
||||
:title="$t('file_detail.created_at')"
|
||||
:content="fileInfoDetail.created_at">
|
||||
</ListInfoItem>
|
||||
|
||||
<!--Latest change-->
|
||||
<li class="list-info-item">
|
||||
<b>{{ $t('file_detail.created_at') }}</b>
|
||||
<span>{{ fileInfoDetail.created_at }}</span>
|
||||
</li>
|
||||
|
||||
<!--Parent-->
|
||||
<li v-if="$checkPermission(['master'])" class="list-info-item">
|
||||
<b>{{ $t('file_detail.where') }}</b>
|
||||
<ListInfoItem v-if="$checkPermission(['master'])"
|
||||
:title="$t('file_detail.where')">
|
||||
<div class="action-button" @click="moveItem">
|
||||
<span>{{ fileInfoDetail.parent ? fileInfoDetail.parent.name : $t('locations.home') }}</span>
|
||||
<edit-2-icon size="10" class="edit-icon"></edit-2-icon>
|
||||
</div>
|
||||
</li>
|
||||
|
||||
<!--Parent-->
|
||||
<li v-if="$checkPermission('master') && fileInfoDetail.shared" class="list-info-item">
|
||||
<b>{{ $t('file_detail.shared') }}</b>
|
||||
</ListInfoItem>
|
||||
<ListInfoItem v-if="$checkPermission('master') && fileInfoDetail.shared"
|
||||
:title="$t('file_detail.shared')">
|
||||
<div class="action-button" @click="shareItemOptions">
|
||||
<span>{{ sharedInfo }}</span>
|
||||
<edit-2-icon size="10" class="edit-icon"></edit-2-icon>
|
||||
@@ -60,24 +53,27 @@
|
||||
<div class="sharelink">
|
||||
<lock-icon v-if="isLocked" @click="shareItemOptions" class="lock-icon" size="17"></lock-icon>
|
||||
<unlock-icon v-if="! isLocked" @click="shareItemOptions" class="lock-icon" size="17"></unlock-icon>
|
||||
|
||||
<CopyInput class="copy-sharelink" size="small" :value="fileInfoDetail.shared.link" />
|
||||
<CopyInput class="copy-sharelink" size="small" :value="fileInfoDetail.shared.link"/>
|
||||
</div>
|
||||
</li>
|
||||
</ul>
|
||||
</ListInfoItem>
|
||||
</ListInfo>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import { Edit2Icon, LockIcon, UnlockIcon, ImageIcon, VideoIcon, FolderIcon, FileIcon } from 'vue-feather-icons'
|
||||
import {Edit2Icon, LockIcon, UnlockIcon, ImageIcon, VideoIcon, FolderIcon, FileIcon} from 'vue-feather-icons'
|
||||
import FilePreview from '@/components/FilesView/FilePreview'
|
||||
import CopyInput from '@/components/Others/Forms/CopyInput'
|
||||
import ListInfoItem from '@/components/Others/ListInfoItem'
|
||||
import ListInfo from '@/components/Others/ListInfo'
|
||||
import {mapGetters} from 'vuex'
|
||||
import {events} from "@/bus"
|
||||
|
||||
export default {
|
||||
name: 'FileInfoPanel',
|
||||
components: {
|
||||
ListInfoItem,
|
||||
ListInfo,
|
||||
FilePreview,
|
||||
FolderIcon,
|
||||
UnlockIcon,
|
||||
@@ -92,23 +88,23 @@
|
||||
...mapGetters(['fileInfoDetail', 'permissionOptions']),
|
||||
fileType() {
|
||||
return this.fileInfoDetail.type
|
||||
/* switch () {
|
||||
case 'folder':
|
||||
return 'folder'
|
||||
break;
|
||||
case 'file':
|
||||
return 'file'
|
||||
break;
|
||||
case 'image':
|
||||
return 'file-image'
|
||||
break;
|
||||
case 'video':
|
||||
return 'file-video'
|
||||
break;
|
||||
case 'file':
|
||||
return 'file-audio'
|
||||
break;
|
||||
}*/
|
||||
/* switch () {
|
||||
case 'folder':
|
||||
return 'folder'
|
||||
break;
|
||||
case 'file':
|
||||
return 'file'
|
||||
break;
|
||||
case 'image':
|
||||
return 'file-image'
|
||||
break;
|
||||
case 'video':
|
||||
return 'file-video'
|
||||
break;
|
||||
case 'file':
|
||||
return 'file-audio'
|
||||
break;
|
||||
}*/
|
||||
},
|
||||
sharedInfo() {
|
||||
|
||||
@@ -123,10 +119,10 @@
|
||||
switch (this.fileInfoDetail.shared.permission) {
|
||||
case 'editor':
|
||||
return 'user-edit'
|
||||
break
|
||||
break
|
||||
case 'visitor':
|
||||
return 'user'
|
||||
break
|
||||
break
|
||||
default:
|
||||
return 'download'
|
||||
}
|
||||
@@ -199,41 +195,6 @@
|
||||
}
|
||||
}
|
||||
|
||||
.list-info {
|
||||
|
||||
.list-info-item {
|
||||
display: block;
|
||||
padding-top: 20px;
|
||||
|
||||
&:first-child {
|
||||
padding-top: 0;
|
||||
}
|
||||
|
||||
.action-button {
|
||||
cursor: pointer;
|
||||
|
||||
.edit-icon {
|
||||
display: inline-block;
|
||||
margin-left: 3px;
|
||||
}
|
||||
}
|
||||
|
||||
b {
|
||||
display: block;
|
||||
@include font-size(13);
|
||||
color: $theme;
|
||||
margin-bottom: 2px;
|
||||
}
|
||||
|
||||
span {
|
||||
display: inline-block;
|
||||
@include font-size(14);
|
||||
font-weight: bold;
|
||||
color: $text;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.sharelink {
|
||||
display: flex;
|
||||
width: 100%;
|
||||
@@ -264,23 +225,6 @@
|
||||
}
|
||||
}
|
||||
|
||||
.list-info {
|
||||
|
||||
.list-info-item {
|
||||
|
||||
span {
|
||||
color: $dark_mode_text_primary
|
||||
}
|
||||
|
||||
.action-button {
|
||||
|
||||
.icon {
|
||||
color: $dark_mode_text_primary;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.sharelink {
|
||||
|
||||
.lock-icon {
|
||||
|
||||
@@ -258,9 +258,12 @@
|
||||
EyeIcon,
|
||||
},
|
||||
computed: {
|
||||
...mapGetters(['fileInfoDetail', 'app']),
|
||||
...mapGetters(['fileInfoDetail', 'user']),
|
||||
favourites() {
|
||||
return this.user.relationships.favourites.data.attributes.folders
|
||||
},
|
||||
isInFavourites() {
|
||||
return this.app.favourites.find(el => el.unique_id == this.fileInfoDetail.unique_id)
|
||||
return this.favourites.find(el => el.unique_id == this.fileInfoDetail.unique_id)
|
||||
},
|
||||
isFile() {
|
||||
return (this.fileInfoDetail && this.fileInfoDetail.type !== 'folder') && (this.fileInfoDetail && this.fileInfoDetail.type !== 'image')
|
||||
@@ -292,7 +295,7 @@
|
||||
}
|
||||
},
|
||||
addToFavourites() {
|
||||
if (this.app.favourites && !this.app.favourites.find(el => el.unique_id == this.fileInfoDetail.unique_id)) {
|
||||
if (this.favourites && !this.favourites.find(el => el.unique_id == this.fileInfoDetail.unique_id)) {
|
||||
this.$store.dispatch('addToFavourites', this.fileInfoDetail)
|
||||
} else {
|
||||
this.$store.dispatch('removeFromFavourites', this.fileInfoDetail)
|
||||
|
||||
@@ -18,7 +18,7 @@ export default {
|
||||
.progress-bar {
|
||||
width: 100%;
|
||||
height: 5px;
|
||||
background: $dark_background;
|
||||
background: $light_background;
|
||||
margin-top: 5px;
|
||||
border-radius: 10px;
|
||||
|
||||
|
||||
@@ -115,7 +115,7 @@
|
||||
}
|
||||
|
||||
.input-area {
|
||||
border: 1px solid #ebebeb;
|
||||
border: 1px solid transparent;
|
||||
justify-content: space-between;
|
||||
background: $light_mode_input_background;
|
||||
@include transition(150ms);
|
||||
|
||||
@@ -20,11 +20,13 @@
|
||||
.setup-box {
|
||||
padding: 20px;
|
||||
border-radius: 8px;
|
||||
margin-bottom: 30px;
|
||||
|
||||
.title {
|
||||
@include font-size(19);
|
||||
margin-bottom: 15px;
|
||||
@include font-size(21);
|
||||
margin-bottom: 5px;
|
||||
display: block;
|
||||
font-weight: 700;
|
||||
}
|
||||
|
||||
.description {
|
||||
|
||||
16
resources/js/components/Others/ListInfo.vue
Normal file
16
resources/js/components/Others/ListInfo.vue
Normal file
@@ -0,0 +1,16 @@
|
||||
<template>
|
||||
<ul class="list-info">
|
||||
<slot></slot>
|
||||
</ul>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
export default {
|
||||
name: 'ListInfo',
|
||||
}
|
||||
</script>
|
||||
|
||||
<style lang="scss" scoped>
|
||||
@import '@assets/vue-file-manager/_variables';
|
||||
@import '@assets/vue-file-manager/_mixins';
|
||||
</style>
|
||||
67
resources/js/components/Others/ListInfoItem.vue
Normal file
67
resources/js/components/Others/ListInfoItem.vue
Normal file
@@ -0,0 +1,67 @@
|
||||
<template>
|
||||
<li class="list-info-item">
|
||||
<b>{{ title }}</b>
|
||||
<span v-if="content">{{ content }}</span>
|
||||
<slot></slot>
|
||||
</li>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
export default {
|
||||
name: 'ListInfoItem',
|
||||
props: ['title', 'content']
|
||||
}
|
||||
</script>
|
||||
|
||||
<style lang="scss" scoped>
|
||||
@import '@assets/vue-file-manager/_variables';
|
||||
@import '@assets/vue-file-manager/_mixins';
|
||||
|
||||
.list-info-item {
|
||||
display: block;
|
||||
padding-bottom: 20px;
|
||||
|
||||
&:first-child {
|
||||
padding-bottom: 0;
|
||||
}
|
||||
|
||||
.action-button {
|
||||
cursor: pointer;
|
||||
|
||||
.edit-icon {
|
||||
display: inline-block;
|
||||
margin-left: 3px;
|
||||
}
|
||||
}
|
||||
|
||||
b {
|
||||
display: block;
|
||||
@include font-size(13);
|
||||
color: $theme;
|
||||
margin-bottom: 2px;
|
||||
}
|
||||
|
||||
span {
|
||||
display: inline-block;
|
||||
@include font-size(14);
|
||||
font-weight: bold;
|
||||
color: $text;
|
||||
}
|
||||
}
|
||||
|
||||
@media (prefers-color-scheme: dark) {
|
||||
.list-info-item {
|
||||
|
||||
span {
|
||||
color: $dark_mode_text_primary
|
||||
}
|
||||
|
||||
.action-button {
|
||||
|
||||
.icon {
|
||||
color: $dark_mode_text_primary;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
</style>
|
||||
@@ -1,5 +1,5 @@
|
||||
<template>
|
||||
<div class="mobile-main-navigation" v-if="app">
|
||||
<div class="mobile-main-navigation" v-if="user">
|
||||
<transition name="context-menu">
|
||||
<nav v-if="isVisible" class="mobile-navigation">
|
||||
|
||||
@@ -34,7 +34,7 @@
|
||||
UserAvatar,
|
||||
},
|
||||
computed: {
|
||||
...mapGetters(['app', 'homeDirectory']),
|
||||
...mapGetters(['user', 'homeDirectory']),
|
||||
navigation() {
|
||||
return [
|
||||
{
|
||||
@@ -71,7 +71,7 @@
|
||||
icon: 'settings',
|
||||
title: this.$t('menu.admin'),
|
||||
routeName: 'AdminMobileMenu',
|
||||
isVisible: this.app.user.role === 'admin',
|
||||
isVisible: this.user.data.attributes.role === 'admin',
|
||||
},
|
||||
{
|
||||
icon: 'power',
|
||||
|
||||
@@ -49,9 +49,15 @@
|
||||
}
|
||||
},
|
||||
created() {
|
||||
|
||||
axios.get('/api/public/pricing')
|
||||
.then(response => {
|
||||
this.plans = response.data.data
|
||||
this.plans = response.data.data.filter(plan => {
|
||||
if (this.$store.getters.user.relationships.subscription)
|
||||
return plan.data.attributes.capacity > this.$store.getters.user.relationships.subscription.data.attributes.capacity
|
||||
|
||||
return true
|
||||
})
|
||||
this.$emit('load', false)
|
||||
})
|
||||
}
|
||||
@@ -133,6 +139,7 @@
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
margin: 0 -25px;
|
||||
justify-content: center;
|
||||
}
|
||||
|
||||
@media only screen and (max-width: 1024px) {
|
||||
|
||||
@@ -97,7 +97,7 @@
|
||||
required,
|
||||
},
|
||||
computed: {
|
||||
...mapGetters(['app', 'permissionOptions']),
|
||||
...mapGetters(['permissionOptions']),
|
||||
itemTypeTitle() {
|
||||
return this.pickedItem && this.pickedItem.type === 'folder' ? this.$t('types.folder') : this.$t('types.file')
|
||||
},
|
||||
|
||||
@@ -101,7 +101,7 @@
|
||||
required,
|
||||
},
|
||||
computed: {
|
||||
...mapGetters(['app', 'permissionOptions', 'currentFolder']),
|
||||
...mapGetters(['user', 'permissionOptions', 'currentFolder']),
|
||||
isFolder() {
|
||||
return this.pickedItem && this.pickedItem.type === 'folder'
|
||||
},
|
||||
|
||||
@@ -8,6 +8,7 @@
|
||||
@click="sort(column.field, column.sortable, index)"
|
||||
:key="index"
|
||||
:class="{ sortable: column.sortable }"
|
||||
v-if="! column.hidden"
|
||||
>
|
||||
<span>{{ column.label }}</span>
|
||||
|
||||
|
||||
98
resources/js/components/Others/UpgradeSIdebarBanner.vue
Normal file
98
resources/js/components/Others/UpgradeSIdebarBanner.vue
Normal file
@@ -0,0 +1,98 @@
|
||||
<template>
|
||||
<div class="upgrade-banner">
|
||||
<div class="header-title">
|
||||
<hard-drive-icon size="19" class="icon"></hard-drive-icon>
|
||||
<span class="title">{{ storage.used }}% From {{ storage.capacity_formatted }}</span>
|
||||
</div>
|
||||
<div class="content">
|
||||
<p v-if="storage.used > 95" class="reach-capacity">You reach your storage capacity. Please upgrade.</p>
|
||||
<p v-else class="reach-capacity">You nearly reach your storage capacity.</p>
|
||||
</div>
|
||||
<div class="footer">
|
||||
<router-link :to="{name: 'UpgradePlan'}" class="button">
|
||||
Upgrade
|
||||
</router-link>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import ButtonBase from '@/components/FilesView/ButtonBase'
|
||||
import { HardDriveIcon } from 'vue-feather-icons'
|
||||
|
||||
export default {
|
||||
name: 'UpgradeSidebarBanner',
|
||||
components: {
|
||||
HardDriveIcon,
|
||||
ButtonBase,
|
||||
},
|
||||
computed: {
|
||||
storage() {
|
||||
return this.$store.getters.user.relationships.storage.data.attributes
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
<style lang="scss" scoped>
|
||||
@import '@assets/vue-file-manager/_variables';
|
||||
@import '@assets/vue-file-manager/_mixins';
|
||||
|
||||
.upgrade-banner {
|
||||
background: rgba($danger, 0.1);
|
||||
padding: 10px;
|
||||
border-radius: 6px;
|
||||
margin: 0 16px;
|
||||
}
|
||||
|
||||
.header-title {
|
||||
margin-bottom: 12px;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
|
||||
.icon {
|
||||
margin-right: 10px;
|
||||
|
||||
line, path {
|
||||
stroke: $danger;
|
||||
}
|
||||
}
|
||||
|
||||
.title {
|
||||
@include font-size(13);
|
||||
font-weight: 800;
|
||||
color: $danger;
|
||||
}
|
||||
}
|
||||
|
||||
.content {
|
||||
margin-bottom: 12px;
|
||||
|
||||
p {
|
||||
@include font-size(12);
|
||||
color: $danger;
|
||||
font-weight: 700;
|
||||
}
|
||||
}
|
||||
|
||||
.button {
|
||||
background: $danger;
|
||||
border-radius: 50px;
|
||||
padding: 6px 0;
|
||||
width: 100%;
|
||||
color: white;
|
||||
text-align: center;
|
||||
@include font-size(12);
|
||||
font-weight: 700;
|
||||
display: block;
|
||||
box-shadow: 0 4px 10px rgba($danger, 0.35);
|
||||
}
|
||||
|
||||
@media only screen and (max-width: 1024px) {
|
||||
|
||||
}
|
||||
|
||||
@media (prefers-color-scheme: dark) {
|
||||
|
||||
}
|
||||
</style>
|
||||
@@ -1,6 +1,6 @@
|
||||
<template>
|
||||
<div class="user-avatar" :class="size">
|
||||
<img :src="app.user.avatar" :alt="app.user.name">
|
||||
<img :src="user.data.attributes.avatar" :alt="user.data.attributes.name">
|
||||
</div>
|
||||
</template>
|
||||
|
||||
@@ -13,7 +13,7 @@
|
||||
'size'
|
||||
],
|
||||
computed: {
|
||||
...mapGetters(['app']),
|
||||
...mapGetters(['user']),
|
||||
},
|
||||
}
|
||||
</script>
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
<template>
|
||||
<nav class="menu-bar" v-if="app">
|
||||
<nav class="menu-bar" v-if="user">
|
||||
|
||||
<!--Navigation Icons-->
|
||||
<div class="icon-navigation menu">
|
||||
@@ -26,13 +26,13 @@
|
||||
</div>
|
||||
</router-link>
|
||||
|
||||
<router-link :to="{name: 'Profile'}" :class="{'is-active': $isThisRoute($route, ['Password', 'Profile', 'Storage'])}" class="icon-navigation-item settings">
|
||||
<router-link :to="{name: 'Profile'}" :class="{'is-active': isUserProfileRoute}" class="icon-navigation-item settings">
|
||||
<div class="button-icon">
|
||||
<user-icon size="19"></user-icon>
|
||||
</div>
|
||||
</router-link>
|
||||
|
||||
<router-link v-if="app.user.role === 'admin'" :to="{name: 'Users'}" :class="{'is-active': $isThisRoute($route, adminRoutes)}" class="icon-navigation-item users">
|
||||
<router-link v-if="user.data.attributes.role === 'admin'" :to="{name: 'Users'}" :class="{'is-active': $isThisRoute($route, adminRoutes)}" class="icon-navigation-item users">
|
||||
<div class="button-icon">
|
||||
<settings-icon size="19"></settings-icon>
|
||||
</div>
|
||||
@@ -74,24 +74,34 @@
|
||||
UserIcon,
|
||||
},
|
||||
computed: {
|
||||
...mapGetters(['app']),
|
||||
...mapGetters(['user']),
|
||||
isUserProfileRoute() {
|
||||
return this.$isThisRoute(this.$route, ['Profile', 'Password', 'Storage', 'Invoice', 'Subscription'])
|
||||
}
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
adminRoutes: [
|
||||
'PlanSubscribers',
|
||||
'PlanSettings',
|
||||
'PlanDelete',
|
||||
|
||||
'GatewayTransactions',
|
||||
'GatewaySettings',
|
||||
'UserInvoices',
|
||||
'UserInvoices',
|
||||
'UserPassword',
|
||||
'UserStorage',
|
||||
'PlanCreate',
|
||||
'UserCreate',
|
||||
'UserDelete',
|
||||
'UserDetail',
|
||||
'Invoices',
|
||||
'Gateways',
|
||||
'Gateway',
|
||||
'Plans',
|
||||
'Users',
|
||||
'User',
|
||||
'UserDetail',
|
||||
'UserStorage',
|
||||
'UserPassword',
|
||||
'UserDelete',
|
||||
'Plans',
|
||||
'Invoices',
|
||||
'UserInvoices',
|
||||
'Gateway',
|
||||
'Gateways',
|
||||
'GatewaySettings',
|
||||
'GatewayTransactions',
|
||||
]
|
||||
}
|
||||
},
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
<template>
|
||||
<div class="user-meta" v-if="app">
|
||||
<b class="name">{{ app.user.name }}</b>
|
||||
<span class="email">{{ app.user.email }}</span>
|
||||
<b class="name">{{ user.data.attributes.name }}</b>
|
||||
<span class="email">{{ user.data.attributes.email }}</span>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
@@ -12,7 +12,7 @@
|
||||
export default {
|
||||
name: 'UserHeadline',
|
||||
computed: {
|
||||
...mapGetters(['app']),
|
||||
...mapGetters(['user']),
|
||||
},
|
||||
}
|
||||
</script>
|
||||
|
||||
10
resources/js/router.js
vendored
10
resources/js/router.js
vendored
@@ -51,6 +51,7 @@ import UserDelete from './views/Admin/Users/UserTabs/UserDelete'
|
||||
import UserStorage from './views/Admin/Users/UserTabs/UserStorage'
|
||||
import UserPassword from './views/Admin/Users/UserTabs/UserPassword'
|
||||
import UserInvoices from './views/Admin/Users/UserTabs/UserInvoices'
|
||||
import UserSubscription from './views/Admin/Users/UserTabs/UserSubscription'
|
||||
|
||||
Vue.use(Router)
|
||||
|
||||
@@ -151,6 +152,15 @@ const routesAdmin = [
|
||||
title: i18n.t('routes_title.users_storage_usage')
|
||||
},
|
||||
},
|
||||
{
|
||||
name: 'UserSubscription',
|
||||
path: '/admin/user/:id/subscription',
|
||||
component: UserSubscription,
|
||||
meta: {
|
||||
requiresAuth: true,
|
||||
title: 'Subscription'
|
||||
},
|
||||
},
|
||||
{
|
||||
name: 'UserInvoices',
|
||||
path: '/admin/user/:id/invoices',
|
||||
|
||||
27
resources/js/store/modules/userAuth.js
vendored
27
resources/js/store/modules/userAuth.js
vendored
@@ -6,7 +6,7 @@ import router from '@/router'
|
||||
const defaultState = {
|
||||
authorized: undefined,
|
||||
permission: 'master', // master | editor | visitor
|
||||
app: undefined,
|
||||
user: undefined,
|
||||
}
|
||||
|
||||
const actions = {
|
||||
@@ -15,7 +15,7 @@ const actions = {
|
||||
axios
|
||||
.get(getters.api + '/user')
|
||||
.then((response) => {
|
||||
commit('RETRIEVE_APP_DATA', response.data)
|
||||
commit('RETRIEVE_USER', response.data)
|
||||
|
||||
}).catch((error) => {
|
||||
|
||||
@@ -74,8 +74,8 @@ const actions = {
|
||||
}
|
||||
|
||||
const mutations = {
|
||||
RETRIEVE_APP_DATA(state, app) {
|
||||
state.app = app
|
||||
RETRIEVE_USER(state, user) {
|
||||
state.user = user
|
||||
},
|
||||
SET_PERMISSION(state, role) {
|
||||
state.permission = role
|
||||
@@ -85,30 +85,23 @@ const mutations = {
|
||||
state.app = undefined
|
||||
},
|
||||
ADD_TO_FAVOURITES(state, folder) {
|
||||
state.app.favourites.push({
|
||||
state.user.relationships.favourites.data.attributes.folders.push({
|
||||
unique_id: folder.unique_id,
|
||||
name: folder.name,
|
||||
type: folder.type,
|
||||
})
|
||||
},
|
||||
UPDATE_NAME(state, name) {
|
||||
state.app.user.name = name
|
||||
state.user.data.attributes.name = name
|
||||
},
|
||||
UPDATE_AVATAR(state, avatar) {
|
||||
state.app.user.avatar = avatar
|
||||
},
|
||||
UPDATE_RECENT_UPLOAD(state, file) {
|
||||
// Remove last file from altest uploads
|
||||
if (state.app.latest_uploads.length === 7) state.app.latest_uploads.pop()
|
||||
|
||||
// Add new file to latest uploads
|
||||
state.app.latest_uploads.unshift(file)
|
||||
state.user.data.attributes.avatar = avatar
|
||||
},
|
||||
REMOVE_ITEM_FROM_FAVOURITES(state, item) {
|
||||
state.app.favourites = state.app.favourites.filter(folder => folder.unique_id !== item.unique_id)
|
||||
state.user.relationships.favourites.data.attributes.folders = state.user.relationships.favourites.data.attributes.folders.filter(folder => folder.unique_id !== item.unique_id)
|
||||
},
|
||||
UPDATE_NAME_IN_FAVOURITES(state, data) {
|
||||
state.app.favourites.find(folder => {
|
||||
state.user.relationships.favourites.data.attributes.folders.find(folder => {
|
||||
if (folder.unique_id == data.unique_id) folder.name = data.name
|
||||
})
|
||||
}
|
||||
@@ -118,7 +111,7 @@ const getters = {
|
||||
permission: state => state.permission,
|
||||
isGuest: state => ! state.authorized,
|
||||
isLogged: state => state.authorized,
|
||||
app: state => state.app,
|
||||
user: state => state.user,
|
||||
}
|
||||
|
||||
export default {
|
||||
|
||||
@@ -2,8 +2,9 @@
|
||||
<section id="viewport">
|
||||
|
||||
<ContentSidebar>
|
||||
|
||||
<!--SaaS-->
|
||||
<ContentGroup title="SaaS" class="navigator">
|
||||
<ContentGroup v-if="config.isSaaS" title="SaaS" class="navigator">
|
||||
<div class="menu-list-wrapper vertical">
|
||||
<router-link :to="{name: 'Plans'}" class="menu-list-item link">
|
||||
<div class="icon">
|
||||
|
||||
@@ -30,6 +30,11 @@
|
||||
<SwitchInput @input="changeStatus($event, row.data.id)" class="switch" :state="row.data.attributes.status"/>
|
||||
</span>
|
||||
</td>
|
||||
<td>
|
||||
<span class="cell-item">
|
||||
{{ row.data.attributes.subscribers }}
|
||||
</span>
|
||||
</td>
|
||||
<td>
|
||||
<span class="cell-item">
|
||||
${{ row.data.attributes.price }}
|
||||
@@ -40,11 +45,6 @@
|
||||
{{ row.data.attributes.capacity_formatted }}
|
||||
</span>
|
||||
</td>
|
||||
<td>
|
||||
<span class="cell-item">
|
||||
{{ row.data.attributes.subscribers }}
|
||||
</span>
|
||||
</td>
|
||||
<td>
|
||||
<div class="action-icons">
|
||||
<router-link :to="{name: 'PlanSettings', params: {id: row.data.id}}">
|
||||
@@ -109,6 +109,11 @@
|
||||
field: 'attributes.status',
|
||||
sortable: true
|
||||
},
|
||||
{
|
||||
label: 'Subscribers',
|
||||
field: 'attributes.subscribers',
|
||||
sortable: true
|
||||
},
|
||||
{
|
||||
label: 'Price',
|
||||
field: 'attributes.price',
|
||||
@@ -119,11 +124,6 @@
|
||||
field: 'attributes.capacity',
|
||||
sortable: true
|
||||
},
|
||||
{
|
||||
label: 'Subscribers',
|
||||
field: 'attributes.subscribers',
|
||||
sortable: true
|
||||
},
|
||||
{
|
||||
label: this.$t('admin_page_user.table.action'),
|
||||
field: 'data.action',
|
||||
|
||||
@@ -34,7 +34,7 @@
|
||||
{{ row.data.attributes.role }}
|
||||
</ColorLabel>
|
||||
</td>
|
||||
<td>
|
||||
<td v-if="config.isSaaS">
|
||||
<span class="cell-item" v-if="row.relationships.subscription">
|
||||
{{ row.relationships.subscription.data.attributes.name }}
|
||||
</span>
|
||||
@@ -89,6 +89,7 @@
|
||||
import PageHeader from '@/components/Others/PageHeader'
|
||||
import ColorLabel from '@/components/Others/ColorLabel'
|
||||
import Spinner from '@/components/FilesView/Spinner'
|
||||
import {mapGetters} from "vuex"
|
||||
import axios from 'axios'
|
||||
|
||||
export default {
|
||||
@@ -106,6 +107,9 @@
|
||||
Edit2Icon,
|
||||
Spinner,
|
||||
},
|
||||
computed: {
|
||||
...mapGetters(['config']),
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
isLoading: true,
|
||||
@@ -124,7 +128,8 @@
|
||||
{
|
||||
label: 'Subscription Plan',
|
||||
field: 'data.attributes.role',
|
||||
sortable: true
|
||||
sortable: true,
|
||||
hidden: true,
|
||||
},
|
||||
{
|
||||
label: this.$t('admin_page_user.table.storage_used'),
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
<template>
|
||||
<div id="single-page" v-if="app">
|
||||
<div id="single-page">
|
||||
<div id="page-content" v-if="! isLoading">
|
||||
<MobileHeader :title="$router.currentRoute.meta.title"/>
|
||||
<PageHeader :can-back="true" :title="$router.currentRoute.meta.title"/>
|
||||
@@ -42,7 +42,16 @@
|
||||
</div>
|
||||
</router-link>
|
||||
|
||||
<router-link replace :to="{name: 'UserInvoices'}" class="menu-list-item link">
|
||||
<router-link v-if="config.isSaaS" replace :to="{name: 'UserSubscription'}" class="menu-list-item link">
|
||||
<div class="icon">
|
||||
<credit-card-icon size="17"></credit-card-icon>
|
||||
</div>
|
||||
<div class="label">
|
||||
Subscription
|
||||
</div>
|
||||
</router-link>
|
||||
|
||||
<router-link v-if="config.isSaaS" replace :to="{name: 'UserInvoices'}" class="menu-list-item link">
|
||||
<div class="icon">
|
||||
<file-text-icon size="17"></file-text-icon>
|
||||
</div>
|
||||
@@ -60,7 +69,7 @@
|
||||
</div>
|
||||
</router-link>
|
||||
|
||||
<router-link replace :to="{name: 'UserDelete'}" v-if="user.data.attributes.name !== app.user.name"
|
||||
<router-link replace :to="{name: 'UserDelete'}" v-if="user.data.attributes.name !== admin.name"
|
||||
class="menu-list-item link">
|
||||
<div class="icon">
|
||||
<trash2-icon size="17"></trash2-icon>
|
||||
@@ -82,7 +91,7 @@
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import {UserIcon, HardDriveIcon, LockIcon, Trash2Icon, FileTextIcon} from 'vue-feather-icons'
|
||||
import {UserIcon, HardDriveIcon, LockIcon, Trash2Icon, FileTextIcon, CreditCardIcon} from 'vue-feather-icons'
|
||||
import StorageItemDetail from '@/components/Others/StorageItemDetail'
|
||||
import MobileHeader from '@/components/Mobile/MobileHeader'
|
||||
import SectionTitle from '@/components/Others/SectionTitle'
|
||||
@@ -95,6 +104,7 @@
|
||||
export default {
|
||||
name: 'Profile',
|
||||
components: {
|
||||
CreditCardIcon,
|
||||
HardDriveIcon,
|
||||
StorageItemDetail,
|
||||
SectionTitle,
|
||||
@@ -108,7 +118,10 @@
|
||||
Spinner,
|
||||
},
|
||||
computed: {
|
||||
...mapGetters(['app']),
|
||||
admin() {
|
||||
return this.$store.getters.user ? this.$store.getters.user.data.attributes : undefined
|
||||
},
|
||||
...mapGetters(['config']),
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
<template>
|
||||
<PageTab v-if="invoices">
|
||||
<PageTabGroup>
|
||||
<PageTabGroup v-if="invoices.length > 0">
|
||||
<DatatableWrapper :paginator="true" :columns="columns" :data="invoices" class="table">
|
||||
<template scope="{ row }">
|
||||
<tr>
|
||||
@@ -35,6 +35,9 @@
|
||||
</template>
|
||||
</DatatableWrapper>
|
||||
</PageTabGroup>
|
||||
<PageTabGroup v-else>
|
||||
User don't have any invoices yet.
|
||||
</PageTabGroup>
|
||||
</PageTab>
|
||||
</template>
|
||||
|
||||
|
||||
@@ -1,13 +1,8 @@
|
||||
<template>
|
||||
<PageTab v-if="storage">
|
||||
<PageTabGroup>
|
||||
<StorageItemDetail
|
||||
type="disk"
|
||||
:title="$t('storage.total_used', {used: storage.attributes.used})"
|
||||
:percentage="storage.attributes.percentage"
|
||||
:used="$t('storage.total_capacity', {capacity: storage.attributes.capacity})"
|
||||
/>
|
||||
<SetupBox
|
||||
v-if="! config.isSaaS || ! user.relationships.subscription"
|
||||
theme="base"
|
||||
:title="$t('user_box_storage.title')"
|
||||
:description="$t('user_box_storage.description')"
|
||||
@@ -32,6 +27,12 @@
|
||||
</ValidationProvider>
|
||||
</ValidationObserver>
|
||||
</SetupBox>
|
||||
<StorageItemDetail
|
||||
type="disk"
|
||||
:title="$t('storage.total_used', {used: storage.attributes.used})"
|
||||
:percentage="storage.attributes.percentage"
|
||||
:used="$t('storage.total_capacity', {capacity: storage.attributes.capacity})"
|
||||
/>
|
||||
</PageTabGroup>
|
||||
<PageTabGroup>
|
||||
<b class="form-group-label">{{ $t('storage.sec_details') }}</b>
|
||||
@@ -54,9 +55,11 @@
|
||||
import {required} from 'vee-validate/dist/rules'
|
||||
import {events} from "@/bus"
|
||||
import axios from 'axios'
|
||||
import {mapGetters} from "vuex";
|
||||
|
||||
export default {
|
||||
name: 'UserStorage',
|
||||
props: ['user'],
|
||||
components: {
|
||||
PageTabGroup,
|
||||
PageTab,
|
||||
@@ -67,6 +70,9 @@
|
||||
SetupBox,
|
||||
required,
|
||||
},
|
||||
computed: {
|
||||
...mapGetters(['config']),
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
isLoading: true,
|
||||
|
||||
105
resources/js/views/Admin/Users/UserTabs/UserSubscription.vue
Normal file
105
resources/js/views/Admin/Users/UserTabs/UserSubscription.vue
Normal file
@@ -0,0 +1,105 @@
|
||||
<template>
|
||||
<PageTab>
|
||||
<PageTabGroup v-if="subscription">
|
||||
|
||||
<!--Info about active subscription-->
|
||||
<div v-if="! subscription.canceled" class="state active">
|
||||
<ListInfo class="list-info">
|
||||
<ListInfoItem class="list-item" title="Plan" :content="subscription.attributes.name + ' - ' + subscription.attributes.capacity_formatted"/>
|
||||
<ListInfoItem class="list-item" title="Billed" content="Monthly"/>
|
||||
<ListInfoItem class="list-item" title="Status" :content="status"/>
|
||||
<ListInfoItem class="list-item" title="Created At" :content="subscription.attributes.created_at"/>
|
||||
<ListInfoItem class="list-item" title="Renews At" :content="subscription.attributes.ends_at"/>
|
||||
</ListInfo>
|
||||
</div>
|
||||
|
||||
<!--Info about canceled subscription-->
|
||||
<div v-if="subscription.attributes.canceled" class="state canceled">
|
||||
<ListInfo class="list-info">
|
||||
<ListInfoItem class="list-item" title="Plan" :content="subscription.attributes.name"/>
|
||||
<ListInfoItem class="list-item" title="Status" :content="status"/>
|
||||
<ListInfoItem class="list-item" title="Canceled At" :content="subscription.attributes.canceled_at"/>
|
||||
<ListInfoItem class="list-item" title="Ends At" :content="subscription.attributes.ends_at"/>
|
||||
</ListInfo>
|
||||
</div>
|
||||
</PageTabGroup>
|
||||
<PageTabGroup v-else>
|
||||
User don't have any subscription yet.
|
||||
</PageTabGroup>
|
||||
</PageTab>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import DatatableWrapper from '@/components/Others/Tables/DatatableWrapper'
|
||||
import PageTabGroup from '@/components/Others/Layout/PageTabGroup'
|
||||
import ListInfoItem from '@/components/Others/ListInfoItem'
|
||||
import ButtonBase from '@/components/FilesView/ButtonBase'
|
||||
import PageTab from '@/components/Others/Layout/PageTab'
|
||||
import ListInfo from '@/components/Others/ListInfo'
|
||||
import {ExternalLinkIcon} from "vue-feather-icons"
|
||||
import { mapGetters } from 'vuex'
|
||||
import {events} from "@/bus"
|
||||
import axios from 'axios'
|
||||
|
||||
export default {
|
||||
name: 'UserSubscription',
|
||||
components: {
|
||||
ExternalLinkIcon,
|
||||
DatatableWrapper,
|
||||
ListInfoItem,
|
||||
PageTabGroup,
|
||||
ButtonBase,
|
||||
ListInfo,
|
||||
PageTab,
|
||||
},
|
||||
computed: {
|
||||
status() {
|
||||
if (this.subscription.attributes.canceled) {
|
||||
return 'Canceled'
|
||||
}
|
||||
if (this.subscription.attributes.active) {
|
||||
return 'Active'
|
||||
}
|
||||
}
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
subscription: undefined,
|
||||
}
|
||||
},
|
||||
created() {
|
||||
axios.get('/api/users/' + this.$route.params.id + '/subscription')
|
||||
.then(response => {
|
||||
this.subscription = response.data.data
|
||||
this.isLoading = false
|
||||
})
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
<style lang="scss" scoped>
|
||||
@import '@assets/vue-file-manager/_variables';
|
||||
@import '@assets/vue-file-manager/_mixins';
|
||||
|
||||
.cancel-plan {
|
||||
margin-top: 10px;
|
||||
}
|
||||
|
||||
.list-info {
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
|
||||
.list-item {
|
||||
flex: 0 0 50%;
|
||||
}
|
||||
}
|
||||
|
||||
@media only screen and (max-width: 960px) {
|
||||
|
||||
}
|
||||
|
||||
@media (prefers-color-scheme: dark) {
|
||||
|
||||
}
|
||||
|
||||
</style>
|
||||
@@ -88,6 +88,8 @@
|
||||
checkedAccount: undefined,
|
||||
loginPassword: 'vuefilemanager',
|
||||
loginEmail: 'howdy@hi5ve.digital',
|
||||
//loginPassword: '',
|
||||
//loginEmail: '',
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
|
||||
@@ -1,8 +1,12 @@
|
||||
<template>
|
||||
<section id="viewport" v-if="app">
|
||||
<section id="viewport" v-if="user">
|
||||
|
||||
<ContentSidebar>
|
||||
|
||||
<ContentGroup v-if="config.isSaaS && storage.used > 95">
|
||||
<UpgradeSidebarBanner />
|
||||
</ContentGroup>
|
||||
|
||||
<!--Locations-->
|
||||
<ContentGroup :title="$t('sidebar.locations_title')">
|
||||
<div class="menu-list-wrapper vertical">
|
||||
@@ -28,10 +32,10 @@
|
||||
|
||||
<!--Navigator-->
|
||||
<ContentGroup :title="$t('sidebar.navigator_title')" class="navigator">
|
||||
<span class="empty-note navigator" v-if="app.tree.length == 0">
|
||||
<span class="empty-note navigator" v-if="tree.length == 0">
|
||||
{{ $t('sidebar.folders_empty') }}
|
||||
</span>
|
||||
<TreeMenuNavigator class="folder-tree" :depth="0" :nodes="items" v-for="items in app.tree"
|
||||
<TreeMenuNavigator class="folder-tree" :depth="0" :nodes="items" v-for="items in tree"
|
||||
:key="items.unique_id"/>
|
||||
</ContentGroup>
|
||||
|
||||
@@ -45,14 +49,14 @@
|
||||
@drop="dragFinish($event)"
|
||||
>
|
||||
<transition-group tag="div" class="menu-list" name="folder-item">
|
||||
<span class="empty-note favourites" v-if="app.favourites.length == 0" :key="0">
|
||||
<span class="empty-note favourites" v-if="favourites.length == 0" :key="0">
|
||||
{{ $t('sidebar.favourites_empty') }}
|
||||
</span>
|
||||
|
||||
<a @click.stop="openFolder(folder)"
|
||||
class="menu-list-item"
|
||||
:class="{'is-current': (folder && currentFolder) && (currentFolder.unique_id === folder.unique_id)}"
|
||||
v-for="folder in app.favourites"
|
||||
v-for="folder in favourites"
|
||||
:key="folder.unique_id">
|
||||
<div>
|
||||
<folder-icon size="17" class="folder-icon"></folder-icon>
|
||||
@@ -70,6 +74,7 @@
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import UpgradeSidebarBanner from '@/components/Others/UpgradeSidebarBanner'
|
||||
import TreeMenuNavigator from '@/components/Others/TreeMenuNavigator'
|
||||
import ContentFileView from '@/components/Others/ContentFileView'
|
||||
import ContentSidebar from '@/components/Sidebar/ContentSidebar'
|
||||
@@ -86,6 +91,7 @@
|
||||
export default {
|
||||
name: 'FilesView',
|
||||
components: {
|
||||
UpgradeSidebarBanner,
|
||||
TreeMenuNavigator,
|
||||
ContentFileView,
|
||||
ContentSidebar,
|
||||
@@ -96,7 +102,16 @@
|
||||
XIcon,
|
||||
},
|
||||
computed: {
|
||||
...mapGetters(['app', 'homeDirectory', 'currentFolder']),
|
||||
...mapGetters(['user', 'homeDirectory', 'currentFolder', 'config']),
|
||||
favourites() {
|
||||
return this.user.relationships.favourites.data.attributes.folders
|
||||
},
|
||||
tree() {
|
||||
return this.user.relationships.tree.data.attributes.folders
|
||||
},
|
||||
storage() {
|
||||
return this.$store.getters.user.relationships.storage.data.attributes
|
||||
}
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
@@ -129,7 +144,7 @@
|
||||
if (this.draggedItem && this.draggedItem.type !== 'folder') return
|
||||
|
||||
// Check if folder exist in favourites
|
||||
if (this.app.favourites.find(folder => folder.unique_id == this.draggedItem.unique_id)) return
|
||||
if (this.favourites.find(folder => folder.unique_id == this.draggedItem.unique_id)) return
|
||||
|
||||
// Store favourites folder
|
||||
this.$store.dispatch('addToFavourites', this.draggedItem)
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
<template>
|
||||
<div id="single-page">
|
||||
<div id="single-page" v-if="user">
|
||||
<div id="page-content" class="medium-width" v-if="! isLoading">
|
||||
<MobileHeader :title="$router.currentRoute.meta.title"/>
|
||||
<PageHeader :title="$router.currentRoute.meta.title"/>
|
||||
@@ -12,20 +12,20 @@
|
||||
<div class="avatar">
|
||||
<UserImageInput
|
||||
v-model="avatar"
|
||||
:avatar="profile.data.attributes.avatar"
|
||||
:avatar="user.data.attributes.avatar"
|
||||
/>
|
||||
</div>
|
||||
<div class="info">
|
||||
<b class="name">
|
||||
{{ profile.data.attributes.name }}
|
||||
<ColorLabel :color="subscriptionColor">
|
||||
{{ user.data.attributes.name }}
|
||||
<ColorLabel v-if="config.isSaaS" :color="subscriptionColor">
|
||||
{{ subscriptionStatus }}
|
||||
</ColorLabel>
|
||||
</b>
|
||||
<span class="email">{{ profile.data.attributes.email }}</span>
|
||||
<span class="email">{{ user.data.attributes.email }}</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="headline-actions">
|
||||
<div v-if="config.isSaaS" class="headline-actions">
|
||||
<router-link :to="{name: 'UpgradePlan'}">
|
||||
<ButtonBase button-style="secondary" type="button">
|
||||
Upgrade Plan
|
||||
@@ -54,7 +54,7 @@
|
||||
</div>
|
||||
</router-link>
|
||||
|
||||
<router-link replace :to="{name: 'Invoice'}" class="menu-list-item link">
|
||||
<router-link v-if="config.isSaaS" replace :to="{name: 'Subscription'}" class="menu-list-item link">
|
||||
<div class="icon">
|
||||
<credit-card-icon size="17"></credit-card-icon>
|
||||
</div>
|
||||
@@ -63,7 +63,7 @@
|
||||
</div>
|
||||
</router-link>
|
||||
|
||||
<router-link replace :to="{name: 'Invoice'}" class="menu-list-item link">
|
||||
<router-link v-if="config.isSaaS" replace :to="{name: 'Invoice'}" class="menu-list-item link">
|
||||
<div class="icon">
|
||||
<file-text-icon size="17"></file-text-icon>
|
||||
</div>
|
||||
@@ -80,19 +80,10 @@
|
||||
{{ $t('menu.password') }}
|
||||
</div>
|
||||
</router-link>
|
||||
|
||||
<!--<router-link replace :to="{name: 'UserDelete'}" v-if="user.attributes.name !== app.user.name" class="menu-list-item link">
|
||||
<div class="icon">
|
||||
<trash2-icon size="17"></trash2-icon>
|
||||
</div>
|
||||
<div class="label">
|
||||
{{ $t('admin_page_user.tabs.delete') }}
|
||||
</div>
|
||||
</router-link>-->
|
||||
</div>
|
||||
|
||||
<!--Router Content-->
|
||||
<router-view :user="profile" />
|
||||
<router-view :user="user" />
|
||||
</div>
|
||||
</div>
|
||||
<div id="loader" v-if="isLoading">
|
||||
@@ -108,6 +99,7 @@
|
||||
import PageHeader from '@/components/Others/PageHeader'
|
||||
import ColorLabel from '@/components/Others/ColorLabel'
|
||||
import Spinner from '@/components/FilesView/Spinner'
|
||||
import { mapGetters } from 'vuex'
|
||||
import axios from 'axios'
|
||||
import {
|
||||
CreditCardIcon,
|
||||
@@ -133,26 +125,19 @@
|
||||
LockIcon,
|
||||
},
|
||||
computed: {
|
||||
...mapGetters(['user', 'config']),
|
||||
subscriptionStatus() {
|
||||
return this.profile.relationships.subscription ? 'Subscription' : 'Free'
|
||||
return this.user.relationships.subscription ? 'Premium' : 'Free'
|
||||
},
|
||||
subscriptionColor() {
|
||||
return this.profile.relationships.subscription ? 'green' : 'purple'
|
||||
return this.user.relationships.subscription ? 'green' : 'purple'
|
||||
},
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
avatar: undefined,
|
||||
profile: undefined,
|
||||
isLoading: true,
|
||||
isLoading: false,
|
||||
}
|
||||
},
|
||||
created() {
|
||||
axios.get('/api/profile')
|
||||
.then(response => {
|
||||
this.profile = response.data
|
||||
this.isLoading = false
|
||||
})
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
@@ -206,11 +206,14 @@
|
||||
|
||||
// Send order request
|
||||
axios
|
||||
.post('/api/upgrade', {
|
||||
.post('/api/subscription/upgrade', {
|
||||
billing: this.billing,
|
||||
plan: this.requestedPlan,
|
||||
})
|
||||
.then(response => {
|
||||
.then(() => {
|
||||
|
||||
// Update user data
|
||||
this.$store.dispatch('getAppData')
|
||||
|
||||
// End loading
|
||||
this.isSubmitted = false
|
||||
@@ -232,7 +235,7 @@
|
||||
}
|
||||
},
|
||||
created() {
|
||||
axios.get('/api/profile')
|
||||
axios.get('/api/user')
|
||||
.then(response => {
|
||||
|
||||
if (! this.requestedPlan) {
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
<template>
|
||||
<PageTab v-if="invoices">
|
||||
<PageTabGroup>
|
||||
<PageTabGroup v-if="invoices.length > 0">
|
||||
<DatatableWrapper :paginator="true" :columns="columns" :data="invoices" class="table">
|
||||
<template scope="{ row }">
|
||||
<tr>
|
||||
@@ -35,6 +35,9 @@
|
||||
</template>
|
||||
</DatatableWrapper>
|
||||
</PageTabGroup>
|
||||
<PageTabGroup v-else>
|
||||
You don't have any invoices yet.
|
||||
</PageTabGroup>
|
||||
</PageTab>
|
||||
</template>
|
||||
|
||||
|
||||
@@ -3,27 +3,27 @@
|
||||
<PageTabGroup>
|
||||
<ValidationObserver ref="password" @submit.prevent="resetPassword" v-slot="{ invalid }" tag="form"
|
||||
class="form block-form">
|
||||
|
||||
<div class="block-wrapper">
|
||||
<label>{{ $t('page_create_password.label_new_pass') }}:</label>
|
||||
<ValidationProvider tag="div" mode="passive" class="input-wrapper" name="New Password"
|
||||
rules="required" v-slot="{ errors }">
|
||||
<input v-model="newPassword" :placeholder="$t('page_create_password.label_new_pass')"
|
||||
type="password"
|
||||
:class="{'is-error': errors[0]}"/>
|
||||
<span class="error-message" v-if="errors[0]">{{ errors[0] }}</span>
|
||||
</ValidationProvider>
|
||||
</div>
|
||||
|
||||
<div class="block-wrapper">
|
||||
<label>{{ $t('page_create_password.label_confirm_pass') }}:</label>
|
||||
<ValidationProvider tag="div" mode="passive" class="input-wrapper" name="Confirm Your Password"
|
||||
rules="required" v-slot="{ errors }">
|
||||
<input v-model="newPasswordConfirmation"
|
||||
:placeholder="$t('page_create_password.label_confirm_pass')" type="password"
|
||||
:class="{'is-error': errors[0]}"/>
|
||||
<span class="error-message" v-if="errors[0]">{{ errors[0] }}</span>
|
||||
</ValidationProvider>
|
||||
<div class="wrapper-inline">
|
||||
<div class="block-wrapper">
|
||||
<label>{{ $t('page_create_password.label_new_pass') }}:</label>
|
||||
<ValidationProvider tag="div" mode="passive" class="input-wrapper" name="New Password"
|
||||
rules="required" v-slot="{ errors }">
|
||||
<input v-model="newPassword" :placeholder="$t('page_create_password.label_new_pass')"
|
||||
type="password"
|
||||
:class="{'is-error': errors[0]}"/>
|
||||
<span class="error-message" v-if="errors[0]">{{ errors[0] }}</span>
|
||||
</ValidationProvider>
|
||||
</div>
|
||||
<div class="block-wrapper">
|
||||
<label>{{ $t('page_create_password.label_confirm_pass') }}:</label>
|
||||
<ValidationProvider tag="div" mode="passive" class="input-wrapper" name="Confirm Your Password"
|
||||
rules="required" v-slot="{ errors }">
|
||||
<input v-model="newPasswordConfirmation"
|
||||
:placeholder="$t('page_create_password.label_confirm_pass')" type="password"
|
||||
:class="{'is-error': errors[0]}"/>
|
||||
<span class="error-message" v-if="errors[0]">{{ errors[0] }}</span>
|
||||
</ValidationProvider>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="block-wrapper">
|
||||
@@ -46,7 +46,6 @@
|
||||
import PageHeader from '@/components/Others/PageHeader'
|
||||
import ThemeLabel from '@/components/Others/ThemeLabel'
|
||||
import {required} from 'vee-validate/dist/rules'
|
||||
import {mapGetters} from 'vuex'
|
||||
import {events} from '@/bus'
|
||||
import axios from 'axios'
|
||||
|
||||
@@ -64,9 +63,6 @@
|
||||
ThemeLabel,
|
||||
required,
|
||||
},
|
||||
computed: {
|
||||
...mapGetters(['app']),
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
newPasswordConfirmation: '',
|
||||
@@ -125,6 +121,10 @@
|
||||
@import '@assets/vue-file-manager/_mixins';
|
||||
@import '@assets/vue-file-manager/_forms';
|
||||
|
||||
.block-form {
|
||||
max-width: 100%;
|
||||
}
|
||||
|
||||
@media only screen and (max-width: 960px) {
|
||||
|
||||
.form {
|
||||
|
||||
@@ -1,38 +1,130 @@
|
||||
<template>
|
||||
<PageTab>
|
||||
<PageTabGroup>
|
||||
<PageTabGroup v-if="subscription">
|
||||
|
||||
<!--Info about active subscription-->
|
||||
<div v-if="! subscription.canceled" class="state active">
|
||||
<ListInfo class="list-info">
|
||||
<ListInfoItem class="list-item" title="Plan" :content="subscription.name + ' - ' + subscription.capacity_formatted"/>
|
||||
<ListInfoItem class="list-item" title="Billed" content="Monthly"/>
|
||||
<ListInfoItem class="list-item" title="Status" :content="status"/>
|
||||
<ListInfoItem class="list-item" title="Created At" :content="subscription.created_at"/>
|
||||
<ListInfoItem class="list-item" title="Renews At" :content="subscription.ends_at"/>
|
||||
</ListInfo>
|
||||
<div class="cancel-plan">
|
||||
<ButtonBase
|
||||
@click.native="cancelSubscription"
|
||||
:button-style="cancelButtonStyle"
|
||||
class="cancel-button">
|
||||
{{ cancelButtonText }}
|
||||
</ButtonBase>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!--Info about canceled subscription-->
|
||||
<div v-if="subscription.canceled" class="state canceled">
|
||||
<ListInfo class="list-info">
|
||||
<ListInfoItem class="list-item" title="Plan" :content="subscription.name"/>
|
||||
<ListInfoItem class="list-item" title="Status" :content="status"/>
|
||||
<ListInfoItem class="list-item" title="Canceled At" :content="subscription.canceled_at"/>
|
||||
<ListInfoItem class="list-item" title="Ends At" :content="subscription.ends_at"/>
|
||||
</ListInfo>
|
||||
</div>
|
||||
</PageTabGroup>
|
||||
<PageTabGroup v-else>
|
||||
You don't have any subscription yet.
|
||||
</PageTabGroup>
|
||||
</PageTab>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import PageTabGroup from '@/components/Others/Layout/PageTabGroup'
|
||||
import PageTab from '@/components/Others/Layout/PageTab'
|
||||
import DatatableWrapper from '@/components/Others/Tables/DatatableWrapper'
|
||||
import {ExternalLinkIcon} from "vue-feather-icons";
|
||||
import PageTabGroup from '@/components/Others/Layout/PageTabGroup'
|
||||
import ListInfoItem from '@/components/Others/ListInfoItem'
|
||||
import ButtonBase from '@/components/FilesView/ButtonBase'
|
||||
import PageTab from '@/components/Others/Layout/PageTab'
|
||||
import ListInfo from '@/components/Others/ListInfo'
|
||||
import {ExternalLinkIcon} from "vue-feather-icons"
|
||||
import { mapGetters } from 'vuex'
|
||||
import {events} from "@/bus"
|
||||
import axios from 'axios'
|
||||
|
||||
export default {
|
||||
name: 'UserSubscription',
|
||||
components: {
|
||||
PageTabGroup,
|
||||
PageTab,
|
||||
DatatableWrapper,
|
||||
ExternalLinkIcon,
|
||||
DatatableWrapper,
|
||||
ListInfoItem,
|
||||
PageTabGroup,
|
||||
ButtonBase,
|
||||
ListInfo,
|
||||
PageTab,
|
||||
},
|
||||
computed: {
|
||||
cancelButtonText() {
|
||||
return this.isConfirmedCancel ? this.$t('popup_share_edit.confirm') : 'Cancel Plan'
|
||||
},
|
||||
cancelButtonStyle() {
|
||||
return this.isConfirmedCancel ? 'danger-solid' : 'danger'
|
||||
},
|
||||
subscription() {
|
||||
return this.$store.getters.user.relationships.subscription
|
||||
? this.$store.getters.user.relationships.subscription.data.attributes
|
||||
: undefined
|
||||
},
|
||||
status() {
|
||||
if (this.subscription.canceled) {
|
||||
return 'Canceled'
|
||||
}
|
||||
if (this.subscription.active) {
|
||||
return 'Active'
|
||||
}
|
||||
}
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
isLoading: true,
|
||||
invoices: undefined,
|
||||
isConfirmedCancel: false,
|
||||
isDeleting: false,
|
||||
}
|
||||
},
|
||||
created() {
|
||||
/* axios.get('/api/user/subscription')
|
||||
.then(response => {
|
||||
this.invoices = response.data.data
|
||||
this.isLoading = false
|
||||
})*/
|
||||
methods: {
|
||||
cancelSubscription() {
|
||||
|
||||
// Set confirm button
|
||||
if (! this.isConfirmedCancel) {
|
||||
|
||||
this.isConfirmedCancel = true
|
||||
} else {
|
||||
|
||||
// Start deleting spinner button
|
||||
this.isDeleting = true
|
||||
|
||||
// Send delete request
|
||||
axios
|
||||
.post('/api/subscription/cancel')
|
||||
.then(() => {
|
||||
|
||||
// Update user data
|
||||
this.$store.dispatch('getAppData')
|
||||
|
||||
// End deleting spinner button
|
||||
this.isDeleting = false
|
||||
|
||||
events.$emit('alert:open', {
|
||||
emoji: '👍',
|
||||
title: 'Subscription Was Canceled',
|
||||
message: 'You\'ll continue to have access to the features you\'ve paid for until the end of your billing cycle.',
|
||||
buttonStyle: 'theme',
|
||||
button: 'I\'m done'
|
||||
})
|
||||
})
|
||||
.catch(() => {
|
||||
|
||||
// End deleting spinner button
|
||||
this.isDeleting = false
|
||||
})
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
@@ -40,12 +132,19 @@
|
||||
<style lang="scss" scoped>
|
||||
@import '@assets/vue-file-manager/_variables';
|
||||
@import '@assets/vue-file-manager/_mixins';
|
||||
@import '@assets/vue-file-manager/_forms';
|
||||
|
||||
.block-form {
|
||||
max-width: 100%;
|
||||
.cancel-plan {
|
||||
margin-top: 10px;
|
||||
}
|
||||
|
||||
.list-info {
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
|
||||
.list-item {
|
||||
flex: 0 0 50%;
|
||||
}
|
||||
}
|
||||
|
||||
@media only screen and (max-width: 960px) {
|
||||
|
||||
|
||||
@@ -17,7 +17,7 @@ $light_background: #f4f5f6;
|
||||
$dark_background: #EBEBEB;
|
||||
$shadow: 0 7px 25px 1px rgba(0, 0, 0, 0.12);
|
||||
|
||||
$light_mode_input_background: #f4f5f6;
|
||||
$light_mode_input_background: hsla(210, 10%, 98%, 1);
|
||||
$light_mode_popup_shadow: 0 15px 50px 10px rgba(26,38,74,0.12);
|
||||
$light_mode_vignette: rgba(9, 8, 12, 0.35);
|
||||
|
||||
|
||||
@@ -34,6 +34,7 @@
|
||||
hasAuthCookie: {{ Cookie::has('token') ? 1 : 0 }},
|
||||
userRegistration: {{ config('vuefilemanager.registration') ? 1 : 0 }},
|
||||
storageLimit: {{ config('vuefilemanager.limit_storage_by_capacity') ? 1 : 0 }},
|
||||
isSaaS: 1,
|
||||
}
|
||||
</script>
|
||||
|
||||
|
||||
@@ -59,10 +59,10 @@ Route::group(['middleware' => ['auth:api', 'auth.master', 'scope:master']], func
|
||||
Route::get('/user/invoices', 'User\AccountController@invoices');
|
||||
Route::get('/user/storage', 'User\AccountController@storage');
|
||||
Route::get('/user', 'User\AccountController@user');
|
||||
Route::get('/profile', 'User\AccountController@me');
|
||||
|
||||
// Subscription
|
||||
Route::post('/upgrade', 'User\SubscriptionController@upgrade');
|
||||
Route::post('/subscription/upgrade', 'User\SubscriptionController@upgrade');
|
||||
Route::post('/subscription/cancel', 'User\SubscriptionController@cancel');
|
||||
|
||||
// Browse
|
||||
Route::get('/participant-uploads', 'FileBrowser\BrowseController@participant_uploads');
|
||||
@@ -97,6 +97,7 @@ Route::group(['middleware' => ['auth:api', 'auth.master', 'auth.admin', 'scope:m
|
||||
// Get users info
|
||||
Route::get('/users/{id}/storage', 'Admin\UserController@storage');
|
||||
Route::get('/users/{id}/detail', 'Admin\UserController@details');
|
||||
Route::get('/users/{id}/subscription', 'Admin\UserController@subscription');
|
||||
Route::get('/users', 'Admin\UserController@users');
|
||||
|
||||
// Edit users
|
||||
|
||||
Reference in New Issue
Block a user