index.tsx

Overview

This file defines a React functional component SetMetaModal used to display and edit JSON metadata associated with a document within a modal dialog. It leverages Ant Design (antd) components for UI elements such as the modal and form, the Monaco Editor for a rich JSON editing experience, and integrates localization support through react-i18next. The component validates the JSON input before submission, sanitizes tooltip content to prevent XSS, and exposes callbacks to handle modal visibility and form submission.


Detailed Component Documentation

SetMetaModal Component

function SetMetaModal(props: IModalProps<any> & { initialMetaData?: IDocumentInfo['meta_fields'] }): JSX.Element

Purpose

Renders a modal dialog containing a form with a JSON editor to view and modify the metadata (meta_fields) of a document. It validates the JSON input and returns the parsed metadata on confirmation.

Props

Behavior & Lifecycle

UI Elements

Usage Example

import React, { useState } from 'react';
import { SetMetaModal } from './index';

function DocumentMetaEditor() {
  const [isModalVisible, setModalVisible] = useState(false);
  const [documentMeta, setDocumentMeta] = useState({ author: 'John Doe', tags: ['example'] });

  const handleSaveMeta = (metaJson: string) => {
    const metaObject = JSON.parse(metaJson);
    setDocumentMeta(metaObject);
    setModalVisible(false);
  };

  return (
    <>
      <button onClick={() => setModalVisible(true)}>Edit Metadata</button>
      <SetMetaModal
        visible={isModalVisible}
        hideModal={() => setModalVisible(false)}
        onOk={handleSaveMeta}
        initialMetaData={documentMeta}
      />
    </>
  );
}

Important Implementation Details


Interaction with Other System Components

This component is typically used in document management or knowledge base applications where users need to view or modify JSON metadata in a safe and user-friendly way.


Mermaid Component Diagram

componentDiagram
    component SetMetaModal {
        +visible: boolean
        +hideModal(): void
        +onOk(meta: string): void
        +initialMetaData?: object
        +handleOk(): Promise<void>
        +form: FormInstance
    }

    component Modal {
        +title: string
        +open: boolean
        +onOk(): void
        +onCancel(): void
    }

    component Form {
        +useForm(): FormInstance
        +validateFields(): Promise<object>
        +setFieldValue(name: string, value: any): void
    }

    component MonacoEditor {
        +height: number
        +defaultLanguage: string
        +theme: string
    }

    SetMetaModal --> Modal : renders
    Modal --> Form : contains
    Form --> MonacoEditor : contains Form.Item with Editor
    SetMetaModal ..> useTranslation : uses for localization
    SetMetaModal ..> DOMPurify : uses for tooltip sanitization

Summary

The index.tsx file provides a localized, validated, and secure modal component for editing JSON metadata with a rich editor interface. It is well integrated with the application's data model and UI frameworks, providing a reusable and user-friendly tool for managing document metadata.