useTrackColor.ts 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. import type { SpecialTag, Track } from "@/types";
  2. export default function useTrackColor() {
  3. const colors = ["red", "blue", "green"];
  4. const colorMap: Record<number, Record<number, string>> = {};
  5. function addTrackColorAttr(tList: Track[], groupNumber: number): Track[] {
  6. let userIds: (number | undefined)[] = tList
  7. .map((v) => v.userId)
  8. .filter((x) => !!x);
  9. userIds = Array.from(new Set(userIds));
  10. const isByMultMark = userIds.length > 1;
  11. tList = tList.map((item) => {
  12. const uid = item.userId;
  13. if (item.headerMarkScore) {
  14. item.color = "green";
  15. } else {
  16. if (!colorMap[groupNumber]) colorMap[groupNumber] = {};
  17. if (!colorMap[groupNumber][uid]) {
  18. colorMap[groupNumber][uid] =
  19. colors[Object.keys(colorMap[groupNumber]).length] || "green";
  20. }
  21. item.color = colorMap[groupNumber][uid];
  22. }
  23. item.isByMultMark = isByMultMark;
  24. return item;
  25. });
  26. return tList;
  27. }
  28. function addSpecialTrackColorAttr(tList: SpecialTag[]): SpecialTag[] {
  29. return tList.map((item) => {
  30. item.color =
  31. colorMap[item.groupNumber] && colorMap[item.groupNumber][item.markerId]
  32. ? colorMap[item.groupNumber][item.markerId]
  33. : "green";
  34. return item;
  35. });
  36. }
  37. function addHeaderTrackColorAttr(headerTrack: any): any {
  38. return headerTrack.map((item: any) => {
  39. item.color = "green";
  40. return item;
  41. });
  42. }
  43. return {
  44. addTrackColorAttr,
  45. addSpecialTrackColorAttr,
  46. addHeaderTrackColorAttr,
  47. };
  48. }