@swiss-ai-hub/web 0.297.2 → 0.297.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -5,7 +5,7 @@ import { setMyActiveTenant } from '@core/sdk/client'
5
5
  *
6
6
  * - **Read**: ``tenantId`` is a reactive computed derived from the route. Tenant-scoped
7
7
  * routes carry the id as ``route.params.tenant`` (``/[tenant]/...``); sysadmin admin
8
- * routes carry it as ``route.params.tenant_id`` (``/sysadmin/tenants/[tenant_id]/...``).
8
+ * routes carry it as ``route.params.tenant_id`` (``/tenants/[tenant_id]/...``).
9
9
  * Both shapes resolve to the same tenant context so composables and components that
10
10
  * depend on ``useTenant()`` work transparently in either place.
11
11
  * - **Write**: ``setTenant(id)`` navigates to the same route with the new ``tenant``
@@ -1,20 +1,27 @@
1
1
  /**
2
- * Wraps ``useLocalePath()`` to auto-inject the current tenant ID from the route.
2
+ * Wraps ``useLocalePath()`` to auto-inject the tenant segment for the
3
+ * ``/[tenant]/...`` route tree.
4
+ *
5
+ * Only the tenant-scoped ``route.params.tenant`` is injected — sysadmin routes
6
+ * carry the tenant as ``route.params.tenant_id`` but their URLs are absolute
7
+ * (e.g. ``/tenants``), so on those routes this falls back to bare ``localePath``.
8
+ * (This differs from ``useTenant().tenantId``, which intentionally resolves both
9
+ * shapes for data fetching.)
3
10
  *
4
11
  * Usage:
5
12
  * ```ts
6
13
  * const tenantPath = useTenantPath()
7
14
  * router.push(tenantPath('/service/agents'))
8
- * // → /{locale}/{tenantId}/service/agents
15
+ * // → /{locale}/{tenant}/service/agents
9
16
  * ```
10
17
  */
11
18
  export function useTenantPath() {
12
19
  const localePath = useLocalePath()
13
- const { tenantId } = useTenant()
20
+ const route = useRoute()
14
21
 
15
22
  return (path: string) => {
16
- const id = tenantId.value
17
- if (!id) return localePath(path)
18
- return localePath(`/${id}${path}`)
23
+ const tenant = route.params.tenant as string | undefined
24
+ if (!tenant) return localePath(path)
25
+ return localePath(`/${tenant}${path}`)
19
26
  }
20
27
  }
@@ -684,6 +684,7 @@ bar:
684
684
  show_notifications: Benachrichtigungen anzeigen
685
685
  process:
686
686
  title: Prozesse
687
+ no_results: Keine Prozesse gefunden
687
688
  overview:
688
689
  name: Name
689
690
  class: Klasse
@@ -759,8 +760,10 @@ memory:
759
760
  title: Erinnerungen
760
761
  graph:
761
762
  title: Wissensgraph
763
+ no_results: Keine Erinnerungen gefunden
762
764
  list:
763
765
  title: Erinnerungsliste
766
+ no_results: Keine Erinnerungen gefunden
764
767
  detail:
765
768
  title: Erinnerungsdetails
766
769
  created_at: Erstellt am
@@ -675,6 +675,7 @@ bar:
675
675
  show_notifications: Show notifications
676
676
  process:
677
677
  title: Processes
678
+ no_results: No processes found
678
679
  overview:
679
680
  name: Name
680
681
  class: Class
@@ -750,8 +751,10 @@ memory:
750
751
  title: Memories
751
752
  graph:
752
753
  title: Knowledge Graph
754
+ no_results: No memories found
753
755
  list:
754
756
  title: Memory List
757
+ no_results: No memories found
755
758
  detail:
756
759
  title: Memory Details
757
760
  created_at: Created At
@@ -683,6 +683,7 @@ bar:
683
683
  show_notifications: Afficher les notifications
684
684
  process:
685
685
  title: Processus
686
+ no_results: Aucun processus trouvé
686
687
  overview:
687
688
  name: Nom
688
689
  class: Classe
@@ -758,8 +759,10 @@ memory:
758
759
  title: Souvenirs
759
760
  graph:
760
761
  title: Graphe de connaissances
762
+ no_results: Aucun souvenir trouvé
761
763
  list:
762
764
  title: Liste des souvenirs
765
+ no_results: Aucun souvenir trouvé
763
766
  detail:
764
767
  title: Détails du souvenir
765
768
  created_at: Créé le
@@ -680,6 +680,7 @@ bar:
680
680
  show_notifications: Mostra notifiche
681
681
  process:
682
682
  title: Processi
683
+ no_results: Nessun processo trovato
683
684
  overview:
684
685
  name: Nome
685
686
  class: Classe
@@ -755,8 +756,10 @@ memory:
755
756
  title: Ricordi
756
757
  graph:
757
758
  title: Grafo della conoscenza
759
+ no_results: Nessun ricordo trovato
758
760
  list:
759
761
  title: Elenco dei ricordi
762
+ no_results: Nessun ricordo trovato
760
763
  detail:
761
764
  title: Dettagli del ricordo
762
765
  created_at: Creato il
package/package.json CHANGED
@@ -3,7 +3,7 @@
3
3
  "license": "AGPL-3.0-or-later",
4
4
  "author": "bbv Software Services AG (https://www.bbv.ch)",
5
5
  "type": "module",
6
- "version": "0.297.2",
6
+ "version": "0.297.4",
7
7
  "description": "Swiss AI Hub - Admin & Management UI (Nuxt 3 layer)",
8
8
  "main": "./nuxt.config.ts",
9
9
  "repository": {
@@ -4,7 +4,10 @@
4
4
  :loading="memoriesAreLoading"
5
5
  class="overflow-hidden"
6
6
  >
7
- <div class="flex h-full flex-col gap-2">
7
+ <div
8
+ v-if="paginatedMemories.length > 0"
9
+ class="flex h-full flex-col gap-2"
10
+ >
8
11
  <div class="flex w-full items-center gap-2">
9
12
  <IconField class="flex-1">
10
13
  <InputIcon>
@@ -41,6 +44,13 @@
41
44
  />
42
45
  </div>
43
46
  </div>
47
+
48
+ <div
49
+ v-else
50
+ class="flex items-center justify-center py-8 text-surface-500"
51
+ >
52
+ <span class="text-xl">{{ t('memory.graph.no_results') }}</span>
53
+ </div>
44
54
  </StructuralColumn>
45
55
 
46
56
  <NuxtPage :selected-memory-id="selectedMemoryId" />
@@ -3,7 +3,10 @@
3
3
  :title="t('memory.list.title')"
4
4
  :loading="memoriesAreLoading"
5
5
  >
6
- <div class="flex h-full flex-col gap-2">
6
+ <div
7
+ v-if="paginatedMemories.length > 0"
8
+ class="flex h-full flex-col gap-2"
9
+ >
7
10
  <div class="flex w-full items-center justify-between gap-2">
8
11
  <div class="flex flex-1 items-center gap-2">
9
12
  <IconField class="flex-1">
@@ -53,6 +56,13 @@
53
56
  />
54
57
  </div>
55
58
  </div>
59
+
60
+ <div
61
+ v-else
62
+ class="flex items-center justify-center py-8 text-surface-500"
63
+ >
64
+ <span class="text-xl">{{ t('memory.list.no_results') }}</span>
65
+ </div>
56
66
  </StructuralColumn>
57
67
 
58
68
  <NuxtPage :selected-memory-id="selectedMemoryId" />
@@ -4,7 +4,10 @@
4
4
  :title="t('process.title')"
5
5
  :loading="isLoading"
6
6
  >
7
- <div class="flex flex-col gap-12">
7
+ <div
8
+ v-if="groupedProcesses.length > 0"
9
+ class="flex flex-col gap-12"
10
+ >
8
11
  <div
9
12
  v-for="group in groupedProcesses"
10
13
  :key="group.processClass"
@@ -37,6 +40,12 @@
37
40
  </div>
38
41
  </div>
39
42
  </div>
43
+ <div
44
+ v-else
45
+ class="flex items-center justify-center py-8 text-surface-500"
46
+ >
47
+ <span class="text-xl">{{ t('process.no_results') }}</span>
48
+ </div>
40
49
  <ProcessCreateModal
41
50
  v-model="createModalOpen"
42
51
  :initial-class="selectedClassForCreate"
@@ -4,7 +4,10 @@
4
4
  :loading="memoriesAreLoading"
5
5
  class="overflow-hidden"
6
6
  >
7
- <div class="flex h-full flex-col gap-2">
7
+ <div
8
+ v-if="paginatedMemories.length > 0"
9
+ class="flex h-full flex-col gap-2"
10
+ >
8
11
  <div class="flex w-full items-center gap-2">
9
12
  <IconField class="flex-1">
10
13
  <InputIcon>
@@ -41,6 +44,13 @@
41
44
  />
42
45
  </div>
43
46
  </div>
47
+
48
+ <div
49
+ v-else
50
+ class="flex items-center justify-center py-8 text-surface-500"
51
+ >
52
+ <span class="text-xl">{{ t('memory.graph.no_results') }}</span>
53
+ </div>
44
54
  </StructuralColumn>
45
55
 
46
56
  <NuxtPage :selected-memory-id="selectedMemoryId" />
@@ -3,7 +3,10 @@
3
3
  :title="t('memory.list.title')"
4
4
  :loading="memoriesAreLoading"
5
5
  >
6
- <div class="flex h-full flex-col gap-2">
6
+ <div
7
+ v-if="paginatedMemories.length > 0"
8
+ class="flex h-full flex-col gap-2"
9
+ >
7
10
  <div class="flex w-full items-center justify-between gap-2">
8
11
  <div class="flex flex-1 items-center gap-2">
9
12
  <IconField class="flex-1">
@@ -53,6 +56,13 @@
53
56
  />
54
57
  </div>
55
58
  </div>
59
+
60
+ <div
61
+ v-else
62
+ class="flex items-center justify-center py-8 text-surface-500"
63
+ >
64
+ <span class="text-xl">{{ t('memory.list.no_results') }}</span>
65
+ </div>
56
66
  </StructuralColumn>
57
67
 
58
68
  <NuxtPage :selected-memory-id="selectedMemoryId" />