import { ViewMode } from '@ibiz-template/runtime';
import { ViewPortletModel } from '@ibiz-template/model';
import { defineComponent, h } from 'vue';
import './view-portlet.scss';
import { useNamespace } from '@ibiz-template/vue-util';
import { ViewNeuron, ViewPortletController } from '@ibiz-template/controller';

export const ViewPortlet = defineComponent({
  name: 'ViewPortlet',
  props: {
    modelData: {
      type: ViewPortletModel,
      required: true,
    },
    controller: {
      type: ViewPortletController,
      required: true,
    },
  },
  setup(props) {
    const ns = useNamespace('view-portlet');

    const onNeuronInit = (n: ViewNeuron) => {
      props.controller.setViewNeuron(n);
    };
    return { ns, onNeuronInit };
  },
  render() {
    const c = this.controller;
    const classArr: string[] = [
      this.ns.b(),
      this.ns.m(this.modelData.modelClass),
    ];
    return (
      <portlet-layout controller={this.controller} class={classArr}>
        {h('ViewShell', {
          attrs: {
            context: c.viewContext,
            params: c.params,
            modal: { mode: ViewMode.EMBED },
            modelPath: c.model.embedView.source.modelPath,
          },
          on: {
            neuronInit: this.onNeuronInit,
          },
          key: c.model.embedView.codeName,
        })}
      </portlet-layout>
    );
  },
});