* Use ALF for signup flow, improve a11y of signup * adjust padding * rm log * org imports * clarify allowance of hyphens Co-authored-by: surfdude29 <149612116+surfdude29@users.noreply.github.com> * fix a few accessibility items * Standardise date input across platforms (#3223) * make the date input consistent across platforms * integrate into new signup form * rm log * add transitions * show correct # of steps * use `FormError` * animate buttons * use `ScreenTransition` * fix android text overflow via flex -> flex_1 * change button color * (android) make date input the same height as others * fix deps * fix deps --------- Co-authored-by: surfdude29 <149612116+surfdude29@users.noreply.github.com> Co-authored-by: Samuel Newman <mozzius@protonmail.com>
52 lines
1.6 KiB
TypeScript
52 lines
1.6 KiB
TypeScript
// Regex from the go implementation
|
|
// https://github.com/bluesky-social/indigo/blob/main/atproto/syntax/handle.go#L10
|
|
const VALIDATE_REGEX =
|
|
/^([a-zA-Z0-9]([a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?\.)+[a-zA-Z]([a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?$/
|
|
|
|
export function makeValidHandle(str: string): string {
|
|
if (str.length > 20) {
|
|
str = str.slice(0, 20)
|
|
}
|
|
str = str.toLowerCase()
|
|
return str.replace(/^[^a-z0-9]+/g, '').replace(/[^a-z0-9-]/g, '')
|
|
}
|
|
|
|
export function createFullHandle(name: string, domain: string): string {
|
|
name = (name || '').replace(/[.]+$/, '')
|
|
domain = (domain || '').replace(/^[.]+/, '')
|
|
return `${name}.${domain}`
|
|
}
|
|
|
|
export function isInvalidHandle(handle: string): boolean {
|
|
return handle === 'handle.invalid'
|
|
}
|
|
|
|
export function sanitizeHandle(handle: string, prefix = ''): string {
|
|
return isInvalidHandle(handle) ? '⚠Invalid Handle' : `${prefix}${handle}`
|
|
}
|
|
|
|
export interface IsValidHandle {
|
|
handleChars: boolean
|
|
hyphenStartOrEnd: boolean
|
|
frontLength: boolean
|
|
totalLength: boolean
|
|
overall: boolean
|
|
}
|
|
|
|
// More checks from https://github.com/bluesky-social/atproto/blob/main/packages/pds/src/handle/index.ts#L72
|
|
export function validateHandle(str: string, userDomain: string): IsValidHandle {
|
|
const fullHandle = createFullHandle(str, userDomain)
|
|
|
|
const results = {
|
|
handleChars:
|
|
!str || (VALIDATE_REGEX.test(fullHandle) && !str.includes('.')),
|
|
hyphenStartOrEnd: !str.startsWith('-') && !str.endsWith('-'),
|
|
frontLength: str.length >= 3,
|
|
totalLength: fullHandle.length <= 253,
|
|
}
|
|
|
|
return {
|
|
...results,
|
|
overall: !Object.values(results).includes(false),
|
|
}
|
|
}
|