MCPcopy
hub / github.com/tinyplex/tinybase / setMetricDefinition

Function setMetricDefinition

src/metrics/index.ts:75–127  ·  view source on GitHub ↗
(
    metricId: Id,
    tableId: Id,
    aggregate?: 'sum' | 'avg' | 'min' | 'max' | MetricAggregate,
    getNumber?: Id | ((getCell: GetCell, rowId: Id) => number),
    aggregateAdd?: MetricAggregateAdd,
    aggregateRemove?: MetricAggregateRemove,
    aggregateReplace?: MetricAggregateReplace,
  )

Source from the content-addressed store, hash-verified

73 );
74
75 const setMetricDefinition = (
76 metricId: Id,
77 tableId: Id,
78 aggregate?: 'sum' | 'avg' | 'min' | 'max' | MetricAggregate,
79 getNumber?: Id | ((getCell: GetCell, rowId: Id) => number),
80 aggregateAdd?: MetricAggregateAdd,
81 aggregateRemove?: MetricAggregateRemove,
82 aggregateReplace?: MetricAggregateReplace,
83 ): Metrics => {
84 const aggregators: Aggregators = isFunction(aggregate)
85 ? [aggregate, aggregateAdd, aggregateRemove, aggregateReplace]
86 : (mapGet(numericAggregators, aggregate as Id) ??
87 (mapGet(numericAggregators, SUM) as Aggregators));
88
89 setDefinitionAndListen(
90 metricId,
91 tableId,
92 (
93 change: () => void,
94 changedNumbers: IdMap<[number | undefined, number | undefined]>,
95 _changedSortKeys: any,
96 numbers: IdMap<number | undefined>,
97 _sortKeys?: any,
98 force?: boolean,
99 ) => {
100 const oldMetric = getMetric(metricId);
101 const oldLength = collSize(numbers);
102 force ||= isUndefined(oldMetric);
103
104 change();
105
106 let newMetric = getAggregateValue(
107 oldMetric,
108 oldLength,
109 numbers,
110 changedNumbers,
111 aggregators,
112 force,
113 );
114
115 if (!isFiniteNumber(newMetric)) {
116 newMetric = undefined;
117 }
118
119 if (newMetric != oldMetric) {
120 setMetric(metricId, newMetric);
121 callListeners(metricListeners, [metricId], newMetric, oldMetric);
122 }
123 },
124 getRowCellFunction(getNumber, 1),
125 );
126 return metrics;
127 };
128
129 const delMetricDefinition = (metricId: Id): Metrics => {
130 delDefinition(metricId);

Callers

nothing calls this directly

Calls 9

isFunctionFunction · 0.90
mapGetFunction · 0.90
collSizeFunction · 0.90
isUndefinedFunction · 0.90
getAggregateValueFunction · 0.90
getRowCellFunctionFunction · 0.90
setDefinitionAndListenFunction · 0.50
getMetricFunction · 0.50
callListenersFunction · 0.50

Tested by

no test coverage detected

Used in the wild real call sites across dependent graphs

searching dependent graphs…