Skip to content

Commit

Permalink
Enable the rendering of the QR into the nlm editor when coming from t…
Browse files Browse the repository at this point in the history
…he forms-lab pre-pop, or from the show response in the csiro renderer
  • Loading branch information
brianpos committed May 19, 2024
1 parent f1afa48 commit cba0928
Show file tree
Hide file tree
Showing 4 changed files with 139 additions and 216 deletions.
21 changes: 20 additions & 1 deletion components/Questionnaire/EditorNLMRendererSection.vue
Original file line number Diff line number Diff line change
Expand Up @@ -58,6 +58,16 @@ declare namespace LForms.Util {
formId: string,
options?: object
): QuestionnaireResponse;
function convertFHIRQuestionnaireToLForms(
questionnaire: Questionnaire,
fhirVersion: string
): any;
function mergeFHIRDataIntoLForms(
resourceType: "QuestionnaireResponse",
response: QuestionnaireResponse,
lhcQ: any,
fhirVersion: string
): any;
}
declare global {
interface Window {
Expand Down Expand Up @@ -113,6 +123,15 @@ export default Vue.extend({
this.$emit("response", response);
},
/** Show this QR in the display (if it wasn't generated by itself) */
renderQuestionnaireResponse(response: QuestionnaireResponse, questionnaire: Questionnaire) {
if (!(response.meta?.tag && response.meta.tag.length > 0 && response.meta.tag[0].code?.startsWith('lformsVersion'))) {
console.log("Rendering response in lforms Renderer", response);
var lhcQ = LForms.Util.convertFHIRQuestionnaireToLForms(questionnaire, "R4");
var lhcQR = LForms.Util.mergeFHIRDataIntoLForms("QuestionnaireResponse", response, lhcQ, "R4")
LForms.Util.addFormToPage(lhcQR, 'myFormContainer', { prepopulate: false });
}
},
async prePopLForms(sourceFhirServer: string, subjectId: string) {
console.log("Prepopulating LForms with data from", sourceFhirServer, subjectId);
if (window.LForms) {
Expand All @@ -125,7 +144,7 @@ export default Vue.extend({
var fhirContext = FHIR.client(setupServer);
// Not sure if we should be adding others in here or not
// and put the other context vars in here (such as source-query which isn't internally handled by the LForms renderer)
var fhirContextVars = { };
var fhirContextVars = {};
LForms.Util.setFHIRContext(fhirContext, fhirContextVars);
this.lforms_error = undefined;
Expand Down
19 changes: 17 additions & 2 deletions components/Questionnaire/EditorRendererSection.vue
Original file line number Diff line number Diff line change
Expand Up @@ -30,8 +30,8 @@ pre {
<script lang="ts">
import Vue, { PropType } from "vue";
import { applyReactInVue } from "vuereact-combined";
import { SmartFormsRenderer, getResponse } from "@aehrc/smart-forms-renderer";
import { Questionnaire, QuestionnaireResponse } from "fhir/r4";
import { SmartFormsRenderer, getResponse, } from "@aehrc/smart-forms-renderer";
import { Questionnaire, QuestionnaireResponse } from "fhir/r4b";
import SmartFormsRendererWithFocus from "./ReactRenderer";
export default Vue.extend({
Expand All @@ -45,8 +45,23 @@ export default Vue.extend({
// console.log('Field focused: ', linkId);
this.$emit('highlight-path', linkId);
},
/** Show this QR in the display (if it wasn't generated by itself) */
renderQuestionnaireResponse(response: QuestionnaireResponse, questionnaire: Questionnaire) {
if (response.meta?.tag?.find(t => t.code?.startsWith('csiro'))) {
return;
}
console.log("Rendering response in CSIRO renderer", response);
// todo...
},
logResponse() {
const response = getResponse();
// ensure there is a tag for the csiro renderer in place
if (!response.meta?.tag?.find(t => t.code?.startsWith('csiro'))) {
if (!response.meta) response.meta = { tag: [] };
if (!response.meta.tag) response.meta.tag = [];
response.meta.tag!.push({ code: 'csiro:generated' });
}
// this.response = response;
console.log(response)
this.$emit('response', response);
Expand Down
2 changes: 1 addition & 1 deletion components/QuestionnairePrepopTest.vue
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
<v-text-field label="Subject Type" v-if="questionnaire" readonly :value="questionnaire.subjectType" />
<v-text-field v-if="questionnaire && questionnaire.subjectType" :label="questionnaire.subjectType + ' Id (subject)'"
v-model="subjectId" />
<v-text-field label="Populating from" readonly v-model="sourceFhirServer" />
<v-text-field label="Populating from" v-model="sourceFhirServer" />
<v-text-field v-if="!questionnaire || !questionnaire.subjectType" label="Patient Id" v-model="subjectId" />

<template v-if="launchContexts && launchContexts.length > 0">
Expand Down
Loading

0 comments on commit cba0928

Please sign in to comment.