Changeset View
Changeset View
Standalone View
Standalone View
lib/types/avatar-types.js
// @flow | // @flow | ||||
import t, { type TUnion } from 'tcomb'; | |||||
import type { CreateUpdatesResult } from './update-types.js'; | import type { CreateUpdatesResult } from './update-types.js'; | ||||
import { tShape, tString } from '../utils/validation-utils.js'; | |||||
export type EmojiAvatarDBContent = { | export type EmojiAvatarDBContent = { | ||||
+type: 'emoji', | +type: 'emoji', | ||||
+emoji: string, | +emoji: string, | ||||
+color: string, // hex, without "#" or "0x" | +color: string, // hex, without "#" or "0x" | ||||
}; | }; | ||||
const emojiAvatarDBContentValidator = tShape<EmojiAvatarDBContent>({ | |||||
type: tString('emoji'), | |||||
emoji: t.String, | |||||
color: t.String, | |||||
}); | |||||
export type ImageAvatarDBContent = { | export type ImageAvatarDBContent = { | ||||
+type: 'image', | +type: 'image', | ||||
+uploadID: string, | +uploadID: string, | ||||
}; | }; | ||||
export type ENSAvatarDBContent = { | export type ENSAvatarDBContent = { | ||||
+type: 'ens', | +type: 'ens', | ||||
}; | }; | ||||
const ensAvatarDBContentValidator = tShape({ type: tString('ens') }); | |||||
export type AvatarDBContent = | export type AvatarDBContent = | ||||
| EmojiAvatarDBContent | | EmojiAvatarDBContent | ||||
| ImageAvatarDBContent | | ImageAvatarDBContent | ||||
| ENSAvatarDBContent; | | ENSAvatarDBContent; | ||||
export type UpdateUserAvatarRemoveRequest = { +type: 'remove' }; | export type UpdateUserAvatarRemoveRequest = { +type: 'remove' }; | ||||
export type UpdateUserAvatarRequest = | export type UpdateUserAvatarRequest = | ||||
| AvatarDBContent | | AvatarDBContent | ||||
| UpdateUserAvatarRemoveRequest; | | UpdateUserAvatarRemoveRequest; | ||||
export type ClientEmojiAvatar = EmojiAvatarDBContent; | export type ClientEmojiAvatar = EmojiAvatarDBContent; | ||||
const clientEmojiAvatarValidator = emojiAvatarDBContentValidator; | |||||
export type ClientImageAvatar = { | export type ClientImageAvatar = { | ||||
+type: 'image', | +type: 'image', | ||||
+uri: string, | +uri: string, | ||||
}; | }; | ||||
const clientImageAvatarValidator = tShape<ClientImageAvatar>({ | |||||
type: tString('image'), | |||||
uri: t.String, | |||||
}); | |||||
export type ClientENSAvatar = ENSAvatarDBContent; | export type ClientENSAvatar = ENSAvatarDBContent; | ||||
const clientENSAvatarValidator = ensAvatarDBContentValidator; | |||||
export type ClientAvatar = | export type ClientAvatar = | ||||
| ClientEmojiAvatar | | ClientEmojiAvatar | ||||
| ClientImageAvatar | | ClientImageAvatar | ||||
| ClientENSAvatar; | | ClientENSAvatar; | ||||
export const clientAvatarValidator: TUnion<ClientAvatar> = t.union([ | |||||
clientEmojiAvatarValidator, | |||||
clientImageAvatarValidator, | |||||
clientENSAvatarValidator, | |||||
]); | |||||
export type ResolvedClientAvatar = ClientEmojiAvatar | ClientImageAvatar; | export type ResolvedClientAvatar = ClientEmojiAvatar | ClientImageAvatar; | ||||
export type UpdateUserAvatarResponse = { | export type UpdateUserAvatarResponse = { | ||||
+updates: CreateUpdatesResult, | +updates: CreateUpdatesResult, | ||||
}; | }; |