UNPKG

@filerobot/approvals

Version:

Asset approvals package for Filerobot

597 lines (595 loc) 31.1 kB
function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); } function _toConsumableArray(r) { return _arrayWithoutHoles(r) || _iterableToArray(r) || _unsupportedIterableToArray(r) || _nonIterableSpread(); } function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } } function _iterableToArray(r) { if ("undefined" != typeof Symbol && null != r[Symbol.iterator] || null != r["@@iterator"]) return Array.from(r); } function _arrayWithoutHoles(r) { if (Array.isArray(r)) return _arrayLikeToArray(r); } function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; } function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; } function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; } function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; } function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; } function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); } import { MANAGE_ACCESS_RELATION, PLUGINS_IDS, APPROVAL_STATUSES, FMAW_URL_QUERY_PARAMS } from '@filerobot/utils/lib/constants'; import { createSlice, createSelector, current } from '@reduxjs/toolkit'; import createThunk from '@filerobot/utils/lib/createThunk'; import { selectUserInfo } from '@filerobot/core/lib/slices/user.slice'; import { selectFileWindowFor } from '@filerobot/explorer/lib/slices/panels.slice'; import { getFileVersions } from '@filerobot/explorer/lib/components/FileWindowPanel/FileTabs/HistoryTab/HistoryTab.thunks'; import { selectCurrentFileByIdOrUuid, fileUpdated } from '@filerobot/explorer/lib/slices/files.slice'; var slicePropName = 'approvals'; export var sliceName = "".concat(PLUGINS_IDS.APPROVALS, "/").concat(slicePropName); var initialState = { assetUuid: null, uuids: [], // File approvals uuids entities: {}, // File approvals entities loading: true, activeApprovalUuid: null, accesses: { currentUserGalleryRole: null, defaultGalleryRole: null, usersAccessesGalleryRoleHash: {}, // {"userUuid": { id: roleId, name: roleName }} assetOwner: null // Used for users access (in approval request modal), user with low access are disabled, but owner shouldn't be disabled in any case }, history: { loading: true, activeVersionUuid: null, activeApprovalUuid: null, versions: {} // { [versionUuid]: { ...version, approvals: [] } } } }; export var fetchFileApprovals = createThunk(async function (_ref, thunkApi) { var originalFile = _ref.originalFile, _ref$skipFetchAssetAc = _ref.skipFetchAssetAccesses, skipFetchAssetAccesses = _ref$skipFetchAssetAc === void 0 ? false : _ref$skipFetchAssetAc, _ref$skipFetchVersion = _ref.skipFetchVersionsApprovals, skipFetchVersionsApprovals = _ref$skipFetchVersion === void 0 ? true : _ref$skipFetchVersion; var dispatch = thunkApi.dispatch, _thunkApi$extra$filer = thunkApi.extra.filerobot, info = _thunkApi$extra$filer.info, getPlugin = _thunkApi$extra$filer.getPlugin; var _ref2 = originalFile || {}, fileUuid = _ref2.uuid; var approvals = await dispatch(getApprovals({ fileUuid: fileUuid, originalFile: originalFile, signal: thunkApi.signal })).throwRejection(); dispatch(assetUuidUpdated(fileUuid)); dispatch(approvalsSet(approvals || [])); // Tring to get accesses on parent folder and default role for root folder case. Later should be improved when BE support API for that. if (!skipFetchAssetAccesses) { await dispatch(fetchAccesses({ fileUuid: fileUuid })); } if (!skipFetchVersionsApprovals) { await dispatch(fetchVersionsApprovals({ fileUuid: fileUuid, originalFile: originalFile, signal: thunkApi.signal })); } var _getPlugin = getPlugin(PLUGINS_IDS.APPROVALS), i18n = _getPlugin.i18n; var _getPlugin2 = getPlugin(PLUGINS_IDS.EXPLORER), getUrlQueryParam = _getPlugin2.getUrlQueryParam; var nextActiveApprovalUuid = getUrlQueryParam(FMAW_URL_QUERY_PARAMS.FILE_WINDOW_TAB_ITEM); if (nextActiveApprovalUuid) { var isApprovalFromUrlExists = approvals.some(function (approval) { return approval.uuid === nextActiveApprovalUuid; }); if (isApprovalFromUrlExists) { dispatch(activateApproval({ approvalUuid: nextActiveApprovalUuid, updateUrl: false })); } else { info(i18n('approvalsRequestNotActiveToast'), 'warning', 5000); } } return approvals; }, { actionType: "".concat(sliceName, "/fetchFileApprovals") }); export var getApprovals = createThunk(async function (_ref3, thunkApi) { var fileUuid = _ref3.fileUuid, originalFile = _ref3.originalFile, signal = _ref3.signal; var _await$thunkApi$extra = await thunkApi.extra.apiClient.get("files/".concat(fileUuid, "/approval-flow"), { abortSignal: signal || thunkApi.signal }), _await$thunkApi$extra2 = _await$thunkApi$extra.approvals, approvals = _await$thunkApi$extra2 === void 0 ? [] : _await$thunkApi$extra2; // Update the file approval status only if the requested file uuid equals the original file uuid, to avoid assigning version's status to the original file status which is wrong // to fix this bug: https://scaleflexhq.atlassian.net/browse/FRA-7071 if (fileUuid === (originalFile === null || originalFile === void 0 ? void 0 : originalFile.uuid)) { var _approvals$; thunkApi.dispatch(updateFileApprovalStatus({ originalFile: originalFile, status: (_approvals$ = approvals[0]) === null || _approvals$ === void 0 ? void 0 : _approvals$.status })); } return approvals; }); export var fetchAccesses = createThunk(async function (_ref4, thunkApi) { var fileUuid = _ref4.fileUuid; var currentUserGalleryRole, defaultGalleryRole; var usersAccesses = []; var usersAccessesGalleryRoleHash = {}; var assetOwner = null; var _await$thunkApi$extra3 = await thunkApi.extra.apiClient.get("file/".concat(fileUuid, "/accesses")), file = _await$thunkApi$extra3.file, accesses = _await$thunkApi$extra3.accesses; if (file && accesses) { var _file$default_gallery; var isInherited = file.stop_inherit !== true; defaultGalleryRole = (_file$default_gallery = file.default_gallery_role) === null || _file$default_gallery === void 0 ? void 0 : _file$default_gallery[isInherited ? 'if_inherited' : 'actual']; usersAccesses = (accesses.per_users || []).filter(function (userAccess) { return userAccess.relation === MANAGE_ACCESS_RELATION[isInherited ? 'INHERIT' : 'DIRECT']; }); assetOwner = file.owner || null; usersAccesses.forEach(function (userAccess) { var _userAccess$user; var userUuid = userAccess === null || userAccess === void 0 ? void 0 : (_userAccess$user = userAccess.user) === null || _userAccess$user === void 0 ? void 0 : _userAccess$user.uuid; var role = userAccess === null || userAccess === void 0 ? void 0 : userAccess.role; if (userUuid) { var _selectUserInfo; usersAccessesGalleryRoleHash[userUuid] = role; if (userUuid === ((_selectUserInfo = selectUserInfo(thunkApi.getState())) === null || _selectUserInfo === void 0 ? void 0 : _selectUserInfo.uuid)) { currentUserGalleryRole = role; } } }); } var newAccesses = { currentUserGalleryRole: currentUserGalleryRole, defaultGalleryRole: defaultGalleryRole, usersAccessesGalleryRoleHash: usersAccessesGalleryRoleHash, assetOwner: assetOwner }; thunkApi.dispatch(accessesUpdated(newAccesses)); return newAccesses; }, { actionType: "".concat(sliceName, "/fetchAccesses") }); export var fetchVersionsApprovals = createThunk(async function (_ref5, thunkApi) { var fileUuid = _ref5.fileUuid, originalFile = _ref5.originalFile, signal = _ref5.signal; var dispatch = thunkApi.dispatch; var versions = await dispatch(getFileVersions({ fileUuid: fileUuid, signal: signal, id: 'approvalsFileVersion' })); var approvals = selectApprovalsArray(thunkApi.getState()); var versionsApprovals = await Promise.all(versions.map(function (version) { return version.uuid === fileUuid ? Promise.resolve(approvals) // Skip request for current file approvals as it was already sent : dispatch(getApprovals({ fileUuid: version.uuid, originalFile: originalFile })); })); var nextHistoryVersions = versionsApprovals.reduce(function (accum, versionApprovals, index) { var version = versions[index]; var versionUuid = version.uuid; if (!accum[versionUuid]) { accum[versionUuid] = _objectSpread(_objectSpread({}, version), {}, { approvals: [] }); } if (Array.isArray(versionApprovals)) { var _versionApprovals$, _versionApprovals$fin; accum[versionUuid].approvals = versionApprovals; // latestApprovalStatus helps to show version pending approval tile (latestApprovalStatus === PENDING) accum[versionUuid].latestApprovalStatus = versionApprovals === null || versionApprovals === void 0 ? void 0 : (_versionApprovals$ = versionApprovals[0]) === null || _versionApprovals$ === void 0 ? void 0 : _versionApprovals$.status; // latestApprovalVoteStatus helps in all cases when we need latest version voted status (approved/rejected). E.g version status tile, etc accum[versionUuid].latestApprovalVoteStatus = (_versionApprovals$fin = versionApprovals.find(function (approval) { return [APPROVAL_STATUSES.APPROVED, APPROVAL_STATUSES.REJECTED].includes(approval.status); })) === null || _versionApprovals$fin === void 0 ? void 0 : _versionApprovals$fin.status; } return accum; }, {}); dispatch(historyVersionsUpdated(nextHistoryVersions)); return nextHistoryVersions; }, { actionType: "".concat(sliceName, "/fetchVersionsApprovals") }); export var createApprovalRequest = createThunk(async function (_ref6, thunkApi) { var data = _ref6.data, originalFile = _ref6.originalFile; var fileUuid = originalFile.uuid; var _await$thunkApi$extra4 = await thunkApi.extra.apiClient.post('approval-flow', { data: data, abortSignal: thunkApi.signal }), approvalUuid = _await$thunkApi$extra4.approval_uuid; if (approvalUuid) { await thunkApi.dispatch(fetchFileApprovals({ originalFile: originalFile, skipFetchAssetAccesses: true })); } thunkApi.dispatch(updateFileApprovalStatus({ originalFile: originalFile, status: APPROVAL_STATUSES.PENDING })); await thunkApi.dispatch(fetchVersionsApprovals({ fileUuid: fileUuid })); return approvalUuid; }, { actionType: "".concat(sliceName, "/createApprovalRequest") }); export var editApprovalRequest = createThunk(async function (_ref7, thunkApi) { var approvalUuid = _ref7.approvalUuid, data = _ref7.data; var _await$thunkApi$extra5 = await thunkApi.extra.apiClient.put("approval-flow/".concat(approvalUuid), { data: data, abortSignal: thunkApi.signal }), approval = _await$thunkApi$extra5.approval; if (approval) { thunkApi.dispatch(approvalUpdated(approval)); } var fileUuid = selectApprovalsAssetUuid(thunkApi.getState()); await thunkApi.dispatch(fetchVersionsApprovals({ fileUuid: fileUuid })); return approval; }, { actionType: "".concat(sliceName, "/editApprovalRequest") }); export var cancelApproval = createThunk(async function (_ref8, thunkApi) { var approvalUuid = _ref8.approvalUuid, originalFile = _ref8.originalFile; var _await$thunkApi$extra6 = await thunkApi.extra.apiClient.put("approval-flow/".concat(approvalUuid), { data: { action: 'cancel' }, abortSignal: thunkApi.signal }), approval = _await$thunkApi$extra6.approval; if (approval) { thunkApi.dispatch(approvalUpdated(approval)); } thunkApi.dispatch(updateFileApprovalStatus({ originalFile: originalFile, status: approval.status })); var fileUuid = selectApprovalsAssetUuid(thunkApi.getState()); await thunkApi.dispatch(fetchVersionsApprovals({ fileUuid: fileUuid })); return approval; }, { actionType: "".concat(sliceName, "/cancelApproval") }); export var removeApprover = createThunk(async function (_ref9, thunkApi) { var approvalUuid = _ref9.approvalUuid, approverUuid = _ref9.approverUuid; var _await$thunkApi$extra7 = await thunkApi.extra.apiClient["delete"]("approval-flow/".concat(approvalUuid, "/approvers/").concat(approverUuid), { abortSignal: thunkApi.signal }), approval = _await$thunkApi$extra7.approval; if (approval) { thunkApi.dispatch(approvalUpdated(approval)); } return approval; }, { actionType: "".concat(sliceName, "/removeApprover") }); export var updateFileApprovalStatus = createThunk(async function (_ref10, thunkApi) { var originalFile = _ref10.originalFile, status = _ref10.status; var updatedFile = _objectSpread(_objectSpread({}, originalFile), {}, { approval: _objectSpread(_objectSpread({}, (originalFile === null || originalFile === void 0 ? void 0 : originalFile.approval) || {}), {}, { latest: status }) }); thunkApi.dispatch(fileUpdated(updatedFile)); }, { actionType: "".concat(sliceName, "/updateFileApprovalStatus") }); export var approveOrRejectApproval = createThunk(async function (_ref11, thunkApi) { var approvalUuid = _ref11.approvalUuid, _ref11$comment = _ref11.comment, comment = _ref11$comment === void 0 ? '' : _ref11$comment, _ref11$approve = _ref11.approve, approve = _ref11$approve === void 0 ? true : _ref11$approve, originalFile = _ref11.originalFile; var assetUuid = originalFile.uuid; var _await$thunkApi$extra8 = await thunkApi.extra.apiClient.put("approval-flow/".concat(approvalUuid, "/files/").concat(assetUuid), { data: { action: approve ? 'APPROVE' : 'REJECT', comment: comment }, abortSignal: thunkApi.signal }), approval = _await$thunkApi$extra8.approval, file = _await$thunkApi$extra8.file; if (approval) { thunkApi.dispatch(approvalUpdated(_objectSpread(_objectSpread({}, file !== null && file !== void 0 && file.approvers ? { approvers: file.approvers } : {}), approval))); } thunkApi.dispatch(updateFileApprovalStatus({ originalFile: originalFile, status: approval.status })); await thunkApi.dispatch(fetchVersionsApprovals({ fileUuid: assetUuid })); return approval; }, { actionType: "".concat(sliceName, "/approveOrRejectApproval") }); export var activateApproval = createThunk(function () { var _ref12 = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}, _ref12$approvalUuid = _ref12.approvalUuid, approvalUuid = _ref12$approvalUuid === void 0 ? null : _ref12$approvalUuid, _ref12$updateUrl = _ref12.updateUrl, updateUrl = _ref12$updateUrl === void 0 ? true : _ref12$updateUrl; var thunkApi = arguments.length > 1 ? arguments[1] : undefined; if (updateUrl) { var _thunkApi$extra$filer2 = thunkApi.extra.filerobot.getPlugin(PLUGINS_IDS.EXPLORER), replaceUrlQueryParams = _thunkApi$extra$filer2.replaceUrlQueryParams, deleteUrlQueryParams = _thunkApi$extra$filer2.deleteUrlQueryParams; if (approvalUuid) { replaceUrlQueryParams({ params: _defineProperty({}, FMAW_URL_QUERY_PARAMS.FILE_WINDOW_TAB_ITEM, approvalUuid) }); } else { deleteUrlQueryParams([FMAW_URL_QUERY_PARAMS.FILE_WINDOW_TAB_ITEM]); } } thunkApi.dispatch(approvalActivated(approvalUuid)); }); var commonSlice = createSlice({ name: PLUGINS_IDS.PREUPLOAD_PROCESSORS, initialState: initialState, reducers: { approvalsSet: function approvalsSet(state, action) { var newApprovals = {}; var newUuids = []; action.payload.forEach(function (approval) { newApprovals[approval.uuid] = approval; newUuids.push(approval.uuid); }); return _objectSpread(_objectSpread({}, state), {}, { entities: newApprovals, uuids: newUuids }); }, approvalsAdded: function approvalsAdded(state, action) { var newApprovals = _objectSpread({}, state.entities); var newUuids = _toConsumableArray(state.uuids); action.payload.forEach(function (approval) { newApprovals[approval.uuid] = approval; newUuids.push(approval.uuid); }); return _objectSpread(_objectSpread({}, state), {}, { entities: newApprovals, uuids: newUuids }); }, approvalUpdated: function approvalUpdated(state, action) { var newApprovals = _objectSpread({}, state.entities); newApprovals[action.payload.uuid] = _objectSpread(_objectSpread({}, newApprovals[action.payload.uuid]), action.payload); return _objectSpread(_objectSpread({}, state), {}, { entities: newApprovals }); }, approvalsCommonStateUpdated: function approvalsCommonStateUpdated(state, action) { return _objectSpread(_objectSpread({}, state), action.payload); }, approvalActivated: function approvalActivated(state, action) { return _objectSpread(_objectSpread({}, state), {}, { activeApprovalUuid: action.payload || null }); }, accessesUpdated: function accessesUpdated(state, action) { return _objectSpread(_objectSpread({}, state), {}, { accesses: _objectSpread(_objectSpread({}, initialState.accesses), action.payload || {}) }); }, assetUuidUpdated: function assetUuidUpdated(state, action) { return _objectSpread(_objectSpread({}, state), {}, { assetUuid: action.payload || null }); }, historyVersionsUpdated: function historyVersionsUpdated(state, action) { var _Object$keys; return _objectSpread(_objectSpread({}, state), {}, { history: _objectSpread(_objectSpread({}, state.history), {}, { versions: action.payload || {}, activeVersionUuid: ((_Object$keys = Object.keys(action.payload || {})) === null || _Object$keys === void 0 ? void 0 : _Object$keys[0]) || null, activeApprovalUuid: null }) }); }, historyVersionActivated: function historyVersionActivated(state, action) { var _Object$keys2, _current, _current$history; return _objectSpread(_objectSpread({}, state), {}, { history: _objectSpread(_objectSpread({}, state.history), {}, { activeVersionUuid: action.payload || ((_Object$keys2 = Object.keys((_current = current(state)) === null || _current === void 0 ? void 0 : (_current$history = _current.history) === null || _current$history === void 0 ? void 0 : _current$history.versions)) === null || _Object$keys2 === void 0 ? void 0 : _Object$keys2[0]) || null, activeApprovalUuid: null }) }); }, historyApprovalActivated: function historyApprovalActivated(state, action) { return _objectSpread(_objectSpread({}, state), {}, { history: _objectSpread(_objectSpread({}, state.history), {}, { activeApprovalUuid: action.payload || null }) }); } }, extraReducers: function extraReducers(builder) { builder.addCase(fetchFileApprovals.pending, function (state, action) { return _objectSpread(_objectSpread({}, state), {}, { loading: true }); }).addCase(fetchFileApprovals.rejected, function (state, action) { return _objectSpread(_objectSpread({}, state), {}, { assetUuid: null, entities: {}, uuids: [], activeApprovalUuid: null, accesses: _objectSpread({}, initialState.accesses) }); }).addCase(fetchFileApprovals["final"], function (state, action) { return _objectSpread(_objectSpread({}, state), {}, { loading: false }); }).addCase(fetchVersionsApprovals.pending, function (state, action) { return _objectSpread(_objectSpread({}, state), {}, { history: _objectSpread(_objectSpread({}, state.history), {}, { loading: true }) }); }).addCase(fetchVersionsApprovals["final"], function (state, action) { return _objectSpread(_objectSpread({}, state), {}, { history: _objectSpread(_objectSpread({}, state.history), {}, { loading: false }) }); }); } }); var _commonSlice$actions = commonSlice.actions, approvalsCommonStateUpdated = _commonSlice$actions.approvalsCommonStateUpdated, approvalsSet = _commonSlice$actions.approvalsSet, approvalsAdded = _commonSlice$actions.approvalsAdded, approvalActivated = _commonSlice$actions.approvalActivated, accessesUpdated = _commonSlice$actions.accessesUpdated, assetUuidUpdated = _commonSlice$actions.assetUuidUpdated, approvalUpdated = _commonSlice$actions.approvalUpdated, historyVersionsUpdated = _commonSlice$actions.historyVersionsUpdated, historyVersionActivated = _commonSlice$actions.historyVersionActivated, historyApprovalActivated = _commonSlice$actions.historyApprovalActivated; export { approvalsCommonStateUpdated, approvalsSet, approvalsAdded, approvalActivated, accessesUpdated, assetUuidUpdated, approvalUpdated, historyVersionsUpdated, historyVersionActivated, historyApprovalActivated }; export var selectApprovalsCommonState = function selectApprovalsCommonState(state) { return state[PLUGINS_IDS.APPROVALS]; }; export var selectApprovalsLoading = function selectApprovalsLoading(state) { return selectApprovalsCommonState(state).loading; }; export var selectApprovalsAssetUuid = function selectApprovalsAssetUuid(state) { return selectApprovalsCommonState(state).assetUuid; }; export var selectApprovals = function selectApprovals(state) { return selectApprovalsCommonState(state).entities; }; export var selectApprovalsUuids = function selectApprovalsUuids(state) { return selectApprovalsCommonState(state).uuids; }; export var selectActiveApprovalUuid = function selectActiveApprovalUuid(state) { return selectApprovalsCommonState(state).activeApprovalUuid; }; export var selectApprovalsAccesses = function selectApprovalsAccesses(state) { return selectApprovalsCommonState(state).accesses; }; export var selectApprovalsDefaultGalleryRoleName = function selectApprovalsDefaultGalleryRoleName(state) { var _selectApprovalsAcces; return (_selectApprovalsAcces = selectApprovalsAccesses(state).defaultGalleryRole) === null || _selectApprovalsAcces === void 0 ? void 0 : _selectApprovalsAcces.name; }; export var selectApprovalsCurrentUserGalleryRoleName = function selectApprovalsCurrentUserGalleryRoleName(state) { var _selectApprovalsAcces2; return ((_selectApprovalsAcces2 = selectApprovalsAccesses(state).currentUserGalleryRole) === null || _selectApprovalsAcces2 === void 0 ? void 0 : _selectApprovalsAcces2.name) || selectApprovalsDefaultGalleryRoleName(state); }; export var selectApprovalsUsersAccessesGalleryRoleHash = function selectApprovalsUsersAccessesGalleryRoleHash(state) { return selectApprovalsAccesses(state).usersAccessesGalleryRoleHash; }; export var selectApprovalsAssetOwner = function selectApprovalsAssetOwner(state) { return selectApprovalsAccesses(state).assetOwner; }; export var selectApprovalsGalleryRoleNameByUserUuid = function selectApprovalsGalleryRoleNameByUserUuid(state, userUuid) { var _selectApprovalsUsers, _selectApprovalsUsers2, _selectApprovalsUsers3; return ((_selectApprovalsUsers = selectApprovalsUsersAccessesGalleryRoleHash(state)) === null || _selectApprovalsUsers === void 0 ? void 0 : (_selectApprovalsUsers2 = _selectApprovalsUsers[userUuid]) === null || _selectApprovalsUsers2 === void 0 ? void 0 : (_selectApprovalsUsers3 = _selectApprovalsUsers2.role) === null || _selectApprovalsUsers3 === void 0 ? void 0 : _selectApprovalsUsers3.name) || selectApprovalsDefaultGalleryRoleName(state); }; export var selectApprovalsArray = createSelector([selectApprovals, function (_state) { var returnFirstApprovalOnlyInArray = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false; return returnFirstApprovalOnlyInArray; }], function (approvals, returnFirstApprovalOnlyInArray) { var approvalsArray = Object.values(approvals); if (!approvalsArray.length) { return []; } return returnFirstApprovalOnlyInArray ? [approvalsArray === null || approvalsArray === void 0 ? void 0 : approvalsArray[0]] : approvalsArray; }); export var selectPendingApproval = function selectPendingApproval(state) { var _selectApprovalsArray; return (_selectApprovalsArray = selectApprovalsArray(state)) === null || _selectApprovalsArray === void 0 ? void 0 : _selectApprovalsArray.find(function (approval) { return approval.status === APPROVAL_STATUSES.PENDING; }); }; export var selectHasPendingApproval = function selectHasPendingApproval(state) { return !!selectPendingApproval(state); }; export var selectIsCurrentUserApproverInPendingApproval = createSelector([selectUserInfo, selectPendingApproval], function (userInfo, pendingApproval) { var _pendingApproval$appr; return Boolean((userInfo === null || userInfo === void 0 ? void 0 : userInfo.uuid) && ((pendingApproval === null || pendingApproval === void 0 ? void 0 : (_pendingApproval$appr = pendingApproval.approvers) === null || _pendingApproval$appr === void 0 ? void 0 : _pendingApproval$appr.users) || []).some(function (approver) { return approver.uuid === userInfo.uuid; })); }); export var selectApprovalByUuid = function selectApprovalByUuid(state, uuid) { return selectApprovals(state)[uuid]; }; export var selectActiveApproval = createSelector([selectActiveApprovalUuid, selectApprovals], function (activeApprovalUuid, approvals) { return approvals === null || approvals === void 0 ? void 0 : approvals[activeApprovalUuid]; }); export var selectIsCurrentUserApprovalRequesterForApproval = createSelector([selectUserInfo, function (_state, approvalUuid) { return selectApprovalByUuid(_state, approvalUuid); }], function (userInfo, approval) { var _approval$requester; return (userInfo === null || userInfo === void 0 ? void 0 : userInfo.uuid) && (approval === null || approval === void 0 ? void 0 : (_approval$requester = approval.requester) === null || _approval$requester === void 0 ? void 0 : _approval$requester.uuid) === userInfo.uuid; }); export var selectCurrentUserAsApproverForApproval = createSelector([selectUserInfo, function (_state, approvalUuid) { return selectApprovalByUuid(_state, approvalUuid); }], function (userInfo, approval) { var _approval$approvers, _approval$approvers$u; return (userInfo === null || userInfo === void 0 ? void 0 : userInfo.uuid) && (approval === null || approval === void 0 ? void 0 : (_approval$approvers = approval.approvers) === null || _approval$approvers === void 0 ? void 0 : (_approval$approvers$u = _approval$approvers.users) === null || _approval$approvers$u === void 0 ? void 0 : _approval$approvers$u.find(function (user) { return (user === null || user === void 0 ? void 0 : user.uuid) === userInfo.uuid; })); }); export var selectIsCurrentUserApproverForApproval = function selectIsCurrentUserApproverForApproval(state, approvalUuid) { return !!selectCurrentUserAsApproverForApproval(state, approvalUuid); }; export var selectIsCurrentUserAssetOwner = createSelector([selectUserInfo, function (_state) { return selectApprovalsAssetOwner(_state); }], function (userInfo, assetOwner) { return (userInfo === null || userInfo === void 0 ? void 0 : userInfo.uuid) && (assetOwner === null || assetOwner === void 0 ? void 0 : assetOwner.uuid) && userInfo.uuid === assetOwner.uuid; }); export var selectVersionsWithApprovals = function selectVersionsWithApprovals(state) { return selectApprovalsCommonState(state).history.versions; }; export var selectVersionsWithApprovalsArray = createSelector(selectVersionsWithApprovals, function (versionsWithApprovals) { return Object.values(versionsWithApprovals); }); export var selectActiveVersionUuid = function selectActiveVersionUuid(state) { return selectApprovalsCommonState(state).history.activeVersionUuid; }; export var selectIsVersionsLoading = function selectIsVersionsLoading(state) { return selectApprovalsCommonState(state).history.isLoading; }; export var selectVersionActiveApprovalUuid = function selectVersionActiveApprovalUuid(state) { return selectApprovalsCommonState(state).history.activeApprovalUuid; }; export var selectActiveVersionApprovalsArray = createSelector([selectVersionsWithApprovals, selectActiveVersionUuid], function (versionsWithApprovals, activeVersionUuid) { var _versionsWithApproval; return activeVersionUuid && versionsWithApprovals ? (versionsWithApprovals === null || versionsWithApprovals === void 0 ? void 0 : (_versionsWithApproval = versionsWithApprovals[activeVersionUuid]) === null || _versionsWithApproval === void 0 ? void 0 : _versionsWithApproval.approvals) || [] : null; }); export var selectCurrentFile = function selectCurrentFile(state) { return selectCurrentFileByIdOrUuid(state, selectFileWindowFor(state)); }; export var selectVersionActiveApproval = createSelector([selectVersionActiveApprovalUuid, selectActiveVersionApprovalsArray], function (versionActiveApprovalUuid, versionApprovals) { return versionActiveApprovalUuid ? versionApprovals === null || versionApprovals === void 0 ? void 0 : versionApprovals.find(function (approval) { return approval.uuid === versionActiveApprovalUuid; }) : null; }); export default commonSlice.reducer;