@dartcom/ui-kit 10.5.24 → 10.6.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/dist/index.cjs CHANGED
@@ -5662,9 +5662,134 @@ class ApiService {
5662
5662
  }
5663
5663
  }
5664
5664
 
5665
+ /**
5666
+ * SetService<T>
5667
+ *
5668
+ * Небольшой обёрткой над observable Set из MobX, которая:
5669
+ * - хранит уникальные значения типа T;
5670
+ * - предоставляет реактивные геттеры items / list;
5671
+ * - даёт удобные методы add / delete / toggle / clear;
5672
+ * - поддерживает batch‑операции addMany / deleteMany.
5673
+ *
5674
+ * Типичный сценарий использования:
5675
+ * - хранение множества выбранных id;
5676
+ * - хранение множества активных фильтров;
5677
+ * - хранение множества "выделенных" элементов в UI.
5678
+ *
5679
+ * Пример:
5680
+ * const selection = new SetService<string>();
5681
+ * selection.add('id-1');
5682
+ * selection.toggle('id-2');
5683
+ * selection.isContain('id-1'); // true
5684
+ */
5685
+ class SetService {
5686
+ /**
5687
+ * Внутренний набор значений.
5688
+ *
5689
+ * Используется observable.set, чтобы:
5690
+ * - изменения были реактивны для MobX;
5691
+ * - операции add/delete были O(1) по времени.
5692
+ */
5693
+ _items = observable.set();
5694
+ /**
5695
+ * Возвращает observable Set со всеми значениями.
5696
+ *
5697
+ * Подходит, если нужно работать с Set напрямую:
5698
+ * setService.items.has(value)
5699
+ */
5700
+ get items() {
5701
+ return this._items;
5702
+ }
5703
+ /**
5704
+ * Возвращает значения набора в виде обычного массива.
5705
+ *
5706
+ * Удобно использовать в React-компонентах:
5707
+ * setService.list.map(...)
5708
+ */
5709
+ get list() {
5710
+ return Array.from(this.items.values());
5711
+ }
5712
+ /**
5713
+ * Проверяет, содержится ли значение в наборе.
5714
+ *
5715
+ * @param value Значение для проверки.
5716
+ * @returns true, если value есть в наборе; иначе false.
5717
+ */
5718
+ has(value) {
5719
+ return this.items.has(value);
5720
+ }
5721
+ /**
5722
+ * Возвращает значение, пустой ли список
5723
+ * @returns true, если в списке нет ни одного элемента; иначе false.
5724
+ */
5725
+ get isEmpty() {
5726
+ return this.items.size === 0;
5727
+ }
5728
+ /**
5729
+ * Добавляет значение в набор.
5730
+ *
5731
+ * @param value Значение для добавления.
5732
+ */
5733
+ add(value) {
5734
+ this._items.add(value);
5735
+ }
5736
+ /**
5737
+ * Добавляет в набор несколько значений подряд.
5738
+ *
5739
+ * @param values Массив значений для добавления.
5740
+ */
5741
+ addMany(values) {
5742
+ values.forEach((value) => {
5743
+ this.add(value);
5744
+ });
5745
+ }
5746
+ /**
5747
+ * Удаляет значение из набора.
5748
+ *
5749
+ * @param value Значение для удаления.
5750
+ */
5751
+ delete(value) {
5752
+ this._items.delete(value);
5753
+ }
5754
+ /**
5755
+ * Удаляет из набора несколько значений подряд.
5756
+ *
5757
+ * @param values Массив значений для удаления.
5758
+ */
5759
+ deleteMany(values) {
5760
+ values.forEach((value) => {
5761
+ this.delete(value);
5762
+ });
5763
+ }
5764
+ /**
5765
+ * Переключает присутствие значения в наборе.
5766
+ *
5767
+ * Поведение:
5768
+ * - если значение уже есть, оно будет удалено;
5769
+ * - если значения нет, оно будет добавлено.
5770
+ *
5771
+ * @param value Значение для переключения.
5772
+ */
5773
+ toggle(value) {
5774
+ if (this.has(value)) {
5775
+ this.delete(value);
5776
+ }
5777
+ else {
5778
+ this.add(value);
5779
+ }
5780
+ }
5781
+ /**
5782
+ * Полностью очищает набор.
5783
+ */
5784
+ clear() {
5785
+ this._items.clear();
5786
+ }
5787
+ }
5788
+
5665
5789
  class CollectionService {
5666
5790
  props;
5667
5791
  _items = observable.map();
5792
+ selectedIds = new SetService();
5668
5793
  constructor(props) {
5669
5794
  this.props = props;
5670
5795
  makeAutoObservable(this);
@@ -5780,8 +5905,8 @@ class CollectionService {
5780
5905
  clear() {
5781
5906
  this._items.clear();
5782
5907
  this.updatedId = null;
5783
- this.selectedId = null;
5784
5908
  this.deletedId = null;
5909
+ this.selectedIds.clear();
5785
5910
  }
5786
5911
  _updatedId = null;
5787
5912
  get updatedId() {
@@ -5796,18 +5921,8 @@ class CollectionService {
5796
5921
  return item;
5797
5922
  }
5798
5923
  }
5799
- _selectedId = null;
5800
- get selectedId() {
5801
- return this._selectedId;
5802
- }
5803
- set selectedId(value) {
5804
- this._selectedId = value;
5805
- }
5806
- get selectedItem() {
5807
- if (this.selectedId != null) {
5808
- const item = this.getById(this.selectedId);
5809
- return item;
5810
- }
5924
+ get isUpdated() {
5925
+ return this.updatedId !== null;
5811
5926
  }
5812
5927
  _deletedId = null;
5813
5928
  get deletedId() {
@@ -5822,6 +5937,9 @@ class CollectionService {
5822
5937
  return item;
5823
5938
  }
5824
5939
  }
5940
+ get isDeleted() {
5941
+ return this.deletedId !== null;
5942
+ }
5825
5943
  }
5826
5944
 
5827
5945
  /**
@@ -48194,6 +48312,7 @@ exports.Modal = modal;
48194
48312
  exports.NoData = NoData;
48195
48313
  exports.Paragraph = Paragraph;
48196
48314
  exports.Select = FormSelect;
48315
+ exports.SetService = SetService;
48197
48316
  exports.Tabs = Tabs;
48198
48317
  exports.TangramLayer = TangramLayer;
48199
48318
  exports.TextField = TextField;
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{modalStyle}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";
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{modalStyle}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,7 +1,9 @@
1
1
  import { Nullable, StringOrNumber } from '../../lib';
2
+ import { SetService } from '../set';
2
3
  export declare class CollectionService<T, Id extends StringOrNumber> {
3
4
  private readonly props;
4
- private _items;
5
+ private readonly _items;
6
+ readonly selectedIds: SetService<Id>;
5
7
  constructor(props: {
6
8
  getId: (item: T) => Id;
7
9
  normalizeItem: (item: T) => T;
@@ -88,13 +90,11 @@ export declare class CollectionService<T, Id extends StringOrNumber> {
88
90
  get updatedId(): Nullable<Id>;
89
91
  set updatedId(value: Nullable<Id>);
90
92
  get updatedItem(): T | undefined;
91
- private _selectedId;
92
- get selectedId(): Nullable<Id>;
93
- set selectedId(value: Nullable<Id>);
94
- get selectedItem(): T | undefined;
93
+ get isUpdated(): boolean;
95
94
  private _deletedId;
96
95
  get deletedId(): Nullable<Id>;
97
96
  set deletedId(value: Nullable<Id>);
98
97
  get deletedItem(): T | undefined;
98
+ get isDeleted(): boolean;
99
99
  }
100
100
  //# 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,qBAAa,iBAAiB,CAAC,CAAC,EAAE,EAAE,SAAS,cAAc;IAIvD,OAAO,CAAC,QAAQ,CAAC,KAAK;IAHxB,OAAO,CAAC,MAAM,CAAuC;gBAGlC,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;IAQZ,OAAO,CAAC,UAAU,CAAsB;IACxC,IAAW,SAAS,iBAEnB;IACD,IAAW,SAAS,CAAC,KAAK,cAAA,EAEzB;IACD,IAAW,WAAW,kBAMrB;IAED,OAAO,CAAC,WAAW,CAAsB;IACzC,IAAW,UAAU,iBAEpB;IACD,IAAW,UAAU,CAAC,KAAK,cAAA,EAE1B;IACD,IAAW,YAAY,kBAMtB;IAED,OAAO,CAAC,UAAU,CAAsB;IACxC,IAAW,SAAS,iBAEnB;IACD,IAAW,SAAS,CAAC,KAAK,cAAA,EAEzB;IACD,IAAW,WAAW,kBAMrB;CACF"}
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 +1 @@
1
- import{observable as e,makeAutoObservable as t}from"../../node_modules/mobx/dist/mobx.esm.esm.js";class d{props;_items=e.map();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.selectedId=null,this.deletedId=null}_updatedId=null;get updatedId(){return this._updatedId}set updatedId(e){this._updatedId=e}get updatedItem(){if(null!=this.updatedId){return this.getById(this.updatedId)}}_selectedId=null;get selectedId(){return this._selectedId}set selectedId(e){this._selectedId=e}get selectedItem(){if(null!=this.selectedId){return this.getById(this.selectedId)}}_deletedId=null;get deletedId(){return this._deletedId}set deletedId(e){this._deletedId=e}get deletedItem(){if(null!=this.deletedId){return this.getById(this.deletedId)}}}export{d as CollectionService};
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};
@@ -6,4 +6,5 @@ export * from './localization';
6
6
  export * from './logger';
7
7
  export * from './map';
8
8
  export * from './query';
9
+ export * from './set';
9
10
  //# 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"}
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"}
@@ -0,0 +1,2 @@
1
+ export * from './set.service';
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/services/set/index.ts"],"names":[],"mappings":"AAAA,cAAc,eAAe,CAAC"}
@@ -0,0 +1,95 @@
1
+ /**
2
+ * SetService<T>
3
+ *
4
+ * Небольшой обёрткой над observable Set из MobX, которая:
5
+ * - хранит уникальные значения типа T;
6
+ * - предоставляет реактивные геттеры items / list;
7
+ * - даёт удобные методы add / delete / toggle / clear;
8
+ * - поддерживает batch‑операции addMany / deleteMany.
9
+ *
10
+ * Типичный сценарий использования:
11
+ * - хранение множества выбранных id;
12
+ * - хранение множества активных фильтров;
13
+ * - хранение множества "выделенных" элементов в UI.
14
+ *
15
+ * Пример:
16
+ * const selection = new SetService<string>();
17
+ * selection.add('id-1');
18
+ * selection.toggle('id-2');
19
+ * selection.isContain('id-1'); // true
20
+ */
21
+ export declare class SetService<T> {
22
+ /**
23
+ * Внутренний набор значений.
24
+ *
25
+ * Используется observable.set, чтобы:
26
+ * - изменения были реактивны для MobX;
27
+ * - операции add/delete были O(1) по времени.
28
+ */
29
+ private readonly _items;
30
+ /**
31
+ * Возвращает observable Set со всеми значениями.
32
+ *
33
+ * Подходит, если нужно работать с Set напрямую:
34
+ * setService.items.has(value)
35
+ */
36
+ get items(): import("mobx").ObservableSet<T>;
37
+ /**
38
+ * Возвращает значения набора в виде обычного массива.
39
+ *
40
+ * Удобно использовать в React-компонентах:
41
+ * setService.list.map(...)
42
+ */
43
+ get list(): T[];
44
+ /**
45
+ * Проверяет, содержится ли значение в наборе.
46
+ *
47
+ * @param value Значение для проверки.
48
+ * @returns true, если value есть в наборе; иначе false.
49
+ */
50
+ has(value: T): boolean;
51
+ /**
52
+ * Возвращает значение, пустой ли список
53
+ * @returns true, если в списке нет ни одного элемента; иначе false.
54
+ */
55
+ get isEmpty(): boolean;
56
+ /**
57
+ * Добавляет значение в набор.
58
+ *
59
+ * @param value Значение для добавления.
60
+ */
61
+ add(value: T): void;
62
+ /**
63
+ * Добавляет в набор несколько значений подряд.
64
+ *
65
+ * @param values Массив значений для добавления.
66
+ */
67
+ addMany(values: T[]): void;
68
+ /**
69
+ * Удаляет значение из набора.
70
+ *
71
+ * @param value Значение для удаления.
72
+ */
73
+ delete(value: T): void;
74
+ /**
75
+ * Удаляет из набора несколько значений подряд.
76
+ *
77
+ * @param values Массив значений для удаления.
78
+ */
79
+ deleteMany(values: T[]): void;
80
+ /**
81
+ * Переключает присутствие значения в наборе.
82
+ *
83
+ * Поведение:
84
+ * - если значение уже есть, оно будет удалено;
85
+ * - если значения нет, оно будет добавлено.
86
+ *
87
+ * @param value Значение для переключения.
88
+ */
89
+ toggle(value: T): void;
90
+ /**
91
+ * Полностью очищает набор.
92
+ */
93
+ clear(): void;
94
+ }
95
+ //# sourceMappingURL=set.service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"set.service.d.ts","sourceRoot":"","sources":["../../../src/services/set/set.service.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;;;;;;GAmBG;AACH,qBAAa,UAAU,CAAC,CAAC;IACvB;;;;;;OAMG;IACH,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAuB;IAE9C;;;;;OAKG;IACH,IAAW,KAAK,oCAEf;IAED;;;;;OAKG;IACH,IAAW,IAAI,QAEd;IAED;;;;;OAKG;IACI,GAAG,CAAC,KAAK,EAAE,CAAC;IAInB;;;OAGG;IACH,IAAW,OAAO,YAEjB;IAED;;;;OAIG;IACI,GAAG,CAAC,KAAK,EAAE,CAAC;IAInB;;;;OAIG;IACI,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE;IAM1B;;;;OAIG;IACI,MAAM,CAAC,KAAK,EAAE,CAAC;IAItB;;;;OAIG;IACI,UAAU,CAAC,MAAM,EAAE,CAAC,EAAE;IAM7B;;;;;;;;OAQG;IACI,MAAM,CAAC,KAAK,EAAE,CAAC;IAQtB;;OAEG;IACI,KAAK;CAGb"}
@@ -0,0 +1 @@
1
+ import{observable as e}from"../../node_modules/mobx/dist/mobx.esm.esm.js";class t{_items=e.set();get items(){return this._items}get list(){return Array.from(this.items.values())}has(e){return this.items.has(e)}get isEmpty(){return 0===this.items.size}add(e){this._items.add(e)}addMany(e){e.forEach(e=>{this.add(e)})}delete(e){this._items.delete(e)}deleteMany(e){e.forEach(e=>{this.delete(e)})}toggle(e){this.has(e)?this.delete(e):this.add(e)}clear(){this._items.clear()}}export{t as SetService};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@dartcom/ui-kit",
3
- "version": "10.5.24",
3
+ "version": "10.6.0",
4
4
  "description": "Кастомная библиотека компонентов Dartcom",
5
5
  "type": "module",
6
6
  "main": "./dist/index.cjs",