Skip to content

Commit 116f524

Browse files
committed
simplified use of custom matcher function for highlighting duplicate items in authors and in identifiers arrays
1 parent c6d7888 commit 116f524

4 files changed

Lines changed: 18 additions & 39 deletions

File tree

src/components/AuthorCardViewing.vue

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@
4444

4545
<script lang="ts">
4646
import { PropType, computed, defineComponent, onUpdated } from 'vue'
47-
import { byError, duplicateAuthorMatcher, duplicateAuthorQueries, emailQueries, orcidQueries } from 'src/error-filtering'
47+
import { byError, duplicateAuthorQueries, duplicateMatcher, emailQueries, orcidQueries } from 'src/error-filtering'
4848
import { AuthorType } from 'src/types'
4949
import { useStepperErrors } from 'src/store/stepper-errors'
5050
import { useValidation } from 'src/store/validation'
@@ -83,7 +83,8 @@ export default defineComponent({
8383
})
8484
const duplicateErrors = computed(() => {
8585
return duplicateAuthorQueries
86-
.filter(byError(errors.value, duplicateAuthorMatcher(props.index)))
86+
.filter(byError(errors.value))
87+
.filter(byError(errors.value, duplicateMatcher(props.index)))
8788
.map(query => query.replace.message)
8889
})
8990
const authorErrors = computed(() => [...emailErrors.value, ...orcidErrors.value, ...duplicateErrors.value])

src/components/IdentifierCardViewing.vue

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@
4343

4444
<script lang="ts">
4545
import { PropType, computed, defineComponent } from 'vue'
46-
import { byError, duplicateIdentifierMatcher, duplicateIdentifierQueries, identifierValueQueries } from 'src/error-filtering'
46+
import { byError, duplicateIdentifierQueries, duplicateMatcher, identifierValueQueries } from 'src/error-filtering'
4747
import { IdentifierType } from 'src/types'
4848
import { useValidation } from 'src/store/validation'
4949
@@ -72,7 +72,8 @@ export default defineComponent({
7272
})
7373
const duplicateErrors = computed(() => {
7474
return duplicateIdentifierQueries
75-
.filter(byError(errors.value, duplicateIdentifierMatcher(props.index)))
75+
.filter(byError(errors.value))
76+
.filter(byError(errors.value, duplicateMatcher(props.index)))
7677
.map(query => query.replace.message)
7778
})
7879
const identifierErrors = computed(() => [...identifierValueErrors.value, ...duplicateErrors.value])

src/components/Keyword.vue

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@
4444
</template>
4545

4646
<script lang="ts">
47-
import { byError, duplicateKeywordMatcher, duplicateKeywordQueries, keywordQueries } from 'src/error-filtering'
47+
import { byError, duplicateKeywordQueries, duplicateMatcher, keywordQueries } from 'src/error-filtering'
4848
import { computed, defineComponent } from 'vue'
4949
import { useValidation } from 'src/store/validation'
5050
@@ -73,7 +73,8 @@ export default defineComponent({
7373
})
7474
const duplicateErrors = computed(() => {
7575
return duplicateKeywordQueries
76-
.filter(byError(errors.value, duplicateKeywordMatcher(props.index)))
76+
.filter(byError(errors.value))
77+
.filter(byError(errors.value, duplicateMatcher(props.index)))
7778
.map(query => query.replace.message)
7879
})
7980
const validationErrors = computed(() => [...keywordErrors.value, ...duplicateErrors.value])

src/error-filtering.ts

Lines changed: 9 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -30,37 +30,7 @@ const defaultMatcher: Comparator = (error, query) => {
3030
return true
3131
}
3232

33-
export const duplicateAuthorMatcher = (index: number) => {
34-
return (error: ErrorObject) => {
35-
if (error.instancePath !== '/authors') {
36-
return false
37-
}
38-
if (error.schemaPath !== '#/properties/authors/uniqueItems') {
39-
return false
40-
}
41-
if (error.params.i !== index && error.params.j !== index) {
42-
return false
43-
}
44-
return true
45-
}
46-
}
47-
48-
export const duplicateIdentifierMatcher = (index: number) => {
49-
return (error: ErrorObject) => {
50-
if (error.instancePath !== '/identifiers') {
51-
return false
52-
}
53-
if (error.schemaPath !== '#/properties/identifiers/uniqueItems') {
54-
return false
55-
}
56-
if (error.params.i !== index && error.params.j !== index) {
57-
return false
58-
}
59-
return true
60-
}
61-
}
62-
63-
export const duplicateKeywordMatcher = (index: number) => {
33+
export const duplicateMatcher = (index: number) => {
6434
return (error: ErrorObject) => error.params.i === index || error.params.j === index
6535
}
6636

@@ -100,14 +70,20 @@ export const dateReleasedQueries: ErrorQuery[] = [{
10070
}]
10171

10272
export const duplicateAuthorQueries: ErrorQuery[] = [{
103-
find: {},
73+
find: {
74+
instancePath: '/authors',
75+
schemaPath: '#/properties/authors/uniqueItems'
76+
},
10477
replace: {
10578
message: 'This author is a duplicate.'
10679
}
10780
}]
10881

10982
export const duplicateIdentifierQueries: ErrorQuery[] = [{
110-
find: {},
83+
find: {
84+
instancePath: '/identifiers',
85+
schemaPath: '#/properties/identifiers/uniqueItems'
86+
},
11187
replace: {
11288
message: 'This identifier is a duplicate.'
11389
}

0 commit comments

Comments
 (0)