@ixo/editor 6.29.1 → 6.30.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.
@@ -9658,7 +9658,7 @@ var ClaimsEvaluation = ({ collectionId, adminAddress, deedId, claim, onRefresh }
9658
9658
 
9659
9659
  // src/mantine/blocks/list/ListSelectionPanel.tsx
9660
9660
  var supportTabsLists = ["claims"];
9661
- var ListSelectionPanel = ({ selectedIds, listConfig, listData, listType, userRole, onClose, onRefresh, block, editor }) => {
9661
+ var ListSelectionPanel = ({ selectedIds, listConfig, listData: listData2, listType, userRole, onClose, onRefresh, block, editor }) => {
9662
9662
  const { closePanel } = usePanelStore();
9663
9663
  const handlers = useBlocknoteHandlers();
9664
9664
  const handleClose = () => {
@@ -9690,7 +9690,7 @@ var ListSelectionPanel = ({ selectedIds, listConfig, listData, listType, userRol
9690
9690
  try {
9691
9691
  const handlerKey = panelConfig.detailsHandlerKey;
9692
9692
  const handler = handlers[handlerKey];
9693
- const listItemData = listData?.items?.find((item) => item?.id === selectedItemId || item?.did === selectedItemId || item.claimId === selectedItemId);
9693
+ const listItemData = listData2?.items?.find((item) => item?.id === selectedItemId || item?.did === selectedItemId || item.claimId === selectedItemId);
9694
9694
  if (typeof handler === "function") {
9695
9695
  const details = await handler(selectedItemId, listItemData);
9696
9696
  setItemHandlerData(details);
@@ -9706,7 +9706,7 @@ var ListSelectionPanel = ({ selectedIds, listConfig, listData, listType, userRol
9706
9706
  }
9707
9707
  };
9708
9708
  fetchItemDetails();
9709
- }, [selectedItemId, listType, handlers, panelConfig, listData?.items]);
9709
+ }, [selectedItemId, listType, handlers, panelConfig, listData2?.items]);
9710
9710
  const tabs = useMemo40(() => {
9711
9711
  switch (listType) {
9712
9712
  case "claims":
@@ -9953,103 +9953,6 @@ function downloadArrayAsCsv(rows, options) {
9953
9953
  // src/mantine/blocks/list/flow/ListFlowView.tsx
9954
9954
  import { useDisclosure as useDisclosure3 } from "@mantine/hooks";
9955
9955
 
9956
- // src/core/utils/links.ts
9957
- function cleanUrlString(url) {
9958
- const regex = /(?<!https?:)\/\//g;
9959
- const cleanedUrl = url.replace(/\s+/g, "").replace(regex, "/");
9960
- return cleanedUrl;
9961
- }
9962
- var transformIpfsToCfIpfsData = (uri) => {
9963
- let uriIdentifier = "";
9964
- if (uri.startsWith("https://ipfs.gateway.ixo.world/ipfs/")) {
9965
- return uri;
9966
- }
9967
- if (!uri || !uri.includes("ipfs")) return uri;
9968
- if (uri.startsWith("web3:")) uriIdentifier = uri.replace("web3:", "");
9969
- if (uri.startsWith("https://cellnode")) return uri;
9970
- if (uri.startsWith("https://ipfs.io/")) uriIdentifier = uri.replace("https://ipfs.io/ipfs/", "");
9971
- if (uri.startsWith("https://cf-ipfs.com/ipfs/")) uriIdentifier = uri.replace("https://cf-ipfs.com/ipfs/", "");
9972
- if (uri.startsWith("https://blocksync") || uri.startsWith("https://testnet") || uri.startsWith("https://devnet") || uri.endsWith("ipfs.w3s.link") || uri.endsWith("ipfs.w3s.link/")) {
9973
- const uriIpfsIndex = uri.indexOf("/ipfs");
9974
- if (uriIpfsIndex === -1) {
9975
- const identifier = uri.split("https://")[1].split(".")[0];
9976
- return `https://ipfs.gateway.ixo.world/ipfs/${identifier}`;
9977
- }
9978
- const uriIpfsOffset = 6;
9979
- uriIdentifier = uri.substring(uriIpfsIndex + uriIpfsOffset);
9980
- return `https://ipfs.gateway.ixo.world/ipfs/${uriIdentifier}`;
9981
- }
9982
- return `https://ipfs.gateway.ixo.world/ipfs/${uriIdentifier}`;
9983
- };
9984
-
9985
- // src/core/lib/getFullServiceEndpoint.ts
9986
- var getFullServiceEndpoint = (serviceEndpoint, services) => {
9987
- if (!serviceEndpoint) throw new Error("Service endpoint is not provided");
9988
- if (serviceEndpoint.startsWith("http://") || serviceEndpoint.startsWith("https://")) return cleanUrlString(serviceEndpoint);
9989
- const pos = serviceEndpoint.indexOf(":");
9990
- if (pos === -1) return cleanUrlString(serviceEndpoint);
9991
- const serviceId = serviceEndpoint.substring(0, pos);
9992
- const endUrl = serviceEndpoint.substring(pos + 1);
9993
- const neededService = services.find((s) => {
9994
- const posHash = s.id.indexOf("#");
9995
- const id = s.id.substring(posHash + 1);
9996
- return id === serviceId;
9997
- });
9998
- let firstPartOfServiceEndpoint = "";
9999
- if (neededService?.serviceEndpoint?.endsWith("/\r\n")) {
10000
- firstPartOfServiceEndpoint = neededService?.serviceEndpoint.replace(/\r?\n$/, "").replace(/\/$/, "");
10001
- } else {
10002
- firstPartOfServiceEndpoint = neededService?.serviceEndpoint || "";
10003
- }
10004
- if (!firstPartOfServiceEndpoint) return serviceEndpoint;
10005
- let resultUrl = firstPartOfServiceEndpoint + endUrl;
10006
- if (resultUrl.includes("ipfs.gateway") && !resultUrl.includes("/ipfs/")) {
10007
- resultUrl = "https://ipfs.gateway.ixo.world/ipfs/" + endUrl;
10008
- }
10009
- return cleanUrlString(resultUrl);
10010
- };
10011
- var getFullServiceEndpoint_default = getFullServiceEndpoint;
10012
-
10013
- // src/core/lib/categorizeResources.ts
10014
- var mediaTypeDictionary = {
10015
- "application/pdf": "pdf",
10016
- "application/html": "html",
10017
- "application/json": "json",
10018
- "application/ld+json": "jsonld",
10019
- "ld+json": "jsonld",
10020
- "image/png": "imagePng",
10021
- "text/plain": "text"
10022
- };
10023
- function extendResourcesWithFormat(resources) {
10024
- if (!resources) return [];
10025
- return Object.values(resources).flat().map((resource) => ({
10026
- ...resource,
10027
- format: Object.keys(resources).find((key) => resources[key].some((item) => item.id === resource.id))
10028
- }));
10029
- }
10030
- function categorizeResources(linkedResources, services) {
10031
- const categorizedResources = {
10032
- pdf: [],
10033
- html: [],
10034
- json: [],
10035
- jsonld: [],
10036
- imagePng: [],
10037
- text: []
10038
- };
10039
- if (!linkedResources) return [];
10040
- for (const resource of linkedResources) {
10041
- const serviceEndpoint = resource.serviceEndpoint;
10042
- categorizedResources[mediaTypeDictionary[resource.mediaType]]?.push({
10043
- id: serviceEndpoint,
10044
- link: transformIpfsToCfIpfsData(getFullServiceEndpoint_default(serviceEndpoint, services)),
10045
- description: resource?.description || "No description",
10046
- type: resource.type,
10047
- access: resource.type.startsWith("display")
10048
- });
10049
- }
10050
- return extendResourcesWithFormat(categorizedResources);
10051
- }
10052
-
10053
9956
  // src/mantine/blocks/list/ListActionsMenu.tsx
10054
9957
  import React92, { useState as useState37 } from "react";
10055
9958
  import { Menu, Text as Text59, ActionIcon as ActionIcon14, Flex as Flex27, Box as Box29, Collapse, Tooltip as Tooltip9 } from "@mantine/core";
@@ -10163,6 +10066,362 @@ var ListActionsMenu = React92.forwardRef(
10163
10066
  );
10164
10067
  ListActionsMenu.displayName = "ListActionsMenu";
10165
10068
 
10069
+ // src/core/utils/links.ts
10070
+ function cleanUrlString(url) {
10071
+ const regex = /(?<!https?:)\/\//g;
10072
+ const cleanedUrl = url.replace(/\s+/g, "").replace(regex, "/");
10073
+ return cleanedUrl;
10074
+ }
10075
+ var transformIpfsToCfIpfsData = (uri) => {
10076
+ let uriIdentifier = "";
10077
+ if (uri.startsWith("https://ipfs.gateway.ixo.world/ipfs/")) {
10078
+ return uri;
10079
+ }
10080
+ if (!uri || !uri.includes("ipfs")) return uri;
10081
+ if (uri.startsWith("web3:")) uriIdentifier = uri.replace("web3:", "");
10082
+ if (uri.startsWith("https://cellnode")) return uri;
10083
+ if (uri.startsWith("https://ipfs.io/")) uriIdentifier = uri.replace("https://ipfs.io/ipfs/", "");
10084
+ if (uri.startsWith("https://cf-ipfs.com/ipfs/")) uriIdentifier = uri.replace("https://cf-ipfs.com/ipfs/", "");
10085
+ if (uri.startsWith("https://blocksync") || uri.startsWith("https://testnet") || uri.startsWith("https://devnet") || uri.endsWith("ipfs.w3s.link") || uri.endsWith("ipfs.w3s.link/")) {
10086
+ const uriIpfsIndex = uri.indexOf("/ipfs");
10087
+ if (uriIpfsIndex === -1) {
10088
+ const identifier = uri.split("https://")[1].split(".")[0];
10089
+ return `https://ipfs.gateway.ixo.world/ipfs/${identifier}`;
10090
+ }
10091
+ const uriIpfsOffset = 6;
10092
+ uriIdentifier = uri.substring(uriIpfsIndex + uriIpfsOffset);
10093
+ return `https://ipfs.gateway.ixo.world/ipfs/${uriIdentifier}`;
10094
+ }
10095
+ return `https://ipfs.gateway.ixo.world/ipfs/${uriIdentifier}`;
10096
+ };
10097
+
10098
+ // src/core/lib/getFullServiceEndpoint.ts
10099
+ var getFullServiceEndpoint = (serviceEndpoint, services) => {
10100
+ if (!serviceEndpoint) throw new Error("Service endpoint is not provided");
10101
+ if (serviceEndpoint.startsWith("http://") || serviceEndpoint.startsWith("https://")) return cleanUrlString(serviceEndpoint);
10102
+ const pos = serviceEndpoint.indexOf(":");
10103
+ if (pos === -1) return cleanUrlString(serviceEndpoint);
10104
+ const serviceId = serviceEndpoint.substring(0, pos);
10105
+ const endUrl = serviceEndpoint.substring(pos + 1);
10106
+ const neededService = services.find((s) => {
10107
+ const posHash = s.id.indexOf("#");
10108
+ const id = s.id.substring(posHash + 1);
10109
+ return id === serviceId;
10110
+ });
10111
+ let firstPartOfServiceEndpoint = "";
10112
+ if (neededService?.serviceEndpoint?.endsWith("/\r\n")) {
10113
+ firstPartOfServiceEndpoint = neededService?.serviceEndpoint.replace(/\r?\n$/, "").replace(/\/$/, "");
10114
+ } else {
10115
+ firstPartOfServiceEndpoint = neededService?.serviceEndpoint || "";
10116
+ }
10117
+ if (!firstPartOfServiceEndpoint) return serviceEndpoint;
10118
+ let resultUrl = firstPartOfServiceEndpoint + endUrl;
10119
+ if (resultUrl.includes("ipfs.gateway") && !resultUrl.includes("/ipfs/")) {
10120
+ resultUrl = "https://ipfs.gateway.ixo.world/ipfs/" + endUrl;
10121
+ }
10122
+ return cleanUrlString(resultUrl);
10123
+ };
10124
+ var getFullServiceEndpoint_default = getFullServiceEndpoint;
10125
+
10126
+ // src/core/lib/categorizeResources.ts
10127
+ var mediaTypeDictionary = {
10128
+ "application/pdf": "pdf",
10129
+ "application/html": "html",
10130
+ "application/json": "json",
10131
+ "application/ld+json": "jsonld",
10132
+ "ld+json": "jsonld",
10133
+ "image/png": "imagePng",
10134
+ "text/plain": "text"
10135
+ };
10136
+ function extendResourcesWithFormat(resources) {
10137
+ if (!resources) return [];
10138
+ return Object.values(resources).flat().map((resource) => ({
10139
+ ...resource,
10140
+ format: Object.keys(resources).find((key) => resources[key].some((item) => item.id === resource.id))
10141
+ }));
10142
+ }
10143
+ function categorizeResources(linkedResources, services) {
10144
+ const categorizedResources = {
10145
+ pdf: [],
10146
+ html: [],
10147
+ json: [],
10148
+ jsonld: [],
10149
+ imagePng: [],
10150
+ text: []
10151
+ };
10152
+ if (!linkedResources) return [];
10153
+ for (const resource of linkedResources) {
10154
+ const serviceEndpoint = resource.serviceEndpoint;
10155
+ categorizedResources[mediaTypeDictionary[resource.mediaType]]?.push({
10156
+ id: serviceEndpoint,
10157
+ link: transformIpfsToCfIpfsData(getFullServiceEndpoint_default(serviceEndpoint, services)),
10158
+ description: resource?.description || "No description",
10159
+ type: resource.type,
10160
+ access: resource.type.startsWith("display")
10161
+ });
10162
+ }
10163
+ return extendResourcesWithFormat(categorizedResources);
10164
+ }
10165
+
10166
+ // src/mantine/blocks/list/flow/fetchListData.ts
10167
+ var INTERNAL_LINKED_RESOURCE_TAGS = ["pge", "flw", "dmn", "pri", "lgo", "set", "page"];
10168
+ function listData(items) {
10169
+ return { items };
10170
+ }
10171
+ function getTotalPages(totalCount) {
10172
+ return typeof totalCount === "number" && totalCount > 0 ? Math.ceil(totalCount / DEFAULT_PAGE_SIZE) : 0;
10173
+ }
10174
+ function requireValue(value, message) {
10175
+ const str = typeof value === "string" ? value.trim() : typeof value === "number" && Number.isFinite(value) ? String(value) : "";
10176
+ if (!str) throw new Error(message);
10177
+ return str;
10178
+ }
10179
+ function getCurrentUserAddress(handlers) {
10180
+ const user = handlers.getCurrentUser?.();
10181
+ return typeof user?.address === "string" ? user.address : "";
10182
+ }
10183
+ function resolveRelayerDid(handlers, listConfig) {
10184
+ return requireValue(listConfig.relayedNodeDid || handlers.getRelayerDid?.(), "Relayer is required");
10185
+ }
10186
+ function coerceIdList(value) {
10187
+ if (Array.isArray(value)) {
10188
+ return value.map((item) => String(item).trim()).filter(Boolean);
10189
+ }
10190
+ if (typeof value !== "string") return [];
10191
+ const trimmed = value.trim();
10192
+ if (!trimmed) return [];
10193
+ if (trimmed.startsWith("[")) {
10194
+ try {
10195
+ return coerceIdList(JSON.parse(trimmed));
10196
+ } catch {
10197
+ return [trimmed];
10198
+ }
10199
+ }
10200
+ return trimmed.split(",").map((item) => item.trim()).filter(Boolean);
10201
+ }
10202
+ async function fetchListData(options) {
10203
+ const { handlers, listType, listConfig, page, runtimeSearchValue, daoRoleFilter, roomId, matrixClient } = options;
10204
+ switch (listType) {
10205
+ case "linked_resources": {
10206
+ const did = requireValue(listConfig.did || handlers.getEntityDid?.(), "DID is required");
10207
+ const entity = await handlers.getEntity(did);
10208
+ const linkedResources = Array.isArray(entity?.linkedResource) ? entity.linkedResource : Array.isArray(entity?.iidById?.linkedResource) ? entity.iidById.linkedResource : [];
10209
+ const services = Array.isArray(entity?.service) ? entity.service : [];
10210
+ const filteredResources = linkedResources.filter((resource) => !INTERNAL_LINKED_RESOURCE_TAGS.some((tag) => String(resource.id).includes(`#${tag}`)));
10211
+ return {
10212
+ data: listData(categorizeResources(filteredResources, services)),
10213
+ totalPages: 0,
10214
+ userRole: null
10215
+ };
10216
+ }
10217
+ case "assets": {
10218
+ const collectionDid = requireValue(listConfig.collectionDid || handlers.getEntityDid?.(), "Collection DID is required");
10219
+ const ownerAddress = listConfig.ownerBased ? requireValue(getCurrentUserAddress(handlers), "Address is required for owner-based assets") : void 0;
10220
+ const result = ownerAddress ? await handlers.getAssets(collectionDid, page, ownerAddress) : await handlers.getAssets(collectionDid, page);
10221
+ return {
10222
+ data: listData(result.data),
10223
+ totalPages: getTotalPages(result.totalCount),
10224
+ userRole: null
10225
+ };
10226
+ }
10227
+ case "transactions": {
10228
+ const address = requireValue(runtimeSearchValue || listConfig.address, "Address is required");
10229
+ const result = await handlers.getTransactions(address, page);
10230
+ return {
10231
+ data: listData(result.data),
10232
+ totalPages: getTotalPages(result.totalCount),
10233
+ userRole: null
10234
+ };
10235
+ }
10236
+ case "collections": {
10237
+ const relayerDid = resolveRelayerDid(handlers, listConfig);
10238
+ const result = await handlers.getCollections(relayerDid, page);
10239
+ return {
10240
+ data: listData(result.data),
10241
+ totalPages: getTotalPages(result.totalCount),
10242
+ userRole: null
10243
+ };
10244
+ }
10245
+ case "investments": {
10246
+ const relayerDid = resolveRelayerDid(handlers, listConfig);
10247
+ const result = await handlers.getInvestments(relayerDid, page);
10248
+ return {
10249
+ data: listData(result.data),
10250
+ totalPages: getTotalPages(result.totalCount),
10251
+ userRole: null
10252
+ };
10253
+ }
10254
+ case "oracles": {
10255
+ const relayerDid = resolveRelayerDid(handlers, listConfig);
10256
+ const result = await handlers.getOracles(relayerDid, page);
10257
+ return {
10258
+ data: listData(result.data),
10259
+ totalPages: getTotalPages(result.totalCount),
10260
+ userRole: null
10261
+ };
10262
+ }
10263
+ case "pods": {
10264
+ const relayerDid = resolveRelayerDid(handlers, listConfig);
10265
+ const result = await handlers.getPODs(relayerDid, page);
10266
+ return {
10267
+ data: listData(result.data),
10268
+ totalPages: getTotalPages(result.totalCount),
10269
+ userRole: null
10270
+ };
10271
+ }
10272
+ case "proposals": {
10273
+ const groupCoreAddress = requireValue(listConfig.groupCoreAddress, "GroupCoreAddress is required");
10274
+ const result = await handlers.getProposals(groupCoreAddress, page);
10275
+ return {
10276
+ data: listData(result.data),
10277
+ totalPages: getTotalPages(result.totalCount),
10278
+ userRole: null
10279
+ };
10280
+ }
10281
+ case "requests": {
10282
+ const relayerDid = resolveRelayerDid(handlers, listConfig);
10283
+ const result = await handlers.getRequests(relayerDid, page);
10284
+ return {
10285
+ data: listData(result.data),
10286
+ totalPages: getTotalPages(result.totalCount),
10287
+ userRole: null
10288
+ };
10289
+ }
10290
+ case "projects": {
10291
+ const relayerDid = resolveRelayerDid(handlers, listConfig);
10292
+ const result = await handlers.getProjects(relayerDid, page);
10293
+ return {
10294
+ data: listData(result.data),
10295
+ totalPages: getTotalPages(result.totalCount),
10296
+ userRole: null
10297
+ };
10298
+ }
10299
+ case "daos": {
10300
+ const relayerDid = resolveRelayerDid(handlers, listConfig);
10301
+ let result;
10302
+ switch (listConfig.daoType) {
10303
+ case "pod":
10304
+ result = await handlers.getPODs(relayerDid, page, daoRoleFilter);
10305
+ break;
10306
+ case "group":
10307
+ if (!handlers.getDaoGroups) throw new Error("getDaoGroups handler is not configured");
10308
+ result = await handlers.getDaoGroups(relayerDid, page, daoRoleFilter);
10309
+ break;
10310
+ default:
10311
+ result = await handlers.getDaos(relayerDid, page, daoRoleFilter);
10312
+ break;
10313
+ }
10314
+ return {
10315
+ data: listData(result.data),
10316
+ totalPages: getTotalPages(result.totalCount),
10317
+ userRole: null
10318
+ };
10319
+ }
10320
+ case "group_members": {
10321
+ const address = requireValue(listConfig.address, "Address is required");
10322
+ const groupCoreAddress = requireValue(listConfig.groupCoreAddress, "Group Core Address is required");
10323
+ const result = await handlers.getMembers(address, groupCoreAddress, !!listConfig.withBalance, page);
10324
+ return {
10325
+ data: listData(result.data),
10326
+ totalPages: getTotalPages(result.totalCount),
10327
+ userRole: null
10328
+ };
10329
+ }
10330
+ case "validators": {
10331
+ const relayerDid = resolveRelayerDid(handlers, listConfig);
10332
+ const result = await handlers.getValidators(relayerDid, page);
10333
+ return {
10334
+ data: listData(result.data),
10335
+ totalPages: getTotalPages(result.totalCount),
10336
+ userRole: null
10337
+ };
10338
+ }
10339
+ case "balances": {
10340
+ const address = requireValue(listConfig.address || getCurrentUserAddress(handlers), "Address is required");
10341
+ const result = await handlers.getBalances(address);
10342
+ return {
10343
+ data: listData(result.data),
10344
+ totalPages: 0,
10345
+ userRole: null
10346
+ };
10347
+ }
10348
+ case "dao_members": {
10349
+ const address = requireValue(listConfig.address || getCurrentUserAddress(handlers), "Address is required");
10350
+ const configuredGroupIds = coerceIdList(listConfig.groupIds);
10351
+ const fallbackGroupIds = configuredGroupIds.length > 0 ? [] : coerceIdList(await handlers.getDaoGroupsIds());
10352
+ const groupIds = configuredGroupIds.length > 0 ? configuredGroupIds : fallbackGroupIds;
10353
+ if (groupIds.length === 0) throw new Error("Group Ids are required");
10354
+ const result = await handlers.getDaoMembers(address, groupIds, !!listConfig.withBalance, page);
10355
+ return {
10356
+ data: listData(result.data),
10357
+ totalPages: getTotalPages(result.totalCount),
10358
+ userRole: null
10359
+ };
10360
+ }
10361
+ case "matrix_members": {
10362
+ if (!roomId || !matrixClient) throw new Error("Room ID and Matrix client are required");
10363
+ const members = await handlers.getRoomMembers(roomId, matrixClient);
10364
+ return {
10365
+ data: listData(members),
10366
+ totalPages: 0,
10367
+ userRole: null
10368
+ };
10369
+ }
10370
+ case "deed_subscriptions": {
10371
+ const relayerDid = resolveRelayerDid(handlers, listConfig);
10372
+ const result = await handlers.getDeedSubscriptions(relayerDid, page);
10373
+ return {
10374
+ data: listData(result.data),
10375
+ totalPages: getTotalPages(result.totalCount),
10376
+ userRole: null
10377
+ };
10378
+ }
10379
+ case "claims": {
10380
+ const deedDid = requireValue(listConfig.deedDid, "Configure issue: please configure deed DID, claim collection ID, and admin address.");
10381
+ const claimCollectionId = requireValue(
10382
+ listConfig.claimCollectionId || coerceIdList(listConfig.selectedCollections)[0],
10383
+ "Configure issue: please configure deed DID, claim collection ID, and admin address."
10384
+ );
10385
+ const adminAddress = requireValue(listConfig.adminAddress, "Configure issue: please configure deed DID, claim collection ID, and admin address.");
10386
+ const userAddress = requireValue(getCurrentUserAddress(handlers), "Unable to determine current user.");
10387
+ let userRole = null;
10388
+ try {
10389
+ const roles = await handlers.getUserRoles({
10390
+ userAddress,
10391
+ adminAddress,
10392
+ deedDid,
10393
+ collectionIds: [claimCollectionId]
10394
+ });
10395
+ const roleData = roles?.find((role) => role.collectionId === claimCollectionId);
10396
+ userRole = roleData?.role || null;
10397
+ } catch (error) {
10398
+ console.error("Failed to fetch user roles:", error);
10399
+ }
10400
+ const allClaims = await handlers.getClaimsPerCollectionId({ collectionId: claimCollectionId });
10401
+ const claimsWithStatuses = allClaims.map((claim) => {
10402
+ const { status } = getClaimStatus(claim);
10403
+ const statusLower = status.toLowerCase();
10404
+ return { ...claim, [statusLower]: true };
10405
+ });
10406
+ let filteredClaims;
10407
+ if (userRole === "EA" /* Evaluator */) {
10408
+ filteredClaims = claimsWithStatuses;
10409
+ } else if (userRole === "SA" /* ServiceProvider */) {
10410
+ filteredClaims = claimsWithStatuses.filter((claim) => claim.agentAddress === userAddress);
10411
+ } else {
10412
+ filteredClaims = [];
10413
+ }
10414
+ return {
10415
+ data: listData(filteredClaims),
10416
+ totalPages: 0,
10417
+ userRole
10418
+ };
10419
+ }
10420
+ default:
10421
+ throw new Error(`Unknown list type: ${listType}`);
10422
+ }
10423
+ }
10424
+
10166
10425
  // src/mantine/blocks/list/flow/ListFlowView.tsx
10167
10426
  var LIST_FLOW_PANEL_ID = "list-flow-panel";
10168
10427
  var LIST_SELECTION_FLOW_PANEL_ID = "list-selection-flow-panel";
@@ -10323,216 +10582,40 @@ var ListFlowView = ({ block, editor }) => {
10323
10582
  };
10324
10583
  const daoRoleFilter = listType === "daos" && (listFilterConfig?.key === "isOwner" || listFilterConfig?.key === "isController") ? listFilterConfig.key : void 0;
10325
10584
  const fetchData = useCallback31(async () => {
10326
- if (!handlers || !listType || !listConfig) return;
10585
+ if (!handlers || !listType) return;
10327
10586
  setLoading(true);
10328
10587
  setError(null);
10329
10588
  setUserRole(null);
10330
10589
  try {
10331
- let result;
10332
- let did;
10333
- let relayerDid;
10334
- let groupIds;
10335
- let user;
10336
- switch (listType) {
10337
- case "linked_resources":
10338
- did = handlers.getEntityDid();
10339
- if (!did && !listConfig.did) throw new Error("DID is required");
10340
- const { service, linkedResource } = await handlers.getEntity(listConfig.did || did);
10341
- if (!service) return;
10342
- const excludedResources = ["pge", "flw", "dmn", "pri", "lgo", "set", "page"];
10343
- const filteredResources = linkedResource.filter(({ id }) => {
10344
- return !excludedResources.some((tag) => id.includes(`#${tag}`));
10345
- });
10346
- const resources = categorizeResources(filteredResources, service);
10347
- setData({ items: resources });
10348
- break;
10349
- case "assets":
10350
- did = handlers.getEntityDid();
10351
- if (!did && !listConfig.collectionDid) throw new Error("Collection DID is required");
10352
- if (listConfig.ownerBased) {
10353
- user = handlers.getCurrentUser();
10354
- result = await handlers.getAssets(listConfig.collectionDid || did, page, user.address);
10355
- } else {
10356
- result = await handlers.getAssets(listConfig.collectionDid || did, page);
10357
- }
10358
- setTotalPages(Math.ceil(result.totalCount / DEFAULT_PAGE_SIZE));
10359
- setData({ items: result.data });
10360
- break;
10361
- case "transactions":
10362
- const effectiveAddress = runtimeSearchValue || listConfig.address;
10363
- if (!effectiveAddress) throw new Error("Address is required");
10364
- result = await handlers.getTransactions(effectiveAddress, page);
10365
- setTotalPages(Math.ceil(result.totalCount / DEFAULT_PAGE_SIZE));
10366
- setData({ items: result.data });
10367
- break;
10368
- case "collections":
10369
- relayerDid = handlers.getRelayerDid();
10370
- if (!relayerDid && !listConfig.relayedNodeDid) throw new Error("Relayer is required");
10371
- result = await handlers.getCollections(listConfig.relayedNodeDid || relayerDid, page);
10372
- setTotalPages(Math.ceil(result.totalCount / DEFAULT_PAGE_SIZE));
10373
- setData({ items: result.data });
10374
- break;
10375
- case "investments":
10376
- relayerDid = handlers.getRelayerDid();
10377
- if (!relayerDid && !listConfig.relayedNodeDid) throw new Error("Relayer is required");
10378
- result = await handlers.getInvestments(listConfig.relayedNodeDid || relayerDid, page);
10379
- setTotalPages(Math.ceil(result.totalCount / DEFAULT_PAGE_SIZE));
10380
- setData({ items: result.data });
10381
- break;
10382
- case "oracles":
10383
- relayerDid = handlers.getRelayerDid();
10384
- if (!relayerDid && !listConfig.relayedNodeDid) throw new Error("Relayer is required");
10385
- result = await handlers.getOracles(listConfig.relayedNodeDid || relayerDid, page);
10386
- setTotalPages(Math.ceil(result.totalCount / DEFAULT_PAGE_SIZE));
10387
- setData({ items: result.data });
10388
- break;
10389
- case "pods":
10390
- relayerDid = handlers.getRelayerDid();
10391
- if (!relayerDid && !listConfig.relayedNodeDid) throw new Error("Relayer is required");
10392
- result = await handlers.getPODs(listConfig.relayedNodeDid || relayerDid, page);
10393
- setData({ items: result.data });
10394
- break;
10395
- case "proposals":
10396
- if (!listConfig.groupCoreAddress) throw new Error("GroupCoreAddress is required");
10397
- result = await handlers.getProposals(listConfig.groupCoreAddress, page);
10398
- setData({ items: result.data });
10399
- break;
10400
- case "requests":
10401
- relayerDid = handlers.getRelayerDid();
10402
- if (!relayerDid && !listConfig.relayedNodeDid) throw new Error("Relayer is required");
10403
- result = await handlers.getRequests(listConfig.relayedNodeDid || relayerDid, page);
10404
- setTotalPages(Math.ceil(result.totalCount / DEFAULT_PAGE_SIZE));
10405
- setData({ items: result.data });
10406
- break;
10407
- case "projects":
10408
- relayerDid = handlers.getRelayerDid();
10409
- if (!relayerDid && !listConfig.relayedNodeDid) throw new Error("Relayer is required");
10410
- result = await handlers.getProjects(listConfig.relayedNodeDid || relayerDid, page);
10411
- setTotalPages(Math.ceil(result.totalCount / DEFAULT_PAGE_SIZE));
10412
- setData({ items: result.data });
10413
- break;
10414
- case "daos":
10415
- relayerDid = handlers.getRelayerDid();
10416
- if (!relayerDid && !listConfig.relayedNodeDid) throw new Error("Relayer is required");
10417
- const daoRelayerDid = listConfig.relayedNodeDid || relayerDid;
10418
- switch (listConfig.daoType) {
10419
- case "pod":
10420
- result = await handlers.getPODs(daoRelayerDid, page, daoRoleFilter);
10421
- break;
10422
- case "group":
10423
- if (!handlers.getDaoGroups) throw new Error("getDaoGroups handler is not configured");
10424
- result = await handlers.getDaoGroups(daoRelayerDid, page, daoRoleFilter);
10425
- break;
10426
- default:
10427
- result = await handlers.getDaos(daoRelayerDid, page, daoRoleFilter);
10428
- break;
10429
- }
10430
- setTotalPages(Math.ceil(result.totalCount / DEFAULT_PAGE_SIZE));
10431
- setData({ items: result.data });
10432
- break;
10433
- case "group_members":
10434
- if (!listConfig.address) throw new Error("Address is required");
10435
- if (!listConfig.groupCoreAddress) throw new Error("Group Core Address is required");
10436
- result = await handlers.getMembers(listConfig.address, listConfig.groupCoreAddress, listConfig.withBalance, page);
10437
- setData({ items: result.data });
10438
- break;
10439
- case "validators":
10440
- relayerDid = handlers.getRelayerDid();
10441
- if (!relayerDid && !listConfig.relayedNodeDid) throw new Error("Relayer is required");
10442
- result = await handlers.getValidators(listConfig.relayedNodeDid || relayerDid, page);
10443
- setData({ items: result.data });
10444
- break;
10445
- case "balances":
10446
- user = handlers.getCurrentUser();
10447
- if (!user.address && !listConfig.address) throw new Error("Address is required");
10448
- result = await handlers.getBalances(listConfig.address || user.address);
10449
- setData({ items: result.data });
10450
- break;
10451
- case "dao_members":
10452
- user = handlers.getCurrentUser();
10453
- groupIds = await handlers.getDaoGroupsIds();
10454
- if (!user.address && !listConfig.address) throw new Error("Address is required");
10455
- if (!groupIds && !listConfig.groupIds) throw new Error("Group Ids are required");
10456
- result = await handlers.getDaoMembers(listConfig.address || user.address, listConfig.groupIds || groupIds, listConfig.withBalance, page);
10457
- setData({ items: result.data });
10458
- break;
10459
- case "deed_subscriptions":
10460
- relayerDid = handlers.getRelayerDid();
10461
- if (!relayerDid && !listConfig.relayedNodeDid) throw new Error("Relayer is required");
10462
- result = await handlers.getDeedSubscriptions(listConfig.relayedNodeDid || relayerDid, page);
10463
- setTotalPages(Math.ceil(result.totalCount / DEFAULT_PAGE_SIZE));
10464
- setData({ items: result.data });
10465
- break;
10466
- case "claims":
10467
- const deedDid = listConfig.deedDid || "";
10468
- const claimCollectionId = listConfig.claimCollectionId || "";
10469
- const adminAddress = listConfig.adminAddress || "";
10470
- if (!deedDid || !claimCollectionId || !adminAddress) {
10471
- setError("Configure issue: please configure deed DID, claim collection ID, and admin address.");
10472
- setData({ items: [] });
10473
- } else {
10474
- const user2 = handlers.getCurrentUser();
10475
- if (!user2 || !user2.address) {
10476
- setError("Unable to determine current user.");
10477
- setData({ items: [] });
10478
- break;
10479
- }
10480
- let fetchedUserRole = null;
10481
- try {
10482
- const roles = await handlers.getUserRoles({
10483
- userAddress: user2.address,
10484
- adminAddress,
10485
- deedDid,
10486
- collectionIds: [claimCollectionId]
10487
- });
10488
- const roleData = roles?.find((r) => r.collectionId === claimCollectionId);
10489
- fetchedUserRole = roleData?.role || null;
10490
- setUserRole(fetchedUserRole);
10491
- } catch (error2) {
10492
- console.error("Failed to fetch user roles:", error2);
10493
- setUserRole(null);
10494
- }
10495
- const allClaims = await handlers.getClaimsPerCollectionId({ collectionId: claimCollectionId });
10496
- const claimsWithStatuses = allClaims.map((claim) => {
10497
- const { status } = getClaimStatus(claim);
10498
- const statusLower = status.toLowerCase();
10499
- return { ...claim, [statusLower]: true };
10500
- });
10501
- let filteredClaims;
10502
- if (fetchedUserRole === "EA" /* Evaluator */) {
10503
- filteredClaims = claimsWithStatuses;
10504
- } else if (fetchedUserRole === "SA" /* ServiceProvider */) {
10505
- filteredClaims = claimsWithStatuses.filter((claim) => claim.agentAddress === user2.address);
10506
- } else {
10507
- filteredClaims = [];
10508
- }
10509
- setData({ items: filteredClaims });
10510
- }
10511
- break;
10512
- case "matrix_members":
10513
- const roomId = editor.getRoomId?.();
10514
- const mx = editor.getMatrixClient?.();
10515
- if (!roomId || !mx) throw new Error("Room ID and Matrix client are required");
10516
- const members = await handlers.getRoomMembers(roomId, mx);
10517
- setData({ items: members });
10518
- break;
10519
- default:
10520
- throw new Error(`Unknown list type: ${listType}`);
10521
- }
10590
+ const result = await fetchListData({
10591
+ handlers,
10592
+ listType,
10593
+ listConfig,
10594
+ page,
10595
+ runtimeSearchValue,
10596
+ daoRoleFilter,
10597
+ roomId: editor.getRoomId?.(),
10598
+ matrixClient: editor.getMatrixClient?.()
10599
+ });
10600
+ setData(result.data);
10601
+ setTotalPages(result.totalPages);
10602
+ setUserRole(result.userRole);
10522
10603
  } catch (err) {
10604
+ setData({ items: [] });
10605
+ setTotalPages(0);
10523
10606
  setError(err instanceof Error ? err.message : "Failed to fetch data");
10524
10607
  } finally {
10525
10608
  setLoading(false);
10526
10609
  }
10527
- }, [handlers, page, listType, listConfig, runtimeSearchValue, daoRoleFilter]);
10610
+ }, [handlers, page, listType, listConfig, runtimeSearchValue, daoRoleFilter, editor]);
10528
10611
  useEffect36(() => {
10529
10612
  fetchDataRef.current = fetchData;
10530
10613
  }, [fetchData]);
10531
10614
  useEffect36(() => {
10532
- if (listType && listConfig) {
10615
+ if (listType) {
10533
10616
  fetchData();
10534
10617
  }
10535
- }, [listType, page, listConfig, runtimeSearchValue, daoRoleFilter]);
10618
+ }, [fetchData, listType]);
10536
10619
  const handleFilterChange = (filterOption) => {
10537
10620
  if (filterOption?.key === listFilterConfig?.key && filterOption?.value === listFilterConfig?.value) {
10538
10621
  if (listType === "daos") setPage(1);
@@ -10603,7 +10686,7 @@ var ListFlowView = ({ block, editor }) => {
10603
10686
  if (!listType) {
10604
10687
  return /* @__PURE__ */ React93.createElement(Center9, { py: "xl" }, /* @__PURE__ */ React93.createElement(Text60, { size: "sm", c: "dimmed" }, "List not configured"));
10605
10688
  }
10606
- return /* @__PURE__ */ React93.createElement(Stack59, { w: "100%" }, /* @__PURE__ */ React93.createElement(Flex28, { px: 5, align: "center", justify: "space-between" }, /* @__PURE__ */ React93.createElement(Title5, { order: 4 }, getListNameByType(listType)), /* @__PURE__ */ React93.createElement(Tooltip10, { label: opened ? "Collapse" : "Expand", withArrow: true }, /* @__PURE__ */ React93.createElement(ActionIcon15, { variant: "subtle", size: "sm", onClick: toggle, "aria-label": opened ? "Collapse" : "Expand" }, opened ? /* @__PURE__ */ React93.createElement(IconChevronUp, { size: 18 }) : /* @__PURE__ */ React93.createElement(IconChevronDown2, { size: 18 })))), /* @__PURE__ */ React93.createElement(Collapse2, { pb: 5, px: 5, in: opened }, /* @__PURE__ */ React93.createElement(Stack59, { mih: totalPages !== 1 ? 500 : void 0, w: "100%" }, /* @__PURE__ */ React93.createElement(Flex28, { align: "center", gap: "xs" }, listSortConfig?.key && /* @__PURE__ */ React93.createElement(Flex28, { align: "center" }, /* @__PURE__ */ React93.createElement(Text60, { size: "xs" }, listSortConfig.key?.replace(/([A-Z])/g, " $1").replace(
10689
+ return /* @__PURE__ */ React93.createElement(Stack59, { w: "100%" }, /* @__PURE__ */ React93.createElement(Flex28, { px: 5, align: "center", justify: "space-between" }, /* @__PURE__ */ React93.createElement(Title5, { order: 4 }, getListNameByType(listType)), /* @__PURE__ */ React93.createElement(Tooltip10, { label: opened ? "Collapse" : "Expand", withArrow: true }, /* @__PURE__ */ React93.createElement(ActionIcon15, { variant: "subtle", size: "sm", onClick: toggle, "aria-label": opened ? "Collapse" : "Expand" }, opened ? /* @__PURE__ */ React93.createElement(IconChevronUp, { size: 18 }) : /* @__PURE__ */ React93.createElement(IconChevronDown2, { size: 18 })))), /* @__PURE__ */ React93.createElement(Collapse2, { pb: 5, px: 5, in: opened }, /* @__PURE__ */ React93.createElement(Stack59, { mih: totalPages > 1 ? 500 : void 0, w: "100%" }, /* @__PURE__ */ React93.createElement(Flex28, { align: "center", gap: "xs" }, listSortConfig?.key && /* @__PURE__ */ React93.createElement(Flex28, { align: "center" }, /* @__PURE__ */ React93.createElement(Text60, { size: "xs" }, listSortConfig.key?.replace(/([A-Z])/g, " $1").replace(
10607
10690
  /^./,
10608
10691
  (str) => str.toUpperCase()
10609
10692
  ), " "), /* @__PURE__ */ React93.createElement(Text60, { lh: 0.5 }, listSortConfig.direction === "asc" && /* @__PURE__ */ React93.createElement(IconArrowUp3, { size: 18 }), listSortConfig.direction === "desc" && /* @__PURE__ */ React93.createElement(IconArrowDown2, { size: 18 }))), isMultiSelect && /* @__PURE__ */ React93.createElement(Text60, { lh: 0.5 }, "Multi Selection")), /* @__PURE__ */ React93.createElement(Flex28, { justify: "space-between" }, /* @__PURE__ */ React93.createElement(Flex28, { gap: "xs", align: "center" }, /* @__PURE__ */ React93.createElement(FilterTab, { key: "All", label: "All", isActive: !listFilterConfig?.key, onClick: () => handleFilterChange(null) }), Array.isArray(listFilterConfigOptions) && listFilterConfigOptions.length > 0 && listFilterConfigOptions.map(({ key, label, type }) => /* @__PURE__ */ React93.createElement(
@@ -10636,7 +10719,7 @@ var ListFlowView = ({ block, editor }) => {
10636
10719
  isSearchActive: isSearchOpen || !!runtimeSearchValue
10637
10720
  }
10638
10721
  )
10639
- ))), /* @__PURE__ */ React93.createElement(Flex28, { flex: 1 }, loading ? /* @__PURE__ */ React93.createElement(Center9, { py: "xl", w: "100%" }, /* @__PURE__ */ React93.createElement(Loader16, { size: "md", mx: "auto" })) : error ? /* @__PURE__ */ React93.createElement(BaseAlert, { onRetry: fetchData, errMsg: error }) : /* @__PURE__ */ React93.createElement(Stack59, { flex: 1 }, /* @__PURE__ */ React93.createElement(Stack59, { gap: "md" }, renderListComponent(), /* @__PURE__ */ React93.createElement(
10722
+ ))), /* @__PURE__ */ React93.createElement(Flex28, { flex: 1 }, loading ? /* @__PURE__ */ React93.createElement(Center9, { py: "xl", w: "100%" }, /* @__PURE__ */ React93.createElement(Loader16, { size: "md", mx: "auto" })) : error ? /* @__PURE__ */ React93.createElement(BaseAlert, { onRetry: fetchData, errMsg: error }) : /* @__PURE__ */ React93.createElement(Stack59, { flex: 1 }, /* @__PURE__ */ React93.createElement(Stack59, { gap: "md" }, renderListComponent(), totalPages > 1 && /* @__PURE__ */ React93.createElement(
10640
10723
  ListPagination,
10641
10724
  {
10642
10725
  page,
@@ -57734,4 +57817,4 @@ export {
57734
57817
  ixoGraphQLClient,
57735
57818
  getEntity
57736
57819
  };
57737
- //# sourceMappingURL=chunk-RFTH7IX3.js.map
57820
+ //# sourceMappingURL=chunk-W5CKNMDB.js.map