skyline/src/stores/manila/share.js
Jingwei.Zhang a82cd5883d feat: support quota info when create share
1. Support quota info when create share
2. Disable click submit button when left quota is not enough to create

Change-Id: I6af7cb3c29cad89dbceffb3c33d93eb46d0f963d
2022-06-30 18:12:12 +08:00

183 lines
4.2 KiB
JavaScript

// Copyright 2021 99cloud
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
import { action, observable } from 'mobx';
import client from 'client';
import Base from 'stores/base';
export class ShareStore extends Base {
@observable
zones = [];
@observable
zoneOptions = [];
@observable
quotaSet = {};
@observable
shareSizeForCreate = 0;
get client() {
return client.manila.shares;
}
get zoneClient() {
return client.manila.azones;
}
get accessClient() {
return client.manila.shareAccessRules;
}
get quotaClient() {
return client.manila.quotaSets;
}
get shareGroupClient() {
return client.manila.shareGroups;
}
get shareNetworkClient() {
return client.manila.shareNetworks;
}
get listWithDetail() {
return true;
}
parseMarker() {
return '';
}
updateMarkerParams = (limit, marker) => ({
limit,
offset: marker,
});
get paramsFuncPage() {
return (params) => {
const { current = 1, all_projects, limit = 10, ...rest } = params;
const marker = current === 1 ? '' : (current - 1) * limit;
return {
...rest,
// with_count: 'True',
all_tenants: all_projects ? 1 : 0,
offset: marker,
limit,
is_public: true,
};
};
}
get mapper() {
return (data) => {
const { project_id } = data;
return {
...data,
isMine: project_id === this.currentProjectId,
};
};
}
updateParamsSortPage = (params, sortKey, sortOrder) => {
if (sortKey && sortOrder) {
params.sort_key = sortKey;
params.sort_dir = sortOrder === 'descend' ? 'desc' : 'asc';
}
};
@action
async fetchAvailableZones() {
const { availability_zones: zones = [] } = await this.zoneClient.list();
this.zones = zones;
this.zoneOptions = zones.map((it) => {
return {
value: it.id,
label: it.name,
};
});
}
async detailDidFetch(item) {
const { id, share_group_id, share_network_id } = item || {};
const newItem = { ...item };
const reqs = [
this.client.exportLocations.list(id),
this.accessClient.list({ share_id: id }),
share_group_id ? this.shareGroupClient.show(share_group_id) : null,
share_network_id ? this.shareNetworkClient.show(share_network_id) : null,
];
const [exportLocationResult, accessResult, groupResult, networkResult] =
await Promise.all(reqs);
newItem.exportLocations = exportLocationResult.export_locations;
if (share_group_id) {
newItem.shareGroup = groupResult.share_group;
}
if (share_network_id) {
newItem.shareNetwork = networkResult.share_network;
}
newItem.accessList = accessResult.access_list;
return newItem;
}
@action
async fetchQuota() {
const result = await this.quotaClient.showDetail(this.currentProjectId);
this.quotaSet = result.quota_set;
}
@action
update(id, data) {
const body = {};
body[this.responseKey] = data;
return this.submitting(this.client.update(id, body));
}
@action
extendSize(id, data) {
const body = {
extend: data,
};
return this.submitting(this.client.action(id, body));
}
@action
resetStatus(id, data) {
const body = {
reset_status: data,
};
return this.submitting(this.client.action(id, body));
}
deleteItem = (data) => {
const { id, share_group_id } = data;
if (!share_group_id) {
return this.client.delete(id);
}
return this.client.delete(id, null, { share_group_id });
};
@action
delete = (data) => this.submitting(this.deleteItem(data));
@action
setCreateShareSize(size = 0) {
this.shareSizeForCreate = size;
}
}
const globalShareStore = new ShareStore();
export default globalShareStore;