From a0164e930a623703423764f969a494f035f195e7 Mon Sep 17 00:00:00 2001 From: geido Date: Wed, 3 Nov 2021 16:56:00 +0000 Subject: [PATCH 01/20] Certify charts --- .../src/components/ListView/types.ts | 1 + .../components/PropertiesModal/index.tsx | 109 +++++++++++------- superset-frontend/src/types/Chart.ts | 4 + .../src/views/CRUD/chart/ChartList.tsx | 28 ++++- superset-frontend/src/views/CRUD/hooks.ts | 2 + superset/charts/api.py | 44 ++++--- superset/charts/filters.py | 29 ++++- superset/charts/schemas.py | 63 +++++++--- ...53d_add_certifications_columns_to_slice.py | 36 ++++++ superset/models/slice.py | 4 + superset/views/base_api.py | 24 ++-- 11 files changed, 261 insertions(+), 83 deletions(-) create mode 100644 superset/migrations/versions/f9847149153d_add_certifications_columns_to_slice.py diff --git a/superset-frontend/src/components/ListView/types.ts b/superset-frontend/src/components/ListView/types.ts index ade33df610242..89824885480f9 100644 --- a/superset-frontend/src/components/ListView/types.ts +++ b/superset-frontend/src/components/ListView/types.ts @@ -111,4 +111,5 @@ export enum FilterOperator { between = 'between', dashboardIsFav = 'dashboard_is_favorite', chartIsFav = 'chart_is_favorite', + chartIsCertified = 'chart_is_certified', } diff --git a/superset-frontend/src/explore/components/PropertiesModal/index.tsx b/superset-frontend/src/explore/components/PropertiesModal/index.tsx index 723f77bfdc5bd..8c6eccd4645a2 100644 --- a/superset-frontend/src/explore/components/PropertiesModal/index.tsx +++ b/superset-frontend/src/explore/components/PropertiesModal/index.tsx @@ -18,14 +18,13 @@ */ import React, { useMemo, useState, useEffect, useCallback } from 'react'; import Modal from 'src/components/Modal'; -import { Row, Col, Input, TextArea } from 'src/common/components'; +import { Form, Row, Col, Input, TextArea } from 'src/common/components'; import Button from 'src/components/Button'; import { Select } from 'src/components'; import { SelectValue } from 'antd/lib/select'; import rison from 'rison'; -import { t, SupersetClient } from '@superset-ui/core'; +import { t, SupersetClient, styled } from '@superset-ui/core'; import Chart, { Slice } from 'src/types/Chart'; -import { Form, FormItem } from 'src/components/Form'; import { getClientErrorObject } from 'src/utils/getClientErrorObject'; type PropertiesModalProps = { @@ -35,6 +34,12 @@ type PropertiesModalProps = { onSave: (chart: Chart) => void; }; +const FormItem = Form.Item; + +const StyledFormItem = styled(Form.Item)` + margin-bottom: 0; +`; + export default function PropertiesModal({ slice, onHide, @@ -42,13 +47,9 @@ export default function PropertiesModal({ show, }: PropertiesModalProps) { const [submitting, setSubmitting] = useState(false); - + const [form] = Form.useForm(); // values of form inputs const [name, setName] = useState(slice.slice_name || ''); - const [description, setDescription] = useState(slice.description || ''); - const [cacheTimeout, setCacheTimeout] = useState( - slice.cache_timeout != null ? slice.cache_timeout : '', - ); const [selectedOwners, setSelectedOwners] = useState( null, ); @@ -104,14 +105,25 @@ export default function PropertiesModal({ [], ); - const onSubmit = async (event: React.FormEvent) => { - event.stopPropagation(); - event.preventDefault(); + const onSubmit = async (values: { + certified_by?: string; + certification_details?: string; + description?: string; + cache_timeout?: number; + }) => { setSubmitting(true); + const { + certified_by, + certification_details, + description, + cache_timeout, + } = values; const payload: { [key: string]: any } = { slice_name: name || null, description: description || null, - cache_timeout: cacheTimeout || null, + cache_timeout: cache_timeout || null, + certified_by: certified_by || null, + certification_details: certification_details || null, }; if (selectedOwners) { payload.owners = (selectedOwners as { @@ -169,11 +181,10 @@ export default function PropertiesModal({