1. Support quota info when create share 2. Disable click submit button when left quota is not enough to create Change-Id: I6af7cb3c29cad89dbceffb3c33d93eb46d0f963d
183 lines
4.2 KiB
JavaScript
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;
|