Skip to content

Commit

Permalink
Merge pull request #760 from alliance-genome/release/v0.12.0-rc2
Browse files Browse the repository at this point in the history
Release/v0.12.0-rc2
  • Loading branch information
mluypaert authored Nov 3, 2022
2 parents ceec965 + 70c9197 commit f9bf75e
Show file tree
Hide file tree
Showing 330 changed files with 7,882 additions and 1,783 deletions.
26 changes: 26 additions & 0 deletions .github/workflows/alpha-build-and-deploy.yml
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,32 @@ jobs:
docker tag $ECR_REGISTRY/$ECR_REPOSITORY:$IMAGE_TAG $ECR_REGISTRY/$ECR_REPOSITORY:${GITHUB_REF#refs/heads/}
docker push $ECR_REGISTRY/$ECR_REPOSITORY:$IMAGE_TAG
docker push $ECR_REGISTRY/$ECR_REPOSITORY:${GITHUB_REF#refs/heads/}
build-deploy-maven-central-package:
runs-on: ubuntu-20.04
steps:
- name: Check out repository code
uses: actions/checkout@v2
- name: Set up Maven Central Repository
uses: actions/setup-java@v3
with:
java-version: '11'
distribution: 'adopt'
server-id: ossrh
server-username: MAVEN_USERNAME
server-password: MAVEN_PASSWORD
- run: cp src/main/resources/application.properties.defaults src/main/resources/application.properties
- name: Set Proper version
run: mvn versions:set -ntp -DnewVersion=0.0.0-SNAPSHOT
- id: install-secret-key
name: Install gpg secret key
run: |
cat <(echo -e "${{ secrets.OSSRH_GPG_SECRET_KEY }}") | gpg --batch --import
gpg --list-secret-keys --keyid-format LONG
- name: Publish package
run: mvn --batch-mode deploy
env:
MAVEN_USERNAME: ${{ secrets.OSSRH_USERNAME }}
MAVEN_PASSWORD: ${{ secrets.OSSRH_TOKEN }}
deploy-to-alpha:
if: github.event.pull_request.merged == true && !contains(github.event.pull_request.labels.*.name, 'no-deploy')
needs: [build-and-push-docker-image]
Expand Down
10 changes: 10 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -585,6 +585,16 @@ This is a grouping mechanism to group files together
| WB | Worm Base |
| ZFIN | Zebrafish Information Network |

### Including corresponding LinkML version in the JSON file submission header

The LinkML version for which the file is being submitted now needs to be added to the JSON file header, for example:

```json
{
"linkml_version" : "v1.3.2",
"disease_agm_ingest_set" : [ {
```
## EB Deployment (beta)
This section is WIP.
Expand Down
53 changes: 42 additions & 11 deletions RELEASE-NOTES.md
Original file line number Diff line number Diff line change
@@ -1,29 +1,60 @@
# AGR curation release notes

## v0.9.0
https://agr-jira.atlassian.net/wiki/spaces/ATEAM/overview

## v0.11.0

* New Features
* Enable creation of disease annotation; 1st & 2nd iteration pop-up (SCRUM-1709, SCRUM-1903)
* Enabled simple deletion of disease annotations (SCRUM-1890)
* Condition Summaries & Unique IDs for Experimental Conditions (plan to retire Condition Statements)
* Generate consistent condition_summary entries for experimental conditions (SCRUM-2036)
* Generate consistent unique_id values for experimental conditions (SCRUM-2037)
* Clean up experimental conditions (redundant entries + usage of condition_summary in place of condition_statement) (SCRUM-2038)
* Add tooltip to condition autosuggest options to display unique_id values for each experimental condition displayed (SCRUM-2040)
* Replace experimental condition autosuggest display with condition_summary instead of condition_statement (SCRUM-2039)
* Add display of compatible LinkML schema versions (SCRUM-2091)
* Fixes
* Fix broken autocomplete for experimental conditions (SCRUM-2089)
* Fix sort order of data loads by reverse chronological order (SCRUM-2010)
* Fix missing ontologies from dashboard (SCRUM-2076)
* Fix blank screen bug in Data Loads widget (SCRUM-2042)
* Clean up and address stale file loads in Data Loads widget (SCRUM-2004)

## v0.10.0

* New features
* Enabled disease annotation deletion (through UI) (SCRUM-1890)
* Enabled disease annotation creation (through UI) (SCRUM-1709)
* Data and schema changes
* Synchronised curation application data model with LinkML schema v1.2.4 (SCRUM-1926)
* Bugfixes, minor enhancements & maintenance
* Enabled preventing disease-annotation save without reference/subject/object (SCRUM-1916)
* Added additional integration tests for required fields (SCRUM-1939)
* Minor indexing improvements (for the index everything endpoint)
* Minor deployment notification fixes
* Updated data validation to treat empty strings as empty values (SCRUM-1942)
* Updated bulk load to correctly new null values on update (SCRUM-1975)
* Fixed bulk load last loaded date (SCRUM-2000)
* Cleanup of inconsistent records in DB (SCRUM-2005)
* Fixed experimentalConditions UI filter (SCRUM-2003)
* Fixed file sorting in data loads widget (SCRUM-2010)
* Added additional note reference validation (SCRUM-2028)

* Enabled deletion of relations in Condition Relation table (SCRUM-1605)
## v0.9.0

* New features
* Enabled deletion of relations in Condition Relation table (SCRUM-1605)
* Enabled creation of Experimental Conditions (SCRUM-1848, SCRUM-1849, SCRUM-1850)

* Added ATP ontology (SCRUM-1840)

* Automatic population of createdBy field when creating new entries (SCRUM-1868)

* Repurposed Condition Relation Handles table for all Condition Relations, with or without handle (SCRUM-1867)

* Enabled deletion of controlled vocabulary terms (SCRUM-1889)

* Added parents, ancestors, and closure to ontologies

* Enabled per-class reporting of LinkML schema version compatibility

* Bugfixes, minor enhancements & maintenance

* API updates to enable deletion of disease annotations (SCRUM-1711)

* Improved filter functionality for Experiments and Experimental Conditions columns in Disease Annotation table (SCRUM-1816)

## v0.8.0
Expand All @@ -48,7 +79,7 @@
* SCRUM-1765 Bring functionality of editing of 'related notes' in Disease Annotation table in line with that of 'condition relations' by @markquintontulloch in #559
* Maintenance
* SCRUM-1712 Synchronisation of References with Literature System by @markquintontulloch in #552, #557, #561, #564
# SCRUM-1732 Fixed validation of references in conditionRelations #560
* SCRUM-1732 Fixed validation of references in conditionRelations #560
* SCRUM-1710 Fixed multiple tooltips bug by @markquintontulloch in #565
* SCRUM-1722 Fixed multi-line cell warnings bug by @adamgibs in #562
* Added indexing params to reindexing endpoints by @mluypaert in #555
Expand Down
7 changes: 2 additions & 5 deletions pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@
<okta.version>3.0.1</okta.version>
<okta.authn.version>2.0.0</okta.authn.version>
<okta-jwt.version>0.5.1</okta-jwt.version>
<quarkus.platform.version>2.10.0.Final</quarkus.platform.version>
<quarkus.platform.version>2.13.3.Final</quarkus.platform.version>
<surefire-plugin.version>3.0.0-M5</surefire-plugin.version>
</properties>

Expand Down Expand Up @@ -217,7 +217,6 @@
<dependency>
<groupId>io.rest-assured</groupId>
<artifactId>rest-assured</artifactId>
<scope>test</scope>
</dependency>

<dependency>
Expand Down Expand Up @@ -353,9 +352,7 @@
<artifactId>reflections</artifactId>
<version>0.10.2</version>
</dependency>


</dependencies>
</dependencies>

<build>
<finalName>${project.artifactId}</finalName>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ export const AutocompleteRowEditor = (
const [query, setQuery] = useState();
const [fieldValue, setFieldValue] = useState(() => {
if(!rowProps) return "";
if (isReference)
if (isReference && !isMultiple)
return getRefString(rowProps.rowData[fieldName]);
return isMultiple ?
rowProps.rowData[fieldName] :
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
import React, { useState } from 'react';
import { Dropdown } from "primereact/dropdown"
import { SearchService } from '../service/SearchService';

export function ConditionRelationHandleFormDropdown({ editorChange, referenceCurie, value, name, showClear, placeholderText, isEnabled, customRef }) {
const [selectedValue, setSelectedValue] = useState(value);
const searchService = new SearchService();
const [handles, setHandles] = useState(null);

const onShow = () => {
searchService.find(
"condition-relation",
15,
0,
{"singleReference.curie": referenceCurie}
).then((data) => {
if (data.results?.length > 0) {
setHandles(data.results);
} else {
setHandles(null);
}
})
}

const onChange = (e) => {
setSelectedValue(e.value);
editorChange(e);
}

return (
<>
<Dropdown
ref={customRef}
name={name}
value={selectedValue}
disabled={!isEnabled}
options={handles}
onShow={onShow}
onChange={(e) => onChange(e)}
optionLabel="handle"
showClear={showClear}
placeholder={placeholderText}
style={{ width: '100%' }}
/>
</>
)
}

Original file line number Diff line number Diff line change
Expand Up @@ -7,8 +7,8 @@ export function ConditionRelationHandleDropdown({ field, options, editorChange,
const [selectedValue, setSelectedValue] = useState(props.rowData[field]);
const searchService = new SearchService();
const [handles, setHandles] = useState(null);


const onShow = () => {
setSelectedValue(props.rowData[field])
if (props.props.value[props.rowIndex]?.singleReference?.curie) {
Expand Down
44 changes: 22 additions & 22 deletions src/main/cliapp/src/components/GenericDataTable/GenericDataTable.js
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ import { useGenericDataTable } from "./useGenericDataTable";

export const GenericDataTable = (props) => {

const { tableName, isEnabled, aggregationFields, endpoint, columns, headerButtons, deletionEnabled } = props;
const { tableName, isEnabled, aggregationFields, endpoint, columns, headerButtons, deletionEnabled, dataKey = 'id' } = props;

const {
setSelectedColumnNames,
Expand Down Expand Up @@ -126,7 +126,7 @@ export const GenericDataTable = (props) => {
}

const showDeleteDialog = (props) => {
let _idToDelete = props.rowData ? props.rowData.id : props.id;
let _idToDelete = props.rowData ? props.rowData[dataKey] : props[dataKey];
setIdToDelete(_idToDelete);
setEntityToDelete(props);
setDeleteDialog(true);
Expand Down Expand Up @@ -158,24 +158,24 @@ export const GenericDataTable = (props) => {

const deleteDialogFooter = () => {
return (
<React.Fragment>
<Button label="Cancel" icon="pi pi-times" className="p-button-text" onClick={hideDeleteDialog} />
<Button label="Confirm" icon="pi pi-check" className="p-button-text" onClick={() => deleteRow(idToDelete, entityToDelete)} />
</React.Fragment>
);
<React.Fragment>
<Button label="Cancel" icon="pi pi-times" className="p-button-text" onClick={hideDeleteDialog} />
<Button label="Confirm" icon="pi pi-check" className="p-button-text" onClick={() => deleteRow(idToDelete, entityToDelete)} />
</React.Fragment>
);
}

const errorDialogFooter = () => {
return (
<React.Fragment>
<Button label="OK" icon="pi pi-times" className="p-button-text" onClick={hideErrorDialog} />
</React.Fragment>
);
<React.Fragment>
<Button label="OK" icon="pi pi-times" className="p-button-text" onClick={hideErrorDialog} />
</React.Fragment>
);
}
return (
<div className="card">
<Toast ref={toast_topright} position="top-right" />
<DataTable dataKey='id' value={entities} header={header} ref={dataTable}
<DataTable dataKey={dataKey} value={entities} header={header} ref={dataTable}
filterDisplay="row" scrollHeight="62vh" scrollable= {true} tableClassName='p-datatable-md'
editMode= "row" onRowEditInit= {onRowEditInit} onRowEditCancel= {onRowEditCancel}
onRowEditSave= {onRowEditSave} editingRows={editingRows} onRowEditChange={onRowEditChange}
Expand All @@ -199,21 +199,21 @@ export const GenericDataTable = (props) => {
</DataTable>

<Dialog visible={deleteDialog} style={{ width: '450px' }} header="Confirm Deletion" modal footer={deleteDialogFooter} onHide={hideDeleteDialog}>
<div className="confirmation-content">
<i className="pi pi-exclamation-triangle mr-3" style={{ fontSize: '2rem'}} />
{<span>Warning: You are about to delete this data object from the database. This cannot be undone. Please confirm deletion or cancel.</span>}
</div>
</Dialog>
<div className="confirmation-content">
<i className="pi pi-exclamation-triangle mr-3" style={{ fontSize: '2rem'}} />
{<span>Warning: You are about to delete this data object from the database. This cannot be undone. Please confirm deletion or cancel.</span>}
</div>
</Dialog>
<Dialog visible={errorDialog} style={{ width: '450px' }} header="Deletion Error" modal footer={errorDialogFooter} onHide={hideErrorDialog}>
<div className="error-message-dialog">
<i className="pi pi-ban mr-3" style={{ fontSize: '2rem'}} />
{<span>ERROR: The data object you are trying to delete is in use by other data objects. Remove data connections to all other data objects and try to delete again.</span>}
</div>
<div className="error-message-dialog">
<i className="pi pi-ban mr-3" style={{ fontSize: '2rem'}} />
{<span>ERROR: The data object you are trying to delete is in use by other data objects. Remove data connections to all other data objects and try to delete again.</span>}
</div>
<hr/>
<div className="error-message-detail">
{<span style={{fontSize: '0.85rem'}}>{deletionErrorMessage}</span>}
</div>
</Dialog>
</Dialog>
</div>
)
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -70,22 +70,6 @@ export const useGenericDataTable = ({

const { toast_topleft, toast_topright } = toasts;


useQuery([`${tableState.tableKeyName}Aggregations`, aggregationFields, tableState],
() => searchService.search(endpoint, 0, 0, null, {}, {}, aggregationFields), {
onSuccess: (data) => {
},
onError: (error) => {
toast_topleft.current.show([
{ life: 7000, severity: 'error', summary: 'Page error: ', detail: error.message, sticky: false }
]);
},
keepPreviousData: true,
refetchOnWindowFocus: false,
enabled: !!(tableState)
}
);

useQuery([tableState.tableKeyName, tableState],
() => searchService.search(endpoint, tableState.rows, tableState.page, tableState.multiSortMeta, tableState.filters, sortMapping, [], nonNullFieldsTable), {
onSuccess: (data) => {
Expand All @@ -107,7 +91,7 @@ export const useGenericDataTable = ({
if (
!tableState.filters
|| Object.keys(tableState.filters).length > 0
|| tableState.multiSortMeta.length > 0
|| (tableState.multiSortMeta && tableState.multiSortMeta.length > 0)
|| tableState.page > 0
|| !newEntity
) return;
Expand Down
5 changes: 3 additions & 2 deletions src/main/cliapp/src/components/TrueFalseDropDownSelector.js
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import React, { useState } from 'react';
import { Dropdown } from "primereact/dropdown"

export function TrueFalseDropdown({ field, options, editorChange, props }) {
export function TrueFalseDropdown({ field, options, showClear = false, editorChange, props }) {
const [selectedValue, setSelectedValue] = useState(props.rowData[field]);

const onShow = () => {
Expand All @@ -21,7 +21,8 @@ export function TrueFalseDropdown({ field, options, editorChange, props }) {
onShow={onShow}
onChange={(e) => onChange(e)}
optionLabel="text"
placeholder={JSON.stringify(props.rowData[field])}
showClear={showClear}
placeholder={selectedValue === null ? '' : JSON.stringify(selectedValue)}
style={{ width: '100%' }}
/>
</>
Expand Down
Loading

0 comments on commit f9bf75e

Please sign in to comment.