2025-08-23 00:35:29 +01:00
|
|
|
<script lang="ts">
|
2025-11-01 15:49:29 +01:00
|
|
|
import { page } from '$app/state';
|
2025-11-21 12:18:04 +01:00
|
|
|
import * as Tabs from '@cio/ui/base/tabs';
|
|
|
|
|
|
2023-05-02 23:55:26 +00:00
|
|
|
import Profile from './Profile.svelte';
|
2024-04-07 06:08:34 +01:00
|
|
|
import Billing from './Billing.svelte';
|
2023-08-03 03:29:30 +01:00
|
|
|
import { goto } from '$app/navigation';
|
2025-11-21 12:18:04 +01:00
|
|
|
import OrgSettings from './OrgSettings.svelte';
|
2023-09-26 09:01:53 +00:00
|
|
|
import Integrations from './Integrations.svelte';
|
2025-11-21 12:18:04 +01:00
|
|
|
import LandingpageSettings from './LandingpageSettings.svelte';
|
|
|
|
|
// import Account from './Account.svelte';
|
|
|
|
|
|
|
|
|
|
import { isOrgAdmin } from '$lib/utils/store/org';
|
2024-04-19 05:45:48 +01:00
|
|
|
import { t } from '$lib/utils/functions/translations';
|
2023-08-03 03:29:30 +01:00
|
|
|
|
2025-08-23 00:35:29 +01:00
|
|
|
interface TabItem {
|
|
|
|
|
key: number;
|
|
|
|
|
label: string;
|
|
|
|
|
tabKey: string;
|
|
|
|
|
href: string;
|
|
|
|
|
disabled: boolean;
|
|
|
|
|
}
|
|
|
|
|
|
2025-11-01 15:49:29 +01:00
|
|
|
let query = $derived(new URLSearchParams(page.url.search));
|
|
|
|
|
let tabKey = $derived(query.get('tab') || '');
|
2023-08-03 03:29:30 +01:00
|
|
|
|
2025-11-01 15:49:29 +01:00
|
|
|
let tabs: TabItem[] = $derived([
|
|
|
|
|
{
|
|
|
|
|
key: 0,
|
|
|
|
|
label: $t('settings.tabs.profile_tab'),
|
|
|
|
|
tabKey: '',
|
|
|
|
|
href: page.url.pathname,
|
|
|
|
|
disabled: false
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
key: 1,
|
|
|
|
|
label: $t('settings.tabs.organization_tab'),
|
|
|
|
|
tabKey: 'org',
|
|
|
|
|
href: `${page.url.pathname}?tab=org`,
|
|
|
|
|
disabled: !$isOrgAdmin
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
key: 2,
|
|
|
|
|
label: $t('settings.tabs.landing_page_tab'),
|
|
|
|
|
tabKey: 'landingpage',
|
|
|
|
|
href: `${page.url.pathname}?tab=landingpage`,
|
|
|
|
|
disabled: !$isOrgAdmin
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
key: 3,
|
|
|
|
|
label: $t('settings.tabs.billing_tab'),
|
|
|
|
|
tabKey: 'billing',
|
|
|
|
|
href: `${page.url.pathname}?tab=billing`,
|
|
|
|
|
disabled: !$isOrgAdmin
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
key: 4,
|
|
|
|
|
label: $t('settings.tabs.integrations_tab'),
|
|
|
|
|
tabKey: 'integrations',
|
|
|
|
|
href: `${page.url.pathname}?tab=integrations`,
|
|
|
|
|
disabled: false
|
|
|
|
|
}
|
|
|
|
|
]);
|
2023-08-03 03:29:30 +01:00
|
|
|
|
2025-11-21 12:18:04 +01:00
|
|
|
function onTabChange(value: string) {
|
|
|
|
|
const tab = tabs.find((t) => t.tabKey === value);
|
2023-08-03 03:29:30 +01:00
|
|
|
if (tab) {
|
2024-09-30 01:36:12 +01:00
|
|
|
goto(tab.href);
|
2023-08-03 03:29:30 +01:00
|
|
|
}
|
|
|
|
|
}
|
2023-05-02 23:55:26 +00:00
|
|
|
</script>
|
|
|
|
|
|
2025-11-21 12:18:04 +01:00
|
|
|
<Tabs.Root value={tabKey} onValueChange={onTabChange} class="w-full p-0">
|
|
|
|
|
<Tabs.List class="w-full">
|
|
|
|
|
{#each tabs as tab}
|
|
|
|
|
<Tabs.Trigger value={tab.tabKey} disabled={tab.disabled}>
|
|
|
|
|
{tab.label}
|
|
|
|
|
</Tabs.Trigger>
|
|
|
|
|
{/each}
|
|
|
|
|
</Tabs.List>
|
|
|
|
|
|
|
|
|
|
<Tabs.Content value="" class="w-full p-0">
|
|
|
|
|
<Profile />
|
|
|
|
|
</Tabs.Content>
|
|
|
|
|
|
|
|
|
|
<Tabs.Content value="org" class="w-full p-0">
|
|
|
|
|
<OrgSettings />
|
|
|
|
|
</Tabs.Content>
|
|
|
|
|
|
|
|
|
|
<Tabs.Content value="landingpage" class="w-full p-0">
|
|
|
|
|
<LandingpageSettings />
|
|
|
|
|
</Tabs.Content>
|
|
|
|
|
|
|
|
|
|
<Tabs.Content value="billing" class="w-full p-0">
|
|
|
|
|
<Billing />
|
|
|
|
|
</Tabs.Content>
|
|
|
|
|
|
|
|
|
|
<Tabs.Content value="integrations" class="w-full p-0">
|
|
|
|
|
<Integrations />
|
|
|
|
|
</Tabs.Content>
|
|
|
|
|
</Tabs.Root>
|