@inveniosoftware/react-invenio-app-ils 1.3.0 → 2.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGES.md +8 -1
- package/dist/cjs/index.js +93 -41
- package/dist/cjs/index.js.map +1 -1
- package/dist/esm/index.js +93 -41
- package/dist/esm/index.js.map +1 -1
- package/package.json +1 -1
package/CHANGES.md
CHANGED
|
@@ -1,6 +1,13 @@
|
|
|
1
1
|
# Changes
|
|
2
2
|
|
|
3
|
-
Version
|
|
3
|
+
Version 2.0.0 (released 2025-08-12)
|
|
4
|
+
|
|
5
|
+
- global: adapt API calls to latest versions (invenio-banners)
|
|
6
|
+
- administration: remove access to invenio-admin endpoints (phase out package)
|
|
7
|
+
- frontside: added config to display selected item identifiers
|
|
8
|
+
- backoffice: added NOT-SPECIFIED delivery method
|
|
9
|
+
|
|
10
|
+
Version 1.3.0 (released 2025-06-04)
|
|
4
11
|
|
|
5
12
|
- closures: disabled closed dates in Backoffice LoanUpdateDates calendar
|
|
6
13
|
- backoffice: fix relations table only showing items on the first page
|
package/dist/cjs/index.js
CHANGED
|
@@ -431,6 +431,10 @@ const RECORDS_CONFIG = {
|
|
|
431
431
|
},
|
|
432
432
|
CIRCULATION: {
|
|
433
433
|
deliveryMethods: {
|
|
434
|
+
'NOT-SPECIFIED': {
|
|
435
|
+
text: 'Not Specified',
|
|
436
|
+
iconClass: 'question circle outline'
|
|
437
|
+
},
|
|
434
438
|
PICKUP: {
|
|
435
439
|
text: 'Pick it up at the library desk',
|
|
436
440
|
iconClass: 'warehouse'
|
|
@@ -735,6 +739,7 @@ const RECORDS_CONFIG = {
|
|
|
735
739
|
}
|
|
736
740
|
},
|
|
737
741
|
ITEMS: {
|
|
742
|
+
identifiersToDisplayInFrontside: [],
|
|
738
743
|
circulationRestrictions: [{
|
|
739
744
|
value: 'NO_RESTRICTION',
|
|
740
745
|
text: 'No restriction (4 weeks)'
|
|
@@ -2393,11 +2398,15 @@ const orderApi = {
|
|
|
2393
2398
|
const bannerURL = '/banners/';
|
|
2394
2399
|
const getActive = async () => {
|
|
2395
2400
|
const URLPath = window.location.pathname;
|
|
2396
|
-
|
|
2401
|
+
const response = await http.get(`${bannerURL}`, {
|
|
2397
2402
|
params: {
|
|
2398
|
-
url_path: URLPath
|
|
2403
|
+
url_path: URLPath,
|
|
2404
|
+
active: true
|
|
2399
2405
|
}
|
|
2400
2406
|
});
|
|
2407
|
+
response.data.total = getSearchTotal(response.data.hits);
|
|
2408
|
+
response.data.hits = response.data.hits.hits;
|
|
2409
|
+
return response;
|
|
2401
2410
|
};
|
|
2402
2411
|
const bannerApi = {
|
|
2403
2412
|
getActive: getActive,
|
|
@@ -6214,7 +6223,8 @@ class DocumentItemBody extends React.Component {
|
|
|
6214
6223
|
const {
|
|
6215
6224
|
items,
|
|
6216
6225
|
shelfLink,
|
|
6217
|
-
documentDetails
|
|
6226
|
+
documentDetails,
|
|
6227
|
+
identifiersToDisplayInFrontside
|
|
6218
6228
|
} = this.props;
|
|
6219
6229
|
return items.map(item => /*#__PURE__*/React__default["default"].createElement(semanticUiReact.Table.Row, {
|
|
6220
6230
|
key: item.pid
|
|
@@ -6224,7 +6234,16 @@ class DocumentItemBody extends React.Component {
|
|
|
6224
6234
|
}, item.barcode), /*#__PURE__*/React__default["default"].createElement(semanticUiReact.Table.Cell, {
|
|
6225
6235
|
"data-label": "Shelf",
|
|
6226
6236
|
className: "document-item-table-itemCell"
|
|
6227
|
-
}, shelfLink !== null ? shelfLink(item, documentDetails) : _get__default["default"](item, 'shelf')),
|
|
6237
|
+
}, shelfLink !== null ? shelfLink(item, documentDetails) : _get__default["default"](item, 'shelf')), identifiersToDisplayInFrontside.map(identifier => {
|
|
6238
|
+
var _item$identifiers, _item$identifiers$fin;
|
|
6239
|
+
return /*#__PURE__*/React__default["default"].createElement(semanticUiReact.Table.Cell, {
|
|
6240
|
+
key: identifier,
|
|
6241
|
+
"data-label": identifier.text,
|
|
6242
|
+
className: "document-item-table-itemCell"
|
|
6243
|
+
}, (_item$identifiers = item.identifiers) === null || _item$identifiers === void 0 ? void 0 : (_item$identifiers$fin = _item$identifiers.find(entry => {
|
|
6244
|
+
return entry.scheme === identifier.key;
|
|
6245
|
+
})) === null || _item$identifiers$fin === void 0 ? void 0 : _item$identifiers$fin.value);
|
|
6246
|
+
}), /*#__PURE__*/React__default["default"].createElement(semanticUiReact.Table.Cell, {
|
|
6228
6247
|
"data-label": "Status"
|
|
6229
6248
|
}, this.statusLabel(item)), /*#__PURE__*/React__default["default"].createElement(semanticUiReact.Table.Cell, {
|
|
6230
6249
|
"data-label": "Medium"
|
|
@@ -7993,7 +8012,7 @@ const BannerCmp = _ref => {
|
|
|
7993
8012
|
break;
|
|
7994
8013
|
}
|
|
7995
8014
|
return /*#__PURE__*/React__default["default"].createElement(Overridable__default["default"], {
|
|
7996
|
-
id: "
|
|
8015
|
+
id: "Banners.layout",
|
|
7997
8016
|
message: message,
|
|
7998
8017
|
category: category,
|
|
7999
8018
|
colorProp: colorProp
|
|
@@ -8005,42 +8024,44 @@ const BannerCmp = _ref => {
|
|
|
8005
8024
|
}
|
|
8006
8025
|
})));
|
|
8007
8026
|
};
|
|
8008
|
-
class
|
|
8027
|
+
class Banners$1 extends React.Component {
|
|
8009
8028
|
componentDidMount() {
|
|
8010
8029
|
const {
|
|
8011
|
-
|
|
8012
|
-
|
|
8030
|
+
fetchBanners,
|
|
8031
|
+
resetBanners
|
|
8013
8032
|
} = this.props;
|
|
8014
|
-
|
|
8015
|
-
|
|
8016
|
-
this.
|
|
8033
|
+
resetBanners();
|
|
8034
|
+
fetchBanners();
|
|
8035
|
+
this.intervalfetchBannersId = setInterval(fetchBanners, FETCH_BANNER_EVERY_SECS * 1000);
|
|
8017
8036
|
}
|
|
8018
8037
|
componentWillUnmount() {
|
|
8019
|
-
this.
|
|
8038
|
+
this.intervalfetchBannersId && clearInterval(this.intervalfetchBannersId);
|
|
8020
8039
|
}
|
|
8021
8040
|
render() {
|
|
8022
8041
|
const {
|
|
8023
|
-
|
|
8042
|
+
banners,
|
|
8024
8043
|
children
|
|
8025
8044
|
} = this.props;
|
|
8026
|
-
return /*#__PURE__*/React__default["default"].createElement(React__default["default"].Fragment, null, !_isEmpty__default["default"](
|
|
8045
|
+
return /*#__PURE__*/React__default["default"].createElement(React__default["default"].Fragment, null, !_isEmpty__default["default"](banners) ? banners.hits.map(banner => /*#__PURE__*/React__default["default"].createElement(BannerCmp, Object.assign({
|
|
8046
|
+
key: banner.id
|
|
8047
|
+
}, banner))) : null, ' ', children);
|
|
8027
8048
|
}
|
|
8028
8049
|
}
|
|
8029
|
-
|
|
8030
|
-
|
|
8050
|
+
Banners$1.defaultProps = {
|
|
8051
|
+
banners: null,
|
|
8031
8052
|
children: null
|
|
8032
8053
|
};
|
|
8033
|
-
var BannerComponent = Overridable__default["default"].component('
|
|
8054
|
+
var BannerComponent = Overridable__default["default"].component('Banners', Banners$1);
|
|
8034
8055
|
|
|
8035
|
-
const BANNER_RESET = '
|
|
8036
|
-
const BANNER_SUCCESS = '
|
|
8037
|
-
const BANNER_HAS_ERROR = '
|
|
8038
|
-
const
|
|
8056
|
+
const BANNER_RESET = 'fetchBanners/RESET';
|
|
8057
|
+
const BANNER_SUCCESS = 'fetchBanners/SUCCESS';
|
|
8058
|
+
const BANNER_HAS_ERROR = 'fetchBanners/HAS_ERROR';
|
|
8059
|
+
const resetBanners = () => {
|
|
8039
8060
|
return async dispatch => dispatch({
|
|
8040
8061
|
type: BANNER_RESET
|
|
8041
8062
|
});
|
|
8042
8063
|
};
|
|
8043
|
-
const
|
|
8064
|
+
const fetchBanners = () => {
|
|
8044
8065
|
return async dispatch => {
|
|
8045
8066
|
try {
|
|
8046
8067
|
const response = await bannerApi.getActive();
|
|
@@ -8058,14 +8079,14 @@ const fetchBanner = () => {
|
|
|
8058
8079
|
};
|
|
8059
8080
|
|
|
8060
8081
|
const mapStateToProps$1D = state => ({
|
|
8061
|
-
|
|
8062
|
-
error: state.
|
|
8082
|
+
banners: state.banners.data,
|
|
8083
|
+
error: state.banners.error
|
|
8063
8084
|
});
|
|
8064
8085
|
const mapDispatchToProps$1j = dispatch => ({
|
|
8065
|
-
|
|
8066
|
-
|
|
8086
|
+
fetchBanners: () => dispatch(fetchBanners()),
|
|
8087
|
+
resetBanners: () => dispatch(resetBanners())
|
|
8067
8088
|
});
|
|
8068
|
-
const
|
|
8089
|
+
const Banners = reactRedux.connect(mapStateToProps$1D, mapDispatchToProps$1j)(BannerComponent);
|
|
8069
8090
|
|
|
8070
8091
|
const LoginWithLocalAccountLayout = _ref => {
|
|
8071
8092
|
let {
|
|
@@ -8481,7 +8502,7 @@ class Login$1 extends React.Component {
|
|
|
8481
8502
|
this.redirectIfAlreadyLoggedIn();
|
|
8482
8503
|
return /*#__PURE__*/React__default["default"].createElement(React__default["default"].Fragment, null, /*#__PURE__*/React__default["default"].createElement(Overridable__default["default"], {
|
|
8483
8504
|
id: "Login.extras"
|
|
8484
|
-
}, /*#__PURE__*/React__default["default"].createElement(
|
|
8505
|
+
}, /*#__PURE__*/React__default["default"].createElement(Banners, null)), /*#__PURE__*/React__default["default"].createElement(LoginLayout, Object.assign({
|
|
8485
8506
|
hasError: hasError,
|
|
8486
8507
|
errorHeader: errorHeader,
|
|
8487
8508
|
errorMessage: errorMessage
|
|
@@ -8757,11 +8778,11 @@ class AdminMenu extends React.Component {
|
|
|
8757
8778
|
className: "bo-menu bo-menu-footer"
|
|
8758
8779
|
}, /*#__PURE__*/React__default["default"].createElement(semanticUiReact.Menu.Item, null, /*#__PURE__*/React__default["default"].createElement(semanticUiReact.Menu.Menu, null, /*#__PURE__*/React__default["default"].createElement(semanticUiReact.Menu.Item, {
|
|
8759
8780
|
as: "a",
|
|
8760
|
-
href: `${invenioConfig.APP.INVENIO_UI_URL}/
|
|
8781
|
+
href: `${invenioConfig.APP.INVENIO_UI_URL}/administration`,
|
|
8761
8782
|
target: "_blank"
|
|
8762
8783
|
}, "Admin panel"), /*#__PURE__*/React__default["default"].createElement(semanticUiReact.Menu.Item, {
|
|
8763
8784
|
as: "a",
|
|
8764
|
-
href: `${invenioConfig.APP.INVENIO_UI_URL}/
|
|
8785
|
+
href: `${invenioConfig.APP.INVENIO_UI_URL}/administration/pages`,
|
|
8765
8786
|
target: "_blank"
|
|
8766
8787
|
}, "Static pages"))))));
|
|
8767
8788
|
}
|
|
@@ -13848,7 +13869,7 @@ class ESSelectorLoanRequest extends React.Component {
|
|
|
13848
13869
|
placeholder: "Select delivery method",
|
|
13849
13870
|
options: this.deliveryMethods,
|
|
13850
13871
|
onChange: this.handleDeliveryMethodChange,
|
|
13851
|
-
defaultValue: this.
|
|
13872
|
+
defaultValue: this.defaultDeliveryMethod,
|
|
13852
13873
|
selection: true
|
|
13853
13874
|
})) : null;
|
|
13854
13875
|
};
|
|
@@ -13868,7 +13889,11 @@ class ESSelectorLoanRequest extends React.Component {
|
|
|
13868
13889
|
value: key,
|
|
13869
13890
|
text: invenioConfig.CIRCULATION.deliveryMethods[key].text
|
|
13870
13891
|
})) : [];
|
|
13871
|
-
this.
|
|
13892
|
+
this.defaultDeliveryMethod = null;
|
|
13893
|
+
if (this.withDeliveryMethod) {
|
|
13894
|
+
this.defaultDeliveryMethod = this.deliveryMethods.some(method => method.value === 'NOT-SPECIFIED') ? 'NOT-SPECIFIED' : this.deliveryMethods[0].value;
|
|
13895
|
+
}
|
|
13896
|
+
this.state['deliveryMethod'] = this.defaultDeliveryMethod;
|
|
13872
13897
|
}
|
|
13873
13898
|
render() {
|
|
13874
13899
|
const {
|
|
@@ -34688,7 +34713,7 @@ class BackOffice extends React.Component {
|
|
|
34688
34713
|
} = this.props;
|
|
34689
34714
|
return /*#__PURE__*/React__default["default"].createElement(React__default["default"].Fragment, null, /*#__PURE__*/React__default["default"].createElement(Overridable__default["default"], {
|
|
34690
34715
|
id: "BackOffice.extras"
|
|
34691
|
-
}, /*#__PURE__*/React__default["default"].createElement(
|
|
34716
|
+
}, /*#__PURE__*/React__default["default"].createElement(Banners, null)), /*#__PURE__*/React__default["default"].createElement("div", {
|
|
34692
34717
|
className: "backoffice"
|
|
34693
34718
|
}, /*#__PURE__*/React__default["default"].createElement("div", {
|
|
34694
34719
|
className: "bo-sidebar"
|
|
@@ -35130,6 +35155,21 @@ class DocumentStats extends React.Component {
|
|
|
35130
35155
|
class DocumentItem extends React.Component {
|
|
35131
35156
|
constructor(props) {
|
|
35132
35157
|
super(props);
|
|
35158
|
+
this.fetchIdentifiersToDisplayInFrontsideTitles = () => {
|
|
35159
|
+
const query = vocabularyApi.query().withType(invenioConfig.VOCABULARIES.item.identifier.scheme);
|
|
35160
|
+
vocabularyApi.list(query.qs()).then(response => {
|
|
35161
|
+
const identifiersToDisplayInFrontside = this.state.identifiersToDisplayInFrontside.map(identifier => {
|
|
35162
|
+
const vocabEntry = response.data.hits.find(entry => entry.metadata.key === identifier.key);
|
|
35163
|
+
return {
|
|
35164
|
+
...identifier,
|
|
35165
|
+
text: vocabEntry ? vocabEntry.metadata.text : identifier.text
|
|
35166
|
+
};
|
|
35167
|
+
});
|
|
35168
|
+
this.setState({
|
|
35169
|
+
identifiersToDisplayInFrontside
|
|
35170
|
+
});
|
|
35171
|
+
});
|
|
35172
|
+
};
|
|
35133
35173
|
this.toggleItems = () => {
|
|
35134
35174
|
const {
|
|
35135
35175
|
isShowingAll
|
|
@@ -35138,10 +35178,18 @@ class DocumentItem extends React.Component {
|
|
|
35138
35178
|
isShowingAll: !isShowingAll
|
|
35139
35179
|
});
|
|
35140
35180
|
};
|
|
35181
|
+
const _identifiersToDisplayInFrontside = invenioConfig.ITEMS.identifiersToDisplayInFrontside.map(identifier => ({
|
|
35182
|
+
key: identifier,
|
|
35183
|
+
text: identifier
|
|
35184
|
+
}));
|
|
35141
35185
|
this.state = {
|
|
35142
35186
|
isShowingAll: false,
|
|
35143
|
-
itemAmountLimit: 5
|
|
35187
|
+
itemAmountLimit: 5,
|
|
35188
|
+
identifiersToDisplayInFrontside: _identifiersToDisplayInFrontside
|
|
35144
35189
|
};
|
|
35190
|
+
if (_identifiersToDisplayInFrontside.length > 0) {
|
|
35191
|
+
this.fetchIdentifiersToDisplayInFrontsideTitles();
|
|
35192
|
+
}
|
|
35145
35193
|
}
|
|
35146
35194
|
get moreItemsToLoad() {
|
|
35147
35195
|
const {
|
|
@@ -35161,7 +35209,8 @@ class DocumentItem extends React.Component {
|
|
|
35161
35209
|
} = this.props;
|
|
35162
35210
|
const {
|
|
35163
35211
|
isShowingAll,
|
|
35164
|
-
itemAmountLimit
|
|
35212
|
+
itemAmountLimit,
|
|
35213
|
+
identifiersToDisplayInFrontside
|
|
35165
35214
|
} = this.state;
|
|
35166
35215
|
const previewArrayOfItems = items.slice(0, itemAmountLimit);
|
|
35167
35216
|
const completeArrayOfItems = items;
|
|
@@ -35179,11 +35228,14 @@ class DocumentItem extends React.Component {
|
|
|
35179
35228
|
id: "DocumentDetails.DocumentItem.TableHeader"
|
|
35180
35229
|
}, /*#__PURE__*/React__default["default"].createElement(semanticUiReact.Table.Row, {
|
|
35181
35230
|
"data-test": "header"
|
|
35182
|
-
}, /*#__PURE__*/React__default["default"].createElement(semanticUiReact.Table.HeaderCell, null, "Barcode"), /*#__PURE__*/React__default["default"].createElement(semanticUiReact.Table.HeaderCell, null, "Shelf"),
|
|
35231
|
+
}, /*#__PURE__*/React__default["default"].createElement(semanticUiReact.Table.HeaderCell, null, "Barcode"), /*#__PURE__*/React__default["default"].createElement(semanticUiReact.Table.HeaderCell, null, "Shelf"), identifiersToDisplayInFrontside.map(identifier => /*#__PURE__*/React__default["default"].createElement(semanticUiReact.Table.HeaderCell, {
|
|
35232
|
+
key: identifier.key
|
|
35233
|
+
}, identifier.text)), /*#__PURE__*/React__default["default"].createElement(semanticUiReact.Table.HeaderCell, null, "Status"), /*#__PURE__*/React__default["default"].createElement(semanticUiReact.Table.HeaderCell, null, "Medium"), /*#__PURE__*/React__default["default"].createElement(semanticUiReact.Table.HeaderCell, null, "Loan restriction")))), /*#__PURE__*/React__default["default"].createElement(semanticUiReact.Table.Body, null, /*#__PURE__*/React__default["default"].createElement(Overridable__default["default"], {
|
|
35183
35234
|
id: "DocumentDetails.DocumentItemTableBody"
|
|
35184
35235
|
}, /*#__PURE__*/React__default["default"].createElement(DocumentItemBody, {
|
|
35185
35236
|
items: itemsToShow,
|
|
35186
|
-
documentDetails: documentDetails
|
|
35237
|
+
documentDetails: documentDetails,
|
|
35238
|
+
identifiersToDisplayInFrontside: identifiersToDisplayInFrontside
|
|
35187
35239
|
}))), this.moreItemsToLoad && /*#__PURE__*/React__default["default"].createElement(semanticUiReact.Table.Footer, {
|
|
35188
35240
|
fullWidth: true,
|
|
35189
35241
|
"data-test": "footer",
|
|
@@ -36510,7 +36562,7 @@ class LoanRequestForm$1 extends React.Component {
|
|
|
36510
36562
|
|
|
36511
36563
|
// init delivery method
|
|
36512
36564
|
this.withDeliveryMethod = !_isEmpty__default["default"](invenioConfig.CIRCULATION.deliveryMethods);
|
|
36513
|
-
this.deliveryMethods = this.withDeliveryMethod ? Object.keys(invenioConfig.CIRCULATION.deliveryMethods).map(key => ({
|
|
36565
|
+
this.deliveryMethods = this.withDeliveryMethod ? Object.keys(invenioConfig.CIRCULATION.deliveryMethods).filter(method => method !== 'NOT-SPECIFIED').map(key => ({
|
|
36514
36566
|
key: key,
|
|
36515
36567
|
value: key,
|
|
36516
36568
|
text: invenioConfig.CIRCULATION.deliveryMethods[key].text
|
|
@@ -40789,7 +40841,7 @@ class FrontSite extends React.Component {
|
|
|
40789
40841
|
className: "fs-content"
|
|
40790
40842
|
}, /*#__PURE__*/React__default["default"].createElement(Overridable__default["default"], {
|
|
40791
40843
|
id: "FrontSite.extras"
|
|
40792
|
-
}, /*#__PURE__*/React__default["default"].createElement(
|
|
40844
|
+
}, /*#__PURE__*/React__default["default"].createElement(Banners, null)), /*#__PURE__*/React__default["default"].createElement(reactRouterDom.Switch, null, /*#__PURE__*/React__default["default"].createElement(reactRouterDom.Route, {
|
|
40793
40845
|
exact: true,
|
|
40794
40846
|
path: FrontSiteRoutes.home,
|
|
40795
40847
|
render: props => /*#__PURE__*/React__default["default"].createElement(Home$1, Object.assign({}, props, this.props))
|
|
@@ -40931,7 +40983,7 @@ const initialState$N = {
|
|
|
40931
40983
|
data: {},
|
|
40932
40984
|
error: {}
|
|
40933
40985
|
};
|
|
40934
|
-
const
|
|
40986
|
+
const fetchBannersReducer = function () {
|
|
40935
40987
|
let state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : initialState$N;
|
|
40936
40988
|
let action = arguments.length > 1 ? arguments[1] : undefined;
|
|
40937
40989
|
switch (action.type) {
|
|
@@ -43138,7 +43190,7 @@ function createILSReducer(asyncReducers) {
|
|
|
43138
43190
|
borrowingRequestLoanExtension: borrowingRequestLoanExtensionReducer,
|
|
43139
43191
|
itemsCheckIn: itemsCheckInReducer,
|
|
43140
43192
|
checkOut: checkOutReducer,
|
|
43141
|
-
|
|
43193
|
+
banners: fetchBannersReducer,
|
|
43142
43194
|
bulkLoanExtend: patronBulkExtendLoans,
|
|
43143
43195
|
...asyncReducers
|
|
43144
43196
|
});
|