-
Notifications
You must be signed in to change notification settings - Fork 3
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Allow custom room names #315
base: main
Are you sure you want to change the base?
Conversation
Following numerous user requests, add support for personalized room names alongside our existing generated IDs. This pattern, inherited from Jitsi Meet, allows teams to create memorable, persistent meeting spaces like "daily-standup" or "teamalpha" instead of relying only on auto-generated IDs. Note: This change introduces a permanent update to room URL patterns. Once custom room links are shared, we will need to maintain support for both formats to avoid breaking existing shared URLs.
Display a "personalized" link modal, inspired by Whereby. The UX and the UI are still cumberstome, however it's fully functional and accessible. It's a "okay" v0, allowing users creating their custom link. Thus we can study this feature traction, and decide whether or not prioritize this feature in the UX.
@manuhabitela create a well-documented modal for users trying to join a meeting. Update it with the last room's link format introduced.
Make the validation rules more maintainable and reusable across the codebase. Particularly useful when these values need to be referenced in multiple validation contexts. The personalize room's link modal needs a step-by-step validation.
e44e52c
to
69457a0
Compare
Discussed IRL with Arnaud: with should at least enforce 10char, and at first enables this feature with a feature flag, to only our top users, and gather early feedback. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Nice job bud
Tbh I still have doubts about real needs for this feature as gmeet does not implement it. But anyway if users request it and it increase the adoption, lez go ;) !!
"heading": "Votre lien personnalisé", | ||
"label": "Votre lien personnalisé", | ||
"submit": "Créer", | ||
"placeholder": "standupbizdev", |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
WDYT about French placeholder?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I felt bizdev was kinda french, but would you prefer, "equipecom" or smth else?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Maybe like "Réunion Hebdo" or smth?
) | ||
.catch((e) => { | ||
const msg = | ||
e.statusCode === 400 |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Related to my comment about error names: what if there are multiple possible errors with the same http code?
Not to fix now ofc
const [serverErrors, setServerErrors] = useState<Array<string>>([]) | ||
|
||
const onSubmit = (e: FormEvent<HTMLFormElement>) => { | ||
e.preventDefault() |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
why?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I may have overlooked something in the React Aria documentation, but this is the approach I found to prevent a HTML form from being submitted and navigating to a URL suffixed with a question mark.
const validationErrors = [] | ||
if (roomSlug.length < 5) { | ||
validationErrors.push(t('errors.validation.length')) | ||
} | ||
if (!roomSlug.match(/^[a-z0-9]+$/)) { | ||
validationErrors.push(t('errors.validation.spaceOrSpecialCharacter')) | ||
} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I like how simple this approach is were most of devs wants to use libraries to validate their forms :)
const errors = [...validationErrors, ...serverErrors] | ||
|
||
return ( | ||
<Dialog isOpen={!!isOpen} {...dialogProps} title={t('heading')}> |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Agree, we have a poor mobile UX.
onAction={() => { | ||
setIsPersonalizeModalOpen(true) | ||
}} | ||
data-attr="create-option-personalize" |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
What is it used for ?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
It's used by Posthog to scrap event data!
In fact, it is, the form is disabled if it's invalid. But indeed the style is needed. |
I think it's the default Django error formats inherited from Joanie. Broader refactoring, to be honest. |
Purpose
Inspired by Jitsi's user-friendly approach, adds support for custom room names (e.g., 'team-standup', 'daily-meeting') in addition to the existing system-generated IDs (e.g., 'abc-defg-hij').
/!\ Breaking change: This introduces a permanent update to room URL patterns. Since both formats (system-generated and custom) will be shareable links, we must maintain backwards compatibility to avoid breaking existing URLs.
Proposal
Proposed UX. The UI is quite poor, will enhance it in the next iterations!
Enregistrement.de.l.ecran.2025-01-21.a.21.05.28.mov