Skip to content

Commit 10f2112

Browse files
committed
fix: url alias modal when no url alias is present
1 parent e9f53c4 commit 10f2112

File tree

4 files changed

+28
-72
lines changed

4 files changed

+28
-72
lines changed

packages/core/admin/api/url-alias.ts

Lines changed: 8 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ export const useCreateUrlAlias = () => {
55
const { post } = useFetchClient();
66

77
const createUrlAlias = async (body: { id: number }, slug: string) => {
8-
return post('/webtools/url-alias/create', {
8+
return post<UrlAliasEntity>('/webtools/url-alias/create', {
99
data: {
1010
...body,
1111
contenttype: slug,
@@ -18,15 +18,13 @@ export const useCreateUrlAlias = () => {
1818

1919
export const useUpdateUrlAlias = () => {
2020
const { put } = useFetchClient();
21-
const updateUrlAliases = async (aliases: UrlAliasEntity[], slug: string) => {
22-
return Promise.all(
23-
aliases.map((alias) => put(`/webtools/url-alias/update/${alias.id}`, {
24-
data: {
25-
...alias,
26-
contenttype: slug,
27-
},
28-
})),
29-
);
21+
const updateUrlAliases = async (body: { id: number }, slug: string) => {
22+
return put<UrlAliasEntity>(`/webtools/url-alias/update/${body.id}`, {
23+
data: {
24+
...body,
25+
contenttype: slug,
26+
},
27+
});
3028
};
3129

3230
return { updateUrlAliases };

packages/core/admin/components/EditForm/index.tsx

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -19,17 +19,17 @@ import { UrlAliasEntity } from '../../types/url-aliases';
1919

2020
const EditForm = () => {
2121
const { modifiedData, onChange } = useCMEditViewDataManager();
22-
const modifiedDataUrlAliases = modifiedData.url_alias as UrlAliasEntity[];
22+
const modifiedDataUrlAliases =
23+
(modifiedData.url_alias as UrlAliasEntity[])?.length
24+
? modifiedData.url_alias as UrlAliasEntity[]
25+
: [{
26+
generated: true,
27+
}] as UrlAliasEntity[];
2328
const { formatMessage } = useIntl();
2429

2530
const updateValue = (index: number, name: string, value: string | number) => {
2631
const updatedUrlAliases = [...modifiedDataUrlAliases];
2732

28-
if (!updatedUrlAliases[index].id) {
29-
console.error('Error: id is undefined', updatedUrlAliases[index]);
30-
return;
31-
}
32-
3333
updatedUrlAliases[index] = {
3434
...updatedUrlAliases[index],
3535
[name]: value,
@@ -53,7 +53,7 @@ const EditForm = () => {
5353
size="S"
5454
>
5555
<AccordionToggle
56-
description={alias.url_path ? alias.url_path : 'URL alias not found'}
56+
description={alias.url_path ? alias.url_path : 'Initial URL alias'}
5757
>
5858
{`Alias #${index + 1}`}
5959
</AccordionToggle>

packages/core/admin/components/EditView/index.tsx

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ const EditView = () => {
2020
slug,
2121
} = useCMEditViewDataManager();
2222

23+
2324
const modifiedDataUrlAliases = modifiedData.url_alias as UrlAliasEntity[];
2425
const i18nLang = new URLSearchParams(window.location.search).get('plugins[i18n][locale]');
2526

@@ -55,15 +56,18 @@ const EditView = () => {
5556
const initialUrlAliases = initialData.url_alias as UrlAliasEntity[];
5657

5758
const onSubmit = async () => {
58-
if (initialUrlAliases?.length === 0) {
59+
if (!initialUrlAliases || initialUrlAliases?.length === 0) {
5960
// Create new URL aliases
6061
const newAliases = await Promise.all(
61-
modifiedUrlAliases.map((alias) => createUrlAlias(alias, slug)),
62+
modifiedUrlAliases.map(async (alias) => (await createUrlAlias(alias, slug)).data),
6263
);
64+
6365
onChange({ target: { name: 'url_alias', value: newAliases, type: 'array' } });
6466
} else {
6567
// Update existing URL aliases
66-
await updateUrlAliases(modifiedUrlAliases, slug);
68+
await Promise.all(
69+
modifiedUrlAliases.map((alias) => updateUrlAliases(alias, slug)),
70+
);
6771
}
6872
};
6973

@@ -76,7 +80,9 @@ const EditView = () => {
7680
})}
7781
onSubmit={onSubmit}
7882
onCancel={() => {
79-
if (initialUrlAliases?.length > 0) {
83+
if (modifiedUrlAliases?.length > 0) {
84+
onChange({ target: { name: 'url_alias', value: modifiedUrlAliases, type: 'array' } });
85+
} else if (initialUrlAliases?.length > 0) {
8086
onChange({ target: { name: 'url_alias', value: initialUrlAliases, type: 'array' } });
8187
} else {
8288
onChange({ target: { name: 'url_alias', value: null, type: 'array' } });

playground/types/generated/contentTypes.d.ts

Lines changed: 3 additions & 51 deletions
Original file line numberDiff line numberDiff line change
@@ -1026,52 +1026,6 @@ export interface ApiPrivateCategoryPrivateCategory
10261026
};
10271027
}
10281028

1029-
export interface ApiProductProduct extends Schema.CollectionType {
1030-
collectionName: 'products';
1031-
info: {
1032-
singularName: 'product';
1033-
pluralName: 'products';
1034-
displayName: 'Products';
1035-
description: '';
1036-
};
1037-
options: {
1038-
draftAndPublish: true;
1039-
};
1040-
pluginOptions: {
1041-
webtools: {
1042-
enabled: true;
1043-
};
1044-
};
1045-
attributes: {
1046-
title: Attribute.String;
1047-
addition: Attribute.String;
1048-
createdAt: Attribute.DateTime;
1049-
updatedAt: Attribute.DateTime;
1050-
publishedAt: Attribute.DateTime;
1051-
createdBy: Attribute.Relation<
1052-
'api::product.product',
1053-
'oneToOne',
1054-
'admin::user'
1055-
> &
1056-
Attribute.Private;
1057-
updatedBy: Attribute.Relation<
1058-
'api::product.product',
1059-
'oneToOne',
1060-
'admin::user'
1061-
> &
1062-
Attribute.Private;
1063-
url_alias: Attribute.Relation<
1064-
'api::product.product',
1065-
'oneToMany',
1066-
'plugin::webtools.url-alias'
1067-
> &
1068-
Attribute.Unique;
1069-
sitemap_exclude: Attribute.Boolean &
1070-
Attribute.Private &
1071-
Attribute.DefaultTo<false>;
1072-
};
1073-
}
1074-
10751029
export interface ApiTestTest extends Schema.CollectionType {
10761030
collectionName: 'tests';
10771031
info: {
@@ -1082,6 +1036,7 @@ export interface ApiTestTest extends Schema.CollectionType {
10821036
};
10831037
options: {
10841038
draftAndPublish: true;
1039+
populateCreatorFields: true;
10851040
};
10861041
pluginOptions: {
10871042
webtools: {
@@ -1111,10 +1066,8 @@ export interface ApiTestTest extends Schema.CollectionType {
11111066
createdAt: Attribute.DateTime;
11121067
updatedAt: Attribute.DateTime;
11131068
publishedAt: Attribute.DateTime;
1114-
createdBy: Attribute.Relation<'api::test.test', 'oneToOne', 'admin::user'> &
1115-
Attribute.Private;
1116-
updatedBy: Attribute.Relation<'api::test.test', 'oneToOne', 'admin::user'> &
1117-
Attribute.Private;
1069+
createdBy: Attribute.Relation<'api::test.test', 'oneToOne', 'admin::user'>;
1070+
updatedBy: Attribute.Relation<'api::test.test', 'oneToOne', 'admin::user'>;
11181071
url_alias: Attribute.Relation<
11191072
'api::test.test',
11201073
'oneToMany',
@@ -1156,7 +1109,6 @@ declare module '@strapi/types' {
11561109
'plugin::users-permissions.user': PluginUsersPermissionsUser;
11571110
'api::category.category': ApiCategoryCategory;
11581111
'api::private-category.private-category': ApiPrivateCategoryPrivateCategory;
1159-
'api::product.product': ApiProductProduct;
11601112
'api::test.test': ApiTestTest;
11611113
}
11621114
}

0 commit comments

Comments
 (0)