diff --git a/ui/src/lib/components/Onboarding.svelte b/ui/src/lib/components/Onboarding.svelte new file mode 100644 index 0000000..80d6859 --- /dev/null +++ b/ui/src/lib/components/Onboarding.svelte @@ -0,0 +1,94 @@ + + + +

+ {$t('common.welcome.start')}{$t('common.welcome.end')} +

+ + + +

+ {$t('onboarding.no-sale.title')} +

+

+ {@html $t('onboarding.no-sale.description', {"happyDomain": `happyDomain`})} +

+

+ {$t('onboarding.no-sale.buy-advice')} +

+
+
+ + +

+ {$t('onboarding.own')} +

+

+ {@html $t('onboarding.use', { + "happyDomain": `happyDomain`, + "first-step": $providers && $providers.length ? $t('onboarding.choose-configured', {"action": `${$t('onboarding.add-one')}`}) : $t('onboarding.suggest-provider') + })} +

+ {#if $providers && $providers.length} + goto(`/providers/${event.detail._id}/domains`)} + on:new-provider={() => goto(`/providers/new`)} + /> + {:else} +
+ goto(`/providers/new/${event.detail.ptype}`)} + /> +
+ {/if} +
+
+
+ + + + {$t('onboarding.questions.hosting.q')}
+
+ {$t('onboarding.questions.hosting.a')} +
+
+
+ + + + + {@html $t('onboarding.questions.secondary.q', {"happyDomain": `happyDomain`})} + +
+
+ {$t('onboarding.questions.secondary.a')} +
+
+
+
diff --git a/ui/src/lib/components/providers/List.svelte b/ui/src/lib/components/providers/List.svelte index 0ad3ec8..9c5b2d4 100644 --- a/ui/src/lib/components/providers/List.svelte +++ b/ui/src/lib/components/providers/List.svelte @@ -17,7 +17,7 @@ import HListGroup from '$lib/components/ListGroup.svelte'; import type { Provider } from '$lib/model/provider'; import { domains } from '$lib/stores/domains'; - import { providers, providersSpecs, refreshProviders } from '$lib/stores/providers'; + import { providers, providersSpecs, refreshProviders, refreshProvidersSpecs } from '$lib/stores/providers'; import { t } from '$lib/translations'; const dispatch = createEventDispatcher(); @@ -28,6 +28,8 @@ export let selectedProvider: Provider|null = null; export let items: Array; + if (!$providersSpecs) refreshProvidersSpecs(); + let domain_in_providers: Record = {}; $: { if ($domains && $providers) { diff --git a/ui/src/lib/locales/en.json b/ui/src/lib/locales/en.json index 7061087..22ee0ce 100644 --- a/ui/src/lib/locales/en.json +++ b/ui/src/lib/locales/en.json @@ -184,12 +184,12 @@ }, "onboarding": { "add-one": "add a new one", - "choose-configured": "choose between already configured providers or {{0}}:", + "choose-configured": "choose between already configured providers or {{action}}:", "suggest-provider": "choose your provider:", "use": "Use {{happyDomain}} as a remplacement interface to your usual domain name provider. It'll still rely on your provider's infrastructure, you'll just take benefit from our simple interface. As a first step, {{first-step}}", "no-sale": { "title": "I don't own any domain", - "description": "{{0}} does not sell domain yet. To start using our interface, you need to buy a domain from one of our supported provider", + "description": "{{happyDomain}} does not sell domain yet. To start using our interface, you need to buy a domain from one of our supported provider", "buy-advice": "We'll provide some guidance in a near future on how to easily buy a domain name. So stay tune and get in touch with us if you'll help us to build a comprehensive guide." }, "own": "I already own a domain", @@ -199,7 +199,7 @@ "a": "We'll provide such feature in a near future, as it's on our manifest. We choose to focus first on spreading the word that domain names are accessibles to everyone through this sweet interface, before targeting privacy, censorship, …" }, "secondary": { - "q": "I've my own infrastructure, can I use {{0}} as secondary authoritative server?", + "q": "I've my own infrastructure, can I use {{happyDomain}} as secondary authoritative server?", "a": "We'll provide such feature in a near future, as soon as our name server infrastructure is on." } } diff --git a/ui/src/lib/locales/fr.json b/ui/src/lib/locales/fr.json index 738a1db..1e29170 100644 --- a/ui/src/lib/locales/fr.json +++ b/ui/src/lib/locales/fr.json @@ -186,22 +186,22 @@ }, "onboarding": { "add-one": "ajouter un domaine", - "choose-configured": "choisir entre les fournisseurs déjà configurés ou {{0}} :", + "choose-configured": "choisir entre les fournisseurs déjà configurés ou {{action}} :", "suggest-source": "choisir votre fournisseur", "use": "Utilisez {{happyDomain}} comme interface de remplacement de votre fournisseur de noms de domaine habituel. Il continuera à s'appuyer sur l'infrastructure de votre fournisseur, vous n'aurez qu'à profiter de notre interface simple. Dans un premier temps, {{first-step}}", "no-sale": { "title": "Je ne possède aucun domaine", - "description": "{{0}} ne fournit pas encore de domaine. Pour commencer à utiliser notre interface, vous devez vous procurer un domaine auprès de l'un des fournisseurs répertoriés", + "description": "{{happyDomain}} ne fournit pas encore de domaine. Pour commencer à utiliser notre interface, vous devez vous procurer un domaine auprès de l'un des fournisseurs répertoriés", "buy-advice": "Nous vous donnerons prochainement des conseils sur la manière de se procurer facilement un nom de domaine. Restez donc à l'écoute et contactez-nous si vous souhaitez nous aider à élaborer un guide complet." }, "own": "Je dispose déjà d'un domaine", "questions": { "hosting": { "q": "Je ne veux plus dépendre de mon fournisseur d'hébergement de nom de domaine. Puis-je héberger mon nom de domaine sur votre infrastructure", - "a": "Nous fournirons cette information dans un avenir proche, car elle figure sur notre manifeste. Nous avons choisi de faire passer le message que les noms de domaine sont accessibles à tous grâce à cette interface conviviale, avant de nous attaquer à la protection de la vie privée, à la censure, ..." + "a": "Nous fournirons cette information dans un avenir proche, car elle figure sur notre manifeste. Nous avons choisi de faire passer le message que les noms de domaine sont accessibles à tous grâce à cette interface conviviale, avant de nous attaquer à la protection de la vie privée, à la censure, ..." }, "secondary": { - "q": "J'ai ma propre infrastructure, puis-je utiliser {{0}} comme serveur secondaire faisant autorité ?", + "q": "J'ai ma propre infrastructure, puis-je utiliser {{happyDomain}} comme serveur secondaire faisant autorité ?", "a": "Nous proposerons cette fonctionnalité dans un proche avenir, dès que notre infrastructure de serveurs de noms sera en service." } } diff --git a/ui/src/routes/+page.svelte b/ui/src/routes/+page.svelte index 131e73c..7f753fd 100644 --- a/ui/src/routes/+page.svelte +++ b/ui/src/routes/+page.svelte @@ -1,5 +1,11 @@ - +{#if !$domains || $domains.length} + +{:else} + +{/if} diff --git a/ui/src/routes/+page.ts b/ui/src/routes/+page.ts index 7c423c4..eda50d9 100644 --- a/ui/src/routes/+page.ts +++ b/ui/src/routes/+page.ts @@ -2,6 +2,7 @@ import { redirect } from '@sveltejs/kit'; import type { Load } from '@sveltejs/kit'; import { get_store_value } from 'svelte/internal'; +import { refreshDomains } from '$lib/stores/domains'; import { userSession } from '$lib/stores/usersession'; import { config as tsConfig, locale } from '$lib/translations'; @@ -14,5 +15,7 @@ export const load: Load = async({ parent }) => { throw redirect(302, '/' + initLocale); } + await refreshDomains(); + return {}; } diff --git a/ui/src/routes/domains/[dn]/[[historyid]]/+layout.svelte b/ui/src/routes/domains/[dn]/[[historyid]]/+layout.svelte index 6e0b35a..42f35e7 100644 --- a/ui/src/routes/domains/[dn]/[[historyid]]/+layout.svelte +++ b/ui/src/routes/domains/[dn]/[[historyid]]/+layout.svelte @@ -199,8 +199,13 @@ deleteInProgress = true; APIDeleteDomain($domains_idx[selectedDomain].id).then( () => { - deleteInProgress = false; - goto('/domains'); + refreshDomains().then(() => { + deleteInProgress = false; + goto('/domains'); + }, (err: any) => { + deleteInProgress = false; + goto('/domains'); + }); }, (err: any) => { deleteInProgress = false; diff --git a/ui/src/routes/providers/[prvid]/domains/+page.svelte b/ui/src/routes/providers/[prvid]/domains/+page.svelte new file mode 100644 index 0000000..f23ed48 --- /dev/null +++ b/ui/src/routes/providers/[prvid]/domains/+page.svelte @@ -0,0 +1,8 @@ + + + diff --git a/ui/src/routes/providers/[prvid]/domains/+page.ts b/ui/src/routes/providers/[prvid]/domains/+page.ts new file mode 100644 index 0000000..9911408 --- /dev/null +++ b/ui/src/routes/providers/[prvid]/domains/+page.ts @@ -0,0 +1,14 @@ +import { redirect, type Load } from '@sveltejs/kit'; + +import { getProvider } from '$lib/api/provider'; + +export const load: Load = async({ params }) => { + if (params.prvid == undefined) { + throw redirect(302, '/providers/'); + } + + return { + provider: await getProvider(params.prvid), + provider_id: params.prvid, + } +}