Source

Frameworks/AsyncTableTools/hooks/useTableView/useTableView.js

import React, { useMemo } from 'react';
import TableViewToggle from '../../components/TableViewToggle';
import useViews from './hooks/useViews';
import useViewState from './hooks/useViewState';

/**
 * A hook that manages "views" for a Patternfly (v4) Table component, like a simple "row" view or a "tree" view
 *
 *  @param   {Array}   items                      An array of items to render
 *  @param   {Array}   columns                    An array of columns to render items with
 *  @param   {object}  [options]                  AsyncTableTools options
 *  @param   {object}  [options.tableTree]
 *  @param   {boolean} [options.showViewToggle]
 *  @param   {string}  [options.defaultTableView]
 *
 *  @returns {object}                             TODO
 *
 *  @category AsyncTableTools
 *  @subcategory Hooks
 *
 */
const useTableView = (items, columns, options = {}) => {
  const { showViewToggle } = options;
  const { setTableView, tableView } = useViewState(options);
  const { tableProps, toolbarProps, choosableViews } = useViews(
    tableView,
    items,
    columns,
    options
  );

  const enableToggle = useMemo(
    () =>
      typeof showViewToggle === 'boolean'
        ? showViewToggle
        : Object.keys(choosableViews).length > 1,
    [choosableViews, showViewToggle]
  );

  return {
    ...(tableProps ? { tableProps } : {}),
    ...(toolbarProps ? { toolbarProps } : {}),
    ...(enableToggle
      ? {
          TableViewToggle: function Toggle() {
            return (
              <TableViewToggle
                views={choosableViews}
                onToggle={setTableView}
                currentTableView={tableView}
              />
            );
          },
        }
      : {}),
  };
};

export default useTableView;