mirror of
https://github.com/utopia-os/utopia-ui.git
synced 2025-12-13 07:46:10 +00:00
Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com> Co-authored-by: antontranelis <31516529+antontranelis@users.noreply.github.com> Co-authored-by: Anton Tranelis <mail@antontranelis.de> Co-authored-by: mahula <lenzmath@posteo.de>
75 lines
2.6 KiB
TypeScript
75 lines
2.6 KiB
TypeScript
/**
|
|
* Utility functions for managing browser URL and history
|
|
*/
|
|
|
|
/**
|
|
* Updates the browser URL with an item ID while preserving query parameters
|
|
* @param itemId - The item UUID to add to the URL
|
|
*/
|
|
export function setItemInUrl(itemId: string): void {
|
|
const params = new URLSearchParams(window.location.search)
|
|
const paramsString = params.toString()
|
|
const newUrl = `/${itemId}${paramsString !== '' ? `?${paramsString}` : ''}`
|
|
window.history.pushState({}, '', newUrl)
|
|
}
|
|
|
|
/**
|
|
* Removes the item ID from the browser URL while preserving query parameters
|
|
*/
|
|
export function removeItemFromUrl(): void {
|
|
const params = new URLSearchParams(window.location.search)
|
|
const paramsString = params.toString()
|
|
const newUrl = `/${paramsString !== '' ? `?${paramsString}` : ''}`
|
|
window.history.pushState({}, '', newUrl)
|
|
}
|
|
|
|
/**
|
|
* Updates a specific query parameter in the URL while preserving the path
|
|
* @param key - The parameter key
|
|
* @param value - The parameter value
|
|
*/
|
|
export function setUrlParam(key: string, value: string): void {
|
|
const params = new URLSearchParams(window.location.search)
|
|
params.set(key, value)
|
|
const newUrl = window.location.pathname + '?' + params.toString()
|
|
window.history.pushState({}, '', newUrl)
|
|
}
|
|
|
|
/**
|
|
* Removes a specific query parameter from the URL
|
|
* @param key - The parameter key to remove
|
|
*/
|
|
export function removeUrlParam(key: string): void {
|
|
const params = new URLSearchParams(window.location.search)
|
|
params.delete(key)
|
|
const paramsString = params.toString()
|
|
const newUrl = window.location.pathname + (paramsString !== '' ? `?${paramsString}` : '')
|
|
window.history.pushState({}, '', newUrl)
|
|
}
|
|
|
|
/**
|
|
* Resets page title and OpenGraph meta tags to default values
|
|
*/
|
|
export function resetMetaTags(): void {
|
|
document.title = document.title.split('-')[0].trim()
|
|
document.querySelector('meta[property="og:title"]')?.setAttribute('content', document.title)
|
|
const description = document.querySelector('meta[name="description"]')?.getAttribute('content')
|
|
if (description) {
|
|
document.querySelector('meta[property="og:description"]')?.setAttribute('content', description)
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Updates page title and OpenGraph meta tags with item information
|
|
* @param itemName - The name of the item
|
|
* @param itemText - The text/description of the item
|
|
*/
|
|
export function updateMetaTags(itemName: string, itemText?: string): void {
|
|
const baseTitle = document.title.split('-')[0].trim()
|
|
document.title = `${baseTitle} - ${itemName}`
|
|
document.querySelector('meta[property="og:title"]')?.setAttribute('content', itemName)
|
|
if (itemText) {
|
|
document.querySelector('meta[property="og:description"]')?.setAttribute('content', itemText)
|
|
}
|
|
}
|