skyline-console/src/pages/share/containers/ShareGroupType/actions/Create.jsx

164 lines
4.0 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 { inject, observer } from 'mobx-react';
import { ModalAction } from 'containers/Action';
import globalShareGroupTypeStore from 'stores/manila/share-group-type';
import globalShareTypeStore from 'stores/manila/share-type';
import { projectTableOptions } from 'resources/project';
import { ProjectStore } from 'stores/keystone/project';
import { updateAddSelectValueToObj } from 'utils/index';
import { extraFormItem } from 'pages/share/containers/ShareType/actions/Create';
export class Create extends ModalAction {
static id = 'create';
static title = t('Create Share Group Type');
get name() {
return t('create share group type');
}
init() {
this.store = globalShareGroupTypeStore;
this.typeStore = globalShareTypeStore;
this.projectStore = new ProjectStore();
this.getTypes();
this.getProjects();
}
getTypes() {
this.typeStore.fetchList({ is_public: 'all' });
}
getProjects() {
this.projectStore.fetchList();
}
get projects() {
return this.projectStore.list.data || [];
}
static policy = 'manila:share_group_type:create';
static allowed = () => Promise.resolve(true);
static get modalSize() {
return 'large';
}
getModalSize() {
return 'large';
}
get nameForStateUpdate() {
return ['is_public'];
}
get defaultValue() {
return { is_public: true };
}
get shareTypes() {
return globalShareTypeStore.list.data || [];
}
get formItems() {
const { is_public } = this.state;
return [
{
name: 'name',
label: t('Name'),
type: 'input-name',
names: this.store.list.data.map((it) => it.name),
required: true,
},
{
name: 'shareTypes',
label: t('Share Types'),
type: 'select-table',
required: true,
isMulti: true,
data: this.shareTypes,
isLoading: globalShareTypeStore.list.isLoading,
filterParams: [
{
label: t('Name'),
name: 'name',
},
],
columns: [
{
title: t('Name'),
dataIndex: 'name',
},
{
title: t('Description'),
dataIndex: 'description',
valueRender: 'noValue',
},
{
title: t('Public'),
dataIndex: 'is_public',
valueRender: 'yesNo',
},
],
},
{
name: 'is_public',
label: t('Public'),
type: 'check',
content: t('Public'),
required: true,
},
{
name: 'accessControl',
label: t('Access Control'),
type: 'select-table',
isMulti: true,
hidden: is_public,
data: this.projects,
isLoading: this.projectStore.list.isLoading,
...projectTableOptions,
},
extraFormItem,
];
}
onSubmit = (values) => {
const {
is_public,
accessControl = {},
extra = [],
shareTypes,
...rest
} = values;
const body = {
is_public,
share_types: shareTypes.selectedRowKeys,
...rest,
};
let projectIds = [];
const extraSpecs = updateAddSelectValueToObj(extra);
body.group_specs = extraSpecs;
if (!is_public) {
const { selectedRowKeys = [] } = accessControl;
projectIds = [...selectedRowKeys];
}
return this.store.create(body, projectIds);
};
}
export default inject('rootStore')(observer(Create));