Skip to content

Commit 02238f2

Browse files
committed
add matchesRating
1 parent 190c1c7 commit 02238f2

File tree

3 files changed

+23
-15
lines changed

3 files changed

+23
-15
lines changed

MyApp/wwwroot/pages/components/ArtifactMenu.mjs

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import { ref, inject, onUnmounted } from "vue"
22
import { useClient, useAuth } from "@servicestack/vue"
33
import { SubmitArtifactModeration, RequeueGeneration } from "dtos.mjs"
4-
import { formatRating } from "../lib/utils.mjs"
4+
import { formatRating, matchesRating } from "../lib/utils.mjs"
55

66
export default {
77
template:`
@@ -33,11 +33,11 @@ export default {
3333
@click="handleAction('rating', menu.artifact, { rating })"
3434
:class="[
3535
'w-full text-left px-4 py-2 text-sm hover:bg-gray-100 dark:hover:bg-gray-700 flex items-center',
36-
menu.artifact?.rating === rating
36+
matchesRating(menu.artifact?.rating, rating)
3737
? 'text-indigo-600 dark:text-indigo-400 bg-indigo-50 dark:bg-indigo-900/20'
3838
: 'text-gray-700 dark:text-gray-200'
3939
]">
40-
<svg v-if="menu.artifact?.rating === rating" class="size-4 mr-2" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
40+
<svg v-if="matchesRating(menu.artifact?.rating, rating)" class="size-4 mr-2" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
4141
<path d="M20 6L9 17l-5-5"/>
4242
</svg>
4343
<span v-else class="size-4 mr-2"></span>
@@ -328,6 +328,7 @@ export default {
328328
isType,
329329
isRegenerating,
330330
formatRating,
331+
matchesRating,
331332
handleAction,
332333
hideToastError,
333334
toggleRatingSubmenu,

MyApp/wwwroot/pages/components/Feed.mjs

Lines changed: 13 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -3,13 +3,13 @@ import { useRoute, useRouter } from "vue-router"
33
import { useAuth, useUtils } from "@servicestack/vue"
44
import { lastRightPart } from "@servicestack/client";
55
import { ArtifactGallery, ArtifactDownloads } from "./Artifacts.mjs"
6-
import { AllRatings, toArtifacts, formatDuration, formatRating, sortByCreatedDesc, sortByCreatedAsc, sortByModifiedDesc, sortByModifiedAsc } from "../lib/utils.mjs"
6+
import { AllRatings, toArtifacts, formatDuration, formatRating, matchesRating, sortByCreatedDesc, sortByCreatedAsc, sortByModifiedDesc, sortByModifiedAsc } from "../lib/utils.mjs"
77

88
import AudioPlayer from "./AudioPlayer.mjs"
99
import ListenButton from "./ListenButton.mjs"
1010

1111
const PlayButton = {
12-
template:`
12+
template: `
1313
<button data-slug="@episode.Slug" data-title="@episode.Title" data-url="@episode.Url"
1414
type="button" aria-label="Play episode @episode.Title"
1515
onclick="togglePlayButton(this)"
@@ -50,7 +50,7 @@ export default {
5050
ListenButton,
5151
PlayButton,
5252
},
53-
template:`
53+
template: `
5454
<ErrorSummary :status="error" />
5555
<div class="relative mt-2 border-b border-gray-200 dark:border-gray-700 min-h-full flex justify-between">
5656
<nav class="flex space-x-8" aria-label="Tabs">
@@ -208,7 +208,7 @@ export default {
208208
</div>
209209
<div class="flex flex-wrap">
210210
<template v-for="(desc, rating) of AllRatings">
211-
<span v-if="artifact.rating == rating" :class="gen.publishedDate ? 'bg-yellow-600/50 dark:bg-yellow-300/30' : 'bg-gray-300 dark:bg-gray-600'" class="text-gray-600 dark:text-gray-300 inline-flex items-center rounded-md px-1 py-0.5 text-xs font-medium ring-1 ring-inset ring-gray-500/10 dark:ring-gray-700/10" :title="formatRating(rating) + ' - Suggested Rating'">
211+
<span v-if="matchesRating(artifact.rating, rating)" :class="gen.publishedDate ? 'bg-yellow-600/50 dark:bg-yellow-300/30' : 'bg-gray-300 dark:bg-gray-600'" class="text-gray-600 dark:text-gray-300 inline-flex items-center rounded-md px-1 py-0.5 text-xs font-medium ring-1 ring-inset ring-gray-500/10 dark:ring-gray-700/10" :title="formatRating(rating) + ' - Suggested Rating'">
212212
{{formatRating(rating)}}
213213
</span>
214214
<button v-else type="button" @click="changeRating(gen, artifact, rating)" class="m-0 bg-gray-50 dark:bg-gray-800 text-gray-700 dark:text-gray-300 hover:text-gray-800 dark:hover:text-gray-100 inline-flex items-center rounded-md px-1 py-0.5 text-xs font-medium ring-1 ring-inset ring-gray-500/10 dark:ring-gray-700/10"
@@ -265,7 +265,7 @@ export default {
265265
props: {
266266
thread: Object,
267267
},
268-
emits:['selectGeneration','retryGeneration'],
268+
emits: ['selectGeneration', 'retryGeneration'],
269269
setup(props, { emit }) {
270270
const store = inject('store')
271271
const events = inject('events')
@@ -293,16 +293,16 @@ export default {
293293

294294
// Initialize sort from query parameter, default to '-created' if invalid
295295
const validSorts = ['-created', 'created', '-modified', 'modified']
296-
const initialSort = validSorts.includes(route.query.sort)
297-
? route.query.sort
296+
const initialSort = validSorts.includes(route.query.sort)
297+
? route.query.sort
298298
: '-created'
299299
const sortBy = ref(initialSort)
300-
300+
301301
const visibleGenerations = ref(50)
302302
const pagedGenerations = computed(() => {
303303
return generations.value.slice(0, visibleGenerations.value)
304304
})
305-
305+
306306
const generations = computed(() => {
307307
let filtered = store.threadGenerations
308308

@@ -362,7 +362,7 @@ export default {
362362
query: { ...route.query, sort }
363363
})
364364
}
365-
365+
366366
function togglePlayButton(url, title) {
367367
if (refAudio.value?.player) {
368368
if (playAudio.value?.src === url) {
@@ -383,11 +383,11 @@ export default {
383383
}
384384
emit('selectGeneration', gen)
385385
}
386-
386+
387387
function isRegenerating(gen) {
388388
return regeneratingIdMap.value[gen.id] && new Date(regeneratingIdMap.value[gen.id]) >= new Date(gen.modifiedDate)
389389
}
390-
390+
391391
async function retryGeneration(gen) {
392392
regeneratingIdMap.value[gen.id] = gen.modifiedDate
393393
if (gen.result?.assets?.length) {
@@ -525,6 +525,7 @@ export default {
525525
toArtifacts,
526526
formatDuration,
527527
formatRating,
528+
matchesRating,
528529
setFilter,
529530
setSortBy,
530531
selectGeneration,

MyApp/wwwroot/pages/lib/utils.mjs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -216,6 +216,12 @@ export function formatRating(rating) {
216216
return rating?.replace('PG13', 'PG-13')
217217
}
218218

219+
export function matchesRating(a, b) {
220+
if (!a || !b) return true
221+
const normalize = r => r === 'PG-13' ? 'PG13' : r
222+
return normalize(a) === normalize(b)
223+
}
224+
219225
export function getRandomInt(min, max) {
220226
min = Math.ceil(min);
221227
max = Math.floor(max);

0 commit comments

Comments
 (0)