Skip to content
Snippets Groups Projects
referenceseditor.tsx 1.82 KiB
Newer Older
import React from "react";
import { DescriptiveReference } from "../../common/graph/node";
import "./nodetypeseditor.css";
import ReferenceEntry from "./referenceentry";

type ReferencesEditorProps = {
    references: DescriptiveReference[];
    onReferencesChange: (newReferences: DescriptiveReference[]) => void;
};

function ReferencesEditor({
    references,
    onReferencesChange,
}: ReferencesEditorProps) {
    const handleReferenceDelete = (index: number) => {
        references = references.filter((ref, i: number) => i !== index);
        onReferencesChange(references);
    };

    const handleReferenceChange = (
        reference: DescriptiveReference,
        index: number
    ) => {
        references[index] = reference;
        onReferencesChange(references);
    };

    const addReference = () => {
        // Make sure no empty url exists already
        // => Button only enabled if no empty url in references

        references.push({ url: "", description: "" });
        onReferencesChange(references);
    };

    return (
        <div id="references-editor">
            {references.map(
                (reference: DescriptiveReference, index: number) => {
                    return (
                        <ReferenceEntry
                            key={index}
                            reference={reference}
                            onReferenceChange={(ref) =>
                                handleReferenceChange(ref, index)
                            }
                            onReferenceDelete={() =>
                                handleReferenceDelete(index)
                            }
            <button onClick={addReference}>Add reference</button>
        </div>
    );
}

export default ReferencesEditor;