Skip to content

Commit 46b886a

Browse files
committed
feat(web-hosting): add modify domain modal
ref: #PUWEBPT-63 Signed-off-by: stif59100 <[email protected]>
1 parent caca8cb commit 46b886a

File tree

20 files changed

+662
-139
lines changed

20 files changed

+662
-139
lines changed

package.json

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -130,9 +130,9 @@
130130
"vite": "^5.4.18",
131131
"whatwg-fetch": "^3.6.2"
132132
},
133-
"packageManager": "[email protected]",
134133
"engines": {
135134
"node": "^22",
136135
"yarn": ">=1.21.1"
137-
}
138-
}
136+
},
137+
"packageManager": "[email protected]"
138+
}

packages/manager/apps/web-hosting/public/translations/multisite/Messages_fr_FR.json

Lines changed: 37 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -67,5 +67,41 @@
6767
"multisite_add_website_error": "Une erreur est survenue lors de l'ajout de votre site. {{ error }}",
6868
"multisite_add_website_in_progress": "Suivre les tâches en cours",
6969
"multisite_add_website_domain_info": "Le nom de domaine correspond à l'adresse de votre site",
70-
"multisite_add_website_domain_configuration": "Configuration du domaine"
70+
"multisite_add_website_domain_configuration": "Configuration du domaine",
71+
"multisite_modal_domain_configuration_modify_failure_inprogress": "La mise à jour de votre ou vos domaines a échoué car une autre opération est en cours. Veuillez réessayer ultérieurement.",
72+
"multisite_modal_domain_configuration_modify_title": "Modifier un domaine",
73+
"multisite_modal_domain_configuration_modify_step1_question": "Vous allez modifier le domaine suivant :",
74+
"multisite_modal_domain_configuration_modify_step1_domain_name_www_question": "Modifier également le sous domaine {{t0}}",
75+
"multisite_modal_domain_configuration_modify_step1_home": "Dossier racine",
76+
"multisite_modal_domain_configuration_modify_step1_cdn": "Activer le CDN",
77+
"multisite_modal_domain_configuration_modify_step2_summary": "Souhaitez-vous réellement apporter ces modifications aux domaines suivants ?",
78+
"multisite_modal_domain_configuration_modify_step2_domain_name": "Nom du domaine",
79+
"multisite_modal_domain_configuration_modify_step2_cdn": "CDN",
80+
"multisite_modal_domain_configuration_modify_step2_ssl": "SSL",
81+
"multisite_modal_domain_configuration_modify_step2_firewall": "Firewall",
82+
"multisite_modal_domain_configuration_modify_step2_cdn_stats_ACTIVE": "activé",
83+
"multisite_modal_domain_configuration_modify_step2_cdn_stats_NONE": "désactivé",
84+
"multisite_modal_domain_configuration_modify_success": "La modification du ou des domaines associé(s) à votre hébergement mutualisé va être effectuée.",
85+
"multisite_modal_domain_configuration_modify_success_progress": "La modification du ou des domaines associé(s) à votre hébergement mutualisé est en cours ...",
86+
"multisite_modal_domain_configuration_modify_success_finish": "La modification du ou des domaines associé(s) à votre hébergement mutualisé a été effectuée avec succès.",
87+
"multisite_modal_domain_configuration_modify_partial": "La modification du ou des domaines associé(s) à votre hébergement mutualisé a été prise en compte pour certains domaines, mais des erreurs sont survenues pour d'autres.",
88+
"multisite_modal_domain_configuration_modify_failure": "Une erreur est survenue lors de la modification du ou des domaines de votre hébergement mutualisé. {{ message }}",
89+
"multisite_modal_domain_configuration_modify_failure_hosting_starter": "Vous ne pouvez pas détacher votre domaine avec cette offre d'hébergement. Si vous souhaitez modifier votre domaine, veuillez commander une offre supérieure.",
90+
"multisite_modal_domain_configuration_modify_change_offer_link": "Cliquez ici pour commander.",
91+
"multisite_modal_domain_configuration_modify_myfolder": "mondossier",
92+
"multisite_modal_domain_configuration_modify_firewall": "Activer le firewall",
93+
"multisite_modal_domain_configuration_modify_information": "Pour que la configuration soit fonctionnelle, vous devrez effectuer les manipulations suivantes sur votre domaine :",
94+
"multisite_modal_domain_configuration_modify_none_options": "Aucune option",
95+
"multisite_modal_domain_configuration_modify_ownlog": "Logs séparés",
96+
"multisite_modal_domain_configuration_modify_runtime": "Moteur d'exécution",
97+
"multisite_modal_domain_configuration_modify_options_choose": "Choisissez une option",
98+
"multisite_modal_domain_configuration_cdn_help": "Activez le CDN afin d'accélérer l'accessibilité de votre site dans le monde.",
99+
"multisite_modal_domain_configuration_modify_country_ip_help": "Activez l'IP du pays pour géolocaliser les parties internationales de votre site afin d'optimiser leur référencement.",
100+
"multisite_modal_domain_configuration_modify_firewall_help": "Activez le firewall pour bénéficier d’une protection renforcée de votre site.",
101+
"multisite_modal_domain_configuration_modify_ownlog_help": "Activez cette option pour avoir des logs séparés pour votre multisite.",
102+
"multisite_modal_domain_configuration_modify_path_help": "Les caractères acceptés pour les dossiers sont les lettres, les chiffres, et les caractères -_./ Par ailleurs, il est interdit d'accéder aux dossiers parents en utilisant ..",
103+
"multisite_modal_domain_configuration_modify_countriesIp": "Ip du pays",
104+
"multisite_modal_domain_configuration_modify_countriesIp_none": "Aucune",
105+
"multisite_modal_domain_configuration_modify_ssl_help": "Activer l'option SSL pour bénéficier de l'accès à votre site en https",
106+
"multisite_modal_domain_configuration_modify_git_warning": "Si vous souhaitez modifier votre dossier racine, vous devez au préalable supprimer votre configuration Git du répertoire pour prévenir d'éventuels problèmes de suivi des modifications et de gestion des déploiements."
71107
}

packages/manager/apps/web-hosting/src/data/__mocks__/tasks.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ import { OngoingTaskStatus } from '../types/status';
33

44
export const tasksMocks: TaskDetailsType[] = [
55
{
6-
id: 474990512,
6+
id: '474990512',
77
status: OngoingTaskStatus.DOING,
88
function: 'attachedDomain/create',
99
objectId: '30533272',
@@ -13,7 +13,7 @@ export const tasksMocks: TaskDetailsType[] = [
1313
objectType: 'AttachedDomain',
1414
},
1515
{
16-
id: 474990511,
16+
id: '474990511',
1717
status: OngoingTaskStatus.DOING,
1818
doneDate: null,
1919
function: 'attachedDomain/create',

packages/manager/apps/web-hosting/src/data/__mocks__/websites.ts

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -142,7 +142,7 @@ export const websitesMocks: WebsiteType[] = [
142142

143143
export const WebHostingWebsiteMocks: WebHostingWebsiteType[] = [
144144
{
145-
id: 1,
145+
id: '1',
146146
checksum: '',
147147
currentState: {
148148
path: 'www',
@@ -164,15 +164,15 @@ export const WebHostingWebsiteMocks: WebHostingWebsiteType[] = [
164164
];
165165
export const WebHostingWebsiteDomainMocks: WebHostingWebsiteDomainType[] = [
166166
{
167-
id: 1,
167+
id: '1',
168168
checksum: '',
169169
currentState: {
170170
fqdn: 'test.site',
171171
firewall: { status: ServiceStatus.NONE },
172172
cdn: { status: ServiceStatus.ACTIVE },
173173
name: 'deuxieme site',
174174
path: 'testsuppression',
175-
websiteId: 1,
175+
websiteId: '1',
176176
},
177177
currentTasks: [],
178178
resourceStatus: ResourceStatus.READY,
@@ -182,15 +182,15 @@ export const WebHostingWebsiteDomainMocks: WebHostingWebsiteDomainType[] = [
182182
},
183183
},
184184
{
185-
id: 2,
185+
id: '2',
186186
checksum: '',
187187
currentState: {
188188
fqdn: 'www.test.site',
189189
firewall: { status: ServiceStatus.NONE },
190190
cdn: { status: ServiceStatus.ACTIVE },
191191
name: 'premier site',
192192
path: '.',
193-
websiteId: 1,
193+
websiteId: '1',
194194
},
195195
currentTasks: [],
196196
resourceStatus: ResourceStatus.READY,

packages/manager/apps/web-hosting/src/data/api/webHosting.ts

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import { fetchIcebergV2, v2, v6 } from '@ovh-ux/manager-core-api';
22

33
import {
4+
PostWebHostingAttachedDomainPayload,
45
PostWebHostingWebsitePayload,
56
PutWebHostingWebsitePayload,
67
WebHostingWebsiteDomainType,
@@ -110,7 +111,7 @@ export const putWebHostingWebsite = async (
110111
return data;
111112
};
112113

113-
export const getWebHostingWebsiteDomainQueryKey = (serviceName: string, id: number) => [
114+
export const getWebHostingWebsiteDomainQueryKey = (serviceName: string, id: string) => [
114115
'get',
115116
'webhosting',
116117
'resource',
@@ -119,7 +120,7 @@ export const getWebHostingWebsiteDomainQueryKey = (serviceName: string, id: numb
119120
id,
120121
'domain',
121122
];
122-
export const getWebHostingWebsiteDomain = async (serviceName: string, id: number) => {
123+
export const getWebHostingWebsiteDomain = async (serviceName: string, id: string) => {
123124
const { data } = await v2.get<WebHostingWebsiteDomainType[]>(
124125
`/webhosting/resource/${serviceName}/website/${id}/domain`,
125126
);
@@ -164,3 +165,14 @@ export const getWebHostingWebsiteV6 = async (serviceName: string, path?: string)
164165
const { data } = await v6.get<string[]>(url);
165166
return data;
166167
};
168+
169+
export const putAttachedDomain = async (
170+
serviceName: string,
171+
domain: string,
172+
payload: PostWebHostingAttachedDomainPayload,
173+
) => {
174+
await v6.put<PostWebHostingAttachedDomainPayload>(
175+
`/hosting/web/${serviceName}/attachedDomain/${domain}`,
176+
payload,
177+
);
178+
};

packages/manager/apps/web-hosting/src/data/hooks/managedWordpress/managedWordpressWebsites/useManagedWordpressWebsites.ts

Lines changed: 12 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,11 @@ import { useCallback, useEffect, useState } from 'react';
22

33
import { useParams } from 'react-router-dom';
44

5-
import { UseInfiniteQueryOptions, useInfiniteQuery } from '@tanstack/react-query';
5+
import {
6+
UseInfiniteQueryOptions,
7+
UseInfiniteQueryResult,
8+
useInfiniteQuery,
9+
} from '@tanstack/react-query';
610

711
import {
812
getManagedCmsResourceWebsites,
@@ -16,18 +20,8 @@ import {
1620
buildURLSearchParams,
1721
} from '@/utils';
1822

19-
type WebsitesResponse = {
20-
data: ManagedWordpressWebsites[];
21-
cursorNext?: string;
22-
};
23-
2423
type UseManagedWordpressWebsitesParams = Omit<
25-
UseInfiniteQueryOptions<
26-
WebsitesResponse,
27-
Error,
28-
ManagedWordpressWebsites[],
29-
ReturnType<typeof getManagedCmsResourceWebsitesQueryKey>
30-
>,
24+
UseInfiniteQueryOptions,
3125
'queryKey' | 'queryFn' | 'select' | 'getNextPageParam' | 'initialPageParam'
3226
> & {
3327
defaultFQDN?: string;
@@ -42,10 +36,9 @@ export const useManagedWordpressWebsites = (props: UseManagedWordpressWebsitesPa
4236
const searchParams = buildURLSearchParams({
4337
defaultFQDN,
4438
});
45-
const query = useInfiniteQuery<WebsitesResponse, Error, ManagedWordpressWebsites[]>({
39+
const query = useInfiniteQuery({
4640
...options,
4741
initialPageParam: null,
48-
4942
queryKey: getManagedCmsResourceWebsitesQueryKey(serviceName, searchParams, allPages),
5043
queryFn: ({ pageParam }) =>
5144
getManagedCmsResourceWebsites({
@@ -54,12 +47,13 @@ export const useManagedWordpressWebsites = (props: UseManagedWordpressWebsitesPa
5447
searchParams,
5548
...(allPages ? { pageSize: APIV2_MAX_PAGESIZE } : {}),
5649
}),
57-
enabled:
50+
enabled: (q) =>
5851
typeof props.enabled === 'function'
59-
? props.enabled
52+
? props.enabled(q)
6053
: typeof props.enabled !== 'boolean' || props.enabled,
61-
getNextPageParam: (lastPage) => lastPage.cursorNext,
62-
select: (data) => data?.pages.flatMap((page: WebsitesResponse) => page.data) ?? [],
54+
getNextPageParam: (lastPage: { cursorNext?: string }) => lastPage.cursorNext,
55+
select: (data) =>
56+
data?.pages.flatMap((page: UseInfiniteQueryResult<ManagedWordpressWebsites[]>) => page.data),
6357
refetchInterval: disableRefetchInterval ? false : DATAGRID_REFRESH_INTERVAL,
6458
refetchOnMount: DATAGRID_REFRESH_ON_MOUNT,
6559
});

packages/manager/apps/web-hosting/src/data/hooks/webHosting/webHostingWebsiteDomain/__tests__/useWebHostingWebsiteDomain.spec.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ describe('useWebHostingWebsiteDomain', () => {
1414
});
1515

1616
it('should return webhosting websites domains list', async () => {
17-
const { result } = renderHook(() => useWebHostingWebsiteDomain('test', 1), {
17+
const { result } = renderHook(() => useWebHostingWebsiteDomain('test', '1'), {
1818
wrapper,
1919
});
2020

@@ -24,7 +24,7 @@ describe('useWebHostingWebsiteDomain', () => {
2424
await result.current.refetch();
2525
});
2626

27-
expect(getWebHostingWebsiteDomain).toHaveBeenCalledWith('test', 1);
27+
expect(getWebHostingWebsiteDomain).toHaveBeenCalledWith('test', '1');
2828

2929
await waitFor(
3030
() => {

packages/manager/apps/web-hosting/src/data/hooks/webHosting/webHostingWebsiteDomain/webHostingWebsiteDomain.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ import {
1010
import { PostWebHostingWebsitePayload } from '@/data/types/product/webHosting';
1111
import queryClient from '@/utils/queryClient';
1212

13-
export const useWebHostingWebsiteDomain = (serviceName: string, id: number) => {
13+
export const useWebHostingWebsiteDomain = (serviceName: string, id: string) => {
1414
return useQuery({
1515
queryKey: getWebHostingWebsiteDomainQueryKey(serviceName, id),
1616
queryFn: () => getWebHostingWebsiteDomain(serviceName, id),

packages/manager/apps/web-hosting/src/data/types/product/webHosting.ts

Lines changed: 18 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -148,7 +148,7 @@ export type WebHostingType = {
148148
export type TaskDetailsType = {
149149
doneDate: string;
150150
function: string;
151-
id: number;
151+
id: string;
152152
lastUpdate: string;
153153
objectId: string;
154154
objectType: string;
@@ -157,7 +157,7 @@ export type TaskDetailsType = {
157157
};
158158

159159
export type WebHostingWebsiteType = {
160-
id: number;
160+
id: string;
161161
checksum: string;
162162
currentState?: {
163163
path: string;
@@ -181,15 +181,15 @@ export type WebHostingWebsiteType = {
181181
};
182182

183183
export type WebHostingWebsiteDomainType = {
184-
id: number;
184+
id: string;
185185
checksum: string;
186186
currentState: {
187187
fqdn: string;
188188
firewall: { status: ServiceStatus };
189189
cdn: { status: ServiceStatus };
190190
name: string;
191191
path: string;
192-
websiteId: number;
192+
websiteId: string;
193193
};
194194
currentTasks?: {
195195
id?: string;
@@ -217,6 +217,20 @@ export type PostWebHostingWebsitePayload = {
217217
};
218218
};
219219

220+
type LowercaseServiceStatus = 'active' | 'inactive' | 'none';
221+
222+
export type PostWebHostingAttachedDomainPayload = {
223+
bypassDNSConfiguration?: boolean;
224+
cdn?: LowercaseServiceStatus;
225+
domain?: string;
226+
firewall?: LowercaseServiceStatus;
227+
ipLocation?: HostingCountries;
228+
ownLog?: string;
229+
path?: string;
230+
runtimeId?: string;
231+
ssl?: boolean;
232+
};
233+
220234
export type PutWebHostingWebsitePayload = {
221235
targetSpec: {
222236
name: string;

packages/manager/apps/web-hosting/src/data/types/status.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ export enum ResourceStatus {
1111
export enum ServiceStatus {
1212
ACTIVE = 'ACTIVE',
1313
NONE = 'NONE',
14+
INACTIVE = 'INACTIVE',
1415
}
1516

1617
export enum GitStatus {

0 commit comments

Comments
 (0)