Skip to content

Commit

Permalink
UIBULKED-379 Filtering columns on Bulk edit screens
Browse files Browse the repository at this point in the history
  • Loading branch information
vashjs committed Dec 7, 2023
1 parent 3884df6 commit fad517e
Show file tree
Hide file tree
Showing 6 changed files with 27 additions and 25 deletions.
Original file line number Diff line number Diff line change
@@ -1,3 +1,7 @@
.ActionMenu {
max-width: 300px;
}

.ActionMenuGroup {
margin-bottom: 20px;
}
Expand Down
40 changes: 19 additions & 21 deletions src/components/BulkEditActionMenu/BulkEditActionMenu.js
Original file line number Diff line number Diff line change
Expand Up @@ -5,12 +5,13 @@ import { saveAs } from 'file-saver';
import {
Button,
Icon,
MultiSelection,
} from '@folio/stripes/components';
import { CheckboxFilter } from '@folio/stripes/smart-components';
import React, { useContext, useState } from 'react';
import { Preloader } from '@folio/stripes-data-transfer-components';
import { useLocation } from 'react-router-dom';
import { ActionMenuGroup } from './ActionMenuGroup/ActionMenuGroup';
import css from './ActionMenuGroup/ActionMenuGroup.css';
import {
APPROACHES,
CAPABILITIES,
Expand Down Expand Up @@ -74,8 +75,13 @@ const BulkEditActionMenu = ({
});

const { countOfRecords, visibleColumns, setVisibleColumns } = useContext(RootContext);
const columns = visibleColumns || [];
const selectedValues = columns.filter(item => !item.selected).map(item => item.value);

const columnsOptions = visibleColumns.map(item => ({
...item,
label: item.ignoreTranslation ? item.label : intl.formatMessage({ id: `ui-bulk-edit.columns.${capability}.${item.label}` }),
}));

const selectedValues = columnsOptions.filter(item => item.selected);

const isStartBulkCsvActive = hasUserEditLocalPerm && capability === CAPABILITIES.USER;
const isInitialStep = step === EDITING_STEPS.UPLOAD;
Expand All @@ -84,21 +90,13 @@ const BulkEditActionMenu = ({
&& isInitialStep
&& [JOB_STATUSES.DATA_MODIFICATION, JOB_STATUSES.REVIEW_CHANGES].includes(bulkDetails?.status);

const isLastUnselectedColumn = (value) => {
return selectedValues?.length === 1 && selectedValues?.[0] === value;
};
const handleColumnChange = (values) => {
if (!values?.length) return;

const columnsOptions = columns.map(item => ({
...item,
label: item.ignoreTranslation ? item.label : intl.formatMessage({ id: `ui-bulk-edit.columns.${capability}.${item.label}` }),
disabled: isLastUnselectedColumn(item.value) || !countOfRecords,
}));

const handleColumnChange = ({ values }) => {
const changedColumns = columns.map(col => {
const changedColumns = visibleColumns.map(col => {
return ({
...col,
selected: !values.includes(col.value),
selected: values.map(({ value }) => value).includes(col.value),
});
});

Expand Down Expand Up @@ -165,17 +163,18 @@ const BulkEditActionMenu = ({

const renderColumnsFilter = () => {
return (
<CheckboxFilter
<MultiSelection
placeholder="Select columns"
dataOptions={columnsOptions}
name="filter"
value={selectedValues}
onChange={handleColumnChange}
selectedValues={selectedValues}
backspaceDeletes={false}
/>
);
};

return (
<>
<div className={css.ActionMenu}>
<ActionMenuGroup
title={<FormattedMessage id="ui-bulk-edit.menuGroup.actions" />}
>
Expand All @@ -185,8 +184,7 @@ const BulkEditActionMenu = ({
<ActionMenuGroup title={<FormattedMessage id="ui-bulk-edit.menuGroup.showColumns" />}>
{Boolean(columnsOptions.length) && renderColumnsFilter()}
</ActionMenuGroup>

</>
</div>
);
};

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -94,7 +94,7 @@ const BulkEditInAppPreviewModal = ({
},
});

const visibleColumnKeys = visibleColumns?.filter(item => !item.selected).map(item => item.value);
const visibleColumnKeys = visibleColumns?.filter(item => item.selected).map(item => item.value);

const isChangedPreviewReady = bulkDetails && Object.hasOwn(bulkDetails, FILE_KEYS.PROPOSED_CHANGES_LINK);

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ const PreviewAccordion = ({ contentData, columnMapping, visibleColumns, isInitia
const accordionLabel = <FormattedMessage id={`ui-bulk-edit.list.preview.${translationKey}`} />;

const visibleColumnKeys = useMemo(() => {
return visibleColumns?.filter(item => !item.selected).map(item => item.value);
return visibleColumns?.filter(item => item.selected).map(item => item.value);
}, [visibleColumns]);

return (
Expand Down
2 changes: 1 addition & 1 deletion src/utils/mappers/mappers.js
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,7 @@ export const getMappedTableData = ({ data, capabilities, intl }) => {
label: cell.value,
value: cell.value,
disabled: false,
selected: !cell.visible,
selected: cell.visible,
ignoreTranslation: cell.ignoreTranslation,
}));

Expand Down
2 changes: 1 addition & 1 deletion src/utils/mappers/mappers.test.js
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,7 @@ describe('mappers', () => {
label: uuidColumn.label,
value: uuidColumn.value,
disabled: false,
selected: false,
selected: true,
}],
contentData: [{
[uuidColumn.value]: row[0],
Expand Down

0 comments on commit fad517e

Please sign in to comment.