@things-factory/board-ui 10.0.0-beta.45 → 10.0.0-beta.49
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/pages/board-list-page.js +6 -21
- package/dist-client/pages/board-list-page.js.map +1 -1
- package/dist-client/pages/board-player-page.js +2 -2
- package/dist-client/pages/board-player-page.js.map +1 -1
- package/dist-client/pages/board-viewer-page.js +2 -2
- package/dist-client/pages/board-viewer-page.js.map +1 -1
- package/dist-client/tsconfig.tsbuildinfo +1 -1
- package/package.json +2 -2
|
@@ -453,33 +453,18 @@ let BoardListPage = class BoardListPage extends BoardListPageBase {
|
|
|
453
453
|
async onReorderBoards({ boardIds, movedId }) {
|
|
454
454
|
if (!movedId)
|
|
455
455
|
return;
|
|
456
|
-
// sortOrder가 없는 보드에 index 기반 기본값 부여
|
|
457
|
-
this.boards.forEach((b, i) => {
|
|
458
|
-
if (b.sortOrder == null)
|
|
459
|
-
b.sortOrder = i;
|
|
460
|
-
});
|
|
461
|
-
// 새 순서로 배열 재구성
|
|
462
|
-
const reordered = boardIds.map(id => this.boards.find(b => b.id === id)).filter(Boolean);
|
|
463
|
-
// 이웃 보드의 sortOrder로 중간값 계산
|
|
464
456
|
const newIndex = boardIds.indexOf(movedId);
|
|
465
|
-
const
|
|
466
|
-
const
|
|
467
|
-
|
|
468
|
-
const nextOrder = nextBoard?.sortOrder ?? (prevOrder + 2);
|
|
469
|
-
const newSortOrder = prevBoard ? (prevOrder + nextOrder) / 2 : nextOrder - 1;
|
|
470
|
-
const movedBoard = reordered.find(b => b.id === movedId);
|
|
471
|
-
if (movedBoard) {
|
|
472
|
-
movedBoard.sortOrder = newSortOrder;
|
|
473
|
-
}
|
|
474
|
-
this.boards = reordered;
|
|
457
|
+
const prevId = newIndex > 0 ? boardIds[newIndex - 1] : undefined;
|
|
458
|
+
const nextId = newIndex < boardIds.length - 1 ? boardIds[newIndex + 1] : undefined;
|
|
459
|
+
this.boards = boardIds.map(id => this.boards.find(b => b.id === id)).filter(Boolean);
|
|
475
460
|
try {
|
|
476
461
|
await client.mutate({
|
|
477
462
|
mutation: gql `
|
|
478
|
-
mutation ($id: String!, $
|
|
479
|
-
reorderBoard(id: $id,
|
|
463
|
+
mutation ($id: String!, $prevId: String, $nextId: String) {
|
|
464
|
+
reorderBoard(id: $id, prevId: $prevId, nextId: $nextId)
|
|
480
465
|
}
|
|
481
466
|
`,
|
|
482
|
-
variables: { id: movedId,
|
|
467
|
+
variables: { id: movedId, prevId, nextId }
|
|
483
468
|
});
|
|
484
469
|
}
|
|
485
470
|
catch (ex) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"board-list-page.js","sourceRoot":"","sources":["../../client/pages/board-list-page.ts"],"names":[],"mappings":"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","sourcesContent":["import '../viewparts/board-info.js'\nimport '../viewparts/group-info.js'\nimport '../board-list/board-tile-list.js'\nimport '../board-list/group-bar.js'\n\nimport gql from 'graphql-tag'\nimport { css, html } from 'lit'\nimport { customElement, property, query, state } from 'lit/decorators.js'\nimport { client } from '@operato/graphql'\nimport { i18next, localize } from '@operato/i18n'\nimport { openOverlay } from '@operato/layout'\nimport { pulltorefresh } from '@operato/pull-to-refresh'\nimport { navigate, PageView, store } from '@operato/shell'\nimport { ScrollbarStyles } from '@operato/styles'\nimport InfiniteScrollable from '@operato/utils/mixins/infinite-scrollable.js'\nimport { UPDATE_FAVORITES } from '@things-factory/fav-base/client/index.js'\nimport { swipe } from '@things-factory/utils/src/index.js'\n\nimport {\n cloneBoard,\n releaseBoard,\n revertBoardVersion,\n createBoard,\n createGroup,\n deleteBoard,\n deleteGroup,\n fetchBoardList,\n fetchBoardsUpdatedSince,\n fetchFavoriteBoardList,\n fetchMyBoardList,\n fetchGroupList,\n updateBoard,\n updateGroup,\n importBoards\n} from '../graphql'\n\nconst BoardListPageBase = localize(i18next)(InfiniteScrollable(PageView)) as typeof PageView\n\n@customElement('board-list-page')\nexport class BoardListPage extends BoardListPageBase {\n static styles = [\n ScrollbarStyles,\n css`\n :host {\n display: flex;\n flex-direction: column;\n position: relative;\n\n overflow: hidden;\n }\n\n board-tile-list {\n flex: 1;\n overflow-y: auto;\n }\n\n #create {\n position: absolute;\n bottom: 15px;\n right: 16px;\n }\n `\n ]\n\n @property({ type: String }) groupId?: string\n @property({ type: Array }) groups: any[] = []\n @property({ type: Array }) boards: any[] = []\n @property({ type: Array }) favorites: any[] = []\n\n @state() showMainBoardOnly: boolean = true\n @state() searchText: string = ''\n\n @query('board-tile-list') scrollTargetEl!: HTMLElement\n\n private _page: number = 1\n private _total: number = 0 /* required for infinite-scrolling */\n\n private page?: string\n private _lastFetchTime?: Date\n @state() private _updatedBoardIds: string[] = []\n\n get context() {\n const groupId = this.groupId\n const group = this.groups && this.groups.find(group => group.id === groupId)\n\n return {\n title: {\n icon: 'dashboard',\n text: group\n ? 'Group ' + group.name\n : groupId == 'favor'\n ? 'Favorite'\n : groupId == 'mywork'\n ? 'My works'\n : 'Board List'\n },\n search: {\n handler: search => {\n this.searchText = search\n this.refreshBoards()\n\n // URL에 검색어 반영 → 페이지 복귀 시 유지\n const url = new URL(window.location.href)\n if (search) {\n url.searchParams.set('search', search)\n } else {\n url.searchParams.delete('search')\n }\n history.replaceState(null, '', url.href)\n },\n value: this.searchText || ''\n },\n board_topmenu: true\n }\n }\n\n _infiniteScrollOptions: any\n\n constructor() {\n super()\n\n this._infiniteScrollOptions.limit = 50\n }\n\n render() {\n return html`\n <group-bar\n .groups=${this.groups}\n .groupId=${this.groupId}\n targetPage=\"board-list\"\n @info-group=${e => this.onInfoGroup(e.detail)}\n @show-all-board-type=${e => this.showAllBoardType(e)}\n ></group-bar>\n\n <board-tile-list\n id=\"list\"\n .boards=${this.boards}\n .favorites=${this.favorites}\n .groups=${this.groups}\n .group=${this.groupId}\n .updatedIds=${this._updatedBoardIds}\n search-text=${this.searchText}\n @info-board=${e => this.onInfoBoard(e.detail)}\n @scroll=${e => {\n ;(this as any).onScroll(e)\n }}\n @create-board=${e => this.onCreateBoard(e.detail)}\n @refresh-favorites=${e => this.refreshFavorites()}\n @reordered=${e => this.onReorderBoards(e.detail)}\n creatable\n reorderable\n ></board-tile-list>\n `\n }\n\n async refresh() {\n this.groups = (await fetchGroupList()).groups.items\n\n if (this.groups) {\n await this.refreshBoards()\n }\n }\n\n showAllBoardType(e) {\n this.showMainBoardOnly = !e.detail\n this.refreshBoards()\n }\n\n async getBoards({ page = 1, limit = this._infiniteScrollOptions.limit } = {}) {\n if (this.groupId && this.groupId == 'favor') {\n return await this.getFavoriteBoards({\n page,\n limit\n })\n } else if (this.groupId && this.groupId == 'mywork') {\n return await this.getMyBoards({\n page,\n limit\n })\n }\n\n const filters = [] as any[]\n\n if (this.groupId) {\n filters.push({\n name: 'groupId',\n operator: 'eq',\n value: this.groupId\n })\n }\n\n if (this.searchText) {\n filters.push({\n name: 'name',\n operator: 'search',\n value: '%' + this.searchText + '%'\n })\n }\n\n if (this.showMainBoardOnly) {\n filters.push({\n name: 'type',\n operator: 'eq',\n value: 'main'\n })\n }\n\n const listParam = {\n filters,\n sortings: [\n {\n name: 'sortOrder',\n desc: false\n },\n {\n name: 'name',\n desc: false\n }\n ],\n pagination: {\n page,\n limit\n }\n }\n\n return (await fetchBoardList(listParam)).boards\n }\n\n async getFavoriteBoards({ page = 1, limit = this._infiniteScrollOptions.limit } = {}) {\n const filters = [] as any[]\n\n if (this.searchText) {\n filters.push({\n name: 'name',\n operator: 'search',\n value: '%' + this.searchText + '%'\n })\n }\n\n const listParam = {\n filters,\n pagination: {\n page,\n limit\n }\n }\n\n return (await fetchFavoriteBoardList(listParam)).favoriteBoards\n }\n\n async getMyBoards({ page = 1, limit = this._infiniteScrollOptions.limit } = {}) {\n const filters = [] as any[]\n\n if (this.searchText) {\n filters.push({\n name: 'name',\n operator: 'search',\n value: '%' + this.searchText + '%'\n })\n }\n\n const listParam = {\n filters,\n pagination: {\n page,\n limit\n }\n }\n\n return (await fetchMyBoardList(listParam)).boardsCreatedByMe\n }\n\n async refreshBoards() {\n if (!this.groups) {\n await this.refresh()\n return\n }\n\n const { items: boards, total } = await this.getBoards()\n this.boards = boards\n this._page = 1\n this._total = total\n this._lastFetchTime = new Date()\n\n this.updateContext()\n\n this.scrollTargetEl.style.transition = ''\n this.scrollTargetEl.style.transform = `translate3d(0, 0, 0)`\n\n this.fillViewport()\n }\n\n /**\n * 컨텐츠가 스크롤 영역을 채우지 못하면 다음 페이지를 자동 로드한다.\n */\n private _filling = false\n\n private async fillViewport() {\n if (this._filling) return\n this._filling = true\n\n try {\n const el = this.scrollTargetEl\n if (!el) return\n\n const { limit } = this._infiniteScrollOptions\n\n while (this._page < this._total / limit && el.scrollHeight <= el.clientHeight) {\n await this.appendBoards()\n await this.updateComplete\n }\n } finally {\n this._filling = false\n }\n }\n\n /**\n * 기존 목록을 유지하면서 변경된 보드만 갱신한다.\n * 스크롤 위치가 보존된다.\n */\n async incrementalRefresh() {\n if (!this._lastFetchTime || this.boards.length === 0) {\n return this.refreshBoards()\n }\n\n const updatedBoards = await fetchBoardsUpdatedSince(this._lastFetchTime)\n\n if (updatedBoards && updatedBoards.length > 0) {\n const updatedMap = new Map(updatedBoards.map((b: any) => [b.id, b]))\n const changedIds: string[] = []\n\n this.boards = this.boards\n .map(board => {\n const updated: any = updatedMap.get(board.id)\n if (!updated) return board\n // 삭제되었거나 현재 그룹에서 벗어난 경우 제거\n if (updated.deletedAt || (this.groupId && updated.group?.id !== this.groupId)) return null\n changedIds.push(updated.id)\n return updated\n })\n .filter(Boolean) as any[]\n\n this._updatedBoardIds = changedIds\n }\n\n this._lastFetchTime = new Date()\n }\n\n async appendBoards() {\n if (!this.groups) {\n await this.refresh()\n return\n }\n\n const { items: appendedBoards, total } = await this.getBoards({ page: this._page + 1 })\n const existingIds = new Set(this.boards.map(b => b.id))\n const newBoards = appendedBoards.filter(b => !existingIds.has(b.id))\n this.boards = [...this.boards, ...newBoards]\n this._page = this._page + 1\n this._total = total\n this._lastFetchTime = new Date()\n }\n\n async scrollAction() {\n return this.appendBoards()\n }\n\n async pageInitialized() {\n this.refresh()\n }\n\n async pageUpdated(changes, lifecycle) {\n if (this.active) {\n const prevGroupId = this.groupId\n const prevSearchText = this.searchText\n this.page = lifecycle.page\n this.groupId = lifecycle.resourceId\n this.searchText = lifecycle.params?.search || ''\n\n await this.updateComplete\n\n // 검색어가 변경되었으면 전체 갱신\n // 같은 그룹으로 복귀하고 기존 데이터가 있으면 변경분만 갱신 (스크롤 유지)\n if (prevSearchText !== this.searchText) {\n this.refreshBoards()\n } else if (prevGroupId === this.groupId && this.boards.length > 0 && this._lastFetchTime) {\n this.incrementalRefresh()\n } else {\n this.refreshBoards()\n }\n }\n }\n\n private _unsubscribe?: () => void\n\n\n connectedCallback() {\n\n super.connectedCallback()\n\n this._applyState()\n\n this._unsubscribe = store.subscribe(() => this._applyState())\n\n }\n\n\n disconnectedCallback() {\n\n super.disconnectedCallback()\n\n this._unsubscribe?.()\n\n }\n\n\n private _applyState() {\n const __state__ = store.getState() as any\n this.favorites = __state__.favorite.favorites\n }\n\n firstUpdated() {\n const list = this.scrollTargetEl\n\n pulltorefresh({\n container: this.renderRoot,\n scrollable: list,\n refresh: () => {\n return this.refresh()\n }\n })\n\n swipe({\n container: list,\n animates: {\n dragging: async (d, opts) => {\n const groups = [{ id: '' }, { id: 'favor' }, ...this.groups]\n const currentIndex = groups.findIndex(group => group.id == this.groupId)\n\n if ((d > 0 && currentIndex <= 0) || (d < 0 && currentIndex >= groups.length - 1)) {\n /* TODO blocked gesture */\n return false\n }\n\n list.style.transform = `translate3d(${d}px, 0, 0)`\n },\n aborting: async opts => {\n list.style.transition = 'transform 0.3s'\n list.style.transform = `translate3d(0, 0, 0)`\n\n setTimeout(() => {\n list.style.transition = ''\n })\n },\n swiping: async (d, opts) => {\n const groups = [{ id: '' }, { id: 'favor' }, ...this.groups]\n const currentIndex = groups.findIndex(group => group.id == this.groupId)\n\n if ((d > 0 && currentIndex <= 0) || (d < 0 && currentIndex >= groups.length - 1)) {\n list.style.transition = ''\n list.style.transform = `translate3d(0, 0, 0)`\n } else {\n list.style.transition = 'transform 0.3s'\n list.style.transform = `translate3d(${d < 0 ? '-100%' : '100%'}, 0, 0)`\n\n navigate(\n `${this.page}/${groups[currentIndex + (d < 0 ? 1 : -1)].id}${this.searchText ? '?search=' + this.searchText : ''}`\n )\n }\n }\n }\n })\n }\n\n async onInfoBoard(board) {\n openOverlay('viewpart-info', {\n template: html`\n <board-info\n .board=${board}\n .groupId=${this.groupId}\n @clone-board=${e => this.onCloneBoard(e.detail)}\n @release-board=${e => this.onReleaseBoard(e.detail)}\n @revert-board-version=${e => this.onRevertBoardVersion(e.detail)}\n @update-board=${e => this.onUpdateBoard(e.detail)}\n @delete-board=${e => this.onDeleteBoard(e.detail)}\n @join-playgroup=${e => this.onJoinPlayGroup(e.detail)}\n @leave-playgroup=${e => this.onLeavePlayGroup(e.detail)}\n @register-template=${e => this.onRegisterTemplate(e.detail)}\n ></board-info>\n `\n })\n }\n\n async onInfoGroup(groupId) {\n openOverlay('viewpart-info', {\n template: html`\n <group-info\n .groupId=${groupId}\n @update-group=${e => this.onUpdateGroup(e.detail)}\n @delete-group=${e => this.onDeleteGroup(e.detail)}\n @create-group=${e => this.onCreateGroup(e.detail)}\n @import-boards=${e => this.onImportBoards(e.detail)}\n ></group-info>\n `\n })\n }\n\n async onCreateGroup(group) {\n try {\n const data = await createGroup(group)\n data && this._notify('info', i18next.t('text.group created', { group: group.name }))\n } catch (ex) {\n this._notify('error', ex, ex)\n }\n\n this.refresh()\n }\n\n async onUpdateGroup(group) {\n try {\n const data = await updateGroup(group)\n data && this._notify('info', i18next.t('text.group updated', { group: group.name }))\n } catch (ex) {\n this._notify('error', ex, ex)\n }\n\n this.refresh()\n }\n\n async onDeleteGroup(group) {\n try {\n const data = await deleteGroup(group.id)\n data && this._notify('info', i18next.t('text.group deleted', { group: group.name }))\n } catch (ex) {\n this._notify('error', ex, ex)\n }\n\n this.refresh()\n }\n\n async onImportBoards({ group, files, overwrite }) {\n try {\n const data = await importBoards({ groupId: group.id, files, overwrite })\n data && this._notify('info', i18next.t('text.boards imported', { count: files.length, group: group.name }))\n } catch (ex) {\n this._notify('error', ex, ex)\n }\n\n this.refresh()\n }\n\n async onReorderBoards({ boardIds, movedId }) {\n if (!movedId) return\n\n // sortOrder가 없는 보드에 index 기반 기본값 부여\n this.boards.forEach((b, i) => {\n if (b.sortOrder == null) b.sortOrder = i\n })\n\n // 새 순서로 배열 재구성\n const reordered = boardIds.map(id => this.boards.find(b => b.id === id)).filter(Boolean)\n\n // 이웃 보드의 sortOrder로 중간값 계산\n const newIndex = boardIds.indexOf(movedId)\n const prevBoard = newIndex > 0 ? reordered[newIndex - 1] : null\n const nextBoard = newIndex < reordered.length - 1 ? reordered[newIndex + 1] : null\n\n const prevOrder = prevBoard?.sortOrder ?? 0\n const nextOrder = nextBoard?.sortOrder ?? (prevOrder + 2)\n const newSortOrder = prevBoard ? (prevOrder + nextOrder) / 2 : nextOrder - 1\n\n const movedBoard = reordered.find(b => b.id === movedId)\n if (movedBoard) {\n movedBoard.sortOrder = newSortOrder\n }\n this.boards = reordered\n\n try {\n await client.mutate({\n mutation: gql`\n mutation ($id: String!, $sortOrder: Float!) {\n reorderBoard(id: $id, sortOrder: $sortOrder)\n }\n `,\n variables: { id: movedId, sortOrder: newSortOrder }\n })\n } catch (ex) {\n this._notify('error', ex, ex)\n this.refreshBoards()\n }\n }\n\n async onCreateBoard(board) {\n try {\n if (!board.model) {\n board.model = {\n width: 800,\n height: 600\n }\n }\n\n const data = await createBoard(board)\n\n data && this._notify('info', i18next.t('text.board created', { board: board.name }))\n } catch (ex) {\n this._notify('error', ex, ex)\n }\n\n this.refreshBoards()\n }\n\n async onCloneBoard({ id, name, description, targetSubdomain, targetGroupId }) {\n try {\n const data = await cloneBoard({\n id,\n name,\n description,\n targetSubdomain,\n targetGroupId\n })\n data && this._notify('info', i18next.t('text.board cloned', { board: name }))\n } catch (ex) {\n this._notify('error', ex, ex)\n }\n\n this.incrementalRefresh()\n }\n\n async onReleaseBoard(board) {\n try {\n const data = await releaseBoard(board)\n data && this._notify('info', i18next.t('text.board released', { board: board.name }))\n } catch (ex) {\n this._notify('error', ex, ex)\n }\n\n this.incrementalRefresh()\n }\n\n async onRevertBoardVersion({ id, version }) {\n try {\n const board = await revertBoardVersion(id, version)\n board && this._notify('info', i18next.t('text.board reverted', { board: board.name, version }))\n } catch (ex) {\n this._notify('error', ex, ex)\n }\n\n this.incrementalRefresh()\n }\n\n async onUpdateBoard(board) {\n try {\n const data = await updateBoard(board)\n data && this._notify('info', i18next.t('text.board updated', { board: board.name }))\n } catch (ex) {\n this._notify('error', ex, ex)\n }\n\n this.incrementalRefresh()\n }\n\n async onDeleteBoard(board) {\n try {\n const data = await deleteBoard(board.id)\n data && this._notify('info', i18next.t('text.board deleted', { board: board.name }))\n } catch (ex) {\n this._notify('error', ex, ex)\n }\n\n this.incrementalRefresh()\n }\n\n async onJoinPlayGroup({ board, playGroup }) {\n try {\n const { data } = await client.mutate({\n mutation: gql`\n mutation JoinPlayGroup($id: String!, $boardIds: [String!]!) {\n joinPlayGroup(id: $id, boardIds: $boardIds) {\n id\n }\n }\n `,\n variables: {\n id: playGroup.id,\n boardIds: [board.id]\n }\n })\n\n data &&\n this._notify('info', i18next.t('text.joined into play-group', { board: board.name, playGroup: playGroup.name }))\n } catch (ex) {\n this._notify('error', ex, ex)\n }\n }\n\n async onLeavePlayGroup({ board, playGroup }) {\n try {\n const { data } = await client.mutate({\n mutation: gql`\n mutation ($id: String!, $boardIds: [String!]!) {\n leavePlayGroup(id: $id, boardIds: $boardIds) {\n id\n }\n }\n `,\n variables: {\n id: playGroup.id,\n boardIds: [board.id]\n }\n })\n\n data &&\n this._notify('info', i18next.t('text.leaved from play-group', { board: board.name, playGroup: playGroup.name }))\n } catch (ex) {\n this._notify('error', ex, ex)\n }\n }\n\n async onRegisterTemplate({ id, name, description, visibility }) {\n try {\n const { data } = await client.mutate({\n mutation: gql`\n mutation ($id: String!, $name: String!, $description: String!, $visibility: String!) {\n registerBoardAsTemplate(id: $id, name: $name, description: $description, visibility: $visibility) {\n id\n }\n }\n `,\n variables: {\n id,\n name,\n description,\n visibility\n }\n })\n\n data &&\n this._notify('info', i18next.t('text.info_x_successfully', { x: i18next.t('text.register-template') }), {\n name\n })\n } catch (ex) {\n this._notify('error', ex, ex)\n }\n }\n\n async refreshFavorites() {\n const { data } = await client.query({\n query: gql`\n query {\n myFavorites {\n id\n routing\n }\n }\n `\n })\n\n data &&\n store.dispatch({\n type: UPDATE_FAVORITES,\n favorites: data.myFavorites.map(favorite => favorite.routing)\n })\n }\n\n _notify(level: 'info' | 'error' | 'warn', message: any, ex?: any) {\n document.dispatchEvent(\n new CustomEvent('notify', {\n detail: {\n level,\n message,\n ex\n }\n })\n )\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"board-list-page.js","sourceRoot":"","sources":["../../client/pages/board-list-page.ts"],"names":[],"mappings":"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","sourcesContent":["import '../viewparts/board-info.js'\nimport '../viewparts/group-info.js'\nimport '../board-list/board-tile-list.js'\nimport '../board-list/group-bar.js'\n\nimport gql from 'graphql-tag'\nimport { css, html } from 'lit'\nimport { customElement, property, query, state } from 'lit/decorators.js'\nimport { client } from '@operato/graphql'\nimport { i18next, localize } from '@operato/i18n'\nimport { openOverlay } from '@operato/layout'\nimport { pulltorefresh } from '@operato/pull-to-refresh'\nimport { navigate, PageView, store } from '@operato/shell'\nimport { ScrollbarStyles } from '@operato/styles'\nimport InfiniteScrollable from '@operato/utils/mixins/infinite-scrollable.js'\nimport { UPDATE_FAVORITES } from '@things-factory/fav-base/client/index.js'\nimport { swipe } from '@things-factory/utils/src/index.js'\n\nimport {\n cloneBoard,\n releaseBoard,\n revertBoardVersion,\n createBoard,\n createGroup,\n deleteBoard,\n deleteGroup,\n fetchBoardList,\n fetchBoardsUpdatedSince,\n fetchFavoriteBoardList,\n fetchMyBoardList,\n fetchGroupList,\n updateBoard,\n updateGroup,\n importBoards\n} from '../graphql'\n\nconst BoardListPageBase = localize(i18next)(InfiniteScrollable(PageView)) as typeof PageView\n\n\n@customElement('board-list-page')\nexport class BoardListPage extends BoardListPageBase {\n static styles = [\n ScrollbarStyles,\n css`\n :host {\n display: flex;\n flex-direction: column;\n position: relative;\n\n overflow: hidden;\n }\n\n board-tile-list {\n flex: 1;\n overflow-y: auto;\n }\n\n #create {\n position: absolute;\n bottom: 15px;\n right: 16px;\n }\n `\n ]\n\n @property({ type: String }) groupId?: string\n @property({ type: Array }) groups: any[] = []\n @property({ type: Array }) boards: any[] = []\n @property({ type: Array }) favorites: any[] = []\n\n @state() showMainBoardOnly: boolean = true\n @state() searchText: string = ''\n\n @query('board-tile-list') scrollTargetEl!: HTMLElement\n\n private _page: number = 1\n private _total: number = 0 /* required for infinite-scrolling */\n\n private page?: string\n private _lastFetchTime?: Date\n @state() private _updatedBoardIds: string[] = []\n\n get context() {\n const groupId = this.groupId\n const group = this.groups && this.groups.find(group => group.id === groupId)\n\n return {\n title: {\n icon: 'dashboard',\n text: group\n ? 'Group ' + group.name\n : groupId == 'favor'\n ? 'Favorite'\n : groupId == 'mywork'\n ? 'My works'\n : 'Board List'\n },\n search: {\n handler: search => {\n this.searchText = search\n this.refreshBoards()\n\n // URL에 검색어 반영 → 페이지 복귀 시 유지\n const url = new URL(window.location.href)\n if (search) {\n url.searchParams.set('search', search)\n } else {\n url.searchParams.delete('search')\n }\n history.replaceState(null, '', url.href)\n },\n value: this.searchText || ''\n },\n board_topmenu: true\n }\n }\n\n _infiniteScrollOptions: any\n\n constructor() {\n super()\n\n this._infiniteScrollOptions.limit = 50\n }\n\n render() {\n return html`\n <group-bar\n .groups=${this.groups}\n .groupId=${this.groupId}\n targetPage=\"board-list\"\n @info-group=${e => this.onInfoGroup(e.detail)}\n @show-all-board-type=${e => this.showAllBoardType(e)}\n ></group-bar>\n\n <board-tile-list\n id=\"list\"\n .boards=${this.boards}\n .favorites=${this.favorites}\n .groups=${this.groups}\n .group=${this.groupId}\n .updatedIds=${this._updatedBoardIds}\n search-text=${this.searchText}\n @info-board=${e => this.onInfoBoard(e.detail)}\n @scroll=${e => {\n ;(this as any).onScroll(e)\n }}\n @create-board=${e => this.onCreateBoard(e.detail)}\n @refresh-favorites=${e => this.refreshFavorites()}\n @reordered=${e => this.onReorderBoards(e.detail)}\n creatable\n reorderable\n ></board-tile-list>\n `\n }\n\n async refresh() {\n this.groups = (await fetchGroupList()).groups.items\n\n if (this.groups) {\n await this.refreshBoards()\n }\n }\n\n showAllBoardType(e) {\n this.showMainBoardOnly = !e.detail\n this.refreshBoards()\n }\n\n async getBoards({ page = 1, limit = this._infiniteScrollOptions.limit } = {}) {\n if (this.groupId && this.groupId == 'favor') {\n return await this.getFavoriteBoards({\n page,\n limit\n })\n } else if (this.groupId && this.groupId == 'mywork') {\n return await this.getMyBoards({\n page,\n limit\n })\n }\n\n const filters = [] as any[]\n\n if (this.groupId) {\n filters.push({\n name: 'groupId',\n operator: 'eq',\n value: this.groupId\n })\n }\n\n if (this.searchText) {\n filters.push({\n name: 'name',\n operator: 'search',\n value: '%' + this.searchText + '%'\n })\n }\n\n if (this.showMainBoardOnly) {\n filters.push({\n name: 'type',\n operator: 'eq',\n value: 'main'\n })\n }\n\n const listParam = {\n filters,\n sortings: [\n {\n name: 'sortOrder',\n desc: false\n },\n {\n name: 'name',\n desc: false\n }\n ],\n pagination: {\n page,\n limit\n }\n }\n\n return (await fetchBoardList(listParam)).boards\n }\n\n async getFavoriteBoards({ page = 1, limit = this._infiniteScrollOptions.limit } = {}) {\n const filters = [] as any[]\n\n if (this.searchText) {\n filters.push({\n name: 'name',\n operator: 'search',\n value: '%' + this.searchText + '%'\n })\n }\n\n const listParam = {\n filters,\n pagination: {\n page,\n limit\n }\n }\n\n return (await fetchFavoriteBoardList(listParam)).favoriteBoards\n }\n\n async getMyBoards({ page = 1, limit = this._infiniteScrollOptions.limit } = {}) {\n const filters = [] as any[]\n\n if (this.searchText) {\n filters.push({\n name: 'name',\n operator: 'search',\n value: '%' + this.searchText + '%'\n })\n }\n\n const listParam = {\n filters,\n pagination: {\n page,\n limit\n }\n }\n\n return (await fetchMyBoardList(listParam)).boardsCreatedByMe\n }\n\n async refreshBoards() {\n if (!this.groups) {\n await this.refresh()\n return\n }\n\n const { items: boards, total } = await this.getBoards()\n this.boards = boards\n this._page = 1\n this._total = total\n this._lastFetchTime = new Date()\n\n this.updateContext()\n\n this.scrollTargetEl.style.transition = ''\n this.scrollTargetEl.style.transform = `translate3d(0, 0, 0)`\n\n this.fillViewport()\n }\n\n /**\n * 컨텐츠가 스크롤 영역을 채우지 못하면 다음 페이지를 자동 로드한다.\n */\n private _filling = false\n\n private async fillViewport() {\n if (this._filling) return\n this._filling = true\n\n try {\n const el = this.scrollTargetEl\n if (!el) return\n\n const { limit } = this._infiniteScrollOptions\n\n while (this._page < this._total / limit && el.scrollHeight <= el.clientHeight) {\n await this.appendBoards()\n await this.updateComplete\n }\n } finally {\n this._filling = false\n }\n }\n\n /**\n * 기존 목록을 유지하면서 변경된 보드만 갱신한다.\n * 스크롤 위치가 보존된다.\n */\n async incrementalRefresh() {\n if (!this._lastFetchTime || this.boards.length === 0) {\n return this.refreshBoards()\n }\n\n const updatedBoards = await fetchBoardsUpdatedSince(this._lastFetchTime)\n\n if (updatedBoards && updatedBoards.length > 0) {\n const updatedMap = new Map(updatedBoards.map((b: any) => [b.id, b]))\n const changedIds: string[] = []\n\n this.boards = this.boards\n .map(board => {\n const updated: any = updatedMap.get(board.id)\n if (!updated) return board\n // 삭제되었거나 현재 그룹에서 벗어난 경우 제거\n if (updated.deletedAt || (this.groupId && updated.group?.id !== this.groupId)) return null\n changedIds.push(updated.id)\n return updated\n })\n .filter(Boolean) as any[]\n\n this._updatedBoardIds = changedIds\n }\n\n this._lastFetchTime = new Date()\n }\n\n async appendBoards() {\n if (!this.groups) {\n await this.refresh()\n return\n }\n\n const { items: appendedBoards, total } = await this.getBoards({ page: this._page + 1 })\n const existingIds = new Set(this.boards.map(b => b.id))\n const newBoards = appendedBoards.filter(b => !existingIds.has(b.id))\n this.boards = [...this.boards, ...newBoards]\n this._page = this._page + 1\n this._total = total\n this._lastFetchTime = new Date()\n }\n\n async scrollAction() {\n return this.appendBoards()\n }\n\n async pageInitialized() {\n this.refresh()\n }\n\n async pageUpdated(changes, lifecycle) {\n if (this.active) {\n const prevGroupId = this.groupId\n const prevSearchText = this.searchText\n this.page = lifecycle.page\n this.groupId = lifecycle.resourceId\n this.searchText = lifecycle.params?.search || ''\n\n await this.updateComplete\n\n // 검색어가 변경되었으면 전체 갱신\n // 같은 그룹으로 복귀하고 기존 데이터가 있으면 변경분만 갱신 (스크롤 유지)\n if (prevSearchText !== this.searchText) {\n this.refreshBoards()\n } else if (prevGroupId === this.groupId && this.boards.length > 0 && this._lastFetchTime) {\n this.incrementalRefresh()\n } else {\n this.refreshBoards()\n }\n }\n }\n\n private _unsubscribe?: () => void\n\n\n connectedCallback() {\n\n super.connectedCallback()\n\n this._applyState()\n\n this._unsubscribe = store.subscribe(() => this._applyState())\n\n }\n\n\n disconnectedCallback() {\n\n super.disconnectedCallback()\n\n this._unsubscribe?.()\n\n }\n\n\n private _applyState() {\n const __state__ = store.getState() as any\n this.favorites = __state__.favorite.favorites\n }\n\n firstUpdated() {\n const list = this.scrollTargetEl\n\n pulltorefresh({\n container: this.renderRoot,\n scrollable: list,\n refresh: () => {\n return this.refresh()\n }\n })\n\n swipe({\n container: list,\n animates: {\n dragging: async (d, opts) => {\n const groups = [{ id: '' }, { id: 'favor' }, ...this.groups]\n const currentIndex = groups.findIndex(group => group.id == this.groupId)\n\n if ((d > 0 && currentIndex <= 0) || (d < 0 && currentIndex >= groups.length - 1)) {\n /* TODO blocked gesture */\n return false\n }\n\n list.style.transform = `translate3d(${d}px, 0, 0)`\n },\n aborting: async opts => {\n list.style.transition = 'transform 0.3s'\n list.style.transform = `translate3d(0, 0, 0)`\n\n setTimeout(() => {\n list.style.transition = ''\n })\n },\n swiping: async (d, opts) => {\n const groups = [{ id: '' }, { id: 'favor' }, ...this.groups]\n const currentIndex = groups.findIndex(group => group.id == this.groupId)\n\n if ((d > 0 && currentIndex <= 0) || (d < 0 && currentIndex >= groups.length - 1)) {\n list.style.transition = ''\n list.style.transform = `translate3d(0, 0, 0)`\n } else {\n list.style.transition = 'transform 0.3s'\n list.style.transform = `translate3d(${d < 0 ? '-100%' : '100%'}, 0, 0)`\n\n navigate(\n `${this.page}/${groups[currentIndex + (d < 0 ? 1 : -1)].id}${this.searchText ? '?search=' + this.searchText : ''}`\n )\n }\n }\n }\n })\n }\n\n async onInfoBoard(board) {\n openOverlay('viewpart-info', {\n template: html`\n <board-info\n .board=${board}\n .groupId=${this.groupId}\n @clone-board=${e => this.onCloneBoard(e.detail)}\n @release-board=${e => this.onReleaseBoard(e.detail)}\n @revert-board-version=${e => this.onRevertBoardVersion(e.detail)}\n @update-board=${e => this.onUpdateBoard(e.detail)}\n @delete-board=${e => this.onDeleteBoard(e.detail)}\n @join-playgroup=${e => this.onJoinPlayGroup(e.detail)}\n @leave-playgroup=${e => this.onLeavePlayGroup(e.detail)}\n @register-template=${e => this.onRegisterTemplate(e.detail)}\n ></board-info>\n `\n })\n }\n\n async onInfoGroup(groupId) {\n openOverlay('viewpart-info', {\n template: html`\n <group-info\n .groupId=${groupId}\n @update-group=${e => this.onUpdateGroup(e.detail)}\n @delete-group=${e => this.onDeleteGroup(e.detail)}\n @create-group=${e => this.onCreateGroup(e.detail)}\n @import-boards=${e => this.onImportBoards(e.detail)}\n ></group-info>\n `\n })\n }\n\n async onCreateGroup(group) {\n try {\n const data = await createGroup(group)\n data && this._notify('info', i18next.t('text.group created', { group: group.name }))\n } catch (ex) {\n this._notify('error', ex, ex)\n }\n\n this.refresh()\n }\n\n async onUpdateGroup(group) {\n try {\n const data = await updateGroup(group)\n data && this._notify('info', i18next.t('text.group updated', { group: group.name }))\n } catch (ex) {\n this._notify('error', ex, ex)\n }\n\n this.refresh()\n }\n\n async onDeleteGroup(group) {\n try {\n const data = await deleteGroup(group.id)\n data && this._notify('info', i18next.t('text.group deleted', { group: group.name }))\n } catch (ex) {\n this._notify('error', ex, ex)\n }\n\n this.refresh()\n }\n\n async onImportBoards({ group, files, overwrite }) {\n try {\n const data = await importBoards({ groupId: group.id, files, overwrite })\n data && this._notify('info', i18next.t('text.boards imported', { count: files.length, group: group.name }))\n } catch (ex) {\n this._notify('error', ex, ex)\n }\n\n this.refresh()\n }\n\n async onReorderBoards({ boardIds, movedId }) {\n if (!movedId) return\n\n const newIndex = boardIds.indexOf(movedId)\n const prevId = newIndex > 0 ? boardIds[newIndex - 1] : undefined\n const nextId = newIndex < boardIds.length - 1 ? boardIds[newIndex + 1] : undefined\n\n this.boards = boardIds.map(id => this.boards.find(b => b.id === id)).filter(Boolean)\n\n try {\n await client.mutate({\n mutation: gql`\n mutation ($id: String!, $prevId: String, $nextId: String) {\n reorderBoard(id: $id, prevId: $prevId, nextId: $nextId)\n }\n `,\n variables: { id: movedId, prevId, nextId }\n })\n } catch (ex) {\n this._notify('error', ex, ex)\n this.refreshBoards()\n }\n }\n\n async onCreateBoard(board) {\n try {\n if (!board.model) {\n board.model = {\n width: 800,\n height: 600\n }\n }\n\n const data = await createBoard(board)\n\n data && this._notify('info', i18next.t('text.board created', { board: board.name }))\n } catch (ex) {\n this._notify('error', ex, ex)\n }\n\n this.refreshBoards()\n }\n\n async onCloneBoard({ id, name, description, targetSubdomain, targetGroupId }) {\n try {\n const data = await cloneBoard({\n id,\n name,\n description,\n targetSubdomain,\n targetGroupId\n })\n data && this._notify('info', i18next.t('text.board cloned', { board: name }))\n } catch (ex) {\n this._notify('error', ex, ex)\n }\n\n this.incrementalRefresh()\n }\n\n async onReleaseBoard(board) {\n try {\n const data = await releaseBoard(board)\n data && this._notify('info', i18next.t('text.board released', { board: board.name }))\n } catch (ex) {\n this._notify('error', ex, ex)\n }\n\n this.incrementalRefresh()\n }\n\n async onRevertBoardVersion({ id, version }) {\n try {\n const board = await revertBoardVersion(id, version)\n board && this._notify('info', i18next.t('text.board reverted', { board: board.name, version }))\n } catch (ex) {\n this._notify('error', ex, ex)\n }\n\n this.incrementalRefresh()\n }\n\n async onUpdateBoard(board) {\n try {\n const data = await updateBoard(board)\n data && this._notify('info', i18next.t('text.board updated', { board: board.name }))\n } catch (ex) {\n this._notify('error', ex, ex)\n }\n\n this.incrementalRefresh()\n }\n\n async onDeleteBoard(board) {\n try {\n const data = await deleteBoard(board.id)\n data && this._notify('info', i18next.t('text.board deleted', { board: board.name }))\n } catch (ex) {\n this._notify('error', ex, ex)\n }\n\n this.incrementalRefresh()\n }\n\n async onJoinPlayGroup({ board, playGroup }) {\n try {\n const { data } = await client.mutate({\n mutation: gql`\n mutation JoinPlayGroup($id: String!, $boardIds: [String!]!) {\n joinPlayGroup(id: $id, boardIds: $boardIds) {\n id\n }\n }\n `,\n variables: {\n id: playGroup.id,\n boardIds: [board.id]\n }\n })\n\n data &&\n this._notify('info', i18next.t('text.joined into play-group', { board: board.name, playGroup: playGroup.name }))\n } catch (ex) {\n this._notify('error', ex, ex)\n }\n }\n\n async onLeavePlayGroup({ board, playGroup }) {\n try {\n const { data } = await client.mutate({\n mutation: gql`\n mutation ($id: String!, $boardIds: [String!]!) {\n leavePlayGroup(id: $id, boardIds: $boardIds) {\n id\n }\n }\n `,\n variables: {\n id: playGroup.id,\n boardIds: [board.id]\n }\n })\n\n data &&\n this._notify('info', i18next.t('text.leaved from play-group', { board: board.name, playGroup: playGroup.name }))\n } catch (ex) {\n this._notify('error', ex, ex)\n }\n }\n\n async onRegisterTemplate({ id, name, description, visibility }) {\n try {\n const { data } = await client.mutate({\n mutation: gql`\n mutation ($id: String!, $name: String!, $description: String!, $visibility: String!) {\n registerBoardAsTemplate(id: $id, name: $name, description: $description, visibility: $visibility) {\n id\n }\n }\n `,\n variables: {\n id,\n name,\n description,\n visibility\n }\n })\n\n data &&\n this._notify('info', i18next.t('text.info_x_successfully', { x: i18next.t('text.register-template') }), {\n name\n })\n } catch (ex) {\n this._notify('error', ex, ex)\n }\n }\n\n async refreshFavorites() {\n const { data } = await client.query({\n query: gql`\n query {\n myFavorites {\n id\n routing\n }\n }\n `\n })\n\n data &&\n store.dispatch({\n type: UPDATE_FAVORITES,\n favorites: data.myFavorites.map(favorite => favorite.routing)\n })\n }\n\n _notify(level: 'info' | 'error' | 'warn', message: any, ex?: any) {\n document.dispatchEvent(\n new CustomEvent('notify', {\n detail: {\n level,\n message,\n ex\n }\n })\n )\n }\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"board-player-page.js","sourceRoot":"","sources":["../../client/pages/board-player-page.ts"],"names":[],"mappings":";AAAA,OAAO,kCAAkC,CAAA;AACzC,OAAO,mCAAmC,CAAA;AAC1C,OAAO,eAAe,CAAA;AAEtB,OAAO,GAAG,MAAM,aAAa,CAAA;AAC7B,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,KAAK,CAAA;AAC/B,OAAO,EAAE,aAAa,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAA;AAC/D,OAAO,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAA;AAC1D,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAA;AACzC,OAAO,EAAE,kBAAkB,EAAE,MAAM,gCAAgC,CAAA;AACnE,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAA;AAEpD,OAAO,EAAE,WAAW,EAAE,MAAM,mCAAmC,CAAA;AAE/D,SAAS,UAAU,CAAC,KAAU;IAC5B,KAAK,MAAM,GAAG,IAAI,KAAK,EAAE,CAAC;QACxB,IAAI,KAAK,CAAC,cAAc,CAAC,GAAG,CAAC,EAAE,CAAC;YAC9B,IAAI,CAAC;gBACH,KAAK,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAA;YACrC,CAAC;YAAC,
|
|
1
|
+
{"version":3,"file":"board-player-page.js","sourceRoot":"","sources":["../../client/pages/board-player-page.ts"],"names":[],"mappings":"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","sourcesContent":["import './things-scene-components.import'\nimport '@operato/board/ox-board-player.js'\nimport '@operato/oops'\n\nimport gql from 'graphql-tag'\nimport { css, html } from 'lit'\nimport { customElement, state, query } from 'lit/decorators.js'\nimport { createBoardProvider } from '../board-provider.js'\nimport { PageView } from '@operato/shell'\nimport { clientSettingStore } from '@operato/shell/object-store.js'\nimport { client, subscribe } from '@operato/graphql'\nimport { ReferenceMap } from '@hatiolab/things-scene'\nimport { BoardPlayer } from '@operato/board/ox-board-player.js'\nimport { ApolloQueryResult } from '@apollo/client'\nfunction parseQuery(query: any) {\n for (const key in query) {\n if (query.hasOwnProperty(key)) {\n try {\n query[key] = JSON.parse(query[key])\n } catch {\n // JSON이 아닌 문자열은 원래 값 유지\n }\n }\n }\n\n return query\n}\n\n@customElement('board-player-page')\nexport class BoardPlayerPage extends PageView {\n static styles = [\n css`\n :host {\n display: flex;\n flex-direction: column;\n width: 100%;\n height: 100%;\n\n overflow: hidden;\n position: relative;\n }\n\n ox-board-player {\n flex: 1;\n }\n\n ox-oops-spinner {\n display: none;\n position: absolute;\n left: 50%;\n top: 50%;\n transform: translate(-50%, -50%);\n }\n\n ox-oops-spinner[show] {\n display: block;\n }\n\n ox-oops-note {\n display: block;\n position: absolute;\n left: 50%;\n top: 50%;\n transform: translate(-50%, -50%);\n }\n `\n ]\n\n @state() data: any\n @state() playGroup: any\n @state() playGroupId?: string | null\n @state() boards: any\n @state() showSpinner?: boolean\n\n private provider?: ReferenceMap & { dispose?: () => void }\n private subscriptionForAutoRefresh\n\n @query('ox-board-player') boardPlayer?: BoardPlayer\n\n connectedCallback() {\n super.connectedCallback()\n\n this.provider = createBoardProvider()\n }\n\n disconnectedCallback() {\n super.disconnectedCallback()\n\n this.provider!.dispose!()\n delete this.provider\n }\n\n async fetch(id: string): Promise<ApolloQueryResult<any>> {\n return await client.query({\n query: gql`\n query ($id: String!) {\n response: playGroup(id: $id) {\n id\n name\n description\n boards {\n id\n model\n }\n }\n }\n `,\n variables: {\n id\n }\n })\n }\n\n async refresh() {\n if (!this.playGroupId) {\n return\n }\n\n try {\n this.showSpinner = true\n this.updateContext()\n\n const response = await this.fetch(this.playGroupId)\n\n this.playGroup = response.data.response\n\n if (!this.playGroup) {\n throw new Error('playgroup not found')\n }\n\n this.boards = this.playGroup.boards\n } catch (ex) {\n document.dispatchEvent(\n new CustomEvent('notify', {\n detail: {\n level: 'error',\n message: ex,\n ex\n }\n })\n )\n } finally {\n this.showSpinner = false\n this.updateContext()\n\n try {\n const { autoRefresh = true } = (await clientSettingStore.get('board-view'))?.value || {}\n autoRefresh && this.startSubscribingForAutoRefresh()\n } catch {\n this.startSubscribingForAutoRefresh()\n }\n }\n }\n\n updated(changes) {\n if (changes.has('playGroupId')) {\n this.boardPlayer?.stop()\n this.refresh()\n }\n }\n\n get oopsNote() {\n return {\n icon: 'style',\n title: 'EMPTY PLAYGROUP',\n description: 'There are no board to be shown'\n }\n }\n\n get context() {\n return {\n title: this.playGroup ? this.playGroup.name : this.showSpinner ? 'Fetching playgroup...' : 'Playgroup Not Found'\n }\n }\n\n render() {\n const oops = !this.showSpinner && !this.playGroup && this.oopsNote\n\n return oops\n ? html` <ox-oops-note icon=${oops.icon} title=${oops.title} description=${oops.description}></ox-oops-note> `\n : html`\n <ox-board-player .boards=${this.boards} .data=${this.data} .provider=${this.provider}></ox-board-player>\n <ox-oops-spinner ?show=${this.showSpinner}></ox-oops-spinner>\n `\n }\n\n pageUpdated(changes, lifecycle) {\n if (this.active) {\n this.playGroupId = lifecycle.resourceId\n this.data = parseQuery({ ...lifecycle.params })\n\n this.refresh()\n } else {\n this.stopSubscribing()\n\n this.playGroupId = null\n this.boardPlayer?.stop()\n }\n }\n\n async startSubscribingForAutoRefresh() {\n if (!this.playGroup) {\n return\n }\n\n await this.stopSubscribing()\n\n this.subscriptionForAutoRefresh = await subscribe(\n {\n query: gql`\n subscription ($id: String!) {\n playGroup(id: $id) {\n id\n }\n }\n `,\n variables: {\n id: this.playGroup.id\n }\n },\n {\n next: async ({ data }) => {\n await this.stopSubscribing()\n\n // location.reload()\n if (data) {\n this.refresh()\n }\n }\n }\n )\n }\n\n async stopSubscribing() {\n await this.subscriptionForAutoRefresh?.unsubscribe()\n delete this.subscriptionForAutoRefresh\n }\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"board-viewer-page.js","sourceRoot":"","sources":["../../client/pages/board-viewer-page.ts"],"names":[],"mappings":"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","sourcesContent":["import './things-scene-components.import'\nimport '@operato/board/ox-board-viewer.js'\nimport '@operato/oops'\n\nimport gql from 'graphql-tag'\nimport { css, html } from 'lit'\nimport { customElement, property, query, state } from 'lit/decorators.js'\nimport { buildLabelPrintCommand } from '@operato/barcode'\nimport { BoardModelCache, BoardViewer } from '@operato/board'\nimport { LoadTracker } from '@hatiolab/things-scene'\nimport { PageView } from '@operato/shell'\nimport { client, gqlContext, subscribe } from '@operato/graphql'\nimport { clientSettingStore } from '@operato/shell/object-store.js'\n\nimport { provider } from '../board-provider.js'\nimport { ApolloQueryResult } from '@apollo/client'\nconst NOOP = () => {}\n\nfunction parseQuery(query: any) {\n for (const key in query) {\n if (query.hasOwnProperty(key)) {\n try {\n query[key] = JSON.parse(query[key])\n } catch (error) {\n // do nothing\n }\n }\n }\n\n return query\n}\n\n@customElement('board-viewer-page')\nexport class BoardViewerPage extends PageView {\n static styles = [\n css`\n :host {\n display: flex;\n flex-direction: column;\n\n width: 100%; /* 전체화면보기를 위해서 필요함. */\n height: 100%;\n\n overflow: hidden;\n position: relative;\n }\n\n ox-board-viewer {\n flex: 1;\n }\n\n ox-oops-spinner {\n display: none;\n position: absolute;\n left: 50%;\n top: 50%;\n transform: translate(-50%, -50%);\n }\n\n ox-oops-spinner[show] {\n display: block;\n }\n\n ox-oops-note {\n display: block;\n position: absolute;\n left: 50%;\n top: 50%;\n transform: translate(-50%, -50%);\n }\n `\n ]\n\n @property({ type: Object }) _board: any\n @property({ type: String }) _boardId?: string\n @property({ type: String }) _help?: string\n @property({ type: Boolean }) _interactive?: boolean\n @property({ type: Boolean }) _showSpinner?: boolean\n\n @state() data: any\n private _loadTracker?: LoadTracker\n\n subscriptionForAutoRefresh\n\n @query('ox-board-viewer') boardViewer!: BoardViewer\n\n get oopsNote() {\n return {\n icon: 'insert_chart_outlined',\n title: 'EMPTY BOARD',\n description: 'There are no board to be shown'\n }\n }\n\n get context() {\n return {\n title:\n this.lifecycle.params['title'] ||\n (this._board ? this._board.name : this._showSpinner ? 'Fetching board...' : ''),\n help: this._help\n }\n }\n\n render() {\n const oops = !this._showSpinner && !this._board && this.oopsNote\n\n return oops\n ? html` <ox-oops-note icon=${oops.icon} title=${oops.title} description=${oops.description}></ox-oops-note> `\n : html`\n <ox-board-viewer\n .board=${this._board}\n .provider=${provider}\n ?hide-fullscreen=${this._interactive}\n ?hide-navigation=${this._interactive}\n .data=${this.data}\n .loadTracker=${this._loadTracker}\n history\n ></ox-board-viewer>\n <ox-oops-spinner ?show=${this._showSpinner}></ox-oops-spinner>\n `\n }\n\n updated(changes) {\n if (changes.has('_boardId')) {\n this.refresh()\n }\n }\n\n pageUpdated(changes, lifecycle) {\n if (this.active) {\n this._boardId = lifecycle.resourceId\n this._interactive = lifecycle.params['interactive'] === 'true'\n this._help = lifecycle.params['help']\n this.data = parseQuery({ ...lifecycle.params })\n } else {\n // 비활성 — 철저히 클리어\n this.stopSubscribing()\n\n const boardViewer = this.boardViewer\n if (boardViewer) {\n boardViewer.closeScene()\n }\n\n this._boardId = ''\n this._board = null\n this._loadTracker = undefined\n this._showSpinner = false\n this.updateContext()\n }\n }\n\n async fetch(id: string, cachedUpdatedAt?: string): Promise<ApolloQueryResult<any> | undefined> {\n if (!id) {\n return\n }\n\n return await client.query({\n query: gql`\n query ($id: String!, $cachedUpdatedAt: String) {\n response: board(id: $id, cachedUpdatedAt: $cachedUpdatedAt) {\n id\n name\n model\n updatedAt\n }\n }\n `,\n variables: { id, cachedUpdatedAt },\n context: gqlContext()\n })\n }\n\n async refresh() {\n if (!this._boardId) {\n this._board = null\n return\n }\n\n try {\n // 이전 보드 완전히 클리어\n this._board = null\n this._loadTracker = new LoadTracker()\n this._loadTracker.setPhase('fetch')\n this._showSpinner = true\n this.updateContext()\n\n // 캐시의 updatedAt을 서버에 전달 → 동일하면 model 생략됨\n const cached = await BoardModelCache.get(this._boardId!)\n const { data, errors } = (await this.fetch(this._boardId!, cached?.updatedAt)) || {}\n\n this._loadTracker.setPhase('parse')\n\n const board = data?.response\n\n if (!board) {\n this._board = null\n const message = errors?.map(error => error.message).join('\\n')\n throw message || 'board not found'\n }\n\n if (board.model === null && cached) {\n // 서버가 model 생략 → 캐시 유효, 캐시 모델 사용\n this._board = cached\n } else {\n // 새 모델 또는 첫 로드 → 캐시 갱신\n await BoardModelCache.put(board.id, board.name, board.model, board.updatedAt)\n this._board = {\n ...board,\n model: JSON.parse(board.model)\n }\n }\n } catch (ex) {\n document.dispatchEvent(\n new CustomEvent('notify', {\n detail: {\n level: 'error',\n message: ex,\n ex\n }\n })\n )\n } finally {\n this._showSpinner = false\n this.updateContext()\n\n try {\n const { autoRefresh = true } = (await clientSettingStore.get('board-view'))?.value || {}\n autoRefresh && this.startSubscribingForAutoRefresh()\n } catch { /* clientSettingStore 접근 실패 시 기본값으로 autoRefresh */\n this.startSubscribingForAutoRefresh()\n }\n }\n }\n\n async startSubscribingForAutoRefresh() {\n if (!this._board) {\n return\n }\n\n await this.stopSubscribing()\n\n this.subscriptionForAutoRefresh = await subscribe(\n {\n query: gql`\n subscription ($id: String!) {\n board(id: $id) {\n id\n }\n }\n `,\n variables: {\n id: this._board.id\n }\n },\n {\n next: async ({ data }) => {\n await this.stopSubscribing()\n\n if (data) {\n this.refresh()\n }\n }\n }\n )\n }\n\n async stopSubscribing() {\n await this.subscriptionForAutoRefresh?.unsubscribe()\n delete this.subscriptionForAutoRefresh\n }\n\n async getGrf() {\n const { labelRotation } = this._board.model\n\n const { width, height, data } = (await this.boardViewer.getSceneImageData()) || {}\n if (!width || !data) {\n throw new Error('Cannot get SceneImageData...')\n }\n\n return buildLabelPrintCommand(data as Uint8ClampedArray, width, height, labelRotation, false, false)\n }\n\n async printTrick(image) {\n await this.boardViewer.printTrick(image)\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"board-viewer-page.js","sourceRoot":"","sources":["../../client/pages/board-viewer-page.ts"],"names":[],"mappings":"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","sourcesContent":["import './things-scene-components.import'\nimport '@operato/board/ox-board-viewer.js'\nimport '@operato/oops'\n\nimport gql from 'graphql-tag'\nimport { css, html } from 'lit'\nimport { customElement, property, query, state } from 'lit/decorators.js'\nimport { buildLabelPrintCommand } from '@operato/barcode'\nimport { BoardModelCache, BoardViewer } from '@operato/board'\nimport { LoadTracker } from '@hatiolab/things-scene'\nimport { PageView } from '@operato/shell'\nimport { client, gqlContext, subscribe } from '@operato/graphql'\nimport { clientSettingStore } from '@operato/shell/object-store.js'\n\nimport { provider } from '../board-provider.js'\nimport { ApolloQueryResult } from '@apollo/client'\nconst NOOP = () => {}\n\nfunction parseQuery(query: any) {\n for (const key in query) {\n if (query.hasOwnProperty(key)) {\n try {\n query[key] = JSON.parse(query[key])\n } catch {\n // JSON이 아닌 문자열은 원래 값 유지\n }\n }\n }\n\n return query\n}\n\n@customElement('board-viewer-page')\nexport class BoardViewerPage extends PageView {\n static styles = [\n css`\n :host {\n display: flex;\n flex-direction: column;\n\n width: 100%; /* 전체화면보기를 위해서 필요함. */\n height: 100%;\n\n overflow: hidden;\n position: relative;\n }\n\n ox-board-viewer {\n flex: 1;\n }\n\n ox-oops-spinner {\n display: none;\n position: absolute;\n left: 50%;\n top: 50%;\n transform: translate(-50%, -50%);\n }\n\n ox-oops-spinner[show] {\n display: block;\n }\n\n ox-oops-note {\n display: block;\n position: absolute;\n left: 50%;\n top: 50%;\n transform: translate(-50%, -50%);\n }\n `\n ]\n\n @property({ type: Object }) _board: any\n @property({ type: String }) _boardId?: string\n @property({ type: String }) _help?: string\n @property({ type: Boolean }) _interactive?: boolean\n @property({ type: Boolean }) _showSpinner?: boolean\n\n @state() data: any\n private _loadTracker?: LoadTracker\n\n subscriptionForAutoRefresh\n\n @query('ox-board-viewer') boardViewer!: BoardViewer\n\n get oopsNote() {\n return {\n icon: 'insert_chart_outlined',\n title: 'EMPTY BOARD',\n description: 'There are no board to be shown'\n }\n }\n\n get context() {\n return {\n title:\n this.lifecycle.params['title'] ||\n (this._board ? this._board.name : this._showSpinner ? 'Fetching board...' : ''),\n help: this._help\n }\n }\n\n render() {\n const oops = !this._showSpinner && !this._board && this.oopsNote\n\n return oops\n ? html` <ox-oops-note icon=${oops.icon} title=${oops.title} description=${oops.description}></ox-oops-note> `\n : html`\n <ox-board-viewer\n .board=${this._board}\n .provider=${provider}\n ?hide-fullscreen=${this._interactive}\n ?hide-navigation=${this._interactive}\n .data=${this.data}\n .loadTracker=${this._loadTracker}\n history\n ></ox-board-viewer>\n <ox-oops-spinner ?show=${this._showSpinner}></ox-oops-spinner>\n `\n }\n\n updated(changes) {\n if (changes.has('_boardId')) {\n this.refresh()\n }\n }\n\n pageUpdated(changes, lifecycle) {\n if (this.active) {\n this._boardId = lifecycle.resourceId\n this._interactive = lifecycle.params['interactive'] === 'true'\n this._help = lifecycle.params['help']\n this.data = parseQuery({ ...lifecycle.params })\n } else {\n // 비활성 — 철저히 클리어\n this.stopSubscribing()\n\n const boardViewer = this.boardViewer\n if (boardViewer) {\n boardViewer.closeScene()\n }\n\n this._boardId = ''\n this._board = null\n this._loadTracker = undefined\n this._showSpinner = false\n this.updateContext()\n }\n }\n\n async fetch(id: string, cachedUpdatedAt?: string): Promise<ApolloQueryResult<any> | undefined> {\n if (!id) {\n return\n }\n\n return await client.query({\n query: gql`\n query ($id: String!, $cachedUpdatedAt: String) {\n response: board(id: $id, cachedUpdatedAt: $cachedUpdatedAt) {\n id\n name\n model\n updatedAt\n }\n }\n `,\n variables: { id, cachedUpdatedAt },\n context: gqlContext()\n })\n }\n\n async refresh() {\n if (!this._boardId) {\n this._board = null\n return\n }\n\n try {\n // 이전 보드 완전히 클리어\n this._board = null\n this._loadTracker = new LoadTracker()\n this._loadTracker.setPhase('fetch')\n this._showSpinner = true\n this.updateContext()\n\n // 캐시의 updatedAt을 서버에 전달 → 동일하면 model 생략됨\n const cached = await BoardModelCache.get(this._boardId!)\n const { data, errors } = (await this.fetch(this._boardId!, cached?.updatedAt)) || {}\n\n this._loadTracker.setPhase('parse')\n\n const board = data?.response\n\n if (!board) {\n this._board = null\n const message = errors?.map(error => error.message).join('\\n')\n throw message || 'board not found'\n }\n\n if (board.model === null && cached) {\n // 서버가 model 생략 → 캐시 유효, 캐시 모델 사용\n this._board = cached\n } else {\n // 새 모델 또는 첫 로드 → 캐시 갱신\n await BoardModelCache.put(board.id, board.name, board.model, board.updatedAt)\n this._board = {\n ...board,\n model: JSON.parse(board.model)\n }\n }\n } catch (ex) {\n document.dispatchEvent(\n new CustomEvent('notify', {\n detail: {\n level: 'error',\n message: ex,\n ex\n }\n })\n )\n } finally {\n this._showSpinner = false\n this.updateContext()\n\n try {\n const { autoRefresh = true } = (await clientSettingStore.get('board-view'))?.value || {}\n autoRefresh && this.startSubscribingForAutoRefresh()\n } catch { /* clientSettingStore 접근 실패 시 기본값으로 autoRefresh */\n this.startSubscribingForAutoRefresh()\n }\n }\n }\n\n async startSubscribingForAutoRefresh() {\n if (!this._board) {\n return\n }\n\n await this.stopSubscribing()\n\n this.subscriptionForAutoRefresh = await subscribe(\n {\n query: gql`\n subscription ($id: String!) {\n board(id: $id) {\n id\n }\n }\n `,\n variables: {\n id: this._board.id\n }\n },\n {\n next: async ({ data }) => {\n await this.stopSubscribing()\n\n if (data) {\n this.refresh()\n }\n }\n }\n )\n }\n\n async stopSubscribing() {\n await this.subscriptionForAutoRefresh?.unsubscribe()\n delete this.subscriptionForAutoRefresh\n }\n\n async getGrf() {\n const { labelRotation } = this._board.model\n\n const { width, height, data } = (await this.boardViewer.getSceneImageData()) || {}\n if (!width || !data) {\n throw new Error('Cannot get SceneImageData...')\n }\n\n return buildLabelPrintCommand(data as Uint8ClampedArray, width, height, labelRotation, false, false)\n }\n\n async printTrick(image) {\n await this.boardViewer.printTrick(image)\n }\n}\n"]}
|