Как использовать текущее состояние MUI для суммирования и отображения столбцов?

У меня есть веб-приложение MUI, которое я создаю для отслеживания некоторых личных данных.

Я использую MUI datagrid pro для отображения данных, и, как мы знаем, он имеет довольно обширные фильтры в компоненте datagrid.

Я хотел бы отображать суммарные итоги отображаемых в настоящее время отфильтрованных столбцов, а не запрашивать базу данных для получения этих конкретных значений. Кажется, что это должно быть довольно просто, но я не уверен, как получить к нему доступ.

API datagridpro находится здесь: https://mui.com/x/api/data-grid/data-grid-pro/

Мой компонент datagrid построен так:

const fetchData = useCallback(
    async (IDs: string[]) => { 
        response = await fetch("/api/data")
        data = response.json()
        ...
        ...
        ... 


        transformedData = transformData(data)

        return { data: transformedData }, }; 
     [dispatch] );

Это передается через стандартный useEffect для установки состояния с данными.

И метод transformData похож на это:

const transformedData = (data: any) => {
   return data.map((item: any, index: any) => {
  const timestamp = new Date(item.timestamp)

  return {
    id: item.id
    value_1: item.value_1
    value_2: item.value_2
    date: timestamp
    value_3: item.value_3
   };
});
};

Это текущий код, отображающий компонент DataGridPro:

<DataGridPro
    rows = {transformedDataFromFunction}
    sx = {{
      ".MuiDataGrid-row:hover": {
        backgroundColor: "#C2C2C2",
      },
    }}
    columns = {columns}
    editMode = "row"
    rowModesModel = {rowModesModel}
    onRowModesModelChange = {(newModel: typeof rowModesModel) =>
      setRowModesModel(newModel)
    }
    onRowEditStart = {handleRowEditStart}
    onRowEditStop = {handleRowEditStop}
    processRowUpdate = {processRowUpdate}
    componentsProps = {{
      toolbar: { setRowModesModel },
    }}
    slots = {{ toolbar: GridToolbar }}

    // leaving this in here on off chance we don't need MUI
    // experimentalFeatures = {{ newEditingApi: true }}
  />

Опять же, я по существу хочу отобразить суммарные итоги указанных столбцов в отдельном div в верхней части страницы в виде:

Всего Значение 1: сумма (значение_1) | Всего Значение 2: сумма (значение_2) | Всего #: сумма (индекс)


[вставьте сюда данные таблицы]

Опять же, когда я фильтрую на основе сетки данных MUI, я хотел бы отобразить суммарные итоги этих отображаемых столбцов.

Предположим, что value_1 имеет всего 4 строки со значениями, отображаемыми ниже.

    value_1 
   |   3     
   |   4
   |   1
   |   2

Допустим, я хочу отфильтровать по значениям >2.

В компоненте datagridpro это будет отфильтровано и отображено следующим образом:

    value_1 
   |   3     
   |   4

Я хочу показать count отображаемых столбцов, что будет 2, а сумма строк будет 7.

Какие реквизиты API следует использовать для доступа к этому?

Спасибо

Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
0
53
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы можете использовать gridFilteredSortedRowIdsSelector из MUI DataGridPro API, чтобы получить суммарные итоги столбцов. Этот селектор возвращает массив идентификаторов строк, которые в настоящее время отфильтрованы и отсортированы в сетке. Вы можете использовать этот массив для доступа к данным строк и вычисления итоговых сумм по нужным вам столбцам. Например, вы можете сделать что-то вроде этого:

const SummatedTotals = () => {
  const apiRef = useGridApiContext();
  const filteredSortedRowIds = gridFilteredSortedRowIdsSelector(apiRef);

  const filteredSortedRows = filteredSortedRowIds.map((id) =>
    apiRef.current.getRow(id)
  );

  const totalUnitPrice = filteredSortedRows.reduce(
    (sum, row) => sum + row.unitPrice,
    0
  );
  const totalFeeRate = filteredSortedRows.reduce(
    (sum, row) => sum + row.feeRate,
    0
  );
  const totalCount = filteredSortedRows.length;

  return (
    <div>
      {`Total Unit Price: ${
        Math.round(totalUnitPrice * 100) / 100
      } | Total Fee Rate: ${
        Math.round(totalFeeRate * 100) / 100
      } | Total #: ${totalCount}`}
    </div>
  );
};

А потом

<DataGridPro
  /* { ...restProps } */
  slots = {{ footer: SummatedTotals }}
/>

Вы можете увидеть весь пример здесь: codeandbox.io

Чтобы узнать больше, см. разделы Селекторы фильтрации , Объект API и Доступ к состоянию.

Это именно то, что я искал, большое спасибо!

birdman 19.07.2023 19:46

Из любопытства, как вы нашли эти функции? Я не могу найти их нигде в документации. @ Виктор Л.

birdman 19.07.2023 19:50

Я рад, что это работает для вас. Чтобы ознакомиться с документацией, см. mui.com/x/react-data-grid/filtering/#selectors

Victor L. 19.07.2023 20:09

Я обновил свой ответ ссылками на документацию. Пожалуйста, проверь это. :)

Victor L. 19.07.2023 20:38

Другие вопросы по теме