Code Monkey home page Code Monkey logo

axui-datagrid's Introduction

npm version

axui-datagrid

demo : http://axui-datagrid.jsdev.kr

Install

npm install axui-datagrid

Run

git clone https://github.com/jsdevkr/axui-datagrid.git
cd axui-datagrid
npm i
npm start

Features

Large Data

axui-datagrid example LargeData

Frozen row / col

axui-datagrid example Frozen row,col

Multi header

axui-datagrid example Multi header

Loading

axui-datagrid example Loading

Row selector

axui-datagrid example Row selector

Inline edit

axui-datagrid example Inline edit

Foot Summary

axui-datagrid example Foot Summary

Props

data?: IData;

dataLength?: number;

columns: DataGridColumn[];

export interface IDataGridColumn extends ICol {
  colIndex?: number;
  rowIndex?: number;
  formatter?: formatterFunction | string;
  collector?: collectorFunction | string;
  editor?: editorFunction | string | { type?: string };
  hidden?: boolean;
  columns?: IDataGridColumn[];
  depth?: number;
  columnAttr?: string;
}

width: number = 400;

height: number = 400;

style?: any;

options?: DataGridOptions = defaultOptions;

status?: React.ReactNode;

defaultOptions

static defaultColumnKeys: types.DataGridColumnKeys = {
    selected: '__selected__',
    modified: '__modified__',
    deleted: '__deleted__',
    disableSelection: '__disable_selection__',
};
static defaultHeader: types.DataGridOptionHeader = {
    display: true,
    align: 'left',
    columnHeight: 24,
    columnPadding: 3,
    columnBorderWidth: 1,
    selector: true,
    sortable: true,
    enableFilter: true,
    clickAction: 'sort',
};
static defaultBody: types.DataGridOptionBody = {
    align: 'left',
    columnHeight: 24,
    columnPadding: 3,
    columnBorderWidth: 1,
    grouping: false,
    mergeCells: false,
};
static defaultPage: types.DataGridOptionPage = {
    height: 20,
};
static defaultScroller: types.DataGridOptionScroller = {
    size: 14,
    arrowSize: 14,
    barMinSize: 12,
    padding: 3,
    disabledVerticalScroll: false,
};
static defaultOptions: types.DataGridOptions = {
    frozenColumnIndex: 0,
    frozenRowIndex: 0,
    showLineNumber: true,
    showRowSelector: false,
    multipleSelect: true,
    columnMinWidth: 100,
    lineNumberColumnWidth: 60,
    rowSelectorColumnWidth: 28,
    remoteSort: false,
    asidePanelWidth: 0,
    header: DataGrid.defaultHeader,
    body: DataGrid.defaultBody,
    page: DataGrid.defaultPage,
    scroller: DataGrid.defaultScroller,
    columnKeys: DataGrid.defaultColumnKeys,
    bodyLoaderHeight: 100,
};

onBeforeEvent?: ({e: React.MouseEvent | React.KeyboardEvent; eventName: string;}) => void;

onAfterEvent?: ({e: React.MouseEvent | React.KeyboardEvent; eventName: string;}) => void;

onScrollEnd?: ({endOfScrollTop?: boolean; endOfScrollLeft?: boolean;}) => void;

onRightClick?: ({e: React.MouseEvent; item: any; value: any; focusedRow?: number; focusedCol?: number;}) => void;

loading?: boolean = false;

loadingData?: boolean = false;

rowSelector?: IDataGridRowSelector;

IDataGridRowSelector

 {
  show: boolean;
  rowKey: string;
  selectedRowKeys?: string[];
  onChange?: (param: IonChangeSelectedParam) => void;
}

Sample

Edit axui-datagrid-ex

You can see other source code here

Here is one example code for using a datagrid

import React, { FC, useState } from 'react';
import { DataGrid, IDataGrid } from 'axui-datagrid';

interface IProps {}
const DatagridExample: FC<IProps> = () => {
  const [width, setWidth] = useState(500);
  const [height, setHeight] = useState(250);

  const columns: IDataGrid.IColumn[] = [
    { key: '0', width: 60, label: 'ID', align: 'center' },
    {
      key: '1',
      width: 200,
      label: 'Title',
      formatter: function(args: any) {
        // console.log(args);
        return ' * ' + args.value;
      },
    },
    { key: '2', label: 'Writer', align: 'center', formatter: 'html' },
    { key: '0', label: 'Date', align: 'center', formatter: 'date' },
    { key: '1', label: 'Money', align: 'right', formatter: 'money' },
  ];

  const data = [
    { value: ['A01', 'B01', 'C'] },
    { value: ['A02', 'B02', 'C<b>a</b>'] },
    { value: ['A03', 'B03', 'C<b>a</b>'] },
    { value: ['A04', 'B04', 'C<b>a</b>'] },
    { value: ['A05', 'B05', 'C<b>a</b>'] },
    { value: ['A06', 'B06', 'C<b>a</b>'] },
    { value: ['A07', 'B07', 'C<b>a</b>'] },
    { value: ['A08', 'B08', 'C<b>a</b>'] },
    { value: ['A09', 'B09', 'C<b>a</b>'] },
    { value: ['A10', 'B10', 'C<b>a</b>'] },
    { value: ['A11', 'B11', 'C<b>a</b>'] },
  ];

  return (
    <div style={{ border: '1px solid #d9d9d9', width, height }}>
      <DataGrid
        width={width}
        height={height}
        style={{ fontSize: '12px' }}
        columns={columns}
        data={data}
        dataLength={data.length}
        options={{}}
      />
    </div>
  );
};

export default DatagridExample;

Version history

  • v0.3.0 - Add a new prop loading, loadingData, and onScrollEnd to the DataGrid.
  • v0.3.2 - Add a new props onChangeSelected, refactoring StoreProvider
  • v0.3.3 - Changed keyboard event firing to be determined by 'onCompositionUpdate' state. In InlineEdit mode.
  • v0.3.5 - Update document and minor bug fix on inline-edit.
  • v0.3.6 - bugfix : Wrong scrollPosition error when changed focus position by keyDown
  • v0.3.7 - Update document and change columns fix
  • v0.3.8 - support footSum props & minor bugfix
  • v0.3.9 - filtered state display on header & fixed bug of 'footSum'
  • v0.3.10 - Fixed bug : When clicking line Number cell did not working.
  • v0.3.11 - Minor bug fix
  • v0.3.14 - Code changes that were using 'findDOMNode'. so has remove dependencies 'react-dom'
  • v0.3.18 - update readme
  • v0.3.20 - changed onChangeSelected to rowSelector.onChange
  • v0.4.0 - support contextmenu event
  • v0.5.0 - support selection.onChange, Add a new props onRightClick, refactoring StoreProvider
  • v0.5.1 - Improve columnFilter & modify examples
  • v0.5.2 - Bugfix : The scrollBar is not displayed where resizing a column.
  • v0.6.0 - Add a new prop width and Add IDataGrid namespace.
  • v0.6.1 - Fixed an issue where the column position is not kept according to the scroll position.
  • v0.7.0 - Modify scrollbar style
  • v0.7.1 - Minor patch - scrollbar style
  • v0.8.0 - Refactoring storeProvider & Modify scrollBar style
  • v0.8.1 ~ 0.8.3 - minor patch & fixed bug
  • v0.9.0 - Add a new props status & formatter support HTML
  • v0.9.1 - display default status
  • v0.10.0 - Added the options.autofitColumns property, fix problem wrong scroll position
  • v0.10.1 - autofitColumns Timing Adjustments
  • v0.11.0 - Added the options.scroller.width, height, theme
  • v0.12.0 - Add a new props onScroll, remove props onAfterEvent, modify keydown scroll action
  • v0.12.1 - update axui-datagrid-header.scss, header text color support
  • v0.13.0 - support custom editor in column, add new props (onChangeSelected, onScroll, onChangeScrollSize)
  • v0.13.1 - Modified the style of inline editing text.
  • v0.13.2 - minor fix.
  • v0.13.3 - Modify Inline editor
  • v0.13.4 - update row by inlineEditor
  • v0.13.5 - add option.rowSelectorSize
  • v0.13.6 - Handle focus exception when text type editor is activeType 'always'.
  • v0.13.7 - minor fix.
  • v0.13.8 - rowSelect bug fix.
  • v0.13.9 - add a new prop onClick
  • v0.13.10 - Fixed bug onClick
  • v0.13.11 - update default CSS & update example
  • v0.13.12 - Fixed the copying of objects to clipboard copy data.
  • v0.13.13 - Fixed scrollBar & scrollPosition.
  • v0.14.0 - add option.lineNumberStartAt
  • v0.14.1 - add selectedIndexes prop
  • v0.14.2 - Fixed selectedIndexes prop
  • v0.14.3 - Fixed, Problems not copied to the clipboard at Windows
  • v0.14.4 - add option.disableClipboard
  • v0.14.6 - remove option.autofitColumns, add props autofitColumns
  • v0.14.7 - Scrolling error fix when the number of data exceeds 1.5 million.
  • v0.14.8 - Fix minor issue
  • v0.15.0 - Changed type of 'data' prop (IData) / Add 'dataLength' property / Option Properties Cleanup.
  • v0.15.1 - Export IDataGrid interface
  • v0.15.2 - Update readme

axui-datagrid's People

Contributors

aeei avatar dohunhyun avatar fureweb-com avatar gimdongwoo avatar jungtaepyo avatar miiiji avatar minimal1 avatar ohhyeonjeong avatar thomasjang avatar woo-gim avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

axui-datagrid's Issues

터치이벤트 처리가 궁금합니다.

안녕하세요? 좋은 컴포넌트를 오픈소스로 공개해주셔서 감사합니다.

태블릿에서 사용할 웹 페이지를 만들고 있는데
터치 이벤트 처리를 어떻게 해야 하는지 궁금합니다.

감사합니다.
김용기 드림.

스프레드시트 화면 resizing 시 드래그 기능

스프레드시트 화면 resizing을 할 때, 현재는 height와 width의 버튼이 한정적이기 때문에, 스크롤 바 형태로 만들어서 그 크기를 max값과 min값을 두고 점점 커지면 그에 따라 자동으로 화면도 커지고 점점 작아지면 자동으로 화면도 작아지게 만드는건 어떨까요?

기능에 관해서 질문드립니다.

axisj 부터 잘 사용해오고 있는 개발자 입니다.

이번에 리엑트를 사용하면서 데이터그리드를 사용하게 되었습니다.

혹시나 지금 이 기능이 있는것인데 제가 못찾아서 사용하지 못하는건지..
아니면 아직 구현이 안되어 있는지 궁금해서 질문올립니다.

  • row 별 css 클래스 적용 ( background color 를 변경하기 위한 )

수고하세요.

추가되었으면 하는 기능에 대해서 남깁니다.

앞에 글에서 추가되었으면 하는 기능을 천천히 추가해주신다고 해서 적어봅니다.

  1. row 별 css class 적용
  2. excel export 관련 기능
  3. grid 안에 button 삽입
  4. 하단 페이징 관련 기능

계속 사용하며 업데이트 해보겠습니다.

수고하세요.

그리드 필터 기능에 대해서

현재를 필요 없는 데이터를 선택하도록 필터링을 할 수 있는데
보통 사용할 때는 필터링을 할 데이터를 찾기 때문에 아래의 이미지처럼 모두 체크되지 않는 상태가 기본이 되면 어떨까 생각해 봅니다.

image

formatter JSX 타입지원

formatter: function({ value }: IDataGrid.IFormatterData) {
        return (
          <span
            dangerouslySetInnerHTML={(() => ({
              __html: value,
            }))()}
          />
        );
      },

align 에 관해서 질문드립니다.

{key:"amount”, label:”금액”, width:90, align:"right", formatter: "money"},

위와 같이 column 에 align 을 주면 잘작동합니다.

하지만

header option 에 align: ‘center’ 를 줘도 작동하지를 않습니다.

이 column 에 right 를 준탓인지 header 도 오른쪽으로 정렬되어있습니다.

컬럼에 align 값이 있으면 header의 align 값이 적용이 안되는것인지 궁금합니다.

수고하세요.

레코드 선택 기능

레코드를 선택할 때 ROW NUM을 드래그 하면 레코드가 선택되었으면 좋겠습니다.
지금은 한개만 선택됩니다.

지금은 드래그 기능 없이 Shift + Click으로 다중 선택이 되고 있군요.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.