Вложенная строка со строкой таблицы с начальной загрузкой 4 / ReactJS - PullRequest
0 голосов
/ 27 октября 2019

Я пытаюсь создать область раскрывающегося списка / коллапса в строке таблицы, которая является полной шириной таблицы с помощью Bootstrap 4 и React JS. Мне не удалось найти визуальный образ того, что я хочу, я просто помню, как использовал его где-то раньше (может быть, в AWS?), Но я не смог найти его снова.

РЕДАКТИРОВАТЬ : желаемое действие было найдено (https://i.imgur.com/Pcg1JgI.png). После нажатия на шеврон открываются следующие строки.

Это мой текущий код:

import React from "react";
import { API, graphqlOperation } from 'aws-amplify';
import { listTrackerItems } from '../graphql/queries';

class TrackerGeneralPage extends React.Component {
    state = {
        id: '',
        active: [],
        completed: [],
        completedDateNow: '',
        newStatus: 'Complete'
      };

      async componentDidMount() {
        const result = await API.graphql(graphqlOperation(listTrackerItems))
        let data = result.data.listTrackerItems.items
        let General = data.filter(t=>t.department === 'General');
        const activeGeneral = General.filter(t=>t.status === 'Active');
        const completedGeneral = General.filter(t=>t.status === 'Completed');
        const date = new Date();
        const month = date.getUTCMonth() + 1;
        const day = date.getUTCDate();
        const year = date.getUTCFullYear();
        const timeNow = month + "/" + day + "/" + year;
        this.setState({active: activeGeneral, completed: completedGeneral, completedDateNow: timeNow });
      }

  render() {
    const { active } = this.state

    return (
        <>
        <div>
          <div class="container">
            <div class="row">
              <div class="col-sm">
              </div>
              <div class="col-sm">
                <div className="mx-auto" align="center">
                <h1>General</h1>
                </div>
              </div>
              <div class="col-sm">
                <div className="mx-auto mt-2" align="center">
                  {/* <!-- Button trigger modal --> */}
                  <a role="button" className="btn btn-dark" href="/tracker/nwa/lab/add" >
                    Add Tracker
                  </a>
                </div>
              </div>
            </div>
          </div>

          {/* Active Trackers */}
          <div id="toggle-active" className="">
            <div className="my-4">
              <table className="table table-hover table-bordered mb-3">
                <thead className="thead-dark">
                  <tr>
                    <th scope="col">Actions</th>
                    <th scope="col">Name</th>
                    <th scope="col">Regulation</th>
                    {/* <th scope="col">Occurrence</th> */}
                    <th scope="col">Due On</th>
                    <th scope="col">Assigned</th>
                    <th scope="col">Status</th>
                    {/* <th scope="col">Completer</th>
                    <th scope="col">Date Completed</th>
                    <th scope="col">Description</th> */}
                  </tr>
                </thead>
                <tbody>
                {active.map(item => (
                    <tr key={item.id}>
                      <th scope="row" className="dropdown">
                        <a class="btn" data-toggle="collapse" href="#collapseExample" role="button" aria-expanded="false" aria-controls="collapseExample"><img src="https://icon.now.sh/chevronDown" width="25" height="25" className="d-inline-block align-top" alt="Open Row" /></a>
                        </th>
                      <td>{item.name}</td>
                      <td>{item.reg}</td>
                      <td>{item.dateDue}</td>
                      <td>{item.assigned}</td>
                      <td>{item.status}</td>
                      <div class="collapse" id="collapseExample">
                        <div class="card card-body">
                          <td>{item.occurrence}</td>
                          <td>{item.completer}</td> */}
                          <td>{item.dateCompleted}</td>
                          <td>{item.description}</td>
                        </div>
                      </div>
                    </tr>
                ))}
                 </tbody>
              </table>
            </div> {/* End Table Section */}
          </div> {/* End Active Toggle */}

        </div> {/* End Container */}
        </>
    ) 
  }
}

export default TrackerGeneralPage;

ЕслиВ настоящее время я щелкаю стрелку раскрывающегося списка, она размещается справа от таблицы: visual на imgur .

Если переместить это:

<div class="collapse" id="collapseExample">
  <div class="card card-body">
    <td>{item.occurrence}</td>
    <td>{item.completer}</td> */}
    <td>{item.dateCompleted}</td>
    <td>{item.description}</td>
  </div>
</div>

в<th> там, где расположена кнопка выпадающего меню / коллапса, она помещает все это только в этот конкретный столбец: визуальный элемент на imgur .

Я хотел бы, чтобы кнопка открыла область выпадающего меню / коллапсанепосредственно под строкой таблицы, как если бы она была прикреплена (толкая строку ниже) и располагаться на всю ширину таблицы / строки.

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

Как это делается / как это называется?

1 Ответ

0 голосов
/ 29 октября 2019

Примите это как идею. Просто добавьте коллапс к своему <td> и перезапишите начальную загрузку <td> padding;

Вы можете передать значение для замены цели данных на уникальный идентификатор для каждой строки, например fd1, fd2 или другое имя, которое может избежать столкновения через вашу функцию map.

/*overwrite bootstrap table padding*/
.hiddenRow {
    padding: 0 !important;
}
<script src="https://code.jquery.com/jquery-3.2.1.slim.min.js" integrity="sha384-KJ3o2DKtIkvYIK3UENzmM7KCkRr/rE9/Qpg6aAZGJwFDMVNA/GpGFF93hXpG5KkN" crossorigin="anonymous"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.12.9/umd/popper.min.js" integrity="sha384-ApNbgh9B+Y1QKtv3Rn7W3mgPxhU9K/ScQsAP7hUibX39j7fakFPskvXusvfa0b4Q" crossorigin="anonymous"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/js/bootstrap.min.js" integrity="sha384-JZR6Spejh4U02d8jOt6vLEHfe/JQGiRRSQQxSfFWpi1MquVdAyjUar5+76PVCmYl" crossorigin="anonymous"></script>
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/css/bootstrap.min.css" integrity="sha384-Gn5384xqQ1aoWXA+058RXPxPg6fy4IWvTNh0E263XmFcJlSAwiGgFAW/dAiS6JXm" crossorigin="anonymous">


<table class="table table-hover">
    <thead>
    <th></th><th>1</th><th>2</th><th>3</th>
    </thead>
    
    <tbody>
        <tr data-toggle="collapse" data-target="#folder1">
        <td class="text-center"><span>+</span></td>
            <td>Cell 1.1</td>
            <td>Cell 1.2</td>
            <td>Cell 1.3</td>
        </tr>
        <tr>
            <td colspan="4" class="hiddenRow">
                <div id='folder1' class="collapse">
                   row1
                </div>
            </td>
        </tr>
         <tr data-toggle="collapse" data-target="#folder2">
            <td class="text-center"><span>+</span></td>
            <td>Cell 2.1</td>
            <td>Cell 2.2</td>
            <td>Cell 2.3</td>
        </tr>
        <tr style="background:lightyellow">
            <td colspan="4" class="hiddenRow">
                <div id="folder2" class="collapse">
                row2
                </div>
            </td>
        </tr>
    </tbody>
</table>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...