@ssplib/react-components
Version:
SSP React Components
222 lines (221 loc) • 7.2 kB
TypeScript
import { BoxProps } from '@mui/material';
import { ReactNode } from 'react';
export interface ColumnData {
title: string;
keyName: string;
customComponent?: (content: string, obj: any) => JSX.Element;
size?: number;
}
export interface OrderBy {
label: string;
key: string;
type: 'string' | 'number';
}
export type FilterType = 'string' | 'number' | 'date' | 'dates';
export type FilterOperators = 'igual' | 'contem' | 'maior que' | 'menor que' | 'data exata' | 'após' | 'antes de' | 'entre' | 'tem um dos' | 'depois de' | 'antes de' | 'data inicio' | 'data fim' | 'tem a data';
export interface FilterValue {
label: string;
keyName: string;
type: FilterType;
operator: FilterOperators;
operators: FilterOperators[];
value: string | any;
value2?: string | any;
useList?: {
id: string | number;
label: string;
}[];
customFunc?: string;
}
export interface CsvMapProps {
name: string;
key: string;
onlyFilter?: boolean;
onlyAll?: boolean;
useFilterValue?: {
label: string;
operators: FilterOperators[];
};
}
export interface CsvConfigProp {
fileName: string;
downloadAll?: boolean;
customFiltered?: (list: any[], filters: FilterValue[]) => any[];
customAll?: (list: any[], filters: FilterValue[]) => any[];
map?: CsvMapProps[];
}
/**
* Interface para as propriedades do componente Table.
*/
export interface TableProps {
/** ID único da tabela */
id: string;
/** Configurações de largura para telas grandes */
mediaQueryLG?: {
all: number;
action: number;
};
/** Funções de transformação para filtros */
filtersFunc?: {
[key: string]: (value: string) => any;
};
/** Filtros disponíveis */
filters?: FilterValue[];
/** Ordenação por colunas */
orderBy?: OrderBy[];
/** Margem personalizada (desktop) */
customMargin?: number;
/** Margem personalizada (mobile) */
customMarginMobile?: number;
/** Estilo customizado da tabela */
customTableStyle?: BoxProps;
/** Mensagem de erro personalizada */
customErrorMsg?: string | ReactNode;
/** Colunas da tabela */
columns: {
keyName: string;
title: string;
customComponent?: (content: string, obj: any) => ReactNode;
size?: number;
}[];
/** Nome da tabela */
tableName: string;
csvConfig?: CsvConfigProp;
/** Altura da célula colapsada */
collapsedSize?: number;
/** Validação para exclusão de chaves no CSV */
csvExcludeValidate?: (key: string, value: string | number) => boolean;
/** Tamanho máximo do texto antes de colapsar */
expandTextMaxLength?: number;
/** Ações por linha */
action: (prop: any) => JSX.Element;
/** Quantidade de itens por página */
itemCount?: number;
/** Número de colunas da tabela */
columnSize: number;
/** Função para buscar dados */
fetchFunc?: () => Promise<Response>;
/** Mensagens para quando não há dados */
emptyMsg?: {
user: string;
public: string;
};
/** Caminho dos dados no JSON da resposta */
dataPath?: string;
/** Usa autenticação via Keycloak */
useKC?: boolean;
/** Dados iniciais da tabela */
initialData?: Array<{
[key: string]: any;
}> | null;
/** Flag de carregamento dos dados da tabela */
isLoading?: boolean;
/** Flag para mostrar ou não o botão de expandir a Linha */
isExpandable?: boolean;
/** Flag para sempre manter as linhas expandidas */
alwaysExpanded?: boolean;
}
export interface TableProps2 {
/** ID único da tabela */
id: string;
/** Configurações de largura para telas grandes */
mediaQueryLG?: {
all: number;
action: number;
};
/** Funções de transformação para filtros */
filtersFunc?: {
[key: string]: (value: string) => any;
};
/** Filtros disponíveis */
filters?: FilterValue[];
/** Ordenação por colunas */
orderBy?: OrderBy[];
/** Margem personalizada (desktop) */
customMargin?: number;
/** Margem personalizada (mobile) */
customMarginMobile?: number;
/** Normaliza textos (remove acentos) */
normalize?: boolean;
/** Converte textos para maiúsculas */
csvUpper?: boolean;
/** Estilo customizado da tabela */
customTableStyle?: BoxProps;
/** Caminho múltiplo dentro dos dados */
multipleDataPath?: string;
/** Mensagem de erro personalizada */
customErrorMsg?: string | ReactNode;
/** Remove aspas dos valores no CSV */
removeQuotes?: boolean;
/** Colunas da tabela */
columns: any[];
/** Nome da tabela */
tableName: string;
/** Exibe botão para exportar todos os dados */
csvShowAllButton?: boolean;
/** Chaves excluídas da exportação (upper) */
csvExcludeUpper?: string[];
/** Exporta CSV sem compactação */
csvWithoutZip?: boolean;
/** Altura da célula colapsada */
collapsedSize?: number;
/** Texto do botão "Exportar todos em CSV" */
csvAllButtonTitle?: string;
/** Texto do botão "Exportar CSV" */
csvButtonTitle?: string;
/** Texto do botão "Exportar sem ZIP" */
csvNoZipText?: string;
/** Chave para nomear arquivos ZIP */
csvZipFileNamesKey?: string;
/** Gera arquivo ZIP ao exportar */
generateCsvZip?: boolean;
/** Validação para exclusão de chaves no CSV */
csvExcludeValidate?: (key: string, value: string | number) => boolean;
/** Mapeia nomes customizados de colunas no CSV */
csvCustomKeyNames?: {
[key: string]: string;
};
/** Tamanho máximo do texto antes de colapsar */
expandTextMaxLength?: number;
/** Chaves excluídas da exportação CSV simples */
csvExcludeKeysCSV?: string[];
/** Chaves excluídas da exportação geral */
csvExcludeKeys?: string[];
/** Oculta o título na exportação CSV */
hideTitleCSV?: boolean;
/** Chaves excluídas no CSV com todos os dados */
csvExcludeKeysAll?: string[];
/** Nome da chave para status da linha */
statusKeyName?: string;
/** Quantidade de itens por página */
itemCount?: number;
/** Ações por linha */
action: (prop: any) => JSX.Element;
/** Configuração para exportação CSV */
csv?: {
fileName: string;
};
/** Número de colunas da tabela */
columnSize: number;
/** Função para buscar dados */
fetchFunc?: () => Promise<Response>;
/** Mensagens para quando não há dados */
emptyMsg?: {
user: string;
public: string;
};
/** Caminho dos dados no JSON da resposta */
dataPath?: string;
/** Usa autenticação via Keycloak */
useKC?: boolean;
/** Dados iniciais da tabela */
initialData?: Array<{
[key: string]: any;
}> | null;
/** Flag de carregamento dos dados da tabela */
isLoading?: boolean;
/** Flag para mostrar ou não o botão de expandir a Linha */
isExpandable?: boolean;
/** Flag para sempre manter as linhas expandidas */
alwaysExpanded?: boolean;
}