Skip to content

Commit

Permalink
pkp/pkp-lib#7135 Multiple author affiliations (Ror) - changes and fixes
Browse files Browse the repository at this point in the history
  • Loading branch information
jardakotesovec authored and GaziYucel committed Feb 4, 2025
1 parent 4ab556d commit d8460b7
Show file tree
Hide file tree
Showing 3 changed files with 63 additions and 51 deletions.
9 changes: 9 additions & 0 deletions src/components/Form/Form.vue
Original file line number Diff line number Diff line change
Expand Up @@ -566,8 +566,17 @@ export default {
'[id*="' + this.id + '-' + field.name + '"]',
);
if ($el) {
// Handle scrolling within new side modals
const containers = document.querySelectorAll(
'div.pkp-modal-scroll-container',
);
const lastContainer =
containers.length > 0
? containers[containers.length - 1]
: undefined;
this.$scrollTo($el, 500, {
offset: -50,
container: lastContainer,
});
} else {
this.setCurrentPage(group.pageId);
Expand Down
100 changes: 50 additions & 50 deletions src/components/Form/fields/FieldAffiliations.vue
Original file line number Diff line number Diff line change
@@ -1,5 +1,9 @@
<template>
<div class="pkpFormField pkpFormField--affiliations">
<!-- To be able to scroll to this field on error-->
<div
:id="`${props.formId}-${props.name}`"
class="pkpFormField pkpFormField--affiliations"
>
<div class="pkpFormField__heading">
<label class="pkpFormFieldLabel">
{{ t('user.affiliations', {}) }}
Expand Down Expand Up @@ -70,7 +74,12 @@
/>
{{ translations(affiliation).label }}
</a>
<div v-if="affiliationIndex === indexEditMode">
<div
v-if="
affiliationIndex === indexEditMode ||
errors?.[affiliationIndex]?.name
"
>
<div
v-for="[affiliationNameLocale] in Object.entries(
affiliation.name,
Expand All @@ -80,45 +89,27 @@
<div
v-if="supportedLocales.includes(affiliationNameLocale)"
>
<div>
<span class="text-lg-semibold">
{{ getTextFieldLabel(affiliationNameLocale) }}
</span>
<span
v-if="affiliationNameLocale === primaryLocale"
class="pkpFormFieldLabel__required"
>
<span class="aria-hidden">*</span>
<span class="-screenReader">Required</span>
</span>
</div>
<div class="pkpFormField--sizelarge">
<input
:id="
'contributors-affiliations-' +
affiliationIndex +
'-' +
<FieldText
:label="getTextFieldLabel(affiliationNameLocale)"
:value="affiliation.name[affiliationNameLocale]"
name="name"
:all-errors="{
name: errors?.[affiliationIndex]?.name?.[
affiliationNameLocale
"
v-model="affiliation.name[affiliationNameLocale]"
:name="
'contributors-affiliations-' +
affiliationIndex +
'-' +
affiliationNameLocale
"
class="pkpFormField__input pkpFormField--text__input"
type="text"
:aria-invalid="false"
/>
<FieldError
v-if="
affiliationNameLocale === primaryLocale &&
!affiliation.name[affiliationNameLocale].trim()
"
:messages="[t('validator.required', {})]"
/>
</div>
],
}"
size="large"
:is-required="affiliationNameLocale === primaryLocale"
@change="
(fieldName, _, fieldValue) => {
updateAffiliationName(
affiliationIndex,
affiliationNameLocale,
fieldValue,
);
}
"
/>
</div>
</div>
</div>
Expand All @@ -128,7 +119,6 @@
<DropdownActions
v-if="!(affiliationIndex === indexEditMode)"
v-bind="rowActionsArgs(affiliationIndex)"
:class="'dropDownActions border-transparent'"
@action="rowActionsHandler"
/>
</TableCell>
Expand Down Expand Up @@ -259,6 +249,7 @@ import {ref, computed, onMounted, watch, onBeforeUnmount} from 'vue';
import {t} from '@/utils/i18n';
import {useModal} from '@/composables/useModal';
import DropdownActions from '@/components/DropdownActions/DropdownActions.vue';
import FieldText from '@/components/Form/fields/FieldText.vue';
import FieldError from '@/components/Form/FieldError.vue';
import FieldAffiliationsRorAutoSuggest from '@/components/Form/fields/FieldAffiliationsRorAutoSuggest.vue';
import Icon from '@/components/Icon/Icon.vue';
Expand Down Expand Up @@ -343,17 +334,11 @@ const {fetch: postRorObject} = useFetch(apiUrl.value, {
body: rorObjectToBeUpdated,
});
computed(() => {
const errors = computed(() => {
if (!Object.keys(props.allErrors).includes(props.name)) {
return [];
}
let errors = props.allErrors[props.name];
if (props.isMultilingual && Object.keys(errors).includes(props.localeKey)) {
return errors[props.localeKey];
} else if (!props.isMultilingual) {
return errors;
}
return [];
return props.allErrors[props.name];
});
watch(
Expand Down Expand Up @@ -444,7 +429,7 @@ const rowActionsArgs = function (index) {
label: t('user.affiliations.translationActionsAriaLabel', {}),
ariaLabel: t('user.affiliations.translationActionsAriaLabel', {}),
direction: 'left',
displayAsEllipsis: true,
buttonVariant: 'ellipsis',
};
};
Expand Down Expand Up @@ -503,6 +488,21 @@ function deleteRow(index) {
});
}
function updateAffiliationName(affiliationIndex, locale, value) {
currentValue.value = currentValue.value.map((affiliation, index) => {
if (index !== affiliationIndex) {
return affiliation;
}
return {
...affiliation,
name: {
...affiliation.name,
[locale]: value,
},
};
});
}
// helper methods
function makeCurrentValueCompatible() {
Expand Down
5 changes: 4 additions & 1 deletion src/components/Modal/SideModalBody.vue
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,10 @@
</div>
</div>
</div>
<div class="relative mt-6 flex-1 overflow-y-scroll">
<!-- pkp-modal-scroll-container is important for scrolling within form-->
<div
class="pkp-modal-scroll-container relative mt-6 flex-1 overflow-y-scroll"
>
<!-- @slot Body content -->
<slot :close-modal="closeModal" />
</div>
Expand Down

0 comments on commit d8460b7

Please sign in to comment.