Team functionality (#459)

* add api enpoints for adding, removing, updating user to workspace and leaving workspace

* feat: updates client site workspace settings

* refactor and add domain setting ui in modal

* move workspace user functionality to its own component

* adds tests

* fix linting

* updates select input to FlatSelectInput

* moves workspace user role edit to seperated component

* move user adding to its own component

* adds check to usure users exist before checking is admin

* fix loading users

* feat: invite user to team functionality

* fix token coulmn

* fix self host mode changes

* tests for  user invite

* Refactor back-end

* Rename variables

* Improve some styling elements + refactor workspace settings

* More styling

* More UI polishing

* More UI fixes

* PHP linting

* Implemented most of the logic for team-functionnality

* Fix user avatar URL

* WIP remove users on cancellation

* Finished pricing for team functionality

* Fix tests

* Fix linting

* Added pricing_enabled helper

* Fix pricing_enabled shortcut

* Debug CI

* Disable pricing when testing

---------

Co-authored-by: LL-Etiane <lukongleinyuyetiane@gmail.com>
Co-authored-by: Lukong Etiane <83535251+LL-Etiane@users.noreply.github.com>
Co-authored-by: Julien Nahum <julien@nahum.net>
This commit is contained in:
Favour Olayinka
2024-07-04 16:21:36 +01:00
committed by GitHub
parent 383fff7b2c
commit 90ff91b1e9
64 changed files with 2503 additions and 596 deletions

View File

@@ -20,7 +20,9 @@ use App\Http\Controllers\Settings\PasswordController;
use App\Http\Controllers\Settings\ProfileController;
use App\Http\Controllers\SubscriptionController;
use App\Http\Controllers\TemplateController;
use App\Http\Controllers\UserInviteController;
use App\Http\Controllers\WorkspaceController;
use App\Http\Controllers\WorkspaceUserController;
use App\Http\Middleware\Form\ResolveFormMiddleware;
use Illuminate\Foundation\Http\Middleware\HandlePrecognitiveRequests;
use Illuminate\Http\Request;
@@ -62,6 +64,7 @@ Route::group(['middleware' => 'auth:api'], function () {
->where('subscription', '(' . implode('|', SubscriptionController::SUBSCRIPTION_NAMES) . ')')
->where('plan', '(' . implode('|', SubscriptionController::SUBSCRIPTION_PLANS) . ')');
Route::get('/billing-portal', [SubscriptionController::class, 'billingPortal'])->name('billing-portal');
Route::get('/users-count', [SubscriptionController::class, 'getUsersCount'])->name('users-count');
});
Route::prefix('open')->name('open.')->group(function () {
@@ -77,8 +80,43 @@ Route::group(['middleware' => 'auth:api'], function () {
Route::prefix('/{workspaceId}')->group(function () {
Route::get(
'/users',
[WorkspaceController::class, 'listUsers']
[WorkspaceUserController::class, 'listUsers']
)->name('users.index');
Route::get(
'/invites',
[UserInviteController::class, 'listInvites']
)->name('invites.index');
Route::post(
'/users/add',
[WorkspaceUserController::class, 'addUser']
)->name('users.add');
Route::delete(
'/users/{userId}/remove',
[WorkspaceUserController::class, 'removeUser']
)->name('users.remove');
Route::post(
'/invites/{inviteId}/resend',
[UserInviteController::class, 'resendInvite']
)->name('invites.resend');
Route::delete(
'/invites/{inviteId}/cancel',
[UserInviteController::class, 'cancelInvite']
)->name('invites.cancel');
Route::put(
'/users/{userId}/update-role',
[WorkspaceUserController::class, 'updateUserRole']
)->name('users.update-role');
// leave workspace route
Route::post(
'/leave',
[WorkspaceUserController::class, 'leaveWorkspace']
)->name('leave');
Route::prefix('/databases')->name('databases.')->group(function () {
Route::get(