amis-editor-demo

amis 可视化编辑器示例 https://aisuda.github.io/amis-editor-demo

Stars
2.3K

amis-editor-demo

amis , https://aisuda.github.io/amis-editor-demo

React

  1. npm i
  2. npm run dev

  1. 6.7.0(2024.08.06)
  2. 6.0.0(2023.12.29)
  3. 5.6.2(2023.10.31)
  4. 5.6.1(2023.09.28) history
  5. 5.6.1(2023.09.28)
  6. 5.4.1(2023.06.09)
  7. 4.1.0-beta.28(2022.05.27)
  8. 4.0.2-beta.10(2022.02.23)
  9. 3.3.5(2021-08-12)

amis-editor

npm i amis-editor
import {Editor} from 'amis-editor';


render() {
  return (
    <Editor
      {...props}
    />
  )
}
  • value: any amis json
  • onChange: (value: any) => void
  • preview?: boolean
  • autoFocus?: boolean
  • plugins

amis

  • ./renderer/MyRenderer.tsx
  • ./editor/MyRenderer.tsx

name

name my-renderer

@Renderer({
    test: /\bmy-renderer$/,
    name: 'my-renderer'
})
export default class MyRenderer extends React.Component<MyRendererProps> {
    static defaultProps = {
        target: 'world'
    };

    render() {
        const {target} = this.props;

        return <p>Hello {target}!</p>;
    }
}
import {RendererEditor, BasicEditor} from 'amis-editor';

@RendererEditor('my-renderer', {
    name: '',
    description: '',
    // docLink: '/docs/renderers/Nav',
    type: 'my-renderer', //  scaffold 
    previewSchema: {
        // 
        type: 'my-renderer',
        target: 'demo'
    },
    scaffold: {
        // 
        type: 'my-renderer',
        target: '233'
    }
})
export default class MyRendererEditor extends BasicEditor {
    tipName = '';
    settingsSchema = {
        title: '',
        body: [
            {
                type: 'tabs',
                tabsMode: 'line',
                className: 'm-t-n-xs',
                contentClassName: 'no-border p-l-none p-r-none',
                tabs: [
                    {
                        title: '',
                        controls: [
                            {
                                name: 'target',
                                label: 'Target',
                                type: 'text'
                            }
                        ]
                    },

                    {
                        title: '',
                        controls: []
                    }
                ]
            }
        ]
    };
}

https://github.com/fex-team/amis-editor my-renderer

amis-editor deprecated

  1. registerEditorPlugin
  2. <Editor> plugins

Plugin

import {BasePlugin} from 'amis-editor';

export class MyRendererPlugin extends BasePlugin {
    rendererName = 'my-renderer';

    // 
    $schema = '/schemas/UnkownSchema.json';

    // 
    name = '';
    description = '';

    // tag tab 
    tags = ['', ''];

    // 
    icon = 'fa fa-user';

    // 
    previewSchema = {
        type: 'my-renderer',
        target: 'demo'
    };

    // 
    scaffold = {
        type: 'my-renderer',
        target: '233'
    };

    // 
    panelTitle = '';
    panelControls = [
        {
            type: 'tabs',
            tabsMode: 'line',
            className: 'm-t-n-xs',
            contentClassName: 'no-border p-l-none p-r-none',
            tabs: [
                {
                    title: '',
                    controls: [
                        {
                            name: 'target',
                            label: 'Target',
                            type: 'text'
                        }
                    ]
                },

                {
                    title: '',
                    controls: []
                }
            ]
        }
    ];
}

plugin

//  1
import {registerEditorPlugin} from 'amis-editor';

registerEditorPlugin(MyRendererPlugin);

// 2
() => <Editor plugins={[MyRendererPlugin]} />;

, npm .d.ts

export interface PluginEventListener {
    onActive?: (event: PluginEvent<ActiveEventContext>) => void;

    /**
     *  event.preventDefault() 
     */
    beforeInsert?: (event: PluginEvent<InsertEventContext>) => false | void;
    afterInsert?: (event: PluginEvent<InsertEventContext>) => void;

    /**
     * 
     */
    beforeUpdate?: (event: PluginEvent<ChangeEventContext>) => false | void;
    afterUpdate?: (event: PluginEvent<ChangeEventContext>) => void;

    /**
     * 
     */
    beforeReplace?: (event: PluginEvent<ReplaceEventContext>) => false | void;
    afterReplace?: (event: PluginEvent<ReplaceEventContext>) => void;

    /**
     * 
     */
    beforeMove?: (event: PluginEvent<MoveEventContext>) => false | void;
    aftterMove?: (event: PluginEvent<MoveEventContext>) => void;

    /**
     * 
     */
    beforeDelete?: (event: PluginEvent<BaseEventContext>) => false | void;
    afterDelete?: (event: PluginEvent<BaseEventContext>) => void;

    beforeResolveEditorInfo?: (event: PluginEvent<RendererInfoResolveEventContext>) => false | void;
    afterResolveEditorInfo?: (event: PluginEvent<RendererInfoResolveEventContext>) => void;

    beforeResolveJsonSchema?: (event: PluginEvent<RendererJSONSchemaResolveEventContext>) => false | void;
    afterResolveJsonSchema?: (event: PluginEvent<RendererJSONSchemaResolveEventContext>) => void;

    onDndAccept?: (event: PluginEvent<DragEventContext>) => false | void;

    onBuildPanels?: (event: PluginEvent<BuildPanelEventContext>) => void;

    onBuildContextMenus?: (event: PluginEvent<ContextMenuEventContext>) => void;

    onPreventClick?: (event: PluginEvent<PreventClickEventContext>) => false | void;
}

/**
 *  interface 
 */
export interface PluginInterface extends Partial<BasicRendererInfo>, Partial<BasicSubRenderInfo>, PluginEventListener {
    readonly manager: EditorManager;

    order?: number;

    /**
     *  getRendererInfo 
     */
    rendererName?: string;

    /**
     * 
     */
    panelIcon?: string;
    panelTitle?: string;
    panelControls?: Array<any>;
    panelDefinitions?: any;
    panelApi?: any;
    panelSubmitOnChange?: boolean;
    panelControlsCreator?: (context: BaseEventContext) => Array<any>;

    /**
     * 
     */
    getRendererInfo?: (context: RendererInfoResolveEventContext) => BasicRendererInfo | void;

    /**
     *  JSON Schema  uri 
     */
    buildJSONSchema?: (context: RendererJSONSchemaResolveEventContext) => void | string;

    /**
     * 
     */
    buildEditorToolbar?: (context: BaseEventContext, toolbars: Array<BasicToolbarItem>) => void;

    /**
     * 
     */
    buildEditorContextMenu?: (context: ContextMenuEventContext, menus: Array<ContextMenuItem>) => void;

    /**
     * 
     */
    buildEditorPanel?: (context: BaseEventContext, panels: Array<BasicPanelItem>) => void;

    /**
     * 
     */
    buildSubRenderers?: (
        context: RendererEventContext,
        subRenderers: Array<SubRendererInfo>,
        renderers: Array<RendererConfig>
    ) => BasicSubRenderInfo | Array<BasicSubRenderInfo> | void;
}