reworked custom widget
All checks were successful
Build and Deploy / build-and-deploy (push) Successful in 39s

This commit is contained in:
2025-06-10 21:30:05 +02:00
parent 1afcd23cc0
commit 39a0224752

View File

@@ -1,28 +1,35 @@
import React from "react"; import React from "react";
class PrefixedImageControl extends React.Component { class PrefixedImageControl extends React.Component {
handleChange = async (event) => { openMediaLibrary = () => {
const file = event.target.files[0]; this.props.mediaLibrary.open({
if (!file) return; allowMultiple: false,
config: { allowMultiple: false },
// Add your prefix here controlID: this.props.forID,
value: this.props.value,
field: this.props.field,
onInsert: (files) => {
if (!files || files.length === 0) return;
const file = files[0];
const prefix = "feature-"; const prefix = "feature-";
const newFile = new File([file], prefix + file.name, { type: file.type }); // If already prefixed, don't double-prefix
const fileName = file.name.startsWith(prefix) ? file.name : prefix + file.name;
// Use Decap's media library to persist the file const newFile = new File([file], fileName, { type: file.type });
const { onChange, mediaPaths, field } = this.props; this.props.mediaLibrary.persistMedia(newFile).then((uploaded) => {
const uploaded = await this.props.mediaLibrary.persistMedia(newFile); this.props.onChange(uploaded.public_path || uploaded.url);
});
// Save the public path },
onChange(uploaded.public_path || uploaded.url); });
}; };
render() { render() {
const value = this.props.value || ""; const value = this.props.value || "";
return ( return (
<div> <div>
<input type="file" accept="image/*" onChange={this.handleChange} /> <button type="button" onClick={this.openMediaLibrary}>
{value && <img src={value} alt="" style={{ maxWidth: "200px" }} />} {value ? "Change Image" : "Add Image"}
</button>
{value && <img src={value} alt="" style={{ maxWidth: "200px", display: "block", marginTop: "1em" }} />}
</div> </div>
); );
} }
@@ -35,4 +42,8 @@ const PrefixedImageWidget = {
value ? <img src={value} alt="" style={{ maxWidth: "200px" }} /> : null, value ? <img src={value} alt="" style={{ maxWidth: "200px" }} /> : null,
}; };
window.CMS.registerWidget(PrefixedImageWidget.name, PrefixedImageWidget.controlComponent, PrefixedImageWidget.previewComponent); window.CMS.registerWidget(
PrefixedImageWidget.name,
PrefixedImageWidget.controlComponent,
PrefixedImageWidget.previewComponent
);