diff --git a/Dockerfile b/Dockerfile index 31c986e9..892ef7be 100644 --- a/Dockerfile +++ b/Dockerfile @@ -51,6 +51,7 @@ RUN cp public/light-favicon.svg dist/ RUN cp public/fhir.svg dist/ RUN cp public/openmrs_logo_white.gif dist/ RUN cp public/mapper_landing_placeholder.png dist/ +RUN cp public/mapper_sample_lab_tests.csv dist/ RUN cp public/FullLogo-BlackText.png dist/ RUN cp -rf public/fontello dist/ diff --git a/public/mapper_sample_lab_tests.csv b/public/mapper_sample_lab_tests.csv new file mode 100644 index 00000000..025c64c1 --- /dev/null +++ b/public/mapper_sample_lab_tests.csv @@ -0,0 +1,11 @@ +Code,Name,Specimen +GLU,Glucose,Serum +HBA1C,Hemoglobin A1c,Whole blood +HGB,Hemoglobin,Whole blood +CREA,Creatinine,Serum +NA,Sodium,Serum +K,Potassium,Serum +CHOL,Total Cholesterol,Serum +LDL,LDL Cholesterol,Serum +ALT,Alanine aminotransferase,Serum +TSH,Thyroid stimulating hormone,Serum diff --git a/src/components/map-projects/MapProjects.jsx b/src/components/map-projects/MapProjects.jsx index 85599a41..1ccff267 100644 --- a/src/components/map-projects/MapProjects.jsx +++ b/src/components/map-projects/MapProjects.jsx @@ -13,6 +13,7 @@ import Menu from '@mui/material/Menu' import MenuItem from '@mui/material/MenuItem' import Paper from '@mui/material/Paper' import Typography from '@mui/material/Typography' +import Link from '@mui/material/Link' import Table from '@mui/material/Table'; import TableBody from '@mui/material/TableBody'; import TableCell from '@mui/material/TableCell'; @@ -40,6 +41,26 @@ import QuotaDialog from '../common/QuotaDialog' const NEW_PROJECT_BLOCK_ERROR_CODES = {access: 'mapper_access_denied', projects_not_entitled: 'mapper_projects_not_entitled'} +// The sample lives in ocl-docs so it can change without a Mapper release +// (OpenConceptLab/ocl_issues#2903). The bundled copy covers networks that +// block raw.githubusercontent.com. +const SAMPLE_SPREADSHEET_URL = 'https://raw.githubusercontent.com/OpenConceptLab/ocl-docs/main/docs/source/oclmap/samples/mapper_sample_lab_tests.csv' +const SAMPLE_SPREADSHEET_FALLBACK_URL = '/mapper_sample_lab_tests.csv' + +const getCSV = url => fetch(url).then(response => response.ok ? response.blob() : Promise.reject(response.status)) + +const onSampleSpreadsheetClick = event => { + event.preventDefault() + getCSV(SAMPLE_SPREADSHEET_URL).catch(() => getCSV(SAMPLE_SPREADSHEET_FALLBACK_URL)).then(blob => { + const url = URL.createObjectURL(blob) + const link = Object.assign(document.createElement('a'), {href: url, download: 'mapper_sample_lab_tests.csv'}) + document.body.appendChild(link) + link.click() + link.remove() + setTimeout(() => URL.revokeObjectURL(url), 1000) + }) +} + const MapProjects = () => { const { t } = useTranslation(); const history = useHistory() @@ -200,8 +221,32 @@ const MapProjects = () => { { loaded && projects.length === 0 && - - + + + {t('map_project.no_projects_found')} + {t('map_project.no_projects_hint')} + +
+ + {t('map_project.download_sample_spreadsheet')} + +
+ + } + />
} diff --git a/src/components/search/NoResults.jsx b/src/components/search/NoResults.jsx index 785560be..5e9172a1 100644 --- a/src/components/search/NoResults.jsx +++ b/src/components/search/NoResults.jsx @@ -2,11 +2,11 @@ import React from 'react'; import SvgIcon from '@mui/material/SvgIcon'; import { useTranslation } from 'react-i18next' -const NoResults = ({searchedText, height, text}) => { +const NoResults = ({searchedText, height, text, graphicWidth}) => { const { t } = useTranslation() return (
- + diff --git a/src/i18n/locales/en/translations.json b/src/i18n/locales/en/translations.json index 555822c8..f7e979ab 100644 --- a/src/i18n/locales/en/translations.json +++ b/src/i18n/locales/en/translations.json @@ -413,6 +413,8 @@ "project_owner": "Project Owner", "project_name": "Project Name", "no_projects_found": "No projects found.", + "no_projects_hint": "To start, upload a .csv or .xlsx file with one row per local term you want to map.", + "download_sample_spreadsheet": "Download a sample spreadsheet", "input_data": "Input Data", "context": "Context", "context_helper": "Describe your data and setting (for example, lab orders from a district hospital in Kenya). The OCL AI Assistant uses this to tailor its recommendations.", diff --git a/src/i18n/locales/es/translations.json b/src/i18n/locales/es/translations.json index c8e9d8dd..48768181 100644 --- a/src/i18n/locales/es/translations.json +++ b/src/i18n/locales/es/translations.json @@ -388,6 +388,8 @@ "project_owner": "Propietario del Proyecto", "project_name": "Nombre del Proyecto", "no_projects_found": "No se encontraron proyectos.", + "no_projects_hint": "Para empezar, suba un archivo .csv o .xlsx con una fila por cada término local que desee mapear.", + "download_sample_spreadsheet": "Descargar una hoja de cálculo de ejemplo", "input_data": "Datos de Entrada", "context": "Contexto", "context_helper": "Describa sus datos y su entorno (por ejemplo, órdenes de laboratorio de un hospital distrital en Kenia). El Asistente de IA de OCL usa esto para adaptar sus recomendaciones.", diff --git a/src/i18n/locales/pt-BR/translations.json b/src/i18n/locales/pt-BR/translations.json index 0aed6822..0fa93c58 100644 --- a/src/i18n/locales/pt-BR/translations.json +++ b/src/i18n/locales/pt-BR/translations.json @@ -413,6 +413,8 @@ "project_owner": "Proprietário do Projeto", "project_name": "Nome do Projeto", "no_projects_found": "Nenhum projeto encontrado.", + "no_projects_hint": "Para começar, carregue um arquivo .csv ou .xlsx com uma linha para cada termo local que deseja mapear.", + "download_sample_spreadsheet": "Baixar uma planilha de exemplo", "input_data": "Dados de Entrada", "context": "Contexto", "context_helper": "Descreva seus dados e o contexto (por exemplo, pedidos de laboratório de um hospital distrital no Quênia). O Assistente de IA do OCL usa isso para adaptar suas recomendações.", diff --git a/src/i18n/locales/zh/translations.json b/src/i18n/locales/zh/translations.json index c16f3a7e..4348e8b5 100644 --- a/src/i18n/locales/zh/translations.json +++ b/src/i18n/locales/zh/translations.json @@ -413,6 +413,8 @@ "project_owner": "项目所有者", "project_name": "项目名称", "no_projects_found": "未找到项目。", + "no_projects_hint": "开始之前,请上传一个 .csv 或 .xlsx 文件,每行对应一个要映射的本地术语。", + "download_sample_spreadsheet": "下载示例电子表格", "input_data": "输入数据", "context": "上下文", "context_helper": "描述您的数据及其使用场景(例如,肯尼亚某区级医院的实验室检验申请)。OCL AI 助手会据此调整其推荐结果。",