@dartcom/ui-kit 10.6.1 → 10.6.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.cjs CHANGED
@@ -5661,6 +5661,66 @@ class ApiService {
5661
5661
  }
5662
5662
  }
5663
5663
 
5664
+ const defaultId = null;
5665
+
5666
+ /**
5667
+ * ScalarIdService<Id>
5668
+ *
5669
+ * Небольшой сервис для хранения одного "текущего" идентификатора.
5670
+ * Подходит для:
5671
+ * - последнего обновлённого элемента (updatedId);
5672
+ * - последнего удалённого элемента (deletedId);
5673
+ * - текущего выделенного элемента (selectedId), если нужен один.
5674
+ *
5675
+ * Возможности:
5676
+ * - value: текущее значение или null;
5677
+ * - isSet: флаг, установлен ли id;
5678
+ * - set / reset: явное управление значением.
5679
+ *
5680
+ * Пример:
5681
+ * const updated = new ScalarIdService<string>();
5682
+ * updated.set('42');
5683
+ * updated.isSet; // true
5684
+ * updated.value; // '42'
5685
+ * updated.reset();
5686
+ */
5687
+ class ScalarIdService {
5688
+ /**
5689
+ * Внутреннее хранилище идентификатора.
5690
+ * null означает "ничего не выбрано / не установлено".
5691
+ */
5692
+ _value = defaultId;
5693
+ constructor() {
5694
+ makeAutoObservable(this, {}, { autoBind: true });
5695
+ }
5696
+ /**
5697
+ * Текущее значение id или null, если значение не установлено.
5698
+ */
5699
+ get value() {
5700
+ return this._value;
5701
+ }
5702
+ /**
5703
+ * Установить новое значение id.
5704
+ *
5705
+ * @param value Новое значение или null для сброса.
5706
+ */
5707
+ set(value) {
5708
+ this._value = value;
5709
+ }
5710
+ /**
5711
+ * Сбросить значение id в null.
5712
+ */
5713
+ reset() {
5714
+ this._value = defaultId;
5715
+ }
5716
+ /**
5717
+ * Признак, что значение установлено (отлично от null).
5718
+ */
5719
+ get isSet() {
5720
+ return this._value !== defaultId;
5721
+ }
5722
+ }
5723
+
5664
5724
  /**
5665
5725
  * SetService<T>
5666
5726
  *
@@ -5789,18 +5849,23 @@ class CollectionService {
5789
5849
  props;
5790
5850
  _items = observable.map();
5791
5851
  selectedIds = new SetService();
5852
+ _idSlots = new Map();
5792
5853
  constructor(props) {
5793
5854
  this.props = props;
5855
+ const { slots = [] } = props;
5794
5856
  makeAutoObservable(this);
5857
+ slots.forEach((slotName) => {
5858
+ this._idSlots.set(slotName, new ScalarIdService());
5859
+ });
5795
5860
  }
5796
5861
  /**
5797
- * Возаращает id по самому элементу коллекции
5862
+ * Возвращает id по самому элементу коллекции.
5798
5863
  */
5799
5864
  getIdByItem(item) {
5800
5865
  return this.props.getId(item);
5801
5866
  }
5802
5867
  /**
5803
- * Возвращает observable-коллекцию элементов в виде Map.
5868
+ * Возвращает observable‑коллекцию элементов в виде Map.
5804
5869
  */
5805
5870
  get items() {
5806
5871
  return this._items;
@@ -5809,90 +5874,35 @@ class CollectionService {
5809
5874
  * Возвращает все элементы коллекции в виде обычного массива.
5810
5875
  */
5811
5876
  get list() {
5812
- return Array.from(this.items.values());
5877
+ return Object.freeze(Array.from(this.items.values()));
5813
5878
  }
5814
- /**
5815
- * Возвращает все элементы, у которых значение указанного поля
5816
- * строго равно переданному значению.
5817
- *
5818
- * @typeParam K Ключ поля элемента.
5819
- * @param key Поле, по которому выполняется поиск.
5820
- * @param value Значение, с которым сравнивается поле.
5821
- * @returns Массив всех найденных элементов. Если совпадений нет, вернётся пустой массив.
5822
- */
5823
5879
  findAllBy(key, value) {
5824
5880
  return this.list.filter((item) => item[key] === value);
5825
5881
  }
5826
- /**
5827
- * Возвращает все элементы, у которых значение указанного поля
5828
- * входит в список переданных значений.
5829
- *
5830
- * @typeParam K Ключ поля элемента.
5831
- * @param key Поле, по которому выполняется поиск.
5832
- * @param values Набор допустимых значений поля.
5833
- * @returns Массив всех найденных элементов. Если совпадений нет, вернётся пустой массив.
5834
- */
5835
5882
  findAllIn(key, values) {
5836
5883
  const valuesSet = new Set(values);
5837
5884
  return this.list.filter((item) => valuesSet.has(item[key]));
5838
5885
  }
5839
- /**
5840
- * Возвращает все элементы, которые одновременно соответствуют
5841
- * всем переданным критериям.
5842
- *
5843
- * Метод выполняет точное сравнение по каждому полю.
5844
- * Если передан пустой объект критериев, будут возвращены все элементы коллекции.
5845
- *
5846
- * @param criteria Объект с набором полей и значений для поиска.
5847
- * @returns Массив всех элементов, удовлетворяющих всем условиям сразу.
5848
- */
5849
5886
  findAllWhere(criteria) {
5850
5887
  const entries = Object.entries(criteria);
5851
5888
  return this.list.filter((item) => entries.every(([key, value]) => item[key] === value));
5852
5889
  }
5853
- /**
5854
- * Возвращает элемент по его идентификатору.
5855
- *
5856
- * @param id Идентификатор элемента.
5857
- * @returns Найденный элемент или undefined, если элемента с таким id нет.
5858
- */
5859
5890
  getById(id) {
5860
- const item = this.items.get(id);
5861
- return item;
5891
+ return this.items.get(id) ?? null;
5862
5892
  }
5863
- /**
5864
- * Добавляет элемент в коллекцию.
5865
- *
5866
- * @param item Элемент для добавления или замены.
5867
- */
5868
5893
  add(item) {
5869
5894
  const key = this.props.getId(item);
5870
5895
  const value = this.props.normalizeItem(item);
5871
5896
  this._items.set(key, value);
5872
5897
  }
5873
- /**
5874
- * Добавляет в коллекцию несколько элементов подряд.
5875
- *
5876
- * @param items Массив элементов для добавления.
5877
- */
5878
5898
  addMany(items) {
5879
5899
  items.forEach((item) => {
5880
5900
  this.add(item);
5881
5901
  });
5882
5902
  }
5883
- /**
5884
- * Удаляет элемент из коллекции по id.
5885
- *
5886
- * @param id Идентификатор удаляемого элемента.
5887
- */
5888
5903
  delete(id) {
5889
5904
  this._items.delete(id);
5890
5905
  }
5891
- /**
5892
- * Удаляет из коллекции несколько элементов по списку id.
5893
- *
5894
- * @param ids Массив идентификаторов для удаления.
5895
- */
5896
5906
  deleteMany(ids) {
5897
5907
  ids.forEach((id) => {
5898
5908
  this.delete(id);
@@ -5903,41 +5913,72 @@ class CollectionService {
5903
5913
  */
5904
5914
  clear() {
5905
5915
  this._items.clear();
5906
- this.updatedId = null;
5907
- this.deletedId = null;
5916
+ this.resetSlots();
5908
5917
  this.selectedIds.clear();
5909
5918
  }
5910
- _updatedId = null;
5911
- get updatedId() {
5912
- return this._updatedId;
5913
- }
5914
- set updatedId(value) {
5915
- this._updatedId = value;
5919
+ /**
5920
+ * Запрос на получение отделельного экзепляра ScalarIdService
5921
+ *
5922
+ * @param name Имя слота.
5923
+ * @returns ScalarIdService по имени слота, если он был сконфигурирован.
5924
+ */
5925
+ getIdSlot(name) {
5926
+ return this._idSlots.get(name) ?? null;
5916
5927
  }
5917
- get updatedItem() {
5918
- if (this.updatedId != null) {
5919
- const item = this.getById(this.updatedId);
5920
- return item;
5928
+ /**
5929
+ * Возвращает id, хранящемуся в указанном слоте.
5930
+ *
5931
+ * @param name Имя слота.
5932
+ */
5933
+ getIdBySlot(name) {
5934
+ const slot = this.getIdSlot(name);
5935
+ if (slot) {
5936
+ return slot.value;
5921
5937
  }
5938
+ return null;
5922
5939
  }
5923
- get isUpdated() {
5924
- return this.updatedId !== null;
5925
- }
5926
- _deletedId = null;
5927
- get deletedId() {
5928
- return this._deletedId;
5940
+ /**
5941
+ * Возвращает элемент коллекции по id, хранящемуся в указанном слоте.
5942
+ *
5943
+ * @param name Имя слота.
5944
+ */
5945
+ getItemBySlot(name) {
5946
+ const slot = this.getIdSlot(name);
5947
+ if (slot && slot.isSet && slot.value !== null) {
5948
+ return this.getById(slot.value);
5949
+ }
5950
+ return null;
5929
5951
  }
5930
- set deletedId(value) {
5931
- this._deletedId = value;
5952
+ /**
5953
+ * Устанавливает id в указанный слот.
5954
+ *
5955
+ * @param name Имя слота.
5956
+ * @param value Новое значения id в слоте.
5957
+ */
5958
+ setIdSlot(name, value) {
5959
+ const slot = this.getIdSlot(name);
5960
+ if (slot) {
5961
+ slot.set(value);
5962
+ }
5932
5963
  }
5933
- get deletedItem() {
5934
- if (this.deletedId != null) {
5935
- const item = this.getById(this.deletedId);
5936
- return item;
5964
+ /**
5965
+ * Сбрасывает id в указанном слоте.
5966
+ *
5967
+ * @param name Имя слота.
5968
+ */
5969
+ resetIdSlot(name) {
5970
+ const slot = this.getIdSlot(name);
5971
+ if (slot) {
5972
+ slot.reset();
5937
5973
  }
5938
5974
  }
5939
- get isDeleted() {
5940
- return this.deletedId !== null;
5975
+ /**
5976
+ * Сбрасывает все слоты.
5977
+ */
5978
+ resetSlots() {
5979
+ this._idSlots.forEach((slot) => {
5980
+ slot.reset();
5981
+ });
5941
5982
  }
5942
5983
  }
5943
5984
 
@@ -48362,6 +48403,7 @@ exports.Modal = modal;
48362
48403
  exports.ModalContainer = ModalContainer;
48363
48404
  exports.NoData = NoData;
48364
48405
  exports.Paragraph = Paragraph;
48406
+ exports.ScalarIdService = ScalarIdService;
48365
48407
  exports.Select = FormSelect;
48366
48408
  exports.SetService = SetService;
48367
48409
  exports.Tabs = Tabs;
package/dist/index.esm.js CHANGED
@@ -1 +1 @@
1
- export{alertStore}from"./stores/alert/alert.esm.js";export{modalStore}from"./stores/modal/modal.esm.js";export{Operations}from"./lib/types.esm.js";export{useDeviceType}from"./lib/hooks/useDeviceType.esm.js";export{useGetUser,useLazyGetUser}from"./lib/hooks/useGetUser.esm.js";export{useShowErrorSnackbar}from"./lib/hooks/useShowErrorSnackbar.esm.js";export{useShowSnackbar}from"./lib/hooks/useShowSnackbar.esm.js";export{useSignIn}from"./lib/hooks/useSignIn.esm.js";export{useSignOut}from"./lib/hooks/useSignOut.esm.js";export{copyInformation,encodeString,getEntityNames,getImageSrc,getNewId,getUniqueKey,getUrlencodedBody,showSnackbar}from"./lib/utils.esm.js";export{_testApiKeys}from"./configs/global/constants.esm.js";export{GlobalConfig}from"./configs/global/global.esm.js";export{API_METHODS}from"./constants/api.esm.js";export{PanelsNames}from"./constants/map.esm.js";export{arraySchema,dateRequiredSchema,dateSchema,getStringRequiredSchema,getStringSchema,numberRequiredSchema,numberSchema}from"./constants/schema.esm.js";export{default as Accordion}from"./components/accordion/accordion.esm.js";export{default as AlertDialog}from"./components/alert-dialog/alert-dialog.esm.js";export{default as Button}from"./components/buttons/button/button.esm.js";export{default as DeleteButton}from"./components/buttons/delete/delete.esm.js";export{default as IconButton}from"./components/buttons/icon/icon.esm.js";export{default as UploadButton}from"./components/buttons/upload/upload.esm.js";export{default as Card}from"./components/card/card.esm.js";export{default as Checkbox}from"./components/checkbox/checkbox.esm.js";export{default as CopyText}from"./components/copy-text/copy-text.esm.js";export{default as DateField}from"./components/date-field/date-field.esm.js";export{default as DragList}from"./components/drag-list/drag-list.esm.js";export{default as DraggableContainer}from"./components/draggable-container/draggable-container.esm.js";export{default as ErrorBoundary}from"./components/error-boundary/error-boundary.esm.js";export{default as FormErrorMessage}from"./components/form/error-message/error-message.esm.js";export{default as Form}from"./components/form/form.esm.js";export{useFormContext}from"./components/form/hooks/useFormContext.esm.js";export{default as Input}from"./components/input/input.esm.js";export{SourceLayers,TangramSourceNames}from"./components/layers/leaflet/lib/types.esm.js";export{getAllLayers,getAllPointLayers,getAllPolygonLayers,getAllPolylineLayers,getBackendDate,getLayerModalsNames,getLayerName,getValidLayer}from"./components/layers/leaflet/lib/utils.esm.js";export{sourceUrl,tile_size}from"./components/layers/leaflet/config/constants.esm.js";export{getBuildingLayers}from"./components/layers/leaflet/layers/building/utils.esm.js";export{getBuiltupAreaLayers}from"./components/layers/leaflet/layers/builtup-area/utils.esm.js";export{getAdminAreaLayers}from"./components/layers/leaflet/layers/admin-area/utils.esm.js";export{getCameraLayers}from"./components/layers/leaflet/layers/camera/lib/utils.esm.js";export{cameraConfig}from"./components/layers/leaflet/layers/camera/config/constants.esm.js";export{getCityPOILayers}from"./components/layers/leaflet/layers/city-POI/utils.esm.js";export{getConditionLayers}from"./components/layers/leaflet/layers/condition/utils.esm.js";export{getFacilityAreaLayers}from"./components/layers/leaflet/layers/facility-area/utils.esm.js";export{landuseAreaFeatureTypes,landuseAreaLayerGeometryData,landuseAreaLayerLabelData}from"./components/layers/leaflet/layers/landuse-area/constants.esm.js";export{getLanduseAreaGeometryLayer,getLanduseAreaLabelLayer,getLanduseAreaLayers}from"./components/layers/leaflet/layers/landuse-area/utils.esm.js";export{getLaneMarkingArrowLayers}from"./components/layers/leaflet/layers/lane-marking-arrow/utils.esm.js";export{getLinkLayers}from"./components/layers/leaflet/layers/link/utils.esm.js";export{getNatureFieldLayers}from"./components/layers/leaflet/layers/nature-field/utils.esm.js";export{getNatureForestGeometryLayer,getNatureForestLayers}from"./components/layers/leaflet/layers/nature-forest/utils.esm.js";export{getOceanAreaLayers}from"./components/layers/leaflet/layers/ocean-area/utils.esm.js";export{getOneWayLayers}from"./components/layers/leaflet/layers/one-way/utils.esm.js";export{getPillarLayers}from"./components/layers/leaflet/layers/pillar/lib/utils.esm.js";export{pillarConfig}from"./components/layers/leaflet/layers/pillar/config/constants.esm.js";export{catIds,text_source}from"./components/layers/leaflet/layers/POI/constants.esm.js";export{getDefaultPOI,getPOILayers,getPOITypeLayer}from"./components/layers/leaflet/layers/POI/utils.esm.js";export{getPointAddressLayers}from"./components/layers/leaflet/layers/point-address/utils.esm.js";export{getRailroadLayers}from"./components/layers/leaflet/layers/railroad/utils.esm.js";export{getTrafficSignImgSrc,getTrafficSignLayers,parseTrafficSignCSVFile}from"./components/layers/leaflet/layers/traffic-sign/lib/utils.esm.js";export{allTrafficSigns,trafficSignConfig,trafficSigns,trafficSignsDop}from"./components/layers/leaflet/layers/traffic-sign/config/constants.esm.js";export{getTrafficSignalLayers}from"./components/layers/leaflet/layers/traffic-signal/lib/utils.esm.js";export{trafficSignalConfig}from"./components/layers/leaflet/layers/traffic-signal/config/constants.esm.js";export{getWaterAreaLayers}from"./components/layers/leaflet/layers/water-area/utils.esm.js";export{getWaterLinkLayers}from"./components/layers/leaflet/layers/water-link/utils.esm.js";export{default as LeafletLayer}from"./components/layers/leaflet/leaflet.esm.js";export{TangramLayer}from"./components/layers/leaflet/services/tangram-layer.esm.js";export{default as List}from"./components/list/list.esm.js";export{default as Loader}from"./components/loader/loader.esm.js";export{default as Modal}from"./components/modal/modal.esm.js";export{ModalContainer}from"./components/modal/styles.esm.js";export{default as NoData}from"./components/no-data/no-data.esm.js";export{default as Paragraph}from"./components/paragraph/paragraph.esm.js";export{default as Select}from"./components/select/select.esm.js";export{default as Tabs}from"./components/tabs/tabs.esm.js";export{default as TextField}from"./components/text-field/text-field.esm.js";export{CSVUploader}from"./components/uploader/csv/csv.esm.js";export{default as ExcelUploader}from"./components/uploader/excel/excel.esm.js";export{default as AuthPage}from"./pages/auth/auth.esm.js";export{default as DartcomAuthProvider}from"./providers/auth/auth.esm.js";export{default as DartcomInitializeProvider}from"./providers/initialize/initialize.esm.js";export{default as DartcomLocalizationProvider}from"./providers/localization/localization.esm.js";export{default as DartcomProviders}from"./providers/providers.esm.js";export{ApiService}from"./services/api/api.service.esm.js";export{CollectionService}from"./services/collection/collection.service.esm.js";export{GeometryHistoryService}from"./services/geometry-history/geometry-history.service.esm.js";export{localStateService}from"./services/local-state/local-state.esm.js";export{localizationService}from"./services/localization/localization.esm.js";export{loggerService}from"./services/logger/logger.esm.js";export{mapService}from"./services/map/map.service.esm.js";export{queryService}from"./services/query/query.esm.js";export{SetService}from"./services/set/set.service.esm.js";
1
+ export{alertStore}from"./stores/alert/alert.esm.js";export{modalStore}from"./stores/modal/modal.esm.js";export{Operations}from"./lib/types.esm.js";export{useDeviceType}from"./lib/hooks/useDeviceType.esm.js";export{useGetUser,useLazyGetUser}from"./lib/hooks/useGetUser.esm.js";export{useShowErrorSnackbar}from"./lib/hooks/useShowErrorSnackbar.esm.js";export{useShowSnackbar}from"./lib/hooks/useShowSnackbar.esm.js";export{useSignIn}from"./lib/hooks/useSignIn.esm.js";export{useSignOut}from"./lib/hooks/useSignOut.esm.js";export{copyInformation,encodeString,getEntityNames,getImageSrc,getNewId,getUniqueKey,getUrlencodedBody,showSnackbar}from"./lib/utils.esm.js";export{_testApiKeys}from"./configs/global/constants.esm.js";export{GlobalConfig}from"./configs/global/global.esm.js";export{API_METHODS}from"./constants/api.esm.js";export{PanelsNames}from"./constants/map.esm.js";export{arraySchema,dateRequiredSchema,dateSchema,getStringRequiredSchema,getStringSchema,numberRequiredSchema,numberSchema}from"./constants/schema.esm.js";export{default as Accordion}from"./components/accordion/accordion.esm.js";export{default as AlertDialog}from"./components/alert-dialog/alert-dialog.esm.js";export{default as Button}from"./components/buttons/button/button.esm.js";export{default as DeleteButton}from"./components/buttons/delete/delete.esm.js";export{default as IconButton}from"./components/buttons/icon/icon.esm.js";export{default as UploadButton}from"./components/buttons/upload/upload.esm.js";export{default as Card}from"./components/card/card.esm.js";export{default as Checkbox}from"./components/checkbox/checkbox.esm.js";export{default as CopyText}from"./components/copy-text/copy-text.esm.js";export{default as DateField}from"./components/date-field/date-field.esm.js";export{default as DragList}from"./components/drag-list/drag-list.esm.js";export{default as DraggableContainer}from"./components/draggable-container/draggable-container.esm.js";export{default as ErrorBoundary}from"./components/error-boundary/error-boundary.esm.js";export{default as FormErrorMessage}from"./components/form/error-message/error-message.esm.js";export{default as Form}from"./components/form/form.esm.js";export{useFormContext}from"./components/form/hooks/useFormContext.esm.js";export{default as Input}from"./components/input/input.esm.js";export{SourceLayers,TangramSourceNames}from"./components/layers/leaflet/lib/types.esm.js";export{getAllLayers,getAllPointLayers,getAllPolygonLayers,getAllPolylineLayers,getBackendDate,getLayerModalsNames,getLayerName,getValidLayer}from"./components/layers/leaflet/lib/utils.esm.js";export{sourceUrl,tile_size}from"./components/layers/leaflet/config/constants.esm.js";export{getBuildingLayers}from"./components/layers/leaflet/layers/building/utils.esm.js";export{getBuiltupAreaLayers}from"./components/layers/leaflet/layers/builtup-area/utils.esm.js";export{getAdminAreaLayers}from"./components/layers/leaflet/layers/admin-area/utils.esm.js";export{getCameraLayers}from"./components/layers/leaflet/layers/camera/lib/utils.esm.js";export{cameraConfig}from"./components/layers/leaflet/layers/camera/config/constants.esm.js";export{getCityPOILayers}from"./components/layers/leaflet/layers/city-POI/utils.esm.js";export{getConditionLayers}from"./components/layers/leaflet/layers/condition/utils.esm.js";export{getFacilityAreaLayers}from"./components/layers/leaflet/layers/facility-area/utils.esm.js";export{landuseAreaFeatureTypes,landuseAreaLayerGeometryData,landuseAreaLayerLabelData}from"./components/layers/leaflet/layers/landuse-area/constants.esm.js";export{getLanduseAreaGeometryLayer,getLanduseAreaLabelLayer,getLanduseAreaLayers}from"./components/layers/leaflet/layers/landuse-area/utils.esm.js";export{getLaneMarkingArrowLayers}from"./components/layers/leaflet/layers/lane-marking-arrow/utils.esm.js";export{getLinkLayers}from"./components/layers/leaflet/layers/link/utils.esm.js";export{getNatureFieldLayers}from"./components/layers/leaflet/layers/nature-field/utils.esm.js";export{getNatureForestGeometryLayer,getNatureForestLayers}from"./components/layers/leaflet/layers/nature-forest/utils.esm.js";export{getOceanAreaLayers}from"./components/layers/leaflet/layers/ocean-area/utils.esm.js";export{getOneWayLayers}from"./components/layers/leaflet/layers/one-way/utils.esm.js";export{getPillarLayers}from"./components/layers/leaflet/layers/pillar/lib/utils.esm.js";export{pillarConfig}from"./components/layers/leaflet/layers/pillar/config/constants.esm.js";export{catIds,text_source}from"./components/layers/leaflet/layers/POI/constants.esm.js";export{getDefaultPOI,getPOILayers,getPOITypeLayer}from"./components/layers/leaflet/layers/POI/utils.esm.js";export{getPointAddressLayers}from"./components/layers/leaflet/layers/point-address/utils.esm.js";export{getRailroadLayers}from"./components/layers/leaflet/layers/railroad/utils.esm.js";export{getTrafficSignImgSrc,getTrafficSignLayers,parseTrafficSignCSVFile}from"./components/layers/leaflet/layers/traffic-sign/lib/utils.esm.js";export{allTrafficSigns,trafficSignConfig,trafficSigns,trafficSignsDop}from"./components/layers/leaflet/layers/traffic-sign/config/constants.esm.js";export{getTrafficSignalLayers}from"./components/layers/leaflet/layers/traffic-signal/lib/utils.esm.js";export{trafficSignalConfig}from"./components/layers/leaflet/layers/traffic-signal/config/constants.esm.js";export{getWaterAreaLayers}from"./components/layers/leaflet/layers/water-area/utils.esm.js";export{getWaterLinkLayers}from"./components/layers/leaflet/layers/water-link/utils.esm.js";export{default as LeafletLayer}from"./components/layers/leaflet/leaflet.esm.js";export{TangramLayer}from"./components/layers/leaflet/services/tangram-layer.esm.js";export{default as List}from"./components/list/list.esm.js";export{default as Loader}from"./components/loader/loader.esm.js";export{default as Modal}from"./components/modal/modal.esm.js";export{ModalContainer}from"./components/modal/styles.esm.js";export{default as NoData}from"./components/no-data/no-data.esm.js";export{default as Paragraph}from"./components/paragraph/paragraph.esm.js";export{default as Select}from"./components/select/select.esm.js";export{default as Tabs}from"./components/tabs/tabs.esm.js";export{default as TextField}from"./components/text-field/text-field.esm.js";export{CSVUploader}from"./components/uploader/csv/csv.esm.js";export{default as ExcelUploader}from"./components/uploader/excel/excel.esm.js";export{default as AuthPage}from"./pages/auth/auth.esm.js";export{default as DartcomAuthProvider}from"./providers/auth/auth.esm.js";export{default as DartcomInitializeProvider}from"./providers/initialize/initialize.esm.js";export{default as DartcomLocalizationProvider}from"./providers/localization/localization.esm.js";export{default as DartcomProviders}from"./providers/providers.esm.js";export{ApiService}from"./services/api/api.service.esm.js";export{CollectionService}from"./services/collection/collection.service.esm.js";export{GeometryHistoryService}from"./services/geometry-history/geometry-history.service.esm.js";export{localStateService}from"./services/local-state/local-state.esm.js";export{localizationService}from"./services/localization/localization.esm.js";export{loggerService}from"./services/logger/logger.esm.js";export{mapService}from"./services/map/map.service.esm.js";export{queryService}from"./services/query/query.esm.js";export{ScalarIdService}from"./services/scalar-id/scalar-id.service.esm.js";export{SetService}from"./services/set/set.service.esm.js";
@@ -1,100 +1,75 @@
1
- import { Nullable, StringOrNumber } from '../../lib';
1
+ import { StringOrNumber } from '../../lib';
2
+ import { ScalarIdService } from '../scalar-id';
2
3
  import { SetService } from '../set';
3
- export declare class CollectionService<T, Id extends StringOrNumber> {
4
+ export declare class CollectionService<T, Id extends StringOrNumber, TSlots extends string> {
4
5
  private readonly props;
5
6
  private readonly _items;
6
7
  readonly selectedIds: SetService<Id>;
8
+ private readonly _idSlots;
7
9
  constructor(props: {
8
10
  getId: (item: T) => Id;
9
11
  normalizeItem: (item: T) => T;
12
+ slots?: readonly TSlots[];
10
13
  });
11
14
  /**
12
- * Возаращает id по самому элементу коллекции
15
+ * Возвращает id по самому элементу коллекции.
13
16
  */
14
17
  getIdByItem(item: T): Id;
15
18
  /**
16
- * Возвращает observable-коллекцию элементов в виде Map.
19
+ * Возвращает observable‑коллекцию элементов в виде Map.
17
20
  */
18
21
  get items(): import("mobx").ObservableMap<StringOrNumber, T>;
19
22
  /**
20
23
  * Возвращает все элементы коллекции в виде обычного массива.
21
24
  */
22
- get list(): T[];
23
- /**
24
- * Возвращает все элементы, у которых значение указанного поля
25
- * строго равно переданному значению.
26
- *
27
- * @typeParam K Ключ поля элемента.
28
- * @param key Поле, по которому выполняется поиск.
29
- * @param value Значение, с которым сравнивается поле.
30
- * @returns Массив всех найденных элементов. Если совпадений нет, вернётся пустой массив.
31
- */
25
+ get list(): readonly T[];
32
26
  findAllBy<K extends keyof T>(key: K, value: T[K]): T[];
33
- /**
34
- * Возвращает все элементы, у которых значение указанного поля
35
- * входит в список переданных значений.
36
- *
37
- * @typeParam K Ключ поля элемента.
38
- * @param key Поле, по которому выполняется поиск.
39
- * @param values Набор допустимых значений поля.
40
- * @returns Массив всех найденных элементов. Если совпадений нет, вернётся пустой массив.
41
- */
42
27
  findAllIn<K extends keyof T>(key: K, values: readonly T[K][]): T[];
28
+ findAllWhere(criteria: Partial<T>): T[];
29
+ getById(id: Id): NonNullable<T> | null;
30
+ add(item: T): void;
31
+ addMany(items: T[]): void;
32
+ delete(id: Id): void;
33
+ deleteMany(ids: Id[]): void;
43
34
  /**
44
- * Возвращает все элементы, которые одновременно соответствуют
45
- * всем переданным критериям.
46
- *
47
- * Метод выполняет точное сравнение по каждому полю.
48
- * Если передан пустой объект критериев, будут возвращены все элементы коллекции.
49
- *
50
- * @param criteria Объект с набором полей и значений для поиска.
51
- * @returns Массив всех элементов, удовлетворяющих всем условиям сразу.
35
+ * Полностью очищает коллекцию и сбрасывает служебные состояния выбора.
52
36
  */
53
- findAllWhere(criteria: Partial<T>): T[];
37
+ clear(): void;
54
38
  /**
55
- * Возвращает элемент по его идентификатору.
39
+ * Запрос на получение отделельного экзепляра ScalarIdService
56
40
  *
57
- * @param id Идентификатор элемента.
58
- * @returns Найденный элемент или undefined, если элемента с таким id нет.
41
+ * @param name Имя слота.
42
+ * @returns ScalarIdService по имени слота, если он был сконфигурирован.
59
43
  */
60
- getById(id: Id): T | undefined;
44
+ getIdSlot(name: TSlots): ScalarIdService<Id> | null;
61
45
  /**
62
- * Добавляет элемент в коллекцию.
46
+ * Возвращает id, хранящемуся в указанном слоте.
63
47
  *
64
- * @param item Элемент для добавления или замены.
48
+ * @param name Имя слота.
65
49
  */
66
- add(item: T): void;
50
+ getIdBySlot(name: TSlots): import("../../lib").Nullable<Id>;
67
51
  /**
68
- * Добавляет в коллекцию несколько элементов подряд.
52
+ * Возвращает элемент коллекции по id, хранящемуся в указанном слоте.
69
53
  *
70
- * @param items Массив элементов для добавления.
54
+ * @param name Имя слота.
71
55
  */
72
- addMany(items: T[]): void;
56
+ getItemBySlot(name: TSlots): NonNullable<T> | null;
73
57
  /**
74
- * Удаляет элемент из коллекции по id.
58
+ * Устанавливает id в указанный слот.
75
59
  *
76
- * @param id Идентификатор удаляемого элемента.
60
+ * @param name Имя слота.
61
+ * @param value Новое значения id в слоте.
77
62
  */
78
- delete(id: Id): void;
63
+ setIdSlot(name: TSlots, value: Id): void;
79
64
  /**
80
- * Удаляет из коллекции несколько элементов по списку id.
65
+ * Сбрасывает id в указанном слоте.
81
66
  *
82
- * @param ids Массив идентификаторов для удаления.
67
+ * @param name Имя слота.
83
68
  */
84
- deleteMany(ids: Id[]): void;
69
+ resetIdSlot(name: TSlots): void;
85
70
  /**
86
- * Полностью очищает коллекцию и сбрасывает служебные состояния выбора.
71
+ * Сбрасывает все слоты.
87
72
  */
88
- clear(): void;
89
- private _updatedId;
90
- get updatedId(): Nullable<Id>;
91
- set updatedId(value: Nullable<Id>);
92
- get updatedItem(): T | undefined;
93
- get isUpdated(): boolean;
94
- private _deletedId;
95
- get deletedId(): Nullable<Id>;
96
- set deletedId(value: Nullable<Id>);
97
- get deletedItem(): T | undefined;
98
- get isDeleted(): boolean;
73
+ resetSlots(): void;
99
74
  }
100
75
  //# sourceMappingURL=collection.service.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"collection.service.d.ts","sourceRoot":"","sources":["../../../src/services/collection/collection.service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,OAAO,CAAC;AAIjD,OAAO,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;AAEpC,qBAAa,iBAAiB,CAAC,CAAC,EAAE,EAAE,SAAS,cAAc;IAMvD,OAAO,CAAC,QAAQ,CAAC,KAAK;IALxB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAuC;IAE9D,SAAgB,WAAW,iBAAwB;gBAGhC,KAAK,EAAE;QACtB,KAAK,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,EAAE,CAAC;QACvB,aAAa,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC;KAC/B;IAKH;;OAEG;IACI,WAAW,CAAC,IAAI,EAAE,CAAC;IAI1B;;OAEG;IACH,IAAW,KAAK,oDAEf;IAED;;OAEG;IACH,IAAW,IAAI,QAEd;IAED;;;;;;;;OAQG;IACI,SAAS,CAAC,CAAC,SAAS,MAAM,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC;IAIvD;;;;;;;;OAQG;IACI,SAAS,CAAC,CAAC,SAAS,MAAM,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,MAAM,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,EAAE;IAMnE;;;;;;;;;OASG;IACI,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC,CAAC;IAQxC;;;;;OAKG;IACI,OAAO,CAAC,EAAE,EAAE,EAAE;IAMrB;;;;OAIG;IACI,GAAG,CAAC,IAAI,EAAE,CAAC;IAQlB;;;;OAIG;IACI,OAAO,CAAC,KAAK,EAAE,CAAC,EAAE;IAMzB;;;;OAIG;IACI,MAAM,CAAC,EAAE,EAAE,EAAE;IAIpB;;;;OAIG;IACI,UAAU,CAAC,GAAG,EAAE,EAAE,EAAE;IAM3B;;OAEG;IACI,KAAK;IASZ,OAAO,CAAC,UAAU,CAAsB;IACxC,IAAW,SAAS,iBAEnB;IACD,IAAW,SAAS,CAAC,KAAK,cAAA,EAEzB;IACD,IAAW,WAAW,kBAMrB;IACD,IAAW,SAAS,YAEnB;IAED,OAAO,CAAC,UAAU,CAAsB;IACxC,IAAW,SAAS,iBAEnB;IACD,IAAW,SAAS,CAAC,KAAK,cAAA,EAEzB;IACD,IAAW,WAAW,kBAMrB;IACD,IAAW,SAAS,YAEnB;CACF"}
1
+ {"version":3,"file":"collection.service.d.ts","sourceRoot":"","sources":["../../../src/services/collection/collection.service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,OAAO,CAAC;AAIvC,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAC/C,OAAO,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;AAEpC,qBAAa,iBAAiB,CAC5B,CAAC,EACD,EAAE,SAAS,cAAc,EACzB,MAAM,SAAS,MAAM;IASnB,OAAO,CAAC,QAAQ,CAAC,KAAK;IAPxB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAuC;IAE9D,SAAgB,WAAW,iBAAwB;IAEnD,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAA0C;gBAGhD,KAAK,EAAE;QACtB,KAAK,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,EAAE,CAAC;QACvB,aAAa,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC;QAC9B,KAAK,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;KAC3B;IAWH;;OAEG;IACI,WAAW,CAAC,IAAI,EAAE,CAAC;IAI1B;;OAEG;IACH,IAAW,KAAK,oDAEf;IAED;;OAEG;IACH,IAAW,IAAI,iBAEd;IAEM,SAAS,CAAC,CAAC,SAAS,MAAM,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC;IAIhD,SAAS,CAAC,CAAC,SAAS,MAAM,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,MAAM,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,EAAE;IAM5D,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC,CAAC;IAQjC,OAAO,CAAC,EAAE,EAAE,EAAE;IAId,GAAG,CAAC,IAAI,EAAE,CAAC;IAQX,OAAO,CAAC,KAAK,EAAE,CAAC,EAAE;IAMlB,MAAM,CAAC,EAAE,EAAE,EAAE;IAIb,UAAU,CAAC,GAAG,EAAE,EAAE,EAAE;IAM3B;;OAEG;IACI,KAAK;IAQZ;;;;;OAKG;IACI,SAAS,CAAC,IAAI,EAAE,MAAM;IAI7B;;;;OAIG;IACI,WAAW,CAAC,IAAI,EAAE,MAAM;IAU/B;;;;OAIG;IACI,aAAa,CAAC,IAAI,EAAE,MAAM;IAUjC;;;;;OAKG;IACI,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,EAAE;IAQxC;;;;OAIG;IACI,WAAW,CAAC,IAAI,EAAE,MAAM;IAQ/B;;OAEG;IACI,UAAU;CAKlB"}
@@ -1 +1 @@
1
- import{observable as e,makeAutoObservable as t}from"../../node_modules/mobx/dist/mobx.esm.esm.js";import{SetService as d}from"../set/set.service.esm.js";class s{props;_items=e.map();selectedIds=new d;constructor(e){this.props=e,t(this)}getIdByItem(e){return this.props.getId(e)}get items(){return this._items}get list(){return Array.from(this.items.values())}findAllBy(e,t){return this.list.filter(d=>d[e]===t)}findAllIn(e,t){const d=new Set(t);return this.list.filter(t=>d.has(t[e]))}findAllWhere(e){const t=Object.entries(e);return this.list.filter(e=>t.every(([t,d])=>e[t]===d))}getById(e){return this.items.get(e)}add(e){const t=this.props.getId(e),d=this.props.normalizeItem(e);this._items.set(t,d)}addMany(e){e.forEach(e=>{this.add(e)})}delete(e){this._items.delete(e)}deleteMany(e){e.forEach(e=>{this.delete(e)})}clear(){this._items.clear(),this.updatedId=null,this.deletedId=null,this.selectedIds.clear()}_updatedId=null;get updatedId(){return this._updatedId}set updatedId(e){this._updatedId=e}get updatedItem(){if(null!=this.updatedId){return this.getById(this.updatedId)}}get isUpdated(){return null!==this.updatedId}_deletedId=null;get deletedId(){return this._deletedId}set deletedId(e){this._deletedId=e}get deletedItem(){if(null!=this.deletedId){return this.getById(this.deletedId)}}get isDeleted(){return null!==this.deletedId}}export{s as CollectionService};
1
+ import{observable as t,makeAutoObservable as e}from"../../node_modules/mobx/dist/mobx.esm.esm.js";import{ScalarIdService as s}from"../scalar-id/scalar-id.service.esm.js";import{SetService as r}from"../set/set.service.esm.js";class i{props;_items=t.map();selectedIds=new r;_idSlots=new Map;constructor(t){this.props=t;const{slots:r=[]}=t;e(this),r.forEach(t=>{this._idSlots.set(t,new s)})}getIdByItem(t){return this.props.getId(t)}get items(){return this._items}get list(){return Object.freeze(Array.from(this.items.values()))}findAllBy(t,e){return this.list.filter(s=>s[t]===e)}findAllIn(t,e){const s=new Set(e);return this.list.filter(e=>s.has(e[t]))}findAllWhere(t){const e=Object.entries(t);return this.list.filter(t=>e.every(([e,s])=>t[e]===s))}getById(t){return this.items.get(t)??null}add(t){const e=this.props.getId(t),s=this.props.normalizeItem(t);this._items.set(e,s)}addMany(t){t.forEach(t=>{this.add(t)})}delete(t){this._items.delete(t)}deleteMany(t){t.forEach(t=>{this.delete(t)})}clear(){this._items.clear(),this.resetSlots(),this.selectedIds.clear()}getIdSlot(t){return this._idSlots.get(t)??null}getIdBySlot(t){const e=this.getIdSlot(t);return e?e.value:null}getItemBySlot(t){const e=this.getIdSlot(t);return e&&e.isSet&&null!==e.value?this.getById(e.value):null}setIdSlot(t,e){const s=this.getIdSlot(t);s&&s.set(e)}resetIdSlot(t){const e=this.getIdSlot(t);e&&e.reset()}resetSlots(){this._idSlots.forEach(t=>{t.reset()})}}export{i as CollectionService};
@@ -6,5 +6,6 @@ export * from './localization';
6
6
  export * from './logger';
7
7
  export * from './map';
8
8
  export * from './query';
9
+ export * from './scalar-id';
9
10
  export * from './set';
10
11
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/services/index.ts"],"names":[],"mappings":"AAAA,cAAc,OAAO,CAAC;AACtB,cAAc,cAAc,CAAC;AAC7B,cAAc,oBAAoB,CAAC;AACnC,cAAc,eAAe,CAAC;AAC9B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,UAAU,CAAC;AACzB,cAAc,OAAO,CAAC;AACtB,cAAc,SAAS,CAAC;AACxB,cAAc,OAAO,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/services/index.ts"],"names":[],"mappings":"AAAA,cAAc,OAAO,CAAC;AACtB,cAAc,cAAc,CAAC;AAC7B,cAAc,oBAAoB,CAAC;AACnC,cAAc,eAAe,CAAC;AAC9B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,UAAU,CAAC;AACzB,cAAc,OAAO,CAAC;AACtB,cAAc,SAAS,CAAC;AACxB,cAAc,aAAa,CAAC;AAC5B,cAAc,OAAO,CAAC"}
@@ -0,0 +1,2 @@
1
+ export * from './scalar-id.service';
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/services/scalar-id/index.ts"],"names":[],"mappings":"AAAA,cAAc,qBAAqB,CAAC"}
@@ -0,0 +1,2 @@
1
+ export declare const defaultId: null;
2
+ //# sourceMappingURL=scalar-id.constants.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scalar-id.constants.d.ts","sourceRoot":"","sources":["../../../src/services/scalar-id/scalar-id.constants.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,SAAS,MAAO,CAAC"}
@@ -0,0 +1 @@
1
+ const l=null;export{l as defaultId};
@@ -0,0 +1,49 @@
1
+ import { Nullable } from '../../lib';
2
+ /**
3
+ * ScalarIdService<Id>
4
+ *
5
+ * Небольшой сервис для хранения одного "текущего" идентификатора.
6
+ * Подходит для:
7
+ * - последнего обновлённого элемента (updatedId);
8
+ * - последнего удалённого элемента (deletedId);
9
+ * - текущего выделенного элемента (selectedId), если нужен один.
10
+ *
11
+ * Возможности:
12
+ * - value: текущее значение или null;
13
+ * - isSet: флаг, установлен ли id;
14
+ * - set / reset: явное управление значением.
15
+ *
16
+ * Пример:
17
+ * const updated = new ScalarIdService<string>();
18
+ * updated.set('42');
19
+ * updated.isSet; // true
20
+ * updated.value; // '42'
21
+ * updated.reset();
22
+ */
23
+ export declare class ScalarIdService<Id> {
24
+ /**
25
+ * Внутреннее хранилище идентификатора.
26
+ * null означает "ничего не выбрано / не установлено".
27
+ */
28
+ private _value;
29
+ constructor();
30
+ /**
31
+ * Текущее значение id или null, если значение не установлено.
32
+ */
33
+ get value(): Nullable<Id>;
34
+ /**
35
+ * Установить новое значение id.
36
+ *
37
+ * @param value Новое значение или null для сброса.
38
+ */
39
+ set(value: Id): void;
40
+ /**
41
+ * Сбросить значение id в null.
42
+ */
43
+ reset(): void;
44
+ /**
45
+ * Признак, что значение установлено (отлично от null).
46
+ */
47
+ get isSet(): boolean;
48
+ }
49
+ //# sourceMappingURL=scalar-id.service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scalar-id.service.d.ts","sourceRoot":"","sources":["../../../src/services/scalar-id/scalar-id.service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAMjC;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,qBAAa,eAAe,CAAC,EAAE;IAC7B;;;OAGG;IACH,OAAO,CAAC,MAAM,CAA2B;;IAMzC;;OAEG;IACH,IAAW,KAAK,iBAEf;IAED;;;;OAIG;IACI,GAAG,CAAC,KAAK,EAAE,EAAE;IAIpB;;OAEG;IACI,KAAK;IAIZ;;OAEG;IACH,IAAW,KAAK,YAEf;CACF"}
@@ -0,0 +1 @@
1
+ import{makeAutoObservable as s}from"../../node_modules/mobx/dist/mobx.esm.esm.js";import{defaultId as t}from"./scalar-id.constants.esm.js";class e{_value=t;constructor(){s(this,{},{autoBind:!0})}get value(){return this._value}set(s){this._value=s}reset(){this._value=t}get isSet(){return this._value!==t}}export{e as ScalarIdService};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@dartcom/ui-kit",
3
- "version": "10.6.1",
3
+ "version": "10.6.2",
4
4
  "description": "Кастомная библиотека компонентов Dartcom",
5
5
  "type": "module",
6
6
  "main": "./dist/index.cjs",