@vitrosoftware/common-ui-ts 1.1.208 → 1.1.210

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (77) hide show
  1. package/css/std/controls/alert/alert.css +13 -3
  2. package/css/std/controls/bim-viewer/bim-viewer-index.css +4 -1
  3. package/css/std/controls/bim-viewer/style.css +4 -0
  4. package/css/std/controls/button/button.css +69 -18
  5. package/css/std/controls/command-menu/command-menu-button.css +0 -22
  6. package/css/std/controls/command-menu/command-menu-dropdown-button.css +31 -9
  7. package/css/std/controls/command-menu/command-menu-item.css +0 -10
  8. package/css/std/controls/filter/filter.css +85 -0
  9. package/css/std/controls/pdf-viewer/custom.css +1 -5
  10. package/css/std/controls/pdf-viewer/pdf-viewer-index.css +1 -24
  11. package/css/std/controls/pdf-viewer/pdf-viewer.css +0 -19
  12. package/css/std/controls/search/search-dialog.css +202 -0
  13. package/css/std/controls/search/search.css +0 -185
  14. package/css/std/controls/viewer-issue-list/viewer-issue-list.css +49 -0
  15. package/dist/index.css +3330 -3141
  16. package/dist/index.js +11939 -10568
  17. package/dist/index.js.map +1 -1
  18. package/dist/src/constants/Event.d.ts +5 -1
  19. package/dist/src/constants/Factory.d.ts +8 -0
  20. package/dist/src/constants/MoveType.d.ts +5 -0
  21. package/dist/src/controls/Alert/Alert.d.ts +3 -1
  22. package/dist/src/controls/Alert/AlertConstants.d.ts +1 -1
  23. package/dist/src/controls/BimViewer/services/BimViewerService.d.ts +10 -1
  24. package/dist/src/controls/Button/ButtonConstants.d.ts +6 -0
  25. package/dist/src/controls/DxfViewer/services/DxfViewerService.d.ts +10 -1
  26. package/dist/src/controls/Filter/CriterionFilter.d.ts +26 -0
  27. package/dist/src/controls/Filter/Filter.d.ts +28 -0
  28. package/dist/src/controls/Filter/FilterConstants.d.ts +54 -0
  29. package/dist/src/controls/Filter/Inputs/BaseLookupPicker.d.ts +35 -0
  30. package/dist/src/controls/Filter/Inputs/Checkbox.d.ts +10 -0
  31. package/dist/src/controls/Filter/Inputs/DatePicker.d.ts +8 -0
  32. package/dist/src/controls/Filter/Inputs/Input.d.ts +10 -0
  33. package/dist/src/controls/Filter/Inputs/LookupPicker.d.ts +2 -0
  34. package/dist/src/controls/Filter/Inputs/NumberInput.d.ts +13 -0
  35. package/dist/src/controls/Filter/Inputs/TimePicker.d.ts +8 -0
  36. package/dist/src/controls/Filter/Inputs/UserLookupPicker.d.ts +3 -0
  37. package/dist/src/controls/Filter/SortFilter.d.ts +14 -0
  38. package/dist/src/controls/Filter/models/SortCriterion.d.ts +7 -0
  39. package/dist/src/controls/Filter/models/SortItem.d.ts +4 -0
  40. package/dist/src/controls/PdfViewer/services/PdfViewerService.d.ts +10 -1
  41. package/dist/src/controls/Search/Search.d.ts +11 -24
  42. package/dist/src/controls/Search/SearchConstants.d.ts +12 -0
  43. package/dist/src/controls/Search/SearchDialog.d.ts +23 -0
  44. package/dist/src/controls/Tooltip/Tooltip.d.ts +1 -0
  45. package/dist/src/controls/ViewerIssueList/ViewerIssueList.d.ts +28 -0
  46. package/dist/src/index.d.ts +5 -1
  47. package/dist/src/models/Action.d.ts +20 -0
  48. package/dist/src/models/ContentType.d.ts +17 -0
  49. package/dist/src/models/ContentTypeView.d.ts +5 -0
  50. package/dist/src/models/Field.d.ts +13 -0
  51. package/dist/src/models/FieldType.d.ts +5 -0
  52. package/dist/src/models/Item.d.ts +22 -0
  53. package/dist/src/models/ItemCopyRequest.d.ts +5 -0
  54. package/dist/src/models/ItemId.d.ts +7 -0
  55. package/dist/src/models/ItemPath.d.ts +5 -0
  56. package/dist/src/models/ItemUpdateRequest.d.ts +8 -0
  57. package/dist/src/models/ListConfig.d.ts +25 -0
  58. package/dist/src/models/Site.d.ts +10 -0
  59. package/dist/src/models/ViewPart.d.ts +7 -0
  60. package/dist/src/models/ViewPartList.d.ts +7 -0
  61. package/dist/src/models.d.ts +3 -0
  62. package/dist/src/services/ColumnService.d.ts +9 -0
  63. package/dist/src/services/ContentTypeService.d.ts +8 -0
  64. package/dist/src/services/EventHandlerService.d.ts +4 -0
  65. package/dist/src/services/EventService.d.ts +6 -0
  66. package/dist/src/services/GuidService.d.ts +3 -0
  67. package/dist/src/services/ImageService.d.ts +7 -0
  68. package/dist/src/services/ItemSelectDialogService.d.ts +12 -0
  69. package/dist/src/services/ItemService.d.ts +24 -0
  70. package/dist/src/services/LookupListItemService.d.ts +9 -0
  71. package/lib/dxf-viewer/parser/entities/lwpolyline.js +2 -0
  72. package/lib/dxf-viewer/parser/entities/viewport.js +11 -0
  73. package/package.json +1 -1
  74. package/src/controls/BimViewer/js/bim-viewer.js +50 -7
  75. package/src/controls/DxfViewer/js/dxf-viewer.js +92 -30
  76. package/src/controls/PdfViewer/js/pdf-viewer.js +136 -23
  77. package/css/std/controls/button-cancel/button-cancel.css +0 -13
@@ -0,0 +1,5 @@
1
+ export interface ItemPath {
2
+ childCount: number;
3
+ path: string[];
4
+ scopeId: string;
5
+ }
@@ -0,0 +1,8 @@
1
+ export interface ItemUpdateRequest {
2
+ listId: string;
3
+ id?: string;
4
+ contentTypeId?: string;
5
+ parentId?: string;
6
+ file?: File;
7
+ fieldValueMap?: Map<string, any>;
8
+ }
@@ -0,0 +1,25 @@
1
+ import { ContentType } from './ContentType';
2
+ import { ContentTypeView } from './ContentTypeView';
3
+ import { Action } from './Action';
4
+ import { Site } from './Site';
5
+ export interface ListConfig {
6
+ id: string;
7
+ contentTypeList: ContentType[];
8
+ data: string;
9
+ fieldList: any[];
10
+ name: string;
11
+ statusList: any[];
12
+ description: string;
13
+ listAction: {
14
+ [key: string]: Action[];
15
+ };
16
+ siteId: string;
17
+ fieldValueMap: {
18
+ [key: string]: any;
19
+ };
20
+ contentTypeViewList: ContentTypeView[];
21
+ treeListConfig?: ListConfig;
22
+ site: Site;
23
+ isDocumentArchive?: boolean;
24
+ validContentTypeIdList?: string[];
25
+ }
@@ -0,0 +1,10 @@
1
+ export interface Site {
2
+ id: string;
3
+ name: string;
4
+ description: string;
5
+ readonly fieldValueMap: {
6
+ [key: string]: any;
7
+ };
8
+ imageUrl?: string;
9
+ isSelected: boolean;
10
+ }
@@ -0,0 +1,7 @@
1
+ import { Item } from "./Item";
2
+ export interface ViewPart extends Item {
3
+ name: string;
4
+ settings: {
5
+ [key: string]: any;
6
+ };
7
+ }
@@ -0,0 +1,7 @@
1
+ import { ViewPart } from "./ViewPart";
2
+ export interface ViewPartList {
3
+ name: string;
4
+ isAdmin: boolean;
5
+ list: ViewPart[];
6
+ permission: string;
7
+ }
@@ -26,6 +26,7 @@ import { SiteSelectItem as _SiteSelectItem } from './controls/SiteSelect/models/
26
26
  import { QuillRichEditorSettings as _QuillRichEditorSettings } from './controls/Input/models/QuillRichEditorSettings';
27
27
  import { TelerikMediaPlayerSettings as _TelerikMediaPlayerSettings } from './controls/VideoViewer/models/TelerikMediaPlayerSettings';
28
28
  import { FilePickerItem as _FilePickerItem } from './controls/FilePicker/models/FilePickerItem';
29
+ import { SortItem as _SortItem } from './controls/Filter/models/SortItem';
29
30
  export declare namespace models {
30
31
  interface JsTreeViewNode extends _JsTreeViewNode {
31
32
  }
@@ -83,4 +84,6 @@ export declare namespace models {
83
84
  }
84
85
  interface FilePickerItem extends _FilePickerItem {
85
86
  }
87
+ interface SortItem extends _SortItem {
88
+ }
86
89
  }
@@ -0,0 +1,9 @@
1
+ export interface ColumnService {
2
+ getSystemList(): {
3
+ internalName: string;
4
+ name: string;
5
+ component: string;
6
+ }[];
7
+ getName(internalName: string): string;
8
+ isSystemUserLookupPicker(internalName: string): boolean;
9
+ }
@@ -0,0 +1,8 @@
1
+ import { ContentType } from '../models/ContentType';
2
+ export interface ContentTypeService {
3
+ get(contentTypeId: string): Promise<ContentType>;
4
+ getByList(listId: string): Promise<ContentType[]>;
5
+ getListByFeature(feature: {
6
+ id: string;
7
+ }[], contentTypeList: ContentType[]): ContentType[];
8
+ }
@@ -0,0 +1,4 @@
1
+ export interface EventHandlerService {
2
+ readonly id: string;
3
+ process(...params: any[]): unknown;
4
+ }
@@ -0,0 +1,6 @@
1
+ import { EventHandlerService } from './EventHandlerService';
2
+ export interface EventService {
3
+ send<T>(eventId: string, data: T, eventScopeId?: string): void;
4
+ register(eventHandler: EventHandlerService, eventScopeId?: string): void;
5
+ remove(eventHandler: EventHandlerService): void;
6
+ }
@@ -0,0 +1,3 @@
1
+ export interface GuidService {
2
+ get(): string;
3
+ }
@@ -0,0 +1,7 @@
1
+ import type { ContentType } from '../models/ContentType';
2
+ export interface ImageService {
3
+ get(name: string, contentType: ContentType): string;
4
+ getByContentType(contentType: ContentType): string;
5
+ getByFileName(name: string): string;
6
+ getByImageId(imageId: string): string;
7
+ }
@@ -0,0 +1,12 @@
1
+ export interface ItemSelectDialogService {
2
+ show(listId: string, viewId?: string, isMultiSelect?: boolean, isFolderOnly?: boolean, dialogSettings?: {
3
+ title?: string;
4
+ subtitle?: string;
5
+ image?: string;
6
+ buttonText?: string;
7
+ isListSelectEnabled?: boolean;
8
+ isShowSelection?: boolean;
9
+ }, viewSettings?: {
10
+ [key: string]: unknown;
11
+ }): Promise<string[]>;
12
+ }
@@ -0,0 +1,24 @@
1
+ import type { ItemUpdateRequest } from '../models/ItemUpdateRequest';
2
+ import type { ItemCopyRequest } from '../models/ItemCopyRequest';
3
+ import { MOVE_TYPE } from '../constants/MoveType';
4
+ import { Item } from '../models/Item';
5
+ import { ItemId } from '../models/ItemId';
6
+ export interface ItemService {
7
+ get(itemId: string | ItemId, onError?: (response: any) => void): Promise<Item>;
8
+ getListByParentId(listId: string, query?: string, sort?: {
9
+ [internalName: string]: number;
10
+ }): Promise<Array<any>>;
11
+ getList(itemIdList: string[]): Promise<Array<Item>>;
12
+ getParentList(item: Item): Promise<Array<any>>;
13
+ getRecursive(itemId: string): Promise<Array<Item>>;
14
+ createByContentType(listId: string, contentTypeId: string, parentId?: string): Promise<any>;
15
+ update(itemList: ItemUpdateRequest[]): Promise<any>;
16
+ delete(idList: string[] | string): Promise<string[]>;
17
+ restore(deleteTransactionId: string): Promise<void>;
18
+ move(itemId: string, toItemId: string, type: MOVE_TYPE): Promise<any>;
19
+ createItemUpdateRequestMap(item: ItemUpdateRequest, itemList: File[]): {
20
+ [key: string]: string | number | Array<string | number>;
21
+ };
22
+ copy(parentId: any, nodeList: ItemCopyRequest[]): Promise<any>;
23
+ createNewInstance(listId: string, contentTypeId: string, parentId: string, fieldValueMap?: Map<string, string | number>): Promise<Item>;
24
+ }
@@ -0,0 +1,9 @@
1
+ import { Item } from "../models/Item";
2
+ import { ItemId } from "../models/ItemId";
3
+ export interface LookupListItemService {
4
+ getValueList(field: Item, searchValue: string, currentItemRef?: {
5
+ item: ItemId | null;
6
+ changedFieldValueMap?: Map<string, unknown>;
7
+ }): Promise<any>;
8
+ getFilteredItemList(fieldId: string, searchValue: string, query?: string): Promise<Item[]>;
9
+ }
@@ -80,6 +80,8 @@ function parseLWPolylineVertices(n, scanner) {
80
80
  case 42: // bulge
81
81
  if(curr.value != 0) vertex.bulge = curr.value;
82
82
  break;
83
+ case 91: // Vertex Identifier - to ignore
84
+ break;
83
85
  default:
84
86
  // if we do not hit known code return vertices. Code might belong to entity
85
87
  if (vertexIsStarted) {
@@ -51,6 +51,17 @@ EntityParser.prototype.parseEntity = function(scanner, curr) {
51
51
  }
52
52
  curr = scanner.next();
53
53
  }
54
+ ProcessXData(entity);
54
55
  return entity;
55
56
  };
56
57
 
58
+
59
+ function ProcessXData(entity){
60
+ if (entity.hasOwnProperty("xdata")){
61
+ const xd = entity.xdata["[Vitro_VP]"]
62
+ if (xd !== undefined && xd !== null){
63
+ entity.viewCenter.x = xd.values[0].value
64
+ entity.viewCenter.y = xd.values[1].value
65
+ }
66
+ }
67
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@vitrosoftware/common-ui-ts",
3
- "version": "1.1.208",
3
+ "version": "1.1.210",
4
4
  "description": "vitro software common ui ts",
5
5
  "author": "",
6
6
  "license": "MIT",
@@ -1,11 +1,11 @@
1
- import { BIMModel, BIMCommon, BIMAnnotation } from '/resource/bimViewer/js/bim-viewer-models.js?version=1.1.208';
1
+ import { BIMModel, BIMCommon, BIMAnnotation } from '/resource/bimViewer/js/bim-viewer-models.js?version=1.1.210';
2
2
 
3
3
  import {
4
4
  Viewer, XKTLoaderPlugin, NavCubePlugin, SectionPlanesPlugin, math, BCFViewpointsPlugin, AnnotationsPlugin,
5
5
  ContextMenu, TreeViewPlugin, StoreyViewsPlugin, AngleMeasurementsPlugin, CameraMemento, DistanceMeasurementsPlugin,
6
6
  GLTFLoaderPlugin, utils, FastNavPlugin, MetaObject, parsers
7
7
  }
8
- from '/resource/bimViewer/js/xeokit/xeokit-sdk.es.js?version=1.1.208';
8
+ from '/resource/bimViewer/js/xeokit/xeokit-sdk.es.js?version=1.1.210';
9
9
 
10
10
 
11
11
  //----------------------------------------------------------------------------------------------------------------------
@@ -1645,7 +1645,8 @@ function clearSectionPanes() {
1645
1645
  // Load Annotations
1646
1646
  //------------------------------------------------------------------------------------------------------------------
1647
1647
  function loadAnnotations() {
1648
- context.getIssueList().then(issueList => {
1648
+ const searchCriterion = window.searchCriterionList ? window.searchCriterionList : [];
1649
+ context.getIssueList(searchCriterion).then(issueList => {
1649
1650
  issueList.map(issue => {
1650
1651
  let data = getMarkupData(issue.item);
1651
1652
  data.occludable = false;
@@ -3087,7 +3088,11 @@ const fastNavPlugin = new FastNavPlugin(viewer, {
3087
3088
  //
3088
3089
  //------------------------------------------------------------------------------------------------------------------
3089
3090
 
3090
- var notesDescriptionVisibleList = {};
3091
+ const EVENT_SEARCH_ISSUE_LIST = 'vitro.search.issue.list';
3092
+ const EVENT_ISSUE_LIST_REFRESH = 'vitro.issue.list.refresh';
3093
+ const EVENT_ISSUE_LIST_SELECT_ITEM = 'vitro.issue.list.select.item';
3094
+
3095
+ var notesDescriptionVisibleList = {};
3091
3096
 
3092
3097
  BIMAnnotation.GetNote = (callback) => {
3093
3098
  callback([]);
@@ -3296,21 +3301,25 @@ function updatePage(e) {
3296
3301
  annotations.annotations[data.id].setLabelShown(false);
3297
3302
  }
3298
3303
  }, 10);
3304
+ setTimeout(function () { refreshIssueList(); }, 250);
3299
3305
  }
3300
3306
 
3301
3307
  if (e.type === context.deleteIssueEvent) {
3302
3308
 
3303
3309
  let item = e.detail.itemList[0];
3304
3310
  annotations.destroyAnnotation(item.fieldValueMap.item_id);
3305
- if ($('.sidebar').is(':visible')) {
3306
- initSidebarNotes();
3307
- }
3311
+ refreshIssueList();
3308
3312
  if (isNoteDescriptionVisible(item.fieldValueMap.item_id)) {
3309
3313
  removeFromNotesDescriptionVisibleList(item.fieldValueMap.item_id);
3310
3314
  }
3311
3315
  }
3312
3316
  }
3313
3317
 
3318
+ function refreshIssueList() {
3319
+ const event = new CustomEvent(EVENT_ISSUE_LIST_REFRESH, { detail: {} });
3320
+ window.dispatchEvent(event);
3321
+ }
3322
+
3314
3323
  function goToNoteMarker(issue) {
3315
3324
  if (!$('#btnCreateNotes').hasClass('toggled')) {
3316
3325
  hideNotesDescription();
@@ -3898,7 +3907,41 @@ function bindBtnAddModel() {
3898
3907
  });
3899
3908
  }
3900
3909
 
3910
+ function bindUpdateDocumentMarkupList() {
3911
+ window.addEventListener(EVENT_SEARCH_ISSUE_LIST, updateDocumentMarkupList);
3912
+ }
3901
3913
 
3914
+ function updateDocumentMarkupList(e) {
3915
+ annotations.clear();
3916
+ if (e.detail.issueList && e.detail.issueList.length) {
3917
+ e.detail.issueList.map(issue => {
3918
+ let data = getMarkupData(issue.item);
3919
+ data.occludable = false;
3920
+ annotations.createAnnotation(data);
3921
+ });
3922
+ }
3923
+ }
3924
+
3925
+ bindUpdateDocumentMarkupList();
3926
+
3927
+ function highlightSidebarNote(noteId) {
3928
+ var noteWrap = $('#vitro-issue-tile-' + noteId);
3929
+
3930
+ if (!noteWrap.position()) {
3931
+ setTimeout(() => {
3932
+ highlightSidebarNote(noteId);
3933
+ }, 500);
3934
+
3935
+ return;
3936
+ }
3937
+
3938
+ selectIssueListItem(noteId);
3939
+ }
3940
+
3941
+ function selectIssueListItem(itemId) {
3942
+ const event = new CustomEvent(EVENT_ISSUE_LIST_SELECT_ITEM, { detail: { itemId: itemId } });
3943
+ window.dispatchEvent(event);
3944
+ }
3902
3945
 
3903
3946
  //------------------------------------------------------------------------------------------------------------------
3904
3947
  // Do action wherever we click on an object
@@ -1,17 +1,17 @@
1
- import * as three from '/resource/dxfViewer/js/three/three.module.js?version=1.1.208';
2
- import { Matrix3, Vector2 } from '/resource/dxfViewer/js/three/three.module.js?version=1.1.208';
3
- import { Batch, DxfViewer, Layer } from '/resource/dxfViewer/js/viewer/DxfViewer.js?version=1.1.208';
4
- import { Block as SceneBlock } from '/resource/dxfViewer/js/viewer/DxfScene.js?version=1.1.208';
5
- import { Block } from '/resource/dxfViewer/js/viewer/DxfViewer.js?version=1.1.208';
6
- import { DxfScene, Entity, ColorCode } from '/resource/dxfViewer/js/viewer/DxfScene.js?version=1.1.208';
7
- import { TextRenderer, ParseSpecialChars, HAlign, VAlign } from '/resource/dxfViewer/js/viewer/TextRenderer.js?version=1.1.208';
8
- import { DxfWorker } from '/resource/dxfViewer/js/viewer/DxfWorker.js?version=1.1.208';
9
- import { DxfFetcher } from '/resource/dxfViewer/js/viewer/DxfFetcher.js?version=1.1.208';
10
- import DxfParser from '/resource/dxfViewer/js/viewer/parser/DxfParser.js?version=1.1.208';
11
- import { RenderBatch } from '/resource/dxfViewer/js/viewer/DxfScene.js?version=1.1.208';
12
- import { DynamicBuffer, NativeType } from '/resource/dxfViewer/js/viewer/DynamicBuffer.js?version=1.1.208';
13
- import { OrbitControls } from '/resource/dxfViewer/js/viewer/OrbitControls.js?version=1.1.208';
14
- import { CSS2DRenderer, CSS2DObject } from '/resource/dxfViewer/js/three/three.module.js?version=1.1.208';
1
+ import * as three from '/resource/dxfViewer/js/three/three.module.js?version=1.1.210';
2
+ import { Matrix3, Vector2 } from '/resource/dxfViewer/js/three/three.module.js?version=1.1.210';
3
+ import { Batch, DxfViewer, Layer } from '/resource/dxfViewer/js/viewer/DxfViewer.js?version=1.1.210';
4
+ import { Block as SceneBlock } from '/resource/dxfViewer/js/viewer/DxfScene.js?version=1.1.210';
5
+ import { Block } from '/resource/dxfViewer/js/viewer/DxfViewer.js?version=1.1.210';
6
+ import { DxfScene, Entity, ColorCode } from '/resource/dxfViewer/js/viewer/DxfScene.js?version=1.1.210';
7
+ import { TextRenderer, ParseSpecialChars, HAlign, VAlign } from '/resource/dxfViewer/js/viewer/TextRenderer.js?version=1.1.210';
8
+ import { DxfWorker } from '/resource/dxfViewer/js/viewer/DxfWorker.js?version=1.1.210';
9
+ import { DxfFetcher } from '/resource/dxfViewer/js/viewer/DxfFetcher.js?version=1.1.210';
10
+ import DxfParser from '/resource/dxfViewer/js/viewer/parser/DxfParser.js?version=1.1.210';
11
+ import { RenderBatch } from '/resource/dxfViewer/js/viewer/DxfScene.js?version=1.1.210';
12
+ import { DynamicBuffer, NativeType } from '/resource/dxfViewer/js/viewer/DynamicBuffer.js?version=1.1.210';
13
+ import { OrbitControls } from '/resource/dxfViewer/js/viewer/OrbitControls.js?version=1.1.210';
14
+ import { CSS2DRenderer, CSS2DObject } from '/resource/dxfViewer/js/three/three.module.js?version=1.1.210';
15
15
 
16
16
  let treeViewData = [];
17
17
  let notes = [];
@@ -505,26 +505,31 @@ export class VitroDxfScene extends DxfScene {
505
505
  _ProcessLayouts(dxf) {
506
506
  for (let i = 0; i < this.layouts.length; i++) {
507
507
  const layout = this.layouts[i]
508
- layout.origin = this.origins.get(layout.spaceHandle)
509
- layout.bounds = this.bounds.get(layout.spaceHandle)
510
- if (!layout.origin || !layout.bounds)
511
- {
512
- this.layouts.splice(i, 1)
513
- i--
514
- continue
515
- }
516
508
  for (const viewport of this.viewports) {
517
509
  if (layout.spaceHandle === viewport.ownerHandle) {
518
510
  layout.viewports.set(viewport.status, viewport)
519
511
  }
520
512
  }
521
-
522
513
  const blockCtx = layout.block.DefinitionContext()
523
514
  const entities = layout.block.data.entities ? layout.block.data.entities : dxf.entities
524
515
  for (const viewport of layout.viewports.values()) {
525
516
  this._CreateViewportVertices(viewport, entities)
526
517
  this._ProcessDxfEntity(viewport, blockCtx)
527
518
  }
519
+
520
+ layout.origin = this.origins.get(layout.spaceHandle)
521
+ layout.bounds = this.bounds.get(layout.spaceHandle)
522
+ if (IsModelSpace(layout.space) && !layout.origin)
523
+ {
524
+ layout.origin = { x: 0, y: 0 }
525
+ layout.bounds = { minX: 0, maxX: 0, minY: 0, maxY: 0 }
526
+ }
527
+ if (!layout.origin || !layout.bounds)
528
+ {
529
+ this.layouts.splice(i, 1)
530
+ i--
531
+ continue
532
+ }
528
533
  }
529
534
  }
530
535
 
@@ -2873,7 +2878,8 @@ function bindBtnToggleSidebarNotes() {
2873
2878
  $(document).on('click', '#btnToggleSidebarNotes', function() {
2874
2879
  $(this).toggleClass('toggled');
2875
2880
 
2876
- if($(this).hasClass('toggled')) {
2881
+ if ($(this).hasClass('toggled')) {
2882
+ collapseSidebarIssueDetail();
2877
2883
  if(!$('.sidebar').is(':visible')) {
2878
2884
  expandSidebarNotes();
2879
2885
  $('body').addClass('vitro-sidebar-notes-expanded');
@@ -2886,7 +2892,8 @@ function bindBtnToggleSidebarNotes() {
2886
2892
  }
2887
2893
 
2888
2894
  function expandSidebarNotes() {
2889
- context.initIssueList();
2895
+ const searchCriterion = window.searchCriterionList ? window.searchCriterionList : [];
2896
+ context.initIssueList(true, searchCriterion);
2890
2897
 
2891
2898
  if ($('#btnCreateNotes').hasClass('toggled')) {
2892
2899
  $('#btnCreateNotes').removeClass('toggled');
@@ -3172,6 +3179,9 @@ function initTreeViewPanelResizable() {
3172
3179
  minWidth: 150
3173
3180
  });
3174
3181
  }
3182
+ const EVENT_SEARCH_ISSUE_LIST = 'vitro.search.issue.list';
3183
+ const EVENT_ISSUE_LIST_REFRESH = 'vitro.issue.list.refresh';
3184
+
3175
3185
  var canvas = document.getElementById('canvasContainer');
3176
3186
  window.dxfViewer = new Viewer(canvas, null);
3177
3187
 
@@ -3239,7 +3249,7 @@ function KeyDown(event) {
3239
3249
  const code = event.code;
3240
3250
  if (code == 'Delete') {
3241
3251
  const selectedId = window.dxfViewer.GetSelectedHandle();
3242
- if (selectedId) {initi
3252
+ if (selectedId) {
3243
3253
  const drawable = window.dxfViewer.GetDrawable(selectedId);
3244
3254
  if (drawable?.drawMode === DrawMode.ANNOTATIONS) {
3245
3255
  window.dxfViewer.DeleteDrawable(selectedId);
@@ -3371,16 +3381,23 @@ function bindUpdatePage() {
3371
3381
  }
3372
3382
  }
3373
3383
 
3384
+ function refreshIssueList() {
3385
+ const event = new CustomEvent(EVENT_ISSUE_LIST_REFRESH, { detail: {} });
3386
+ window.dispatchEvent(event);
3387
+ }
3388
+
3374
3389
  function updatePage(e) {
3375
3390
  const item = e.detail.itemList[0];
3376
3391
  const markup = item.fieldValueMap.markup;
3377
- context.initIssueList(true);
3392
+ const searchCriterion = window.searchCriterionList ? window.searchCriterionList : [];
3393
+ context.initIssueList(true, searchCriterion);
3378
3394
  anno.RemoveLabels();
3379
3395
  removeNewAnnotations();
3380
3396
 
3381
3397
  if (e.type === context.deleteIssueEvent && markup) {
3382
3398
  const selectedId = item.fieldValueMap.item_id;
3383
3399
  deleteNote(selectedId);
3400
+ refreshIssueList();
3384
3401
  }
3385
3402
 
3386
3403
  if (e.type === context.updateIssueEvent && markup) {
@@ -3434,15 +3451,20 @@ function getCurrentSpaceHandle() {
3434
3451
  }
3435
3452
 
3436
3453
  function onSelectAnnotation(id) {
3437
- if (context.selectIssue) {
3438
- context.selectIssue(id, true);
3439
- }
3440
3454
  zoomToAnnotation(id);
3441
3455
 
3442
3456
  if (!$('#btnToggleSidebarNotes').hasClass('toggled')) {
3443
3457
  $('#btnToggleSidebarNotes').addClass('toggled');
3444
3458
  expandSidebarNotes();
3445
3459
  }
3460
+ if (context.selectIssue) {
3461
+ const interval = setInterval(() => {
3462
+ if ($('.sidebar').find('.vitro-viewer-issue-list').length) {
3463
+ context.selectIssue(id, true);
3464
+ clearInterval(interval);
3465
+ }
3466
+ }, 50);
3467
+ }
3446
3468
  updateCanvasContainerWidth();
3447
3469
  }
3448
3470
 
@@ -3461,6 +3483,9 @@ function switchSpace(space) {
3461
3483
 
3462
3484
  if (layout) {
3463
3485
  window.dxfViewer.SwitchSpace(layout);
3486
+
3487
+ refreshMarkupList();
3488
+
3464
3489
  dxfViewer.ZoomTo(dxfViewer.GetSpace(dxfViewer.spaceName).scene);
3465
3490
  dxfViewer.DoFakeZoomToRedrawScene();
3466
3491
  anno.RemoveLabels();
@@ -3631,6 +3656,42 @@ function updateCanvasContainerWidth() {
3631
3656
  $('#canvasContainer').css('width', `calc(100% - ${insetStart + insetEnd}px)`);
3632
3657
  $('#canvasContainer').css('inset-inline-start', `${insetStart}px`);
3633
3658
  $('#canvasContainer').css('inset-inline-end', `${insetEnd}px`);
3659
+ }
3660
+
3661
+ function bindUpdateDocumentMarkupList() {
3662
+ window.removeEventListener(context.searchIssueListEvent, updateDocumentMarkupList);
3663
+ window.addEventListener(context.searchIssueListEvent, updateDocumentMarkupList);
3664
+ }
3665
+
3666
+ function updateDocumentMarkupList(e) {
3667
+ removeAllMarkups();
3668
+ context.issueList = e.detail.issueList;
3669
+ reinitMarkupList();
3670
+ anno.UpdateLabelPosition();
3671
+ }
3672
+
3673
+ function removeAllMarkups() {
3674
+ context.issueList?.forEach(item => {
3675
+ deleteNote(item.id);
3676
+ });
3677
+ anno.RemoveLabels();
3678
+ }
3679
+
3680
+ function refreshMarkupList() {
3681
+ removeAllMarkups();
3682
+ reinitMarkupList();
3683
+ }
3684
+
3685
+ function reinitMarkupList() {
3686
+ const currentSpaceHandle = getCurrentSpaceHandle();
3687
+
3688
+ if (context.issueList && context.issueList.length) {
3689
+ $.each(context.issueList, function (index, note) {
3690
+ if (note.markup) {
3691
+ initNote(note, currentSpaceHandle);
3692
+ }
3693
+ });
3694
+ }
3634
3695
  }
3635
3696
  $(document).ready(function () {
3636
3697
  bindBtnToggleSidebarNotes();
@@ -3655,6 +3716,7 @@ $(document).ready(function () {
3655
3716
  bindSelectList();
3656
3717
  bindScaleSelectChange();
3657
3718
  bindPanelResize();
3719
+ bindUpdateDocumentMarkupList();
3658
3720
  });
3659
3721
 
3660
3722
  var userLocale =