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 committed Feb 29, 2024
1 parent 20f414b commit 468e905
Show file tree
Hide file tree
Showing 2 changed files with 91 additions and 0 deletions.
12 changes: 12 additions & 0 deletions invenio_rdm_records/contrib/subject/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
# -*- 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.

"""Subjects module."""

from .custom_fields import SUBJECT_FIELDS, SUBJECT_FIELDS_UI

__all__ = (SUBJECT_FIELDS_UI, SUBJECT_FIELDS)
79 changes: 79 additions & 0 deletions invenio_rdm_records/contrib/subject/custom_fields.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,79 @@
# -*- 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 invenio_vocabularies.contrib.subjects.api import Subject
from invenio_vocabularies.contrib.subjects.schema import SubjectRelationSchema
from invenio_vocabularies.services.custom_fields 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",
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,
isCustomVocabulary=True,
),
)
],
}
]


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

0 comments on commit 468e905

Please sign in to comment.