* ESLint rule: only take explicit boolean predicates in if statements Co-authored-by: v1b3m <vibenjamin6@gmail.com> Co-authored-by: Toledodev <rafael.toledo@engenharia.ufjf.br> * Merge main Co-authored-by: v1b3m <vibenjamin6@gmail.com> Co-authored-by: Toledodev <rafael.toledo@engenharia.ufjf.br> * Fix frontend linter errors Co-authored-by: v1b3m <vibenjamin6@gmail.com> Co-authored-by: Toledodev <rafael.toledo@engenharia.ufjf.br> * Fix jest Co-authored-by: v1b3m <vibenjamin6@gmail.com> Co-authored-by: Toledodev <rafael.toledo@engenharia.ufjf.br> * Refactor according to review Co-authored-by: v1b3m <vibenjamin6@gmail.com> Co-authored-by: Toledodev <rafael.toledo@engenharia.ufjf.br> * Refactor according to review Co-authored-by: v1b3m <vibenjamin6@gmail.com> Co-authored-by: Toledodev <rafael.toledo@engenharia.ufjf.br> * Fix lint on new code Co-authored-by: v1b3m <vibenjamin6@gmail.com> Co-authored-by: Toledodev <rafael.toledo@engenharia.ufjf.br> --------- Co-authored-by: gitstart-twenty <gitstart-twenty@users.noreply.github.com> Co-authored-by: v1b3m <vibenjamin6@gmail.com> Co-authored-by: Toledodev <rafael.toledo@engenharia.ufjf.br>
68 lines
2.4 KiB
TypeScript
68 lines
2.4 KiB
TypeScript
import { FieldMetadata } from '@/object-record/record-field/types/FieldMetadata';
|
|
import { ColumnDefinition } from '@/object-record/record-table/types/ColumnDefinition';
|
|
import { mapArrayToObject } from '~/utils/array/mapArrayToObject';
|
|
import { moveArrayItem } from '~/utils/array/moveArrayItem';
|
|
import { isNonNullable } from '~/utils/isNonNullable';
|
|
import { isNullable } from '~/utils/isNullable';
|
|
|
|
import { ViewField } from '../types/ViewField';
|
|
|
|
export const mapViewFieldsToColumnDefinitions = ({
|
|
columnDefinitions,
|
|
viewFields,
|
|
}: {
|
|
columnDefinitions: ColumnDefinition<FieldMetadata>[];
|
|
viewFields: ViewField[];
|
|
}): ColumnDefinition<FieldMetadata>[] => {
|
|
let labelIdentifierFieldMetadataId = '';
|
|
|
|
const columnDefinitionsByFieldMetadataId = mapArrayToObject(
|
|
columnDefinitions,
|
|
({ fieldMetadataId }) => fieldMetadataId,
|
|
);
|
|
|
|
const columnDefinitionsFromViewFields = viewFields
|
|
.map((viewField) => {
|
|
const correspondingColumnDefinition =
|
|
columnDefinitionsByFieldMetadataId[viewField.fieldMetadataId];
|
|
|
|
if (isNullable(correspondingColumnDefinition)) return null;
|
|
|
|
const { isLabelIdentifier } = correspondingColumnDefinition;
|
|
|
|
if (isLabelIdentifier === true) {
|
|
labelIdentifierFieldMetadataId =
|
|
correspondingColumnDefinition.fieldMetadataId;
|
|
}
|
|
|
|
return {
|
|
fieldMetadataId: viewField.fieldMetadataId,
|
|
label: correspondingColumnDefinition.label,
|
|
metadata: correspondingColumnDefinition.metadata,
|
|
infoTooltipContent: correspondingColumnDefinition.infoTooltipContent,
|
|
iconName: correspondingColumnDefinition.iconName,
|
|
type: correspondingColumnDefinition.type,
|
|
position: isLabelIdentifier ? 0 : viewField.position,
|
|
size: viewField.size ?? correspondingColumnDefinition.size,
|
|
isLabelIdentifier,
|
|
isVisible: isLabelIdentifier || viewField.isVisible,
|
|
viewFieldId: viewField.id,
|
|
};
|
|
})
|
|
.filter(isNonNullable);
|
|
|
|
// No label identifier set for this object
|
|
if (!labelIdentifierFieldMetadataId) return columnDefinitionsFromViewFields;
|
|
|
|
const labelIdentifierIndex = columnDefinitionsFromViewFields.findIndex(
|
|
({ fieldMetadataId }) => fieldMetadataId === labelIdentifierFieldMetadataId,
|
|
);
|
|
|
|
// Label identifier field found in view fields
|
|
// => move it to the start of the list
|
|
return moveArrayItem(columnDefinitionsFromViewFields, {
|
|
fromIndex: labelIdentifierIndex,
|
|
toIndex: 0,
|
|
});
|
|
};
|