Repository URL to install this package:
|
Version:
3.12.20 ▾
|
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 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(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return _typeof(key) === "symbol" ? key : String(key); }
function _toPrimitive(input, hint) { if (_typeof(input) !== "object" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || "default"); if (_typeof(res) !== "object") return res; throw new TypeError("@@toPrimitive must return a primitive value."); } return (hint === "string" ? String : Number)(input); }
function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _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 _iterableToArray(iter) { if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter); }
function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }
function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; }
function _iterableToArrayLimit(r, l) { var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t["return"] && (u = t["return"](), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }
function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
import { useCallback, useEffect, useMemo, useState } from 'react';
import { useSelector, useDispatch } from 'react-redux';
import handlePromise from '@filerobot/utils/lib/handlePromise';
import { MANAGE_ACCESS_MODE_IDS } from '@filerobot/utils/lib/constants';
import { useModal } from '@filerobot/core/lib/hooks';
import { getAccessesDiff } from './ManageAccess.utils';
import { useExplorer, useExplorerI18n, useExplorerInformer } from '../../../hooks';
import { selectAccessRoles } from '../../../slices/common.slice';
import { selectionsCleared } from '../../../slices/selections.slice';
import { addItemAccess, deleteItemAccess, editItemAccess, editItemAccessesDetails, getItemAccesses } from './ManageAccess.thunks';
var useManageAccess = function useManageAccess(_ref) {
var folders = _ref.folders,
files = _ref.files;
var dispatch = useDispatch();
var _useExplorer = useExplorer(),
usersAndTeams = _useExplorer.opts.usersAndTeams;
var info = useExplorerInformer();
var i18n = useExplorerI18n(function (_ref2) {
var i18n = _ref2.i18n;
return i18n;
});
var toggleModal = useModal();
var accessRoles = useSelector(selectAccessRoles);
var item = (files === null || files === void 0 ? void 0 : files[0]) || (folders === null || folders === void 0 ? void 0 : folders[0]);
var isSingleFolder = (folders || []).length === 1 && !(files || []).length;
var _useState = useState(true),
_useState2 = _slicedToArray(_useState, 2),
isLoading = _useState2[0],
setIsLoading = _useState2[1];
var _useState3 = useState(),
_useState4 = _slicedToArray(_useState3, 2),
accesses = _useState4[0],
setAccesses = _useState4[1];
var _useState5 = useState(MANAGE_ACCESS_MODE_IDS.INHERIT),
_useState6 = _slicedToArray(_useState5, 2),
mode = _useState6[0],
setMode = _useState6[1];
var _useState7 = useState(),
_useState8 = _slicedToArray(_useState7, 2),
defaultAccessRoleId = _useState8[0],
setDefaultAccessRoleId = _useState8[1];
var _useState9 = useState(false),
_useState10 = _slicedToArray(_useState9, 2),
isShareModalVisible = _useState10[0],
setIsShareModalVisible = _useState10[1];
// State with initial override values. It's compared with current state and requests send based on the difference
var _useState11 = useState(),
_useState12 = _slicedToArray(_useState11, 2),
initialState = _useState12[0],
setInitialState = _useState12[1];
// State with inherit accesses
var _useState13 = useState(),
_useState14 = _slicedToArray(_useState13, 2),
inheritState = _useState14[0],
setInheritState = _useState14[1];
var isInheritMode = mode === MANAGE_ACCESS_MODE_IDS.INHERIT;
var isHighestDefaultRoleSelected = useMemo(function () {
var _at;
return isFinite(defaultAccessRoleId) && defaultAccessRoleId === ((_at = (accessRoles || []).at(-1)) === null || _at === void 0 ? void 0 : _at.id);
}, [accessRoles, defaultAccessRoleId]);
var accessesUuidsWithLowerRole = useMemo(function () {
return isFinite(defaultAccessRoleId) ? (accesses || []).filter(function (access) {
var _access$role;
return (access === null || access === void 0 ? void 0 : (_access$role = access.role) === null || _access$role === void 0 ? void 0 : _access$role.id) && access.role.id <= defaultAccessRoleId;
}).map(function (access) {
return access.access_uuid;
}) : [];
}, [accesses, defaultAccessRoleId]);
useEffect(function () {
if (item) {
setIsLoading(true);
handlePromise(dispatch(getItemAccesses({
itemUuid: item.uuid,
isFolder: isSingleFolder
})), function (response) {
var _response$folder, _response$folder2, _response$folder2$def, _response$folder2$def2, _response$accesses, _response$accesses2;
var availableUuids = (usersAndTeams || []).map(function (userOrTeam) {
return userOrTeam.uuid;
});
var initialMode = (response === null || response === void 0 ? void 0 : (_response$folder = response.folder) === null || _response$folder === void 0 ? void 0 : _response$folder.stop_inherit) === true ? MANAGE_ACCESS_MODE_IDS.OVERRIDE : MANAGE_ACCESS_MODE_IDS.INHERIT;
var initialDetails = {
mode: initialMode,
roleId: response === null || response === void 0 ? void 0 : (_response$folder2 = response.folder) === null || _response$folder2 === void 0 ? void 0 : (_response$folder2$def = _response$folder2.default_gallery_role) === null || _response$folder2$def === void 0 ? void 0 : (_response$folder2$def2 = _response$folder2$def.actual) === null || _response$folder2$def2 === void 0 ? void 0 : _response$folder2$def2.id,
accesses: [].concat(_toConsumableArray(((response === null || response === void 0 ? void 0 : response.per_teams) || (response === null || response === void 0 ? void 0 : (_response$accesses = response.accesses) === null || _response$accesses === void 0 ? void 0 : _response$accesses.per_teams) || []).map(function (access) {
return _objectSpread(_objectSpread({}, access), {}, {
isTeam: true
});
})), _toConsumableArray((response === null || response === void 0 ? void 0 : response.per_users) || (response === null || response === void 0 ? void 0 : (_response$accesses2 = response.accesses) === null || _response$accesses2 === void 0 ? void 0 : _response$accesses2.per_users) || [])).map(function (item) {
var _item;
return _objectSpread(_objectSpread({}, item), {}, {
isHidden: !availableUuids.includes((_item = item[item.isTeam ? 'team' : 'user']) === null || _item === void 0 ? void 0 : _item.uuid),
access_uuid: item.access_uuid || item.uuid
});
})
};
if (initialMode === MANAGE_ACCESS_MODE_IDS.INHERIT) {
// BE sent inherited accesses
setInheritState(initialDetails);
} else {
// BE sent override accesses
setInitialState(initialDetails);
setAccesses(initialDetails.accesses);
setMode(initialDetails.mode);
setDefaultAccessRoleId(initialDetails.roleId);
}
}, undefined, function () {
return setIsLoading(false);
});
}
}, [item]);
useEffect(function () {
// Switched from INHERIT to OVERRIDE
if (inheritState && mode === MANAGE_ACCESS_MODE_IDS.OVERRIDE) {
setAccesses((inheritState.accesses || []).map(function (_access) {
return _objectSpread(_objectSpread({}, _access), {}, {
_isNewAccess: true
});
}));
setDefaultAccessRoleId(inheritState.roleId);
}
}, [mode]);
var deleteAccessFromState = useCallback(function (accessUuid) {
var newAccesses = _toConsumableArray(accesses || []);
var accessIndex = newAccesses.findIndex(function (access) {
return access.access_uuid === accessUuid;
});
if (accessIndex > -1) {
newAccesses.splice(accessIndex, 1);
setAccesses(newAccesses);
}
}, [accesses]);
var changeAccessRoleState = useCallback(function (accessUuid, role) {
var newAccesses = _toConsumableArray(accesses || []);
var accessIndex = newAccesses.findIndex(function (access) {
return access.access_uuid === accessUuid;
});
if (accessIndex > -1) {
var _newAccesses$accessIn;
newAccesses[accessIndex] = _objectSpread(_objectSpread({}, newAccesses[accessIndex] || {}), {}, {
role: _objectSpread(_objectSpread({}, ((_newAccesses$accessIn = newAccesses[accessIndex]) === null || _newAccesses$accessIn === void 0 ? void 0 : _newAccesses$accessIn.role) || {}), role)
});
setAccesses(newAccesses);
}
}, [accesses]);
var addNewAccessesToState = useCallback(function () {
var selectedUsersAndTeams = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];
var role = arguments.length > 1 ? arguments[1] : undefined;
var newAccesses = (selectedUsersAndTeams || []).map(function (userOrTeam, index) {
var _userOrTeam$isTeam;
return _defineProperty({
access_uuid: Date.now() + index,
_isNewAccess: true,
role: {
id: role === null || role === void 0 ? void 0 : role.id,
name: role === null || role === void 0 ? void 0 : role.name
},
isTeam: (_userOrTeam$isTeam = userOrTeam === null || userOrTeam === void 0 ? void 0 : userOrTeam.isTeam) !== null && _userOrTeam$isTeam !== void 0 ? _userOrTeam$isTeam : false
}, userOrTeam !== null && userOrTeam !== void 0 && userOrTeam.isTeam ? 'team' : 'user', userOrTeam);
});
setAccesses([].concat(_toConsumableArray(accesses || []), _toConsumableArray(newAccesses)));
}, [accesses]);
var saveAccesses = useCallback(function () {
var _getAccessesDiff = getAccessesDiff(initialState === null || initialState === void 0 ? void 0 : initialState.accesses, accesses),
uuidsToBeDeleted = _getAccessesDiff.uuidsToBeDeleted,
forEditRole = _getAccessesDiff.forEditRole,
forCreate = _getAccessesDiff.forCreate;
var requests = _toConsumableArray((initialState === null || initialState === void 0 ? void 0 : initialState.roleId) !== defaultAccessRoleId || (initialState === null || initialState === void 0 ? void 0 : initialState.mode) !== mode ? [dispatch(editItemAccessesDetails({
mode: mode,
roleId: defaultAccessRoleId,
fileOrFolderUuid: item.uuid,
isFolder: isSingleFolder
}))] : []);
if (!isInheritMode) {
requests = [].concat(_toConsumableArray(requests), _toConsumableArray(uuidsToBeDeleted.map(function (accessUuid) {
return dispatch(deleteItemAccess(accessUuid));
})), _toConsumableArray(forEditRole.map(function (access) {
var _access2, _access$role2, _editItemAccess;
return dispatch(editItemAccess((_editItemAccess = {
accessUuid: access.access_uuid
}, _defineProperty(_editItemAccess, access.isTeam ? 'teamsUuids' : 'usersUuids', [(_access2 = access[access.isTeam ? 'team' : 'user']) === null || _access2 === void 0 ? void 0 : _access2.uuid]), _defineProperty(_editItemAccess, "roleId", (_access$role2 = access.role) === null || _access$role2 === void 0 ? void 0 : _access$role2.id), _defineProperty(_editItemAccess, isSingleFolder ? 'foldersUuids' : 'filesUuids', [item.uuid]), _editItemAccess)));
})), _toConsumableArray(forCreate.map(function (access) {
var _access3, _access$role3, _addItemAccess;
return dispatch(addItemAccess((_addItemAccess = {}, _defineProperty(_addItemAccess, access.isTeam ? 'teamsUuids' : 'usersUuids', [(_access3 = access[access.isTeam ? 'team' : 'user']) === null || _access3 === void 0 ? void 0 : _access3.uuid]), _defineProperty(_addItemAccess, "roleId", (_access$role3 = access.role) === null || _access$role3 === void 0 ? void 0 : _access$role3.id), _defineProperty(_addItemAccess, "fileOrFolderUuid", item.uuid), _defineProperty(_addItemAccess, "isFolder", isSingleFolder), _addItemAccess)));
})));
}
setIsLoading(true);
Promise.all(requests).then(function () {
if (requests.length) info(i18n('explorerManageAccessSavedSuccessfullyInfo'), 'success');
toggleModal(null);
dispatch(selectionsCleared());
})["finally"](function () {
return setIsLoading(false);
});
}, [accesses, initialState, item, defaultAccessRoleId, mode, isInheritMode]);
return {
item: item,
mode: mode,
setMode: setMode,
isLoading: isLoading,
accesses: accesses,
defaultAccessRoleId: defaultAccessRoleId,
setDefaultAccessRoleId: setDefaultAccessRoleId,
isShareModalVisible: isShareModalVisible,
setIsShareModalVisible: setIsShareModalVisible,
isInheritMode: isInheritMode,
deleteAccessFromState: deleteAccessFromState,
changeAccessRoleState: changeAccessRoleState,
addNewAccessesToState: addNewAccessesToState,
saveAccesses: saveAccesses,
inheritState: inheritState,
isHighestDefaultRoleSelected: isHighestDefaultRoleSelected,
accessesUuidsWithLowerRole: accessesUuidsWithLowerRole
};
};
export default useManageAccess;