diff --git a/arches_lingo/serializers.py b/arches_lingo/serializers.py index d8078f90..59d0dc19 100644 --- a/arches_lingo/serializers.py +++ b/arches_lingo/serializers.py @@ -50,6 +50,22 @@ class Meta: fields = "__all__" +class SchemeNoteSerializer(ArchesModelSerializer): + class Meta: + model = ResourceInstance + graph_slug = "scheme" + nodegroups = ["statement"] + fields = "__all__" + + +class SchemeNoteTileSerializer(ArchesTileSerializer): + class Meta: + model = TileModel + graph_slug = "scheme" + root_node = "statement" + fields = "__all__" + + class TextualWorkRdmSystemSerializer(ArchesModelSerializer): class Meta: model = ResourceInstance diff --git a/arches_lingo/src/arches_lingo/api.ts b/arches_lingo/src/arches_lingo/api.ts index d28c04d8..f063956a 100644 --- a/arches_lingo/src/arches_lingo/api.ts +++ b/arches_lingo/src/arches_lingo/api.ts @@ -66,11 +66,44 @@ export const fetchSchemeLabel = async (schemeId: string) => { return parsed; }; -export const deleteSchemeLabelTile = async (tileId: string) => { - const response = await fetch(arches.urls.api_scheme_label_tile(tileId), { - method: "DELETE", - headers: { "X-CSRFTOKEN": getToken() }, - }); +export const deleteSchemeLabelTile = async ( + schemeId: string, + tileId: string, +) => { + const response = await fetch( + arches.urls.api_scheme_label_tile(schemeId, tileId), + { + method: "DELETE", + headers: { "X-CSRFTOKEN": getToken() }, + }, + ); + + if (!response.ok) { + const parsed = await response.json(); + throw new Error(parsed.message || response.statusText); + } else { + return true; + } +}; + +export const fetchSchemeNotes = async (schemeId: string) => { + const response = await fetch(arches.urls.api_scheme_note(schemeId)); + const parsed = await response.json(); + if (!response.ok) throw new Error(parsed.message || response.statusText); + return parsed; +}; + +export const deleteSchemeNoteTile = async ( + schemeId: string, + tileId: string, +) => { + const response = await fetch( + arches.urls.api_scheme_note_tile(schemeId, tileId), + { + method: "DELETE", + headers: { "X-CSRFTOKEN": getToken() }, + }, + ); if (!response.ok) { const parsed = await response.json(); diff --git a/arches_lingo/src/arches_lingo/components/generic/MetaStringViewer.vue b/arches_lingo/src/arches_lingo/components/generic/MetaStringViewer.vue index 63d4e001..bca2f190 100644 --- a/arches_lingo/src/arches_lingo/components/generic/MetaStringViewer.vue +++ b/arches_lingo/src/arches_lingo/components/generic/MetaStringViewer.vue @@ -24,6 +24,7 @@ function confirmDelete(tileId: string) { confirm.require({ header: $gettext("Confirmation"), message: props.metaStringText.deleteConfirm, + group: props.metaStringText.name, accept: () => { emits("deleteString", tileId); }, @@ -43,6 +44,7 @@ function confirmDelete(tileId: string) { diff --git a/arches_lingo/src/arches_lingo/types.ts b/arches_lingo/src/arches_lingo/types.ts index 7a0721c9..ad9074fe 100644 --- a/arches_lingo/src/arches_lingo/types.ts +++ b/arches_lingo/src/arches_lingo/types.ts @@ -108,6 +108,15 @@ export interface AppellativeStatus { appellative_status_data_assignment_actor: ResourceInstanceReference[]; } +export interface SchemeStatement { + tileid: string; + statement_content_n1: string; + statement_language_n1?: ControlledListItem[]; + statement_type_n1?: ControlledListItem[]; + statement_data_assignment_object_used: ResourceInstanceReference[]; + statement_data_assignment_actor: ResourceInstanceReference[]; +} + export interface SchemeInstance { namespace?: { namespace_name: string; @@ -117,6 +126,7 @@ export interface SchemeInstance { creation_sources: ResourceInstanceReference[]; }; appellative_status?: AppellativeStatus[]; + statement?: SchemeStatement[]; } export interface SchemeResource { diff --git a/arches_lingo/templates/arches_urls.htm b/arches_lingo/templates/arches_urls.htm index b99e62b1..ff749dea 100644 --- a/arches_lingo/templates/arches_urls.htm +++ b/arches_lingo/templates/arches_urls.htm @@ -12,7 +12,9 @@ api_uri_namespace='(resourceid)=>{return "{% url "api-uri-components" "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa" %}".replace("aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa", resourceid)}' api_schemes="{% url 'schemes-list-create' %}" api_scheme_label='(resourceid)=>{return "{% url "api-scheme-label" "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa" %}".replace("aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa", resourceid)}' - api_scheme_label_tile='(tileid)=>{return "{% url "api-scheme-label-tile" "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa" %}".replace("aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa", tileid)}' + api_scheme_label_tile='(resourceid, tileid)=>{return "{% url "api-scheme-label-tile" "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa" "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaab"%}".replace("aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa", resourceid).replace("aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaab", tileid)}' + api_scheme_note='(resourceid)=>{return "{% url "api-scheme-note" "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa" %}".replace("aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa", resourceid)}' + api_scheme_note_tile='(resourceid, tileid)=>{return "{% url "api-scheme-note-tile" "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa" "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaab" %}".replace("aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa", resourceid).replace("aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaab", tileid)}' api_scheme_creation='(resourceid)=>{return "{% url "api-scheme-creation" "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa" %}".replace("aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa", resourceid)}' api_textualwork_list="{% url 'api-textualwork-list' %}" > diff --git a/arches_lingo/urls.py b/arches_lingo/urls.py index ca85318a..6f379680 100644 --- a/arches_lingo/urls.py +++ b/arches_lingo/urls.py @@ -16,6 +16,8 @@ SchemeLabelView, SchemeListCreateView, SchemeNamespaceView, + SchemeNoteTileView, + SchemeNoteView, SchemeStatementDetailView, SchemeStatementListCreateView, TextualWorkRdmSystemSerializerView, @@ -61,10 +63,20 @@ name="api-scheme-label", ), path( - "api/scheme-label/", + "api/scheme//label/", SchemeLabelTileView.as_view(), name="api-scheme-label-tile", ), + path( + "api/scheme//note", + SchemeNoteView.as_view(), + name="api-scheme-note", + ), + path( + "api/scheme//note/", + SchemeNoteTileView.as_view(), + name="api-scheme-note-tile", + ), path( "api/textual-work", TextualWorkRdmSystemSerializerView.as_view(), diff --git a/arches_lingo/views/api/pythonic_models.py b/arches_lingo/views/api/pythonic_models.py index 27daa1bf..439da420 100644 --- a/arches_lingo/views/api/pythonic_models.py +++ b/arches_lingo/views/api/pythonic_models.py @@ -13,6 +13,8 @@ SchemeLabelSerializer, SchemeLabelTileSerializer, SchemeNamespaceSerializer, + SchemeNoteSerializer, + SchemeNoteTileSerializer, SchemeSerializer, ConceptStatementSerializer, SchemeStatementSerializer, @@ -66,6 +68,16 @@ class SchemeLabelTileView(ArchesModelAPIMixin, RetrieveUpdateDestroyAPIView): serializer_class = SchemeLabelTileSerializer +class SchemeNoteView(ArchesModelAPIMixin, RetrieveUpdateDestroyAPIView): + permission_classes = [RDMAdministrator] + serializer_class = SchemeNoteSerializer + + +class SchemeNoteTileView(ArchesModelAPIMixin, RetrieveUpdateDestroyAPIView): + permission_classes = [RDMAdministrator] + serializer_class = SchemeNoteTileSerializer + + class TextualWorkRdmSystemSerializerView(ArchesModelAPIMixin, ListAPIView): permission_classes = [RDMAdministrator] serializer_class = TextualWorkRdmSystemSerializer