FPSMS-frontend
25개 이상의 토픽을 선택하실 수 없습니다. Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 

224 lines
4.9 KiB

  1. import { TraceGraphNodeKind } from "./buildTraceGraphNodes";
  2. import { TraceGraphPhase } from "./traceGraphLayout";
  3. /**
  4. * Palette aligned with phase/category so kinds in different lanes do not all
  5. * collapse onto the same chip color (outbound vs pick vs scrap vs fail).
  6. */
  7. export const kindColor = (
  8. kind: TraceGraphNodeKind,
  9. ):
  10. | "success"
  11. | "warning"
  12. | "info"
  13. | "secondary"
  14. | "default"
  15. | "primary"
  16. | "error" => {
  17. switch (kind) {
  18. case "PURCHASE":
  19. case "RECEIPT":
  20. case "MATERIAL_IN":
  21. case "OPEN":
  22. case "IN":
  23. return "success";
  24. case "QC":
  25. case "MATERIAL_QC":
  26. return "info";
  27. case "FAIL":
  28. return "error";
  29. case "MATERIAL_PICK":
  30. case "PICK_GROUP":
  31. return "secondary";
  32. case "PRODUCTION_STEP":
  33. case "JO_CREATED":
  34. case "BYPRODUCT":
  35. return "primary";
  36. case "SCRAP":
  37. return "warning";
  38. case "DEFECT":
  39. case "EXPIRED":
  40. return "error";
  41. case "PUTAWAY":
  42. case "TRANSFER":
  43. case "REPACK":
  44. return "primary";
  45. case "STOCK_TAKE":
  46. return "secondary";
  47. case "ADJUSTMENT":
  48. case "DEPLETED":
  49. return "default";
  50. case "DO_OUT":
  51. case "DO_GROUP":
  52. case "REPLENISHMENT_CREATED":
  53. case "OUT":
  54. return "warning";
  55. case "JO_OUT":
  56. case "PO_OUT":
  57. return "secondary";
  58. case "RETURN":
  59. return "error";
  60. default:
  61. return "default";
  62. }
  63. };
  64. export const kindLabelKey = (kind: TraceGraphNodeKind): string => {
  65. switch (kind) {
  66. case "MATERIAL_IN":
  67. return "nodeMaterialIn";
  68. case "JO_CREATED":
  69. return "nodeJoCreated";
  70. case "MATERIAL_QC":
  71. return "tabQc";
  72. case "MATERIAL_PICK":
  73. return "nodeMaterialPick";
  74. case "PRODUCTION_STEP":
  75. return "nodeProductionStep";
  76. case "BYPRODUCT":
  77. return "nodeByproduct";
  78. case "SCRAP":
  79. return "nodeScrap";
  80. case "DEFECT":
  81. return "nodeDefect";
  82. case "OPEN":
  83. return "nodeOpen";
  84. case "FAIL":
  85. return "nodeFail";
  86. case "DO_OUT":
  87. return "nodeDoOut";
  88. case "REPLENISHMENT_CREATED":
  89. return "nodeReplenishmentCreated";
  90. case "JO_OUT":
  91. return "nodeJoOut";
  92. case "PO_OUT":
  93. return "nodePoOut";
  94. case "DO_GROUP":
  95. return "nodeDoGroup";
  96. case "PICK_GROUP":
  97. return "nodePickGroup";
  98. case "RETURN":
  99. return "nodeReturn";
  100. case "REPACK":
  101. return "nodeRepack";
  102. case "PURCHASE":
  103. return "nodePurchase";
  104. case "RECEIPT":
  105. return "nodeReceipt";
  106. case "PUTAWAY":
  107. return "nodePutaway";
  108. case "IN":
  109. return "directionIn";
  110. case "OUT":
  111. return "directionOut";
  112. case "QC":
  113. return "tabQc";
  114. case "STOCK_TAKE":
  115. return "nodeStockTake";
  116. case "ADJUSTMENT":
  117. return "nodeAdjustment";
  118. case "TRANSFER":
  119. return "nodeTransfer";
  120. case "EXPIRED":
  121. return "nodeExpired";
  122. case "DEPLETED":
  123. return "nodeDepleted";
  124. default:
  125. return "type";
  126. }
  127. };
  128. export const phaseLabelKey = (phase: TraceGraphPhase): string => {
  129. switch (phase) {
  130. case "MATERIAL_PICK":
  131. return "phaseMaterialPick";
  132. case "PRODUCTION":
  133. return "phaseProduction";
  134. case "PURCHASE":
  135. return "phasePurchase";
  136. case "INBOUND":
  137. return "phaseInbound";
  138. case "QC":
  139. return "phaseQc";
  140. case "PUTAWAY":
  141. return "phasePutaway";
  142. case "WAREHOUSE":
  143. return "phaseWarehouse";
  144. case "OUTBOUND":
  145. return "phaseOutbound";
  146. case "STOCK_TAKE":
  147. return "phaseStockTake";
  148. default:
  149. return "type";
  150. }
  151. };
  152. export const phaseAccent = (phase: TraceGraphPhase): string => {
  153. switch (phase) {
  154. case "MATERIAL_PICK":
  155. return "#f9a825";
  156. case "PRODUCTION":
  157. return "#6a1b9a";
  158. case "PURCHASE":
  159. return "#33691e";
  160. case "INBOUND":
  161. return "#2e7d32";
  162. case "QC":
  163. return "#0288d1";
  164. case "PUTAWAY":
  165. return "#00897b";
  166. case "WAREHOUSE":
  167. return "#7b1fa2";
  168. case "OUTBOUND":
  169. return "#ed6c02";
  170. case "STOCK_TAKE":
  171. return "#5c6bc0";
  172. default:
  173. return "#757575";
  174. }
  175. };
  176. /** MUI Chip color for a phase — matches the node chips typically shown in that lane. */
  177. export const phaseChipColor = (
  178. phase: TraceGraphPhase,
  179. ):
  180. | "success"
  181. | "warning"
  182. | "info"
  183. | "secondary"
  184. | "default"
  185. | "primary"
  186. | "error" => {
  187. switch (phase) {
  188. case "PURCHASE":
  189. case "INBOUND":
  190. return "success";
  191. case "QC":
  192. return "info";
  193. case "PUTAWAY":
  194. case "PRODUCTION":
  195. case "WAREHOUSE":
  196. return "primary";
  197. case "MATERIAL_PICK":
  198. case "STOCK_TAKE":
  199. return "secondary";
  200. case "OUTBOUND":
  201. return "warning";
  202. default:
  203. return "default";
  204. }
  205. };
  206. export const minimapNodeColor = (kind: TraceGraphNodeKind): string => {
  207. const map: Record<string, string> = {
  208. success: "#2e7d32",
  209. warning: "#ed6c02",
  210. info: "#0288d1",
  211. secondary: "#5c6bc0",
  212. primary: "#7b1fa2",
  213. default: "#9e9e9e",
  214. error: "#d32f2f",
  215. };
  216. return map[kindColor(kind)] ?? "#9e9e9e";
  217. };