peertube-plugin-livechat/client/common/configuration/register.ts

74 lines
2.5 KiB
TypeScript
Raw Normal View History

2024-05-23 09:42:14 +00:00
// SPDX-FileCopyrightText: 2024 John Livingston <https://www.john-livingston.fr/>
2024-05-23 15:17:28 +00:00
// SPDX-FileCopyrightText: 2024 Mehdi Benadel <https://mehdibenadel.com>
2024-05-23 09:42:14 +00:00
//
// SPDX-License-Identifier: AGPL-3.0-only
2023-08-08 15:15:05 +00:00
import type { RegisterClientOptions } from '@peertube/peertube-types/client'
import { html, render } from 'lit'
2024-05-23 14:56:11 +00:00
import './elements' // Import all needed elements.
import { registerClientOptionsSubject$ } from '../lib/contexts/peertube'
2023-08-08 15:15:05 +00:00
2023-08-08 16:26:40 +00:00
/**
* Registers stuff related to the user's configuration pages.
2023-08-08 16:26:40 +00:00
* @param clientOptions Peertube client options
*/
async function registerConfiguration (clientOptions: RegisterClientOptions): Promise<void> {
2023-08-08 15:15:05 +00:00
const { peertubeHelpers, registerClientRoute, registerHook } = clientOptions
const settings = await peertubeHelpers.getSettings()
if (settings['disable-channel-configuration']) { return }
registerClientOptionsSubject$.next(clientOptions)
2023-08-08 15:15:05 +00:00
registerClientRoute({
route: 'livechat/configuration',
2023-08-08 15:15:05 +00:00
onMount: async ({ rootEl }) => {
2024-05-23 13:52:12 +00:00
render(html`<livechat-channel-home .registerClientOptions=${clientOptions}></livechat-channel-home>`, rootEl)
2023-08-08 15:15:05 +00:00
}
})
2023-08-08 16:26:40 +00:00
registerClientRoute({
route: 'livechat/configuration/channel',
2023-08-08 16:26:40 +00:00
onMount: async ({ rootEl }) => {
const urlParams = new URLSearchParams(window.location.search)
const channelId = urlParams.get('channelId') ?? ''
2024-05-23 13:52:12 +00:00
render(html`<livechat-channel-configuration .registerClientOptions=${clientOptions}
.channelId=${channelId}></livechat-channel-configuration>`, rootEl)
2023-08-08 16:26:40 +00:00
}
})
2023-08-08 15:15:05 +00:00
registerHook({
target: 'filter:left-menu.links.create.result',
handler: async (links: any) => {
// Adding the links to livechat/configuration for logged users.
2023-08-08 15:15:05 +00:00
if (!peertubeHelpers.isLoggedIn()) { return links }
if (!Array.isArray(links)) { return links }
let myLibraryLinks
// Searching the 'in-my-library' entry.
for (const link of links) {
if (typeof link !== 'object') { continue }
if (!('key' in link)) { continue }
if (link.key !== 'in-my-library') { continue }
myLibraryLinks = link
break
}
if (!myLibraryLinks) { return links }
if (!Array.isArray(myLibraryLinks.links)) { return links }
const label = await peertubeHelpers.translate(LOC_MENU_CONFIGURATION_LABEL)
2023-08-08 15:15:05 +00:00
myLibraryLinks.links.push({
label,
shortLabel: label,
path: '/p/livechat/configuration',
2023-08-08 15:15:05 +00:00
icon: 'live'
})
return links
}
})
}
export {
registerConfiguration
2023-08-08 15:15:05 +00:00
}