@internetarchive/ia-book-actions 0.0.7-5 → 0.0.7-8
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/demo/index.html
CHANGED
|
@@ -112,6 +112,9 @@
|
|
|
112
112
|
iaBookActions.bwbPurchaseUrl = '';
|
|
113
113
|
iaBookActions.barType = '';
|
|
114
114
|
iaBookActions.modalConfig = modalConfig;
|
|
115
|
+
iaBookActions.lendingBarPostInit = (event) => {
|
|
116
|
+
console.log('callback executed1!!!');
|
|
117
|
+
};
|
|
115
118
|
|
|
116
119
|
let lendingStatus1 = iaBookActions.lendingStatus;
|
|
117
120
|
|
package/package.json
CHANGED
|
@@ -27,7 +27,6 @@ export class CollapsibleActionGroup extends ActionsHandler {
|
|
|
27
27
|
hasAdminAccess: { type: Boolean },
|
|
28
28
|
dropdownArrow: { type: String },
|
|
29
29
|
disabled: { type: Boolean },
|
|
30
|
-
borrowType: { type: String },
|
|
31
30
|
};
|
|
32
31
|
}
|
|
33
32
|
|
|
@@ -46,63 +45,14 @@ export class CollapsibleActionGroup extends ActionsHandler {
|
|
|
46
45
|
this.title = '';
|
|
47
46
|
this.loaderIcon = 'https://archive.org/upload/images/tree/loading.gif';
|
|
48
47
|
this.disabled = false;
|
|
49
|
-
this.borrowType = ''; // (browsed|borrowed)
|
|
50
|
-
this.consecutiveLoanCounts = 1; // consecutive loan count
|
|
51
48
|
}
|
|
52
49
|
|
|
53
50
|
updated(changed) {
|
|
54
|
-
if (changed.has('width')) {
|
|
55
|
-
|
|
56
|
-
this.resetActions();
|
|
57
|
-
}
|
|
58
|
-
}
|
|
59
|
-
|
|
60
|
-
// this is execute to fetch loan token
|
|
61
|
-
if (changed.has('borrowType')) {
|
|
62
|
-
this.emitEnableBookAccess();
|
|
51
|
+
if (changed.has('width') && this.isBelowTabletContainer) {
|
|
52
|
+
this.resetActions();
|
|
63
53
|
}
|
|
64
54
|
}
|
|
65
55
|
|
|
66
|
-
/**
|
|
67
|
-
* Dispatches event when patron is borrowing book.
|
|
68
|
-
* Notes borrow type, and consecutive borrow counts
|
|
69
|
-
*
|
|
70
|
-
* @fires CollapsibleActionGroup#enableBookAccess
|
|
71
|
-
*/
|
|
72
|
-
async emitEnableBookAccess() {
|
|
73
|
-
// send consecutiveLoanCounts for browsed books only.
|
|
74
|
-
if (this.borrowType === 'browsed') {
|
|
75
|
-
try {
|
|
76
|
-
const existingCount = await this.localCache.get(
|
|
77
|
-
'consecutive-loan-count'
|
|
78
|
-
);
|
|
79
|
-
if (existingCount !== undefined) {
|
|
80
|
-
this.consecutiveLoanCounts = existingCount.value ?? 1;
|
|
81
|
-
}
|
|
82
|
-
} catch (error) {
|
|
83
|
-
console.log(error);
|
|
84
|
-
}
|
|
85
|
-
}
|
|
86
|
-
|
|
87
|
-
// event category and action for browsing book access
|
|
88
|
-
const eventCategory = `${this.borrowType}BookAccess`;
|
|
89
|
-
const eventAction = `${
|
|
90
|
-
this.borrowType === 'browsed' ? 'BrowseCounts-' : 'Counts-'
|
|
91
|
-
}${this.consecutiveLoanCounts}`;
|
|
92
|
-
|
|
93
|
-
this.dispatchEvent(
|
|
94
|
-
new CustomEvent('enableBookAccess', {
|
|
95
|
-
detail: {
|
|
96
|
-
event: {
|
|
97
|
-
category: eventCategory, // browsedBookAccess | borrowedBookAccess
|
|
98
|
-
action: eventAction, // (BrowseCounts-N|Counts-N)
|
|
99
|
-
},
|
|
100
|
-
borrowType: this.borrowType,
|
|
101
|
-
},
|
|
102
|
-
})
|
|
103
|
-
);
|
|
104
|
-
}
|
|
105
|
-
|
|
106
56
|
/**
|
|
107
57
|
* merge primaryActions and secondaryActions into dropdown
|
|
108
58
|
*/
|
|
@@ -17,17 +17,10 @@ export default class ActionsHandler extends LitElement {
|
|
|
17
17
|
super();
|
|
18
18
|
this.identifier = identifier;
|
|
19
19
|
this.ajaxTimeout = 7000;
|
|
20
|
-
this.loanTokenPollingDelay =
|
|
21
|
-
window.location.pathname === '/demo/' ? 2000 : 120000; // 120000 ms = 2 min
|
|
22
|
-
this.loanTokenInterval = undefined;
|
|
23
20
|
this.localCache = new LocalCache();
|
|
24
21
|
this.bindEvents();
|
|
25
22
|
}
|
|
26
23
|
|
|
27
|
-
disconnectedCallback() {
|
|
28
|
-
this.loanTokenInterval = undefined;
|
|
29
|
-
}
|
|
30
|
-
|
|
31
24
|
sendEvent(eventCategory, eventAction) {
|
|
32
25
|
// eslint-disable-next-line no-console
|
|
33
26
|
console?.log('Book action: ', { eventCategory, eventAction });
|
|
@@ -102,23 +95,6 @@ export default class ActionsHandler extends LitElement {
|
|
|
102
95
|
const { category, action } = detail.event;
|
|
103
96
|
this.sendEvent(category, action);
|
|
104
97
|
});
|
|
105
|
-
|
|
106
|
-
this.addEventListener('enableBookAccess', ({ detail }) => {
|
|
107
|
-
const borrowType = detail?.borrowType;
|
|
108
|
-
|
|
109
|
-
// fetch loan token for browsed/borrowed book and set an interval
|
|
110
|
-
if (borrowType) {
|
|
111
|
-
this.loanTokenInterval = setInterval(() => {
|
|
112
|
-
this.handleLoanTokenPoller();
|
|
113
|
-
}, this.loanTokenPollingDelay);
|
|
114
|
-
|
|
115
|
-
const { category, action } = detail?.event;
|
|
116
|
-
this.sendEvent(category, action);
|
|
117
|
-
} else {
|
|
118
|
-
// if book is not browsed, just clear token polling interval
|
|
119
|
-
clearInterval(this.loanTokenInterval);
|
|
120
|
-
}
|
|
121
|
-
});
|
|
122
98
|
}
|
|
123
99
|
|
|
124
100
|
handleBrowseIt() {
|
|
@@ -202,17 +178,6 @@ export default class ActionsHandler extends LitElement {
|
|
|
202
178
|
});
|
|
203
179
|
}
|
|
204
180
|
|
|
205
|
-
handleLoanTokenPoller() {
|
|
206
|
-
const action = 'create_token';
|
|
207
|
-
ActionsHandlerService({
|
|
208
|
-
identifier: this.identifier,
|
|
209
|
-
action,
|
|
210
|
-
error: data => {
|
|
211
|
-
this.dispatchActionError(action, data);
|
|
212
|
-
clearInterval(this.loanTokenInterval); // stop token fetch api
|
|
213
|
-
},
|
|
214
|
-
});
|
|
215
|
-
}
|
|
216
181
|
|
|
217
182
|
/**
|
|
218
183
|
* Dispatches event when an error occured on action
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
import { LitElement } from 'lit-element';
|
|
2
|
+
import { LocalCache } from '@internetarchive/local-cache';
|
|
3
|
+
|
|
4
|
+
import ActionsHandlerService from './actions-handler/actions-handler-service.js';
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* This class is used to create loan token for borrowed books
|
|
8
|
+
*
|
|
9
|
+
* ActionsHandlerService is a function being used to execute
|
|
10
|
+
*/
|
|
11
|
+
export class LoanTokenPoller extends LitElement {
|
|
12
|
+
constructor() {
|
|
13
|
+
super();
|
|
14
|
+
this.identifier = '';
|
|
15
|
+
this.loanTokenPollingDelay = window.location.pathname === '/demo/' ? 2000 : 120000; // 120000 ms = 2 min
|
|
16
|
+
this.loanTokenInterval = undefined;
|
|
17
|
+
this.localCache = new LocalCache();
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
disconnectedCallback() {
|
|
21
|
+
this.loanTokenInterval = undefined;
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
async enableBookAccess(identifier, borrowType) {
|
|
25
|
+
this.identifier = identifier
|
|
26
|
+
let consecutiveLoanCounts = 1;
|
|
27
|
+
|
|
28
|
+
if (borrowType) {
|
|
29
|
+
// send consecutiveLoanCounts for browsed books only.
|
|
30
|
+
if (borrowType === 'browsed') {
|
|
31
|
+
try {
|
|
32
|
+
const existingCount = await this.localCache.get(
|
|
33
|
+
'consecutive-loan-count'
|
|
34
|
+
);
|
|
35
|
+
consecutiveLoanCounts = existingCount ?? 1;
|
|
36
|
+
} catch (error) {
|
|
37
|
+
console.log(error);
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
// Do an initial token, then set an interval
|
|
42
|
+
this.handleLoanTokenPoller();
|
|
43
|
+
|
|
44
|
+
this.loanTokenInterval = setInterval(() => {
|
|
45
|
+
this.handleLoanTokenPoller();
|
|
46
|
+
}, this.loanTokenPollingDelay);
|
|
47
|
+
|
|
48
|
+
// event category and action for browsing book access
|
|
49
|
+
const category = `${borrowType}BookAccess`;
|
|
50
|
+
const action = `${
|
|
51
|
+
borrowType === 'browsed' ? 'BrowseCounts-' : 'Counts-'
|
|
52
|
+
}${consecutiveLoanCounts}`;
|
|
53
|
+
console.log(consecutiveLoanCounts)
|
|
54
|
+
this.sendEvent(category, action);
|
|
55
|
+
} else {
|
|
56
|
+
// if book is not browsed, just clear token polling interval
|
|
57
|
+
clearInterval(this.loanTokenInterval);
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
sendEvent(eventCategory, eventAction) {
|
|
62
|
+
// eslint-disable-next-line no-console
|
|
63
|
+
console?.log('Book action: ', { eventCategory, eventAction });
|
|
64
|
+
window?.archive_analytics?.send_event_no_sampling(
|
|
65
|
+
eventCategory,
|
|
66
|
+
eventAction,
|
|
67
|
+
`identifier=${this.identifier}`
|
|
68
|
+
);
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
async handleLoanTokenPoller() {
|
|
72
|
+
const action = 'create_token';
|
|
73
|
+
await new Promise(r => setTimeout(r, 3000));
|
|
74
|
+
console.log('here');
|
|
75
|
+
ActionsHandlerService({
|
|
76
|
+
identifier: this.identifier,
|
|
77
|
+
action,
|
|
78
|
+
error: data => {
|
|
79
|
+
console.log('error', data);
|
|
80
|
+
this.handleLendingActionError({detail: { action, data }})
|
|
81
|
+
// this.dispatchActionError(action, data);
|
|
82
|
+
clearInterval(this.loanTokenInterval); // stop token fetch api
|
|
83
|
+
},
|
|
84
|
+
});
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
/**
|
|
88
|
+
* Dispatches event when an error occured on action
|
|
89
|
+
* Notes:- toggle <collapsible-action-group> visibility (enable/disable).
|
|
90
|
+
*
|
|
91
|
+
* @param { String } action - name of action like browse_book, borrow_book
|
|
92
|
+
* @param { Object } data - erroneous response from api call
|
|
93
|
+
*
|
|
94
|
+
* @fires ActionsHandler#lendingActionError
|
|
95
|
+
*/
|
|
96
|
+
dispatchActionError(action, data = {}) {
|
|
97
|
+
console.log('disptaced');
|
|
98
|
+
this.dispatchEvent(
|
|
99
|
+
new CustomEvent('lendingActionError', {
|
|
100
|
+
detail: { action, data },
|
|
101
|
+
})
|
|
102
|
+
);
|
|
103
|
+
}
|
|
104
|
+
}
|
package/src/ia-book-actions.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/* eslint-disable camelcase */
|
|
2
|
-
import { html, css
|
|
2
|
+
import { html, css } from 'lit-element';
|
|
3
3
|
|
|
4
4
|
import { SharedResizeObserver } from '@internetarchive/shared-resize-observer';
|
|
5
5
|
import { ModalConfig } from '@internetarchive/modal-manager';
|
|
@@ -11,8 +11,9 @@ import './components/info-icon.js';
|
|
|
11
11
|
|
|
12
12
|
import GetLendingActions from './core/services/get-lending-actions.js';
|
|
13
13
|
import { mobileContainerWidth } from './core/config/constants.js';
|
|
14
|
+
import { LoanTokenPoller } from './core/services/loan-token-poller.js';
|
|
14
15
|
|
|
15
|
-
export default class IABookActions extends
|
|
16
|
+
export default class IABookActions extends LoanTokenPoller {
|
|
16
17
|
static get properties() {
|
|
17
18
|
return {
|
|
18
19
|
userid: { type: String },
|
|
@@ -21,6 +22,7 @@ export default class IABookActions extends LitElement {
|
|
|
21
22
|
lendingStatus: { type: Object },
|
|
22
23
|
width: { type: Number },
|
|
23
24
|
bwbPurchaseUrl: { type: String },
|
|
25
|
+
lendingBarPostInit: { type: Function },
|
|
24
26
|
barType: { type: String },
|
|
25
27
|
sharedObserver: { attribute: false },
|
|
26
28
|
disableActionGroup: { type: Boolean },
|
|
@@ -36,6 +38,7 @@ export default class IABookActions extends LitElement {
|
|
|
36
38
|
this.lendingStatus = {};
|
|
37
39
|
this.width = 0;
|
|
38
40
|
this.bwbPurchaseUrl = '';
|
|
41
|
+
this.lendingBarPostInit = () => {};
|
|
39
42
|
this.barType = 'action'; // 'title'|'action'
|
|
40
43
|
this.sharedObserver = undefined;
|
|
41
44
|
this.disableActionGroup = false;
|
|
@@ -47,6 +50,8 @@ export default class IABookActions extends LitElement {
|
|
|
47
50
|
this.primaryColor = 'primary';
|
|
48
51
|
this.secondaryActions = [];
|
|
49
52
|
this.lendingOptions = {};
|
|
53
|
+
this.borrowType = ''; // (browsed|borrowed)
|
|
54
|
+
this.consecutiveLoanCounts = 1; // consecutive loan count
|
|
50
55
|
}
|
|
51
56
|
|
|
52
57
|
disconnectedCallback() {
|
|
@@ -58,8 +63,6 @@ export default class IABookActions extends LitElement {
|
|
|
58
63
|
this.sharedObserver = new SharedResizeObserver();
|
|
59
64
|
this.setupResizeObserver();
|
|
60
65
|
}
|
|
61
|
-
|
|
62
|
-
this.setupLendingToolbarActions();
|
|
63
66
|
}
|
|
64
67
|
|
|
65
68
|
updated(changed) {
|
|
@@ -153,14 +156,26 @@ export default class IABookActions extends LitElement {
|
|
|
153
156
|
// when browse is completed, we shows browse-again button
|
|
154
157
|
this.startBrowseTimer();
|
|
155
158
|
}
|
|
159
|
+
|
|
160
|
+
// enable access of borrowed/browsed books
|
|
161
|
+
if (this.borrowType) {
|
|
162
|
+
await this.enableBookAccess(this.identifier, this.borrowType);
|
|
163
|
+
}
|
|
164
|
+
|
|
165
|
+
/**
|
|
166
|
+
* this callback function use to:-
|
|
167
|
+
* - disptach lenfingFlow::PostInit event
|
|
168
|
+
* - initialize bookreader using br.init()
|
|
169
|
+
*/
|
|
170
|
+
this.lendingBarPostInit();
|
|
156
171
|
}
|
|
157
172
|
|
|
158
173
|
render() {
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
174
|
+
if (this.barType === 'title') {
|
|
175
|
+
return html`<section class="lending-wrapper">${this.bookTitleBar}</section>`;
|
|
176
|
+
}
|
|
177
|
+
|
|
178
|
+
return html`<section class="lending-wrapper">${this.bookActionBar}</section>`;
|
|
164
179
|
}
|
|
165
180
|
|
|
166
181
|
get bookTitleBar() {
|