/
커스텀 컴포넌트 만들기

커스텀 컴포넌트 만들기

페이지 빌더를 위한 커스텀 컴포넌트를 만들기 위해서는 먼저 순수하게 Vue 컴포넌트를 만들어서 테스트를 진행한 다음 문제가 없으면 코어에 컴포넌트를 등록하면 된다. 이때, 만약 작성한 컴포넌트가 props 를 통해서 특정 데이터를 받아야 한다면 해당 데이터를 모델을 코어의 스키마로 작성하고, 컴포넌트 설정에 해당 스키마를 매핑하면 빌더에서 해당 컴포넌트에 대한 파라미터를 설정할 수 있으며, 해당 데이터는 props로 연결된다.

Vue 컴포넌트 만들기

빌더를 위한 컴포넌트 개발은 일반적인 Vue 컴포넌트 개발과 동일하게 진행하면 된다. 이때 현재의 커스텀 컴포넌트의 위치는 src/components/builder 하위이다.

일반적으로 컴포넌트 개발이 완료되어 해당 컴포넌트에 대한 테스트까지 완료되면 빌더용 컴포넌트로 등록하는데 이때 코어에서 컴포넌트를 등록할때 사용할 컴포넌트의 ID와 실제 Vue 컴포넌트의 위치를 매핑한다.

  • 컴포넌트 ID 매핑 : builder.collection.js 에
    [componentId('new-component')]: registerComponent(() => import('./newComponent'))
    와 같은 형태로 작성한다.

코어에 컴포넌트 설정 등록

일반적으로 코어에 foComponentData.json 이라는 파일명으로 컴포넌트가 선언되어 있다. src/main/resources/schema/lg/builder/foComponentDate.json 참조

기존 선언된 JSON과 동일하게 다음과 같이 componentId를 앞서 매핑한 컴포넌트 ID를 이용하여 다음과 같은 형태로 작성하여 해당 파일에 추가한다.

{ "typeId": "foComponent", "componentId": "new-componet", "thumbnail2": "", "apiUsing": [], "componentName": "새로운 컴포넌트", "componentCategory": 1900, "description": "새로운 컴포넌트", "componentPropClass": "mainProp", "childrenAcceptable": false, "acceptableComponents": "", "acceptComponentsAll": false, "thumbnail": "" "orderNo": 999 },

props 전달 스키마 설정

신규 개발 컴포넌트에 빌더에서 입력한 설정 데이터를 props를 통해서 전달 받고 싶으면 전달하고 싶은 데이터에 대한 스키마를 정의해야한다. (스키마 설정은 https://ionsdp.atlassian.net/wiki/spaces/JUS/pages/64913409 문서 참조)

만약 새로 작성한 컴포넌트에 대해서 특정 문자열을 받아서 컴포넌트의 타이틀로 이용하고 컴포넌트 유형을 받아서 컴포넌트 UI를 변경하고 싶다면 다음과 같은 순서로 작업한다.

  • title 항목을 설정할 수 할 수 있는 스키마를 newComponentPropSchema.json 으로 다음과 같이 정의

[ { "parentId": "foComponentProp", "typeId": "nodeType", "tid": "newComponentProp", "typeName": "새 컴포넌트 설정", "repositoryType": "node", "microservice": "frontoffice", "standaloneIndex": fale, "targetGroup": "foComponentProp", "propertyTypes": [ { "pid": "id", "name": "ID", "valueType": "INT", "defaultComponent": "common.presentational.Hidden", "idable": true, "idType": "hash", "indexable": true }, { "pid": "title", "name": "컴포넌트 제목", "valueType": "STRING" }, { "pid": "comType", "name": "컴포넌트 유형", "valueType": "CODE", "code": [ { "value": "type1", "label": "유형 1" }, { "value": "type2", "label": "유형 2" } ] } ] } ]
  • 컴포넌트 설정에서 componentPropClass 항목을 해당 스키마의 tid로 변경

{ "typeId": "foComponent", "componentId": "new-componet", "thumbnail2": "", "apiUsing": [], "componentName": "새로운 컴포넌트", "componentCategory": 1900, "description": "새로운 컴포넌트", "componentPropClass": "newComponentProp", "childrenAcceptable": false, "acceptableComponents": "", "acceptComponentsAll": false, "thumbnail": "" "orderNo": 999 },
  • Vue 컴포넌트 소스에서 title, comType으로 props 설정하고 해당 props을 이용하도록 소스 변경

이렇게하면 빌더에서 newComponent를 원하는 위치에 Drop하면 우측의 설정창에 title과 comType을 입력할 수 있도록 나타나고 입력한 값은 해당 컴포넌트의 props로 전달된다.