@things-factory/board-ui 10.0.0-beta.8 → 10.0.0-beta.80
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/dist-client/apptools/favorite-tool.js +5 -5
- package/dist-client/apptools/favorite-tool.js.map +1 -1
- package/dist-client/board-list/board-tile-list.d.ts +6 -3
- package/dist-client/board-list/board-tile-list.js +316 -62
- package/dist-client/board-list/board-tile-list.js.map +1 -1
- package/dist-client/board-list/group-bar.js +3 -3
- package/dist-client/board-list/group-bar.js.map +1 -1
- package/dist-client/board-list/play-group-bar.d.ts +0 -1
- package/dist-client/board-list/play-group-bar.js +3 -6
- package/dist-client/board-list/play-group-bar.js.map +1 -1
- package/dist-client/board-provider.js +20 -8
- package/dist-client/board-provider.js.map +1 -1
- package/dist-client/data-grist/board-editor.js +4 -4
- package/dist-client/data-grist/board-editor.js.map +1 -1
- package/dist-client/data-grist/board-renderer.js +4 -4
- package/dist-client/data-grist/board-renderer.js.map +1 -1
- package/dist-client/graphql/attachment.d.ts +33 -0
- package/dist-client/graphql/attachment.js +87 -0
- package/dist-client/graphql/attachment.js.map +1 -0
- package/dist-client/graphql/board-import.d.ts +45 -0
- package/dist-client/graphql/board-import.js +104 -0
- package/dist-client/graphql/board-import.js.map +1 -0
- package/dist-client/graphql/board-template.js +1 -1
- package/dist-client/graphql/board-template.js.map +1 -1
- package/dist-client/graphql/board.d.ts +1 -0
- package/dist-client/graphql/board.js +28 -2
- package/dist-client/graphql/board.js.map +1 -1
- package/dist-client/graphql/group.js +1 -1
- package/dist-client/graphql/group.js.map +1 -1
- package/dist-client/graphql/play-group.js +3 -3
- package/dist-client/graphql/play-group.js.map +1 -1
- package/dist-client/pages/attachment-list-page.d.ts +16 -0
- package/dist-client/pages/attachment-list-page.js +63 -2
- package/dist-client/pages/attachment-list-page.js.map +1 -1
- package/dist-client/pages/board-action-dispatch.d.ts +31 -0
- package/dist-client/pages/board-action-dispatch.js +80 -0
- package/dist-client/pages/board-action-dispatch.js.map +1 -0
- package/dist-client/pages/board-action-dispatch.test.d.ts +1 -0
- package/dist-client/pages/board-action-dispatch.test.js +235 -0
- package/dist-client/pages/board-action-dispatch.test.js.map +1 -0
- package/dist-client/pages/board-create-wizard-page.d.ts +157 -0
- package/dist-client/pages/board-create-wizard-page.js +2176 -0
- package/dist-client/pages/board-create-wizard-page.js.map +1 -0
- package/dist-client/pages/board-edit-dispatch.d.ts +74 -0
- package/dist-client/pages/board-edit-dispatch.js +299 -0
- package/dist-client/pages/board-edit-dispatch.js.map +1 -0
- package/dist-client/pages/board-edit-dispatch.test.d.ts +1 -0
- package/dist-client/pages/board-edit-dispatch.test.js +858 -0
- package/dist-client/pages/board-edit-dispatch.test.js.map +1 -0
- package/dist-client/pages/board-list-page.d.ts +23 -3
- package/dist-client/pages/board-list-page.js +165 -77
- package/dist-client/pages/board-list-page.js.map +1 -1
- package/dist-client/pages/board-modeller-page.d.ts +134 -0
- package/dist-client/pages/board-modeller-page.js +725 -54
- package/dist-client/pages/board-modeller-page.js.map +1 -1
- package/dist-client/pages/board-player-by-name-page.js.map +1 -1
- package/dist-client/pages/board-player-page.js +14 -26
- package/dist-client/pages/board-player-page.js.map +1 -1
- package/dist-client/pages/board-viewer-by-name-page.d.ts +8 -1
- package/dist-client/pages/board-viewer-by-name-page.js +9 -1
- package/dist-client/pages/board-viewer-by-name-page.js.map +1 -1
- package/dist-client/pages/board-viewer-page.d.ts +2 -1
- package/dist-client/pages/board-viewer-page.js +52 -48
- package/dist-client/pages/board-viewer-page.js.map +1 -1
- package/dist-client/pages/play-list-page.d.ts +0 -1
- package/dist-client/pages/play-list-page.js +26 -33
- package/dist-client/pages/play-list-page.js.map +1 -1
- package/dist-client/pages/printable-board-viewer-page.js +2 -2
- package/dist-client/pages/printable-board-viewer-page.js.map +1 -1
- package/dist-client/route.d.ts +1 -1
- package/dist-client/route.js +3 -0
- package/dist-client/route.js.map +1 -1
- package/dist-client/setting-let/board-view-setting-let.js +1 -1
- package/dist-client/setting-let/board-view-setting-let.js.map +1 -1
- package/dist-client/tsconfig.tsbuildinfo +1 -1
- package/dist-client/utils/notify-helper.d.ts +7 -0
- package/dist-client/utils/notify-helper.js +28 -0
- package/dist-client/utils/notify-helper.js.map +1 -0
- package/dist-client/utils/query-utils.d.ts +1 -0
- package/dist-client/utils/query-utils.js +20 -0
- package/dist-client/utils/query-utils.js.map +1 -0
- package/dist-client/viewparts/board-basic-info.js +9 -13
- package/dist-client/viewparts/board-basic-info.js.map +1 -1
- package/dist-client/viewparts/board-template-info.d.ts +0 -1
- package/dist-client/viewparts/board-template-info.js +5 -13
- package/dist-client/viewparts/board-template-info.js.map +1 -1
- package/dist-client/viewparts/board-versions.js +1 -1
- package/dist-client/viewparts/board-versions.js.map +1 -1
- package/dist-client/viewparts/group-info-basic.js +2 -2
- package/dist-client/viewparts/group-info-basic.js.map +1 -1
- package/dist-client/viewparts/group-info-import.js +2 -2
- package/dist-client/viewparts/group-info-import.js.map +1 -1
- package/dist-client/viewparts/link-builder.js +1 -1
- package/dist-client/viewparts/link-builder.js.map +1 -1
- package/dist-client/viewparts/play-group-info-basic.js +2 -2
- package/dist-client/viewparts/play-group-info-basic.js.map +1 -1
- package/dist-server/tsconfig.tsbuildinfo +1 -1
- package/package.json +5 -4
- package/things-factory.config.js +1 -0
- package/translations/en.json +71 -30
- package/translations/ja.json +3 -29
- package/translations/ko.json +71 -30
- package/translations/ms.json +3 -29
- package/translations/zh.json +3 -29
|
@@ -89,7 +89,7 @@ export async function updateBoardTemplate(boardTemplate) {
|
|
|
89
89
|
visibility : String
|
|
90
90
|
}
|
|
91
91
|
*/
|
|
92
|
-
|
|
92
|
+
let { id, name, description, model, visibility } = boardTemplate;
|
|
93
93
|
model = JSON.stringify(model);
|
|
94
94
|
const response = await client.mutate({
|
|
95
95
|
mutation: gql `
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"board-template.js","sourceRoot":"","sources":["../../client/graphql/board-template.ts"],"names":[],"mappings":"AAAA,OAAO,GAAG,MAAM,aAAa,CAAA;AAE7B,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAA;AACzC,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAA;AAElD,MAAM,CAAC,KAAK,UAAU,sBAAsB,CAAC,SAAS,GAAG,EAAE;IACzD,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,KAAK,CAAC;QAClC,KAAK,EAAE,GAAG,CAAA;;yBAEW,UAAU,CAAC,SAAS,CAAC,SAAS,CAAC;;;;;;;;;;;;;KAanD;KACF,CAAC,CAAA;IAEF,OAAO,QAAQ,CAAC,IAAI,CAAA;AACtB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,kBAAkB,CAAC,EAAE;IACzC,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,KAAK,CAAC;QAClC,KAAK,EAAE,GAAG,CAAA;;;;;;;;;;;;;;;;;;;;;KAqBT;QACD,SAAS,EAAE,EAAE,EAAE,EAAE;KAClB,CAAC,CAAA;IAEF,OAAO,QAAQ,CAAC,IAAI,CAAA;AACtB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,mBAAmB,CAAC,aAAa;IACrD;;;;;;;MAOE;IAEF,aAAa,CAAC,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,KAAK,CAAC,CAAA;IAEzD,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC;QACnC,QAAQ,EAAE,GAAG,CAAA;;;;;;;;;;;;KAYZ;QACD,SAAS,EAAE;YACT,aAAa;SACd;KACF,CAAC,CAAA;IAEF,OAAO,QAAQ,CAAC,IAAI,CAAA;AACtB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,mBAAmB,CAAC,aAAa;IACrD;;;;;;;QAOI;IACJ,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE,UAAU,EAAE,GAAG,aAAa,CAAA;IAChE,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAA;IAE7B,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC;QACnC,QAAQ,EAAE,GAAG,CAAA;;;;;;;;;;;;KAYZ;QACD,SAAS,EAAE;YACT,EAAE;YACF,KAAK,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE,UAAU,EAAE;SAChD;KACF,CAAC,CAAA;IAEF,OAAO,QAAQ,CAAC,IAAI,CAAA;AACtB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,mBAAmB,CAAC,EAAE;IAC1C,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC;QACnC,QAAQ,EAAE,GAAG,CAAA;;;;KAIZ;QACD,SAAS,EAAE;YACT,EAAE;SACH;KACF,CAAC,CAAA;IAEF,OAAO,QAAQ,CAAC,IAAI,CAAA;AACtB,CAAC","sourcesContent":["import gql from 'graphql-tag'\n\nimport { client } from '@operato/graphql'\nimport { gqlBuilder } from '@things-factory/utils'\n\nexport async function fetchBoardTemplateList(listParam = {}) {\n const response = await client.query({\n query: gql`\n {\n boardTemplates(${gqlBuilder.buildArgs(listParam)}) {\n items {\n id\n name\n description\n thumbnail\n visibility\n createdAt\n updatedAt\n }\n total\n }\n }\n `\n })\n\n return response.data\n}\n\nexport async function fetchBoardTemplate(id) {\n const response = await client.query({\n query: gql`\n query FetchBoardTemplate($id: String!) {\n boardTemplate(id: $id) {\n id\n name\n description\n thumbnail\n model\n visibility\n createdAt\n creator {\n id\n name\n }\n updatedAt\n updater {\n id\n name\n }\n }\n }\n `,\n variables: { id }\n })\n\n return response.data\n}\n\nexport async function createBoardTemplate(boardTemplate) {\n /*\n input NewBoard {\n name : String!\n description : String\n model : String!\n visibility : String!\n }\n */\n\n boardTemplate.model = JSON.stringify(boardTemplate.model)\n\n const response = await client.mutate({\n mutation: gql`\n mutation CreateBoardTemplate($boardTemplate: NewBoardTemplate!) {\n createBoardTemplate(boardTemplate: $boardTemplate) {\n id\n name\n description\n model\n visibility\n createdAt\n updatedAt\n }\n }\n `,\n variables: {\n boardTemplate\n }\n })\n\n return response.data\n}\n\nexport async function updateBoardTemplate(boardTemplate) {\n /*\n input BoardPatch {\n name : String\n description : String\n model : String\n visibility : String\n }\n */\n
|
|
1
|
+
{"version":3,"file":"board-template.js","sourceRoot":"","sources":["../../client/graphql/board-template.ts"],"names":[],"mappings":"AAAA,OAAO,GAAG,MAAM,aAAa,CAAA;AAE7B,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAA;AACzC,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAA;AAElD,MAAM,CAAC,KAAK,UAAU,sBAAsB,CAAC,SAAS,GAAG,EAAE;IACzD,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,KAAK,CAAC;QAClC,KAAK,EAAE,GAAG,CAAA;;yBAEW,UAAU,CAAC,SAAS,CAAC,SAAS,CAAC;;;;;;;;;;;;;KAanD;KACF,CAAC,CAAA;IAEF,OAAO,QAAQ,CAAC,IAAI,CAAA;AACtB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,kBAAkB,CAAC,EAAE;IACzC,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,KAAK,CAAC;QAClC,KAAK,EAAE,GAAG,CAAA;;;;;;;;;;;;;;;;;;;;;KAqBT;QACD,SAAS,EAAE,EAAE,EAAE,EAAE;KAClB,CAAC,CAAA;IAEF,OAAO,QAAQ,CAAC,IAAI,CAAA;AACtB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,mBAAmB,CAAC,aAAa;IACrD;;;;;;;MAOE;IAEF,aAAa,CAAC,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,KAAK,CAAC,CAAA;IAEzD,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC;QACnC,QAAQ,EAAE,GAAG,CAAA;;;;;;;;;;;;KAYZ;QACD,SAAS,EAAE;YACT,aAAa;SACd;KACF,CAAC,CAAA;IAEF,OAAO,QAAQ,CAAC,IAAI,CAAA;AACtB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,mBAAmB,CAAC,aAAa;IACrD;;;;;;;QAOI;IACJ,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE,UAAU,EAAE,GAAG,aAAa,CAAA;IAChE,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAA;IAE7B,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC;QACnC,QAAQ,EAAE,GAAG,CAAA;;;;;;;;;;;;KAYZ;QACD,SAAS,EAAE;YACT,EAAE;YACF,KAAK,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE,UAAU,EAAE;SAChD;KACF,CAAC,CAAA;IAEF,OAAO,QAAQ,CAAC,IAAI,CAAA;AACtB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,mBAAmB,CAAC,EAAE;IAC1C,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC;QACnC,QAAQ,EAAE,GAAG,CAAA;;;;KAIZ;QACD,SAAS,EAAE;YACT,EAAE;SACH;KACF,CAAC,CAAA;IAEF,OAAO,QAAQ,CAAC,IAAI,CAAA;AACtB,CAAC","sourcesContent":["import gql from 'graphql-tag'\n\nimport { client } from '@operato/graphql'\nimport { gqlBuilder } from '@things-factory/utils'\n\nexport async function fetchBoardTemplateList(listParam = {}) {\n const response = await client.query({\n query: gql`\n {\n boardTemplates(${gqlBuilder.buildArgs(listParam)}) {\n items {\n id\n name\n description\n thumbnail\n visibility\n createdAt\n updatedAt\n }\n total\n }\n }\n `\n })\n\n return response.data\n}\n\nexport async function fetchBoardTemplate(id) {\n const response = await client.query({\n query: gql`\n query FetchBoardTemplate($id: String!) {\n boardTemplate(id: $id) {\n id\n name\n description\n thumbnail\n model\n visibility\n createdAt\n creator {\n id\n name\n }\n updatedAt\n updater {\n id\n name\n }\n }\n }\n `,\n variables: { id }\n })\n\n return response.data\n}\n\nexport async function createBoardTemplate(boardTemplate) {\n /*\n input NewBoard {\n name : String!\n description : String\n model : String!\n visibility : String!\n }\n */\n\n boardTemplate.model = JSON.stringify(boardTemplate.model)\n\n const response = await client.mutate({\n mutation: gql`\n mutation CreateBoardTemplate($boardTemplate: NewBoardTemplate!) {\n createBoardTemplate(boardTemplate: $boardTemplate) {\n id\n name\n description\n model\n visibility\n createdAt\n updatedAt\n }\n }\n `,\n variables: {\n boardTemplate\n }\n })\n\n return response.data\n}\n\nexport async function updateBoardTemplate(boardTemplate) {\n /*\n input BoardPatch {\n name : String\n description : String\n model : String\n visibility : String\n }\n */\n let { id, name, description, model, visibility } = boardTemplate\n model = JSON.stringify(model)\n\n const response = await client.mutate({\n mutation: gql`\n mutation UpdateBoard($id: String!, $patch: BoardTemplatePatch!) {\n updateBoard(id: $id, patch: $patch) {\n id\n name\n description\n model\n visibility\n createdAt\n updatedAt\n }\n }\n `,\n variables: {\n id,\n patch: { name, description, model, visibility }\n }\n })\n\n return response.data\n}\n\nexport async function deleteBoardTemplate(id) {\n const response = await client.mutate({\n mutation: gql`\n mutation ($id: String!) {\n deleteBoardTemplate(id: $id)\n }\n `,\n variables: {\n id\n }\n })\n\n return response.data\n}\n"]}
|
|
@@ -11,6 +11,7 @@ export declare function cloneBoard({ id, name, description, targetSubdomain, tar
|
|
|
11
11
|
export declare function releaseBoard(board: any): Promise<any>;
|
|
12
12
|
export declare function revertBoardVersion(id: any, version: any): Promise<any>;
|
|
13
13
|
export declare function updateBoard(board: any): Promise<any>;
|
|
14
|
+
export declare function fetchBoardsUpdatedSince(since: Date): Promise<any>;
|
|
14
15
|
export declare function deleteBoard(id: any): Promise<any>;
|
|
15
16
|
export declare function importBoards({ groupId, files, overwrite }: {
|
|
16
17
|
groupId: string;
|
|
@@ -13,6 +13,7 @@ export async function fetchBoardList(listParam = {}) {
|
|
|
13
13
|
thumbnail
|
|
14
14
|
state
|
|
15
15
|
version
|
|
16
|
+
sortOrder
|
|
16
17
|
createdAt
|
|
17
18
|
updatedAt
|
|
18
19
|
}
|
|
@@ -120,7 +121,7 @@ export async function cloneBoard({ id, name, description, targetSubdomain, targe
|
|
|
120
121
|
return response.data;
|
|
121
122
|
}
|
|
122
123
|
export async function releaseBoard(board) {
|
|
123
|
-
|
|
124
|
+
const { id } = board;
|
|
124
125
|
const response = await client.mutate({
|
|
125
126
|
mutation: gql `
|
|
126
127
|
mutation ReleaseBoard($id: String!) {
|
|
@@ -173,7 +174,7 @@ export async function updateBoard(board) {
|
|
|
173
174
|
type : String
|
|
174
175
|
}
|
|
175
176
|
*/
|
|
176
|
-
|
|
177
|
+
let { id, name, description, model, groupId, type } = board;
|
|
177
178
|
model = JSON.stringify(model);
|
|
178
179
|
const response = await client.mutate({
|
|
179
180
|
mutation: gql `
|
|
@@ -202,6 +203,31 @@ export async function updateBoard(board) {
|
|
|
202
203
|
});
|
|
203
204
|
return response.data;
|
|
204
205
|
}
|
|
206
|
+
export async function fetchBoardsUpdatedSince(since) {
|
|
207
|
+
const response = await client.query({
|
|
208
|
+
query: gql `
|
|
209
|
+
query BoardsUpdatedSince($since: DateTimeISO!) {
|
|
210
|
+
boardsUpdatedSince(since: $since) {
|
|
211
|
+
id
|
|
212
|
+
name
|
|
213
|
+
description
|
|
214
|
+
thumbnail
|
|
215
|
+
state
|
|
216
|
+
version
|
|
217
|
+
group {
|
|
218
|
+
id
|
|
219
|
+
}
|
|
220
|
+
createdAt
|
|
221
|
+
updatedAt
|
|
222
|
+
deletedAt
|
|
223
|
+
}
|
|
224
|
+
}
|
|
225
|
+
`,
|
|
226
|
+
variables: { since: since.toISOString() },
|
|
227
|
+
fetchPolicy: 'network-only'
|
|
228
|
+
});
|
|
229
|
+
return response.data.boardsUpdatedSince;
|
|
230
|
+
}
|
|
205
231
|
export async function deleteBoard(id) {
|
|
206
232
|
const response = await client.mutate({
|
|
207
233
|
mutation: gql `
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"board.js","sourceRoot":"","sources":["../../client/graphql/board.ts"],"names":[],"mappings":"AAAA,OAAO,GAAG,MAAM,aAAa,CAAA;AAE7B,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAA;AACzC,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAA;AAElD,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,SAAS,GAAG,EAAE;IACjD,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,KAAK,CAAC;QAClC,KAAK,EAAE,GAAG,CAAA;;iBAEG,UAAU,CAAC,SAAS,CAAC,SAAS,CAAC
|
|
1
|
+
{"version":3,"file":"board.js","sourceRoot":"","sources":["../../client/graphql/board.ts"],"names":[],"mappings":"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","sourcesContent":["import gql from 'graphql-tag'\n\nimport { client } from '@operato/graphql'\nimport { gqlBuilder } from '@things-factory/utils'\n\nexport async function fetchBoardList(listParam = {}) {\n const response = await client.query({\n query: gql`\n {\n boards(${gqlBuilder.buildArgs(listParam)}) {\n items {\n id\n name\n description\n thumbnail\n state\n version\n sortOrder\n createdAt\n updatedAt\n }\n total\n }\n }\n `\n })\n\n return response.data\n}\n\nexport async function fetchBoard(id) {\n const response = await client.query({\n query: gql`\n query FetchBoardById($id: String!) {\n board(id: $id) {\n id\n name\n description\n group {\n id\n name\n }\n thumbnail\n model\n createdAt\n creator {\n id\n name\n }\n state\n version\n updatedAt\n updater {\n id\n name\n }\n }\n }\n `,\n variables: { id }\n })\n\n return response.data\n}\n\nexport async function createBoard(board) {\n /*\n input NewBoard {\n name : String!\n description : String\n model : String!\n type : String!\n groupId : String!\n }\n */\n\n board.model = JSON.stringify(board.model)\n\n const response = await client.mutate({\n mutation: gql`\n mutation CreateBoard($board: NewBoard!) {\n createBoard(board: $board) {\n id\n name\n description\n type\n model\n state\n version\n createdAt\n updatedAt\n }\n }\n `,\n variables: {\n board\n }\n })\n\n return response.data\n}\n\nexport async function cloneBoard({\n id,\n name,\n description,\n targetSubdomain,\n targetGroupId\n}: {\n id: string\n name: string\n description: string\n targetSubdomain: string\n targetGroupId: string\n}) {\n const response = await client.mutate({\n mutation: gql`\n mutation CloneBoard($id: String!, $patch: BoardPatch!, $targetSubdomain: String!, $targetGroupId: String) {\n cloneBoard(id: $id, patch: $patch, targetSubdomain: $targetSubdomain, targetGroupId: $targetGroupId) {\n id\n name\n description\n type\n model\n group {\n id\n name\n }\n state\n version\n createdAt\n updatedAt\n }\n }\n `,\n variables: {\n id,\n patch: { name, description },\n targetSubdomain,\n targetGroupId\n }\n })\n\n return response.data\n}\n\nexport async function releaseBoard(board) {\n const { id } = board\n\n const response = await client.mutate({\n mutation: gql`\n mutation ReleaseBoard($id: String!) {\n releaseBoard(id: $id) {\n id\n name\n description\n type\n model\n group {\n id\n name\n }\n state\n version\n createdAt\n updatedAt\n }\n }\n `,\n variables: {\n id\n }\n })\n\n return response.data\n}\n\nexport async function revertBoardVersion(id, version) {\n const response = await client.mutate({\n mutation: gql`\n mutation RevertBoardVersion($id: String!, $version: Float!) {\n revertBoardVersion(id: $id, version: $version) {\n name\n }\n }\n `,\n variables: {\n id,\n version\n }\n })\n\n return response.data.revertBoardVersion\n}\n\nexport async function updateBoard(board) {\n /*\n input BoardPatch {\n name : String\n description : String\n model : String\n groupId : String\n type : String\n }\n */\n let { id, name, description, model, groupId, type } = board\n model = JSON.stringify(model)\n\n const response = await client.mutate({\n mutation: gql`\n mutation UpdateBoard($id: String!, $patch: BoardPatch!) {\n updateBoard(id: $id, patch: $patch) {\n id\n name\n description\n model\n group {\n id\n name\n }\n type\n state\n version\n createdAt\n updatedAt\n }\n }\n `,\n variables: {\n id,\n patch: { name, description, model, groupId, type }\n }\n })\n\n return response.data\n}\n\nexport async function fetchBoardsUpdatedSince(since: Date) {\n const response = await client.query({\n query: gql`\n query BoardsUpdatedSince($since: DateTimeISO!) {\n boardsUpdatedSince(since: $since) {\n id\n name\n description\n thumbnail\n state\n version\n group {\n id\n }\n createdAt\n updatedAt\n deletedAt\n }\n }\n `,\n variables: { since: since.toISOString() },\n fetchPolicy: 'network-only'\n })\n\n return response.data.boardsUpdatedSince\n}\n\nexport async function deleteBoard(id) {\n const response = await client.mutate({\n mutation: gql`\n mutation ($id: String!) {\n deleteBoard(id: $id)\n }\n `,\n variables: {\n id\n }\n })\n\n return response.data\n}\n\nexport async function importBoards({\n groupId,\n files,\n overwrite\n}: {\n groupId: string\n files: File[]\n overwrite: boolean\n}) {\n const response = await client.mutate({\n mutation: gql`\n mutation importBoards($groupId: String!, $files: [Upload!]!, $overwrite: Boolean!) {\n importBoards(groupId: $groupId, files: $files, overwrite: $overwrite) {\n id\n name\n description\n }\n }\n `,\n variables: {\n groupId,\n files,\n overwrite\n },\n context: { hasUpload: true }\n })\n\n return response.data\n}\n"]}
|
|
@@ -26,7 +26,7 @@ export async function fetchGroup(id) {
|
|
|
26
26
|
return response.data;
|
|
27
27
|
}
|
|
28
28
|
export async function updateGroup(group) {
|
|
29
|
-
|
|
29
|
+
const { id, name, description } = group;
|
|
30
30
|
const response = await client.mutate({
|
|
31
31
|
mutation: gql `
|
|
32
32
|
mutation UpdateGroup($id: String!, $patch: GroupPatch!) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"group.js","sourceRoot":"","sources":["../../client/graphql/group.ts"],"names":[],"mappings":"AAAA,OAAO,GAAG,MAAM,aAAa,CAAA;AAE7B,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAA;AAEzC,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,EAAE;IACjC,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,KAAK,CAAC;QAClC,KAAK,EAAE,GAAG,CAAA;;;;;;;;;;;;;;;;;;KAkBT;QACD,SAAS,EAAE,EAAE,EAAE,EAAE;KAClB,CAAC,CAAA;IAEF,OAAO,QAAQ,CAAC,IAAI,CAAA;AACtB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,KAAK;IACrC,
|
|
1
|
+
{"version":3,"file":"group.js","sourceRoot":"","sources":["../../client/graphql/group.ts"],"names":[],"mappings":"AAAA,OAAO,GAAG,MAAM,aAAa,CAAA;AAE7B,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAA;AAEzC,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,EAAE;IACjC,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,KAAK,CAAC;QAClC,KAAK,EAAE,GAAG,CAAA;;;;;;;;;;;;;;;;;;KAkBT;QACD,SAAS,EAAE,EAAE,EAAE,EAAE;KAClB,CAAC,CAAA;IAEF,OAAO,QAAQ,CAAC,IAAI,CAAA;AACtB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,KAAK;IACrC,MAAM,EAAE,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,GAAG,KAAK,CAAA;IAEvC,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC;QACnC,QAAQ,EAAE,GAAG,CAAA;;;;;;;;;;KAUZ;QACD,SAAS,EAAE;YACT,EAAE;YACF,KAAK,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE;SAC7B;KACF,CAAC,CAAA;IAEF,OAAO,QAAQ,CAAC,IAAI,CAAA;AACtB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,EAAE;IAClC,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC;QACnC,QAAQ,EAAE,GAAG,CAAA;;;;KAIZ;QACD,SAAS,EAAE;YACT,EAAE;SACH;KACF,CAAC,CAAA;IAEF,OAAO,QAAQ,CAAC,IAAI,CAAA;AACtB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,cAAc;IAClC,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,KAAK,CAAC;QAClC,KAAK,EAAE,GAAG,CAAA;;;;;;;;;;;;;KAaT;KACF,CAAC,CAAA;IAEF,OAAO,QAAQ,CAAC,IAAI,CAAA;AACtB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,KAAK;IACrC,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC;QACnC,QAAQ,EAAE,GAAG,CAAA;;;;;;;;;;KAUZ;QACD,SAAS,EAAE,EAAE,KAAK,EAAE;KACrB,CAAC,CAAA;IAEF,OAAO,QAAQ,CAAC,IAAI,CAAA;AACtB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,OAAO,EAAE,OAAO;IAC9C,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC;QACnC,QAAQ,EAAE,GAAG,CAAA;;;;;;;;;;;;;;;;;KAiBZ;QACD,SAAS,EAAE;YACT,EAAE,EAAE,OAAO;YACX,QAAQ,EAAE,CAAC,OAAO,CAAC;SACpB;KACF,CAAC,CAAA;IAEF,OAAO,QAAQ,CAAC,IAAI,CAAA;AACtB,CAAC","sourcesContent":["import gql from 'graphql-tag'\n\nimport { client } from '@operato/graphql'\n\nexport async function fetchGroup(id) {\n const response = await client.query({\n query: gql`\n query FetchGroupById($id: String!) {\n group(id: $id) {\n id\n name\n description\n createdAt\n creator {\n id\n name\n }\n updatedAt\n updater {\n id\n name\n }\n }\n }\n `,\n variables: { id }\n })\n\n return response.data\n}\n\nexport async function updateGroup(group) {\n const { id, name, description } = group\n\n const response = await client.mutate({\n mutation: gql`\n mutation UpdateGroup($id: String!, $patch: GroupPatch!) {\n updateGroup(id: $id, patch: $patch) {\n id\n name\n description\n createdAt\n updatedAt\n }\n }\n `,\n variables: {\n id,\n patch: { name, description }\n }\n })\n\n return response.data\n}\n\nexport async function deleteGroup(id) {\n const response = await client.mutate({\n mutation: gql`\n mutation ($id: String!) {\n deleteGroup(id: $id)\n }\n `,\n variables: {\n id\n }\n })\n\n return response.data\n}\n\nexport async function fetchGroupList() {\n const response = await client.query({\n query: gql`\n {\n groups {\n items {\n id\n name\n description\n createdAt\n updatedAt\n }\n total\n }\n }\n `\n })\n\n return response.data\n}\n\nexport async function createGroup(group) {\n const response = await client.mutate({\n mutation: gql`\n mutation CreateGroup($group: NewGroup!) {\n createGroup(group: $group) {\n id\n name\n description\n createdAt\n updatedAt\n }\n }\n `,\n variables: { group }\n })\n\n return response.data\n}\n\nexport async function joinGroup(boardId, groupId) {\n const response = await client.mutate({\n mutation: gql`\n mutation JoinGroup($id: String!, $boardIds: [String!]!) {\n joinGroup(id: $id, boardIds: $boardIds) {\n id\n name\n description\n boards {\n id\n name\n description\n createdAt\n updatedAt\n }\n createdAt\n updatedAt\n }\n }\n `,\n variables: {\n id: groupId,\n boardIds: [boardId]\n }\n })\n\n return response.data\n}\n"]}
|
|
@@ -62,7 +62,7 @@ export async function fetchPlayGroup(groupId) {
|
|
|
62
62
|
return response.data;
|
|
63
63
|
}
|
|
64
64
|
export async function createPlayGroup(group) {
|
|
65
|
-
|
|
65
|
+
const { name, description } = group;
|
|
66
66
|
const response = await client.mutate({
|
|
67
67
|
mutation: gql `
|
|
68
68
|
mutation CreatePlayGroup($playGroup: NewPlayGroup!) {
|
|
@@ -82,7 +82,7 @@ export async function createPlayGroup(group) {
|
|
|
82
82
|
return response.data;
|
|
83
83
|
}
|
|
84
84
|
export async function updatePlayGroup(group) {
|
|
85
|
-
|
|
85
|
+
const { id, name, description } = group;
|
|
86
86
|
const response = await client.mutate({
|
|
87
87
|
mutation: gql `
|
|
88
88
|
mutation UpdatePlayGroup($id: String!, $patch: PlayGroupPatch!) {
|
|
@@ -116,7 +116,7 @@ export async function deletePlayGroup(id) {
|
|
|
116
116
|
return response.data;
|
|
117
117
|
}
|
|
118
118
|
export async function joinPlayGroup(boardId, group) {
|
|
119
|
-
|
|
119
|
+
const { id, name, description } = group;
|
|
120
120
|
const response = await client.mutate({
|
|
121
121
|
mutation: gql `
|
|
122
122
|
mutation JoinPlayGroup($id: String!, $boardIds: [String!]!) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"play-group.js","sourceRoot":"","sources":["../../client/graphql/play-group.ts"],"names":[],"mappings":"AAAA,OAAO,GAAG,MAAM,aAAa,CAAA;AAE7B,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAA;AAEzC,MAAM,CAAC,KAAK,UAAU,kBAAkB;IACtC,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,KAAK,CAAC;QAClC,KAAK,EAAE,GAAG,CAAA;;;;;;;;;;;KAWT;KACF,CAAC,CAAA;IAEF,OAAO,QAAQ,CAAC,IAAI,CAAA;AACtB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,OAAO;IAC1C,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,KAAK,CAAC;QAClC,KAAK,EAAE,GAAG,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;KAmCT;QACD,SAAS,EAAE;YACT,EAAE,EAAE,OAAO;SACZ;KACF,CAAC,CAAA;IAEF,OAAO,QAAQ,CAAC,IAAI,CAAA;AACtB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,KAAK;IACzC,
|
|
1
|
+
{"version":3,"file":"play-group.js","sourceRoot":"","sources":["../../client/graphql/play-group.ts"],"names":[],"mappings":"AAAA,OAAO,GAAG,MAAM,aAAa,CAAA;AAE7B,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAA;AAEzC,MAAM,CAAC,KAAK,UAAU,kBAAkB;IACtC,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,KAAK,CAAC;QAClC,KAAK,EAAE,GAAG,CAAA;;;;;;;;;;;KAWT;KACF,CAAC,CAAA;IAEF,OAAO,QAAQ,CAAC,IAAI,CAAA;AACtB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,OAAO;IAC1C,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,KAAK,CAAC;QAClC,KAAK,EAAE,GAAG,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;KAmCT;QACD,SAAS,EAAE;YACT,EAAE,EAAE,OAAO;SACZ;KACF,CAAC,CAAA;IAEF,OAAO,QAAQ,CAAC,IAAI,CAAA;AACtB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,KAAK;IACzC,MAAM,EAAE,IAAI,EAAE,WAAW,EAAE,GAAG,KAAK,CAAA;IAEnC,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC;QACnC,QAAQ,EAAE,GAAG,CAAA;;;;;;;;;;KAUZ;QACD,SAAS,EAAE;YACT,SAAS,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE;SACjC;KACF,CAAC,CAAA;IAEF,OAAO,QAAQ,CAAC,IAAI,CAAA;AACtB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,KAAK;IACzC,MAAM,EAAE,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,GAAG,KAAK,CAAA;IAEvC,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC;QACnC,QAAQ,EAAE,GAAG,CAAA;;;;;;;;;;KAUZ;QACD,SAAS,EAAE;YACT,EAAE;YACF,KAAK,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE;SAC7B;KACF,CAAC,CAAA;IAEF,OAAO,QAAQ,CAAC,IAAI,CAAA;AACtB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,EAAE;IACtC,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC;QACnC,QAAQ,EAAE,GAAG,CAAA;;;;KAIZ;QACD,SAAS,EAAE;YACT,EAAE;SACH;KACF,CAAC,CAAA;IACF,OAAO,QAAQ,CAAC,IAAI,CAAA;AACtB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,OAAO,EAAE,KAAK;IAChD,MAAM,EAAE,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,GAAG,KAAK,CAAA;IAEvC,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC;QACnC,QAAQ,EAAE,GAAG,CAAA;;;;;;;;;;;;;;;;;KAiBZ;QACD,SAAS,EAAE;YACT,EAAE;YACF,QAAQ,EAAE,CAAC,OAAO,CAAC;SACpB;KACF,CAAC,CAAA;IAEF,OAAO,QAAQ,CAAC,IAAI,CAAA;AACtB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,OAAO,EAAE,OAAO;IACnD,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC;QACnC,QAAQ,EAAE,GAAG,CAAA;;;;;;;;;;;;;;;;;KAiBZ;QACD,SAAS,EAAE;YACT,EAAE,EAAE,OAAO;YACX,QAAQ,EAAE,CAAC,OAAO,CAAC;SACpB;KACF,CAAC,CAAA;IAEF,OAAO,QAAQ,CAAC,IAAI,CAAA;AACtB,CAAC","sourcesContent":["import gql from 'graphql-tag'\n\nimport { client } from '@operato/graphql'\n\nexport async function fetchPlayGroupList() {\n const response = await client.query({\n query: gql`\n {\n playGroups {\n items {\n id\n name\n description\n }\n total\n }\n }\n `\n })\n\n return response.data\n}\n\nexport async function fetchPlayGroup(groupId) {\n const response = await client.query({\n query: gql`\n query FetchPlayGroup($id: String!) {\n playGroup(id: $id) {\n id\n name\n description\n boards {\n id\n name\n description\n model\n thumbnail\n createdAt\n creator {\n id\n name\n }\n updatedAt\n updater {\n id\n name\n }\n }\n createdAt\n creator {\n id\n name\n }\n updatedAt\n updater {\n id\n name\n }\n }\n }\n `,\n variables: {\n id: groupId\n }\n })\n\n return response.data\n}\n\nexport async function createPlayGroup(group) {\n const { name, description } = group\n\n const response = await client.mutate({\n mutation: gql`\n mutation CreatePlayGroup($playGroup: NewPlayGroup!) {\n createPlayGroup(playGroup: $playGroup) {\n id\n name\n description\n createdAt\n updatedAt\n }\n }\n `,\n variables: {\n playGroup: { name, description }\n }\n })\n\n return response.data\n}\n\nexport async function updatePlayGroup(group) {\n const { id, name, description } = group\n\n const response = await client.mutate({\n mutation: gql`\n mutation UpdatePlayGroup($id: String!, $patch: PlayGroupPatch!) {\n updatePlayGroup(id: $id, patch: $patch) {\n id\n name\n description\n createdAt\n updatedAt\n }\n }\n `,\n variables: {\n id,\n patch: { name, description }\n }\n })\n\n return response.data\n}\n\nexport async function deletePlayGroup(id) {\n const response = await client.mutate({\n mutation: gql`\n mutation ($id: String!) {\n deletePlayGroup(id: $id)\n }\n `,\n variables: {\n id\n }\n })\n return response.data\n}\n\nexport async function joinPlayGroup(boardId, group) {\n const { id, name, description } = group\n\n const response = await client.mutate({\n mutation: gql`\n mutation JoinPlayGroup($id: String!, $boardIds: [String!]!) {\n joinPlayGroup(id: $id, boardIds: $boardIds) {\n id\n name\n description\n boards {\n id\n name\n description\n createdAt\n updatedAt\n }\n createdAt\n updatedAt\n }\n }\n `,\n variables: {\n id,\n boardIds: [boardId]\n }\n })\n\n return response.data\n}\n\nexport async function leavePlayGroup(boardId, groupId) {\n const response = await client.mutate({\n mutation: gql`\n mutation ($id: String!, $boardIds: [String]!) {\n leavePlayGroup(id: $id, boardIds: $boardIds) {\n id\n name\n description\n boards {\n id\n name\n description\n createdAt\n updatedAt\n }\n createdAt\n updatedAt\n }\n }\n `,\n variables: {\n id: groupId,\n boardIds: [boardId]\n }\n })\n\n return response.data\n}\n"]}
|
|
@@ -19,12 +19,28 @@ export declare class AttachmentListPage extends AttachmentListPage_base {
|
|
|
19
19
|
importable: {
|
|
20
20
|
handler: (data: any, file: any) => Promise<void>;
|
|
21
21
|
};
|
|
22
|
+
actions: {
|
|
23
|
+
icon: string;
|
|
24
|
+
emphasis: {
|
|
25
|
+
raised: boolean;
|
|
26
|
+
outlined: boolean;
|
|
27
|
+
dense: boolean;
|
|
28
|
+
danger: boolean;
|
|
29
|
+
};
|
|
30
|
+
title: string;
|
|
31
|
+
action: () => Promise<void>;
|
|
32
|
+
}[];
|
|
22
33
|
};
|
|
23
34
|
render(): import("lit-html").TemplateResult<1>;
|
|
24
35
|
get grist(): import("@operato/data-grist").DataGrist;
|
|
25
36
|
languageUpdated(i18next: any): void;
|
|
26
37
|
pageInitialized(): Promise<void>;
|
|
27
38
|
exportHandler(): Promise<any>;
|
|
39
|
+
/**
|
|
40
|
+
* 썸네일이 없는 기존 첨부파일들에 대해 서버에서 일괄 썸네일 생성.
|
|
41
|
+
* 한 배치당 20 개씩, remaining 이 0 이 될 때까지 반복 호출.
|
|
42
|
+
*/
|
|
43
|
+
backfillThumbnails(): Promise<void>;
|
|
28
44
|
importHandler(data: any, file: any): Promise<void>;
|
|
29
45
|
}
|
|
30
46
|
export {};
|
|
@@ -5,8 +5,10 @@ import { customElement, query } from 'lit/decorators.js';
|
|
|
5
5
|
import gql from 'graphql-tag';
|
|
6
6
|
import { i18next, localize } from '@operato/i18n';
|
|
7
7
|
import { PageView } from '@operato/shell';
|
|
8
|
+
import { CommonButtonStyles } from '@operato/styles';
|
|
8
9
|
import { OxAttachmentList } from '@operato/attachment/ox-attachment-list.js';
|
|
9
10
|
import { client } from '@operato/graphql';
|
|
11
|
+
import { notify } from '@operato/layout';
|
|
10
12
|
async function fetchDataFromURL(fileURL) {
|
|
11
13
|
try {
|
|
12
14
|
const response = await fetch(fileURL);
|
|
@@ -57,7 +59,14 @@ let AttachmentListPage = class AttachmentListPage extends localize(i18next)(Page
|
|
|
57
59
|
},
|
|
58
60
|
importable: {
|
|
59
61
|
handler: this.importHandler.bind(this)
|
|
60
|
-
}
|
|
62
|
+
},
|
|
63
|
+
actions: [
|
|
64
|
+
{
|
|
65
|
+
title: i18next.t('button.backfill thumbnails'),
|
|
66
|
+
action: this.backfillThumbnails.bind(this),
|
|
67
|
+
...CommonButtonStyles.save
|
|
68
|
+
}
|
|
69
|
+
]
|
|
61
70
|
};
|
|
62
71
|
}
|
|
63
72
|
render() {
|
|
@@ -91,11 +100,63 @@ let AttachmentListPage = class AttachmentListPage extends localize(i18next)(Page
|
|
|
91
100
|
});
|
|
92
101
|
}
|
|
93
102
|
catch (err) {
|
|
94
|
-
console.
|
|
103
|
+
console.warn('Failed to process attachment:', name, err);
|
|
95
104
|
}
|
|
96
105
|
}
|
|
97
106
|
return data;
|
|
98
107
|
}
|
|
108
|
+
/**
|
|
109
|
+
* 썸네일이 없는 기존 첨부파일들에 대해 서버에서 일괄 썸네일 생성.
|
|
110
|
+
* 한 배치당 20 개씩, remaining 이 0 이 될 때까지 반복 호출.
|
|
111
|
+
*/
|
|
112
|
+
async backfillThumbnails() {
|
|
113
|
+
const BATCH = 20;
|
|
114
|
+
let total = { attempted: 0, succeeded: 0, failed: 0 };
|
|
115
|
+
let remaining = Number.POSITIVE_INFINITY;
|
|
116
|
+
notify({ message: i18next.t('text.backfilling thumbnails') });
|
|
117
|
+
while (remaining > 0) {
|
|
118
|
+
try {
|
|
119
|
+
const { data } = await client.mutate({
|
|
120
|
+
mutation: gql `
|
|
121
|
+
mutation BackfillAttachmentThumbnails($limit: Int) {
|
|
122
|
+
backfillAttachmentThumbnails(limit: $limit) {
|
|
123
|
+
attempted
|
|
124
|
+
succeeded
|
|
125
|
+
failed
|
|
126
|
+
remaining
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
`,
|
|
130
|
+
variables: { limit: BATCH }
|
|
131
|
+
});
|
|
132
|
+
const r = data?.backfillAttachmentThumbnails;
|
|
133
|
+
if (!r)
|
|
134
|
+
break;
|
|
135
|
+
total.attempted += r.attempted;
|
|
136
|
+
total.succeeded += r.succeeded;
|
|
137
|
+
total.failed += r.failed;
|
|
138
|
+
remaining = r.remaining;
|
|
139
|
+
if (r.attempted === 0)
|
|
140
|
+
break; // 더 이상 처리할 게 없음
|
|
141
|
+
// 한 배치에서 아무것도 성공하지 못했다면 무한 루프 방지를 위해 중단.
|
|
142
|
+
// 동일 후보들이 계속 실패하는 상황이므로 서버 측 원인 해결이 선행되어야 함.
|
|
143
|
+
if (r.succeeded === 0)
|
|
144
|
+
break;
|
|
145
|
+
}
|
|
146
|
+
catch (err) {
|
|
147
|
+
console.error('backfill error:', err);
|
|
148
|
+
notify({ level: 'error', message: String(err) });
|
|
149
|
+
return;
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
notify({
|
|
153
|
+
message: i18next.t('text.thumbnail backfill done', {
|
|
154
|
+
succeeded: total.succeeded,
|
|
155
|
+
failed: total.failed
|
|
156
|
+
})
|
|
157
|
+
});
|
|
158
|
+
this.grist.fetch();
|
|
159
|
+
}
|
|
99
160
|
async importHandler(data, file) {
|
|
100
161
|
await client.mutate({
|
|
101
162
|
mutation: gql `
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"attachment-list-page.js","sourceRoot":"","sources":["../../client/pages/attachment-list-page.ts"],"names":[],"mappings":";AAAA,OAAO,2CAA2C,CAAA;AAElD,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,KAAK,CAAA;AAC/B,OAAO,EAAE,aAAa,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAA;AACxD,OAAO,GAAG,MAAM,aAAa,CAAA;AAE7B,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AACjD,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAA;AACzC,OAAO,EAAE,gBAAgB,EAAE,MAAM,2CAA2C,CAAA;AAC5E,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAA;
|
|
1
|
+
{"version":3,"file":"attachment-list-page.js","sourceRoot":"","sources":["../../client/pages/attachment-list-page.ts"],"names":[],"mappings":"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","sourcesContent":["import '@operato/attachment/ox-attachment-list.js'\n\nimport { css, html } from 'lit'\nimport { customElement, query } from 'lit/decorators.js'\nimport gql from 'graphql-tag'\n\nimport { i18next, localize } from '@operato/i18n'\nimport { PageView } from '@operato/shell'\nimport { CommonButtonStyles } from '@operato/styles'\nimport { OxAttachmentList } from '@operato/attachment/ox-attachment-list.js'\nimport { client } from '@operato/graphql'\nimport { notify } from '@operato/layout'\n\nasync function fetchDataFromURL(fileURL: string) {\n try {\n const response = await fetch(fileURL)\n\n if (!response.ok) {\n throw new Error('Network response was not ok')\n }\n\n const blob = await response.blob() // 파일 데이터를 Blob으로 변환\n\n if (blob.size === 0) {\n throw new Error('Content is empty') // Content가 비어 있으면 예외\n }\n\n return new Promise((resolve, reject) => {\n const reader = new FileReader()\n\n reader.onload = (event: any) => {\n const dataURL = event.target.result\n resolve(dataURL)\n }\n\n reader.onerror = (event: any) => {\n reject(event.error)\n }\n\n reader.readAsDataURL(blob) // Blob을 Data URL로 읽기\n })\n } catch (error) {\n throw error\n }\n}\n\n@customElement('attachment-list-page')\nexport class AttachmentListPage extends localize(i18next)(PageView) {\n static styles = [\n css`\n :host {\n display: flex;\n }\n `\n ]\n\n @query('ox-attachment-list') attachmentList!: OxAttachmentList\n\n get context() {\n return {\n title: i18next.t('title.attachment list'),\n search: {\n handler: search => {\n this.grist.searchText = search\n },\n value: this.grist?.searchText || ''\n },\n board_topmenu: true,\n exportable: {\n name: i18next.t('title.attachment list'),\n data: this.exportHandler.bind(this)\n },\n importable: {\n handler: this.importHandler.bind(this)\n },\n actions: [\n {\n title: i18next.t('button.backfill thumbnails'),\n action: this.backfillThumbnails.bind(this),\n ...CommonButtonStyles.save\n }\n ]\n }\n }\n\n render() {\n return html` <ox-attachment-list .creatable=${true} without-search></ox-attachment-list> `\n }\n\n get grist() {\n return this.attachmentList.grist\n }\n\n languageUpdated(i18next) {\n this.attachmentList.requestUpdate()\n }\n\n async pageInitialized() {\n await this.updateComplete\n\n this.attachmentList.refreshAttachments()\n }\n\n async exportHandler() {\n const records = this.grist.data.records\n const data = {} as any\n\n for (const record of records) {\n const { id, name, mimetype, encoding, category, fullpath } = record\n\n try {\n const dataURL = await fetchDataFromURL(fullpath)\n\n id &&\n (data[id!] = {\n id,\n name,\n mimetype,\n encoding,\n category,\n contents: dataURL\n })\n } catch (err) {\n console.warn('Failed to process attachment:', name, err)\n }\n }\n\n return data\n }\n\n /**\n * 썸네일이 없는 기존 첨부파일들에 대해 서버에서 일괄 썸네일 생성.\n * 한 배치당 20 개씩, remaining 이 0 이 될 때까지 반복 호출.\n */\n async backfillThumbnails() {\n const BATCH = 20\n let total = { attempted: 0, succeeded: 0, failed: 0 }\n let remaining = Number.POSITIVE_INFINITY\n\n notify({ message: i18next.t('text.backfilling thumbnails') })\n\n while (remaining > 0) {\n try {\n const { data } = await client.mutate({\n mutation: gql`\n mutation BackfillAttachmentThumbnails($limit: Int) {\n backfillAttachmentThumbnails(limit: $limit) {\n attempted\n succeeded\n failed\n remaining\n }\n }\n `,\n variables: { limit: BATCH }\n })\n const r = data?.backfillAttachmentThumbnails\n if (!r) break\n total.attempted += r.attempted\n total.succeeded += r.succeeded\n total.failed += r.failed\n remaining = r.remaining\n\n if (r.attempted === 0) break // 더 이상 처리할 게 없음\n // 한 배치에서 아무것도 성공하지 못했다면 무한 루프 방지를 위해 중단.\n // 동일 후보들이 계속 실패하는 상황이므로 서버 측 원인 해결이 선행되어야 함.\n if (r.succeeded === 0) break\n } catch (err) {\n console.error('backfill error:', err)\n notify({ level: 'error', message: String(err) })\n return\n }\n }\n\n notify({\n message: i18next.t('text.thumbnail backfill done', {\n succeeded: total.succeeded,\n failed: total.failed\n })\n })\n this.grist.fetch()\n }\n\n async importHandler(data, file) {\n await client.mutate({\n mutation: gql`\n mutation importAttachments($file: Upload!) {\n importAttachments(file: $file) {\n id\n name\n description\n path\n }\n }\n `,\n variables: {\n file\n },\n context: { hasUpload: true }\n })\n\n this.grist.fetch()\n }\n}\n"]}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Host 측 BoardActionOp dispatcher — AI 가 지시한 ephemeral scene action 을
|
|
3
|
+
* things-scene API 로 실행.
|
|
4
|
+
*
|
|
5
|
+
* 별개 채널 — board-edit-patch 와 달리 model 변경 X, undo 영향 X, dirty flag 무관.
|
|
6
|
+
* pure function 형태 (스크롤되는 customElement 와 분리) — Lit 외부에서 단위 테스트 가능.
|
|
7
|
+
*/
|
|
8
|
+
import type { BoardActionOp } from '@things-factory/board-ai';
|
|
9
|
+
/**
|
|
10
|
+
* AI 의 BoardEditOp / BoardActionOp 가 지정한 대상 (id 또는 refid) 으로
|
|
11
|
+
* things-scene component 검색.
|
|
12
|
+
*
|
|
13
|
+
* id (사용자/AI 가 명시적으로 설정한 string identifier) 와
|
|
14
|
+
* refid (things-scene 이 모든 컴포넌트에 자동 발급하는 numeric identifier) 는
|
|
15
|
+
* 서로 별개 개념. 이 함수는 호스트 측에서 둘 중 어느 쪽으로든 lookup 가능하게 통합.
|
|
16
|
+
* refid 가 universal 이므로 우선.
|
|
17
|
+
*/
|
|
18
|
+
export declare function findSceneComponent(scene: any, target: {
|
|
19
|
+
id?: string;
|
|
20
|
+
refid?: number;
|
|
21
|
+
}): any;
|
|
22
|
+
/**
|
|
23
|
+
* 단일 BoardActionOp 를 things-scene 에 적용.
|
|
24
|
+
*
|
|
25
|
+
* 호스트는 actions 배열을 순회하며 매 op 마다 호출. 실패 (잘못된 action /
|
|
26
|
+
* 누락된 컴포넌트 / API 예외) 시 `false` 반환 — 호스트가 warn 처리.
|
|
27
|
+
*
|
|
28
|
+
* setSceneMode 의 경우 호스트 측 reactive `mode` property 동기는 별도 (return
|
|
29
|
+
* 후 호스트가 scene.mode 재읽기). things-scene 의 mode: edit=1, view=0.
|
|
30
|
+
*/
|
|
31
|
+
export declare function dispatchBoardAction(scene: any, action: BoardActionOp): boolean;
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* AI 의 BoardEditOp / BoardActionOp 가 지정한 대상 (id 또는 refid) 으로
|
|
3
|
+
* things-scene component 검색.
|
|
4
|
+
*
|
|
5
|
+
* id (사용자/AI 가 명시적으로 설정한 string identifier) 와
|
|
6
|
+
* refid (things-scene 이 모든 컴포넌트에 자동 발급하는 numeric identifier) 는
|
|
7
|
+
* 서로 별개 개념. 이 함수는 호스트 측에서 둘 중 어느 쪽으로든 lookup 가능하게 통합.
|
|
8
|
+
* refid 가 universal 이므로 우선.
|
|
9
|
+
*/
|
|
10
|
+
export function findSceneComponent(scene, target) {
|
|
11
|
+
if (!scene)
|
|
12
|
+
return null;
|
|
13
|
+
if (typeof target.refid === 'number') {
|
|
14
|
+
const byRefid = scene.rootContainer?.refidIndexMap?.get(target.refid);
|
|
15
|
+
if (byRefid)
|
|
16
|
+
return byRefid;
|
|
17
|
+
}
|
|
18
|
+
if (typeof target.id === 'string' && target.id.length > 0) {
|
|
19
|
+
return scene.findById?.(target.id) ?? null;
|
|
20
|
+
}
|
|
21
|
+
return null;
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* 단일 BoardActionOp 를 things-scene 에 적용.
|
|
25
|
+
*
|
|
26
|
+
* 호스트는 actions 배열을 순회하며 매 op 마다 호출. 실패 (잘못된 action /
|
|
27
|
+
* 누락된 컴포넌트 / API 예외) 시 `false` 반환 — 호스트가 warn 처리.
|
|
28
|
+
*
|
|
29
|
+
* setSceneMode 의 경우 호스트 측 reactive `mode` property 동기는 별도 (return
|
|
30
|
+
* 후 호스트가 scene.mode 재읽기). things-scene 의 mode: edit=1, view=0.
|
|
31
|
+
*/
|
|
32
|
+
export function dispatchBoardAction(scene, action) {
|
|
33
|
+
if (!scene || !action)
|
|
34
|
+
return false;
|
|
35
|
+
switch (action.action) {
|
|
36
|
+
case 'selectComponents': {
|
|
37
|
+
const refids = Array.isArray(action.refids) ? action.refids : [];
|
|
38
|
+
const targets = refids
|
|
39
|
+
.map(r => findSceneComponent(scene, { refid: r }))
|
|
40
|
+
.filter((c) => c);
|
|
41
|
+
scene.selected = targets;
|
|
42
|
+
return true;
|
|
43
|
+
}
|
|
44
|
+
case 'centerToComponent': {
|
|
45
|
+
const target = findSceneComponent(scene, { refid: action.refid });
|
|
46
|
+
if (!target)
|
|
47
|
+
return false;
|
|
48
|
+
const animated = action.animated !== false;
|
|
49
|
+
scene.centerTo(target, animated);
|
|
50
|
+
return true;
|
|
51
|
+
}
|
|
52
|
+
case 'fitToView': {
|
|
53
|
+
const mode = action.mode ?? 'fit';
|
|
54
|
+
scene.fit(mode);
|
|
55
|
+
return true;
|
|
56
|
+
}
|
|
57
|
+
case 'setSceneMode': {
|
|
58
|
+
scene.mode = action.mode === 'edit' ? 1 : 0;
|
|
59
|
+
return true;
|
|
60
|
+
}
|
|
61
|
+
case 'highlightComponents': {
|
|
62
|
+
// things-scene 의 highlightSearchResults API 위임 — 2D outline + 3D outline
|
|
63
|
+
// 모두 자동 처리 (operato-board 의 3D first-class UX).
|
|
64
|
+
const refids = Array.isArray(action.refids) ? action.refids : [];
|
|
65
|
+
const targets = refids
|
|
66
|
+
.map(r => findSceneComponent(scene, { refid: r }))
|
|
67
|
+
.filter((c) => c);
|
|
68
|
+
if (typeof scene.highlightSearchResults === 'function') {
|
|
69
|
+
scene.highlightSearchResults(targets);
|
|
70
|
+
}
|
|
71
|
+
// 변경된 시각 반영
|
|
72
|
+
if (typeof scene.invalidate === 'function')
|
|
73
|
+
scene.invalidate();
|
|
74
|
+
return true;
|
|
75
|
+
}
|
|
76
|
+
default:
|
|
77
|
+
return false;
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
//# sourceMappingURL=board-action-dispatch.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"board-action-dispatch.js","sourceRoot":"","sources":["../../client/pages/board-action-dispatch.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Host 측 BoardActionOp dispatcher — AI 가 지시한 ephemeral scene action 을\n * things-scene API 로 실행.\n *\n * 별개 채널 — board-edit-patch 와 달리 model 변경 X, undo 영향 X, dirty flag 무관.\n * pure function 형태 (스크롤되는 customElement 와 분리) — Lit 외부에서 단위 테스트 가능.\n */\nimport type { BoardActionOp } from '@things-factory/board-ai'\n\n/**\n * AI 의 BoardEditOp / BoardActionOp 가 지정한 대상 (id 또는 refid) 으로\n * things-scene component 검색.\n *\n * id (사용자/AI 가 명시적으로 설정한 string identifier) 와\n * refid (things-scene 이 모든 컴포넌트에 자동 발급하는 numeric identifier) 는\n * 서로 별개 개념. 이 함수는 호스트 측에서 둘 중 어느 쪽으로든 lookup 가능하게 통합.\n * refid 가 universal 이므로 우선.\n */\nexport function findSceneComponent(\n scene: any,\n target: { id?: string; refid?: number }\n): any {\n if (!scene) return null\n if (typeof target.refid === 'number') {\n const byRefid = scene.rootContainer?.refidIndexMap?.get(target.refid)\n if (byRefid) return byRefid\n }\n if (typeof target.id === 'string' && target.id.length > 0) {\n return scene.findById?.(target.id) ?? null\n }\n return null\n}\n\n/**\n * 단일 BoardActionOp 를 things-scene 에 적용.\n *\n * 호스트는 actions 배열을 순회하며 매 op 마다 호출. 실패 (잘못된 action /\n * 누락된 컴포넌트 / API 예외) 시 `false` 반환 — 호스트가 warn 처리.\n *\n * setSceneMode 의 경우 호스트 측 reactive `mode` property 동기는 별도 (return\n * 후 호스트가 scene.mode 재읽기). things-scene 의 mode: edit=1, view=0.\n */\nexport function dispatchBoardAction(scene: any, action: BoardActionOp): boolean {\n if (!scene || !action) return false\n switch (action.action) {\n case 'selectComponents': {\n const refids = Array.isArray(action.refids) ? action.refids : []\n const targets = refids\n .map(r => findSceneComponent(scene, { refid: r }))\n .filter((c: any) => c)\n scene.selected = targets\n return true\n }\n case 'centerToComponent': {\n const target = findSceneComponent(scene, { refid: action.refid })\n if (!target) return false\n const animated = action.animated !== false\n scene.centerTo(target, animated)\n return true\n }\n case 'fitToView': {\n const mode = action.mode ?? 'fit'\n scene.fit(mode)\n return true\n }\n case 'setSceneMode': {\n scene.mode = action.mode === 'edit' ? 1 : 0\n return true\n }\n case 'highlightComponents': {\n // things-scene 의 highlightSearchResults API 위임 — 2D outline + 3D outline\n // 모두 자동 처리 (operato-board 의 3D first-class UX).\n const refids = Array.isArray(action.refids) ? action.refids : []\n const targets = refids\n .map(r => findSceneComponent(scene, { refid: r }))\n .filter((c: any) => c)\n if (typeof scene.highlightSearchResults === 'function') {\n scene.highlightSearchResults(targets)\n }\n // 변경된 시각 반영\n if (typeof scene.invalidate === 'function') scene.invalidate()\n return true\n }\n default:\n return false\n }\n}\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|