@wix/bex-core 2.331.0 → 2.332.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.
Files changed (113) hide show
  1. package/dist/cjs/assets/locale/messages_ar.json +8 -0
  2. package/dist/cjs/assets/locale/messages_bg.json +8 -0
  3. package/dist/cjs/assets/locale/messages_ca.json +8 -0
  4. package/dist/cjs/assets/locale/messages_cs.json +8 -0
  5. package/dist/cjs/assets/locale/messages_da.json +8 -0
  6. package/dist/cjs/assets/locale/messages_de.json +8 -0
  7. package/dist/cjs/assets/locale/messages_el.json +8 -0
  8. package/dist/cjs/assets/locale/messages_en.json +8 -0
  9. package/dist/cjs/assets/locale/messages_es.json +8 -0
  10. package/dist/cjs/assets/locale/messages_fi.json +8 -0
  11. package/dist/cjs/assets/locale/messages_fr.json +8 -0
  12. package/dist/cjs/assets/locale/messages_he.json +8 -0
  13. package/dist/cjs/assets/locale/messages_hi.json +8 -0
  14. package/dist/cjs/assets/locale/messages_hu.json +8 -0
  15. package/dist/cjs/assets/locale/messages_id.json +8 -0
  16. package/dist/cjs/assets/locale/messages_it.json +8 -0
  17. package/dist/cjs/assets/locale/messages_ja.json +8 -0
  18. package/dist/cjs/assets/locale/messages_ko.json +8 -0
  19. package/dist/cjs/assets/locale/messages_lt.json +8 -0
  20. package/dist/cjs/assets/locale/messages_ms.json +8 -0
  21. package/dist/cjs/assets/locale/messages_nl.json +8 -0
  22. package/dist/cjs/assets/locale/messages_no.json +8 -0
  23. package/dist/cjs/assets/locale/messages_pl.json +8 -0
  24. package/dist/cjs/assets/locale/messages_pt.json +8 -0
  25. package/dist/cjs/assets/locale/messages_ro.json +8 -0
  26. package/dist/cjs/assets/locale/messages_ru.json +8 -0
  27. package/dist/cjs/assets/locale/messages_sk.json +8 -0
  28. package/dist/cjs/assets/locale/messages_sl.json +8 -0
  29. package/dist/cjs/assets/locale/messages_sv.json +8 -0
  30. package/dist/cjs/assets/locale/messages_th.json +8 -0
  31. package/dist/cjs/assets/locale/messages_tl.json +8 -0
  32. package/dist/cjs/assets/locale/messages_tr.json +8 -0
  33. package/dist/cjs/assets/locale/messages_uk.json +8 -0
  34. package/dist/cjs/assets/locale/messages_vi.json +8 -0
  35. package/dist/cjs/assets/locale/messages_zh.json +8 -0
  36. package/dist/cjs/assets/locale/version_file +1 -1
  37. package/dist/cjs/hooks/useImport.js +3 -13
  38. package/dist/cjs/hooks/useImport.js.map +1 -1
  39. package/dist/cjs/hooks/useImportConfig.js +2 -0
  40. package/dist/cjs/hooks/useImportConfig.js.map +1 -1
  41. package/dist/cjs/services/translations.js.map +1 -1
  42. package/dist/cjs/state/ImportState/ImportState.js +95 -18
  43. package/dist/cjs/state/ImportState/ImportState.js.map +1 -1
  44. package/dist/cjs/state/ImportState/__tests__/ImportState.engine.spec.js +278 -3
  45. package/dist/cjs/state/ImportState/__tests__/ImportState.engine.spec.js.map +1 -1
  46. package/dist/cjs/state/TagsState/TagsManagementState.js +17 -44
  47. package/dist/cjs/state/TagsState/TagsManagementState.js.map +1 -1
  48. package/dist/cjs/state/TagsState/TagsSearchState.js +0 -6
  49. package/dist/cjs/state/TagsState/TagsSearchState.js.map +1 -1
  50. package/dist/cjs/types/FieldsSource.js.map +1 -1
  51. package/dist/cjs/types/Schema.js.map +1 -1
  52. package/dist/esm/assets/locale/messages_ar.json +8 -0
  53. package/dist/esm/assets/locale/messages_bg.json +8 -0
  54. package/dist/esm/assets/locale/messages_ca.json +8 -0
  55. package/dist/esm/assets/locale/messages_cs.json +8 -0
  56. package/dist/esm/assets/locale/messages_da.json +8 -0
  57. package/dist/esm/assets/locale/messages_de.json +8 -0
  58. package/dist/esm/assets/locale/messages_el.json +8 -0
  59. package/dist/esm/assets/locale/messages_en.json +8 -0
  60. package/dist/esm/assets/locale/messages_es.json +8 -0
  61. package/dist/esm/assets/locale/messages_fi.json +8 -0
  62. package/dist/esm/assets/locale/messages_fr.json +8 -0
  63. package/dist/esm/assets/locale/messages_he.json +8 -0
  64. package/dist/esm/assets/locale/messages_hi.json +8 -0
  65. package/dist/esm/assets/locale/messages_hu.json +8 -0
  66. package/dist/esm/assets/locale/messages_id.json +8 -0
  67. package/dist/esm/assets/locale/messages_it.json +8 -0
  68. package/dist/esm/assets/locale/messages_ja.json +8 -0
  69. package/dist/esm/assets/locale/messages_ko.json +8 -0
  70. package/dist/esm/assets/locale/messages_lt.json +8 -0
  71. package/dist/esm/assets/locale/messages_ms.json +8 -0
  72. package/dist/esm/assets/locale/messages_nl.json +8 -0
  73. package/dist/esm/assets/locale/messages_no.json +8 -0
  74. package/dist/esm/assets/locale/messages_pl.json +8 -0
  75. package/dist/esm/assets/locale/messages_pt.json +8 -0
  76. package/dist/esm/assets/locale/messages_ro.json +8 -0
  77. package/dist/esm/assets/locale/messages_ru.json +8 -0
  78. package/dist/esm/assets/locale/messages_sk.json +8 -0
  79. package/dist/esm/assets/locale/messages_sl.json +8 -0
  80. package/dist/esm/assets/locale/messages_sv.json +8 -0
  81. package/dist/esm/assets/locale/messages_th.json +8 -0
  82. package/dist/esm/assets/locale/messages_tl.json +8 -0
  83. package/dist/esm/assets/locale/messages_tr.json +8 -0
  84. package/dist/esm/assets/locale/messages_uk.json +8 -0
  85. package/dist/esm/assets/locale/messages_vi.json +8 -0
  86. package/dist/esm/assets/locale/messages_zh.json +8 -0
  87. package/dist/esm/assets/locale/version_file +1 -1
  88. package/dist/esm/hooks/useImport.js +2 -7
  89. package/dist/esm/hooks/useImport.js.map +1 -1
  90. package/dist/esm/hooks/useImportConfig.js.map +1 -1
  91. package/dist/esm/state/ImportState/ImportState.js +68 -12
  92. package/dist/esm/state/ImportState/ImportState.js.map +1 -1
  93. package/dist/esm/state/ImportState/__tests__/ImportState.engine.spec.js +164 -3
  94. package/dist/esm/state/ImportState/__tests__/ImportState.engine.spec.js.map +1 -1
  95. package/dist/esm/state/TagsState/TagsManagementState.js +17 -33
  96. package/dist/esm/state/TagsState/TagsManagementState.js.map +1 -1
  97. package/dist/esm/state/TagsState/TagsSearchState.js +0 -6
  98. package/dist/esm/state/TagsState/TagsSearchState.js.map +1 -1
  99. package/dist/types/hooks/useImport.d.ts +3 -18
  100. package/dist/types/hooks/useImport.d.ts.map +1 -1
  101. package/dist/types/hooks/useImportConfig.d.ts +4 -20
  102. package/dist/types/hooks/useImportConfig.d.ts.map +1 -1
  103. package/dist/types/services/translations.d.ts +14 -1
  104. package/dist/types/services/translations.d.ts.map +1 -1
  105. package/dist/types/state/ImportState/ImportState.d.ts +63 -28
  106. package/dist/types/state/ImportState/ImportState.d.ts.map +1 -1
  107. package/dist/types/state/TagsState/TagsManagementState.d.ts.map +1 -1
  108. package/dist/types/state/TagsState/TagsSearchState.d.ts.map +1 -1
  109. package/dist/types/types/FieldsSource.d.ts +5 -1
  110. package/dist/types/types/FieldsSource.d.ts.map +1 -1
  111. package/dist/types/types/Schema.d.ts +6 -0
  112. package/dist/types/types/Schema.d.ts.map +1 -1
  113. package/package.json +4 -4
@@ -17,9 +17,8 @@ var _createTagErrors = require("../../services/tagsService/createTagErrors");
17
17
  var _tagsService = require("../../services/tagsService");
18
18
  const TAG_MAX_LENGTH = exports.TAG_MAX_LENGTH = 30;
19
19
  const MAX_TAGS = 1000;
20
- const TAGS_PAGE_SIZE = 100;
21
20
 
22
- // Pre-cursor tag creation ceiling (restored from before pagination, unrelated to page size)
21
+ // Tag creation ceiling before the TagsPagination experiment raised it
23
22
  const LEGACY_MAX_TAGS = 100;
24
23
  class TagsManagementState {
25
24
  constructor(params) {
@@ -42,52 +41,17 @@ class TagsManagementState {
42
41
  this.shouldAllowTagsPagination = !!((_params$container$int = params.container.internalExperiments) != null && _params$container$int.enabled('specs.cairo.TagsPagination'));
43
42
  this.collection = new _CollectionState.CollectionState({
44
43
  ...params.container,
45
- limit: TAGS_PAGE_SIZE,
44
+ // limit must cover the whole list — fetchData returns all tags in one page,
45
+ // and a smaller limit would make fetchedLastPage (hasMore) miscompute
46
+ limit: MAX_TAGS,
46
47
  events: {
47
48
  onError: error => {
48
49
  var _this$container$error, _this$container$error2;
49
50
  this._resolvedListTagsError = (_this$container$error = (_this$container$error2 = this.container.errorHandler).getResolvedError) == null ? void 0 : _this$container$error.call(_this$container$error2, error.err);
50
51
  }
51
52
  },
52
- paginationMode: this.shouldAllowTagsPagination ? 'cursor' : undefined,
53
53
  queryName: [this.fqdnString, 'tags'].join('/'),
54
- fetchData: async ({
55
- cursor,
56
- limit,
57
- search
58
- }) => {
59
- if (this.shouldAllowTagsPagination) {
60
- const result = await this.tagsService.queryTags({
61
- fqdn: this.fqdnString,
62
- exposure: _types.TagExposure.PRIVATE,
63
- query: {
64
- cursorPaging: {
65
- limit,
66
- cursor: cursor ?? undefined
67
- },
68
- ...(search ? {
69
- filter: {
70
- name: {
71
- $startsWith: search
72
- }
73
- }
74
- } : {})
75
- }
76
- }, {}, {
77
- serverErrorOverride: () => ({
78
- message: this.container.translate('cairo.tags.collectionPage.popover.loadTags.error.body'),
79
- action: {
80
- text: this.container.translate('cairo.tags.loadTags.error.CTA'),
81
- onClick: () => this.retry()
82
- }
83
- })
84
- });
85
- return {
86
- items: result.items,
87
- cursor: result.cursor,
88
- hasNext: result.hasNext
89
- };
90
- }
54
+ fetchData: async () => {
91
55
  const fetchedItems = await this.tagsService.listTags({
92
56
  fqdn: this.fqdnString,
93
57
  exposure: _types.TagExposure.PRIVATE
@@ -322,7 +286,10 @@ class TagsManagementState {
322
286
  }));
323
287
  await (onSuccess == null ? void 0 : onSuccess(serverCreatedTag));
324
288
  if (this.shouldAllowTagsPagination) {
325
- // intentional fire-and-forget: optimistic state is already applied
289
+ // Re-sync with the server: picks up concurrent edits and lets the
290
+ // optimistic patch clear on the refreshed result (otherwise it
291
+ // lingers until unmount). Fire-and-forget — the UI already shows
292
+ // the change via the optimistic patch.
326
293
  void this.collection.refreshAllPages();
327
294
  }
328
295
  return [serverCreatedTag];
@@ -366,7 +333,10 @@ class TagsManagementState {
366
333
  tag: tagToUpdate
367
334
  });
368
335
  if (this.shouldAllowTagsPagination) {
369
- // intentional fire-and-forget: optimistic state is already applied
336
+ // Re-sync with the server: picks up concurrent edits and lets the
337
+ // optimistic patch clear on the refreshed result (otherwise it
338
+ // lingers until unmount). Fire-and-forget — the UI already shows
339
+ // the change via the optimistic patch.
370
340
  void this.collection.refreshAllPages();
371
341
  }
372
342
  return updatedTag;
@@ -406,7 +376,10 @@ class TagsManagementState {
406
376
  tagId: tagToDelete.id
407
377
  });
408
378
  if (this.shouldAllowTagsPagination) {
409
- // intentional fire-and-forget: optimistic state is already applied
379
+ // Re-sync with the server: picks up concurrent edits and lets the
380
+ // optimistic patch clear on the refreshed result (otherwise it
381
+ // lingers until unmount). Fire-and-forget — the UI already shows
382
+ // the change via the optimistic patch.
410
383
  void this.collection.refreshAllPages();
411
384
  }
412
385
  return result;
@@ -1 +1 @@
1
- {"version":3,"names":["_mobx","require","_types","_uuid","_events","_CollectionState","_CollectionOptimisticActions","_TaskState","_util","_services","_createTagErrors","_tagsService","TAG_MAX_LENGTH","exports","MAX_TAGS","TAGS_PAGE_SIZE","LEGACY_MAX_TAGS","TagsManagementState","constructor","params","_params$container$int","_defineProperty2","default","TaskState","EventEmitter","container","fqdn","tagsService","TagsService","shouldAllowTagsPagination","internalExperiments","enabled","collection","CollectionState","limit","events","onError","error","_this$container$error","_this$container$error2","_resolvedListTagsError","errorHandler","getResolvedError","call","err","paginationMode","undefined","queryName","fqdnString","join","fetchData","cursor","search","result","queryTags","exposure","TagExposure","PRIVATE","query","cursorPaging","filter","name","$startsWith","serverErrorOverride","message","translate","action","text","onClick","retry","items","hasNext","fetchedItems","listTags","total","length","itemKey","id","itemName","filters","showToast","toastConfig","_params$container","overrideShowToast","emit","remove","optimisticActions","CollectionOptimisticActions","orderBy","sort","fieldName","createdDate","Date","valueOf","order","makeObservable","init","createTag","updateTag","deleteTag","_isFqdnValid","disposers","initTask","runOnce","status","promise","forEach","disposer","hasMore","fetchedLastPage","loadMore","fetchNextPageIfNeeded","isError","isLoading","isIdle","isSuccessful","isSuccess","fqdnToString","getTagById","tagId","_this$collection$resu","_keyedItemsMap","get","item","getTagNameById","_this$getTagById","resource","_optimisticActionBaseParams","optimisticActionParams","tagsBIReporter","actionName","origin","tagName","filteredListSize","isFromSearch","errorCode","onTryAgain","onUndo","otherOptimisticActionParams","internalMonitor","reportError","WixPatternsError","originalException","category","tagsLimit","hasReachedTagsLimit","showTagsLimitErrorToast","visualType","excessCount","Math","max","getTagsReachedLimitErrorMessage","biName","type","tagSubOrigin","uuid","onSuccess","onAction","newTag","createOne","submit","serverCreatedTag","tag","createTagErrors","retryFn","refreshAllPages","tagToUpdate","previousName","updateOne","revision","toString","updatedTag","tagToDelete","deleteOne"],"sources":["../../../../src/state/TagsState/TagsManagementState.ts"],"sourcesContent":["import { action, makeObservable } from 'mobx';\nimport {\n Tag,\n TagExposure,\n} from '@wix/bex-utils/@wix/ambassador-os-tags-v1-tag/types';\nimport { TagsBIReporter } from './TagsBIReporter';\nimport { v4 as uuid } from 'uuid';\nimport { EventEmitter } from 'events';\nimport { WixPatternsContainer } from '../WixPatternsContainer';\nimport { Fqdn, ToastConfig } from '../../model';\nimport { CollectionState } from '../CollectionState';\nimport { CollectionOptimisticActions } from '../CollectionOptimisticActions';\nimport { TaskState } from '../TaskState';\nimport { fqdnToString, TagErrorVisualType, TypedEmitter } from '../../util';\nimport { WixPatternsError, WixPatternsErrorCode } from '../../services';\nimport {\n CreateManyParams,\n DeleteManyParams,\n OptimisticActionBasis,\n UpdateManyParams,\n} from '../OptimisticActions';\nimport {\n createTagErrors,\n getTagsReachedLimitErrorMessage,\n} from '../../services/tagsService/createTagErrors';\nimport { TagsService } from '../../services/tagsService';\nimport type { errorHandler } from '@wix/essentials';\n\nexport const TAG_MAX_LENGTH = 30;\nconst MAX_TAGS = 1000;\nconst TAGS_PAGE_SIZE = 100;\n\n// Pre-cursor tag creation ceiling (restored from before pagination, unrelated to page size)\nconst LEGACY_MAX_TAGS = 100;\n\nexport interface TagsManagementStateParams {\n readonly container: WixPatternsContainer;\n readonly fqdn: Fqdn;\n}\n\nexport class TagsManagementState {\n readonly collection: CollectionState<Tag>;\n readonly optimisticActions: CollectionOptimisticActions<Tag, {}>;\n readonly container;\n readonly fqdn;\n readonly initTask = new TaskState();\n readonly tagsService;\n readonly events = new EventEmitter() as TypedEmitter<{\n showToast: (toastConfig: ToastConfig) => unknown;\n hideToast: (toastConfig: ToastConfig) => unknown;\n }>;\n overrideShowToast = false;\n _resolvedListTagsError?: errorHandler.ResolvedError;\n readonly shouldAllowTagsPagination: boolean;\n\n constructor(params: TagsManagementStateParams) {\n this.container = params.container;\n this.fqdn = params.fqdn;\n this.tagsService = new TagsService({\n container: this.container,\n });\n this.shouldAllowTagsPagination =\n !!params.container.internalExperiments?.enabled(\n 'specs.cairo.TagsPagination',\n );\n\n this.collection = new CollectionState<Tag>({\n ...params.container,\n limit: TAGS_PAGE_SIZE,\n events: {\n onError: (error) => {\n this._resolvedListTagsError =\n this.container.errorHandler.getResolvedError?.(error.err);\n },\n },\n paginationMode: this.shouldAllowTagsPagination ? 'cursor' : undefined,\n queryName: [this.fqdnString, 'tags'].join('/'),\n fetchData: async ({ cursor, limit, search }) => {\n if (this.shouldAllowTagsPagination) {\n const result = await this.tagsService.queryTags(\n {\n fqdn: this.fqdnString,\n exposure: TagExposure.PRIVATE,\n query: {\n cursorPaging: { limit, cursor: cursor ?? undefined },\n ...(search\n ? { filter: { name: { $startsWith: search } } }\n : {}),\n },\n },\n {},\n {\n serverErrorOverride: () => ({\n message: this.container.translate(\n 'cairo.tags.collectionPage.popover.loadTags.error.body',\n ),\n action: {\n text: this.container.translate(\n 'cairo.tags.loadTags.error.CTA',\n ),\n onClick: () => this.retry(),\n },\n }),\n },\n );\n return {\n items: result.items,\n cursor: result.cursor,\n hasNext: result.hasNext,\n };\n }\n\n const fetchedItems = await this.tagsService.listTags(\n {\n fqdn: this.fqdnString,\n exposure: TagExposure.PRIVATE,\n },\n {},\n {\n serverErrorOverride: () => ({\n message: this.container.translate(\n 'cairo.tags.collectionPage.popover.loadTags.error.body',\n ),\n action: {\n text: this.container.translate('cairo.tags.loadTags.error.CTA'),\n onClick: () => this.retry(),\n },\n }),\n },\n );\n return { items: fetchedItems, total: fetchedItems.length };\n },\n itemKey: ({ id }) => id!,\n itemName: ({ name }) => name!,\n filters: {},\n showToast: (toastConfig: ToastConfig) => {\n if (this.overrideShowToast) {\n this.events.emit('showToast', toastConfig);\n return {\n remove: () => {\n this.events.emit('hideToast', toastConfig);\n },\n };\n }\n if (params?.container?.showToast) {\n return params.container.showToast(toastConfig);\n }\n return { remove: () => {} };\n },\n });\n\n this.optimisticActions = new CollectionOptimisticActions<Tag, {}>({\n container: this.container,\n collection: this.collection,\n orderBy: ({ sort }) => [\n ...(sort || []),\n {\n fieldName: ({ createdDate }) => (createdDate ?? new Date()).valueOf(),\n order: 'asc',\n },\n ],\n });\n\n makeObservable(this, {\n init: action,\n createTag: action,\n updateTag: action,\n deleteTag: action,\n retry: action,\n });\n }\n\n init() {\n if (!this._isFqdnValid()) {\n return;\n }\n\n const { collection, optimisticActions } = this;\n\n const disposers = [collection.init(), optimisticActions.init()];\n\n this.initTask.runOnce(async () => {\n collection.initTask.runOnce();\n\n await collection.initTask.status.promise;\n });\n\n return () => {\n disposers.forEach((disposer) => disposer());\n };\n }\n\n retry() {\n this.collection.initTask.runOnce();\n }\n\n get items() {\n return this.collection.result.items ?? [];\n }\n\n get hasMore() {\n return !this.collection.fetchedLastPage;\n }\n\n async loadMore() {\n await this.collection.fetchNextPageIfNeeded();\n }\n\n get isError() {\n return this.initTask.status.isError;\n }\n\n get error() {\n return this._resolvedListTagsError;\n }\n\n get isLoading() {\n const { status } = this.collection.initTask;\n return status.isIdle || status.isLoading;\n }\n\n get isSuccessful() {\n const { status } = this.collection.initTask;\n return status.isSuccess;\n }\n\n get fqdnString() {\n return fqdnToString(this.fqdn);\n }\n\n getTagById(tagId: string) {\n return this.collection.result._keyedItemsMap?.get(tagId)?.item;\n }\n\n getTagNameById(tagId: string) {\n return this.getTagById(tagId)?.name;\n }\n\n private _isFqdnValid() {\n return this.fqdn.resource !== undefined;\n }\n\n private _optimisticActionBaseParams<T extends OptimisticActionBasis>(\n optimisticActionParams: T,\n {\n tagsBIReporter,\n actionName,\n origin,\n tagName,\n filteredListSize,\n isFromSearch = false,\n errorCode,\n }: {\n tagsBIReporter: TagsBIReporter;\n actionName: string;\n origin: string;\n tagName: string;\n filteredListSize: number;\n isFromSearch?: boolean;\n errorCode: WixPatternsErrorCode;\n },\n ) {\n const { onError, onTryAgain, onUndo, ...otherOptimisticActionParams } =\n optimisticActionParams;\n\n return {\n onError: (error: unknown) => {\n tagsBIReporter.onError(\n {\n tagName,\n actionName,\n origin,\n },\n error,\n );\n this.container.internalMonitor.reportError({\n error: new WixPatternsError({\n errorCode,\n originalException: error,\n }),\n category: 'Tags',\n });\n\n onError?.(error);\n },\n onTryAgain: () => {\n tagsBIReporter.onTryAgain({\n actionName,\n isFromSearch,\n filteredListSize,\n });\n onTryAgain?.();\n },\n onUndo: () => {\n tagsBIReporter.onUndo({ actionName });\n onUndo?.();\n },\n ...otherOptimisticActionParams,\n };\n }\n\n private get tagsLimit() {\n return this.shouldAllowTagsPagination ? MAX_TAGS : LEGACY_MAX_TAGS;\n }\n\n private hasReachedTagsLimit() {\n return !this.hasMore && this.items.length >= this.tagsLimit;\n }\n\n private showTagsLimitErrorToast(visualType: TagErrorVisualType) {\n const excessCount = Math.max(1, this.items.length - this.tagsLimit + 1);\n this.collection.showToast({\n message: getTagsReachedLimitErrorMessage({\n visualType,\n translate: this.container.translate,\n excessCount,\n limit: this.tagsLimit,\n }),\n biName: 'cairo-max-tags-error',\n type: 'ERROR',\n });\n }\n\n async createTag(params: {\n name: string;\n origin: string;\n tagSubOrigin?: string;\n filteredListSize: number;\n id?: string;\n isFromSearch?: boolean;\n onSuccess?: (tag: Tag) => void | Promise<void>;\n optimisticActionParams?: Partial<CreateManyParams<Tag>>;\n tagsBIReporter: TagsBIReporter;\n visualType?: TagErrorVisualType;\n }) {\n const {\n name,\n origin,\n tagSubOrigin,\n filteredListSize,\n id = uuid(),\n isFromSearch = false,\n onSuccess,\n optimisticActionParams = {},\n tagsBIReporter,\n visualType = 'toast',\n } = params;\n\n const actionName = 'Add tag';\n\n tagsBIReporter.onAction({\n tagName: name,\n isFromSearch,\n actionName,\n origin,\n tagSubOrigin,\n });\n\n if (this.hasReachedTagsLimit()) {\n return this.showTagsLimitErrorToast(visualType);\n }\n\n const newTag = {\n id,\n name,\n fqdn: this.fqdnString,\n exposure: TagExposure.PRIVATE,\n createdDate: new Date(),\n };\n\n this.optimisticActions.createOne(newTag, {\n submit: async () => {\n const serverCreatedTag = await this.tagsService.createTag(\n {\n tag: newTag,\n },\n createTagErrors({\n translate: this.container.translate,\n visualType,\n retryFn: () => this.createTag(params),\n excessCount: Math.max(1, this.items.length - this.tagsLimit + 1),\n limit: this.tagsLimit,\n }),\n );\n\n await onSuccess?.(serverCreatedTag);\n\n if (this.shouldAllowTagsPagination) {\n // intentional fire-and-forget: optimistic state is already applied\n void this.collection.refreshAllPages();\n }\n\n return [serverCreatedTag];\n },\n ...this._optimisticActionBaseParams(optimisticActionParams, {\n tagsBIReporter,\n actionName,\n origin,\n filteredListSize,\n tagName: name,\n isFromSearch,\n errorCode: 'CreateTagFailed',\n }),\n });\n }\n\n async updateTag({\n tagToUpdate,\n previousName,\n origin,\n tagSubOrigin,\n filteredListSize,\n isFromSearch = false,\n optimisticActionParams = {},\n tagsBIReporter,\n }: {\n tagToUpdate: Tag;\n previousName: string;\n origin: string;\n tagSubOrigin?: string;\n filteredListSize: number;\n isFromSearch?: boolean;\n optimisticActionParams?: Partial<UpdateManyParams<Tag, {}>>;\n tagsBIReporter: TagsBIReporter;\n }) {\n const actionName = 'Rename tag';\n\n tagsBIReporter.onAction({\n actionName,\n previousName,\n tagName: tagToUpdate.name!,\n isFromSearch,\n origin,\n tagSubOrigin,\n });\n\n this.optimisticActions.updateOne(\n { ...tagToUpdate, revision: (+tagToUpdate.revision! + 1).toString() },\n {\n submit: async () => {\n const updatedTag = await this.tagsService.updateTag({\n tag: tagToUpdate,\n });\n if (this.shouldAllowTagsPagination) {\n // intentional fire-and-forget: optimistic state is already applied\n void this.collection.refreshAllPages();\n }\n return updatedTag;\n },\n ...this._optimisticActionBaseParams(optimisticActionParams, {\n tagsBIReporter,\n actionName,\n origin,\n filteredListSize,\n tagName: previousName,\n isFromSearch,\n errorCode: 'UpdateTagFailed',\n }),\n },\n );\n }\n\n async deleteTag({\n tagToDelete,\n origin,\n tagSubOrigin,\n filteredListSize,\n isFromSearch = true,\n optimisticActionParams = {},\n tagsBIReporter,\n }: {\n tagToDelete: Tag;\n origin: string;\n tagSubOrigin?: string;\n filteredListSize: number;\n isFromSearch?: boolean;\n optimisticActionParams?: Partial<DeleteManyParams<Tag, {}>>;\n tagsBIReporter: TagsBIReporter;\n }) {\n const tagName = tagToDelete.name!;\n const actionName = 'Delete tag';\n\n tagsBIReporter.onAction({\n actionName,\n tagName,\n isFromSearch,\n origin,\n tagSubOrigin,\n });\n\n await this.optimisticActions.deleteOne(tagToDelete, {\n submit: async () => {\n const result = await this.tagsService.deleteTag({\n tagId: tagToDelete.id!,\n });\n if (this.shouldAllowTagsPagination) {\n // intentional fire-and-forget: optimistic state is already applied\n void this.collection.refreshAllPages();\n }\n return result;\n },\n ...this._optimisticActionBaseParams(optimisticActionParams, {\n tagsBIReporter,\n actionName,\n origin,\n tagName,\n filteredListSize,\n isFromSearch,\n errorCode: 'RemoveTagFailed',\n }),\n });\n }\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["_mobx","require","_types","_uuid","_events","_CollectionState","_CollectionOptimisticActions","_TaskState","_util","_services","_createTagErrors","_tagsService","TAG_MAX_LENGTH","exports","MAX_TAGS","LEGACY_MAX_TAGS","TagsManagementState","constructor","params","_params$container$int","_defineProperty2","default","TaskState","EventEmitter","container","fqdn","tagsService","TagsService","shouldAllowTagsPagination","internalExperiments","enabled","collection","CollectionState","limit","events","onError","error","_this$container$error","_this$container$error2","_resolvedListTagsError","errorHandler","getResolvedError","call","err","queryName","fqdnString","join","fetchData","fetchedItems","listTags","exposure","TagExposure","PRIVATE","serverErrorOverride","message","translate","action","text","onClick","retry","items","total","length","itemKey","id","itemName","name","filters","showToast","toastConfig","_params$container","overrideShowToast","emit","remove","optimisticActions","CollectionOptimisticActions","orderBy","sort","fieldName","createdDate","Date","valueOf","order","makeObservable","init","createTag","updateTag","deleteTag","_isFqdnValid","disposers","initTask","runOnce","status","promise","forEach","disposer","result","hasMore","fetchedLastPage","loadMore","fetchNextPageIfNeeded","isError","isLoading","isIdle","isSuccessful","isSuccess","fqdnToString","getTagById","tagId","_this$collection$resu","_keyedItemsMap","get","item","getTagNameById","_this$getTagById","resource","undefined","_optimisticActionBaseParams","optimisticActionParams","tagsBIReporter","actionName","origin","tagName","filteredListSize","isFromSearch","errorCode","onTryAgain","onUndo","otherOptimisticActionParams","internalMonitor","reportError","WixPatternsError","originalException","category","tagsLimit","hasReachedTagsLimit","showTagsLimitErrorToast","visualType","excessCount","Math","max","getTagsReachedLimitErrorMessage","biName","type","tagSubOrigin","uuid","onSuccess","onAction","newTag","createOne","submit","serverCreatedTag","tag","createTagErrors","retryFn","refreshAllPages","tagToUpdate","previousName","updateOne","revision","toString","updatedTag","tagToDelete","deleteOne"],"sources":["../../../../src/state/TagsState/TagsManagementState.ts"],"sourcesContent":["import { action, makeObservable } from 'mobx';\nimport {\n Tag,\n TagExposure,\n} from '@wix/bex-utils/@wix/ambassador-os-tags-v1-tag/types';\nimport { TagsBIReporter } from './TagsBIReporter';\nimport { v4 as uuid } from 'uuid';\nimport { EventEmitter } from 'events';\nimport { WixPatternsContainer } from '../WixPatternsContainer';\nimport { Fqdn, ToastConfig } from '../../model';\nimport { CollectionState } from '../CollectionState';\nimport { CollectionOptimisticActions } from '../CollectionOptimisticActions';\nimport { TaskState } from '../TaskState';\nimport { fqdnToString, TagErrorVisualType, TypedEmitter } from '../../util';\nimport { WixPatternsError, WixPatternsErrorCode } from '../../services';\nimport {\n CreateManyParams,\n DeleteManyParams,\n OptimisticActionBasis,\n UpdateManyParams,\n} from '../OptimisticActions';\nimport {\n createTagErrors,\n getTagsReachedLimitErrorMessage,\n} from '../../services/tagsService/createTagErrors';\nimport { TagsService } from '../../services/tagsService';\nimport type { errorHandler } from '@wix/essentials';\n\nexport const TAG_MAX_LENGTH = 30;\nconst MAX_TAGS = 1000;\n\n// Tag creation ceiling before the TagsPagination experiment raised it\nconst LEGACY_MAX_TAGS = 100;\n\nexport interface TagsManagementStateParams {\n readonly container: WixPatternsContainer;\n readonly fqdn: Fqdn;\n}\n\nexport class TagsManagementState {\n readonly collection: CollectionState<Tag>;\n readonly optimisticActions: CollectionOptimisticActions<Tag, {}>;\n readonly container;\n readonly fqdn;\n readonly initTask = new TaskState();\n readonly tagsService;\n readonly events = new EventEmitter() as TypedEmitter<{\n showToast: (toastConfig: ToastConfig) => unknown;\n hideToast: (toastConfig: ToastConfig) => unknown;\n }>;\n overrideShowToast = false;\n _resolvedListTagsError?: errorHandler.ResolvedError;\n readonly shouldAllowTagsPagination: boolean;\n\n constructor(params: TagsManagementStateParams) {\n this.container = params.container;\n this.fqdn = params.fqdn;\n this.tagsService = new TagsService({\n container: this.container,\n });\n this.shouldAllowTagsPagination =\n !!params.container.internalExperiments?.enabled(\n 'specs.cairo.TagsPagination',\n );\n\n this.collection = new CollectionState<Tag>({\n ...params.container,\n // limit must cover the whole list — fetchData returns all tags in one page,\n // and a smaller limit would make fetchedLastPage (hasMore) miscompute\n limit: MAX_TAGS,\n events: {\n onError: (error) => {\n this._resolvedListTagsError =\n this.container.errorHandler.getResolvedError?.(error.err);\n },\n },\n queryName: [this.fqdnString, 'tags'].join('/'),\n fetchData: async () => {\n const fetchedItems = await this.tagsService.listTags(\n {\n fqdn: this.fqdnString,\n exposure: TagExposure.PRIVATE,\n },\n {},\n {\n serverErrorOverride: () => ({\n message: this.container.translate(\n 'cairo.tags.collectionPage.popover.loadTags.error.body',\n ),\n action: {\n text: this.container.translate('cairo.tags.loadTags.error.CTA'),\n onClick: () => this.retry(),\n },\n }),\n },\n );\n return { items: fetchedItems, total: fetchedItems.length };\n },\n itemKey: ({ id }) => id!,\n itemName: ({ name }) => name!,\n filters: {},\n showToast: (toastConfig: ToastConfig) => {\n if (this.overrideShowToast) {\n this.events.emit('showToast', toastConfig);\n return {\n remove: () => {\n this.events.emit('hideToast', toastConfig);\n },\n };\n }\n if (params?.container?.showToast) {\n return params.container.showToast(toastConfig);\n }\n return { remove: () => {} };\n },\n });\n\n this.optimisticActions = new CollectionOptimisticActions<Tag, {}>({\n container: this.container,\n collection: this.collection,\n orderBy: ({ sort }) => [\n ...(sort || []),\n {\n fieldName: ({ createdDate }) => (createdDate ?? new Date()).valueOf(),\n order: 'asc',\n },\n ],\n });\n\n makeObservable(this, {\n init: action,\n createTag: action,\n updateTag: action,\n deleteTag: action,\n retry: action,\n });\n }\n\n init() {\n if (!this._isFqdnValid()) {\n return;\n }\n\n const { collection, optimisticActions } = this;\n\n const disposers = [collection.init(), optimisticActions.init()];\n\n this.initTask.runOnce(async () => {\n collection.initTask.runOnce();\n\n await collection.initTask.status.promise;\n });\n\n return () => {\n disposers.forEach((disposer) => disposer());\n };\n }\n\n retry() {\n this.collection.initTask.runOnce();\n }\n\n get items() {\n return this.collection.result.items ?? [];\n }\n\n get hasMore() {\n return !this.collection.fetchedLastPage;\n }\n\n async loadMore() {\n await this.collection.fetchNextPageIfNeeded();\n }\n\n get isError() {\n return this.initTask.status.isError;\n }\n\n get error() {\n return this._resolvedListTagsError;\n }\n\n get isLoading() {\n const { status } = this.collection.initTask;\n return status.isIdle || status.isLoading;\n }\n\n get isSuccessful() {\n const { status } = this.collection.initTask;\n return status.isSuccess;\n }\n\n get fqdnString() {\n return fqdnToString(this.fqdn);\n }\n\n getTagById(tagId: string) {\n return this.collection.result._keyedItemsMap?.get(tagId)?.item;\n }\n\n getTagNameById(tagId: string) {\n return this.getTagById(tagId)?.name;\n }\n\n private _isFqdnValid() {\n return this.fqdn.resource !== undefined;\n }\n\n private _optimisticActionBaseParams<T extends OptimisticActionBasis>(\n optimisticActionParams: T,\n {\n tagsBIReporter,\n actionName,\n origin,\n tagName,\n filteredListSize,\n isFromSearch = false,\n errorCode,\n }: {\n tagsBIReporter: TagsBIReporter;\n actionName: string;\n origin: string;\n tagName: string;\n filteredListSize: number;\n isFromSearch?: boolean;\n errorCode: WixPatternsErrorCode;\n },\n ) {\n const { onError, onTryAgain, onUndo, ...otherOptimisticActionParams } =\n optimisticActionParams;\n\n return {\n onError: (error: unknown) => {\n tagsBIReporter.onError(\n {\n tagName,\n actionName,\n origin,\n },\n error,\n );\n this.container.internalMonitor.reportError({\n error: new WixPatternsError({\n errorCode,\n originalException: error,\n }),\n category: 'Tags',\n });\n\n onError?.(error);\n },\n onTryAgain: () => {\n tagsBIReporter.onTryAgain({\n actionName,\n isFromSearch,\n filteredListSize,\n });\n onTryAgain?.();\n },\n onUndo: () => {\n tagsBIReporter.onUndo({ actionName });\n onUndo?.();\n },\n ...otherOptimisticActionParams,\n };\n }\n\n private get tagsLimit() {\n return this.shouldAllowTagsPagination ? MAX_TAGS : LEGACY_MAX_TAGS;\n }\n\n private hasReachedTagsLimit() {\n return !this.hasMore && this.items.length >= this.tagsLimit;\n }\n\n private showTagsLimitErrorToast(visualType: TagErrorVisualType) {\n const excessCount = Math.max(1, this.items.length - this.tagsLimit + 1);\n this.collection.showToast({\n message: getTagsReachedLimitErrorMessage({\n visualType,\n translate: this.container.translate,\n excessCount,\n limit: this.tagsLimit,\n }),\n biName: 'cairo-max-tags-error',\n type: 'ERROR',\n });\n }\n\n async createTag(params: {\n name: string;\n origin: string;\n tagSubOrigin?: string;\n filteredListSize: number;\n id?: string;\n isFromSearch?: boolean;\n onSuccess?: (tag: Tag) => void | Promise<void>;\n optimisticActionParams?: Partial<CreateManyParams<Tag>>;\n tagsBIReporter: TagsBIReporter;\n visualType?: TagErrorVisualType;\n }) {\n const {\n name,\n origin,\n tagSubOrigin,\n filteredListSize,\n id = uuid(),\n isFromSearch = false,\n onSuccess,\n optimisticActionParams = {},\n tagsBIReporter,\n visualType = 'toast',\n } = params;\n\n const actionName = 'Add tag';\n\n tagsBIReporter.onAction({\n tagName: name,\n isFromSearch,\n actionName,\n origin,\n tagSubOrigin,\n });\n\n if (this.hasReachedTagsLimit()) {\n return this.showTagsLimitErrorToast(visualType);\n }\n\n const newTag = {\n id,\n name,\n fqdn: this.fqdnString,\n exposure: TagExposure.PRIVATE,\n createdDate: new Date(),\n };\n\n this.optimisticActions.createOne(newTag, {\n submit: async () => {\n const serverCreatedTag = await this.tagsService.createTag(\n {\n tag: newTag,\n },\n createTagErrors({\n translate: this.container.translate,\n visualType,\n retryFn: () => this.createTag(params),\n excessCount: Math.max(1, this.items.length - this.tagsLimit + 1),\n limit: this.tagsLimit,\n }),\n );\n\n await onSuccess?.(serverCreatedTag);\n\n if (this.shouldAllowTagsPagination) {\n // Re-sync with the server: picks up concurrent edits and lets the\n // optimistic patch clear on the refreshed result (otherwise it\n // lingers until unmount). Fire-and-forget — the UI already shows\n // the change via the optimistic patch.\n void this.collection.refreshAllPages();\n }\n\n return [serverCreatedTag];\n },\n ...this._optimisticActionBaseParams(optimisticActionParams, {\n tagsBIReporter,\n actionName,\n origin,\n filteredListSize,\n tagName: name,\n isFromSearch,\n errorCode: 'CreateTagFailed',\n }),\n });\n }\n\n async updateTag({\n tagToUpdate,\n previousName,\n origin,\n tagSubOrigin,\n filteredListSize,\n isFromSearch = false,\n optimisticActionParams = {},\n tagsBIReporter,\n }: {\n tagToUpdate: Tag;\n previousName: string;\n origin: string;\n tagSubOrigin?: string;\n filteredListSize: number;\n isFromSearch?: boolean;\n optimisticActionParams?: Partial<UpdateManyParams<Tag, {}>>;\n tagsBIReporter: TagsBIReporter;\n }) {\n const actionName = 'Rename tag';\n\n tagsBIReporter.onAction({\n actionName,\n previousName,\n tagName: tagToUpdate.name!,\n isFromSearch,\n origin,\n tagSubOrigin,\n });\n\n this.optimisticActions.updateOne(\n { ...tagToUpdate, revision: (+tagToUpdate.revision! + 1).toString() },\n {\n submit: async () => {\n const updatedTag = await this.tagsService.updateTag({\n tag: tagToUpdate,\n });\n if (this.shouldAllowTagsPagination) {\n // Re-sync with the server: picks up concurrent edits and lets the\n // optimistic patch clear on the refreshed result (otherwise it\n // lingers until unmount). Fire-and-forget — the UI already shows\n // the change via the optimistic patch.\n void this.collection.refreshAllPages();\n }\n return updatedTag;\n },\n ...this._optimisticActionBaseParams(optimisticActionParams, {\n tagsBIReporter,\n actionName,\n origin,\n filteredListSize,\n tagName: previousName,\n isFromSearch,\n errorCode: 'UpdateTagFailed',\n }),\n },\n );\n }\n\n async deleteTag({\n tagToDelete,\n origin,\n tagSubOrigin,\n filteredListSize,\n isFromSearch = true,\n optimisticActionParams = {},\n tagsBIReporter,\n }: {\n tagToDelete: Tag;\n origin: string;\n tagSubOrigin?: string;\n filteredListSize: number;\n isFromSearch?: boolean;\n optimisticActionParams?: Partial<DeleteManyParams<Tag, {}>>;\n tagsBIReporter: TagsBIReporter;\n }) {\n const tagName = tagToDelete.name!;\n const actionName = 'Delete tag';\n\n tagsBIReporter.onAction({\n actionName,\n tagName,\n isFromSearch,\n origin,\n tagSubOrigin,\n });\n\n await this.optimisticActions.deleteOne(tagToDelete, {\n submit: async () => {\n const result = await this.tagsService.deleteTag({\n tagId: tagToDelete.id!,\n });\n if (this.shouldAllowTagsPagination) {\n // Re-sync with the server: picks up concurrent edits and lets the\n // optimistic patch clear on the refreshed result (otherwise it\n // lingers until unmount). Fire-and-forget — the UI already shows\n // the change via the optimistic patch.\n void this.collection.refreshAllPages();\n }\n return result;\n },\n ...this._optimisticActionBaseParams(optimisticActionParams, {\n tagsBIReporter,\n actionName,\n origin,\n tagName,\n filteredListSize,\n isFromSearch,\n errorCode: 'RemoveTagFailed',\n }),\n });\n }\n}\n"],"mappings":"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","ignoreList":[]}
@@ -14,9 +14,6 @@ class TagsSearchState {
14
14
  (0, _defineProperty2.default)(this, "searchValue", '');
15
15
  (0, _defineProperty2.default)(this, "setSearchValue", newSearchValue => {
16
16
  this.searchValue = newSearchValue;
17
- if (this.tagsManagementState.shouldAllowTagsPagination) {
18
- this.tagsManagementState.collection.search(newSearchValue.substring(0, _TagsManagementState.TAG_MAX_LENGTH));
19
- }
20
17
  });
21
18
  this.tagsManagementState = tagsManagementState;
22
19
  (0, _mobx.makeObservable)(this, {
@@ -27,9 +24,6 @@ class TagsSearchState {
27
24
  });
28
25
  }
29
26
  get items() {
30
- if (this.tagsManagementState.shouldAllowTagsPagination) {
31
- return this.tagsManagementState.items;
32
- }
33
27
  if (!this.searchValue) {
34
28
  return this.tagsManagementState.items;
35
29
  }
@@ -1 +1 @@
1
- {"version":3,"names":["_TagsManagementState","require","_mobx","TagsSearchState","constructor","tagsManagementState","_defineProperty2","default","newSearchValue","searchValue","shouldAllowTagsPagination","collection","search","substring","TAG_MAX_LENGTH","makeObservable","observable","setSearchValue","action","items","computed","hasSameTagAsSearch","filtered","filter","tag","name","toLowerCase","includes","length","truncated","find","term","some","exports"],"sources":["../../../../src/state/TagsState/TagsSearchState.ts"],"sourcesContent":["import { TAG_MAX_LENGTH, TagsManagementState } from './TagsManagementState';\nimport { action, makeObservable, observable, computed } from 'mobx';\n\nexport interface TagsSearchStateParams {\n readonly tagsManagementState: TagsManagementState;\n}\n\nexport class TagsSearchState {\n readonly tagsManagementState: TagsManagementState;\n searchValue: string = '';\n\n constructor({ tagsManagementState }: TagsSearchStateParams) {\n this.tagsManagementState = tagsManagementState;\n makeObservable(this, {\n searchValue: observable,\n setSearchValue: action,\n items: computed,\n hasSameTagAsSearch: computed,\n });\n }\n\n setSearchValue = (newSearchValue: string) => {\n this.searchValue = newSearchValue;\n if (this.tagsManagementState.shouldAllowTagsPagination) {\n this.tagsManagementState.collection.search(\n newSearchValue.substring(0, TAG_MAX_LENGTH),\n );\n }\n };\n\n get items() {\n if (this.tagsManagementState.shouldAllowTagsPagination) {\n return this.tagsManagementState.items;\n }\n\n if (!this.searchValue) {\n return this.tagsManagementState.items;\n }\n\n const filtered = this.tagsManagementState.items.filter((tag) =>\n tag.name!.toLowerCase().includes(this.searchValue.toLowerCase()),\n );\n\n if (filtered.length === 0 && this.searchValue.length > TAG_MAX_LENGTH) {\n const truncated = this.tagsManagementState.items.find(\n (tag) =>\n tag.name!.toLowerCase() ===\n this.searchValue.substring(0, TAG_MAX_LENGTH).toLowerCase(),\n );\n if (truncated) {\n return [truncated];\n }\n }\n\n return filtered;\n }\n\n get hasSameTagAsSearch() {\n const term = this.searchValue.substring(0, TAG_MAX_LENGTH).toLowerCase();\n return this.tagsManagementState.items.some(\n (tag) => tag.name!.toLowerCase() === term,\n );\n }\n}\n"],"mappings":";;;;;;AAAA,IAAAA,oBAAA,GAAAC,OAAA;AACA,IAAAC,KAAA,GAAAD,OAAA;AAMO,MAAME,eAAe,CAAC;EAI3BC,WAAWA,CAAC;IAAEC;EAA2C,CAAC,EAAE;IAAA,IAAAC,gBAAA,CAAAC,OAAA;IAAA,IAAAD,gBAAA,CAAAC,OAAA,uBAFtC,EAAE;IAAA,IAAAD,gBAAA,CAAAC,OAAA,0BAYNC,cAAsB,IAAK;MAC3C,IAAI,CAACC,WAAW,GAAGD,cAAc;MACjC,IAAI,IAAI,CAACH,mBAAmB,CAACK,yBAAyB,EAAE;QACtD,IAAI,CAACL,mBAAmB,CAACM,UAAU,CAACC,MAAM,CACxCJ,cAAc,CAACK,SAAS,CAAC,CAAC,EAAEC,mCAAc,CAC5C,CAAC;MACH;IACF,CAAC;IAhBC,IAAI,CAACT,mBAAmB,GAAGA,mBAAmB;IAC9C,IAAAU,oBAAc,EAAC,IAAI,EAAE;MACnBN,WAAW,EAAEO,gBAAU;MACvBC,cAAc,EAAEC,YAAM;MACtBC,KAAK,EAAEC,cAAQ;MACfC,kBAAkB,EAAED;IACtB,CAAC,CAAC;EACJ;EAWA,IAAID,KAAKA,CAAA,EAAG;IACV,IAAI,IAAI,CAACd,mBAAmB,CAACK,yBAAyB,EAAE;MACtD,OAAO,IAAI,CAACL,mBAAmB,CAACc,KAAK;IACvC;IAEA,IAAI,CAAC,IAAI,CAACV,WAAW,EAAE;MACrB,OAAO,IAAI,CAACJ,mBAAmB,CAACc,KAAK;IACvC;IAEA,MAAMG,QAAQ,GAAG,IAAI,CAACjB,mBAAmB,CAACc,KAAK,CAACI,MAAM,CAAEC,GAAG,IACzDA,GAAG,CAACC,IAAI,CAAEC,WAAW,CAAC,CAAC,CAACC,QAAQ,CAAC,IAAI,CAAClB,WAAW,CAACiB,WAAW,CAAC,CAAC,CACjE,CAAC;IAED,IAAIJ,QAAQ,CAACM,MAAM,KAAK,CAAC,IAAI,IAAI,CAACnB,WAAW,CAACmB,MAAM,GAAGd,mCAAc,EAAE;MACrE,MAAMe,SAAS,GAAG,IAAI,CAACxB,mBAAmB,CAACc,KAAK,CAACW,IAAI,CAClDN,GAAG,IACFA,GAAG,CAACC,IAAI,CAAEC,WAAW,CAAC,CAAC,KACvB,IAAI,CAACjB,WAAW,CAACI,SAAS,CAAC,CAAC,EAAEC,mCAAc,CAAC,CAACY,WAAW,CAAC,CAC9D,CAAC;MACD,IAAIG,SAAS,EAAE;QACb,OAAO,CAACA,SAAS,CAAC;MACpB;IACF;IAEA,OAAOP,QAAQ;EACjB;EAEA,IAAID,kBAAkBA,CAAA,EAAG;IACvB,MAAMU,IAAI,GAAG,IAAI,CAACtB,WAAW,CAACI,SAAS,CAAC,CAAC,EAAEC,mCAAc,CAAC,CAACY,WAAW,CAAC,CAAC;IACxE,OAAO,IAAI,CAACrB,mBAAmB,CAACc,KAAK,CAACa,IAAI,CACvCR,GAAG,IAAKA,GAAG,CAACC,IAAI,CAAEC,WAAW,CAAC,CAAC,KAAKK,IACvC,CAAC;EACH;AACF;AAACE,OAAA,CAAA9B,eAAA,GAAAA,eAAA","ignoreList":[]}
1
+ {"version":3,"names":["_TagsManagementState","require","_mobx","TagsSearchState","constructor","tagsManagementState","_defineProperty2","default","newSearchValue","searchValue","makeObservable","observable","setSearchValue","action","items","computed","hasSameTagAsSearch","filtered","filter","tag","name","toLowerCase","includes","length","TAG_MAX_LENGTH","truncated","find","substring","term","some","exports"],"sources":["../../../../src/state/TagsState/TagsSearchState.ts"],"sourcesContent":["import { TAG_MAX_LENGTH, TagsManagementState } from './TagsManagementState';\nimport { action, makeObservable, observable, computed } from 'mobx';\n\nexport interface TagsSearchStateParams {\n readonly tagsManagementState: TagsManagementState;\n}\n\nexport class TagsSearchState {\n readonly tagsManagementState: TagsManagementState;\n searchValue: string = '';\n\n constructor({ tagsManagementState }: TagsSearchStateParams) {\n this.tagsManagementState = tagsManagementState;\n makeObservable(this, {\n searchValue: observable,\n setSearchValue: action,\n items: computed,\n hasSameTagAsSearch: computed,\n });\n }\n\n setSearchValue = (newSearchValue: string) => {\n this.searchValue = newSearchValue;\n };\n\n get items() {\n if (!this.searchValue) {\n return this.tagsManagementState.items;\n }\n\n const filtered = this.tagsManagementState.items.filter((tag) =>\n tag.name!.toLowerCase().includes(this.searchValue.toLowerCase()),\n );\n\n if (filtered.length === 0 && this.searchValue.length > TAG_MAX_LENGTH) {\n const truncated = this.tagsManagementState.items.find(\n (tag) =>\n tag.name!.toLowerCase() ===\n this.searchValue.substring(0, TAG_MAX_LENGTH).toLowerCase(),\n );\n if (truncated) {\n return [truncated];\n }\n }\n\n return filtered;\n }\n\n get hasSameTagAsSearch() {\n const term = this.searchValue.substring(0, TAG_MAX_LENGTH).toLowerCase();\n return this.tagsManagementState.items.some(\n (tag) => tag.name!.toLowerCase() === term,\n );\n }\n}\n"],"mappings":";;;;;;AAAA,IAAAA,oBAAA,GAAAC,OAAA;AACA,IAAAC,KAAA,GAAAD,OAAA;AAMO,MAAME,eAAe,CAAC;EAI3BC,WAAWA,CAAC;IAAEC;EAA2C,CAAC,EAAE;IAAA,IAAAC,gBAAA,CAAAC,OAAA;IAAA,IAAAD,gBAAA,CAAAC,OAAA,uBAFtC,EAAE;IAAA,IAAAD,gBAAA,CAAAC,OAAA,0BAYNC,cAAsB,IAAK;MAC3C,IAAI,CAACC,WAAW,GAAGD,cAAc;IACnC,CAAC;IAXC,IAAI,CAACH,mBAAmB,GAAGA,mBAAmB;IAC9C,IAAAK,oBAAc,EAAC,IAAI,EAAE;MACnBD,WAAW,EAAEE,gBAAU;MACvBC,cAAc,EAAEC,YAAM;MACtBC,KAAK,EAAEC,cAAQ;MACfC,kBAAkB,EAAED;IACtB,CAAC,CAAC;EACJ;EAMA,IAAID,KAAKA,CAAA,EAAG;IACV,IAAI,CAAC,IAAI,CAACL,WAAW,EAAE;MACrB,OAAO,IAAI,CAACJ,mBAAmB,CAACS,KAAK;IACvC;IAEA,MAAMG,QAAQ,GAAG,IAAI,CAACZ,mBAAmB,CAACS,KAAK,CAACI,MAAM,CAAEC,GAAG,IACzDA,GAAG,CAACC,IAAI,CAAEC,WAAW,CAAC,CAAC,CAACC,QAAQ,CAAC,IAAI,CAACb,WAAW,CAACY,WAAW,CAAC,CAAC,CACjE,CAAC;IAED,IAAIJ,QAAQ,CAACM,MAAM,KAAK,CAAC,IAAI,IAAI,CAACd,WAAW,CAACc,MAAM,GAAGC,mCAAc,EAAE;MACrE,MAAMC,SAAS,GAAG,IAAI,CAACpB,mBAAmB,CAACS,KAAK,CAACY,IAAI,CAClDP,GAAG,IACFA,GAAG,CAACC,IAAI,CAAEC,WAAW,CAAC,CAAC,KACvB,IAAI,CAACZ,WAAW,CAACkB,SAAS,CAAC,CAAC,EAAEH,mCAAc,CAAC,CAACH,WAAW,CAAC,CAC9D,CAAC;MACD,IAAII,SAAS,EAAE;QACb,OAAO,CAACA,SAAS,CAAC;MACpB;IACF;IAEA,OAAOR,QAAQ;EACjB;EAEA,IAAID,kBAAkBA,CAAA,EAAG;IACvB,MAAMY,IAAI,GAAG,IAAI,CAACnB,WAAW,CAACkB,SAAS,CAAC,CAAC,EAAEH,mCAAc,CAAC,CAACH,WAAW,CAAC,CAAC;IACxE,OAAO,IAAI,CAAChB,mBAAmB,CAACS,KAAK,CAACe,IAAI,CACvCV,GAAG,IAAKA,GAAG,CAACC,IAAI,CAAEC,WAAW,CAAC,CAAC,KAAKO,IACvC,CAAC;EACH;AACF;AAACE,OAAA,CAAA3B,eAAA,GAAAA,eAAA","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"names":[],"sources":["../../../src/types/FieldsSource.ts"],"sourcesContent":["import type { Field, PatternsFieldType } from './Field';\nimport type { FieldActions } from './Schema';\n\n/** A field the source has archived. Sources without archiving omit `archive`. */\nexport interface ArchivedFieldItem {\n id: string;\n label: string;\n isPii?: boolean;\n}\n\n/** A field type a source allows creating, with display metadata for the modal. */\nexport interface FieldTypeOption {\n /** Stored on the draft; the source maps it back to its native type. */\n id: string;\n label: string;\n namePlaceholder?: string;\n /** Drives the type icon in the modal. */\n patternsType: PatternsFieldType;\n}\n\n/** Read/write permission defaults a source supports, per audience. */\nexport interface FieldPermissions {\n installedApps?: {\n hide?: boolean;\n defaultRead?: boolean;\n defaultWrite?: boolean;\n };\n siteVisitors?: {\n hide?: boolean;\n defaultRead?: boolean;\n defaultWrite?: boolean;\n };\n}\n\n/** The values the add/edit field modal collects, source-neutral. */\nexport interface FieldDraft {\n type?: string;\n key: string;\n name: string;\n readApps: boolean;\n readUsers: boolean;\n writeApps: boolean;\n writeUsers: boolean;\n containsPii: boolean;\n}\n\n/** Add/edit/delete capability a source exposes. Present ⇒ field management UI shows. */\nexport interface FieldManagement {\n /** False ⇒ the add-field CTA is hidden entirely. */\n canAddFields: boolean;\n /** True ⇒ the add-field CTA renders but is disabled. */\n addFieldDisabled: boolean;\n /** Hint text shown beneath the add-field CTA while it is disabled. */\n addFieldDisabledHint?: string;\n canEditField(field: Field): boolean;\n /** `origin` is the UI surface the delete was triggered from; used for BI. */\n deleteField(fieldId: string, origin: string): Promise<void>;\n\n /** Field types the source allows creating, shown in the add/edit modal. */\n creatableFieldTypes: FieldTypeOption[];\n /** Existing field keys, used by the add modal to reject duplicates. */\n existingFieldKeys: string[];\n /** True when no more fields can be added because a limit is reached. */\n maxReached?: boolean;\n /** Permission defaults; absent ⇒ the modal hides the permissions section. */\n permissions?: FieldPermissions;\n /** True when the source supports marking a field as PII. */\n supportsPii?: boolean;\n addField(draft: FieldDraft): Promise<void>;\n editField(fieldId: string, draft: FieldDraft): Promise<void>;\n /** Current values for an existing field, to prefill the edit modal. */\n getFieldDraft(fieldId: string): FieldDraft | undefined;\n}\n\n/** Archiving capability a source exposes. Present ⇒ archive/restore UI shows. */\nexport interface FieldArchive {\n items: ArchivedFieldItem[];\n shouldDisplay: boolean;\n /** Whether the archived-items panel is currently open. */\n isOpen: boolean;\n openPanel(): void;\n closePanel(): void;\n /** `origin` is the UI surface the action was triggered from; used for BI. */\n archiveField(fieldId: string, origin: string): Promise<void>;\n restoreField(fieldId: string, origin: string): Promise<void>;\n /** Display name for a field, for the confirm-dialog copy. */\n fieldName(fieldId: string): string;\n}\n\n/**\n * The source-neutral fields data a collection reads, implemented by each source\n * adapter. Rendering — field modals, filter elements — is not here; it lives in\n * the collection-page layer.\n */\nexport interface FieldsSource {\n /** Loads the fields (schema/data). The collection runs this once, tracks its\n * status, and shows a retry toast on failure. */\n load(): Promise<void>;\n\n fields: Field[];\n filterableFields: Field[];\n /** The fields the manage-fields panel lists — the source's editable fields. */\n manageableFields: Field[];\n /** Column id for a field. Sources that group fields prefix the group; flat sources use the field key. */\n columnIdForField(field: Field): string;\n /** WQL field path for a filter. Sources that group fields prefix the group; flat sources use the field key. */\n queryFieldId(field: Field): string;\n /** The value to display for a field on a row. */\n getCellValue(row: unknown, field: Field): unknown;\n /** Writes a new value for a field on a row, returning the updated row. Present when cells can be edited in place. */\n setCellValue?(row: unknown, field: Field, value: unknown): unknown;\n\n /** Present when fields can be added/edited/deleted. */\n fieldManagement?: FieldManagement;\n\n /** The collection's field-mutation actions (delete/makePrimary/duplicate/…),\n * driving the shared FieldActions menu. Absent ⇒ no per-field action menu. */\n fieldActions?: FieldActions;\n\n /** Present when the source supports archiving fields. */\n archive?: FieldArchive;\n\n /** Present when fields are grouped. Absent ⇒ flat list. */\n groups?: {\n all: string[];\n fieldsForGroup(group: string): Field[];\n };\n}\n"],"mappings":"","ignoreList":[]}
1
+ {"version":3,"names":[],"sources":["../../../src/types/FieldsSource.ts"],"sourcesContent":["import type { Field, PatternsFieldType } from './Field';\nimport type { FieldActions, Schema } from './Schema';\n\n/** A field the source has archived. Sources without archiving omit `archive`. */\nexport interface ArchivedFieldItem {\n id: string;\n label: string;\n isPii?: boolean;\n}\n\n/** A field type a source allows creating, with display metadata for the modal. */\nexport interface FieldTypeOption {\n /** Stored on the draft; the source maps it back to its native type. */\n id: string;\n label: string;\n namePlaceholder?: string;\n /** Drives the type icon in the modal. */\n patternsType: PatternsFieldType;\n}\n\n/** Read/write permission defaults a source supports, per audience. */\nexport interface FieldPermissions {\n installedApps?: {\n hide?: boolean;\n defaultRead?: boolean;\n defaultWrite?: boolean;\n };\n siteVisitors?: {\n hide?: boolean;\n defaultRead?: boolean;\n defaultWrite?: boolean;\n };\n}\n\n/** The values the add/edit field modal collects, source-neutral. */\nexport interface FieldDraft {\n type?: string;\n key: string;\n name: string;\n readApps: boolean;\n readUsers: boolean;\n writeApps: boolean;\n writeUsers: boolean;\n containsPii: boolean;\n}\n\n/** Add/edit/delete capability a source exposes. Present ⇒ field management UI shows. */\nexport interface FieldManagement {\n /** False ⇒ the add-field CTA is hidden entirely. */\n canAddFields: boolean;\n /** True ⇒ the add-field CTA renders but is disabled. */\n addFieldDisabled: boolean;\n /** Hint text shown beneath the add-field CTA while it is disabled. */\n addFieldDisabledHint?: string;\n canEditField(field: Field): boolean;\n /** `origin` is the UI surface the delete was triggered from; used for BI. */\n deleteField(fieldId: string, origin: string): Promise<void>;\n\n /** Field types the source allows creating, shown in the add/edit modal. */\n creatableFieldTypes: FieldTypeOption[];\n /** Existing field keys, used by the add modal to reject duplicates. */\n existingFieldKeys: string[];\n /** True when no more fields can be added because a limit is reached. */\n maxReached?: boolean;\n /** Permission defaults; absent ⇒ the modal hides the permissions section. */\n permissions?: FieldPermissions;\n /** True when the source supports marking a field as PII. */\n supportsPii?: boolean;\n addField(draft: FieldDraft): Promise<void>;\n editField(fieldId: string, draft: FieldDraft): Promise<void>;\n /** Current values for an existing field, to prefill the edit modal. */\n getFieldDraft(fieldId: string): FieldDraft | undefined;\n}\n\n/** Archiving capability a source exposes. Present ⇒ archive/restore UI shows. */\nexport interface FieldArchive {\n items: ArchivedFieldItem[];\n shouldDisplay: boolean;\n /** Whether the archived-items panel is currently open. */\n isOpen: boolean;\n openPanel(): void;\n closePanel(): void;\n /** `origin` is the UI surface the action was triggered from; used for BI. */\n archiveField(fieldId: string, origin: string): Promise<void>;\n restoreField(fieldId: string, origin: string): Promise<void>;\n /** Display name for a field, for the confirm-dialog copy. */\n fieldName(fieldId: string): string;\n}\n\n/**\n * The source-neutral fields data a collection reads, implemented by each source\n * adapter. Rendering — field modals, filter elements — is not here; it lives in\n * the collection-page layer.\n */\nexport interface FieldsSource {\n /** Loads the fields (schema/data). The collection runs this once, tracks its\n * status, and shows a retry toast on failure. */\n load(): Promise<void>;\n\n fields: Field[];\n filterableFields: Field[];\n /** The fields the manage-fields panel lists — the source's editable fields. */\n manageableFields: Field[];\n /** Column id for a field. Sources that group fields prefix the group; flat sources use the field key. */\n columnIdForField(field: Field): string;\n /** WQL field path for a filter. Sources that group fields prefix the group; flat sources use the field key. */\n queryFieldId(field: Field): string;\n /** The value to display for a field on a row. */\n getCellValue(row: unknown, field: Field): unknown;\n /** Writes a new value for a field on a row, returning the updated row. Present when cells can be edited in place. */\n setCellValue?(row: unknown, field: Field, value: unknown): unknown;\n\n /** Replaces the source's fields with a freshly-returned map, updating the\n * columns with no refetch. Present when the source holds its fields in a\n * mergeable state (e.g. a loaded schema); used after an import creates fields. */\n mergeFields?(fields: Schema['fields']): void;\n\n /** Present when fields can be added/edited/deleted. */\n fieldManagement?: FieldManagement;\n\n /** The collection's field-mutation actions (delete/makePrimary/duplicate/…),\n * driving the shared FieldActions menu. Absent ⇒ no per-field action menu. */\n fieldActions?: FieldActions;\n\n /** Present when the source supports archiving fields. */\n archive?: FieldArchive;\n\n /** Present when fields are grouped. Absent ⇒ flat list. */\n groups?: {\n all: string[];\n fieldsForGroup(group: string): Field[];\n };\n}\n"],"mappings":"","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"names":[],"sources":["../../../src/types/Schema.ts"],"sourcesContent":["import type { Field } from './Field';\nimport type { FiltersMap, OptionalFiltersMap } from '../model';\nimport type {\n OffsetQuery,\n OffsetQueryResult,\n CursorQuery,\n CursorQueryResult,\n FetchTotalFn,\n} from '../hooks/paginationModeConfig';\n\n/** Field-management permissions. Absent when the schema's fields cannot be edited. */\nexport interface SchemaPermissions {\n createField: boolean;\n updateField: boolean;\n deleteField: boolean;\n}\n\n/** Item-level CRUD permissions. */\nexport interface ItemPermissions {\n createItem: boolean;\n updateItem: boolean;\n deleteItem: boolean;\n}\n\n/**\n * A source-neutral description of a collection — data only, no behavior.\n * Item access is in `CollectionBackend`, field mutations in `FieldActions`.\n */\nexport interface Schema {\n id: string;\n fields: Record<string, Field | undefined>;\n /** The field that best represents the entity (titles/selections). */\n displayField: string;\n /** The identifier field. */\n idField: string;\n /** Absent when the schema's fields cannot be edited. */\n schemaPermissions?: SchemaPermissions;\n itemPermissions?: ItemPermissions;\n}\n\nexport interface BackupConfig {\n create: () => Promise<{ backupId: string }>;\n waitForCompletion: (\n backupId: string,\n options?: { signal?: AbortSignal },\n ) => Promise<void>;\n cancel?: (backupId: string) => Promise<void>;\n restore?: (backupId: string) => Promise<{ restorationId: string }>;\n waitForRestoration?: (\n restorationId: string,\n options?: { signal?: AbortSignal },\n ) => Promise<void>;\n}\n\nexport interface BulkInsertError {\n rowIndex: number;\n message?: string;\n code?: string;\n}\n\nexport interface BulkInsertResult {\n succeeded?: number;\n failed?: number;\n errors?: BulkInsertError[];\n}\n\n/** Item data access shared by both pagination modes. */\nexport interface CollectionBackendBase<T = Record<string, unknown>> {\n get: (entityId: string) => Promise<T>;\n create: (entity: Partial<T>) => Promise<T>;\n update: (entity: T) => Promise<T>;\n delete: (entityId: string) => Promise<void>;\n bulkDelete: (entityIds: string[]) => Promise<void>;\n move?: (\n id: string,\n params: { moveAfterId: string | null | undefined },\n ) => Promise<void>;\n backup?: BackupConfig;\n bulkInsert?: (entities: Partial<T>[]) => Promise<BulkInsertResult>;\n}\n\n/** Per-call search scope the query layer passes to a backend's `find`. */\nexport interface FindOptions {\n searchableFieldIds?: string[];\n}\n\n/**\n * The query-layer fetch-data fns plus the optional `find` options the runtime\n * already accepts. Kept separate so the shared `OffsetFetchDataFn`/\n * `CursorFetchDataFn` used by `fetchData` stay unchanged.\n */\ntype OffsetFindFn<T, F extends FiltersMap> = (\n query: OffsetQuery<F>,\n options?: FindOptions,\n) => Promise<OffsetQueryResult<T>>;\ntype CursorFindFn<T, F extends FiltersMap> = (\n query: CursorQuery<F>,\n options?: FindOptions,\n) => Promise<CursorQueryResult<T>>;\n\n/**\n * A source's item data access. The source declares its `paginationMode`\n * (offset by default) together with the matching `find`, same as core's\n * `PaginationModeConfig`.\n */\nexport type CollectionBackend<\n T = Record<string, unknown>,\n F extends FiltersMap = OptionalFiltersMap,\n> = CollectionBackendBase<T> &\n (\n | { paginationMode?: 'offset'; find: OffsetFindFn<T, F> }\n | {\n paginationMode: 'cursor';\n find: CursorFindFn<T, F>;\n fetchTotal?: FetchTotalFn;\n }\n );\n\n/** Field-management actions. All optional — a read-only source provides none. */\nexport interface FieldActions {\n /**\n * Field-mutating actions return the collection's updated fields map so the\n * caller can merge its local state from the response, without reloading the\n * schema. (`renameField` is the exception — nothing consumes its result yet.)\n */\n addField?: (field: Field) => Promise<Schema['fields']>;\n editField?: (\n fieldId: string,\n updates: Partial<Field>,\n ) => Promise<Schema['fields']>;\n deleteField?: (fieldId: string) => Promise<Schema['fields']>;\n renameField?: (fieldId: string, newName: string) => Promise<void>;\n makePrimary?: (fieldId: string) => Promise<Schema['fields']>;\n duplicateField?: (fieldId: string) => Promise<Schema['fields']>;\n duplicateFieldWithContent?: (fieldId: string) => Promise<Schema['fields']>;\n}\n\n/** Everything a source provides for a collection. */\nexport interface LoadedSchema<T = Record<string, unknown>> {\n schema: Schema;\n backend: CollectionBackend<T>;\n fieldActions?: FieldActions;\n}\n\n/**\n * Loads a collection's `LoadedSchema`. Sources that need dependencies expose a\n * factory that returns this type.\n */\nexport type SchemaLoader<\n T extends Record<string, unknown> = Record<string, unknown>,\n> = (collectionId: string) => Promise<LoadedSchema<T>>;\n"],"mappings":"","ignoreList":[]}
1
+ {"version":3,"names":[],"sources":["../../../src/types/Schema.ts"],"sourcesContent":["import type { Field } from './Field';\nimport type { FiltersMap, OptionalFiltersMap } from '../model';\nimport type {\n OffsetQuery,\n OffsetQueryResult,\n CursorQuery,\n CursorQueryResult,\n FetchTotalFn,\n} from '../hooks/paginationModeConfig';\n\n/** Field-management permissions. Absent when the schema's fields cannot be edited. */\nexport interface SchemaPermissions {\n createField: boolean;\n updateField: boolean;\n deleteField: boolean;\n}\n\n/** Item-level CRUD permissions. */\nexport interface ItemPermissions {\n createItem: boolean;\n updateItem: boolean;\n deleteItem: boolean;\n}\n\n/**\n * A source-neutral description of a collection — data only, no behavior.\n * Item access is in `CollectionBackend`, field mutations in `FieldActions`.\n */\nexport interface Schema {\n id: string;\n fields: Record<string, Field | undefined>;\n /** The field that best represents the entity (titles/selections). */\n displayField: string;\n /** The identifier field. */\n idField: string;\n /** Absent when the schema's fields cannot be edited. */\n schemaPermissions?: SchemaPermissions;\n itemPermissions?: ItemPermissions;\n}\n\nexport interface BackupConfig {\n create: () => Promise<{ backupId: string }>;\n waitForCompletion: (\n backupId: string,\n options?: { signal?: AbortSignal },\n ) => Promise<void>;\n cancel?: (backupId: string) => Promise<void>;\n restore?: (backupId: string) => Promise<{ restorationId: string }>;\n waitForRestoration?: (\n restorationId: string,\n options?: { signal?: AbortSignal },\n ) => Promise<void>;\n}\n\nexport interface BulkInsertError {\n rowIndex: number;\n message?: string;\n code?: string;\n}\n\nexport interface BulkInsertResult {\n succeeded?: number;\n failed?: number;\n errors?: BulkInsertError[];\n}\n\n/** Item data access shared by both pagination modes. */\nexport interface CollectionBackendBase<T = Record<string, unknown>> {\n get: (entityId: string) => Promise<T>;\n create: (entity: Partial<T>) => Promise<T>;\n update: (entity: T) => Promise<T>;\n delete: (entityId: string) => Promise<void>;\n bulkDelete: (entityIds: string[]) => Promise<void>;\n move?: (\n id: string,\n params: { moveAfterId: string | null | undefined },\n ) => Promise<void>;\n backup?: BackupConfig;\n bulkInsert?: (entities: Partial<T>[]) => Promise<BulkInsertResult>;\n}\n\n/** Per-call search scope the query layer passes to a backend's `find`. */\nexport interface FindOptions {\n searchableFieldIds?: string[];\n}\n\n/**\n * The query-layer fetch-data fns plus the optional `find` options the runtime\n * already accepts. Kept separate so the shared `OffsetFetchDataFn`/\n * `CursorFetchDataFn` used by `fetchData` stay unchanged.\n */\ntype OffsetFindFn<T, F extends FiltersMap> = (\n query: OffsetQuery<F>,\n options?: FindOptions,\n) => Promise<OffsetQueryResult<T>>;\ntype CursorFindFn<T, F extends FiltersMap> = (\n query: CursorQuery<F>,\n options?: FindOptions,\n) => Promise<CursorQueryResult<T>>;\n\n/**\n * A source's item data access. The source declares its `paginationMode`\n * (offset by default) together with the matching `find`, same as core's\n * `PaginationModeConfig`.\n */\nexport type CollectionBackend<\n T = Record<string, unknown>,\n F extends FiltersMap = OptionalFiltersMap,\n> = CollectionBackendBase<T> &\n (\n | { paginationMode?: 'offset'; find: OffsetFindFn<T, F> }\n | {\n paginationMode: 'cursor';\n find: CursorFindFn<T, F>;\n fetchTotal?: FetchTotalFn;\n }\n );\n\n/** Field-management actions. All optional — a read-only source provides none. */\nexport interface FieldActions {\n /**\n * Field-mutating actions return the collection's updated fields map so the\n * caller can merge its local state from the response, without reloading the\n * schema. (`renameField` is the exception — nothing consumes its result yet.)\n */\n addField?: (field: Field) => Promise<Schema['fields']>;\n /**\n * Adds several fields in a single mutation, each under its `field.id` key\n * (callers decide the keys up front — e.g. CSV import uploads values under\n * them), unlike `addField`, which derives a fresh key from the display name.\n */\n addFields?: (fields: Field[]) => Promise<Schema['fields']>;\n editField?: (\n fieldId: string,\n updates: Partial<Field>,\n ) => Promise<Schema['fields']>;\n deleteField?: (fieldId: string) => Promise<Schema['fields']>;\n renameField?: (fieldId: string, newName: string) => Promise<void>;\n makePrimary?: (fieldId: string) => Promise<Schema['fields']>;\n duplicateField?: (fieldId: string) => Promise<Schema['fields']>;\n duplicateFieldWithContent?: (fieldId: string) => Promise<Schema['fields']>;\n}\n\n/** Everything a source provides for a collection. */\nexport interface LoadedSchema<T = Record<string, unknown>> {\n schema: Schema;\n backend: CollectionBackend<T>;\n fieldActions?: FieldActions;\n}\n\n/**\n * Loads a collection's `LoadedSchema`. Sources that need dependencies expose a\n * factory that returns this type.\n */\nexport type SchemaLoader<\n T extends Record<string, unknown> = Record<string, unknown>,\n> = (collectionId: string) => Promise<LoadedSchema<T>>;\n"],"mappings":"","ignoreList":[]}
@@ -1,6 +1,7 @@
1
1
  {
2
2
  "cairo.emptyState.premium.text": "Access more features by upgrading your site.",
3
3
  "cairo.customFields.fieldType.shortText": "Short text",
4
+ "cairo.import.summaryUpdated": "{count} {count, plural, one {item} other {items}} updated",
4
5
  "cairo.delete.button": "Delete",
5
6
  "cairo.deselectAll": "Deselect All",
6
7
  "cairo.table.deleteViewModal.title": "Delete this view?",
@@ -139,6 +140,7 @@
139
140
  "cairo.filtersPanel.search.clearButton": "Clear search",
140
141
  "cairo.customFields.fieldType.dateAndTime": "Date and time",
141
142
  "cairo.search.Tab.noresults.text": "Look in a different tab or try a new search.",
143
+ "cairo.import.summaryCreated": "{count} {count, plural, one {item} other {items}} created",
142
144
  "cairo.viewDropdown.unsavedView.status": "Unsaved view",
143
145
  "cairo.technical.error.text": "There was a technical problem on our end. Refresh the page and try again in a moment.",
144
146
  "cairo.import.downloadFailedRows": "Download failed rows",
@@ -241,7 +243,9 @@
241
243
  "cairo.dragAndDrop.leaveSite.modal.description": "Changes you made to the order of your items may not be saved.",
242
244
  "cairo.table.deleteViewModal.deleteBody": "Once you delete \"{viewName}\", it can't be restored.",
243
245
  "cairo.export.allItems": "All",
246
+ "cairo.import.failureReasonColumn": ".Why it failed to import",
244
247
  "cairo.customFields.addCustomField.modal.advancedSettings": "Advanced settings",
248
+ "cairo.import.downloadCsv": "Download CSV",
245
249
  "cairo.tags.bulkItemUpdate.updatingTags.toast.asLabels": "Updating labels...",
246
250
  "cairo.search.noresults.title": "No results found",
247
251
  "cairo.import.cancel": "Cancel",
@@ -347,6 +351,7 @@
347
351
  "cairo.editableTable.object.validation.invalidSyntax": "Invalid JSON syntax",
348
352
  "cairo.customFields.addCustomField.modal.sameKey.error": "This key already exists. Try a different one.",
349
353
  "cairo.entityPage.saveError-technical.toast.description": "Changes weren’t saved due to a technical issue on our side. ",
354
+ "cairo.import.summaryFailedHint": "Download the CSV to see error reasons for each item.",
350
355
  "cairo.import.startImport": "Import",
351
356
  "cairo.customFields.addCustomField.modal.advancedSettings.key.title": "Key",
352
357
  "cairo.customFields.addCustomField.modal.PII-setting.toggle.editNote": "PII can’t be changed after creation. To change it, create a new field.",
@@ -415,6 +420,7 @@
415
420
  "cairo.filtersPanel.sections.default.title": "More filters",
416
421
  "cairo.tags.tagsWidget.input.placeholder": "Enter new tag name",
417
422
  "cairo.entity.item": "{num, plural, =0 {items} =1 {item} other {items}}",
423
+ "cairo.import.summaryFailed": "{count} {count, plural, one {item} other {items}} failed to import",
418
424
  "cairo.entityPage.widgetError.TPAconnectionFail.description": "There was a technical issue and we couldn’t load this section. Reload to try again.",
419
425
  "cairo.tags.tagsWidget.subtitle": "Tags help you filter and stay organized.",
420
426
  "cairo.customFields.archive.modal.CTA": "Archive",
@@ -589,6 +595,7 @@
589
595
  "cairo.filtersPanel.date.tomorrow": "Tomorrow",
590
596
  "cairo.customFields.restored.success.toast": "{selectedField} was restored.",
591
597
  "cairo.appliedFilters.selected": "{num, plural, =0 {No filters selected} one {1 filter selected} other {# filters selected}}",
598
+ "cairo.import.summaryTitle": "{imported} of {total} items imported",
592
599
  "cairo.filtersPanel.date.none": "None",
593
600
  "cairo.import.collectionField": "Collection Field",
594
601
  "cairo.saveViewModal.cancelButton": "Cancel",
@@ -596,6 +603,7 @@
596
603
  "cairo.tags.manageTags.modal.subtitle.asLabels": "Edit, remove and create labels.",
597
604
  "cairo.tags.manageTags.modal.emptyState.body.asLabels": "Labels help you filter and organize your items.",
598
605
  "cairo.table.custom-columns.hidden.disabled.tooltip": "This column can’t be hidden.",
606
+ "cairo.import.close": "Close",
599
607
  "cairo.filtersPanel.header.closeButton.ariaLabel": "Close",
600
608
  "cairo.customFields.updateDataExtension.invalid-namespace.error": "Unable to update custom field due to a technical issue on our end.",
601
609
  "cairo.filterOperator.startsWith": "Starts With",
@@ -1,6 +1,7 @@
1
1
  {
2
2
  "cairo.emptyState.premium.text": "Access more features by upgrading your site.",
3
3
  "cairo.customFields.fieldType.shortText": "Short text",
4
+ "cairo.import.summaryUpdated": "{count} {count, plural, one {item} other {items}} updated",
4
5
  "cairo.delete.button": "Delete",
5
6
  "cairo.deselectAll": "Deselect All",
6
7
  "cairo.table.deleteViewModal.title": "Delete this view?",
@@ -139,6 +140,7 @@
139
140
  "cairo.filtersPanel.search.clearButton": "Clear search",
140
141
  "cairo.customFields.fieldType.dateAndTime": "Date and time",
141
142
  "cairo.search.Tab.noresults.text": "Look in a different tab or try a new search.",
143
+ "cairo.import.summaryCreated": "{count} {count, plural, one {item} other {items}} created",
142
144
  "cairo.viewDropdown.unsavedView.status": "Unsaved view",
143
145
  "cairo.technical.error.text": "There was a technical problem on our end. Refresh the page and try again in a moment.",
144
146
  "cairo.import.downloadFailedRows": "Download failed rows",
@@ -241,7 +243,9 @@
241
243
  "cairo.dragAndDrop.leaveSite.modal.description": "Changes you made to the order of your items may not be saved.",
242
244
  "cairo.table.deleteViewModal.deleteBody": "Once you delete \"{viewName}\", it can't be restored.",
243
245
  "cairo.export.allItems": "All",
246
+ "cairo.import.failureReasonColumn": ".Why it failed to import",
244
247
  "cairo.customFields.addCustomField.modal.advancedSettings": "Advanced settings",
248
+ "cairo.import.downloadCsv": "Download CSV",
245
249
  "cairo.tags.bulkItemUpdate.updatingTags.toast.asLabels": "Updating labels...",
246
250
  "cairo.search.noresults.title": "No results found",
247
251
  "cairo.import.cancel": "Cancel",
@@ -347,6 +351,7 @@
347
351
  "cairo.editableTable.object.validation.invalidSyntax": "Invalid JSON syntax",
348
352
  "cairo.customFields.addCustomField.modal.sameKey.error": "This key already exists. Try a different one.",
349
353
  "cairo.entityPage.saveError-technical.toast.description": "Changes weren’t saved due to a technical issue on our side. ",
354
+ "cairo.import.summaryFailedHint": "Download the CSV to see error reasons for each item.",
350
355
  "cairo.import.startImport": "Import",
351
356
  "cairo.customFields.addCustomField.modal.advancedSettings.key.title": "Key",
352
357
  "cairo.customFields.addCustomField.modal.PII-setting.toggle.editNote": "PII can’t be changed after creation. To change it, create a new field.",
@@ -415,6 +420,7 @@
415
420
  "cairo.filtersPanel.sections.default.title": "More filters",
416
421
  "cairo.tags.tagsWidget.input.placeholder": "Enter new tag name",
417
422
  "cairo.entity.item": "{num, plural, =0 {items} =1 {item} other {items}}",
423
+ "cairo.import.summaryFailed": "{count} {count, plural, one {item} other {items}} failed to import",
418
424
  "cairo.entityPage.widgetError.TPAconnectionFail.description": "There was a technical issue and we couldn’t load this section. Reload to try again.",
419
425
  "cairo.tags.tagsWidget.subtitle": "Tags help you filter and stay organized.",
420
426
  "cairo.customFields.archive.modal.CTA": "Archive",
@@ -589,6 +595,7 @@
589
595
  "cairo.filtersPanel.date.tomorrow": "Tomorrow",
590
596
  "cairo.customFields.restored.success.toast": "{selectedField} was restored.",
591
597
  "cairo.appliedFilters.selected": "{num, plural, =0 {No filters selected} one {1 filter selected} other {# filters selected}}",
598
+ "cairo.import.summaryTitle": "{imported} of {total} items imported",
592
599
  "cairo.filtersPanel.date.none": "None",
593
600
  "cairo.import.collectionField": "Collection Field",
594
601
  "cairo.saveViewModal.cancelButton": "Cancel",
@@ -596,6 +603,7 @@
596
603
  "cairo.tags.manageTags.modal.subtitle.asLabels": "Edit, remove and create labels.",
597
604
  "cairo.tags.manageTags.modal.emptyState.body.asLabels": "Labels help you filter and organize your items.",
598
605
  "cairo.table.custom-columns.hidden.disabled.tooltip": "This column can’t be hidden.",
606
+ "cairo.import.close": "Close",
599
607
  "cairo.filtersPanel.header.closeButton.ariaLabel": "Close",
600
608
  "cairo.customFields.updateDataExtension.invalid-namespace.error": "Unable to update custom field due to a technical issue on our end.",
601
609
  "cairo.filterOperator.startsWith": "Starts With",
@@ -1,6 +1,7 @@
1
1
  {
2
2
  "cairo.emptyState.premium.text": "Access more features by upgrading your site.",
3
3
  "cairo.customFields.fieldType.shortText": "Short text",
4
+ "cairo.import.summaryUpdated": "{count} {count, plural, one {item} other {items}} updated",
4
5
  "cairo.delete.button": "Delete",
5
6
  "cairo.deselectAll": "Deselect All",
6
7
  "cairo.table.deleteViewModal.title": "Delete this view?",
@@ -139,6 +140,7 @@
139
140
  "cairo.filtersPanel.search.clearButton": "Clear search",
140
141
  "cairo.customFields.fieldType.dateAndTime": "Date and time",
141
142
  "cairo.search.Tab.noresults.text": "Look in a different tab or try a new search.",
143
+ "cairo.import.summaryCreated": "{count} {count, plural, one {item} other {items}} created",
142
144
  "cairo.viewDropdown.unsavedView.status": "Unsaved view",
143
145
  "cairo.technical.error.text": "There was a technical problem on our end. Refresh the page and try again in a moment.",
144
146
  "cairo.import.downloadFailedRows": "Download failed rows",
@@ -241,7 +243,9 @@
241
243
  "cairo.dragAndDrop.leaveSite.modal.description": "Changes you made to the order of your items may not be saved.",
242
244
  "cairo.table.deleteViewModal.deleteBody": "Once you delete \"{viewName}\", it can't be restored.",
243
245
  "cairo.export.allItems": "All",
246
+ "cairo.import.failureReasonColumn": ".Why it failed to import",
244
247
  "cairo.customFields.addCustomField.modal.advancedSettings": "Advanced settings",
248
+ "cairo.import.downloadCsv": "Download CSV",
245
249
  "cairo.tags.bulkItemUpdate.updatingTags.toast.asLabels": "Updating labels...",
246
250
  "cairo.search.noresults.title": "No results found",
247
251
  "cairo.import.cancel": "Cancel",
@@ -347,6 +351,7 @@
347
351
  "cairo.editableTable.object.validation.invalidSyntax": "Invalid JSON syntax",
348
352
  "cairo.customFields.addCustomField.modal.sameKey.error": "This key already exists. Try a different one.",
349
353
  "cairo.entityPage.saveError-technical.toast.description": "Changes weren’t saved due to a technical issue on our side. ",
354
+ "cairo.import.summaryFailedHint": "Download the CSV to see error reasons for each item.",
350
355
  "cairo.import.startImport": "Import",
351
356
  "cairo.customFields.addCustomField.modal.advancedSettings.key.title": "Key",
352
357
  "cairo.customFields.addCustomField.modal.PII-setting.toggle.editNote": "PII can’t be changed after creation. To change it, create a new field.",
@@ -415,6 +420,7 @@
415
420
  "cairo.filtersPanel.sections.default.title": "More filters",
416
421
  "cairo.tags.tagsWidget.input.placeholder": "Enter new tag name",
417
422
  "cairo.entity.item": "{num, plural, =0 {items} =1 {item} other {items}}",
423
+ "cairo.import.summaryFailed": "{count} {count, plural, one {item} other {items}} failed to import",
418
424
  "cairo.entityPage.widgetError.TPAconnectionFail.description": "There was a technical issue and we couldn’t load this section. Reload to try again.",
419
425
  "cairo.tags.tagsWidget.subtitle": "Tags help you filter and stay organized.",
420
426
  "cairo.customFields.archive.modal.CTA": "Archive",
@@ -589,6 +595,7 @@
589
595
  "cairo.filtersPanel.date.tomorrow": "Tomorrow",
590
596
  "cairo.customFields.restored.success.toast": "{selectedField} was restored.",
591
597
  "cairo.appliedFilters.selected": "{num, plural, =0 {No filters selected} one {1 filter selected} other {# filters selected}}",
598
+ "cairo.import.summaryTitle": "{imported} of {total} items imported",
592
599
  "cairo.filtersPanel.date.none": "None",
593
600
  "cairo.import.collectionField": "Collection Field",
594
601
  "cairo.saveViewModal.cancelButton": "Cancel",
@@ -596,6 +603,7 @@
596
603
  "cairo.tags.manageTags.modal.subtitle.asLabels": "Edit, remove and create labels.",
597
604
  "cairo.tags.manageTags.modal.emptyState.body.asLabels": "Labels help you filter and organize your items.",
598
605
  "cairo.table.custom-columns.hidden.disabled.tooltip": "This column can’t be hidden.",
606
+ "cairo.import.close": "Close",
599
607
  "cairo.filtersPanel.header.closeButton.ariaLabel": "Close",
600
608
  "cairo.customFields.updateDataExtension.invalid-namespace.error": "Unable to update custom field due to a technical issue on our end.",
601
609
  "cairo.filterOperator.startsWith": "Starts With",
@@ -1,6 +1,7 @@
1
1
  {
2
2
  "cairo.emptyState.premium.text": "Upgradujte web a získáte přístup k více funkcím.",
3
3
  "cairo.customFields.fieldType.shortText": "Krátký text",
4
+ "cairo.import.summaryUpdated": "{count} {count, plural, one {item} other {items}} updated",
4
5
  "cairo.delete.button": "Odstranit",
5
6
  "cairo.deselectAll": "Zrušit výběr všech",
6
7
  "cairo.table.deleteViewModal.title": "Odstranit toto zobrazení?",
@@ -139,6 +140,7 @@
139
140
  "cairo.filtersPanel.search.clearButton": "Clear search",
140
141
  "cairo.customFields.fieldType.dateAndTime": "Datum a čas",
141
142
  "cairo.search.Tab.noresults.text": "Podívejte se na jinou záložku nebo zkuste nové vyhledávání.",
143
+ "cairo.import.summaryCreated": "{count} {count, plural, one {item} other {items}} created",
142
144
  "cairo.viewDropdown.unsavedView.status": "Neuložené zobrazení",
143
145
  "cairo.technical.error.text": "Vyskytly se u nás technické potíže. Obnovte stránku a zkuste to za chvíli znovu.",
144
146
  "cairo.import.downloadFailedRows": "Download failed rows",
@@ -241,7 +243,9 @@
241
243
  "cairo.dragAndDrop.leaveSite.modal.description": "Změny v pořadí položek nemusí být uloženy.",
242
244
  "cairo.table.deleteViewModal.deleteBody": "Jakmile odstraníte zobrazení „{viewName}“, nebudete jej moct obnovit.",
243
245
  "cairo.export.allItems": "Vše",
246
+ "cairo.import.failureReasonColumn": ".Why it failed to import",
244
247
  "cairo.customFields.addCustomField.modal.advancedSettings": "Pokročilá nastavení",
248
+ "cairo.import.downloadCsv": "Download CSV",
245
249
  "cairo.tags.bulkItemUpdate.updatingTags.toast.asLabels": "Aktualizace štítků…",
246
250
  "cairo.search.noresults.title": "Nebyly nalezeny žádné výsledky",
247
251
  "cairo.import.cancel": "Cancel",
@@ -347,6 +351,7 @@
347
351
  "cairo.editableTable.object.validation.invalidSyntax": "Invalid JSON syntax",
348
352
  "cairo.customFields.addCustomField.modal.sameKey.error": "Tento klíč již existuje. Zkuste jiný.",
349
353
  "cairo.entityPage.saveError-technical.toast.description": "Změny nebyly uloženy kvůli technickým potížím na naší straně. ",
354
+ "cairo.import.summaryFailedHint": "Download the CSV to see error reasons for each item.",
350
355
  "cairo.import.startImport": "Import",
351
356
  "cairo.customFields.addCustomField.modal.advancedSettings.key.title": "Klíč",
352
357
  "cairo.customFields.addCustomField.modal.PII-setting.toggle.editNote": "Údaje PII nelze po vytvoření změnit. Chcete‑li je změnit, vytvořte nové pole.",
@@ -415,6 +420,7 @@
415
420
  "cairo.filtersPanel.sections.default.title": "Další filtry",
416
421
  "cairo.tags.tagsWidget.input.placeholder": "Zadejte název nového tagu",
417
422
  "cairo.entity.item": "{num, plural, =0 {položky} one {položka} few {položky} many {položek} other {položek}}",
423
+ "cairo.import.summaryFailed": "{count} {count, plural, one {item} other {items}} failed to import",
418
424
  "cairo.entityPage.widgetError.TPAconnectionFail.description": "Objevily se technické potíže a tento oddíl se nám nepodařilo načíst. Zkuste oddíl obnovit.",
419
425
  "cairo.tags.tagsWidget.subtitle": "Štítky vám pomáhají filtrovat a zachovávat pořádek.",
420
426
  "cairo.customFields.archive.modal.CTA": "Archivovat",
@@ -589,6 +595,7 @@
589
595
  "cairo.filtersPanel.date.tomorrow": "Zítra",
590
596
  "cairo.customFields.restored.success.toast": "Pole „{selectedField}“ bylo obnoveno.",
591
597
  "cairo.appliedFilters.selected": "{num, plural, =0 {Nebyly vybrány žádné filtry} one {Byl vybrán jeden filtr} few {Byly vybrány {num,number} filtry} many {Bylo vybráno {num,number} filtrů} other {Bylo vybráno {num,number} filtrů}}",
598
+ "cairo.import.summaryTitle": "{imported} of {total} items imported",
592
599
  "cairo.filtersPanel.date.none": "Vše",
593
600
  "cairo.import.collectionField": "Collection Field",
594
601
  "cairo.saveViewModal.cancelButton": "Zpět",
@@ -596,6 +603,7 @@
596
603
  "cairo.tags.manageTags.modal.subtitle.asLabels": "Upravovat, odstraňovat a vytvářet štítky.",
597
604
  "cairo.tags.manageTags.modal.emptyState.body.asLabels": "Štítky vám pomáhají filtrovat a organizovat položky.",
598
605
  "cairo.table.custom-columns.hidden.disabled.tooltip": "Tento sloupec nelze skrýt.",
606
+ "cairo.import.close": "Close",
599
607
  "cairo.filtersPanel.header.closeButton.ariaLabel": "Zavřít",
600
608
  "cairo.customFields.updateDataExtension.invalid-namespace.error": "Kvůli technickým potížím na naší straně nebylo možné aktualizovat vlastní pole.",
601
609
  "cairo.filterOperator.startsWith": "Začíná na",