Skip to content

Commit 288c8e4

Browse files
committed
Add loading skeleton for contact edit and template pages
1 parent 2c29cb5 commit 288c8e4

File tree

2 files changed

+226
-211
lines changed

2 files changed

+226
-211
lines changed

src/pages/email/administration/contacts-template/edit.jsx

Lines changed: 39 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -2,43 +2,45 @@ import { useEffect, useMemo, useCallback } from "react";
22
import { useForm } from "react-hook-form";
33
import { Layout as DashboardLayout } from "/src/layouts/index.js";
44
import CippFormPage from "/src/components/CippFormPages/CippFormPage";
5+
import CippFormSkeleton from "/src/components/CippFormPages/CippFormSkeleton";
56
import ContactFormLayout from "/src/components/CippFormPages/CippAddEditContact";
67
import { ApiGetCall } from "../../../../api/ApiCall";
78
import countryList from "/src/data/countryList.json";
89
import { useRouter } from "next/router";
910

10-
const countryLookup = new Map(
11-
countryList.map(country => [country.Name, country.Code])
12-
);
11+
const countryLookup = new Map(countryList.map((country) => [country.Name, country.Code]));
1312

1413
const EditContactTemplate = () => {
1514
const router = useRouter();
1615
const { id } = router.query;
17-
16+
1817
const contactTemplateInfo = ApiGetCall({
1918
url: `/api/ListContactTemplates?id=${id}`,
2019
queryKey: `ListContactTemplates-${id}`,
2120
waiting: !!id,
2221
});
2322

24-
const defaultFormValues = useMemo(() => ({
25-
displayName: "",
26-
firstName: "",
27-
lastName: "",
28-
email: "",
29-
hidefromGAL: false,
30-
streetAddress: "",
31-
postalCode: "",
32-
city: "",
33-
state: "",
34-
country: "",
35-
companyName: "",
36-
mobilePhone: "",
37-
businessPhone: "",
38-
jobTitle: "",
39-
website: "",
40-
mailTip: "",
41-
}), []);
23+
const defaultFormValues = useMemo(
24+
() => ({
25+
displayName: "",
26+
firstName: "",
27+
lastName: "",
28+
email: "",
29+
hidefromGAL: false,
30+
streetAddress: "",
31+
postalCode: "",
32+
city: "",
33+
state: "",
34+
country: "",
35+
companyName: "",
36+
mobilePhone: "",
37+
businessPhone: "",
38+
jobTitle: "",
39+
website: "",
40+
mailTip: "",
41+
}),
42+
[]
43+
);
4244

4345
const formControl = useForm({
4446
mode: "onChange",
@@ -52,12 +54,14 @@ const EditContactTemplate = () => {
5254
}
5355

5456
// Handle both single object (when fetching by ID) and array responses
55-
const contact = Array.isArray(contactTemplateInfo.data) ? contactTemplateInfo.data[0] : contactTemplateInfo.data;
57+
const contact = Array.isArray(contactTemplateInfo.data)
58+
? contactTemplateInfo.data[0]
59+
: contactTemplateInfo.data;
5660
const address = contact.addresses?.[0] || {};
5761
const phones = contact.phones || [];
58-
62+
5963
// Use Map for O(1) phone lookup
60-
const phoneMap = new Map(phones.map(p => [p.type, p.number]));
64+
const phoneMap = new Map(phones.map((p) => [p.type, p.number]));
6165

6266
return {
6367
ContactTemplateID: id || "",
@@ -70,9 +74,7 @@ const EditContactTemplate = () => {
7074
postalCode: address.postalCode || "",
7175
city: address.city || "",
7276
state: address.state || "",
73-
country: address.countryOrRegion
74-
? countryLookup.get(address.countryOrRegion) || ""
75-
: "",
77+
country: address.countryOrRegion ? countryLookup.get(address.countryOrRegion) || "" : "",
7678
companyName: contact.companyName || "",
7779
mobilePhone: phoneMap.get("mobile") || "",
7880
businessPhone: phoneMap.get("business") || "",
@@ -114,9 +116,11 @@ const EditContactTemplate = () => {
114116
website: values.website,
115117
mailTip: values.mailTip,
116118
};
117-
},);
118-
119-
const contactTemplate = Array.isArray(contactTemplateInfo.data) ? contactTemplateInfo.data[0] : contactTemplateInfo.data;
119+
});
120+
121+
const contactTemplate = Array.isArray(contactTemplateInfo.data)
122+
? contactTemplateInfo.data[0]
123+
: contactTemplateInfo.data;
120124

121125
return (
122126
<CippFormPage
@@ -129,10 +133,10 @@ const EditContactTemplate = () => {
129133
data={contactTemplate}
130134
customDataformatter={customDataFormatter}
131135
>
132-
<ContactFormLayout
133-
formControl={formControl}
134-
formType="edit"
135-
/>
136+
{contactTemplateInfo.isLoading && <CippFormSkeleton layout={[2, 2, 1, 2, 1, 2, 2, 2, 4]} />}
137+
{!contactTemplateInfo.isLoading && (
138+
<ContactFormLayout formControl={formControl} formType="edit" />
139+
)}
136140
</CippFormPage>
137141
);
138142
};

0 commit comments

Comments
 (0)