@cardinali-studio/adminkit 2.1.0-rc.0 → 2.1.0-rc.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
|
@@ -233,12 +233,11 @@ export function PageEditor({ page, onChange, onRefresh, pristine, pickMedia, pic
|
|
|
233
233
|
});
|
|
234
234
|
return () => { alive = false; };
|
|
235
235
|
}, [page.slug, showBody, pristine, loadedFor, translationActive]);
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
}
|
|
236
|
+
/* La lingua secondaria nasce ereditando la pagina predefinita. Non sostituire mai
|
|
237
|
+
l'editor con una schermata vuota mentre si legge la sibling: oltre a sembrare una
|
|
238
|
+
perdita di contenuto, in caso di errore non lasciava nulla da cui ripartire. */
|
|
239
|
+
const translationLoading = translationActive && translationState === "loading" && !translation;
|
|
240
|
+
const translationFailed = translationActive && translationState === "error" && !translation;
|
|
242
241
|
const shownPage = translationActive && translation
|
|
243
242
|
? { ...page, ...translation.page, ...(showBody ? { body: translation.body ?? "" } : {}) }
|
|
244
243
|
: page;
|
|
@@ -262,10 +261,15 @@ export function PageEditor({ page, onChange, onRefresh, pristine, pickMedia, pic
|
|
|
262
261
|
},
|
|
263
262
|
});
|
|
264
263
|
};
|
|
264
|
+
/* Nella lingua predefinita il titolo vive nella testata, insieme a slug e visibilità. In una
|
|
265
|
+
traduzione quei controlli sono correttamente bloccati perché appartengono alla pagina base,
|
|
266
|
+
ma `title` può essere stato marcato traducibile nello schema: allora deve riapparire nel
|
|
267
|
+
form, altrimenti sarebbe dichiarabile ma impossibile da modificare. */
|
|
265
268
|
const commonOmissions = useMemo(() => [
|
|
266
|
-
|
|
269
|
+
...(translationActive ? [] : ["title"]),
|
|
270
|
+
"published", "inMenu",
|
|
267
271
|
"seoTitle", "seoDescription", "ogTitle", "ogDescription", "ogImage",
|
|
268
|
-
], []);
|
|
272
|
+
], [translationActive]);
|
|
269
273
|
/* Come la gallery: una pagina portfolio È la sua selezione di lavori, quindi la schermata
|
|
270
274
|
mostra quella e basta. Il `SchemaForm` generico qui elencava anche «Foto», «Edizioni»,
|
|
271
275
|
«Ritratto» e «Riconoscimenti» — campi di altri tipi di pagina, che compaiono perché il
|
|
@@ -297,5 +301,5 @@ export function PageEditor({ page, onChange, onRefresh, pristine, pickMedia, pic
|
|
|
297
301
|
}
|
|
298
302
|
return (_jsxs("div", { className: "ed", children: [translationActive && (_jsx("p", { className: "pe-translation-note", children: page.translations?.[activeLanguage]?.exists || page._translations?.[activeLanguage]
|
|
299
303
|
? `Stai modificando ${activeLanguage.toUpperCase()}. I campi non traducibili restano visibili e vengono copiati dalla lingua predefinita al salvataggio.`
|
|
300
|
-
: `${activeLanguage.toUpperCase()} è uguale all’italiano finché non modifichi e salvi una traduzione.` })), _jsx(SchemaForm, { shape: definition?.shape ?? {}, value: shownPage, omit: commonOmissions, onChange: (next) => changeShown({ ...next, slug: page.slug }), pickMedia: pickMedia, pickMediaFiles: pickMediaFiles, translationReadOnly: translationActive }), showBody && (_jsxs("fieldset", { className: "ak-group", children: [_jsx("legend", { className: "ak-legend", children: "testo della pagina" }), bodyState === "loading" && _jsx("p", { className: "ak-hint", children: "Carico\u2026" }), bodyState === "error" && _jsx("p", { className: "ak-error", children: "Non sono riuscito a caricare il testo." }), _jsx("textarea", { className: "ak-input ak-textarea", rows: 12, value: typeof shownPage.body === "string" ? shownPage.body : "", onChange: (event) => changeShown({ ...shownPage, body: event.target.value }) })] }))] }));
|
|
304
|
+
: `${activeLanguage.toUpperCase()} è uguale all’italiano finché non modifichi e salvi una traduzione.` })), translationLoading && (_jsx("p", { className: "ak-hint", children: "Carico la traduzione: i contenuti italiani restano visibili nel frattempo." })), translationFailed && (_jsx("p", { className: "pe-load-error", children: "Non sono riuscito a caricare la traduzione. I contenuti italiani restano visibili: torna a IT e riprova EN." })), _jsx(SchemaForm, { shape: definition?.shape ?? {}, value: shownPage, omit: commonOmissions, onChange: (next) => changeShown({ ...next, slug: page.slug }), pickMedia: pickMedia, pickMediaFiles: pickMediaFiles, translationReadOnly: translationActive }), showBody && (_jsxs("fieldset", { className: "ak-group", children: [_jsx("legend", { className: "ak-legend", children: "testo della pagina" }), bodyState === "loading" && _jsx("p", { className: "ak-hint", children: "Carico\u2026" }), bodyState === "error" && _jsx("p", { className: "ak-error", children: "Non sono riuscito a caricare il testo." }), _jsx("textarea", { className: "ak-input ak-textarea", rows: 12, value: typeof shownPage.body === "string" ? shownPage.body : "", onChange: (event) => changeShown({ ...shownPage, body: event.target.value }) })] }))] }));
|
|
301
305
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@cardinali-studio/adminkit",
|
|
3
|
-
"version": "2.1.0-rc.
|
|
3
|
+
"version": "2.1.0-rc.2",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"description": "Motore riusabile di un pannello di amministrazione per siti Hugo su Cloudflare Pages: codec del front matter guidato dallo schema, form React, libreria media su R2. NIENTE di specifico di un sito qui dentro.",
|
|
6
6
|
"license": "UNLICENSED",
|