Skip to content

Commit

Permalink
custom_fields: added subject field
Browse files Browse the repository at this point in the history
  • Loading branch information
Fatimah authored and slint committed Mar 5, 2024
1 parent e4c5609 commit 73a8f6c
Show file tree
Hide file tree
Showing 2 changed files with 85 additions and 1 deletion.
6 changes: 5 additions & 1 deletion invenio_vocabularies/services/custom_fields/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,10 @@

"""Custom Fields for InvenioRDM."""

from .subject import SUBJECT_FIELDS, SUBJECT_FIELDS_UI
from .vocabulary import VocabularyCF

__all__ = "VocabularyCF"
__all__ = [
"VocabularyCF",
"SUBJECT_FIELDS_UI" "SUBJECT_FIELDS",
]
80 changes: 80 additions & 0 deletions invenio_vocabularies/services/custom_fields/subject.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,80 @@
# -*- coding: utf-8 -*-
#
# Copyright (C) 2024 CERN.
#
# Invenio-RDM-Records is free software; you can redistribute it and/or modify
# it under the terms of the MIT License; see LICENSE file for more details.


"""Custom fields."""
from invenio_i18n import lazy_gettext as _

from ...contrib.subjects.api import Subject
from ...contrib.subjects.schema import SubjectRelationSchema
from .vocabulary import VocabularyCF


class SubjectCF(VocabularyCF):
"""Custom field for subjects."""

field_keys = ["id", "subject"]

def __init__(self, **kwargs):
"""Constructor."""
super().__init__(
vocabulary_id="subjects",
schema=SubjectRelationSchema,
ui_schema=SubjectRelationSchema,
**kwargs
)
self.pid_field = Subject.pid

@property
def mapping(self):
"""Return the mapping."""
_mapping = {
"type": "object",
"properties": {
"@v": {"type": "keyword"},
"id": {"type": "keyword"},
"subject": {"type": "keyword"},
},
}

return _mapping


SUBJECT_FIELDS_UI = [
{
"section": _("Subjects"),
"fields": [
dict(
field="subjects",
ui_widget="SubjectAutocompleteDropdown",
isGenericVocabulary=False,
props=dict(
label="Keywords and subjects",
icon="tag",
description="The subjects related to the community",
placeholder="Search for a subject by name e.g. Psychology ...",
autocompleteFrom="api/subjects",
noQueryMessage="Search for subjects...",
autocompleteFromAcceptHeader="application/vnd.inveniordm.v1+json",
required=False,
multiple=True,
clearable=True,
allowAdditions=False,
),
)
],
}
]


SUBJECT_FIELDS = {
SubjectCF(
name="subjects",
multiple=True,
dump_options=False,
)
}

0 comments on commit 73a8f6c

Please sign in to comment.