From bffd7cc8c822f4f9b47b5eb791b7cad827795470 Mon Sep 17 00:00:00 2001 From: Chimple Learning Date: Thu, 9 Jul 2026 07:00:18 +0200 Subject: [PATCH 01/29] Deleted translation using Weblate (Spanish) --- public/locales/es/translation.json | 1223 ---------------------------- 1 file changed, 1223 deletions(-) delete mode 100644 public/locales/es/translation.json diff --git a/public/locales/es/translation.json b/public/locales/es/translation.json deleted file mode 100644 index c73ede7e42..0000000000 --- a/public/locales/es/translation.json +++ /dev/null @@ -1,1223 +0,0 @@ -{ - " OFF ": " Fuera ", - " ON ": " Encima ", - " to choose and assign.": " Para escoger y asignar.", - "Family Of 20 - 2": "Familia de 20 a 2", - "Not Played": "No se juega", - "Select Partner": "Seleccionar socio", - "Select Field Coordinator": "Seleccionar coordinador de campo", - "Enter No. of Students": "Entrada No. de estudiantes", - "Select the Child's Gender:": "Seleccione el género del niño:", - "Twitter": "Twitter", - "Enter class name": "Entra nombre de clase", - "You Completed the Lesson:": "Completaste la lección:", - "Hyena": "Hyena", - "Regroup & Add 1": "Regroup & Add 1", - "Confirm": "Confirmación", - "7 years": "7 años", - "Match Numbers 4": "Números de partido 4", - "Quick Addition 5": "Quick Addition 5", - "Menu": "Menú", - "Student Data": "Datos del estudiante", - "You can edit or delete a user by clicking on the buttons below.": "Puede editar o eliminar un usuario haciendo clic en los botones de abajo.", - "Unspecified": "No especificada", - "Discovering the joy of learning": "Descubriendo la alegría del aprendizaje", - "Count and Subtract-1": "Cuenta y subcontrato 1", - "Making 10": "Haciendo 10", - "Count & Add-2": "Cuenta \" Add- 2", - "COMING SOON": "VENIR PRONTO", - "Double Digits -1": "Doble dígitos -1", - "Enter your email": "Introduzca su correo electrónico", - "Devices": "Dispositivos", - "Moon": "Luna", - "3 Digit Numbers": "3 números dígitos", - "Click date to select Date Range": "Haga clic en la fecha para seleccionar el rango de fecha", - "Phone Number signin Failed. Please try again later.": "Número de teléfono registrado Failed. Por favor, intente de nuevo más tarde.", - "Lion": "León", - "State is required": "Estado requerido", - "Start date is required": "Se requiere la fecha de inicio", - "More Birds": "Más aves", - "Send OTP button will be enabled in x seconds": "Enviar botón OTP se activará en x segundos", - "Program Name": "Nombre del programa", - "Rabbit and Flower": "Conejo y flor", - "What is your child’s age?": "¿Cuál es la edad de su hijo?", - "Comparison": "Comparación", - "Monthly Report": "Informe mensual", - "Chimple": "Chimple", - "Place Value 100-300": "Valor del lugar 100-300", - "Practice 4": "Práctica 4", - "Number Order - 8": "Número de órdenes - 8", - "Chapter 7": "Capítulo 7", - "Suggestion": "Sugerencia", - "SAVE": "SAVE", - "Write 81-90": "Escriba 81-90", - "Indian Currency 1": "Moneda india 1", - "Download all": "Descargar todo", - "Teacher": "Maestro", - "Select the School": "Seleccione la escuela", - "Shapes - 2": "Formas - 2", - "Puzzle Time 51-60": "Tiempo de Puzzle 51-60", - "Garden": "Jardín", - "Subtraction Basic": "Sustracción básica", - "Comparison Of Numbers": "Comparación del número", - "Number Order-4": "Número de órdenes-4", - "Shape Sequence": "Shape Sequence", - "We will send a password reset link": "Enviaremos un enlace de reset de contraseña", - "No Assignments found": "No se encontraron asignaciones", - "Heavy or Light-1": "Pesado o ligero. 1", - "Parts Of Whole - 1/4": "Partes Plenarias - 1/4", - "Device is online.": "El dispositivo está en línea.", - "Months of the year 4": "Meses del año 4", - "You have not chosen any assignments. Please go to ": "No has elegido ninguna asignación. Por favor, vete ", - "Targeted No. of Students": "Número de estudiantes", - "Request ID": "Solicitud de identificación", - "Heavy or Light 4": "Pesado o ligero 4", - "Add 10 - 20": "Add 10 - 20", - "MEDALS": "MEDALS", - "Practice 2": "Práctica 2", - "More Skip by 2's": "Más Skip by 2's", - "What is your child’s gender?": "¿Cuál es el género de su hijo?", - "Enter the 6 digit code your teacher has given to join the class": "Introduzca el código de 6 dígitos que su maestro ha dado para unirse a la clase", - "Shape Tractor": "Shape Tractor", - "Please Enter 10 digit Mobile Number": "Por favor, introduzca el número móvil de 10 dígitos", - "Manage School": "Escuela de administración", - "START": "START", - "Parent": "Parent", - "Select by date Range": "Seleccione por fecha Rango", - "Day or Night": "Día o noche", - "Collect your reward": "Recoge tu recompensa", - "Upload a new file": "Subir un nuevo archivo", - "Address & Location": "Dirección \" Ubicación", - "Device is offline. Login requires an internet connection": "El dispositivo está fuera de línea. Login requiere conexión a Internet", - "Time Spent": "Tiempo gastado", - "Do you want to play 'x2' chapter?": "¿Quieres jugar al capítulo 'x2'?", - "Indian Currency-3": "Moneda india-3", - "Welcome to Chimple!": "¡Bienvenido a Chimple!", - "You have selected to delete a class, would you like to continue?": "Usted ha seleccionado para eliminar una clase, ¿le gustaría continuar?", - "Clear Filters": "Filtros claros", - "Invalid code. Please check and Try again.": "Código inválido. Por favor, compruebe y vuelva a intentarlo.", - "Add 1-99": "Add 1-99", - "Playing with Lines": "Jugar con líneas", - "Select Program Type": "Seleccionar programa Tipo", - "Count & Add 1": "Cuenta \" Add 1", - "Practice 7": "Práctica 7", - "Night Routine": "Rutina nocturna", - "Table of 2 ": "Cuadro 2", - "Half": "Medio", - "Country is required": "País requerido", - "Number Order 1": "Número 1", - "We found issues in your file. A revised version with error details has been generated—please review and fix them before re-uploading.": "Encontramos problemas en su archivo. Se ha generado una versión revisada con detalles de errores, por favor revisen y corríjanlos antes de volver a cargar.", - "Number Series-1": "Serie Número-1", - "Enter your mobile number": "Introduzca su número de móvil", - "Subtract - 3": "Subtract - 3", - "Write 100-110": "Escriba 100-110", - "debugMode": "Modo de depuración", - "Preparing 400+ fun lessons.": "Preparando 400 clases de diversión.", - "Speed Subtraction-1": "Sutracción de velocidad-1", - "Speed Subtraction 1-18": "Sustracción de velocidad 1-18", - "Course not found for this chapter": "Curso no encontrado para este capítulo", - "Skip by 3's": "Skip by 3's", - "Click to play": "Haga clic para jugar", - "Multiply 2-9": "Multiply 2-9", - "Assignments Only": "Sólo asignaciones", - "Name Surname": "Nombre", - "Enter your Student ID": "Introduzca su ID de estudiante", - "Select District": "Seleccionar distrito", - "Eagle": "Águila", - "Chapter 6": "Capítulo 6", - "Statement Sums 1": "Sumas de declaración 1", - "At least one model must be selected": "Al menos un modelo debe ser seleccionado", - "Number Order 6 - 10": "Orden número 6 - 10", - "Skip by 2's ": "Skip by 2's", - "Assessment": "Evaluación", - "Please Enter 6 Digit Code": "Por favor, introduzca 6 códigos dígitos", - "Shapes-2": "Formas-2", - "Chimple- where curiosity meets education!": "¡Chimple, donde la curiosidad se reúne con la educación!", - "Partner Details": "Detalles del socio", - "Grade": "Grado", - "Quick Addition 8": "Adición rápida 8", - "Download Bulk Upload Template": "Descargar Bulk Upload Template", - "Requests": "Solicitudes", - "Units of Measurement": "Unidades de Medición", - "Playing for just ' x1 ' every week helps you do better in school and get ready for more learning!": "Jugar por sólo ' x1 ' cada semana te ayuda a hacer mejor en la escuela y prepárate para más aprendizaje!", - "Multiply 2 - 9": "Multiply 2 - 9", - "Remove Subject": "Quitar el asunto", - "Match box": "Caja de coincidencia", - "Prepositions 2": "Preposiciones 2", - "End date is required": "Se requiere la fecha final", - "9 years": "9 años", - "Addition 2": "Adición 2", - "Missing Contact Info": "Información de Contacto Desaparecida!", - "Meerkats": "Meerkats", - "Select Class": "Seleccionar clase", - "Cluster is required": "Se requiere un grupo", - "Number Sense 1 - 100": "Sentencia 1 - 100", - "Verifying Data...": "Datos verificadores...", - "Table of 8": "Cuadro 8", - "Quick Addition-20": "Quick Addition-20", - "Verified": "Verificado", - "Subtract 5": "Subcontrato 5", - "Switch to Child's Mode": "Cambiar al modo infantil", - "You can edit or delete the Profile by clicking on the buttons below.": "Puede editar o eliminar el Perfil haciendo clic en los botones de abajo.", - "Select Cluster": "Select Cluster", - "Subject": "Asunto", - "Unable to Upload File": "Unable para cargar el archivo", - "Desert": "Desierto", - "Practice 8": "Práctica 8", - "New Program": "Nuevo programa", - "Subtract 20 - 90": "Subtract 20 - 90", - "Curriculum & Subjects": "Curriculum \" Subjects", - "Indian Currency 5": "Moneda india 5", - "Puzzle Time 61-70": "Tiempo de Puzzle 61-70", - "Choose your child’s class details": "Elija los detalles de la clase de su hijo", - "Easy": "Fácil", - "Key Contacts": "Contactos clave", - "Subtraction 2": "Sustracción 2", - "Maximum file size": "Tamaño máximo del archivo", - "Chapter 9": "Capítulo 9", - "Parents Section": "Sección de padres", - "Approved By": "Aprobado por", - "Number Sense 1-10": "Número 1-10", - "Delete Account": "Suprimir la Cuenta", - "assignments_date_message": "Seleccione Fecha de inicio y Fecha de inicio para todas las asignaciones.", - "Quick Addition 6": "Adición rápida 6", - "Quick Addition 1": "Adición rápida 1", - "Select an option": "Seleccione una opción", - "Approved Date": "Fecha aprobada", - "Sad": "Triste", - "Match Numbers-4": "Números de partido-4", - "Family of 10": "Familia de 10", - "Use email instead": "Utilice el correo electrónico en su lugar", - "No programs found": "No hay programas encontrados", - "Login unsuccessful. Please try again later.": "Iniciar sesión sin éxito. Por favor, intente de nuevo más tarde.", - "Share": "Compartir", - "Subtract 6": "Subcontrato 6", - "Fun with Numbers": "Diversión con números", - "Write 71-80": "Escriba 71-80", - "Match Coloured Objects 2": "Objetos coloreados 2", - "Facebook": "Facebook", - "Switch Profile": "Perfil del interruptor", - "Regroup & Add - 3": "Regroup \" Add - 3", - "Chapter 12": "Capítulo 12", - "Add & Subtract - 8": "Add \" Subtract - 8", - "Add and Learn": "Añadir y aprender", - "Regroup & Add 2": "Regroup \" Add 2", - "Calculator 2": "Calculadora 2", - "High Score": "Alta puntuación", - "Regroup and Add": "Regroup and Add", - "Upload failed. Please try again later. You may retry or contact support if the problem continues.": "La carga falló. Por favor, intente de nuevo más tarde. Puede volver a entrar o ponerse en contacto si el problema continúa.", - "Big & Small 1 - 20": "Grande y pequeño 1 - 20", - "Multiplication Beginners": "Principios de Multiplicación", - "Program Name is required": "Nombre del programa es necesario", - "User successfully created.": "Usuario creado con éxito.", - "Reports": "Informes", - "Which Season is it?": "¿Qué temporada es?", - "Full Name": "Nombre completo", - "Subtract - 2": "Subtract - 2", - "Basic": "Básica", - "Institute Partner is required": "Institute Partner es necesario", - "Speed Subtraction 1 - 18": "Sutracciones de velocidad 1 - 18", - "DOWN": "DOWN", - "Are you sure you want to delete this user?": "¿Estás seguro de querer borrar este usuario?", - "Count and Match": "Conde y partido", - "Addition Elementary": "Adición elemental", - "Resend Otp Failed!! Please try again after some time.": "¡Reenviar a Otp Failed! Por favor, intente de nuevo después de algún tiempo.", - "Regroup & Add - 5": "Regroup \" Add - 5", - "Device is offline. Cannot complete a profile": "El dispositivo está fuera de línea. No puede completar un perfil", - "No selected subjects": "No hay asignaturas seleccionadas", - "At Home": "At Home", - "Practice 1": "Práctica 1", - "Quick Addition-2": "Adición rápida-2", - "Chapter 11": "Capítulo 11", - "UNSPECIFIED": "UNSPECIFIED", - "How Many?": "¿Cuántos?", - "Practice": "Práctica", - "Numbers 1-5": "Números 1-5", - "Subtract 10 - 70": "Subtract 10 - 70", - "Missing Contact Info Message": "Por favor, ingrese el nombre y el papel adecuados con al menos un número de teléfono o dirección de correo electrónico.", - "Incorrect OTP - Please check & try again!": "OTP incorrecto - Por favor, compruebe & prueba de nuevo!", - "Zebra": "Zebra", - "Practice 5": "Práctica 5", - "Targeted No. of Schools": "Número de escuelas", - "Penguin": "Pingüino", - "Select State": "Seleccionar Estado", - "Already Played": "Ya jugué", - "LearningCenter": "Learning Center", - "Creating": "Creando", - "More Big & Small 1-50": "Más grande & pequeño 1-50", - "Teacher’s Task Made Easy": "La tarea del profesor hizo fácil", - "Number Order 6": "Número 6", - "Day to day": "Día a día", - "Phone number must be 10 digits.": "El número de teléfono debe ser de 10 dígitos.", - "Do you want to Open Debug Mode?": "¿Quieres Open Debug Mode?", - "Subtraction-2": "Subtracción-2", - "What Time Is It?": "¿Qué hora es?", - "Start date must be before End date": "La fecha de inicio debe ser antes de la fecha final", - "Chapter 1": "Capítulo 1", - "Number Names 6": "Nombres del número 6", - "Principals": "Principales", - "Ascending and Descending - 1": "Ascendencia y Descendimiento - 1", - "Select the Child's Age:": "Seleccione la edad del niño:", - "No Data ": "NO Data ", - "Subtract - 5": "Subtract - 5", - "Chimple App": "Chimple App", - "Get Started": "Empieza", - "Number Names 4": "Nombres del número 4", - "Manual Assignments": "Asignaciones manuales", - "Create a New Child Profile": " Crear un nuevo perfil infantil", - "Indian Currency 2": "Moneda india 2", - "All": "Todos", - "Joined Date": "Fecha unida", - "Medium of instruction": "Medium of Instruction", - "Doing Good": "Hacer el bien", - "Number Names-4": "Nombres del número-4", - "Do you want to sign out": "¿Quieres firmar", - "Number Order - 7": "Número de órdenes - 7", - "Addition-1": "Adición-1", - "Users": "Usuarios", - "Quick Addition 1-10": "Adición rápida 1-10", - "Homework": "Homework", - "Statement Sums-1": "Estado financiero Sums-1", - "Downloading...": "Descargando...", - "City": "Ciudad", - "Subtract": "Subtract", - "Lizard": "Lagarto", - "Vertical Addition Medial": "Vertical Addition Medial", - "How are you feeling?": "¿Cómo te sientes?", - "More or Less-1": "Más o menos-1", - "Match Numbers-5": "Números de partido-5", - "Coordinators": "Coordinators", - "Gazelle": "Gazelle", - "not assigned yet": "no asignados", - "Upcoming": "Subiendo", - "Chapter 5": "Capítulo 5", - "Device is offline. Cannot edit or delete child profile": "El dispositivo está fuera de línea. No se puede editar o eliminar el perfil infantil", - "student id": "ID de estudiante", - "An unexpected error occurred. Please try again later.": "Se produjo un error inesperado. Por favor, intente de nuevo más tarde.", - "REWARDS": "REWARDS", - "Number Order 6-10": "Número 6-10", - "If you would like to assign assignments, please go to the": "Si desea asignar asignaciones, por favor vaya a la", - "Enter Mobile Number (10-digit)": "Introduzca el número de móvil (10 dígitos)", - "Skip": "Skip", - "Find the product 2 - 8": "Encontrar el producto 2 a 8", - "Saturday": "Sábado", - "Multiplication 1": "Multiplicación 1", - "Subtraction Challenge": "Reto de subtracción", - "Complete these lessons to earn rewards": "Completa estas lecciones para ganar recompensas", - "Indian Currency-1": "Moneda india 1", - "View Detailed Analytics": "Ver Análisis detallado", - "Indian Currency-2": "Moneda india-2", - "Statement Sums - 1": "Sumas de declaración - 1", - "Are you sure to delete the school?": "¿Estás seguro de borrar la escuela?", - "Request Type": "Tipo de solicitud", - "Trophy": "Trophy", - "Subtraction-3": "Subtracción-3", - "Count and Subtract 1": "Cuenta y subcontrato 1", - "Add & Subtract - 5": "Add \" Subtract - 5", - "Monkeys and Crocodile": "Monkeys and Crocodile", - "Do you want to play 'x1' course?": "¿Quieres jugar \"x1\" curso?", - "Checking for an update": "Comprobación para una actualización", - "To": "A", - "Heart": "Corazón", - "Block is required": "Se requiere un bloque", - "Enter the 6-digit code your teacher has shared with you to join the class.": "Introduzca el código de 6 dígitos que su maestro ha compartido con usted para unirse a la clase.", - "Number Series 6-9": "Serie 6-9", - "Months of the year 1": "Meses del año 1", - "Password reset successful. Redirecting to login": "Restablecimiento de contraseña exitoso. Redirecting to login", - "Need Help": "Necesito ayuda", - "Curriculum": "Curriculum", - "Start Date": "Fecha de inicio", - "Box": "Recuadro", - "Add 1-50": "Add 1-50", - "You have selected to remove a subject, would you like to continue?": "Usted ha seleccionado para eliminar un tema, ¿le gustaría continuar?", - "After creating the account, please open the app and click the 'Homework' icon from the top header and enter this code": "Después de crear la cuenta, por favor, abra la aplicación y haga clic en el icono 'Homework' del encabezado superior e ingrese este código", - "LEADERBOARD": "LEADERBOARD", - "School Address": "Dirección escolar", - "google": "Google", - "Quick Addition 3": "Adición rápida 3", - "Upload File": "Cargar archivo", - "Regroup & Add 3": "Regroup \" Add 3", - "Enter Institute Partner": "Enter Institute Partner", - "Number Order-2": "Número 2", - "You cannot delete yourself.": "No puedes borrarte.", - "Create": "Crear", - "Count and Subtract 2": "Cuenta y subcontrato 2", - "Subjects": "Subjects", - "Add 3 Digits - 2 ": "Añadir 3 dígitos - 2", - "Number Order-7": "Número 7", - "Failed to create authentication credentials. Please try again.": "Fallado para crear credenciales de autenticación. Por favor, inténtalo de nuevo.", - "Practise": "Practicar", - "Table of 4": "Cuadro 4", - "Puzzle Time 41-50": "Tiempo de Puzzle 41-50", - "I agree to the <1>Terms & Conditions": "Estoy de acuerdo con las condiciones \"Seguido\"", - "Unlock": "Desbloquear", - "Student-credentials Sign In": "Student-credentials Iniciar sesión", - "forgot password": "Olvidé la contraseña", - "Hard": "Duro", - "Beginners Shapes": "Comienzos Forma", - "Number Order 5": "Número 5", - "Puzzle Time 91-100": "Tiempo de Puzzle 91-100", - "Cluster": "Grupo", - "Write 41-50": "Escriba 41-50", - "Student Profile": "Perfil del estudiante", - "No lessons found for this chapter": "No se han encontrado lecciones para este capítulo", - "Days of the week 2": "Días de la semana 2", - "Phone": "Teléfono", - "Add & Subtract - 4": "Add \" Subtract - 4", - "Night and Day": "Noche y día", - "Count Objects": "Conde Objetos", - "Number Order - 4": "Número de órdenes - 4", - "Tuesday": "Martes", - "Camera permission denied. Please enable it in settings": "Se niega el permiso de cámara. Por favor, activelo en la configuración", - "Upload": "Subir", - "Number Series 1 - 9": "Serie 1 - 9", - "min": "min", - "No students have played yet.": "Ningún estudiante ha jugado todavía.", - "Number Series 1-8": "Serie 1-8", - "Calculator - 2": "Calculadora - 2", - "Prepositions 3": "Preposiciones 3", - "Number Order - 5": "Número de órdenes - 5", - "Please check your mail and confirm.": "Por favor, revise su correo y confirme.", - "You’ve used Chimple for 25 minutes today. Take a break to rest your eyes!": "Has utilizado Chimple durante 25 minutos hoy. ¡Toma un descanso para descansar los ojos!", - "No liked lessons available.": "No le gustaban las lecciones disponibles.", - "Multiply 3-8": "Multiply 3-8", - "Exercise 1": "Ejercicio 1", - "Match Numbers-1": "Números de partido-1", - "Chapter": "Capítulo", - "No. of Students is required": "Entrada No. de estudiantes", - "Boy": "Boy", - "Visit Website": "Visit Website", - "Bird": "Bird", - "Active Students": "Estudiantes activos", - "Not Tracked": "No rastreado", - "Practice Addition": "Adición práctica", - "Ordinal Counting-3": "Conteo ordinal-3", - "Fish": "Fish", - "Match Numbers 5": "Números de coincidencia 5", - "Big & Small 1-20": "Big & Small 1-20", - "Add Principal": "Add Principal", - "Addition-3": "Adición-3", - "2D & 3D Shapes": "Formas 3D", - "Less or More 1-100": "Menos o más 1-100", - "Device is offline. Cannot download the Lesson": "El dispositivo está fuera de línea. No se puede descargar la lección", - "Assignments": "Asignaciones", - "Scan QR": "Scan QR", - "Count Backwards-2": "Conde Backwards-2", - "Programs": "Programas", - "Multiplication Basics": "Fundamentos multiplicación", - "Enter the code to join a class": "Introduzca el código para unirse a la clase", - "Insects": "Insectos", - "Number Order - 1": "Número de órdenes - 1", - "Number Order 1- 5": "Número 1 - 5", - "Quick Addition 2": "Adición rápida 2", - "Chapters": "Capítulos", - "Average Score": "Puntuación media", - "Skip By 10's": "Skip By 10's", - "Average Time Spent": "Tiempo medio gastado", - "Count": "Conde", - "Subtract From 20": "Subtract from 20", - "Chapter 13": "Capítulo 13", - "Puzzle Time 81-90": "Tiempo de Puzzle 81-90", - "Addition 3": "Adición 3", - "Model": "Modelo", - "Indian Currency-4": "Moneda india4", - "Ascending and Descending": "Ascendente y descendente", - "Regroup & Add - 1": "Regroup \" Add - 1", - "please install the Chimple Kids app": " por favor, instale la aplicación Chimple Kids", - "Monday": "Lunes", - "male": "Hombre", - "Student Number": "Número de estudiantes", - "Less or More 50 - 90": "Menos o más 50 - 90", - "Add Sponsor": "Añadir Sponsor", - "Ascending and Descending -1": "Ascendente y descendente -1", - "Tiger": "Tigre", - "Edit": "Editar", - "Lesson": "Lección", - "Number Order 2": "Número 2", - "This lesson is locked. Play the current active lesson.": "Esta lección está cerrada. Juega la lección activa actual.", - "Private": "Privado", - "Time Remaining :": "Tiempo restante :", - "Days of the week": "Días de la semana", - "Login / SignUp": "Iniciar sesión / registrarse", - "Write 61-70": "Escriba 61-70", - "Table of 9": "Cuadro 9", - "Active Teachers": "Profesores activos", - "Join a Class by entering the details below": "Únete a una Clase introduciendo los detalles a continuación", - "Class Name": "Nombre de clase", - "Incorrect phone number format": "Formato de número de teléfono incorrecto", - "Create a New Profile": "Crear un nuevo perfil", - "School ID (UDISE)": "ID escolar (UDISE)", - "Switch school": "Escuela de cambio", - "Shapes and Objects": "Formas y objetos", - "Addition 1": "Adición 1", - "Create New School": "Crear nueva escuela", - "Flower": "Flor", - "Chapter 10": "Capítulo 10", - "Find the product 2-8": "Encontrar el producto 2-8", - "NCERT": "NCERT", - "Clear All": "Despejado", - "Orange": "Orange", - "Add 3 Digits - 1": "Añadir 3 dígitos - 1", - "No": "No", - "Subtract 10-70": "Subtract 10-70", - "Watermelon": "Watermelon", - "Cancel": "Cancelar", - "help": "Ayuda", - "Multiply 3 - 8": "Multiply 3 - 8", - "Delete all students to delete class": "Eliminar todos los estudiantes para eliminar la clase", - "Instagram": "Instagram", - "Number Names 8": "Nombres del número 8", - "Board": "Junta", - "Compare With 10": "Comparar con 10", - "Greetings": "Saludos", - "WhatsApp Us": "WhatsApp Us", - "Email ID": "ID de correo", - "Number Names-8": "Nombres del número-8", - "Indicates Required Information": "Indica información requerida", - "Beginners 1": "Principios 1", - "Table of 1": "Cuadro 1", - "Add School": "Add School", - "Big & Small 1-10": "Big & Small 1-10", - "sticker": "pegatina", - "Requested Date": "Fecha solicitada", - "Grouping and Sharing": "Grouping and Sharing", - "Joining...": "Unirse...", - "Yes": "Sí", - "Regroup & Add 4": "Regroup \" Add 4", - "Shapes-1": "Formas-1", - "Manage Class": "Clase de manejo", - "Something went wrong. Please try again.": "Algo salió mal. Por favor, inténtalo de nuevo.", - "Subtraction Elementary": "Sustracción Elemental", - "female": "Mujer", - "Re-Upload": "Re-Upload", - "back": "Atrás", - "Division 1": "División 1", - "Quick Addition 5": "Quick Addition 5", - "Add": "Añadir", - "Day Routine": "Día de rutina", - "Chapter 8": "Capítulo 8", - "Add-1": "Add-1", - "Count & Subtract 1": "Cuenta \" 1", - "Longest, Tallest, Shortest - 1": "Más largo, más corto, más corto - 1", - "Classroom": "Aula", - "Calculator - 4": "Calculadora - 4", - "Dog": "Perro", - "More Sums": "Más sumos", - "8 years": "8 años", - "Elephant": "Elefante", - "Practice 3": "Práctica 3", - "phone": "Teléfono", - "Calculator 3": "Calculadora 3", - "Add Student": "Agregar estudiante", - "Play ' x1 ' to win your daily reward": "Jugar ' x1 ' para ganar su recompensa diaria", - "Other": "Otros", - "Math Operations": "Operaciones de matemáticas", - "Subtract - 4": "Subtract - 4", - "View Details": "Ver detalles", - "How Many Times?": "¿Cuántos tiempos?", - "Select Block": "Seleccionar bloque", - "These are the recommended assignments based on the previous assignments": "Estas son las asignaciones recomendadas basadas en las asignaciones anteriores", - "Table of 6": "Cuadro 6", - "Choose an avatar for your child": "Elija un avatar para su hijo", - "Turtle": "Turtle", - "Chimple Help Desk": "Chimple Help Desk", - "The Subject you have chosen is the last one left and cannot be deleted": "El Asunto que ha elegido es el último que queda y no puede ser eliminado", - "Block": "Bloque", - "Clock": "Reloj", - "Count and Multiply-3": "Cuenta y Multiply-3", - "reset password": "Reset Password", - "Google sign in failed. Please try again.": "Firma de Google falló. Por favor, inténtalo de nuevo.", - "Draw Shape": "Forma de dibujo", - "Invalid email or password. Please try again.": "Correo electrónico o contraseña inválido. Por favor, inténtalo de nuevo.", - "Assigned": "Assigned", - "Enter text": "Escriba texto", - "Quick Addition 2": "Adición rápida 2", - "Big & Small 1-5": "Big & Small 1-5", - "Addition 11-20": "Adición 11-20", - "Count Backwards-1": "Conde Backwards-1", - "OTP Sent To The": "OTP enviado a", - "Count Backwards 1": "Conde Backwards 1", - "Shape Order": "Shape Order", - "Full Address": "Dirección completa", - "Number Names 5": "Nombres del número 5", - "Device is offline. Cannot download the Chapter": "El dispositivo está fuera de línea. No se puede descargar el Capítulo", - "Time for a break!": "¡Hora de un descanso!", - "Choose your language": "Elija su idioma", - "Quick Addition 1-10": "Adición rápida 1-10", - "Cannot Delete Class": "No puede eliminar la clase", - "Add 3 and 4": "Add 3 and 4", - "Additional Learning": "Aprendizaje adicional", - "Use phone number instead": "Use el número de teléfono en su lugar", - "Cow": "Cow", - "Students": "Estudiantes", - "Count & Add ": "Cuenta \" Add", - "Mobile": "Móvil", - "Enter your Phone Number": "Entra en tu Número de teléfono", - "Count and Compare": "Cuenta y Compara", - "Number Order 3": "Número 3", - "Count and Subtract-3": "Conde y Subtract-3", - "More Addition 1-20": "Más adición 1-20", - "10 years": "10 años", - "Parts Of Whole - 1/2": "Partes Plenarias - 1/2", - "Subtraction Mastery-3": "Maestra de Subtracción-3", - "Please wait. Quiz will be starting soon": "Por favor, espera. Quiz empezará pronto", - "Enter Name": "Nombre", - "Rejected Date": "Fecha rechazada", - "More or Less": "Más o menos", - "Find the product 2-8": "Encontrar el producto 2-8", - "Resources": "Recursos", - "Leaderboard": " Leaderboard", - "Program Type": "Tipo de programa", - "Manage Classes": "Clases de gestión", - "Number Order-6": "Número 6", - "Like the Game": "Como el juego", - "Subtract 4": "Subcontrato 4", - "Puzzle Time 31-40": "Tiempo de Puzzle 31-40", - "Sorry, Couldn't find any matches for the Date Range ": "Lo siento. No pude encontrar ningún partido para el rango de fechas ", - "Number Order 8": "Orden número 8", - "Do you want to delete the Profile?": "¿Quieres eliminar el Perfil?", - "Count Backwards": "Conde Backwards", - "Less or More 1 - 100": "Menos o más 1 - 100", - "Back": "Atrás", - "Place Value 300-500": "Valor del lugar 300-500", - "Enter school code": "Ingrese el código escolar", - "Reading Time": "Tiempo de lectura", - "Family Of 20 - 1": "Familia de 20 a 1", - "Match Numbers 1": "Números de partido 1", - "send": "Enviar", - "Beach": "Playa", - "Add 3 Digits - 2": "Añadir 3 dígitos - 2", - "Heavy or Light-3": "Pesado o ligero-3", - "Complete these 5 lessons to earn rewards": "Completa estas 5 lecciones para ganar recompensas", - "Number Order-8": "Orden número- 8", - "Quick Addition 1": "Adición rápida 1", - "faq": "FAQ", - "Match Numbers-2": "Números de partido-2", - "Still Learning": "Sigue aprendiendo", - "Monthly": "Mensual", - "Days of the week 1": "Días de la semana 1", - "Capacity of Glass": "Capacidad de vidrio", - "Number Order 7": "Número 7", - "Vertical Addition Beginners": "Principios de Adición Vertical", - "Whatsapp Us For Any Questions": "Whatsapp Us For Any Questions", - "Number Order - 2": "Número de órdenes - 2", - "Skip By 10's Backwards": "Skip By 10's Backwards", - "Add 1 - 50": "Add 1 - 50", - "Count and Multiply 3": "Cuenta y Multiply 3", - "Shapes Advanced": "Formas avanzadas", - "Count & Add-1": "Cuenta \" Add- 1", - "Role successfully added to user.": "Papel añadido con éxito al usuario.", - "Swipe x to Unlock": "Swipe x para desbloquear", - "Your progress stays synced and consistent across all devices.": "Su progreso se mantiene sincronizado y consistente en todos los dispositivos.", - "Numbers 11-20": "Números 11-20", - "Subtract 20-90": "Subtract 20-90", - "Number Names": "Nombres del número", - "Indian Currency 3": "Moneda india 3", - "Quick Addition 6": "Adición rápida 6", - "BONUS": "BONUS", - "Course Name": "Nombre del curso", - "ALL Time": "Todo el tiempo", - "Enter student id": "Entrar estudiante id", - "Getting ready for an update in the background": "Preparándose para una actualización en el fondo", - "Verify Your Number": "Verificar su número", - "After a short while kindly check to access your school": "Después de un corto tiempo amablemente comprobar para acceder a su escuela", - "Found a new update": "Encontré una nueva actualización", - "Table 1 - 10": "Cuadro 1 - 10", - "Program Managers": "Program Managers", - "Low Score": "Baja puntuación", - "Sound": "Sonido", - "Write 31-40": "Escriba 31-40", - "Count Backwards - 2": "Conde Backwards - 2", - "Shape Pattern": "Shape Pattern", - "Search School": "Search School", - "Teacher’s App": "Aplicación del profesor", - "Months of the year": "Meses del año", - "Calculator - 1": "Calculadora - 1", - "Field cannot be empty": "El campo no puede estar vacío", - "Number Names-7": "Nombres del número-7", - "Speed Subtraction-2": "Sutracción de velocidad-2", - "What is the colour of an Apple?": "¿Cuál es el color de una manzana?", - "Add 11-100": "Add 11-100", - "Field Coordinator": "Field Coordinator", - "Quick Addition 7": "Adición rápida 7", - "Select the Child's Avatar:": "Seleccione el Avatar del Niño:", - "Number Order 1-5": "Orden número 1-5", - "Your profile is not registered to any school.": "Tu perfil no está registrado en ninguna escuela.", - "Less or More 1-999": "Menos o más 1-999", - "Match Time": "Tiempo de coincidencia", - "Start": "Comienzo", - "GIRL": "GIRL", - "Find the product 2-9": "Encontrar el producto 2-9", - "Ordinal Counting 3": "Ordinal Contando 3", - "Calculator - 3": "Calculadora - 3", - "Add 2 Digit Numbers": "Añadir 2 números dígitos", - "Subtraction Mastery 2": "Maestra de Subtracción 2", - "Word Problems": "Problemas de palabras", - "AI-driven workspace designed for teachers to simplify classroom tasks": "Espacio de trabajo impulsado por IA diseñado para que los maestros puedan simplificar las tareas de aula", - "Calculator-1": "Calculadora-1", - "Subtract - 9": "Subtract - 9", - "Subtraction 1": "Sustracción 1", - "Continue Playing": "Continuar jugando", - "Skip By 5's": "Skip By 5's", - "Quick Addition 20": "Quick Addition 20", - "You do not have any live quizzes available.": "No tienes ningún cuestionario en vivo disponible.", - "Switch to Ops Mode": "Cambiar a modo de opciones", - "Incorrect credentials - Please check & try again!": "Credenciales incorrectas - Por favor, compruebe & prueba de nuevo!", - "Shapes - 4": "Formas - 4", - "Comparison by Subtraction": "Comparación por Sustracción", - "This subject is linked to the following class and cannot be removed:": "Este tema está vinculado a la siguiente clase y no puede ser eliminado:", - "Please fill in all fields.": "Por favor, llena todos los campos.", - "Click below to update student's progress": "Haga clic a continuación para actualizar el progreso del estudiante", - "Favourite": "Me gusta", - "Dismiss": "Desestimación", - "Send Request to Chimple to add your school.": " Enviar solicitud a Chimple para agregar su escuela.", - "Classes": "Clases", - "Heavy or Light 2": "Pesado o ligero 2", - "Karnataka State Board": "Karnataka State Board", - "Beginners 2": "Los principiantes 2", - "Terms & Conditions": "Términos y condiciones", - "Digital Skills": "Habilidades digitales", - "Alphabetical": "Alfabética", - "STICKERS": "ESTICKERS", - "Beginners Addition 1-20": "Adición de principiantes 1-20", - "Indian Currency-5": "Moneda india", - "User already exists with this role.": "El usuario ya existe con este papel.", - "Big & Small 1 - 50": "Grande & Small 1 - 50", - "Count and Subtract 3": "Cuenta y subcontrato 3", - "Assign": "Assign", - "Thursday": "Jueves", - "Select the Grade": "Seleccione el Grado", - "Simple": "Simple", - "Wednesday": "Miércoles", - "Create Class": "Crear clase", - "Friday": "Viernes", - "Parts & Whole 1": "Partes \" íntegro 1", - "Device is offline.": "El dispositivo está fuera de línea.", - "Add-3 and 4": "Add-3 y 4", - "Subtraction Advanced": "Sustracción avanzada", - "Odd Numbers": "Números extraños", - "Sign Out": "Sign Out", - "Passwords do not match.": "Las contraseñas no coinciden.", - "Below are the chosen subjects": "A continuación se presentan los temas elegidos", - "Assignments Report": "Informe de las asignaciones", - "Write 41--50": "Escribe 41...50", - "Update": "Actualización", - "No Coordinators Found": "No Coordinators Found", - "Skip for now": "Skip for now", - "School Name": "Nombre de la escuela", - "Rani's Gift": "Regalo de Rani", - "Live Challenge": "Live Challenge", - "Password must be at least 6 characters": "Contraseña debe ser al menos 6 caracteres", - "Shapes and Solids": "Formas y sólidos", - "Remove": "Retirar", - "Resend OTP": "RESEND OTP", - "Write 21-30": "Escriba 21-30", - "Phone number not available": "Número de teléfono no disponible", - "Shape Series": "Shape Series", - "Match Numbers 2": "Números de partido 2", - "Ascending and Descending - 2": "Ascendencia y Descendimiento - 2", - "Overview": "Sinopsis", - "Learning Centers": "Centros de aprendizaje", - "Double Digits - 2": "Doble dígitos - 2", - "From": "Desde", - "Congratulations!": "¡Enhorabuena!", - "Revision ": "Revisión", - "Completion Score": "Puntaje de terminación", - "Choose Subjects to add to your school": "Elige asignaturas para añadir a tu escuela", - "More Practice": "Más práctica", - "More Big & Small 1 - 50": "Más grande & pequeño 1 - 50", - "Subtract-3 & 4": "Subtract-3 \" 4", - "Enter Funding Partner": "Ingrese Socio de Financiación", - "Numbers 6 -10": "Números 6 -10", - "LEFT": "LEFT", - "Shapes - 3": "Formas - 3", - "Click to upload student data": "Haga clic para subir datos de los estudiantes", - "Skip Counting": "Skip Counting", - "Subtraction 3": "Sustracción 3", - "Puzzles": "Puzzles", - "Chapter 3": "Capítulo 3", - "Please select your profile": "Seleccione su perfil", - "Number Order - 6": "Número de órdenes - 6", - "Happy": "Feliz", - "Enter the Class": "Entra en la clase", - "Squirrel": "Ardilla", - "Arrow": "Arrow", - "Do you want to delete the parent's account?": "¿Quieres borrar la cuenta del padre?", - "Number Names 3": "Nombres del número 3", - "bonus": "bono", - "User creation failed. Please check the details and try again.": "La creación de usuario falló. Por favor revise los detalles e inténtelo de nuevo.", - "Enter Password": "Introducir contraseña", - "Forgot Password?": "¿Olvidó la contraseña?", - "Activity": "Actividad", - "Less or More 50-90": "Menos o más 50-90", - "Girl": "Chica", - "Write 91-100": "Escriba 91-100", - "New Profile": "Nuevo perfil", - "Less or More 1-900": "Menos o más 1-900", - "Skip By 5's Backwards": "Skip By 5's Backwards", - "Send Request": "Solicitud", - "Shadow Story (Togalu)": "Shadow Story (Togalu)", - "Already on the latest version": "Ya en la última versión", - "Library": "Biblioteca", - "Number Order - 3": "Número de órdenes - 3", - "Other ways to login": "Otras formas de iniciar sesión", - "Sent the OTP": "Enviada la OTP", - "Select Village": "Seleccionar pueblo", - "Please enter a valid email address.": "Por favor, introduzca una dirección de correo electrónico válida.", - "Shapes 1": "Formas 1", - "Arrange Numbers 1-100": "Números de acuerdo 1-100", - "Math Sense Beginners": "Principios de sentido matemático", - "Enter No. of Devices": "Entrada No. de Dispositivos", - "Chapter 2": "Capítulo 2", - "Enter the OTP sent to +91": "Introduzca el OTP enviado a +91{{phoneNumber}}", - "Search": "Búsqueda", - "Match Numbers 3": "Números de coincidencia 3", - "Shapes - 1": "Formas - 1", - "Practice 6": "Práctica 6", - "Table of 3": "Cuadro 3", - "Live Quiz": "Live Quiz", - "Heavy or Light 3": "Pesado o ligero 3", - "Mango Treat": "Mango Treat", - "Campaigns": "Campañas", - "Tall, Long and Short-1": "Alto, largo y corto-1", - "What is your child’s name?": "¿Cuál es el nombre de su hijo?", - "home": "Home", - "Stringed objects": "Objetos de cuerda", - "Edit School": "Editar la escuela", - "Quick Addition 20": "Quick Addition 20", - "More Comparisons": "Más Comparaciones", - "Morning Routine": "Rutina por la mañana", - "How Many?-1": "¿Cuántos?- 1", - "Hi! Welcome to Chimple": "¡Hola! Bienvenido a Chimple", - "Parts & Whole": "Partes \" Plenario", - "Number Series 1 - 8": "Serie 1 - 8", - "How many days are there in a week?": "¿Cuántos días hay en una semana?", - "Quick Addition-1": "Quick Addition- 1", - "Count and Subtract-2": "Conde y Subtract-2", - "Pig": "Pig", - "No Sponsors Found": "No Sponsors Found", - "Enter Age": "Entrada Edad", - "Find the product 2 - 9": "Encontrar el producto 2 a 9", - "Quick Addition 4": "Adición rápida 4", - "🎉Congratulations🎊": "introducCongratulations🎊", - "Subtraction Mastery-2": "Maestra de Subtracción-2", - "Exercise": "Ejercicio", - "Vertical Addition Basic": "Vertical Addition Basic", - "Fun at the Fair": "Diversión en la Feria", - "Indian Currency 4": "Moneda india 4", - "Number Order-3": "Número de órdenes-3", - "Quick Addition 8": "Adición rápida 8", - "Add 10 - 100": "Add 10 - 100", - "My Profile": "Mi perfil", - "Exercise 2": "Ejercicio 2", - "Weekly Summary": "Resumen semanal", - "State": "Estado", - "Success": "Éxito", - "Subtract 10-70": "Subtract 10-70", - "Request Confirmation": "Solicitud de confirmación", - "minutes": "minutos", - "Program Statistics": "Estadísticas del programa", - "Hang tight, It’s a special occasion!": "Aguanta fuerte, ¡Es una ocasión especial!", - "Recommended Assignments": "Asignaciones recomendadas", - "View Progress": "Avances", - "Reason": "Razón", - "House": "House", - "Subtract - 6": "Subtract - 6", - "Number Order": "Número de órdenes", - "3D-shapes": "Forma 3D", - "Utsav": "Utsav", - "Tall, Long and Short": "Alto, largo y corto", - "Discovering the joy of learning with": "Descubrir la alegría del aprendizaje con", - "Edit Profile": "Editar perfil", - "Fav/History": "Fav/Historia", - "More or Less 1": "Más o menos 1", - "EVENTS": "EVENTOS", - "Speed Subtraction 1": "Sustracción de velocidad 1", - "Something went wrong. Please try again after some time.": "Algo salió mal. Por favor, intente de nuevo después de algún tiempo.", - "Addition Advanced": "Adición Avanzada", - "Password is too short.": "La contraseña es muy corta.", - "Picture Board": "Picture Board", - "Calculator-2": "Calculadora-2", - "Lesson Name": "Nombre de la lección", - "Name": "Nombre", - "Email Us": "Email Us", - "Class": "Clase", - "Number Names 7": "Nombres del número 7", - "Vertical Addition Basic": "Vertical Addition Basic", - "Subtract 3": "Subcontrato 3", - "History": "Jugado", - "Addition Mastery": "Addition Mastery", - "Chapter 14": "Capítulo 14", - "Assign or get regular homework.": "Asignar o conseguir tarea regular.", - "Match figures": "Figuras de coincidencia", - "Shapes": "Formas", - "Funding Partner is required": "El socio de financiación es necesario", - "Skip 2's Backward": "Skip 2's Backward", - "District is required": "Se requiere un distrito", - "Days of the week 3": "Días de la semana 3", - "Lina's Family": "Familia de Lina", - "Find the product 2-9": "Encontrar el producto 2-9", - "Music": "Música", - "Subtract 3 & 4": "Subtract 3 \" 4 \"", - "Device is offline. Cannot join a class": "El dispositivo está fuera de línea. No puede unirse a una clase", - "BOY": "BOY", - "Join Now": "Únete ahora", - "Lessons Played": "Lecciones interpretadas", - "Select Language": "Seleccionar idioma", - "So Many Toys": "Muchos Juguetes", - "Program Manager": "Program Manager", - "3D shapes": "Formas 3D", - "Add Teacher": "Add Teacher", - "Number Order-5": "Número de órdenes-5", - "Big & Small 1-10": "Big & Small 1-10", - "Download File": "Descargar Archivo", - "Hindi": "Hindi", - "A Day at the Beach": "Un día en la playa", - "Rank": "Rank", - "Ordinal Counting-2": "Conteo ordinal-2", - "Count & Add 2": "Cuenta \" Add 2", - "Count & Subtract-1": "Conde \" Subtract- 1", - "Basics": "Básicos", - "How Much Can We Spend?": "¿Cuánto podemos gastar?", - "Enter No. of Institute": "Ingreso No. del Instituto", - "Send OTP": "Enviar OTP", - "Mouse": "Mouse", - "School Details": "Detalles escolares", - "Or directly click on this link to join the class": "O haga clic directamente en este enlace para unirse a la clase", - "Search for a Lesson...": "Buscar una Lección...", - "Live Quiz Leaderboard": "Live Quiz Leaderboard", - "Ball and Dog": "Ball and Dog", - "Edit Class": "Clase de edición", - "Subtraction Mastery 1": "Maestra de Subtracción 1", - "Password": "Contraseña", - "Congratulations on earning the x1!": "¡Felicitaciones por ganar el x1!", - "Addition": "Adición", - "Count and Pair": "Conde y Pareja", - "Number Names-2": "Nombres del número-2", - "New User": "Nuevo Usuario", - "Count and Add -2": "Cuenta y Add -2", - "Double Digits - 4": "Doble dígitos - 4", - "Adding": "Añadiendo", - "Fast Multiplication 3-81": "Multiplicación rápida 3-81", - "Skip By 100": "Skip By 100", - "Rejected By": "Rechazado por", - "Number Names 2": "Nombres del número 2", - "Big & Small 1-50": "Grande y pequeño 1-50", - "Parts and whole 2": "Partes y total 2", - "School is not Available": "La escuela no está disponible", - "LiveQuiz Report": "Informe LiveQuiz", - "Ordinal Counting-1": "Conteo ordinal... 1", - "Practice Additions": "Adiciones de práctica", - "Shapes Around us": "Formas alrededor de nosotros", - "Number Series 1- 9": "Serie 1- 9", - "Day and Night": "Día y noche", - "Add 10-20": "Add 10-20", - "Targeted No. of Devices": "Número de dispositivos seleccionados", - "Why not explore our Apps? You are just one click away!": "¿Por qué no explorar nuestras aplicaciones? ¡Estás a tan solo un clic!", - "Subtract - 7": "Subtract - 7", - "Table 1-10": "Cuadro 1 a 10", - "Add & Subtract - 1": "Add \" Subtract - 1", - "Intermediate": "Intermedio", - "No students in class": "No hay estudiantes en clase", - "Shapes 2": "Formas 2", - "Add 1 - 99": "Add 1 - 99", - "More Skip by 2's ": "Más Skip by 2's", - "Red": "Rojo", - "Weekly Report": "Informe semanal", - "Age": "Edad", - "Program Details": "Detalles del programa", - "Less or More 50-90": "Menos o más 50-90", - "Chapter Name": "Nombre del capítulo", - "Finding the Furry Cat!": "¡Encontrando al gato peludo!", - "Table of 2": "Cuadro 2", - "5 years": "5 años", - "Place Value 1": "Valor de lugar 1", - "Email": "Email", - "Subtract - 8": "Subtract - 8", - "Match Numbers-3": "Números de partido-3", - "Select All": "Seleccione todos", - "Please create your child's profile.": "Por favor, cree el perfil de su hijo.", - "10's Subtraction": "10's Subtraction", - "Big or Small": "Grande o pequeño", - "At School": "En la escuela", - "sending": "Enviar", - "Tables 1-10": "Cuadros 1 a 10", - "For You": "Para ti", - "Help": "Ayuda", - "Assignment": "Asignación", - "Select the child’s profile": "Seleccione el perfil del niño", - "Heavy or Light 1": "Pesado o ligero 1", - "Help Video": "Ayuda vídeo", - "Click below to view student's progress": "Haga clic a continuación para ver el progreso del estudiante", - "Data Handling": "Manejo de datos", - "No more subjects available to add": "No hay más temas disponibles para añadir", - "UP": "ARRIBA", - "Subtract-1": "Subtract-1", - "Ordinal Counting 2": "Cuenta ordinal 2", - "Colours Around Us": "Colores alrededor de nosotros", - "Verification code has expired. Please request a new one.": "El código de verificación ha expirado. Por favor, solicita uno nuevo.", - "Puzzle Time 21-30": "Tiempo de Puzzle 21-30", - "Matching Card": "Tarjeta de coincidencia", - "Enter your password": "Introduzca su contraseña", - "Surprise": "Sorpresa", - "Write 51-60": "Escriba 51-60", - "Subtraction Mastery-1": "Sutracción Mastery-1", - "Balloon": "Globo", - "login": "Iniciar sesión", - "Count and Multiply-2": "Cuenta y Multiply-2", - "Puzzle Time 71-80": "Tiempo de Puzzle 71-80", - "Add Subject": "Add Subject", - "Quick Addition 3": "Adición rápida 3", - "Even Numbers": "Incluso números", - "Skip by 2's": "Skip by 2's", - "Over All": "Over All", - "No requests found.": "No se han encontrado solicitudes.", - "No. of Devices is required": "Entrada No. de Dispositivos", - "Avg week time in mins": "Avg semana tiempo en minutos", - "Would you like to share the assignments?": "¿Te gustaría compartir las tareas?", - "Number Series": "Serie", - "Search programs...": "Programas de búsqueda...", - "Clock 1": "Reloj 1", - "Add-2": "Add-2", - "Puzzle Time": "Tiempo de rompecabezas", - "Multiplication 2": "Multiplicación 2", - "Send Report": "Enviar informe", - "Save": "Guardar", - "Less or More 1 - 999": "Menos o más 1 - 999", - "Subtract 1": "Subcontrato 1", - "Match Blue Shadows": "Match Blue Shadows", - "Regroup & Add 5": "Regroup \" Add 5", - "User not Found. Please verify your credentials.": "Usuario no encontrado. Por favor, verifique sus credenciales.", - "Challenges": "Desafíos", - "sec": "sec", - "Logout": "Cerrar sesión", - "Addition-2": "Adición-2", - "Shapes 4": "Forma 4", - "RIGHT": "BIEN", - "Succession in Shapes": "Sucesión en formas", - "School name": "Nombre escolar", - "Table of 5": "Cuadro 5", - "Delete": "Suprimir", - "Delete Profile": "Eliminar el perfil", - "Location Details": "Detalles de la ubicación", - "Number Sense 1-5": "Número 1-5", - "Your data has been successfully checked, and no errors were found.": "Sus datos han sido verificados con éxito, y no se encontraron errores.", - "Fast Multiplication 3-8": "Multiplicación rápida 3-8", - "Write 81-90": "Escriba 81-90", - "Choose Subjects to add to your class": "Elija Temas para agregar a su clase", - "Arrange Numbers 1 - 100": "Números de orden 1 - 100", - "Shapes-3": "Formas-3", - "4 years": "4 años", - "Less or More 1 - 900": "Menos o más 1 - 900", - "Number Order-1": "Número de orden-1", - "Regroup & Add - 2": "Regroup \" Add - 2", - "Number Order 4": "Número 4", - "How do I Spend my Day?": "¿Cómo paso mi día?", - "Calculator 1": "Calculadora 1", - "All activities": "Todas las actividades", - "Add 1-20": "Add 1-20", - "How Many": "¿Cuántos", - "loading": "Cargando...", - "Choose the School": "Elija la escuela", - "Angry": "Angry", - "Program Performance": "Ejecución del programa", - "Enter the child’s full name": "Introduzca el nombre completo del niño", - "Revision Number Order": "Orden de revisión", - "Objects and shapes": "Objetos y formas", - "Switch to Teacher's Mode": "Cambiar al modo del maestro", - "Select School": "Seleccionar escuela", - "Agree": "Acorde", - "Number Series 6 - 9": "Serie 6 - 9", - "Subtraction-1": "Subtracción-1", - "Select the Board": "Seleccione la Junta", - "Unable to assign role to the user. Contact support.": "Incapaz de asignar el papel al usuario. Soporte de contacto.", - "Enter your Email ID": "Entra en tu ID de correo", - "Beginners Addition 1-20": "Adición de principiantes 1-20", - "Me": "Me", - "Number Names-5": "Nombres del número-5", - "Your OTP will expire in {{minutes}} minutes": "Su OTP expirará en {{minutes}} minutos", - "Cat and Butterfly": "Gato y mariposa", - "Please Visit Our Website": "Visite nuestro sitio web", - "Count and Subtract": "Conde y Subtract", - "Select Country": "Seleccionar país", - "Vertical Addition Medial": "Vertical Addition Medial", - "Count and Multiply 2": "Cuenta y Multiply 2", - "Implementation Partner is required": "Se requiere un socio de implementación", - "Select Program Manager": "Select Program Manager", - "Select School Model": "Seleccione el modelo escolar", - "Addition Beginners": "Addition Beginners", - "Sunday": "Domingo", - "Heaviest or Lightest?": "¿Más pesado o más ligero?", - "***Be among the top performers in your class to win an exciting reward": "***Estar entre los mejores intérpretes de tu clase para ganar una recompensa emocionante", - "Revisions": "Revisiones", - "Prepositions": "Preposiciones", - "Place Value 2": "Valor de lugar 2", - "Dashboard": "Dashboard", - "Something went wrong": "Algo salió mal", - "Big & Small 1-20": "Big & Small 1-20", - "Generate": "Generar", - "How Many? 1": "¿Cuántos? 1", - "Fun Gamified Learning": "Fun Gamified Learning", - "Ordinal Counting 1": "Cuenta ordinal 1", - "How would you like to join?": "¿Te gustaría unirte?", - "District": "Distrito", - "Small to Big": "Pequeña a Grande", - "You are Joining ": "Te estás uniendo ", - "No. of Teachers": "Número de maestros", - "Chapter Report": "Capítulo Informe", - "School Performance": "Desempeño escolar", - "Continue with Google or Student ID": "Continuar con Google o Student ID", - "When?": "¿Cuándo?", - "Tiny shapes": "Formas pequeñas", - "Preferred Language": "Idioma preferido", - "Please Enter Valid Code": "Por favor, introduzca el código válido", - "Otp Sent To The": "Otp enviado a la", - "Google Sign In": "Google Signos In", - "Parts Of Whole - 3/4": "Partes Plenarias - 3/4", - "Parent's Screen": "Pantalla del Padre", - "OK": "OK", - "Do you want to play 'x3' lesson?": "¿Quieres jugar a la lección \"x3\"?", - "Vertical Addition Beginners": "Principios de Adición Vertical", - "badge": "badge", - "Number Names-3": "Nombres del número-3", - "Table of 1": "Cuadro 1", - "Shapes 3": "Forma 3", - "More Additions": "Más adiciones", - "Date": "Fecha", - "Chapter Not Found": "Capítulo No encontrado", - "Beginners-2": "Principios-2", - "Elephants": "Elefantes", - "Months of the year 2": "Meses del año 2", - "Delete Parent's Account": "Eliminar la cuenta de pariente", - "Filters": "Filtros", - "Enter Child's Name:": "Introduzca el nombre del niño:", - "setting": "SETING", - "Select one": "Seleccione uno", - "Quick Addition-3": "Adición rápida-3", - "Goat": "Goat", - "Number Series 7-10": "Serie 7-10", - "Regroup & Add - 4": "Regroup \" Add - 4", - "Schools": "Escuelas", - "Ascending and Descending -2": "Ascendente y descendente -2", - "Number Sense 11-20": "Sentencia número 11-20", - "Difficult": "Dificultad", - "Animals and Babies": "Animales y bebés", - "Score": "Puntuación", - "Add & Subtract - 6": "Add \" Subtract - 6", - "Device is offline. Cannot create a new child profile": "El dispositivo está fuera de línea. No se puede crear un nuevo perfil infantil", - "Subtraction Mastery 3": "Maestra de Subtracción 3", - "Count and Add -1": "Cuenta y Add -1", - "Comparison 100-999": "Comparación 100-999", - "Downloading the latest updates": "Descarga las últimas actualizaciones", - "Subtraction Beginners": "Principios de Subtracción", - "Enter Implementation Partner": "Introducción Partner", - "Add 1 - 20": "Add 1 - 20", - "Double Digits - 1": "Doble dígitos - 1", - "Google": "Google", - "Are you sure you want to logout?": "¿Estás seguro de que quieres logotipo?", - "Invalid Code. Please contact your teacher": "Código inválido. Por favor contacte con su profesor", - "Specials": "Especiales", - "Rectangle": "Rectángulo", - "Decoration for Festival": "Decoración para Festival", - "Progress Report": "Progress Report", - "This Month's Reward": "La recompensa de este mes", - "won reward": "Won", - "Enter 6 Digit Code": "Ingrese el código 6 dígitos", - "Star": "Star", - "Shapes-4": "Forma 4", - "Multiplication- Elementary": "Multiplicación- Elemental", - "Go to": "Vete", - "Quick Addition 4": "Adición rápida 4", - "Continue with": "Continuar con", - "Rewards": "Las recompensas", - "Add & Subtract - 2": "Add \" Subtract - 2", - "Subtract 2": "Subtract 2", - "Add 1": "Añadir 1", - "Saving": "Salvación", - "Next": "Siguiente", - "No. of Schools is required": "Entrada No. de las escuelas", - "Home": "Home", - "Add 10-100": "Add 10-100", - "This Week's Reward": "Corriente", - "Long, Tall, Short": "Largo. Tall, Corto", - "Play ' x1 ' to win your weekly reward": "Jugar ' x1 ' para ganar su recompensa semanal", - "Months of the year 3": "Meses del año 3", - "Add 11 - 100": "Add 11 - 100", - "Beginners-1": "Los principiantes-1", - "Add & Subtract - 3": "Add \" Subtract - 3", - "Class Code": "Código de clase", - "What is Long? What is Round?": "¿Qué es Long? ¿Qué es Round?", - "Vegetable Farm": "Granja vegetal", - "Numbers 21-100": "Números 21 a 100", - "Let's Play": "Juguemos", - "Comparison 100 - 999": "Comparación 100 - 999", - "Go to Login": "Vaya a Iniciar sesión", - "Are you sure you want to remove this subject?": "¿Estás seguro de que quieres eliminar este tema?", - "Table of 7": "Cuadro 7", - "Number Series 1": "Serie 1", - "Add 2": "Añadir 2", - "We are checking your uploaded data for any errors. Please wait a moment.": "Estamos comprobando sus datos cargados para cualquier error. Por favor, espera un momento.", - "Ordinal Counting": "Conteo ordinal", - "lost reward": "Perdidos", - "Parts and whole": "Partes enteras", - "Count & Subtract-2": "Conde \" Subtract- 2", - "Which animal is the king of the jungle?": "¿Qué animal es el rey de la selva?", - "Number Names-6": "Nombres del número-6", - "where curiosity meets education!": "donde la curiosidad cumple con la educación!", - "Enter new password": "Introduzca nueva contraseña", - "Heavy or Light-4": "Pesado o ligero-4", - "Click x1 times on number x2": "Haga clic x1 veces en el número x2", - "Hi Students": "Estudiantes de Hi", - "Beginner": "Beginner", - "Count & Subtract 2": "Cuenta \" 2", - "Match Coloured Objects": "Objetos de colores emparejados", - "Subtract - 1": "Subtract - 1", - "Even and Odd Numbers": "Números incluso y extraños", - "Add Coordinator": "Add Coordinator", - "Number Series 7 - 10": "Serie 7 - 10", - "School": "Escuela", - "Subtract From 10": "Subtract from 10", - "Count & Add": "Cuenta \" Add", - "Customize your profiles.": "Personaliza tus perfiles.", - "Gender": "Género", - "Select the App Language": "Seleccione el idioma de aplicación", - "Monkey": "Monkey", - "Supported file type": "Tipo de archivo compatible", - "Subtract-2": "Subtract-2", - "No played lessons available.": "No hay lecciones disponibles.", - "More Practise": "Más práctica", - "Heavy or Light-2": "Heavy o Light-2", - "profile": "Perfil", - "Long, Tall, Short -1": "Largo. Alto, corto -1", - "You don't have any pending assignments.": "No tienes ninguna asignación pendiente.", - "6 years": "6 años", - "Sorry, we couldn't find any matches for": "Lo siento, no pudimos encontrar ninguna coincidencia para", - "More Big & Small 1-50": "Más grande & pequeño 1-50", - "No Principals Found": "No Principals Found", - "Egg": "Egg", - "All Grades": "Todos los grados", - "Teachers": "Profesores", - "Stay Connected ...": "Manténgase conectado ...", - "Government": "Gobierno", - "Sign out as a Parent": "Sign out as a Parent", - "Apply": "Aplicar", - "Chapter 4": "Capítulo 4", - "Quick Addition 7": "Adición rápida 7", - "Fast Multiplication 3-10": "Multiplicación rápida 3-10", - "Longest, Tallest, Shortest": "Más largo, más corto", - "Language": "Idioma", - "Assignments are assigned Successfully.": "Las asignaciones se asignan con éxito.", - "Compare and Add": "Compare y Add", - "How many vowels are there in the English alphabet?": "¿Cuántas vocales hay en el alfabeto inglés?", - "Errors Found in Uploaded File": "Errores encontrados en Archivo cargado", - "Double Digits - 3": "Doble dígitos - 3", - "Enter your School Code": "Ingrese su código escolar", - "Weekly": "Semanal", - "Count Backwards 2": "Conde Backwards 2", - "Big to Small": "Grande a pequeño", - "End Date": "Fecha final", - "Addition Basic": "Adiciones básicas", - "Add & Subtract - 7": "Add \" Subtract - 7", - "Speed Subtraction 2": "Sutracción de velocidad 2", - "All Subject": "All Subject" -} From d367eb75f2841d3ccbe00e8c857e975273397231 Mon Sep 17 00:00:00 2001 From: Chandu-H-J Date: Wed, 15 Jul 2026 00:42:50 +0530 Subject: [PATCH 02/29] fix/CHIM-1158-remove-duplicate-coordinator-routing-checks --- src/ops-console/pages/SidebarPage.tsx | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/src/ops-console/pages/SidebarPage.tsx b/src/ops-console/pages/SidebarPage.tsx index 6271ba65e8..212c71956f 100644 --- a/src/ops-console/pages/SidebarPage.tsx +++ b/src/ops-console/pages/SidebarPage.tsx @@ -129,7 +129,9 @@ const SidebarPage: React.FC = () => { const canAccessCampaignPage = userRoles.some((role) => CAMPAIGN_ACCESS_ROLES.includes(role as RoleType), ); - const canAccessRequestPage = userRoles.includes(RoleType.FIELD_COORDINATOR); + const canAccessCoordinatorPages = userRoles.includes( + RoleType.FIELD_COORDINATOR, + ); useEffect(() => { fetchData(); @@ -154,11 +156,12 @@ const SidebarPage: React.FC = () => { (location.pathname === campaignsPath || location.pathname === campaignCreatePath || location.pathname.startsWith(campaignDetailsPrefix))) || - (canAccessRequestPage && + (canAccessCoordinatorPages && (location.pathname === requestListPath || - location.pathname.startsWith(requestDetailsPrefix))) || - location.pathname === devicesPath || - location.pathname === resourcesPath; + location.pathname.startsWith(requestDetailsPrefix) || + location.pathname === devicesPath || + location.pathname === resourcesPath || + location.pathname === `${path}${PAGES.ADMIN_DASHBOARD}`)); if (!isAllowedPath) { history.replace(schoolListPath); @@ -166,7 +169,7 @@ const SidebarPage: React.FC = () => { }, [ canAccessCampaignPage, canAccessProgramPage, - canAccessRequestPage, + canAccessCoordinatorPages, history, isExternalUser, location.pathname, From 42baf6e40bb1fe941ea3953264ba5f5623325c4b Mon Sep 17 00:00:00 2001 From: Chandu-H-J Date: Wed, 15 Jul 2026 00:53:41 +0530 Subject: [PATCH 03/29] fix/CHIM-1158-use-dashboard-path-constant-in-sidebar-routing --- src/ops-console/pages/SidebarPage.tsx | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/ops-console/pages/SidebarPage.tsx b/src/ops-console/pages/SidebarPage.tsx index 212c71956f..1e4be44421 100644 --- a/src/ops-console/pages/SidebarPage.tsx +++ b/src/ops-console/pages/SidebarPage.tsx @@ -149,6 +149,7 @@ const SidebarPage: React.FC = () => { const requestDetailsPrefix = `${requestListPath}/`; const devicesPath = `${path}${PAGES.ADMIN_DEVICES}`; const resourcesPath = `${path}${PAGES.ADMIN_RESOURCES}`; + const dashboardPath = `${path}${PAGES.ADMIN_DASHBOARD}`; const isAllowedPath = location.pathname === schoolListPath || location.pathname.startsWith(schoolDetailsPrefix) || @@ -161,7 +162,7 @@ const SidebarPage: React.FC = () => { location.pathname.startsWith(requestDetailsPrefix) || location.pathname === devicesPath || location.pathname === resourcesPath || - location.pathname === `${path}${PAGES.ADMIN_DASHBOARD}`)); + location.pathname === dashboardPath)); if (!isAllowedPath) { history.replace(schoolListPath); From f56baeb41e0df6dd00ccd0929c98f80b7eff159b Mon Sep 17 00:00:00 2001 From: Renuka <133939590+renukaj07@users.noreply.github.com> Date: Wed, 15 Jul 2026 12:50:56 +0530 Subject: [PATCH 04/29] Fix campaign listing mobile browser zoom and assignment filtering --- src/ops-console/components/DataTableBody.css | 2 +- .../CampaignsOverviewInfoTooltip.tsx | 8 ++++++- src/ops-console/pages/CampaignListingPage.css | 24 +++++++++++-------- src/ops-console/pages/CampaignListingPage.tsx | 4 +--- src/services/api/SqliteApi.ts | 15 +++++++++--- 5 files changed, 35 insertions(+), 18 deletions(-) diff --git a/src/ops-console/components/DataTableBody.css b/src/ops-console/components/DataTableBody.css index 0228b6d1aa..622ec4f805 100644 --- a/src/ops-console/components/DataTableBody.css +++ b/src/ops-console/components/DataTableBody.css @@ -7,7 +7,7 @@ margin-bottom: 8px; -webkit-overflow-scrolling: touch; overscroll-behavior: contain; - touch-action: pan-x pan-y; + touch-action: pan-x pan-y pinch-zoom; } .data-tablebody-head-cell { diff --git a/src/ops-console/components/campaignsOverview/CampaignsOverviewInfoTooltip.tsx b/src/ops-console/components/campaignsOverview/CampaignsOverviewInfoTooltip.tsx index a3f58ff308..56b3a79cb9 100644 --- a/src/ops-console/components/campaignsOverview/CampaignsOverviewInfoTooltip.tsx +++ b/src/ops-console/components/campaignsOverview/CampaignsOverviewInfoTooltip.tsx @@ -112,7 +112,13 @@ const CampaignsOverviewInfoTooltip: React.FC< type="button" aria-label={`${label} info`} aria-expanded={resolvedIsOpen} - onClick={handleToggle} + onClick={(event) => { + event.stopPropagation(); + handleToggle(); + }} + onPointerDown={(event) => { + event.stopPropagation(); + }} onFocus={keepTooltipWithinParent} onMouseEnter={keepTooltipWithinParent} > diff --git a/src/ops-console/pages/CampaignListingPage.css b/src/ops-console/pages/CampaignListingPage.css index 5e14bf1bef..0a72ed93cf 100644 --- a/src/ops-console/pages/CampaignListingPage.css +++ b/src/ops-console/pages/CampaignListingPage.css @@ -170,7 +170,6 @@ background-color: #f8fafc !important; border-bottom: 1px solid #e3e8f1; color: #121619; - font-size: 11px; overflow: visible; padding: 14px 16px; z-index: 3; @@ -478,19 +477,24 @@ } .campaign-listing-header { + position: relative; + display: flex; align-items: center; - justify-content: space-between; - padding: 14px 16px 12px; - min-height: 52px; + justify-content: flex-end; + font-size: 24px; + padding: 5%; } .campaign-listing-header-title { - flex: 1 1 auto; - min-width: 0; - line-height: 1.2; - font-size: 22px !important; - padding-right: 12px; - text-align: left; + position: absolute; + left: 0; + right: 0; + margin: auto; + width: max-content; + text-align: center; + pointer-events: none; + font-size: 24px; + font-weight: 600; } .campaign-listing-notification-button.MuiIconButton-root { diff --git a/src/ops-console/pages/CampaignListingPage.tsx b/src/ops-console/pages/CampaignListingPage.tsx index d0cf23ba67..58164c6f80 100644 --- a/src/ops-console/pages/CampaignListingPage.tsx +++ b/src/ops-console/pages/CampaignListingPage.tsx @@ -109,9 +109,7 @@ const CampaignListingPage: React.FC = () => { return ( - - {t('Campaigns')} - + {t('Campaigns')} diff --git a/src/services/api/SqliteApi.ts b/src/services/api/SqliteApi.ts index 8c1e962fa9..4149fda98c 100644 --- a/src/services/api/SqliteApi.ts +++ b/src/services/api/SqliteApi.ts @@ -4496,9 +4496,12 @@ export class SqliteApi implements ServiceApi { const query = ` SELECT a.* FROM ${TABLES.Assignment} a - LEFT JOIN ${TABLES.Assignment_user} au ON a.id = au.assignment_id + LEFT JOIN ${TABLES.Assignment_user} au + ON a.id = au.assignment_id + AND au.is_deleted = 0 LEFT JOIN result r ON a.id = r.assignment_id AND r.student_id = "${studentId}" WHERE a.class_id = '${classId}' + AND a.is_deleted = 0 AND (a.is_class_wise = 1 OR au.user_id = "${studentId}") AND r.assignment_id IS NULL AND a.type <> 'assessment' @@ -5807,9 +5810,15 @@ export class SqliteApi implements ServiceApi { const query = ` SELECT a.* FROM ${TABLES.Assignment} a - LEFT JOIN ${TABLES.Assignment_user} au ON a.id = au.assignment_id + LEFT JOIN ${TABLES.Assignment_user} au + ON a.id = au.assignment_id + AND au.is_deleted = 0 LEFT JOIN result r ON a.id = r.assignment_id AND r.student_id = '${studentId}' - WHERE a.lesson_id = '${lessonId}' AND a.class_id = '${classId}' and (a.is_class_wise = 1 or au.user_id = '${studentId}') and r.assignment_id IS NULL + WHERE a.lesson_id = '${lessonId}' + AND a.class_id = '${classId}' + AND a.is_deleted = 0 + AND (a.is_class_wise = 1 or au.user_id = '${studentId}') + AND r.assignment_id IS NULL ORDER BY a.updated_at DESC LIMIT 1; `; From 412167fcf8dfbf94af2808dccdf7dfe748cc62f9 Mon Sep 17 00:00:00 2001 From: Renuka <133939590+renukaj07@users.noreply.github.com> Date: Wed, 15 Jul 2026 13:04:14 +0530 Subject: [PATCH 05/29] Update SqliteApi.ts --- src/services/api/SqliteApi.ts | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/services/api/SqliteApi.ts b/src/services/api/SqliteApi.ts index 4149fda98c..c731703f3a 100644 --- a/src/services/api/SqliteApi.ts +++ b/src/services/api/SqliteApi.ts @@ -4498,6 +4498,7 @@ export class SqliteApi implements ServiceApi { FROM ${TABLES.Assignment} a LEFT JOIN ${TABLES.Assignment_user} au ON a.id = au.assignment_id + AND au.user_id = "${studentId}" AND au.is_deleted = 0 LEFT JOIN result r ON a.id = r.assignment_id AND r.student_id = "${studentId}" WHERE a.class_id = '${classId}' @@ -5812,6 +5813,7 @@ export class SqliteApi implements ServiceApi { FROM ${TABLES.Assignment} a LEFT JOIN ${TABLES.Assignment_user} au ON a.id = au.assignment_id + AND au.user_id = '${studentId}' AND au.is_deleted = 0 LEFT JOIN result r ON a.id = r.assignment_id AND r.student_id = '${studentId}' WHERE a.lesson_id = '${lessonId}' From 9ea09e89b629a9e50ab9cac23effb4b55bb52b1c Mon Sep 17 00:00:00 2001 From: narayanangourav-sutara Date: Wed, 15 Jul 2026 15:21:13 +0530 Subject: [PATCH 06/29] fix: Program Tab Filter Is Not Working Root cause: partners is in text[], but the query applied scalar ilike, causing error --- src/services/api/SupabaseApi.ts | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/src/services/api/SupabaseApi.ts b/src/services/api/SupabaseApi.ts index 384acb0f93..b86475e6ce 100644 --- a/src/services/api/SupabaseApi.ts +++ b/src/services/api/SupabaseApi.ts @@ -12640,15 +12640,18 @@ export class SupabaseApi implements ServiceApi { : tab !== PROGRAM_TAB.ALL ? [tab] : []; - const listFilters: Array<[string, string[] | undefined]> = [ - ['program_model', modelFilters], + const modelFilter = buildListFilter('program_model', modelFilters); + if (modelFilter) query = query.or(modelFilter); + + // Array-backed columns must use PostgreSQL's overlap operator. Applying + // ilike to these text[] fields fails with error 42883. + const arrayFilters: Array<[string, string[] | undefined]> = [ ['partners', cleanedFilters.partner], ['program_managers', cleanedFilters.programManager], ['field_coordinators', cleanedFilters.fieldCoordinator], ]; - listFilters.forEach(([column, values]) => { - const filter = buildListFilter(column, values); - if (filter) query = query.or(filter); + arrayFilters.forEach(([column, values]) => { + if (values?.length) query = query.overlaps(column, values); }); // Needed to apply simple scalar filters at the database layer. From a50ed958aa52b684e5c897614cad468d800385eb Mon Sep 17 00:00:00 2001 From: narayanangourav-sutara Date: Wed, 15 Jul 2026 16:53:49 +0530 Subject: [PATCH 07/29] fix: Program Listing Filters Are Not Working Root cause: the percentage fields are calculated values, not program_metrics database columns. --- src/services/api/SupabaseApi.ts | 79 ++++++++++++++++++++++++--------- 1 file changed, 59 insertions(+), 20 deletions(-) diff --git a/src/services/api/SupabaseApi.ts b/src/services/api/SupabaseApi.ts index b86475e6ce..6ad7ccc20b 100644 --- a/src/services/api/SupabaseApi.ts +++ b/src/services/api/SupabaseApi.ts @@ -12673,7 +12673,14 @@ export class SupabaseApi implements ServiceApi { } } - const percentFilters: Array<[string, string]> = [ + type ProgramPercentColumn = + | 'onboarded_students_pct' + | 'activated_students_pct' + | 'active_students_pct' + | 'onboarded_teachers_pct' + | 'activated_teachers_pct' + | 'active_teachers_pct'; + const percentFilters: Array<[ProgramPercentColumn, string]> = [ ['onboarded_students_pct', 'onboardedStudentsPct'], ['activated_students_pct', 'activatedStudentsPct'], ['active_students_pct', 'activeStudentsPct'], @@ -12681,16 +12688,31 @@ export class SupabaseApi implements ServiceApi { ['activated_teachers_pct', 'activatedTeachersPct'], ['active_teachers_pct', 'activeTeachersPct'], ]; - percentFilters.forEach(([column, filterKey]) => { - const bands = cleanedFilters[filterKey] ?? []; - const conditions = bands.flatMap((band) => { - if (band === 'Low') return [`${column}.lt.31`]; - if (band === 'Mid') return [`and(${column}.gte.31,${column}.lt.70)`]; - if (band === 'High') return [`${column}.gte.70`]; - return []; - }); - if (conditions.length > 0) query = query.or(conditions.join(',')); - }); + const activePercentFilters = percentFilters + .map( + ([column, filterKey]) => + [ + column, + (cleanedFilters[filterKey] ?? []).filter((band) => + ['Low', 'Mid', 'High'].includes(band), + ), + ] as const, + ) + .filter(([, bands]) => bands.length > 0); + const requiresCalculatedPercentageFiltering = + activePercentFilters.length > 0; + + // Percentage fields are derived from multiple stored counts, so they + // cannot be filtered as program_metrics columns through PostgREST. + const isProgramPercentWithinBand = ( + percent: number | null | undefined, + band: string, + ): boolean => { + if (percent == null) return false; + if (band === 'Low') return percent < 31; + if (band === 'Mid') return percent >= 31 && percent < 70; + return percent >= 70; + }; // Needed to keep search behavior consistent across program and location fields. if (search) { @@ -12724,21 +12746,38 @@ export class SupabaseApi implements ServiceApi { const from = Math.max(Math.trunc(page) - 1, 0) * normalizedPageSize; const to = from + normalizedPageSize - 1; - // Filtering, ordering, counting, and range are applied before execution - // so only the requested page is transferred from Supabase. - const { data, error, count } = await query - .order(safeOrderBy, { ascending: order_dir === 'asc' }) - .range(from, to); + const orderedQuery = query.order(safeOrderBy, { + ascending: order_dir === 'asc', + }); + const pagedQuery = requiresCalculatedPercentageFiltering + ? orderedQuery + : orderedQuery.range(from, to); + const { data, error, count } = await pagedQuery; if (error) { logger.error('Error fetching program_metrics listing:', error); return { data: [], total: 0 }; } + const mappedRows = ((data ?? []) as ProgramMetricsTableRow[]).map((row) => + mapProgramMetricsRow(row), + ); + const filteredRows = requiresCalculatedPercentageFiltering + ? mappedRows.filter((row) => + activePercentFilters.every(([column, bands]) => + bands.some((band) => + isProgramPercentWithinBand(row[column], band), + ), + ), + ) + : mappedRows; + return { - data: ((data ?? []) as ProgramMetricsTableRow[]).map((row) => - mapProgramMetricsRow(row), - ), - total: count ?? 0, + data: requiresCalculatedPercentageFiltering + ? filteredRows.slice(from, to + 1) + : filteredRows, + total: requiresCalculatedPercentageFiltering + ? filteredRows.length + : (count ?? 0), }; } catch (error) { logger.error('Unexpected error in getProgramsFromProgramMetrics:', error); From 10ca0959197352c126a978b3f6ce4ba0648609e2 Mon Sep 17 00:00:00 2001 From: Renuka <133939590+renukaj07@users.noreply.github.com> Date: Thu, 16 Jul 2026 10:14:03 +0530 Subject: [PATCH 08/29] Restrict program creation access for program managers --- .../components/ProgramActionsMenu.tsx | 6 ++++++ .../components/ProgramListTable.tsx | 6 +++++- src/ops-console/pages/ProgramPage.test.tsx | 21 ++++++++++++++++--- src/ops-console/pages/ProgramPage.tsx | 10 +++++++++ src/ops-console/pages/SidebarPage.tsx | 11 +++++++++- src/services/api/SupabaseApi.ts | 1 + 6 files changed, 50 insertions(+), 5 deletions(-) diff --git a/src/ops-console/components/ProgramActionsMenu.tsx b/src/ops-console/components/ProgramActionsMenu.tsx index cbdea78459..c33c86d9b4 100644 --- a/src/ops-console/components/ProgramActionsMenu.tsx +++ b/src/ops-console/components/ProgramActionsMenu.tsx @@ -12,10 +12,12 @@ import { Add } from '@mui/icons-material'; import { t } from 'i18next'; type ProgramActionsMenuProps = { + canCreateProgram: boolean; onNewProgram: () => void; }; const ProgramActionsMenu: React.FC = ({ + canCreateProgram, onNewProgram, }) => { const [anchorEl, setAnchorEl] = useState(null); @@ -45,6 +47,10 @@ const ProgramActionsMenu: React.FC = ({ onNewProgram(); }, [handleClose, onNewProgram]); + if (!canCreateProgram) { + return null; + } + return ( <> - + {props.canCreateProgram ? ( + + ) : null} @@ -263,3 +266,15 @@ it('does not render Program page for non-admin roles', () => { expect(screen.queryByText('Programs')).not.toBeInTheDocument(); expect(screen.queryByTestId('program-list-table')).not.toBeInTheDocument(); }); + +it('hides program creation for program managers', () => { + mockRoles = [RoleType.PROGRAM_MANAGER]; + + render(); + + expect(screen.getByText('Programs')).toBeInTheDocument(); + expect(screen.getByTestId('program-list-table')).toBeInTheDocument(); + expect( + screen.queryByRole('button', { name: 'new program' }), + ).not.toBeInTheDocument(); +}); diff --git a/src/ops-console/pages/ProgramPage.tsx b/src/ops-console/pages/ProgramPage.tsx index b91a860338..8cea3393ea 100644 --- a/src/ops-console/pages/ProgramPage.tsx +++ b/src/ops-console/pages/ProgramPage.tsx @@ -13,6 +13,15 @@ import './SchoolList.css'; const ProgramPageContent: React.FC = () => { const logic = useProgramPageLogic(); + const { roles } = useAppSelector( + (state: RootState) => state.auth as AuthState, + ); + const userRoles = roles || []; + const canCreateProgram = userRoles.some((role) => + [RoleType.SUPER_ADMIN, RoleType.OPERATIONAL_DIRECTOR].includes( + role as RoleType, + ), + ); return (
@@ -66,6 +75,7 @@ const ProgramPageContent: React.FC = () => { isExportDisabled={logic.isExportDisabled} isExporting={logic.isExporting} onExport={logic.handleExportPrograms} + canCreateProgram={canCreateProgram} onNewProgram={() => logic.history.push(logic.newProgramPath)} columns={logic.columns} rows={logic.rows} diff --git a/src/ops-console/pages/SidebarPage.tsx b/src/ops-console/pages/SidebarPage.tsx index 1e4be44421..33a96fe234 100644 --- a/src/ops-console/pages/SidebarPage.tsx +++ b/src/ops-console/pages/SidebarPage.tsx @@ -126,6 +126,11 @@ const SidebarPage: React.FC = () => { RoleType.PROGRAM_MANAGER, ].includes(role as RoleType), ); + const canCreateProgram = userRoles.some((role) => + [RoleType.SUPER_ADMIN, RoleType.OPERATIONAL_DIRECTOR].includes( + role as RoleType, + ), + ); const canAccessCampaignPage = userRoles.some((role) => CAMPAIGN_ACCESS_ROLES.includes(role as RoleType), ); @@ -342,7 +347,11 @@ const SidebarPage: React.FC = () => { - + {canCreateProgram ? ( + + ) : ( + + )} diff --git a/src/services/api/SupabaseApi.ts b/src/services/api/SupabaseApi.ts index 6ad7ccc20b..b4c6f224b1 100644 --- a/src/services/api/SupabaseApi.ts +++ b/src/services/api/SupabaseApi.ts @@ -10278,6 +10278,7 @@ export class SupabaseApi implements ServiceApi { .from(TABLES.Assignment) .update({ is_deleted: true, + ends_at: nowIso, updated_at: nowIso, }) .eq('campaign_id', campaignId) From ae7dc6d56db03796e66c836d1dd81a7b18e813d5 Mon Sep 17 00:00:00 2001 From: Renuka <133939590+renukaj07@users.noreply.github.com> Date: Thu, 16 Jul 2026 10:55:28 +0530 Subject: [PATCH 09/29] Fixed campaign listing sorting --- .../components/ProgramActionsMenu.tsx | 6 ----- .../components/ProgramListTable.tsx | 7 +++--- src/ops-console/pages/ProgramPage.tsx | 24 ++++++++++--------- src/services/api/SupabaseApi.ts | 14 +---------- 4 files changed, 17 insertions(+), 34 deletions(-) diff --git a/src/ops-console/components/ProgramActionsMenu.tsx b/src/ops-console/components/ProgramActionsMenu.tsx index c33c86d9b4..cbdea78459 100644 --- a/src/ops-console/components/ProgramActionsMenu.tsx +++ b/src/ops-console/components/ProgramActionsMenu.tsx @@ -12,12 +12,10 @@ import { Add } from '@mui/icons-material'; import { t } from 'i18next'; type ProgramActionsMenuProps = { - canCreateProgram: boolean; onNewProgram: () => void; }; const ProgramActionsMenu: React.FC = ({ - canCreateProgram, onNewProgram, }) => { const [anchorEl, setAnchorEl] = useState(null); @@ -47,10 +45,6 @@ const ProgramActionsMenu: React.FC = ({ onNewProgram(); }, [handleClose, onNewProgram]); - if (!canCreateProgram) { - return null; - } - return ( <>