플러그인 설명 / 컬럼 도구개발 매뉴얼로 돌아가기

컬럼 도구 플러그인

컬럼 도구 · columnToolsPlugin

헤더 메뉴의 컬럼 표시·필터와 조건 빌더를 제공합니다. 정렬·고정·너비 맞춤은 연결된 Core API에서 설정합니다.

설치 함수: columnToolsPlugin() · 해제 이름: columnTools

설정 속성 · 기본값

필수값은 해당 입력에서 반드시 제공하는 값입니다. 조건부 필수값은 설명에 적힌 기능을 사용할 때 필요합니다. 표시가 없는 옵션은 생략할 수 있으며 기본값을 사용합니다. 빈 문자열·누락과 0·false를 혼동하지 마세요.

설정 위치와 동작
설정기본값설명
함수 인수없음columnToolsPlugin()으로 설치합니다.
options.columnMenu / column.columnMenu['columns','filter']영역과 순서를 지정합니다. columns=컬럼 표시 설정, filter=컬럼 필터. 컬럼 값이 그리드 값을 대체하며 []는 해당 헤더 메뉴를 숨깁니다. filterable:false이면 필터 영역을 제외합니다. 이전 sort 항목은 호환을 위해 허용하지만 표시하지 않습니다.
column.sortabletrue정렬 허용 여부. 정렬 실행은 Core의 설정 검사를 따릅니다.
column.filterabletruefalse인 컬럼은 필터 메뉴·조건 빌더에서 제외합니다.
permissions.view없음표시 권한이 없는 컬럼은 컬럼 관리·필터 필드 목록에서 제외합니다.
filterTree / filters없음그리드의 조건 트리 또는 컬럼별 조건 배열을 사용합니다. 조건은 원래 데이터 타입을 기준으로 비교합니다.

사용 순서

  1. 헤더의 ⋮ 또는 우클릭으로 간단한 메뉴를 엽니다. 컬럼 표시 설정 하위 창과 값 검색·전체 선택·체크 목록을 제공합니다. 검색 중 적용하면 검색 결과에서 체크한 값만 반영하며 아무 값도 선택하지 않으면 0행입니다. 초기화는 해당 컬럼 필터만 해제합니다. 체크 목록은 적재한 데이터 기준이며 200개씩 더 볼 수 있습니다. 서버 전체의 고유 값 목록을 자동 조회하지 않습니다.
  2. 컬럼 표시 설정을 누르면 표시 컬럼 관리와 같은 컬럼 검색·체크 목록이 바로 나타납니다. 체크 변경은 즉시 반영하며 마지막 표시 컬럼 숨김은 거부하고 권한이 없는 컬럼은 제외합니다. 텍스트/숫자/날짜 필터 하위 창에서 두 조건과 AND/OR를 지정할 수 있습니다. 조건 적용은 해당 컬럼의 값 목록 필터를 교체하며 다른 컬럼·전역 필터는 유지합니다. Enter로 적용, Escape로 하위 창부터 닫고 바깥 클릭으로 전체를 닫습니다.
  3. 조건 빌더에서 AND/OR와 필드·연산·값을 지정한 뒤 적용합니다. range/in 값은 쉼표로 나눕니다.

연결 API

플러그인 또는 연결된 Core API
호출동작
grid.openColumnMenu(field, anchor?)지정 헤더 컬럼의 메뉴를 엽니다.

필수값 grid.openColumnMenu 인수: field

grid.openColumns(anchor?)표시 컬럼 관리 창을 엽니다.
grid.openFilterBuilder(anchor?)평면 AND/OR 조건 빌더를 엽니다.
grid.setFilters(filters) / grid.setFilter(tree)조건을 API로 설정합니다. Core API이며 플러그인 해제 뒤에도 사용할 수 있습니다.

필수값 grid.setFilters 인수: filters

설치 · 해제 · Vue 3 수명주기

생성 시 plugins에 등록하거나, 아직 설치하지 않은 인스턴스에서 grid.install을 호출합니다. 같은 name은 중복 설치할 수 없습니다. 설정에 쓰는 데이터·함수는 아래 전체 예제 소스를 참고하세요.

grid.install(columnToolsPlugin());
grid.uninstall('columnTools'); // 플러그인 해제
// Vue 3 컴포넌트가 종료될 때
onBeforeUnmount(() => grid.destroy());

열린 도구 창·ResizeObserver·헤더 및 외부 클릭 리스너를 제거하고 설치 전의 openColumnMenu/openColumns/openFilterBuilder를 복원합니다.

관련 이벤트

  • render
  • error

이벤트 구독은 grid.on(name, (detail, grid) => {})를 사용합니다. 해제 함수 또는 grid.off로 구독을 정리하세요.

실행 예제 · 실제 원본

아래 소스는 examples/features/column-tools.js와 Vue 원본입니다. 해당 예제 경로를 기준으로 import하며, 행 데이터는 별도 파일을 함께 사용합니다.

JavaScript 전체 소스 · column-tools.js
import { ZixoGrid, columnToolsPlugin } from '../../src/index.js';
import { rows } from './column-tools.data.js';
import { createToolbar } from '../feature-controls.js';
const host = document.querySelector('#grid'),
  toolbar = document.querySelector('#toolbar'),
  report = document.querySelector('#report');
const { button, select } = createToolbar(toolbar, report);
const options = {
  rowKey: 'id',
  height: 360,
  rows: rows,
  columns: [
    { field: 'name', title: '주문', width: 240 },
    { field: 'qty', title: '수량', type: 'number', parse: Number },
    { field: 'price', title: '단가', type: 'number', parse: Number },
  ],
  plugins: [columnToolsPlugin()],
  columnMenu: ['columns', 'filter'],
};

const grid = new ZixoGrid(host, options);

window.addEventListener('pagehide', () => grid.destroy(), { once: true });
grid.on(
  'validationerror',
  (detail) => (report.textContent = detail.error.message),
);
button('컬럼 표시 설정', () => grid.openColumns());
select(
  '전체 헤더 메뉴',
  ['전체', '컬럼 표시 설정만', '필터만', '메뉴 없음'],
  (value) => {
    const choices = {
      '컬럼 표시 설정만': ['columns'],
      필터만: ['filter'],
      전체: ['columns', 'filter'],
      '메뉴 없음': [],
    };
    grid.options.columnMenu = choices[value];
    for (const column of grid.columns) delete column.columnMenu;
    grid.refresh();
  },
);
report.textContent =
  'columnMenu 배열로 헤더 메뉴에 넣을 영역과 순서를 지정합니다. columns=컬럼 표시 설정, filter=컬럼 필터이며 기본값은 전체입니다. 컬럼 배열은 그리드 배열을 대체하며 []는 메뉴를 숨깁니다. 이 예제의 전체 헤더 메뉴 선택은 주문·수량·단가의 모든 헤더에 적용합니다. 선택하면 컬럼별 columnMenu를 제거하고 그리드 기본 구성을 함께 상속합니다. 초기 선택은 전체이며 세 컬럼의 실제 메뉴와 일치합니다. 필터/정렬 상태와 API는 메뉴를 숨겨도 유지합니다. 컬럼 표시 설정은 표시 컬럼 관리와 같은 컬럼 검색·체크 목록을 하위 창으로 제공합니다. 목록의 체크박스·행 간격·색상·검색창·스크롤 스타일은 필터 값 목록과 같습니다. 체크하면 즉시 표시하고 해제하면 즉시 숨깁니다. 마지막 표시 컬럼은 숨길 수 없으며 권한이 없는 컬럼은 목록에서 제외합니다. 메뉴에는 정렬 항목을 제공하지 않습니다. 필터는 값 검색·모두 선택·체크 목록과 적용/초기화 버튼으로 구성합니다. 검색 중 적용하면 검색 결과에서 체크한 값만 반영합니다. 텍스트/숫자/날짜 필터를 누르면 두 조건을 AND/OR로 결합하는 하위 창이 열립니다. 각 적용은 해당 컬럼의 기존 필터만 교체하며 다른 컬럼·전역 조건은 유지합니다. Escape로 하위 창부터 닫고, 바깥 클릭은 전체를 닫습니다. 목록은 적재한 데이터 기준이며 200개씩 더 볼 수 있습니다. 서버 전체 데이터의 조건 조회는 조건 필터를 사용합니다.';
Vue 3 전체 소스 · vue-column-tools.vue
<script setup>
import { ref, onMounted, onBeforeUnmount } from 'vue';
import { ZixoGrid, columnToolsPlugin } from '../../src/index.js';
import { rows } from './column-tools.data.js';

// Instance and DOM belong to this component, never to window or a global ID.
const gridHost = ref(null);
const message = ref('');
const controls = ref([]);

let grid;
let alive = true;

async function run(action, value) {
  try {
    const result = await action(value);
    if (alive && result !== undefined)
      message.value =
        typeof result === 'string' ? result : JSON.stringify(result, null, 2);
  } catch (error) {
    if (alive) message.value = error.message;
  }
}

const button = (label, action) =>
  controls.value.push({ kind: 'button', label, action });
const select = (label, values, action) =>
  controls.value.push({
    kind: 'select',
    label,
    values,
    value: values[0],
    action,
  });

onMounted(() => {
  const options = {
    rowKey: 'id',
    height: 360,
    rows: rows,
    columns: [
      { field: 'name', title: '주문', width: 240 },
      { field: 'qty', title: '수량', type: 'number', parse: Number },
      { field: 'price', title: '단가', type: 'number', parse: Number },
    ],
    plugins: [columnToolsPlugin()],
    columnMenu: ['columns', 'filter'],
  };

  grid = new ZixoGrid(gridHost.value, options);

  grid.on(
    'validationerror',
    (detail) => (message.value = detail.error.message),
  );
  button('컬럼 표시 설정', () => grid.openColumns());
  select(
    '전체 헤더 메뉴',
    ['전체', '컬럼 표시 설정만', '필터만', '메뉴 없음'],
    (value) => {
      const choices = {
        '컬럼 표시 설정만': ['columns'],
        필터만: ['filter'],
        전체: ['columns', 'filter'],
        '메뉴 없음': [],
      };
      grid.options.columnMenu = choices[value];
      for (const column of grid.columns) delete column.columnMenu;
      grid.refresh();
    },
  );
  message.value =
    'columnMenu 배열로 헤더 메뉴에 넣을 영역과 순서를 지정합니다. columns=컬럼 표시 설정, filter=컬럼 필터이며 기본값은 전체입니다. 컬럼 배열은 그리드 배열을 대체하며 []는 메뉴를 숨깁니다. 이 예제의 전체 헤더 메뉴 선택은 주문·수량·단가의 모든 헤더에 적용합니다. 선택하면 컬럼별 columnMenu를 제거하고 그리드 기본 구성을 함께 상속합니다. 초기 선택은 전체이며 세 컬럼의 실제 메뉴와 일치합니다. 필터/정렬 상태와 API는 메뉴를 숨겨도 유지합니다. 컬럼 표시 설정은 표시 컬럼 관리와 같은 컬럼 검색·체크 목록을 하위 창으로 제공합니다. 목록의 체크박스·행 간격·색상·검색창·스크롤 스타일은 필터 값 목록과 같습니다. 체크하면 즉시 표시하고 해제하면 즉시 숨깁니다. 마지막 표시 컬럼은 숨길 수 없으며 권한이 없는 컬럼은 목록에서 제외합니다. 메뉴에는 정렬 항목을 제공하지 않습니다. 필터는 값 검색·모두 선택·체크 목록과 적용/초기화 버튼으로 구성합니다. 검색 중 적용하면 검색 결과에서 체크한 값만 반영합니다. 텍스트/숫자/날짜 필터를 누르면 두 조건을 AND/OR로 결합하는 하위 창이 열립니다. 각 적용은 해당 컬럼의 기존 필터만 교체하며 다른 컬럼·전역 조건은 유지합니다. Escape로 하위 창부터 닫고, 바깥 클릭은 전체를 닫습니다. 목록은 적재한 데이터 기준이며 200개씩 더 볼 수 있습니다. 서버 전체 데이터의 조건 조회는 조건 필터를 사용합니다.';
});
onBeforeUnmount(() => {
  alive = false;
  grid?.destroy(); // Cancels grid requests, removes events and releases plugins.
  grid = undefined;
});
defineExpose({ getGrid: () => grid });
</script>

<template>
  <main>
    <h1>컬럼 메뉴 · 표시 · 필터</h1>
    <div class="toolbar">
      <template v-for="(control, index) in controls" :key="index">
        <button
          v-if="control.kind === 'button'"
          type="button"
          @click="run(control.action)"
        >
          {{ control.label }}
        </button>
        <label v-else
          >{{ control.label }}
          <select
            v-model="control.value"
            :aria-label="control.label"
            @change="run(control.action, control.value)"
          >
            <option v-for="value in control.values" :key="value" :value="value">
              {{ value }}
            </option>
          </select>
        </label>
      </template>
    </div>
    <div ref="gridHost" class="vue-grid-host"></div>
    <div class="notes result" aria-live="polite">{{ message }}</div>
  </main>
</template>

제약 사항 · 주의할 동작

  • GUI 조건 빌더는 평면 AND/OR이고 최대 20개 조건을 입력합니다. 중첩 API 조건을 GUI에서 적용하면 새 평면 조건으로 대체됩니다.
  • 숫자 필터는 숫자를 입력해야 하며 마지막 표시 컬럼은 숨길 수 없습니다.
  • 미저장 변경이 있는 서버 조회의 조건 변경은 Core 계약에 따라 거부될 수 있습니다.

연결 기능 메뉴

컬럼 메뉴 · 표시 · 필터 · 컬럼 필터 · AND/OR 조건 · 정렬 · 너비 · 순서 · 높이 · 레이아웃 저장 · 복원

이 플러그인 상세 페이지 독립 열기 ↗ · 플러그인 설명 전체