No More Posting New Topics!

If you have a question or an issue, please start a thread in our Github Discussions Forum.
This forum is closed for new threads/ topics.

Navigation

    Quasar Framework

    • Login
    • Search
    • Categories
    • Recent
    • Tags
    • Popular
    • Users
    • Groups
    • Search

    Quasar Nested Tables - constrain nested table to parent width

    Framework
    1
    1
    45
    Loading More Posts
    • Oldest to Newest
    • Newest to Oldest
    • Most Votes
    Reply
    • Reply as topic
    Log in to reply
    This topic has been deleted. Only users with topic management privileges can see it.
    • J
      jeffn last edited by

      Trying to figure out how to get the nested tables here to constrain their width to the parent row. Right now, the nested table may auto size itself and drive the parent table to end up with a horizontal scrollbar

      
      <q-table
              class="q-mt-lg q-pb-md"
              row-key="name"
              :data="reconciliation.configurationTypes"
              :rows-per-page-options="[0]"
              :hide-pagination="true"
              :hide-selected-banner="true"
              selection="multiple"
              :visible-columns="['name', 'directory']"
              ref="configurationTypesTable"
            >
              <template v-slot:header-selection>
                <q-checkbox class="float-left" v-model="reconciliation.selected" />
              </template>
      
              <template v-slot:body="props">
                <q-tr :props="props">
                  <q-td>
                    <q-btn dense flat :icon="props.expand ? 'keyboard_arrow_down' : 'keyboard_arrow_right'" @click="props.expand = !props.expand"></q-btn>
                    <q-checkbox v-model="props.row.selected" />
                  </q-td>
                  <q-td v-for="col in props.cols" :key="col.name" :props="props">
                    <div v-if="col.name == 'name'">
                      {{ props.row[col.name] }}
                    </div>
                    <div v-if="col.name != 'name'" style="word-break: break-word; white-space: normal">
                      {{ props.row[col.name] }}
                    </div>
                  </q-td>
                </q-tr>
                <q-tr v-show="props.expand" :props="props" class="bg-blue-grey">
                  <q-td colspan="100%">
                    <div class="q-gutter-y-md">
                      <div v-for="reconciliationType in props.row.reconciliationTypes" :key="reconciliationType.name">
                        <q-table
                          :data="reconciliationType.configurations"
                          row-key="name"
                          :rows-per-page-options="[0]"
                          :hide-pagination="true"
                          selection="multiple"
                          :hide-selected-banner="true"
                          :visible-columns="['name', 'description']"
                          ref="configurationsTable"
                        >
                          <template v-slot:header-selection>
                            <q-checkbox class="float-left" v-model="reconciliationType.selected" />
                          </template>
      
                          <template v-slot:top>
                            <div class="text-h6">
                              {{ reconciliationType.name }}
                            </div>
                            <q-badge class="q-ml-md q-mr-md absolute q-pa-xs" color="blue-grey" style="right: 0px">
                              <q-icon name="check_box" color="white" class="q-ml-xs q-mr-xs" style="font-size: 1.8em" />
                              <span style="font-size: 1.2em"> {{ reconciliationType.checkedLabel }}</span>
                              <q-icon name="check_box_outline_blank" color="white" class="q-ml-lg q-mr-xs" style="font-size: 1.8em" />
                              <span style="font-size: 1.2em;" class="q-pr-sm"> {{ reconciliationType.uncheckedLabel }}</span>
                            </q-badge>
                          </template>
      
                          <template v-slot:body="props">
                            <q-tr :props="props">
                              <q-td>
                                <q-btn
                                  dense
                                  flat
                                  v-if="props.row.properties.length > 0"
                                  :icon="props.expand ? 'keyboard_arrow_down' : 'keyboard_arrow_right'"
                                  @click="props.expand = !props.expand"
                                ></q-btn>
                                <q-checkbox v-model="props.row.selected" />
                              </q-td>
                              <q-td
                                v-for="col in props.cols"
                                :key="col.name"
                                :props="props"
                                style="word-break: break-word; white-space: normal; min-width: 200px"
                              >
                                <span v-if="col.name == 'name'">
                                  {{ props.row[col.name] }}
                                </span>
                                <q-markdown v-if="col.name == 'description'" :noHtml="false" :src="props.row[col.name]" />
                              </q-td>
                            </q-tr>
                            <q-tr v-show="props.expand" :props="props" v-if="props.row.properties.length > 0">
                              <q-td colspan="100%">
                                <q-table
                                  :data="props.row.properties"
                                  row-key="path"
                                  :rows-per-page-options="[0]"
                                  :hide-pagination="true"
                                  :hide-bottom="true"
                                  selection="multiple"
                                  :visible-columns="['name', 'baseline', 'tenant']"
                                >
                                  <template v-slot:header-selection> </template>
      
                                  <template v-slot:body="props">
                                    <q-tr :props="props">
                                      <q-td>
                                        <q-checkbox v-model="props.row.selected" />
                                      </q-td>
                                      <q-td v-for="col in props.cols" :key="col.name" :props="props">
                                        <div v-if="col.name == 'name'">
                                          {{ props.row[col.name] }}
                                        </div>
                                        <div v-if="col.name != 'name'" style="word-break: break-all; white-space: normal">
                                          {{ props.row[col.name] }}
                                        </div>
                                      </q-td>
                                    </q-tr>
                                  </template>
                                </q-table>
                              </q-td>
                            </q-tr>
                          </template>
                        </q-table>
                      </div>
                    </div>
                  </q-td>
                </q-tr>
              </template>
            </q-table>
      
      
      1 Reply Last reply Reply Quote 0
      • First post
        Last post