diff --git a/src/components/common/ListItem.tsx b/src/components/common/ListItem.tsx index 64c13bd..ba8507a 100644 --- a/src/components/common/ListItem.tsx +++ b/src/components/common/ListItem.tsx @@ -1,6 +1,7 @@ import React from 'react'; import { IonItem, IonIcon, IonChip } from '@ionic/react'; import { TwoLineDisplay } from './TwoLineDisplay'; +import { NumberDisplay } from './NumberDisplay'; interface ListItemProps { primaryText: string; @@ -60,11 +61,7 @@ export const ListItem: React.FC = ({ > {/* Number (if enabled) */} {showNumber && ( -
-
- {number} -
-
+ )} {/* Main content */} diff --git a/src/components/common/NumberDisplay.tsx b/src/components/common/NumberDisplay.tsx new file mode 100644 index 0000000..c10e897 --- /dev/null +++ b/src/components/common/NumberDisplay.tsx @@ -0,0 +1,19 @@ +import React from 'react'; + +interface NumberDisplayProps { + number: number; + className?: string; +} + +export const NumberDisplay: React.FC = ({ + number, + className = '' +}) => { + return ( +
+
+ {number} +
+
+ ); +}; \ No newline at end of file diff --git a/src/components/common/index.ts b/src/components/common/index.ts index db16aed..13723f2 100644 --- a/src/components/common/index.ts +++ b/src/components/common/index.ts @@ -8,4 +8,5 @@ export { default as SongItem, SongInfoDisplay, SongActionButtons } from './SongI export { default as SongInfo } from './SongInfo'; export { default as Toast } from './Toast'; export { TwoLineDisplay } from './TwoLineDisplay'; -export { ListItem } from './ListItem'; \ No newline at end of file +export { ListItem } from './ListItem'; +export { NumberDisplay } from './NumberDisplay'; \ No newline at end of file diff --git a/src/features/Queue/Queue.tsx b/src/features/Queue/Queue.tsx index 0c45ada..bdec8f8 100644 --- a/src/features/Queue/Queue.tsx +++ b/src/features/Queue/Queue.tsx @@ -4,7 +4,7 @@ import { trash, reorderThreeOutline, reorderTwoOutline } from 'ionicons/icons'; import { useQueue } from '../../hooks'; import { useAppSelector } from '../../redux'; import { selectQueueLength, selectPlayerStateMemoized, selectIsAdmin, selectControllerName } from '../../redux'; -import { ActionButton } from '../../components/common'; +import { ActionButton, NumberDisplay } from '../../components/common'; import { SongInfoDisplay } from '../../components/common/SongItem'; import { queueService } from '../../firebase/services'; import { debugLog } from '../../utils/logger'; @@ -107,11 +107,7 @@ const Queue: React.FC = () => { style={{ '--padding-start': '0px' }} > {/* Order Number */} -
-
- {queueItem.order} -
-
+ {/* Song Info with Singer Name on Top */} @@ -175,11 +171,7 @@ const Queue: React.FC = () => { {/* Order Number */} -
-
- {firstItem.order} -
-
+ {/* Song Info with Singer Name on Top */} diff --git a/src/features/Singers/Singers.tsx b/src/features/Singers/Singers.tsx index f2d533c..428c55f 100644 --- a/src/features/Singers/Singers.tsx +++ b/src/features/Singers/Singers.tsx @@ -1,7 +1,7 @@ import React, { useState } from 'react'; import { IonItem, IonLabel, IonIcon, IonModal, IonHeader, IonToolbar, IonTitle, IonButton, IonContent, IonInput, IonLabel as IonInputLabel } from '@ionic/react'; import { trash, add, close } from 'ionicons/icons'; -import { InfiniteScrollList, ActionButton } from '../../components/common'; +import { InfiniteScrollList, ActionButton, NumberDisplay } from '../../components/common'; import { useSingers } from '../../hooks'; import { useAppSelector } from '../../redux'; import { selectSingers } from '../../redux'; @@ -47,11 +47,7 @@ const Singers: React.FC = () => { const renderSingerItem = (singer: Singer, index: number) => ( {/* Order Number */} -
-
- {index + 1} -
-
+ {/* Singer Name */} diff --git a/src/features/SongLists/SongLists.tsx b/src/features/SongLists/SongLists.tsx index cd529ba..b996321 100644 --- a/src/features/SongLists/SongLists.tsx +++ b/src/features/SongLists/SongLists.tsx @@ -1,7 +1,7 @@ import React, { useState, useMemo, useCallback } from 'react'; -import { IonItem, IonLabel, IonModal, IonHeader, IonToolbar, IonTitle, IonButton, IonIcon, IonChip, IonContent, IonList, IonAccordionGroup, IonAccordion } from '@ionic/react'; +import { IonItem, IonModal, IonHeader, IonToolbar, IonTitle, IonButton, IonIcon, IonChip, IonContent, IonList, IonAccordionGroup, IonAccordion } from '@ionic/react'; import { close, list } from 'ionicons/icons'; -import { InfiniteScrollList, SongItem, ListItem } from '../../components/common'; +import { InfiniteScrollList, SongItem, ListItem, TwoLineDisplay, NumberDisplay } from '../../components/common'; import { useSongLists } from '../../hooks'; import { useAppSelector } from '../../redux'; import { selectSongList } from '../../redux'; @@ -110,18 +110,13 @@ const SongLists: React.FC = () => { handleSongItemClick(songKey)}> {/* Number */} -
- {index + 1}) -
+ - -
- {songListSong.title} -
-
- {songListSong.artist} -
-
+ {/* Use TwoLineDisplay for consistent formatting */} + {availableSongs.length} version{availableSongs.length !== 1 ? 's' : ''} @@ -152,18 +147,15 @@ const SongLists: React.FC = () => { className="opacity-50" > {/* Number */} -
- {index + 1}) -
+ - -
- {songListSong.title} -
-
- {songListSong.artist} -
-
+ {/* Use TwoLineDisplay for consistent formatting with disabled styling */} +
); }