diff --git a/arches_lingo/serializers.py b/arches_lingo/serializers.py
index 95ca4f07..59d0dc19 100644
--- a/arches_lingo/serializers.py
+++ b/arches_lingo/serializers.py
@@ -34,6 +34,38 @@ class Meta:
fields = "__all__"
+class SchemeLabelSerializer(ArchesModelSerializer):
+ class Meta:
+ model = ResourceInstance
+ graph_slug = "scheme"
+ nodegroups = ["appellative_status"]
+ fields = "__all__"
+
+
+class SchemeLabelTileSerializer(ArchesTileSerializer):
+ class Meta:
+ model = TileModel
+ graph_slug = "scheme"
+ root_node = "appellative_status"
+ 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 318dfcb3..f063956a 100644
--- a/arches_lingo/src/arches_lingo/api.ts
+++ b/arches_lingo/src/arches_lingo/api.ts
@@ -59,6 +59,60 @@ export const fetchSchemeCreation = async (schemeId: string) => {
return parsed;
};
+export const fetchSchemeLabel = async (schemeId: string) => {
+ const response = await fetch(arches.urls.api_scheme_label(schemeId));
+ const parsed = await response.json();
+ if (!response.ok) throw new Error(parsed.message || response.statusText);
+ return parsed;
+};
+
+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();
+ throw new Error(parsed.message || response.statusText);
+ } else {
+ return true;
+ }
+};
+
export const updateSchemeCreation = async (
schemeId: string,
schemeInstance: SchemeInstance,
diff --git a/arches_lingo/src/arches_lingo/components/generic/ControlledListItem.vue b/arches_lingo/src/arches_lingo/components/generic/ControlledListItem.vue
index 695c0398..2dc64268 100644
--- a/arches_lingo/src/arches_lingo/components/generic/ControlledListItem.vue
+++ b/arches_lingo/src/arches_lingo/components/generic/ControlledListItem.vue
@@ -3,12 +3,12 @@ import type {
ControlledListItem,
DataComponentMode,
} from "@/arches_lingo/types";
-import ControlledListItemViewer from "@/arches_lingo/components/generic/ControlledListItemViewer.vue";
+import ControlledListItemViewer from "@/arches_lingo/components/generic/controlled-list-item/ControlledListItemViewer.vue";
import { EDIT, VIEW } from "@/arches_lingo/constants.ts";
-const { mode = EDIT } = defineProps<{
+const { mode = VIEW } = defineProps<{
mode?: DataComponentMode;
- value?: ControlledListItem;
+ value?: ControlledListItem | ControlledListItem[];
}>();
defineEmits(["update"]);
diff --git a/arches_lingo/src/arches_lingo/components/generic/ControlledListItemViewer.vue b/arches_lingo/src/arches_lingo/components/generic/ControlledListItemViewer.vue
deleted file mode 100644
index 063e6465..00000000
--- a/arches_lingo/src/arches_lingo/components/generic/ControlledListItemViewer.vue
+++ /dev/null
@@ -1,8 +0,0 @@
-
-
- {{ props.value?.labels }}
-
diff --git a/arches_lingo/src/arches_lingo/components/generic/LabelViewer.vue b/arches_lingo/src/arches_lingo/components/generic/LabelViewer.vue
deleted file mode 100644
index e69de29b..00000000
diff --git a/arches_lingo/src/arches_lingo/components/generic/MetaStringViewer.vue b/arches_lingo/src/arches_lingo/components/generic/MetaStringViewer.vue
new file mode 100644
index 00000000..a95aa3cd
--- /dev/null
+++ b/arches_lingo/src/arches_lingo/components/generic/MetaStringViewer.vue
@@ -0,0 +1,142 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ props.metaStringText.noRecords }}
+
+
diff --git a/arches_lingo/src/arches_lingo/components/generic/NonLocalizedString.vue b/arches_lingo/src/arches_lingo/components/generic/NonLocalizedString.vue
index cf2ae836..0f665e19 100644
--- a/arches_lingo/src/arches_lingo/components/generic/NonLocalizedString.vue
+++ b/arches_lingo/src/arches_lingo/components/generic/NonLocalizedString.vue
@@ -1,10 +1,10 @@
-
-
-
- {{ val.display_value }}
-
-
-
diff --git a/arches_lingo/src/arches_lingo/components/generic/controlled-list-item/ControlledListItemViewer.vue b/arches_lingo/src/arches_lingo/components/generic/controlled-list-item/ControlledListItemViewer.vue
new file mode 100644
index 00000000..a863750f
--- /dev/null
+++ b/arches_lingo/src/arches_lingo/components/generic/controlled-list-item/ControlledListItemViewer.vue
@@ -0,0 +1,28 @@
+
+
+
+
+ {{ val.labels[0].value }}
+
+
+
+ {{ (value as ControlledListItem).labels[0].value }}
+
+
+ {{ $gettext("None") }}
+
+
diff --git a/arches_lingo/src/arches_lingo/components/generic/NonLocalizedStringEditor.vue b/arches_lingo/src/arches_lingo/components/generic/non-localized-string/NonLocalizedStringEditor.vue
similarity index 100%
rename from arches_lingo/src/arches_lingo/components/generic/NonLocalizedStringEditor.vue
rename to arches_lingo/src/arches_lingo/components/generic/non-localized-string/NonLocalizedStringEditor.vue
diff --git a/arches_lingo/src/arches_lingo/components/generic/NonLocalizedStringViewer.vue b/arches_lingo/src/arches_lingo/components/generic/non-localized-string/NonLocalizedStringViewer.vue
similarity index 100%
rename from arches_lingo/src/arches_lingo/components/generic/NonLocalizedStringViewer.vue
rename to arches_lingo/src/arches_lingo/components/generic/non-localized-string/NonLocalizedStringViewer.vue
diff --git a/arches_lingo/src/arches_lingo/components/generic/ResourceInstanceRelationshipsEditor.vue b/arches_lingo/src/arches_lingo/components/generic/resource-instance-relationships/ResourceInstanceRelationshipsEditor.vue
similarity index 100%
rename from arches_lingo/src/arches_lingo/components/generic/ResourceInstanceRelationshipsEditor.vue
rename to arches_lingo/src/arches_lingo/components/generic/resource-instance-relationships/ResourceInstanceRelationshipsEditor.vue
diff --git a/arches_lingo/src/arches_lingo/components/generic/resource-instance-relationships/ResourceInstanceRelationshipsViewer.vue b/arches_lingo/src/arches_lingo/components/generic/resource-instance-relationships/ResourceInstanceRelationshipsViewer.vue
new file mode 100644
index 00000000..f5757350
--- /dev/null
+++ b/arches_lingo/src/arches_lingo/components/generic/resource-instance-relationships/ResourceInstanceRelationshipsViewer.vue
@@ -0,0 +1,31 @@
+
+
+
+
+
+ {{ val.display_value }}
+
+
+
+ {{ $gettext("None") }}
+
+
+
diff --git a/arches_lingo/src/arches_lingo/components/scheme/editor/SchemeEditor.vue b/arches_lingo/src/arches_lingo/components/scheme/editor/SchemeEditor.vue
index 11ca725a..8beadd54 100644
--- a/arches_lingo/src/arches_lingo/components/scheme/editor/SchemeEditor.vue
+++ b/arches_lingo/src/arches_lingo/components/scheme/editor/SchemeEditor.vue
@@ -1,37 +1,64 @@
@@ -91,38 +108,16 @@ async function updateScheme() {
-
-
-
-
- {{
- component.editorTabName
- }}
-
-
-
-
-
-
-
-
-
-
-
+
+
{{ currentEditor.editorName }}
+
diff --git a/arches_lingo/src/arches_lingo/components/scheme/report/SchemeLicense.vue b/arches_lingo/src/arches_lingo/components/scheme/report/SchemeLicense.vue
index 90ba3748..02d1892e 100644
--- a/arches_lingo/src/arches_lingo/components/scheme/report/SchemeLicense.vue
+++ b/arches_lingo/src/arches_lingo/components/scheme/report/SchemeLicense.vue
@@ -14,6 +14,6 @@ const { $gettext } = useGettext();
- abc
+ todo
diff --git a/arches_lingo/src/arches_lingo/components/scheme/report/SchemeNamespace.vue b/arches_lingo/src/arches_lingo/components/scheme/report/SchemeNamespace.vue
index c5b01449..d50eb9da 100644
--- a/arches_lingo/src/arches_lingo/components/scheme/report/SchemeNamespace.vue
+++ b/arches_lingo/src/arches_lingo/components/scheme/report/SchemeNamespace.vue
@@ -2,50 +2,85 @@
import { onMounted, ref } from "vue";
import { useRoute } from "vue-router";
import { useGettext } from "vue3-gettext";
-
+import Button from "primevue/button";
import SchemeReportSection from "@/arches_lingo/components/scheme/report/SchemeSection.vue";
import NonLocalizedString from "@/arches_lingo/components/generic/NonLocalizedString.vue";
import {
fetchSchemeNamespace,
updateSchemeNamespace,
} from "@/arches_lingo/api.ts";
+import {
+ VIEW,
+ EDIT,
+ OPEN_EDITOR,
+ ERROR,
+ UPDATED,
+} from "@/arches_lingo/constants.ts";
+import { useToast } from "primevue/usetoast";
import type {
DataComponentMode,
SchemeNamespaceUpdate,
SchemeInstance,
} from "@/arches_lingo/types";
-import { VIEW, EDIT } from "@/arches_lingo/constants.ts";
+const toast = useToast();
const { $gettext } = useGettext();
-const schemeNamespace = ref
();
+const schemeInstance = ref();
const route = useRoute();
defineProps<{
mode?: DataComponentMode;
}>();
-defineEmits(["openEditor"]);
+const emit = defineEmits([OPEN_EDITOR, UPDATED]);
-defineExpose({ save, getSectionValue });
+defineExpose({ getSectionValue });
onMounted(async () => {
getSectionValue();
});
async function save() {
- await updateSchemeNamespace(
- route.params.id as string,
- schemeNamespace.value as SchemeInstance,
- );
+ try {
+ await updateSchemeNamespace(
+ route.params.id as string,
+ schemeInstance.value as SchemeInstance,
+ );
+ emit(UPDATED);
+ } catch (error) {
+ toast.add({
+ severity: ERROR,
+ summary: $gettext("Error"),
+ detail:
+ error instanceof Error
+ ? error.message
+ : $gettext(
+ "Could not update the namespace for the resource",
+ ),
+ });
+ }
}
async function getSectionValue() {
- const response = await fetchSchemeNamespace(route.params.id as string);
- schemeNamespace.value = response;
+ try {
+ const response = await fetchSchemeNamespace(route.params.id as string);
+ schemeInstance.value = response;
+ } catch (error) {
+ toast.add({
+ severity: ERROR,
+ summary: $gettext("Error"),
+ detail:
+ error instanceof Error
+ ? error.message
+ : $gettext(
+ "Could not fetch the namespace for the resource",
+ ),
+ });
+ }
}
function onNamespaceNameUpdate(val: string) {
- const namespaceValue = schemeNamespace.value as SchemeNamespaceUpdate;
+ const namespaceValue = schemeInstance.value as SchemeNamespaceUpdate;
if (!namespaceValue?.namespace) {
namespaceValue.namespace = {
namespace_name: val,
@@ -63,10 +98,10 @@ function onNamespaceNameUpdate(val: string) {
@@ -118,5 +173,9 @@ function onCreationUpdate(val: string[]) {
:mode="EDIT"
@update="onCreationUpdate"
/>
+
diff --git a/arches_lingo/src/arches_lingo/components/scheme/report/SchemeUri.vue b/arches_lingo/src/arches_lingo/components/scheme/report/SchemeUri.vue
index b31483f3..072b92c2 100644
--- a/arches_lingo/src/arches_lingo/components/scheme/report/SchemeUri.vue
+++ b/arches_lingo/src/arches_lingo/components/scheme/report/SchemeUri.vue
@@ -6,6 +6,6 @@ const { $gettext } = useGettext();
- abc
+ todo
diff --git a/arches_lingo/src/arches_lingo/constants.ts b/arches_lingo/src/arches_lingo/constants.ts
index 28f684f6..c1b4c758 100644
--- a/arches_lingo/src/arches_lingo/constants.ts
+++ b/arches_lingo/src/arches_lingo/constants.ts
@@ -8,6 +8,8 @@ export const SECONDARY = "secondary";
export const CONTRAST = "contrast";
export const EDIT = "edit";
export const VIEW = "view";
+export const OPEN_EDITOR = "openEditor";
+export const UPDATED = "updated";
export const DEFAULT_ERROR_TOAST_LIFE = 8000;
export const SEARCH_RESULTS_PER_PAGE = 25;
diff --git a/arches_lingo/src/arches_lingo/pages/SchemePage.vue b/arches_lingo/src/arches_lingo/pages/SchemePage.vue
index 77b7f925..ba9f2d93 100644
--- a/arches_lingo/src/arches_lingo/pages/SchemePage.vue
+++ b/arches_lingo/src/arches_lingo/pages/SchemePage.vue
@@ -2,23 +2,21 @@
import { ref } from "vue";
import Splitter from "primevue/splitter";
import SplitterPanel from "primevue/splitterpanel";
+import SchemeLabel from "@/arches_lingo/components/scheme/report/SchemeLabel.vue";
import SchemeLicense from "@/arches_lingo/components/scheme/report/SchemeLicense.vue";
import SchemeNote from "@/arches_lingo/components/scheme/report/SchemeNote.vue";
import SchemeNamespace from "@/arches_lingo/components/scheme/report/SchemeNamespace.vue";
import SchemeStandard from "@/arches_lingo/components/scheme/report/SchemeStandard.vue";
import SchemeAuthority from "@/arches_lingo/components/scheme/report/SchemeAuthority.vue";
import SchemeEditor from "@/arches_lingo/components/scheme/editor/SchemeEditor.vue";
+import type { SectionTypes } from "@/arches_lingo/types.ts";
const editorVisible = ref(false);
const sectionVisible = ref(true);
-const editorTab = ref();
-type sectionTypes =
- | typeof SchemeNamespace
- | typeof SchemeLicense
- | typeof SchemeStandard
- | typeof SchemeAuthority
- | typeof SchemeNote;
-const childRefs = ref>([]);
+const editorForm = ref();
+const editorTileId = ref();
+
+const childRefs = ref>([]);
const onMaximize = () => {
editorVisible.value = true;
sectionVisible.value = false;
@@ -35,10 +33,11 @@ const onClose = () => {
sectionVisible.value = true;
};
-const onOpenEditor = (tab: string) => {
- editorTab.value = tab;
+const onOpenEditor = (form: string, tileId: string) => {
+ editorForm.value = form;
editorVisible.value = true;
sectionVisible.value = true;
+ editorTileId.value = tileId;
};
const onUpdated = () => {
childRefs.value.forEach((ref) => {
@@ -47,6 +46,7 @@ const onUpdated = () => {
};
const components = [
+ { component: SchemeLabel, id: "label", props: {} },
{ component: SchemeNote, id: "note", props: {} },
{ component: SchemeAuthority, id: "authority", props: {} },
{ component: SchemeStandard, id: "standard", props: {} },
@@ -55,7 +55,7 @@ const components = [
];
const getRef = (el: object | null, index: number) => {
- if (el != null) childRefs.value[index] = el as sectionTypes;
+ if (el != null) childRefs.value[index] = el as SectionTypes;
};
@@ -74,7 +74,11 @@ const getRef = (el: object | null, index: number) => {
:is="component.component"
:ref="(el) => getRef(el, index)"
v-bind="component.props"
- @open-editor="onOpenEditor(component.id)"
+ @open-editor="
+ (tileId: string) => {
+ onOpenEditor(component.id, tileId);
+ }
+ "
/>
@@ -84,9 +88,10 @@ const getRef = (el: object | null, index: number) => {
:min-size="33"
>
{% endblock arches_urls %}
diff --git a/arches_lingo/urls.py b/arches_lingo/urls.py
index 2f7f96d4..6f379680 100644
--- a/arches_lingo/urls.py
+++ b/arches_lingo/urls.py
@@ -12,8 +12,12 @@
ConceptStatementListCreateView,
SchemeCreationView,
SchemeDetailView,
+ SchemeLabelTileView,
+ SchemeLabelView,
SchemeListCreateView,
SchemeNamespaceView,
+ SchemeNoteTileView,
+ SchemeNoteView,
SchemeStatementDetailView,
SchemeStatementListCreateView,
TextualWorkRdmSystemSerializerView,
@@ -53,6 +57,26 @@
SchemeCreationView.as_view(),
name="api-scheme-creation",
),
+ path(
+ "api/scheme//label",
+ SchemeLabelView.as_view(),
+ name="api-scheme-label",
+ ),
+ path(
+ "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 7567d942..439da420 100644
--- a/arches_lingo/views/api/pythonic_models.py
+++ b/arches_lingo/views/api/pythonic_models.py
@@ -10,7 +10,11 @@
from arches_lingo.serializers import (
ConceptSerializer,
SchemeCreationSerializer,
+ SchemeLabelSerializer,
+ SchemeLabelTileSerializer,
SchemeNamespaceSerializer,
+ SchemeNoteSerializer,
+ SchemeNoteTileSerializer,
SchemeSerializer,
ConceptStatementSerializer,
SchemeStatementSerializer,
@@ -54,6 +58,26 @@ class SchemeCreationView(ArchesModelAPIMixin, RetrieveUpdateDestroyAPIView):
serializer_class = SchemeCreationSerializer
+class SchemeLabelView(ArchesModelAPIMixin, RetrieveUpdateDestroyAPIView):
+ permission_classes = [RDMAdministrator]
+ serializer_class = SchemeLabelSerializer
+
+
+class SchemeLabelTileView(ArchesModelAPIMixin, RetrieveUpdateDestroyAPIView):
+ permission_classes = [RDMAdministrator]
+ 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