@econnect/webcomponents-library
Documentation
Styleguide
Documentation
Styleguide
  • Getting Started

    • Installation
    • Patch Notes
    • Styleguide
  • Styling

    • e-connect colors
  • UI Components

    • Form

      • Search Field
      • Form Field
      • Forms
    • Filter

      • Filter
      • Search Filter
    • Grid

      • Grid
      • Grid Row
    • Inputs

      • File Input
      • Input Checkbox
      • Input Dropdown
      • Input Date
      • Input Date Time
      • Input Date Time Local
      • Input File
      • Input Label
      • Input Multi Select
      • Input Number
      • Input Radio
      • Input Range
      • Input Select
      • Input Switch
      • Input Slider
      • Input Text
      • Input TextArea
      • Input Time
      • Input Time Range
    • Controls

      • Booleans
      • Button
      • Checkboxes
      • Date Displays
      • Dropdown Lists
      • Text Displays
    • Headers

      • e-header
    • Cards

      • e-card
    • Images

      • Icon
      • Images
      • Flag Image
      • Hamburger
    • Iframe
    • Pager
    • Settings
    • Document Validation
    • Navigation

      • Navigation
      • Navigation Menu
      • Navigation Footer
      • Navigation Button
      • Navigation Button Item
      • Navigation Search Item

Grid Row v1.0

The <e-grid-row> component is a part of the grid component, used for displaying a variety of values.

Usage

An e-grid-row has attributes that must be provided.

<e-grid-row
  :row-data="rowData"
  @click="clickedRow(rowData)"
  @emit-key="emitKey"
/>

Attributes

gridModel | Type: GridData | required
loading | Type: Boolean | Default: false
items | Type: Object[] | Default: []
errors | Type: Object[] | Default: []
queryParameters | Type: QueryParameters | Default: {}
total | Type: Number | Default: 0
page | Type: Number | Default: 0
pagerDisplayOffset | Type: Number | Default: 2

Examples

1
test 1
test1
Placeholder image

test party

party
Placeholder image

test party 2

party 2
10/10/20251 second ago
10/10/20251 second ago
example text

Source Code

e-grid-row.vue
<script setup lang="ts">
import { computed, inject, unref } from 'vue';
import { includes } from 'lodash-es';

import { ColumnModel, Dictionary } from 'types';
import { RowComponents } from 'types/grid';

export type Props = {
  rowData: Dictionary;
};
const props = withDefaults(defineProps<Props>(), {});

const emit = defineEmits<{
  (e: 'click', event: MouseEvent): void;
  (e: 'emit-key', emitKey: string, row: Dictionary, meta: Dictionary): void;
}>();

const gridSize = inject('grid-size', { rowHeight: 40, contentHeight: 0 });
const rowHeight = computed(() => unref(gridSize).rowHeight);

const gridColumns = inject('grid-columns', [] as Array<ColumnModel>);
const columnSet = computed(() => unref(gridColumns));

const rowStyle = computed(() => {
  return {
    height: `${rowHeight.value}px`
  };
});

const row = computed(() => {
  return props.rowData;
});

function getColumnWidth(columnData: ColumnModel) {
  const columnWidth = `${columnData.width}`;

  if (includes(columnWidth, 'px') || columnWidth === 'auto') {
    return columnWidth;
  } else {
    return `${columnWidth || 200}px`;
  }
}

function emitEvent(emitKey: string, functionMeta: Dictionary) {
  emit('emit-key', emitKey, row.value, functionMeta);
}
</script>

<template>
  <div
    class="e-grid-row"
    :style="rowStyle"
  >
    <div
      v-for="(column, columnIndex) in columnSet"
      :key="columnIndex + column.index"
      class="column"
      :class="column.type"
      :style="{
        width: getColumnWidth(column)
      }"
      @click="emit('click', $event)"
    >
      <component
        :is="RowComponents[column.type]"
        v-model="row[column?.key]"
        :options="column.options"
        @emit-key="emitEvent"
      />
    </div>
  </div>
</template>

<style scoped lang="scss">
.e-grid-row {
  display: flex;
  flex-direction: row;
  justify-content: flex-start;
  background-color: var(--e-grid-row-background);
  padding: 5px 15px;
  cursor: pointer;
  color: var(--e-gray);
  min-width: fit-content;

  .column,
  .settings-column {
    display: flex;
    padding: 3px 10px;
    overflow: hidden;
    text-align: left;
    text-overflow: ellipsis;
    align-items: center;
  }

  .settings-column {
    flex: 1 1 auto;
  }

  &:nth-child(even) {
    background-color: var(--e-grid-row-even-background);
  }

  > :last-child {
    flex: 1 1 auto;
  }

  &:hover {
    color: var(--e-body-font-color);
    background-color: var(--e-grid-row-hover-background);

    .column {
      background-color: var(--e-grid-row-hover-background);
    }
  }
}
</style>
Last Updated:: 10/10/24, 2:56 PM
Contributors: Roeland Krijgsman, Marcel Lommers
Prev
Grid