oralify-common
Version:
Public shared repository for Oralify
835 lines (817 loc) • 20 kB
text/typescript
import { TimeSlotType } from './availabilityExpertTypes';
import { palette } from '../utils/design';
import { gImages } from '../mock/gImages';
export enum ServiceFormatKey {
person = 'person',
audio = 'audio',
/*'message' = 'mensaje',*/
video = 'video',
call = 'call'
}
export const serviceFormatMap: Record<
ServiceFormatKey,
ServiceType & {
emoji?: string;
icon?: string;
image?: string;
defaults?: Partial<ServiceType & { highlight?: boolean }>[];
}
> = {
[]: {
duration: 2.5,
name: 'Audio',
icon: 'mic',
image: gImages.audioMessage,
emoji: '🎤',
description: 'Responde mensajes de audio en' + ' cualquier momento y lugar',
format: ServiceFormatKey.audio,
defaults: [
{
format: ServiceFormatKey.audio,
price: 1,
duration: 1,
name: 'Consulta Rápida'
},
{
format: ServiceFormatKey.audio,
price: 3,
duration: 5,
name: 'Duda específica'
}, // 5'
{
format: ServiceFormatKey.audio,
price: 4,
duration: 10,
name: 'Profundizar sobre un tema',
highlight: true
}
]
},
[]: {
duration: 10,
name: 'Llamada',
image: gImages.call,
icon: 'phone',
emoji: '📞',
description: 'Agenda llamadas para resolver dudas puntuales',
format: ServiceFormatKey.call,
defaults: [
{
price: 10,
duration: 15,
name: 'Consulta puntual'
},
{
price: 20,
duration: 30,
name: 'Conversación Extendida',
highlight: true
}
]
},
[]: {
icon: 'video',
name: 'Videollamada',
image: gImages.video,
format: ServiceFormatKey.video,
description: 'Conéctate a través de video desde cualquier lugar',
emoji: '📹',
duration: 20,
defaults: [
{
price: 10,
duration: 15,
highlight: true,
name: 'Videoconsulta Exprés'
},
{
price: 20,
duration: 30,
name: 'Diálogo en Video'
},
{
price: 40,
duration: 45,
name: 'Análisis en Video'
},
{
price: 50,
duration: 60,
name: 'Sesión de video'
}
]
},
[]: {
icon: 'people',
name: 'En persona',
image:
'https://img.freepik.com/free-vector/interview-concept-illustration_114360-1501.jpg?w=2000&t=st=1688337692~exp=1688338292~hmac=38e6a84c27daa12639131fa66f4d57f1500f81ddf0028d1d13d5c62ff30618bf',
format: ServiceFormatKey.person,
description: 'Programa un encuentro en persona para asesoría detallada',
emoji: '👥',
duration: 180,
defaults: [
{
price: 50,
duration: 60,
name: 'Encuentro Personalizado'
},
{
price: 75,
duration: 90,
name: 'Análisis en Profundidad',
highlight: true
}
]
}
};
export type SpecialityBackendType = {
id?: string;
specialityKey?: SpecialityKey;
} & SpecialityMapType;
export type SpecialityMapType = {
id?: string;
specialityKey?: SpecialityKey;
color?: string;
icon?: string; // TODO Deprecate in favor of emoji
emoji?: string;
keywords?: string[];
name: string;
};
export type ServiceBackendType = {
id?: string;
name?: string; // defaults to: "consulta en ${gSpecialities[specialityKey].name}"
expertId?: string; //user uid
speciality?: SpecialityKey; // TODO @cuaresma check I should receive the
keywords?: string[];
description?: string;
address?: string; // Only for format.inPerson
price?: number;
duration?: number;
format?: ServiceFormatKey; // defaults to: ServiceFormatKey.video
};
/** For frontend to print evertyhing*/
export type ServiceType = ServiceBackendType & {
time_slots?: TimeSlotType[]; // Backend generates that based on
};
export type FilterType = SpecialityMapType & {
selected?: boolean;
};
export type ServiceFormatType = {
selected: boolean;
serviceDetails: ServiceType[];
};
export type ServiceMapType = {
[]?: ServiceType[];
};
export enum SpecialityKey {
psycho = 'psycho',
interviewPractice = 'interviewPractice',
/*listener = 'listener',*/
language = 'language',
computer = 'computer',
physiotherapist = 'physiotherapist',
personalTrainer = 'personalTrainer',
dance = 'dance',
/*dreamInterpret = 'dreamInterpret',*/
/*astrology = 'astrology',*/
travel = 'travel',
onlineTutor = 'onlineTutor',
careerPath = 'careerPath',
financialAdvisor = 'financialAdvisor',
startupAdvisor = 'startupAdvisor',
realState = 'realState',
influencer = 'influencer',
theatre = 'theatre',
film = 'film',
/*parenting = 'parenting',*/
/*relationships = 'relationships',*/
design = 'design',
personalImage = 'personalImage',
productivity = 'productivity',
legalAdvisor = 'legalAdvisor',
nutrition = 'nutrition',
marketing = 'marketing',
artAndCraft = 'artAndCraft',
architecture = 'architecture',
science = 'science',
sustainability = 'sustainability',
spirituality = 'spirituality',
eventPlanning = 'eventPlanning',
musicProduction = 'musicProduction',
sales = 'sales',
oratory = 'oratory',
frontend = 'frontend',
backend = 'backend',
techSupport = 'techSupport'
}
export const gSpecialities: Record<SpecialityKey, SpecialityMapType> = {
/*[SpecialityKey.listener]: {
name: 'Escucha',
emoji: '👂',
icon: 'hearing'
},*/
[]: {
icon: 'psychology',
name: 'Psicología',
emoji: '👩⚕️',
keywords: [
'psicoterapia',
'sexología',
'relaciones',
'neuropsicología',
'infantil',
'sueños',
'ansiedad',
'depresión',
'patologías',
'cognitivoConductual',
'trastornoDeAnsiedad'
]
},
[]: {
name: 'Nutrición',
emoji: '🥑',
icon: 'food-variant',
keywords: [
'dieta',
'suplementación',
'nutriciónDeportiva',
'obesidad',
'alergiasAlimentarias',
'veganismo'
]
},
[]: {
name: 'Fisioterapia',
emoji: '💆♀️',
icon: 'massage',
keywords: [
'rehabilitación',
'masajeTerapéutico',
'terapiaManual',
'kinesioterapia',
'osteopatía',
'kinesiología',
'electroterapia',
'ultrasonidoTerapéutico',
'hidroterapia',
'terapiaRespiratoria',
'acupuntura',
'pilatesTerapéutico',
'drenajeLinfático',
'preparaciónFísica',
'prevenciónDeLesiones',
'quiropráctica',
'fisioterapiaDeportiva',
'fisioterapiaNeurológica',
'fisioterapiaPediátrica',
'fisioterapiaGeriátrica',
'técnicasDeRelajación',
'movilizaciónArticular',
'ejerciciosDeFortalecimiento',
'terapiaConLáser',
'magnetoterapia',
'tapingNeuromuscular',
'punciónSeca'
]
},
[]: {
name: 'Baile',
emoji: '💃',
icon: 'dance',
keywords: ['bachata', 'salsa', 'salsaCubana', 'cumbia', 'hipHop', 'jazz']
},
[]: {
name: 'Deporte',
emoji: '💪',
icon: 'dumbbell',
keywords: [
'fitness',
'artesMarciales',
'gimnasia',
'boxeo',
'raqueta',
'yoga',
'entrenamiento',
'musculación',
'cardio'
]
},
[]: {
name: 'Startup',
emoji: '🚀',
icon: 'rocket',
keywords: [
'emprendimiento',
'financiación',
'mentoría',
'tecnología',
'negocios',
'innovación',
'AI'
]
},
/*[SpecialityKey.relationships]: {
name: 'Relaciones',
emoji: '💞',
icon: 'heart'
},*/
[]: {
name: 'Derecho',
emoji: '⚖️',
icon: 'scale-balance',
keywords: [
'laboral',
'mercantil',
'extranjería',
'sucesiones',
'embargos',
'civil',
'penal',
'fiscal',
'familia',
'administrativo',
'constitucional',
'comercial',
'financiero'
]
},
[]: {
name: 'Entrevistas',
emoji: '💼',
icon: 'microphone',
keywords: ['entrevistas', 'testDeInteligencia', 'speech', 'CV']
},
[]: {
name: 'Idiomas',
emoji: '💬',
icon: 'translate',
keywords: [
'inglés',
'francés',
'español',
'aleman',
'gramática',
'pronunciación'
]
},
[]: {
name: 'Inmobiliaria',
emoji: '🏠',
icon: 'home',
keywords: [
'venta',
'alquiler',
'hipotecas',
'inversión',
'reformas',
'tasación',
'construcción',
'mercado'
]
},
[]: {
name: 'Productividad',
emoji: '⏰',
icon: 'clock',
keywords: ['gestiónDelTiempo', 'crecimiento', 'relaciones']
},
[]: {
name: 'Informática',
emoji: '💻',
icon: 'laptop',
keywords: [
'hardware',
'software',
'hacking',
'redes',
'seguridadInformática',
'baseDeDatos',
'sistemasOperativos'
]
},
[]: {
name: 'Ventas',
emoji: '💰',
icon: 'money',
keywords: ['ventas', 'negocios', 'marketing', 'publicidad']
},
[]: {
name: 'Oratoria',
emoji: '🎙️',
icon: 'microphone',
keywords: [
'oratoria',
'canto',
'pronunciación',
'speech',
'entrevistas',
'pitch'
]
},
[]: {
name: 'Frontend',
emoji: '📱',
icon: 'web',
keywords: [
'html',
'mobile',
'react-native',
'css',
'javascript',
'react',
'angular'
]
},
[]: {
name: 'Backend',
emoji: '📟',
icon: 'computer',
keywords: [
'node.js',
'python',
'java',
'php',
'infraestructura',
'sql',
'aws',
'azure',
'docker'
]
},
[]: {
name: 'Sop. Técnico',
emoji: '🔧',
icon: 'wrench',
keywords: ['soporte', 'técnico', 'cableado', 'infraestructura']
},
[]: {
name: 'Sostenibilidad',
emoji: '♻️',
icon: 'eco',
keywords: ['sostenibilidad', 'innovación', 'footprint', 'reciclaje']
},
[]: {
name: 'Viajes',
emoji: '🌍️',
icon: 'earth',
keywords: [
'destinos',
'mochilero',
'ahorro',
'gastronómicos',
'cultura',
'aventura',
'guiados',
'recomendaciones'
]
},
[]: {
name: 'Espiritualidad',
emoji: '💫',
icon: 'religious-christian',
keywords: [
'tarot',
'floresDeBach',
'judaismo',
'buddhismo',
'cristianismo',
'paganismo',
'crisisDeFe'
]
},
[]: {
name: 'Eventos',
emoji: '📅',
icon: 'party-popper',
keywords: [
'wedding',
'birthday',
'anniversary',
'party',
'company',
'team building'
]
},
[]: {
name: 'Música',
emoji: '🎵',
icon: 'music-note',
keywords: [
'instrumentos',
'canto',
'producciónMusical',
'composición',
'teoríaMusical',
'guitarra',
'piano',
'batería',
'producción',
'mezclaDJ',
'grabación',
'composición',
'instrumentos'
]
},
[]: {
name: 'Cine',
emoji: '🎥',
icon: 'film',
keywords: [
'producción',
'dirección',
'guion',
'edición',
'sonido',
'cámara',
'iluminación'
]
},
/*[SpecialityKey.parenting]: {
name: 'Maternidad',
emoji: '👨👩👧',
icon: 'family',
keywords: ['maternidad', 'infancia', 'adolescencia']
},*/
[]: {
name: 'Diseño',
emoji: '📐',
icon: 'palette',
keywords: [
'UX',
'UI',
'gráfico',
'copywriter',
'Product',
'Animaciones',
'editorial',
'web',
'interior',
'moda'
]
},
[]: {
name: 'Estilismo',
emoji: '💅',
icon: 'emoticon-glamour'
},
[]: {
name: 'Finanzas',
emoji: '💰',
icon: 'currency-usd',
keywords: [
'inversión',
'ahorro',
'criptomonedas',
'impuestos',
'planificaciónFinanciera',
'asesoríaFiscal',
'inversiones',
'finanzasPersonales',
'créditos',
'bolsa',
'planificación',
'macroeconomía',
'microeconomía',
'bolsa'
]
},
[]: {
name: 'Influencer',
emoji: '📸',
icon: 'camera'
},
[]: {
name: 'Teatro',
emoji: '🎭',
icon: 'drama-masks'
},
/*[SpecialityKey.dreamInterpret]: {
name: 'Sueños',
emoji: '😴',
icon: 'power-sleep'
},*/
[]: {
name: 'Clases Particulares',
emoji: '📚',
icon: 'book-open-variant',
keywords: [
'matemáticas',
'física',
'química',
'idiomas',
'ingles',
'español'
]
},
[]: {
name: 'Plan de carrera ',
emoji: '🎓',
icon: 'book-open-variant',
keywords: [
'carrera',
'universidad',
'escuela',
'formación',
'estudios',
'becas'
]
},
[]: {
name: 'Marketing',
emoji: '🔍',
icon: 'book-open-variant',
keywords: [
'publicidad',
'SEO',
'SEM',
'socialMedia',
'emailMarketing',
'contentMarketing'
]
},
[]: {
name: 'Arte y Manualidades',
emoji: '🎨',
icon: 'art-palette',
keywords: ['pintura', 'escultura', 'cerámica', 'dibujo', 'manualidades']
},
[]: {
name: 'Arquitectura',
emoji: '🏛️',
icon: 'column',
keywords: [
'construcción',
'diseñoInteriores',
'urbanismo',
'restauración',
'paisajismo'
]
},
[]: {
name: 'Ciencias',
emoji: '🔬',
icon: 'microscope',
keywords: ['biología', 'química', 'física', 'astronomía', 'biotecnología']
}
};
export type SpecialityCategoryKey = Record<
string,
{
name: string;
emoji: string;
services: SpecialityKey[];
}
>;
export const specialityCategories: SpecialityCategoryKey = {
healthAndWellness: {
name: 'Bienestar',
emoji: '💪',
services: [
SpecialityKey.nutrition,
SpecialityKey.personalTrainer,
SpecialityKey.physiotherapist,
SpecialityKey.psycho, // Incluye parenting y listener
SpecialityKey.spirituality
]
},
personalDevelopment: {
name: 'Desarrollo Personal',
emoji: '🌟',
services: [
SpecialityKey.oratory,
SpecialityKey.personalImage,
SpecialityKey.travel,
SpecialityKey.sustainability,
SpecialityKey.productivity,
SpecialityKey.influencer
]
},
businessAndSustainability: {
name: 'Negocios',
emoji: '💼',
services: [
SpecialityKey.legalAdvisor,
SpecialityKey.realState,
SpecialityKey.financialAdvisor,
SpecialityKey.startupAdvisor,
SpecialityKey.marketing,
SpecialityKey.sales
]
},
technology: {
name: 'Tecnología',
emoji: '👨🏻💻',
services: [
SpecialityKey.computer,
SpecialityKey.frontend,
SpecialityKey.backend,
SpecialityKey.techSupport
]
},
learningAndEducation: {
name: 'Aprendizaje',
emoji: '🎓',
services: [
SpecialityKey.careerPath,
SpecialityKey.interviewPractice,
SpecialityKey.onlineTutor,
SpecialityKey.language,
SpecialityKey.science
]
},
lifestyleAndArts: {
name: 'Artes',
emoji: '👨🎨',
services: [
SpecialityKey.design,
SpecialityKey.musicProduction,
SpecialityKey.film,
SpecialityKey.theatre,
SpecialityKey.artAndCraft,
SpecialityKey.architecture,
SpecialityKey.dance
]
}
};
export const ideaMap = {
ideas: {
name: 'Ideas',
emoji: '💡'
},
problemas: {
name: 'Problemas',
emoji: '😡'
},
pensamientos: {
name: 'Pensamientos',
emoji: '💭'
},
dudas: {
name: 'Dudas',
emoji: '🤔'
},
emociones: {
name: 'Emociones',
emoji: '🥹'
},
goals: {
name: 'Metas',
emoji: '🎯'
},
motivation: {
name: 'motivación',
emoji: '💪'
},
logros: {
name: 'Logros',
emoji: '🏆'
}
};
export const solutionsMap = [
{
emoji: '💼',
name: 'Preparar entrevistas',
subtitle: 'Práctica, consejos',
speciality: SpecialityKey.interviewPractice,
img: 'https://www.gdgoenkauniversity.com/site/img/placementcell-img.jpg'
},
{
emoji: '💬',
name: 'Practicar idiomas',
speciality: SpecialityKey.language,
subtitle: 'Conversación, aprendizaje',
//img:
// 'https://img.freepik.com/free-vector/language-learning-camp-abstract-concept-illustration_335657-2494.jpg?w=826&t=st=1683398854~exp=1683399454~hmac=66f42dd6e1dd10816d869cba2e648b194c9d5d7beb797613715f9d42a853e372',
img: 'https://img.freepik.com/free-photo/virtual-classroom-study-space_23-2149178645.jpg?size=626&ext=jpg&ga=GA1.1.301189620.1682070100&semt=ais'
},
{
emoji: '⚖️',
name: 'Dudas legales',
speciality: SpecialityKey.legalAdvisor,
subtitle: 'Consultas, orientación',
img: 'https://img.freepik.com/foto-gratis/empresario-masculino-feliz-que-tiene-videollamada-computadora-portatil-mientras-trabaja-oficina_637285-6768.jpg'
},
{
emoji: '📚',
name: 'Clases particulares',
speciality: SpecialityKey.onlineTutor,
subtitle: 'Tutorías, apoyo académico',
img: 'https://eduww.net/wp-content/uploads/2022/02/Online-School-is-better-alternative-768x512.webp'
},
{
emoji: '🚀',
name: 'Asesoría de empresas',
speciality: SpecialityKey.startupAdvisor,
subtitle: 'Startups, negocios, finalización...',
img: 'https://img.freepik.com/free-photo/group-workers-using-remote-video-call-talk-man-about-business-growth-computer-team-people-meeting-discuss-marketing-collaboration-online-internet-teleconference_482257-40554.jpg?w=1060&t=st=1683487722~exp=1683488322~hmac=7dcf6618cdf3c37af3bc455e7ad6607ae88eee763c25bda1c7f8694448b3bb54'
},
{
emoji: '🎯',
name: 'Productividad',
speciality: SpecialityKey.productivity,
img: 'https://sanjeevdatta.com/wp-content/uploads/2022/01/clarity.jpg',
subtitle: 'Herramientas, técnicas'
}
];