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 }}
+
+
+
+
+
+
-
+
-
\ 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",
|