updated UI code ✅✅
Browse files- mediSync/app.py +34 -80
mediSync/app.py
CHANGED
|
@@ -533,14 +533,24 @@ def create_interface():
|
|
| 533 |
""",
|
| 534 |
elem_id="medisync-header"
|
| 535 |
)
|
| 536 |
-
|
| 537 |
with gr.Row():
|
| 538 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 539 |
appointment_id_input = gr.Textbox(
|
| 540 |
label="Appointment ID",
|
| 541 |
placeholder="Enter your appointment ID here...",
|
| 542 |
info="This will be automatically populated if you came from the doctors page",
|
| 543 |
-
value=
|
| 544 |
elem_id="appointment_id_input"
|
| 545 |
)
|
| 546 |
|
|
@@ -729,89 +739,33 @@ def create_interface():
|
|
| 729 |
outputs=[end_consultation_status]
|
| 730 |
)
|
| 731 |
|
| 732 |
-
# ---
|
| 733 |
-
|
| 734 |
gr.HTML("""
|
| 735 |
<script>
|
| 736 |
-
|
| 737 |
-
|
| 738 |
-
|
| 739 |
-
|
| 740 |
-
|
| 741 |
-
|
| 742 |
-
|
| 743 |
-
|
| 744 |
-
|
| 745 |
-
// Try by element id (Gradio 3.x and some 4.x)
|
| 746 |
var input = document.getElementById('appointment_id_input');
|
| 747 |
if (input) {
|
| 748 |
-
input.value =
|
| 749 |
-
|
| 750 |
-
input.dispatchEvent(
|
| 751 |
-
return true;
|
| 752 |
-
}
|
| 753 |
-
// Try Gradio 4.x shadow DOM
|
| 754 |
-
var gradioApp = document.querySelector('gradio-app');
|
| 755 |
-
if (gradioApp && gradioApp.shadowRoot) {
|
| 756 |
-
// Try to find textbox by label text
|
| 757 |
-
var labels = gradioApp.shadowRoot.querySelectorAll('label');
|
| 758 |
-
for (var i = 0; i < labels.length; i++) {
|
| 759 |
-
if (labels[i].textContent.trim().toLowerCase().includes('appointment id')) {
|
| 760 |
-
// Find the input in the same parent
|
| 761 |
-
var parent = labels[i].parentElement;
|
| 762 |
-
var textbox = parent.querySelector('input[type="text"], textarea');
|
| 763 |
-
if (textbox) {
|
| 764 |
-
textbox.value = val;
|
| 765 |
-
textbox.dispatchEvent(new Event('input', { bubbles: true }));
|
| 766 |
-
textbox.dispatchEvent(new Event('change', { bubbles: true }));
|
| 767 |
-
return true;
|
| 768 |
-
}
|
| 769 |
-
}
|
| 770 |
-
}
|
| 771 |
-
// Fallback: try all textboxes in shadowRoot
|
| 772 |
-
var allInputs = gradioApp.shadowRoot.querySelectorAll('input[type="text"], textarea');
|
| 773 |
-
for (var i = 0; i < allInputs.length; i++) {
|
| 774 |
-
if (allInputs[i].placeholder && allInputs[i].placeholder.toLowerCase().includes('appointment id')) {
|
| 775 |
-
allInputs[i].value = val;
|
| 776 |
-
allInputs[i].dispatchEvent(new Event('input', { bubbles: true }));
|
| 777 |
-
allInputs[i].dispatchEvent(new Event('change', { bubbles: true }));
|
| 778 |
-
return true;
|
| 779 |
-
}
|
| 780 |
-
}
|
| 781 |
-
}
|
| 782 |
-
// Try all textboxes for fallback (outside shadow DOM)
|
| 783 |
-
var allInputs = document.querySelectorAll('input[type="text"], textarea');
|
| 784 |
-
for (var i = 0; i < allInputs.length; i++) {
|
| 785 |
-
if (allInputs[i].placeholder && allInputs[i].placeholder.toLowerCase().includes('appointment id')) {
|
| 786 |
-
allInputs[i].value = val;
|
| 787 |
-
allInputs[i].dispatchEvent(new Event('input', { bubbles: true }));
|
| 788 |
-
allInputs[i].dispatchEvent(new Event('change', { bubbles: true }));
|
| 789 |
-
return true;
|
| 790 |
-
}
|
| 791 |
}
|
| 792 |
-
return false;
|
| 793 |
}
|
| 794 |
-
|
| 795 |
-
|
| 796 |
-
|
| 797 |
-
|
| 798 |
-
|
| 799 |
-
|
| 800 |
-
|
| 801 |
-
|
| 802 |
-
// Try multiple times and on different events for robustness
|
| 803 |
-
document.addEventListener('DOMContentLoaded', function() {
|
| 804 |
-
setTimeout(tryPopulateAppointmentId, 200);
|
| 805 |
-
setTimeout(tryPopulateAppointmentId, 800);
|
| 806 |
-
});
|
| 807 |
-
window.addEventListener('load', function() {
|
| 808 |
-
setTimeout(tryPopulateAppointmentId, 1200);
|
| 809 |
-
});
|
| 810 |
-
// Also try periodically for 3 seconds
|
| 811 |
-
for (let t = 0; t <= 3000; t += 400) {
|
| 812 |
-
setTimeout(tryPopulateAppointmentId, t);
|
| 813 |
-
}
|
| 814 |
-
})();
|
| 815 |
</script>
|
| 816 |
""")
|
| 817 |
|
|
|
|
| 533 |
""",
|
| 534 |
elem_id="medisync-header"
|
| 535 |
)
|
| 536 |
+
|
| 537 |
with gr.Row():
|
| 538 |
+
import urllib.parse
|
| 539 |
+
try:
|
| 540 |
+
url_params = {}
|
| 541 |
+
if hasattr(gr, 'get_current_url'):
|
| 542 |
+
current_url = gr.get_current_url()
|
| 543 |
+
if current_url:
|
| 544 |
+
parsed = urllib.parse.urlparse(current_url)
|
| 545 |
+
url_params = urllib.parse.parse_qs(parsed.query)
|
| 546 |
+
default_appointment_id = url_params.get('appointment_id', [''])[0]
|
| 547 |
+
except:
|
| 548 |
+
default_appointment_id = ""
|
| 549 |
appointment_id_input = gr.Textbox(
|
| 550 |
label="Appointment ID",
|
| 551 |
placeholder="Enter your appointment ID here...",
|
| 552 |
info="This will be automatically populated if you came from the doctors page",
|
| 553 |
+
value=default_appointment_id,
|
| 554 |
elem_id="appointment_id_input"
|
| 555 |
)
|
| 556 |
|
|
|
|
| 739 |
outputs=[end_consultation_status]
|
| 740 |
)
|
| 741 |
|
| 742 |
+
# --- Appointment ID auto-population logic (copied from template in working_hugging_face_code.py) ---
|
| 743 |
+
# # JavaScript for appointment ID auto-population
|
| 744 |
gr.HTML("""
|
| 745 |
<script>
|
| 746 |
+
function getUrlParameter(name) {
|
| 747 |
+
name = name.replace(/[[]/, '\\[').replace(/[\]]/, '\\]');
|
| 748 |
+
var regex = new RegExp('[\\?&]' + name + '=([^&#]*)');
|
| 749 |
+
var results = regex.exec(location.search);
|
| 750 |
+
return results === null ? '' : decodeURIComponent(results[1].replace(/\\+/g, ' '));
|
| 751 |
+
}
|
| 752 |
+
function populateAppointmentId() {
|
| 753 |
+
var appointmentId = getUrlParameter('appointment_id');
|
| 754 |
+
if (appointmentId) {
|
|
|
|
| 755 |
var input = document.getElementById('appointment_id_input');
|
| 756 |
if (input) {
|
| 757 |
+
input.value = appointmentId;
|
| 758 |
+
var event = new Event('input', { bubbles: true });
|
| 759 |
+
input.dispatchEvent(event);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 760 |
}
|
|
|
|
| 761 |
}
|
| 762 |
+
}
|
| 763 |
+
document.addEventListener('DOMContentLoaded', function() {
|
| 764 |
+
setTimeout(populateAppointmentId, 800);
|
| 765 |
+
});
|
| 766 |
+
window.addEventListener('load', function() {
|
| 767 |
+
setTimeout(populateAppointmentId, 1200);
|
| 768 |
+
});
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 769 |
</script>
|
| 770 |
""")
|
| 771 |
|