Skip to content

Commit a48b7f2

Browse files
authored
new dev - NewAnimalWizard (#264)
* new dev - NewAnimalWizard 1. Darkened disabled color 2. ignore sub-species change - added error reporting to UI 3. refactored fetchlocations query to use LABKEY.Query.executeSql (needed to include NULL species locations) 4. added LABKEY.Query.executeSQL to api 5. don't clear acquisition type on species change (state.selectedOption and state.newAnimalData.selectedOption) 6. lint fixes 7. updated snapshot * new Dev - NewAnimalWizard/BirthRecordReport 1. tweaked page formatting (css) 2. Open BirthRecordReport from NewAnimalWizard in new window
1 parent 54c1858 commit a48b7f2

11 files changed

Lines changed: 138 additions & 68 deletions

File tree

snprc_ehr/src/client/BirthRecordReport/styles/birthRecordReport.scss

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,3 +4,12 @@
44
@import "../../shared/styles/formatting/panels";
55
@import "../../Shared/styles/components/infoPanel";
66
@import "../../Shared/styles/components/summaryGridPanel";
7+
8+
9+
.right-panel {
10+
flex: 1;
11+
padding-left: 1rem;
12+
flex-direction: column;
13+
height: $m-panel;
14+
max-width: $m-panel-width;
15+
}

snprc_ehr/src/client/NewAnimalPage/NewAnimalPage.jsx

Lines changed: 20 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -96,6 +96,12 @@ export default class NewAnimalPage extends React.Component {
9696
))
9797
}).catch(error => {
9898
console.log(`Error in loadLists: ${error}`)
99+
this.setState(prevState => (
100+
{
101+
...prevState,
102+
errorMessage: error.message
103+
}
104+
))
99105
})
100106
}
101107

@@ -125,6 +131,12 @@ export default class NewAnimalPage extends React.Component {
125131
))
126132
}).catch(error => {
127133
console.log(`Error in handleSpeciesChange: ${error}`)
134+
this.setState(prevState => (
135+
{
136+
...prevState,
137+
errorMessage: error.message
138+
}
139+
))
128140
})
129141
}
130142

@@ -155,7 +167,8 @@ export default class NewAnimalPage extends React.Component {
155167
}
156168

157169
handleSpeciesChange = selectedSpecies => {
158-
if (this.state.newAnimalData.species !== undefined) {
170+
// ignore sub-species change
171+
if (this.state.newAnimalData.species !== undefined && this.state.newAnimalData.species.arcSpeciesCode !== selectedSpecies.arcSpeciesCode) {
159172
this.selectedSpecies = selectedSpecies
160173
this.setState(prevState => (
161174
{
@@ -369,6 +382,7 @@ export default class NewAnimalPage extends React.Component {
369382
{
370383
...initialState,
371384
isLoading: false,
385+
selectedOption: prevState.selectedOption,
372386
speciesList: [
373387
...prevState.speciesList
374388
],
@@ -389,7 +403,8 @@ export default class NewAnimalPage extends React.Component {
389403
],
390404
newAnimalData: {
391405
...initialState.newAnimalData,
392-
species: this.selectedSpecies
406+
species: this.selectedSpecies,
407+
selectedOption: prevState.newAnimalData.selectedOption
393408
}
394409
}
395410
), this.loadListsForSpecies(this.selectedSpecies))
@@ -408,11 +423,12 @@ export default class NewAnimalPage extends React.Component {
408423
}
409424

410425
print = id => {
411-
// const newAnimalData = this.state.summaryData.find(o => o.id === id)
412426
const reportPath = getReportPath('BirthRecord')
413427
const fullPath = `${reportPath}&rc:Parameters=Collapsed&TargetID=${id}` // &rs:Format=PDF // uncomment to print to PDF
414428

415-
window.open(fullPath)
429+
const left = window.screenX + 20
430+
431+
window.open(fullPath, '_blank', `location=yes,height=850,width=768,status=yes, left=${left}`)
416432
}
417433

418434
render() {

snprc_ehr/src/client/NewAnimalPage/api/fetchLocations.js

Lines changed: 22 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
1-
import { Filter } from '@labkey/api'
2-
import { request } from '../../Shared/api/api'
1+
import { executeSql } from '../../Shared/api/api'
32

43
const parse = rows => {
54
return rows.map(({ data }, key) => {
@@ -8,16 +7,29 @@ const parse = rows => {
87
}
98

109
const fetchLocations = species => {
10+
const sql = `SELECT h.species AS species,
11+
r.room AS room,
12+
r.maxCages AS maxCages,
13+
r.rowId AS rowId
14+
FROM ehr_lookups.rooms r
15+
LEFT OUTER JOIN (
16+
SELECT DISTINCT d.species.arc_species_code as species, d2.room AS room
17+
FROM study.housing AS d2
18+
INNER join study.demographics d on d2.id = d.id
19+
WHERE d2.enddate IS NULL
20+
AND d2.qcstate.publicdata = true
21+
) AS h ON r.room = h.room
22+
WHERE r.dateDisabled is NULL
23+
AND CAST(r.room as FLOAT) BETWEEN 1.00 AND 799.99
24+
AND (h.species = '${species}' OR h.species is NULL)`
25+
1126
return new Promise((resolve, reject) => {
12-
request({
27+
if (!species || species.length !== 2) reject(new Error('Invalid species format detected'))
28+
29+
executeSql({
1330
schemaName: 'snprc_ehr',
14-
queryName: 'ActiveLocationsAll',
15-
columns: ['species', 'room', 'maxCages', 'rowId'],
16-
sort: '-species, room',
17-
filterArray: [
18-
// Filter.create('species', species, Filter.Types.EQUAL)
19-
Filter.create('species', `${species}; null`, Filter.Types.IN)
20-
]
31+
sql,
32+
sort: '-species, room'
2133
}).then(({ rows }) => {
2234
resolve(parse(rows))
2335
}).catch(error => {

snprc_ehr/src/client/NewAnimalPage/components/SpeciesPanel.jsx

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,6 @@ export default class SpeciesPanel extends React.Component {
5050
className="shared-dropdown shared-dropdown__species_width"
5151
classNamePrefix="shared-select"
5252
id="species-select"
53-
isClearable
5453
isDisabled={ this.props.disabled }
5554
isLoading={ !this.props.speciesList }
5655
onChange={ this.handleSpeciesChange }
Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
@import "../../Shared/styles/style";
2-
@import "../../shared/styles/formatting/wizard";
3-
@import "../../shared/styles/formatting/panels";
2+
@import "../../Shared/styles/formatting/wizard";
3+
@import "../../Shared/styles/formatting/panels";
44
@import "../../Shared/styles/components/wrappedDatePicker";
55
@import "../../Shared/styles//components/modal";
66
@import "../../Shared/styles/components/shared";
@@ -10,3 +10,16 @@
1010
@import "./components/locationPanel";
1111
@import "./components/dietPanel";
1212
@import "./components/summaryPanel";
13+
14+
.right-panel {
15+
flex: 1;
16+
padding-left: 1rem;
17+
flex-direction: column;
18+
min-height: $l-panel;
19+
}
20+
21+
.table-scroll {
22+
overflow-y: auto;
23+
height:$l-panel;
24+
padding: 0, .1rem !important;
25+
}

snprc_ehr/src/client/NewAnimalPage/tests/components/__snapshots__/SpeciesPanel.test.jsx.snap

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,6 @@ exports[`Should render the SpeciesPanel 1`] = `
6363
defaultMenuIsOpen={false}
6464
defaultValue={null}
6565
id="species-select"
66-
isClearable={true}
6766
isDisabled={false}
6867
isLoading={false}
6968
onChange={[Function]}
Lines changed: 50 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -1,55 +1,62 @@
11
/* eslint-disable no-unused-vars, camelcase */
22

33
import { NewAnimalData } from '../../../BirthRecordReport/tests/fixtures/apiTestData'
4-
import { CurrentSpeciesLookup, AccountLookup, validInstitutions, ValidDiet, AcquisitionTypesLookup,
4+
import {
5+
CurrentSpeciesLookup, AccountLookup, validInstitutions, ValidDiet, AcquisitionTypesLookup,
56
valid_bd_status, PotentialDams, PotentialSires, ActiveLocationsAll, colonyGroups,
6-
ProtocolLookup, pedigreeGroups } from '../../../NewAnimalPage/tests/fixtures/apiTestData'
7+
ProtocolLookup, pedigreeGroups
8+
} from '../../../NewAnimalPage/tests/fixtures/apiTestData'
79

810
export const request = ({ schemaName, queryName, viewName = '', sort = '', columns = [], filterArray = [] }) => {
911
// console.log(`loading list: ${queryName}`);
1012
return new Promise(resolve => {
1113
switch (queryName) {
12-
case 'CurrentSpeciesLookup':
13-
resolve(CurrentSpeciesLookup)
14-
break
15-
case 'AccountLookup':
16-
resolve(AccountLookup)
17-
break
18-
case 'validInstitutions':
19-
resolve(validInstitutions)
20-
break
21-
case 'ValidDiet':
22-
resolve(ValidDiet)
23-
break
24-
case 'AcquisitionTypesLookup':
25-
resolve(AcquisitionTypesLookup)
26-
break
27-
case 'PotentialDams':
28-
resolve(PotentialDams)
29-
break
30-
case 'PotentialSires':
31-
resolve(PotentialSires)
32-
break
33-
case 'ActiveLocationsAll':
34-
resolve(ActiveLocationsAll)
35-
break
36-
case 'colonyGroups':
37-
resolve(colonyGroups)
38-
break
39-
case 'ProtocolLookup':
40-
resolve(ProtocolLookup)
41-
break
42-
case 'pedigreeGroups':
43-
resolve(pedigreeGroups)
44-
break
45-
case 'valid_bd_status':
46-
resolve(valid_bd_status)
47-
break
48-
case 'NewAnimalData':
49-
resolve(NewAnimalData)
50-
break
51-
default:
52-
break
14+
case 'CurrentSpeciesLookup':
15+
resolve(CurrentSpeciesLookup)
16+
break
17+
case 'AccountLookup':
18+
resolve(AccountLookup)
19+
break
20+
case 'validInstitutions':
21+
resolve(validInstitutions)
22+
break
23+
case 'ValidDiet':
24+
resolve(ValidDiet)
25+
break
26+
case 'AcquisitionTypesLookup':
27+
resolve(AcquisitionTypesLookup)
28+
break
29+
case 'PotentialDams':
30+
resolve(PotentialDams)
31+
break
32+
case 'PotentialSires':
33+
resolve(PotentialSires)
34+
break
35+
case 'colonyGroups':
36+
resolve(colonyGroups)
37+
break
38+
case 'ProtocolLookup':
39+
resolve(ProtocolLookup)
40+
break
41+
case 'pedigreeGroups':
42+
resolve(pedigreeGroups)
43+
break
44+
case 'valid_bd_status':
45+
resolve(valid_bd_status)
46+
break
47+
case 'NewAnimalData':
48+
resolve(NewAnimalData)
49+
break
50+
default:
51+
break
52+
}
53+
})
54+
}
55+
56+
export const executeSql = ({ schemaName, sql, sort = '' }) => {
57+
return new Promise(resolve => {
58+
if (sql.indexOf('FROM ehr_lookups.rooms') > 0) {
59+
resolve(ActiveLocationsAll)
5360
}
5461
})
5562
}

snprc_ehr/src/client/Shared/api/api.js

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,3 +21,22 @@ export const request = ({ schemaName, queryName, viewName = '', sort = '', colum
2121
})
2222
})
2323
}
24+
25+
export const executeSql = ({ schemaName, sql, sort = '' }) => {
26+
return new Promise((resolve, reject) => {
27+
const success = response => {
28+
resolve(response)
29+
}
30+
const failure = error => {
31+
reject(error)
32+
}
33+
Query.executeSql({
34+
requiredVersion: 19.2,
35+
schemaName,
36+
sql,
37+
sort,
38+
success,
39+
failure
40+
})
41+
})
42+
}

snprc_ehr/src/client/Shared/styles/components/_summaryGridPanel.scss

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,7 @@
11
.table-scroll {
22
overflow-y: auto;
3-
height:$m-panel;
4-
padding: 0, .1rem !important;
5-
3+
min-height:$m-panel;
4+
padding: 0, 0.1rem !important;
65
}
76

87
.table-bordered > thead > tr > th {

snprc_ehr/src/client/Shared/styles/formatting/_panels.scss

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,6 @@
66
.right-panel {
77
flex: 1;
88
padding-left: 1rem;
9-
flex-direction: column;
10-
height: $m-panel;
11-
max-width: $m-panel-width;
129
}
1310
.parent-panel {
1411
display: flex;

0 commit comments

Comments
 (0)