blob: f02d53649bf350f6b2a90dce1724c764a97e6037 [file]
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
import { entityStateReadOnly } from "@utils/Enum";
/** Same ordering as Classic `sortRowsInRelation` / Schema tab. */
export const sortRowsInRelation = (rows: any[]): any[] => {
return [...rows].sort((a, b) => {
const pa = a?.attributes?.position;
const pb = b?.attributes?.position;
if (pa != null && pb != null && Number(pa) !== Number(pb)) {
return Number(pa) - Number(pb);
}
const na = String(a?.attributes?.name ?? "");
const nb = String(b?.attributes?.name ?? "");
return na.localeCompare(nb);
});
};
export const isSchemaRowHistorical = (row: any): boolean => {
return Boolean(
row?.status && entityStateReadOnly[row.status as string]
);
};
/**
* Client-side visibility for the schema table (Classic: active only vs
* active + historical; if only historical exist, show historical only).
* When historical is requested but the cache has none, return [] so the
* table empty state shows "No records found" (not active rows + banner).
*/
export const getVisibleSchemaRowsFromFullMerged = (
fullMergedRows: any[],
checked: boolean
): any[] => {
const active = fullMergedRows.filter((r) => !isSchemaRowHistorical(r));
const historical = fullMergedRows.filter((r) => isSchemaRowHistorical(r));
if (!checked) {
return active;
}
if (historical.length === 0) {
return [];
}
if (active.length === 0 && historical.length > 0) {
return historical;
}
return active.concat(historical);
};
export const countHistoricalInFullMerged = (fullMergedRows: any[]): number => {
return fullMergedRows.filter((r) => isSchemaRowHistorical(r)).length;
};
export const buildFullMergedResolvedRows = (
rowsByRelation: Record<string, any[]>,
relationNames: string[],
resolve: (r: any) => any
): any[] => {
const blocks: any[] = [];
for (const name of relationNames) {
const raw = rowsByRelation[name] || [];
const resolved = raw.map((r) => resolve(r));
blocks.push(...sortRowsInRelation(resolved));
}
return blocks;
};