diff --git a/src/app/components/projects/project-edit/project-edit.component.html b/src/app/components/projects/project-edit/project-edit.component.html index bf3856d..c828670 100644 --- a/src/app/components/projects/project-edit/project-edit.component.html +++ b/src/app/components/projects/project-edit/project-edit.component.html @@ -22,21 +22,75 @@
- +
+
+
+ +
+

{{'project.edit.editing' | translate}}: {{ project?.name }}

+

{{ project?.description !== undefined && project?.description !== null ? project.description : 'No description' }}

+ +
+ +
+ +

+ + +
+ +
+ +
+ + + + + + + + {{ 'project.show' | translate }} +
+
+ + +
+
@@ -51,7 +105,7 @@ {{ 'project.button.activity' | translate }} / {{ 'project.button.warnings' | translate }} - +
- +
- \ No newline at end of file + diff --git a/src/app/components/projects/project-edit/project-edit.component.ts b/src/app/components/projects/project-edit/project-edit.component.ts index 485a269..0964839 100644 --- a/src/app/components/projects/project-edit/project-edit.component.ts +++ b/src/app/components/projects/project-edit/project-edit.component.ts @@ -9,12 +9,13 @@ import { ProjectEditStateService } from '../../../services/projects/project-edit import { IconComponent } from '../../ui/icon/icon.component'; import { DrawerService } from '../../../services/ui/drawer.service'; import { v4 as uuidv4 } from 'uuid'; +import { FormsModule } from '@angular/forms'; import { ProjectWorkspaceService } from '../../../services/project-workspace.service'; @Component({ selector: 'app-project-edit', standalone: true, - imports: [CommonModule, RouterModule, AppPageHeaderComponent, TranslateModule, IconComponent], + imports: [CommonModule, RouterModule, AppPageHeaderComponent, TranslateModule, IconComponent, FormsModule], templateUrl: './project-edit.component.html' }) export class ProjectEditComponent implements OnInit, OnDestroy { @@ -22,8 +23,9 @@ export class ProjectEditComponent implements OnInit, OnDestroy { private projectsService = inject(ProjectsService); private editStateService = inject(ProjectEditStateService); private drawerService = inject(DrawerService); + private workspace = inject(ProjectWorkspaceService); - + public project: any; public projectUuid: string | null = null; public hasUnsavedChanges: boolean = false; @@ -31,15 +33,21 @@ export class ProjectEditComponent implements OnInit, OnDestroy { private projectLoadedSubscription?: Subscription; private projectSavedSubscription?: Subscription; + //edición de descripción y nombre de proyectos= + public isEditing: boolean = false; + public editName: string = ''; + public editDescription: string = ''; + + ngOnInit(): void { this.route.params.subscribe(params => { this.projectUuid = params['uuid']; - + if (this.projectUuid) { if (this.projectsService.projects().length === 0) { this.projectsService.getProjectList(); } - + this.projectsService.loadProject(this.projectUuid); this.workspace.openInEdit(this.projectUuid, this.projectUuid); // register immediately, name updated later } @@ -48,9 +56,18 @@ export class ProjectEditComponent implements OnInit, OnDestroy { this.projectLoadedSubscription = this.projectsService.projectLoaded.subscribe(projectData => { if (projectData) { const basicProjectData = this.projectsService.projects().find(p => p.uuid === this.projectUuid); + + //Mapear descripción desde CuemsScript si no existe + if (!projectData.description && projectData.CuemsScript?.description) { + projectData.description = projectData.CuemsScript.description; + } + if (basicProjectData) { if (!projectData.uuid) projectData.uuid = basicProjectData.uuid; if (!projectData.name) projectData.name = basicProjectData.name; + + if (!projectData.description && basicProjectData.description) projectData.description = basicProjectData.description; //revisar ProjectList + if (!projectData.unix_name) projectData.unix_name = basicProjectData.unix_name; if (!projectData.created) projectData.created = basicProjectData.created; if (!projectData.modified) projectData.modified = basicProjectData.modified; @@ -59,7 +76,7 @@ export class ProjectEditComponent implements OnInit, OnDestroy { projectData.uuid = this.projectUuid; } } - + this.project = projectData; // Workaround: server returns stale CuemsScript.id and CuemsScript.name on duplicated projects. @@ -90,8 +107,6 @@ export class ProjectEditComponent implements OnInit, OnDestroy { savedProjectUuid => { if (this.projectUuid && savedProjectUuid === this.projectUuid) { this.editStateService.markProjectAsSaved(this.projectUuid); - - this.projectsService.loadProject(this.projectUuid); } } ); @@ -101,7 +116,7 @@ export class ProjectEditComponent implements OnInit, OnDestroy { this.changesSubscription?.unsubscribe(); this.projectLoadedSubscription?.unsubscribe(); this.projectSavedSubscription?.unsubscribe(); - + if (this.projectUuid) { this.editStateService.clearTemporaryCues(this.projectUuid); } @@ -125,13 +140,33 @@ export class ProjectEditComponent implements OnInit, OnDestroy { try { const updatedProject = JSON.parse(JSON.stringify(this.project)); - + const modifiedData = this.editStateService.getProjectModifiedData(this.projectUuid); - + if (!modifiedData || Object.keys(modifiedData).length === 0) { return; } - + + //guardar cambios de nombre y descripción + if (modifiedData.metadata) { + + if (!updatedProject.CuemsScript) { + updatedProject.CuemsScript = {}; + } + + if (modifiedData.metadata.name !== undefined && modifiedData.metadata.name.trim() !== '') { + updatedProject.name = modifiedData.metadata.name; + + updatedProject.CuemsScript.name = modifiedData.metadata.name; + } + + if (modifiedData.metadata.description !== undefined) { + updatedProject.description = modifiedData.metadata.description; + + updatedProject.CuemsScript.description = modifiedData.metadata.description; + } + } + if (modifiedData.sequence) { if (!updatedProject.CuemsScript) { updatedProject.CuemsScript = {}; @@ -146,7 +181,7 @@ export class ProjectEditComponent implements OnInit, OnDestroy { updatedProject.CuemsScript.CueList.id = this.generateUUID(); updatedProject.CuemsScript.CueList.contents = []; } else { - // Fallback + // Fallback updatedProject.CuemsScript.CueList = { autoload: false, description: null, @@ -165,7 +200,7 @@ export class ProjectEditComponent implements OnInit, OnDestroy { }; } } - + if (modifiedData.sequence.contents === null) { updatedProject.CuemsScript.CueList.contents = null; } else if (Array.isArray(modifiedData.sequence.contents) && modifiedData.sequence.contents.length === 0) { @@ -174,15 +209,16 @@ export class ProjectEditComponent implements OnInit, OnDestroy { updatedProject.CuemsScript.CueList.contents = modifiedData.sequence.contents; } } - + if (!updatedProject.uuid && this.projectUuid) { updatedProject.uuid = this.projectUuid; } - + this.projectsService.updateProject(updatedProject); } catch (error) { console.error('Error saving complete project:', error); } + } toggleActivityDrawer(): void { @@ -193,9 +229,37 @@ export class ProjectEditComponent implements OnInit, OnDestroy { return uuidv4(); } + //métodos de edición de nombre y descripción + startEdit(): void { + this.isEditing = true; + this.editName = this.project?.name || ''; + this.editDescription = this.project?.description || ''; + } + + cancelEdit(): void { + this.isEditing = false; + } + + saveEdit(): void { + if (!this.project || !this.projectUuid) return; + if (!this.editName.trim()) return; + + // Actualiza UI inmediatamente + this.project.name = this.editName; + this.project.description = this.editDescription; + + // Registra el cambio en el estado global + this.editStateService.setProjectMetadata(this.projectUuid, { + name: this.editName, + description: this.editDescription + }); + + this.isEditing = false; + } + closeWorkspaceProject(): void { if (this.projectUuid) { this.workspace.requestClose(this.projectUuid); } - } -} \ No newline at end of file + } +} diff --git a/src/app/components/projects/project-list/project-list.component.html b/src/app/components/projects/project-list/project-list.component.html index 0e8adec..1ab7225 100644 --- a/src/app/components/projects/project-list/project-list.component.html +++ b/src/app/components/projects/project-list/project-list.component.html @@ -59,7 +59,7 @@ {{ 'project.list.name' | translate }} - {{ 'project.list.unix_name' | translate }} + {{ 'project.list.description' | translate }} {{ 'project.list.created' | translate }} {{ 'project.list.modified' | translate }} @@ -74,7 +74,7 @@ {{ project.name }} - {{ project.unix_name }} + {{ truncateText(project.description || '', 17) }} {{ project.created | date:'medium' }} {{ project.modified | date:'medium' }} diff --git a/src/app/components/projects/project-list/project-list.component.ts b/src/app/components/projects/project-list/project-list.component.ts index e556274..6692043 100644 --- a/src/app/components/projects/project-list/project-list.component.ts +++ b/src/app/components/projects/project-list/project-list.component.ts @@ -28,16 +28,16 @@ export class ProjectListComponent implements OnInit, OnDestroy { isConfirmDeleteOpen = false; isConfirmBulkDeleteOpen = false; isBulkDeleting = false; - + private deletingProjects = new Map(); - + constructor() { this.refreshProjects(); effect(() => { const projects = this.projectsService.projects(); this.isLoading = false; - + this.cleanupProjectMaps(projects); }); } @@ -46,13 +46,13 @@ export class ProjectListComponent implements OnInit, OnDestroy { this.subscription.add( this.projectsService.errorEvent.subscribe(error => { console.log('Error event received:', error); - + if (error.action === 'project_delete') { if (this.projectToDeleteUuid) { this.deletingProjects.delete(this.projectToDeleteUuid); this.projectToDeleteUuid = null; } - + this.isBulkDeleting = false; } }) @@ -65,16 +65,16 @@ export class ProjectListComponent implements OnInit, OnDestroy { cleanupProjectMaps(projects: ProjectList[]) { const existingUuids = projects.map(p => p.uuid); - + if (this.selectedProjects.length > 0) { const previousLength = this.selectedProjects.length; this.selectedProjects = this.selectedProjects.filter(uuid => existingUuids.includes(uuid)); - + if (previousLength !== this.selectedProjects.length) { console.log(`Removed ${previousLength - this.selectedProjects.length} non-existent projects from selection`); } } - + if (this.deletingProjects.size > 0) { let removed = 0; this.deletingProjects.forEach((value, uuid) => { @@ -83,7 +83,7 @@ export class ProjectListComponent implements OnInit, OnDestroy { removed++; } }); - + if (this.deletingProjects.size === 0) { this.isBulkDeleting = false; } @@ -124,7 +124,7 @@ export class ProjectListComponent implements OnInit, OnDestroy { this.executeProjectDeletion(this.projectToDeleteUuid); this.closeDeleteConfirmation(); - + const uuidToCleanup = this.projectToDeleteUuid; setTimeout(() => { if (this.deletingProjects.has(uuidToCleanup)) { @@ -143,7 +143,7 @@ export class ProjectListComponent implements OnInit, OnDestroy { if (this.isProjectBeingDeleted(uuid)) { return; } - + this.openDeleteConfirmation(uuid); } @@ -159,7 +159,7 @@ export class ProjectListComponent implements OnInit, OnDestroy { if (this.isProjectBeingDeleted(uuid)) { return; } - + if (this.selectedProjects.includes(uuid)) { this.selectedProjects = this.selectedProjects.filter(id => id !== uuid); } else { @@ -174,7 +174,7 @@ export class ProjectListComponent implements OnInit, OnDestroy { this.selectedProjects = this.getSelectableProjects(); } } - + getSelectableProjects(): string[] { return this.projectsService.projects() .filter(project => !this.isProjectBeingDeleted(project.uuid)) @@ -187,16 +187,16 @@ export class ProjectListComponent implements OnInit, OnDestroy { deleteSelectedProjects(): void { if (this.selectedProjects.length === 0) return; - - const validSelectedProjects = this.selectedProjects.filter(uuid => - !this.isProjectBeingDeleted(uuid) && + + const validSelectedProjects = this.selectedProjects.filter(uuid => + !this.isProjectBeingDeleted(uuid) && this.projectsService.projects().some(p => p.uuid === uuid) ); - + this.selectedProjects = validSelectedProjects; - + if (this.selectedProjects.length === 0) return; - + this.isConfirmBulkDeleteOpen = true; } @@ -205,39 +205,47 @@ export class ProjectListComponent implements OnInit, OnDestroy { } confirmBulkDelete(): void { - const validSelectedProjects = this.selectedProjects.filter(uuid => - !this.isProjectBeingDeleted(uuid) && + const validSelectedProjects = this.selectedProjects.filter(uuid => + !this.isProjectBeingDeleted(uuid) && this.projectsService.projects().some(p => p.uuid === uuid) ); - + if (validSelectedProjects.length > 0) { this.executeDeleteProjects([...validSelectedProjects]); } - + this.closeBulkDeleteConfirmation(); } executeDeleteProjects(uuids: string[]): void { if (uuids.length === 0) return; - + this.isBulkDeleting = true; - + uuids.forEach(uuid => { this.deletingProjects.set(uuid, true); }); - - uuids.forEach(uuid => + + uuids.forEach(uuid => this.projectsService.deleteProject(uuid) ); - + this.selectedProjects = []; - + setTimeout(() => { uuids.forEach(uuid => { this.deletingProjects.delete(uuid); }); - + this.isBulkDeleting = false; }, 5000); } + + //mostrar descripción de proyecto + truncateText(text: string, maxLength: number = 17): string { + if (!text) return ''; + return text.length > maxLength + ? text.substring(0, maxLength) + '...' + : text; + } } diff --git a/src/app/services/projects/handlers/project-list.handler.ts b/src/app/services/projects/handlers/project-list.handler.ts index e1ff7fb..bf6c6f7 100644 --- a/src/app/services/projects/handlers/project-list.handler.ts +++ b/src/app/services/projects/handlers/project-list.handler.ts @@ -9,12 +9,21 @@ export function transformProjectsResponse(projectsData: any[]): ProjectList[] { // Each item is an object with a single key (the UUID) const uuid = Object.keys(projectItem)[0]; const projectData = projectItem[uuid]; + + //debug + /* + console.log('RAW projectData:', projectData); + console.log('RAW description:', projectData.description); + console.log('RAW CuemsScript.description:', projectData.CuemsScript?.description); + */ + return { uuid, name: projectData.name, + description: projectData.description ?? projectData.CuemsScript?.description, //añadir descripción normal o mapeada unix_name: projectData.unix_name, created: projectData.created, - modified: projectData.modified + modified: projectData.modified, }; }); } diff --git a/src/app/services/projects/project-edit-state.service.ts b/src/app/services/projects/project-edit-state.service.ts index 3e3c9d5..51f71f8 100644 --- a/src/app/services/projects/project-edit-state.service.ts +++ b/src/app/services/projects/project-edit-state.service.ts @@ -17,7 +17,7 @@ interface TemporaryCuesData { export class ProjectEditStateService { public hasUnsavedChanges = signal(false); - + private changesSubject = new BehaviorSubject(false); public changes$ = this.changesSubject.asObservable(); @@ -27,12 +27,12 @@ export class ProjectEditStateService { markComponentAsChanged(componentName: string, projectUuid: string, data?: any): void { const key = `${projectUuid}-${componentName}`; - + this.componentStates.set(key, { hasChanges: true, data: data || null }); - + this.updateGlobalState(); } @@ -65,14 +65,16 @@ export class ProjectEditStateService { getProjectModifiedData(projectUuid: string): any { const modifiedData: any = {}; - + this.componentStates.forEach((state, key) => { if (key.startsWith(`${projectUuid}-`) && state.hasChanges) { const componentName = key.substring(`${projectUuid}-`.length); modifiedData[componentName] = state.data; } }); - + + console.log('getProjectModifiedData', projectUuid, modifiedData); //debug + return modifiedData; } @@ -85,9 +87,9 @@ export class ProjectEditStateService { }); } }); - + this.clearTemporaryCues(projectUuid); - + this.updateGlobalState(); } @@ -108,7 +110,7 @@ export class ProjectEditStateService { break; } } - + this.hasUnsavedChanges.set(hasChanges); this.changesSubject.next(hasChanges); } @@ -126,13 +128,13 @@ export class ProjectEditStateService { keysToDelete.push(key); } }); - + keysToDelete.forEach(key => { this.componentStates.delete(key); }); - + this.clearTemporaryCues(projectUuid); - + this.updateGlobalState(); } @@ -164,4 +166,24 @@ export class ProjectEditStateService { }); } } -} \ No newline at end of file + + //método para project-edit.component.ts (guardar cambios de modificación de nombre y descripción) + setProjectMetadata( + projectUuid: string, + metadata: { name?: string; description?: string } + ): void { + const key = `${projectUuid}-metadata`; + + this.componentStates.set(key, { + hasChanges: true, + data: { + ...(this.componentStates.get(key)?.data || {}), + ...metadata + } + }); + + console.log('setProjectMetadata', key, this.componentStates.get(key)); //debug + + this.updateGlobalState(); + } +} diff --git a/src/app/services/projects/projects.service.ts b/src/app/services/projects/projects.service.ts index 5b1a1ef..422fd53 100644 --- a/src/app/services/projects/projects.service.ts +++ b/src/app/services/projects/projects.service.ts @@ -18,9 +18,11 @@ import { export interface ProjectList { uuid: string; name: string; + description?: string; unix_name: string; created: string; modified: string; + CuemsScript?: any; //define el comportamiento del proyecto } export type ProjectTemplate = Record; @@ -142,7 +144,7 @@ export class ProjectsService { public projectRestored = new EventEmitter(); public projectPermanentlyDeleted = new EventEmitter(); - + public projectSaved = new EventEmitter(); public projects = signal([]); @@ -168,7 +170,7 @@ export class ProjectsService { if (savedMappings) { try { const parsedMappings = JSON.parse(savedMappings); - + let mappingsToSet: InitialMappingsResponse; if (parsedMappings.type === 'initial_mappings') { mappingsToSet = parsedMappings; @@ -178,10 +180,10 @@ export class ProjectsService { value: parsedMappings }; } - + this.initialMappings.set(mappingsToSet); - - this.extractMappingOptions(mappingsToSet.value); + + this.extractMappingOptions(mappingsToSet.value); } catch (e) { console.error('ProjectsService constructor - error parsing mappings:', e); } @@ -201,10 +203,10 @@ export class ProjectsService { }, error: (err) => { console.error('ProjectsService - websocket error:', err); - this.errorEvent.emit({ - action: 'websocket_error', + this.errorEvent.emit({ + action: 'websocket_error', message: 'Error de conexión', - raw: err + raw: err }); } }); @@ -214,14 +216,14 @@ export class ProjectsService { .subscribe({ next: (error: WebSocketError) => { const projectActions = [ - 'project_new', 'project_save', 'project_delete', 'project_restore', - 'project_trash_delete', 'project_list', 'project_trash_list', + 'project_new', 'project_save', 'project_delete', 'project_restore', + 'project_trash_delete', 'project_list', 'project_trash_list', 'project_load', 'initial_template', 'initial_mappings' ]; - + if (error.action && projectActions.includes(error.action)) { this.errorEvent.emit(error); - + if (error.action === 'project_new') { this.notificationService.showError(error.message || 'Error al crear el proyecto'); this.newProjectCreated.emit(''); @@ -233,7 +235,7 @@ export class ProjectsService { } } }); - + } public handleWebsocketResponse(response: any): void { @@ -248,17 +250,17 @@ export class ProjectsService { if (response && response.type === 'initial_mappings' && (response.value || response)) { try { const mappingsData = response.value || response; - + const completeResponse: InitialMappingsResponse = { type: 'initial_mappings', value: mappingsData }; - + this.initialMappings.set(completeResponse); - + // Extract mapping options for the multiselect this.extractMappingOptions(mappingsData); - + localStorage.setItem('initial_mappings', JSON.stringify(completeResponse)); } catch (e) { console.error('Error processing initial mappings:', e); @@ -266,6 +268,7 @@ export class ProjectsService { } if (response && response.type === 'project_list' && Array.isArray(response.value)) { + console.log('BAckend project list: ', response.value); //debug para ver la lista de proyectos handleProjectListResponse(response.value, projects => this.projects.set(projects)); } @@ -276,16 +279,16 @@ export class ProjectsService { if (response && response.type === 'project_new' && response.value) { const projectUuid = response.value; - + this.notificationService.showSuccess('Proyecto creado exitosamente'); - + this.newProjectCreated.emit(projectUuid); - + this.router.navigate(['/projects', projectUuid, 'edit']).then(() => { }).catch(err => { }); - + this.getProjectList(); } @@ -304,45 +307,46 @@ export class ProjectsService { if (response && response.type === 'project_save' && response.value) { const projectUuid = response.value; - + this.notificationService.showSuccess('Proyecto actualizado exitosamente'); - + this.projectSaved.emit(projectUuid); - + this.getProjectList(); } if (response && response.type === 'project_delete' && response.value) { const projectUuid = response.value; - + this.notificationService.showSuccess('Proyecto movido a la papelera'); - + this.getProjectList(); this.getProjectTrashList(); } if (response && response.type === 'project_recover' && response.value) { const projectUuid = response.value; - + this.notificationService.showSuccess('Proyecto restaurado exitosamente'); - + this.projectRestored.emit(projectUuid); - + this.getProjectList(); this.getProjectTrashList(); } if (response && response.type === 'project_trash_delete' && response.value) { const projectUuid = response.value; - + this.notificationService.showSuccess('Proyecto eliminado permanentemente'); - + this.projectPermanentlyDeleted.emit(projectUuid); - + this.getProjectTrashList(); } if (response && response.type === 'project' && response.value) { + console.log('Backend project data received: ', response.value); //debug para ver que info llega del backend sobre el proyecto this.projectLoaded.emit(response.value); } @@ -363,9 +367,9 @@ export class ProjectsService { message: response.value || 'Error desconocido', raw: response }; - + this.errorEvent.emit(error); - + if (error.action === 'project_new') { this.notificationService.showError(error.message || 'Error al crear el proyecto'); this.newProjectCreated.emit(''); @@ -391,13 +395,13 @@ export class ProjectsService { }); } - createProject(projectData: CreateProjectParams): void { + createProject(projectData: CreateProjectParams): void { if (!this.projectTemplate()) { this.notificationService.showError('Error: No hay template disponible'); - this.errorEvent.emit({ - action: 'project_new', + this.errorEvent.emit({ + action: 'project_new', message: 'No hay template disponible', - raw: null + raw: null }); this.newProjectCreated.emit(''); return; @@ -405,10 +409,10 @@ export class ProjectsService { if (!this.initialMappings() || !this.mappingOptions() || this.mappingOptions().length === 0) { this.notificationService.showError('Error: No hay mappings disponibles'); - this.errorEvent.emit({ - action: 'project_new', + this.errorEvent.emit({ + action: 'project_new', message: 'No hay mappings disponibles', - raw: null + raw: null }); this.newProjectCreated.emit(''); return; @@ -472,7 +476,7 @@ export class ProjectsService { } } - updateProject(projectData: any): void { + updateProject(projectData: any): void { this.wsService.ws.next({ action: 'project_save', value: projectData @@ -495,7 +499,7 @@ export class ProjectsService { */ private extractMappingOptions(mappingsData: any): void { const mappingOptions: InitialMapping[] = []; - + if (mappingsData.nodes && Array.isArray(mappingsData.nodes)) { mappingsData.nodes.forEach((nodeData: any, index: number) => { const nodeUuid = nodeData.node.uuid; @@ -517,7 +521,7 @@ export class ProjectsService { } }); } - + if (nodeData.node.video && Array.isArray(nodeData.node.video)) { nodeData.node.video.forEach((videoGroup: any) => { if (videoGroup.outputs && Array.isArray(videoGroup.outputs)) { @@ -536,7 +540,7 @@ export class ProjectsService { } }); } - + this.mappingOptions.set(mappingOptions); } @@ -551,18 +555,18 @@ export class ProjectsService { if (!outputString || typeof outputString !== 'string') { return null; } - + // Search for the pattern: 36 characters (uuidv4) + "_" + rest const uuidPattern = /^([a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12})_(.+)$/; const match = outputString.match(uuidPattern); - + if (match) { return { uuid: match[1], name: match[2] }; } - + console.warn('Could not parse output string:', outputString); return null; } @@ -575,7 +579,7 @@ export class ProjectsService { if (!mappingsResponse?.value?.nodes) { return null; } - + const nodeIndex = mappingsResponse.value.nodes.findIndex((nodeData: any) => nodeData.node.uuid === nodeUuid); return nodeIndex !== -1 ? nodeIndex + 1 : null; // +1 to start from node1 } @@ -588,12 +592,12 @@ export class ProjectsService { if (!parsedOutput) { return outputString; // Fallback to the original string } - + const nodeNumber = this.getNodeNumberByUuid(parsedOutput.uuid); if (nodeNumber) { return `node${nodeNumber}:${parsedOutput.name}`; } - + return outputString; // Fallback to the original string } @@ -605,13 +609,13 @@ export class ProjectsService { if (!mappingsResponse?.value?.nodes) { return null; } - + const node = mappingsResponse.value.nodes.find((nodeData: any) => nodeData.node.uuid === uuid); if (!node) { console.warn('Node not found for UUID:', uuid); return null; } - + if (node.node.audio && Array.isArray(node.node.audio)) { for (const audioGroup of node.node.audio) { if (audioGroup.outputs && Array.isArray(audioGroup.outputs)) { @@ -623,7 +627,7 @@ export class ProjectsService { } } } - + if (node.node.video && Array.isArray(node.node.video)) { for (const videoGroup of node.node.video) { if (videoGroup.outputs && Array.isArray(videoGroup.outputs)) { @@ -635,7 +639,7 @@ export class ProjectsService { } } } - + console.warn('Output not found for UUID:', uuid, 'and name:', name); return null; } diff --git a/src/assets/i18n/ca.json b/src/assets/i18n/ca.json index bd310e6..84859ef 100644 --- a/src/assets/i18n/ca.json +++ b/src/assets/i18n/ca.json @@ -116,6 +116,7 @@ "project.list.no.projects.available.description": "Crea el teu primer projecte o fes click en actualitzar per carregar els projectes existents.", "project.list.new.project": "Nou projecte", "project.list.name": "Nom", + "project.list.description": "Descripció", "project.list.unix_name": "Unix_name", "project.list.created": "Creat", "project.list.modified": "Modificat", diff --git a/src/assets/i18n/en.json b/src/assets/i18n/en.json index e7879f6..0696627 100644 --- a/src/assets/i18n/en.json +++ b/src/assets/i18n/en.json @@ -115,6 +115,7 @@ "project.list.no.projects.available.description": "Create your first project or click refresh to load existing projects.", "project.list.new.project": "New project", "project.list.name": "Name", + "project.list.description": "Description", "project.list.unix_name": "Unix_name", "project.list.created": "Created", "project.list.modified": "Modified", @@ -252,6 +253,6 @@ "nodes.settings.confirm": "Confirm", "nodes.settings.cancel": "Cancel", "footer.powered.text": "Powered", - "footer.promoted.text": "Promoted", + "footer.promoted.text": "Promoted", "footer.financed.text": "Financed" } diff --git a/src/assets/i18n/es.json b/src/assets/i18n/es.json index 37a20a8..fb6aea6 100644 --- a/src/assets/i18n/es.json +++ b/src/assets/i18n/es.json @@ -112,9 +112,10 @@ "project.list.upload.new.files": "Subir nuevos archivos", "project.list.cancel": "Cancelar", "project.list.no.projects.available": "No hay proyectos disponibles.", - "project.list.no.projects.available.description": "Crea tu primer proyecto o haz click en actualizar para cargar los proyectos existentes.", + "project.list.no.projects.available.description": "Crea tu primer proyecto o haz click en actualizar para cargar los proyectos existentes.", "project.list.new.project": "Nuevo proyecto", "project.list.name": "Nombre", + "project.list.description": "Descripción", "project.list.unix_name": "Unix_name", "project.list.created": "Creado", "project.list.modified": "Modificado",