Files
worklenz/worklenz-backend/src/socket.io/commands/on-create-label.ts

63 lines
1.8 KiB
TypeScript

import {Server, Socket} from "socket.io";
import db from "../../config/db";
import WorklenzControllerBase from "../../controllers/worklenz-controller-base";
import {getRandomColorCode} from "../../shared/utils";
import {SocketEvents} from "../events";
import {log_error} from "../util";
import {logLabelsUpdate} from "../../services/activity-logs/activity-logs.service";
export async function on_create_label(_io: Server, socket: Socket, data?: string) {
try {
const body = JSON.parse(data as string);
if (body.label?.length > 30) return;
body.color = getRandomColorCode();
const q = `SELECT assign_or_create_label($1, $2, $3, $4) AS label;`;
const result = await db.query(q, [body.team_id, body.task_id, body.label, body.color]);
const [d] = result.rows;
const labelId = d.label?.id;
if (labelId) {
const q2 = `
SELECT task_labels.label_id AS id,
(SELECT name FROM team_labels WHERE id = task_labels.label_id) AS name,
(SELECT color_code FROM team_labels WHERE id = task_labels.label_id)
FROM task_labels
WHERE task_id = $1
ORDER BY name
`;
const result2 = await db.query(q2, [body.task_id]);
const labels = WorklenzControllerBase.createTagList(result2.rows, 2);
const newLabel = {
id: labelId,
selected: true,
color_code: body.color,
name: body.label.trim()
};
socket.emit(SocketEvents.CREATE_LABEL.toString(), {
id: body.task_id,
parent_task: body.parent_task,
new_label: newLabel,
is_new: !!d.label?.is_new,
all_labels: result2.rows,
labels
});
logLabelsUpdate({
task_id: body.task_id,
socket,
new_value: labelId,
old_value: null
});
}
} catch (error) {
log_error(error);
}
}