-
Notifications
You must be signed in to change notification settings - Fork 14
Expand file tree
/
Copy pathlockButton.js
More file actions
62 lines (57 loc) · 2.65 KB
/
lockButton.js
File metadata and controls
62 lines (57 loc) · 2.65 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
/**
* @license
* Copyright 2019-2020 CERN and copyright holders of ALICE O2.
* See http://alice-o2.web.cern.ch/copyright for details of the copyright holders.
* All rights not expressly granted are reserved.
*
* This software is distributed under the terms of the GNU General Public
* License v3 (GPL Version 3), copied verbatim in the file "COPYING".
*
* In applying this license CERN does not waive the privileges and immunities
* granted to it by virtue of its status as an Intergovernmental Organization
* or submit itself to any jurisdiction.
*/
import {h} from '/js/src/index.js';
import {iconLockLocked, iconLockUnlocked} from '/js/src/icons.js';
import {DetectorLockAction} from './../common/enums/DetectorLockAction.enum.js';
/**
* Button build with builtin logic of detector lock state which allows users to:
* - take/release lock with/without force as admins
* - see who owns the lock
*
* When the user releases a lock, the detector also has to be unselected from the workflow.
* @param {LockModel} lockModel - model of the lock state and actions
* @param {String} detector - detector name
* @param {Object} lockState - lock state of the detector
* @param {Boolean} isIcon - whether to render as an icon or a button
* @param {Boolean} [isActive = false] - whether the detector is active
*/
export const detectorLockButton = (lockModel, detector, lockState, isIcon = false, isActive = false) => {
const isDetectorLockTaken = lockModel.isLocked(detector);
let detectorLockHandler = null;
let detectorLockButtonClass = '.gray-darker';
if (isDetectorLockTaken) {
if (lockModel.isLockedByCurrentUser(detector)) {
detectorLockButtonClass = '.success';
detectorLockHandler = () => {
if (isActive) {
confirm(`Are you sure you want to release the lock for an ACTIVE ${detector}?`)
&& lockModel.actionOnLock(detector, DetectorLockAction.RELEASE, false);
} else {
lockModel.actionOnLock(detector, DetectorLockAction.RELEASE, false);
}
};
} else {
detectorLockButtonClass = '.warning.disabled.disabled-item';
}
} else {
detectorLockHandler = () => lockModel.actionOnLock(detector, DetectorLockAction.TAKE, false);
}
const element = isIcon ? '.flex-row.items-center.actionable-icon' : 'button.btn';
return h(`${element}.${detectorLockButtonClass}`, {
id: `detectorLockButtonFor${detector}`,
title: isDetectorLockTaken ? `Lock is taken by ${lockState.owner.fullName}` : 'Lock is free',
disabled: isDetectorLockTaken && !lockModel.isLockedByCurrentUser(detector),
onclick: detectorLockHandler,
}, isDetectorLockTaken ? iconLockLocked() : iconLockUnlocked());
};