diff --git a/app/components/doi-geo-location.js b/app/components/doi-geo-location.js new file mode 100644 index 000000000..ecefd0d46 --- /dev/null +++ b/app/components/doi-geo-location.js @@ -0,0 +1,14 @@ +import Component from '@ember/component'; + +export default Component.extend({ + + + actions: { + updateGeoLocationPlace(value) { + this.fragment.set('geoLocationPlace', value); + }, + deleteGeoLocation() { + this.model.get('geoLocationPlaces').removeObject(this.fragment); + }, + }, +}); diff --git a/app/components/doi-geo-locations.js b/app/components/doi-geo-locations.js new file mode 100644 index 000000000..777da32a5 --- /dev/null +++ b/app/components/doi-geo-locations.js @@ -0,0 +1,22 @@ +import Component from '@ember/component'; + +export default Component.extend({ + validationClass: null, + + didReceiveAttrs() { + this._super(...arguments); + + if (!this.model.get('geoLocations')) { + this.model.set('geoLocations', []); + } + if (this.model.get('geoLocations').length == 0) { + this.model.get('geoLocations').createFragment(); + } + }, + + actions: { + addGeoLocation() { + this.model.get('geoLocations').createFragment(); + }, + }, +}); diff --git a/app/controllers/dois/show/edit.js b/app/controllers/dois/show/edit.js index 3ecced83d..70c6af897 100644 --- a/app/controllers/dois/show/edit.js +++ b/app/controllers/dois/show/edit.js @@ -86,6 +86,20 @@ export default Controller.extend({ return !isBlank(title.title); })); + // // only store name identifiers and affiliations with a value + // A(doi.get('geoLocations')).forEach((geoLocation) => { + // geoLocation.set('geoLocationPlace', A(geoLocation.get('geoLocationPlace')).filter(function(geoLocation) { + // return !isBlank(geoLocation.geoLocationPlace); + // })); + // // geoLocation.set('affiliation', A(geoLocation.get('affiliation')).filter(function(affiliation) { + // // return !isBlank(affiliation.name); + // // })); + // // if (geoLocation.nameType === 'Organizational') { + // // geoLocation.set('givenName', null); + // // geoLocation.set('familyName', null); + // // } + // }); + let self = this; doi.save().then(function(doi) { diff --git a/app/controllers/dois/show/modify.js b/app/controllers/dois/show/modify.js index cab597ff0..f9808d6a8 100644 --- a/app/controllers/dois/show/modify.js +++ b/app/controllers/dois/show/modify.js @@ -37,6 +37,8 @@ export default Controller.extend({ doi.set('subjects', null); doi.set('contributors', null); + doi.set('geoLocations', null); + // Don't try and set the landingPage information for DOI Updates doi.set('landingPage', null); diff --git a/app/controllers/repositories/show/dois/new.js b/app/controllers/repositories/show/dois/new.js index d0e85f7ea..ea2329c8f 100644 --- a/app/controllers/repositories/show/dois/new.js +++ b/app/controllers/repositories/show/dois/new.js @@ -71,6 +71,20 @@ export default Controller.extend({ return !isBlank(title.title); })); + // // only store name identifiers and affiliations with a value + // A(doi.get('geoLocations')).forEach((geoLocation) => { + // geoLocation.set('geoLocationPlace', A(geoLocation.get('geoLocationPlace')).filter(function(geoLocation) { + // return !isBlank(geoLocation.geoLocationPlace); + // })); + // // geoLocation.set('affiliation', A(geoLocation.get('affiliation')).filter(function(affiliation) { + // // return !isBlank(affiliation.name); + // // })); + // // if (geoLocation.nameType === 'Organizational') { + // // geoLocation.set('givenName', null); + // // geoLocation.set('familyName', null); + // // } + // }); + let self = this; doi.save().then(function(doi) { self.transitionToRoute('dois.show', doi); diff --git a/app/controllers/repositories/show/dois/upload.js b/app/controllers/repositories/show/dois/upload.js index b580f7102..cb888601f 100644 --- a/app/controllers/repositories/show/dois/upload.js +++ b/app/controllers/repositories/show/dois/upload.js @@ -29,6 +29,7 @@ export default Controller.extend({ doi.set('language', null); doi.set('contributors', null); + doi.set('geoLocations', null); let self = this; doi.save().then(function(doi) { self.transitionToRoute('dois.show', doi); diff --git a/app/models/doi.js b/app/models/doi.js index 4c6e49dd4..67690e546 100644 --- a/app/models/doi.js +++ b/app/models/doi.js @@ -158,7 +158,7 @@ export default DS.Model.extend(Validations, { version: DS.attr('string'), rightsList: DS.attr(), descriptions: fragmentArray('description', { defaultValue: [] }), - geoLocations: DS.attr(), + geoLocations: fragmentArray('geoLocation', { defaultValue: [] }), fundingReferences: DS.attr(), landingPage: DS.attr(), xml: DS.attr('xml'), diff --git a/app/models/geo-location.js b/app/models/geo-location.js new file mode 100644 index 000000000..316095911 --- /dev/null +++ b/app/models/geo-location.js @@ -0,0 +1,23 @@ +import DS from 'ember-data'; +import Fragment from 'ember-data-model-fragments/fragment'; +import { validator, buildValidations } from 'ember-cp-validations'; +// import { computed } from '@ember/object'; + +const Validations = buildValidations({ + // geoLocationPlace: [ + // validator('format', { + // regex: /^([^,]+)(, \w+(\(\w+\))?, \w+(-\w+)?)?$/, + // message: 'Series information not in recommended format of series title, followed by comma and optional volume(issue), firstpage-lastpage', + // disabled: computed('model.descriptionType', function() { + // return this.model.get('descriptionType') !== 'SeriesInformation'; + // }), + // isWarning: true, + // }), + // ], +}); + +export default Fragment.extend(Validations, { + geoLocationPlace: DS.attr('string', { defaultValue: null }), + // geoLocationPoint: DS.attr('string', { defaultValue: null }), + // geoLocationBox: DS.attr('string', { defaultValue: null }), +}); diff --git a/app/serializers/doi.js b/app/serializers/doi.js index 12f4af0d1..5721ca222 100644 --- a/app/serializers/doi.js +++ b/app/serializers/doi.js @@ -33,7 +33,7 @@ export default ApplicationSerializer.extend({ formats: { serialize: false }, version: { serialize: false }, rightsList: { serialize: false }, - geoLocations: { serialize: false }, + // geoLocations: { serialize: false }, fundingReferences: { serialize: false }, schemaVersion: { serialize: false }, diff --git a/app/templates/components/doi-geo-location.hbs b/app/templates/components/doi-geo-location.hbs new file mode 100644 index 000000000..5d482f7fa --- /dev/null +++ b/app/templates/components/doi-geo-location.hbs @@ -0,0 +1,21 @@ + +{{#if (gt index 0)}} +