Adding time formatting
All checks were successful
Music Collection CI Workflow / test (./backend) (push) Successful in 22s
Music Collection CI Workflow / test (./frontend) (push) Successful in 19s
Music Collection CI Workflow / build-and-push-images (./backend/Dockerfile, git.anatid.net/tabris/msuic-collection-backend, ./backend) (push) Successful in 49s
Music Collection CI Workflow / build-and-push-images (./frontend/Dockerfile, git.anatid.net/tabris/music-collection-frontend, ./frontend) (push) Successful in 1m12s
Music Collection CI Workflow / deploy (push) Successful in 21s
All checks were successful
Music Collection CI Workflow / test (./backend) (push) Successful in 22s
Music Collection CI Workflow / test (./frontend) (push) Successful in 19s
Music Collection CI Workflow / build-and-push-images (./backend/Dockerfile, git.anatid.net/tabris/msuic-collection-backend, ./backend) (push) Successful in 49s
Music Collection CI Workflow / build-and-push-images (./frontend/Dockerfile, git.anatid.net/tabris/music-collection-frontend, ./frontend) (push) Successful in 1m12s
Music Collection CI Workflow / deploy (push) Successful in 21s
This commit is contained in:
parent
80c2bbfcb9
commit
72f3b9b111
@ -2,4 +2,5 @@ export class UpdateSongDto {
|
|||||||
id: number;
|
id: number;
|
||||||
title: string;
|
title: string;
|
||||||
duration: number;
|
duration: number;
|
||||||
|
albumId: number;
|
||||||
}
|
}
|
||||||
|
@ -1,9 +1,10 @@
|
|||||||
'use client'
|
'use client'
|
||||||
|
|
||||||
import { useState, useEffect } from 'react'
|
import { useState, useEffect } from 'react'
|
||||||
import { Album } from '@/common/album.entity';
|
|
||||||
import { Song } from '@/common/song.entity';
|
|
||||||
import { useParams } from 'next/navigation'
|
import { useParams } from 'next/navigation'
|
||||||
|
import { Album } from '@/entities/album.entity';
|
||||||
|
import { Song } from '@/entities/song.entity';
|
||||||
|
import { TimeUtils } from '@/utils/time.util';
|
||||||
|
|
||||||
export default function Page() {
|
export default function Page() {
|
||||||
const [album, setAlbum] = useState<Album>();
|
const [album, setAlbum] = useState<Album>();
|
||||||
@ -28,9 +29,11 @@ export default function Page() {
|
|||||||
<em>{album.title}</em> by {album.artist} ({album.genre})
|
<em>{album.title}</em> by {album.artist} ({album.genre})
|
||||||
</div>
|
</div>
|
||||||
<ul>
|
<ul>
|
||||||
{album.songs.map((song: Song) => (
|
if (album.songs) {
|
||||||
<li key={song.id}>{song.title} ({song.duration})</li>
|
album.songs.map((song: Song) => (
|
||||||
))}
|
<li key={song.id}>{song.title} ({TimeUtils.fancyTimeFormat(song.duration)})</li>
|
||||||
|
))
|
||||||
|
}
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
);
|
);
|
||||||
|
@ -2,7 +2,7 @@
|
|||||||
|
|
||||||
import { useState, useEffect } from 'react';
|
import { useState, useEffect } from 'react';
|
||||||
import Link from 'next/link';
|
import Link from 'next/link';
|
||||||
import { Album } from '@/common/album.entity';
|
import { Album } from '@/entities/album.entity';
|
||||||
|
|
||||||
export default function Page() {
|
export default function Page() {
|
||||||
const [albums, setAlbums] = useState<Album[]>([]);
|
const [albums, setAlbums] = useState<Album[]>([]);
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
import { Song } from '@/common/song.entity';
|
import { Song } from '@/entities/song.entity';
|
||||||
|
|
||||||
export interface Album {
|
export interface Album {
|
||||||
id: number;
|
id: number;
|
@ -1,4 +1,4 @@
|
|||||||
import { Album } from '@/common/album.entity';
|
import { Album } from '@/entities/album.entity';
|
||||||
|
|
||||||
export interface Song {
|
export interface Song {
|
||||||
id: number;
|
id: number;
|
22
frontend/src/utils/time.util.tsx
Normal file
22
frontend/src/utils/time.util.tsx
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
export class TimeUtils {
|
||||||
|
|
||||||
|
// Copied from https://stackoverflow.com/a/11486026
|
||||||
|
static fancyTimeFormat(duration: number) {
|
||||||
|
// Hours, minutes and seconds
|
||||||
|
const hrs = ~~(duration / 3600);
|
||||||
|
const mins = ~~((duration % 3600) / 60);
|
||||||
|
const secs = ~~duration % 60;
|
||||||
|
|
||||||
|
// Output like "1:01" or "4:03:59" or "123:03:59"
|
||||||
|
let ret = "";
|
||||||
|
|
||||||
|
if (hrs > 0) {
|
||||||
|
ret += "" + hrs + ":" + (mins < 10 ? "0" : "");
|
||||||
|
}
|
||||||
|
|
||||||
|
ret += "" + mins + ":" + (secs < 10 ? "0" : "");
|
||||||
|
ret += "" + secs;
|
||||||
|
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
}
|
Loading…
x
Reference in New Issue
Block a user