qlik-oss/sn-table

View on GitHub
src/types.ts

Summary

Maintainability
A
0 mins
Test Coverage
import { Direction } from "@mui/material";
import { stardust } from "@nebula.js/stardust";
import { ColumnWidth } from "@qlik/nebula-table-utils/lib/components/ColumnAdjuster";

export type Align = "left" | "center" | "right";

export interface ViewService {
  rowPartialHeight?: number;
  scrollLeft?: number;
  scrollTopRatio?: number;
  qTop: number;
  qHeight: number;
  visibleLeft?: number;
  visibleWidth?: number;
  visibleTop?: number;
  visibleHeight?: number;
  rowsPerPage?: number;
  page?: number;
  viewState?: ViewState;
  estimatedRowHeight: number;
}

export interface Size {
  width: number;
  height: number;
}
export interface SnapshotData {
  content?: {
    rowPartialHeight?: number;
    scrollLeft?: number;
    scrollTopRatio?: number;
    visibleLeft?: number;
    visibleWidth?: number;
    visibleTop?: number;
    visibleHeight?: number;
    rowsPerPage?: number;
    page?: number;
    size: Size;
    estimatedRowHeight: number;
  };
}

export interface TextAlign {
  auto: boolean;
  align: Align;
}

// properties
interface InlineDimensionDef extends EngineAPI.INxInlineDimensionDef {
  textAlign: TextAlign;
  columnWidth: ColumnWidth;
}
interface InlineMeasureDef extends EngineAPI.INxInlineMeasureDef {
  textAlign: TextAlign;
  columnWidth: ColumnWidth;
}
interface AttributeExpressionProperties extends EngineAPI.INxAttrExprDef {
  id: "cellForegroundColor" | "cellBackgroundColor";
}
export interface DimensionProperties extends Omit<EngineAPI.INxDimension, "qDef" | "qAttributeExpressions"> {
  qDef: InlineDimensionDef;
  qAttributeExpressions: AttributeExpressionProperties[];
}
export interface MeasureProperties extends Omit<EngineAPI.INxMeasure, "qDef" | "qAttributeExpressions"> {
  qDef: InlineMeasureDef;
  qAttributeExpressions: AttributeExpressionProperties[];
}
export interface QHyperCubeDef extends Omit<EngineAPI.IHyperCubeDef, "qDimensions" | "qMeasures"> {
  qDimensions: DimensionProperties[];
  qMeasures: MeasureProperties[];
  qColumnOrder: number[];
}

// Layout
export interface ExtendedNxAttrExprInfo extends EngineAPI.INxAttrExprInfo {
  id: string;
}

export interface ExtendedNxDimensionInfo extends Omit<EngineAPI.INxDimensionInfo, "qAttrExprInfo"> {
  textAlign: TextAlign;
  qAttrExprInfo: ExtendedNxAttrExprInfo[];
  qLibraryId: string;
  columnWidth: ColumnWidth;
}

export interface ExtendedNxMeasureInfo extends EngineAPI.INxMeasureInfo {
  textAlign: TextAlign;
  qAttrExprInfo: ExtendedNxAttrExprInfo[];
  qLibraryId: string;
  columnWidth: ColumnWidth;
}

export interface HyperCube extends Omit<EngineAPI.IHyperCube, "qDimensionInfo" | "qMeasureInfo"> {
  qColumnOrder: number[];
  qDimensionInfo: ExtendedNxDimensionInfo[];
  qMeasureInfo: ExtendedNxMeasureInfo[];
}

export interface PaletteColor {
  index: number;
  color: string | null;
}

export interface HeaderStyling {
  fontColor?: PaletteColor;
  fontSize?: number;
}

export interface ContentStyling extends HeaderStyling {
  hoverColor?: PaletteColor;
  hoverEffect?: boolean;
  hoverFontColor?: PaletteColor;
  padding?: string; // not available as option in the styling panel
}
export interface Component {
  key: string;
  content?: ContentStyling;
  header?: HeaderStyling;
}

export interface TableLayout extends Omit<EngineAPI.IGenericHyperCubeLayout, "qHyperCube"> {
  qHyperCube: HyperCube;
  totals: {
    show: boolean;
    position: "top" | "bottom" | "noTotals";
    label: string;
  };
  usePagination?: boolean;
  components?: Component[];
  snapshotData?: SnapshotData;
}
export interface Point {
  x: number;
  y: number;
}
export interface SnapshotLayout extends EngineAPI.IGenericObjectLayout {
  qHyperCube?: HyperCube;
  snapshotData?: SnapshotData;
}

export interface Cell {
  qText?: string;
  qNum?: number | string;
  align: Align;
  qAttrExps?: EngineAPI.INxAttributeExpressionValues;
  qElemNumber: number;
  rowIdx: number;
  colIdx: number;
  pageRowIdx: number;
  pageColIdx: number;
  selectionColIdx: number;
  isSelectable: boolean;
  isLastRow: boolean;
  isLastColumn?: boolean;
  isNumeric?: boolean;
}

export interface Row {
  // for the row key, string is needed
  [key: string]: Cell | string;
}

export type SortDirection = "A" | "D";

export interface Column {
  id: string;
  isDim: boolean;
  qLibraryId?: string;
  fieldId: string;
  isLocked: boolean;
  colIdx: number;
  pageColIdx: number;
  selectionColIdx: number;
  isActivelySorted: boolean;
  label: string;
  headTextAlign: Align;
  totalsTextAlign: Align;
  bodyTextAlign: "auto" | Align;
  stylingIDs: string[];
  sortDirection: SortDirection;
  qReverseSort: boolean;
  totalInfo: string;
  qApprMaxGlyphCount: number;
  columnWidth: ColumnWidth;
}

export type TotalsPosition = { atTop: boolean; atBottom: boolean };

export type TableData = {
  totalColumnCount: number;
  totalRowCount: number;
  totalPages: number;
  paginationNeeded: boolean;
  rows: Row[];
  columns: Column[];
  totalsPosition: TotalsPosition;
};

export interface PageInfo {
  page: number;
  rowsPerPage: number;
  rowsPerPageOptions: number[];
}

export type SetPageInfo = stardust.SetStateFn<PageInfo>;

export interface BodyColors {
  borderColor: string;
}

export interface ExtendedSelectionAPI extends stardust.ObjectSelections {
  on(eventType: string, callback: () => void): void;
  removeListener(eventType: string, callback: () => void): void;
}

export interface ViewState {
  rowPartialHeight: number;
  scrollLeft: number;
  scrollTopRatio?: number;
  visibleTop: number;
  visibleHeight: number;
  visibleLeft?: number;
  visibleWidth?: number;
  rowsPerPage?: number;
  page?: number;
  isMultiPage?: boolean;
  maxLineCount?: number;
  usePagination?: boolean;
  skipTotals?: boolean;
  skipHeader?: boolean;
}

export interface UseOptions {
  viewState: ViewState;
  direction: Direction | undefined;
  footerContainer: HTMLElement | undefined;
  freeResize?: boolean;
}

export interface AnnounceArgs {
  keys: Array<string | Array<string>>;
  shouldBeAtomic?: boolean;
  politeness?: "polite" | "assertive" | "off";
}

export type Announce = (arg0: AnnounceArgs) => void;

export type ChangeSortOrder = (column: Column, sortOrder?: SortDirection) => Promise<void>;

export type ApplyColumnWidths = (newColumnSize: ColumnWidth, column: Column) => void;

export interface Galaxy {
  translator: stardust.Translator;
  carbon: boolean;
  flags: stardust.Flags;
}

type ExtendedGenericHyperCubeProperties = EngineAPI.IGenericHyperCubeProperties & {
  qHyperCubeDef: {
    columnWidths?: number[];
  };
};

export interface ExportFormat {
  data: unknown[];
  properties: ExtendedGenericHyperCubeProperties;
}

export interface PropTree {
  qChildren: unknown[];
  qProperty: { qHyperCubeDef: QHyperCubeDef; usePagination?: boolean; totals?: { show: boolean } };
}