Form fields now reflect archetype data after selection
This commit is contained in:
@@ -197,12 +197,15 @@ export default function MelodyForm() {
|
|||||||
lastEditedBy: userName,
|
lastEditedBy: userName,
|
||||||
adminNotes,
|
adminNotes,
|
||||||
};
|
};
|
||||||
return {
|
const body = {
|
||||||
information: { ...infoWithoutNotes, totalActiveBells },
|
information: { ...infoWithoutNotes, totalActiveBells },
|
||||||
default_settings: settings,
|
default_settings: settings,
|
||||||
type, url, uid, pid,
|
type, uid, pid,
|
||||||
metadata,
|
metadata,
|
||||||
};
|
};
|
||||||
|
// Only send url if non-empty — avoids overwriting a backend-set URL with an empty string
|
||||||
|
if (url) body.url = url;
|
||||||
|
return body;
|
||||||
};
|
};
|
||||||
|
|
||||||
const uploadFiles = async (melodyId) => {
|
const uploadFiles = async (melodyId) => {
|
||||||
@@ -562,7 +565,7 @@ export default function MelodyForm() {
|
|||||||
<label className="block text-sm font-medium mb-1" style={labelStyle}>PID (Playback ID)</label>
|
<label className="block text-sm font-medium mb-1" style={labelStyle}>PID (Playback ID)</label>
|
||||||
<input type="text" value={pid} onChange={(e) => setPid(e.target.value)} placeholder="eg. builtin_festive_vesper" className={inputClass} />
|
<input type="text" value={pid} onChange={(e) => setPid(e.target.value)} placeholder="eg. builtin_festive_vesper" className={inputClass} />
|
||||||
</div>
|
</div>
|
||||||
{isEdit && url && (
|
{url && (
|
||||||
<div className="md:col-span-2">
|
<div className="md:col-span-2">
|
||||||
<label className="block text-sm font-medium mb-1" style={labelStyle}>URL (auto-set from binary upload)</label>
|
<label className="block text-sm font-medium mb-1" style={labelStyle}>URL (auto-set from binary upload)</label>
|
||||||
<input type="text" value={url} readOnly className={inputClass} style={{ opacity: 0.7 }} />
|
<input type="text" value={url} readOnly className={inputClass} style={{ opacity: 0.7 }} />
|
||||||
@@ -804,7 +807,24 @@ export default function MelodyForm() {
|
|||||||
setShowSelectBuilt(false);
|
setShowSelectBuilt(false);
|
||||||
setAssignedBinaryName(archetype.name);
|
setAssignedBinaryName(archetype.name);
|
||||||
if (!pid.trim() && archetype.pid) setPid(archetype.pid);
|
if (!pid.trim() && archetype.pid) setPid(archetype.pid);
|
||||||
if (isEdit) loadMelody();
|
if (archetype.steps != null) updateInfo("steps", archetype.steps);
|
||||||
|
if (archetype.totalNotes != null) updateInfo("totalNotes", archetype.totalNotes);
|
||||||
|
if (archetype.archetype_csv != null) updateInfo("archetype_csv", archetype.archetype_csv);
|
||||||
|
if (isEdit) {
|
||||||
|
loadMelody();
|
||||||
|
} else {
|
||||||
|
// Refresh files so binary_url and url are shown
|
||||||
|
const mid = savedMelodyId;
|
||||||
|
if (mid) {
|
||||||
|
Promise.all([
|
||||||
|
api.get(`/melodies/${mid}/files`),
|
||||||
|
api.get(`/melodies/${mid}`),
|
||||||
|
]).then(([files, m]) => {
|
||||||
|
setExistingFiles(files);
|
||||||
|
if (m.url) setUrl(m.url);
|
||||||
|
}).catch(() => {});
|
||||||
|
}
|
||||||
|
}
|
||||||
}}
|
}}
|
||||||
/>
|
/>
|
||||||
<BuildOnTheFlyModal
|
<BuildOnTheFlyModal
|
||||||
@@ -819,7 +839,23 @@ export default function MelodyForm() {
|
|||||||
setShowBuildOnTheFly(false);
|
setShowBuildOnTheFly(false);
|
||||||
setAssignedBinaryName(archetype.name);
|
setAssignedBinaryName(archetype.name);
|
||||||
if (!pid.trim() && archetype.pid) setPid(archetype.pid);
|
if (!pid.trim() && archetype.pid) setPid(archetype.pid);
|
||||||
if (isEdit) loadMelody();
|
if (archetype.steps != null) updateInfo("steps", archetype.steps);
|
||||||
|
if (archetype.totalNotes != null) updateInfo("totalNotes", archetype.totalNotes);
|
||||||
|
if (archetype.archetype_csv != null) updateInfo("archetype_csv", archetype.archetype_csv);
|
||||||
|
if (isEdit) {
|
||||||
|
loadMelody();
|
||||||
|
} else {
|
||||||
|
const mid = savedMelodyId;
|
||||||
|
if (mid) {
|
||||||
|
Promise.all([
|
||||||
|
api.get(`/melodies/${mid}/files`),
|
||||||
|
api.get(`/melodies/${mid}`),
|
||||||
|
]).then(([files, m]) => {
|
||||||
|
setExistingFiles(files);
|
||||||
|
if (m.url) setUrl(m.url);
|
||||||
|
}).catch(() => {});
|
||||||
|
}
|
||||||
|
}
|
||||||
}}
|
}}
|
||||||
/>
|
/>
|
||||||
</>
|
</>
|
||||||
|
|||||||
Reference in New Issue
Block a user