@opengeoweb/layer-select 10.1.0 → 11.0.0

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/index.esm.js CHANGED
@@ -4,16 +4,16 @@ import React__default from 'react';
4
4
  import { useSelector, useDispatch } from 'react-redux';
5
5
  import { CustomIconButton, FilterOption, ToolContainerDraggable, CustomAccordion, CustomToggleButton, CustomTooltip, SearchHighlight, SearchField, ToggleMenu } from '@opengeoweb/shared';
6
6
  import { Filter, LayersAdd, Add, Cached, Edit, Visibility, Delete, Close, Copy } from '@opengeoweb/theme';
7
- import { uiTypes, serviceActions, selectorMemoizationOptions, serviceSelectors, uiActions, getUserAddedServices, setUserAddedServices, layerActions, uiSelectors, layerSelectors, useSetupDialog, mapSelectors, layerTypes } from '@opengeoweb/store';
8
- import { createEntityAdapter, createSlice, createSelector, createListenerMiddleware, isAnyOf } from '@reduxjs/toolkit';
7
+ import { uiTypes, serviceActions, selectorMemoizationOptions, serviceSelectors, uiActions, getUserAddedServices, setUserAddedServices, layerActions, uiSelectors, layerSelectors, mapListener, serviceListener, layersListener, mapReducer, serviceReducer, layerReducer, uiReducer, useSetupDialog, mapSelectors, layerTypes } from '@opengeoweb/store';
8
+ import { createEntityAdapter, createSlice, createSelector, createListenerMiddleware, isAnyOf, combineReducers, configureStore } from '@reduxjs/toolkit';
9
9
  import { compact, countBy, partition } from 'lodash';
10
- import { Switch, Grid2, List, Box, Typography, Backdrop, CircularProgress, Button, ListItem, ListItemText, Dialog, DialogTitle, LinearProgress, DialogContent, InputAdornment, DialogActions } from '@mui/material';
10
+ import { snackbarListener, snackbarReducer, snackbarTypes, snackbarActions } from '@opengeoweb/snackbar';
11
+ import { Switch, Grid2, List, Box, Typography, useTheme, Backdrop, CircularProgress, Button, ListItem, ListItemText, Dialog, DialogTitle, LinearProgress, DialogContent, InputAdornment, DialogActions } from '@mui/material';
11
12
  import 'i18next';
12
13
  import { useTranslation } from 'react-i18next';
13
14
  import { FixedSizeList } from 'react-window';
14
15
  import { getDimensionsList, LayerInfoButton } from '@opengeoweb/webmap-react';
15
16
  import { webmapUtils, LayerType, getWMSServiceId, queryWMSServiceInfo, queryWMSLayers, invalidateWMSGetCapabilities, clearImageCacheForAllMaps } from '@opengeoweb/webmap';
16
- import { snackbarTypes, snackbarActions } from '@opengeoweb/snackbar';
17
17
  import { ReactHookFormProvider, defaultFormOptions, ReactHookFormTextField } from '@opengeoweb/form-fields';
18
18
  import { useFormContext } from 'react-hook-form';
19
19
 
@@ -92,7 +92,7 @@ var fi = {
92
92
  "service-has-been-deleted": "Palvelu \"{{serviceName}}\" poistettu"
93
93
  };
94
94
  var no = {
95
- "layer-select": "Lagvalg",
95
+ "layer-select": "Datavelger",
96
96
  "select-all": "Velg alle",
97
97
  "groups-and-keywords-dialog-title": "Grupper & Nøkkelord",
98
98
  add: "legg til",
@@ -100,7 +100,7 @@ var no = {
100
100
  "layer-list-results": "resultat",
101
101
  groups: "Grupper",
102
102
  keywords: "Nøkkelord",
103
- "layer-select-button-tooltip": "Åpne lagvalg",
103
+ "layer-select-button-tooltip": "Åpne datavelger",
104
104
  all: "ALLE",
105
105
  services: "Tjenester",
106
106
  "add-a-new-service": "Legg til en ny tjeneste",
@@ -459,8 +459,8 @@ var slice = createSlice({
459
459
  });
460
460
  }
461
461
  });
462
- var reducer = slice.reducer;
463
- var layerSelectActions = slice.actions;
462
+ var layerSelectReducer = slice.reducer,
463
+ layerSelectActions = slice.actions;
464
464
 
465
465
  /* *
466
466
  * Licensed under the Apache License, Version 2.0 (the "License");
@@ -622,7 +622,7 @@ var getFilteredLayers = createSelector([getEnabledServiceIds, serviceSelectors.g
622
622
  /**
623
623
  * Returns service popup details
624
624
  *
625
- * Example getActiveServices(store, 'server-id');
625
+ * Example getServicePopupDetails(store, 'server-id');
626
626
  * @param {object} store store: object - store object
627
627
  * @returns {object} returnType: object of active service
628
628
  */
@@ -630,6 +630,27 @@ var getServicePopupDetails = function getServicePopupDetails(store) {
630
630
  var _store$layerSelect3;
631
631
  return (store == null || (_store$layerSelect3 = store.layerSelect) == null ? void 0 : _store$layerSelect3.servicePopup) || initialServicePopupState;
632
632
  };
633
+ /**
634
+ * Returns service with active filtered layers from seaerch
635
+ *
636
+ * Example getFilteredActiveServices(store);
637
+ * @param {object} store store: object - store object
638
+ * @returns {object} returnType: object of active service
639
+ */
640
+ var getFilteredActiveServices = createSelector([getFilteredLayers, getActiveServices, getSearchFilter], function (layers, activeServices, searchResult) {
641
+ var servicesResult = searchResult.length ? layers.reduce(function (layers, _ref) {
642
+ var serviceName = _ref.serviceName;
643
+ return layers.includes(serviceName) ? layers : layers.concat(serviceName);
644
+ }, []) : [];
645
+ var updatedServices = Object.fromEntries(Object.entries(activeServices).map(function (_ref2) {
646
+ var key = _ref2[0],
647
+ service = _ref2[1];
648
+ return [key, Object.assign({}, service, {
649
+ isInSearch: servicesResult.includes(service.serviceId)
650
+ })];
651
+ }));
652
+ return updatedServices;
653
+ }, selectorMemoizationOptions);
633
654
 
634
655
  var selectors = /*#__PURE__*/Object.freeze({
635
656
  __proto__: null,
@@ -643,6 +664,7 @@ var selectors = /*#__PURE__*/Object.freeze({
643
664
  getCheckedFilterIds: getCheckedFilterIds,
644
665
  getEnabledServiceIds: getEnabledServiceIds,
645
666
  getFilterById: getFilterById,
667
+ getFilteredActiveServices: getFilteredActiveServices,
646
668
  getFilteredLayers: getFilteredLayers,
647
669
  getFilters: getFilters,
648
670
  getSearchFilter: getSearchFilter,
@@ -1167,13 +1189,24 @@ layerSelectListener.startListening({
1167
1189
  * Copyright 2022 - Finnish Meteorological Institute (FMI)
1168
1190
  * Copyright 2024 - The Norwegian Meteorological Institute (MET Norway)
1169
1191
  * */
1170
- var layerSelectConfig = {
1171
- // TODO: remove id in https://gitlab.com/opengeoweb/opengeoweb/-/issues/5561
1172
- id: 'layerSelect-module',
1173
- reducersMap: {
1174
- layerSelect: reducer
1175
- },
1176
- middlewares: [layerSelectListener.middleware]
1192
+ var layerSelectReducersMap = {
1193
+ webmap: mapReducer,
1194
+ services: serviceReducer,
1195
+ layers: layerReducer,
1196
+ layerSelect: layerSelectReducer,
1197
+ ui: uiReducer,
1198
+ snackbar: snackbarReducer
1199
+ };
1200
+ var layerSelectMiddlewares = [mapListener.middleware, serviceListener.middleware, layersListener.middleware, layerSelectListener.middleware, snackbarListener.middleware];
1201
+ var layerSelectRootReducer = combineReducers(layerSelectReducersMap);
1202
+ var createMockStore = function createMockStore(mockState) {
1203
+ return configureStore({
1204
+ reducer: layerSelectRootReducer,
1205
+ preloadedState: mockState,
1206
+ middleware: function middleware(getDefaultMiddleware) {
1207
+ return getDefaultMiddleware().concat(layerSelectMiddlewares);
1208
+ }
1209
+ });
1177
1210
  };
1178
1211
 
1179
1212
  var KeywordFilterButtonConnect = function KeywordFilterButtonConnect(_ref) {
@@ -1936,9 +1969,12 @@ var ServiceChip = function ServiceChip(_ref) {
1936
1969
  service = _ref.service,
1937
1970
  isSelected = _ref.isSelected,
1938
1971
  isDisabled = _ref.isDisabled,
1939
- toggleChip = _ref.toggleChip;
1972
+ toggleChip = _ref.toggleChip,
1973
+ isInSearch = _ref.isInSearch;
1940
1974
  var _useLayerSelectTransl = useLayerSelectTranslation(),
1941
1975
  t = _useLayerSelectTransl.t;
1976
+ var _useTheme = useTheme(),
1977
+ geowebColors = _useTheme.palette.geowebColors;
1942
1978
  var chip = all ? 'all' : service && service.serviceUrl;
1943
1979
  return jsx(CustomTooltip, {
1944
1980
  title: service != null && service["abstract"] ? "Abstract: " + service["abstract"] : '',
@@ -1955,7 +1991,17 @@ var ServiceChip = function ServiceChip(_ref) {
1955
1991
  return toggleChip(chip);
1956
1992
  },
1957
1993
  disabled: isDisabled,
1958
- sx: style$1,
1994
+ sx: Object.assign({}, style$1, isInSearch && Object.assign({
1995
+ backgroundColor: geowebColors.chip.highlightDefault.rgba + "!important",
1996
+ '&:hover': {
1997
+ backgroundColor: geowebColors.chip.highlightDefaultMouseOver.rgba + "!important"
1998
+ }
1999
+ }, isSelected && {
2000
+ backgroundColor: geowebColors.chip.highlightActiveDefault.rgba + "!important",
2001
+ '&:hover': {
2002
+ backgroundColor: geowebColors.chip.highlightActiveMouseOver.rgba + "!important"
2003
+ }
2004
+ })),
1959
2005
  children: service ? service.serviceName : t('all')
1960
2006
  })
1961
2007
  })
@@ -1967,6 +2013,7 @@ var ServiceChipConnect = function ServiceChipConnect(_ref) {
1967
2013
  isAllSelected = _ref.isAllSelected;
1968
2014
  var dispatch = useDispatch();
1969
2015
  var serviceId = service.serviceId;
2016
+ var isInSearch = service.isInSearch || false;
1970
2017
  var toggleChip = function toggleChip() {
1971
2018
  if (service.enabled) {
1972
2019
  if (isAllSelected) {
@@ -1988,7 +2035,8 @@ var ServiceChipConnect = function ServiceChipConnect(_ref) {
1988
2035
  service: service,
1989
2036
  toggleChip: toggleChip,
1990
2037
  isSelected: isAllSelected ? false : service.enabled,
1991
- isDisabled: service.isLoading
2038
+ isDisabled: service.isLoading,
2039
+ isInSearch: isInSearch
1992
2040
  });
1993
2041
  };
1994
2042
  var AllChipConnect = function AllChipConnect(_ref2) {
@@ -2058,12 +2106,12 @@ var ServiceList = function ServiceList(_ref) {
2058
2106
 
2059
2107
  var ServiceListConnect = function ServiceListConnect(_ref) {
2060
2108
  var setHeight = _ref.setHeight;
2061
- var activeServices = useAppSelector(function (store) {
2062
- return getActiveServices(store);
2109
+ var filteredActiveServices = useAppSelector(function (store) {
2110
+ return getFilteredActiveServices(store);
2063
2111
  });
2064
2112
  return jsx(ServiceList, {
2065
2113
  setHeight: setHeight,
2066
- activeServicesById: sortByService(activeServices)
2114
+ activeServicesById: sortByService(filteredActiveServices)
2067
2115
  });
2068
2116
  };
2069
2117
 
@@ -3161,4 +3209,4 @@ var LayerSelectConnect = function LayerSelectConnect(_ref) {
3161
3209
  });
3162
3210
  };
3163
3211
 
3164
- export { AllChipConnect, KeywordFilterButtonConnect, KeywordFilterResults, KeywordFilterResultsConnect, KeywordFilterResultsListItemConnect, KeywordFilterSelectAllSwitchConnect, LAYER_SELECT_NAMESPACE, LayerAddRemoveButton, LayerList, LayerListConnect, LayerListDimensions, LayerListRow, LayerSelectButtonConnect, LayerSelectConnect, SearchFieldConnect, ServiceChip, ServiceChipConnect, ServiceList, ServiceListConnect, ServiceOptionsButton, ServiceOptionsDialog, ServiceOptionsDialogConnect, ServicePopup, ServicePopupConnect, ServicePopupDialogConnect, getServiceFailedUpdateMessage, getServiceSuccesUpdateMessage, getSuccesMessage, isUserAddedService, layerSelectActions, layerSelectConfig, initialState as layerSelectInitialState, layerSelectListener, reducer as layerSelectReducer, selectors as layerSelectSelectors, layerSelectTranslations, types as layerSelectTypes, useAppSelector };
3212
+ export { AllChipConnect, KeywordFilterButtonConnect, KeywordFilterResults, KeywordFilterResultsConnect, KeywordFilterResultsListItemConnect, KeywordFilterSelectAllSwitchConnect, LAYER_SELECT_NAMESPACE, LayerAddRemoveButton, LayerList, LayerListConnect, LayerListDimensions, LayerListRow, LayerSelectButtonConnect, LayerSelectConnect, SearchFieldConnect, ServiceChip, ServiceChipConnect, ServiceList, ServiceListConnect, ServiceOptionsButton, ServiceOptionsDialog, ServiceOptionsDialogConnect, ServicePopup, ServicePopupConnect, ServicePopupDialogConnect, createMockStore, getServiceFailedUpdateMessage, getServiceSuccesUpdateMessage, getSuccesMessage, isUserAddedService, layerSelectActions, initialState as layerSelectInitialState, layerSelectListener, layerSelectMiddlewares, layerSelectReducer, layerSelectReducersMap, selectors as layerSelectSelectors, layerSelectTranslations, types as layerSelectTypes, useAppSelector };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@opengeoweb/layer-select",
3
- "version": "10.1.0",
3
+ "version": "11.0.0",
4
4
  "description": "GeoWeb layer select library for the opengeoweb project",
5
5
  "license": "Apache-2.0",
6
6
  "repository": {
@@ -6,6 +6,7 @@ interface ServiceChipProps {
6
6
  isSelected?: boolean;
7
7
  isDisabled?: boolean;
8
8
  toggleChip?: (service: string) => void;
9
+ isInSearch?: boolean;
9
10
  }
10
11
  export declare const ServiceChip: React.FC<ServiceChipProps>;
11
12
  export {};
@@ -1,7 +1,7 @@
1
- export { layerSelectActions, initialState as layerSelectInitialState, reducer as layerSelectReducer, } from './reducer';
1
+ export { layerSelectActions, initialState as layerSelectInitialState, layerSelectReducer, } from './reducer';
2
2
  export * as layerSelectSelectors from './selectors';
3
3
  export { useAppSelector } from './selectors';
4
4
  export * as layerSelectTypes from './types';
5
- export * from './config';
5
+ export * from './store';
6
6
  export { isUserAddedService } from './utils';
7
7
  export { layerSelectListener } from './listeners';
@@ -5,8 +5,7 @@ export declare const layerSelectFilterAdapter: import("@reduxjs/toolkit").Entity
5
5
  export declare const layerSelectActiveServicesAdapter: import("@reduxjs/toolkit").EntityAdapter<ActiveServiceObject>;
6
6
  export declare const initialServicePopupState: ServicePopupObject;
7
7
  export declare const initialState: LayerSelectStoreType;
8
- export declare const reducer: import("redux").Reducer<LayerSelectStoreType>;
9
- export declare const layerSelectActions: import("@reduxjs/toolkit").CaseReducerActions<{
8
+ export declare const layerSelectReducer: import("redux").Reducer<LayerSelectStoreType>, layerSelectActions: import("@reduxjs/toolkit").CaseReducerActions<{
10
9
  setSearchFilter: (draft: Draft<LayerSelectStoreType>, action: PayloadAction<SetSearchFilterPayload>) => void;
11
10
  closeServicePopupOpen: (draft: Draft<LayerSelectStoreType>) => void;
12
11
  toggleServicePopup: (draft: Draft<LayerSelectStoreType>, action: PayloadAction<ToggleServicePopupPayload>) => void;
@@ -90,8 +90,48 @@ export declare const getFilteredLayers: ((state: LayerSelectModuleState & import
90
90
  /**
91
91
  * Returns service popup details
92
92
  *
93
- * Example getActiveServices(store, 'server-id');
93
+ * Example getServicePopupDetails(store, 'server-id');
94
94
  * @param {object} store store: object - store object
95
95
  * @returns {object} returnType: object of active service
96
96
  */
97
97
  export declare const getServicePopupDetails: (store: LayerSelectModuleState) => ServicePopupObject;
98
+ /**
99
+ * Returns service with active filtered layers from seaerch
100
+ *
101
+ * Example getFilteredActiveServices(store);
102
+ * @param {object} store store: object - store object
103
+ * @returns {object} returnType: object of active service
104
+ */
105
+ export declare const getFilteredActiveServices: ((state: LayerSelectModuleState & import("@opengeoweb/store").CoreAppStore) => {
106
+ [k: string]: {
107
+ isInSearch: boolean;
108
+ serviceId?: string | undefined;
109
+ serviceName?: string | undefined;
110
+ serviceUrl?: string | undefined;
111
+ abstract?: string | undefined;
112
+ enabled?: boolean | undefined;
113
+ filterIds?: string[] | undefined;
114
+ scope?: import("dist/libs/shared/src").SystemScope | undefined;
115
+ isLoading?: boolean | undefined;
116
+ keywords?: string[] | undefined;
117
+ groups?: string[] | undefined;
118
+ };
119
+ }) & import("reselect").OutputSelectorFields<(args_0: LayerWithServiceName[], args_1: ActiveServiceObjectEntities, args_2: string) => {
120
+ [k: string]: {
121
+ isInSearch: boolean;
122
+ serviceId?: string | undefined;
123
+ serviceName?: string | undefined;
124
+ serviceUrl?: string | undefined;
125
+ abstract?: string | undefined;
126
+ enabled?: boolean | undefined;
127
+ filterIds?: string[] | undefined;
128
+ scope?: import("dist/libs/shared/src").SystemScope | undefined;
129
+ isLoading?: boolean | undefined;
130
+ keywords?: string[] | undefined;
131
+ groups?: string[] | undefined;
132
+ };
133
+ }, {
134
+ clearCache: () => void;
135
+ }> & {
136
+ clearCache: () => void;
137
+ };
@@ -0,0 +1,13 @@
1
+ import { WebMapStateModuleState, UIModuleState } from '@opengeoweb/store';
2
+ import { ToolkitStore } from '@reduxjs/toolkit/dist/configureStore';
3
+ import { LayerSelectModuleState } from './types';
4
+ export declare const layerSelectReducersMap: {
5
+ webmap: import("redux").Reducer<import("dist/libs/store/src/store/map/types").WebMapState, import("redux").AnyAction>;
6
+ services: import("redux").Reducer<import("dist/libs/store/src/store/map/types").ServiceState, import("redux").AnyAction>;
7
+ layers: import("redux").Reducer<import("dist/libs/store/src/store/map/types").LayerState, import("redux").AnyAction>;
8
+ layerSelect: import("redux").Reducer<import("./types").LayerSelectStoreType>;
9
+ ui: import("redux").Reducer<import("dist/libs/store/src/store/ui/types").UIStoreType, import("redux").AnyAction>;
10
+ snackbar: import("redux").Reducer<import("dist/libs/snackbar/src/lib/store/types").SnackbarState, import("redux").AnyAction>;
11
+ };
12
+ export declare const layerSelectMiddlewares: (import("@reduxjs/toolkit").ListenerMiddleware<import("./types").RootState, import("@reduxjs/toolkit").ThunkDispatch<import("./types").RootState, unknown, import("redux").AnyAction>, unknown> | import("@reduxjs/toolkit").ListenerMiddleware<import("@opengeoweb/snackbar").SnackbarModuleStore, import("@reduxjs/toolkit").ThunkDispatch<import("@opengeoweb/snackbar").SnackbarModuleStore, unknown, import("redux").AnyAction>, unknown>)[];
13
+ export declare const createMockStore: (mockState?: WebMapStateModuleState | LayerSelectModuleState | UIModuleState) => ToolkitStore;
@@ -1,3 +1,4 @@
1
+ import { SystemScope } from '@opengeoweb/shared';
1
2
  import { CoreAppStore, serviceTypes } from '@opengeoweb/store';
2
3
  import { EntityState } from '@reduxjs/toolkit';
3
4
  export type RootState = CoreAppStore & LayerSelectModuleState;
@@ -11,10 +12,11 @@ export interface ActiveServiceObject {
11
12
  abstract?: string;
12
13
  enabled?: boolean;
13
14
  filterIds?: string[];
14
- scope?: serviceTypes.ServiceScope;
15
+ scope?: SystemScope;
15
16
  isLoading?: boolean;
16
17
  keywords?: string[];
17
18
  groups?: string[];
19
+ isInSearch?: boolean;
18
20
  }
19
21
  export type FilterType = 'keywords' | 'groups';
20
22
  export interface Filter {
@@ -1,8 +1,9 @@
1
- import { EntityAdapter, Draft } from '@reduxjs/toolkit';
1
+ import { SystemScope } from '@opengeoweb/shared';
2
2
  import { serviceTypes } from '@opengeoweb/store';
3
3
  import { LayerProps } from '@opengeoweb/webmap';
4
+ import { Draft, EntityAdapter } from '@reduxjs/toolkit';
4
5
  import { Filter, FilterType, LayerSelectStoreType } from './types';
5
6
  export declare const getFilterId: (filterType: FilterType, filterName: string) => string;
6
7
  export declare const produceFilters: (filterNames: string[], filterType: FilterType, draft: Draft<LayerSelectStoreType>, layerSelectFilterAdapter: EntityAdapter<Filter>) => void;
7
8
  export declare const filterLayersFromService: (serviceId: string, services: serviceTypes.Services, filterIds: string[], allFiltersActive: boolean, searchString: string) => LayerProps[];
8
- export declare const isUserAddedService: (scope: serviceTypes.ServiceScope) => boolean;
9
+ export declare const isUserAddedService: (scope: SystemScope) => boolean;
@@ -1,7 +0,0 @@
1
- export declare const layerSelectConfig: {
2
- id: string;
3
- reducersMap: {
4
- layerSelect: import("redux").Reducer<import("./types").LayerSelectStoreType>;
5
- };
6
- middlewares: import("@reduxjs/toolkit").ListenerMiddleware<import("./types").RootState, import("redux-thunk").ThunkDispatch<import("./types").RootState, unknown, import("redux").AnyAction>, unknown>[];
7
- };
@@ -1 +0,0 @@
1
- export { createMockStore } from './testUtils';
@@ -1,4 +0,0 @@
1
- import { Store } from '@reduxjs/toolkit';
2
- import { uiTypes, WebMapStateModuleState } from '@opengeoweb/store';
3
- import { LayerSelectModuleState } from '../store/types';
4
- export declare const createMockStore: (mockState?: LayerSelectModuleState & uiTypes.UIModuleState & WebMapStateModuleState) => Store;