diff --git a/cookbook/helper/scope_middleware.py b/cookbook/helper/scope_middleware.py
index 727bcdf9b..ff10980bb 100644
--- a/cookbook/helper/scope_middleware.py
+++ b/cookbook/helper/scope_middleware.py
@@ -1,8 +1,14 @@
+from django.contrib.auth.models import Group
+from django.http import HttpResponseRedirect
from django.urls import reverse
from django_scopes import scope, scopes_disabled
from oauth2_provider.contrib.rest_framework import OAuth2Authentication
+from psycopg2.errors import UniqueViolation
from rest_framework.exceptions import AuthenticationFailed
+import random
+
+from cookbook.models import Space, UserSpace
from cookbook.views import views
from recipes import settings
@@ -34,16 +40,20 @@ class ScopeMiddleware:
if request.path.startswith(prefix + '/switch-space/'):
return self.get_response(request)
- with scopes_disabled():
- if request.user.userspace_set.count() == 0 and not reverse('account_logout') in request.path:
- return views.space_overview(request)
-
# 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()
if not user_space:
- return views.space_overview(request)
+ if request.user.userspace_set.count() > 0:
+ # if the users has a userspace but nothing is active, activate the first one
+ user_space = request.user.userspace_set.filter(active=True).first()
+ user_space.active = True
+ user_space.save()
+ else:
+ # if user does not yet have a space create one for him
+ user_space = create_space_for_user(request.user)
+ # TODO remove the need for this view
if user_space.groups.count() == 0 and not reverse('account_logout') in request.path:
return views.no_groups(request)
@@ -65,3 +75,28 @@ class ScopeMiddleware:
with scopes_disabled():
request.space = None
return self.get_response(request)
+
+
+def create_space_for_user(user, name=None):
+ with scopes_disabled():
+ if not name:
+ name = f"{user.username}'s Space"
+ created_space = Space(name=name,
+ created_by=user,
+ max_file_storage_mb=settings.SPACE_DEFAULT_MAX_FILES,
+ max_recipes=settings.SPACE_DEFAULT_MAX_RECIPES,
+ max_users=settings.SPACE_DEFAULT_MAX_USERS,
+ allow_sharing=settings.SPACE_DEFAULT_ALLOW_SHARING,
+ ai_enabled=settings.SPACE_AI_ENABLED,
+ ai_credits_monthly=settings.SPACE_AI_CREDITS_MONTHLY,
+ space_setup_completed=False, )
+ try:
+ created_space.save()
+ except UniqueViolation:
+ created_space.name = f'{name} #{random.randrange(1, 10 ** 5)}'
+ created_space.save()
+
+ user_space = UserSpace.objects.create(space=created_space, user=user, active=True)
+ user_space.groups.add(Group.objects.filter(name='admin').get())
+
+ return user_space
diff --git a/cookbook/migrations/0228_space_space_setup_completed.py b/cookbook/migrations/0228_space_space_setup_completed.py
new file mode 100644
index 000000000..435bc4958
--- /dev/null
+++ b/cookbook/migrations/0228_space_space_setup_completed.py
@@ -0,0 +1,18 @@
+# Generated by Django 5.2.6 on 2025-09-10 20:11
+
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+ dependencies = [
+ ('cookbook', '0001_squashed_0227_space_ai_default_provider_and_more'),
+ ]
+
+ operations = [
+ migrations.AddField(
+ model_name='space',
+ name='space_setup_completed',
+ field=models.BooleanField(default=True),
+ ),
+ ]
diff --git a/cookbook/models.py b/cookbook/models.py
index 42ada30f4..a6cbb2a75 100644
--- a/cookbook/models.py
+++ b/cookbook/models.py
@@ -329,6 +329,8 @@ class Space(ExportModelOperationsMixin('space'), models.Model):
demo = models.BooleanField(default=False)
food_inherit = models.ManyToManyField(FoodInheritField, blank=True)
+ space_setup_completed = models.BooleanField(default=True)
+
ai_enabled = models.BooleanField(default=True)
ai_credits_monthly = models.IntegerField(default=100)
ai_credits_balance = models.DecimalField(default=0, max_digits=16, decimal_places=4)
diff --git a/cookbook/serializer.py b/cookbook/serializer.py
index 07fccce24..902da4e95 100644
--- a/cookbook/serializer.py
+++ b/cookbook/serializer.py
@@ -425,7 +425,7 @@ class SpaceSerializer(WritableNestedModelSerializer):
'allow_sharing', 'demo', 'food_inherit', 'user_count', 'recipe_count', 'file_size_mb',
'image', 'nav_logo', 'space_theme', 'custom_space_theme', 'nav_bg_color', 'nav_text_color',
'logo_color_32', 'logo_color_128', 'logo_color_144', 'logo_color_180', 'logo_color_192', 'logo_color_512', 'logo_color_svg', 'ai_credits_monthly',
- 'ai_credits_balance', 'ai_monthly_credits_used', 'ai_enabled', 'ai_default_provider')
+ 'ai_credits_balance', 'ai_monthly_credits_used', 'ai_enabled', 'ai_default_provider', 'space_setup_completed')
read_only_fields = (
'id', 'created_by', 'created_at', 'max_recipes', 'max_file_storage_mb', 'max_users', 'allow_sharing',
'demo', 'ai_monthly_credits_used')
diff --git a/vue3/src/apps/tandoor/main.ts b/vue3/src/apps/tandoor/main.ts
index b0dff8096..17d8cf0f0 100644
--- a/vue3/src/apps/tandoor/main.ts
+++ b/vue3/src/apps/tandoor/main.ts
@@ -18,6 +18,7 @@ let routes = [
{path: '/', component: () => import("@/pages/StartPage.vue"), name: 'StartPage' },
{path: '/search', redirect: {name: 'StartPage'}},
{path: '/test', component: () => import("@/pages/TestPage.vue"), name: 'view_test'},
+ {path: '/welcome', component: () => import("@/pages/WelcomePage.vue"), name: 'WelcomePage', meta: {title: 'Welcome'}},
{path: '/help', component: () => import("@/pages/HelpPage.vue"), name: 'HelpPage', meta: {title: 'Help'}},
{
path: '/settings', component: () => import("@/pages/SettingsPage.vue"), name: 'SettingsPage', redirect: '/settings/account',
diff --git a/vue3/src/components/settings/SpaceSettings.vue b/vue3/src/components/settings/SpaceSettings.vue
index c7b3fee30..a94b93d5d 100644
--- a/vue3/src/components/settings/SpaceSettings.vue
+++ b/vue3/src/components/settings/SpaceSettings.vue
@@ -74,6 +74,8 @@
{{ $t('Settings') }}
+
+
@@ -96,8 +98,10 @@
-
-
+
+
{{ $t('Save') }}
@@ -141,13 +145,18 @@ import {isSpaceAboveRecipeLimit, isSpaceAboveStorageLimit, isSpaceAboveUserLimit
const space = ref({} as Space)
onMounted(() => {
+ loadSpace()
+})
+
+function loadSpace() {
let api = new ApiApi()
+
api.apiSpaceCurrentRetrieve().then(r => {
space.value = r
}).catch(err => {
useMessageStore().addError(ErrorMessageType.FETCH_ERROR, err)
})
-})
+}
function updateSpace() {
let api = new ApiApi()
diff --git a/vue3/src/locales/ar.json b/vue3/src/locales/ar.json
index 3d422fc95..b218dc6b9 100644
--- a/vue3/src/locales/ar.json
+++ b/vue3/src/locales/ar.json
@@ -286,6 +286,7 @@
"Size": "",
"Sort_by_new": "",
"Space": "",
+ "SpaceName": "",
"Starting_Day": "",
"StartsWith": "",
"StartsWithHelp": "",
diff --git a/vue3/src/locales/bg.json b/vue3/src/locales/bg.json
index 69f324db5..150622e06 100644
--- a/vue3/src/locales/bg.json
+++ b/vue3/src/locales/bg.json
@@ -279,6 +279,7 @@
"Size": "Размер",
"Sort_by_new": "Сортиране по ново",
"Space": "",
+ "SpaceName": "",
"Starting_Day": "Начален ден от седмицата",
"StartsWith": "",
"StartsWithHelp": "",
diff --git a/vue3/src/locales/ca.json b/vue3/src/locales/ca.json
index c6c611a2a..fee2c9016 100644
--- a/vue3/src/locales/ca.json
+++ b/vue3/src/locales/ca.json
@@ -364,6 +364,7 @@
"Social_Authentication": "Identificació amb Xarxes Socials",
"Sort_by_new": "Ordenar a partir del més nou",
"Space": "",
+ "SpaceName": "",
"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.",
"Split_All_Steps": "Dividir totes les files en passos separats.",
"StartDate": "Data d'inici",
diff --git a/vue3/src/locales/cs.json b/vue3/src/locales/cs.json
index a7f592202..7a65058a0 100644
--- a/vue3/src/locales/cs.json
+++ b/vue3/src/locales/cs.json
@@ -359,6 +359,7 @@
"Social_Authentication": "Přihlašování pomocí účtů sociálních sítí",
"Sort_by_new": "Seřadit od nejnovějšího",
"Space": "",
+ "SpaceName": "",
"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.",
"Split_All_Steps": "Rozdělit každý řádek do samostatného kroku.",
"StartDate": "Počáteční datum",
diff --git a/vue3/src/locales/da.json b/vue3/src/locales/da.json
index 49fcc8405..8d82a94aa 100644
--- a/vue3/src/locales/da.json
+++ b/vue3/src/locales/da.json
@@ -364,6 +364,7 @@
"Social_Authentication": "Social authenticering",
"Sort_by_new": "Sorter efter nylige",
"Space": "",
+ "SpaceName": "",
"Space_Cosmetic_Settings": "Visse kosmetiske indstillinger kan ændres af område-administratorer og vil overskrive klient-indstillinger for pågældende område.",
"Split_All_Steps": "Opdel rækker i separate trin.",
"StartDate": "Startdato",
diff --git a/vue3/src/locales/de.json b/vue3/src/locales/de.json
index 7b6230d8c..c40ac5f41 100644
--- a/vue3/src/locales/de.json
+++ b/vue3/src/locales/de.json
@@ -510,6 +510,7 @@
"SpaceMemberHelp": "Füge Benutzer hinzu indem du Einladungen erstellst und Sie an die gewünschte Person sendest.",
"SpaceMembers": "Space Mitglieder",
"SpaceMembersHelp": "Benutzer und Ihre Rechte in einem Space. ",
+ "SpaceName": "Space Name",
"SpaceSettings": "Space Einstellungen",
"Space_Cosmetic_Settings": "Kosmetische Einstellungen auf Space Ebene überschreiben die Einstellungen der einzelnen Nutzer.",
"Split": "Aufteilen",
diff --git a/vue3/src/locales/el.json b/vue3/src/locales/el.json
index e028a56e1..91274d7d1 100644
--- a/vue3/src/locales/el.json
+++ b/vue3/src/locales/el.json
@@ -364,6 +364,7 @@
"Social_Authentication": "Ταυτοποίηση μέσω κοινωνικών δικτύων",
"Sort_by_new": "Ταξινόμηση κατά νέο",
"Space": "",
+ "SpaceName": "",
"Space_Cosmetic_Settings": "Ορισμένες ρυθμίσεις εμφάνισης μπορούν να αλλάξουν από τους διαχειριστές του χώρου και θα παρακάμψουν τις ρυθμίσεις πελάτη για αυτόν τον χώρο.",
"Split_All_Steps": "Διαχωρισμός όλων των γραμμών σε χωριστά βήματα.",
"StartDate": "Ημερομηνία Έναρξης",
diff --git a/vue3/src/locales/en.json b/vue3/src/locales/en.json
index d2bcb085a..84ec34ac8 100644
--- a/vue3/src/locales/en.json
+++ b/vue3/src/locales/en.json
@@ -508,6 +508,7 @@
"SpaceMemberHelp": "Add users to your space by creating an Invite Link and sending it to the person you want to add.",
"SpaceMembers": "Space Members",
"SpaceMembersHelp": "Users and their permissions in a space. ",
+ "SpaceName": "Space Name",
"SpaceSettings": "Space Settings",
"Space_Cosmetic_Settings": "Some cosmetic settings can be changed by space administrators and will override client settings for that space.",
"Split": "Split",
diff --git a/vue3/src/locales/es.json b/vue3/src/locales/es.json
index b6eb754a4..cd774ffaf 100644
--- a/vue3/src/locales/es.json
+++ b/vue3/src/locales/es.json
@@ -490,6 +490,7 @@
"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",
"SpaceMembersHelp": "Usuarios y sus permisos en un espacio. ",
+ "SpaceName": "",
"SpaceSettings": "Ajustes del espacio",
"Space_Cosmetic_Settings": "Algunos ajustes de apariencia pueden ser cambiados por los administradores del espacio y anularán los ajustes del cliente para ese espacio.",
"Split": "Dividir",
diff --git a/vue3/src/locales/fi.json b/vue3/src/locales/fi.json
index 47f674c28..0aa1bd66a 100644
--- a/vue3/src/locales/fi.json
+++ b/vue3/src/locales/fi.json
@@ -352,6 +352,7 @@
"Social_Authentication": "Sosiaalinen Todennus",
"Sort_by_new": "Lajittele uusien mukaan",
"Space": "",
+ "SpaceName": "",
"Split_All_Steps": "Jaa kaikki rivit erillisiin vaiheisiin.",
"StartDate": "Aloituspäivä",
"Starting_Day": "Viikon aloituspäivä",
diff --git a/vue3/src/locales/fr.json b/vue3/src/locales/fr.json
index b98c94b6e..e74c00a13 100644
--- a/vue3/src/locales/fr.json
+++ b/vue3/src/locales/fr.json
@@ -505,6 +505,7 @@
"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",
"SpaceMembersHelp": "Utilisateurs et permissions dans un groupe. ",
+ "SpaceName": "",
"SpaceSettings": "Paramètres du groupe",
"Space_Cosmetic_Settings": "Certains paramètres cosmétiques peuvent être modifiés par un administrateur de l'espace et seront prioritaires sur les paramètres des utilisateurs pour cet espace.",
"Split": "Diviser",
diff --git a/vue3/src/locales/he.json b/vue3/src/locales/he.json
index 4bb95ce4e..b444af777 100644
--- a/vue3/src/locales/he.json
+++ b/vue3/src/locales/he.json
@@ -364,6 +364,7 @@
"Social_Authentication": "אימות חברתי",
"Sort_by_new": "סדר ע\"י חדש",
"Space": "",
+ "SpaceName": "",
"Space_Cosmetic_Settings": "חלק מהגדרות הקוסמטיות יכולות להיות מעודכנות על ידי מנהל המרחב וידרסו את הגדרות הקליינט עבור מרחב זה.",
"Split_All_Steps": "פצל את כל השורות לצעדים נפרדים.",
"StartDate": "תאריך התחלה",
diff --git a/vue3/src/locales/hr.json b/vue3/src/locales/hr.json
index 1a34d4aeb..bad19fe17 100644
--- a/vue3/src/locales/hr.json
+++ b/vue3/src/locales/hr.json
@@ -364,6 +364,7 @@
"Social_Authentication": "Autentifikacija putem društvenih mreža",
"Sort_by_new": "Poredaj po novom",
"Space": "",
+ "SpaceName": "",
"Space_Cosmetic_Settings": "Neke kozmetičke postavke mogu promijeniti administratori prostora i one će poništiti postavke klijenta za taj prostor.",
"Split_All_Steps": "Podijeli sve retke u zasebne korake.",
"StartDate": "Početni datum",
diff --git a/vue3/src/locales/hu.json b/vue3/src/locales/hu.json
index 950c715cd..ffb6878ed 100644
--- a/vue3/src/locales/hu.json
+++ b/vue3/src/locales/hu.json
@@ -331,6 +331,7 @@
"Size": "Méret",
"Sort_by_new": "Rendezés legújabbak szerint",
"Space": "",
+ "SpaceName": "",
"Split_All_Steps": "Ossza fel az összes sort különálló lépésekbe.",
"StartDate": "Kezdés dátuma",
"Starting_Day": "A hét kezdőnapja",
diff --git a/vue3/src/locales/hy.json b/vue3/src/locales/hy.json
index 93a9e3583..4ba2e83d6 100644
--- a/vue3/src/locales/hy.json
+++ b/vue3/src/locales/hy.json
@@ -148,6 +148,7 @@
"Size": "",
"Sort_by_new": "Տեսակավորել ըստ նորերի",
"Space": "",
+ "SpaceName": "",
"StartsWith": "",
"StartsWithHelp": "",
"Step": "",
diff --git a/vue3/src/locales/id.json b/vue3/src/locales/id.json
index b954b74b1..c668b7aa9 100644
--- a/vue3/src/locales/id.json
+++ b/vue3/src/locales/id.json
@@ -308,6 +308,7 @@
"Social_Authentication": "",
"Sort_by_new": "Urutkan berdasarkan baru",
"Space": "",
+ "SpaceName": "",
"Starting_Day": "",
"StartsWith": "",
"StartsWithHelp": "",
diff --git a/vue3/src/locales/is.json b/vue3/src/locales/is.json
index 7a231b6b8..5e64e3bfe 100644
--- a/vue3/src/locales/is.json
+++ b/vue3/src/locales/is.json
@@ -362,6 +362,7 @@
"Social_Authentication": "",
"Sort_by_new": "",
"Space": "",
+ "SpaceName": "",
"Space_Cosmetic_Settings": "",
"Split_All_Steps": "",
"StartDate": "",
diff --git a/vue3/src/locales/it.json b/vue3/src/locales/it.json
index 7e3f57690..bab4d277c 100644
--- a/vue3/src/locales/it.json
+++ b/vue3/src/locales/it.json
@@ -507,6 +507,7 @@
"SpaceMemberHelp": "Aggiungi utenti al tuo spazio creando un collegamento di invito e inviandolo alla persona che desideri aggiungere.",
"SpaceMembers": "Membri dello spazio",
"SpaceMembersHelp": "Utenti e relativi permessi in uno spazio. ",
+ "SpaceName": "",
"SpaceSettings": "Impostazioni spazio",
"Space_Cosmetic_Settings": "Alcune impostazioni cosmetiche possono essere modificate dagli amministratori dell'istanza e sovrascriveranno le impostazioni client per quell'istanza.",
"Split": "Dividi",
diff --git a/vue3/src/locales/lt.json b/vue3/src/locales/lt.json
index b41a11d68..9e23254a0 100644
--- a/vue3/src/locales/lt.json
+++ b/vue3/src/locales/lt.json
@@ -336,6 +336,7 @@
"Social_Authentication": "",
"Sort_by_new": "Rūšiuoti pagal naujumą",
"Space": "",
+ "SpaceName": "",
"Split_All_Steps": "",
"StartDate": "",
"Starting_Day": "",
diff --git a/vue3/src/locales/lv.json b/vue3/src/locales/lv.json
index f9067c460..8e99f5adb 100644
--- a/vue3/src/locales/lv.json
+++ b/vue3/src/locales/lv.json
@@ -364,6 +364,7 @@
"Social_Authentication": "",
"Sort_by_new": "",
"Space": "",
+ "SpaceName": "",
"Space_Cosmetic_Settings": "",
"Split_All_Steps": "",
"StartDate": "",
diff --git a/vue3/src/locales/nb_NO.json b/vue3/src/locales/nb_NO.json
index 47837cf43..e798e7c4b 100644
--- a/vue3/src/locales/nb_NO.json
+++ b/vue3/src/locales/nb_NO.json
@@ -346,6 +346,7 @@
"Social_Authentication": "",
"Sort_by_new": "Sorter etter nyest",
"Space": "",
+ "SpaceName": "",
"Split_All_Steps": "",
"StartDate": "Startdato",
"Starting_Day": "Dag uken skal state på",
diff --git a/vue3/src/locales/nl.json b/vue3/src/locales/nl.json
index e0cb32167..f0108c4d0 100644
--- a/vue3/src/locales/nl.json
+++ b/vue3/src/locales/nl.json
@@ -508,6 +508,7 @@
"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",
"SpaceMembersHelp": "Gebruikers en hun rechten in een ruimte. ",
+ "SpaceName": "",
"SpaceSettings": "Ruimte-instellingen",
"Space_Cosmetic_Settings": "Sommige weergave instellingen kunnen worden geforceerd door de administrator van de 'Ruimte' en zullen de persoonlijke instellingen voor die 'Ruimte' overschrijven.",
"Split": "Splitsen",
diff --git a/vue3/src/locales/pl.json b/vue3/src/locales/pl.json
index e150db670..071a088dc 100644
--- a/vue3/src/locales/pl.json
+++ b/vue3/src/locales/pl.json
@@ -390,6 +390,7 @@
"Social_Authentication": "Uwierzytelnianie społecznościowe",
"Sort_by_new": "Sortuj według nowych",
"Space": "",
+ "SpaceName": "",
"Space_Cosmetic_Settings": "Administratorzy przestrzeni mogą zmienić niektóre ustawienia kosmetyczne, które zastąpią ustawienia klienta dla tej przestrzeni.",
"Split_All_Steps": "Traktuj każdy wiersz jako osobne kroki.",
"StartDate": "Data początkowa",
diff --git a/vue3/src/locales/pt.json b/vue3/src/locales/pt.json
index 4d00b0899..75b2028c0 100644
--- a/vue3/src/locales/pt.json
+++ b/vue3/src/locales/pt.json
@@ -297,6 +297,7 @@
"Size": "Tamanho",
"Sort_by_new": "Ordenar por mais recente",
"Space": "",
+ "SpaceName": "",
"StartDate": "Data de início",
"Starting_Day": "Dia de início da semana",
"StartsWith": "",
diff --git a/vue3/src/locales/pt_BR.json b/vue3/src/locales/pt_BR.json
index 9ec300e33..d295c1c6c 100644
--- a/vue3/src/locales/pt_BR.json
+++ b/vue3/src/locales/pt_BR.json
@@ -438,6 +438,7 @@
"Social_Authentication": "Autenticação social",
"Sort_by_new": "Ordenar por novos",
"Space": "",
+ "SpaceName": "",
"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.",
"Split_All_Steps": "Divida todas as linhas em etapas separadas.",
"StartDate": "Data Início",
diff --git a/vue3/src/locales/ro.json b/vue3/src/locales/ro.json
index 5dc00e700..50748eab6 100644
--- a/vue3/src/locales/ro.json
+++ b/vue3/src/locales/ro.json
@@ -320,6 +320,7 @@
"Social_Authentication": "Autentificare socială",
"Sort_by_new": "Sortare după nou",
"Space": "",
+ "SpaceName": "",
"Split_All_Steps": "Împărțiți toate rândurile în pași separați.",
"Starting_Day": "Ziua de început a săptămânii",
"StartsWith": "",
diff --git a/vue3/src/locales/ru.json b/vue3/src/locales/ru.json
index f83b5ffd9..4ddeff38d 100644
--- a/vue3/src/locales/ru.json
+++ b/vue3/src/locales/ru.json
@@ -505,6 +505,7 @@
"SpaceMemberHelp": "Для добавления пользователей создайте пригласительную ссылку и передайте её человеку, которого хотите пригласить.",
"SpaceMembers": "Участники пространства",
"SpaceMembersHelp": "Пользователи и их права доступа в пространстве. ",
+ "SpaceName": "",
"SpaceSettings": "Настройки пространства",
"Space_Cosmetic_Settings": "Администраторы пространства могут менять некоторые визуальные настройки, которые будут переопределять настройки клиента для данного пространства.",
"Split": "Разделить",
diff --git a/vue3/src/locales/sl.json b/vue3/src/locales/sl.json
index 91e841edd..bb1299c80 100644
--- a/vue3/src/locales/sl.json
+++ b/vue3/src/locales/sl.json
@@ -507,6 +507,7 @@
"SpaceMemberHelp": "Dodajte uporabnike v svoj prostor tako, da ustvarite povezavo za povabilo in jo pošljete osebi, ki jo želite dodati.",
"SpaceMembers": "Člani prostora",
"SpaceMembersHelp": "Uporabniki in njihova dovoljenja v prostoru. ",
+ "SpaceName": "",
"SpaceSettings": "Nastavitve prostora",
"Space_Cosmetic_Settings": "Nekatere kozmetične nastavitve lahko spremenijo skrbniki prostora in bodo preglasile nastavitve odjemalca za ta prostor.",
"Split": "Razdelitev",
diff --git a/vue3/src/locales/sv.json b/vue3/src/locales/sv.json
index 4ef087992..e5a3e3492 100644
--- a/vue3/src/locales/sv.json
+++ b/vue3/src/locales/sv.json
@@ -401,6 +401,7 @@
"Social_Authentication": "Social autentisering",
"Sort_by_new": "Sortera efter ny",
"Space": "",
+ "SpaceName": "",
"Space_Cosmetic_Settings": "Vissa kosmetiska inställningar kan ändras av hushålls-administratörer och skriver över klientinställningar för det hushållet.",
"Split_All_Steps": "Dela upp alla rader i separata steg.",
"StartDate": "Startdatum",
diff --git a/vue3/src/locales/tr.json b/vue3/src/locales/tr.json
index 21b70179f..cb0e8c324 100644
--- a/vue3/src/locales/tr.json
+++ b/vue3/src/locales/tr.json
@@ -364,6 +364,7 @@
"Social_Authentication": "Sosyal Kimlik Doğrulama",
"Sort_by_new": "Yeniye göre sırala",
"Space": "",
+ "SpaceName": "",
"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.",
"Split_All_Steps": "Tüm satırları ayrı adımlara bölün.",
"StartDate": "Başlangıç Tarihi",
diff --git a/vue3/src/locales/uk.json b/vue3/src/locales/uk.json
index c5bbd47ca..af3e482a0 100644
--- a/vue3/src/locales/uk.json
+++ b/vue3/src/locales/uk.json
@@ -321,6 +321,7 @@
"Size": "Розмір",
"Sort_by_new": "Сортувати за новими",
"Space": "",
+ "SpaceName": "",
"StartDate": "Початкова дата",
"Starting_Day": "Початковий день тижня",
"StartsWith": "",
diff --git a/vue3/src/locales/zh_Hans.json b/vue3/src/locales/zh_Hans.json
index bf0a515fb..70b2a8398 100644
--- a/vue3/src/locales/zh_Hans.json
+++ b/vue3/src/locales/zh_Hans.json
@@ -364,6 +364,7 @@
"Social_Authentication": "社交认证",
"Sort_by_new": "按新旧排序",
"Space": "",
+ "SpaceName": "",
"Space_Cosmetic_Settings": "空间管理员可以更改某些装饰设置,并将覆盖该空间的客户端设置。",
"Split_All_Steps": "将所有行拆分为单独的步骤。",
"StartDate": "开始日期",
diff --git a/vue3/src/locales/zh_Hant.json b/vue3/src/locales/zh_Hant.json
index ade07771a..a3e68c5dc 100644
--- a/vue3/src/locales/zh_Hant.json
+++ b/vue3/src/locales/zh_Hant.json
@@ -506,6 +506,7 @@
"SpaceMemberHelp": "透過建立邀請連結並發送給您要新增的人來將使用者新增到您的空間。",
"SpaceMembers": "空間成員",
"SpaceMembersHelp": "空間中的使用者及其權限。 ",
+ "SpaceName": "",
"SpaceSettings": "空間設定",
"Space_Cosmetic_Settings": "空間管理員可以更改某些裝飾設置,並將覆蓋該空間的客戶端設置。",
"Split": "分割",
diff --git a/vue3/src/openapi/models/PatchedSpace.ts b/vue3/src/openapi/models/PatchedSpace.ts
index 8d9f773da..161257d7e 100644
--- a/vue3/src/openapi/models/PatchedSpace.ts
+++ b/vue3/src/openapi/models/PatchedSpace.ts
@@ -248,6 +248,12 @@ export interface PatchedSpace {
* @memberof PatchedSpace
*/
aiDefaultProvider?: AiProvider;
+ /**
+ *
+ * @type {boolean}
+ * @memberof PatchedSpace
+ */
+ spaceSetupCompleted?: boolean;
}
/**
@@ -299,6 +305,7 @@ export function PatchedSpaceFromJSONTyped(json: any, ignoreDiscriminator: boolea
'aiMonthlyCreditsUsed': json['ai_monthly_credits_used'] == null ? undefined : json['ai_monthly_credits_used'],
'aiEnabled': json['ai_enabled'] == null ? undefined : json['ai_enabled'],
'aiDefaultProvider': json['ai_default_provider'] == null ? undefined : AiProviderFromJSON(json['ai_default_provider']),
+ 'spaceSetupCompleted': json['space_setup_completed'] == null ? undefined : json['space_setup_completed'],
};
}
@@ -329,6 +336,7 @@ export function PatchedSpaceToJSON(value?: Omit {
api.apiRecipeList({pageSize: 1}).then((r) => {
totalRecipes.value = r.count
})
+
+ if (!useUserPreferenceStore().activeSpace.spaceSetupCompleted) {
+ router.push({name: 'WelcomePage'})
+ }
})
diff --git a/vue3/src/pages/WelcomePage.vue b/vue3/src/pages/WelcomePage.vue
new file mode 100644
index 000000000..6437d9cc7
--- /dev/null
+++ b/vue3/src/pages/WelcomePage.vue
@@ -0,0 +1,54 @@
+
+
+
+ Welcome
+
+ Welcome to Tandoor
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file