React Pivot Grid 状態保持

    React Pivot Grid の Ignite UI for React 状態保持を使用すると、開発者はグリッドの状態を簡単に保存および復元できます。IgrGridState が React IgrPivotGrid に適用されると、GetStateGetStateAsStringApplyState および ApplyStateFromString メソッドが公開され、開発者はこれを使用して、あらゆるシナリオで状態の永続化を実現できます。

    サポートされる機能

    IgrGridState ディレクティブは、以下の機能の状態の保存および復元をサポートします。

    • Sorting
    • Filtering
    • cellSelection
    • columnSelection
    • Expansion
    • pivotConfiguration
      • IPivotConfiguration iインターフェイスによって定義されるピボット構成プロパティ。
      • ピボットのディメンションと値の関数は、アプリケーションレベルのコードを使用して復元されます。「ピボット構成の復元」セクションを参照してください。

    使用方法

    getState メソッドは、すべての状態情報を含むグリッドの状態を IgrGridStateInfo オブジェクトで返します。保存するには追加の手順が必要になる場合があります。

    GetStateAsString は、シリアル化された JSON 文字列を返します。これは、開発者がそれを取得して任意のデータストレージ (データベース、クラウド、ブラウザーの localStorage など) に保存できます。

    開発者は、引数として機能名を含む配列を渡すことにより、特定の機能の状態のみを取得することを選択できます。空の配列では、デフォルトの状態オプションが使用されます。

    <IgrPivotGrid>
        <IgrGridState ref={(ref) => { gridState = ref; }}></IgrGridState>
    </IgrPivotGrid>
    
    // get an `IgrGridStateInfo` object, containing all features original state objects, as returned by the grid public API
    const state: IgrGridStateInfo = gridState.getState([]);
    
    // get all features` state in a serialized JSON string
    const stateString: string = gridState.getStateAsString([]);
    
    // get the sorting and filtering expressions
    const sortingFilteringStates: IgrGridStateInfo = gridState.getState(['sorting', 'filtering']);
    

    ApplyState - このメソッドは引数として IgrGridStateInfo オブジェクトを受け取り、オブジェクト内で見つかった各フィーチャまたは 2 番目の引数として指定されたフィーチャの状態を復元します。

    ApplyStateFromString - このメソッドはシリアル化された JSON 文字列を引数として受け取り、JSON 文字列内で見つかった各機能の状態、または 2 番目の引数として指定された機能を復元します。

    gridState.applyState(gridState, []);
    gridState.applyStateFromString(gridStateString, []);
    gridState.applyState(sortingFilteringStates, [])
    

    Options オブジェクトは、IgrGridStateOptions インターフェースを実装します。特定の機能の名前であるキーには、この機能の状態を追跡するかどうかを示すブール値があります。GetState/GetStateAsString メソッドはこれらの機能の状態を戻り値に入れず、ApplyState/ApplyStateFromString メソッドはその状態を復元しません。

    <IgrGridState options={{ cellSelection: false, sorting: false }}></IgrGridState>
    

    これらのシンプルなシングル ポイント API を使用すると、わずか数行のコードで完全な状態維持機能を実現できます。下からコードをコピーして貼り付けます - ユーザーが現在のページを離れるたびに、ブラウザーの LocalStorage オブジェクトにグリッドの状態が保存されます。ユーザーがメイン ページに戻るときに、グリッドの状態が復元されます。必要なデータを取得するために、複雑で高度なフィルタリングやソートの式を毎回設定する必要はなくなりました。一度実行して、以下のコードでユーザーに代わって処理してください。

    <IgrPivotGrid rendered={restoreGridState}>
        <IgrGridState ref={(ref) => { gridState = ref; }}></IgrGridState>
    </IgrPivotGrid>
    
    useEffect(() => {
        restoreGridState();
        window.addEventListener('beforeunload', saveGridState);
        return () => {
          window.removeEventListener('beforeunload', saveGridState);
        }
    }, []);
    
    // Using methods that work with IgrGridStateInfo object.
    function saveGridState() {
        const state = gridState.getState([]);
        window.localStorage.setItem('grid-state', JSON.stringify(state));
    }
    
    function restoreGridState() {
        const state = window.localStorage.getItem('grid-state');
        if (state) {
            gridState.applyState(JSON.parse(state), []);
        }
    }
    
    //Or using string alternative methods.
    function saveGridState() {
        const state = gridState.getStateAsString([]);
        window.localStorage.setItem('grid-state', state);
    }
    
    function restoreGridState() {
        const state = window.localStorage.getItem('grid-state');
        if (state) {
            gridState.applyStateFromString(state, []);
        }
    }
    

    ピボット構成の復元

    IgrGridState は、デフォルトではピボット ディメンション関数、値フォーマッタなどを保持しません (制限を参照)。これらの復元は、アプリケーション レベルのコードで実現できます。IgrPivotGrid は、構成に含まれるカスタム関数を戻すために使用できる 2 つのイベント (DimensionInitValueInit) を公開します。以下はその方法です。

    • DimensionInit および ValueInit イベントのイベント ハンドラーを割り当てます。

    DimensionInit および ValueInit イベントは、pivotConfiguration プロパティで定義された値とディメンションごとに発行されます。

    • ValueInit イベント ハンドラーで、すべてのカスタム集計、フォーマッタ、およびスタイルを設定します。
      function onValueInit(s: IgrPivotGrid, event: IgrPivotValueEventArgs) {
        const value: IgrPivotValueDetail = event.detail;
        if (value.member === "AmountofSale") {
          value.aggregate.aggregator = totalSale;
          value.aggregateList?.forEach((aggr: any) => {
            switch (aggr.key) {
              case "SUM":
                aggr.aggregator = totalSale;
                break;
              case "MIN":
                aggr.aggregator = totalMin;
                break;
              case "MAX":
                aggr.aggregator = totalMax;
                break;
            }
          });
        } else if (value.member === "Value") {
          value.styles.upFontValue = (rowData: any, columnKey: any): boolean =>
            parseFloat(rowData.aggregationValues.get(columnKey.field)) > 150;
          value.styles.downFontValue = (rowData: any, columnKey: any): boolean =>
            parseFloat(rowData.aggregationValues.get(columnKey.field)) <= 150;
        }
      }
    

    デモ

    制限

    • getState メソッドは、JSON.stringify() メソッドを使用して、元のオブジェクトを JSON 文字列に変換します。JSON.stringify() は関数をサポートされていないため、IgrGridState ディレクティブはピボット ディメンション MemberFunction、ピボット値 MemberFormatter、カスタム Aggregate 関数、Styles、およびピボット構成戦略 (ColumnStrategy および RowStrategy) を無視します。