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

@@ -0,0 +1,47 @@
<template>
<img
v-if="isUrl(workspace.icon)"
:src="workspace.icon"
:alt="`${workspace.name} icon`"
class="flex-shrink-0 rounded"
:class="size"
>
<div
v-else
:class="size"
class="rounded text-xs truncate bg-neutral-100 text-center flex items-center justify-center"
>
<p
class="font-semibold text-neutral-500"
v-text="workspace.icon"
/>
</div>
</template>
<script>
export default {
name: 'WorkspaceIcon',
components: {},
props: {
workspace: {
type: Object,
required: true,
},
size: {
type: String,
default: 'h-6 w-6',
},
},
methods: {
isUrl(str) {
try {
new URL(str)
}
catch (_) {
return false
}
return true
},
},
}
</script>