/** * This file is part of the NocoBase (R) project. * Copyright (c) 2020-2024 NocoBase Co., Ltd. * Authors: NocoBase Team. * * This project is dual-licensed under AGPL-3.0 and NocoBase Commercial License. * For more information, please refer to: https://www.nocobase.com/agreement. */ import { ISchema } from '@formily/react'; import { uid } from '@formily/shared'; import { useActionContext, useRecord, useRequest, useResourceActionContext, useResourceContext, } from '@nocobase/client'; import { useChartQueryMetadataContext } from '../../ChartQueryMetadataProvider'; const collection = { name: 'chartsQueries', fields: [ { type: 'integer', name: 'title', interface: 'input', uiSchema: { title: '{{t("Title",{ns:"charts"})}}', type: 'string', 'x-component': 'Input', required: true, } as ISchema, }, { type: 'string', name: 'type', interface: 'select', uiSchema: { title: '{{t("Type",{ns:"charts"})}}', type: 'string', 'x-component': 'Select', required: true, enum: [ { label: '{{t("API")}}', value: 'api' }, { label: '{{t("SQL")}}', value: 'sql' }, { label: '{{t("JSON")}}', value: 'json' }, ], } as ISchema, }, ], }; export const useDestroyQueryItemAction = () => { const ctx = useChartQueryMetadataContext(); const { refresh } = useResourceActionContext(); const { resource, targetKey } = useResourceContext(); const { [targetKey]: filterByTk } = useRecord(); return { async run() { await resource.destroy({ filterByTk }); refresh(); ctx.refresh(); }, }; }; export const useDestroyAllSelectedQueriesAction = () => { const ctx = useChartQueryMetadataContext(); const { state, setState, refresh } = useResourceActionContext(); const { resource, targetKey } = useResourceContext(); return { async run() { await resource.destroy({ filterByTk: state?.selectedRowKeys || [], }); setState?.({ selectedRowKeys: [] }); refresh(); ctx.refresh(); }, }; }; export const chartsQueriesSchema: ISchema = { type: 'object', properties: { [uid()]: { type: 'void', 'x-decorator': 'ResourceActionProvider', 'x-decorator-props': { collection, resourceName: 'chartsQueries', request: { resource: 'chartsQueries', action: 'list', params: { pageSize: 50, sort: ['-id'], appends: [], }, }, }, 'x-component': 'CollectionProvider_deprecated', 'x-component-props': { collection, }, properties: { actions: { type: 'void', 'x-component': 'ActionBar', 'x-component-props': { style: { marginBottom: 16, }, }, properties: { delete: { type: 'void', title: '{{ t("Delete") }}', 'x-component': 'Action', 'x-component-props': { useAction: '{{ useDestroyAllSelectedQueriesAction }}', confirm: { title: '{{t("Delete queries",{ns:"charts"})}}', content: "{{t('Are you sure you want to delete it?')}}", }, }, }, create: { type: 'void', title: '{{t("Add query")}}', 'x-component': 'AddNewQuery', 'x-component-props': { type: 'primary', }, properties: { drawer: { type: 'void', 'x-component': 'Action.Drawer', 'x-decorator': 'Form', 'x-decorator-props': { useValues(options) { const ctx = useActionContext(); return useRequest( () => Promise.resolve({ data: { name: `s_${uid()}`, }, }), { ...options, refreshDeps: [ctx.visible] }, ); }, }, title: '{{t("Add query",{ns:"charts"})}}', properties: { title: { 'x-component': 'CollectionField', 'x-decorator': 'FormItem', }, type: { 'x-component': 'CollectionField', 'x-decorator': 'FormItem', }, footer: { type: 'void', 'x-component': 'Action.Drawer.Footer', properties: { cancel: { title: '{{t("Cancel",{ns:"charts"})}}', 'x-component': 'Action', 'x-component-props': { useAction: '{{ cm.useCancelAction }}', }, }, submit: { title: '{{t("Submit",{ns:"charts"})}}', 'x-component': 'Action', 'x-component-props': { type: 'primary', useAction: '{{ cm.useCreateAction }}', }, }, }, }, }, }, }, }, }, }, table: { type: 'void', 'x-uid': 'input', 'x-component': 'Table.Void', 'x-component-props': { rowKey: 'id', rowSelection: { type: 'checkbox', }, useDataSource: '{{ cm.useDataSourceFromRAC }}', }, properties: { title: { type: 'void', 'x-decorator': 'Table.Column.Decorator', 'x-component': 'Table.Column', properties: { title: { type: 'number', 'x-component': 'CollectionField', 'x-read-pretty': true, }, }, }, type: { type: 'void', 'x-decorator': 'Table.Column.Decorator', 'x-component': 'Table.Column', properties: { type: { type: 'string', 'x-component': 'CollectionField', 'x-read-pretty': true, }, }, }, actions: { type: 'void', title: '{{t("Actions")}}', 'x-component': 'Table.Column', properties: { actions: { type: 'void', 'x-component': 'Space', 'x-component-props': { split: '|', }, properties: { fields: { type: 'void', title: '{{t("Configure fields")}}', 'x-component': 'Action.Link', 'x-component-props': { type: 'primary', }, properties: { drawer: { type: 'void', 'x-component': 'Action.Drawer', title: '{{t("Configure fields")}}', properties: { configure: { type: 'void', 'x-component': 'ConfigureFields', }, }, }, }, }, update: { type: 'void', title: '{{t("Edit")}}', 'x-component': 'EditQuery', 'x-component-props': { type: 'primary', }, properties: { drawer: { type: 'void', 'x-component': 'Action.Drawer', 'x-decorator': 'Form', 'x-decorator-props': { useValues: '{{ cm.useValuesFromRecord }}', }, title: '{{t("Edit")}}', properties: { title: { 'x-component': 'CollectionField', 'x-decorator': 'FormItem', }, footer: { type: 'void', 'x-component': 'Action.Drawer.Footer', properties: { cancel: { title: '{{t("Cancel",{ns:"charts"})}}', 'x-component': 'Action', 'x-component-props': { useAction: '{{ cm.useCancelAction }}', }, }, submit: { title: '{{t("Submit",{ns:"charts"})}}', 'x-component': 'Action', 'x-component-props': { type: 'primary', useAction: '{{ cm.useUpdateAction }}', }, }, }, }, }, }, }, }, delete: { type: 'void', title: '{{ t("Delete") }}', 'x-component': 'Action.Link', 'x-component-props': { confirm: { title: '{{t("Delete query",{ns:"charts"})}}', content: "{{t('Are you sure you want to delete it?')}}", }, useAction: '{{ useDestroyQueryItemAction }}', }, }, }, }, }, }, }, }, }, }, }, };