Update DataTables to use unflattened data.
This commit is contained in:
parent
cca6478d25
commit
fec7af1363
|
@ -59,47 +59,42 @@ export default {
|
|||
let fields = [
|
||||
{key: 'name', isRowHeader: true, label: this.$gettext('Name'), sortable: true, selectable: true},
|
||||
{
|
||||
key: 'song_title',
|
||||
key: 'song.title',
|
||||
label: this.$gettext('Title'),
|
||||
sortable: true,
|
||||
selectable: true,
|
||||
visible: false,
|
||||
formatter: (value, key, item) => item.song.title
|
||||
},
|
||||
{
|
||||
key: 'song_artist',
|
||||
key: 'song.artist',
|
||||
label: this.$gettext('Artist'),
|
||||
sortable: true,
|
||||
selectable: true,
|
||||
visible: false,
|
||||
formatter: (value, key, item) => item.song.artist
|
||||
},
|
||||
{
|
||||
key: 'song_album',
|
||||
key: 'song.album',
|
||||
label: this.$gettext('Album'),
|
||||
sortable: true,
|
||||
selectable: true,
|
||||
visible: false,
|
||||
formatter: (value, key, item) => item.song.album
|
||||
visible: false
|
||||
},
|
||||
{
|
||||
key: 'song_genre',
|
||||
key: 'song.genre',
|
||||
label: this.$gettext('Genre'),
|
||||
sortable: true,
|
||||
selectable: true,
|
||||
visible: false,
|
||||
formatter: (value, key, item) => item.song.genre
|
||||
visible: false
|
||||
}
|
||||
];
|
||||
|
||||
_.forEach(this.customFields.slice(), (field) => {
|
||||
fields.push({
|
||||
key: 'song_custom_fields_' + field.short_name,
|
||||
key: 'song.custom_fields.' + field.short_name,
|
||||
label: field.name,
|
||||
sortable: false,
|
||||
selectable: true,
|
||||
visible: false,
|
||||
formatter: (value, key, item) => item.song.custom_fields[field.short_name]
|
||||
visible: false
|
||||
});
|
||||
});
|
||||
|
||||
|
|
|
@ -51,8 +51,8 @@
|
|||
<template #cell(path)="row">
|
||||
<div class="d-flex align-items-center">
|
||||
<div class="flex-shrink-0 pr-2">
|
||||
<template v-if="row.item.media_is_playable">
|
||||
<play-button :url="row.item.media_links_play" icon-class="outlined"></play-button>
|
||||
<template v-if="row.item.media.is_playable">
|
||||
<play-button :url="row.item.media.links.play" icon-class="outlined"></play-button>
|
||||
</template>
|
||||
<template v-else>
|
||||
<span class="file-icon" v-if="row.item.is_dir">
|
||||
|
@ -74,26 +74,26 @@
|
|||
{{ row.item.path_short }}
|
||||
</a>
|
||||
</template>
|
||||
<template v-else-if="row.item.media_is_playable">
|
||||
<a class="name" :href="row.item.media_links_play" target="_blank"
|
||||
<template v-else-if="row.item.media.is_playable">
|
||||
<a class="name" :href="row.item.media.links.play" target="_blank"
|
||||
:title="row.item.name">
|
||||
{{ row.item.text }}
|
||||
</a>
|
||||
</template>
|
||||
<template v-else>
|
||||
<a class="name" :href="row.item.links_download" target="_blank"
|
||||
<a class="name" :href="row.item.links.download" target="_blank"
|
||||
:title="row.item.text">
|
||||
{{ row.item.path_short }}
|
||||
</a>
|
||||
</template>
|
||||
<br>
|
||||
<small v-if="row.item.media_is_playable">{{ row.item.path_short }}</small>
|
||||
<small v-if="row.item.media.is_playable">{{ row.item.path_short }}</small>
|
||||
<small v-else>{{ row.item.text }}</small>
|
||||
</div>
|
||||
|
||||
<album-art v-if="row.item.media_art" :src="row.item.media_art"
|
||||
<album-art v-if="row.item.media.art" :src="row.item.media.art"
|
||||
class="flex-shrink-1 pl-2"></album-art>
|
||||
<album-art v-else-if="row.item.is_cover_art" :src="row.item.links_download"
|
||||
<album-art v-else-if="row.item.is_cover_art" :src="row.item.links.download"
|
||||
class="flex-shrink-1 pl-2"></album-art>
|
||||
</div>
|
||||
</template>
|
||||
|
@ -117,9 +117,9 @@
|
|||
</template>
|
||||
</template>
|
||||
<template #cell(commands)="row">
|
||||
<template v-if="row.item.media_links_edit">
|
||||
<template v-if="row.item.media.links.edit">
|
||||
<b-button size="sm" variant="primary"
|
||||
@click.prevent="edit(row.item.media_links_edit, row.item.media_links_art, row.item.media_links_play, row.item.media_links_waveform)">
|
||||
@click.prevent="edit(row.item.media.links.edit, row.item.media.links.art, row.item.media.links.play, row.item.media.links.waveform)">
|
||||
{{ langEditButton }}
|
||||
</b-button>
|
||||
</template>
|
||||
|
@ -233,23 +233,23 @@ export default {
|
|||
data() {
|
||||
let fields = [
|
||||
{key: 'path', isRowHeader: true, label: this.$gettext('Name'), sortable: true},
|
||||
{key: 'media_title', label: this.$gettext('Title'), sortable: true, selectable: true, visible: false},
|
||||
{key: 'media.title', label: this.$gettext('Title'), sortable: true, selectable: true, visible: false},
|
||||
{
|
||||
key: 'media_artist',
|
||||
key: 'media.artist',
|
||||
label: this.$gettext('Artist'),
|
||||
sortable: true,
|
||||
selectable: true,
|
||||
visible: false
|
||||
},
|
||||
{key: 'media_album', label: this.$gettext('Album'), sortable: true, selectable: true, visible: false},
|
||||
{key: 'media_genre', label: this.$gettext('Genre'), sortable: true, selectable: true, visible: false},
|
||||
{key: 'media_isrc', label: this.$gettext('ISRC'), sortable: true, selectable: true, visible: false},
|
||||
{key: 'media_length', label: this.$gettext('Length'), sortable: true, selectable: true, visible: true}
|
||||
{key: 'media.album', label: this.$gettext('Album'), sortable: true, selectable: true, visible: false},
|
||||
{key: 'media.genre', label: this.$gettext('Genre'), sortable: true, selectable: true, visible: false},
|
||||
{key: 'media.isrc', label: this.$gettext('ISRC'), sortable: true, selectable: true, visible: false},
|
||||
{key: 'media.length', label: this.$gettext('Length'), sortable: true, selectable: true, visible: true}
|
||||
];
|
||||
|
||||
_.forEach(this.customFields.slice(), (field) => {
|
||||
fields.push({
|
||||
key: 'media_custom_fields_' + field.id,
|
||||
key: 'media.custom_fields.' + field.id,
|
||||
label: field.name,
|
||||
sortable: true,
|
||||
selectable: true,
|
||||
|
|
|
@ -342,10 +342,9 @@ final class ListAction
|
|||
|
||||
// Add processor-intensive data for just this page.
|
||||
$stationId = $station->getIdRequired();
|
||||
$isInternal = (bool)$request->getParam('internal', false);
|
||||
|
||||
$paginator->setPostprocessor(
|
||||
static fn(Entity\Api\FileList $row) => self::postProcessRow($row, $router, $stationId, $isInternal)
|
||||
static fn(Entity\Api\FileList $row) => self::postProcessRow($row, $router, $stationId)
|
||||
);
|
||||
|
||||
return $paginator->write($response);
|
||||
|
@ -399,8 +398,7 @@ final class ListAction
|
|||
private static function postProcessRow(
|
||||
Entity\Api\FileList $row,
|
||||
RouterInterface $router,
|
||||
int $stationId,
|
||||
bool $isInternal
|
||||
int $stationId
|
||||
): Entity\Api\FileList|array {
|
||||
if (null !== $row->media->media_id) {
|
||||
$artMediaId = $row->media->unique_id;
|
||||
|
@ -454,15 +452,6 @@ final class ListAction
|
|||
),
|
||||
];
|
||||
|
||||
if ($isInternal) {
|
||||
$playlists = $row->playlists;
|
||||
$row->playlists = [];
|
||||
|
||||
$flatRow = Utilities\Arrays::flattenArray($row, '_');
|
||||
$flatRow['playlists'] = $playlists;
|
||||
return $flatRow;
|
||||
}
|
||||
|
||||
return $row;
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue