You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

130 lines
3.0 KiB

2 months ago
<?php
use Kirby\Toolkit\I18n;
use Kirby\Toolkit\Str;
return [
'props' => [
/**
* Columns config for `layout: table`
*/
'columns' => function (array $columns = null) {
return $columns ?? [];
},
/**
* Section layout.
* Available layout methods: `list`, `cardlets`, `cards`, `table`.
*/
'layout' => function (string $layout = 'list') {
$layouts = ['list', 'cardlets', 'cards', 'table'];
return in_array($layout, $layouts) ? $layout : 'list';
},
/**
* The size option controls the size of cards. By default cards are auto-sized and the cards grid will always fill the full width. With a size you can disable auto-sizing. Available sizes: `tiny`, `small`, `medium`, `large`, `huge`, `full`
*/
'size' => function (string $size = 'auto') {
return $size;
},
],
'computed' => [
'columns' => function () {
$columns = [];
if ($this->layout !== 'table') {
return [];
}
if ($this->image !== false) {
$columns['image'] = [
'label' => ' ',
'mobile' => true,
'type' => 'image',
'width' => 'var(--table-row-height)'
];
}
if ($this->text) {
$columns['title'] = [
'label' => I18n::translate('title'),
'mobile' => true,
'type' => 'url',
];
}
if ($this->info) {
$columns['info'] = [
'label' => I18n::translate('info'),
'type' => 'text',
];
}
foreach ($this->columns as $columnName => $column) {
if ($column === true) {
$column = [];
}
if ($column === false) {
continue;
}
// fallback for labels
$column['label'] ??= Str::ucfirst($columnName);
// make sure to translate labels
$column['label'] = I18n::translate($column['label'], $column['label']);
// keep the original column name as id
$column['id'] = $columnName;
// add the custom column to the array with a key that won't
// override the system columns
$columns[$columnName . 'Cell'] = $column;
}
if ($this->type === 'pages') {
$columns['flag'] = [
'label' => ' ',
'mobile' => true,
'type' => 'flag',
'width' => 'var(--table-row-height)',
];
}
return $columns;
},
],
'methods' => [
'columnsValues' => function (array $item, $model) {
$item['title'] = [
// override toSafeString() coming from `$item`
// because the table cells don't use v-html
'text' => $model->toString($this->text),
'href' => $model->panel()->url(true)
];
if ($this->info) {
// override toSafeString() coming from `$item`
// because the table cells don't use v-html
$item['info'] = $model->toString($this->info);
}
foreach ($this->columns as $columnName => $column) {
// don't overwrite essential columns
if (isset($item[$columnName]) === true) {
continue;
}
if (empty($column['value']) === false) {
$value = $model->toString($column['value']);
} else {
$value = $model->content()->get($column['id'] ?? $columnName)->value();
}
$item[$columnName] = $value;
}
return $item;
}
],
];