From 08fc0ffa925708a9a607bfb1aae1e1a0057f728c Mon Sep 17 00:00:00 2001 From: Blesilda Ramirez Date: Wed, 20 Nov 2024 19:12:34 +0800 Subject: [PATCH] pkp/pkp-lib#10624 Add slots for rendering FieldBaseAutosuggest options pkp/pkp-lib#10624 Add ROR and NewTab icons pkp/pkp-lib#10624 Update Autosuggest component pkp/pkp-lib#10624 Apply changes from icon component pkp/pkp-lib#10624 Remove FieldCombobox component pkp/pkp-lib#10624 Remove autosuggest props in api pkp/pkp-lib#10624 Move methods from FieldBaseAutosuggest to useAutosuggest API Revert "pkp/pkp-lib#10624 Move methods from FieldBaseAutosuggest to useAutosuggest API" This reverts commit b23bbdcbab2b28d2a6bbce5146a12ab960deba0a. pkp/pkp-lib#10624 Move autosuggest functions from api to component pkp/pkp-lib#10624 Add ROR autosuggest component pkp/pkp-lib#10624 Add isMultiple prop to Autosuggest component pkp/pkp-lib#10624 Remove inputName and deselectLabel props pkp/pkp-lib#10624 Simplify data handling from fetch api for ror autosuggest component pkp/pkp-lib#10624 Use mock data for ror autosuggest story pkp/pkp-lib#10624 Remove custom options story in FieldBaseAutosuggest component pkp/pkp-lib#10624 Render Autosuggest component even if prop isDisabled value is true pkp/pkp-lib#10624 Reduce input props for the autosuggest component --- src/components/Form/fields/Autosuggest.vue | 215 ++++++++++++++++++ .../Form/fields/FieldBaseAutosuggest.mdx | 9 + .../Form/fields/FieldBaseAutosuggest.vue | 191 ++++++---------- .../Form/fields/FieldControlledVocab.vue | 5 +- .../fields/FieldRorAutosuggest.stories.js | 40 ++++ .../Form/fields/FieldRorAutosuggest.vue | 131 +++++++++++ src/components/Icon/Icon.stories.js | 2 + src/components/Icon/Icon.vue | 4 + src/components/Icon/icons/NewTab.vue | 11 + src/components/Icon/icons/ROR.vue | 36 +++ src/composables/useAutosuggest.js | 3 + src/mocks/institutions.json | 94 ++++++++ 12 files changed, 613 insertions(+), 128 deletions(-) create mode 100644 src/components/Form/fields/Autosuggest.vue create mode 100644 src/components/Form/fields/FieldRorAutosuggest.stories.js create mode 100644 src/components/Form/fields/FieldRorAutosuggest.vue create mode 100644 src/components/Icon/icons/NewTab.vue create mode 100644 src/components/Icon/icons/ROR.vue create mode 100644 src/composables/useAutosuggest.js create mode 100644 src/mocks/institutions.json diff --git a/src/components/Form/fields/Autosuggest.vue b/src/components/Form/fields/Autosuggest.vue new file mode 100644 index 000000000..2da1184b9 --- /dev/null +++ b/src/components/Form/fields/Autosuggest.vue @@ -0,0 +1,215 @@ + + diff --git a/src/components/Form/fields/FieldBaseAutosuggest.mdx b/src/components/Form/fields/FieldBaseAutosuggest.mdx index fbde357ad..2f74646ed 100644 --- a/src/components/Form/fields/FieldBaseAutosuggest.mdx +++ b/src/components/Form/fields/FieldBaseAutosuggest.mdx @@ -44,5 +44,14 @@ The following autosuggest fields are available to be used. - `FieldControlledVocab` can be used to enter metadata such as keywords and subjects. - `FieldSelectSubmissions` can be used to find and select submissions. +## Customizing options + +The component allows for flexible customization of its options through named slots. This lets you control how suggestions are displayed and interact within the options. See [Custom Options](?path=/story/forms-fieldbaseautosuggest--custom-options) for sample implemenation. + +### Named Slots + +- `input-slot`: Customizes the input area of the combobox. +- `option`: Defines how each suggestion is rendered in the dropdown. + diff --git a/src/components/Form/fields/FieldBaseAutosuggest.vue b/src/components/Form/fields/FieldBaseAutosuggest.vue index 3e12db31f..8fdf1777d 100644 --- a/src/components/Form/fields/FieldBaseAutosuggest.vue +++ b/src/components/Form/fields/FieldBaseAutosuggest.vue @@ -45,7 +45,7 @@ :class="{ 'pkpAutosuggest__inputWrapper--multilingual': isMultilingual && locales.length > 1, - 'pkpAutosuggest__inputWrapper--focus': isFocused, + 'pkpAutosuggest__inputWrapper--focus': inputFocused, }" @click="setFocusToInput" > @@ -80,81 +80,21 @@ /> - {{ selectedLabel }} - - {{ t('common.none') }} - - - {{ item.label }} - - - - - - -
  • - {{ inputValue }} -
  • -
    - -
  • - {{ suggestion.label }} -
  • -
    -
    -
    + + + @@ -176,37 +116,25 @@ diff --git a/src/components/Form/fields/FieldControlledVocab.vue b/src/components/Form/fields/FieldControlledVocab.vue index 6c463b305..b5f2939fc 100644 --- a/src/components/Form/fields/FieldControlledVocab.vue +++ b/src/components/Form/fields/FieldControlledVocab.vue @@ -1,16 +1,19 @@ diff --git a/src/components/Icon/Icon.stories.js b/src/components/Icon/Icon.stories.js index 580f440c3..74614545a 100644 --- a/src/components/Icon/Icon.stories.js +++ b/src/components/Icon/Icon.stories.js @@ -132,6 +132,7 @@ export const IconGallery = { 'NavDoi', 'NavAdmin', 'New', + 'NewTab', 'Notifications', 'NotVisible', 'OpenReview', @@ -149,6 +150,7 @@ export const IconGallery = { 'ReviewAssignments', 'ReviewRequestDeclined', 'ReviewSent', + 'ROR', 'Search', 'Settings', 'Sitemap', diff --git a/src/components/Icon/Icon.vue b/src/components/Icon/Icon.vue index d7f658560..412fbaa22 100644 --- a/src/components/Icon/Icon.vue +++ b/src/components/Icon/Icon.vue @@ -80,6 +80,7 @@ import MySubmissions from './icons/MySubmissions.vue'; import NavDoi from './icons/NavDoi.vue'; import NavAdmin from './icons/NavAdmin.vue'; import New from './icons/New.vue'; +import NewTab from './icons/NewTab.vue'; import Notifications from './icons/Notifications.vue'; import NotVisible from './icons/NotVisible.vue'; import OpenReview from './icons/OpenReview.vue'; @@ -97,6 +98,7 @@ import ReinstateReviewer from './icons/ReinstateReviewer.vue'; import ReviewAssignments from './icons/ReviewAssignments.vue'; import ReviewRequestDeclined from './icons/ReviewRequestDeclined.vue'; import ReviewSent from './icons/ReviewSent.vue'; +import ROR from './icons/ROR.vue'; import Search from './icons/Search.vue'; import Settings from './icons/Settings.vue'; import Sitemap from './icons/Sitemap.vue'; @@ -190,6 +192,7 @@ const svgIcons = { NavDoi, NavAdmin, New, + NewTab, Notifications, NotVisible, OpenReview, @@ -207,6 +210,7 @@ const svgIcons = { ReviewAssignments, ReviewRequestDeclined, ReviewSent, + ROR, Search, Settings, Sitemap, diff --git a/src/components/Icon/icons/NewTab.vue b/src/components/Icon/icons/NewTab.vue new file mode 100644 index 000000000..e91e106a9 --- /dev/null +++ b/src/components/Icon/icons/NewTab.vue @@ -0,0 +1,11 @@ + diff --git a/src/components/Icon/icons/ROR.vue b/src/components/Icon/icons/ROR.vue new file mode 100644 index 000000000..75e59d1f8 --- /dev/null +++ b/src/components/Icon/icons/ROR.vue @@ -0,0 +1,36 @@ + diff --git a/src/composables/useAutosuggest.js b/src/composables/useAutosuggest.js new file mode 100644 index 000000000..3592eee27 --- /dev/null +++ b/src/composables/useAutosuggest.js @@ -0,0 +1,3 @@ +export function useAutosuggest() { + return {}; +} diff --git a/src/mocks/institutions.json b/src/mocks/institutions.json new file mode 100644 index 000000000..f767533e0 --- /dev/null +++ b/src/mocks/institutions.json @@ -0,0 +1,94 @@ +{ + "items": [ + { + "id": "https://ror.org/03dbr7087", + "names": [ + { + "types": "ror_display", + "value": "University of Toronto" + } + ] + }, + { + "id": "https://ror.org/002h8g185", + "names": [ + { + "types": "ror_display", + "value": "University of Bath" + } + ] + }, + { + "id": "https://ror.org/01ej9dk98", + "names": [ + { + "types": "ror_display", + "value": "University of Melbourne" + } + ] + }, + { + "id": "https://ror.org/046ak2485", + "names": [ + { + "types": "ror_display", + "value": "Technical University of Berlin" + } + ] + }, + { + "id": "https://ror.org/045zwes19", + "names": [ + { + "types": "ror_display", + "value": "University of West Los Angeles" + } + ] + }, + { + "id": "https://ror.org/015h4rf69", + "names": [ + { + "types": "ror_display", + "value": "Niagara College" + } + ] + }, + { + "id": "https://ror.org/03tjw1547", + "names": [ + { + "types": "ror_display", + "value": "Innovate Niagara" + } + ] + }, + { + "id": "https://ror.org/05r04zn83", + "names": [ + { + "types": "ror_display", + "value": "Regional Municipality of Niagara" + } + ] + }, + { + "id": "https://ror.org/05309tf52", + "names": [ + { + "types": "ror_display", + "value": "Niagara University" + } + ] + }, + { + "names": [ + { + "types": "ror_display", + "value": "Niagara Association of Medicine" + } + ] + } + ], + "itemsMax": 10 +}