@fmsim/api 2.0.0-beta.84 → 2.0.0-beta.88
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.
- package/custom-elements.json +113 -0
- package/dist/src/index.d.ts +22 -0
- package/dist/src/index.js +31 -1
- package/dist/src/index.js.map +1 -1
- package/dist/src/restful/machine.d.ts +29 -0
- package/dist/src/restful/machine.js +53 -0
- package/dist/src/restful/machine.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +2 -2
package/custom-elements.json
CHANGED
|
@@ -187,6 +187,62 @@
|
|
|
187
187
|
}
|
|
188
188
|
}
|
|
189
189
|
]
|
|
190
|
+
},
|
|
191
|
+
{
|
|
192
|
+
"kind": "function",
|
|
193
|
+
"name": "searchMachineUnits",
|
|
194
|
+
"return": {
|
|
195
|
+
"type": {
|
|
196
|
+
"text": "Promise<string[]>"
|
|
197
|
+
}
|
|
198
|
+
},
|
|
199
|
+
"parameters": [
|
|
200
|
+
{
|
|
201
|
+
"name": "type",
|
|
202
|
+
"type": {
|
|
203
|
+
"text": "string"
|
|
204
|
+
}
|
|
205
|
+
},
|
|
206
|
+
{
|
|
207
|
+
"name": "keyword",
|
|
208
|
+
"default": "''",
|
|
209
|
+
"type": {
|
|
210
|
+
"text": "string"
|
|
211
|
+
}
|
|
212
|
+
},
|
|
213
|
+
{
|
|
214
|
+
"name": "opts",
|
|
215
|
+
"default": "{}",
|
|
216
|
+
"type": {
|
|
217
|
+
"text": "MachineUnitSearchOptions"
|
|
218
|
+
}
|
|
219
|
+
}
|
|
220
|
+
],
|
|
221
|
+
"description": "컴포넌트 타입 + 검색어로, MCS 에 이미 정의된 머신/유닛 ID 후보를 검색.\n보드 작화 시 컴포넌트 ID 를 자유 입력 대신 *검색해서 선택* 하기 위한 용도.\n\n서버에는 type(+unit 이면 machine)만 보내 후보 목록을 받고, keyword 는 받은 목록을\n클라이언트에서 **풀텍스트 매칭** 으로 필터한다 — 서버에 keyword 를 보내지 않는다.\n\n풀텍스트 전략: keyword 를 공백으로 토큰화하고, 각 토큰이 (순서 무관) 후보의 전체\n식별자(\"{machine} {unit}\", 대소문자 무관) 에 부분일치하면(AND) 매치로 본다.\n예) \"stk01 p03\" → STK01-P03 매치, \"p03 stk01\" 도 동일 매치.\n\n결과는 **1차원 id 리스트(string[])** — machine 타입이면 머신 id, unit 타입이면 unit id."
|
|
222
|
+
},
|
|
223
|
+
{
|
|
224
|
+
"kind": "function",
|
|
225
|
+
"name": "filterMachineUnitIds",
|
|
226
|
+
"return": {
|
|
227
|
+
"type": {
|
|
228
|
+
"text": "string[]"
|
|
229
|
+
}
|
|
230
|
+
},
|
|
231
|
+
"parameters": [
|
|
232
|
+
{
|
|
233
|
+
"name": "ids",
|
|
234
|
+
"type": {
|
|
235
|
+
"text": "string[]"
|
|
236
|
+
}
|
|
237
|
+
},
|
|
238
|
+
{
|
|
239
|
+
"name": "keyword",
|
|
240
|
+
"type": {
|
|
241
|
+
"text": "string"
|
|
242
|
+
}
|
|
243
|
+
}
|
|
244
|
+
],
|
|
245
|
+
"description": "머신/유닛 id 리스트를 keyword 로 **풀텍스트 필터** — 서버 재조회 없이 로컬에서 사용.\nkeyword 를 공백 토큰화하고, 각 토큰이 (순서 무관) id 에 부분일치(AND) 하면 통과.\n빈 keyword 는 전체 반환. 예: \"stk01 p03\" ↔ \"STK01-P03\", \"p03 stk01\" 동일."
|
|
190
246
|
}
|
|
191
247
|
],
|
|
192
248
|
"exports": [
|
|
@@ -198,6 +254,14 @@
|
|
|
198
254
|
"module": "src/graphql"
|
|
199
255
|
}
|
|
200
256
|
},
|
|
257
|
+
{
|
|
258
|
+
"kind": "js",
|
|
259
|
+
"name": "MachineUnitSearchOptions",
|
|
260
|
+
"declaration": {
|
|
261
|
+
"name": "MachineUnitSearchOptions",
|
|
262
|
+
"module": "./restful"
|
|
263
|
+
}
|
|
264
|
+
},
|
|
201
265
|
{
|
|
202
266
|
"kind": "js",
|
|
203
267
|
"name": "isRestfulAvailable",
|
|
@@ -301,6 +365,22 @@
|
|
|
301
365
|
"name": "getPopupData",
|
|
302
366
|
"module": "src/index.ts"
|
|
303
367
|
}
|
|
368
|
+
},
|
|
369
|
+
{
|
|
370
|
+
"kind": "js",
|
|
371
|
+
"name": "searchMachineUnits",
|
|
372
|
+
"declaration": {
|
|
373
|
+
"name": "searchMachineUnits",
|
|
374
|
+
"module": "src/index.ts"
|
|
375
|
+
}
|
|
376
|
+
},
|
|
377
|
+
{
|
|
378
|
+
"kind": "js",
|
|
379
|
+
"name": "filterMachineUnitIds",
|
|
380
|
+
"declaration": {
|
|
381
|
+
"name": "filterMachineUnitIds",
|
|
382
|
+
"module": "src/index.ts"
|
|
383
|
+
}
|
|
304
384
|
}
|
|
305
385
|
]
|
|
306
386
|
},
|
|
@@ -2123,6 +2203,31 @@
|
|
|
2123
2203
|
}
|
|
2124
2204
|
}
|
|
2125
2205
|
]
|
|
2206
|
+
},
|
|
2207
|
+
{
|
|
2208
|
+
"kind": "function",
|
|
2209
|
+
"name": "fetchMachineUnits",
|
|
2210
|
+
"return": {
|
|
2211
|
+
"type": {
|
|
2212
|
+
"text": "Promise<string[]>"
|
|
2213
|
+
}
|
|
2214
|
+
},
|
|
2215
|
+
"parameters": [
|
|
2216
|
+
{
|
|
2217
|
+
"name": "type",
|
|
2218
|
+
"type": {
|
|
2219
|
+
"text": "string"
|
|
2220
|
+
}
|
|
2221
|
+
},
|
|
2222
|
+
{
|
|
2223
|
+
"name": "opts",
|
|
2224
|
+
"default": "{}",
|
|
2225
|
+
"type": {
|
|
2226
|
+
"text": "MachineUnitSearchOptions"
|
|
2227
|
+
}
|
|
2228
|
+
}
|
|
2229
|
+
],
|
|
2230
|
+
"description": "컴포넌트 타입으로, 서버에 이미 정의된 머신/유닛 ID 후보를 조회.\n\n포커스 시 **항상 기존 방식(getPopupData 와 동일) 으로 실제 HTTP 호출** 한다.\n호출 대상은 getRestServiceFullPath() 가 결정한다:\n - 프로덕션(fmsim-restful): lv_server_ip_port 가 설정되어 MCS LV RESTful 호스트로 나감 (기존과 동일)\n - 테스트(fmsim): lv_server_ip_port 가 없어 same-origin 으로 나가고, fmsim 앱 서버의\n mock 라우트가 테스트 결과를 응답한다.\n\n요청 규약:\n GET {base}/machineUnits?type={type}[&machine={parentMachine}]\n - type : 컴포넌트 타입 (path 가 아니라 query 파라미터)\n - machine: unit 타입일 때만 — 부모 머신 id 로 조회를 좁힌다. machine 타입이면 생략.\n - keyword: 서버로 보내지 않는다 (후보 목록을 받아 클라이언트에서 풀텍스트 필터).\n\n결과는 **1차원 id 리스트(string[])** — machine 타입이면 머신 id, unit 타입이면 unit id.\n(머신별 그룹핑 없음.)\n\n서버 응답 호환 — 다음 형태를 모두 수용:\n - string[] (정규)\n - { ids: string[] } | { items: [] } | { data: [] }\n - 객체 배열 → 각 항목의 id/name/unit/machine 필드를 추출"
|
|
2126
2231
|
}
|
|
2127
2232
|
],
|
|
2128
2233
|
"exports": [
|
|
@@ -2133,6 +2238,14 @@
|
|
|
2133
2238
|
"name": "getPopupData",
|
|
2134
2239
|
"module": "src/restful/machine.ts"
|
|
2135
2240
|
}
|
|
2241
|
+
},
|
|
2242
|
+
{
|
|
2243
|
+
"kind": "js",
|
|
2244
|
+
"name": "fetchMachineUnits",
|
|
2245
|
+
"declaration": {
|
|
2246
|
+
"name": "fetchMachineUnits",
|
|
2247
|
+
"module": "src/restful/machine.ts"
|
|
2248
|
+
}
|
|
2136
2249
|
}
|
|
2137
2250
|
]
|
|
2138
2251
|
},
|
package/dist/src/index.d.ts
CHANGED
|
@@ -1,4 +1,6 @@
|
|
|
1
1
|
export * from './graphql';
|
|
2
|
+
import type { MachineUnitSearchOptions } from './restful';
|
|
3
|
+
export type { MachineUnitSearchOptions } from './restful';
|
|
2
4
|
import { Board } from './types';
|
|
3
5
|
export declare function isRestfulAvailable(): string | null;
|
|
4
6
|
export declare function fetchGroupList(): Promise<any>;
|
|
@@ -13,3 +15,23 @@ export declare function themesColorMap(): Promise<string[]>;
|
|
|
13
15
|
export declare function themesColorRange(): Promise<string[]>;
|
|
14
16
|
export declare function themesAnimationMap(): Promise<string[]>;
|
|
15
17
|
export declare function getPopupData(type: string, id: string): Promise<any>;
|
|
18
|
+
/**
|
|
19
|
+
* 컴포넌트 타입 + 검색어로, MCS 에 이미 정의된 머신/유닛 ID 후보를 검색.
|
|
20
|
+
* 보드 작화 시 컴포넌트 ID 를 자유 입력 대신 *검색해서 선택* 하기 위한 용도.
|
|
21
|
+
*
|
|
22
|
+
* 서버에는 type(+unit 이면 machine)만 보내 후보 목록을 받고, keyword 는 받은 목록을
|
|
23
|
+
* 클라이언트에서 **풀텍스트 매칭** 으로 필터한다 — 서버에 keyword 를 보내지 않는다.
|
|
24
|
+
*
|
|
25
|
+
* 풀텍스트 전략: keyword 를 공백으로 토큰화하고, 각 토큰이 (순서 무관) 후보의 전체
|
|
26
|
+
* 식별자("{machine} {unit}", 대소문자 무관) 에 부분일치하면(AND) 매치로 본다.
|
|
27
|
+
* 예) "stk01 p03" → STK01-P03 매치, "p03 stk01" 도 동일 매치.
|
|
28
|
+
*
|
|
29
|
+
* 결과는 **1차원 id 리스트(string[])** — machine 타입이면 머신 id, unit 타입이면 unit id.
|
|
30
|
+
*/
|
|
31
|
+
export declare function searchMachineUnits(type: string, keyword?: string, opts?: MachineUnitSearchOptions): Promise<string[]>;
|
|
32
|
+
/**
|
|
33
|
+
* 머신/유닛 id 리스트를 keyword 로 **풀텍스트 필터** — 서버 재조회 없이 로컬에서 사용.
|
|
34
|
+
* keyword 를 공백 토큰화하고, 각 토큰이 (순서 무관) id 에 부분일치(AND) 하면 통과.
|
|
35
|
+
* 빈 keyword 는 전체 반환. 예: "stk01 p03" ↔ "STK01-P03", "p03 stk01" 동일.
|
|
36
|
+
*/
|
|
37
|
+
export declare function filterMachineUnitIds(ids: string[], keyword: string): string[];
|
package/dist/src/index.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
export * from './graphql';
|
|
2
2
|
import { themesColorMap as graphqlThemesColorMap, themesColorRange as graphqlThemesColorRange, themesAnimationMap as graphqlThemesAnimationMap } from './graphql';
|
|
3
3
|
import { getPopupData as restfulGetPopupData, themesColorMap as restfulThemesColorMap, themesColorRange as restfulThemesColorRange, themesAnimationMap as restfulThemesAnimationMap } from './restful';
|
|
4
|
-
import { fetchGroupList as restfulFetchGroupList, fetchBoardList as restfulFetchBoardList, createBoard as restfulCreateBoard, fetchBoardById as restfulFetchBoardById, fetchBoardNameById as restfulFetchBoardNameById, reorderBoard as restfulReorderBoard, fetchPlayback as restfulFetchPlayback, fetchCarrierLocationHistory as restfulFetchCarrierLocationHistory } from './restful';
|
|
4
|
+
import { fetchGroupList as restfulFetchGroupList, fetchBoardList as restfulFetchBoardList, createBoard as restfulCreateBoard, fetchBoardById as restfulFetchBoardById, fetchBoardNameById as restfulFetchBoardNameById, reorderBoard as restfulReorderBoard, fetchPlayback as restfulFetchPlayback, fetchCarrierLocationHistory as restfulFetchCarrierLocationHistory, fetchMachineUnits as restfulFetchMachineUnits } from './restful';
|
|
5
5
|
import { fetchGroupList as graphqlFetchGroupList, fetchBoardList as graphqlFetchBoardList, createBoard as graphqlCreateBoard, fetchBoardById as graphqlFetchBoardById, fetchBoardNameById as graphqlFetchBoardNameById, reorderBoard as graphqlReorderBoard, fetchPlayback as graphqlFetchPlayback, fetchCarrierLocationHistory as graphqlFetchCarrierLocationHistory } from './graphql';
|
|
6
6
|
export function isRestfulAvailable() {
|
|
7
7
|
return sessionStorage.getItem('lv_server_ip_port');
|
|
@@ -113,4 +113,34 @@ export async function getPopupData(type, id) {
|
|
|
113
113
|
await new Promise(resolve => setTimeout(resolve, 1000));
|
|
114
114
|
}
|
|
115
115
|
}
|
|
116
|
+
/**
|
|
117
|
+
* 컴포넌트 타입 + 검색어로, MCS 에 이미 정의된 머신/유닛 ID 후보를 검색.
|
|
118
|
+
* 보드 작화 시 컴포넌트 ID 를 자유 입력 대신 *검색해서 선택* 하기 위한 용도.
|
|
119
|
+
*
|
|
120
|
+
* 서버에는 type(+unit 이면 machine)만 보내 후보 목록을 받고, keyword 는 받은 목록을
|
|
121
|
+
* 클라이언트에서 **풀텍스트 매칭** 으로 필터한다 — 서버에 keyword 를 보내지 않는다.
|
|
122
|
+
*
|
|
123
|
+
* 풀텍스트 전략: keyword 를 공백으로 토큰화하고, 각 토큰이 (순서 무관) 후보의 전체
|
|
124
|
+
* 식별자("{machine} {unit}", 대소문자 무관) 에 부분일치하면(AND) 매치로 본다.
|
|
125
|
+
* 예) "stk01 p03" → STK01-P03 매치, "p03 stk01" 도 동일 매치.
|
|
126
|
+
*
|
|
127
|
+
* 결과는 **1차원 id 리스트(string[])** — machine 타입이면 머신 id, unit 타입이면 unit id.
|
|
128
|
+
*/
|
|
129
|
+
export async function searchMachineUnits(type, keyword = '', opts = {}) {
|
|
130
|
+
return filterMachineUnitIds(await restfulFetchMachineUnits(type, opts), keyword);
|
|
131
|
+
}
|
|
132
|
+
/**
|
|
133
|
+
* 머신/유닛 id 리스트를 keyword 로 **풀텍스트 필터** — 서버 재조회 없이 로컬에서 사용.
|
|
134
|
+
* keyword 를 공백 토큰화하고, 각 토큰이 (순서 무관) id 에 부분일치(AND) 하면 통과.
|
|
135
|
+
* 빈 keyword 는 전체 반환. 예: "stk01 p03" ↔ "STK01-P03", "p03 stk01" 동일.
|
|
136
|
+
*/
|
|
137
|
+
export function filterMachineUnitIds(ids, keyword) {
|
|
138
|
+
const terms = keyword.trim().toLowerCase().split(/\s+/).filter(Boolean);
|
|
139
|
+
if (!terms.length)
|
|
140
|
+
return ids;
|
|
141
|
+
return ids.filter(id => {
|
|
142
|
+
const s = id.toLowerCase();
|
|
143
|
+
return terms.every(t => s.includes(t));
|
|
144
|
+
});
|
|
145
|
+
}
|
|
116
146
|
//# sourceMappingURL=index.js.map
|
package/dist/src/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"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","sourcesContent":["export * from './graphql'\n\nimport {\n themesColorMap as graphqlThemesColorMap,\n themesColorRange as graphqlThemesColorRange,\n themesAnimationMap as graphqlThemesAnimationMap\n} from './graphql'\n\nimport {\n getPopupData as restfulGetPopupData,\n themesColorMap as restfulThemesColorMap,\n themesColorRange as restfulThemesColorRange,\n themesAnimationMap as restfulThemesAnimationMap\n} from './restful'\n\nimport {\n fetchGroupList as restfulFetchGroupList,\n fetchBoardList as restfulFetchBoardList,\n createBoard as restfulCreateBoard,\n fetchBoardById as restfulFetchBoardById,\n fetchBoardNameById as restfulFetchBoardNameById,\n reorderBoard as restfulReorderBoard,\n fetchPlayback as restfulFetchPlayback,\n fetchCarrierLocationHistory as restfulFetchCarrierLocationHistory\n} from './restful'\n\nimport {\n fetchGroupList as graphqlFetchGroupList,\n fetchBoardList as graphqlFetchBoardList,\n createBoard as graphqlCreateBoard,\n fetchBoardById as graphqlFetchBoardById,\n fetchBoardNameById as graphqlFetchBoardNameById,\n reorderBoard as graphqlReorderBoard,\n fetchPlayback as graphqlFetchPlayback,\n fetchCarrierLocationHistory as graphqlFetchCarrierLocationHistory\n} from './graphql'\n\nimport { Board } from './types'\n\nexport function isRestfulAvailable() {\n return sessionStorage.getItem('lv_server_ip_port')\n}\n\nexport async function fetchGroupList() {\n if (isRestfulAvailable()) {\n return await restfulFetchGroupList()\n } else {\n return await graphqlFetchGroupList()\n }\n}\n\nexport async function fetchBoardList(listParam: any = {}) {\n if (isRestfulAvailable()) {\n return await restfulFetchBoardList(listParam)\n } else {\n return await graphqlFetchBoardList(listParam)\n }\n}\n\nexport async function reorderBoard(id: string, prevId?: string, nextId?: string) {\n if (isRestfulAvailable()) {\n return await restfulReorderBoard(id, prevId, nextId)\n } else {\n return await graphqlReorderBoard(id, prevId, nextId)\n }\n}\n\nexport async function fetchPlayback(\n startTime: string,\n endTime?: string,\n includeSnapshot: boolean = true,\n count?: number\n) {\n if (isRestfulAvailable()) {\n return await restfulFetchPlayback(startTime, endTime, includeSnapshot, count)\n } else {\n return await graphqlFetchPlayback(startTime, endTime, includeSnapshot, count)\n }\n}\n\nexport async function fetchCarrierLocationHistory(\n startTime: string,\n endTime: string,\n carrierName: string\n) {\n if (isRestfulAvailable()) {\n return await restfulFetchCarrierLocationHistory(startTime, endTime, carrierName)\n } else {\n return await graphqlFetchCarrierLocationHistory(startTime, endTime, carrierName)\n }\n}\n\nexport async function fetchBoardById(id: string, cachedUpdatedAt?: string) {\n if (isRestfulAvailable()) {\n return await restfulFetchBoardById(id, cachedUpdatedAt)\n } else {\n return await graphqlFetchBoardById(id, cachedUpdatedAt)\n }\n}\n\nexport async function fetchBoardNameById(id: string): Promise<string> {\n if (isRestfulAvailable()) {\n return await restfulFetchBoardNameById(id)\n } else {\n return await graphqlFetchBoardNameById(id)\n }\n}\n\nexport async function createBoard(board: Board) {\n if (isRestfulAvailable()) {\n return await restfulCreateBoard(board)\n } else {\n return await graphqlCreateBoard(board)\n }\n}\n\nexport async function themesColorMap() {\n if (isRestfulAvailable()) {\n return await restfulThemesColorMap()\n } else {\n return await graphqlThemesColorMap()\n }\n}\n\nexport async function themesColorRange() {\n if (isRestfulAvailable()) {\n return await restfulThemesColorRange()\n } else {\n return await graphqlThemesColorRange()\n }\n}\n\nexport async function themesAnimationMap() {\n if (isRestfulAvailable()) {\n return await restfulThemesAnimationMap()\n } else {\n return await graphqlThemesAnimationMap()\n }\n}\n\nexport async function getPopupData(type: string, id: string) {\n if (isRestfulAvailable()) {\n const response = (await restfulGetPopupData(type, id))?.data\n\n if (!response || !response.status) {\n document.dispatchEvent(\n new CustomEvent('notify', {\n detail: {\n level: 'error',\n message: 'Error : getPopupData'\n }\n })\n )\n throw new Error('Error : getPopupData')\n }\n\n return response.popupData\n } else {\n await new Promise(resolve => setTimeout(resolve, 1000))\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"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","sourcesContent":["export * from './graphql'\n\nimport {\n themesColorMap as graphqlThemesColorMap,\n themesColorRange as graphqlThemesColorRange,\n themesAnimationMap as graphqlThemesAnimationMap\n} from './graphql'\n\nimport {\n getPopupData as restfulGetPopupData,\n themesColorMap as restfulThemesColorMap,\n themesColorRange as restfulThemesColorRange,\n themesAnimationMap as restfulThemesAnimationMap\n} from './restful'\n\nimport {\n fetchGroupList as restfulFetchGroupList,\n fetchBoardList as restfulFetchBoardList,\n createBoard as restfulCreateBoard,\n fetchBoardById as restfulFetchBoardById,\n fetchBoardNameById as restfulFetchBoardNameById,\n reorderBoard as restfulReorderBoard,\n fetchPlayback as restfulFetchPlayback,\n fetchCarrierLocationHistory as restfulFetchCarrierLocationHistory,\n fetchMachineUnits as restfulFetchMachineUnits\n} from './restful'\n\nimport type { MachineUnitSearchOptions } from './restful'\nexport type { MachineUnitSearchOptions } from './restful'\n\nimport {\n fetchGroupList as graphqlFetchGroupList,\n fetchBoardList as graphqlFetchBoardList,\n createBoard as graphqlCreateBoard,\n fetchBoardById as graphqlFetchBoardById,\n fetchBoardNameById as graphqlFetchBoardNameById,\n reorderBoard as graphqlReorderBoard,\n fetchPlayback as graphqlFetchPlayback,\n fetchCarrierLocationHistory as graphqlFetchCarrierLocationHistory\n} from './graphql'\n\nimport { Board } from './types'\n\nexport function isRestfulAvailable() {\n return sessionStorage.getItem('lv_server_ip_port')\n}\n\nexport async function fetchGroupList() {\n if (isRestfulAvailable()) {\n return await restfulFetchGroupList()\n } else {\n return await graphqlFetchGroupList()\n }\n}\n\nexport async function fetchBoardList(listParam: any = {}) {\n if (isRestfulAvailable()) {\n return await restfulFetchBoardList(listParam)\n } else {\n return await graphqlFetchBoardList(listParam)\n }\n}\n\nexport async function reorderBoard(id: string, prevId?: string, nextId?: string) {\n if (isRestfulAvailable()) {\n return await restfulReorderBoard(id, prevId, nextId)\n } else {\n return await graphqlReorderBoard(id, prevId, nextId)\n }\n}\n\nexport async function fetchPlayback(\n startTime: string,\n endTime?: string,\n includeSnapshot: boolean = true,\n count?: number\n) {\n if (isRestfulAvailable()) {\n return await restfulFetchPlayback(startTime, endTime, includeSnapshot, count)\n } else {\n return await graphqlFetchPlayback(startTime, endTime, includeSnapshot, count)\n }\n}\n\nexport async function fetchCarrierLocationHistory(\n startTime: string,\n endTime: string,\n carrierName: string\n) {\n if (isRestfulAvailable()) {\n return await restfulFetchCarrierLocationHistory(startTime, endTime, carrierName)\n } else {\n return await graphqlFetchCarrierLocationHistory(startTime, endTime, carrierName)\n }\n}\n\nexport async function fetchBoardById(id: string, cachedUpdatedAt?: string) {\n if (isRestfulAvailable()) {\n return await restfulFetchBoardById(id, cachedUpdatedAt)\n } else {\n return await graphqlFetchBoardById(id, cachedUpdatedAt)\n }\n}\n\nexport async function fetchBoardNameById(id: string): Promise<string> {\n if (isRestfulAvailable()) {\n return await restfulFetchBoardNameById(id)\n } else {\n return await graphqlFetchBoardNameById(id)\n }\n}\n\nexport async function createBoard(board: Board) {\n if (isRestfulAvailable()) {\n return await restfulCreateBoard(board)\n } else {\n return await graphqlCreateBoard(board)\n }\n}\n\nexport async function themesColorMap() {\n if (isRestfulAvailable()) {\n return await restfulThemesColorMap()\n } else {\n return await graphqlThemesColorMap()\n }\n}\n\nexport async function themesColorRange() {\n if (isRestfulAvailable()) {\n return await restfulThemesColorRange()\n } else {\n return await graphqlThemesColorRange()\n }\n}\n\nexport async function themesAnimationMap() {\n if (isRestfulAvailable()) {\n return await restfulThemesAnimationMap()\n } else {\n return await graphqlThemesAnimationMap()\n }\n}\n\nexport async function getPopupData(type: string, id: string) {\n if (isRestfulAvailable()) {\n const response = (await restfulGetPopupData(type, id))?.data\n\n if (!response || !response.status) {\n document.dispatchEvent(\n new CustomEvent('notify', {\n detail: {\n level: 'error',\n message: 'Error : getPopupData'\n }\n })\n )\n throw new Error('Error : getPopupData')\n }\n\n return response.popupData\n } else {\n await new Promise(resolve => setTimeout(resolve, 1000))\n }\n}\n\n/**\n * 컴포넌트 타입 + 검색어로, MCS 에 이미 정의된 머신/유닛 ID 후보를 검색.\n * 보드 작화 시 컴포넌트 ID 를 자유 입력 대신 *검색해서 선택* 하기 위한 용도.\n *\n * 서버에는 type(+unit 이면 machine)만 보내 후보 목록을 받고, keyword 는 받은 목록을\n * 클라이언트에서 **풀텍스트 매칭** 으로 필터한다 — 서버에 keyword 를 보내지 않는다.\n *\n * 풀텍스트 전략: keyword 를 공백으로 토큰화하고, 각 토큰이 (순서 무관) 후보의 전체\n * 식별자(\"{machine} {unit}\", 대소문자 무관) 에 부분일치하면(AND) 매치로 본다.\n * 예) \"stk01 p03\" → STK01-P03 매치, \"p03 stk01\" 도 동일 매치.\n *\n * 결과는 **1차원 id 리스트(string[])** — machine 타입이면 머신 id, unit 타입이면 unit id.\n */\nexport async function searchMachineUnits(\n type: string,\n keyword: string = '',\n opts: MachineUnitSearchOptions = {}\n): Promise<string[]> {\n return filterMachineUnitIds(await restfulFetchMachineUnits(type, opts), keyword)\n}\n\n/**\n * 머신/유닛 id 리스트를 keyword 로 **풀텍스트 필터** — 서버 재조회 없이 로컬에서 사용.\n * keyword 를 공백 토큰화하고, 각 토큰이 (순서 무관) id 에 부분일치(AND) 하면 통과.\n * 빈 keyword 는 전체 반환. 예: \"stk01 p03\" ↔ \"STK01-P03\", \"p03 stk01\" 동일.\n */\nexport function filterMachineUnitIds(ids: string[], keyword: string): string[] {\n const terms = keyword.trim().toLowerCase().split(/\\s+/).filter(Boolean)\n if (!terms.length) return ids\n return ids.filter(id => {\n const s = id.toLowerCase()\n return terms.every(t => s.includes(t))\n })\n}\n"]}
|
|
@@ -1 +1,30 @@
|
|
|
1
|
+
/** 머신/유닛 ID 조회 옵션. */
|
|
2
|
+
export interface MachineUnitSearchOptions {
|
|
3
|
+
/** 부모 machine id — unit 타입 조회를 그 machine 소속으로 좁힌다 (machine 타입이면 생략). */
|
|
4
|
+
machine?: string;
|
|
5
|
+
}
|
|
1
6
|
export declare function getPopupData(type: string, id: string): Promise<import("./common").RestfulReturnType | undefined>;
|
|
7
|
+
/**
|
|
8
|
+
* 컴포넌트 타입으로, 서버에 이미 정의된 머신/유닛 ID 후보를 조회.
|
|
9
|
+
*
|
|
10
|
+
* 포커스 시 **항상 기존 방식(getPopupData 와 동일) 으로 실제 HTTP 호출** 한다.
|
|
11
|
+
* 호출 대상은 getRestServiceFullPath() 가 결정한다:
|
|
12
|
+
* - 프로덕션(fmsim-restful): lv_server_ip_port 가 설정되어 MCS LV RESTful 호스트로 나감 (기존과 동일)
|
|
13
|
+
* - 테스트(fmsim): lv_server_ip_port 가 없어 same-origin 으로 나가고, fmsim 앱 서버의
|
|
14
|
+
* mock 라우트가 테스트 결과를 응답한다.
|
|
15
|
+
*
|
|
16
|
+
* 요청 규약:
|
|
17
|
+
* GET {base}/machineUnits?type={type}[&machine={parentMachine}]
|
|
18
|
+
* - type : 컴포넌트 타입 (path 가 아니라 query 파라미터)
|
|
19
|
+
* - machine: unit 타입일 때만 — 부모 머신 id 로 조회를 좁힌다. machine 타입이면 생략.
|
|
20
|
+
* - keyword: 서버로 보내지 않는다 (후보 목록을 받아 클라이언트에서 풀텍스트 필터).
|
|
21
|
+
*
|
|
22
|
+
* 결과는 **1차원 id 리스트(string[])** — machine 타입이면 머신 id, unit 타입이면 unit id.
|
|
23
|
+
* (머신별 그룹핑 없음.)
|
|
24
|
+
*
|
|
25
|
+
* 서버 응답 호환 — 다음 형태를 모두 수용:
|
|
26
|
+
* - string[] (정규)
|
|
27
|
+
* - { ids: string[] } | { items: [] } | { data: [] }
|
|
28
|
+
* - 객체 배열 → 각 항목의 id/name/unit/machine 필드를 추출
|
|
29
|
+
*/
|
|
30
|
+
export declare function fetchMachineUnits(type: string, opts?: MachineUnitSearchOptions): Promise<string[]>;
|
|
@@ -2,4 +2,57 @@ import { callApi, getRestServiceFullPath } from './common';
|
|
|
2
2
|
export function getPopupData(type, id) {
|
|
3
3
|
return callApi(getRestServiceFullPath() + `/popup/${(type || '').toLowerCase()}/${id}`, 'get', null, null);
|
|
4
4
|
}
|
|
5
|
+
/**
|
|
6
|
+
* 컴포넌트 타입으로, 서버에 이미 정의된 머신/유닛 ID 후보를 조회.
|
|
7
|
+
*
|
|
8
|
+
* 포커스 시 **항상 기존 방식(getPopupData 와 동일) 으로 실제 HTTP 호출** 한다.
|
|
9
|
+
* 호출 대상은 getRestServiceFullPath() 가 결정한다:
|
|
10
|
+
* - 프로덕션(fmsim-restful): lv_server_ip_port 가 설정되어 MCS LV RESTful 호스트로 나감 (기존과 동일)
|
|
11
|
+
* - 테스트(fmsim): lv_server_ip_port 가 없어 same-origin 으로 나가고, fmsim 앱 서버의
|
|
12
|
+
* mock 라우트가 테스트 결과를 응답한다.
|
|
13
|
+
*
|
|
14
|
+
* 요청 규약:
|
|
15
|
+
* GET {base}/machineUnits?type={type}[&machine={parentMachine}]
|
|
16
|
+
* - type : 컴포넌트 타입 (path 가 아니라 query 파라미터)
|
|
17
|
+
* - machine: unit 타입일 때만 — 부모 머신 id 로 조회를 좁힌다. machine 타입이면 생략.
|
|
18
|
+
* - keyword: 서버로 보내지 않는다 (후보 목록을 받아 클라이언트에서 풀텍스트 필터).
|
|
19
|
+
*
|
|
20
|
+
* 결과는 **1차원 id 리스트(string[])** — machine 타입이면 머신 id, unit 타입이면 unit id.
|
|
21
|
+
* (머신별 그룹핑 없음.)
|
|
22
|
+
*
|
|
23
|
+
* 서버 응답 호환 — 다음 형태를 모두 수용:
|
|
24
|
+
* - string[] (정규)
|
|
25
|
+
* - { ids: string[] } | { items: [] } | { data: [] }
|
|
26
|
+
* - 객체 배열 → 각 항목의 id/name/unit/machine 필드를 추출
|
|
27
|
+
*/
|
|
28
|
+
export async function fetchMachineUnits(type, opts = {}) {
|
|
29
|
+
const query = new URLSearchParams();
|
|
30
|
+
if (type)
|
|
31
|
+
query.set('type', type);
|
|
32
|
+
if (opts.machine)
|
|
33
|
+
query.set('machine', opts.machine);
|
|
34
|
+
const qs = query.toString();
|
|
35
|
+
const url = getRestServiceFullPath() + `/machineUnits` + (qs ? `?${qs}` : '');
|
|
36
|
+
const response = await callApi(url, 'get', null, null);
|
|
37
|
+
return normalizeIds(response === null || response === void 0 ? void 0 : response.data);
|
|
38
|
+
}
|
|
39
|
+
/** 서버 응답을 1차원 id 리스트(string[]) 로 정규화. */
|
|
40
|
+
function normalizeIds(body) {
|
|
41
|
+
if (!body)
|
|
42
|
+
return [];
|
|
43
|
+
const arr = Array.isArray(body)
|
|
44
|
+
? body
|
|
45
|
+
: Array.isArray(body.ids)
|
|
46
|
+
? body.ids
|
|
47
|
+
: Array.isArray(body.items)
|
|
48
|
+
? body.items
|
|
49
|
+
: Array.isArray(body.data)
|
|
50
|
+
? body.data
|
|
51
|
+
: null;
|
|
52
|
+
if (!arr)
|
|
53
|
+
return [];
|
|
54
|
+
return arr
|
|
55
|
+
.map((x) => { var _a, _b, _c, _d; return (typeof x === 'string' ? x : (_d = (_c = (_b = (_a = x === null || x === void 0 ? void 0 : x.id) !== null && _a !== void 0 ? _a : x === null || x === void 0 ? void 0 : x.name) !== null && _b !== void 0 ? _b : x === null || x === void 0 ? void 0 : x.unit) !== null && _c !== void 0 ? _c : x === null || x === void 0 ? void 0 : x.machine) !== null && _d !== void 0 ? _d : ''); })
|
|
56
|
+
.filter((s) => typeof s === 'string' && s.length > 0);
|
|
57
|
+
}
|
|
5
58
|
//# sourceMappingURL=machine.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"machine.js","sourceRoot":"","sources":["../../../src/restful/machine.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,sBAAsB,EAAE,MAAM,UAAU,CAAA;
|
|
1
|
+
{"version":3,"file":"machine.js","sourceRoot":"","sources":["../../../src/restful/machine.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,sBAAsB,EAAE,MAAM,UAAU,CAAA;AAQ1D,MAAM,UAAU,YAAY,CAAC,IAAY,EAAE,EAAU;IACnD,OAAO,OAAO,CAAC,sBAAsB,EAAE,GAAG,UAAU,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,WAAW,EAAE,IAAI,EAAE,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,CAAC,CAAA;AAC5G,CAAC;AAED;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,MAAM,CAAC,KAAK,UAAU,iBAAiB,CAAC,IAAY,EAAE,OAAiC,EAAE;IACvF,MAAM,KAAK,GAAG,IAAI,eAAe,EAAE,CAAA;IACnC,IAAI,IAAI;QAAE,KAAK,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC,CAAA;IACjC,IAAI,IAAI,CAAC,OAAO;QAAE,KAAK,CAAC,GAAG,CAAC,SAAS,EAAE,IAAI,CAAC,OAAO,CAAC,CAAA;IACpD,MAAM,EAAE,GAAG,KAAK,CAAC,QAAQ,EAAE,CAAA;IAE3B,MAAM,GAAG,GAAG,sBAAsB,EAAE,GAAG,eAAe,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAA;IAC7E,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,CAAC,CAAA;IAEtD,OAAO,YAAY,CAAC,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAE,IAAI,CAAC,CAAA;AACrC,CAAC;AAED,yCAAyC;AACzC,SAAS,YAAY,CAAC,IAAS;IAC7B,IAAI,CAAC,IAAI;QAAE,OAAO,EAAE,CAAA;IACpB,MAAM,GAAG,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC;QAC7B,CAAC,CAAC,IAAI;QACN,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC;YACvB,CAAC,CAAC,IAAI,CAAC,GAAG;YACV,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC;gBACzB,CAAC,CAAC,IAAI,CAAC,KAAK;gBACZ,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC;oBACxB,CAAC,CAAC,IAAI,CAAC,IAAI;oBACX,CAAC,CAAC,IAAI,CAAA;IACd,IAAI,CAAC,GAAG;QAAE,OAAO,EAAE,CAAA;IAEnB,OAAO,GAAG;SACP,GAAG,CAAC,CAAC,CAAM,EAAE,EAAE,uBAAC,OAAA,CAAC,OAAO,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAA,MAAA,MAAA,MAAA,CAAC,aAAD,CAAC,uBAAD,CAAC,CAAE,EAAE,mCAAI,CAAC,aAAD,CAAC,uBAAD,CAAC,CAAE,IAAI,mCAAI,CAAC,aAAD,CAAC,uBAAD,CAAC,CAAE,IAAI,mCAAI,CAAC,aAAD,CAAC,uBAAD,CAAC,CAAE,OAAO,mCAAI,EAAE,CAAC,CAAA,EAAA,CAAC;SAC9F,MAAM,CAAC,CAAC,CAAM,EAAe,EAAE,CAAC,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAA;AAC3E,CAAC","sourcesContent":["import { callApi, getRestServiceFullPath } from './common'\n\n/** 머신/유닛 ID 조회 옵션. */\nexport interface MachineUnitSearchOptions {\n /** 부모 machine id — unit 타입 조회를 그 machine 소속으로 좁힌다 (machine 타입이면 생략). */\n machine?: string\n}\n\nexport function getPopupData(type: string, id: string) {\n return callApi(getRestServiceFullPath() + `/popup/${(type || '').toLowerCase()}/${id}`, 'get', null, null)\n}\n\n/**\n * 컴포넌트 타입으로, 서버에 이미 정의된 머신/유닛 ID 후보를 조회.\n *\n * 포커스 시 **항상 기존 방식(getPopupData 와 동일) 으로 실제 HTTP 호출** 한다.\n * 호출 대상은 getRestServiceFullPath() 가 결정한다:\n * - 프로덕션(fmsim-restful): lv_server_ip_port 가 설정되어 MCS LV RESTful 호스트로 나감 (기존과 동일)\n * - 테스트(fmsim): lv_server_ip_port 가 없어 same-origin 으로 나가고, fmsim 앱 서버의\n * mock 라우트가 테스트 결과를 응답한다.\n *\n * 요청 규약:\n * GET {base}/machineUnits?type={type}[&machine={parentMachine}]\n * - type : 컴포넌트 타입 (path 가 아니라 query 파라미터)\n * - machine: unit 타입일 때만 — 부모 머신 id 로 조회를 좁힌다. machine 타입이면 생략.\n * - keyword: 서버로 보내지 않는다 (후보 목록을 받아 클라이언트에서 풀텍스트 필터).\n *\n * 결과는 **1차원 id 리스트(string[])** — machine 타입이면 머신 id, unit 타입이면 unit id.\n * (머신별 그룹핑 없음.)\n *\n * 서버 응답 호환 — 다음 형태를 모두 수용:\n * - string[] (정규)\n * - { ids: string[] } | { items: [] } | { data: [] }\n * - 객체 배열 → 각 항목의 id/name/unit/machine 필드를 추출\n */\nexport async function fetchMachineUnits(type: string, opts: MachineUnitSearchOptions = {}): Promise<string[]> {\n const query = new URLSearchParams()\n if (type) query.set('type', type)\n if (opts.machine) query.set('machine', opts.machine)\n const qs = query.toString()\n\n const url = getRestServiceFullPath() + `/machineUnits` + (qs ? `?${qs}` : '')\n const response = await callApi(url, 'get', null, null)\n\n return normalizeIds(response?.data)\n}\n\n/** 서버 응답을 1차원 id 리스트(string[]) 로 정규화. */\nfunction normalizeIds(body: any): string[] {\n if (!body) return []\n const arr = Array.isArray(body)\n ? body\n : Array.isArray(body.ids)\n ? body.ids\n : Array.isArray(body.items)\n ? body.items\n : Array.isArray(body.data)\n ? body.data\n : null\n if (!arr) return []\n\n return arr\n .map((x: any) => (typeof x === 'string' ? x : x?.id ?? x?.name ?? x?.unit ?? x?.machine ?? ''))\n .filter((s: any): s is string => typeof s === 'string' && s.length > 0)\n}\n"]}
|