@filerobot/approvals
Version:
Asset approvals package for Filerobot
597 lines (595 loc) • 31.1 kB
JavaScript
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;