Feat : tag system
This commit is contained in:
@@ -866,6 +866,35 @@ export interface LogEntry {
|
||||
event: AgentEvent | null;
|
||||
}
|
||||
|
||||
/**
|
||||
* Étiquette librement créée par l'opérateur, posable sur autant de profils
|
||||
* qu'on veut.
|
||||
*
|
||||
* Une entité à part entière plutôt qu'un simple texte répété sur chaque profil :
|
||||
* c'est ce qui permet de la renommer d'un geste, et de la garder disponible
|
||||
* même quand plus aucun profil ne la porte.
|
||||
*/
|
||||
export interface Tag {
|
||||
id: string;
|
||||
name: string;
|
||||
}
|
||||
|
||||
/** Limite de saisie : au-delà, l'étiquette ne tient plus dans une vignette. */
|
||||
export const TAG_MAX_LENGTH = 24;
|
||||
|
||||
/**
|
||||
* Nettoie un nom d'étiquette saisi, ou renvoie `null` s'il ne reste rien.
|
||||
*
|
||||
* Les espaces intérieurs sont réduits et les extrémités coupées : « en soirée »
|
||||
* et « en soirée » désignent la même étiquette, et les laisser cohabiter ferait
|
||||
* deux entrées indiscernables à l'œil dans la liste des filtres.
|
||||
*/
|
||||
export function normalizeTagName(raw: unknown): string | null {
|
||||
if (typeof raw !== 'string') return null;
|
||||
const name = raw.replace(/\s+/g, ' ').trim().slice(0, TAG_MAX_LENGTH);
|
||||
return name.length > 0 ? name : null;
|
||||
}
|
||||
|
||||
/**
|
||||
* Profil surveillé par le serveur : on colle l'URL d'un streamer, le serveur
|
||||
* sonde son statut et signale les passages en direct.
|
||||
@@ -914,6 +943,16 @@ export interface WatchTarget {
|
||||
lastError: string | null;
|
||||
createdAt: number;
|
||||
|
||||
/**
|
||||
* Étiquettes libres posées par l'opérateur, pour trier une liste qui grandit.
|
||||
*
|
||||
* Embarquées dans le profil plutôt que référencées par identifiant : la liste
|
||||
* part déjà en entier à chaque mise à jour temps réel, et une poignée de noms
|
||||
* ne pèse rien à côté. Le dashboard n'a de ce fait aucune seconde liste à
|
||||
* tenir à jour pour afficher une vignette.
|
||||
*/
|
||||
tags: Tag[];
|
||||
|
||||
/** Photo de profil. */
|
||||
avatarUrl: string | null;
|
||||
/**
|
||||
|
||||
Reference in New Issue
Block a user