UNPKG

sui-explorer-local

Version:
67 lines (54 loc) 1.91 kB
// Copyright (c) Mysten Labs, Inc. // SPDX-License-Identifier: Apache-2.0 import { DisplayFieldsResponse, SuiObjectChange, SuiObjectChangeCreated, SuiObjectChangeDeleted, SuiObjectChangeMutated, SuiObjectChangePublished, SuiObjectChangeTransferred, SuiObjectChangeWrapped, } from '@mysten/sui.js/client'; import { groupByOwner } from './groupByOwner'; import { SuiObjectChangeTypes } from './types'; export type WithDisplayFields<T> = T & { display?: DisplayFieldsResponse }; export type SuiObjectChangeWithDisplay = WithDisplayFields<SuiObjectChange>; export type ObjectChanges = { changesWithDisplay: SuiObjectChangeWithDisplay[]; changes: SuiObjectChange[]; ownerType: string; }; export type ObjectChangesByOwner = Record<string, ObjectChanges>; export type ObjectChangeSummary = { [K in SuiObjectChangeTypes]: ObjectChangesByOwner; }; export const getObjectChangeSummary = (objectChanges: SuiObjectChangeWithDisplay[]) => { if (!objectChanges) return null; const mutated = objectChanges.filter( (change) => change.type === 'mutated', ) as SuiObjectChangeMutated[]; const created = objectChanges.filter( (change) => change.type === 'created', ) as SuiObjectChangeCreated[]; const transferred = objectChanges.filter( (change) => change.type === 'transferred', ) as SuiObjectChangeTransferred[]; const published = objectChanges.filter( (change) => change.type === 'published', ) as SuiObjectChangePublished[]; const wrapped = objectChanges.filter( (change) => change.type === 'wrapped', ) as SuiObjectChangeWrapped[]; const deleted = objectChanges.filter( (change) => change.type === 'deleted', ) as SuiObjectChangeDeleted[]; return { transferred: groupByOwner(transferred), created: groupByOwner(created), mutated: groupByOwner(mutated), published: groupByOwner(published), wrapped: groupByOwner(wrapped), deleted: groupByOwner(deleted), }; };