Merge remote-tracking branch 'hub/dev' into hotfix/following

This commit is contained in:
Untone 2024-01-31 15:43:44 +03:00
commit 9e7a7ad8d2
4 changed files with 23 additions and 4 deletions

6
package-lock.json generated
View File

@ -14,6 +14,7 @@
"@solid-primitives/pagination": "0.2.10", "@solid-primitives/pagination": "0.2.10",
"cropperjs": "1.6.1", "cropperjs": "1.6.1",
"form-data": "4.0.0", "form-data": "4.0.0",
"ga-gtag": "1.2.0",
"i18next": "22.4.15", "i18next": "22.4.15",
"i18next-icu": "2.3.0", "i18next-icu": "2.3.0",
"idb": "7.1.1", "idb": "7.1.1",
@ -9531,6 +9532,11 @@
"url": "https://github.com/sponsors/ljharb" "url": "https://github.com/sponsors/ljharb"
} }
}, },
"node_modules/ga-gtag": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/ga-gtag/-/ga-gtag-1.2.0.tgz",
"integrity": "sha512-j9gxutMdpGMdwaX1SzOG31Ddm+IGFjeNf+N3Z5g+BBpS8FSXOALlrM+ORIGc/QKszGJEDlw+6PfIsJZICsqsGQ=="
},
"node_modules/gensync": { "node_modules/gensync": {
"version": "1.0.0-beta.2", "version": "1.0.0-beta.2",
"resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz",

View File

@ -34,6 +34,7 @@
"@solid-primitives/pagination": "0.2.10", "@solid-primitives/pagination": "0.2.10",
"cropperjs": "1.6.1", "cropperjs": "1.6.1",
"form-data": "4.0.0", "form-data": "4.0.0",
"ga-gtag": "1.2.0",
"i18next": "22.4.15", "i18next": "22.4.15",
"i18next-icu": "2.3.0", "i18next-icu": "2.3.0",
"idb": "7.1.1", "idb": "7.1.1",

View File

@ -1,3 +1,4 @@
import { gtag } from 'ga-gtag'
import { createSignal, For, lazy, Show } from 'solid-js' import { createSignal, For, lazy, Show } from 'solid-js'
import { useLocalize } from '../../../context/localize' import { useLocalize } from '../../../context/localize'
@ -24,6 +25,8 @@ type Props = {
onChangeMediaIndex?: (direction: 'up' | 'down', index) => void onChangeMediaIndex?: (direction: 'up' | 'down', index) => void
} }
const getMediaTitle = (itm: MediaItem, idx: number) => `${idx}. ${itm.artist} - ${itm.title}`
export const PlayerPlaylist = (props: Props) => { export const PlayerPlaylist = (props: Props) => {
const { t } = useLocalize() const { t } = useLocalize()
const [activeEditIndex, setActiveEditIndex] = createSignal(-1) const [activeEditIndex, setActiveEditIndex] = createSignal(-1)
@ -34,6 +37,15 @@ export const PlayerPlaylist = (props: Props) => {
const handleMediaItemFieldChange = (field: keyof MediaItem, value: string) => { const handleMediaItemFieldChange = (field: keyof MediaItem, value: string) => {
props.onMediaItemFieldChange(activeEditIndex(), field, value) props.onMediaItemFieldChange(activeEditIndex(), field, value)
} }
const play = (index: number) => {
const mi = props.media[index]
gtag('event', 'select_item', {
item_list_id: props.articleSlug,
item_list_name: getMediaTitle(mi, index),
items: props.media.map((it, ix) => getMediaTitle(it, ix)),
})
}
return ( return (
<ul class={styles.playlist}> <ul class={styles.playlist}>
<For each={props.media}> <For each={props.media}>
@ -42,7 +54,7 @@ export const PlayerPlaylist = (props: Props) => {
<div class={styles.playlistItem}> <div class={styles.playlistItem}>
<button <button
class={styles.playlistItemPlayButton} class={styles.playlistItemPlayButton}
onClick={() => props.onPlayMedia(index())} onClick={() => play(index())}
type="button" type="button"
aria-label="Play" aria-label="Play"
> >

View File

@ -4,6 +4,7 @@ import { getPagePath } from '@nanostores/router'
import { createPopper } from '@popperjs/core' import { createPopper } from '@popperjs/core'
import { Link, Meta } from '@solidjs/meta' import { Link, Meta } from '@solidjs/meta'
import { clsx } from 'clsx' import { clsx } from 'clsx'
import { install } from 'ga-gtag'
import { createEffect, For, createMemo, onMount, Show, createSignal, onCleanup, on } from 'solid-js' import { createEffect, For, createMemo, onMount, Show, createSignal, onCleanup, on } from 'solid-js'
import { isServer } from 'solid-js/web' import { isServer } from 'solid-js/web'
@ -321,9 +322,8 @@ export const FullArticle = (props: Props) => {
) )
onMount(async () => { onMount(async () => {
await loadReactionsBy({ install('G-LQ4B87H8C2')
by: { shout: props.article.slug }, await loadReactionsBy({ by: { shout: props.article.slug } })
})
setIsReactionsLoaded(true) setIsReactionsLoaded(true)
document.title = props.article.title document.title = props.article.title
window?.addEventListener('resize', updateIframeSizes) window?.addEventListener('resize', updateIframeSizes)