@seedtactics/insight-client 16.8.4-beta.0 → 16.8.4-beta.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 (96) hide show
  1. package/dist/assets/index-DXfAwuj-.css +1 -0
  2. package/dist/assets/index-Y5yNHUvc.js +388 -0
  3. package/dist/assets/roboto-cyrillic-300-normal-D0x1uCa7.woff +0 -0
  4. package/dist/assets/roboto-cyrillic-400-normal-BepgbcUK.woff +0 -0
  5. package/dist/assets/roboto-cyrillic-500-normal-C8ZOEKN4.woff +0 -0
  6. package/dist/assets/roboto-cyrillic-700-normal-D8g9KsRf.woff +0 -0
  7. package/dist/assets/roboto-cyrillic-ext-300-normal-C0UYUNTV.woff +0 -0
  8. package/dist/assets/roboto-cyrillic-ext-400-normal-DhDk0Xwi.woff +0 -0
  9. package/dist/assets/roboto-cyrillic-ext-500-normal-SCgicl0l.woff +0 -0
  10. package/dist/assets/roboto-cyrillic-ext-700-normal-BWOtdzfy.woff +0 -0
  11. package/dist/assets/roboto-greek-300-normal-xS8CB6LN.woff +0 -0
  12. package/dist/assets/roboto-greek-400-normal-D904r64h.woff +0 -0
  13. package/dist/assets/roboto-greek-500-normal-XBIQOowA.woff +0 -0
  14. package/dist/assets/roboto-greek-700-normal-xQsEWSIA.woff +0 -0
  15. package/dist/assets/roboto-latin-300-normal-Dqn3NW0Y.woff +0 -0
  16. package/dist/assets/roboto-latin-400-normal-D27F5sTu.woff +0 -0
  17. package/dist/assets/roboto-latin-500-normal-fsTFPL3E.woff +0 -0
  18. package/dist/assets/roboto-latin-700-normal-YuyVweIx.woff +0 -0
  19. package/dist/assets/roboto-latin-ext-300-normal-B0-sTZUp.woff +0 -0
  20. package/dist/assets/roboto-latin-ext-400-normal-CIveymTr.woff +0 -0
  21. package/dist/assets/roboto-latin-ext-500-normal-C1cK9xmS.woff +0 -0
  22. package/dist/assets/roboto-latin-ext-700-normal-BDePAh3g.woff +0 -0
  23. package/dist/assets/roboto-math-300-normal-CkwMvXpj.woff +0 -0
  24. package/dist/assets/roboto-math-400-normal-D6sS4O5l.woff +0 -0
  25. package/dist/assets/roboto-math-500-normal-BNGXE_xU.woff +0 -0
  26. package/dist/assets/roboto-math-700-normal-DbhUef31.woff +0 -0
  27. package/dist/assets/roboto-symbols-300-normal-CBIeSvs3.woff +0 -0
  28. package/dist/assets/roboto-symbols-400-normal-C7tGlxgb.woff +0 -0
  29. package/dist/assets/roboto-symbols-500-normal-DFnofPUt.woff +0 -0
  30. package/dist/assets/roboto-symbols-700-normal-C59U6HqI.woff +0 -0
  31. package/dist/assets/roboto-vietnamese-300-normal-CYjuQheQ.woff +0 -0
  32. package/dist/assets/roboto-vietnamese-400-normal-Bf76hAzZ.woff +0 -0
  33. package/dist/assets/roboto-vietnamese-500-normal-BgoYVz-9.woff +0 -0
  34. package/dist/assets/roboto-vietnamese-700-normal-kpkdMgbf.woff +0 -0
  35. package/dist/bootstrap.d.ts +5 -0
  36. package/dist/bootstrap.js +56 -0
  37. package/dist/cell-status/custom-state.d.ts +9 -0
  38. package/dist/cell-status/custom-state.js +42 -0
  39. package/dist/cell-status/loading.js +5 -0
  40. package/dist/components/App.d.ts +2 -0
  41. package/dist/components/App.js +1 -1
  42. package/dist/components/station-monitor/BasketLoadStationWork.d.ts +15 -0
  43. package/dist/components/station-monitor/BasketLoadStationWork.js +147 -0
  44. package/dist/components/station-monitor/LoadStation.d.ts +2 -0
  45. package/dist/components/station-monitor/LoadStation.js +26 -17
  46. package/dist/components/station-monitor/Material.js +22 -3
  47. package/dist/components/station-monitor/MoveMaterialArrows.js +1 -1
  48. package/dist/components/station-monitor/QuarantineButton.js +5 -2
  49. package/dist/components/station-monitor/QueuesAddMaterial.js +2 -1
  50. package/dist/components/station-monitor/SystemOverview.js +7 -3
  51. package/dist/data/all-material-bins.js +10 -0
  52. package/dist/data/current-cycles.js +22 -20
  53. package/dist/data/move-arrows.d.ts +1 -0
  54. package/dist/data/move-arrows.js +18 -2
  55. package/dist/data/queue-material.js +2 -0
  56. package/dist/index.html +2 -2
  57. package/dist/index.js +7 -15
  58. package/dist/network/api.d.ts +10 -1
  59. package/dist/network/api.js +9 -0
  60. package/dist/network/backend.d.ts +2 -0
  61. package/dist/network/backend.js +14 -9
  62. package/package.json +8 -7
  63. package/dist/assets/index-4ivKxo2f.js +0 -388
  64. package/dist/assets/index-CbqW4-gR.css +0 -1
  65. package/dist/assets/roboto-cyrillic-300-normal-DEFNdjk5.woff +0 -0
  66. package/dist/assets/roboto-cyrillic-400-normal-Bjg-1-sg.woff +0 -0
  67. package/dist/assets/roboto-cyrillic-500-normal-CBKMylY4.woff +0 -0
  68. package/dist/assets/roboto-cyrillic-700-normal-DhZFXDSN.woff +0 -0
  69. package/dist/assets/roboto-cyrillic-ext-300-normal-D7ank4TF.woff +0 -0
  70. package/dist/assets/roboto-cyrillic-ext-400-normal-CaK1767H.woff +0 -0
  71. package/dist/assets/roboto-cyrillic-ext-500-normal-DqF2hftb.woff +0 -0
  72. package/dist/assets/roboto-cyrillic-ext-700-normal-CI7FH63F.woff +0 -0
  73. package/dist/assets/roboto-greek-300-normal-C_Dgaih9.woff +0 -0
  74. package/dist/assets/roboto-greek-400-normal-Bb5mj_fZ.woff +0 -0
  75. package/dist/assets/roboto-greek-500-normal-oCqhoyfc.woff +0 -0
  76. package/dist/assets/roboto-greek-700-normal-DjRqqLBV.woff +0 -0
  77. package/dist/assets/roboto-latin-300-normal-BARJ-h6h.woff +0 -0
  78. package/dist/assets/roboto-latin-400-normal-DyYNIH4P.woff +0 -0
  79. package/dist/assets/roboto-latin-500-normal-DQZyH_nt.woff +0 -0
  80. package/dist/assets/roboto-latin-700-normal-DLgJJpmK.woff +0 -0
  81. package/dist/assets/roboto-latin-ext-300-normal-CTCCHkZF.woff +0 -0
  82. package/dist/assets/roboto-latin-ext-400-normal-scX0fKtV.woff +0 -0
  83. package/dist/assets/roboto-latin-ext-500-normal-Cyc0AKLz.woff +0 -0
  84. package/dist/assets/roboto-latin-ext-700-normal-BUhwtWwy.woff +0 -0
  85. package/dist/assets/roboto-math-300-normal-Ds0YpBw2.woff +0 -0
  86. package/dist/assets/roboto-math-400-normal-C9RxBKAh.woff +0 -0
  87. package/dist/assets/roboto-math-500-normal-C-7mKPO3.woff +0 -0
  88. package/dist/assets/roboto-math-700-normal-DVoD5t2k.woff +0 -0
  89. package/dist/assets/roboto-symbols-300-normal-BCnjhQd_.woff +0 -0
  90. package/dist/assets/roboto-symbols-400-normal-DLYbZahX.woff +0 -0
  91. package/dist/assets/roboto-symbols-500-normal-F7c8nfcH.woff +0 -0
  92. package/dist/assets/roboto-symbols-700-normal-BoS6HWkc.woff +0 -0
  93. package/dist/assets/roboto-vietnamese-300-normal-INUupD3o.woff +0 -0
  94. package/dist/assets/roboto-vietnamese-400-normal-DnpnVwnf.woff +0 -0
  95. package/dist/assets/roboto-vietnamese-500-normal-D380IkQ8.woff +0 -0
  96. package/dist/assets/roboto-vietnamese-700-normal-DsFyXAL4.woff +0 -0
@@ -116,5 +116,5 @@ export function useMoveMaterialArrowRef(kind) {
116
116
  }
117
117
  export function MoveMaterialArrowNode({ kind, children, }) {
118
118
  const ref = useMoveMaterialArrowRef(kind);
119
- return _jsx("div", { ref: ref, children: children });
119
+ return (_jsx("div", { ref: ref, "data-move-material-identifier": uniqueIdForNodeKind(kind), children: children }));
120
120
  }
@@ -116,10 +116,13 @@ function useQuarantineMaterial(ignoreOperator) {
116
116
  }
117
117
  break;
118
118
  case LocType.InQueue:
119
- if (inProcMat.action.type === ActionType.Loading && !fmsInfo.allowQuarantineToCancelLoad) {
119
+ if ((inProcMat.action.type === ActionType.Loading ||
120
+ inProcMat.action.type === ActionType.LoadingToBasket) &&
121
+ !fmsInfo.allowQuarantineToCancelLoad) {
120
122
  return null;
121
123
  }
122
- else if (inProcMat.action.type === ActionType.Loading) {
124
+ else if (inProcMat.action.type === ActionType.Loading ||
125
+ inProcMat.action.type === ActionType.LoadingToBasket) {
123
126
  type = "CancelLoad";
124
127
  }
125
128
  else {
@@ -54,7 +54,8 @@ function useAllowAddToQueue(queueNames) {
54
54
  return false;
55
55
  if (inProcMat?.location.type === api.LocType.OnPallet)
56
56
  return false;
57
- if (inProcMat?.action.type === api.ActionType.Loading)
57
+ if (inProcMat?.action.type === api.ActionType.Loading ||
58
+ inProcMat?.action.type === api.ActionType.LoadingToBasket)
58
59
  return false;
59
60
  if (existingMat === null && !possibleNewMats) {
60
61
  return false;
@@ -59,10 +59,13 @@ function useCellOverview() {
59
59
  .filter((m) => m.location.type === LocType.OnPallet || m.action.type === ActionType.Loading)
60
60
  .toRLookup((m) => m.location.palletNum ?? m.action.loadOntoPalletNum ?? 0);
61
61
  const matByBasket = LazySeq.of(currentSt.material)
62
- .filter((m) => m.location.type === LocType.InBasket &&
62
+ .filter((m) => (m.location.type === LocType.InBasket &&
63
63
  m.location.basketId !== null &&
64
- m.location.basketId !== undefined)
65
- .toRLookup((m) => m.location.basketId ?? 0);
64
+ m.location.basketId !== undefined) ||
65
+ (m.action.type === ActionType.LoadingToBasket &&
66
+ m.action.loadToBasketId !== null &&
67
+ m.action.loadToBasketId !== undefined))
68
+ .toRLookup((m) => m.location.basketId ?? m.action.loadToBasketId ?? 0);
66
69
  let loads = LazySeq.ofObject(currentSt.pallets)
67
70
  .filter(([_, p]) => p.currentPalletLocation.loc === PalletLocationEnum.LoadUnload)
68
71
  .toOrderedMap(([_, p]) => [
@@ -582,6 +585,7 @@ function Machine({ maxNumFaces, machine }) {
582
585
  }
583
586
  function useElapsedLoadTime(material) {
584
587
  const mat = material?.find((m) => m.action.type === ActionType.Loading ||
588
+ m.action.type === ActionType.LoadingToBasket ||
585
589
  m.action.type === ActionType.UnloadToCompletedMaterial ||
586
590
  m.action.type === ActionType.UnloadToInProcess);
587
591
  const elapsedDurationFromCurSt = mat?.action?.elapsedLoadUnloadTime;
@@ -126,6 +126,16 @@ export function selectAllMaterialIntoBins(curSt, curBinOrder) {
126
126
  addToMap(loadStations, lul, mat);
127
127
  break;
128
128
  }
129
+ case api.ActionType.LoadingToBasket: {
130
+ const basket = curSt.baskets?.[mat.action.loadToBasketId ?? 0];
131
+ if (basket?.position.location === api.BasketLocationEnum.LoadUnload) {
132
+ addToMap(loadStations, basket.position.locationNum, mat);
133
+ }
134
+ else {
135
+ addToMap(queues, "Free Material", mat);
136
+ }
137
+ break;
138
+ }
129
139
  default:
130
140
  addToMap(queues, "Free Material", mat);
131
141
  break;
@@ -47,24 +47,17 @@ function basketsAtLoad(currentSt) {
47
47
  })
48
48
  .toRMap(([basketId, loc]) => [basketId, loc]);
49
49
  }
50
- function locationForLoadActivity(material, jobs, palToLoc, basketToLoad) {
51
- if (material.action.type === ActionType.Loading) {
50
+ function locationForLoadActivity(material, palToLoc, basketToLoad) {
51
+ if (material.action.type === ActionType.LoadingToBasket) {
52
+ return basketToLoad.get(material.action.loadToBasketId ?? 0) ?? null;
53
+ }
54
+ else if (material.action.type === ActionType.Loading) {
52
55
  if (material.action.loadOntoPalletNum) {
53
56
  return palToLoc.get(material.action.loadOntoPalletNum) ?? null;
54
57
  }
55
58
  if (material.action.loadFromBasketId) {
56
59
  return basketToLoad.get(material.action.loadFromBasketId) ?? null;
57
60
  }
58
- // queue → basket: neither pallet nor source basket set. Find a basket at a load station
59
- // that is a basket-load station for this job/process.
60
- const proc = material.action.processAfterLoad ?? material.process;
61
- const procInfo = jobs[material.jobUnique]?.procsAndPaths?.[proc - 1];
62
- const basketLoadStations = procInfo?.basketLoadStations ?? [];
63
- for (const [, loc] of basketToLoad) {
64
- if (basketLoadStations.length === 0 || basketLoadStations.includes(loc.num)) {
65
- return loc;
66
- }
67
- }
68
61
  return null;
69
62
  }
70
63
  else {
@@ -110,13 +103,14 @@ function loadCurrentCycles(currentSt, estimated, palToLoc, loadStationNames) {
110
103
  .collect((m) => {
111
104
  if (m.action.type === ActionType.UnloadToCompletedMaterial ||
112
105
  m.action.type === ActionType.UnloadToInProcess) {
113
- const loc = locationForLoadActivity(m, currentSt.jobs, palToLoc, basketToLoad);
106
+ const loc = locationForLoadActivity(m, palToLoc, basketToLoad);
114
107
  if (!loc)
115
108
  return null;
116
109
  return { mat: m, material: [m], proc: m.process, path: m.path, loc };
117
110
  }
118
- else if (m.action.type === ActionType.Loading) {
119
- const loc = locationForLoadActivity(m, currentSt.jobs, palToLoc, basketToLoad);
111
+ else if (m.action.type === ActionType.Loading ||
112
+ m.action.type === ActionType.LoadingToBasket) {
113
+ const loc = locationForLoadActivity(m, palToLoc, basketToLoad);
120
114
  if (!loc)
121
115
  return null;
122
116
  return {
@@ -133,8 +127,9 @@ function loadCurrentCycles(currentSt, estimated, palToLoc, loadStationNames) {
133
127
  const job = currentSt.jobs[m.mat.jobUnique];
134
128
  const procInfo = job?.procsAndPaths?.[m.proc - 1];
135
129
  const pathData = job?.procsAndPaths?.[m.proc - 1]?.paths?.[m.path - 1];
136
- if (m.mat.action.type === ActionType.Loading) {
137
- const expected = m.mat.action.loadOntoPalletNum !== null && m.mat.action.loadOntoPalletNum !== undefined
130
+ if (m.mat.action.type === ActionType.Loading ||
131
+ m.mat.action.type === ActionType.LoadingToBasket) {
132
+ const expected = m.mat.action.type === ActionType.Loading
138
133
  ? pathData?.expectedLoadTime
139
134
  : (procInfo?.expectedBasketLoadTime ?? pathData?.expectedLoadTime);
140
135
  return { ...m, expectedLoadSecs: durationToSeconds(expected ?? "PT0S") };
@@ -152,7 +147,8 @@ function loadCurrentCycles(currentSt, estimated, palToLoc, loadStationNames) {
152
147
  let outlier = false;
153
148
  let expectedSecs = 0;
154
149
  for (const { cycle: m, elapsedForSingleMaterialMinutes } of matsWithTime) {
155
- const stats = estimated.get(new PartAndStationOperation(m.mat.partName, statGroup, m.mat.action.type === ActionType.Loading
150
+ const stats = estimated.get(new PartAndStationOperation(m.mat.partName, statGroup, m.mat.action.type === ActionType.Loading ||
151
+ m.mat.action.type === ActionType.LoadingToBasket
156
152
  ? "LOAD-" + m.proc.toString()
157
153
  : "UNLOAD-" + m.proc.toString()));
158
154
  if (stats && isOutlierAbove(stats, elapsedForSingleMaterialMinutes)) {
@@ -172,10 +168,16 @@ function loadCurrentCycles(currentSt, estimated, palToLoc, loadStationNames) {
172
168
  expectedEnd: addSeconds(currentSt.timeOfCurrentStatusUTC, -elapsedSec + expectedSecs),
173
169
  isOutlier: outlier,
174
170
  parts: LazySeq.of(mats)
175
- .distinctAndSortBy((m) => m.mat.partName, (m) => m.proc, (m) => (m.mat.action.type === ActionType.Loading ? "LOAD" : "UNLOAD"))
171
+ .distinctAndSortBy((m) => m.mat.partName, (m) => m.proc, (m) => m.mat.action.type === ActionType.Loading ||
172
+ m.mat.action.type === ActionType.LoadingToBasket
173
+ ? "LOAD"
174
+ : "UNLOAD")
176
175
  .map((m) => ({
177
176
  part: m.mat.partName + "-" + m.proc.toString(),
178
- oper: m.mat.action.type === ActionType.Loading ? "LOAD" : "UNLOAD",
177
+ oper: m.mat.action.type === ActionType.Loading ||
178
+ m.mat.action.type === ActionType.LoadingToBasket
179
+ ? "LOAD"
180
+ : "UNLOAD",
179
181
  }))
180
182
  .toRArray(),
181
183
  };
@@ -12,6 +12,7 @@ export declare enum MoveMaterialNodeKindType {
12
12
  export type MoveMaterialNodeKind = {
13
13
  readonly type: MoveMaterialNodeKindType.Material;
14
14
  readonly material: Readonly<api.IInProcessMaterial> | null;
15
+ readonly identifier?: string;
15
16
  } | {
16
17
  readonly type: MoveMaterialNodeKindType.FreeMaterialZone;
17
18
  } | {
@@ -45,7 +45,7 @@ export var MoveMaterialNodeKindType;
45
45
  export function uniqueIdForNodeKind(kind) {
46
46
  switch (kind.type) {
47
47
  case MoveMaterialNodeKindType.Material:
48
- return "Material-" + (kind.material?.materialID ?? -1).toString();
48
+ return "Material-" + (kind.identifier ?? (kind.material?.materialID ?? -1).toString());
49
49
  case MoveMaterialNodeKindType.FreeMaterialZone:
50
50
  return "FreeMaterialZone";
51
51
  case MoveMaterialNodeKindType.CompletedCollapsedMaterialZone:
@@ -63,7 +63,7 @@ export function uniqueIdForNodeKind(kind) {
63
63
  export function memoPropsForNodeKind(kind) {
64
64
  switch (kind.type) {
65
65
  case MoveMaterialNodeKindType.Material:
66
- return [kind.type, kind.material];
66
+ return [kind.type, kind.material, kind.identifier];
67
67
  case MoveMaterialNodeKindType.FreeMaterialZone:
68
68
  case MoveMaterialNodeKindType.CompletedCollapsedMaterialZone:
69
69
  case MoveMaterialNodeKindType.CompletedExpandedMaterialZone:
@@ -257,6 +257,22 @@ export function computeArrows(container, allNodes) {
257
257
  }
258
258
  }
259
259
  break;
260
+ case api.ActionType.LoadingToBasket: {
261
+ const basketId = mat.action.loadToBasketId;
262
+ if (basketId === undefined)
263
+ break;
264
+ const dest = byKind.baskets.get(basketId);
265
+ const lastSlotUsed = basketDestUsed.get(basketId) ?? 0;
266
+ basketDestUsed.set(basketId, lastSlotUsed + 1);
267
+ arrows.push({
268
+ fromX: rect.right,
269
+ fromY: rect.top + rect.height / 2,
270
+ toX: dest !== undefined ? dest.left + 20 : container.right - 10,
271
+ toY: dest !== undefined ? dest.top + 50 + 20 * lastSlotUsed : rect.top + rect.height / 2,
272
+ curveDirection: -1,
273
+ });
274
+ break;
275
+ }
260
276
  }
261
277
  }
262
278
  return arrows.map((arr) => ({
@@ -107,12 +107,14 @@ function isMatAssignedRaw(unique, m) {
107
107
  return (m.jobUnique === unique &&
108
108
  m.location.type === api.LocType.InQueue &&
109
109
  m.action.type !== api.ActionType.Loading &&
110
+ m.action.type !== api.ActionType.LoadingToBasket &&
110
111
  m.process === 0);
111
112
  }
112
113
  function isMatUnassignedRaw(rawMatName, m) {
113
114
  return (m.partName === rawMatName &&
114
115
  m.location.type === api.LocType.InQueue &&
115
116
  m.action.type !== api.ActionType.Loading &&
117
+ m.action.type !== api.ActionType.LoadingToBasket &&
116
118
  m.process === 0 &&
117
119
  !m.jobUnique);
118
120
  }
package/dist/index.html CHANGED
@@ -44,8 +44,8 @@
44
44
  }
45
45
  }
46
46
  </style>
47
- <script type="module" crossorigin src="/assets/index-4ivKxo2f.js"></script>
48
- <link rel="stylesheet" crossorigin href="/assets/index-CbqW4-gR.css">
47
+ <script type="module" crossorigin src="/assets/index-Y5yNHUvc.js"></script>
48
+ <link rel="stylesheet" crossorigin href="/assets/index-DXfAwuj-.css">
49
49
  </head>
50
50
  <body>
51
51
  <noscript> You need to enable JavaScript to run this app. </noscript>
package/dist/index.js CHANGED
@@ -30,16 +30,15 @@ THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
30
30
  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
31
31
  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
32
32
  */
33
- import { render } from "./renderer.js";
34
- import { registerNetworkBackend } from "./network/backend.js";
35
- import { fmsInformation, loadInfo } from "./network/server-settings.js";
33
+ import { bootstrapInsight } from "./bootstrap.js";
36
34
  import { ApiException } from "./network/api.js";
37
- import { createStore } from "jotai";
38
35
  async function main() {
39
- registerNetworkBackend();
40
- const store = createStore();
41
- store.set(fmsInformation, await loadInfo());
42
- render(null, document.getElementById("root"), store);
36
+ const developmentProps = import.meta.env.DEV
37
+ ? {
38
+ submitBasketLoadStationCommand: async () => "accepted",
39
+ }
40
+ : {};
41
+ await bootstrapInsight(developmentProps);
43
42
  }
44
43
  main().catch((e) => {
45
44
  console.log(e);
@@ -51,10 +50,3 @@ main().catch((e) => {
51
50
  p.textContent = msg;
52
51
  (document.getElementById("loading") ?? document.body).appendChild(p);
53
52
  });
54
- if ("serviceWorker" in navigator) {
55
- void navigator.serviceWorker.getRegistrations().then((registrations) => {
56
- for (const reg of registrations) {
57
- void reg.unregister();
58
- }
59
- });
60
- }
@@ -722,6 +722,7 @@ export declare class CurrentStatus implements ICurrentStatus {
722
722
  [key: string]: BasketStatus;
723
723
  } | undefined;
724
724
  basketMoveInstructions?: BasketMoveInstruction[] | undefined;
725
+ customState?: unknown | undefined;
725
726
  constructor(data?: ICurrentStatus);
726
727
  init(_data?: any): void;
727
728
  static fromJS(data: any): CurrentStatus;
@@ -746,6 +747,7 @@ export interface ICurrentStatus {
746
747
  [key: string]: BasketStatus;
747
748
  } | undefined;
748
749
  basketMoveInstructions?: BasketMoveInstruction[] | undefined;
750
+ customState?: unknown | undefined;
749
751
  }
750
752
  export declare class HistoricJob extends Job implements IHistoricJob {
751
753
  scheduleId?: string | undefined;
@@ -902,11 +904,14 @@ export declare enum LocType {
902
904
  }
903
905
  export declare class InProcessMaterialAction implements IInProcessMaterialAction {
904
906
  type: ActionType;
907
+ workId?: string | undefined;
905
908
  loadOntoPalletNum?: number | undefined;
906
909
  loadOntoFace?: number | undefined;
907
910
  processAfterLoad?: number | undefined;
908
911
  pathAfterLoad?: number | undefined;
909
912
  loadFromBasketId?: number | undefined;
913
+ loadToBasketId?: number | undefined;
914
+ loadToBasketSlot?: number | undefined;
910
915
  unloadIntoQueue?: string | undefined;
911
916
  unloadToBasketId?: number | undefined;
912
917
  unloadToBasketSlot?: number | undefined;
@@ -921,11 +926,14 @@ export declare class InProcessMaterialAction implements IInProcessMaterialAction
921
926
  }
922
927
  export interface IInProcessMaterialAction {
923
928
  type: ActionType;
929
+ workId?: string | undefined;
924
930
  loadOntoPalletNum?: number | undefined;
925
931
  loadOntoFace?: number | undefined;
926
932
  processAfterLoad?: number | undefined;
927
933
  pathAfterLoad?: number | undefined;
928
934
  loadFromBasketId?: number | undefined;
935
+ loadToBasketId?: number | undefined;
936
+ loadToBasketSlot?: number | undefined;
929
937
  unloadIntoQueue?: string | undefined;
930
938
  unloadToBasketId?: number | undefined;
931
939
  unloadToBasketSlot?: number | undefined;
@@ -939,7 +947,8 @@ export declare enum ActionType {
939
947
  Loading = "Loading",
940
948
  UnloadToInProcess = "UnloadToInProcess",
941
949
  UnloadToCompletedMaterial = "UnloadToCompletedMaterial",
942
- Machining = "Machining"
950
+ Machining = "Machining",
951
+ LoadingToBasket = "LoadingToBasket"
943
952
  }
944
953
  export declare class QueueInfo implements IQueueInfo {
945
954
  maxSizeBeforeStopUnloading?: number | undefined;
@@ -3561,6 +3561,7 @@ export class CurrentStatus {
3561
3561
  for (let item of _data["BasketMoveInstructions"])
3562
3562
  this.basketMoveInstructions.push(BasketMoveInstruction.fromJS(item));
3563
3563
  }
3564
+ this.customState = _data["CustomState"];
3564
3565
  }
3565
3566
  }
3566
3567
  static fromJS(data) {
@@ -3635,6 +3636,7 @@ export class CurrentStatus {
3635
3636
  for (let item of this.basketMoveInstructions)
3636
3637
  data["BasketMoveInstructions"].push(item ? item.toJSON() : undefined);
3637
3638
  }
3639
+ data["CustomState"] = this.customState;
3638
3640
  return data;
3639
3641
  }
3640
3642
  }
@@ -3979,11 +3981,14 @@ export class InProcessMaterialAction {
3979
3981
  init(_data) {
3980
3982
  if (_data) {
3981
3983
  this.type = _data["Type"];
3984
+ this.workId = _data["WorkId"];
3982
3985
  this.loadOntoPalletNum = _data["LoadOntoPalletNum"];
3983
3986
  this.loadOntoFace = _data["LoadOntoFace"];
3984
3987
  this.processAfterLoad = _data["ProcessAfterLoad"];
3985
3988
  this.pathAfterLoad = _data["PathAfterLoad"];
3986
3989
  this.loadFromBasketId = _data["LoadFromBasketId"];
3990
+ this.loadToBasketId = _data["LoadToBasketId"];
3991
+ this.loadToBasketSlot = _data["LoadToBasketSlot"];
3987
3992
  this.unloadIntoQueue = _data["UnloadIntoQueue"];
3988
3993
  this.unloadToBasketId = _data["UnloadToBasketId"];
3989
3994
  this.unloadToBasketSlot = _data["UnloadToBasketSlot"];
@@ -4002,11 +4007,14 @@ export class InProcessMaterialAction {
4002
4007
  toJSON(data) {
4003
4008
  data = typeof data === "object" ? data : {};
4004
4009
  data["Type"] = this.type;
4010
+ data["WorkId"] = this.workId;
4005
4011
  data["LoadOntoPalletNum"] = this.loadOntoPalletNum;
4006
4012
  data["LoadOntoFace"] = this.loadOntoFace;
4007
4013
  data["ProcessAfterLoad"] = this.processAfterLoad;
4008
4014
  data["PathAfterLoad"] = this.pathAfterLoad;
4009
4015
  data["LoadFromBasketId"] = this.loadFromBasketId;
4016
+ data["LoadToBasketId"] = this.loadToBasketId;
4017
+ data["LoadToBasketSlot"] = this.loadToBasketSlot;
4010
4018
  data["UnloadIntoQueue"] = this.unloadIntoQueue;
4011
4019
  data["UnloadToBasketId"] = this.unloadToBasketId;
4012
4020
  data["UnloadToBasketSlot"] = this.unloadToBasketSlot;
@@ -4024,6 +4032,7 @@ export var ActionType;
4024
4032
  ActionType["UnloadToInProcess"] = "UnloadToInProcess";
4025
4033
  ActionType["UnloadToCompletedMaterial"] = "UnloadToCompletedMaterial";
4026
4034
  ActionType["Machining"] = "Machining";
4035
+ ActionType["LoadingToBasket"] = "LoadingToBasket";
4027
4036
  })(ActionType || (ActionType = {}));
4028
4037
  export class QueueInfo {
4029
4038
  constructor(data) {
@@ -54,4 +54,6 @@ export declare function registerNetworkBackend(): void;
54
54
  export declare function setOtherLogBackends(servers: ReadonlyArray<string>): void;
55
55
  export declare function registerBackend(log: LogAPI, job: JobAPI, fms: FmsAPI, machine: MachineAPI): void;
56
56
  export declare function setUserToken(u: User): void;
57
+ /** Performs a request using the authenticated Insight user's bearer token, when present. */
58
+ export declare function authenticatedFetch(url: RequestInfo, init?: RequestInit): Promise<Response>;
57
59
  export declare function instructionUrl(partName: string, type: string, matId: number, pallet: number | null, proc: number | null | undefined, operator: string | null): string;
@@ -37,6 +37,7 @@ export let LogBackend;
37
37
  export let MachineBackend;
38
38
  let otherLogServers = [];
39
39
  export let OtherLogBackends = [];
40
+ let userAccessToken;
40
41
  export function registerNetworkBackend() {
41
42
  LogBackend = new api.LogClient();
42
43
  MachineBackend = new api.MachinesClient();
@@ -54,16 +55,20 @@ export function registerBackend(log, job, fms, machine) {
54
55
  MachineBackend = machine;
55
56
  }
56
57
  export function setUserToken(u) {
57
- const token = u.access_token;
58
- function fetch(url, init) {
59
- const headers = new Headers(init?.headers);
60
- headers.set("Authorization", "Bearer " + token);
61
- return window.fetch(url, init ? { ...init, headers } : { headers });
58
+ userAccessToken = u.access_token;
59
+ const http = { fetch: authenticatedFetch };
60
+ FmsServerBackend = new api.FmsClient(undefined, http);
61
+ JobsBackend = new api.JobsClient(undefined, http);
62
+ LogBackend = new api.LogClient(undefined, http);
63
+ OtherLogBackends = otherLogServers.map((s) => new api.LogClient(s, http));
64
+ }
65
+ /** Performs a request using the authenticated Insight user's bearer token, when present. */
66
+ export function authenticatedFetch(url, init) {
67
+ const headers = new Headers(init?.headers);
68
+ if (userAccessToken) {
69
+ headers.set("Authorization", "Bearer " + userAccessToken);
62
70
  }
63
- FmsServerBackend = new api.FmsClient(undefined, { fetch });
64
- JobsBackend = new api.JobsClient(undefined, { fetch });
65
- LogBackend = new api.LogClient(undefined, { fetch });
66
- OtherLogBackends = otherLogServers.map((s) => new api.LogClient(s, { fetch }));
71
+ return window.fetch(url, init ? { ...init, headers } : { headers });
67
72
  }
68
73
  export function instructionUrl(partName, type, matId, pallet, proc, operator) {
69
74
  return ("/api/v1/fms/find-instructions/" +
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@seedtactics/insight-client",
3
- "version": "16.8.4-beta.0",
3
+ "version": "16.8.4-beta.1",
4
4
  "license": "BSD-3-Clause",
5
5
  "repository": {
6
6
  "url": "https://github.com/SeedTactics/fms-insight"
@@ -11,6 +11,7 @@
11
11
  ],
12
12
  "type": "module",
13
13
  "exports": {
14
+ "./bootstrap": "./dist/bootstrap.js",
14
15
  "./cell-status/*": "./dist/cell-status/*.js",
15
16
  "./components/*": "./dist/components/*.js",
16
17
  "./components/analysis/*": "./dist/components/analysis/*.js",
@@ -26,7 +27,7 @@
26
27
  "@dnd-kit/sortable": "^10.0.0",
27
28
  "@emotion/react": "^11.14.0",
28
29
  "@emotion/styled": "^11.14.1",
29
- "@fontsource/roboto": "^5.2.10",
30
+ "@fontsource/roboto": "^5.3.0",
30
31
  "@mui/icons-material": "^9.2.0",
31
32
  "@mui/material": "^9.2.0",
32
33
  "@react-spring/rafz": "^10.1.2",
@@ -41,7 +42,7 @@
41
42
  "date-fns": "^4.4.0",
42
43
  "highlight.js": "^11.11.1",
43
44
  "jdenticon": "^3.3.0",
44
- "jotai": "^2.20.1",
45
+ "jotai": "^2.20.2",
45
46
  "jotai-family": "^1.0.2",
46
47
  "jsbarcode": "^3.12.3",
47
48
  "oidc-client-ts": "^3.5.0",
@@ -67,11 +68,11 @@
67
68
  "@vitest/browser-playwright": "^4.1.10",
68
69
  "jsdom": "^29.1.1",
69
70
  "nswag": "^14.7.1",
70
- "oxfmt": "^0.58.0",
71
- "oxlint": "^1.73.0",
72
- "oxlint-tsgolint": "^0.24.0",
71
+ "oxfmt": "^0.59.0",
72
+ "oxlint": "^1.74.0",
73
+ "oxlint-tsgolint": "^0.25.0",
73
74
  "typescript": "^7.0.2",
74
- "vite": "^8.1.4",
75
+ "vite": "^8.1.5",
75
76
  "vitest": "^4.1.10",
76
77
  "vitest-browser-react": "^2.2.0"
77
78
  },