Initial release: DictIA v0.8.14-alpha (fork de Speakr, AGPL-3.0)

This commit is contained in:
InnovA AI
2026-03-16 21:47:37 +00:00
commit 42772a31ed
365 changed files with 103572 additions and 0 deletions

View 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
};
}