diff --git a/js/components/cohortbuilder/CohortExpression.js b/js/components/cohortbuilder/CohortExpression.js index e5df5af3a..625de0bbf 100644 --- a/js/components/cohortbuilder/CohortExpression.js +++ b/js/components/cohortbuilder/CohortExpression.js @@ -27,10 +27,28 @@ define(function (require, exports) { self.CensoringCriteria = ko.observableArray(data.CensoringCriteria && data.CensoringCriteria.map(function (criteria) { return CriteriaTypes.GetCriteriaFromObject(criteria, self.ConceptSets); })); - self.CollapseSettings = {CollapseType: ko.observable(data.CollapseSettings && data.CollapseSettings.CollapseType || "ERA"), EraPad: ko.observable(data.CollapseSettings && data.CollapseSettings.EraPad || 0 ) } + self.CollapseSettings = { + CollapseType: ko.observable(data.CollapseSettings && data.CollapseSettings.CollapseType || "ERA"), + EraPad: ko.observable(data.CollapseSettings && data.CollapseSettings.EraPad || 0 ), + EraPadUnitValue: ko.observable(data.CollapseSettings && data.CollapseSettings.EraPadUnitValue || data.CollapseSettings && data.CollapseSettings.EraPad || 0), + EraPadUnit: ko.observable(data.CollapseSettings && data.CollapseSettings.EraPadUnit || 'day') + } self.CensorWindow = ko.observable(new Period(data.CensorWindow)); self.cdmVersionRange = data.cdmVersionRange || null; + + self.CollapseSettings.EraPadUnitValue.subscribe(function (newValue){ + const insertValue = newValue.toString().replace(/[\D\.]/g, ''); + self.CollapseSettings.EraPadUnitValue(insertValue ? Number(insertValue) : 0); + self.CollapseSettings.EraPadUnit() === 'day' && self.CollapseSettings.EraPad(insertValue ? Number(insertValue) : 0); + }) + + self.CollapseSettings.EraPadUnit.subscribe(function (newValue){ + self.CollapseSettings.EraPad(newValue === 'day' ? self.CollapseSettings.EraPadUnitValue() : 0); + }) + + self.UseDatetime = ko.observable(!!data.UseDatetime); + } return CohortExpression; }); \ No newline at end of file diff --git a/js/components/cohortbuilder/CriteriaTypes/Criteria.js b/js/components/cohortbuilder/CriteriaTypes/Criteria.js index e204c5851..ec2407f06 100644 --- a/js/components/cohortbuilder/CriteriaTypes/Criteria.js +++ b/js/components/cohortbuilder/CriteriaTypes/Criteria.js @@ -8,7 +8,7 @@ define(['require', 'knockout', '../InputTypes/Range','conceptpicker/InputTypes/C self.CorrelatedCriteria = ko.observable(data.CorrelatedCriteria && new CriteriaGroup(data.CorrelatedCriteria, conceptSets)); self.DateAdjustment = ko.observable(data.DateAdjustment && new DateAdjustment(data.DateAdjustment)); - + self.IntervalUnit = data.IntervalUnit; } return Criteria; diff --git a/js/components/cohortbuilder/EndStrategies/CustomEraStrategy.js b/js/components/cohortbuilder/EndStrategies/CustomEraStrategy.js index 4a6addddb..17515868f 100644 --- a/js/components/cohortbuilder/EndStrategies/CustomEraStrategy.js +++ b/js/components/cohortbuilder/EndStrategies/CustomEraStrategy.js @@ -6,7 +6,11 @@ define(['knockout'], function (ko) { self.DrugCodesetId = ko.observable(data.DrugCodesetId); self.GapDays = ko.observable(data.GapDays || 0); + self.GapUnit = ko.observable(data.GapUnit || 'day'); + self.GapUnitValue = ko.observable(data.GapUnitValue || 0); self.Offset = ko.observable(data.Offset || 0); + self.OffsetUnitValue = ko.observable(data.OffsetUnitValue || 0); + self.OffsetUnit = ko.observable(data.OffsetUnit || 'day'); self.DaysSupplyOverride = ko.observable(data.DaysSupplyOverride); // set up subscription to update DrugCodesetId if the item is removed from conceptSets @@ -18,6 +22,50 @@ define(['knockout'], function (ko) { } }); }, null, "arrayChange"); + + self.OffsetUnitValue.subscribe(function (newValue){ + const insertValue = newValue.toString().replace(/[\D\.]/g, ''); + self.OffsetUnitValue(insertValue ? Number(insertValue) : 0); + self.OffsetUnit() === 'day' && self.Offset(insertValue ? Number(insertValue) : 0); + }) + + self.OffsetUnit.subscribe(function (newValue){ + self.GapUnit(newValue); + self.Offset(newValue === 'day' ? self.OffsetUnitValue() : 0); + }) + + self.GapUnitValue.subscribe(function (newValue){ + const insertValue = newValue.toString().replace(/[\D\.]/g, ''); + self.GapUnitValue(insertValue ? Number(insertValue) : 0); + self.GapUnit() === 'day' && self.GapDays(insertValue ? Number(insertValue) : 0); + }) + + self.GapUnit.subscribe(function (newValue){ + self.OffsetUnit(newValue); + self.GapDays(newValue === 'day' ? self.GapUnitValue() : 0); + }) + + self.OffsetUnitValue.subscribe(function (newValue){ + const insertValue = newValue.toString().replace(/[\D\.]/g, ''); + self.OffsetUnitValue(insertValue ? Number(insertValue) : 0); + self.OffsetUnit() === 'day' && self.Offset(insertValue ? Number(insertValue) : 0); + }) + + self.OffsetUnit.subscribe(function (newValue){ + self.GapUnit(newValue); + self.Offset(newValue === 'day' ? self.OffsetUnitValue() : 0); + }) + + self.GapUnitValue.subscribe(function (newValue){ + const insertValue = newValue.toString().replace(/[\D\.]/g, ''); + self.GapUnitValue(insertValue ? Number(insertValue) : 0); + self.GapUnit() === 'day' && self.GapDays(insertValue ? Number(insertValue) : 0); + }) + + self.GapUnit.subscribe(function (newValue){ + self.OffsetUnit(newValue); + self.GapDays(newValue === 'day' ? self.GapUnitValue() : 0); + }) } CustomEraStrategy.prototype.toJSON = function () { diff --git a/js/components/cohortbuilder/EndStrategies/DateOffsetStrategy.js b/js/components/cohortbuilder/EndStrategies/DateOffsetStrategy.js index ce5ce53bc..a0c8f8b69 100644 --- a/js/components/cohortbuilder/EndStrategies/DateOffsetStrategy.js +++ b/js/components/cohortbuilder/EndStrategies/DateOffsetStrategy.js @@ -6,6 +6,18 @@ define(['knockout'], function (ko) { self.DateField = ko.observable(data.DateField || "StartDate"); self.Offset = ko.observable(data.Offset || 0); + self.OffsetUnitValue = ko.observable(data.OffsetUnitValue || 0); + self.OffsetUnit = ko.observable(data.OffsetUnit || 'day'); + + self.OffsetUnitValue.subscribe(function (newValue){ + const insertValue = newValue.toString().replace(/[\D\.]/g, ''); + self.OffsetUnitValue(insertValue ? Number(insertValue) : 0); + self.OffsetUnit() === 'day' && self.Offset(insertValue ? Number(insertValue) : 0); + }) + + self.OffsetUnit.subscribe(function (newValue){ + self.Offset(newValue === 'day' ? self.OffsetUnitValue() : 0); + }) } DateOffsetStrategy.prototype.toJSON = function () { diff --git a/js/components/cohortbuilder/InputTypes/DateAdjustment.js b/js/components/cohortbuilder/InputTypes/DateAdjustment.js index f43e38c1c..8fbe4c48f 100644 --- a/js/components/cohortbuilder/InputTypes/DateAdjustment.js +++ b/js/components/cohortbuilder/InputTypes/DateAdjustment.js @@ -8,6 +8,7 @@ define(['knockout'], function (ko) { self.StartOffset = ko.observable(data.StartOffset || 0); self.EndWith = ko.observable(data.EndWith || DateAdjustment.END_DATE); self.EndOffset = ko.observable(data.EndOffset || 0); + } DateAdjustment.START_DATE = "START_DATE"; diff --git a/js/components/cohortbuilder/InputTypes/Window.js b/js/components/cohortbuilder/InputTypes/Window.js index 11c750566..b9506ed76 100644 --- a/js/components/cohortbuilder/InputTypes/Window.js +++ b/js/components/cohortbuilder/InputTypes/Window.js @@ -5,19 +5,74 @@ define(['knockout'], function (ko) { data = data || {}; self.Start = { - Days: ko.observable((data.Start && data.Start.Days) === 0 ? 0 : (data.Start && data.Start.Days) || null), - Coeff: ko.observable((data.Start && data.Start.Coeff) === 0 ? 0 : (data.Start && data.Start.Coeff) || -1) + Days: ko.observable(setDays(data.Start)), + Coeff: ko.observable((data.Start && data.Start.Coeff) === 0 ? 0 : (data.Start && data.Start.Coeff) || -1), + TimeUnit: ko.observable((data.Start && data.Start.TimeUnit) || 'day'), + TimeUnitValue: ko.observable(setTimeUnitValue(data.Start)) }; self.End = { - Days: ko.observable((data.End && data.End.Days) === 0 ? 0 : (data.End && data.End.Days) || null), - Coeff: ko.observable((data.End && data.End.Coeff) === 0 ? 0 : (data.End && data.End.Coeff) || 1) + Days: ko.observable(setDays(data.End)), + Coeff: ko.observable((data.End && data.End.Coeff) === 0 ? 0 : (data.End && data.End.Coeff) || 1), + TimeUnit: ko.observable((data.End && data.End.TimeUnit) || 'day'), + TimeUnitValue: ko.observable(setTimeUnitValue(data.End)) }; self.UseIndexEnd = ko.observable(data.UseIndexEnd || false); self.UseEventEnd = ko.observable(data.UseEventEnd || false); + + self.Start.TimeUnitValue.subscribe(function (newValue){ + const insertValue = newValue ? newValue.toString().replace(/[\D\.]/g, '') : newValue.toString().trim() === '0' ? 0 : null; + self.Start.TimeUnitValue(insertValue === null ? null : Number(insertValue)); + self.Start.TimeUnit() === 'day' && self.Start.Days(insertValue === null ? null : Number(insertValue)); + }) + + self.End.TimeUnitValue.subscribe(function (newValue){ + const insertValue = newValue ? newValue.toString().replace(/[\D\.]/g, '') : newValue.toString().trim() === '0' ? 0 : null; + self.End.TimeUnitValue(insertValue === null ? null : Number(insertValue)); + self.End.TimeUnit() === 'day' && self.End.Days(insertValue === null ? null : Number(insertValue)); + }) + + self.Start.TimeUnit.subscribe(function (newValue){ + self.End.TimeUnit(newValue); + self.Start.Days(newValue === 'day' ? (self.Start.TimeUnitValue() === 'All' ? null : self.Start.TimeUnitValue()) : null); + }) + + self.End.TimeUnit.subscribe(function (newValue){ + self.End.Days(newValue === 'day' ? (self.End.TimeUnitValue() === 'All' ? null : self.End.TimeUnitValue()) : null); + }) } + function setDays(dateValue) { + if (dateValue) { + if (dateValue.Days === 0) { + return 0; + } else if (dateValue.Days) { + return dateValue.Days; + } else if (dateValue.TimeUnitValue === 0) { + return 0; + } else if (dateValue.TimeUnitValue && dateValue.TimeUnitValue !== 'All') { + return dateValue.TimeUnitValue; + } + } + return null; + } + + function setTimeUnitValue(dateValue) { + if (dateValue) { + if (dateValue.TimeUnitValue === 0) { + return 0; + } else if (dateValue.TimeUnitValue && dateValue.TimeUnitValue !== 'All') { + return dateValue.TimeUnitValue; + } else if (dateValue.Days === 0) { + return 0; + } else if (dateValue.Days) { + return dateValue.Days; + } + } + return null; + } + return Window; }); \ No newline at end of file diff --git a/js/components/cohortbuilder/components/CohortExpressionEditor.js b/js/components/cohortbuilder/components/CohortExpressionEditor.js index 118c34fd5..0e9c0f094 100644 --- a/js/components/cohortbuilder/components/CohortExpressionEditor.js +++ b/js/components/cohortbuilder/components/CohortExpressionEditor.js @@ -39,6 +39,11 @@ define([ self.expression = params.expression; self.options = options; + self.useDateTime = ko.observable(self.expression().UseDatetime()); + self.useDateTime.subscribe(function (newValue) { + self.expression().UseDatetime(newValue); + }); + self.showCensorWindow = ko.observable( self.expression().CensorWindow().StartDate() || self.expression().CensorWindow().EndDate() diff --git a/js/components/cohortbuilder/components/CohortExpressionEditor.less b/js/components/cohortbuilder/components/CohortExpressionEditor.less index e58a5f125..41a2d8aa4 100644 --- a/js/components/cohortbuilder/components/CohortExpressionEditor.less +++ b/js/components/cohortbuilder/components/CohortExpressionEditor.less @@ -8,4 +8,10 @@ flex-grow: 1; padding-left: 1rem; } -} \ No newline at end of file +} + +.expression-editor { + &__options-label { + margin-left: 0.5rem; + } +} diff --git a/js/components/cohortbuilder/components/CohortExpressionEditorTemplate.html b/js/components/cohortbuilder/components/CohortExpressionEditorTemplate.html index ead0c21bd..1adf14c7e 100644 --- a/js/components/cohortbuilder/components/CohortExpressionEditorTemplate.html +++ b/js/components/cohortbuilder/components/CohortExpressionEditorTemplate.html @@ -35,6 +35,16 @@ +
+
Options
+
+
+ + +
+
+
+
+
+
  • + + + +
  • +
      -
    • - - - -
    • diff --git a/js/components/cohortbuilder/components/CriteriaGroup.js b/js/components/cohortbuilder/components/CriteriaGroup.js index f4147c942..28c162396 100644 --- a/js/components/cohortbuilder/components/CriteriaGroup.js +++ b/js/components/cohortbuilder/components/CriteriaGroup.js @@ -30,6 +30,38 @@ define([ return optionsArray; }); + const getUpdateTimeUnitFn = c => unit => utils.updateTimeUnit(c, unit); + + const subscribeCriteria = c => { + const updateTimeUnitFn = getUpdateTimeUnitFn(c); + const startWindow = { + start: c.StartWindow.Start.TimeUnit.subscribe(updateTimeUnitFn), + end: c.StartWindow.End.TimeUnit.subscribe(updateTimeUnitFn), + }; + const endWindowObject = ko.unwrap(c.EndWindow); + const endWindow = endWindowObject && { + start: endWindowObject.Start.TimeUnit.subscribe(updateTimeUnitFn), + end: endWindowObject.End.TimeUnit.subscribe(updateTimeUnitFn), + }; + return {startWindow, endWindow}; + }; + + const subscribeGroup = group => ko.unwrap(group.CriteriaList).map(subscribeCriteria); + + const disposeWindow = (w) => { + w.start && w.start.dispose(); + w.end && w.end.dispose(); + }; + + if (self.subscriptions) { + self.subscriptions.forEach(sub => { + sub.startWindow && disposeWindow(sub.startWindow); + sub.endWindow && disposeWindow(sub.endWindow); + }); + } + self.subscriptions = self.group.subscribe(g => subscribeGroup(ko.unwrap(g))); + subscribeGroup(ko.unwrap(self.group)); + self.getCriteriaComponent = utils.getCriteriaComponent; self.addActions = [ @@ -45,11 +77,13 @@ define([ selected: false, action: function () { var unwrappedExpression = ko.utils.unwrapObservable(self.expression); - self.group().CriteriaList.push(new AdditionalCriteria({ + const additionalCriteria = new AdditionalCriteria({ Criteria: { ConditionEra: {} } - }, unwrappedExpression.ConceptSets)); + }, unwrappedExpression.ConceptSets); + subscribeCriteria(additionalCriteria); + self.group().CriteriaList.push(additionalCriteria); }, }, { @@ -57,11 +91,13 @@ define([ selected: false, action: function () { var unwrappedExpression = ko.utils.unwrapObservable(self.expression); - self.group().CriteriaList.push(new AdditionalCriteria({ + const additionalCriteria = new AdditionalCriteria({ Criteria: { ConditionOccurrence: {} } - }, unwrappedExpression.ConceptSets)); + }, unwrappedExpression.ConceptSets); + subscribeCriteria(additionalCriteria); + self.group().CriteriaList.push(additionalCriteria); } }, { @@ -69,11 +105,13 @@ define([ selected: false, action: function () { var unwrappedExpression = ko.utils.unwrapObservable(self.expression); - self.group().CriteriaList.push(new AdditionalCriteria({ + const additionalCriteria = new AdditionalCriteria({ Criteria: { Death: {} } - }, unwrappedExpression.ConceptSets)); + }, unwrappedExpression.ConceptSets); + subscribeCriteria(additionalCriteria); + self.group().CriteriaList.push(additionalCriteria); } }, { @@ -81,11 +119,13 @@ define([ selected: false, action: function () { var unwrappedExpression = ko.utils.unwrapObservable(self.expression); - self.group().CriteriaList.push(new AdditionalCriteria({ + const additionalCriteria = new AdditionalCriteria({ Criteria: { DeviceExposure: {} } - }, unwrappedExpression.ConceptSets)); + }, unwrappedExpression.ConceptSets); + subscribeCriteria(additionalCriteria); + self.group().CriteriaList.push(additionalCriteria); } }, { @@ -93,11 +133,13 @@ define([ selected: false, action: function () { var unwrappedExpression = ko.utils.unwrapObservable(self.expression); - self.group().CriteriaList.push(new AdditionalCriteria({ + const additionalCriteria = new AdditionalCriteria({ Criteria: { DoseEra: {} } - }, unwrappedExpression.ConceptSets)); + }, unwrappedExpression.ConceptSets); + subscribeCriteria(additionalCriteria); + self.group().CriteriaList.push(additionalCriteria); } }, { @@ -105,11 +147,13 @@ define([ selected: false, action: function () { var unwrappedExpression = ko.utils.unwrapObservable(self.expression); - self.group().CriteriaList.push(new AdditionalCriteria({ + const additionalCriteria = new AdditionalCriteria({ Criteria: { DrugEra: {} } - }, unwrappedExpression.ConceptSets)); + }, unwrappedExpression.ConceptSets); + subscribeCriteria(additionalCriteria); + self.group().CriteriaList.push(additionalCriteria); } }, { @@ -117,11 +161,13 @@ define([ selected: false, action: function () { var unwrappedExpression = ko.utils.unwrapObservable(self.expression); - self.group().CriteriaList.push(new AdditionalCriteria({ + const additionalCriteria = new AdditionalCriteria({ Criteria: { DrugExposure: {} } - }, unwrappedExpression.ConceptSets)); + }, unwrappedExpression.ConceptSets); + subscribeCriteria(additionalCriteria); + self.group().CriteriaList.push(additionalCriteria); } }, { @@ -129,12 +175,14 @@ define([ selected: false, action: function () { var unwrappedExpression = ko.utils.unwrapObservable(self.expression); - self.group().CriteriaList.push(new AdditionalCriteria({ + const additionalCriteria = new AdditionalCriteria({ Criteria: { LocationRegion: {} }, IgnoreObservationPeriod: true, - }, unwrappedExpression.ConceptSets)); + }, unwrappedExpression.ConceptSets); + subscribeCriteria(additionalCriteria); + self.group().CriteriaList.push(additionalCriteria); } }, { @@ -142,11 +190,13 @@ define([ selected: false, action: function () { var unwrappedExpression = ko.utils.unwrapObservable(self.expression); - self.group().CriteriaList.push(new AdditionalCriteria({ + const additionalCriteria = new AdditionalCriteria({ Criteria: { Measurement: {} } - }, unwrappedExpression.ConceptSets)); + }, unwrappedExpression.ConceptSets); + subscribeCriteria(additionalCriteria); + self.group().CriteriaList.push(additionalCriteria); } }, { @@ -154,11 +204,13 @@ define([ selected: false, action: function () { var unwrappedExpression = ko.utils.unwrapObservable(self.expression); - self.group().CriteriaList.push(new AdditionalCriteria({ + const additionalCriteria = new AdditionalCriteria({ Criteria: { Observation: {} } - }, unwrappedExpression.ConceptSets)); + }, unwrappedExpression.ConceptSets); + subscribeCriteria(additionalCriteria); + self.group().CriteriaList.push(additionalCriteria); } }, { @@ -166,11 +218,13 @@ define([ selected: false, action: function () { var unwrappedExpression = ko.utils.unwrapObservable(self.expression); - self.group().CriteriaList.push(new AdditionalCriteria({ + const additionalCriteria = new AdditionalCriteria({ Criteria: { ObservationPeriod: {} } - }, unwrappedExpression.ConceptSets)); + }, unwrappedExpression.ConceptSets); + subscribeCriteria(additionalCriteria); + self.group().CriteriaList.push(additionalCriteria); } }, { @@ -178,11 +232,13 @@ define([ selected: false, action: function () { var unwrappedExpression = ko.utils.unwrapObservable(self.expression); - self.group().CriteriaList.push(new AdditionalCriteria({ + const additionalCriteria = new AdditionalCriteria({ Criteria: { PayerPlanPeriod: {} } - }, unwrappedExpression.ConceptSets)); + }, unwrappedExpression.ConceptSets); + subscribeCriteria(additionalCriteria); + self.group().CriteriaList.push(additionalCriteria); } }, { @@ -190,11 +246,13 @@ define([ selected: false, action: function () { var unwrappedExpression = ko.utils.unwrapObservable(self.expression); - self.group().CriteriaList.push(new AdditionalCriteria({ + const additionalCriteria = new AdditionalCriteria({ Criteria: { ProcedureOccurrence: {} } - }, unwrappedExpression.ConceptSets)); + }, unwrappedExpression.ConceptSets); + subscribeCriteria(additionalCriteria); + self.group().CriteriaList.push(additionalCriteria); } }, { @@ -202,11 +260,13 @@ define([ selected: false, action: function () { var unwrappedExpression = ko.utils.unwrapObservable(self.expression); - self.group().CriteriaList.push(new AdditionalCriteria({ + const additionalCriteria = new AdditionalCriteria({ Criteria: { Specimen: {} } - }, unwrappedExpression.ConceptSets)); + }, unwrappedExpression.ConceptSets); + subscribeCriteria(additionalCriteria); + self.group().CriteriaList.push(additionalCriteria); } }, { @@ -214,11 +274,13 @@ define([ selected: false, action: function () { var unwrappedExpression = ko.utils.unwrapObservable(self.expression); - self.group().CriteriaList.push(new AdditionalCriteria({ + const additionalCriteria = new AdditionalCriteria({ Criteria: { VisitOccurrence: {} } - }, unwrappedExpression.ConceptSets)); + }, unwrappedExpression.ConceptSets); + subscribeCriteria(additionalCriteria); + self.group().CriteriaList.push(additionalCriteria); } }, { @@ -226,11 +288,13 @@ define([ selected: false, action: function () { var unwrappedExpression = ko.utils.unwrapObservable(self.expression); - self.group().CriteriaList.push(new AdditionalCriteria({ + const additionalCriteria = new AdditionalCriteria({ Criteria: { VisitDetail: {} } - }, unwrappedExpression.ConceptSets)); + }, unwrappedExpression.ConceptSets); + subscribeCriteria(additionalCriteria); + self.group().CriteriaList.push(additionalCriteria); } }, { @@ -255,10 +319,13 @@ define([ }; self.addEndWindow = function (corelatedCriteria) { - corelatedCriteria.EndWindow(new Window({UseEventEnd:true})); + const window = new Window({UseEventEnd:true}); + corelatedCriteria.EndWindow(window); + window.tuSub = window.Start.TimeUnit.subscribe(getUpdateTimeUnitFn(corelatedCriteria)); }; self.removeEndWindow = function (corelatedCriteria) { + corelatedCriteria.EndWindow().tuSub && corelatedCriteria.EndWindow().tuSub.dispose(); corelatedCriteria.EndWindow(null); }; @@ -289,6 +356,18 @@ define([ } } + self.isDropdownTimer = function (data) { + switch (self.getCriteriaComponent(data)) { + case "drug-era-criteria": + case "dose-era-criteria": + case "condition-era-criteria": + return false; + break; + default: + return true; + } + } + self.getDistinctOptions = function (criteria) { let distinctOptions = [{id: "DOMAIN_CONCEPT", name: "Standard Concept"}, {id: "START_DATE", name: "Start Date"}]; if (self.hasVO(criteria)) { diff --git a/js/components/cohortbuilder/components/CriteriaGroupTemplate.html b/js/components/cohortbuilder/components/CriteriaGroupTemplate.html index c3205f73d..0efec703c 100644 --- a/js/components/cohortbuilder/components/CriteriaGroupTemplate.html +++ b/js/components/cohortbuilder/components/CriteriaGroupTemplate.html @@ -137,8 +137,8 @@ params="{value: StartWindow.UseEventEnd, options: $component.options.EventDateOptions}">
      - - + + @@ -148,7 +148,7 @@ - +
    diff --git a/js/components/cohortbuilder/components/CustomEraStrategyTemplate.html b/js/components/cohortbuilder/components/CustomEraStrategyTemplate.html index 8a1930bd0..578b5f52c 100644 --- a/js/components/cohortbuilder/components/CustomEraStrategyTemplate.html +++ b/js/components/cohortbuilder/components/CustomEraStrategyTemplate.html @@ -1,9 +1,9 @@ -
    +

    + data-bind="text: ko.i18nformat('components.customEraStrategy.customEraStrategyText_20', 'Specify a concept set that contains one or more drugs. A drug era will be derived from all drug exposure events for any of the drugs within the concept set, using the specified persistence window as a maximum allowable gap in <%=unitFilter%> between successive exposure events and adding a specified surveillance window to the final exposure event. If no exposure event end date is provided, then an exposure event end date is inferred to be event start date + <%=unitFilter%> supply in cases when <%=unitFilter%> supply is available or event start date + 1 <%=addUnitFilter%> otherwise. This event persistence assures that the cohort end date will be no greater than the drug era end date.', {unitFilter: $component.options.windowTimeOptions.find(option => option.value === OffsetUnit())?.name(), addUnitFilter: $component.options.windowTimeOptions.find(option => option.value === OffsetUnit())?.lessName()})">
      -
    • +
    • - + data-bind="htmlValue: GapUnitValue, eventType:'blur', ko_autocomplete: { value: GapUnitValue, source: $component.options.dayOptions, minLength: 0, maxShowItems: 10, scroll: true }"> +
    • -
    • +
    • + data-bind="htmlValue: OffsetUnitValue, eventType:'blur', ko_autocomplete: { value: OffsetUnitValue, source: $component.options.dayOptions, minLength: 0, maxShowItems: 10, scroll: true }"> + + data-bind="text: ko.i18n('components.customEraStrategy.customEraStrategyText_21', 'to the end of the era of persistence exposure as an additional period of surveillance prior to cohort exit.')">
    • -
    • +
    • + data-bind="text: ko.i18nformat('components.customEraStrategy.customEraStrategyText_22', 'Use <%=unitFilter%> supply and exposure end date for exposure duration. ', {unitFilter: $component.options.windowTimeOptions.find(option => option.value === OffsetUnit())?.name()})"> diff --git a/js/components/cohortbuilder/components/DateOffsetStrategyTemplate.html b/js/components/cohortbuilder/components/DateOffsetStrategyTemplate.html index 48839d017..32d4f06c2 100644 --- a/js/components/cohortbuilder/components/DateOffsetStrategyTemplate.html +++ b/js/components/cohortbuilder/components/DateOffsetStrategyTemplate.html @@ -3,8 +3,8 @@
    -
    - +
    +
      @@ -13,12 +13,16 @@ +
    diff --git a/js/components/cohortbuilder/components/WindowInput.js b/js/components/cohortbuilder/components/WindowInput.js index 3e58f689b..83521f0c9 100644 --- a/js/components/cohortbuilder/components/WindowInput.js +++ b/js/components/cohortbuilder/components/WindowInput.js @@ -8,6 +8,7 @@ define([ var self = this; self.options = options; self.Window = ko.utils.unwrapObservable(params.Window); // this will be a Window input type. + self.isDropdownTimer = ko.utils.unwrapObservable(params.isDropdownTimer) } // return compoonent definition diff --git a/js/components/cohortbuilder/components/WindowInputTemplate.html b/js/components/cohortbuilder/components/WindowInputTemplate.html index 4f56bb2e1..fb4048778 100644 --- a/js/components/cohortbuilder/components/WindowInputTemplate.html +++ b/js/components/cohortbuilder/components/WindowInputTemplate.html @@ -1,4 +1,19 @@ - + + +
    +
    + +
    + +
    +
    + +