Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,9 @@ export interface FilterProps {

export interface DatagridTopbarProps {
columnsVisibility?: ColumnsVisibility[];
toggleAllColumnsVisible?: (a: boolean) => void;
getIsAllColumnsVisible?: () => boolean;
getIsSomeColumnsVisible?: () => boolean;
filtersColumns?: ColumnFilter[];
isSearchable?: boolean;
filters?: FilterProps;
Expand All @@ -52,6 +55,9 @@ export interface DatagridTopbarProps {

export const DatagridTopbar = <T,>({
columnsVisibility,
toggleAllColumnsVisible,
getIsAllColumnsVisible,
getIsSomeColumnsVisible,
filters,
filtersColumns,
isSearchable,
Expand Down Expand Up @@ -142,7 +148,12 @@ export const DatagridTopbar = <T,>({
)}
{hasVisibilityFeature && (
<div className={filtersColumns?.length > 0 ? 'ml-[10px]' : ''}>
<VisibilityManagement columnsVisibility={columnsVisibility} />
<VisibilityManagement
columnsVisibility={columnsVisibility}
toggleAllColumnsVisible={toggleAllColumnsVisible}
getIsAllColumnsVisible={getIsAllColumnsVisible}
getIsSomeColumnsVisible={getIsSomeColumnsVisible}
/>
</div>
)}
</div>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -148,6 +148,9 @@ describe('datagrid topbar', () => {
onChange: () => null,
},
]}
toggleAllColumnsVisible={() => null}
getIsAllColumnsVisible={() => true}
getIsSomeColumnsVisible={() => true}
/>,
);

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -318,6 +318,9 @@ export const Datagrid = <T,>({
<div>
<DatagridTopbar
columnsVisibility={columnsVisibility}
toggleAllColumnsVisible={table.toggleAllColumnsVisible}
getIsAllColumnsVisible={table.getIsAllColumnsVisible}
getIsSomeColumnsVisible={table.getIsSomeColumnsVisible}
filtersColumns={filtersColumns}
isSearchable={!!searchColumns}
filters={filters}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,5 +7,6 @@
"common_pagination_load_more": "Mehr laden",
"common_empty_text_cell": "Keine",
"common_topbar_columns": "Spalten",
"common_pagination_load_all": "Alle laden"
"common_pagination_load_all": "Alle laden",
"common_topbar_columns_select_all": "Alles auswählen"
}
Original file line number Diff line number Diff line change
Expand Up @@ -7,5 +7,6 @@
"common_pagination_load_more": "Load more",
"common_empty_text_cell": "None",
"common_topbar_columns": "Columns",
"common_pagination_load_all": "Load all"
"common_pagination_load_all": "Load all",
"common_topbar_columns_select_all": "Select all"
}
Original file line number Diff line number Diff line change
Expand Up @@ -7,5 +7,6 @@
"common_pagination_load_more": "Cargar más",
"common_empty_text_cell": "Ninguno/a",
"common_topbar_columns": "Columnas",
"common_pagination_load_all": "Cargar todo"
"common_pagination_load_all": "Cargar todo",
"common_topbar_columns_select_all": "Seleccionar todo"
}
Original file line number Diff line number Diff line change
Expand Up @@ -7,5 +7,6 @@
"common_pagination_load_more": "Charger plus",
"common_pagination_load_all": "Charger tout",
"common_empty_text_cell": "Aucun",
"common_topbar_columns": "Colonnes"
"common_topbar_columns": "Colonnes",
"common_topbar_columns_select_all": "Sélectionner tout"
}
Original file line number Diff line number Diff line change
Expand Up @@ -7,5 +7,6 @@
"common_pagination_load_more": "Charger plus",
"common_pagination_load_all": "Charger tout",
"common_empty_text_cell": "Aucun",
"common_topbar_columns": "Colonnes"
"common_topbar_columns": "Colonnes",
"common_topbar_columns_select_all": "Sélectionner tout"
}
Original file line number Diff line number Diff line change
Expand Up @@ -7,5 +7,6 @@
"common_pagination_load_more": "Caricare altro",
"common_empty_text_cell": "Nessuna",
"common_topbar_columns": "Colonne",
"common_pagination_load_all": "Caricare tutto"
"common_pagination_load_all": "Caricare tutto",
"common_topbar_columns_select_all": "Seleziona tutto"
}
Original file line number Diff line number Diff line change
Expand Up @@ -7,5 +7,6 @@
"common_pagination_load_more": "Załaduj więcej",
"common_empty_text_cell": "Brak",
"common_topbar_columns": "Kolumny",
"common_pagination_load_all": "Załaduj wszystko"
"common_pagination_load_all": "Załaduj wszystko",
"common_topbar_columns_select_all": "Wybierz wszystko"
}
Original file line number Diff line number Diff line change
Expand Up @@ -7,5 +7,6 @@
"common_pagination_load_more": "Carregar mais",
"common_empty_text_cell": "Nenhum",
"common_topbar_columns": "Colunas",
"common_pagination_load_all": "Carregar tudo"
"common_pagination_load_all": "Carregar tudo",
"common_topbar_columns_select_all": "Selecionar tudo"
}
Original file line number Diff line number Diff line change
Expand Up @@ -26,10 +26,16 @@ export type ColumnsVisibility = {

export type ColumnsVisibilityProps = {
columnsVisibility: ColumnsVisibility[];
toggleAllColumnsVisible: (a: boolean) => void;
getIsAllColumnsVisible: () => boolean;
getIsSomeColumnsVisible: () => boolean;
};

export function VisibilityManagement({
columnsVisibility,
toggleAllColumnsVisible,
getIsAllColumnsVisible,
getIsSomeColumnsVisible,
}: Readonly<ColumnsVisibilityProps>) {
const { t } = useTranslation('datagrid');
const visibilityPopoverRef = useRef(null);
Expand All @@ -41,6 +47,9 @@ export function VisibilityManagement({
column.isVisible(),
).length;

const isAllColumnsVisible = getIsAllColumnsVisible();
const isSomeColumnsVisible = getIsSomeColumnsVisible();

return (
<>
<OdsButton
Expand All @@ -63,9 +72,24 @@ export function VisibilityManagement({
with-arrow
>
<div className="flex flex-col">
<div className="pr-5 flex flex-row items-center gap-x-2">
<OdsCheckbox
name={'toggle-all-columns-visibility'}
inputId={'toggle-all-columns-visibility'}
isChecked={isAllColumnsVisible}
onOdsChange={() => toggleAllColumnsVisible(!isAllColumnsVisible)}
ariaLabel={t('common_topbar_columns_select_all')}
isIndeterminate={!isAllColumnsVisible && isSomeColumnsVisible}
/>
<label slot="label" htmlFor={'toggle-all-columns-visibility'}>
<OdsText preset={ODS_TEXT_PRESET.paragraph}>
{t('common_topbar_columns_select_all')}
</OdsText>
</label>
</div>
{eligibleColumns.map((column) => (
<OdsFormField key={column.id}>
<div className="flex flex-row items-center gap-x-2">
<div className="px-5 flex flex-row items-center gap-x-2">
<OdsCheckbox
name={column.id}
inputId={column.id}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,9 @@ describe('visibility management button part', () => {
onChange: () => null,
},
]}
toggleAllColumnsVisible={() => null}
getIsAllColumnsVisible={() => false}
getIsSomeColumnsVisible={() => true}
/>,
);

Expand Down Expand Up @@ -79,6 +82,9 @@ describe('visibility management button part', () => {
onChange: () => null,
},
]}
toggleAllColumnsVisible={() => null}
getIsAllColumnsVisible={() => false}
getIsSomeColumnsVisible={() => true}
/>,
);

Expand Down Expand Up @@ -115,15 +121,18 @@ describe('visibility management dropdown part', () => {
onChange: () => null,
},
]}
toggleAllColumnsVisible={() => null}
getIsAllColumnsVisible={() => true}
getIsSomeColumnsVisible={() => true}
/>,
);

const checkboxElements = screen.queryAllByRole('checkbox');
expect(checkboxElements[0]).toHaveProperty('checked', true);
expect(checkboxElements[0]).toHaveProperty('disabled', false);

expect(checkboxElements[1]).toHaveProperty('checked', true);
expect(checkboxElements[1]).toHaveProperty('disabled', false);

expect(checkboxElements[2]).toHaveProperty('checked', true);
expect(checkboxElements[2]).toHaveProperty('disabled', false);
});

it('should display visibility column disabled', async () => {
Expand All @@ -148,15 +157,18 @@ describe('visibility management dropdown part', () => {
onChange,
},
]}
toggleAllColumnsVisible={() => null}
getIsAllColumnsVisible={() => false}
getIsSomeColumnsVisible={() => true}
/>,
);

const checkboxElements = screen.queryAllByRole('checkbox');
expect(checkboxElements[0]).toHaveProperty('checked', true);
expect(checkboxElements[0]).toHaveProperty('disabled', true);
expect(checkboxElements[1]).toHaveProperty('checked', true);
expect(checkboxElements[1]).toHaveProperty('disabled', true);

expect(checkboxElements[1]).toHaveProperty('checked', false);
expect(checkboxElements[1]).toHaveProperty('disabled', false);
expect(checkboxElements[2]).toHaveProperty('checked', false);
expect(checkboxElements[2]).toHaveProperty('disabled', false);

await act(() => fireEvent.click(checkboxElements[1]));
expect(onChange).toHaveBeenCalled();
Expand Down
Loading