Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
17 changes: 11 additions & 6 deletions bats_ai/core/views/recording_tag.py
Original file line number Diff line number Diff line change
@@ -1,8 +1,9 @@
from __future__ import annotations

from django.db.models import Q
from django.http import Http404, HttpRequest
from ninja import Schema
from ninja.pagination import RouterPaginated
from ninja.pagination import Router

from bats_ai.core.models import RecordingTag

Expand All @@ -12,12 +13,16 @@ class RecordingTagSchema(Schema):
user: int


router = RouterPaginated()
router = Router()


@router.get("/")
@router.get("/", response=list[str])
def get_recording_tags(request: HttpRequest):
user = request.user
if not user:
if not request.user:
return Http404()
return list(RecordingTag.objects.filter(user=request.user).values())
# User's own tags + tags on public recordings
return list(
RecordingTag.objects.filter(Q(user=request.user) | Q(recording__public=True))
.values_list("text", flat=True)
.distinct()
)
7 changes: 1 addition & 6 deletions client/src/api/api.ts
Original file line number Diff line number Diff line change
Expand Up @@ -273,11 +273,6 @@ interface GRTSCellBbox {
};
}

export interface RecordingTag {
id: number;
text: string;
user_id: number;
}

/** Params for paginated recording list (v-data-table-server compatible). */
export interface RecordingListParams {
Expand Down Expand Up @@ -358,7 +353,7 @@ async function getUnsubmittedNeighbors(
}

async function getRecordingTags() {
return axiosInstance.get<RecordingTag[]>(`/recording-tag/`);
return axiosInstance.get<string[]>(`/recording-tag/`);
}

async function deleteRecording(id: number) {
Expand Down
2 changes: 1 addition & 1 deletion client/src/components/BatchRecordingElement.vue
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@ export default defineComponent({
emits: ["done", "cancel", "update", "delete"],
setup(props, { emit }) {
const { recordingTagList } = useState();
const tagOptions = computed(() => recordingTagList.value.map((tag) => tag.text));
const tagOptions = computed(() => [...recordingTagList.value]);
const initialTags = props.editing ? props.editing.tags : [];
const currentTags: Ref<string[] | undefined> = ref(initialTags);
const dateAdapter = useDate();
Expand Down
4 changes: 2 additions & 2 deletions client/src/components/BatchUploadRecording.vue
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
import { computed, defineComponent, ref, Ref, watch } from 'vue';
import { RecordingMimeTypes } from '../constants';
import useRequest from '@use/useRequest';
import { UploadLocation, uploadRecordingFile, getCellLocation, RecordingFileParameters, getGuanoMetadata, RecordingTag } from '../api/api';
import { UploadLocation, uploadRecordingFile, getCellLocation, RecordingFileParameters, getGuanoMetadata } from '../api/api';
import BatchRecordingElement, { BatchRecording } from './BatchRecordingElement.vue';
import { cloneDeep } from 'lodash';
import { extractDateTimeComponents, getCurrentTime } from '@use/useUtils';
Expand All @@ -24,7 +24,7 @@ export default defineComponent({
emits: ['done', 'cancel'],
setup(props, { emit }) {
const { recordingTagList } = useState();
const tagOptions = computed(() => recordingTagList.value.map((tag: RecordingTag) => tag.text));
const tagOptions = computed(() => [...recordingTagList.value]);

const fileInputEl: Ref<HTMLInputElement | null> = ref(null);
const fileModel: Ref<File | undefined> = ref();
Expand Down
Loading