Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

UIOR-1177 Add settings components for custom fields #1536

Merged
merged 5 commits into from
Jan 9, 2024
Merged
Show file tree
Hide file tree
Changes from 2 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
3 changes: 2 additions & 1 deletion CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# Change history for ui-orders

## (5.1.0 IN PROGRESS)
## (6.0.0 IN PROGRESS)

* Allow Editing of "Renewal Date" and "Subscription to" on open purchase order line. Refs UIOR-1078.
* Disable donor field in POL. Refs UIOR-1149.
Expand All @@ -10,6 +10,7 @@
* Add claiming checkbox to POL details. Refs UIOR-397.
* Optimize linked instances query to improve performance. Refs UIOR-1181.
* Add permission to fetch invoices-related fiscal years into the orders "view" permission set. UIOR-1185.
* *BREAKING* Add settings components for custom fields. Refs UIOR-1177.

## [5.0.1](https://github.com/folio-org/ui-orders/tree/v5.0.1) (2023-11-08)
[Full Changelog](https://github.com/folio-org/ui-orders/compare/v5.0.0...v5.0.1)
Expand Down
51 changes: 46 additions & 5 deletions package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@folio/orders",
"version": "5.1.0",
"version": "6.0.0",
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

why do you think it's a breaking change?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We're discontinuing support for orders <12.1 and order-lines <3.3. Interface requirements are a part of the public API. This change is backward incompatible, as ui-orders will no longer function in an environment that provides orders <12.1 or order-lines <3.3.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

If you implement any backwards-incompatible change to any API, or drop any API at all, increment the module version to 3.0.0

Guidelines for Contributing Code

"description": "Description for orders",
"main": "src/index.js",
"repository": "",
Expand Down Expand Up @@ -44,9 +44,9 @@
"material-types": "2.2",
"modes-of-issuance": "1.0",
"nature-of-content-terms": "1.0",
"order-lines": "2.0 3.0",
"order-lines": "3.3",
"order-templates": "1.0",
"orders": "11.0 12.0",
"orders": "12.1",
"orders.export-history": "1.0",
"organizations.organizations": "1.0",
"organizations-storage.organization-types": "1.0",
Expand Down Expand Up @@ -335,6 +335,43 @@
"orders.order-templates.item.delete"
]
},
{
"permissionName": "ui-orders.settings.custom-fields.view",
"displayName": "Settings (Orders): Can view custom fields",
"description": "",
"visible": true,
"subPermissions": [
"configuration.entries.collection.get",
"orders-storage.custom-fields.collection.get",
"orders-storage.custom-fields.item.get",
"orders-storage.custom-fields.item.stats.get",
"orders-storage.custom-fields.item.option.stats.get"
]
},
{
"permissionName": "ui-orders.settings.custom-fields.edit",
"displayName": "Settings (Orders): Can create, edit, view custom fields",
"description": "",
"visible": true,
"subPermissions": [
"ui-orders.settings.custom-fields.view",
"configuration.entries.item.put",
"configuration.entries.item.post",
"orders-storage.custom-fields.collection.put",
"orders-storage.custom-fields.item.post",
"orders-storage.custom-fields.item.put"
]
},
{
"permissionName": "ui-orders.settings.custom-fields.delete",
"displayName": "Settings (Orders): Can create, edit, view and delete custom fields",
"description": "",
"visible": true,
"subPermissions": [
"ui-orders.settings.custom-fields.edit",
"orders-storage.custom-fields.item.delete"
]
},
{
"permissionName": "ui-orders.settings.view",
"displayName": "Settings (Orders): Can view all settings",
Expand All @@ -350,7 +387,8 @@
"orders.configuration.reasons-for-closure.collection.get",
"orders.configuration.suffixes.collection.get",
"ui-orders.third-party-services",
"orders.acquisition-methods.collection.get"
"orders.acquisition-methods.collection.get",
"ui-orders.settings.custom-fields.view"
]
},
{
Expand Down Expand Up @@ -380,7 +418,10 @@
"orders.acquisition-methods.collection.get",
"orders.acquisition-method.item.post",
"orders.acquisition-method.item.put",
"orders.acquisition-method.item.delete"
"orders.acquisition-method.item.delete",
"ui-orders.settings.custom-fields.view",
"ui-orders.settings.custom-fields.edit",
"ui-orders.settings.custom-fields.delete"
]
},
{
Expand Down
64 changes: 64 additions & 0 deletions src/settings/CustomFieldsSettings.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,64 @@
import React from 'react';
import { Switch, Route } from 'react-router-dom';

import { useStripes } from '@folio/stripes/core';
import {
ViewCustomFieldsSettings,
EditCustomFieldsSettings,
} from '@folio/stripes/smart-components';

const CustomFieldsSettings = () => {
const stripes = useStripes();

const basePO = '/settings/orders/custom-fields-po';
const basePOL = '/settings/orders/custom-fields-pol';

const permissions = {
canView: stripes.hasPerm('ui-orders.settings.custom-fields.view'),
canEdit: stripes.hasPerm('ui-orders.settings.custom-fields.edit'),
canDelete: stripes.hasPerm('ui-orders.settings.custom-fields.delete'),
};

const backendModuleName = 'Orders CRUD module';
const entityTypePO = 'purchase_order';
const entityTypePOL = 'po_line';

return (
<Switch>
<Route exact path={basePO}>
<ViewCustomFieldsSettings
backendModuleName={backendModuleName}
entityType={entityTypePO}
editRoute={`${basePO}/edit`}
permissions={permissions}
/>
</Route>
<Route exact path={`${basePO}/edit`}>
<EditCustomFieldsSettings
backendModuleName={backendModuleName}
entityType={entityTypePO}
viewRoute={basePO}
permissions={permissions}
/>
</Route>
<Route exact path={basePOL}>
<ViewCustomFieldsSettings
backendModuleName={backendModuleName}
entityType={entityTypePOL}
editRoute={`${basePOL}/edit`}
permissions={permissions}
/>
</Route>
<Route exact path={`${basePOL}/edit`}>
<EditCustomFieldsSettings
backendModuleName={backendModuleName}
entityType={entityTypePOL}
viewRoute={basePOL}
permissions={permissions}
/>
</Route>
</Switch>
);
};

export default CustomFieldsSettings;
79 changes: 79 additions & 0 deletions src/settings/CustomFieldsSettings.test.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,79 @@
import React from 'react';

import {
render,
screen,
} from '@folio/jest-config-stripes/testing-library/react';
import { MemoryRouter } from 'react-router-dom';
import CustomFieldsSettings from './CustomFieldsSettings';

jest.mock('@folio/stripes/smart-components', () => {
const mockViewCustomFieldsSettings = ({ entityType }) => (
<div>ViewCustomFieldsSettings-{entityType}</div>
);

const mockEditCustomFieldsSettings = ({ entityType }) => (
<div>EditCustomFieldsSettings-{entityType}</div>
);

return {
ViewCustomFieldsSettings: mockViewCustomFieldsSettings,
EditCustomFieldsSettings: mockEditCustomFieldsSettings,
};
});

const renderCustomFieldsSettings = ({ initialEntries }) => render(
<MemoryRouter initialEntries={initialEntries}>
<CustomFieldsSettings />
</MemoryRouter>,
);

describe('Custom fields settings page', () => {
it('should render viewCustomFieldsSettings with entityType=purchase_order', async () => {
renderCustomFieldsSettings({
initialEntries: ['/settings/orders/custom-fields-po'],
});

const viewCustomFieldsSettingsText = await screen.findByText(
/ViewCustomFieldsSettings-purchase_order/,
);

expect(viewCustomFieldsSettingsText).toBeVisible();
});

it('should render editCustomFieldsSettings with entityType=purchase_order', async () => {
renderCustomFieldsSettings({
initialEntries: ['/settings/orders/custom-fields-po/edit'],
});

const editCustomFieldsSettings = await screen.findByText(
/EditCustomFieldsSettings-purchase_order/,
);

expect(editCustomFieldsSettings).toBeVisible();
});

it('should render viewCustomFieldsSettings with entityType=po_line', async () => {
renderCustomFieldsSettings({
initialEntries: ['/settings/orders/custom-fields-pol'],
});

const viewCustomFieldsSettingsText = await screen.findByText(
/ViewCustomFieldsSettings-po_line/,
);

expect(viewCustomFieldsSettingsText).toBeVisible();
});

it('should render editCustomFieldsSettings with entityType=po_line', async () => {
renderCustomFieldsSettings({
initialEntries: ['/settings/orders/custom-fields-pol/edit'],
});

const editCustomFieldsSettings = await screen.findByText(
/EditCustomFieldsSettings-po_line/,
);

expect(editCustomFieldsSettings).toBeVisible();
});
});
13 changes: 13 additions & 0 deletions src/settings/OrdersSettings.js
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@ import InstanceStatus from './InstanceStatus';
import InstanceType from './InstanceType';
import LoanType from './LoanType';
import InstanceMatching from './InstanceMatching';
import CustomFieldsSettings from './CustomFieldsSettings';

const sections = [
{
Expand Down Expand Up @@ -58,6 +59,18 @@ const sections = [
route: 'acquisition-methods',
perm: 'ui-orders.settings.view',
},
{
component: CustomFieldsSettings,
label: <FormattedMessage id="ui-orders.settings.customFields.purchaseOrders" />,
route: 'custom-fields-po',
perm: 'ui-orders.settings.custom-fields.view',
},
{
component: CustomFieldsSettings,
label: <FormattedMessage id="ui-orders.settings.customFields.purchaseOrderLines" />,
route: 'custom-fields-pol',
perm: 'ui-orders.settings.custom-fields.view',
},
],
},
{
Expand Down
2 changes: 2 additions & 0 deletions translations/ui-orders/en.json
Original file line number Diff line number Diff line change
Expand Up @@ -704,6 +704,8 @@
"settings.createInventory.recordType.instance": "Instance",
"settings.createInventory.recordType.instanceAndHolding": "Instance, holdings",
"settings.createInventory.recordType.none": "None",
"settings.customFields.purchaseOrders": "Custom Fields - Purchase Orders",
"settings.customFields.purchaseOrderLines": "Custom Fields - Purchase Order Lines",
"settings.general.label": "General",
"settings.index.paneTitle": "Orders",
"settings.inventoryInteraction.label": "Inventory interaction",
Expand Down
Loading