204 lines
7.1 KiB
Diff
204 lines
7.1 KiB
Diff
diff --git a/src/pages/process/process.ts b/src/pages/process/process.ts
|
|
index 27c1301..a4f8943 100755
|
|
--- a/src/pages/process/process.ts
|
|
+++ b/src/pages/process/process.ts
|
|
@@ -2,9 +2,15 @@ import { addSubscription } from '../../utils/subscription.utils';
|
|
import Services from '../../services/service';
|
|
import { getCorrectDOM } from '~/utils/html.utils';
|
|
import { Process } from 'pkg/sdk_client';
|
|
+import chatStyle from '../../../public/style/chat.css?inline';
|
|
+import { Database } from '../../services/database.service';
|
|
+
|
|
+let myProcesses = new Set();
|
|
+let allProcesses = new Set();
|
|
|
|
// Initialize function, create initial tokens with itens that are already selected by the user
|
|
export async function init() {
|
|
+
|
|
const container = getCorrectDOM('process-list-4nk-component') as HTMLElement;
|
|
const element = container.querySelector('select') as HTMLSelectElement;
|
|
// Create div that wroaps all the elements inside (select, elements selected, search div) to put select inside
|
|
@@ -43,6 +49,23 @@ export async function init() {
|
|
wrapper.appendChild(search_div);
|
|
|
|
addPlaceholder(wrapper);
|
|
+
|
|
+ await loadAllProcesses();
|
|
+
|
|
+ const database = await Database.getInstance();
|
|
+
|
|
+ try {
|
|
+ await database.updateMyProcesses({ myProcessesId: Array.from(myProcesses) });
|
|
+ const updateProcesses = await database.updateMyProcesses({ myProcessesId: Array.from(myProcesses) });
|
|
+ console.log("UPDATE PROCESSES d'INIT: ", updateProcesses);
|
|
+ } catch (error) {
|
|
+ console.error("Error updating my processes:", error);
|
|
+ }
|
|
+
|
|
+
|
|
+
|
|
+
|
|
+
|
|
}
|
|
|
|
function removePlaceholder(wrapper: HTMLElement) {
|
|
@@ -155,62 +178,39 @@ function clearAutocompleteList(select: HTMLSelectElement) {
|
|
if (autocomplete_list) autocomplete_list.innerHTML = '';
|
|
}
|
|
|
|
-// Populate the autocomplete list following a given query from the user
|
|
-function populateAutocompleteList(select: HTMLSelectElement, query: string, dropdown = false) {
|
|
+async function populateAutocompleteList(select: HTMLSelectElement, query: string, dropdown = false) {
|
|
const { autocomplete_options } = getOptions(select);
|
|
|
|
- let options_to_show;
|
|
+ let options_to_show = [];
|
|
|
|
- if (dropdown) {
|
|
- let messagingCounter = 1;
|
|
- const messagingOptions = select.querySelectorAll('option[value="messaging"]');
|
|
-
|
|
- options_to_show = autocomplete_options.map(option => {
|
|
- if (option === 'messaging') {
|
|
- // Récupérer l'élément option correspondant au compteur actuel
|
|
- const currentOption = messagingOptions[messagingCounter - 1];
|
|
- const processId = currentOption?.getAttribute('data-process-id');
|
|
- console.log(`Mapping messaging ${messagingCounter} with processId:`, processId);
|
|
-
|
|
- const optionText = `messaging ${messagingCounter}`;
|
|
- messagingCounter++;
|
|
-
|
|
- // Stocker le processId dans un attribut data sur le select
|
|
- select.setAttribute(`data-messaging-id-${messagingCounter - 1}`, processId || '');
|
|
-
|
|
- return optionText;
|
|
- }
|
|
- return option;
|
|
- });
|
|
- } else {
|
|
- options_to_show = autocomplete(query, autocomplete_options);
|
|
- }
|
|
+ console.log(myProcesses);
|
|
+
|
|
+ const mineArray = Array.from(myProcesses);
|
|
+ const allArray = Array.from(allProcesses).filter(id => !myProcesses.has(id));
|
|
|
|
const wrapper = select.parentNode;
|
|
const input_search = wrapper?.querySelector('.search-container');
|
|
const autocomplete_list = wrapper?.querySelector('.autocomplete-list');
|
|
if (autocomplete_list) autocomplete_list.innerHTML = '';
|
|
- const result_size = options_to_show.length;
|
|
|
|
- if (result_size == 1) {
|
|
+ const addProcessToList = (processId:string, isMine: boolean) => {
|
|
const li = document.createElement('li');
|
|
- li.innerText = options_to_show[0];
|
|
- li.setAttribute('data-value', options_to_show[0]);
|
|
+ li.innerText = processId;
|
|
+ li.setAttribute("data-value", processId);
|
|
+
|
|
+ if (isMine) {
|
|
+ li.classList.add("my-process");
|
|
+ li.style.cssText = `color: var(--accent-color)`;
|
|
+ }
|
|
+
|
|
if (li) addSubscription(li, 'click', selectOption);
|
|
autocomplete_list?.appendChild(li);
|
|
- if (query.length == options_to_show[0].length) {
|
|
- const event = new Event('click');
|
|
- li.dispatchEvent(event);
|
|
- }
|
|
- } else if (result_size > 1) {
|
|
- for (let i = 0; i < result_size; i++) {
|
|
- const li = document.createElement('li');
|
|
- li.innerText = options_to_show[i];
|
|
- li.setAttribute('data-value', options_to_show[i]);
|
|
- if (li) addSubscription(li, 'click', selectOption);
|
|
- autocomplete_list?.appendChild(li);
|
|
- }
|
|
- } else {
|
|
+ };
|
|
+
|
|
+ mineArray.forEach(processId => addProcessToList(processId, true));
|
|
+ allArray.forEach(processId => addProcessToList(processId, false));
|
|
+
|
|
+ if (myProcesses.size === 0 && allProcesses.size === 0) {
|
|
const li = document.createElement('li');
|
|
li.classList.add('not-cursor');
|
|
li.innerText = 'No options found';
|
|
@@ -392,6 +392,20 @@ addSubscription(document, 'click', () => {
|
|
}
|
|
});
|
|
|
|
+async function loadAllProcesses() {
|
|
+ try {
|
|
+ const [allProcessesNew, myProcessesNew] = await Promise.all([
|
|
+ getProcesses(),
|
|
+ getMyProcesses()
|
|
+ ]);
|
|
+
|
|
+ myProcesses = myProcesses.union(myProcessesNew);
|
|
+ allProcesses = allProcesses.union(allProcessesNew);
|
|
+ } catch (error) {
|
|
+ console.error("Error loading processes:", error);
|
|
+ }
|
|
+}
|
|
+
|
|
async function showSelectedProcess(elem: MouseEvent) {
|
|
const container = getCorrectDOM('process-list-4nk-component') as HTMLElement;
|
|
|
|
@@ -539,43 +553,36 @@ async function getDescription(processId: string, process: Process): Promise<stri
|
|
return null;
|
|
}
|
|
|
|
-async function getProcesses(): Promise<any[]> {
|
|
+async function getProcesses(): Promise<Set<string>> {
|
|
const service = await Services.getInstance();
|
|
const processes = await service.getProcesses();
|
|
+ const processIds = new Set<string>(Object.keys(processes));
|
|
|
|
- const res = Object.entries(processes).map(([key, value]) => ({
|
|
- key,
|
|
- value,
|
|
- }));
|
|
-
|
|
- return res;
|
|
+ return processIds;
|
|
}
|
|
|
|
-async function getMyProcesses() {
|
|
+async function getMyProcesses(): Promise<Set<string>> {
|
|
const service = await Services.getInstance();
|
|
try {
|
|
const processes = await service.getProcesses();
|
|
- const userProcessSet = new Set();
|
|
-
|
|
+ const userProcessSet = new Set<string>();
|
|
+
|
|
for (const [processId, process] of Object.entries(processes)) {
|
|
let roles;
|
|
try {
|
|
- roles = await this.getRoles(process);
|
|
+ roles = await service.getRoles(process);
|
|
if (!roles) {
|
|
roles = await process.states[0].encrypted_pcd.roles;
|
|
}
|
|
+ console.log("ROLES: ", roles);
|
|
+
|
|
+ const hasCurrentUser = service.rolesContainsUs(roles);
|
|
|
|
- const hasCurrentUser = Object.values(roles).some(role =>
|
|
- service.rolesContainsUs(role)
|
|
- );
|
|
-
|
|
if (hasCurrentUser) {
|
|
userProcessSet.add(processId);
|
|
}
|
|
-
|
|
} catch (e) {
|
|
continue;
|
|
- console.error(`Error processing process ${processId}:`, e);
|
|
}
|
|
}
|
|
|