1
0
mirror of https://github.com/TandoorRecipes/recipes.git synced 2026-01-11 00:58:32 -05:00

space and user space api updates

This commit is contained in:
vabene1111
2025-09-14 09:57:57 +02:00
parent 4f248afe76
commit 58c412ad95
42 changed files with 183 additions and 29 deletions

View File

@@ -455,3 +455,9 @@ class IsReadOnlyDRF(permissions.BasePermission):
def has_permission(self, request, view): def has_permission(self, request, view):
return request.method in SAFE_METHODS return request.method in SAFE_METHODS
class IsCreateDRF(permissions.BasePermission):
message = 'You cannot interact with this object, you can only create'
def has_permission(self, request, view):
return request.method == 'POST'

View File

@@ -46,13 +46,15 @@ class ScopeMiddleware:
# get active user space, if for some reason more than one space is active select first (group permission checks will fail, this is not intended at this point) # get active user space, if for some reason more than one space is active select first (group permission checks will fail, this is not intended at this point)
user_space = request.user.userspace_set.filter(active=True).first() user_space = request.user.userspace_set.filter(active=True).first()
if not user_space: if not user_space and request.user.userspace_set.count() > 0:
if request.user.userspace_set.count() > 0: # if the users has a userspace but nothing is active, activate the first one
# if the users has a userspace but nothing is active, activate the first one user_space = request.user.userspace_set.first()
user_space = request.user.userspace_set.filter(active=True).first() if user_space:
user_space.active = True user_space.active = True
user_space.save() user_space.save()
elif 'signup_token' in request.session:
if not user_space:
if 'signup_token' in request.session:
# if user is authenticated, has no space but a signup token (InviteLink) is present, redirect to invite link logic # if user is authenticated, has no space but a signup token (InviteLink) is present, redirect to invite link logic
return HttpResponseRedirect(reverse('view_invite', args=[request.session.pop('signup_token', '')])) return HttpResponseRedirect(reverse('view_invite', args=[request.session.pop('signup_token', '')]))
else: else:

View File

@@ -75,7 +75,7 @@ from cookbook.helper.permission_helper import (CustomIsAdmin, CustomIsOwner, Cus
CustomTokenHasScope, CustomUserPermission, IsReadOnlyDRF, CustomTokenHasScope, CustomUserPermission, IsReadOnlyDRF,
above_space_limit, above_space_limit,
group_required, has_group_permission, is_space_owner, group_required, has_group_permission, is_space_owner,
switch_user_active_space, CustomAiProviderPermission switch_user_active_space, CustomAiProviderPermission, IsCreateDRF
) )
from cookbook.helper.recipe_search import RecipeSearch from cookbook.helper.recipe_search import RecipeSearch
from cookbook.helper.recipe_url_import import clean_dict, get_from_youtube_scraper, get_images_from_soup from cookbook.helper.recipe_url_import import clean_dict, get_from_youtube_scraper, get_images_from_soup
@@ -546,7 +546,7 @@ class GroupViewSet(LoggingMixin, viewsets.ModelViewSet):
class SpaceViewSet(LoggingMixin, viewsets.ModelViewSet): class SpaceViewSet(LoggingMixin, viewsets.ModelViewSet):
queryset = Space.objects queryset = Space.objects
serializer_class = SpaceSerializer serializer_class = SpaceSerializer
permission_classes = [IsReadOnlyDRF & CustomIsGuest | CustomIsOwner & CustomIsAdmin & CustomTokenHasReadWriteScope] permission_classes = [((IsReadOnlyDRF | IsCreateDRF) & CustomIsGuest) | CustomIsOwner & CustomIsAdmin & CustomTokenHasReadWriteScope]
pagination_class = DefaultPagination pagination_class = DefaultPagination
http_method_names = ['get', 'post', 'put', 'patch'] http_method_names = ['get', 'post', 'put', 'patch']
@@ -567,7 +567,7 @@ class SpaceViewSet(LoggingMixin, viewsets.ModelViewSet):
class UserSpaceViewSet(LoggingMixin, viewsets.ModelViewSet): class UserSpaceViewSet(LoggingMixin, viewsets.ModelViewSet):
queryset = UserSpace.objects queryset = UserSpace.objects
serializer_class = UserSpaceSerializer serializer_class = UserSpaceSerializer
permission_classes = [(CustomIsSpaceOwner | CustomIsOwnerReadOnly) & CustomTokenHasReadWriteScope] permission_classes = [(CustomIsSpaceOwner | (IsReadOnlyDRF & CustomIsUser) | CustomIsOwnerReadOnly) & CustomTokenHasReadWriteScope]
http_method_names = ['get', 'put', 'patch', 'delete'] http_method_names = ['get', 'put', 'patch', 'delete']
pagination_class = DefaultPagination pagination_class = DefaultPagination
@@ -581,10 +581,23 @@ class UserSpaceViewSet(LoggingMixin, viewsets.ModelViewSet):
if internal_note is not None: if internal_note is not None:
self.queryset = self.queryset.filter(internal_note=internal_note) self.queryset = self.queryset.filter(internal_note=internal_note)
if is_space_owner(self.request.user, self.request.space): # starting with users you can SEE all other users in a space, guests only see themselves
if has_group_permission(self.request.user, ['user']):
return self.queryset.filter(space=self.request.space) return self.queryset.filter(space=self.request.space)
else: else:
return self.queryset.filter(user=self.request.user, space=self.request.space) return self.queryset.filter(space=self.request.space, user=self.request.user)
@extend_schema(responses=UserSpaceSerializer(many=True))
@decorators.action(detail=False, pagination_class=DefaultPagination, methods=['GET'], serializer_class=UserSpaceSerializer, )
def all_personal(self, request):
"""
return all userspaces for the user requesting the endpoint
:param request:
:return:
"""
with scopes_disabled():
self.queryset = self.queryset.filter(user=self.request.user)
return Response(self.serializer_class(self.queryset.all(), many=True, context={'request': self.request}).data)
class UserPreferenceViewSet(LoggingMixin, viewsets.ModelViewSet): class UserPreferenceViewSet(LoggingMixin, viewsets.ModelViewSet):

View File

@@ -163,7 +163,7 @@ onMounted(() => {
* global title update handler, might be overridden by page specific handlers * global title update handler, might be overridden by page specific handlers
*/ */
router.afterEach((to, from) => { router.afterEach((to, from) => {
if(to.name != 'WelcomePage' && !useUserPreferenceStore().activeSpace.spaceSetupCompleted && useUserPreferenceStore().activeSpace.createdBy.id! == useUserPreferenceStore().userSettings.user.id!){ if(to.name == 'StartPage' && !useUserPreferenceStore().activeSpace.spaceSetupCompleted && useUserPreferenceStore().activeSpace.createdBy.id! == useUserPreferenceStore().userSettings.user.id!){
router.push({name: 'WelcomePage'}) router.push({name: 'WelcomePage'})
} }
nextTick(() => { nextTick(() => {

View File

@@ -98,7 +98,7 @@
<script setup lang="ts"> <script setup lang="ts">
import {ApiApi, UserFile, UserFileFromJSON} from "@/openapi"; import {ApiApi, UserFile, UserFileFromJSON} from "@/openapi";
import {onMounted, ref} from "vue"; import {onMounted, ref, watch} from "vue";
import {DateTime} from "luxon"; import {DateTime} from "luxon";
import {ErrorMessageType, PreparedMessage, useMessageStore} from "@/stores/MessageStore"; import {ErrorMessageType, PreparedMessage, useMessageStore} from "@/stores/MessageStore";
import {getCookie} from "@/utils/cookie"; import {getCookie} from "@/utils/cookie";
@@ -131,8 +131,13 @@ const tableHeaders = ref([
]) ])
onMounted(() => { onMounted(() => {
//TODO move to open function of file tab
loadFiles() })
watch(() => dialog.value, (value, oldValue) => {
if (value && !oldValue) {
loadFiles()
}
}) })
function loadFiles() { function loadFiles() {

View File

@@ -29,7 +29,7 @@
<v-textarea v-model="editingObj.message" :label="$t('Message')" clearable></v-textarea> <v-textarea v-model="editingObj.message" :label="$t('Message')" clearable></v-textarea>
<space-limits-info :space="editingObj" :show-thank-you="false"></space-limits-info> <space-limits-info :space="editingObj" :show-thank-you="false" v-if="isUpdate()"></space-limits-info>
</v-form> </v-form>
</v-tabs-window-item> </v-tabs-window-item>

View File

@@ -162,6 +162,7 @@
"Keyword": "", "Keyword": "",
"Keyword_Alias": "", "Keyword_Alias": "",
"Keywords": "", "Keywords": "",
"LeaveSpace": "",
"Link": "", "Link": "",
"Load_More": "", "Load_More": "",
"LogCredits": "", "LogCredits": "",
@@ -292,6 +293,7 @@
"Sort_by_new": "", "Sort_by_new": "",
"Space": "", "Space": "",
"SpaceHelp": "", "SpaceHelp": "",
"SpaceMembersHelp": "",
"SpaceName": "", "SpaceName": "",
"SpacePrivateObjectsHelp": "", "SpacePrivateObjectsHelp": "",
"Starting_Day": "", "Starting_Day": "",

View File

@@ -157,6 +157,7 @@
"Keyword": "Ключова дума", "Keyword": "Ключова дума",
"Keyword_Alias": "Псевдоним на ключова дума", "Keyword_Alias": "Псевдоним на ключова дума",
"Keywords": "Ключови думи", "Keywords": "Ключови думи",
"LeaveSpace": "",
"Link": "Връзка", "Link": "Връзка",
"Load_More": "Зареди още", "Load_More": "Зареди още",
"LogCredits": "", "LogCredits": "",
@@ -285,6 +286,7 @@
"Sort_by_new": "Сортиране по ново", "Sort_by_new": "Сортиране по ново",
"Space": "", "Space": "",
"SpaceHelp": "", "SpaceHelp": "",
"SpaceMembersHelp": "",
"SpaceName": "", "SpaceName": "",
"SpacePrivateObjectsHelp": "", "SpacePrivateObjectsHelp": "",
"Starting_Day": "Начален ден от седмицата", "Starting_Day": "Начален ден от седмицата",

View File

@@ -211,6 +211,7 @@
"Language": "Llenguatge", "Language": "Llenguatge",
"Last_name": "Cognoms", "Last_name": "Cognoms",
"Learn_More": "Saber-me més", "Learn_More": "Saber-me més",
"LeaveSpace": "",
"Link": "Enllaç", "Link": "Enllaç",
"Load_More": "Carregueu-ne més", "Load_More": "Carregueu-ne més",
"LogCredits": "", "LogCredits": "",
@@ -370,6 +371,7 @@
"Sort_by_new": "Ordenar a partir del més nou", "Sort_by_new": "Ordenar a partir del més nou",
"Space": "", "Space": "",
"SpaceHelp": "", "SpaceHelp": "",
"SpaceMembersHelp": "",
"SpaceName": "", "SpaceName": "",
"SpacePrivateObjectsHelp": "", "SpacePrivateObjectsHelp": "",
"Space_Cosmetic_Settings": "Un administrador de l'espai podria canviar algunes configuracions estètiques i tindrien prioritat sobre la configuració dels usuaris per a aquest espai.", "Space_Cosmetic_Settings": "Un administrador de l'espai podria canviar algunes configuracions estètiques i tindrien prioritat sobre la configuració dels usuaris per a aquest espai.",

View File

@@ -209,6 +209,7 @@
"Language": "Jazyk", "Language": "Jazyk",
"Last_name": "Příjmení", "Last_name": "Příjmení",
"Learn_More": "Zjistit víc", "Learn_More": "Zjistit víc",
"LeaveSpace": "",
"Link": "Odkaz", "Link": "Odkaz",
"Load_More": "Načíst další", "Load_More": "Načíst další",
"LogCredits": "", "LogCredits": "",
@@ -365,6 +366,7 @@
"Sort_by_new": "Seřadit od nejnovějšího", "Sort_by_new": "Seřadit od nejnovějšího",
"Space": "", "Space": "",
"SpaceHelp": "", "SpaceHelp": "",
"SpaceMembersHelp": "",
"SpaceName": "", "SpaceName": "",
"SpacePrivateObjectsHelp": "", "SpacePrivateObjectsHelp": "",
"Space_Cosmetic_Settings": "Některá kosmetická nastavení mohou měnit správci prostoru a budou mít přednost před nastavením klienta pro daný prostor.", "Space_Cosmetic_Settings": "Některá kosmetická nastavení mohou měnit správci prostoru a budou mít přednost před nastavením klienta pro daný prostor.",

View File

@@ -211,6 +211,7 @@
"Language": "Sprog", "Language": "Sprog",
"Last_name": "Efternavn", "Last_name": "Efternavn",
"Learn_More": "Lær mere", "Learn_More": "Lær mere",
"LeaveSpace": "",
"Link": "Link", "Link": "Link",
"Load_More": "Indlæs mere", "Load_More": "Indlæs mere",
"LogCredits": "", "LogCredits": "",
@@ -370,6 +371,7 @@
"Sort_by_new": "Sorter efter nylige", "Sort_by_new": "Sorter efter nylige",
"Space": "", "Space": "",
"SpaceHelp": "", "SpaceHelp": "",
"SpaceMembersHelp": "",
"SpaceName": "", "SpaceName": "",
"SpacePrivateObjectsHelp": "", "SpacePrivateObjectsHelp": "",
"Space_Cosmetic_Settings": "Visse kosmetiske indstillinger kan ændres af område-administratorer og vil overskrive klient-indstillinger for pågældende område.", "Space_Cosmetic_Settings": "Visse kosmetiske indstillinger kan ændres af område-administratorer og vil overskrive klient-indstillinger for pågældende område.",

View File

@@ -290,6 +290,7 @@
"Last": "Letztes", "Last": "Letztes",
"Last_name": "Nachname", "Last_name": "Nachname",
"Learn_More": "Mehr erfahren", "Learn_More": "Mehr erfahren",
"LeaveSpace": "Space verlassen",
"Link": "Link", "Link": "Link",
"Load": "Laden", "Load": "Laden",
"Load_More": "Weitere laden", "Load_More": "Weitere laden",
@@ -515,7 +516,7 @@
"SpaceLimitReached": "Dieser Space hat ein Limit erreicht. Es können keine neuen Objekte von diesem Typ angelegt werden.", "SpaceLimitReached": "Dieser Space hat ein Limit erreicht. Es können keine neuen Objekte von diesem Typ angelegt werden.",
"SpaceMemberHelp": "Füge Benutzer hinzu indem du Einladungen erstellst und Sie an die gewünschte Person sendest.", "SpaceMemberHelp": "Füge Benutzer hinzu indem du Einladungen erstellst und Sie an die gewünschte Person sendest.",
"SpaceMembers": "Space Mitglieder", "SpaceMembers": "Space Mitglieder",
"SpaceMembersHelp": "Benutzer und Ihre Rechte in einem Space. ", "SpaceMembersHelp": "Benutzer und Ihre Rechte in einem Space. Füge weitere Nutzer mit Einladungslinks hinzu.",
"SpaceName": "Space Name", "SpaceName": "Space Name",
"SpacePrivateObjectsHelp": "Einige Objekte sind Standardmäßig privat, können aber mit Mitgliedern deines Spaces geteilt werden.", "SpacePrivateObjectsHelp": "Einige Objekte sind Standardmäßig privat, können aber mit Mitgliedern deines Spaces geteilt werden.",
"SpaceSettings": "Space Einstellungen", "SpaceSettings": "Space Einstellungen",

View File

@@ -211,6 +211,7 @@
"Language": "Γλώσσα", "Language": "Γλώσσα",
"Last_name": "Επίθετο", "Last_name": "Επίθετο",
"Learn_More": "Μάθετε περισσότερα", "Learn_More": "Μάθετε περισσότερα",
"LeaveSpace": "",
"Link": "Σύνδεσμος", "Link": "Σύνδεσμος",
"Load_More": "Φόρτωση περισσότερων", "Load_More": "Φόρτωση περισσότερων",
"LogCredits": "", "LogCredits": "",
@@ -370,6 +371,7 @@
"Sort_by_new": "Ταξινόμηση κατά νέο", "Sort_by_new": "Ταξινόμηση κατά νέο",
"Space": "", "Space": "",
"SpaceHelp": "", "SpaceHelp": "",
"SpaceMembersHelp": "",
"SpaceName": "", "SpaceName": "",
"SpacePrivateObjectsHelp": "", "SpacePrivateObjectsHelp": "",
"Space_Cosmetic_Settings": "Ορισμένες ρυθμίσεις εμφάνισης μπορούν να αλλάξουν από τους διαχειριστές του χώρου και θα παρακάμψουν τις ρυθμίσεις πελάτη για αυτόν τον χώρο.", "Space_Cosmetic_Settings": "Ορισμένες ρυθμίσεις εμφάνισης μπορούν να αλλάξουν από τους διαχειριστές του χώρου και θα παρακάμψουν τις ρυθμίσεις πελάτη για αυτόν τον χώρο.",

View File

@@ -288,6 +288,7 @@
"Last": "Last", "Last": "Last",
"Last_name": "Last Name", "Last_name": "Last Name",
"Learn_More": "Learn More", "Learn_More": "Learn More",
"LeaveSpace": "Leave Space",
"Link": "Link", "Link": "Link",
"Load": "Load", "Load": "Load",
"Load_More": "Load More", "Load_More": "Load More",
@@ -513,7 +514,7 @@
"SpaceLimitReached": "This Space has reached a limit. No more objects of this type can be created.", "SpaceLimitReached": "This Space has reached a limit. No more objects of this type can be created.",
"SpaceMemberHelp": "Add users to your space by creating an Invite Link and sending it to the person you want to add.", "SpaceMemberHelp": "Add users to your space by creating an Invite Link and sending it to the person you want to add.",
"SpaceMembers": "Space Members", "SpaceMembers": "Space Members",
"SpaceMembersHelp": "Users and their permissions in a space. ", "SpaceMembersHelp": "Users and their permissions in a space. Add additional users using invite links.",
"SpaceName": "Space Name", "SpaceName": "Space Name",
"SpacePrivateObjectsHelp": " Some things are private by default an can be shared with members of your space.", "SpacePrivateObjectsHelp": " Some things are private by default an can be shared with members of your space.",
"SpaceSettings": "Space Settings", "SpaceSettings": "Space Settings",

View File

@@ -279,6 +279,7 @@
"Last": "Último", "Last": "Último",
"Last_name": "Apellidos", "Last_name": "Apellidos",
"Learn_More": "Saber Más", "Learn_More": "Saber Más",
"LeaveSpace": "",
"Link": "Enlace", "Link": "Enlace",
"Load": "Cargar", "Load": "Cargar",
"Load_More": "Cargar más", "Load_More": "Cargar más",
@@ -495,7 +496,7 @@
"SpaceLimitReached": "Este espacio ha alcanzado un límite. No se pueden crear más objetos de este tipo.", "SpaceLimitReached": "Este espacio ha alcanzado un límite. No se pueden crear más objetos de este tipo.",
"SpaceMemberHelp": "Agrega usuarios a tu espacio creando un enlace de invitación y enviándolo a la persona que quieras agregar.", "SpaceMemberHelp": "Agrega usuarios a tu espacio creando un enlace de invitación y enviándolo a la persona que quieras agregar.",
"SpaceMembers": "Miembros del espacio", "SpaceMembers": "Miembros del espacio",
"SpaceMembersHelp": "Usuarios y sus permisos en un espacio. ", "SpaceMembersHelp": "",
"SpaceName": "", "SpaceName": "",
"SpacePrivateObjectsHelp": "", "SpacePrivateObjectsHelp": "",
"SpaceSettings": "Ajustes del espacio", "SpaceSettings": "Ajustes del espacio",

View File

@@ -205,6 +205,7 @@
"Language": "Kieli", "Language": "Kieli",
"Last_name": "Sukunimi", "Last_name": "Sukunimi",
"Learn_More": "Lisätietoja", "Learn_More": "Lisätietoja",
"LeaveSpace": "",
"Link": "Linkki", "Link": "Linkki",
"Load_More": "Lataa Lisää", "Load_More": "Lataa Lisää",
"LogCredits": "", "LogCredits": "",
@@ -358,6 +359,7 @@
"Sort_by_new": "Lajittele uusien mukaan", "Sort_by_new": "Lajittele uusien mukaan",
"Space": "", "Space": "",
"SpaceHelp": "", "SpaceHelp": "",
"SpaceMembersHelp": "",
"SpaceName": "", "SpaceName": "",
"SpacePrivateObjectsHelp": "", "SpacePrivateObjectsHelp": "",
"Split_All_Steps": "Jaa kaikki rivit erillisiin vaiheisiin.", "Split_All_Steps": "Jaa kaikki rivit erillisiin vaiheisiin.",

View File

@@ -288,6 +288,7 @@
"Last": "Dernier", "Last": "Dernier",
"Last_name": "Nom", "Last_name": "Nom",
"Learn_More": "Apprenez-en plus", "Learn_More": "Apprenez-en plus",
"LeaveSpace": "",
"Link": "Lien", "Link": "Lien",
"Load": "Chargement", "Load": "Chargement",
"Load_More": "Charger plus", "Load_More": "Charger plus",
@@ -510,7 +511,7 @@
"SpaceLimitReached": "Ce groupe a atteint sa limite. Aucun nouvel objet de ce type ne peut être créé.", "SpaceLimitReached": "Ce groupe a atteint sa limite. Aucun nouvel objet de ce type ne peut être créé.",
"SpaceMemberHelp": "Ajoutez des utilisateurs à votre espace en créant un lien d'invitation et en l'envoyant à la personne que vous souhaitez ajouter.", "SpaceMemberHelp": "Ajoutez des utilisateurs à votre espace en créant un lien d'invitation et en l'envoyant à la personne que vous souhaitez ajouter.",
"SpaceMembers": "Membres du groupe", "SpaceMembers": "Membres du groupe",
"SpaceMembersHelp": "Utilisateurs et permissions dans un groupe. ", "SpaceMembersHelp": "",
"SpaceName": "", "SpaceName": "",
"SpacePrivateObjectsHelp": "", "SpacePrivateObjectsHelp": "",
"SpaceSettings": "Paramètres du groupe", "SpaceSettings": "Paramètres du groupe",

View File

@@ -211,6 +211,7 @@
"Language": "שפה", "Language": "שפה",
"Last_name": "שם משפחה", "Last_name": "שם משפחה",
"Learn_More": "למד עוד", "Learn_More": "למד עוד",
"LeaveSpace": "",
"Link": "קישור", "Link": "קישור",
"Load_More": "טען עוד", "Load_More": "טען עוד",
"LogCredits": "", "LogCredits": "",
@@ -370,6 +371,7 @@
"Sort_by_new": "סדר ע\"י חדש", "Sort_by_new": "סדר ע\"י חדש",
"Space": "", "Space": "",
"SpaceHelp": "", "SpaceHelp": "",
"SpaceMembersHelp": "",
"SpaceName": "", "SpaceName": "",
"SpacePrivateObjectsHelp": "", "SpacePrivateObjectsHelp": "",
"Space_Cosmetic_Settings": "חלק מהגדרות הקוסמטיות יכולות להיות מעודכנות על ידי מנהל המרחב וידרסו את הגדרות הקליינט עבור מרחב זה.", "Space_Cosmetic_Settings": "חלק מהגדרות הקוסמטיות יכולות להיות מעודכנות על ידי מנהל המרחב וידרסו את הגדרות הקליינט עבור מרחב זה.",

View File

@@ -211,6 +211,7 @@
"Language": "Jezik", "Language": "Jezik",
"Last_name": "Prezime", "Last_name": "Prezime",
"Learn_More": "Saznajte više", "Learn_More": "Saznajte više",
"LeaveSpace": "",
"Link": "Poveznica", "Link": "Poveznica",
"Load_More": "Učitaj više", "Load_More": "Učitaj više",
"LogCredits": "", "LogCredits": "",
@@ -370,6 +371,7 @@
"Sort_by_new": "Poredaj po novom", "Sort_by_new": "Poredaj po novom",
"Space": "", "Space": "",
"SpaceHelp": "", "SpaceHelp": "",
"SpaceMembersHelp": "",
"SpaceName": "", "SpaceName": "",
"SpacePrivateObjectsHelp": "", "SpacePrivateObjectsHelp": "",
"Space_Cosmetic_Settings": "Neke kozmetičke postavke mogu promijeniti administratori prostora i one će poništiti postavke klijenta za taj prostor.", "Space_Cosmetic_Settings": "Neke kozmetičke postavke mogu promijeniti administratori prostora i one će poništiti postavke klijenta za taj prostor.",

View File

@@ -193,6 +193,7 @@
"Language": "Nyelv", "Language": "Nyelv",
"Last_name": "Vezetéknév", "Last_name": "Vezetéknév",
"Learn_More": "Tudjon meg többet", "Learn_More": "Tudjon meg többet",
"LeaveSpace": "",
"Link": "Link", "Link": "Link",
"Load_More": "Továbbiak betöltése", "Load_More": "Továbbiak betöltése",
"LogCredits": "", "LogCredits": "",
@@ -337,6 +338,7 @@
"Sort_by_new": "Rendezés legújabbak szerint", "Sort_by_new": "Rendezés legújabbak szerint",
"Space": "", "Space": "",
"SpaceHelp": "", "SpaceHelp": "",
"SpaceMembersHelp": "",
"SpaceName": "", "SpaceName": "",
"SpacePrivateObjectsHelp": "", "SpacePrivateObjectsHelp": "",
"Split_All_Steps": "Ossza fel az összes sort különálló lépésekbe.", "Split_All_Steps": "Ossza fel az összes sort különálló lépésekbe.",

View File

@@ -83,6 +83,7 @@
"Information": "Տեղեկություն", "Information": "Տեղեկություն",
"Ingredients": "", "Ingredients": "",
"Keywords": "", "Keywords": "",
"LeaveSpace": "",
"Link": "", "Link": "",
"Load_More": "", "Load_More": "",
"LogCredits": "", "LogCredits": "",
@@ -154,6 +155,7 @@
"Sort_by_new": "Տեսակավորել ըստ նորերի", "Sort_by_new": "Տեսակավորել ըստ նորերի",
"Space": "", "Space": "",
"SpaceHelp": "", "SpaceHelp": "",
"SpaceMembersHelp": "",
"SpaceName": "", "SpaceName": "",
"SpacePrivateObjectsHelp": "", "SpacePrivateObjectsHelp": "",
"StartsWith": "", "StartsWith": "",

View File

@@ -178,6 +178,7 @@
"Keywords": "Kata Kunci", "Keywords": "Kata Kunci",
"Language": "", "Language": "",
"Last_name": "", "Last_name": "",
"LeaveSpace": "",
"Link": "Link", "Link": "Link",
"Load_More": "Muat lebih banyak", "Load_More": "Muat lebih banyak",
"LogCredits": "", "LogCredits": "",
@@ -314,6 +315,7 @@
"Sort_by_new": "Urutkan berdasarkan baru", "Sort_by_new": "Urutkan berdasarkan baru",
"Space": "", "Space": "",
"SpaceHelp": "", "SpaceHelp": "",
"SpaceMembersHelp": "",
"SpaceName": "", "SpaceName": "",
"SpacePrivateObjectsHelp": "", "SpacePrivateObjectsHelp": "",
"Starting_Day": "", "Starting_Day": "",

View File

@@ -210,6 +210,7 @@
"Language": "", "Language": "",
"Last_name": "", "Last_name": "",
"Learn_More": "", "Learn_More": "",
"LeaveSpace": "",
"Link": "", "Link": "",
"Load_More": "", "Load_More": "",
"LogCredits": "", "LogCredits": "",
@@ -368,6 +369,7 @@
"Sort_by_new": "", "Sort_by_new": "",
"Space": "", "Space": "",
"SpaceHelp": "", "SpaceHelp": "",
"SpaceMembersHelp": "",
"SpaceName": "", "SpaceName": "",
"SpacePrivateObjectsHelp": "", "SpacePrivateObjectsHelp": "",
"Space_Cosmetic_Settings": "", "Space_Cosmetic_Settings": "",

View File

@@ -288,6 +288,7 @@
"Last": "Ultimo", "Last": "Ultimo",
"Last_name": "Cognome", "Last_name": "Cognome",
"Learn_More": "Scopri altro", "Learn_More": "Scopri altro",
"LeaveSpace": "",
"Link": "Collegamento", "Link": "Collegamento",
"Load": "Carica", "Load": "Carica",
"Load_More": "Carica altro", "Load_More": "Carica altro",
@@ -512,7 +513,7 @@
"SpaceLimitReached": "Questo spazio ha raggiunto il limite. Non è possibile creare altri oggetti di questo tipo.", "SpaceLimitReached": "Questo spazio ha raggiunto il limite. Non è possibile creare altri oggetti di questo tipo.",
"SpaceMemberHelp": "Aggiungi utenti al tuo spazio creando un collegamento di invito e inviandolo alla persona che desideri aggiungere.", "SpaceMemberHelp": "Aggiungi utenti al tuo spazio creando un collegamento di invito e inviandolo alla persona che desideri aggiungere.",
"SpaceMembers": "Membri dello spazio", "SpaceMembers": "Membri dello spazio",
"SpaceMembersHelp": "Utenti e relativi permessi in uno spazio. ", "SpaceMembersHelp": "",
"SpaceName": "", "SpaceName": "",
"SpacePrivateObjectsHelp": "", "SpacePrivateObjectsHelp": "",
"SpaceSettings": "Impostazioni spazio", "SpaceSettings": "Impostazioni spazio",

View File

@@ -195,6 +195,7 @@
"Language": "", "Language": "",
"Last_name": "", "Last_name": "",
"Learn_More": "", "Learn_More": "",
"LeaveSpace": "",
"Link": "", "Link": "",
"Load_More": "Įkelti daugiau", "Load_More": "Įkelti daugiau",
"LogCredits": "", "LogCredits": "",
@@ -342,6 +343,7 @@
"Sort_by_new": "Rūšiuoti pagal naujumą", "Sort_by_new": "Rūšiuoti pagal naujumą",
"Space": "", "Space": "",
"SpaceHelp": "", "SpaceHelp": "",
"SpaceMembersHelp": "",
"SpaceName": "", "SpaceName": "",
"SpacePrivateObjectsHelp": "", "SpacePrivateObjectsHelp": "",
"Split_All_Steps": "", "Split_All_Steps": "",

View File

@@ -211,6 +211,7 @@
"Language": "", "Language": "",
"Last_name": "", "Last_name": "",
"Learn_More": "", "Learn_More": "",
"LeaveSpace": "",
"Link": "", "Link": "",
"Load_More": "", "Load_More": "",
"LogCredits": "", "LogCredits": "",
@@ -370,6 +371,7 @@
"Sort_by_new": "", "Sort_by_new": "",
"Space": "", "Space": "",
"SpaceHelp": "", "SpaceHelp": "",
"SpaceMembersHelp": "",
"SpaceName": "", "SpaceName": "",
"SpacePrivateObjectsHelp": "", "SpacePrivateObjectsHelp": "",
"Space_Cosmetic_Settings": "", "Space_Cosmetic_Settings": "",

View File

@@ -202,6 +202,7 @@
"Language": "Språk", "Language": "Språk",
"Last_name": "Etternavn", "Last_name": "Etternavn",
"Learn_More": "Lær mer", "Learn_More": "Lær mer",
"LeaveSpace": "",
"Link": "Lenke", "Link": "Lenke",
"Load_More": "Last inn flere", "Load_More": "Last inn flere",
"LogCredits": "", "LogCredits": "",
@@ -352,6 +353,7 @@
"Sort_by_new": "Sorter etter nyest", "Sort_by_new": "Sorter etter nyest",
"Space": "", "Space": "",
"SpaceHelp": "", "SpaceHelp": "",
"SpaceMembersHelp": "",
"SpaceName": "", "SpaceName": "",
"SpacePrivateObjectsHelp": "", "SpacePrivateObjectsHelp": "",
"Split_All_Steps": "", "Split_All_Steps": "",

View File

@@ -289,6 +289,7 @@
"Last": "Laatste", "Last": "Laatste",
"Last_name": "Achternaam", "Last_name": "Achternaam",
"Learn_More": "Meer informatie", "Learn_More": "Meer informatie",
"LeaveSpace": "",
"Link": "Link", "Link": "Link",
"Load": "Laden", "Load": "Laden",
"Load_More": "Laad meer", "Load_More": "Laad meer",
@@ -513,7 +514,7 @@
"SpaceLimitReached": "Deze ruimte heeft een limiet bereikt. Er kunnen geen objecten van dit type meer worden aangemaakt.", "SpaceLimitReached": "Deze ruimte heeft een limiet bereikt. Er kunnen geen objecten van dit type meer worden aangemaakt.",
"SpaceMemberHelp": "Voeg gebruikers toe aan je ruimte door een uitnodigingslink aan te maken en naar de persoon te sturen die je wilt toevoegen.", "SpaceMemberHelp": "Voeg gebruikers toe aan je ruimte door een uitnodigingslink aan te maken en naar de persoon te sturen die je wilt toevoegen.",
"SpaceMembers": "Gebruikers van de ruimte", "SpaceMembers": "Gebruikers van de ruimte",
"SpaceMembersHelp": "Gebruikers en hun rechten in een ruimte. ", "SpaceMembersHelp": "",
"SpaceName": "", "SpaceName": "",
"SpacePrivateObjectsHelp": "", "SpacePrivateObjectsHelp": "",
"SpaceSettings": "Ruimte-instellingen", "SpaceSettings": "Ruimte-instellingen",

View File

@@ -237,6 +237,7 @@
"Language": "Język", "Language": "Język",
"Last_name": "Nazwisko", "Last_name": "Nazwisko",
"Learn_More": "Dowiedz się więcej", "Learn_More": "Dowiedz się więcej",
"LeaveSpace": "",
"Link": "Link", "Link": "Link",
"Load_More": "Załaduj więcej", "Load_More": "Załaduj więcej",
"LogCredits": "", "LogCredits": "",
@@ -396,6 +397,7 @@
"Sort_by_new": "Sortuj według nowych", "Sort_by_new": "Sortuj według nowych",
"Space": "", "Space": "",
"SpaceHelp": "", "SpaceHelp": "",
"SpaceMembersHelp": "",
"SpaceName": "", "SpaceName": "",
"SpacePrivateObjectsHelp": "", "SpacePrivateObjectsHelp": "",
"Space_Cosmetic_Settings": "Administratorzy przestrzeni mogą zmienić niektóre ustawienia kosmetyczne, które zastąpią ustawienia klienta dla tej przestrzeni.", "Space_Cosmetic_Settings": "Administratorzy przestrzeni mogą zmienić niektóre ustawienia kosmetyczne, które zastąpią ustawienia klienta dla tej przestrzeni.",

View File

@@ -169,6 +169,7 @@
"Keywords": "Palavras-chave", "Keywords": "Palavras-chave",
"Language": "Linguagem", "Language": "Linguagem",
"Learn_More": "Aprenda mais", "Learn_More": "Aprenda mais",
"LeaveSpace": "",
"Link": "Ligação", "Link": "Ligação",
"Load_More": "Carregar Mais", "Load_More": "Carregar Mais",
"LogCredits": "", "LogCredits": "",
@@ -303,6 +304,7 @@
"Sort_by_new": "Ordenar por mais recente", "Sort_by_new": "Ordenar por mais recente",
"Space": "", "Space": "",
"SpaceHelp": "", "SpaceHelp": "",
"SpaceMembersHelp": "",
"SpaceName": "", "SpaceName": "",
"SpacePrivateObjectsHelp": "", "SpacePrivateObjectsHelp": "",
"StartDate": "Data de início", "StartDate": "Data de início",

View File

@@ -287,6 +287,7 @@
"Last": "Último", "Last": "Último",
"Last_name": "Último Nome", "Last_name": "Último Nome",
"Learn_More": "Aprender Mais", "Learn_More": "Aprender Mais",
"LeaveSpace": "",
"Link": "Link", "Link": "Link",
"Load": "Carregar", "Load": "Carregar",
"Load_More": "Carregar mais", "Load_More": "Carregar mais",
@@ -444,6 +445,7 @@
"Sort_by_new": "Ordenar por novos", "Sort_by_new": "Ordenar por novos",
"Space": "", "Space": "",
"SpaceHelp": "", "SpaceHelp": "",
"SpaceMembersHelp": "",
"SpaceName": "", "SpaceName": "",
"SpacePrivateObjectsHelp": "", "SpacePrivateObjectsHelp": "",
"Space_Cosmetic_Settings": "Algumas configurações cosméticas podem ser alteradas pelos administradores do espaço e substituirão as configurações do cliente para esse espaço.", "Space_Cosmetic_Settings": "Algumas configurações cosméticas podem ser alteradas pelos administradores do espaço e substituirão as configurações do cliente para esse espaço.",

View File

@@ -187,6 +187,7 @@
"Keywords": "Cuvinte cheie", "Keywords": "Cuvinte cheie",
"Language": "Limba", "Language": "Limba",
"Last_name": "Nume de familie", "Last_name": "Nume de familie",
"LeaveSpace": "",
"Link": "Link", "Link": "Link",
"Load_More": "Încărcați mai mult", "Load_More": "Încărcați mai mult",
"LogCredits": "", "LogCredits": "",
@@ -326,6 +327,7 @@
"Sort_by_new": "Sortare după nou", "Sort_by_new": "Sortare după nou",
"Space": "", "Space": "",
"SpaceHelp": "", "SpaceHelp": "",
"SpaceMembersHelp": "",
"SpaceName": "", "SpaceName": "",
"SpacePrivateObjectsHelp": "", "SpacePrivateObjectsHelp": "",
"Split_All_Steps": "Împărțiți toate rândurile în pași separați.", "Split_All_Steps": "Împărțiți toate rândurile în pași separați.",

View File

@@ -288,6 +288,7 @@
"Last": "Последний", "Last": "Последний",
"Last_name": "Фамилия", "Last_name": "Фамилия",
"Learn_More": "Узнать больше", "Learn_More": "Узнать больше",
"LeaveSpace": "",
"Link": "Гиперссылка", "Link": "Гиперссылка",
"Load": "Загрузить", "Load": "Загрузить",
"Load_More": "Загрузить еще", "Load_More": "Загрузить еще",
@@ -510,7 +511,7 @@
"SpaceLimitReached": "В этом пространстве достигнут лимит. Новые объекты данного типа создавать нельзя.", "SpaceLimitReached": "В этом пространстве достигнут лимит. Новые объекты данного типа создавать нельзя.",
"SpaceMemberHelp": "Для добавления пользователей создайте пригласительную ссылку и передайте её человеку, которого хотите пригласить.", "SpaceMemberHelp": "Для добавления пользователей создайте пригласительную ссылку и передайте её человеку, которого хотите пригласить.",
"SpaceMembers": "Участники пространства", "SpaceMembers": "Участники пространства",
"SpaceMembersHelp": "Пользователи и их права доступа в пространстве. ", "SpaceMembersHelp": "",
"SpaceName": "", "SpaceName": "",
"SpacePrivateObjectsHelp": "", "SpacePrivateObjectsHelp": "",
"SpaceSettings": "Настройки пространства", "SpaceSettings": "Настройки пространства",

View File

@@ -288,6 +288,7 @@
"Last": "Zadnji", "Last": "Zadnji",
"Last_name": "Priimek", "Last_name": "Priimek",
"Learn_More": "Preberite Več", "Learn_More": "Preberite Več",
"LeaveSpace": "",
"Link": "Hiperpovezava", "Link": "Hiperpovezava",
"Load": "Naloži", "Load": "Naloži",
"Load_More": "Naloži več", "Load_More": "Naloži več",
@@ -512,7 +513,7 @@
"SpaceLimitReached": "Ta prostor je dosegel omejitev. Te vrste predmetov ni mogoče ustvariti več.", "SpaceLimitReached": "Ta prostor je dosegel omejitev. Te vrste predmetov ni mogoče ustvariti več.",
"SpaceMemberHelp": "Dodajte uporabnike v svoj prostor tako, da ustvarite povezavo za povabilo in jo pošljete osebi, ki jo želite dodati.", "SpaceMemberHelp": "Dodajte uporabnike v svoj prostor tako, da ustvarite povezavo za povabilo in jo pošljete osebi, ki jo želite dodati.",
"SpaceMembers": "Člani prostora", "SpaceMembers": "Člani prostora",
"SpaceMembersHelp": "Uporabniki in njihova dovoljenja v prostoru. ", "SpaceMembersHelp": "",
"SpaceName": "", "SpaceName": "",
"SpacePrivateObjectsHelp": "", "SpacePrivateObjectsHelp": "",
"SpaceSettings": "Nastavitve prostora", "SpaceSettings": "Nastavitve prostora",

View File

@@ -248,6 +248,7 @@
"Language": "Språk", "Language": "Språk",
"Last_name": "Efternamn", "Last_name": "Efternamn",
"Learn_More": "Läs mer", "Learn_More": "Läs mer",
"LeaveSpace": "",
"Link": "Länk", "Link": "Länk",
"Load_More": "Ladda mer", "Load_More": "Ladda mer",
"LogCredits": "", "LogCredits": "",
@@ -407,6 +408,7 @@
"Sort_by_new": "Sortera efter ny", "Sort_by_new": "Sortera efter ny",
"Space": "", "Space": "",
"SpaceHelp": "", "SpaceHelp": "",
"SpaceMembersHelp": "",
"SpaceName": "", "SpaceName": "",
"SpacePrivateObjectsHelp": "", "SpacePrivateObjectsHelp": "",
"Space_Cosmetic_Settings": "Vissa kosmetiska inställningar kan ändras av hushålls-administratörer och skriver över klientinställningar för det hushållet.", "Space_Cosmetic_Settings": "Vissa kosmetiska inställningar kan ändras av hushålls-administratörer och skriver över klientinställningar för det hushållet.",

View File

@@ -211,6 +211,7 @@
"Language": "Dil", "Language": "Dil",
"Last_name": "Soyisim", "Last_name": "Soyisim",
"Learn_More": "Daha Fazla", "Learn_More": "Daha Fazla",
"LeaveSpace": "",
"Link": "Bağlantı", "Link": "Bağlantı",
"Load_More": "Daha Fazla Yükle", "Load_More": "Daha Fazla Yükle",
"LogCredits": "", "LogCredits": "",
@@ -370,6 +371,7 @@
"Sort_by_new": "Yeniye göre sırala", "Sort_by_new": "Yeniye göre sırala",
"Space": "", "Space": "",
"SpaceHelp": "", "SpaceHelp": "",
"SpaceMembersHelp": "",
"SpaceName": "", "SpaceName": "",
"SpacePrivateObjectsHelp": "", "SpacePrivateObjectsHelp": "",
"Space_Cosmetic_Settings": "Bazı kozmetik ayarlar alan yöneticileri tarafından değiştirilebilir ve o alanın istemci ayarlarını geçersiz kılar.", "Space_Cosmetic_Settings": "Bazı kozmetik ayarlar alan yöneticileri tarafından değiştirilebilir ve o alanın istemci ayarlarını geçersiz kılar.",

View File

@@ -186,6 +186,7 @@
"Keywords": "Ключові слова", "Keywords": "Ключові слова",
"Language": "Мова", "Language": "Мова",
"Learn_More": "Дізнатися Більше", "Learn_More": "Дізнатися Більше",
"LeaveSpace": "",
"Link": "Посилання", "Link": "Посилання",
"Load_More": "Завантажити більше", "Load_More": "Завантажити більше",
"LogCredits": "", "LogCredits": "",
@@ -327,6 +328,7 @@
"Sort_by_new": "Сортувати за новими", "Sort_by_new": "Сортувати за новими",
"Space": "", "Space": "",
"SpaceHelp": "", "SpaceHelp": "",
"SpaceMembersHelp": "",
"SpaceName": "", "SpaceName": "",
"SpacePrivateObjectsHelp": "", "SpacePrivateObjectsHelp": "",
"StartDate": "Початкова дата", "StartDate": "Початкова дата",

View File

@@ -211,6 +211,7 @@
"Language": "语言", "Language": "语言",
"Last_name": "姓", "Last_name": "姓",
"Learn_More": "了解更多", "Learn_More": "了解更多",
"LeaveSpace": "",
"Link": "链接", "Link": "链接",
"Load_More": "加载更多", "Load_More": "加载更多",
"LogCredits": "", "LogCredits": "",
@@ -370,6 +371,7 @@
"Sort_by_new": "按新旧排序", "Sort_by_new": "按新旧排序",
"Space": "", "Space": "",
"SpaceHelp": "", "SpaceHelp": "",
"SpaceMembersHelp": "",
"SpaceName": "", "SpaceName": "",
"SpacePrivateObjectsHelp": "", "SpacePrivateObjectsHelp": "",
"Space_Cosmetic_Settings": "空间管理员可以更改某些装饰设置,并将覆盖该空间的客户端设置。", "Space_Cosmetic_Settings": "空间管理员可以更改某些装饰设置,并将覆盖该空间的客户端设置。",

View File

@@ -287,6 +287,7 @@
"Last": "最後", "Last": "最後",
"Last_name": "姓", "Last_name": "姓",
"Learn_More": "了解更多", "Learn_More": "了解更多",
"LeaveSpace": "",
"Link": "連結", "Link": "連結",
"Load": "載入", "Load": "載入",
"Load_More": "載入更多", "Load_More": "載入更多",
@@ -511,7 +512,7 @@
"SpaceLimitReached": "此空間已達到限制。無法再建立此類型的物件。", "SpaceLimitReached": "此空間已達到限制。無法再建立此類型的物件。",
"SpaceMemberHelp": "透過建立邀請連結並發送給您要新增的人來將使用者新增到您的空間。", "SpaceMemberHelp": "透過建立邀請連結並發送給您要新增的人來將使用者新增到您的空間。",
"SpaceMembers": "空間成員", "SpaceMembers": "空間成員",
"SpaceMembersHelp": "空間中的使用者及其權限。 ", "SpaceMembersHelp": "",
"SpaceName": "", "SpaceName": "",
"SpacePrivateObjectsHelp": "", "SpacePrivateObjectsHelp": "",
"SpaceSettings": "空間設定", "SpaceSettings": "空間設定",

View File

@@ -2148,6 +2148,11 @@ export interface ApiUserRetrieveRequest {
id: number; id: number;
} }
export interface ApiUserSpaceAllPersonalListRequest {
page?: number;
pageSize?: number;
}
export interface ApiUserSpaceDestroyRequest { export interface ApiUserSpaceDestroyRequest {
id: number; id: number;
} }
@@ -16234,6 +16239,44 @@ export class ApiApi extends runtime.BaseAPI {
return await response.value(); return await response.value();
} }
/**
* return all userspaces for the user requesting the endpoint :param request: :return:
*/
async apiUserSpaceAllPersonalListRaw(requestParameters: ApiUserSpaceAllPersonalListRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise<runtime.ApiResponse<PaginatedUserSpaceList>> {
const queryParameters: any = {};
if (requestParameters['page'] != null) {
queryParameters['page'] = requestParameters['page'];
}
if (requestParameters['pageSize'] != null) {
queryParameters['page_size'] = requestParameters['pageSize'];
}
const headerParameters: runtime.HTTPHeaders = {};
if (this.configuration && this.configuration.apiKey) {
headerParameters["Authorization"] = await this.configuration.apiKey("Authorization"); // ApiKeyAuth authentication
}
const response = await this.request({
path: `/api/user-space/all_personal/`,
method: 'GET',
headers: headerParameters,
query: queryParameters,
}, initOverrides);
return new runtime.JSONApiResponse(response, (jsonValue) => PaginatedUserSpaceListFromJSON(jsonValue));
}
/**
* return all userspaces for the user requesting the endpoint :param request: :return:
*/
async apiUserSpaceAllPersonalList(requestParameters: ApiUserSpaceAllPersonalListRequest = {}, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise<PaginatedUserSpaceList> {
const response = await this.apiUserSpaceAllPersonalListRaw(requestParameters, initOverrides);
return await response.value();
}
/** /**
* logs request counts to redis cache total/per user/ * logs request counts to redis cache total/per user/
*/ */

View File

@@ -34,9 +34,12 @@
</v-card-actions> </v-card-actions>
<v-card-text v-if="genericModel.model.name == 'AiLog'"> <v-card-text v-if="genericModel.model.name == 'AiLog'">
{{ $t('MonthlyCreditsUsed') }} ({{ useUserPreferenceStore().activeSpace.aiMonthlyCreditsUsed }} / {{ useUserPreferenceStore().activeSpace.aiCreditsMonthly }}) {{ $t('MonthlyCreditsUsed') }} ({{ useUserPreferenceStore().activeSpace.aiMonthlyCreditsUsed }} / {{
useUserPreferenceStore().activeSpace.aiCreditsMonthly
}})
{{ $t('AiCreditsBalance') }} : {{ useUserPreferenceStore().activeSpace.aiCreditsBalance }} {{ $t('AiCreditsBalance') }} : {{ useUserPreferenceStore().activeSpace.aiCreditsBalance }}
<v-progress-linear :model-value="useUserPreferenceStore().activeSpace.aiMonthlyCreditsUsed" :max="useUserPreferenceStore().activeSpace.aiCreditsMonthly"></v-progress-linear> <v-progress-linear :model-value="useUserPreferenceStore().activeSpace.aiMonthlyCreditsUsed"
:max="useUserPreferenceStore().activeSpace.aiCreditsMonthly"></v-progress-linear>
</v-card-text> </v-card-text>
</v-card> </v-card>
</v-col> </v-col>
@@ -83,7 +86,7 @@
<v-chip label v-else color="info">{{ $t('Space') }}</v-chip> <v-chip label v-else color="info">{{ $t('Space') }}</v-chip>
</template> </template>
<template v-slot:item.groups="{ item }" v-if="genericModel.model.name == 'UserSpace'"> <template v-slot:item.groups="{ item }" v-if="genericModel.model.name == 'UserSpace'">
{{item.groups.flatMap((x: Group) => x.name).join(', ')}} {{ item.groups.flatMap((x: Group) => x.name).join(', ') }}
</template> </template>
<template v-slot:item.action="{ item }"> <template v-slot:item.action="{ item }">
<v-btn class="float-right" icon="$menu" variant="plain"> <v-btn class="float-right" icon="$menu" variant="plain">
@@ -114,6 +117,11 @@
<v-list-item prepend-icon="fa-solid fa-rotate" v-if="genericModel.model.name == 'RecipeImport'" @click="importRecipe(item)"> <v-list-item prepend-icon="fa-solid fa-rotate" v-if="genericModel.model.name == 'RecipeImport'" @click="importRecipe(item)">
{{ $t('Import') }} {{ $t('Import') }}
</v-list-item> </v-list-item>
<v-list-item prepend-icon="fa-solid fa-arrow-right-from-bracket"
v-if="genericModel.model.name == 'Space' && item.createdBy.id != useUserPreferenceStore().userSettings.user.id!"
@click="leaveSpace(item)">
{{ $t('LeaveSpace') }}
</v-list-item>
</v-list> </v-list>
</v-menu> </v-menu>
</v-btn> </v-btn>
@@ -147,7 +155,7 @@ import {useUserPreferenceStore} from "@/stores/UserPreferenceStore";
import ModelMergeDialog from "@/components/dialogs/ModelMergeDialog.vue"; import ModelMergeDialog from "@/components/dialogs/ModelMergeDialog.vue";
import {VDataTableUpdateOptions} from "@/vuetify"; import {VDataTableUpdateOptions} from "@/vuetify";
import SyncDialog from "@/components/dialogs/SyncDialog.vue"; import SyncDialog from "@/components/dialogs/SyncDialog.vue";
import {ApiApi, ApiRecipeListRequest, Group, RecipeImport} from "@/openapi"; import {ApiApi, ApiRecipeListRequest, Group, RecipeImport, Space, UserSpace} from "@/openapi";
import {useTitle} from "@vueuse/core"; import {useTitle} from "@vueuse/core";
import RecipeShareDialog from "@/components/dialogs/RecipeShareDialog.vue"; import RecipeShareDialog from "@/components/dialogs/RecipeShareDialog.vue";
import AddToShoppingDialog from "@/components/dialogs/AddToShoppingDialog.vue"; import AddToShoppingDialog from "@/components/dialogs/AddToShoppingDialog.vue";
@@ -264,6 +272,26 @@ function importAllRecipes() {
}) })
} }
/**
* leave the selected space as a user
* @param space to leave
*/
function leaveSpace(space: Space) {
let api = new ApiApi()
useUserPreferenceStore().userSpaces.forEach((us: UserSpace) => {
if (us.space == space.id!) {
loading.value = true
api.apiUserSpaceDestroy({id: us.id!}).then(r => {
}).catch(err => {
useMessageStore().addError(ErrorMessageType.DELETE_ERROR, err)
}).finally(() => {
loading.value = false
})
}
})
}
</script> </script>
<style scoped> <style scoped>

View File

@@ -130,7 +130,7 @@ export const useUserPreferenceStore = defineStore('user_preference_store', () =>
*/ */
function loadUserSpaces() { function loadUserSpaces() {
let api = new ApiApi() let api = new ApiApi()
return api.apiUserSpaceList().then(r => { return api.apiUserSpaceAllPersonalList().then(r => {
userSpaces.value = r.results userSpaces.value = r.results
}).catch(err => { }).catch(err => {
if (err.response.status != 403) { if (err.response.status != 403) {