logologo
시작
가이드
개발
플러그인
API
홈
English
简体中文
日本語
한국어
Español
Português
Deutsch
Français
Русский
Italiano
Türkçe
Українська
Tiếng Việt
Bahasa Indonesia
ไทย
Polski
Nederlands
Čeština
العربية
עברית
हिन्दी
Svenska
시작
가이드
개발
플러그인
API
홈
logologo

소개

FlowEngine이란?
FlowEngine과 플러그인의 관계
빠른 시작
학습 로드맵

가이드

FlowModel 등록
FlowModel 생성
FlowModel 렌더링
FlowModel 이벤트 플로우 & 구성
FlowModel 영속성
FlowModel 생명주기
FlowModel 컨텍스트 시스템
반응형 메커니즘: Observable
FlowModel vs React.Component
RunJS 플러그인 확장 포인트

Definitions

ModelDefinition
FlowDefinition
EventDefinition
ActionDefinition
StepDefinition
Previous PageModelDefinition
Next PageEventDefinition
TIP

이 문서는 AI로 번역되었습니다. 부정확한 내용이 있을 경우 영어 버전을 참조하세요

#FlowDefinition

FlowDefinition은 플로우의 기본 구조와 설정을 정의하며, 플로우 엔진의 핵심 개념 중 하나입니다. 플로우의 메타 정보, 트리거 조건, 실행 단계 등을 설명합니다.

#타입 정의

interface FlowDefinitionOptions<TModel extends FlowModel = FlowModel> {
  key: string;
  title?: string;
  manual?: boolean;
  sort?: number;
  on?: FlowEvent<TModel>;
  steps: Record<string, StepDefinition<TModel>>;
  defaultParams?: Record<string, any> | ((ctx: FlowModelContext) => StepParam | Promise<StepParam>);
}

#등록 방법

class MyModel extends FlowModel {}

// 모델 클래스를 통해 플로우를 등록합니다.
MyModel.registerFlow({
  key: 'pageSettings',
  title: 'Page settings',
  manual: false,
  sort: 0,
  on: 'click',
  steps: {
    step1: {
      use: 'actionName',
      title: 'First Step'
    }
  },
  defaultParams: {
    step1: { param1: 'value1' }
  }
});

#속성 설명

#key

타입: string
필수: 예
설명: 플로우의 고유 식별자입니다.

일관된 xxxSettings 스타일로 이름을 지정하는 것을 권장합니다. 예를 들어:

  • pageSettings
  • tableSettings
  • cardSettings
  • formSettings
  • detailsSettings
  • buttonSettings
  • popupSettings
  • deleteSettings
  • datetimeSettings
  • numberSettings

이러한 명명 규칙은 식별 및 유지 관리에 용이하며, 전역적으로 통일하여 사용하는 것을 권장합니다.

예시:

key: 'pageSettings'
key: 'tableSettings'
key: 'deleteSettings'

#title

타입: string
필수: 아니요
설명: 사람이 읽을 수 있는 플로우 제목입니다.

key와 일관된 스타일로 Xxx settings와 같이 이름을 지정하는 것을 권장합니다. 예를 들어:

  • Page settings
  • Table settings
  • Card settings
  • Form settings
  • Details settings
  • Button settings
  • Popup settings
  • Delete settings
  • Datetime settings
  • Number settings

이러한 명명 규칙은 더 명확하고 이해하기 쉬워 UI 표시 및 팀 협업에 도움이 됩니다.

예시:

title: 'Page settings'
title: 'Table settings'
title: 'Delete settings'

#manual

타입: boolean
필수: 아니요
기본값: false
설명: 플로우를 수동으로만 실행할지 여부를 나타냅니다.

  • true: 플로우는 수동으로만 트리거되며, 자동으로 실행되지 않습니다.
  • false: 플로우는 자동으로 실행될 수 있습니다. (on 속성이 없을 경우 기본적으로 자동 실행됩니다.)

예시:

manual: true  // 수동으로만 실행
manual: false // 자동으로 실행 가능

#sort

타입: number
필수: 아니요
기본값: 0
설명: 플로우의 실행 순서입니다. 값이 작을수록 먼저 실행됩니다.

음수를 사용하여 여러 플로우의 실행 순서를 제어할 수 있습니다.

예시:

sort: -1  // 우선적으로 실행
sort: 0   // 기본 순서
sort: 1   // 나중에 실행

#on

타입: FlowEvent<TModel>
필수: 아니요
설명: 이 플로우가 dispatchEvent에 의해 트리거될 수 있도록 허용하는 이벤트 설정입니다.

트리거 이벤트 이름(문자열 또는 { eventName })만 선언하는 데 사용되며, 핸들러 함수는 포함하지 않습니다.

지원되는 이벤트 타입:

  • 'click' - 클릭 이벤트
  • 'submit' - 제출 이벤트
  • 'reset' - 초기화 이벤트
  • 'remove' - 삭제 이벤트
  • 'openView' - 뷰 열기 이벤트
  • 'dropdownOpen' - 드롭다운 열기 이벤트
  • 'popupScroll' - 팝업 스크롤 이벤트
  • 'search' - 검색 이벤트
  • 'customRequest' - 사용자 정의 요청 이벤트
  • 'collapseToggle' - 접기/펼치기 토글 이벤트
  • 또는 모든 사용자 정의 문자열

예시:

on: 'click'  // 클릭 시 트리거
on: 'submit' // 제출 시 트리거
on: { eventName: 'customEvent', defaultParams: { param1: 'value1' } }

#steps

타입: Record<string, StepDefinition<TModel>>
필수: 예
설명: 플로우 단계 정의입니다.

플로우에 포함된 모든 단계를 정의하며, 각 단계는 고유한 키를 가집니다.

예시:

steps: {
  step1: {
    use: 'actionName',
    title: 'First Step',
    sort: 0
  },
  step2: {
    use: 'anotherAction',
    title: 'Second Step',
    sort: 1
  }
}

#defaultParams

타입: Record<string, any> | ((ctx: FlowModelContext) => StepParam | Promise<StepParam>)
필수: 아니요
설명: 플로우 수준의 기본 파라미터입니다.

모델이 인스턴스화될 때(createModel), "현재 플로우"의 단계 파라미터에 초기값을 채웁니다. 누락된 값만 채우고 기존 값은 덮어쓰지 않습니다. 고정된 반환 형태는 { [stepKey]: params }입니다.

예시:

// 정적 기본 파라미터
defaultParams: {
  step1: { param1: 'value1', param2: 'value2' },
  step2: { param3: 'value3' }
}

// 동적 기본 파라미터
defaultParams: (ctx) => {
  return {
    step1: { 
      param1: ctx.model.uid,
      param2: new Date().toISOString()
    }
  }
}

// 비동기 기본 파라미터
defaultParams: async (ctx) => {
  const data = await fetchSomeData();
  return {
    step1: { data }
  }
}

#전체 예시

class PageModel extends FlowModel {}

PageModel.registerFlow({
  key: 'pageSettings',
  title: 'Page settings',
  manual: false,
  sort: 0,
  on: 'click',
  steps: {
    loadData: {
      use: 'loadDataAction',
      title: 'Load Data',
      sort: 0,
      preset: true
    },
    processData: {
      use: 'processDataAction', 
      title: 'Process Data',
      sort: 1,
      paramsRequired: true
    },
    saveData: {
      use: 'saveDataAction',
      title: 'Save Data', 
      sort: 2,
      hideInSettings: false
    }
  },
  defaultParams: {
    loadData: { 
      source: 'api',
      cache: true 
    },
    processData: { 
      format: 'json' 
    }
  }
});