Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Remove hard-coded sample logic #1516 #1535

Merged
merged 8 commits into from
Jan 17, 2024
Original file line number Diff line number Diff line change
Expand Up @@ -69,22 +69,24 @@ define([
return feature.properties;
},
onEachFeature: function(feature, layer) {
const classificationConcepts = Object.freeze({
// Concept IDs, not values
"a2588fa8-5ae6-4770-a473-dec0c05fb175": 'Analysis Area',
"2703e524-b5ea-4548-bea7-7ce354e4e05a": 'Sample Area',
"9db724b9-b3c7-4761-9a50-673d64a15bd8": 'Sample',
});
if (feature.properties.active === false){
var popup = L.popup({
closeButton: false,
maxWidth: 250
})
.setContent(popupHtml)
.on('add', function() {
// hope that translator has not adjusted the location of the bracket.
const titleArray = feature.properties.name.split('[');
const title = titleArray[0].trim();
// TODO(i18n) samples
const type = titleArray[1].startsWith('Analysis Area') ? 'Analysis Area':
titleArray[1].startsWith('Sample Area') ? 'Sample Area':
'Part';
const parent = titleArray[1].startsWith('Analysis Area') ? titleArray[1].replace('Analysis Area of ', '').replace(']',''):
titleArray[1].startsWith('Sample Area') ? titleArray[1].replace('Sample Area of ','').replace(']',''):
titleArray[1].replace(']','');
const type = classificationConcepts[feature.properties.classificationConceptId];
const parent = feature.properties.parentPhysicalThingName;
const description = (
arches.translations.existingAnnotation
.replace('{title}', title)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -155,7 +155,7 @@ define([
this.areaNameFromTileData = (tileData) => {
const nameValue = tileData[self.partIdentifierAssignmentLabelNodeId];
const baseName = self.getStrValue(nameValue) || "";
return `${baseName} [${arches.translations.analysisArea} ${arches.translations.of} ${self.physicalThingName()}]`;
return arches.translations.analysisAreaOf.replace('{analysisName}', baseName).replace('{physicalThingName}', self.physicalThingName());
};
this.areaName = ko.computed(function(){
if (self.selectedAnalysisAreaInstance()){
Expand Down Expand Up @@ -410,7 +410,6 @@ define([
parentPhysicalThingTileData: koMapping.toJSON(parentPhysicalThing.data),
parentPhysicalThingTileId: parentPhysicalThing.tileid,
transactionId: params.form.workflowId,
analysisAreaName: self.areaName()
};

self.savingTile(true);
Expand Down Expand Up @@ -504,12 +503,12 @@ define([

const data = {
parentPhysicalThingResourceid: self.physicalThingResourceId,
parentPhysicalThingName: self.physicalThingName(),
collectionResourceid: params.projectSet,
partIdentifierAssignmentTileData: koMapping.toJSON(self.selectedAnalysisAreaInstance().data),
partIdentifierAssignmentTileId: self.selectedAnalysisAreaInstance().tileid,
partIdentifierAssignmentResourceId: self.selectedAnalysisAreaInstance().resourceinstance_id,
transactionId: params.form.workflowId,
analysisAreaName: self.areaName(),
};

$.ajax({
Expand Down Expand Up @@ -812,6 +811,7 @@ define([
})
.then(function(json) {
json.features.forEach(function(feature) {
// TODO(i18n) slug or name?
feature.properties.graphName = "Physical Thing";
if (self.sampleLocationTileIds.includes(feature.properties.tileId)) {
feature.properties.type = 'sample_location';
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,9 @@ define([
'arches',
'views/components/workflows/summary-step',
'templates/views/components/workflows/analysis-areas-workflow/analysis-areas-final-step.htm',
'utils/label-based-graph-utils',
'views/components/annotation-summary',
], function(ko, _, uuid, arches, SummaryStep, analysisAreasFinalStepTemplate) {
], function(ko, _, uuid, arches, SummaryStep, analysisAreasFinalStepTemplate, labelBasedGraphUtils) {

function viewModel(params) {
var self = this;
Expand Down Expand Up @@ -97,12 +98,21 @@ define([
annotator: annotation.annotator,
});
} else {
annotation.annotationJson.features.map(feature => {
feature.properties.color = '#999999';
feature.properties.fillColor = '#999999';
feature.properties.tileId = annotation.tileId;
feature.properties.name = annotation.annotationName;
feature.properties.active = false;
// TODO: fetch in parallel
fetch(self.urls.api_resources(annotation.resourceId) + '?format=json&compact=false&v=beta')
.then(response => response.json())
.then(data => {
annotation.annotationJson.features.map(feature => {
feature.properties.color = '#999999';
feature.properties.fillColor = '#999999';
feature.properties.tileId = annotation.tileId;
feature.properties.name = annotation.annotationName;
feature.properties.active = false;
feature.properties.classificationConceptId = data.resource.type.concept_details[0].concept_id;
feature.properties.parentPhysicalThingName = labelBasedGraphUtils.getPropByNodeId(
data.resource, 'f8d5fe4c-b31d-11e9-9625-a4d18cec433a', '@display_value'
);
});
});
}
});
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -94,9 +94,6 @@ define([
analysis: '31d97bdd-f10f-4a26-958c-69cb5ab69af1',
};
this.physicalThingTypeNodeId = '8ddfe3ab-b31d-11e9-aff0-a4d18cec433a';
// TODO(i18n) samples
const sampleSubstring = '[Sample'; // for "[Sample of ..." and "[Sample Area of ..."
const regionSubstring = '[Region';

this.value.subscribe(function(a) {
a.forEach(function(action) {
Expand Down Expand Up @@ -332,8 +329,8 @@ define([
return (
result.context_label.includes("Physical Thing") ||
result.context_label.includes("Search Term")
) && (self.includeSamples() || !result.text.includes(sampleSubstring))
&& (self.includeAnalysisAreas() || !result.text.includes(regionSubstring))
) && (self.includeSamples() || !result.text.includes(arches.translations.sample))
&& (self.includeAnalysisAreas() || !result.text.includes(arches.translations.analysisArea))
});
return {
"results": filteredResults
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -225,15 +225,17 @@ define([
})
.setContent(popupHtml)
.on('add', function() {
const classificationConcepts = Object.freeze({
// Concept IDs, not values
"a2588fa8-5ae6-4770-a473-dec0c05fb175": 'Analysis Area',
"2703e524-b5ea-4548-bea7-7ce354e4e05a": 'Sample Area',
"9db724b9-b3c7-4761-9a50-673d64a15bd8": 'Sample',
});
// hope that translator has not adjusted the location of the bracket.
const titleArray = feature.properties.name.split('[');
const title = titleArray[0].trim();
// TODO(i18n) samples
const type = titleArray[1].startsWith('Analysis Area') ? 'Analysis Area':
titleArray[1].startsWith('Sample Area') ? 'Sample Area':
'Part';
const parent = titleArray[1].startsWith('Analysis Area') ? titleArray[1].replace('Analysis Area of ', '').replace(']',''):
titleArray[1].startsWith('Sample Area') ? titleArray[1].replace('Sample Area of ','').replace(']',''):
titleArray[1].replace(']','');
const type = classificationConcepts[feature.properties.classificationConceptId];
const parent = feature.properties.parentPhysicalThingName;
const description = (
arches.translations.existingAnnotation
.replace('{title}', title)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -86,7 +86,6 @@ define([
const reportDate = today.toLocaleDateString('en-US', options);
const physicalThingsDetailsArray = [...Object.values(physicalThingsDetails)];
const objectOfStudyDetailsArray = physicalThingsDetailsArray.filter(thing => physicalThingFromPreviousStep.includes(thing.resourceinstanceid));
// TODO(i18n) samples
const analysisAreas = physicalThingsDetailsArray.filter(physicalThing => physicalThing.resource?.type?.["@display_value"] == 'analysis areas');
const annotationScreenshots = screenshots?.map((screenshot) => {
const url = `${window.location.origin}/temp_file/${screenshot.fileId}`;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -56,22 +56,24 @@ define([
return feature.properties;
},
onEachFeature: function(feature, layer) {
const classificationConcepts = Object.freeze({
// Concept IDs, not values
"a2588fa8-5ae6-4770-a473-dec0c05fb175": 'Analysis Area',
"2703e524-b5ea-4548-bea7-7ce354e4e05a": 'Sample Area',
"9db724b9-b3c7-4761-9a50-673d64a15bd8": 'Sample',
});
if (!feature.properties.active){
var popup = L.popup({
closeButton: false,
maxWidth: 250
})
.setContent(iiifPopup)
.on('add', function() {
// hope that translator has not adjusted the location of the bracket.
const titleArray = feature.properties.locationName.split('[');
const title = titleArray[0].trim();
// TODO(i18n) samples
const type = titleArray[1].startsWith('Analysis Area') ? 'Analysis Area':
titleArray[1].startsWith('Sample Area') ? 'Sample Area':
'Part';
const parent = titleArray[1].startsWith('Analysis Area') ? titleArray[1].replace('Analysis Area of ', '').replace(']',''):
titleArray[1].startsWith('Sample Area') ? titleArray[1].replace('Sample Area of ','').replace(']',''):
titleArray[1].replace(']','');
const type = classificationConcepts[feature.properties.classificationConceptId];
const parent = feature.properties.parentPhysicalThingName;
const description = (
arches.translations.existingAnnotation
.replace('{title}', title)
Expand Down Expand Up @@ -209,35 +211,43 @@ define([
const parentPhyiscalThingResourceId = self.getResourceValue(val.resource["Sampling Unit"][0], ['Sampling Area','Overall Object Sampled','resourceId']);
const parentPhyiscalThing = ko.observable();
self.getResourceData(parentPhyiscalThingResourceId, parentPhyiscalThing);
parentPhyiscalThing.subscribe(function(val){ // 2nd request
parentPhyiscalThing.subscribe(async function(val) { // 2nd request
const parts = self.getResourceValue(val.resource, ['Part Identifier Assignment']);
parts.forEach(function(part){
for (const part of parts) {
const locationName = self.getResourceValue(part,['Part Identifier Assignment_Physical Part of Object','@display_value']);
const tileId = self.getResourceValue(part,['@tile_id']);
const sampleAreaResourceId = self.getResourceValue(part,['Part Identifier Assignment_Physical Part of Object','resourceId']);
const partResourceId = self.getResourceValue(part,['Part Identifier Assignment_Physical Part of Object','resourceId']);
const partsAnnotationString = self.getResourceValue(part,['Part Identifier Assignment_Polygon Identifier','@display_value']);
if (partsAnnotationString) {
const locationAnnotation = JSON.parse(partsAnnotationString.replaceAll("'",'"'));
const canvas = locationAnnotation.features[0].properties.canvas;
locationAnnotation.features.forEach(function(feature){
feature.properties.active = false;
feature.properties.tileId = tileId;
feature.properties.locationName = locationName;
feature.properties.sampleAreaResourceId = sampleAreaResourceId;
});
if (canvas in partsAnnotationCollection) {
partsAnnotationCollection[canvas].push({
locationAnnotation: locationAnnotation,
sampleAreaResourceId: sampleAreaResourceId,
// TODO: fetch in parallel
await fetch(self.urls.api_resources(partResourceId) + '?format=json&compact=false&v=beta')
.then(response => response.json())
.then(data => {
locationAnnotation.features.forEach(function(feature) {
feature.properties.active = false;
feature.properties.tileId = tileId;
feature.properties.locationName = locationName;
// misnomer, could be analysis area
feature.properties.sampleAreaResourceId = partResourceId;
feature.properties.classificationConceptId = data.resource.type.concept_details[0].concept_id;
feature.properties.parentPhysicalThingName = parentPhyiscalThing().resource._label?.['@display_value'] ?? '';
});
} else {
partsAnnotationCollection[canvas] = [{
locationAnnotation: locationAnnotation,
sampleAreaResourceId: sampleAreaResourceId,
}];
}
if (canvas in partsAnnotationCollection) {
partsAnnotationCollection[canvas].push({
locationAnnotation: locationAnnotation,
sampleAreaResourceId: partResourceId,
});
} else {
partsAnnotationCollection[canvas] = [{
locationAnnotation: locationAnnotation,
sampleAreaResourceId: partResourceId,
}];
}
});
}
});
}

// add the annotation of parts to the final object
self.annotationStatus = ko.observable();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -164,11 +164,15 @@ define([
}
});

this.sampleNameFromTileData = (data) => {
const partIdentifierAssignmentLabelNodeId = '3e541cc6-859b-11ea-97eb-acde48001122';
const baseName = ko.unwrap(ko.unwrap(data[partIdentifierAssignmentLabelNodeId])?.[arches.activeLanguage]?.["value"]) || "";
return arches.translations.sampleOf.replace('{sampleName}', baseName).replace('{physicalThingName}', params.physicalThingName);
};

this.sampleName = ko.computed(function() {
var partIdentifierAssignmentLabelNodeId = '3e541cc6-859b-11ea-97eb-acde48001122';
if (self.selectedSampleLocationInstance()){
const baseName = ko.unwrap(ko.unwrap(self.selectedSampleLocationInstance().data[partIdentifierAssignmentLabelNodeId])?.[arches.activeLanguage]?.["value"]) || "";
return `${baseName} [Sample of ${params.physicalThingName}]`;
return self.sampleNameFromTileData(self.selectedSampleLocationInstance().data);
}
});

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -85,8 +85,7 @@ define([
});

this.samplingDate.subscribe(function(val){
// TODO(i18n) samples
self.samplingName(["Sampling Activity of", self.physicalThingNameValue, val].join(' '));
self.samplingName(arches.translations.samplingActivityOf.replace('{physicalThingName}', self.physicalThingNameValue) + ' ' + val);
});

const selectPhysThingData = params.selectPhysThingData;
Expand Down
Loading
Loading