skyline-console/src/stores/heat/stack.js

96 lines
2.3 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 '../base';
export class StackStore extends Base {
@observable
template = null;
get client() {
return client.heat.stacks;
}
detailFetchByClient(resourceParams) {
const { id, name } = resourceParams;
return this.client.show({ id, name });
}
updateParamsSortPage = (params, sortKey, sortOrder) => {
if (sortKey && sortOrder) {
params.sort_keys = sortKey;
params.sort_dir = sortOrder === 'descend' ? 'desc' : 'asc';
}
};
get paramsFuncPage() {
return (params) => {
const { current, all_projects, ...rest } = params;
const newParams = {
...rest,
with_count: true,
};
if (all_projects) {
newParams.global_tenant = true;
} else {
newParams.tenant = this.currentProjectId;
}
return newParams;
};
}
get mapperBeforeFetchProject() {
return (data) => ({
project_id: data.project,
...data,
});
}
get mapper() {
return (data) => ({
name: data.stack_name,
...data,
});
}
@action
create(body) {
return this.submitting(this.client.create(body));
}
@action
edit({ id, name }, body) {
return this.submitting(this.client.update({ id, name }, body));
}
@action
delete = ({ id, name }) => this.submitting(this.client.delete({ id, name }));
@action
abandon = ({ id, name }) => {
return this.submitting(this.client.abandon({ id, name }));
};
@action
getTemplate = async ({ id, name }) => {
const result = await this.client.template({ id, name });
this.template = result;
};
}
const globalStackStore = new StackStore();
export default globalStackStore;