Initial release: DictIA v0.8.14-alpha (fork de Speakr, AGPL-3.0)
This commit is contained in:
164
static/js/modules/state/core.js
Normal file
164
static/js/modules/state/core.js
Normal file
@@ -0,0 +1,164 @@
|
||||
/**
|
||||
* Core application state
|
||||
*/
|
||||
|
||||
export function createCoreState(ref, computed) {
|
||||
// --- Core State ---
|
||||
const currentView = ref('upload');
|
||||
const dragover = ref(false);
|
||||
const recordings = ref([]);
|
||||
const selectedRecording = ref(null);
|
||||
const selectedTab = ref('summary');
|
||||
const searchQuery = ref('');
|
||||
const isLoadingRecordings = ref(true);
|
||||
const globalError = ref(null);
|
||||
|
||||
// --- Pagination State ---
|
||||
const currentPage = ref(1);
|
||||
const perPage = ref(25);
|
||||
const totalRecordings = ref(0);
|
||||
const totalPages = ref(0);
|
||||
const hasNextPage = ref(false);
|
||||
const hasPrevPage = ref(false);
|
||||
const isLoadingMore = ref(false);
|
||||
const searchDebounceTimer = ref(null);
|
||||
|
||||
// --- Enhanced Search & Organization State ---
|
||||
const sortBy = ref('created_at');
|
||||
const selectedTagFilter = ref(null);
|
||||
|
||||
// Advanced filter state
|
||||
const showAdvancedFilters = ref(false);
|
||||
const filterTags = ref([]);
|
||||
const filterSpeakers = ref([]); // Array of speaker names for filtering
|
||||
const filterDateRange = ref({ start: '', end: '' });
|
||||
const filterDatePreset = ref('');
|
||||
const filterTextQuery = ref('');
|
||||
const showArchivedRecordings = ref(false);
|
||||
const showSharedWithMe = ref(false);
|
||||
|
||||
// --- App Configuration ---
|
||||
const useAsrEndpoint = ref(false);
|
||||
const connectorSupportsDiarization = ref(false); // Connector capability for diarization UI
|
||||
const connectorSupportsSpeakerCount = ref(false); // Connector capability for min/max speakers
|
||||
const currentUserName = ref('');
|
||||
const canDeleteRecordings = ref(true);
|
||||
const enableInternalSharing = ref(false);
|
||||
const enableArchiveToggle = ref(false);
|
||||
const showUsernamesInUI = ref(false);
|
||||
|
||||
// --- Incognito Mode State ---
|
||||
const enableIncognitoMode = ref(false); // Server config - whether feature is available
|
||||
const incognitoMode = ref(false); // User toggle - whether to use incognito for current upload
|
||||
const incognitoRecording = ref(null);
|
||||
const incognitoProcessing = ref(false);
|
||||
|
||||
// Tag Selection
|
||||
const availableTags = ref([]);
|
||||
const selectedTagIds = ref([]);
|
||||
const uploadTagSearchFilter = ref('');
|
||||
|
||||
// Folder Selection
|
||||
const availableFolders = ref([]);
|
||||
const selectedFolderId = ref(null);
|
||||
const foldersEnabled = ref(false);
|
||||
const filterFolder = ref(''); // '' = all, 'none' = no folder, or folder id
|
||||
|
||||
// Speaker Selection
|
||||
const availableSpeakers = ref([]);
|
||||
|
||||
const selectedTags = computed(() => {
|
||||
return selectedTagIds.value.map(tagId =>
|
||||
availableTags.value.find(tag => tag.id == tagId)
|
||||
).filter(Boolean);
|
||||
});
|
||||
|
||||
const filteredAvailableTagsForUpload = computed(() => {
|
||||
const availableForSelection = availableTags.value.filter(tag => !selectedTagIds.value.includes(tag.id));
|
||||
if (!uploadTagSearchFilter.value) return availableForSelection;
|
||||
|
||||
const filter = uploadTagSearchFilter.value.toLowerCase();
|
||||
return availableForSelection.filter(tag =>
|
||||
tag.name.toLowerCase().includes(filter)
|
||||
);
|
||||
});
|
||||
|
||||
const filteredRecordings = computed(() => {
|
||||
return recordings.value;
|
||||
});
|
||||
|
||||
const setGlobalError = (message, duration = 7000) => {
|
||||
globalError.value = message;
|
||||
if (duration > 0) {
|
||||
setTimeout(() => { if (globalError.value === message) globalError.value = null; }, duration);
|
||||
}
|
||||
};
|
||||
|
||||
return {
|
||||
// Core
|
||||
currentView,
|
||||
dragover,
|
||||
recordings,
|
||||
selectedRecording,
|
||||
selectedTab,
|
||||
searchQuery,
|
||||
isLoadingRecordings,
|
||||
globalError,
|
||||
setGlobalError,
|
||||
|
||||
// Pagination
|
||||
currentPage,
|
||||
perPage,
|
||||
totalRecordings,
|
||||
totalPages,
|
||||
hasNextPage,
|
||||
hasPrevPage,
|
||||
isLoadingMore,
|
||||
searchDebounceTimer,
|
||||
|
||||
// Search & Organization
|
||||
sortBy,
|
||||
selectedTagFilter,
|
||||
showAdvancedFilters,
|
||||
filterTags,
|
||||
filterSpeakers,
|
||||
filterDateRange,
|
||||
filterDatePreset,
|
||||
filterTextQuery,
|
||||
showArchivedRecordings,
|
||||
showSharedWithMe,
|
||||
|
||||
// App Configuration
|
||||
useAsrEndpoint,
|
||||
connectorSupportsDiarization,
|
||||
connectorSupportsSpeakerCount,
|
||||
currentUserName,
|
||||
canDeleteRecordings,
|
||||
enableInternalSharing,
|
||||
enableArchiveToggle,
|
||||
showUsernamesInUI,
|
||||
|
||||
// Tags
|
||||
availableTags,
|
||||
selectedTagIds,
|
||||
uploadTagSearchFilter,
|
||||
selectedTags,
|
||||
filteredAvailableTagsForUpload,
|
||||
filteredRecordings,
|
||||
|
||||
// Folders
|
||||
availableFolders,
|
||||
selectedFolderId,
|
||||
foldersEnabled,
|
||||
filterFolder,
|
||||
|
||||
// Speakers
|
||||
availableSpeakers,
|
||||
|
||||
// Incognito Mode
|
||||
enableIncognitoMode,
|
||||
incognitoMode,
|
||||
incognitoRecording,
|
||||
incognitoProcessing
|
||||
};
|
||||
}
|
||||
Reference in New Issue
Block a user