@itwin/map-layers 6.0.0-dev.5 → 6.0.0-dev.6
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/lib/cjs/BrowserStorage.js +2 -0
- package/lib/cjs/BrowserStorage.js.map +1 -1
- package/lib/cjs/MapLayerPreferences.js +8 -8
- package/lib/cjs/MapLayerPreferences.js.map +1 -1
- package/lib/cjs/PreferencesBrowserStorage.js +2 -0
- package/lib/cjs/PreferencesBrowserStorage.js.map +1 -1
- package/lib/cjs/mapLayers.js +4 -2
- package/lib/cjs/mapLayers.js.map +1 -1
- package/lib/cjs/public/locales/en/mapLayers.json +6 -1
- package/lib/cjs/ui/FeatureInfoUiItemsProvider.js +3 -2
- package/lib/cjs/ui/FeatureInfoUiItemsProvider.js.map +1 -1
- package/lib/cjs/ui/MapLayersUiItemsProvider.js +2 -1
- package/lib/cjs/ui/MapLayersUiItemsProvider.js.map +1 -1
- package/lib/cjs/ui/hooks/useCrossOriginPopup.js +1 -2
- package/lib/cjs/ui/hooks/useCrossOriginPopup.js.map +1 -1
- package/lib/cjs/ui/hooks/useInterval.js +1 -2
- package/lib/cjs/ui/hooks/useInterval.js.map +1 -1
- package/lib/cjs/ui/hooks/useResizeObserver.d.ts.map +1 -1
- package/lib/cjs/ui/widget/AttachLayerPopupButton.js +2 -2
- package/lib/cjs/ui/widget/AttachLayerPopupButton.js.map +1 -1
- package/lib/cjs/ui/widget/BasemapPanel.d.ts.map +1 -1
- package/lib/cjs/ui/widget/BasemapPanel.js +46 -18
- package/lib/cjs/ui/widget/BasemapPanel.js.map +1 -1
- package/lib/cjs/ui/widget/ConfirmMessageDialog.js +1 -2
- package/lib/cjs/ui/widget/ConfirmMessageDialog.js.map +1 -1
- package/lib/cjs/ui/widget/CustomParamEditDialog.js +1 -2
- package/lib/cjs/ui/widget/CustomParamEditDialog.js.map +1 -1
- package/lib/cjs/ui/widget/CustomParamsSettings.js +1 -2
- package/lib/cjs/ui/widget/CustomParamsSettings.js.map +1 -1
- package/lib/cjs/ui/widget/FeatureInfoDataProvider.js +34 -33
- package/lib/cjs/ui/widget/FeatureInfoDataProvider.js.map +1 -1
- package/lib/cjs/ui/widget/FeatureInfoWidget.js +2 -3
- package/lib/cjs/ui/widget/FeatureInfoWidget.js.map +1 -1
- package/lib/cjs/ui/widget/MapLayerDroppable.js +3 -4
- package/lib/cjs/ui/widget/MapLayerDroppable.js.map +1 -1
- package/lib/cjs/ui/widget/MapLayerManager.d.ts.map +1 -1
- package/lib/cjs/ui/widget/MapLayerManager.js +19 -4
- package/lib/cjs/ui/widget/MapLayerManager.js.map +1 -1
- package/lib/cjs/ui/widget/MapLayerSettingsMenu.js +1 -2
- package/lib/cjs/ui/widget/MapLayerSettingsMenu.js.map +1 -1
- package/lib/cjs/ui/widget/MapLayerSettingsPopupButton.js +1 -2
- package/lib/cjs/ui/widget/MapLayerSettingsPopupButton.js.map +1 -1
- package/lib/cjs/ui/widget/MapLayersWidget.js +1 -2
- package/lib/cjs/ui/widget/MapLayersWidget.js.map +1 -1
- package/lib/cjs/ui/widget/MapManagerMapLayersHeader.js +1 -2
- package/lib/cjs/ui/widget/MapManagerMapLayersHeader.js.map +1 -1
- package/lib/cjs/ui/widget/MapManagerSettings.js +1 -2
- package/lib/cjs/ui/widget/MapManagerSettings.js.map +1 -1
- package/lib/cjs/ui/widget/MapSelectFeaturesDialog.js +1 -2
- package/lib/cjs/ui/widget/MapSelectFeaturesDialog.js.map +1 -1
- package/lib/cjs/ui/widget/MapUrlDialog.js +2 -2
- package/lib/cjs/ui/widget/MapUrlDialog.js.map +1 -1
- package/lib/cjs/ui/widget/SelectApiKey.js +1 -2
- package/lib/cjs/ui/widget/SelectApiKey.js.map +1 -1
- package/lib/cjs/ui/widget/SelectCustomParam.js +1 -2
- package/lib/cjs/ui/widget/SelectCustomParam.js.map +1 -1
- package/lib/cjs/ui/widget/SelectMapFormat.js +2 -2
- package/lib/cjs/ui/widget/SelectMapFormat.js.map +1 -1
- package/lib/cjs/ui/widget/SubLayersDataProvider.js +2 -1
- package/lib/cjs/ui/widget/SubLayersDataProvider.js.map +1 -1
- package/lib/cjs/ui/widget/SubLayersPopupButton.js +1 -2
- package/lib/cjs/ui/widget/SubLayersPopupButton.js.map +1 -1
- package/lib/cjs/ui/widget/SubLayersTree.js +35 -26
- package/lib/cjs/ui/widget/SubLayersTree.js.map +1 -1
- package/lib/cjs/ui/widget/TransparencyPopupButton.js +1 -2
- package/lib/cjs/ui/widget/TransparencyPopupButton.js.map +1 -1
- package/lib/cjs/ui/widget/UserPreferencesStorageOptions.js +1 -2
- package/lib/cjs/ui/widget/UserPreferencesStorageOptions.js.map +1 -1
- package/lib/esm/BrowserStorage.js +2 -0
- package/lib/esm/BrowserStorage.js.map +1 -1
- package/lib/esm/MapLayerPreferences.js +8 -8
- package/lib/esm/MapLayerPreferences.js.map +1 -1
- package/lib/esm/PreferencesBrowserStorage.js +2 -0
- package/lib/esm/PreferencesBrowserStorage.js.map +1 -1
- package/lib/esm/mapLayers.js +4 -2
- package/lib/esm/mapLayers.js.map +1 -1
- package/lib/esm/public/locales/en/mapLayers.json +6 -1
- package/lib/esm/ui/FeatureInfoUiItemsProvider.js +3 -2
- package/lib/esm/ui/FeatureInfoUiItemsProvider.js.map +1 -1
- package/lib/esm/ui/MapLayersUiItemsProvider.js +2 -1
- package/lib/esm/ui/MapLayersUiItemsProvider.js.map +1 -1
- package/lib/esm/ui/hooks/useResizeObserver.d.ts.map +1 -1
- package/lib/esm/ui/widget/BasemapPanel.d.ts.map +1 -1
- package/lib/esm/ui/widget/BasemapPanel.js +46 -17
- package/lib/esm/ui/widget/BasemapPanel.js.map +1 -1
- package/lib/esm/ui/widget/FeatureInfoDataProvider.js +34 -33
- package/lib/esm/ui/widget/FeatureInfoDataProvider.js.map +1 -1
- package/lib/esm/ui/widget/MapLayerDroppable.js +2 -2
- package/lib/esm/ui/widget/MapLayerDroppable.js.map +1 -1
- package/lib/esm/ui/widget/MapLayerManager.d.ts.map +1 -1
- package/lib/esm/ui/widget/MapLayerManager.js +16 -1
- package/lib/esm/ui/widget/MapLayerManager.js.map +1 -1
- package/lib/esm/ui/widget/SubLayersDataProvider.js +2 -1
- package/lib/esm/ui/widget/SubLayersDataProvider.js.map +1 -1
- package/lib/esm/ui/widget/SubLayersTree.js +33 -23
- package/lib/esm/ui/widget/SubLayersTree.js.map +1 -1
- package/lib/public/locales/en/mapLayers.json +6 -1
- package/package.json +35 -33
|
@@ -23,7 +23,7 @@ var __importStar = (this && this.__importStar) || function (mod) {
|
|
|
23
23
|
return result;
|
|
24
24
|
};
|
|
25
25
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
26
|
-
exports.CustomParamsSettingsPanel =
|
|
26
|
+
exports.CustomParamsSettingsPanel = CustomParamsSettingsPanel;
|
|
27
27
|
const jsx_runtime_1 = require("react/jsx-runtime");
|
|
28
28
|
/*---------------------------------------------------------------------------------------------
|
|
29
29
|
* Copyright (c) Bentley Systems, Incorporated. All rights reserved.
|
|
@@ -141,5 +141,4 @@ function CustomParamsSettingsPanel({ onHandleOutsideClick }) {
|
|
|
141
141
|
onItemRemoveButtonClicked(keyName, event);
|
|
142
142
|
}, children: (0, jsx_runtime_1.jsx)(itwinui_icons_react_1.SvgDelete, {}) })] }))] }, keyName))) }) })] }));
|
|
143
143
|
}
|
|
144
|
-
exports.CustomParamsSettingsPanel = CustomParamsSettingsPanel;
|
|
145
144
|
//# sourceMappingURL=CustomParamsSettings.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CustomParamsSettings.js","sourceRoot":"","sources":["../../../../src/ui/widget/CustomParamsSettings.tsx"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;;;gGAGgG;AAEhG,uCAAqC;AACrC,6CAA+B;AAC/B,oDAAiD;AACjD,gFAA2E;AAC3E,oEAAwE;AACxE,wDAAwE;AACxE,iFAA8E;AAC9E,mEAAgE;AAChE,+CAA8C;AAC9C,mEAAgE;AAUhE,SAAgB,yBAAyB,CAAC,EAAE,oBAAoB,EAAkC;IAChG,MAAM,CAAC,OAAO,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,GAAG,EAAE,CAAC,IAAI,yCAAmB,EAAE,CAAC,CAAC;IAClE,MAAM,CAAC,cAAc,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,GAAG,EAAE,CAAC,IAAI,uDAA0B,EAAE,CAAC,CAAC;IAEhF,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAkB,GAAG,EAAE;QAC/D,MAAM,SAAS,GAAoB,EAAE,CAAC;QACtC,MAAM,UAAU,GAAG,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QAC1C,IAAI,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,CAAC;YAC9B,KAAK,MAAM,KAAK,IAAI,UAAU,EAAE,CAAC;gBAC/B,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC;YAChC,CAAC;QACH,CAAC;QACD,OAAO,SAAS,CAAC;IACnB,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,mBAAmB,EAAE,sBAAsB,CAAC,GAAG,KAAK,CAAC,QAAQ,EAAsB,CAAC;IAE3F,MAAM,aAAa,GAAG,KAAK,CAAC,WAAW,CACrC,CAAC,IAAY,EAAE,EAAE;QACf,MAAM,SAAS,GAAG,EAAE,GAAG,MAAM,EAAE,CAAC;QAChC,OAAO,SAAS,CAAC,IAAI,CAAC,CAAC;QACvB,SAAS,CAAC,SAAS,CAAC,CAAC;QACrB,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QAErB,oCAAoC;QACpC,MAAM,cAAc,GAAG,cAAc,CAAC,UAAU,EAAE,CAAC;QACnD,IAAI,cAAc,EAAE,CAAC;YACnB,KAAK,MAAM,OAAO,IAAI,MAAM,CAAC,IAAI,CAAC,cAAc,CAAC,EAAE,CAAC;gBAClD,IAAI,cAAc,CAAC,OAAO,CAAC,CAAC,gBAAgB,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;oBAC5D,MAAM,aAAa,GAAG,cAAc,CAAC,OAAO,CAAC,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,KAAK,IAAI,CAAC,CAAC;oBACjG,aAAa,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,gBAAgB,EAAE,aAAa,EAAE,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;gBAChI,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC,EACD,CAAC,cAAc,EAAE,MAAM,EAAE,OAAO,CAAC,CAClC,CAAC;IAEF,MAAM,kBAAkB,GAAG,KAAK,CAAC,WAAW,CAAC,GAAG,EAAE;QAChD,IAAI,oBAAoB,EAAE,CAAC;YACzB,oBAAoB,CAAC,IAAI,CAAC,CAAC;QAC7B,CAAC;IACH,CAAC,EAAE,CAAC,oBAAoB,CAAC,CAAC,CAAC;IAC3B;;OAEG;IACH,MAAM,yBAAyB,GAAG,KAAK,CAAC,WAAW,CACjD,CAAC,IAAY,EAAE,KAAuB,EAAE,EAAE;QACxC,KAAK,CAAC,eAAe,EAAE,CAAC,CAAC,4DAA4D;QACrF,aAAa,CAAC,IAAI,CAAC,CAAC;QACpB,IAAI,oBAAoB,EAAE,CAAC;YACzB,oBAAoB,CAAC,KAAK,CAAC,CAAC;QAC9B,CAAC;QAAA,CAAC;IACJ,CAAC,EACD,CAAC,aAAa,EAAE,oBAAoB,CAAC,CACtC,CAAC;IAEF,MAAM,YAAY,GAAG,KAAK,CAAC,WAAW,CAAC,GAAG,EAAE;QAC1C,yBAAW,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;QAClC,kBAAkB,EAAE,CAAC;IACvB,CAAC,EAAE,CAAC,kBAAkB,CAAC,CAAC,CAAC;IAEzB,MAAM,QAAQ,GAAG,KAAK,CAAC,WAAW,CAChC,CAAC,OAAwB,EAAE,OAAyB,EAAE,EAAE;QACtD,yBAAW,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;QAElC,6DAA6D;QAC7D,MAAM,SAAS,GAAG,EAAE,GAAG,MAAM,EAAE,CAAC;QAChC,IAAI,OAAO,IAAI,OAAO,CAAC,IAAI,KAAK,OAAO,CAAC,IAAI,EAAE,CAAC;YAC7C,OAAO,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YAC/B,SAAS,CAAC,SAAS,CAAC,CAAC;YACrB,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YAE7B,MAAM,cAAc,GAAG,cAAc,CAAC,UAAU,EAAE,CAAC;YACnD,IAAI,cAAc,EAAE,CAAC;gBACnB,KAAK,MAAM,OAAO,IAAI,MAAM,CAAC,IAAI,CAAC,cAAc,CAAC,EAAE,CAAC;oBAClD,IAAI,cAAc,CAAC,OAAO,CAAC,CAAC,gBAAgB,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;wBACpE,MAAM,aAAa,GAAG,cAAc,CAAC,OAAO,CAAC,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;wBACzG,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;wBACjC,cAAc,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,gBAAgB,EAAE,aAAa,EAAE,CAAC,CAAC;oBACpE,CAAC;gBACH,CAAC;YACH,CAAC;QACH,CAAC;QACD,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QAEpC,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC;QAClC,IAAI,oBAAoB,EAAE,CAAC;YACzB,oBAAoB,CAAC,KAAK,CAAC,CAAC;QAC9B,CAAC;QAAA,CAAC;QACF,SAAS,CAAC,SAAS,CAAC,CAAC;IACvB,CAAC,EACD,CAAC,cAAc,EAAE,MAAM,EAAE,OAAO,EAAE,oBAAoB,CAAC,CACxD,CAAC;IAEF,MAAM,cAAc,GAAG,KAAK,CAAC,WAAW,CAAC,GAAG,EAAE;QAC5C,IAAI,oBAAoB,EAAE,CAAC;YACzB,oBAAoB,CAAC,KAAK,CAAC,CAAC;QAC9B,CAAC;QACD,yBAAW,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,uBAAC,6CAAqB,IAAC,UAAU,EAAE,QAAQ,EAAE,cAAc,EAAE,YAAY,GAAI,CAAC,CAAC;QAE9G,OAAO;IACT,CAAC,EAAE,CAAC,YAAY,EAAE,QAAQ,EAAE,oBAAoB,CAAC,CAAC,CAAC;IAEnD,MAAM,oBAAoB,GAAG,KAAK,CAAC,WAAW,CAC5C,CAAC,QAAgB,EAAE,KAAuB,EAAE,EAAE;QAC5C,KAAK,CAAC,eAAe,EAAE,CAAC;QAAA,CAAC;QACzB,MAAM,IAAI,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC;QAC9B,IAAI,IAAI,EAAE,CAAC;YACT,yBAAW,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,uBAAC,6CAAqB,IAAC,IAAI,EAAE,IAAI,EAAE,UAAU,EAAE,QAAQ,EAAE,cAAc,EAAE,YAAY,GAAI,CAAC,CAAC;QAC5H,CAAC;QACD,IAAI,oBAAoB,EAAE,CAAC;YACzB,oBAAoB,CAAC,KAAK,CAAC,CAAC;QAC9B,CAAC;QACD,OAAO;IACT,CAAC,EACD,CAAC,MAAM,EAAE,YAAY,EAAE,QAAQ,EAAE,oBAAoB,CAAC,CACvD,CAAC;IAEF,OAAO,CACL,iCAAK,SAAS,EAAC,gCAAgC,aAC7C,iCAAK,SAAS,EAAC,6BAA6B,aAC1C,kCAAM,SAAS,EAAC,mCAAmC,aAChD,uBAAW,CAAC,SAAS,CAAC,kCAAkC,CAAC,EAC1D,gCAAK,KAAK,EAAE,uBAAW,CAAC,SAAS,CAAC,gCAAgC,CAAC,EAAE,SAAS,EAAC,mCAAmC,YAChH,uBAAC,oBAAI,IAAC,IAAI,EAAC,OAAO,YAChB,uBAAC,mDAAuB,KAAG,GACtB,GACH,IACD,EAEP,uBAAC,0BAAU,IAAC,KAAK,EAAC,KAAK,EAAC,IAAI,EAAC,OAAO,EAAC,SAAS,EAAC,YAAY,EAAC,SAAS,EAAC,wCAAwC,EAAC,OAAO,EAAE,cAAc,YACpI,uBAAC,4BAAM,KAAG,GACC,IACT,EACN,gCAAK,SAAS,EAAC,8BAA8B,YAC3C,uBAAC,oBAAI,IAAC,EAAE,EAAC,KAAK,EAAC,SAAS,EAAC,sCAAsC,YAC5D,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CACpC,wBAAC,wBAAQ,IACP,EAAE,EAAC,KAAK,EAER,UAAU,QACV,SAAS,EAAC,oCAAoC,EAC9C,OAAO,EAAE,CAAC,CAAmB,EAAE,EAAE,CAAC,oBAAoB,CAAC,OAAO,EAAE,CAAC,CAAC,EAClE,YAAY,EAAE,GAAG,EAAE,CAAC,sBAAsB,CAAC,OAAO,CAAC,EACnD,YAAY,EAAE,GAAG,EAAE,CAAC,sBAAsB,CAAC,SAAS,CAAC,aAErD,uBAAC,wBAAQ,CAAC,OAAO,IAAC,SAAS,EAAC,yCAAyC,YAClE,OAAO,GACS;4BAEjB,mGAAmG;4BACnG,mBAAmB,IAAI,mBAAmB,KAAK,OAAO,IAAI,CACxD,6DACE,uBAAC,0BAAU,IACT,IAAI,EAAC,OAAO,EACZ,SAAS,EAAC,YAAY,EACtB,SAAS,EAAC,8BAA8B,EACxC,KAAK,EAAE,uBAAW,CAAC,SAAS,CAAC,qCAAqC,CAAC,YAEnE,uBAAC,6BAAO,KAAG,GACA,EACb,uBAAC,0BAAU,IACT,IAAI,EAAC,OAAO,EACZ,SAAS,EAAC,YAAY,EACtB,SAAS,EAAC,2CAA2C,EACrD,KAAK,EAAE,uBAAW,CAAC,SAAS,CAAC,uCAAuC,CAAC,EACrE,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE;4CACjB,yBAAyB,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;wCAC5C,CAAC,YAED,uBAAC,+BAAS,KAAG,GACF,IACZ,CACJ,KAlCE,OAAO,CAoCH,CACZ,CAAC,GACG,GACH,IACF,CACP,CAAC;AACJ,CAAC;AAtLD,8DAsLC","sourcesContent":["/*---------------------------------------------------------------------------------------------\n * Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n * See LICENSE.md in the project root for license terms and full copyright notice.\n *--------------------------------------------------------------------------------------------*/\n\nimport \"./CustomParamsSettings.scss\";\nimport * as React from \"react\";\nimport { UiFramework } from \"@itwin/appui-react\";\nimport { SvgTechnicalPreviewMini } from \"@itwin/itwinui-icons-color-react\";\nimport { SvgAdd, SvgDelete, SvgEdit } from \"@itwin/itwinui-icons-react\";\nimport { Icon, IconButton, List, ListItem } from \"@itwin/itwinui-react\";\nimport { CustomParamsMappingStorage } from \"../../CustomParamsMappingStorage\";\nimport { CustomParamsStorage } from \"../../CustomParamsStorage\";\nimport { MapLayersUI } from \"../../mapLayers\";\nimport { CustomParamEditDialog } from \"./CustomParamEditDialog\";\n\nimport type { CustomParamItem } from \"../Interfaces\";\ninterface CustomParamsMap {\n [paramName: string]: CustomParamItem;\n}\n\ninterface CustomParamsSettingsPanelProps {\n onHandleOutsideClick?: (shouldHandle: boolean) => void;\n}\nexport function CustomParamsSettingsPanel({ onHandleOutsideClick }: CustomParamsSettingsPanelProps) {\n const [storage] = React.useState(() => new CustomParamsStorage());\n const [mappingStorage] = React.useState(() => new CustomParamsMappingStorage());\n\n const [params, setParams] = React.useState<CustomParamsMap>(() => {\n const paramsMap: CustomParamsMap = {};\n const paramsList = storage.get(undefined);\n if (Array.isArray(paramsList)) {\n for (const param of paramsList) {\n paramsMap[param.name] = param;\n }\n }\n return paramsMap;\n });\n\n const [listItemUnderCursor, setListItemUnderCursor] = React.useState<string | undefined>();\n\n const deleteMapping = React.useCallback(\n (name: string) => {\n const tmpParams = { ...params };\n delete tmpParams[name];\n setParams(tmpParams);\n storage.delete(name);\n\n // Cascade delete to api key mapping\n const mappingContent = mappingStorage.getContent();\n if (mappingContent) {\n for (const itemKey of Object.keys(mappingContent)) {\n if (mappingContent[itemKey].customParamNames.includes(name)) {\n const newParamNames = mappingContent[itemKey].customParamNames.filter((value) => value !== name);\n newParamNames.length > 0 ? mappingStorage.save(itemKey, { customParamNames: newParamNames }) : mappingStorage.delete(itemKey);\n }\n }\n }\n },\n [mappingStorage, params, storage],\n );\n\n const resumeOutsideClick = React.useCallback(() => {\n if (onHandleOutsideClick) {\n onHandleOutsideClick(true);\n }\n }, [onHandleOutsideClick]);\n /*\n Handle Remove layer button clicked\n */\n const onItemRemoveButtonClicked = React.useCallback(\n (name: string, event: React.MouseEvent) => {\n event.stopPropagation(); // We don't want the owning ListBox to react on mouse click.\n deleteMapping(name);\n if (onHandleOutsideClick) {\n onHandleOutsideClick(false);\n };\n },\n [deleteMapping, onHandleOutsideClick],\n );\n\n const onCancelEdit = React.useCallback(() => {\n UiFramework.dialogs.modal.close();\n resumeOutsideClick();\n }, [resumeOutsideClick]);\n\n const onOkEdit = React.useCallback(\n (newItem: CustomParamItem, oldItem?: CustomParamItem) => {\n UiFramework.dialogs.modal.close();\n\n // If the edited item has a new name, delete the entry first.\n const tmpParams = { ...params };\n if (oldItem && oldItem.name !== newItem.name) {\n delete tmpParams[oldItem.name];\n setParams(tmpParams);\n storage.delete(oldItem.name);\n\n const mappingContent = mappingStorage.getContent();\n if (mappingContent) {\n for (const itemKey of Object.keys(mappingContent)) {\n if (mappingContent[itemKey].customParamNames.includes(oldItem.name)) {\n const newParamNames = mappingContent[itemKey].customParamNames.filter((value) => value !== oldItem.name);\n newParamNames.push(newItem.name);\n mappingStorage.save(itemKey, { customParamNames: newParamNames });\n }\n }\n }\n }\n storage.save(newItem.name, newItem);\n\n tmpParams[newItem.name] = newItem;\n if (onHandleOutsideClick) {\n onHandleOutsideClick(false);\n };\n setParams(tmpParams);\n },\n [mappingStorage, params, storage, onHandleOutsideClick],\n );\n\n const handleAddClick = React.useCallback(() => {\n if (onHandleOutsideClick) {\n onHandleOutsideClick(false);\n }\n UiFramework.dialogs.modal.open(<CustomParamEditDialog onOkResult={onOkEdit} onCancelResult={onCancelEdit} />);\n\n return;\n }, [onCancelEdit, onOkEdit, onHandleOutsideClick]);\n\n const onListboxValueChange = React.useCallback(\n (newValue: string, event: React.MouseEvent) => {\n event.stopPropagation();;\n const item = params[newValue];\n if (item) {\n UiFramework.dialogs.modal.open(<CustomParamEditDialog item={item} onOkResult={onOkEdit} onCancelResult={onCancelEdit} />);\n }\n if (onHandleOutsideClick) {\n onHandleOutsideClick(false);\n }\n return;\n },\n [params, onCancelEdit, onOkEdit, onHandleOutsideClick],\n );\n\n return (\n <div className=\"customParamsSettings-container\">\n <div className=\"customParamsSettings-header\">\n <span className=\"customParamsSettings-header-label\">\n {MapLayersUI.translate(\"CustomParamSettings.SectionLabel\")}\n <div title={MapLayersUI.translate(\"Labels.TechPreviewBadgeTooltip\")} className=\"customParamsSettings-previewBadge\">\n <Icon size=\"small\">\n <SvgTechnicalPreviewMini />\n </Icon>\n </div>\n </span>\n\n <IconButton label=\"Add\" size=\"small\" styleType=\"borderless\" className=\"customParamsSettings-header-add-button\" onClick={handleAddClick}>\n <SvgAdd />\n </IconButton>\n </div>\n <div className=\"customParamsSettings-content\">\n <List as=\"div\" className=\"customParamsSettings-content-listbox\">\n {Object.keys(params).map((keyName) => (\n <ListItem\n as=\"div\"\n key={keyName}\n actionable\n className=\"customParamsSettings-content-entry\"\n onClick={(e: React.MouseEvent) => onListboxValueChange(keyName, e)}\n onMouseEnter={() => setListItemUnderCursor(keyName)}\n onMouseLeave={() => setListItemUnderCursor(undefined)}\n >\n <ListItem.Content className=\"customParamsSettings-content-entry-name\">\n {keyName}\n </ListItem.Content>\n {\n // Display the delete icon only when the mouse over a specific item otherwise list feels cluttered.\n listItemUnderCursor && listItemUnderCursor === keyName && (\n <>\n <IconButton\n size=\"small\"\n styleType=\"borderless\"\n className=\"map-source-list-entry-button\"\n label={MapLayersUI.translate(\"CustomParamSettings.EditButtonTitle\")}\n >\n <SvgEdit />\n </IconButton>\n <IconButton\n size=\"small\"\n styleType=\"borderless\"\n className=\"customParamsSettings-content-entry-button\"\n label={MapLayersUI.translate(\"CustomParamSettings.DeleteButtonTitle\")}\n onClick={(event) => {\n onItemRemoveButtonClicked(keyName, event);\n }}\n >\n <SvgDelete />\n </IconButton>\n </>\n )\n }\n </ListItem>\n ))}\n </List>\n </div>\n </div>\n );\n}\n"]}
|
|
1
|
+
{"version":3,"file":"CustomParamsSettings.js","sourceRoot":"","sources":["../../../../src/ui/widget/CustomParamsSettings.tsx"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n * Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n * See LICENSE.md in the project root for license terms and full copyright notice.\n *--------------------------------------------------------------------------------------------*/\n\nimport \"./CustomParamsSettings.scss\";\nimport * as React from \"react\";\nimport { UiFramework } from \"@itwin/appui-react\";\nimport { SvgTechnicalPreviewMini } from \"@itwin/itwinui-icons-color-react\";\nimport { SvgAdd, SvgDelete, SvgEdit } from \"@itwin/itwinui-icons-react\";\nimport { Icon, IconButton, List, ListItem } from \"@itwin/itwinui-react\";\nimport { CustomParamsMappingStorage } from \"../../CustomParamsMappingStorage\";\nimport { CustomParamsStorage } from \"../../CustomParamsStorage\";\nimport { MapLayersUI } from \"../../mapLayers\";\nimport { CustomParamEditDialog } from \"./CustomParamEditDialog\";\n\nimport type { CustomParamItem } from \"../Interfaces\";\ninterface CustomParamsMap {\n [paramName: string]: CustomParamItem;\n}\n\ninterface CustomParamsSettingsPanelProps {\n onHandleOutsideClick?: (shouldHandle: boolean) => void;\n}\nexport function CustomParamsSettingsPanel({ onHandleOutsideClick }: CustomParamsSettingsPanelProps) {\n const [storage] = React.useState(() => new CustomParamsStorage());\n const [mappingStorage] = React.useState(() => new CustomParamsMappingStorage());\n\n const [params, setParams] = React.useState<CustomParamsMap>(() => {\n const paramsMap: CustomParamsMap = {};\n const paramsList = storage.get(undefined);\n if (Array.isArray(paramsList)) {\n for (const param of paramsList) {\n paramsMap[param.name] = param;\n }\n }\n return paramsMap;\n });\n\n const [listItemUnderCursor, setListItemUnderCursor] = React.useState<string | undefined>();\n\n const deleteMapping = React.useCallback(\n (name: string) => {\n const tmpParams = { ...params };\n delete tmpParams[name];\n setParams(tmpParams);\n storage.delete(name);\n\n // Cascade delete to api key mapping\n const mappingContent = mappingStorage.getContent();\n if (mappingContent) {\n for (const itemKey of Object.keys(mappingContent)) {\n if (mappingContent[itemKey].customParamNames.includes(name)) {\n const newParamNames = mappingContent[itemKey].customParamNames.filter((value) => value !== name);\n newParamNames.length > 0 ? mappingStorage.save(itemKey, { customParamNames: newParamNames }) : mappingStorage.delete(itemKey);\n }\n }\n }\n },\n [mappingStorage, params, storage],\n );\n\n const resumeOutsideClick = React.useCallback(() => {\n if (onHandleOutsideClick) {\n onHandleOutsideClick(true);\n }\n }, [onHandleOutsideClick]);\n /*\n Handle Remove layer button clicked\n */\n const onItemRemoveButtonClicked = React.useCallback(\n (name: string, event: React.MouseEvent) => {\n event.stopPropagation(); // We don't want the owning ListBox to react on mouse click.\n deleteMapping(name);\n if (onHandleOutsideClick) {\n onHandleOutsideClick(false);\n };\n },\n [deleteMapping, onHandleOutsideClick],\n );\n\n const onCancelEdit = React.useCallback(() => {\n UiFramework.dialogs.modal.close();\n resumeOutsideClick();\n }, [resumeOutsideClick]);\n\n const onOkEdit = React.useCallback(\n (newItem: CustomParamItem, oldItem?: CustomParamItem) => {\n UiFramework.dialogs.modal.close();\n\n // If the edited item has a new name, delete the entry first.\n const tmpParams = { ...params };\n if (oldItem && oldItem.name !== newItem.name) {\n delete tmpParams[oldItem.name];\n setParams(tmpParams);\n storage.delete(oldItem.name);\n\n const mappingContent = mappingStorage.getContent();\n if (mappingContent) {\n for (const itemKey of Object.keys(mappingContent)) {\n if (mappingContent[itemKey].customParamNames.includes(oldItem.name)) {\n const newParamNames = mappingContent[itemKey].customParamNames.filter((value) => value !== oldItem.name);\n newParamNames.push(newItem.name);\n mappingStorage.save(itemKey, { customParamNames: newParamNames });\n }\n }\n }\n }\n storage.save(newItem.name, newItem);\n\n tmpParams[newItem.name] = newItem;\n if (onHandleOutsideClick) {\n onHandleOutsideClick(false);\n };\n setParams(tmpParams);\n },\n [mappingStorage, params, storage, onHandleOutsideClick],\n );\n\n const handleAddClick = React.useCallback(() => {\n if (onHandleOutsideClick) {\n onHandleOutsideClick(false);\n }\n UiFramework.dialogs.modal.open(<CustomParamEditDialog onOkResult={onOkEdit} onCancelResult={onCancelEdit} />);\n\n return;\n }, [onCancelEdit, onOkEdit, onHandleOutsideClick]);\n\n const onListboxValueChange = React.useCallback(\n (newValue: string, event: React.MouseEvent) => {\n event.stopPropagation();;\n const item = params[newValue];\n if (item) {\n UiFramework.dialogs.modal.open(<CustomParamEditDialog item={item} onOkResult={onOkEdit} onCancelResult={onCancelEdit} />);\n }\n if (onHandleOutsideClick) {\n onHandleOutsideClick(false);\n }\n return;\n },\n [params, onCancelEdit, onOkEdit, onHandleOutsideClick],\n );\n\n return (\n <div className=\"customParamsSettings-container\">\n <div className=\"customParamsSettings-header\">\n <span className=\"customParamsSettings-header-label\">\n {MapLayersUI.translate(\"CustomParamSettings.SectionLabel\")}\n <div title={MapLayersUI.translate(\"Labels.TechPreviewBadgeTooltip\")} className=\"customParamsSettings-previewBadge\">\n <Icon size=\"small\">\n <SvgTechnicalPreviewMini />\n </Icon>\n </div>\n </span>\n\n <IconButton label=\"Add\" size=\"small\" styleType=\"borderless\" className=\"customParamsSettings-header-add-button\" onClick={handleAddClick}>\n <SvgAdd />\n </IconButton>\n </div>\n <div className=\"customParamsSettings-content\">\n <List as=\"div\" className=\"customParamsSettings-content-listbox\">\n {Object.keys(params).map((keyName) => (\n <ListItem\n as=\"div\"\n key={keyName}\n actionable\n className=\"customParamsSettings-content-entry\"\n onClick={(e: React.MouseEvent) => onListboxValueChange(keyName, e)}\n onMouseEnter={() => setListItemUnderCursor(keyName)}\n onMouseLeave={() => setListItemUnderCursor(undefined)}\n >\n <ListItem.Content className=\"customParamsSettings-content-entry-name\">\n {keyName}\n </ListItem.Content>\n {\n // Display the delete icon only when the mouse over a specific item otherwise list feels cluttered.\n listItemUnderCursor && listItemUnderCursor === keyName && (\n <>\n <IconButton\n size=\"small\"\n styleType=\"borderless\"\n className=\"map-source-list-entry-button\"\n label={MapLayersUI.translate(\"CustomParamSettings.EditButtonTitle\")}\n >\n <SvgEdit />\n </IconButton>\n <IconButton\n size=\"small\"\n styleType=\"borderless\"\n className=\"customParamsSettings-content-entry-button\"\n label={MapLayersUI.translate(\"CustomParamSettings.DeleteButtonTitle\")}\n onClick={(event) => {\n onItemRemoveButtonClicked(keyName, event);\n }}\n >\n <SvgDelete />\n </IconButton>\n </>\n )\n }\n </ListItem>\n ))}\n </List>\n </div>\n </div>\n );\n}\n"]}
|
|
@@ -14,48 +14,49 @@ const map_layers_formats_1 = require("@itwin/map-layers-formats");
|
|
|
14
14
|
* @internal
|
|
15
15
|
*/
|
|
16
16
|
class SimplePropertyData {
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
}
|
|
17
|
+
label = appui_abstract_1.PropertyRecord.fromString("");
|
|
18
|
+
description;
|
|
19
|
+
categories = [];
|
|
20
|
+
records = {};
|
|
22
21
|
}
|
|
23
22
|
/**
|
|
24
23
|
* @internal
|
|
25
24
|
*/
|
|
26
25
|
class FeatureInfoDataProvider {
|
|
26
|
+
_detachActiveToolListener;
|
|
27
|
+
_detachToolAdminListener;
|
|
28
|
+
onDataChanged = new components_react_1.PropertyDataChangeEvent();
|
|
29
|
+
_data = new SimplePropertyData();
|
|
30
|
+
_isActive = false;
|
|
27
31
|
constructor() {
|
|
28
|
-
this.
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
this.
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
// This is a tool reset, simply clear previous data
|
|
41
|
-
this._data = new SimplePropertyData();
|
|
42
|
-
this.onDataChanged.raiseEvent();
|
|
43
|
-
}
|
|
44
|
-
else {
|
|
45
|
-
this._isActive = true;
|
|
46
|
-
}
|
|
47
|
-
}
|
|
48
|
-
else {
|
|
32
|
+
this._detachToolAdminListener = core_frontend_1.IModelApp.toolAdmin.activeToolChanged.addListener(this.handleActiveToolChanged);
|
|
33
|
+
}
|
|
34
|
+
handleActiveToolChanged = (tool, _start) => {
|
|
35
|
+
if (this._detachActiveToolListener) {
|
|
36
|
+
this._detachActiveToolListener();
|
|
37
|
+
}
|
|
38
|
+
this._detachActiveToolListener = undefined;
|
|
39
|
+
if (tool.toolId === map_layers_formats_1.MapFeatureInfoTool.toolId) {
|
|
40
|
+
const mapInfoTool = tool;
|
|
41
|
+
this._detachActiveToolListener = mapInfoTool.onInfoReady.addListener(this.handleOnInfoReadyChanged);
|
|
42
|
+
if (this._isActive) {
|
|
43
|
+
// This is a tool reset, simply clear previous data
|
|
49
44
|
this._data = new SimplePropertyData();
|
|
50
45
|
this.onDataChanged.raiseEvent();
|
|
51
|
-
this._isActive = false;
|
|
52
46
|
}
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
}
|
|
57
|
-
|
|
58
|
-
|
|
47
|
+
else {
|
|
48
|
+
this._isActive = true;
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
else {
|
|
52
|
+
this._data = new SimplePropertyData();
|
|
53
|
+
this.onDataChanged.raiseEvent();
|
|
54
|
+
this._isActive = false;
|
|
55
|
+
}
|
|
56
|
+
};
|
|
57
|
+
handleOnInfoReadyChanged = (data) => {
|
|
58
|
+
void this.setInfo(data.mapInfo).then(); // No need to wait for data parsing.
|
|
59
|
+
};
|
|
59
60
|
generateLayerCategoryName(subLayerName) {
|
|
60
61
|
return `_layer_${subLayerName}`;
|
|
61
62
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FeatureInfoDataProvider.js","sourceRoot":"","sources":["../../../../src/ui/widget/FeatureInfoDataProvider.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n * Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n * See LICENSE.md in the project root for license terms and full copyright notice.\n *--------------------------------------------------------------------------------------------*/\n\nimport { PropertyRecord } from \"@itwin/appui-abstract\";\nimport type { IPropertyDataProvider, PropertyCategory, PropertyData } from \"@itwin/components-react\";\nimport { PropertyDataChangeEvent } from \"@itwin/components-react\";\nimport type { MapFeatureInfo, MapSubLayerFeatureInfo, StartOrResume, Tool } from \"@itwin/core-frontend\";\nimport { IModelApp, MapLayerFeatureRecord } from \"@itwin/core-frontend\";\nimport type { MapFeatureInfoToolData } from \"@itwin/map-layers-formats\";\nimport { MapFeatureInfoTool } from \"@itwin/map-layers-formats\";\n\n/**\n * Implementation of [IPropertyDataProvider] that uses an associative array.\n * @internal\n */\n\nclass SimplePropertyData implements PropertyData {\n public label: PropertyRecord = PropertyRecord.fromString(\"\");\n public description?: string;\n public categories: PropertyCategory[] = [];\n public records: { [categoryName: string]: PropertyRecord[] } = {};\n}\n\n/**\n * @internal\n */\nexport class FeatureInfoDataProvider implements IPropertyDataProvider {\n private _detachActiveToolListener: VoidFunction | undefined;\n private readonly _detachToolAdminListener: VoidFunction;\n\n public onDataChanged = new PropertyDataChangeEvent();\n private _data = new SimplePropertyData();\n private _isActive = false;\n\n constructor() {\n this._detachToolAdminListener = IModelApp.toolAdmin.activeToolChanged.addListener(this.handleActiveToolChanged);\n }\n\n private handleActiveToolChanged = (tool: Tool, _start: StartOrResume) => {\n if (this._detachActiveToolListener) {\n this._detachActiveToolListener();\n }\n this._detachActiveToolListener = undefined;\n\n if (tool.toolId === MapFeatureInfoTool.toolId) {\n const mapInfoTool = tool as MapFeatureInfoTool;\n\n this._detachActiveToolListener = mapInfoTool.onInfoReady.addListener(this.handleOnInfoReadyChanged);\n\n if (this._isActive) {\n // This is a tool reset, simply clear previous data\n this._data = new SimplePropertyData();\n this.onDataChanged.raiseEvent();\n } else {\n this._isActive = true;\n }\n } else {\n this._data = new SimplePropertyData();\n this.onDataChanged.raiseEvent();\n this._isActive = false;\n }\n };\n\n private handleOnInfoReadyChanged = (data: MapFeatureInfoToolData) => {\n void this.setInfo(data.mapInfo).then(); // No need to wait for data parsing.\n };\n\n private generateLayerCategoryName(subLayerName: string) {\n return `_layer_${subLayerName}`;\n }\n\n private generateSubLayerCategoryName(subLayerName: string) {\n return `_subLayer_${subLayerName}`;\n }\n\n public onUnload() {\n this._detachToolAdminListener();\n if (this._detachActiveToolListener) {\n this._detachActiveToolListener();\n this._detachActiveToolListener = undefined;\n }\n }\n\n public get hasRecords() {\n return this._data.categories.length > 0;\n }\n\n private async setInfo(mapInfo?: MapFeatureInfo) {\n this._data = new SimplePropertyData();\n\n if (mapInfo?.layerInfos) {\n for (const curLayerInfo of mapInfo.layerInfos) {\n const categoryName = this.generateLayerCategoryName(curLayerInfo.layerName);\n const layerCatIdx = this.findCategoryIndexByName(categoryName);\n let nbRecords = 0;\n\n const layerCategory =\n layerCatIdx === -1 ? { name: categoryName, label: curLayerInfo.layerName, expand: true, childCategories: [] } : this._data.categories[layerCatIdx];\n\n if (curLayerInfo.subLayerInfos) {\n for (const subLayerInfo of curLayerInfo.subLayerInfos) {\n this.addSubLayerCategory(subLayerInfo, layerCategory);\n\n // Add every feature records for this sub-layer\n for (const feature of subLayerInfo.features) {\n nbRecords++;\n for (const attribute of feature.attributes) {\n // Always use the string value for now\n this.addProperty(MapLayerFeatureRecord.createRecordFromAttribute(attribute), this.generateSubLayerCategoryName(subLayerInfo.subLayerName));\n }\n }\n }\n if (layerCatIdx === -1 && nbRecords > 0) {\n this.addCategory(layerCategory);\n }\n }\n }\n }\n\n this.onDataChanged.raiseEvent();\n }\n\n public addSubLayerCategory(subLayerInfo: MapSubLayerFeatureInfo, layerCategory: PropertyCategory) {\n const subLayerName = this.generateSubLayerCategoryName(subLayerInfo.subLayerName);\n const subCatIdx = layerCategory.childCategories?.findIndex((testCategory: PropertyCategory) => {\n return testCategory.name === subLayerName;\n });\n\n let subLayerCategory;\n if (subCatIdx === -1) {\n subLayerCategory = { name: subLayerName, label: subLayerInfo.subLayerName, expand: true };\n this.addSubCategory(subLayerName);\n layerCategory.childCategories?.push(subLayerCategory);\n }\n }\n public addSubCategory(categoryName: string) {\n this._data.records[categoryName] = [];\n }\n\n public addCategory(category: PropertyCategory): number {\n const categoryIdx = this._data.categories.push(category) - 1;\n this._data.records[this._data.categories[categoryIdx].name] = [];\n return categoryIdx;\n }\n\n public findCategoryIndex(category: PropertyCategory): number {\n const index = this._data.categories.findIndex((testCategory: PropertyCategory) => {\n return testCategory.name === category.name;\n });\n return index;\n }\n public findCategoryIndexByName(name: string): number {\n const index = this._data.categories.findIndex((testCategory: PropertyCategory) => {\n return testCategory.name === name;\n });\n return index;\n }\n\n public addProperty(propertyRecord: PropertyRecord, categoryName: string): void {\n const idx = this._data.records[categoryName].findIndex((prop) => prop.property.name === propertyRecord.property.name);\n if (idx === -1) {\n this._data.records[categoryName].push(propertyRecord);\n } else {\n this._data.records[categoryName][idx].isMerged = true;\n this._data.records[categoryName][idx].isReadonly = true;\n }\n }\n\n public removeProperty(propertyRecord: PropertyRecord, categoryIdx: number): boolean {\n const index = this._data.records[this._data.categories[categoryIdx].name].findIndex((record: PropertyRecord) => {\n return record === propertyRecord;\n });\n\n let result = false;\n\n if (index >= 0) {\n this._data.records[this._data.categories[categoryIdx].name].splice(index, 1);\n this.onDataChanged.raiseEvent();\n result = true;\n }\n return result;\n }\n\n public replaceProperty(propertyRecord: PropertyRecord, categoryIdx: number, newRecord: PropertyRecord): boolean {\n const index = this._data.records[this._data.categories[categoryIdx].name].findIndex((record: PropertyRecord) => {\n return record === propertyRecord;\n });\n\n let result = false;\n\n if (index >= 0) {\n this._data.records[this._data.categories[categoryIdx].name].splice(index, 1, newRecord);\n result = true;\n }\n return result;\n }\n\n public async getData(): Promise<PropertyData> {\n return this._data;\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"FeatureInfoDataProvider.js","sourceRoot":"","sources":["../../../../src/ui/widget/FeatureInfoDataProvider.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n * Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n * See LICENSE.md in the project root for license terms and full copyright notice.\n *--------------------------------------------------------------------------------------------*/\n\nimport { PropertyRecord } from \"@itwin/appui-abstract\";\nimport type { IPropertyDataProvider, PropertyCategory, PropertyData } from \"@itwin/components-react\";\nimport { PropertyDataChangeEvent } from \"@itwin/components-react\";\nimport type { MapFeatureInfo, MapSubLayerFeatureInfo, StartOrResume, Tool } from \"@itwin/core-frontend\";\nimport { IModelApp, MapLayerFeatureRecord } from \"@itwin/core-frontend\";\nimport type { MapFeatureInfoToolData } from \"@itwin/map-layers-formats\";\nimport { MapFeatureInfoTool } from \"@itwin/map-layers-formats\";\n\n/**\n * Implementation of [IPropertyDataProvider] that uses an associative array.\n * @internal\n */\n\nclass SimplePropertyData implements PropertyData {\n public label: PropertyRecord = PropertyRecord.fromString(\"\");\n public description?: string;\n public categories: PropertyCategory[] = [];\n public records: { [categoryName: string]: PropertyRecord[] } = {};\n}\n\n/**\n * @internal\n */\nexport class FeatureInfoDataProvider implements IPropertyDataProvider {\n private _detachActiveToolListener: VoidFunction | undefined;\n private readonly _detachToolAdminListener: VoidFunction;\n\n public onDataChanged = new PropertyDataChangeEvent();\n private _data = new SimplePropertyData();\n private _isActive = false;\n\n constructor() {\n this._detachToolAdminListener = IModelApp.toolAdmin.activeToolChanged.addListener(this.handleActiveToolChanged);\n }\n\n private handleActiveToolChanged = (tool: Tool, _start: StartOrResume) => {\n if (this._detachActiveToolListener) {\n this._detachActiveToolListener();\n }\n this._detachActiveToolListener = undefined;\n\n if (tool.toolId === MapFeatureInfoTool.toolId) {\n const mapInfoTool = tool as MapFeatureInfoTool;\n\n this._detachActiveToolListener = mapInfoTool.onInfoReady.addListener(this.handleOnInfoReadyChanged);\n\n if (this._isActive) {\n // This is a tool reset, simply clear previous data\n this._data = new SimplePropertyData();\n this.onDataChanged.raiseEvent();\n } else {\n this._isActive = true;\n }\n } else {\n this._data = new SimplePropertyData();\n this.onDataChanged.raiseEvent();\n this._isActive = false;\n }\n };\n\n private handleOnInfoReadyChanged = (data: MapFeatureInfoToolData) => {\n void this.setInfo(data.mapInfo).then(); // No need to wait for data parsing.\n };\n\n private generateLayerCategoryName(subLayerName: string) {\n return `_layer_${subLayerName}`;\n }\n\n private generateSubLayerCategoryName(subLayerName: string) {\n return `_subLayer_${subLayerName}`;\n }\n\n public onUnload() {\n this._detachToolAdminListener();\n if (this._detachActiveToolListener) {\n this._detachActiveToolListener();\n this._detachActiveToolListener = undefined;\n }\n }\n\n public get hasRecords() {\n return this._data.categories.length > 0;\n }\n\n private async setInfo(mapInfo?: MapFeatureInfo) {\n this._data = new SimplePropertyData();\n\n if (mapInfo?.layerInfos) {\n for (const curLayerInfo of mapInfo.layerInfos) {\n const categoryName = this.generateLayerCategoryName(curLayerInfo.layerName);\n const layerCatIdx = this.findCategoryIndexByName(categoryName);\n let nbRecords = 0;\n\n const layerCategory =\n layerCatIdx === -1 ? { name: categoryName, label: curLayerInfo.layerName, expand: true, childCategories: [] } : this._data.categories[layerCatIdx];\n\n if (curLayerInfo.subLayerInfos) {\n for (const subLayerInfo of curLayerInfo.subLayerInfos) {\n this.addSubLayerCategory(subLayerInfo, layerCategory);\n\n // Add every feature records for this sub-layer\n for (const feature of subLayerInfo.features) {\n nbRecords++;\n for (const attribute of feature.attributes) {\n // Always use the string value for now\n this.addProperty(MapLayerFeatureRecord.createRecordFromAttribute(attribute), this.generateSubLayerCategoryName(subLayerInfo.subLayerName));\n }\n }\n }\n if (layerCatIdx === -1 && nbRecords > 0) {\n this.addCategory(layerCategory);\n }\n }\n }\n }\n\n this.onDataChanged.raiseEvent();\n }\n\n public addSubLayerCategory(subLayerInfo: MapSubLayerFeatureInfo, layerCategory: PropertyCategory) {\n const subLayerName = this.generateSubLayerCategoryName(subLayerInfo.subLayerName);\n const subCatIdx = layerCategory.childCategories?.findIndex((testCategory: PropertyCategory) => {\n return testCategory.name === subLayerName;\n });\n\n let subLayerCategory;\n if (subCatIdx === -1) {\n subLayerCategory = { name: subLayerName, label: subLayerInfo.subLayerName, expand: true };\n this.addSubCategory(subLayerName);\n layerCategory.childCategories?.push(subLayerCategory);\n }\n }\n public addSubCategory(categoryName: string) {\n this._data.records[categoryName] = [];\n }\n\n public addCategory(category: PropertyCategory): number {\n const categoryIdx = this._data.categories.push(category) - 1;\n this._data.records[this._data.categories[categoryIdx].name] = [];\n return categoryIdx;\n }\n\n public findCategoryIndex(category: PropertyCategory): number {\n const index = this._data.categories.findIndex((testCategory: PropertyCategory) => {\n return testCategory.name === category.name;\n });\n return index;\n }\n public findCategoryIndexByName(name: string): number {\n const index = this._data.categories.findIndex((testCategory: PropertyCategory) => {\n return testCategory.name === name;\n });\n return index;\n }\n\n public addProperty(propertyRecord: PropertyRecord, categoryName: string): void {\n const idx = this._data.records[categoryName].findIndex((prop) => prop.property.name === propertyRecord.property.name);\n if (idx === -1) {\n this._data.records[categoryName].push(propertyRecord);\n } else {\n this._data.records[categoryName][idx].isMerged = true;\n this._data.records[categoryName][idx].isReadonly = true;\n }\n }\n\n public removeProperty(propertyRecord: PropertyRecord, categoryIdx: number): boolean {\n const index = this._data.records[this._data.categories[categoryIdx].name].findIndex((record: PropertyRecord) => {\n return record === propertyRecord;\n });\n\n let result = false;\n\n if (index >= 0) {\n this._data.records[this._data.categories[categoryIdx].name].splice(index, 1);\n this.onDataChanged.raiseEvent();\n result = true;\n }\n return result;\n }\n\n public replaceProperty(propertyRecord: PropertyRecord, categoryIdx: number, newRecord: PropertyRecord): boolean {\n const index = this._data.records[this._data.categories[categoryIdx].name].findIndex((record: PropertyRecord) => {\n return record === propertyRecord;\n });\n\n let result = false;\n\n if (index >= 0) {\n this._data.records[this._data.categories[categoryIdx].name].splice(index, 1, newRecord);\n result = true;\n }\n return result;\n }\n\n public async getData(): Promise<PropertyData> {\n return this._data;\n }\n}\n"]}
|
|
@@ -23,7 +23,8 @@ var __importStar = (this && this.__importStar) || function (mod) {
|
|
|
23
23
|
return result;
|
|
24
24
|
};
|
|
25
25
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
26
|
-
exports.
|
|
26
|
+
exports.useSpecificWidgetDef = useSpecificWidgetDef;
|
|
27
|
+
exports.MapFeatureInfoWidget = MapFeatureInfoWidget;
|
|
27
28
|
const jsx_runtime_1 = require("react/jsx-runtime");
|
|
28
29
|
/*---------------------------------------------------------------------------------------------
|
|
29
30
|
* Copyright (c) Bentley Systems, Incorporated. All rights reserved.
|
|
@@ -42,7 +43,6 @@ function useSpecificWidgetDef(id) {
|
|
|
42
43
|
const frontstageDef = (0, appui_react_1.useActiveFrontstageDef)();
|
|
43
44
|
return frontstageDef?.findWidgetDef(id);
|
|
44
45
|
}
|
|
45
|
-
exports.useSpecificWidgetDef = useSpecificWidgetDef;
|
|
46
46
|
function MapFeatureInfoWidget({ featureInfoOpts }) {
|
|
47
47
|
const dataProvider = React.useRef(null);
|
|
48
48
|
const [hasData, setHasData] = React.useState(false);
|
|
@@ -88,5 +88,4 @@ function MapFeatureInfoWidget({ featureInfoOpts }) {
|
|
|
88
88
|
return ((0, jsx_runtime_1.jsx)(itwinui_react_1.Flex, { justifyContent: "center", style: { width: "100%", height: "100%" }, children: (0, jsx_runtime_1.jsx)("span", { children: (0, jsx_runtime_1.jsx)("i", { children: noRecordsMessage }) }) }));
|
|
89
89
|
}
|
|
90
90
|
}
|
|
91
|
-
exports.MapFeatureInfoWidget = MapFeatureInfoWidget;
|
|
92
91
|
//# sourceMappingURL=FeatureInfoWidget.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FeatureInfoWidget.js","sourceRoot":"","sources":["../../../../src/ui/widget/FeatureInfoWidget.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"FeatureInfoWidget.js","sourceRoot":"","sources":["../../../../src/ui/widget/FeatureInfoWidget.tsx"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n * Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n * See LICENSE.md in the project root for license terms and full copyright notice.\n *--------------------------------------------------------------------------------------------*/\nimport * as React from \"react\";\nimport { useActiveFrontstageDef, WidgetState } from \"@itwin/appui-react\";\nimport { Orientation, VirtualizedPropertyGridWithDataProvider } from \"@itwin/components-react\";\nimport { SvgCopy } from \"@itwin/itwinui-icons-react\";\nimport { Flex, IconButton } from \"@itwin/itwinui-react\";\nimport { MapLayersUI } from \"../../mapLayers\";\nimport { FeatureInfoUiItemsProvider } from \"../FeatureInfoUiItemsProvider\";\nimport { FeatureInfoDataProvider } from \"./FeatureInfoDataProvider\";\nimport { useResizeObserver } from \"../hooks/useResizeObserver\";\n\nimport type { PrimitiveValue } from \"@itwin/appui-abstract\";\nimport type { ActionButtonRendererProps } from \"@itwin/components-react\";\nimport type { MapFeatureInfoOptions } from \"../Interfaces\";\nexport function useSpecificWidgetDef(id: string) {\n const frontstageDef = useActiveFrontstageDef();\n return frontstageDef?.findWidgetDef(id);\n}\n\n// MapFeatureInfoWidgetProps\ninterface MapFeatureInfoWidgetProps {\n featureInfoOpts: MapFeatureInfoOptions;\n}\n\nexport function MapFeatureInfoWidget({ featureInfoOpts }: MapFeatureInfoWidgetProps) {\n const dataProvider = React.useRef<FeatureInfoDataProvider | null>(null);\n const [hasData, setHasData] = React.useState<boolean>(false);\n\n const [noRecordsMessage] = React.useState(MapLayersUI.localization.getLocalizedString(\"mapLayers:FeatureInfoWidget.NoRecords\"));\n\n const [{ width, height }, setSize] = React.useState({ width: 0, height: 0 });\n\n const widgetDef = useSpecificWidgetDef(FeatureInfoUiItemsProvider.widgetId);\n const handleDataChanged = React.useCallback(() => {\n const dataAvailable = dataProvider.current !== null && dataProvider.current.hasRecords;\n setHasData(dataAvailable);\n if (widgetDef) {\n widgetDef.setWidgetState(dataAvailable ? WidgetState.Open : WidgetState.Hidden);\n }\n }, [widgetDef]);\n\n React.useEffect(() => {\n dataProvider.current = new FeatureInfoDataProvider();\n return () => {\n dataProvider?.current?.onUnload();\n };\n }, []);\n\n React.useEffect(() => {\n dataProvider.current?.onDataChanged.addListener(handleDataChanged);\n return () => {\n dataProvider.current?.onDataChanged.removeListener(handleDataChanged);\n };\n }, [handleDataChanged]);\n\n const handleResize = React.useCallback((w: number, h: number) => {\n setSize({ width: w, height: h });\n }, []);\n\n const [elementRef] = useResizeObserver<HTMLDivElement>((size) => {\n handleResize(size.width, size.height);\n });\n\n const copyButton = React.useCallback(\n (props: ActionButtonRendererProps) =>\n props.isPropertyHovered && (\n <div>\n <IconButton\n styleType=\"borderless\"\n label=\"Copy\"\n onClick={() => {\n const value = props.property.value;\n if (value !== undefined && value.hasOwnProperty(\"displayValue\")) {\n navigator.clipboard.writeText((value as PrimitiveValue).displayValue ?? \"\").catch((_) => {});\n }\n }}\n >\n <SvgCopy />\n </IconButton>\n </div>\n ),\n [],\n );\n\n if (hasData && dataProvider.current) {\n return (\n <div ref={elementRef}>\n <VirtualizedPropertyGridWithDataProvider\n width={width}\n height={height}\n dataProvider={dataProvider.current}\n orientation={Orientation.Vertical}\n isPropertySelectionEnabled={featureInfoOpts?.propertyGridOptions?.isPropertySelectionEnabled}\n isPropertyHoverEnabled // This need to be turned on to have the action button appears only when property hovered\n actionButtonRenderers={[copyButton]}\n />\n </div>\n );\n } else {\n return (\n <Flex justifyContent=\"center\" style={{ width: \"100%\", height: \"100%\" }}>\n <span>\n <i>{noRecordsMessage}</i>\n </span>\n </Flex>\n );\n }\n}\n"]}
|
|
@@ -23,7 +23,7 @@ var __importStar = (this && this.__importStar) || function (mod) {
|
|
|
23
23
|
return result;
|
|
24
24
|
};
|
|
25
25
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
26
|
-
exports.MapLayerDroppable =
|
|
26
|
+
exports.MapLayerDroppable = MapLayerDroppable;
|
|
27
27
|
const jsx_runtime_1 = require("react/jsx-runtime");
|
|
28
28
|
/*---------------------------------------------------------------------------------------------
|
|
29
29
|
* Copyright (c) Bentley Systems, Incorporated. All rights reserved.
|
|
@@ -115,7 +115,7 @@ function MapLayerDroppable(props) {
|
|
|
115
115
|
}, mapLayerOptions: props.mapLayerOptions }));
|
|
116
116
|
}
|
|
117
117
|
}
|
|
118
|
-
},
|
|
118
|
+
}, label: requireAuthTooltip, children: (0, jsx_runtime_1.jsx)(itwinui_icons_react_1.SvgStatusWarning, {}) }))] }), (0, jsx_runtime_1.jsx)("div", { id: "MapLayerSettingsSubLayersMenu", style: { visibility: "hidden" }, className: "map-manager-item-sub-layer-container", children: activeLayer.subLayers && activeLayer.subLayers.length > 1 && ((0, jsx_runtime_1.jsx)(SubLayersPopupButton_1.SubLayersPopupButton, { checkboxStyle: "eye", expandMode: "rootGroupOnly", subLayers: props.activeViewport ? activeLayer.subLayers : undefined, singleVisibleSubLayer: activeLayer.provider?.mutualExclusiveSubLayer, onSubLayerStateChange: (subLayerId, isSelected) => {
|
|
119
119
|
onSubLayerStateChange(activeLayer, subLayerId, isSelected);
|
|
120
120
|
} })) }), activeLayer.provider?.status === core_frontend_1.MapLayerImageryProviderStatus.RequireAuth && ((0, jsx_runtime_1.jsx)(itwinui_react_1.IconButton, { disabled: props.disabled, size: "small", styleType: "borderless", onClick: () => {
|
|
121
121
|
const indexInDisplayStyle = props.activeViewport?.displayStyle.findMapLayerIndexByNameAndSource(activeLayer.name, activeLayer.source, activeLayer.isOverlay);
|
|
@@ -128,7 +128,7 @@ function MapLayerDroppable(props) {
|
|
|
128
128
|
}, mapLayerOptions: props.mapLayerOptions }));
|
|
129
129
|
}
|
|
130
130
|
}
|
|
131
|
-
},
|
|
131
|
+
}, label: requireAuthTooltip, children: (0, jsx_runtime_1.jsx)(itwinui_icons_react_1.SvgStatusWarning, {}) })), (0, jsx_runtime_1.jsx)("div", { id: "MapLayerSettingsMenuWrapper", style: { visibility: "hidden" }, children: (0, jsx_runtime_1.jsx)(MapLayerSettingsMenu_1.MapLayerSettingsMenu, { activeViewport: props.activeViewport, mapLayerSettings: activeLayer, onMenuItemSelection: props.onMenuItemSelected, disabled: props.disabled }) })] }, activeLayer.name));
|
|
132
132
|
};
|
|
133
133
|
function renderDraggableContent(snapshot) {
|
|
134
134
|
let node;
|
|
@@ -148,5 +148,4 @@ function MapLayerDroppable(props) {
|
|
|
148
148
|
}
|
|
149
149
|
return ((0, jsx_runtime_1.jsx)(react_beautiful_dnd_1.Droppable, { droppableId: droppableId, renderClone: renderItem, getContainerForClone: props.getContainerForClone, children: renderDraggable }));
|
|
150
150
|
}
|
|
151
|
-
exports.MapLayerDroppable = MapLayerDroppable;
|
|
152
151
|
//# sourceMappingURL=MapLayerDroppable.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MapLayerDroppable.js","sourceRoot":"","sources":["../../../../src/ui/widget/MapLayerDroppable.tsx"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n * Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n * See LICENSE.md in the project root for license terms and full copyright notice.\n *--------------------------------------------------------------------------------------------*/\n// cSpell:ignore droppable Sublayer Basemap\n\n// the following quiet warning caused by react-beautiful-dnd package\n\nimport \"./MapLayerManager.scss\";\nimport * as React from \"react\";\nimport { Draggable, Droppable } from \"react-beautiful-dnd\";\nimport { UiFramework } from \"@itwin/appui-react\";\nimport { assert } from \"@itwin/core-bentley\";\nimport { ImageMapLayerSettings } from \"@itwin/core-common\";\nimport { IModelApp, MapLayerImageryProviderStatus, MapTileTreeScaleRangeVisibility, NotifyMessageDetails, OutputMessagePriority } from \"@itwin/core-frontend\";\nimport { SvgStatusWarning, SvgVisibilityHide, SvgVisibilityShow } from \"@itwin/itwinui-icons-react\";\nimport { Checkbox, IconButton } from \"@itwin/itwinui-react\";\nimport { MapLayersUI } from \"../../mapLayers\";\nimport { AttachLayerButtonType, AttachLayerPopupButton } from \"./AttachLayerPopupButton\";\nimport { MapLayerSettingsMenu } from \"./MapLayerSettingsMenu\";\nimport { MapUrlDialog } from \"./MapUrlDialog\";\nimport { SubLayersPopupButton } from \"./SubLayersPopupButton\";\n\nimport type { DraggableChildrenFn, DroppableProvided, DroppableStateSnapshot } from \"react-beautiful-dnd\";\nimport type { SubLayerId } from \"@itwin/core-common\";\nimport type { MapLayerIndex, ScreenViewport } from \"@itwin/core-frontend\";\nimport type { MapLayerOptions, StyleMapLayerSettings } from \"../Interfaces\";\nimport type { SourceState } from \"./MapUrlDialog\";\n/** @internal */\ninterface MapLayerDroppableProps {\n isOverlay: boolean;\n layersList?: StyleMapLayerSettings[];\n mapLayerOptions?: MapLayerOptions;\n getContainerForClone: () => HTMLElement;\n activeViewport: ScreenViewport;\n onMenuItemSelected: (action: string, mapLayerSettings: StyleMapLayerSettings) => void;\n onItemVisibilityToggleClicked: (mapLayerSettings: StyleMapLayerSettings) => void;\n onItemSelected: (isOverlay: boolean, index: number) => void;\n onItemEdited: () => void;\n disabled?: boolean;\n}\n\nconst changeVisibilityByElementId = (element: Element | null, visible: boolean) => {\n if (element) {\n element.setAttribute(\"style\", `visibility: ${visible ? \"visible\" : \"hidden\"}`);\n }\n};\n\n/** @internal */\nexport function MapLayerDroppable(props: MapLayerDroppableProps) {\n const containsLayer = props.layersList && props.layersList.length > 0;\n const droppableId = props.isOverlay ? \"overlayMapLayers\" : \"backgroundMapLayers\";\n const [toggleVisibility] = React.useState(MapLayersUI.localization.getLocalizedString(\"mapLayers:Widget.ToggleVisibility\"));\n const [requireAuthTooltip] = React.useState(MapLayersUI.localization.getLocalizedString(\"mapLayers:Widget.RequireAuthTooltip\"));\n const [noBackgroundMapsSpecifiedLabel] = React.useState(MapLayersUI.localization.getLocalizedString(\"mapLayers:Widget.NoBackgroundLayers\"));\n const [noUnderlaysSpecifiedLabel] = React.useState(MapLayersUI.localization.getLocalizedString(\"mapLayers:Widget.NoOverlayLayers\"));\n const [dropLayerLabel] = React.useState(MapLayersUI.localization.getLocalizedString(\"mapLayers:Widget.DropLayerLabel\"));\n const [outOfRangeTitle] = React.useState(MapLayersUI.localization.getLocalizedString(\"mapLayers:Widget.layerOutOfRange\"));\n\n const onSubLayerStateChange = (activeLayer: StyleMapLayerSettings, subLayerId: SubLayerId, isSelected: boolean) => {\n const mapLayerStyleIdx = props.activeViewport.displayStyle.findMapLayerIndexByNameAndSource(activeLayer.name, activeLayer.source, activeLayer.isOverlay);\n if (mapLayerStyleIdx !== -1 && activeLayer.subLayers) {\n props.activeViewport.displayStyle.changeMapSubLayerProps({ visible: isSelected }, subLayerId, {\n index: mapLayerStyleIdx,\n isOverlay: activeLayer.isOverlay,\n });\n }\n };\n\n const handleOk = React.useCallback(\n (index: MapLayerIndex, sourceState?: SourceState) => {\n UiFramework.dialogs.modal.close();\n\n const source = sourceState?.source;\n const vp = props?.activeViewport;\n if (vp === undefined || sourceState === undefined || source === undefined) {\n const error = MapLayersUI.localization.getLocalizedString(\"mapLayers:Messages.MapLayerAttachMissingViewOrSource\");\n const msg = MapLayersUI.localization.getLocalizedString(\"mapLayers:Messages.MapLayerAttachError\", { error, sourceName: source?.name ?? \"\" });\n IModelApp.notifications.outputMessage(new NotifyMessageDetails(OutputMessagePriority.Error, msg));\n return;\n }\n\n const validation = sourceState.validation;\n\n // Layer is already attached,\n // This calls invalidateRenderPlan()\n vp.displayStyle.changeMapLayerProps({ subLayers: validation.subLayers }, index);\n vp.displayStyle.changeMapLayerCredentials(index, source.userName, source.password);\n\n // Either initial attach/initialize failed or the layer failed to load at least one tile\n // because of an invalid token; in both cases tile tree needs to be fully reset\n const provider = vp.getMapLayerImageryProvider(index);\n provider?.resetStatus();\n vp.resetMapLayer(index);\n\n props.onItemEdited();\n },\n [props],\n );\n\n const changeSettingsMenuVisibility = (event: React.MouseEvent<HTMLDivElement, MouseEvent>, visible: boolean) => {\n changeVisibilityByElementId(event.currentTarget.querySelector(\"#MapLayerSettingsMenuWrapper\"), visible);\n changeVisibilityByElementId(event.currentTarget.querySelector(\"#MapLayerSettingsSubLayersMenu\"), visible);\n };\n\n const renderItem: DraggableChildrenFn = (dragProvided, _, rubric) => {\n assert(props.layersList !== undefined);\n const activeLayer = props.layersList[rubric.source.index];\n const outOfRange = activeLayer.treeVisibility === MapTileTreeScaleRangeVisibility.Hidden;\n\n return (\n <div\n className=\"map-manager-source-item\"\n data-id={rubric.source.index}\n key={activeLayer.name}\n {...dragProvided.draggableProps}\n ref={dragProvided.innerRef}\n onMouseEnter={(event) => changeSettingsMenuVisibility(event, true)}\n onMouseLeave={(event) => changeSettingsMenuVisibility(event, false)}\n >\n {/* Checkbox */}\n <Checkbox\n data-testid={\"select-item-checkbox\"}\n checked={activeLayer.selected}\n onChange={(event: React.ChangeEvent<HTMLInputElement>) => {\n activeLayer.selected = event.target.checked;\n props.onItemSelected(props.isOverlay, rubric.source.index);\n }}\n ></Checkbox>\n {/* Visibility icon */}\n <IconButton\n disabled={props.disabled}\n size=\"small\"\n styleType=\"borderless\"\n className=\"map-manager-item-visibility\"\n label={toggleVisibility}\n onClick={() => {\n props.onItemVisibilityToggleClicked(activeLayer);\n }}\n >\n {activeLayer.visible ? <SvgVisibilityShow data-testid=\"layer-visibility-icon-show\" /> : <SvgVisibilityHide data-testid=\"layer-visibility-icon-hide\" />}\n </IconButton>\n\n {/* Label */}\n <span\n className={props.disabled || outOfRange ? \"map-manager-item-label-disabled\" : \"map-manager-item-label\"}\n title={outOfRange ? outOfRangeTitle : undefined}\n {...dragProvided.dragHandleProps}\n >\n {activeLayer.name}\n {/* eslint-disable-next-line @itwin/no-internal */}\n {activeLayer.provider?.status === MapLayerImageryProviderStatus.RequireAuth && (\n <IconButton\n disabled={props.disabled}\n size=\"small\"\n styleType=\"borderless\"\n onClick={() => {\n const indexInDisplayStyle = props.activeViewport?.displayStyle.findMapLayerIndexByNameAndSource(\n activeLayer.name,\n activeLayer.source,\n activeLayer.isOverlay,\n );\n if (indexInDisplayStyle !== undefined && indexInDisplayStyle >= 0) {\n const index = { index: indexInDisplayStyle, isOverlay: activeLayer.isOverlay };\n const layer = props.activeViewport.displayStyle.mapLayerAtIndex(index);\n if (layer instanceof ImageMapLayerSettings) {\n UiFramework.dialogs.modal.open(\n <MapUrlDialog\n activeViewport={props.activeViewport}\n signInModeArgs={{ layer }}\n onOkResult={(sourceState?: SourceState) => handleOk(index, sourceState)}\n onCancelResult={() => {\n UiFramework.dialogs.modal.close();\n }}\n mapLayerOptions={props.mapLayerOptions}\n />,\n );\n }\n }\n }}\n title={requireAuthTooltip}\n >\n <SvgStatusWarning />\n </IconButton>\n )}\n </span>\n\n {/* SubLayersPopupButton */}\n <div id=\"MapLayerSettingsSubLayersMenu\" style={{ visibility: \"hidden\" }} className=\"map-manager-item-sub-layer-container\">\n {activeLayer.subLayers && activeLayer.subLayers.length > 1 && (\n <SubLayersPopupButton\n checkboxStyle=\"eye\"\n expandMode=\"rootGroupOnly\"\n subLayers={props.activeViewport ? activeLayer.subLayers : undefined}\n singleVisibleSubLayer={activeLayer.provider?.mutualExclusiveSubLayer}\n onSubLayerStateChange={(subLayerId: SubLayerId, isSelected: boolean) => {\n onSubLayerStateChange(activeLayer, subLayerId, isSelected);\n }}\n />\n )}\n </div>\n {/* eslint-disable-next-line @itwin/no-internal */}\n {activeLayer.provider?.status === MapLayerImageryProviderStatus.RequireAuth && (\n <IconButton\n disabled={props.disabled}\n size=\"small\"\n styleType=\"borderless\"\n onClick={() => {\n const indexInDisplayStyle = props.activeViewport?.displayStyle.findMapLayerIndexByNameAndSource(\n activeLayer.name,\n activeLayer.source,\n activeLayer.isOverlay,\n );\n if (indexInDisplayStyle !== undefined && indexInDisplayStyle >= 0) {\n const index = { index: indexInDisplayStyle, isOverlay: activeLayer.isOverlay };\n const layer = props.activeViewport.displayStyle.mapLayerAtIndex(index);\n if (layer instanceof ImageMapLayerSettings) {\n UiFramework.dialogs.modal.open(\n <MapUrlDialog\n activeViewport={props.activeViewport}\n signInModeArgs={{ layer }}\n onOkResult={(sourceState?: SourceState) => handleOk(index, sourceState)}\n onCancelResult={() => {\n UiFramework.dialogs.modal.close();\n }}\n mapLayerOptions={props.mapLayerOptions}\n />,\n );\n }\n }\n }}\n title={requireAuthTooltip}\n >\n <SvgStatusWarning />\n </IconButton>\n )}\n <div id=\"MapLayerSettingsMenuWrapper\" style={{ visibility: \"hidden\" }}>\n <MapLayerSettingsMenu\n activeViewport={props.activeViewport}\n mapLayerSettings={activeLayer}\n onMenuItemSelection={props.onMenuItemSelected}\n disabled={props.disabled}\n />\n </div>\n </div>\n );\n };\n\n function renderDraggableContent(snapshot: DroppableStateSnapshot): React.ReactNode {\n let node: React.ReactNode;\n if (containsLayer) {\n // Render a <Draggable>\n node = props.layersList?.map((mapLayerSettings, i) => (\n <Draggable isDragDisabled={props.disabled} key={mapLayerSettings.name} draggableId={mapLayerSettings.name} index={i}>\n {renderItem}\n </Draggable>\n ));\n } else {\n // Render a label that provide a 'Drop here' hint\n const label = props.isOverlay ? noUnderlaysSpecifiedLabel : noBackgroundMapsSpecifiedLabel;\n node = (\n <div title={label} className=\"map-manager-no-layers-container\">\n {snapshot.isDraggingOver ? (\n <span className=\"map-manager-no-layers-label\">{dropLayerLabel}</span>\n ) : (\n <>\n <span className=\"map-manager-no-layers-label\">{label}</span>\n <AttachLayerPopupButton disabled={props.disabled} buttonType={AttachLayerButtonType.Blue} isOverlay={props.isOverlay} />\n </>\n )}\n </div>\n );\n }\n return node;\n }\n\n function renderDraggable(dropProvided: DroppableProvided, dropSnapshot: DroppableStateSnapshot): React.ReactElement<HTMLElement> {\n return (\n <div\n className={`map-manager-attachments${dropSnapshot.isDraggingOver && containsLayer ? \" is-dragging-map-over\" : \"\"}`}\n ref={dropProvided.innerRef}\n {...dropProvided.droppableProps}\n >\n {renderDraggableContent(dropSnapshot)}\n\n {/* We don't want a placeholder when displaying the 'Drop here' message\n Unfortunately, if don't add it, 'react-beautiful-dnd' show an error message in the console.\n So I simply make it hidden. See https://github.com/atlassian/react-beautiful-dnd/issues/518 */}\n <div style={containsLayer ? undefined : { display: \"none\" }}>{dropProvided.placeholder}</div>\n </div>\n );\n }\n\n return (\n <Droppable droppableId={droppableId} renderClone={renderItem} getContainerForClone={props.getContainerForClone as any}>\n {renderDraggable}\n </Droppable>\n );\n}\n"]}
|
|
1
|
+
{"version":3,"file":"MapLayerDroppable.js","sourceRoot":"","sources":["../../../../src/ui/widget/MapLayerDroppable.tsx"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n * Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n * See LICENSE.md in the project root for license terms and full copyright notice.\n *--------------------------------------------------------------------------------------------*/\n// cSpell:ignore droppable Sublayer Basemap\n\n// the following quiet warning caused by react-beautiful-dnd package\n\nimport \"./MapLayerManager.scss\";\nimport * as React from \"react\";\nimport { Draggable, Droppable } from \"react-beautiful-dnd\";\nimport { UiFramework } from \"@itwin/appui-react\";\nimport { assert } from \"@itwin/core-bentley\";\nimport { ImageMapLayerSettings } from \"@itwin/core-common\";\nimport { IModelApp, MapLayerImageryProviderStatus, MapTileTreeScaleRangeVisibility, NotifyMessageDetails, OutputMessagePriority } from \"@itwin/core-frontend\";\nimport { SvgStatusWarning, SvgVisibilityHide, SvgVisibilityShow } from \"@itwin/itwinui-icons-react\";\nimport { Checkbox, IconButton } from \"@itwin/itwinui-react\";\nimport { MapLayersUI } from \"../../mapLayers\";\nimport { AttachLayerButtonType, AttachLayerPopupButton } from \"./AttachLayerPopupButton\";\nimport { MapLayerSettingsMenu } from \"./MapLayerSettingsMenu\";\nimport { MapUrlDialog } from \"./MapUrlDialog\";\nimport { SubLayersPopupButton } from \"./SubLayersPopupButton\";\n\nimport type { DraggableChildrenFn, DroppableProvided, DroppableStateSnapshot } from \"react-beautiful-dnd\";\nimport type { SubLayerId } from \"@itwin/core-common\";\nimport type { MapLayerIndex, ScreenViewport } from \"@itwin/core-frontend\";\nimport type { MapLayerOptions, StyleMapLayerSettings } from \"../Interfaces\";\nimport type { SourceState } from \"./MapUrlDialog\";\n/** @internal */\ninterface MapLayerDroppableProps {\n isOverlay: boolean;\n layersList?: StyleMapLayerSettings[];\n mapLayerOptions?: MapLayerOptions;\n getContainerForClone: () => HTMLElement;\n activeViewport: ScreenViewport;\n onMenuItemSelected: (action: string, mapLayerSettings: StyleMapLayerSettings) => void;\n onItemVisibilityToggleClicked: (mapLayerSettings: StyleMapLayerSettings) => void;\n onItemSelected: (isOverlay: boolean, index: number) => void;\n onItemEdited: () => void;\n disabled?: boolean;\n}\n\nconst changeVisibilityByElementId = (element: Element | null, visible: boolean) => {\n if (element) {\n element.setAttribute(\"style\", `visibility: ${visible ? \"visible\" : \"hidden\"}`);\n }\n};\n\n/** @internal */\nexport function MapLayerDroppable(props: MapLayerDroppableProps) {\n const containsLayer = props.layersList && props.layersList.length > 0;\n const droppableId = props.isOverlay ? \"overlayMapLayers\" : \"backgroundMapLayers\";\n const [toggleVisibility] = React.useState(MapLayersUI.localization.getLocalizedString(\"mapLayers:Widget.ToggleVisibility\"));\n const [requireAuthTooltip] = React.useState(MapLayersUI.localization.getLocalizedString(\"mapLayers:Widget.RequireAuthTooltip\"));\n const [noBackgroundMapsSpecifiedLabel] = React.useState(MapLayersUI.localization.getLocalizedString(\"mapLayers:Widget.NoBackgroundLayers\"));\n const [noUnderlaysSpecifiedLabel] = React.useState(MapLayersUI.localization.getLocalizedString(\"mapLayers:Widget.NoOverlayLayers\"));\n const [dropLayerLabel] = React.useState(MapLayersUI.localization.getLocalizedString(\"mapLayers:Widget.DropLayerLabel\"));\n const [outOfRangeTitle] = React.useState(MapLayersUI.localization.getLocalizedString(\"mapLayers:Widget.layerOutOfRange\"));\n\n const onSubLayerStateChange = (activeLayer: StyleMapLayerSettings, subLayerId: SubLayerId, isSelected: boolean) => {\n const mapLayerStyleIdx = props.activeViewport.displayStyle.findMapLayerIndexByNameAndSource(activeLayer.name, activeLayer.source, activeLayer.isOverlay);\n if (mapLayerStyleIdx !== -1 && activeLayer.subLayers) {\n props.activeViewport.displayStyle.changeMapSubLayerProps({ visible: isSelected }, subLayerId, {\n index: mapLayerStyleIdx,\n isOverlay: activeLayer.isOverlay,\n });\n }\n };\n\n const handleOk = React.useCallback(\n (index: MapLayerIndex, sourceState?: SourceState) => {\n UiFramework.dialogs.modal.close();\n\n const source = sourceState?.source;\n const vp = props?.activeViewport;\n if (vp === undefined || sourceState === undefined || source === undefined) {\n const error = MapLayersUI.localization.getLocalizedString(\"mapLayers:Messages.MapLayerAttachMissingViewOrSource\");\n const msg = MapLayersUI.localization.getLocalizedString(\"mapLayers:Messages.MapLayerAttachError\", { error, sourceName: source?.name ?? \"\" });\n IModelApp.notifications.outputMessage(new NotifyMessageDetails(OutputMessagePriority.Error, msg));\n return;\n }\n\n const validation = sourceState.validation;\n\n // Layer is already attached,\n // This calls invalidateRenderPlan()\n vp.displayStyle.changeMapLayerProps({ subLayers: validation.subLayers }, index);\n vp.displayStyle.changeMapLayerCredentials(index, source.userName, source.password);\n\n // Either initial attach/initialize failed or the layer failed to load at least one tile\n // because of an invalid token; in both cases tile tree needs to be fully reset\n const provider = vp.getMapLayerImageryProvider(index);\n provider?.resetStatus();\n vp.resetMapLayer(index);\n\n props.onItemEdited();\n },\n [props],\n );\n\n const changeSettingsMenuVisibility = (event: React.MouseEvent<HTMLDivElement, MouseEvent>, visible: boolean) => {\n changeVisibilityByElementId(event.currentTarget.querySelector(\"#MapLayerSettingsMenuWrapper\"), visible);\n changeVisibilityByElementId(event.currentTarget.querySelector(\"#MapLayerSettingsSubLayersMenu\"), visible);\n };\n\n const renderItem: DraggableChildrenFn = (dragProvided, _, rubric) => {\n assert(props.layersList !== undefined);\n const activeLayer = props.layersList[rubric.source.index];\n const outOfRange = activeLayer.treeVisibility === MapTileTreeScaleRangeVisibility.Hidden;\n\n return (\n <div\n className=\"map-manager-source-item\"\n data-id={rubric.source.index}\n key={activeLayer.name}\n {...dragProvided.draggableProps}\n ref={dragProvided.innerRef}\n onMouseEnter={(event) => changeSettingsMenuVisibility(event, true)}\n onMouseLeave={(event) => changeSettingsMenuVisibility(event, false)}\n >\n {/* Checkbox */}\n <Checkbox\n data-testid={\"select-item-checkbox\"}\n checked={activeLayer.selected}\n onChange={(event: React.ChangeEvent<HTMLInputElement>) => {\n activeLayer.selected = event.target.checked;\n props.onItemSelected(props.isOverlay, rubric.source.index);\n }}\n ></Checkbox>\n {/* Visibility icon */}\n <IconButton\n disabled={props.disabled}\n size=\"small\"\n styleType=\"borderless\"\n className=\"map-manager-item-visibility\"\n label={toggleVisibility}\n onClick={() => {\n props.onItemVisibilityToggleClicked(activeLayer);\n }}\n >\n {activeLayer.visible ? <SvgVisibilityShow data-testid=\"layer-visibility-icon-show\" /> : <SvgVisibilityHide data-testid=\"layer-visibility-icon-hide\" />}\n </IconButton>\n\n {/* Label */}\n <span\n className={props.disabled || outOfRange ? \"map-manager-item-label-disabled\" : \"map-manager-item-label\"}\n title={outOfRange ? outOfRangeTitle : undefined}\n {...dragProvided.dragHandleProps}\n >\n {activeLayer.name}\n {/* eslint-disable-next-line @itwin/no-internal */}\n {activeLayer.provider?.status === MapLayerImageryProviderStatus.RequireAuth && (\n <IconButton\n disabled={props.disabled}\n size=\"small\"\n styleType=\"borderless\"\n onClick={() => {\n const indexInDisplayStyle = props.activeViewport?.displayStyle.findMapLayerIndexByNameAndSource(\n activeLayer.name,\n activeLayer.source,\n activeLayer.isOverlay,\n );\n if (indexInDisplayStyle !== undefined && indexInDisplayStyle >= 0) {\n const index = { index: indexInDisplayStyle, isOverlay: activeLayer.isOverlay };\n const layer = props.activeViewport.displayStyle.mapLayerAtIndex(index);\n if (layer instanceof ImageMapLayerSettings) {\n UiFramework.dialogs.modal.open(\n <MapUrlDialog\n activeViewport={props.activeViewport}\n signInModeArgs={{ layer }}\n onOkResult={(sourceState?: SourceState) => handleOk(index, sourceState)}\n onCancelResult={() => {\n UiFramework.dialogs.modal.close();\n }}\n mapLayerOptions={props.mapLayerOptions}\n />,\n );\n }\n }\n }}\n label={requireAuthTooltip}\n >\n <SvgStatusWarning />\n </IconButton>\n )}\n </span>\n\n {/* SubLayersPopupButton */}\n <div id=\"MapLayerSettingsSubLayersMenu\" style={{ visibility: \"hidden\" }} className=\"map-manager-item-sub-layer-container\">\n {activeLayer.subLayers && activeLayer.subLayers.length > 1 && (\n <SubLayersPopupButton\n checkboxStyle=\"eye\"\n expandMode=\"rootGroupOnly\"\n subLayers={props.activeViewport ? activeLayer.subLayers : undefined}\n singleVisibleSubLayer={activeLayer.provider?.mutualExclusiveSubLayer}\n onSubLayerStateChange={(subLayerId: SubLayerId, isSelected: boolean) => {\n onSubLayerStateChange(activeLayer, subLayerId, isSelected);\n }}\n />\n )}\n </div>\n {/* eslint-disable-next-line @itwin/no-internal */}\n {activeLayer.provider?.status === MapLayerImageryProviderStatus.RequireAuth && (\n <IconButton\n disabled={props.disabled}\n size=\"small\"\n styleType=\"borderless\"\n onClick={() => {\n const indexInDisplayStyle = props.activeViewport?.displayStyle.findMapLayerIndexByNameAndSource(\n activeLayer.name,\n activeLayer.source,\n activeLayer.isOverlay,\n );\n if (indexInDisplayStyle !== undefined && indexInDisplayStyle >= 0) {\n const index = { index: indexInDisplayStyle, isOverlay: activeLayer.isOverlay };\n const layer = props.activeViewport.displayStyle.mapLayerAtIndex(index);\n if (layer instanceof ImageMapLayerSettings) {\n UiFramework.dialogs.modal.open(\n <MapUrlDialog\n activeViewport={props.activeViewport}\n signInModeArgs={{ layer }}\n onOkResult={(sourceState?: SourceState) => handleOk(index, sourceState)}\n onCancelResult={() => {\n UiFramework.dialogs.modal.close();\n }}\n mapLayerOptions={props.mapLayerOptions}\n />,\n );\n }\n }\n }}\n label={requireAuthTooltip}\n >\n <SvgStatusWarning />\n </IconButton>\n )}\n <div id=\"MapLayerSettingsMenuWrapper\" style={{ visibility: \"hidden\" }}>\n <MapLayerSettingsMenu\n activeViewport={props.activeViewport}\n mapLayerSettings={activeLayer}\n onMenuItemSelection={props.onMenuItemSelected}\n disabled={props.disabled}\n />\n </div>\n </div>\n );\n };\n\n function renderDraggableContent(snapshot: DroppableStateSnapshot): React.ReactNode {\n let node: React.ReactNode;\n if (containsLayer) {\n // Render a <Draggable>\n node = props.layersList?.map((mapLayerSettings, i) => (\n <Draggable isDragDisabled={props.disabled} key={mapLayerSettings.name} draggableId={mapLayerSettings.name} index={i}>\n {renderItem}\n </Draggable>\n ));\n } else {\n // Render a label that provide a 'Drop here' hint\n const label = props.isOverlay ? noUnderlaysSpecifiedLabel : noBackgroundMapsSpecifiedLabel;\n node = (\n <div title={label} className=\"map-manager-no-layers-container\">\n {snapshot.isDraggingOver ? (\n <span className=\"map-manager-no-layers-label\">{dropLayerLabel}</span>\n ) : (\n <>\n <span className=\"map-manager-no-layers-label\">{label}</span>\n <AttachLayerPopupButton disabled={props.disabled} buttonType={AttachLayerButtonType.Blue} isOverlay={props.isOverlay} />\n </>\n )}\n </div>\n );\n }\n return node;\n }\n\n function renderDraggable(dropProvided: DroppableProvided, dropSnapshot: DroppableStateSnapshot): React.ReactElement<HTMLElement> {\n return (\n <div\n className={`map-manager-attachments${dropSnapshot.isDraggingOver && containsLayer ? \" is-dragging-map-over\" : \"\"}`}\n ref={dropProvided.innerRef}\n {...dropProvided.droppableProps}\n >\n {renderDraggableContent(dropSnapshot)}\n\n {/* We don't want a placeholder when displaying the 'Drop here' message\n Unfortunately, if don't add it, 'react-beautiful-dnd' show an error message in the console.\n So I simply make it hidden. See https://github.com/atlassian/react-beautiful-dnd/issues/518 */}\n <div style={containsLayer ? undefined : { display: \"none\" }}>{dropProvided.placeholder}</div>\n </div>\n );\n }\n\n return (\n <Droppable droppableId={droppableId} renderClone={renderItem} getContainerForClone={props.getContainerForClone as any}>\n {renderDraggable}\n </Droppable>\n );\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MapLayerManager.d.ts","sourceRoot":"","sources":["../../../../src/ui/widget/MapLayerManager.tsx"],"names":[],"mappings":"AAOA,OAAO,wBAAwB,CAAC;AAChC,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAG/B,OAAO,EAA4C,oBAAoB,EAAyB,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"MapLayerManager.d.ts","sourceRoot":"","sources":["../../../../src/ui/widget/MapLayerManager.tsx"],"names":[],"mappings":"AAOA,OAAO,wBAAwB,CAAC;AAChC,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAG/B,OAAO,EAA4C,oBAAoB,EAAyB,MAAM,oBAAoB,CAAC;AAiB3H,OAAO,KAAK,EAAyD,cAAc,EAAE,cAAc,EAA2B,MAAM,sBAAsB,CAAC;AAC3J,OAAO,KAAK,EAAE,eAAe,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAC;AAC5E,gBAAgB;AAChB,MAAM,WAAW,qBAAqB;IACpC,QAAQ,CAAC,OAAO,EAAE,cAAc,EAAE,CAAC;IACnC,QAAQ,CAAC,cAAc,EAAE,OAAO,CAAC;IACjC,QAAQ,CAAC,KAAK,EAAE,oBAAoB,EAAE,CAAC;IACvC,QAAQ,CAAC,gBAAgB,EAAE,MAAM,IAAI,CAAC;IACtC,QAAQ,CAAC,cAAc,CAAC,EAAE,cAAc,CAAC;IACzC,QAAQ,CAAC,gBAAgB,CAAC,EAAE,qBAAqB,EAAE,CAAC;IACpD,QAAQ,CAAC,aAAa,CAAC,EAAE,qBAAqB,EAAE,CAAC;IACjD,QAAQ,CAAC,eAAe,CAAC,EAAE,eAAe,CAAC;CAC5C;AAED,gBAAgB;AAChB,eAAO,MAAM,oBAAoB,wBAIhC,CAAC;AAEF,gBAAgB;AAChB,eAAO,MAAM,gBAAgB,sCAK3B,CAAC;AAEH,gBAAgB;AAChB,wBAAgB,mBAAmB,IAAI,qBAAqB,CAE3D;AAyCD,UAAU,oBAAoB;IAC5B,oBAAoB,EAAE,MAAM,WAAW,CAAC;IACxC,cAAc,EAAE,cAAc,CAAC;IAC/B,eAAe,CAAC,EAAE,eAAe,CAAC;CACnC;AAED,wBAAgB,eAAe,CAAC,KAAK,EAAE,oBAAoB,2CA8lB1D"}
|
|
@@ -23,7 +23,9 @@ var __importStar = (this && this.__importStar) || function (mod) {
|
|
|
23
23
|
return result;
|
|
24
24
|
};
|
|
25
25
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
26
|
-
exports.
|
|
26
|
+
exports.SourceMapContext = exports.defaultBaseMapLayers = void 0;
|
|
27
|
+
exports.useSourceMapContext = useSourceMapContext;
|
|
28
|
+
exports.MapLayerManager = MapLayerManager;
|
|
27
29
|
const jsx_runtime_1 = require("react/jsx-runtime");
|
|
28
30
|
/*---------------------------------------------------------------------------------------------
|
|
29
31
|
* Copyright (c) Bentley Systems, Incorporated. All rights reserved.
|
|
@@ -38,6 +40,7 @@ const core_bentley_1 = require("@itwin/core-bentley");
|
|
|
38
40
|
const core_common_1 = require("@itwin/core-common");
|
|
39
41
|
const core_frontend_1 = require("@itwin/core-frontend");
|
|
40
42
|
const itwinui_react_1 = require("@itwin/itwinui-react");
|
|
43
|
+
const map_layers_formats_1 = require("@itwin/map-layers-formats");
|
|
41
44
|
const CustomParamsMappingStorage_1 = require("../../CustomParamsMappingStorage");
|
|
42
45
|
const CustomParamUtils_1 = require("../../CustomParamUtils");
|
|
43
46
|
const MapLayerPreferences_1 = require("../../MapLayerPreferences");
|
|
@@ -65,7 +68,6 @@ exports.SourceMapContext = React.createContext({
|
|
|
65
68
|
function useSourceMapContext() {
|
|
66
69
|
return React.useContext(exports.SourceMapContext);
|
|
67
70
|
}
|
|
68
|
-
exports.useSourceMapContext = useSourceMapContext;
|
|
69
71
|
function getSubLayerProps(subLayerSettings) {
|
|
70
72
|
return subLayerSettings.map((subLayer) => subLayer.toJSON());
|
|
71
73
|
}
|
|
@@ -103,7 +105,21 @@ function getMapLayerSettingsFromViewport(viewport, getBackgroundMap, populateSub
|
|
|
103
105
|
function MapLayerManager(props) {
|
|
104
106
|
const [mapSources, setMapSources] = React.useState();
|
|
105
107
|
const [loadingSources, setLoadingSources] = React.useState(false);
|
|
106
|
-
const [bgProviders] = React.useState(props.mapLayerOptions?.baseMapLayers ??
|
|
108
|
+
// const [bgProviders] = React.useState<BaseMapLayerSettings[]>(props.mapLayerOptions?.baseMapLayers ?? defaultBaseMapLayers);
|
|
109
|
+
const [bgProviders] = React.useState(() => {
|
|
110
|
+
// Base layers were provided, used it exclusively.
|
|
111
|
+
if (props.mapLayerOptions?.baseMapLayers) {
|
|
112
|
+
return props.mapLayerOptions?.baseMapLayers;
|
|
113
|
+
}
|
|
114
|
+
const bases = [...exports.defaultBaseMapLayers];
|
|
115
|
+
// Add Google Maps layers if the format is registered
|
|
116
|
+
if (core_frontend_1.IModelApp.mapLayerFormatRegistry.isRegistered("GoogleMaps")) {
|
|
117
|
+
bases.push(map_layers_formats_1.GoogleMaps.createBaseLayerSettings({ mapType: "satellite", language: "en", region: "US" }));
|
|
118
|
+
bases.push(map_layers_formats_1.GoogleMaps.createBaseLayerSettings({ mapType: "satellite", layerTypes: ["layerRoadmap"], language: "en", region: "US" }));
|
|
119
|
+
bases.push(map_layers_formats_1.GoogleMaps.createBaseLayerSettings({ mapType: "roadmap", language: "en", region: "US" }));
|
|
120
|
+
}
|
|
121
|
+
return bases;
|
|
122
|
+
});
|
|
107
123
|
const [overlaysLabel] = React.useState(mapLayers_1.MapLayersUI.localization.getLocalizedString("mapLayers:Widget.OverlayLayers"));
|
|
108
124
|
const [underlaysLabel] = React.useState(mapLayers_1.MapLayersUI.localization.getLocalizedString("mapLayers:Widget.BackgroundLayers"));
|
|
109
125
|
const { activeViewport, mapLayerOptions } = props;
|
|
@@ -519,5 +535,4 @@ function MapLayerManager(props) {
|
|
|
519
535
|
mapLayerOptions,
|
|
520
536
|
}, children: [(0, jsx_runtime_1.jsx)("div", { className: "map-manager-top-header", children: (0, jsx_runtime_1.jsxs)("div", { className: "map-manager-header-buttons-group", children: [(0, jsx_runtime_1.jsx)(itwinui_react_1.ToggleSwitch, { className: "map-manager-toggle", checked: backgroundMapVisible, onChange: handleMapLayersToggle }), (0, jsx_runtime_1.jsx)(MapLayerSettingsPopupButton_1.MapLayerSettingsPopupButton, { disabled: !backgroundMapVisible })] }) }), (0, jsx_runtime_1.jsxs)("div", { className: "map-manager-container", children: [(0, jsx_runtime_1.jsx)("div", { className: "map-manager-basemap", children: (0, jsx_runtime_1.jsx)(BasemapPanel_1.BasemapPanel, { disabled: !backgroundMapVisible }) }), !hideExternalMapLayersSection && ((0, jsx_runtime_1.jsx)("div", { children: (0, jsx_runtime_1.jsxs)(react_beautiful_dnd_1.DragDropContext, { onDragEnd: handleOnMapLayerDragEnd, children: [renderMapLayersList({ isOverlay: false }), renderMapLayersList({ isOverlay: true })] }) }))] })] }));
|
|
521
537
|
}
|
|
522
|
-
exports.MapLayerManager = MapLayerManager;
|
|
523
538
|
//# sourceMappingURL=MapLayerManager.js.map
|