complexqa_frontend_core 1.23.1 → 1.24.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (32) hide show
  1. package/package.json +1 -1
  2. package/publish/api/index.js +8 -0
  3. package/publish/api/tag/tag_color_api.js +16 -0
  4. package/publish/api/tag/tag_template_api.js +16 -0
  5. package/publish/api/tag_api.js +52 -0
  6. package/publish/api/tag_relation_api.js +57 -0
  7. package/publish/app_configuration/table/helpers/table_element_models.js +4 -0
  8. package/publish/app_configuration/table/sections/bug.js +7 -1
  9. package/publish/app_configuration/table/sections/tag.js +84 -0
  10. package/publish/app_configuration/table/sections/tag_relation.js +309 -0
  11. package/publish/app_configuration/table/sections/test_account.js +7 -1
  12. package/publish/app_configuration/table/sections/test_case.js +7 -1
  13. package/publish/app_configuration/table/sections/test_run.js +7 -1
  14. package/publish/app_configuration/table/sections/test_run_result.js +7 -1
  15. package/publish/app_configuration/table/sections/text_document.js +7 -1
  16. package/publish/app_configuration/table/table_configuration.js +4 -0
  17. package/publish/index.js +2 -0
  18. package/publish/types/core/1_familyTestDocumentation.js +9 -1
  19. package/publish/types/element_translate/typeBug.i18n.js +11 -0
  20. package/publish/types/element_translate/typeTag.i18n.js +69 -0
  21. package/publish/types/element_translate/typeTagRelation.i18n.js +74 -0
  22. package/publish/types/element_translate/typeTestAccount.i18n.js +11 -0
  23. package/publish/types/element_translate/typeTestCase.i18n.js +11 -0
  24. package/publish/types/element_translate/typeTestRun.i18n.js +11 -0
  25. package/publish/types/element_translate/typeTestRunResult.i18n.js +11 -0
  26. package/publish/types/element_translate/typeTextDocument.i18n.js +11 -0
  27. package/publish/types/family_elements/typeBug.js +0 -2
  28. package/publish/types/family_elements/typeTag.js +84 -0
  29. package/publish/types/family_elements/typeTestAccount.js +2 -0
  30. package/publish/types/family_events/familyEvent.js +2 -0
  31. package/publish/types/family_files/typeTextDocument.js +2 -0
  32. package/publish/types/family_relation/typeTagRelation.js +123 -0
@@ -12,6 +12,7 @@ export const typeTestRunResult_i18n = {
12
12
  test_result_status : 'Status',
13
13
  test_result_description: 'Description',
14
14
  assigned_to : 'Assigned to',
15
+ tags : 'Tags',
15
16
  project_id : 'Project',
16
17
  created_at : 'Created at',
17
18
  updated_at : 'Updated at',
@@ -24,6 +25,7 @@ export const typeTestRunResult_i18n = {
24
25
  test_result_status : 'Статус',
25
26
  test_result_description: 'Описание',
26
27
  assigned_to : 'Назначен',
28
+ tags : 'Теги',
27
29
  project_id : 'Проект',
28
30
  created_at : 'Создано',
29
31
  updated_at : 'Обновлено',
@@ -36,6 +38,7 @@ export const typeTestRunResult_i18n = {
36
38
  test_result_status : 'Status',
37
39
  test_result_description: 'Beschreibung',
38
40
  assigned_to : 'Zugewiesen an',
41
+ tags : 'Tags',
39
42
  project_id : 'Projekt',
40
43
  created_at : 'Erstellt am',
41
44
  updated_at : 'Geändert am',
@@ -48,6 +51,7 @@ export const typeTestRunResult_i18n = {
48
51
  test_result_status : 'الحالة',
49
52
  test_result_description: 'الوصف',
50
53
  assigned_to : 'مُسند إلى',
54
+ tags : 'الوسوم',
51
55
  project_id : 'المشروع',
52
56
  created_at : 'تاريخ الإنشاء',
53
57
  updated_at : 'تاريخ التحديث',
@@ -60,6 +64,7 @@ export const typeTestRunResult_i18n = {
60
64
  test_result_status : 'Estado',
61
65
  test_result_description: 'Descripción',
62
66
  assigned_to : 'Asignado a',
67
+ tags : 'Etiquetas',
63
68
  project_id : 'Proyecto',
64
69
  created_at : 'Creado el',
65
70
  updated_at : 'Actualizado el',
@@ -72,6 +77,7 @@ export const typeTestRunResult_i18n = {
72
77
  test_result_status : 'Statut',
73
78
  test_result_description: 'Description',
74
79
  assigned_to : 'Assigné à',
80
+ tags : 'Tags',
75
81
  project_id : 'Projet',
76
82
  created_at : 'Créé le',
77
83
  updated_at : 'Modifié le',
@@ -84,6 +90,7 @@ export const typeTestRunResult_i18n = {
84
90
  test_result_status : 'Կարգավիճակ',
85
91
  test_result_description: 'Նկարագրություն',
86
92
  assigned_to : 'Նշանակված',
93
+ tags : 'Պիտակներ',
87
94
  project_id : 'Նախագիծ',
88
95
  created_at : 'Ստեղծված',
89
96
  updated_at : 'Թարմացված',
@@ -96,6 +103,7 @@ export const typeTestRunResult_i18n = {
96
103
  test_result_status : 'Stato',
97
104
  test_result_description: 'Descrizione',
98
105
  assigned_to : 'Assegnato a',
106
+ tags : 'Tag',
99
107
  project_id : 'Progetto',
100
108
  created_at : 'Creato il',
101
109
  updated_at : 'Aggiornato il',
@@ -108,6 +116,7 @@ export const typeTestRunResult_i18n = {
108
116
  test_result_status : 'Status',
109
117
  test_result_description: 'Opis',
110
118
  assigned_to : 'Przypisany do',
119
+ tags : 'Tagi',
111
120
  project_id : 'Projekt',
112
121
  created_at : 'Utworzono',
113
122
  updated_at : 'Zaktualizowano',
@@ -120,6 +129,7 @@ export const typeTestRunResult_i18n = {
120
129
  test_result_status : 'Estado',
121
130
  test_result_description: 'Descrição',
122
131
  assigned_to : 'Atribuído a',
132
+ tags : 'Tags',
123
133
  project_id : 'Projeto',
124
134
  created_at : 'Criado em',
125
135
  updated_at : 'Atualizado em',
@@ -132,6 +142,7 @@ export const typeTestRunResult_i18n = {
132
142
  test_result_status : 'Статус',
133
143
  test_result_description: 'Тасвирлау',
134
144
  assigned_to : 'Билгеләнгән',
145
+ tags : 'Теглар',
135
146
  project_id : 'Проект',
136
147
  created_at : 'Ясалган',
137
148
  updated_at : 'Яңартылган',
@@ -11,6 +11,7 @@ export const typeTextDocument_i18n = {
11
11
  team_id : 'Team',
12
12
  text_document_folder_id: 'Folder',
13
13
  text_document_title : 'Title',
14
+ tags : 'Tags',
14
15
  text_document_status : 'Status',
15
16
  file_uuid : 'File',
16
17
  created_by_user_id : 'Author',
@@ -23,6 +24,7 @@ export const typeTextDocument_i18n = {
23
24
  team_id : 'Команда',
24
25
  text_document_folder_id: 'Папка',
25
26
  text_document_title : 'Название',
27
+ tags : 'Теги',
26
28
  text_document_status : 'Статус',
27
29
  file_uuid : 'Файл',
28
30
  created_by_user_id : 'Автор',
@@ -35,6 +37,7 @@ export const typeTextDocument_i18n = {
35
37
  team_id : 'Team',
36
38
  text_document_folder_id: 'Ordner',
37
39
  text_document_title : 'Titel',
40
+ tags : 'Tags',
38
41
  text_document_status : 'Status',
39
42
  file_uuid : 'Datei',
40
43
  created_by_user_id : 'Autor',
@@ -47,6 +50,7 @@ export const typeTextDocument_i18n = {
47
50
  team_id : 'الفريق',
48
51
  text_document_folder_id: 'المجلد',
49
52
  text_document_title : 'العنوان',
53
+ tags : 'الوسوم',
50
54
  text_document_status : 'الحالة',
51
55
  file_uuid : 'الملف',
52
56
  created_by_user_id : 'المؤلف',
@@ -59,6 +63,7 @@ export const typeTextDocument_i18n = {
59
63
  team_id : 'Equipo',
60
64
  text_document_folder_id: 'Carpeta',
61
65
  text_document_title : 'Título',
66
+ tags : 'Etiquetas',
62
67
  text_document_status : 'Estado',
63
68
  file_uuid : 'Archivo',
64
69
  created_by_user_id : 'Autor',
@@ -71,6 +76,7 @@ export const typeTextDocument_i18n = {
71
76
  team_id : 'Équipe',
72
77
  text_document_folder_id: 'Dossier',
73
78
  text_document_title : 'Titre',
79
+ tags : 'Tags',
74
80
  text_document_status : 'Statut',
75
81
  file_uuid : 'Fichier',
76
82
  created_by_user_id : 'Auteur',
@@ -83,6 +89,7 @@ export const typeTextDocument_i18n = {
83
89
  team_id : 'Թիմ',
84
90
  text_document_folder_id: 'Թղթապանակ',
85
91
  text_document_title : 'Վերնագիր',
92
+ tags : 'Պիտակներ',
86
93
  text_document_status : 'Կարգավիճակ',
87
94
  file_uuid : 'Ֆայլ',
88
95
  created_by_user_id : 'Հեղինակ',
@@ -95,6 +102,7 @@ export const typeTextDocument_i18n = {
95
102
  team_id : 'Team',
96
103
  text_document_folder_id: 'Cartella',
97
104
  text_document_title : 'Titolo',
105
+ tags : 'Tag',
98
106
  text_document_status : 'Stato',
99
107
  file_uuid : 'File',
100
108
  created_by_user_id : 'Autore',
@@ -107,6 +115,7 @@ export const typeTextDocument_i18n = {
107
115
  team_id : 'Zespół',
108
116
  text_document_folder_id: 'Folder',
109
117
  text_document_title : 'Tytuł',
118
+ tags : 'Tagi',
110
119
  text_document_status : 'Status',
111
120
  file_uuid : 'Plik',
112
121
  created_by_user_id : 'Autor',
@@ -119,6 +128,7 @@ export const typeTextDocument_i18n = {
119
128
  team_id : 'Equipa',
120
129
  text_document_folder_id: 'Pasta',
121
130
  text_document_title : 'Título',
131
+ tags : 'Tags',
122
132
  text_document_status : 'Estado',
123
133
  file_uuid : 'Ficheiro',
124
134
  created_by_user_id : 'Autor',
@@ -131,6 +141,7 @@ export const typeTextDocument_i18n = {
131
141
  team_id : 'Команд',
132
142
  text_document_folder_id: 'Папка',
133
143
  text_document_title : 'Исем',
144
+ tags : 'Теглар',
134
145
  text_document_status : 'Статус',
135
146
  file_uuid : 'Файл',
136
147
  created_by_user_id : 'Автор',
@@ -54,8 +54,6 @@ export class typeBug extends familyTestDocumentation
54
54
  // related_bug_ids; // pseudo — Bugzilla depends_on / blocks (many-to-many) в развитие
55
55
  duplicate_of_id; // Jira/GitHub Duplicate
56
56
 
57
- // bug_labels; // штука хорошая, но в развитие
58
-
59
57
  created_at;
60
58
  updated_at;
61
59
  completed_at; // resolved / closed (YouTrack resolved, GitHub closed_at)
@@ -0,0 +1,84 @@
1
+ import { familyTestDocumentation } from "../core/1_familyTestDocumentation.js";
2
+ import { is_object } from "../../utils/utils.js";
3
+ import _ from 'underscore';
4
+ import { typeTag_i18n } from "../element_translate/typeTag.i18n.js";
5
+
6
+ /**
7
+ * Project-scoped tag catalog entry.
8
+ *
9
+ * @see docs/Tags/tag-docs.MD
10
+ *
11
+ * @version v.0.1 (12/08/2026)
12
+ */
13
+ export class typeTag extends familyTestDocumentation
14
+ {
15
+ tag_id;
16
+ team_id;
17
+ project_id;
18
+ name;
19
+ description;
20
+ tag_color_id;
21
+ created_at;
22
+ updated_at;
23
+
24
+ primary_key = 'tag_id';
25
+ api_key = 'tag';
26
+
27
+ structure_scheme = {
28
+ tag_id : 'integer | require',
29
+ project_id : 'integer | require',
30
+ team_id : 'integer | require',
31
+ name : 'string | require',
32
+ description : 'string | StringHtml | optional',
33
+ tag_color_id: 'integer | require',
34
+ created_at : 'timestamp | optional',
35
+ updated_at : 'timestamp | optional',
36
+ };
37
+
38
+ create_scheme = [
39
+ 'project_id',
40
+ 'name',
41
+ 'tag_color_id',
42
+ ];
43
+
44
+ attribute_name_translate_matrix = typeTag_i18n.attribute_name_translate_matrix;
45
+
46
+
47
+ /**
48
+ * @param {object|false|undefined} data
49
+ * @returns {typeTag}
50
+ */
51
+ constructor(data = false)
52
+ {
53
+ super();
54
+
55
+ if (data && is_object(data))
56
+ {
57
+ _.mapObject(data, (value, key) =>
58
+ {
59
+ if (this.hasOwnProperty(key))
60
+ {
61
+ this[ key ] = value;
62
+ }
63
+ });
64
+ }
65
+
66
+ return this;
67
+ }
68
+
69
+
70
+ /**
71
+ * Hex from hydrated tag_color_id object, or null.
72
+ *
73
+ * @returns {string|null}
74
+ */
75
+ get_color_hex()
76
+ {
77
+ if (this.tag_color_id && typeof this.tag_color_id === 'object' && this.tag_color_id.hex)
78
+ {
79
+ return this.tag_color_id.hex;
80
+ }
81
+
82
+ return null;
83
+ }
84
+ }
@@ -17,6 +17,8 @@ export class typeTestAccount extends familyGeneralElement
17
17
  login;
18
18
  password;
19
19
  test_account_description;
20
+ /** Hydrated via search options.add: ['tags'] */
21
+ tags;
20
22
  created_at;
21
23
  updated_at;
22
24
 
@@ -58,6 +58,8 @@ export class familyEvent extends familyGeneralElement
58
58
  'task',
59
59
  'bug',
60
60
  'bug_relation',
61
+ 'tag',
62
+ 'tag_relation',
61
63
  'test_account',
62
64
  'user_profile',
63
65
  'text_document',
@@ -19,6 +19,8 @@ export class typeTextDocument extends familyGeneralElement
19
19
  text_document_status;
20
20
  file_uuid;
21
21
  created_by_user_id;
22
+ /** Hydrated via search options.add: ['tags'] */
23
+ tags;
22
24
  created_at;
23
25
  updated_at;
24
26
 
@@ -0,0 +1,123 @@
1
+ import { is_object } from '../../utils/utils.js';
2
+ import _ from 'underscore';
3
+ import { familyRelation } from '../core/1_familyRelation.js';
4
+ import { typeTagRelation_i18n } from '../element_translate/typeTagRelation.i18n.js';
5
+
6
+ /**
7
+ * Связь tag с элементом проекта (полиморфная junction).
8
+ *
9
+ * @see docs/Tags/tag-relation-docs.MD
10
+ *
11
+ * @version v.0.1 (12/08/2026)
12
+ */
13
+ export class typeTagRelation extends familyRelation
14
+ {
15
+ tag_relation_id;
16
+ tag_id;
17
+ element_type;
18
+ element_id;
19
+
20
+ source_key = 'tag_id';
21
+ target_key = 'element_id';
22
+ relation_type_key = 'element_type';
23
+
24
+ primary_key = 'tag_relation_id';
25
+ api_key = 'tag_relation';
26
+
27
+ static relation_target_map = {
28
+ test_suite_id : { type_token: 'typeTestSuite', primary_key: 'test_suite_id', api_key: 'test_suite' },
29
+ test_case_id : { type_token: 'typeTestCase', primary_key: 'test_case_id', api_key: 'test_case' },
30
+ test_run_id : { type_token: 'typeTestRun', primary_key: 'test_run_id', api_key: 'test_run' },
31
+ test_run_result_id : {
32
+ type_token : 'typeTestRunResult',
33
+ primary_key: 'test_run_result_id',
34
+ api_key : 'test_run_result',
35
+ },
36
+ test_account_id : {
37
+ type_token : 'typeTestAccount',
38
+ primary_key: 'test_account_id',
39
+ api_key : 'test_account',
40
+ },
41
+ bug_id : { type_token: 'typeBug', primary_key: 'bug_id', api_key: 'bug' },
42
+ text_document_id : {
43
+ type_token : 'typeTextDocument',
44
+ primary_key: 'text_document_id',
45
+ api_key : 'text_document',
46
+ },
47
+ text_document_folder_id: {
48
+ type_token : 'typeTextDocumentFolder',
49
+ primary_key: 'text_document_folder_id',
50
+ api_key : 'text_document_folder',
51
+ },
52
+ execution_context_id : {
53
+ type_token : 'typeExecutionContext',
54
+ primary_key: 'execution_context_id',
55
+ api_key : 'execution_context',
56
+ },
57
+ };
58
+
59
+ structure_scheme = {
60
+ tag_relation_id: 'integer | require',
61
+ tag_id : 'integer | typeTag | require',
62
+ element_type : 'string | enum | require',
63
+ element_id : 'integer | require',
64
+ };
65
+
66
+ create_scheme = [
67
+ 'tag_id',
68
+ 'element_type',
69
+ 'element_id',
70
+ ];
71
+
72
+ available_enum_values = {
73
+ element_type: typeTagRelation.get_relation_type_values(),
74
+ };
75
+
76
+ enum_value_translate_matrix = typeTagRelation_i18n.enum_value_translate_matrix;
77
+
78
+ attribute_name_translate_matrix = typeTagRelation_i18n.attribute_name_translate_matrix;
79
+
80
+
81
+ static get_relation_type_values()
82
+ {
83
+ return Object.keys(typeTagRelation.relation_target_map);
84
+ }
85
+
86
+
87
+ static get_relation_target_map()
88
+ {
89
+ return typeTagRelation.relation_target_map;
90
+ }
91
+
92
+
93
+ /**
94
+ * @param {object|false|undefined} data
95
+ * @returns {typeTagRelation}
96
+ */
97
+ constructor(data = false)
98
+ {
99
+ super();
100
+
101
+ if (data && is_object(data))
102
+ {
103
+ _.mapObject(data, (value, key) =>
104
+ {
105
+ if (this.hasOwnProperty(key))
106
+ {
107
+ this[ key ] = value;
108
+ }
109
+ });
110
+ }
111
+
112
+ return this;
113
+ }
114
+
115
+
116
+ /**
117
+ * @returns {object|false}
118
+ */
119
+ get_relation_target_meta()
120
+ {
121
+ return typeTagRelation.resolve_relation_target(this.element_type);
122
+ }
123
+ }