Why Gemfury? Push, build, and install  RubyGems npm packages Python packages Maven artifacts PHP packages Go Modules Debian packages RPM packages NuGet packages

Repository URL to install this package:

Details    
@filerobot/explorer / lib / components / Modals / ManageAccess / useManageAccess.hook.js
Size: Mime:
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;