From 7cd2e87a84e5375d8eb89caa60133ea11669e54c Mon Sep 17 00:00:00 2001 From: Bryceson Laing Date: Tue, 18 Aug 2026 21:06:12 -0500 Subject: [PATCH 1/4] =?UTF-8?q?allow=20free=20text=20in=20the=20=E2=80=9CS?= =?UTF-8?q?oftware=E2=80=9D=20field=20for=20repositories?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../providers/show/repositories/new.js | 21 +++++++++++++ app/controllers/repositories/show/edit.js | 21 +++++++++++++ .../providers/show/repositories/new.hbs | 2 +- app/templates/repositories/show/edit.hbs | 2 +- tests/unit/controllers/providers-test.js | 28 +++++++++++++++++ tests/unit/controllers/repositories-test.js | 30 +++++++++++++++++++ 6 files changed, 102 insertions(+), 2 deletions(-) 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/templates/providers/show/repositories/new.hbs b/app/templates/providers/show/repositories/new.hbs index 9b72a9348..8660678a1 100644 --- a/app/templates/providers/show/repositories/new.hbs +++ b/app/templates/providers/show/repositories/new.hbs @@ -72,7 +72,7 @@ {{/if}} - + {{item}} diff --git a/app/templates/repositories/show/edit.hbs b/app/templates/repositories/show/edit.hbs index f4143bd61..c93abad5a 100644 --- a/app/templates/repositories/show/edit.hbs +++ b/app/templates/repositories/show/edit.hbs @@ -72,7 +72,7 @@ - + {{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); + }); }); From 1242955276951e1610bae5a320e0ab50a5d038e9 Mon Sep 17 00:00:00 2001 From: Bryceson Laing Date: Tue, 18 Aug 2026 21:12:01 -0500 Subject: [PATCH 2/4] align software suggestions with list of integrations from RSPs --- app/models/repository.js | 14 ++-------- .../providers/show/repositories/new.hbs | 2 +- app/templates/repositories/show/edit.hbs | 2 +- tests/unit/models/repository-test.js | 28 +++++++++++++++++++ 4 files changed, 33 insertions(+), 13 deletions(-) diff --git a/app/models/repository.js b/app/models/repository.js index 7f717d164..615a65b8d 100644 --- a/app/models/repository.js +++ b/app/models/repository.js @@ -33,31 +33,23 @@ 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' + 'SESAR' ]; const Validations = buildValidations({ diff --git a/app/templates/providers/show/repositories/new.hbs b/app/templates/providers/show/repositories/new.hbs index 8660678a1..50fee2c01 100644 --- a/app/templates/providers/show/repositories/new.hbs +++ b/app/templates/providers/show/repositories/new.hbs @@ -72,7 +72,7 @@ {{/if}} - + {{item}} diff --git a/app/templates/repositories/show/edit.hbs b/app/templates/repositories/show/edit.hbs index c93abad5a..78a489e60 100644 --- a/app/templates/repositories/show/edit.hbs +++ b/app/templates/repositories/show/edit.hbs @@ -72,7 +72,7 @@ - + {{item}} diff --git a/tests/unit/models/repository-test.js b/tests/unit/models/repository-test.js index 03c21cd5b..20255a13c 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,33 @@ 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', + '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') From e06fcd9700a0886092e852a7808c60e2724fa744 Mon Sep 17 00:00:00 2001 From: Bryceson Laing Date: Thu, 20 Aug 2026 09:21:27 -0500 Subject: [PATCH 3/4] add "Samvera Hyrax" back into software list --- app/models/repository.js | 1 + tests/unit/models/repository-test.js | 1 + 2 files changed, 2 insertions(+) diff --git a/app/models/repository.js b/app/models/repository.js index 615a65b8d..4e533b842 100644 --- a/app/models/repository.js +++ b/app/models/repository.js @@ -49,6 +49,7 @@ export const softwareList = [ 'Pure', 'Redivis', 'RSpace', + 'Samvera Hyrax', 'SESAR' ]; diff --git a/tests/unit/models/repository-test.js b/tests/unit/models/repository-test.js index 20255a13c..0b1c35dbd 100644 --- a/tests/unit/models/repository-test.js +++ b/tests/unit/models/repository-test.js @@ -33,6 +33,7 @@ module('Unit | Model | repository', function (hooks) { 'Pure', 'Redivis', 'RSpace', + 'Samvera Hyrax', 'SESAR' ]); assert.notOk( From 9daf653d39ed0b31e4bc67e4b9fa706acbc0f559 Mon Sep 17 00:00:00 2001 From: Bryceson Laing Date: Thu, 20 Aug 2026 10:18:44 -0500 Subject: [PATCH 4/4] add new `createSoftwareOnEnter` action to `onKeyDown` --- app/templates/providers/show/repositories/new.hbs | 2 +- app/templates/repositories/show/edit.hbs | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/app/templates/providers/show/repositories/new.hbs b/app/templates/providers/show/repositories/new.hbs index 50fee2c01..217ba58e7 100644 --- a/app/templates/providers/show/repositories/new.hbs +++ b/app/templates/providers/show/repositories/new.hbs @@ -73,7 +73,7 @@ - + {{item}} diff --git a/app/templates/repositories/show/edit.hbs b/app/templates/repositories/show/edit.hbs index 78a489e60..4234b1027 100644 --- a/app/templates/repositories/show/edit.hbs +++ b/app/templates/repositories/show/edit.hbs @@ -73,7 +73,7 @@ - + {{item}}