diff --git a/app/controllers/providers/show/repositories/new.js b/app/controllers/providers/show/repositories/new.js
index 12512df3d..feab8ca5d 100644
--- a/app/controllers/providers/show/repositories/new.js
+++ b/app/controllers/providers/show/repositories/new.js
@@ -66,6 +66,27 @@ export default class NewController extends Controller {
this.set('softwares', softwareList);
}
+
+ @action
+ createSoftwareOnEnter(select, e) {
+ if (
+ e.keyCode === 13 &&
+ select.isOpen &&
+ !select.highlighted &&
+ !isBlank(select.searchText)
+ ) {
+ e.preventDefault();
+ const software = select.searchText;
+ if (!this.softwares.includes(software)) {
+ this.set('softwares', [...this.softwares, software]);
+ }
+ select.actions.choose(software);
+ this.model.repository.set('software', software);
+ this.set('softwares', softwareList);
+ return false;
+ }
+ }
+
@action
addLanguageAction() {
this.model.repository.get('language').pushObject(null);
diff --git a/app/controllers/repositories/show/edit.js b/app/controllers/repositories/show/edit.js
index 27ef59275..ee2a58e9c 100644
--- a/app/controllers/repositories/show/edit.js
+++ b/app/controllers/repositories/show/edit.js
@@ -5,6 +5,7 @@ import Controller from '@ember/controller';
import { A } from '@ember/array';
import { capitalize } from '@ember/string';
import langs from 'langs';
+import { isBlank } from '@ember/utils';
import { clientTypeList, softwareList } from 'bracco/models/repository';
@classic
@@ -73,6 +74,26 @@ export default class EditController extends Controller {
this.set('softwares', softwareList);
}
+ @action
+ createSoftwareOnEnter(select, e) {
+ if (
+ e.keyCode === 13 &&
+ select.isOpen &&
+ !select.highlighted &&
+ !isBlank(select.searchText)
+ ) {
+ e.preventDefault();
+ const software = select.searchText;
+ if (!this.softwares.includes(software)) {
+ this.set('softwares', [...this.softwares, software]);
+ }
+ select.actions.choose(software);
+ this.model.set('software', software);
+ this.set('softwares', softwareList);
+ return false;
+ }
+ }
+
@action
addLanguageAction() {
this.model.get('language').pushObject(null);
diff --git a/app/models/repository.js b/app/models/repository.js
index 7f717d164..4e533b842 100644
--- a/app/models/repository.js
+++ b/app/models/repository.js
@@ -33,31 +33,24 @@ export const clientTypeList = [
export const softwareList = [
'Archipelago',
- 'Cayuse',
'CKAN',
+ 'CSTR & DOI Registration API',
'Dataverse',
'dLibra',
'DSpace',
'EPrints',
'Ex Libris Esploro',
- 'Fedora',
'Figshare',
'Invenio',
- 'Islandora',
- 'MyCoRe',
- 'Nesstar',
+ 'Medad',
'Omega-PSIR',
'Omeka S',
'Open Journal Systems (OJS)',
- 'OPUS',
- 'Pubman',
'Pure',
'Redivis',
'RSpace',
- 'Samvera',
- 'SESAR',
- 'Ubiquity',
- 'Other'
+ 'Samvera Hyrax',
+ 'SESAR'
];
const Validations = buildValidations({
diff --git a/app/templates/providers/show/repositories/new.hbs b/app/templates/providers/show/repositories/new.hbs
index 9b72a9348..217ba58e7 100644
--- a/app/templates/providers/show/repositories/new.hbs
+++ b/app/templates/providers/show/repositories/new.hbs
@@ -72,8 +72,8 @@
{{/if}}
-
-
+
+
{{item}}
diff --git a/app/templates/repositories/show/edit.hbs b/app/templates/repositories/show/edit.hbs
index f4143bd61..4234b1027 100644
--- a/app/templates/repositories/show/edit.hbs
+++ b/app/templates/repositories/show/edit.hbs
@@ -72,8 +72,8 @@
-
-
+
+
{{item}}
diff --git a/tests/unit/controllers/providers-test.js b/tests/unit/controllers/providers-test.js
index a54435191..76aa6504f 100644
--- a/tests/unit/controllers/providers-test.js
+++ b/tests/unit/controllers/providers-test.js
@@ -12,6 +12,34 @@ module('Unit | Controller | providers', function (hooks) {
assert.ok(controller);
});
+ test('createSoftwareOnEnter sets a custom software name', function (assert) {
+ let controller = this.owner.lookup(
+ 'controller:providers.show.repositories.new'
+ );
+ let model = {
+ repository: make('repository')
+ };
+ controller.set('model', model);
+
+ let chosen = null;
+ controller.send('createSoftwareOnEnter', {
+ isOpen: true,
+ highlighted: null,
+ searchText: 'NADA',
+ actions: {
+ choose(value) {
+ chosen = value;
+ }
+ }
+ }, {
+ keyCode: 13,
+ preventDefault() {}
+ });
+
+ assert.equal(controller.model.repository.get('software'), 'NADA');
+ assert.equal(chosen, 'NADA');
+ });
+
test('should list countries', function (assert) {
let controller = this.owner.lookup(
'controller:providers.show.organizations.new'
diff --git a/tests/unit/controllers/repositories-test.js b/tests/unit/controllers/repositories-test.js
index 3e8f7b996..f05115fdd 100644
--- a/tests/unit/controllers/repositories-test.js
+++ b/tests/unit/controllers/repositories-test.js
@@ -16,4 +16,34 @@ module('Unit | Controller | repositories', function (hooks) {
);
assert.ok(controller);
});
+
+ test('createSoftwareOnEnter sets a custom software name', function (assert) {
+ let controller = this.owner.lookup('controller:repositories.show.edit');
+ let model = this.owner
+ .lookup('service:store')
+ .createRecord('repository');
+ controller.set('model', model);
+
+ let chosen = null;
+ let preventDefaultCalled = false;
+ controller.send('createSoftwareOnEnter', {
+ isOpen: true,
+ highlighted: null,
+ searchText: 'NADA',
+ actions: {
+ choose(value) {
+ chosen = value;
+ }
+ }
+ }, {
+ keyCode: 13,
+ preventDefault() {
+ preventDefaultCalled = true;
+ }
+ });
+
+ assert.equal(model.get('software'), 'NADA');
+ assert.equal(chosen, 'NADA');
+ assert.true(preventDefaultCalled);
+ });
});
diff --git a/tests/unit/models/repository-test.js b/tests/unit/models/repository-test.js
index 03c21cd5b..0b1c35dbd 100644
--- a/tests/unit/models/repository-test.js
+++ b/tests/unit/models/repository-test.js
@@ -2,6 +2,7 @@ import { module, test } from 'qunit';
import { setupTest } from 'ember-qunit';
import { get } from '@ember/object';
import { run } from '@ember/runloop';
+import { softwareList } from 'bracco/models/repository';
module('Unit | Model | repository', function (hooks) {
setupTest(hooks);
@@ -13,6 +14,34 @@ module('Unit | Model | repository', function (hooks) {
assert.ok(!!model);
});
+ test('softwareList matches supported RSP software', function (assert) {
+ assert.deepEqual(softwareList, [
+ 'Archipelago',
+ 'CKAN',
+ 'CSTR & DOI Registration API',
+ 'Dataverse',
+ 'dLibra',
+ 'DSpace',
+ 'EPrints',
+ 'Ex Libris Esploro',
+ 'Figshare',
+ 'Invenio',
+ 'Medad',
+ 'Omega-PSIR',
+ 'Omeka S',
+ 'Open Journal Systems (OJS)',
+ 'Pure',
+ 'Redivis',
+ 'RSpace',
+ 'Samvera Hyrax',
+ 'SESAR'
+ ]);
+ assert.notOk(
+ softwareList.includes('Other'),
+ 'Other is not a suggested option'
+ );
+ });
+
test('should belong to a provider', function (assert) {
const Repository = this.owner
.lookup('service:store')