diff --git a/src/client/components/PlayData.tsx b/src/client/components/PlayData.tsx
index 118a13b1..2c443271 100644
--- a/src/client/components/PlayData.tsx
+++ b/src/client/components/PlayData.tsx
@@ -222,7 +222,7 @@ export const PlayDatesStack = (props: { play: JsonPlayObject, dates: DisplayDate
}
}
if (dates.includes('seen') || dates.includes('all')) {
- dateElements.push(({`Seen ${shortTodayAwareFormat(dayjs(play.data.playDate))}`}));
+ dateElements.push(({`Seen ${shortTodayAwareFormat(dayjs(play.meta.seenAt))}`}));
}
datesItem = (
@@ -255,8 +255,8 @@ export const PlayDatesFooter = (props: { play: JsonPlayObject, dates: DisplayDat
playDate = {`Played ${shortTodayAwareFormat(dayjs(play.data.playDate))}`}
}
// TODO implement seenAt for play data
- if (play.data.playDateCompleted !== undefined && ['all', 'seen'].includes(dates)) {
- seenDate = {`Seen ${shortTodayAwareFormat(dayjs(play.data.playDateCompleted))}`}
+ if (play.meta.seenAt !== undefined && ['all', 'seen'].includes(dates)) {
+ seenDate = {`Seen ${shortTodayAwareFormat(dayjs(play.meta.seenAt))}`}
}
if (playDate !== undefined && seenDate !== undefined) {
dateElm = {playDate}{seenDate}
diff --git a/src/client/components/playActivity/PlayList.tsx b/src/client/components/playActivity/PlayList.tsx
index 9b38b435..94549c4e 100644
--- a/src/client/components/playActivity/PlayList.tsx
+++ b/src/client/components/playActivity/PlayList.tsx
@@ -10,7 +10,7 @@ import doy from 'dayjs/plugin/dayOfYear.js';
import { VscDebugRestart } from "react-icons/vsc";
import { GroupedVirtuoso } from 'react-virtuoso'
import { ActivityDetails } from '../ActivityDetail.js';
-import { sortByNewestPlayDate } from '../../../core/PlayUtils.js';
+import { sortByNewestPlayDate, sortByNewestSeenDate } from '../../../core/PlayUtils.js';
import "./PlayList.scss";
dayjs.extend(doy);
@@ -73,10 +73,15 @@ export const PlayList = (props: ActivityLogProps) => {
render = 'accordian'
} = props;
- const sorted = useMemo(() => props.data.toSorted((a, b) => sortByNewestPlayDate(a.play, b.play)), [data, sortBy]);
+ const sorted = useMemo(() => props.data.toSorted((a, b) => {
+ if(sortBy === 'played') {
+ return sortByNewestPlayDate(a.play, b.play)
+ }
+ return sortByNewestSeenDate(a.play, b.play);
+ }), [data, sortBy]);
if (render === 'accordian') {
- return
+ return
}
if (render === 'virtCollapse') {
return
@@ -285,8 +290,11 @@ const VirtualizedAccordian = (props: { data: PlayActivity[] }) => {
);
}
-const PlainAccordian = (props: { data: PlayActivity[] }) => {
- const { data = [] } = props;
+const PlainAccordian = (props: { data: PlayActivity[], sortBy: 'played' | 'seen' }) => {
+ const {
+ data = [],
+ sortBy
+ } = props;
const groups = generateGroupPlays(data);
return (
@@ -325,7 +333,7 @@ const PlainAccordian = (props: { data: PlayActivity[] }) => {
{play.data.track}
{play.data.artists.join(' / ')}
-
+
{play.meta?.source}
diff --git a/src/core/Atomic.ts b/src/core/Atomic.ts
index 07c9391c..6e8b4bb0 100644
--- a/src/core/Atomic.ts
+++ b/src/core/Atomic.ts
@@ -198,6 +198,8 @@ export interface PlayMeta {
source?: string
sourceSOT?: SOURCE_SOT_TYPES
+ seenAt?: D
+
/*
* If applicable, the name of the Service providing the track (Spotify, Tidal, etc...)
*/
@@ -345,7 +347,7 @@ export type DateLike = Dayjs | string
export interface AmbPlayObject {
data: PlayData,
- meta: PlayMeta | MarkOptional, 'lifecycle'>
+ meta: PlayMeta | Omit, 'lifecycle'>
}
export const isPlayObject = (obj: object): obj is PlayObject => {
diff --git a/src/core/PlayTestUtils.ts b/src/core/PlayTestUtils.ts
index 96280c64..f8135d8c 100644
--- a/src/core/PlayTestUtils.ts
+++ b/src/core/PlayTestUtils.ts
@@ -181,6 +181,7 @@ export const generatePlay = (data: ObjectPlayData = {}, meta: MarkOptional, b: AmbPlayObject) => {
- const {
- data: {
- playDate: aPlayDate
- } = {}
- } = a;
- const {
- data: {
- playDate: bPlayDate
- } = {}
- } = b;
+export const sortByNewestDate = (accessor: (play: AmbPlayObject) => DateLike) => (a: AmbPlayObject, b: AmbPlayObject) => {
+ const aPlayDate = accessor(a);
+ const bPlayDate = accessor(b);
if (aPlayDate === undefined && bPlayDate === undefined) {
return 0;
}
@@ -30,6 +21,13 @@ export const sortByNewestPlayDate = (a: AmbPlayObject, b: AmbPlayObjec
return realA.isBefore(realB) ? 1 : -1;
};
+
+/** sorts playObj formatted objects by playDate in descending (newest first) order */
+export const sortByNewestPlayDate = sortByNewestDate((play) => play.data?.playDate);
+
+/** sorts playObj formatted objects by playDate in descending (newest first) order */
+export const sortByNewestSeenDate = sortByNewestDate((play) => play.meta?.seenAt);
+
export const genGroupIdStr = (id: PlayPlatformId) => {
return `${id[0]}-${id[1]}`;
};