@seedtactics/insight-client 16.8.4-beta.1 → 16.8.4-beta.11

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 (40) hide show
  1. package/README.md +21 -0
  2. package/dist/assets/index-CQhVwNX7.js +388 -0
  3. package/dist/cell-status/material-details.d.ts +15 -5
  4. package/dist/cell-status/material-details.js +58 -37
  5. package/dist/components/LogEntry.js +2 -9
  6. package/dist/components/log-entry-container-name.d.ts +2 -0
  7. package/dist/components/log-entry-container-name.js +10 -0
  8. package/dist/components/operations/AllMaterial.js +4 -3
  9. package/dist/components/operations/Programs.js +1 -1
  10. package/dist/components/station-monitor/BasketLoadStationWork.js +44 -36
  11. package/dist/components/station-monitor/BulkRawMaterial.js +4 -4
  12. package/dist/components/station-monitor/CancelLoadButton.d.ts +4 -0
  13. package/dist/components/station-monitor/CancelLoadButton.js +59 -0
  14. package/dist/components/station-monitor/Closeout.js +2 -1
  15. package/dist/components/station-monitor/Inspection.js +2 -1
  16. package/dist/components/station-monitor/InvalidateCycle.d.ts +4 -1
  17. package/dist/components/station-monitor/InvalidateCycle.js +61 -10
  18. package/dist/components/station-monitor/LoadStation.js +23 -11
  19. package/dist/components/station-monitor/Material.js +2 -4
  20. package/dist/components/station-monitor/QuarantineButton.js +80 -60
  21. package/dist/components/station-monitor/Queues.js +2 -1
  22. package/dist/components/station-monitor/QueuesAddMaterial.js +59 -48
  23. package/dist/components/station-monitor/SystemOverview.js +3 -2
  24. package/dist/components/station-monitor/Whiteboard.js +2 -2
  25. package/dist/extension.d.ts +11 -0
  26. package/dist/extension.js +21 -0
  27. package/dist/index.html +1 -2
  28. package/dist/index.js +1 -1
  29. package/dist/network/api.d.ts +18 -4
  30. package/dist/network/api.js +69 -2
  31. package/dist/network/backend-mock.js +3 -0
  32. package/dist/network/backend.d.ts +1 -0
  33. package/dist/network/backend.js +2 -1
  34. package/package.json +12 -11
  35. package/dist/assets/index-Y5yNHUvc.js +0 -388
  36. package/dist/assets/manifest-BzJli0lx.webmanifest +0 -15
  37. package/dist/bootstrap.d.ts +0 -5
  38. package/dist/bootstrap.js +0 -56
  39. package/dist/components/station-monitor/Material.test.d.ts +0 -1
  40. package/dist/components/station-monitor/Material.test.js +0 -199
@@ -0,0 +1,21 @@
1
+ import { createStore } from "jotai";
2
+ import { registerNetworkBackend } from "./network/backend.js";
3
+ import { fmsInformation, loadInfo } from "./network/server-settings.js";
4
+ import { render } from "./renderer.js";
5
+ /**
6
+ * Starts one complete FMS Insight application with optional statically composed custom pages.
7
+ */
8
+ export async function bootstrapInsight(appProps = {}, rootElement) {
9
+ const root = rootElement ?? document.getElementById("root");
10
+ if (!root) {
11
+ throw new Error("Unable to start FMS Insight: no root element was provided or found");
12
+ }
13
+ registerNetworkBackend();
14
+ const store = createStore();
15
+ store.set(fmsInformation, await loadInfo());
16
+ render(appProps, root, store);
17
+ }
18
+ export { customState } from "./cell-status/custom-state.js";
19
+ export { defaultChooseModes } from "./components/ChooseMode.js";
20
+ export { RouteLocation } from "./components/routes.js";
21
+ export { authenticatedFetch } from "./network/backend.js";
package/dist/index.html CHANGED
@@ -3,7 +3,6 @@
3
3
  <head>
4
4
  <meta charset="utf-8" />
5
5
  <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no" />
6
- <link rel="manifest" href="/assets/manifest-BzJli0lx.webmanifest" />
7
6
  <link rel="shortcut icon" href="/assets/favicon-gWFxiJK2.ico" />
8
7
  <title>SeedTactic FMS Insight</title>
9
8
  <style type="text/css">
@@ -44,7 +43,7 @@
44
43
  }
45
44
  }
46
45
  </style>
47
- <script type="module" crossorigin src="/assets/index-Y5yNHUvc.js"></script>
46
+ <script type="module" crossorigin src="/assets/index-CQhVwNX7.js"></script>
48
47
  <link rel="stylesheet" crossorigin href="/assets/index-DXfAwuj-.css">
49
48
  </head>
50
49
  <body>
package/dist/index.js CHANGED
@@ -30,7 +30,7 @@ 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 { bootstrapInsight } from "./bootstrap.js";
33
+ import { bootstrapInsight } from "./extension.js";
34
34
  import { ApiException } from "./network/api.js";
35
35
  async function main() {
36
36
  const developmentProps = import.meta.env.DEV
@@ -53,6 +53,8 @@ export declare class JobsClient {
53
53
  protected processRemoveMaterialFromAllQueues(response: Response): Promise<void>;
54
54
  signalMaterialForQuarantine(materialId: number, operName: string | null | undefined, reason: string | undefined, signal?: AbortSignal): Promise<void>;
55
55
  protected processSignalMaterialForQuarantine(response: Response): Promise<void>;
56
+ cancelLoad(materialId: number, operName: string | null | undefined, request: CancelLoadRequest, signal?: AbortSignal): Promise<void>;
57
+ protected processCancelLoad(response: Response): Promise<void>;
56
58
  invalidatePalletCycle(materialId: number, operName: string | null | undefined, changeCastingTo: string | null | undefined, changeJobUniqueTo: string | null | undefined, process: number, signal?: AbortSignal): Promise<MaterialDetails>;
57
59
  protected processInvalidatePalletCycle(response: Response): Promise<MaterialDetails>;
58
60
  swapMaterialOnPallet(materialId: number, operName: string | null | undefined, mat: MatToPutOnPallet, signal?: AbortSignal): Promise<void>;
@@ -140,7 +142,6 @@ export declare class FMSInfo implements IFMSInfo {
140
142
  openIDConnectClientId?: string | undefined;
141
143
  usingLabelPrinterForSerials?: boolean | undefined;
142
144
  useClientPrinterForLabels?: boolean | undefined;
143
- allowQuarantineToCancelLoad?: boolean | undefined;
144
145
  quarantineQueue?: string | undefined;
145
146
  customStationMonitorDialogUrl?: string | undefined;
146
147
  supportsRebookings?: string | undefined;
@@ -172,7 +173,6 @@ export interface IFMSInfo {
172
173
  openIDConnectClientId?: string | undefined;
173
174
  usingLabelPrinterForSerials?: boolean | undefined;
174
175
  useClientPrinterForLabels?: boolean | undefined;
175
- allowQuarantineToCancelLoad?: boolean | undefined;
176
176
  quarantineQueue?: string | undefined;
177
177
  customStationMonitorDialogUrl?: string | undefined;
178
178
  supportsRebookings?: string | undefined;
@@ -722,7 +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
+ customState?: any | undefined;
726
726
  constructor(data?: ICurrentStatus);
727
727
  init(_data?: any): void;
728
728
  static fromJS(data: any): CurrentStatus;
@@ -747,7 +747,7 @@ export interface ICurrentStatus {
747
747
  [key: string]: BasketStatus;
748
748
  } | undefined;
749
749
  basketMoveInstructions?: BasketMoveInstruction[] | undefined;
750
- customState?: unknown | undefined;
750
+ customState?: any | undefined;
751
751
  }
752
752
  export declare class HistoricJob extends Job implements IHistoricJob {
753
753
  scheduleId?: string | undefined;
@@ -905,6 +905,7 @@ export declare enum LocType {
905
905
  export declare class InProcessMaterialAction implements IInProcessMaterialAction {
906
906
  type: ActionType;
907
907
  workId?: string | undefined;
908
+ loadCancellationId?: string | undefined;
908
909
  loadOntoPalletNum?: number | undefined;
909
910
  loadOntoFace?: number | undefined;
910
911
  processAfterLoad?: number | undefined;
@@ -927,6 +928,7 @@ export declare class InProcessMaterialAction implements IInProcessMaterialAction
927
928
  export interface IInProcessMaterialAction {
928
929
  type: ActionType;
929
930
  workId?: string | undefined;
931
+ loadCancellationId?: string | undefined;
930
932
  loadOntoPalletNum?: number | undefined;
931
933
  loadOntoFace?: number | undefined;
932
934
  processAfterLoad?: number | undefined;
@@ -1369,6 +1371,18 @@ export interface IQueuePosition {
1369
1371
  queue: string;
1370
1372
  position: number;
1371
1373
  }
1374
+ export declare class CancelLoadRequest implements ICancelLoadRequest {
1375
+ expectedLoadCancellationId: string;
1376
+ reason?: string | undefined;
1377
+ constructor(data?: ICancelLoadRequest);
1378
+ init(_data?: any): void;
1379
+ static fromJS(data: any): CancelLoadRequest;
1380
+ toJSON(data?: any): any;
1381
+ }
1382
+ export interface ICancelLoadRequest {
1383
+ expectedLoadCancellationId: string;
1384
+ reason?: string | undefined;
1385
+ }
1372
1386
  export declare class MatToPutOnPallet implements IMatToPutOnPallet {
1373
1387
  pallet: number;
1374
1388
  materialIDToSetOnPallet: number;
@@ -853,6 +853,45 @@ export class JobsClient {
853
853
  }
854
854
  return Promise.resolve(null);
855
855
  }
856
+ cancelLoad(materialId, operName, request, signal) {
857
+ let url_ = this.baseUrl + "/api/v1/jobs/material/{materialId}/cancel-load?";
858
+ if (materialId === undefined || materialId === null)
859
+ throw new globalThis.Error("The parameter 'materialId' must be defined.");
860
+ url_ = url_.replace("{materialId}", encodeURIComponent("" + materialId));
861
+ if (operName !== undefined && operName !== null)
862
+ url_ += "operName=" + encodeURIComponent("" + operName) + "&";
863
+ url_ = url_.replace(/[?&]$/, "");
864
+ const content_ = JSON.stringify(request);
865
+ let options_ = {
866
+ body: content_,
867
+ method: "PUT",
868
+ signal,
869
+ headers: {
870
+ "Content-Type": "application/json",
871
+ },
872
+ };
873
+ return this.http.fetch(url_, options_).then((_response) => {
874
+ return this.processCancelLoad(_response);
875
+ });
876
+ }
877
+ processCancelLoad(response) {
878
+ const status = response.status;
879
+ let _headers = {};
880
+ if (response.headers && response.headers.forEach) {
881
+ response.headers.forEach((v, k) => (_headers[k] = v));
882
+ }
883
+ if (status === 200) {
884
+ return response.text().then((_responseText) => {
885
+ return;
886
+ });
887
+ }
888
+ else if (status !== 200 && status !== 204) {
889
+ return response.text().then((_responseText) => {
890
+ return throwException("An unexpected server error occurred.", status, _responseText, _headers);
891
+ });
892
+ }
893
+ return Promise.resolve(null);
894
+ }
856
895
  invalidatePalletCycle(materialId, operName, changeCastingTo, changeJobUniqueTo, process, signal) {
857
896
  let url_ = this.baseUrl + "/api/v1/jobs/material/{materialId}/invalidate-process?";
858
897
  if (materialId === undefined || materialId === null)
@@ -2239,7 +2278,6 @@ export class FMSInfo {
2239
2278
  this.openIDConnectClientId = _data["OpenIDConnectClientId"];
2240
2279
  this.usingLabelPrinterForSerials = _data["UsingLabelPrinterForSerials"];
2241
2280
  this.useClientPrinterForLabels = _data["UseClientPrinterForLabels"];
2242
- this.allowQuarantineToCancelLoad = _data["AllowQuarantineToCancelLoad"];
2243
2281
  this.quarantineQueue = _data["QuarantineQueue"];
2244
2282
  this.customStationMonitorDialogUrl = _data["CustomStationMonitorDialogUrl"];
2245
2283
  this.supportsRebookings = _data["SupportsRebookings"];
@@ -2287,7 +2325,6 @@ export class FMSInfo {
2287
2325
  data["OpenIDConnectClientId"] = this.openIDConnectClientId;
2288
2326
  data["UsingLabelPrinterForSerials"] = this.usingLabelPrinterForSerials;
2289
2327
  data["UseClientPrinterForLabels"] = this.useClientPrinterForLabels;
2290
- data["AllowQuarantineToCancelLoad"] = this.allowQuarantineToCancelLoad;
2291
2328
  data["QuarantineQueue"] = this.quarantineQueue;
2292
2329
  data["CustomStationMonitorDialogUrl"] = this.customStationMonitorDialogUrl;
2293
2330
  data["SupportsRebookings"] = this.supportsRebookings;
@@ -3982,6 +4019,7 @@ export class InProcessMaterialAction {
3982
4019
  if (_data) {
3983
4020
  this.type = _data["Type"];
3984
4021
  this.workId = _data["WorkId"];
4022
+ this.loadCancellationId = _data["LoadCancellationId"];
3985
4023
  this.loadOntoPalletNum = _data["LoadOntoPalletNum"];
3986
4024
  this.loadOntoFace = _data["LoadOntoFace"];
3987
4025
  this.processAfterLoad = _data["ProcessAfterLoad"];
@@ -4008,6 +4046,7 @@ export class InProcessMaterialAction {
4008
4046
  data = typeof data === "object" ? data : {};
4009
4047
  data["Type"] = this.type;
4010
4048
  data["WorkId"] = this.workId;
4049
+ data["LoadCancellationId"] = this.loadCancellationId;
4011
4050
  data["LoadOntoPalletNum"] = this.loadOntoPalletNum;
4012
4051
  data["LoadOntoFace"] = this.loadOntoFace;
4013
4052
  data["ProcessAfterLoad"] = this.processAfterLoad;
@@ -5058,6 +5097,34 @@ export class QueuePosition {
5058
5097
  return data;
5059
5098
  }
5060
5099
  }
5100
+ export class CancelLoadRequest {
5101
+ constructor(data) {
5102
+ if (data) {
5103
+ for (var property in data) {
5104
+ if (data.hasOwnProperty(property))
5105
+ this[property] = data[property];
5106
+ }
5107
+ }
5108
+ }
5109
+ init(_data) {
5110
+ if (_data) {
5111
+ this.expectedLoadCancellationId = _data["ExpectedLoadCancellationId"];
5112
+ this.reason = _data["Reason"];
5113
+ }
5114
+ }
5115
+ static fromJS(data) {
5116
+ data = typeof data === "object" ? data : {};
5117
+ let result = new CancelLoadRequest();
5118
+ result.init(data);
5119
+ return result;
5120
+ }
5121
+ toJSON(data) {
5122
+ data = typeof data === "object" ? data : {};
5123
+ data["ExpectedLoadCancellationId"] = this.expectedLoadCancellationId;
5124
+ data["Reason"] = this.reason;
5125
+ return data;
5126
+ }
5127
+ }
5061
5128
  export class MatToPutOnPallet {
5062
5129
  constructor(data) {
5063
5130
  if (data) {
@@ -226,6 +226,9 @@ export function registerMockBackend(offsetSeconds, mockD, mockEvts) {
226
226
  signalMaterialForQuarantine() {
227
227
  return Promise.resolve();
228
228
  },
229
+ cancelLoad() {
230
+ return Promise.resolve();
231
+ },
229
232
  swapMaterialOnPallet() {
230
233
  return Promise.resolve();
231
234
  },
@@ -11,6 +11,7 @@ export interface JobAPI {
11
11
  addUnprocessedMaterialToQueue(jobUnique: string, lastCompletedProcess: number, queue: string, pos: number, operatorName: string | null, workorder: string | null, serial: string): Promise<Readonly<api.IInProcessMaterial> | undefined>;
12
12
  addUnallocatedCastingToQueue(castingName: string, queue: string, qty: number, operatrorName: string | null, workorder: string | null, serials: string[]): Promise<ReadonlyArray<Readonly<api.IInProcessMaterial>>>;
13
13
  signalMaterialForQuarantine(materialId: number, operName: string | null, reason: string | undefined): Promise<void>;
14
+ cancelLoad(materialId: number, operName: string | null, request: Readonly<api.ICancelLoadRequest>): Promise<void>;
14
15
  swapMaterialOnPallet(materialId: number, operName: string | null, mat: Readonly<api.IMatToPutOnPallet>): Promise<void>;
15
16
  invalidatePalletCycle(materialId: number, operName: string | null | undefined, changeCastingTo: string | null | undefined, changeJobUniqueTo: string | null | undefined, process: number): Promise<Readonly<api.IMaterialDetails> | null | undefined>;
16
17
  unscheduledRebookings(signal?: AbortSignal): Promise<ReadonlyArray<Readonly<api.IRebooking>>>;
@@ -64,7 +64,8 @@ export function setUserToken(u) {
64
64
  }
65
65
  /** Performs a request using the authenticated Insight user's bearer token, when present. */
66
66
  export function authenticatedFetch(url, init) {
67
- const headers = new Headers(init?.headers);
67
+ const headers = new Headers(url instanceof Request ? url.headers : undefined);
68
+ new Headers(init?.headers).forEach((value, name) => headers.set(name, value));
68
69
  if (userAccessToken) {
69
70
  headers.set("Authorization", "Bearer " + userAccessToken);
70
71
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@seedtactics/insight-client",
3
- "version": "16.8.4-beta.1",
3
+ "version": "16.8.4-beta.11",
4
4
  "license": "BSD-3-Clause",
5
5
  "repository": {
6
6
  "url": "https://github.com/SeedTactics/fms-insight"
@@ -11,7 +11,7 @@
11
11
  ],
12
12
  "type": "module",
13
13
  "exports": {
14
- "./bootstrap": "./dist/bootstrap.js",
14
+ "./extension": "./dist/extension.js",
15
15
  "./cell-status/*": "./dist/cell-status/*.js",
16
16
  "./components/*": "./dist/components/*.js",
17
17
  "./components/analysis/*": "./dist/components/analysis/*.js",
@@ -46,9 +46,9 @@
46
46
  "jotai-family": "^1.0.2",
47
47
  "jsbarcode": "^3.12.3",
48
48
  "oidc-client-ts": "^3.5.0",
49
- "react": "^19.2.7",
49
+ "react": "^19.2.8",
50
50
  "react-calendar": "^6.0.1",
51
- "react-dom": "^19.2.7",
51
+ "react-dom": "^19.2.8",
52
52
  "react-error-boundary": "^6.1.2",
53
53
  "react-resize-detector": "^12.3.0",
54
54
  "react-timeago": "^8.3.0",
@@ -61,16 +61,17 @@
61
61
  "@types/d3-sankey": "^0.12.5",
62
62
  "@types/d3-scale": "^4.0.9",
63
63
  "@types/d3-shape": "^3.1.8",
64
- "@types/node": "^26.1.1",
64
+ "@types/node": "^26.1.2",
65
65
  "@types/react": "^19.2.17",
66
66
  "@types/react-dom": "^19.2.3",
67
- "@vitejs/plugin-react": "^6.0.3",
67
+ "@vitejs/plugin-react": "^6.0.4",
68
68
  "@vitest/browser-playwright": "^4.1.10",
69
- "jsdom": "^29.1.1",
69
+ "jsdom": "^30.0.1",
70
70
  "nswag": "^14.7.1",
71
- "oxfmt": "^0.59.0",
72
- "oxlint": "^1.74.0",
73
- "oxlint-tsgolint": "^0.25.0",
71
+ "oxfmt": "^0.61.0",
72
+ "oxlint": "^1.76.0",
73
+ "oxlint-tsgolint": "^7.0.2001",
74
+ "playwright": "^1.62.0",
74
75
  "typescript": "^7.0.2",
75
76
  "vite": "^8.1.5",
76
77
  "vitest": "^4.1.10",
@@ -79,7 +80,7 @@
79
80
  "scripts": {
80
81
  "type-check": "tsc --noEmit --skipLibCheck",
81
82
  "lint": "oxlint --type-aware",
82
- "build": "tsc --noEmit --skipLibCheck && vite build",
83
+ "build": "vite build",
83
84
  "build:package": "tsc --project tsconfig.publish.json && cp -Tr ../../docs ./docs",
84
85
  "start": "vite",
85
86
  "test:unit": "vitest run --project unit",